${html}`, 'text/html');\n doc.normalize();\n const element = doc.body.firstChild;\n if (element) {\n sanitizeNode( /** @type Element */element);\n return new XMLSerializer().serializeToString(element);\n } else {\n // handle the case that document parsing\n // does not work at all, due to HTML gibberish\n return '';\n }\n}\n\n/**\n * Recursively sanitize a HTML node, potentially\n * removing it, its children or attributes.\n *\n * Inspired by https://github.com/developit/snarkdown/issues/70\n * and https://github.com/cure53/DOMPurify. Simplified\n * for our use-case.\n *\n * @param {Element} node\n */\nfunction sanitizeNode(node) {\n // allow text nodes\n if (node.nodeType === NODE_TYPE_TEXT) {\n return;\n }\n\n // disallow all other nodes but Element\n if (node.nodeType !== NODE_TYPE_ELEMENT) {\n return node.remove();\n }\n const lcTag = node.tagName.toLowerCase();\n\n // disallow non-whitelisted tags\n if (!ALLOWED_NODES.includes(lcTag)) {\n return node.remove();\n }\n const attributes = node.attributes;\n\n // clean attributes\n for (let i = attributes.length; i--;) {\n const attribute = attributes[i];\n const name = attribute.name;\n const lcName = name.toLowerCase();\n\n // normalize node value\n const value = attribute.value.trim();\n node.removeAttribute(name);\n const valid = isValidAttribute(lcTag, lcName, value);\n if (valid) {\n node.setAttribute(name, value);\n }\n }\n\n // force noopener on target=\"_blank\" links\n if (lcTag === 'a' && node.getAttribute('target') === '_blank' && node.getAttribute('rel') !== 'noopener') {\n node.setAttribute('rel', 'noopener');\n }\n for (let i = node.childNodes.length; i--;) {\n sanitizeNode( /** @type Element */node.childNodes[i]);\n }\n}\n\n/**\n * Validates attributes for validity.\n *\n * @param {string} lcTag\n * @param {string} lcName\n * @param {string} value\n * @return {boolean}\n */\nfunction isValidAttribute(lcTag, lcName, value) {\n // disallow most attributes based on whitelist\n if (!ALLOWED_ATTRIBUTES.includes(lcName)) {\n return false;\n }\n\n // disallow \"DOM clobbering\" / polution of document and wrapping form elements\n if ((lcName === 'id' || lcName === 'name') && (value in document || value in FORM_ELEMENT)) {\n return false;\n }\n if (lcName === 'target' && value !== '_blank') {\n return false;\n }\n\n // allow valid url links only\n if (lcName === 'href' && !ALLOWED_URI_PATTERN.test(value.replace(ATTR_WHITESPACE_PATTERN, ''))) {\n return false;\n }\n return true;\n}\n\nfunction PropertyTooltip(props) {\n const {\n tooltip\n } = props;\n return tooltip && (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Markup, {\n markup: sanitizeHTML(tooltip),\n trim: false\n });\n}\n\nfunction usePropertyAccessors(bpmnFactory, commandStack, element, property) {\n const directSet = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(propertySetter$1(bpmnFactory, commandStack, element, property), [bpmnFactory, commandStack, element, property]);\n const directGet = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(propertyGetter$1(element, property), [element, property]);\n const [isFeelEnabled, setIsFeelEnabled] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useState)(feelEnabled(property, directGet()));\n const handleFeelToggle = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(value => {\n if (!isFeelEnabled && typeof value === 'string' && value.startsWith('=')) {\n setIsFeelEnabled(true);\n }\n if (isFeelEnabled && (typeof value !== 'string' || !value.startsWith('='))) {\n setIsFeelEnabled(false);\n }\n }, [isFeelEnabled]);\n const set = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)((value, error) => {\n handleFeelToggle(value);\n directSet(toFeelExpression(value, property.type));\n }, [directSet, property, handleFeelToggle]);\n const get = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(() => {\n if (isFeelEnabled) {\n return directGet();\n }\n return fromFeelExpression(directGet(), property.type);\n }, [directGet, property, isFeelEnabled]);\n if (!isSpecialFeelProperty(property)) {\n return [directGet, directSet];\n }\n return [get, set];\n}\nconst isSpecialFeelProperty = property => {\n return ['optional', 'static'].includes(property.feel) && ['Boolean', 'Number'].includes(property.type);\n};\nconst toFeelExpression = (value, type) => {\n if (typeof value === 'string' && value.startsWith('=')) {\n return value;\n }\n if (type === 'Boolean') {\n value = value === 'false' ? false : value;\n return '=' + !!value;\n }\n if (typeof value === 'undefined') {\n return value;\n }\n return '=' + value.toString();\n};\nconst fromFeelExpression = (value, type) => {\n if (typeof value === 'undefined') {\n return value;\n }\n if (typeof value === 'string' && value.startsWith('=')) {\n value = value.slice(1);\n }\n if (type === 'Number') {\n return Number(value);\n }\n if (type === 'Boolean') {\n return value !== 'false';\n }\n return value;\n};\nconst feelEnabled = (property, value) => {\n if (!isSpecialFeelProperty(property)) {\n return true;\n }\n if (property.type === 'Boolean') {\n return !(value === '=true' || value === '=false');\n }\n if (property.type === 'Number') {\n return isNaN(fromFeelExpression(value, property.type));\n }\n return true;\n};\nfunction propertyGetter$1(element, property) {\n return function getValue() {\n return getPropertyValue(element, property);\n };\n}\nfunction propertySetter$1(bpmnFactory, commandStack, element, property) {\n return function setValue(value) {\n return setPropertyValue(bpmnFactory, commandStack, element, property, value);\n };\n}\nfunction propertyValidator$1(translate, property) {\n return value => validateProperty(value, property, translate);\n}\nfunction groupByGroupId$1(properties) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.groupBy)(properties, 'group');\n}\nfunction findCustomGroup$1(groups, id) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(groups, g => g.id === id);\n}\n\n/**\n * Is the given property executed by the engine?\n *\n * @param { { binding: { type: string } } } property\n * @return {boolean}\n */\nfunction isExternalProperty(property) {\n return ['zeebe:property', 'zeebe:taskHeader'].includes(property.binding.type);\n}\n\nfunction PropertyDescription(props) {\n const {\n description\n } = props;\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return description && (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Markup, {\n markup: sanitizeHTML(translate(description)),\n trim: false\n });\n}\n\nfunction TextAreaProperty$1(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n language,\n placeholder,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextAreaEntry)({\n debounce,\n element,\n id,\n label,\n feel,\n placeholder,\n monospace: !!language,\n autoResize: true,\n description: PropertyDescription({\n description\n }),\n getValue: propertyGetter$1(element, property),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction StringProperty$1(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n placeholder,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextFieldEntry)({\n debounce,\n element,\n getValue: propertyGetter$1(element, property),\n id,\n label,\n feel,\n placeholder,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction useServiceIfAvailable(service, fallback) {\n const resolved = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)(service, false);\n if (!resolved) {\n return fallback;\n }\n return resolved;\n}\nfunction withVariableContext(Component) {\n return props => {\n const {\n bpmnElement,\n element\n } = props;\n const bo = (bpmnElement || element).businessObject;\n const [variables, setVariables] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useState)([]);\n const eventBus = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('eventBus');\n const variableResolver = useServiceIfAvailable('variableResolver', {\n getVariablesForElement: _bpmn_io_extract_process_variables_zeebe__WEBPACK_IMPORTED_MODULE_9__.getVariablesForElement\n });\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useEffect)(() => {\n const extractVariables = async () => {\n const variables = await variableResolver.getVariablesForElement(bo);\n setVariables(variables.map(variable => {\n return {\n ...variable,\n info: variable.info || variable.origin && 'Written in ' + variable.origin.map(origin => origin.name || origin.id).join(', ')\n };\n }));\n };\n\n // The callback must return undefined, so the event propagation is not canceled.\n // Cf. https://github.com/camunda/camunda-modeler/issues/3392\n const callback = () => {\n extractVariables();\n };\n eventBus.on('commandStack.changed', callback);\n callback();\n return () => {\n eventBus.off('commandStack.changed', callback);\n };\n }, [bo]);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Component, {\n ...props,\n variables: variables\n });\n };\n}\n\nfunction withTooltipContainer(Component) {\n return props => {\n const tooltipContainer = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useMemo)(() => {\n const config = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('config');\n return config && config.propertiesPanel && config.propertiesPanel.feelTooltipContainer;\n }, []);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Component, {\n ...props,\n tooltipContainer: tooltipContainer\n });\n };\n}\n\nconst FeelEntry = withTooltipContainer(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.FeelEntry);\nconst FeelTextAreaEntry = withTooltipContainer(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.FeelTextAreaEntry);\nconst FeelEntryWithVariableContext = withVariableContext(FeelEntry);\nconst FeelTextAreaEntryWithVariableContext = withVariableContext(FeelTextAreaEntry);\n\nfunction FeelProperty(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n placeholder,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const TextFieldComponent = !isExternalProperty(property) ? FeelEntryWithVariableContext : FeelEntry;\n return TextFieldComponent({\n debounce,\n element,\n getValue: propertyGetter$1(element, property),\n id,\n label,\n feel,\n placeholder,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction FeelTextAreaProperty(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n placeholder,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const TextAreaComponent = !isExternalProperty(property) ? FeelTextAreaEntryWithVariableContext : FeelTextAreaEntry;\n return TextAreaComponent({\n debounce,\n element,\n getValue: propertyGetter$1(element, property),\n id,\n label,\n feel,\n placeholder,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction DropdownProperty$1(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const getOptions = () => {\n const {\n choices,\n optional\n } = property;\n let dropdownOptions = [];\n dropdownOptions = choices.map(({\n name,\n value\n }) => {\n return {\n label: name,\n value\n };\n });\n if (optional) {\n dropdownOptions = [{\n label: '',\n value: undefined\n }, ...dropdownOptions];\n }\n return dropdownOptions;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.SelectEntry)({\n element,\n id,\n label,\n getOptions,\n description: PropertyDescription({\n description\n }),\n getValue: propertyGetter$1(element, property),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction BooleanProperty$1(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n tooltip,\n feel\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const Component = feel === 'optional' ? _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.FeelCheckboxEntry : _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.CheckboxEntry;\n const [getValue, setValue] = usePropertyAccessors(bpmnFactory, commandStack, element, property);\n return Component({\n element,\n debounce,\n translate,\n getValue,\n id,\n label,\n description: PropertyDescription({\n description\n }),\n setValue,\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction NumberProperty(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n tooltip\n } = property;\n const Component = feel === 'optional' ? _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.FeelNumberEntry : _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.NumberFieldEntry;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const [getValue, setValue] = usePropertyAccessors(bpmnFactory, commandStack, element, property);\n const validate = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(value => {\n if (isSpecialFeelProperty(property) && (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isNumber)(value) && value.toString().includes('e')) {\n return translate('Scientific notation is disallowed in FEEL.');\n }\n const defaultValidator = propertyValidator$1(translate, property);\n return defaultValidator(value);\n }, [translate, property]);\n return Component({\n debounce,\n element,\n getValue,\n id,\n label,\n description: PropertyDescription({\n description\n }),\n setValue,\n validate: validate,\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction CustomProperties$1(props) {\n const {\n element,\n elementTemplate,\n injector\n } = props;\n const translate = injector.get('translate');\n const groups = [];\n const {\n id,\n properties,\n groups: propertyGroups\n } = elementTemplate;\n\n // (1) group properties by group id\n const groupedProperties = groupByGroupId$1(properties);\n const defaultProps = [];\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(groupedProperties, (properties, groupId) => {\n const group = findCustomGroup$1(propertyGroups, groupId);\n if (!group) {\n return defaultProps.push(...properties);\n }\n addCustomGroup$1(groups, {\n element,\n id: `ElementTemplates__CustomProperties-${groupId}`,\n label: translate(group.label),\n openByDefault: group.openByDefault,\n properties: properties,\n templateId: `${id}-${groupId}`,\n tooltip: PropertyTooltip({\n tooltip: group.tooltip\n })\n });\n });\n\n // (2) add default custom props\n if (defaultProps.length) {\n addCustomGroup$1(groups, {\n id: 'ElementTemplates__CustomProperties',\n label: translate('Custom properties'),\n element,\n properties: defaultProps,\n templateId: id\n });\n }\n return groups;\n}\nfunction addCustomGroup$1(groups, props) {\n const {\n element,\n id,\n label,\n openByDefault = true,\n properties,\n templateId,\n tooltip\n } = props;\n const customPropertiesGroup = {\n id,\n label,\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.Group,\n entries: [],\n shouldOpen: openByDefault,\n tooltip\n };\n properties.forEach((property, index) => {\n const entry = createCustomEntry$1(`custom-entry-${templateId}-${index}`, element, property);\n if (entry) {\n customPropertiesGroup.entries.push(entry);\n }\n });\n if (customPropertiesGroup.entries.length) {\n groups.push(customPropertiesGroup);\n }\n}\nfunction createCustomEntry$1(id, element, property) {\n let {\n type,\n feel\n } = property;\n if (!type) {\n type = getDefaultType$1(property);\n }\n if (feel === 'required') {\n return {\n id,\n component: FeelProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isFeelEntryEdited,\n property\n };\n }\n if (type === 'Number') {\n return {\n id,\n component: NumberProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isNumberFieldEntryEdited,\n property\n };\n }\n if (type === 'Boolean') {\n return {\n id,\n component: BooleanProperty$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isCheckboxEntryEdited,\n property\n };\n }\n if (type === 'Dropdown') {\n return {\n id,\n component: DropdownProperty$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isSelectEntryEdited,\n property\n };\n }\n if (type === 'String') {\n if (feel) {\n return {\n id,\n component: FeelProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isFeelEntryEdited,\n property\n };\n }\n return {\n id,\n component: StringProperty$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isTextFieldEntryEdited,\n property\n };\n }\n if (type === 'Text') {\n if (feel) {\n return {\n id,\n component: FeelTextAreaProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isFeelEntryEdited,\n property\n };\n }\n return {\n id,\n component: TextAreaProperty$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isTextAreaEntryEdited,\n property\n };\n }\n}\nfunction getDefaultType$1(property) {\n const {\n binding\n } = property;\n const {\n type\n } = binding;\n if ([PROPERTY_TYPE$1, ZEEBE_TASK_DEFINITION_TYPE_TYPE, ZEEBE_TASK_DEFINITION, ZEBBE_INPUT_TYPE, ZEEBE_OUTPUT_TYPE, ZEEBE_PROPERTY_TYPE, ZEEBE_TASK_HEADER_TYPE].includes(type)) {\n return 'String';\n }\n}\n\nfunction ReferenceSelectEntry(props) {\n const {\n autoFocusEntry,\n element,\n getOptions\n } = props;\n const options = getOptions(element);\n const prevOptions = (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.usePrevious)(options);\n\n // auto focus specifc other entry when options changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useEffect)(() => {\n if (autoFocusEntry && prevOptions && options.length > prevOptions.length) {\n const entry = (0,min_dom__WEBPACK_IMPORTED_MODULE_18__.query)(`[data-entry-id=\"${autoFocusEntry}\"]`);\n const focusableInput = (0,min_dom__WEBPACK_IMPORTED_MODULE_18__.query)('.bio-properties-panel-input', entry);\n if (focusableInput) {\n focusableInput.select();\n }\n }\n }, [options]);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.SelectEntry, {\n ...props\n });\n}\n\nfunction getEventDefinition(element, eventType) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const eventDefinitions = businessObject.get('eventDefinitions') || [];\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(eventDefinitions, function (definition) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(definition, eventType);\n });\n}\nfunction isMessageSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'bpmn:ReceiveTask') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(element, ['bpmn:StartEvent', 'bpmn:EndEvent', 'bpmn:IntermediateThrowEvent', 'bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent']) && !!getMessageEventDefinition(element);\n}\nfunction getMessageEventDefinition(element) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'bpmn:ReceiveTask')) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n }\n return getEventDefinition(element, 'bpmn:MessageEventDefinition');\n}\nfunction getMessage(element) {\n const messageEventDefinition = getMessageEventDefinition(element);\n return messageEventDefinition && messageEventDefinition.get('messageRef');\n}\nfunction getSignalEventDefinition(element) {\n return getEventDefinition(element, 'bpmn:SignalEventDefinition');\n}\n\nconst EMPTY_OPTION = '';\nconst CREATE_NEW_OPTION = 'create-new';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array
} entries\n */\nfunction MessageProps(props) {\n const {\n element\n } = props;\n if (!isMessageSupported(element)) {\n return [];\n }\n return [{\n id: 'messageRef',\n component: MessageRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isSelectEntryEdited\n }];\n}\nfunction MessageRef(props) {\n const {\n element\n } = props;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory');\n const modeling = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('modeling');\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const messageEventDefinition = getMessageEventDefinition(element);\n const getValue = () => {\n const message = getMessage(element);\n if (message) {\n return message.get('id');\n }\n return EMPTY_OPTION;\n };\n const setValue = value => {\n const root = getRoot(messageEventDefinition);\n let message;\n\n // (1) create new message\n if (value === CREATE_NEW_OPTION) {\n const id = nextId('Message_');\n message = createElement('bpmn:Message', {\n id,\n name: id\n }, root, bpmnFactory);\n value = message.get('id');\n }\n\n // (2) update (or remove) messageRef\n message = findRootElementById(messageEventDefinition, 'bpmn:Message', value) || message;\n\n // (3) commit all updates\n return modeling.updateModdleProperties(element, messageEventDefinition, {\n messageRef: message\n });\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION,\n label: translate('Create new ...')\n }];\n const messages = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element), 'bpmn:Message');\n const filteredMessages = withoutTemplatedMessages(messages);\n sortByName(filteredMessages).forEach(message => {\n options.push({\n value: message.get('id'),\n label: message.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'messageRef',\n label: translate('Global message reference'),\n autoFocusEntry: 'messageName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction withoutTemplatedMessages(messages) {\n return messages.filter(message => !message.get('zeebe:modelerTemplate'));\n}\n\n// helper /////////////////////////\n\nfunction sortByName(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nconst LOWER_PRIORITY$1 = 300;\nconst ALWAYS_DISPLAYED_GROUPS$1 = ['general', 'documentation', 'multiInstance'];\nlet ElementTemplatesPropertiesProvider$1 = class ElementTemplatesPropertiesProvider {\n constructor(elementTemplates, propertiesPanel, injector) {\n propertiesPanel.registerProvider(LOWER_PRIORITY$1, this);\n this._elementTemplates = elementTemplates;\n this._injector = injector;\n }\n getGroups(element) {\n return groups => {\n const injector = this._injector;\n updateMessageGroup(groups, element);\n if (!this._shouldShowTemplateProperties(element)) {\n return groups;\n }\n const translate = injector.get('translate');\n\n // (0) Copy provided groups\n groups = groups.slice();\n const templatesGroup = {\n element,\n id: 'ElementTemplates__Template',\n label: translate('Template'),\n component: createElementTemplatesGroup({\n getTemplateId: getTemplateId$1\n }),\n entries: TemplateProps({\n element,\n elementTemplates: this._elementTemplates\n })\n };\n\n // (1) Add templates group\n addGroupsAfter$1(ALWAYS_DISPLAYED_GROUPS$1, groups, [templatesGroup]);\n let elementTemplate = this._elementTemplates.get(element);\n if (elementTemplate) {\n elementTemplate = applyConditions(element, elementTemplate);\n const templateSpecificGroups = [].concat(CustomProperties$1({\n element,\n elementTemplate,\n injector\n }));\n\n // (2) add template-specific properties groups\n addGroupsAfter$1('ElementTemplates__Template', groups, templateSpecificGroups);\n }\n\n // (3) apply entries visible\n if (getTemplateId$1(element)) {\n groups = filterWithEntriesVisible$1(elementTemplate || {}, groups);\n }\n return groups;\n };\n }\n _shouldShowTemplateProperties(element) {\n return getTemplateId$1(element) || this._elementTemplates.getAll(element).length;\n }\n};\nElementTemplatesPropertiesProvider$1.$inject = ['elementTemplates', 'propertiesPanel', 'injector'];\n\n// helper /////////////////////\n\nfunction updateMessageGroup(groups, element) {\n const messageGroup = findGroup(groups, 'message');\n if (!messageGroup) {\n return;\n }\n messageGroup.entries = overrideGenericEntries(messageGroup.entries, MessageProps({\n element\n }));\n}\nfunction findGroup(groups, id) {\n return groups.find(g => g.id === id);\n}\nfunction overrideGenericEntries(oldEntries, newEntries) {\n return oldEntries.map(oldEntry => newEntries.find(newEntry => newEntry.id === oldEntry.id) || oldEntry);\n}\n\n/**\n *\n * @param {string|string[]} idOrIds\n * @param {Array<{ id: string }} groups\n * @param {Array<{ id: string }>} groupsToAdd\n */\nfunction addGroupsAfter$1(idOrIds, groups, groupsToAdd) {\n let ids = idOrIds;\n if (!Array.isArray(idOrIds)) {\n ids = [idOrIds];\n }\n\n // find index of last group with provided id\n const index = groups.reduce((acc, group, index) => {\n return ids.includes(group.id) ? index : acc;\n }, -1);\n if (index !== -1) {\n groups.splice(index + 1, 0, ...groupsToAdd);\n } else {\n // add in the beginning if group with provided id is missing\n groups.unshift(...groupsToAdd);\n }\n}\nfunction filterWithEntriesVisible$1(template, groups) {\n if (!template.entriesVisible) {\n return groups.filter(group => {\n return ALWAYS_DISPLAYED_GROUPS$1.includes(group.id) || group.id.startsWith('ElementTemplates__');\n });\n }\n return groups;\n}\n\nvar propertiesProviderModule$1 = {\n __depends__: [diagram_js_lib_i18n_translate__WEBPACK_IMPORTED_MODULE_19__[\"default\"]],\n __init__: ['elementTemplatesPropertiesProvider'],\n elementTemplatesPropertiesProvider: ['type', ElementTemplatesPropertiesProvider$1]\n};\n\nvar index$1 = {\n __depends__: [coreModule$1, propertiesProviderModule$1]\n};\n\n/**\n * Converts legacy scopes descriptor to newer supported array structure.\n *\n * For example, it transforms\n *\n * scopes: {\n * 'camunda:Connector':\n * { properties: []\n * }\n * }\n *\n * to\n *\n * scopes: [\n * {\n * type: 'camunda:Connector',\n * properties: []\n * }\n * ]\n *\n * @param {ScopesDescriptor} scopes\n *\n * @returns {Array}\n */\nfunction handleLegacyScopes(scopes = []) {\n const scopesAsArray = [];\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isObject)(scopes)) {\n return scopes;\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.keys)(scopes), function (scopeName) {\n scopesAsArray.push((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n type: scopeName\n }, scopes[scopeName]));\n });\n return scopesAsArray;\n}\n\n/**\n * Create an input parameter representing the given\n * binding and value.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createInputParameter(binding, value, bpmnFactory) {\n const {\n name,\n scriptFormat\n } = binding;\n let parameterValue, parameterDefinition;\n if (scriptFormat) {\n parameterDefinition = bpmnFactory.create('camunda:Script', {\n scriptFormat,\n value\n });\n } else {\n parameterValue = value;\n }\n return bpmnFactory.create('camunda:InputParameter', {\n name,\n value: parameterValue,\n definition: parameterDefinition\n });\n}\n\n/**\n * Create an output parameter representing the given\n * binding and value.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createOutputParameter(binding, value, bpmnFactory) {\n const {\n scriptFormat,\n source\n } = binding;\n let parameterValue, parameterDefinition;\n if (scriptFormat) {\n parameterDefinition = bpmnFactory.create('camunda:Script', {\n scriptFormat,\n value: source\n });\n } else {\n parameterValue = source;\n }\n return bpmnFactory.create('camunda:OutputParameter', {\n name: value,\n value: parameterValue,\n definition: parameterDefinition\n });\n}\n\n/**\n * Create camunda property from the given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaProperty(binding, value = '', bpmnFactory) {\n const {\n name\n } = binding;\n return bpmnFactory.create('camunda:Property', {\n name,\n value\n });\n}\n\n/**\n * Create camunda:in element from given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaIn(binding, value, bpmnFactory) {\n const attrs = createCamundaInOutAttrs(binding, value);\n return bpmnFactory.create('camunda:In', attrs);\n}\n\n/**\n * Create camunda:in with businessKey element from given binding.\n *\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaInWithBusinessKey(value, bpmnFactory) {\n return bpmnFactory.create('camunda:In', {\n businessKey: value\n });\n}\n\n/**\n * Create camunda:out element from given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaOut(binding, value, bpmnFactory) {\n const attrs = createCamundaInOutAttrs(binding, value);\n return bpmnFactory.create('camunda:Out', attrs);\n}\n\n/**\n * Create camunda:executionListener element containing an inline script from given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaExecutionListener(binding, value, bpmnFactory) {\n const {\n event,\n implementationType,\n scriptFormat\n } = binding;\n\n // To guarantee backwards compatibility scriptFormat is taken into account and has precedence before any other type\n if (implementationType === 'script' || scriptFormat) {\n return bpmnFactory.create('camunda:ExecutionListener', {\n event,\n script: bpmnFactory.create('camunda:Script', {\n scriptFormat,\n value\n })\n });\n }\n return bpmnFactory.create('camunda:ExecutionListener', {\n event,\n [implementationType]: value\n });\n}\n\n/**\n * Create camunda:field element containing string or expression from given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaFieldInjection(binding, value, bpmnFactory) {\n const DEFAULT_PROPS = {\n 'string': undefined,\n 'expression': undefined,\n 'name': undefined\n };\n const props = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, DEFAULT_PROPS);\n const {\n expression,\n name\n } = binding;\n if (!expression) {\n props.string = value;\n } else {\n props.expression = value;\n }\n props.name = name;\n return bpmnFactory.create('camunda:Field', props);\n}\n\n/**\n * Create camunda:errorEventDefinition element containing expression and errorRef\n * from given binding.\n *\n * @param {String} expression\n * @param {ModdleElement} errorRef\n * @param {ModdleElement} parent\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaErrorEventDefinition(expression, errorRef, parent, bpmnFactory) {\n const errorEventDefinition = bpmnFactory.create('camunda:ErrorEventDefinition', {\n errorRef,\n expression\n });\n errorEventDefinition.$parent = parent;\n return errorEventDefinition;\n}\n\n/**\n * Create bpmn:error element containing a specific error id given by a binding.\n *\n * @param {String} bindingErrorRef\n * @param {ModdleElement} parent\n * @param {BpmnFactory} bpmnFactory\n *\n * @return { ModdleElement }\n */\nfunction createError(bindingErrorRef, parent, bpmnFactory) {\n const error = bpmnFactory.create('bpmn:Error', {\n // we need to later retrieve the error from a binding\n id: nextId('Error_' + bindingErrorRef + '_')\n });\n error.$parent = parent;\n return error;\n}\n\n// helpers //////////\n\n/**\n * Create properties for camunda:in and camunda:out types.\n */\nfunction createCamundaInOutAttrs(binding, value) {\n const properties = {};\n const {\n expression,\n source,\n sourceExpression,\n target,\n type,\n variables\n } = binding;\n\n // explicitly cover all conditions as specified here:\n // https://github.com/camunda/camunda-modeler/blob/develop/docs/element-templates/README.md#camundain\n if (type === 'camunda:in') {\n if (target && !expression && !variables) {\n properties.target = target;\n properties.source = value;\n } else if (target && expression === true && !variables) {\n properties.target = target;\n properties.sourceExpression = value;\n } else if (!target && !expression && variables === 'local') {\n properties.local = true;\n properties.variables = 'all';\n } else if (target && !expression && variables === 'local') {\n properties.local = true;\n properties.source = value;\n properties.target = target;\n } else if (target && expression && variables === 'local') {\n properties.local = true;\n properties.sourceExpression = value;\n properties.target = target;\n } else if (!target && !expression && variables === 'all') {\n properties.variables = 'all';\n } else {\n throw new Error('invalid configuration for camunda:in element template binding');\n }\n }\n\n // explicitly cover all conditions as specified here:\n // https://github.com/camunda/camunda-modeler/blob/develop/docs/element-templates/README.md#camundaout\n if (type === 'camunda:out') {\n if (source && !sourceExpression && !variables) {\n properties.target = value;\n properties.source = source;\n } else if (!source && sourceExpression && !variables) {\n properties.target = value;\n properties.sourceExpression = sourceExpression;\n } else if (!source && !sourceExpression && variables === 'all') {\n properties.variables = 'all';\n } else if (source && !sourceExpression && variables === 'local') {\n properties.local = true;\n properties.source = source;\n properties.target = value;\n } else if (!source && sourceExpression && variables === 'local') {\n properties.local = true;\n properties.sourceExpression = sourceExpression;\n properties.target = value;\n } else if (!source && !sourceExpression && variables === 'local') {\n properties.local = true;\n properties.variables = 'all';\n } else {\n throw new Error('invalid configuration for camunda:out element template binding');\n }\n }\n return properties;\n}\n\nconst CAMUNDA_SERVICE_TASK_LIKE = ['camunda:class', 'camunda:delegateExpression', 'camunda:expression'];\n\n/**\n * Applies an element template to an element. Sets `camunda:modelerTemplate` and\n * `camunda:modelerTemplateVersion`.\n */\nclass ChangeElementTemplateHandler {\n constructor(bpmnFactory, bpmnReplace, commandStack, modeling) {\n this._bpmnFactory = bpmnFactory;\n this._bpmnReplace = bpmnReplace;\n this._commandStack = commandStack;\n this._modeling = modeling;\n }\n\n /**\n * Change an element's template and update its properties as specified in `newTemplate`. Specify\n * `oldTemplate` to update from one template to another. If `newTemplate` isn't specified the\n * `camunda:modelerTemplate` and `camunda:modelerTemplateVersion` properties will be removed from\n * the element.\n *\n * @param {Object} context\n * @param {Object} context.element\n * @param {Object} [context.oldTemplate]\n * @param {Object} [context.newTemplate]\n */\n preExecute(context) {\n const newTemplate = context.newTemplate,\n oldTemplate = context.oldTemplate;\n let element = context.element;\n\n // update camunda:modelerTemplate attribute\n this._updateCamundaModelerTemplate(element, newTemplate);\n if (newTemplate) {\n element = context.element = this._updateTaskType(element, newTemplate);\n\n // update properties\n this._updateProperties(element, oldTemplate, newTemplate);\n\n // update camunda:ExecutionListener properties\n this._updateCamundaExecutionListenerProperties(element, newTemplate);\n\n // update camunda:Field properties\n this._updateCamundaFieldProperties(element, oldTemplate, newTemplate);\n\n // update camunda:In and camunda:Out properties\n this._updateCamundaInOutProperties(element, oldTemplate, newTemplate);\n\n // update camunda:InputParameter and camunda:OutputParameter properties\n this._updateCamundaInputOutputParameterProperties(element, oldTemplate, newTemplate);\n\n // update camunda:Property properties\n this._updateCamundaPropertyProperties(element, oldTemplate, newTemplate);\n\n // update camunda:ErrorEventDefinition properties\n this._updateCamundaErrorEventDefinitionProperties(element, oldTemplate, newTemplate);\n\n // update properties for each scope\n handleLegacyScopes(newTemplate.scopes).forEach(newScopeTemplate => {\n this._updateScopeProperties(element, oldTemplate, newScopeTemplate, newTemplate);\n });\n }\n }\n _getOrCreateExtensionElements(element) {\n const bpmnFactory = this._bpmnFactory,\n modeling = this._modeling;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = bpmnFactory.create('bpmn:ExtensionElements', {\n values: []\n });\n extensionElements.$parent = businessObject;\n modeling.updateProperties(element, {\n extensionElements: extensionElements\n });\n }\n return extensionElements;\n }\n\n /**\n * Update `camunda:ErrorEventDefinition` properties of specified business object. Event\n * definitions can only exist in `bpmn:ExtensionElements`.\n *\n * Ensures an bpmn:Error exists for the event definition.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateCamundaErrorEventDefinitionProperties(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:errorEventDefinition';\n });\n\n // (1) do not override if no updates\n if (!newProperties.length) {\n return;\n }\n const extensionElements = this._getOrCreateExtensionElements(element);\n const oldErrorEventDefinitions = findExtensions(element, ['camunda:ErrorEventDefinition']);\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldEventDefinition = oldProperty && findOldBusinessObject(extensionElements, oldProperty),\n newBinding = newProperty.binding;\n\n // (2) update old event definitions\n if (oldProperty && oldEventDefinition) {\n if (!propertyChanged(oldEventDefinition, oldProperty)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldEventDefinition,\n properties: {\n expression: newProperty.value\n }\n });\n }\n remove(oldErrorEventDefinitions, oldEventDefinition);\n }\n\n // (3) create new event definition + error\n else {\n const rootElement = getRoot((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element)),\n newError = createError(newBinding.errorRef, rootElement, bpmnFactory),\n newEventDefinition = createCamundaErrorEventDefinition(newProperty.value, newError, extensionElements, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: rootElement,\n properties: {\n rootElements: [...rootElement.get('rootElements'), newError]\n }\n });\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), newEventDefinition]\n }\n });\n }\n });\n\n // (4) remove old event definitions\n if (oldErrorEventDefinitions.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(extensionElements.get('values'), value => oldErrorEventDefinitions.includes(value))\n }\n });\n }\n }\n\n /**\n * Update `camunda:ExecutionListener` properties of specified business object. Execution listeners\n * will always be overridden. Execution listeners can only exist in `bpmn:ExtensionElements`.\n *\n * @param {djs.model.Base} element\n * @param {Object} newTemplate\n */\n _updateCamundaExecutionListenerProperties(element, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:executionListener';\n });\n\n // (1) do not override old execution listeners if no new execution listeners specified\n if (!newProperties.length) {\n return;\n }\n const extensionElements = this._getOrCreateExtensionElements(element);\n\n // (2) remove old execution listeners\n const oldExecutionListeners = findExtensions(element, ['camunda:ExecutionListener']);\n\n // (3) add new execution listeners\n const newExecutionListeners = newProperties.map(newProperty => {\n const newBinding = newProperty.binding,\n propertyValue = newProperty.value;\n return createCamundaExecutionListener(newBinding, propertyValue, bpmnFactory);\n });\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(extensionElements.get('values'), value => oldExecutionListeners.includes(value)), ...newExecutionListeners]\n }\n });\n }\n\n /**\n * Update `camunda:Field` properties of specified business object.\n * If business object is `camunda:ExecutionListener` or `camunda:TaskListener` `fields` property\n * will be updated. Otherwise `extensionElements.values` property will be updated.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n * @param {ModdleElement} businessObject\n */\n _updateCamundaFieldProperties(element, oldTemplate, newTemplate, businessObject) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:field';\n });\n\n // (1) do not override old fields if no new fields specified\n if (!newProperties.length) {\n return;\n }\n if (!businessObject) {\n businessObject = this._getOrCreateExtensionElements(element);\n }\n const propertyName = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(businessObject, ['camunda:ExecutionListener', 'camunda:TaskListener']) ? 'fields' : 'values';\n const oldFields = findExtensions(element, ['camunda:Field']);\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldField = oldProperty && findOldBusinessObject(businessObject, oldProperty),\n newBinding = newProperty.binding;\n\n // (2) update old fields\n if (oldProperty && oldField) {\n if (!propertyChanged(oldField, oldProperty)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldField,\n properties: {\n string: newProperty.value\n }\n });\n }\n remove(oldFields, oldField);\n }\n\n // (3) add new fields\n else {\n const newCamundaFieldInjection = createCamundaFieldInjection(newBinding, newProperty.value, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n [propertyName]: [...businessObject.get(propertyName), newCamundaFieldInjection]\n }\n });\n }\n });\n\n // (4) remove old fields\n if (oldFields.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n [propertyName]: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(businessObject.get(propertyName), value => oldFields.includes(value))\n }\n });\n }\n }\n\n /**\n * Update `camunda:In` and `camunda:Out` properties of specified business object. Only\n * `bpmn:CallActivity` and events with `bpmn:SignalEventDefinition` can have ins. Only\n * `camunda:CallActivity` can have outs.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateCamundaInOutProperties(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:in' || newBindingType === 'camunda:in:businessKey' || newBindingType === 'camunda:out';\n });\n\n // (1) do not override old fields if no new fields specified\n if (!newProperties.length) {\n return;\n }\n\n // get extension elements of either signal event definition or call activity\n const extensionElements = this._getOrCreateExtensionElements(getSignalEventDefinition(element) || element);\n const oldInsAndOuts = findExtensions(extensionElements, ['camunda:In', 'camunda:Out']);\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldBinding = oldProperty && oldProperty.binding,\n oldInOurOut = oldProperty && findOldBusinessObject(extensionElements, oldProperty),\n newPropertyValue = newProperty.value,\n newBinding = newProperty.binding,\n newBindingType = newBinding.type,\n properties = {};\n let newInOrOut;\n\n // (2) update old ins and outs\n if (oldProperty && oldInOurOut) {\n if (!propertyChanged(oldInOurOut, oldProperty)) {\n if (newBindingType === 'camunda:in') {\n if (newBinding.expression) {\n properties['camunda:sourceExpression'] = newPropertyValue;\n } else {\n properties['camunda:source'] = newPropertyValue;\n }\n } else if (newBindingType === 'camunda:in:businessKey') {\n properties['camunda:businessKey'] = newPropertyValue;\n } else if (newBindingType === 'camunda:out') {\n properties['camunda:target'] = newPropertyValue;\n }\n }\n\n // update camunda:local property if it changed\n if (oldBinding.local && !newBinding.local || !oldBinding.local && newBinding.local) {\n properties.local = newBinding.local;\n }\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.keys)(properties)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldInOurOut,\n properties\n });\n }\n remove(oldInsAndOuts, oldInOurOut);\n }\n\n // (3) add new ins and outs\n else {\n if (newBindingType === 'camunda:in') {\n newInOrOut = createCamundaIn(newBinding, newPropertyValue, bpmnFactory);\n } else if (newBindingType === 'camunda:out') {\n newInOrOut = createCamundaOut(newBinding, newPropertyValue, bpmnFactory);\n } else if (newBindingType === 'camunda:in:businessKey') {\n newInOrOut = createCamundaInWithBusinessKey(newPropertyValue, bpmnFactory);\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), newInOrOut]\n }\n });\n }\n });\n\n // (4) remove old ins and outs\n if (oldInsAndOuts.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(extensionElements.get('values'), value => oldInsAndOuts.includes(value))\n }\n });\n }\n }\n\n /**\n * Update `camunda:InputParameter` and `camunda:OutputParameter` properties of specified business\n * object. Both can only exist in `camunda:InputOutput` which can exist in `bpmn:ExtensionElements`\n * or `camunda:Connector`.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateCamundaInputOutputParameterProperties(element, oldTemplate, newTemplate, businessObject) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:inputParameter' || newBindingType === 'camunda:outputParameter';\n });\n\n // (1) do not override old inputs and outputs if no new inputs and outputs specified\n if (!newProperties.length) {\n return;\n }\n if (!businessObject) {\n businessObject = this._getOrCreateExtensionElements(element);\n }\n let inputOutput;\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'camunda:Connector')) {\n inputOutput = businessObject.get('camunda:inputOutput');\n if (!inputOutput) {\n inputOutput = bpmnFactory.create('camunda:InputOutput');\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n inputOutput\n }\n });\n }\n } else {\n inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n if (!inputOutput) {\n inputOutput = bpmnFactory.create('camunda:InputOutput');\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), inputOutput]\n }\n });\n }\n }\n const oldInputs = inputOutput.get('camunda:inputParameters') ? inputOutput.get('camunda:inputParameters').slice() : [];\n const oldOutputs = inputOutput.get('camunda:outputParameters') ? inputOutput.get('camunda:outputParameters').slice() : [];\n let propertyName;\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldInputOrOutput = oldProperty && findOldBusinessObject(businessObject, oldProperty),\n newPropertyValue = newProperty.value,\n newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n let newInputOrOutput, properties;\n\n // (2) update old inputs and outputs\n if (oldProperty && oldInputOrOutput) {\n if (!propertyChanged(oldInputOrOutput, oldProperty)) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(oldInputOrOutput, 'camunda:InputParameter')) {\n properties = {\n value: newPropertyValue\n };\n } else {\n properties = {\n name: newPropertyValue\n };\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldInputOrOutput,\n properties\n });\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(oldInputOrOutput, 'camunda:InputParameter')) {\n remove(oldInputs, oldInputOrOutput);\n } else {\n remove(oldOutputs, oldInputOrOutput);\n }\n }\n\n // (3) add new inputs and outputs\n else {\n if (newBindingType === 'camunda:inputParameter') {\n propertyName = 'inputParameters';\n newInputOrOutput = createInputParameter(newBinding, newPropertyValue, bpmnFactory);\n } else {\n propertyName = 'outputParameters';\n newInputOrOutput = createOutputParameter(newBinding, newPropertyValue, bpmnFactory);\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOutput,\n properties: {\n [propertyName]: [...inputOutput.get(propertyName), newInputOrOutput]\n }\n });\n }\n });\n\n // (4) remove old inputs and outputs\n if (oldInputs.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOutput,\n properties: {\n inputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(inputOutput.get('inputParameters'), inputParameter => oldInputs.includes(inputParameter))\n }\n });\n }\n if (oldOutputs.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOutput,\n properties: {\n outputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(inputOutput.get('outputParameters'), outputParameter => oldOutputs.includes(outputParameter))\n }\n });\n }\n }\n _updateCamundaModelerTemplate(element, newTemplate) {\n const modeling = this._modeling;\n const newId = newTemplate && newTemplate.id;\n const newVersion = newTemplate && newTemplate.version;\n if (getTemplateId(element) !== newId || getTemplateVersion(element) !== newVersion) {\n modeling.updateProperties(element, {\n 'camunda:modelerTemplate': newId,\n 'camunda:modelerTemplateVersion': newVersion\n });\n }\n }\n\n /**\n * Update `camunda:Property` properties of specified business object. `camunda:Property` can only\n * exist in `camunda:Properties`.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n * @param {ModdleElement} businessObject\n */\n _updateCamundaPropertyProperties(element, oldTemplate, newTemplate, businessObject) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:property';\n });\n\n // (1) do not override old properties if no new properties specified\n if (!newProperties.length) {\n return;\n }\n if (businessObject) {\n businessObject = this._getOrCreateExtensionElements(businessObject);\n } else {\n businessObject = this._getOrCreateExtensionElements(element);\n }\n let camundaProperties = findExtension(businessObject, 'camunda:Properties');\n if (!camundaProperties) {\n camundaProperties = bpmnFactory.create('camunda:Properties');\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), camundaProperties]\n }\n });\n }\n const oldCamundaProperties = camundaProperties.get('camunda:values') ? camundaProperties.get('camunda:values').slice() : [];\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldCamundaProperty = oldProperty && findOldBusinessObject(businessObject, oldProperty),\n newPropertyValue = newProperty.value,\n newBinding = newProperty.binding;\n\n // (2) update old properties\n if (oldProperty && oldCamundaProperty) {\n if (!propertyChanged(oldCamundaProperty, oldProperty)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldCamundaProperty,\n properties: {\n value: newPropertyValue\n }\n });\n }\n remove(oldCamundaProperties, oldCamundaProperty);\n }\n\n // (3) add new properties\n else {\n const newCamundaProperty = createCamundaProperty(newBinding, newPropertyValue, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: camundaProperties,\n properties: {\n values: [...camundaProperties.get('values'), newCamundaProperty]\n }\n });\n }\n });\n\n // (4) remove old properties\n if (oldCamundaProperties.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: camundaProperties,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(camundaProperties.get('values'), value => oldCamundaProperties.includes(value))\n }\n });\n }\n }\n\n /**\n * Update `bpmn:conditionExpression` property of specified element. Since condition expression is\n * is not primitive it needs special handling.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldProperty\n * @param {Object} newProperty\n */\n _updateConditionExpression(element, oldProperty, newProperty) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack,\n modeling = this._modeling;\n const newBinding = newProperty.binding,\n newPropertyValue = newProperty.value;\n if (!oldProperty) {\n modeling.updateProperties(element, {\n conditionExpression: bpmnFactory.create('bpmn:FormalExpression', {\n body: newPropertyValue,\n language: newBinding.scriptFormat\n })\n });\n return;\n }\n const oldBinding = oldProperty.binding,\n oldPropertyValue = oldProperty.value;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n conditionExpression = businessObject.get('bpmn:conditionExpression');\n const properties = {};\n if (conditionExpression.get('body') === oldPropertyValue) {\n properties.body = newPropertyValue;\n }\n if (conditionExpression.get('language') === oldBinding.scriptFormat) {\n properties.language = newBinding.scriptFormat;\n }\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.keys)(properties).length) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: conditionExpression,\n properties\n });\n }\n _updateProperties(element, oldTemplate, newTemplate, businessObject) {\n const commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'property';\n });\n const oldProperties = oldTemplate && oldTemplate.properties.filter(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'property';\n });\n if (!newProperties.length) {\n return;\n }\n if (!businessObject) {\n businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n }\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n newBinding = newProperty.binding,\n newBindingName = newBinding.name,\n newPropertyValue = newProperty.value;\n let changedElement, properties;\n if (oldProperty) {\n remove(oldProperties, oldProperty);\n }\n if (newBindingName === 'conditionExpression') {\n this._updateConditionExpression(element, oldProperty, newProperty);\n } else {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:Error')) {\n changedElement = businessObject;\n } else {\n changedElement = element;\n }\n if (oldProperty && propertyChanged(changedElement, oldProperty)) {\n return;\n }\n properties = {};\n properties[newBindingName] = newPropertyValue;\n\n // only one of `camunda:class`, `camunda:delegateExpression` and `camunda:expression` can be set\n // TODO(philippfromme): ensuring only one of these properties is set at a time should be\n // implemented in a behavior and not in this handler and properties panel UI\n if (CAMUNDA_SERVICE_TASK_LIKE.indexOf(newBindingName) !== -1) {\n CAMUNDA_SERVICE_TASK_LIKE.forEach(camundaServiceTaskLikeProperty => {\n if (camundaServiceTaskLikeProperty !== newBindingName) {\n properties[camundaServiceTaskLikeProperty] = undefined;\n }\n });\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties\n });\n }\n });\n\n // remove old properties not present in new template\n oldProperties && oldProperties.forEach(oldProperty => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n [oldProperty.binding.name]: null\n }\n });\n });\n }\n\n /**\n * Update properties for a specified scope.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newScopeTemplate\n * @param {Object} newTemplate\n */\n _updateScopeProperties(element, oldTemplate, newScopeTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const scopeName = newScopeTemplate.type;\n let scopeElement;\n scopeElement = findOldScopeElement(element, newScopeTemplate, newTemplate);\n if (!scopeElement) {\n scopeElement = bpmnFactory.create(scopeName);\n }\n const oldScopeTemplate = findOldScopeTemplate(newScopeTemplate, oldTemplate);\n\n // update properties\n this._updateProperties(element, oldScopeTemplate, newScopeTemplate, scopeElement);\n\n // update camunda:ExecutionListener properties\n this._updateCamundaExecutionListenerProperties(element, newScopeTemplate);\n\n // update camunda:In and camunda:Out properties\n this._updateCamundaInOutProperties(element, oldScopeTemplate, newScopeTemplate);\n\n // update camunda:InputParameter and camunda:OutputParameter properties\n this._updateCamundaInputOutputParameterProperties(element, oldScopeTemplate, newScopeTemplate, scopeElement);\n\n // update camunda:Field properties\n this._updateCamundaFieldProperties(element, oldScopeTemplate, newScopeTemplate, scopeElement);\n\n // update camunda:Property properties\n this._updateCamundaPropertyProperties(element, oldScopeTemplate, newScopeTemplate, scopeElement);\n\n // assume that root elements were already created in root by referenced event definition binding\n if (isRootElementScope(scopeName)) {\n return;\n }\n const extensionElements = this._getOrCreateExtensionElements(element);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), scopeElement]\n }\n });\n }\n\n /**\n * Replaces the element with the specified elementType\n *\n * @param {djs.model.Base} element\n * @param {Object} newTemplate\n */\n _updateTaskType(element, newTemplate) {\n // determine new task type\n const newType = newTemplate.elementType;\n if (!newType) {\n return element;\n }\n\n // don't replace Task that is already the correct type\n if (element.$type === newType.value) {\n return element;\n }\n return this._bpmnReplace.replaceElement(element, {\n type: newType.value\n });\n }\n}\nChangeElementTemplateHandler.$inject = ['bpmnFactory', 'bpmnReplace', 'commandStack', 'modeling'];\n\n// helpers //////////\n\n/**\n * Find old business object matching specified old property.\n *\n * @param {djs.model.Base|ModdleElement} element\n * @param {Object} oldProperty\n *\n * @returns {ModdleElement}\n */\nfunction findOldBusinessObject(element, oldProperty) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n propertyName;\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType === 'camunda:field') {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(businessObject, ['camunda:ExecutionListener', 'camunda:TaskListener'])) {\n propertyName = 'camunda:fields';\n } else {\n propertyName = 'bpmn:values';\n }\n if (!businessObject || !businessObject.get(propertyName) || !businessObject.get(propertyName).length) {\n return;\n }\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get(propertyName), function (oldBusinessObject) {\n return oldBusinessObject.get('camunda:name') === oldBinding.name;\n });\n }\n if (oldBindingType === 'camunda:in') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('values'), function (oldBusinessObject) {\n return oldBusinessObject.get('target') === oldBinding.target;\n });\n }\n if (oldBindingType === 'camunda:in:businessKey') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('values'), function (oldBusinessObject) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(oldBusinessObject.get('businessKey'));\n });\n }\n if (oldBindingType === 'camunda:out') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('values'), function (oldBusinessObject) {\n return oldBusinessObject.get('source') === oldBinding.source || oldBusinessObject.get('sourceExpression') || oldBinding.sourceExpression;\n });\n }\n if (oldBindingType === 'camunda:inputParameter' || oldBindingType === 'camunda:outputParameter') {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'camunda:Connector')) {\n businessObject = businessObject.get('camunda:inputOutput');\n if (!businessObject) {\n return;\n }\n } else {\n businessObject = findExtension(businessObject, 'camunda:InputOutput');\n if (!businessObject) {\n return;\n }\n }\n if (oldBindingType === 'camunda:inputParameter') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('camunda:inputParameters'), function (oldBusinessObject) {\n return oldBusinessObject.get('camunda:name') === oldBinding.name;\n });\n } else {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('camunda:outputParameters'), function (oldBusinessObject) {\n if (oldBinding.scriptFormat) {\n const definition = oldBusinessObject.get('camunda:definition');\n return definition && definition.get('camunda:value') === oldBinding.source;\n } else {\n return oldBusinessObject.get('camunda:value') === oldBinding.source;\n }\n });\n }\n }\n if (oldBindingType === 'camunda:property') {\n if (!businessObject || !businessObject.get('values') || !businessObject.get('values').length) {\n return;\n }\n businessObject = findExtension(businessObject, 'camunda:Properties');\n if (!businessObject) {\n return;\n }\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('values'), function (oldBusinessObject) {\n return oldBusinessObject.get('camunda:name') === oldBinding.name;\n });\n }\n if (oldBindingType === 'camunda:errorEventDefinition') {\n return findCamundaErrorEventDefinition(element, oldBinding.errorRef);\n }\n}\n\n/**\n * Find old property matching specified new property.\n *\n * @param {Object} oldTemplate\n * @param {Object} newProperty\n *\n * @returns {Object}\n */\nfunction findOldProperty(oldTemplate, newProperty) {\n if (!oldTemplate) {\n return;\n }\n const oldProperties = oldTemplate.properties,\n newBinding = newProperty.binding,\n newBindingName = newBinding.name,\n newBindingType = newBinding.type;\n if (newBindingType === 'property') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'property' && oldBindingName === newBindingName;\n });\n }\n if (newBindingType === 'camunda:field') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:field' && oldBindingName === newBindingName;\n });\n }\n if (newBindingType === 'camunda:in') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'camunda:in') {\n return;\n }\n\n // always override if change from source to source expression or vice versa\n if (oldBinding.expression && !newBinding.expression || !oldBinding.expression && newBinding.expression) {\n return;\n }\n return oldBinding.target === newBinding.target;\n });\n }\n if (newBindingType === 'camunda:in:businessKey') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:in:businessKey';\n });\n }\n if (newBindingType === 'camunda:out') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:out' && (oldBinding.source === newBinding.source || oldBinding.sourceExpression === newBinding.sourceExpression);\n });\n }\n if (newBindingType === 'camunda:inputParameter') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'camunda:inputParameter') {\n return;\n }\n return oldBindingName === newBindingName && oldBinding.scriptFormat === newBinding.scriptFormat;\n });\n }\n if (newBindingType === 'camunda:outputParameter') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'camunda:outputParameter') {\n return;\n }\n return oldBinding.source === newBinding.source && oldBinding.scriptFormat === newBinding.scriptFormat;\n });\n }\n if (newBindingType === 'camunda:property') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:property' && oldBindingName === newBindingName;\n });\n }\n if (newBindingType === 'camunda:errorEventDefinition') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const newBindingRef = newBinding.errorRef,\n oldBinding = oldProperty.binding,\n oldBindingRef = oldBinding.errorRef,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:errorEventDefinition' && oldBindingRef === newBindingRef;\n });\n }\n}\nfunction findOldScopeElement(element, scopeTemplate, template) {\n const scopeName = scopeTemplate.type,\n id = scopeTemplate.id;\n if (scopeName === 'camunda:Connector') {\n return findExtension(element, 'camunda:Connector');\n }\n if (scopeName === 'bpmn:Error') {\n // (1) find by error event definition binding\n const errorEventDefinitionBinding = findErrorEventDefinitionBinding(template, id);\n if (!errorEventDefinitionBinding) {\n return;\n }\n\n // (2) find error event definition\n const errorEventDefinition = findOldBusinessObject(element, errorEventDefinitionBinding);\n if (!errorEventDefinition) {\n return;\n }\n\n // (3) retrieve referenced error\n return errorEventDefinition.errorRef;\n }\n}\nfunction isRootElementScope(scopeName) {\n return ['bpmn:Error'].includes(scopeName);\n}\nfunction findOldScopeTemplate(scopeTemplate, oldTemplate) {\n const scopeName = scopeTemplate.type,\n scopeId = scopeTemplate.id,\n scopes = oldTemplate && handleLegacyScopes(oldTemplate.scopes);\n return scopes && (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(scopes, function (scope) {\n if (isRootElementScope(scopeName)) {\n return scope.id === scopeId;\n }\n return scope.type === scopeName;\n });\n}\nfunction findErrorEventDefinitionBinding(template, templateErrorId) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(template.properties, function (property) {\n return property.binding.errorRef === templateErrorId;\n });\n}\n\n/**\n * Check whether property was changed after being set by template.\n *\n * @param {djs.model.Base|ModdleElement} element\n * @param {Object} oldProperty\n *\n * @returns {boolean}\n */\nfunction propertyChanged(element, oldProperty) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type,\n oldPropertyValue = oldProperty.value;\n let conditionExpression, definition;\n if (oldBindingType === 'property') {\n if (oldBindingName === 'conditionExpression') {\n conditionExpression = businessObject.get('bpmn:conditionExpression');\n return conditionExpression.get('bpmn:body') !== oldPropertyValue;\n }\n return businessObject.get(oldBindingName) !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:field') {\n return businessObject.get('camunda:string') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:in') {\n if (oldBinding.expression) {\n return businessObject.get('sourceExpression') !== oldPropertyValue;\n } else {\n return businessObject.get('camunda:source') !== oldPropertyValue;\n }\n }\n if (oldBindingType === 'camunda:in:businessKey') {\n return businessObject.get('camunda:businessKey') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:out') {\n return businessObject.get('camunda:target') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:inputParameter') {\n if (oldBinding.scriptFormat) {\n definition = businessObject.get('camunda:definition');\n return definition && definition.get('camunda:value') !== oldPropertyValue;\n } else {\n return businessObject.get('camunda:value') !== oldPropertyValue;\n }\n }\n if (oldBindingType === 'camunda:outputParameter') {\n return businessObject.get('camunda:name') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:property') {\n return businessObject.get('camunda:value') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:errorEventDefinition') {\n return businessObject.get('expression') !== oldPropertyValue;\n }\n}\nfunction remove(array, item) {\n const index = array.indexOf(item);\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(index)) {\n return array;\n }\n array.splice(index, 1);\n return array;\n}\n\nclass ElementTemplatesCommands {\n constructor(commandStack, elementTemplates, eventBus) {\n commandStack.registerHandler('element-templates.multi-command-executor', MultiCommandHandler);\n commandStack.registerHandler('propertiesPanel.camunda.changeTemplate', ChangeElementTemplateHandler);\n commandStack.registerHandler('propertiesPanel.removeTemplate', RemoveElementTemplateHandler);\n\n // apply default element templates on shape creation\n eventBus.on(['commandStack.shape.create.postExecuted'], function (event) {\n const {\n context: {\n hints = {},\n shape\n }\n } = event;\n if (hints.createElementsBehavior !== false) {\n applyDefaultTemplate(shape, elementTemplates, commandStack);\n }\n });\n\n // apply default element templates on connection creation\n eventBus.on(['commandStack.connection.create.postExecuted'], function (event) {\n const {\n context: {\n hints = {},\n connection\n }\n } = event;\n if (hints.createElementsBehavior !== false) {\n applyDefaultTemplate(connection, elementTemplates, commandStack);\n }\n });\n }\n}\nElementTemplatesCommands.$inject = ['commandStack', 'elementTemplates', 'eventBus'];\nfunction applyDefaultTemplate(element, elementTemplates, commandStack) {\n if (!elementTemplates.get(element) && elementTemplates.getDefault(element)) {\n const command = 'propertiesPanel.camunda.changeTemplate';\n const commandContext = {\n element: element,\n newTemplate: elementTemplates.getDefault(element)\n };\n commandStack.execute(command, commandContext);\n }\n}\n\nvar commandsModule = {\n __init__: ['elementTemplateCommands'],\n elementTemplateCommands: ['type', ElementTemplatesCommands]\n};\n\n/**\n * This Behavior checks if the new element's type is in\n * the list of elements the template applies to and unlinks\n * it if not.\n */\nclass ReplaceBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__[\"default\"] {\n constructor(elementTemplates, injector) {\n super(injector.get('eventBus'));\n this.postExecuted('shape.replace', function (e) {\n var context = e.context,\n oldShape = context.oldShape,\n oldBo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(oldShape),\n newShape = context.newShape,\n newBo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(newShape);\n if (!oldBo.modelerTemplate) {\n return;\n }\n const template = newBo.modelerTemplate;\n const version = newBo.modelerTemplateVersion;\n const elementTemplate = elementTemplates.get(template, version);\n if (!elementTemplate) {\n elementTemplates.unlinkTemplate(newShape, injector);\n return;\n }\n const {\n appliesTo,\n elementType\n } = elementTemplate;\n if (elementType) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(newShape, elementType.value)) {\n elementTemplates.unlinkTemplate(newShape, injector);\n }\n return;\n }\n const allowed = appliesTo.reduce((allowed, type) => {\n return allowed || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(newBo, type);\n }, false);\n if (!allowed) {\n elementTemplates.unlinkTemplate(newShape, injector);\n }\n });\n }\n}\nReplaceBehavior.$inject = ['elementTemplates', 'injector'];\n\nvar behaviorModule = {\n __init__: ['elementTemplatesReplaceBehavior'],\n elementTemplatesReplaceBehavior: ['type', ReplaceBehavior]\n};\n\nvar coreModule = {\n __depends__: [commandsModule, behaviorModule],\n __init__: ['elementTemplatesLoader'],\n elementTemplates: ['type', ElementTemplates$1],\n elementTemplatesLoader: ['type', ElementTemplatesLoader$1]\n};\n\nconst CAMUNDA_ERROR_EVENT_DEFINITION_TYPE$1 = 'camunda:errorEventDefinition';\nconst CAMUNDA_EXECUTION_LISTENER_TYPE = 'camunda:executionListener';\nconst CAMUNDA_FIELD_TYPE = 'camunda:field';\nconst CAMUNDA_IN_BUSINESS_KEY_TYPE = 'camunda:in:businessKey';\nconst CAMUNDA_IN_TYPE = 'camunda:in';\nconst CAMUNDA_INPUT_PARAMETER_TYPE$1 = 'camunda:inputParameter';\nconst CAMUNDA_OUT_TYPE = 'camunda:out';\nconst CAMUNDA_OUTPUT_PARAMETER_TYPE$1 = 'camunda:outputParameter';\nconst CAMUNDA_PROPERTY_TYPE = 'camunda:property';\nconst PROPERTY_TYPE = 'property';\nconst EXTENSION_BINDING_TYPES = [CAMUNDA_ERROR_EVENT_DEFINITION_TYPE$1, CAMUNDA_FIELD_TYPE, CAMUNDA_IN_TYPE, CAMUNDA_IN_BUSINESS_KEY_TYPE, CAMUNDA_INPUT_PARAMETER_TYPE$1, CAMUNDA_OUT_TYPE, CAMUNDA_OUTPUT_PARAMETER_TYPE$1, CAMUNDA_PROPERTY_TYPE];\nconst IO_BINDING_TYPES = [CAMUNDA_INPUT_PARAMETER_TYPE$1, CAMUNDA_OUTPUT_PARAMETER_TYPE$1];\nconst IN_OUT_BINDING_TYPES = [CAMUNDA_IN_BUSINESS_KEY_TYPE, CAMUNDA_IN_TYPE, CAMUNDA_OUT_TYPE];\n\nconst PRIMITIVE_MODDLE_TYPES = ['Boolean', 'Integer', 'String'];\nfunction CustomProperties(props) {\n const {\n element,\n elementTemplate,\n injector\n } = props;\n const translate = injector.get('translate');\n const groups = [];\n const {\n id,\n properties,\n groups: propertyGroups,\n scopes\n } = elementTemplate;\n\n // (1) group properties by group id\n const groupedProperties = groupByGroupId(properties);\n const defaultProps = [];\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(groupedProperties, (properties, groupId) => {\n const group = findCustomGroup(propertyGroups, groupId);\n if (!group) {\n return defaultProps.push(...properties);\n }\n addCustomGroup(groups, {\n element,\n id: `ElementTemplates__CustomProperties-${groupId}`,\n label: translate(group.label),\n properties: properties,\n templateId: `${id}-${groupId}`\n });\n });\n\n // (2) add default custom props\n if (defaultProps.length) {\n addCustomGroup(groups, {\n id: 'ElementTemplates__CustomProperties',\n label: translate('Custom properties'),\n element,\n properties: defaultProps,\n templateId: id\n });\n }\n\n // (3) add custom scopes props\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isArray)(scopes)) {\n scopes.forEach(scope => {\n const {\n properties,\n type\n } = scope;\n const id = type.replace(/:/g, '-');\n addCustomGroup(groups, {\n element,\n id: `ElementTemplates__CustomGroup-${id}`,\n label: translate(`Custom properties for scope <${type}>`),\n properties,\n templateId: id,\n scope\n });\n });\n }\n return groups;\n}\nfunction addCustomGroup(groups, props) {\n const {\n element,\n id,\n label,\n properties,\n scope,\n templateId\n } = props;\n const customPropertiesGroup = {\n id,\n label,\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.Group,\n entries: [],\n shouldOpen: true\n };\n properties.forEach((property, index) => {\n const entry = createCustomEntry(`custom-entry-${templateId}-${index}`, element, property, scope);\n if (entry) {\n customPropertiesGroup.entries.push(entry);\n }\n });\n if (customPropertiesGroup.entries.length) {\n groups.push(customPropertiesGroup);\n }\n}\nfunction createCustomEntry(id, element, property, scope) {\n let {\n type\n } = property;\n if (!type) {\n type = getDefaultType(property);\n }\n if (type === 'Boolean') {\n return {\n id,\n component: BooleanProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isCheckboxEntryEdited,\n property,\n scope\n };\n }\n if (type === 'Dropdown') {\n return {\n id,\n component: DropdownProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isSelectEntryEdited,\n property,\n scope\n };\n }\n if (type === 'String') {\n return {\n id,\n component: StringProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isTextFieldEntryEdited,\n property,\n scope\n };\n }\n if (type === 'Text') {\n return {\n id,\n component: TextAreaProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isTextAreaEntryEdited,\n property,\n scope\n };\n }\n}\nfunction getDefaultType(property) {\n const {\n binding\n } = property;\n const {\n type\n } = binding;\n if ([PROPERTY_TYPE, CAMUNDA_PROPERTY_TYPE, CAMUNDA_IN_TYPE, CAMUNDA_IN_BUSINESS_KEY_TYPE, CAMUNDA_OUT_TYPE, CAMUNDA_FIELD_TYPE].includes(type)) {\n return 'String';\n }\n if (type === CAMUNDA_EXECUTION_LISTENER_TYPE) {\n return 'Hidden';\n }\n}\nfunction BooleanProperty(props) {\n const {\n element,\n id,\n property,\n scope\n } = props;\n const {\n description,\n editable,\n label\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.CheckboxEntry)({\n element,\n getValue: propertyGetter(element, property, scope),\n id,\n label: label ? translate(label) : label,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter(bpmnFactory, commandStack, element, property, scope),\n disabled: editable === false\n });\n}\nfunction DropdownProperty(props) {\n const {\n element,\n id,\n property,\n scope\n } = props;\n const {\n description,\n editable,\n label\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const getOptions = () => {\n const {\n choices\n } = property;\n return choices.map(({\n name,\n value\n }) => {\n return {\n label: translate(name),\n value\n };\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.SelectEntry)({\n element,\n id,\n label: label ? translate(label) : label,\n getOptions,\n description: PropertyDescription({\n description\n }),\n getValue: propertyGetter(element, property, scope),\n setValue: propertySetter(bpmnFactory, commandStack, element, property, scope),\n disabled: editable === false,\n validate: propertyValidator(translate, property)\n });\n}\nfunction StringProperty(props) {\n const {\n element,\n id,\n property,\n scope\n } = props;\n const {\n description,\n editable,\n label,\n placeholder\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextFieldEntry)({\n debounce,\n element,\n getValue: propertyGetter(element, property, scope),\n id,\n placeholder,\n label: label ? translate(label) : label,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter(bpmnFactory, commandStack, element, property, scope),\n validate: propertyValidator(translate, property),\n disabled: editable === false\n });\n}\nfunction TextAreaProperty(props) {\n const {\n element,\n id,\n property,\n scope\n } = props;\n const {\n description,\n editable,\n label,\n placeholder\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextAreaEntry)({\n debounce,\n element,\n id,\n placeholder,\n label: label ? translate(label) : label,\n description: PropertyDescription({\n description\n }),\n getValue: propertyGetter(element, property, scope),\n setValue: propertySetter(bpmnFactory, commandStack, element, property, scope),\n disabled: editable === false,\n validate: propertyValidator(translate, property)\n });\n}\nfunction propertyGetter(element, property, scope) {\n return function getValue() {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const {\n binding,\n value: defaultValue = ''\n } = property;\n const {\n name,\n type\n } = binding;\n if (scope) {\n businessObject = getScopeBusinessObject(businessObject, scope);\n if (!businessObject) {\n return defaultValue;\n }\n }\n\n // property\n if (type === 'property') {\n const value = businessObject.get(name);\n if (name === 'conditionExpression') {\n if (value) {\n return value.get('body');\n }\n return defaultValue;\n } else {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(value)) {\n return value;\n }\n return defaultValue;\n }\n }\n\n // camunda:ErrorEventDefinition\n if (type === CAMUNDA_ERROR_EVENT_DEFINITION_TYPE$1) {\n const {\n errorRef\n } = binding;\n const errorEventDefinition = findCamundaErrorEventDefinition(businessObject, errorRef);\n if (errorEventDefinition) {\n return errorEventDefinition.get('camunda:expression');\n } else {\n return '';\n }\n }\n\n // camunda:Field\n if (type === CAMUNDA_FIELD_TYPE) {\n const camundaFields = findExtensions(businessObject, ['camunda:Field']);\n const camundaField = camundaFields.find(camundaField => {\n return camundaField.get('camunda:name') === name;\n });\n if (camundaField) {\n return camundaField.get('camunda:string') || camundaField.get('camunda:expression');\n } else {\n return '';\n }\n }\n\n // camunda:Property\n if (type === CAMUNDA_PROPERTY_TYPE) {\n let camundaProperties;\n if (scope) {\n // TODO(philippfromme): as only bpmn:Error and camunda:Connector are supported this code is practically dead\n camundaProperties = businessObject.get('properties');\n } else {\n camundaProperties = findExtension(businessObject, 'camunda:Properties');\n }\n if (camundaProperties) {\n const camundaProperty = findCamundaProperty(camundaProperties, binding);\n if (camundaProperty) {\n return camundaProperty.get('camunda:value');\n }\n }\n return defaultValue;\n }\n if (IO_BINDING_TYPES.includes(type)) {\n let inputOutput;\n if (scope) {\n inputOutput = businessObject.get('inputOutput');\n } else {\n inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n }\n if (!inputOutput) {\n return defaultValue;\n }\n\n // camunda:InputParameter\n if (type === CAMUNDA_INPUT_PARAMETER_TYPE$1) {\n const inputParameter = findInputParameter(inputOutput, binding);\n if (inputParameter) {\n const {\n scriptFormat\n } = binding;\n if (scriptFormat) {\n const definition = inputParameter.get('camunda:definition');\n if (definition) {\n return definition.get('camunda:value');\n }\n } else {\n return inputParameter.get('value') || '';\n }\n }\n return defaultValue;\n }\n\n // camunda:OutputParameter\n if (type === CAMUNDA_OUTPUT_PARAMETER_TYPE$1) {\n const outputParameter = findOutputParameter(inputOutput, binding);\n if (outputParameter) {\n return outputParameter.get('camunda:name');\n }\n return defaultValue;\n }\n }\n\n // camunda:In and camunda:Out\n if (IN_OUT_BINDING_TYPES.includes(type)) {\n const camundaInOut = findCamundaInOut(businessObject, binding);\n if (camundaInOut) {\n if (type === CAMUNDA_IN_BUSINESS_KEY_TYPE) {\n return camundaInOut.get('camunda:businessKey');\n } else if (type === CAMUNDA_OUT_TYPE) {\n return camundaInOut.get('camunda:target');\n } else if (type === CAMUNDA_IN_TYPE) {\n const {\n expression\n } = binding;\n if (expression) {\n return camundaInOut.get('camunda:sourceExpression');\n } else {\n return camundaInOut.get('camunda:source');\n }\n }\n }\n return defaultValue;\n }\n\n // should never throw as templates are validated beforehand\n throw unknownBindingError(element, property);\n };\n}\nfunction propertySetter(bpmnFactory, commandStack, element, property, scope) {\n return function setValue(value) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const {\n binding\n } = property;\n const {\n name,\n type\n } = binding;\n const rootElement = getRoot(businessObject);\n let extensionElements;\n let propertyValue;\n const commands = [];\n if (EXTENSION_BINDING_TYPES.includes(type)) {\n extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', null, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n }\n if (scope) {\n businessObject = getScopeBusinessObject(businessObject, scope);\n if (!businessObject) {\n // bpmn:Error\n if (scope.type === 'bpmn:Error') {\n businessObject = createError(scope.id, rootElement, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: rootElement,\n properties: {\n rootElements: [...rootElement.get('rootElements'), businessObject]\n }\n }\n });\n } else {\n businessObject = createElement(scope.type, null, element, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), businessObject]\n }\n }\n });\n }\n }\n }\n\n // property\n if (type === 'property') {\n if (name === 'conditionExpression') {\n const {\n scriptFormat\n } = binding;\n propertyValue = createElement('bpmn:FormalExpression', {\n body: value,\n language: scriptFormat\n }, businessObject, bpmnFactory);\n } else {\n const propertyDescriptor = businessObject.$descriptor.propertiesByName[name];\n const {\n type: propertyType\n } = propertyDescriptor;\n\n // do not override non-primitive types\n if (!PRIMITIVE_MODDLE_TYPES.includes(propertyType)) {\n throw new Error(`cannot set property of type <${propertyType}>`);\n }\n if (propertyType === 'Boolean') {\n propertyValue = !!value;\n } else if (propertyType === 'Integer') {\n propertyValue = parseInt(value, 10);\n if (isNaN(propertyValue)) {\n // do not set NaN value\n propertyValue = undefined;\n }\n } else {\n // make sure we don't remove the property\n propertyValue = value || '';\n }\n }\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(propertyValue)) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n [name]: propertyValue\n }\n }\n });\n }\n }\n\n // camunda:ErrorEventDefinition\n if (type === CAMUNDA_ERROR_EVENT_DEFINITION_TYPE$1) {\n const {\n errorRef\n } = binding;\n const oldCamundaErrorEventDefinition = findCamundaErrorEventDefinition(businessObject, errorRef);\n if (oldCamundaErrorEventDefinition) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: oldCamundaErrorEventDefinition,\n properties: {\n 'camunda:expression': value\n }\n }\n });\n } else {\n const newError = createError(binding.errorRef, rootElement, bpmnFactory),\n newCamundaErrorEventDefinition = createCamundaErrorEventDefinition(value, newError, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: rootElement,\n properties: {\n rootElements: [...rootElement.get('rootElements'), newError]\n }\n }\n });\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), newCamundaErrorEventDefinition]\n }\n }\n });\n }\n }\n\n // camunda:Field\n if (type === CAMUNDA_FIELD_TYPE) {\n const oldCamundaFields = findExtensions(businessObject, ['camunda:Field']);\n const newCamundaFields = [];\n if (oldCamundaFields.length) {\n oldCamundaFields.forEach(camundaField => {\n if (camundaField.name === name) {\n newCamundaFields.push(createCamundaFieldInjection(binding, value, bpmnFactory));\n } else {\n newCamundaFields.push(camundaField);\n }\n });\n } else {\n newCamundaFields.push(createCamundaFieldInjection(binding, value, bpmnFactory));\n }\n const values = extensionElements.get('values').filter(value => !oldCamundaFields.includes(value));\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...values, ...newCamundaFields]\n }\n }\n });\n }\n\n // camunda:Property\n if (type === CAMUNDA_PROPERTY_TYPE) {\n let camundaProperties;\n if (scope) {\n camundaProperties = businessObject.get('properties');\n } else {\n camundaProperties = findExtension(extensionElements, 'camunda:Properties');\n }\n if (!camundaProperties) {\n camundaProperties = createElement('camunda:Properties', null, businessObject, bpmnFactory);\n if (scope) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n properties: camundaProperties\n }\n }\n });\n } else {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), camundaProperties]\n }\n }\n });\n }\n }\n const oldCamundaProperty = findCamundaProperty(camundaProperties, binding);\n const newCamundaProperty = createCamundaProperty(binding, value, bpmnFactory);\n const values = camundaProperties.get('values').filter(value => value !== oldCamundaProperty);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: camundaProperties,\n properties: {\n values: [...values, newCamundaProperty]\n }\n }\n });\n }\n if (IO_BINDING_TYPES.includes(type)) {\n let inputOutput;\n if (scope) {\n inputOutput = businessObject.get('inputOutput');\n } else {\n inputOutput = findExtension(extensionElements, 'camunda:InputOutput');\n }\n if (!inputOutput) {\n inputOutput = createElement('camunda:InputOutput', null, businessObject, bpmnFactory);\n if (scope) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n inputOutput\n }\n }\n });\n } else {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), inputOutput]\n }\n }\n });\n }\n }\n\n // camunda:InputParameter\n if (type === CAMUNDA_INPUT_PARAMETER_TYPE$1) {\n const oldCamundaInputParameter = findInputParameter(inputOutput, binding);\n const newCamundaInputParameter = createInputParameter(binding, value, bpmnFactory);\n const values = inputOutput.get('camunda:inputParameters').filter(value => value !== oldCamundaInputParameter);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: inputOutput,\n properties: {\n 'camunda:inputParameters': [...values, newCamundaInputParameter]\n }\n }\n });\n }\n\n // camunda:OutputParameter\n if (type === CAMUNDA_OUTPUT_PARAMETER_TYPE$1) {\n const oldCamundaOutputParameter = findOutputParameter(inputOutput, binding);\n const newCamundaOutputParameter = createOutputParameter(binding, value, bpmnFactory);\n const values = inputOutput.get('camunda:outputParameters').filter(value => value !== oldCamundaOutputParameter);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: inputOutput,\n properties: {\n 'camunda:outputParameters': [...values, newCamundaOutputParameter]\n }\n }\n });\n }\n }\n\n // camunda:In and camunda:Out\n if (IN_OUT_BINDING_TYPES.includes(type)) {\n const oldCamundaInOut = findCamundaInOut(businessObject, binding);\n let newCamundaInOut;\n if (type === CAMUNDA_IN_TYPE) {\n newCamundaInOut = createCamundaIn(binding, value, bpmnFactory);\n } else if (type === CAMUNDA_OUT_TYPE) {\n newCamundaInOut = createCamundaOut(binding, value, bpmnFactory);\n } else {\n newCamundaInOut = createCamundaInWithBusinessKey(value, bpmnFactory);\n }\n const values = extensionElements.get('values').filter(value => value !== oldCamundaInOut);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...values, newCamundaInOut]\n }\n }\n });\n }\n if (commands.length) {\n commandStack.execute('element-templates.multi-command-executor', commands);\n return;\n }\n\n // should never throw as templates are validated beforehand\n throw unknownBindingError(element, property);\n };\n}\nfunction propertyValidator(translate, property) {\n return function validate(value) {\n const {\n constraints = {}\n } = property;\n const {\n maxLength,\n minLength,\n notEmpty\n } = constraints;\n if (notEmpty && isEmptyString(value)) {\n return translate('Must not be empty.');\n }\n if (maxLength && value.length > maxLength) {\n return translate('Must have max length {maxLength}.', {\n maxLength\n });\n }\n if (minLength && value.length < minLength) {\n return translate('Must have min length {minLength}.', {\n minLength\n });\n }\n let {\n pattern\n } = constraints;\n if (pattern) {\n let message;\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(pattern)) {\n message = pattern.message;\n pattern = pattern.value;\n }\n if (!matchesPattern(value, pattern)) {\n return message || translate('Must match pattern {pattern}.', {\n pattern\n });\n }\n }\n };\n}\nfunction getScopeBusinessObject(businessObject, scope) {\n const {\n id,\n type\n } = scope;\n if (type === 'bpmn:Error') {\n // retrieve error through referenced error event definition\n const errorEventDefinition = findCamundaErrorEventDefinition(businessObject, id);\n if (errorEventDefinition) {\n return errorEventDefinition.get('errorRef');\n }\n }\n return findExtension(businessObject, type);\n}\nfunction unknownBindingError(element, property) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const id = businessObject.get('id');\n const {\n binding\n } = property;\n const {\n type\n } = binding;\n return new Error(`unknown binding <${type}> for element <${id}>, this should never happen`);\n}\nfunction isEmptyString(string) {\n return !string || !string.trim().length;\n}\nfunction matchesPattern(string, pattern) {\n return new RegExp(pattern).test(string);\n}\nfunction groupByGroupId(properties) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.groupBy)(properties, 'group');\n}\nfunction findCustomGroup(groups, id) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(groups, g => g.id === id);\n}\n\nfunction ErrorProperties(props) {\n const {\n element,\n index,\n property,\n groups\n } = props;\n const {\n binding,\n label\n } = property;\n const {\n errorRef\n } = binding;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n errorEventDefinitions = findExtensions(businessObject, ['camunda:ErrorEventDefinition']);\n if (!errorEventDefinitions.length) {\n return;\n }\n const errorEventDefinition = findCamundaErrorEventDefinition(element, errorRef);\n const id = `${element.id}-error-${index}`;\n let entries = [];\n const errorGroup = groups.find(({\n id\n }) => id === 'CamundaPlatform__Errors');\n const originalItem = errorGroup.items.find(({\n entries\n }) => entries[0].errorEventDefinition === errorEventDefinition);\n entries = originalItem.entries;\n\n // (1) remove global error referenced entry\n // entries.shift();\n entries = removeEntry$1(entries, '-errorRef');\n\n // (2) remove throw expression input\n // entries.pop();\n entries = removeEntry$1(entries, '-expression');\n\n // (3) add disabled throw expression input\n entries.push({\n id: `${id}-expression`,\n component: Expression,\n errorEventDefinition,\n property\n });\n const item = {\n id,\n label: label || getErrorLabel(errorEventDefinition),\n entries\n };\n return item;\n}\nfunction Expression(props) {\n const {\n errorEventDefinition,\n id\n } = props;\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput');\n const setValue = () => {};\n const getValue = () => {\n return errorEventDefinition.get('camunda:expression');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextFieldEntry)({\n element: errorEventDefinition,\n id,\n label: translate('Throw expression'),\n getValue,\n setValue,\n debounce,\n disabled: true\n });\n}\nfunction removeEntry$1(entries, suffix) {\n const entry = entries.find(({\n id\n }) => id.endsWith(suffix));\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(entries, entry);\n}\nfunction getErrorLabel(errorEventDefinition) {\n const error = errorEventDefinition.get('errorRef');\n if (!error) {\n return '';\n }\n const errorCode = error.get('errorCode'),\n name = error.get('name') || '';\n if (errorCode) {\n return `${name} (code = ${errorCode})`;\n }\n return name;\n}\n\nfunction InputProperties(props) {\n const {\n element,\n index,\n property,\n groups\n } = props;\n const {\n binding,\n description,\n label\n } = property;\n const {\n name\n } = binding;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n const inputParameter = inputOutput && findInputParameter(inputOutput, binding);\n const id = `${element.id}-inputParameter-${index}`;\n let entries = [];\n if (inputParameter) {\n const inputGroup = groups.find(({\n id\n }) => id === 'CamundaPlatform__Input');\n const item = inputGroup.items.find(({\n entries\n }) => entries[0].parameter === inputParameter);\n entries = item.entries;\n\n // (1) remove name entry\n entries = removeEntry(entries, '-name');\n }\n\n // (2) add local variable assignment entry\n entries.unshift({\n id: `${id}-local-variable-assignment`,\n component: LocalVariableAssignment,\n inputParameter,\n property\n });\n\n // (3) add description entry\n if (description) {\n entries.unshift({\n id: `${id}-description`,\n component: Description$1,\n text: description\n });\n }\n\n // @barmac: binding#name is required so there is no third option\n const item = {\n id,\n label: label || name,\n entries\n };\n return item;\n}\n\n// TODO(philippfromme): add text entry to properties-panel\nfunction Description$1(props) {\n const {\n id,\n text\n } = props;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-entry\",\n \"data-entry-id\": id,\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-description\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(PropertyDescription, {\n description: text\n })\n })\n });\n}\nfunction LocalVariableAssignment(props) {\n const {\n element,\n id,\n property,\n inputParameter\n } = props;\n const {\n binding\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n modeling = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('modeling'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const getValue = () => {\n return inputParameter;\n };\n const setValue = value => {\n if (value) {\n addInputParameter(element, property, bpmnFactory, modeling);\n } else {\n removeInputParameter(element, binding, modeling);\n }\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ToggleSwitchEntry)({\n id,\n label: translate('Local variable assignment'),\n switcherLabel: inputParameter ? translate('On') : translate('Off'),\n description: inputParameter ? '' : translate('Parameter won\\'t be created as local variable.'),\n getValue,\n setValue\n });\n}\nfunction addInputParameter(element, property, bpmnFactory, modeling) {\n const {\n binding,\n value\n } = property;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const extensionElements = businessObject.get('extensionElements');\n const inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n let updatedBusinessObject, update;\n if (!extensionElements) {\n updatedBusinessObject = businessObject;\n const extensionElements = createExtensionElements$1(businessObject, bpmnFactory),\n inputOutput = createInputOutput$1(binding, value, bpmnFactory, extensionElements);\n extensionElements.values.push(inputOutput);\n update = {\n extensionElements\n };\n } else if (!inputOutput) {\n updatedBusinessObject = extensionElements;\n const inputOutput = createInputOutput$1(binding, value, bpmnFactory, extensionElements);\n update = {\n values: extensionElements.get('values').concat(inputOutput)\n };\n } else {\n updatedBusinessObject = inputOutput;\n const inputParameter = createInputParameter(binding, value, bpmnFactory);\n inputParameter.$parent = inputOutput;\n update = {\n inputParameters: inputOutput.get('camunda:inputParameters').concat(inputParameter)\n };\n }\n modeling.updateModdleProperties(element, updatedBusinessObject, update);\n}\nfunction removeInputParameter(element, binding, modeling) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const inputOutput = findExtension(businessObject, 'camunda:InputOutput'),\n inputParameters = inputOutput.get('camunda:inputParameters');\n const inputParameter = findInputParameter(inputOutput, binding);\n modeling.updateModdleProperties(element, inputOutput, {\n inputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(inputParameters, inputParameter)\n });\n}\nfunction removeEntry(entries, suffix) {\n const entry = entries.find(({\n id\n }) => id.endsWith(suffix));\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(entries, entry);\n}\nfunction createExtensionElements$1(businessObject, bpmnFactory) {\n return createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n}\nfunction createInputOutput$1(binding, value, bpmnFactory, extensionElements) {\n const inputParameter = createInputParameter(binding, value, bpmnFactory);\n const inputOutput = createElement('camunda:InputOutput', {\n inputParameters: [inputParameter],\n outputParameters: []\n }, extensionElements, bpmnFactory);\n inputParameter.$parent = inputOutput;\n return inputOutput;\n}\n\nconst SPACE_REGEX = /\\s/;\nfunction containsSpace(value) {\n return SPACE_REGEX.test(value);\n}\n\nfunction OutputProperties(props) {\n const {\n element,\n index,\n injector,\n property\n } = props;\n const {\n binding,\n description,\n label\n } = property;\n const {\n name\n } = binding;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n const translate = injector.get('translate');\n const outputParameter = inputOutput && findOutputParameter(inputOutput, binding);\n const id = `${element.id}-outputParameter-${index}`;\n let entries = [];\n\n // (1) add description entry\n if (description) {\n entries.push({\n id: `${id}-description`,\n component: Description,\n text: description\n });\n }\n\n // (2) add local variable assignment entry\n entries.push({\n id: `${id}-local-variable-assignment`,\n component: ProcessVariableAssignment,\n outputParameter,\n property\n });\n if (outputParameter) {\n // (3) add assign to process variable entry\n entries.push({\n id: `${id}-assign-to-process-variable`,\n component: AssignToProcessVariable,\n property\n });\n }\n const item = {\n id,\n label: label || name || translate(''),\n entries\n };\n return item;\n}\n\n// TODO(philippfromme): add text entry to properties-panel\nfunction Description(props) {\n const {\n id,\n text\n } = props;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-entry\",\n \"data-entry-id\": id,\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-description\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(PropertyDescription, {\n description: text\n })\n })\n });\n}\nfunction ProcessVariableAssignment(props) {\n const {\n element,\n id,\n property,\n outputParameter\n } = props;\n const {\n binding\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n modeling = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('modeling'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const getValue = () => {\n return outputParameter;\n };\n const setValue = value => {\n if (value) {\n addOutputParameter(element, property, bpmnFactory, modeling);\n } else {\n removeOutputParameter(element, binding, modeling);\n }\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ToggleSwitchEntry)({\n id,\n label: translate('Process variable assignment'),\n switcherLabel: outputParameter ? translate('On') : translate('Off'),\n description: outputParameter ? '' : translate('Parameter won\\'t be available in process scope.'),\n getValue,\n setValue\n });\n}\nfunction AssignToProcessVariable(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n binding\n } = property;\n const inputOutput = findExtension(element, 'camunda:InputOutput'),\n outputParameter = findOutputParameter(inputOutput, binding);\n const commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: outputParameter,\n properties: {\n name: value\n }\n });\n };\n const getValue = () => {\n return outputParameter.get('camunda:name');\n };\n const validate = value => {\n if (!value) {\n return translate('Process variable name must not be empty.');\n } else if (containsSpace(value)) {\n return translate('Process variable name must not contain spaces.');\n }\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextFieldEntry)({\n debounce,\n element: outputParameter,\n id,\n label: translate('Assign to process variable'),\n getValue,\n setValue,\n validate\n });\n}\nfunction addOutputParameter(element, property, bpmnFactory, modeling) {\n const {\n binding,\n value\n } = property;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const extensionElements = businessObject.get('extensionElements');\n const inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n let updatedBusinessObject, update;\n if (!extensionElements) {\n updatedBusinessObject = businessObject;\n const extensionElements = createExtensionElements(businessObject, bpmnFactory),\n inputOutput = createInputOutput(binding, value, bpmnFactory, extensionElements);\n extensionElements.values.push(inputOutput);\n update = {\n extensionElements\n };\n } else if (!inputOutput) {\n updatedBusinessObject = extensionElements;\n const inputOutput = createInputOutput(binding, value, bpmnFactory, extensionElements);\n update = {\n values: extensionElements.get('values').concat(inputOutput)\n };\n } else {\n updatedBusinessObject = inputOutput;\n const outputParameter = createOutputParameter(binding, value, bpmnFactory);\n outputParameter.$parent = inputOutput;\n update = {\n outputParameters: inputOutput.get('camunda:outputParameters').concat(outputParameter)\n };\n }\n modeling.updateModdleProperties(element, updatedBusinessObject, update);\n}\nfunction removeOutputParameter(element, binding, modeling) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const inputOutput = findExtension(businessObject, 'camunda:InputOutput'),\n outputParameters = inputOutput.get('camunda:outputParameters');\n const outputParameter = findOutputParameter(inputOutput, binding);\n modeling.updateModdleProperties(element, inputOutput, {\n outputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(outputParameters, outputParameter)\n });\n}\nfunction createExtensionElements(businessObject, bpmnFactory) {\n return createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n}\nfunction createInputOutput(binding, value, bpmnFactory, extensionElements) {\n const outputParameter = createOutputParameter(binding, value, bpmnFactory);\n const inputOutput = createElement('camunda:InputOutput', {\n inputParameters: [],\n outputParameters: [outputParameter]\n }, extensionElements, bpmnFactory);\n outputParameter.$parent = inputOutput;\n return inputOutput;\n}\n\nconst CAMUNDA_ERROR_EVENT_DEFINITION_TYPE = 'camunda:errorEventDefinition',\n CAMUNDA_INPUT_PARAMETER_TYPE = 'camunda:inputParameter',\n CAMUNDA_OUTPUT_PARAMETER_TYPE = 'camunda:outputParameter';\nconst LOWER_PRIORITY = 300;\nconst ALWAYS_DISPLAYED_GROUPS = ['general', 'documentation', 'multiInstance'];\nclass ElementTemplatesPropertiesProvider {\n constructor(elementTemplates, propertiesPanel, injector) {\n propertiesPanel.registerProvider(LOWER_PRIORITY, this);\n this._elementTemplates = elementTemplates;\n this._injector = injector;\n }\n getGroups(element) {\n return groups => {\n const injector = this._injector;\n if (!this._shouldShowTemplateProperties(element)) {\n return groups;\n }\n const translate = injector.get('translate');\n\n // (0) Copy provided groups\n groups = groups.slice();\n const templatesGroup = {\n element,\n id: 'ElementTemplates__Template',\n label: translate('Template'),\n component: createElementTemplatesGroup(),\n entries: TemplateProps({\n element,\n elementTemplates: this._elementTemplates\n })\n };\n\n // (1) Add templates group\n addGroupsAfter(ALWAYS_DISPLAYED_GROUPS, groups, [templatesGroup]);\n const elementTemplate = this._elementTemplates.get(element);\n if (elementTemplate) {\n const templateSpecificGroups = [].concat(createInputGroup(element, elementTemplate, injector, groups) || [], createOutputGroup(element, elementTemplate, injector) || [], createErrorGroup(element, elementTemplate, injector, groups) || [], CustomProperties({\n element,\n elementTemplate,\n injector\n }));\n\n // (2) add template-specific properties groups\n addGroupsAfter('ElementTemplates__Template', groups, templateSpecificGroups);\n }\n\n // (3) apply entries visible\n if (getTemplateId(element)) {\n groups = filterWithEntriesVisible(elementTemplate || {}, groups);\n }\n return groups;\n };\n }\n _shouldShowTemplateProperties(element) {\n return getTemplateId(element) || this._elementTemplates.getAll(element).length;\n }\n}\nElementTemplatesPropertiesProvider.$inject = ['elementTemplates', 'propertiesPanel', 'injector'];\n\n// helper /////////////////////\n\nfunction createInputGroup(element, elementTemplate, injector, groups) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Inputs'),\n id: 'ElementTemplates__Input',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ListGroup,\n items: []\n };\n const properties = elementTemplate.properties.filter(({\n binding,\n type\n }) => {\n return !type && binding.type === CAMUNDA_INPUT_PARAMETER_TYPE;\n });\n properties.forEach((property, index) => {\n const item = InputProperties({\n element,\n index,\n property,\n groups\n });\n if (item) {\n group.items.push(item);\n }\n });\n\n // remove if empty\n if (!group.items.length) {\n return null;\n }\n return group;\n}\nfunction createOutputGroup(element, elementTemplate, injector, groups) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Outputs'),\n id: 'ElementTemplates__Output',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ListGroup,\n items: []\n };\n const properties = elementTemplate.properties.filter(({\n binding,\n type\n }) => {\n return !type && binding.type === CAMUNDA_OUTPUT_PARAMETER_TYPE;\n });\n properties.forEach((property, index) => {\n const item = OutputProperties({\n element,\n index,\n property,\n injector\n });\n if (item) {\n group.items.push(item);\n }\n });\n\n // remove if empty\n if (!group.items.length) {\n return null;\n }\n return group;\n}\nfunction createErrorGroup(element, elementTemplate, injector, groups) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Errors'),\n id: 'ElementTemplates__Error',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ListGroup,\n items: []\n };\n const properties = elementTemplate.properties.filter(({\n binding,\n type\n }) => {\n return !type && binding.type === CAMUNDA_ERROR_EVENT_DEFINITION_TYPE;\n });\n properties.forEach((property, index) => {\n const item = ErrorProperties({\n element,\n index,\n property,\n groups\n });\n if (item) {\n group.items.push(item);\n }\n });\n\n // remove if empty\n if (!group.items.length) {\n return null;\n }\n return group;\n}\n\n/**\n *\n * @param {string|string[]} idOrIds\n * @param {Array<{ id: string }} groups\n * @param {Array<{ id: string }>} groupsToAdd\n */\nfunction addGroupsAfter(idOrIds, groups, groupsToAdd) {\n let ids = idOrIds;\n if (!Array.isArray(idOrIds)) {\n ids = [idOrIds];\n }\n\n // find index of last group with provided id\n const index = groups.reduce((acc, group, index) => {\n return ids.includes(group.id) ? index : acc;\n }, -1);\n if (index !== -1) {\n groups.splice(index + 1, 0, ...groupsToAdd);\n } else {\n // add in the beginning if group with provided id is missing\n groups.unshift(...groupsToAdd);\n }\n}\nfunction filterWithEntriesVisible(template, groups) {\n if (!template.entriesVisible) {\n return groups.filter(group => {\n return ALWAYS_DISPLAYED_GROUPS.includes(group.id) || group.id.startsWith('ElementTemplates__');\n });\n }\n return groups;\n}\n\nvar propertiesProviderModule = {\n __depends__: [diagram_js_lib_i18n_translate__WEBPACK_IMPORTED_MODULE_19__[\"default\"], bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.CamundaPlatformPropertiesProviderModule],\n __init__: ['elementTemplatesPropertiesProvider'],\n elementTemplatesPropertiesProvider: ['type', ElementTemplatesPropertiesProvider]\n};\n\nvar index = {\n __depends__: [coreModule, propertiesProviderModule]\n};\n\n/**\n * Moddle base element.\n */\nfunction Base() {}\nBase.prototype.get = function (name) {\n return this.$model.properties.get(this, name);\n};\nBase.prototype.set = function (name, value) {\n this.$model.properties.set(this, name, value);\n};\n\n/**\n * A model element factory.\n *\n * @param {Moddle} model\n * @param {Properties} properties\n */\nfunction Factory(model, properties) {\n this.model = model;\n this.properties = properties;\n}\nFactory.prototype.createType = function (descriptor) {\n var model = this.model;\n var props = this.properties,\n prototype = Object.create(Base.prototype);\n\n // initialize default values\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(descriptor.properties, function (p) {\n if (!p.isMany && p.default !== undefined) {\n prototype[p.name] = p.default;\n }\n });\n props.defineModel(prototype, model);\n props.defineDescriptor(prototype, descriptor);\n var name = descriptor.ns.name;\n\n /**\n * The new type constructor\n */\n function ModdleElement(attrs) {\n props.define(this, '$type', {\n value: name,\n enumerable: true\n });\n props.define(this, '$attrs', {\n value: {}\n });\n props.define(this, '$parent', {\n writable: true\n });\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(attrs, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (val, key) {\n this.set(key, val);\n }, this));\n }\n ModdleElement.prototype = prototype;\n ModdleElement.hasType = prototype.$instanceOf = this.model.hasType;\n\n // static links\n props.defineModel(ModdleElement, model);\n props.defineDescriptor(ModdleElement, descriptor);\n return ModdleElement;\n};\n\n/**\n * Built-in moddle types\n */\nvar BUILTINS = {\n String: true,\n Boolean: true,\n Integer: true,\n Real: true,\n Element: true\n};\n\n/**\n * Converters for built in types from string representations\n */\nvar TYPE_CONVERTERS = {\n String: function (s) {\n return s;\n },\n Boolean: function (s) {\n return s === 'true';\n },\n Integer: function (s) {\n return parseInt(s, 10);\n },\n Real: function (s) {\n return parseFloat(s);\n }\n};\n\n/**\n * Convert a type to its real representation\n */\nfunction coerceType(type, value) {\n var converter = TYPE_CONVERTERS[type];\n if (converter) {\n return converter(value);\n } else {\n return value;\n }\n}\n\n/**\n * Return whether the given type is built-in\n */\nfunction isBuiltIn(type) {\n return !!BUILTINS[type];\n}\n\n/**\n * Return whether the given type is simple\n */\nfunction isSimple(type) {\n return !!TYPE_CONVERTERS[type];\n}\n\n/**\n * Parses a namespaced attribute name of the form (ns:)localName to an object,\n * given a default prefix to assume in case no explicit namespace is given.\n *\n * @param {String} name\n * @param {String} [defaultPrefix] the default prefix to take, if none is present.\n *\n * @return {Object} the parsed name\n */\nfunction parseName(name, defaultPrefix) {\n var parts = name.split(/:/),\n localName,\n prefix;\n\n // no prefix (i.e. only local name)\n if (parts.length === 1) {\n localName = name;\n prefix = defaultPrefix;\n }\n\n // prefix + local name\n else if (parts.length === 2) {\n localName = parts[1];\n prefix = parts[0];\n } else {\n throw new Error('expected or , got ' + name);\n }\n name = (prefix ? prefix + ':' : '') + localName;\n return {\n name: name,\n prefix: prefix,\n localName: localName\n };\n}\n\n/**\n * A utility to build element descriptors.\n */\nfunction DescriptorBuilder(nameNs) {\n this.ns = nameNs;\n this.name = nameNs.name;\n this.allTypes = [];\n this.allTypesByName = {};\n this.properties = [];\n this.propertiesByName = {};\n}\nDescriptorBuilder.prototype.build = function () {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.pick)(this, ['ns', 'name', 'allTypes', 'allTypesByName', 'properties', 'propertiesByName', 'bodyProperty', 'idProperty']);\n};\n\n/**\n * Add property at given index.\n *\n * @param {Object} p\n * @param {Number} [idx]\n * @param {Boolean} [validate=true]\n */\nDescriptorBuilder.prototype.addProperty = function (p, idx, validate) {\n if (typeof idx === 'boolean') {\n validate = idx;\n idx = undefined;\n }\n this.addNamedProperty(p, validate !== false);\n var properties = this.properties;\n if (idx !== undefined) {\n properties.splice(idx, 0, p);\n } else {\n properties.push(p);\n }\n};\nDescriptorBuilder.prototype.replaceProperty = function (oldProperty, newProperty, replace) {\n var oldNameNs = oldProperty.ns;\n var props = this.properties,\n propertiesByName = this.propertiesByName,\n rename = oldProperty.name !== newProperty.name;\n if (oldProperty.isId) {\n if (!newProperty.isId) {\n throw new Error('property <' + newProperty.ns.name + '> must be id property ' + 'to refine <' + oldProperty.ns.name + '>');\n }\n this.setIdProperty(newProperty, false);\n }\n if (oldProperty.isBody) {\n if (!newProperty.isBody) {\n throw new Error('property <' + newProperty.ns.name + '> must be body property ' + 'to refine <' + oldProperty.ns.name + '>');\n }\n\n // TODO: Check compatibility\n this.setBodyProperty(newProperty, false);\n }\n\n // validate existence and get location of old property\n var idx = props.indexOf(oldProperty);\n if (idx === -1) {\n throw new Error('property <' + oldNameNs.name + '> not found in property list');\n }\n\n // remove old property\n props.splice(idx, 1);\n\n // replacing the named property is intentional\n //\n // * validate only if this is a \"rename\" operation\n // * add at specific index unless we \"replace\"\n //\n this.addProperty(newProperty, replace ? undefined : idx, rename);\n\n // make new property available under old name\n propertiesByName[oldNameNs.name] = propertiesByName[oldNameNs.localName] = newProperty;\n};\nDescriptorBuilder.prototype.redefineProperty = function (p, targetPropertyName, replace) {\n var nsPrefix = p.ns.prefix;\n var parts = targetPropertyName.split('#');\n var name = parseName(parts[0], nsPrefix);\n var attrName = parseName(parts[1], name.prefix).name;\n var redefinedProperty = this.propertiesByName[attrName];\n if (!redefinedProperty) {\n throw new Error('refined property <' + attrName + '> not found');\n } else {\n this.replaceProperty(redefinedProperty, p, replace);\n }\n delete p.redefines;\n};\nDescriptorBuilder.prototype.addNamedProperty = function (p, validate) {\n var ns = p.ns,\n propsByName = this.propertiesByName;\n if (validate) {\n this.assertNotDefined(p, ns.name);\n this.assertNotDefined(p, ns.localName);\n }\n propsByName[ns.name] = propsByName[ns.localName] = p;\n};\nDescriptorBuilder.prototype.removeNamedProperty = function (p) {\n var ns = p.ns,\n propsByName = this.propertiesByName;\n delete propsByName[ns.name];\n delete propsByName[ns.localName];\n};\nDescriptorBuilder.prototype.setBodyProperty = function (p, validate) {\n if (validate && this.bodyProperty) {\n throw new Error('body property defined multiple times ' + '(<' + this.bodyProperty.ns.name + '>, <' + p.ns.name + '>)');\n }\n this.bodyProperty = p;\n};\nDescriptorBuilder.prototype.setIdProperty = function (p, validate) {\n if (validate && this.idProperty) {\n throw new Error('id property defined multiple times ' + '(<' + this.idProperty.ns.name + '>, <' + p.ns.name + '>)');\n }\n this.idProperty = p;\n};\nDescriptorBuilder.prototype.assertNotTrait = function (typeDescriptor) {\n const _extends = typeDescriptor.extends || [];\n if (_extends.length) {\n throw new Error(`cannot create <${typeDescriptor.name}> extending <${typeDescriptor.extends}>`);\n }\n};\nDescriptorBuilder.prototype.assertNotDefined = function (p, name) {\n var propertyName = p.name,\n definedProperty = this.propertiesByName[propertyName];\n if (definedProperty) {\n throw new Error('property <' + propertyName + '> already defined; ' + 'override of <' + definedProperty.definedBy.ns.name + '#' + definedProperty.ns.name + '> by ' + '<' + p.definedBy.ns.name + '#' + p.ns.name + '> not allowed without redefines');\n }\n};\nDescriptorBuilder.prototype.hasProperty = function (name) {\n return this.propertiesByName[name];\n};\nDescriptorBuilder.prototype.addTrait = function (t, inherited) {\n if (inherited) {\n this.assertNotTrait(t);\n }\n var typesByName = this.allTypesByName,\n types = this.allTypes;\n var typeName = t.name;\n if (typeName in typesByName) {\n return;\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(t.properties, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (p) {\n // clone property to allow extensions\n p = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, p, {\n name: p.ns.localName,\n inherited: inherited\n });\n Object.defineProperty(p, 'definedBy', {\n value: t\n });\n var replaces = p.replaces,\n redefines = p.redefines;\n\n // add replace/redefine support\n if (replaces || redefines) {\n this.redefineProperty(p, replaces || redefines, replaces);\n } else {\n if (p.isBody) {\n this.setBodyProperty(p);\n }\n if (p.isId) {\n this.setIdProperty(p);\n }\n this.addProperty(p);\n }\n }, this));\n types.push(t);\n typesByName[typeName] = t;\n};\n\n/**\n * A registry of Moddle packages.\n *\n * @param {Array} packages\n * @param {Properties} properties\n */\nfunction Registry(packages, properties) {\n this.packageMap = {};\n this.typeMap = {};\n this.packages = [];\n this.properties = properties;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(packages, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(this.registerPackage, this));\n}\nRegistry.prototype.getPackage = function (uriOrPrefix) {\n return this.packageMap[uriOrPrefix];\n};\nRegistry.prototype.getPackages = function () {\n return this.packages;\n};\nRegistry.prototype.registerPackage = function (pkg) {\n // copy package\n pkg = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, pkg);\n var pkgMap = this.packageMap;\n ensureAvailable(pkgMap, pkg, 'prefix');\n ensureAvailable(pkgMap, pkg, 'uri');\n\n // register types\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(pkg.types, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (descriptor) {\n this.registerType(descriptor, pkg);\n }, this));\n pkgMap[pkg.uri] = pkgMap[pkg.prefix] = pkg;\n this.packages.push(pkg);\n};\n\n/**\n * Register a type from a specific package with us\n */\nRegistry.prototype.registerType = function (type, pkg) {\n type = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, type, {\n superClass: (type.superClass || []).slice(),\n extends: (type.extends || []).slice(),\n properties: (type.properties || []).slice(),\n meta: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(type.meta || {})\n });\n var ns = parseName(type.name, pkg.prefix),\n name = ns.name,\n propertiesByName = {};\n\n // parse properties\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(type.properties, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (p) {\n // namespace property names\n var propertyNs = parseName(p.name, ns.prefix),\n propertyName = propertyNs.name;\n\n // namespace property types\n if (!isBuiltIn(p.type)) {\n p.type = parseName(p.type, propertyNs.prefix).name;\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(p, {\n ns: propertyNs,\n name: propertyName\n });\n propertiesByName[propertyName] = p;\n }, this));\n\n // update ns + name\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(type, {\n ns: ns,\n name: name,\n propertiesByName: propertiesByName\n });\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(type.extends, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (extendsName) {\n var extendsNameNs = parseName(extendsName, ns.prefix);\n var extended = this.typeMap[extendsNameNs.name];\n extended.traits = extended.traits || [];\n extended.traits.push(name);\n }, this));\n\n // link to package\n this.definePackage(type, pkg);\n\n // register\n this.typeMap[name] = type;\n};\n\n/**\n * Traverse the type hierarchy from bottom to top,\n * calling iterator with (type, inherited) for all elements in\n * the inheritance chain.\n *\n * @param {Object} nsName\n * @param {Function} iterator\n * @param {Boolean} [trait=false]\n */\nRegistry.prototype.mapTypes = function (nsName, iterator, trait) {\n var type = isBuiltIn(nsName.name) ? {\n name: nsName.name\n } : this.typeMap[nsName.name];\n var self = this;\n\n /**\n * Traverse the selected super type or trait\n *\n * @param {String} cls\n * @param {Boolean} [trait=false]\n */\n function traverse(cls, trait) {\n var parentNs = parseName(cls, isBuiltIn(cls) ? '' : nsName.prefix);\n self.mapTypes(parentNs, iterator, trait);\n }\n\n /**\n * Traverse the selected trait.\n *\n * @param {String} cls\n */\n function traverseTrait(cls) {\n return traverse(cls, true);\n }\n\n /**\n * Traverse the selected super type\n *\n * @param {String} cls\n */\n function traverseSuper(cls) {\n return traverse(cls, false);\n }\n if (!type) {\n throw new Error('unknown type <' + nsName.name + '>');\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(type.superClass, trait ? traverseTrait : traverseSuper);\n\n // call iterator with (type, inherited=!trait)\n iterator(type, !trait);\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(type.traits, traverseTrait);\n};\n\n/**\n * Returns the effective descriptor for a type.\n *\n * @param {String} type the namespaced name (ns:localName) of the type\n *\n * @return {Descriptor} the resulting effective descriptor\n */\nRegistry.prototype.getEffectiveDescriptor = function (name) {\n var nsName = parseName(name);\n var builder = new DescriptorBuilder(nsName);\n this.mapTypes(nsName, function (type, inherited) {\n builder.addTrait(type, inherited);\n });\n var descriptor = builder.build();\n\n // define package link\n this.definePackage(descriptor, descriptor.allTypes[descriptor.allTypes.length - 1].$pkg);\n return descriptor;\n};\nRegistry.prototype.definePackage = function (target, pkg) {\n this.properties.define(target, '$pkg', {\n value: pkg\n });\n};\n\n// helpers ////////////////////////////\n\nfunction ensureAvailable(packageMap, pkg, identifierKey) {\n var value = pkg[identifierKey];\n if (value in packageMap) {\n throw new Error('package with ' + identifierKey + ' <' + value + '> already defined');\n }\n}\n\n/**\n * A utility that gets and sets properties of model elements.\n *\n * @param {Model} model\n */\nfunction Properties(model) {\n this.model = model;\n}\n\n/**\n * Sets a named property on the target element.\n * If the value is undefined, the property gets deleted.\n *\n * @param {Object} target\n * @param {String} name\n * @param {Object} value\n */\nProperties.prototype.set = function (target, name, value) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(name) || !name.length) {\n throw new TypeError('property name must be a non-empty string');\n }\n var property = this.getProperty(target, name);\n var propertyName = property && property.name;\n if (isUndefined(value)) {\n // unset the property, if the specified value is undefined;\n // delete from $attrs (for extensions) or the target itself\n if (property) {\n delete target[propertyName];\n } else {\n delete target.$attrs[stripGlobal(name)];\n }\n } else {\n // set the property, defining well defined properties on the fly\n // or simply updating them in target.$attrs (for extensions)\n if (property) {\n if (propertyName in target) {\n target[propertyName] = value;\n } else {\n defineProperty(target, property, value);\n }\n } else {\n target.$attrs[stripGlobal(name)] = value;\n }\n }\n};\n\n/**\n * Returns the named property of the given element\n *\n * @param {Object} target\n * @param {String} name\n *\n * @return {Object}\n */\nProperties.prototype.get = function (target, name) {\n var property = this.getProperty(target, name);\n if (!property) {\n return target.$attrs[stripGlobal(name)];\n }\n var propertyName = property.name;\n\n // check if access to collection property and lazily initialize it\n if (!target[propertyName] && property.isMany) {\n defineProperty(target, property, []);\n }\n return target[propertyName];\n};\n\n/**\n * Define a property on the target element\n *\n * @param {Object} target\n * @param {String} name\n * @param {Object} options\n */\nProperties.prototype.define = function (target, name, options) {\n if (!options.writable) {\n var value = options.value;\n\n // use getters for read-only variables to support ES6 proxies\n // cf. https://github.com/bpmn-io/internal-docs/issues/386\n options = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, options, {\n get: function () {\n return value;\n }\n });\n delete options.value;\n }\n Object.defineProperty(target, name, options);\n};\n\n/**\n * Define the descriptor for an element\n */\nProperties.prototype.defineDescriptor = function (target, descriptor) {\n this.define(target, '$descriptor', {\n value: descriptor\n });\n};\n\n/**\n * Define the model for an element\n */\nProperties.prototype.defineModel = function (target, model) {\n this.define(target, '$model', {\n value: model\n });\n};\n\n/**\n * Return property with the given name on the element.\n *\n * @param {any} target\n * @param {string} name\n *\n * @return {object | null} property\n */\nProperties.prototype.getProperty = function (target, name) {\n var model = this.model;\n var property = model.getPropertyDescriptor(target, name);\n if (property) {\n return property;\n }\n if (name.includes(':')) {\n return null;\n }\n const strict = model.config.strict;\n if (typeof strict !== 'undefined') {\n const error = new TypeError(`unknown property <${name}> on <${target.$type}>`);\n if (strict) {\n throw error;\n } else {\n // eslint-disable-next-line no-undef\n typeof console !== 'undefined' && console.warn(error);\n }\n }\n return null;\n};\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\nfunction defineProperty(target, property, value) {\n Object.defineProperty(target, property.name, {\n enumerable: !property.isReference,\n writable: true,\n value: value,\n configurable: true\n });\n}\nfunction stripGlobal(name) {\n return name.replace(/^:/, '');\n}\n\n// Moddle implementation /////////////////////////////////////////////////\n\n/**\n * @class Moddle\n *\n * A model that can be used to create elements of a specific type.\n *\n * @example\n *\n * var Moddle = require('moddle');\n *\n * var pkg = {\n * name: 'mypackage',\n * prefix: 'my',\n * types: [\n * { name: 'Root' }\n * ]\n * };\n *\n * var moddle = new Moddle([pkg]);\n *\n * @param {Array} packages the packages to contain\n *\n * @param { { strict?: boolean } } [config] moddle configuration\n */\nfunction Moddle(packages, config = {}) {\n this.properties = new Properties(this);\n this.factory = new Factory(this, this.properties);\n this.registry = new Registry(packages, this.properties);\n this.typeCache = {};\n this.config = config;\n}\n\n/**\n * Create an instance of the specified type.\n *\n * @method Moddle#create\n *\n * @example\n *\n * var foo = moddle.create('my:Foo');\n * var bar = moddle.create('my:Bar', { id: 'BAR_1' });\n *\n * @param {String|Object} descriptor the type descriptor or name know to the model\n * @param {Object} attrs a number of attributes to initialize the model instance with\n * @return {Object} model instance\n */\nModdle.prototype.create = function (descriptor, attrs) {\n var Type = this.getType(descriptor);\n if (!Type) {\n throw new Error('unknown type <' + descriptor + '>');\n }\n return new Type(attrs);\n};\n\n/**\n * Returns the type representing a given descriptor\n *\n * @method Moddle#getType\n *\n * @example\n *\n * var Foo = moddle.getType('my:Foo');\n * var foo = new Foo({ 'id' : 'FOO_1' });\n *\n * @param {String|Object} descriptor the type descriptor or name know to the model\n * @return {Object} the type representing the descriptor\n */\nModdle.prototype.getType = function (descriptor) {\n var cache = this.typeCache;\n var name = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(descriptor) ? descriptor : descriptor.ns.name;\n var type = cache[name];\n if (!type) {\n descriptor = this.registry.getEffectiveDescriptor(name);\n type = cache[name] = this.factory.createType(descriptor);\n }\n return type;\n};\n\n/**\n * Creates an any-element type to be used within model instances.\n *\n * This can be used to create custom elements that lie outside the meta-model.\n * The created element contains all the meta-data required to serialize it\n * as part of meta-model elements.\n *\n * @method Moddle#createAny\n *\n * @example\n *\n * var foo = moddle.createAny('vendor:Foo', 'http://vendor', {\n * value: 'bar'\n * });\n *\n * var container = moddle.create('my:Container', 'http://my', {\n * any: [ foo ]\n * });\n *\n * // go ahead and serialize the stuff\n *\n *\n * @param {String} name the name of the element\n * @param {String} nsUri the namespace uri of the element\n * @param {Object} [properties] a map of properties to initialize the instance with\n * @return {Object} the any type instance\n */\nModdle.prototype.createAny = function (name, nsUri, properties) {\n var nameNs = parseName(name);\n var element = {\n $type: name,\n $instanceOf: function (type) {\n return type === this.$type;\n },\n get: function (key) {\n return this[key];\n },\n set: function (key, value) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.set)(this, [key], value);\n }\n };\n var descriptor = {\n name: name,\n isGeneric: true,\n ns: {\n prefix: nameNs.prefix,\n localName: nameNs.localName,\n uri: nsUri\n }\n };\n this.properties.defineDescriptor(element, descriptor);\n this.properties.defineModel(element, this);\n this.properties.define(element, 'get', {\n enumerable: false,\n writable: true\n });\n this.properties.define(element, 'set', {\n enumerable: false,\n writable: true\n });\n this.properties.define(element, '$parent', {\n enumerable: false,\n writable: true\n });\n this.properties.define(element, '$instanceOf', {\n enumerable: false,\n writable: true\n });\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(properties, function (a, key) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isObject)(a) && a.value !== undefined) {\n element[a.name] = a.value;\n } else {\n element[key] = a;\n }\n });\n return element;\n};\n\n/**\n * Returns a registered package by uri or prefix\n *\n * @return {Object} the package\n */\nModdle.prototype.getPackage = function (uriOrPrefix) {\n return this.registry.getPackage(uriOrPrefix);\n};\n\n/**\n * Returns a snapshot of all known packages\n *\n * @return {Object} the package\n */\nModdle.prototype.getPackages = function () {\n return this.registry.getPackages();\n};\n\n/**\n * Returns the descriptor for an element\n */\nModdle.prototype.getElementDescriptor = function (element) {\n return element.$descriptor;\n};\n\n/**\n * Returns true if the given descriptor or instance\n * represents the given type.\n *\n * May be applied to this, if element is omitted.\n */\nModdle.prototype.hasType = function (element, type) {\n if (type === undefined) {\n type = element;\n element = this;\n }\n var descriptor = element.$model.getElementDescriptor(element);\n return type in descriptor.allTypesByName;\n};\n\n/**\n * Returns the descriptor of an elements named property\n */\nModdle.prototype.getPropertyDescriptor = function (element, property) {\n return this.getElementDescriptor(element).propertiesByName[property];\n};\n\n/**\n * Returns a mapped type's descriptor\n */\nModdle.prototype.getTypeDescriptor = function (type) {\n return this.registry.typeMap[type];\n};\n\nvar fromCharCode = String.fromCharCode;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar ENTITY_PATTERN = /(\\d+);|([0-9a-f]+);|&(\\w+);/ig;\nvar ENTITY_MAPPING = {\n 'amp': '&',\n 'apos': '\\'',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"'\n};\n\n// map UPPERCASE variants of supported special chars\nObject.keys(ENTITY_MAPPING).forEach(function (k) {\n ENTITY_MAPPING[k.toUpperCase()] = ENTITY_MAPPING[k];\n});\nfunction replaceEntities(_, d, x, z) {\n // reserved names, i.e. \n if (z) {\n if (hasOwnProperty.call(ENTITY_MAPPING, z)) {\n return ENTITY_MAPPING[z];\n } else {\n // fall back to original value\n return '&' + z + ';';\n }\n }\n\n // decimal encoded char\n if (d) {\n return fromCharCode(d);\n }\n\n // hex encoded char\n return fromCharCode(parseInt(x, 16));\n}\n\n/**\n * A basic entity decoder that can decode a minimal\n * sub-set of reserved names (&) as well as\n * hex (ય) and decimal (ӏ) encoded characters.\n *\n * @param {string} s\n *\n * @return {string} decoded string\n */\nfunction decodeEntities(s) {\n if (s.length > 3 && s.indexOf('&') !== -1) {\n return s.replace(ENTITY_PATTERN, replaceEntities);\n }\n return s;\n}\nvar NON_WHITESPACE_OUTSIDE_ROOT_NODE = 'non-whitespace outside of root node';\nfunction error$1(msg) {\n return new Error(msg);\n}\nfunction missingNamespaceForPrefix(prefix) {\n return 'missing namespace for prefix <' + prefix + '>';\n}\nfunction getter(getFn) {\n return {\n 'get': getFn,\n 'enumerable': true\n };\n}\nfunction cloneNsMatrix(nsMatrix) {\n var clone = {},\n key;\n for (key in nsMatrix) {\n clone[key] = nsMatrix[key];\n }\n return clone;\n}\nfunction uriPrefix(prefix) {\n return prefix + '$uri';\n}\nfunction buildNsMatrix(nsUriToPrefix) {\n var nsMatrix = {},\n uri,\n prefix;\n for (uri in nsUriToPrefix) {\n prefix = nsUriToPrefix[uri];\n nsMatrix[prefix] = prefix;\n nsMatrix[uriPrefix(prefix)] = uri;\n }\n return nsMatrix;\n}\nfunction noopGetContext() {\n return {\n line: 0,\n column: 0\n };\n}\nfunction throwFunc(err) {\n throw err;\n}\n\n/**\n * Creates a new parser with the given options.\n *\n * @constructor\n *\n * @param {!Object=} options\n */\nfunction Parser(options) {\n if (!this) {\n return new Parser(options);\n }\n var proxy = options && options['proxy'];\n var onText,\n onOpenTag,\n onCloseTag,\n onCDATA,\n onError = throwFunc,\n onWarning,\n onComment,\n onQuestion,\n onAttention;\n var getContext = noopGetContext;\n\n /**\n * Do we need to parse the current elements attributes for namespaces?\n *\n * @type {boolean}\n */\n var maybeNS = false;\n\n /**\n * Do we process namespaces at all?\n *\n * @type {boolean}\n */\n var isNamespace = false;\n\n /**\n * The caught error returned on parse end\n *\n * @type {Error}\n */\n var returnError = null;\n\n /**\n * Should we stop parsing?\n *\n * @type {boolean}\n */\n var parseStop = false;\n\n /**\n * A map of { uri: prefix } used by the parser.\n *\n * This map will ensure we can normalize prefixes during processing;\n * for each uri, only one prefix will be exposed to the handlers.\n *\n * @type {!Object}}\n */\n var nsUriToPrefix;\n\n /**\n * Handle parse error.\n *\n * @param {string|Error} err\n */\n function handleError(err) {\n if (!(err instanceof Error)) {\n err = error$1(err);\n }\n returnError = err;\n onError(err, getContext);\n }\n\n /**\n * Handle parse error.\n *\n * @param {string|Error} err\n */\n function handleWarning(err) {\n if (!onWarning) {\n return;\n }\n if (!(err instanceof Error)) {\n err = error$1(err);\n }\n onWarning(err, getContext);\n }\n\n /**\n * Register parse listener.\n *\n * @param {string} name\n * @param {Function} cb\n *\n * @return {Parser}\n */\n this['on'] = function (name, cb) {\n if (typeof cb !== 'function') {\n throw error$1('required args ');\n }\n switch (name) {\n case 'openTag':\n onOpenTag = cb;\n break;\n case 'text':\n onText = cb;\n break;\n case 'closeTag':\n onCloseTag = cb;\n break;\n case 'error':\n onError = cb;\n break;\n case 'warn':\n onWarning = cb;\n break;\n case 'cdata':\n onCDATA = cb;\n break;\n case 'attention':\n onAttention = cb;\n break;\n // \n case 'question':\n onQuestion = cb;\n break;\n // .... ?>\n case 'comment':\n onComment = cb;\n break;\n default:\n throw error$1('unsupported event: ' + name);\n }\n return this;\n };\n\n /**\n * Set the namespace to prefix mapping.\n *\n * @example\n *\n * parser.ns({\n * 'http://foo': 'foo',\n * 'http://bar': 'bar'\n * });\n *\n * @param {!Object} nsMap\n *\n * @return {Parser}\n */\n this['ns'] = function (nsMap) {\n if (typeof nsMap === 'undefined') {\n nsMap = {};\n }\n if (typeof nsMap !== 'object') {\n throw error$1('required args ');\n }\n var _nsUriToPrefix = {},\n k;\n for (k in nsMap) {\n _nsUriToPrefix[k] = nsMap[k];\n }\n isNamespace = true;\n nsUriToPrefix = _nsUriToPrefix;\n return this;\n };\n\n /**\n * Parse xml string.\n *\n * @param {string} xml\n *\n * @return {Error} returnError, if not thrown\n */\n this['parse'] = function (xml) {\n if (typeof xml !== 'string') {\n throw error$1('required args ');\n }\n returnError = null;\n parse(xml);\n getContext = noopGetContext;\n parseStop = false;\n return returnError;\n };\n\n /**\n * Stop parsing.\n */\n this['stop'] = function () {\n parseStop = true;\n };\n\n /**\n * Parse string, invoking configured listeners on element.\n *\n * @param {string} xml\n */\n function parse(xml) {\n var nsMatrixStack = isNamespace ? [] : null,\n nsMatrix = isNamespace ? buildNsMatrix(nsUriToPrefix) : null,\n _nsMatrix,\n nodeStack = [],\n anonymousNsCount = 0,\n tagStart = false,\n tagEnd = false,\n i = 0,\n j = 0,\n x,\n y,\n q,\n w,\n v,\n xmlns,\n elementName,\n _elementName,\n elementProxy;\n var attrsString = '',\n attrsStart = 0,\n cachedAttrs // false = parsed with errors, null = needs parsing\n ;\n\n /**\n * Parse attributes on demand and returns the parsed attributes.\n *\n * Return semantics: (1) `false` on attribute parse error,\n * (2) object hash on extracted attrs.\n *\n * @return {boolean|Object}\n */\n function getAttrs() {\n if (cachedAttrs !== null) {\n return cachedAttrs;\n }\n var nsUri,\n nsUriPrefix,\n nsName,\n defaultAlias = isNamespace && nsMatrix['xmlns'],\n attrList = isNamespace && maybeNS ? [] : null,\n i = attrsStart,\n s = attrsString,\n l = s.length,\n hasNewMatrix,\n newalias,\n value,\n alias,\n name,\n attrs = {},\n seenAttrs = {},\n skipAttr,\n w,\n j;\n parseAttr: for (; i < l; i++) {\n skipAttr = false;\n w = s.charCodeAt(i);\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE={ \\f\\n\\r\\t\\v}\n continue;\n }\n\n // wait for non whitespace character\n if (w < 65 || w > 122 || w > 90 && w < 97) {\n if (w !== 95 && w !== 58) {\n // char 95\"_\" 58\":\"\n handleWarning('illegal first char attribute name');\n skipAttr = true;\n }\n }\n\n // parse attribute name\n for (j = i + 1; j < l; j++) {\n w = s.charCodeAt(j);\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 46 ||\n // '.'\n w === 45 ||\n // '-'\n w === 95 // '_'\n ) {\n continue;\n }\n\n // unexpected whitespace\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n handleWarning('missing attribute value');\n i = j;\n continue parseAttr;\n }\n\n // expected \"=\"\n if (w === 61) {\n // \"=\" == 61\n break;\n }\n handleWarning('illegal attribute name char');\n skipAttr = true;\n }\n name = s.substring(i, j);\n if (name === 'xmlns:xmlns') {\n handleWarning('illegal declaration of xmlns');\n skipAttr = true;\n }\n w = s.charCodeAt(j + 1);\n if (w === 34) {\n // '\"'\n j = s.indexOf('\"', i = j + 2);\n if (j === -1) {\n j = s.indexOf('\\'', i);\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n } else if (w === 39) {\n // \"'\"\n j = s.indexOf('\\'', i = j + 2);\n if (j === -1) {\n j = s.indexOf('\"', i);\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n } else {\n handleWarning('missing attribute value quotes');\n skipAttr = true;\n\n // skip to next space\n for (j = j + 1; j < l; j++) {\n w = s.charCodeAt(j + 1);\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n break;\n }\n }\n }\n if (j === -1) {\n handleWarning('missing closing quotes');\n j = l;\n skipAttr = true;\n }\n if (!skipAttr) {\n value = s.substring(i, j);\n }\n i = j;\n\n // ensure SPACE follows attribute\n // skip illegal content otherwise\n // example a=\"b\"c\n for (; j + 1 < l; j++) {\n w = s.charCodeAt(j + 1);\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n break;\n }\n\n // FIRST ILLEGAL CHAR\n if (i === j) {\n handleWarning('illegal character after attribute end');\n skipAttr = true;\n }\n }\n\n // advance cursor to next attribute\n i = j + 1;\n if (skipAttr) {\n continue parseAttr;\n }\n\n // check attribute re-declaration\n if (name in seenAttrs) {\n handleWarning('attribute <' + name + '> already defined');\n continue;\n }\n seenAttrs[name] = true;\n if (!isNamespace) {\n attrs[name] = value;\n continue;\n }\n\n // try to extract namespace information\n if (maybeNS) {\n newalias = name === 'xmlns' ? 'xmlns' : name.charCodeAt(0) === 120 && name.substr(0, 6) === 'xmlns:' ? name.substr(6) : null;\n\n // handle xmlns(:alias) assignment\n if (newalias !== null) {\n nsUri = decodeEntities(value);\n nsUriPrefix = uriPrefix(newalias);\n alias = nsUriToPrefix[nsUri];\n if (!alias) {\n // no prefix defined or prefix collision\n if (newalias === 'xmlns' || nsUriPrefix in nsMatrix && nsMatrix[nsUriPrefix] !== nsUri) {\n // alocate free ns prefix\n do {\n alias = 'ns' + anonymousNsCount++;\n } while (typeof nsMatrix[alias] !== 'undefined');\n } else {\n alias = newalias;\n }\n nsUriToPrefix[nsUri] = alias;\n }\n if (nsMatrix[newalias] !== alias) {\n if (!hasNewMatrix) {\n nsMatrix = cloneNsMatrix(nsMatrix);\n hasNewMatrix = true;\n }\n nsMatrix[newalias] = alias;\n if (newalias === 'xmlns') {\n nsMatrix[uriPrefix(alias)] = nsUri;\n defaultAlias = alias;\n }\n nsMatrix[nsUriPrefix] = nsUri;\n }\n\n // expose xmlns(:asd)=\"...\" in attributes\n attrs[name] = value;\n continue;\n }\n\n // collect attributes until all namespace\n // declarations are processed\n attrList.push(name, value);\n continue;\n } /** end if (maybeNs) */\n\n // handle attributes on element without\n // namespace declarations\n w = name.indexOf(':');\n if (w === -1) {\n attrs[name] = value;\n continue;\n }\n\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n name = defaultAlias === nsName ? name.substr(w + 1) : nsName + name.substr(w);\n\n // end: normalize ns attribute name\n\n attrs[name] = value;\n }\n\n // handle deferred, possibly namespaced attributes\n if (maybeNS) {\n // normalize captured attributes\n for (i = 0, l = attrList.length; i < l; i++) {\n name = attrList[i++];\n value = attrList[i];\n w = name.indexOf(':');\n if (w !== -1) {\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n name = defaultAlias === nsName ? name.substr(w + 1) : nsName + name.substr(w);\n\n // end: normalize ns attribute name\n }\n attrs[name] = value;\n }\n\n // end: normalize captured attributes\n }\n return cachedAttrs = attrs;\n }\n\n /**\n * Extract the parse context { line, column, part }\n * from the current parser position.\n *\n * @return {Object} parse context\n */\n function getParseContext() {\n var splitsRe = /(\\r\\n|\\r|\\n)/g;\n var line = 0;\n var column = 0;\n var startOfLine = 0;\n var endOfLine = j;\n var match;\n var data;\n while (i >= startOfLine) {\n match = splitsRe.exec(xml);\n if (!match) {\n break;\n }\n\n // end of line = (break idx + break chars)\n endOfLine = match[0].length + match.index;\n if (endOfLine > i) {\n break;\n }\n\n // advance to next line\n line += 1;\n startOfLine = endOfLine;\n }\n\n // EOF errors\n if (i == -1) {\n column = endOfLine;\n data = xml.substring(j);\n } else\n // start errors\n if (j === 0) {\n data = xml.substring(j, i);\n }\n\n // other errors\n else {\n column = i - startOfLine;\n data = j == -1 ? xml.substring(i) : xml.substring(i, j + 1);\n }\n return {\n 'data': data,\n 'line': line,\n 'column': column\n };\n }\n getContext = getParseContext;\n if (proxy) {\n elementProxy = Object.create({}, {\n 'name': getter(function () {\n return elementName;\n }),\n 'originalName': getter(function () {\n return _elementName;\n }),\n 'attrs': getter(getAttrs),\n 'ns': getter(function () {\n return nsMatrix;\n })\n });\n }\n\n // actual parse logic\n while (j !== -1) {\n if (xml.charCodeAt(j) === 60) {\n // \"<\"\n i = j;\n } else {\n i = xml.indexOf('<', j);\n }\n\n // parse end\n if (i === -1) {\n if (nodeStack.length) {\n return handleError('unexpected end of file');\n }\n if (j === 0) {\n return handleError('missing start tag');\n }\n if (j < xml.length) {\n if (xml.substring(j).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n }\n }\n return;\n }\n\n // parse text\n if (j !== i) {\n if (nodeStack.length) {\n if (onText) {\n onText(xml.substring(j, i), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n } else {\n if (xml.substring(j, i).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n if (parseStop) {\n return;\n }\n }\n }\n }\n w = xml.charCodeAt(i + 1);\n\n // parse comments + CDATA\n if (w === 33) {\n // \"!\"\n q = xml.charCodeAt(i + 2);\n\n // CDATA section\n if (q === 91 && xml.substr(i + 3, 6) === 'CDATA[') {\n // 91 == \"[\"\n j = xml.indexOf(']]>', i);\n if (j === -1) {\n return handleError('unclosed cdata');\n }\n if (onCDATA) {\n onCDATA(xml.substring(i + 9, j), getContext);\n if (parseStop) {\n return;\n }\n }\n j += 3;\n continue;\n }\n\n // comment\n if (q === 45 && xml.charCodeAt(i + 3) === 45) {\n // 45 == \"-\"\n j = xml.indexOf('-->', i);\n if (j === -1) {\n return handleError('unclosed comment');\n }\n if (onComment) {\n onComment(xml.substring(i + 4, j), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n j += 3;\n continue;\n }\n }\n\n // parse question ... ?>\n if (w === 63) {\n // \"?\"\n j = xml.indexOf('?>', i);\n if (j === -1) {\n return handleError('unclosed question');\n }\n if (onQuestion) {\n onQuestion(xml.substring(i, j + 2), getContext);\n if (parseStop) {\n return;\n }\n }\n j += 2;\n continue;\n }\n\n // find matching closing tag for attention or standard tags\n // for that we must skip through attribute values\n // (enclosed in single or double quotes)\n for (x = i + 1;; x++) {\n v = xml.charCodeAt(x);\n if (isNaN(v)) {\n j = -1;\n return handleError('unclosed tag');\n }\n\n // [10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\n // skips the quoted string\n // (double quotes) does not appear in a literal enclosed by (double quotes)\n // (single quote) does not appear in a literal enclosed by (single quote)\n if (v === 34) {\n // '\"'\n q = xml.indexOf('\"', x + 1);\n x = q !== -1 ? q : x;\n } else if (v === 39) {\n // \"'\"\n q = xml.indexOf(\"'\", x + 1);\n x = q !== -1 ? q : x;\n } else if (v === 62) {\n // '>'\n j = x;\n break;\n }\n }\n\n // parse attention \n // previously comment and CDATA have already been parsed\n if (w === 33) {\n // \"!\"\n\n if (onAttention) {\n onAttention(xml.substring(i, j + 1), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n j += 1;\n continue;\n }\n\n // don't process attributes;\n // there are none\n cachedAttrs = {};\n\n // if (xml.charCodeAt(i+1) === 47) { // close tag match\n x = elementName = nodeStack.pop();\n q = i + 2 + x.length;\n if (xml.substring(i + 2, q) !== x) {\n return handleError('closing tag mismatch');\n }\n\n // verify chars in close tag\n for (; q < j; q++) {\n w = xml.charCodeAt(q);\n if (w === 32 || w > 8 && w < 14) {\n // \\f\\n\\r\\t\\v space\n continue;\n }\n return handleError('close tag');\n }\n } else {\n if (xml.charCodeAt(j - 1) === 47) {\n // .../>\n x = elementName = xml.substring(i + 1, j - 1);\n tagStart = true;\n tagEnd = true;\n } else {\n x = elementName = xml.substring(i + 1, j);\n tagStart = true;\n tagEnd = false;\n }\n if (!(w > 96 && w < 123 || w > 64 && w < 91 || w === 95 || w === 58)) {\n // char 95\"_\" 58\":\"\n return handleError('illegal first char nodeName');\n }\n for (q = 1, y = x.length; q < y; q++) {\n w = x.charCodeAt(q);\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 45 || w === 95 || w == 46) {\n continue;\n }\n if (w === 32 || w < 14 && w > 8) {\n // \\f\\n\\r\\t\\v space\n elementName = x.substring(0, q);\n\n // maybe there are attributes\n cachedAttrs = null;\n break;\n }\n return handleError('invalid nodeName');\n }\n if (!tagEnd) {\n nodeStack.push(elementName);\n }\n }\n if (isNamespace) {\n _nsMatrix = nsMatrix;\n if (tagStart) {\n // remember old namespace\n // unless we're self-closing\n if (!tagEnd) {\n nsMatrixStack.push(_nsMatrix);\n }\n if (cachedAttrs === null) {\n // quick check, whether there may be namespace\n // declarations on the node; if that is the case\n // we need to eagerly parse the node attributes\n if (maybeNS = x.indexOf('xmlns', q) !== -1) {\n attrsStart = q;\n attrsString = x;\n getAttrs();\n maybeNS = false;\n }\n }\n }\n _elementName = elementName;\n w = elementName.indexOf(':');\n if (w !== -1) {\n xmlns = nsMatrix[elementName.substring(0, w)];\n\n // prefix given; namespace must exist\n if (!xmlns) {\n return handleError('missing namespace on <' + _elementName + '>');\n }\n elementName = elementName.substr(w + 1);\n } else {\n xmlns = nsMatrix['xmlns'];\n\n // if no default namespace is defined,\n // we'll import the element as anonymous.\n //\n // it is up to users to correct that to the document defined\n // targetNamespace, or whatever their undersanding of the\n // XML spec mandates.\n }\n\n // adjust namespace prefixs as configured\n if (xmlns) {\n elementName = xmlns + ':' + elementName;\n }\n }\n if (tagStart) {\n attrsStart = q;\n attrsString = x;\n if (onOpenTag) {\n if (proxy) {\n onOpenTag(elementProxy, decodeEntities, tagEnd, getContext);\n } else {\n onOpenTag(elementName, getAttrs, decodeEntities, tagEnd, getContext);\n }\n if (parseStop) {\n return;\n }\n }\n }\n if (tagEnd) {\n if (onCloseTag) {\n onCloseTag(proxy ? elementProxy : elementName, decodeEntities, tagStart, getContext);\n if (parseStop) {\n return;\n }\n }\n\n // restore old namespace\n if (isNamespace) {\n if (!tagStart) {\n nsMatrix = nsMatrixStack.pop();\n } else {\n nsMatrix = _nsMatrix;\n }\n }\n }\n j += 1;\n }\n } /** end parse */\n}\n\nfunction hasLowerCaseAlias(pkg) {\n return pkg.xml && pkg.xml.tagAlias === 'lowerCase';\n}\nvar DEFAULT_NS_MAP = {\n 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n 'xml': 'http://www.w3.org/XML/1998/namespace'\n};\nvar SERIALIZE_PROPERTY = 'property';\nfunction getSerialization(element) {\n return element.xml && element.xml.serialize;\n}\nfunction getSerializationType(element) {\n const type = getSerialization(element);\n return type !== SERIALIZE_PROPERTY && (type || null);\n}\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nfunction aliasToName(aliasNs, pkg) {\n if (!hasLowerCaseAlias(pkg)) {\n return aliasNs.name;\n }\n return aliasNs.prefix + ':' + capitalize(aliasNs.localName);\n}\n\n/**\n * Un-prefix a potentially prefixed type name.\n *\n * @param {NsName} nameNs\n * @param {Object} [pkg]\n *\n * @return {string}\n */\nfunction prefixedToName(nameNs, pkg) {\n var name = nameNs.name,\n localName = nameNs.localName;\n var typePrefix = pkg && pkg.xml && pkg.xml.typePrefix;\n if (typePrefix && localName.indexOf(typePrefix) === 0) {\n return nameNs.prefix + ':' + localName.slice(typePrefix.length);\n } else {\n return name;\n }\n}\nfunction normalizeTypeName(name, nsMap, model) {\n // normalize against actual NS\n const nameNs = parseName(name, nsMap.xmlns);\n const normalizedName = `${nsMap[nameNs.prefix] || nameNs.prefix}:${nameNs.localName}`;\n const normalizedNameNs = parseName(normalizedName);\n\n // determine actual type name, based on package-defined prefix\n var pkg = model.getPackage(normalizedNameNs.prefix);\n return prefixedToName(normalizedNameNs, pkg);\n}\nfunction error(message) {\n return new Error(message);\n}\n\n/**\n * Get the moddle descriptor for a given instance or type.\n *\n * @param {ModdleElement|Function} element\n *\n * @return {Object} the moddle descriptor\n */\nfunction getModdleDescriptor(element) {\n return element.$descriptor;\n}\n\n/**\n * A parse context.\n *\n * @class\n *\n * @param {Object} options\n * @param {ElementHandler} options.rootHandler the root handler for parsing a document\n * @param {boolean} [options.lax=false] whether or not to ignore invalid elements\n */\nfunction Context(options) {\n /**\n * @property {ElementHandler} rootHandler\n */\n\n /**\n * @property {Boolean} lax\n */\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(this, options);\n this.elementsById = {};\n this.references = [];\n this.warnings = [];\n\n /**\n * Add an unresolved reference.\n *\n * @param {Object} reference\n */\n this.addReference = function (reference) {\n this.references.push(reference);\n };\n\n /**\n * Add a processed element.\n *\n * @param {ModdleElement} element\n */\n this.addElement = function (element) {\n if (!element) {\n throw error('expected element');\n }\n var elementsById = this.elementsById;\n var descriptor = getModdleDescriptor(element);\n var idProperty = descriptor.idProperty,\n id;\n if (idProperty) {\n id = element.get(idProperty.name);\n if (id) {\n // for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar\n if (!/^([a-z][\\w-.]*:)?[a-z_][\\w-.]*$/i.test(id)) {\n throw new Error('illegal ID <' + id + '>');\n }\n if (elementsById[id]) {\n throw error('duplicate ID <' + id + '>');\n }\n elementsById[id] = element;\n }\n }\n };\n\n /**\n * Add an import warning.\n *\n * @param {Object} warning\n * @param {String} warning.message\n * @param {Error} [warning.error]\n */\n this.addWarning = function (warning) {\n this.warnings.push(warning);\n };\n}\nfunction BaseHandler() {}\nBaseHandler.prototype.handleEnd = function () {};\nBaseHandler.prototype.handleText = function () {};\nBaseHandler.prototype.handleNode = function () {};\n\n/**\n * A simple pass through handler that does nothing except for\n * ignoring all input it receives.\n *\n * This is used to ignore unknown elements and\n * attributes.\n */\nfunction NoopHandler() {}\nNoopHandler.prototype = Object.create(BaseHandler.prototype);\nNoopHandler.prototype.handleNode = function () {\n return this;\n};\nfunction BodyHandler() {}\nBodyHandler.prototype = Object.create(BaseHandler.prototype);\nBodyHandler.prototype.handleText = function (text) {\n this.body = (this.body || '') + text;\n};\nfunction ReferenceHandler(property, context) {\n this.property = property;\n this.context = context;\n}\nReferenceHandler.prototype = Object.create(BodyHandler.prototype);\nReferenceHandler.prototype.handleNode = function (node) {\n if (this.element) {\n throw error('expected no sub nodes');\n } else {\n this.element = this.createReference(node);\n }\n return this;\n};\nReferenceHandler.prototype.handleEnd = function () {\n this.element.id = this.body;\n};\nReferenceHandler.prototype.createReference = function (node) {\n return {\n property: this.property.ns.name,\n id: ''\n };\n};\nfunction ValueHandler(propertyDesc, element) {\n this.element = element;\n this.propertyDesc = propertyDesc;\n}\nValueHandler.prototype = Object.create(BodyHandler.prototype);\nValueHandler.prototype.handleEnd = function () {\n var value = this.body || '',\n element = this.element,\n propertyDesc = this.propertyDesc;\n value = coerceType(propertyDesc.type, value);\n if (propertyDesc.isMany) {\n element.get(propertyDesc.name).push(value);\n } else {\n element.set(propertyDesc.name, value);\n }\n};\nfunction BaseElementHandler() {}\nBaseElementHandler.prototype = Object.create(BodyHandler.prototype);\nBaseElementHandler.prototype.handleNode = function (node) {\n var parser = this,\n element = this.element;\n if (!element) {\n element = this.element = this.createElement(node);\n this.context.addElement(element);\n } else {\n parser = this.handleChild(node);\n }\n return parser;\n};\n\n/**\n * @class Reader.ElementHandler\n *\n */\nfunction ElementHandler(model, typeName, context) {\n this.model = model;\n this.type = model.getType(typeName);\n this.context = context;\n}\nElementHandler.prototype = Object.create(BaseElementHandler.prototype);\nElementHandler.prototype.addReference = function (reference) {\n this.context.addReference(reference);\n};\nElementHandler.prototype.handleText = function (text) {\n var element = this.element,\n descriptor = getModdleDescriptor(element),\n bodyProperty = descriptor.bodyProperty;\n if (!bodyProperty) {\n throw error('unexpected body text <' + text + '>');\n }\n BodyHandler.prototype.handleText.call(this, text);\n};\nElementHandler.prototype.handleEnd = function () {\n var value = this.body,\n element = this.element,\n descriptor = getModdleDescriptor(element),\n bodyProperty = descriptor.bodyProperty;\n if (bodyProperty && value !== undefined) {\n value = coerceType(bodyProperty.type, value);\n element.set(bodyProperty.name, value);\n }\n};\n\n/**\n * Create an instance of the model from the given node.\n *\n * @param {Element} node the xml node\n */\nElementHandler.prototype.createElement = function (node) {\n var attributes = node.attributes,\n Type = this.type,\n descriptor = getModdleDescriptor(Type),\n context = this.context,\n instance = new Type({}),\n model = this.model,\n propNameNs;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(attributes, function (value, name) {\n var prop = descriptor.propertiesByName[name],\n values;\n if (prop && prop.isReference) {\n if (!prop.isMany) {\n context.addReference({\n element: instance,\n property: prop.ns.name,\n id: value\n });\n } else {\n // IDREFS: parse references as whitespace-separated list\n values = value.split(' ');\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(values, function (v) {\n context.addReference({\n element: instance,\n property: prop.ns.name,\n id: v\n });\n });\n }\n } else {\n if (prop) {\n value = coerceType(prop.type, value);\n } else if (name === 'xmlns') {\n name = ':' + name;\n } else {\n propNameNs = parseName(name, descriptor.ns.prefix);\n\n // check whether attribute is defined in a well-known namespace\n // if that is the case we emit a warning to indicate potential misuse\n if (model.getPackage(propNameNs.prefix)) {\n context.addWarning({\n message: 'unknown attribute <' + name + '>',\n element: instance,\n property: name,\n value: value\n });\n }\n }\n instance.set(name, value);\n }\n });\n return instance;\n};\nElementHandler.prototype.getPropertyForNode = function (node) {\n var name = node.name;\n var nameNs = parseName(name);\n var type = this.type,\n model = this.model,\n descriptor = getModdleDescriptor(type);\n var propertyName = nameNs.name,\n property = descriptor.propertiesByName[propertyName];\n\n // search for properties by name first\n\n if (property && !property.isAttr) {\n const serializationType = getSerializationType(property);\n if (serializationType) {\n const elementTypeName = node.attributes[serializationType];\n\n // type is optional, if it does not exists the\n // default type is assumed\n if (elementTypeName) {\n // convert the prefix used to the mapped form, but also\n // take possible type prefixes from XML\n // into account, i.e.: xsi:type=\"t{ActualType}\",\n const normalizedTypeName = normalizeTypeName(elementTypeName, node.ns, model);\n const elementType = model.getType(normalizedTypeName);\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, property, {\n effectiveType: getModdleDescriptor(elementType).name\n });\n }\n }\n\n // search for properties by name first\n return property;\n }\n var pkg = model.getPackage(nameNs.prefix);\n if (pkg) {\n const elementTypeName = aliasToName(nameNs, pkg);\n const elementType = model.getType(elementTypeName);\n\n // search for collection members later\n property = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(descriptor.properties, function (p) {\n return !p.isVirtual && !p.isReference && !p.isAttribute && elementType.hasType(p.type);\n });\n if (property) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, property, {\n effectiveType: getModdleDescriptor(elementType).name\n });\n }\n } else {\n // parse unknown element (maybe extension)\n property = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(descriptor.properties, function (p) {\n return !p.isReference && !p.isAttribute && p.type === 'Element';\n });\n if (property) {\n return property;\n }\n }\n throw error('unrecognized element <' + nameNs.name + '>');\n};\nElementHandler.prototype.toString = function () {\n return 'ElementDescriptor[' + getModdleDescriptor(this.type).name + ']';\n};\nElementHandler.prototype.valueHandler = function (propertyDesc, element) {\n return new ValueHandler(propertyDesc, element);\n};\nElementHandler.prototype.referenceHandler = function (propertyDesc) {\n return new ReferenceHandler(propertyDesc, this.context);\n};\nElementHandler.prototype.handler = function (type) {\n if (type === 'Element') {\n return new GenericElementHandler(this.model, type, this.context);\n } else {\n return new ElementHandler(this.model, type, this.context);\n }\n};\n\n/**\n * Handle the child element parsing\n *\n * @param {Element} node the xml node\n */\nElementHandler.prototype.handleChild = function (node) {\n var propertyDesc, type, element, childHandler;\n propertyDesc = this.getPropertyForNode(node);\n element = this.element;\n type = propertyDesc.effectiveType || propertyDesc.type;\n if (isSimple(type)) {\n return this.valueHandler(propertyDesc, element);\n }\n if (propertyDesc.isReference) {\n childHandler = this.referenceHandler(propertyDesc).handleNode(node);\n } else {\n childHandler = this.handler(type).handleNode(node);\n }\n var newElement = childHandler.element;\n\n // child handles may decide to skip elements\n // by not returning anything\n if (newElement !== undefined) {\n if (propertyDesc.isMany) {\n element.get(propertyDesc.name).push(newElement);\n } else {\n element.set(propertyDesc.name, newElement);\n }\n if (propertyDesc.isReference) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(newElement, {\n element: element\n });\n this.context.addReference(newElement);\n } else {\n // establish child -> parent relationship\n newElement.$parent = element;\n }\n }\n return childHandler;\n};\n\n/**\n * An element handler that performs special validation\n * to ensure the node it gets initialized with matches\n * the handlers type (namespace wise).\n *\n * @param {Moddle} model\n * @param {String} typeName\n * @param {Context} context\n */\nfunction RootElementHandler(model, typeName, context) {\n ElementHandler.call(this, model, typeName, context);\n}\nRootElementHandler.prototype = Object.create(ElementHandler.prototype);\nRootElementHandler.prototype.createElement = function (node) {\n var name = node.name,\n nameNs = parseName(name),\n model = this.model,\n type = this.type,\n pkg = model.getPackage(nameNs.prefix),\n typeName = pkg && aliasToName(nameNs, pkg) || name;\n\n // verify the correct namespace if we parse\n // the first element in the handler tree\n //\n // this ensures we don't mistakenly import wrong namespace elements\n if (!type.hasType(typeName)) {\n throw error('unexpected element <' + node.originalName + '>');\n }\n return ElementHandler.prototype.createElement.call(this, node);\n};\nfunction GenericElementHandler(model, typeName, context) {\n this.model = model;\n this.context = context;\n}\nGenericElementHandler.prototype = Object.create(BaseElementHandler.prototype);\nGenericElementHandler.prototype.createElement = function (node) {\n var name = node.name,\n ns = parseName(name),\n prefix = ns.prefix,\n uri = node.ns[prefix + '$uri'],\n attributes = node.attributes;\n return this.model.createAny(name, uri, attributes);\n};\nGenericElementHandler.prototype.handleChild = function (node) {\n var handler = new GenericElementHandler(this.model, 'Element', this.context).handleNode(node),\n element = this.element;\n var newElement = handler.element,\n children;\n if (newElement !== undefined) {\n children = element.$children = element.$children || [];\n children.push(newElement);\n\n // establish child -> parent relationship\n newElement.$parent = element;\n }\n return handler;\n};\nGenericElementHandler.prototype.handleEnd = function () {\n if (this.body) {\n this.element.$body = this.body;\n }\n};\n\n/**\n * A reader for a meta-model\n *\n * @param {Object} options\n * @param {Model} options.model used to read xml files\n * @param {Boolean} options.lax whether to make parse errors warnings\n */\nfunction Reader(options) {\n if (options instanceof Moddle) {\n options = {\n model: options\n };\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(this, {\n lax: false\n }, options);\n}\n\n/**\n * The fromXML result.\n *\n * @typedef {Object} ParseResult\n *\n * @property {ModdleElement} rootElement\n * @property {Array} references\n * @property {Array} warnings\n * @property {Object} elementsById - a mapping containing each ID -> ModdleElement\n */\n\n/**\n * The fromXML result.\n *\n * @typedef {Error} ParseError\n *\n * @property {Array} warnings\n */\n\n/**\n * Parse the given XML into a moddle document tree.\n *\n * @param {String} xml\n * @param {ElementHandler|Object} options or rootHandler\n *\n * @returns {Promise}\n */\nReader.prototype.fromXML = function (xml, options, done) {\n var rootHandler = options.rootHandler;\n if (options instanceof ElementHandler) {\n // root handler passed via (xml, { rootHandler: ElementHandler }, ...)\n rootHandler = options;\n options = {};\n } else {\n if (typeof options === 'string') {\n // rootHandler passed via (xml, 'someString', ...)\n rootHandler = this.handler(options);\n options = {};\n } else if (typeof rootHandler === 'string') {\n // rootHandler passed via (xml, { rootHandler: 'someString' }, ...)\n rootHandler = this.handler(rootHandler);\n }\n }\n var model = this.model,\n lax = this.lax;\n var context = new Context((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, options, {\n rootHandler: rootHandler\n })),\n parser = new Parser({\n proxy: true\n }),\n stack = createStack();\n rootHandler.context = context;\n\n // push root handler\n stack.push(rootHandler);\n\n /**\n * Handle error.\n *\n * @param {Error} err\n * @param {Function} getContext\n * @param {boolean} lax\n *\n * @return {boolean} true if handled\n */\n function handleError(err, getContext, lax) {\n var ctx = getContext();\n var line = ctx.line,\n column = ctx.column,\n data = ctx.data;\n\n // we receive the full context data here,\n // for elements trim down the information\n // to the tag name, only\n if (data.charAt(0) === '<' && data.indexOf(' ') !== -1) {\n data = data.slice(0, data.indexOf(' ')) + '>';\n }\n var message = 'unparsable content ' + (data ? data + ' ' : '') + 'detected\\n\\t' + 'line: ' + line + '\\n\\t' + 'column: ' + column + '\\n\\t' + 'nested error: ' + err.message;\n if (lax) {\n context.addWarning({\n message: message,\n error: err\n });\n return true;\n } else {\n throw error(message);\n }\n }\n function handleWarning(err, getContext) {\n // just like handling errors in mode\n return handleError(err, getContext, true);\n }\n\n /**\n * Resolve collected references on parse end.\n */\n function resolveReferences() {\n var elementsById = context.elementsById;\n var references = context.references;\n var i, r;\n for (i = 0; r = references[i]; i++) {\n var element = r.element;\n var reference = elementsById[r.id];\n var property = getModdleDescriptor(element).propertiesByName[r.property];\n if (!reference) {\n context.addWarning({\n message: 'unresolved reference <' + r.id + '>',\n element: r.element,\n property: r.property,\n value: r.id\n });\n }\n if (property.isMany) {\n var collection = element.get(property.name),\n idx = collection.indexOf(r);\n\n // we replace an existing place holder (idx != -1) or\n // append to the collection instead\n if (idx === -1) {\n idx = collection.length;\n }\n if (!reference) {\n // remove unresolvable reference\n collection.splice(idx, 1);\n } else {\n // add or update reference in collection\n collection[idx] = reference;\n }\n } else {\n element.set(property.name, reference);\n }\n }\n }\n function handleClose() {\n stack.pop().handleEnd();\n }\n var PREAMBLE_START_PATTERN = /^<\\?xml /i;\n var ENCODING_PATTERN = / encoding=\"([^\"]+)\"/i;\n var UTF_8_PATTERN = /^utf-8$/i;\n function handleQuestion(question) {\n if (!PREAMBLE_START_PATTERN.test(question)) {\n return;\n }\n var match = ENCODING_PATTERN.exec(question);\n var encoding = match && match[1];\n if (!encoding || UTF_8_PATTERN.test(encoding)) {\n return;\n }\n context.addWarning({\n message: 'unsupported document encoding <' + encoding + '>, ' + 'falling back to UTF-8'\n });\n }\n function handleOpen(node, getContext) {\n var handler = stack.peek();\n try {\n stack.push(handler.handleNode(node));\n } catch (err) {\n if (handleError(err, getContext, lax)) {\n stack.push(new NoopHandler());\n }\n }\n }\n function handleCData(text, getContext) {\n try {\n stack.peek().handleText(text);\n } catch (err) {\n handleWarning(err, getContext);\n }\n }\n function handleText(text, getContext) {\n // strip whitespace only nodes, i.e. before\n // sections and in between tags\n\n if (!text.trim()) {\n return;\n }\n handleCData(text, getContext);\n }\n var uriMap = model.getPackages().reduce(function (uriMap, p) {\n uriMap[p.uri] = p.prefix;\n return uriMap;\n }, Object.entries(DEFAULT_NS_MAP).reduce(function (map, [prefix, url]) {\n map[url] = prefix;\n return map;\n }, model.config && model.config.nsMap || {}));\n parser.ns(uriMap).on('openTag', function (obj, decodeStr, selfClosing, getContext) {\n // gracefully handle unparsable attributes (attrs=false)\n var attrs = obj.attrs || {};\n var decodedAttrs = Object.keys(attrs).reduce(function (d, key) {\n var value = decodeStr(attrs[key]);\n d[key] = value;\n return d;\n }, {});\n var node = {\n name: obj.name,\n originalName: obj.originalName,\n attributes: decodedAttrs,\n ns: obj.ns\n };\n handleOpen(node, getContext);\n }).on('question', handleQuestion).on('closeTag', handleClose).on('cdata', handleCData).on('text', function (text, decodeEntities, getContext) {\n handleText(decodeEntities(text), getContext);\n }).on('error', handleError).on('warn', handleWarning);\n\n // async XML parsing to make sure the execution environment\n // (node or brower) is kept responsive and that certain optimization\n // strategies can kick in.\n return new Promise(function (resolve, reject) {\n var err;\n try {\n parser.parse(xml);\n resolveReferences();\n } catch (e) {\n err = e;\n }\n var rootElement = rootHandler.element;\n if (!err && !rootElement) {\n err = error('failed to parse document as <' + rootHandler.type.$descriptor.name + '>');\n }\n var warnings = context.warnings;\n var references = context.references;\n var elementsById = context.elementsById;\n if (err) {\n err.warnings = warnings;\n return reject(err);\n } else {\n return resolve({\n rootElement: rootElement,\n elementsById: elementsById,\n references: references,\n warnings: warnings\n });\n }\n });\n};\nReader.prototype.handler = function (name) {\n return new RootElementHandler(this.model, name);\n};\n\n// helpers //////////////////////////\n\nfunction createStack() {\n var stack = [];\n Object.defineProperty(stack, 'peek', {\n value: function () {\n return this[this.length - 1];\n }\n });\n return stack;\n}\nvar XML_PREAMBLE = '\\n';\nvar ESCAPE_ATTR_CHARS = /<|>|'|\"|&|\\n\\r|\\n/g;\nvar ESCAPE_CHARS = /<|>|&/g;\nfunction Namespaces(parent) {\n this.prefixMap = {};\n this.uriMap = {};\n this.used = {};\n this.wellknown = [];\n this.custom = [];\n this.parent = parent;\n this.defaultPrefixMap = parent && parent.defaultPrefixMap || {};\n}\nNamespaces.prototype.mapDefaultPrefixes = function (defaultPrefixMap) {\n this.defaultPrefixMap = defaultPrefixMap;\n};\nNamespaces.prototype.defaultUriByPrefix = function (prefix) {\n return this.defaultPrefixMap[prefix];\n};\nNamespaces.prototype.byUri = function (uri) {\n return this.uriMap[uri] || this.parent && this.parent.byUri(uri);\n};\nNamespaces.prototype.add = function (ns, isWellknown) {\n this.uriMap[ns.uri] = ns;\n if (isWellknown) {\n this.wellknown.push(ns);\n } else {\n this.custom.push(ns);\n }\n this.mapPrefix(ns.prefix, ns.uri);\n};\nNamespaces.prototype.uriByPrefix = function (prefix) {\n return this.prefixMap[prefix || 'xmlns'] || this.parent && this.parent.uriByPrefix(prefix);\n};\nNamespaces.prototype.mapPrefix = function (prefix, uri) {\n this.prefixMap[prefix || 'xmlns'] = uri;\n};\nNamespaces.prototype.getNSKey = function (ns) {\n return ns.prefix !== undefined ? ns.uri + '|' + ns.prefix : ns.uri;\n};\nNamespaces.prototype.logUsed = function (ns) {\n var uri = ns.uri;\n var nsKey = this.getNSKey(ns);\n this.used[nsKey] = this.byUri(uri);\n\n // Inform parent recursively about the usage of this NS\n if (this.parent) {\n this.parent.logUsed(ns);\n }\n};\nNamespaces.prototype.getUsed = function (ns) {\n var allNs = [].concat(this.wellknown, this.custom);\n return allNs.filter(ns => {\n var nsKey = this.getNSKey(ns);\n return this.used[nsKey];\n });\n};\nfunction lower(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\nfunction nameToAlias(name, pkg) {\n if (hasLowerCaseAlias(pkg)) {\n return lower(name);\n } else {\n return name;\n }\n}\nfunction inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n}\nfunction nsName(ns) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(ns)) {\n return ns;\n } else {\n return (ns.prefix ? ns.prefix + ':' : '') + ns.localName;\n }\n}\nfunction getNsAttrs(namespaces) {\n return namespaces.getUsed().filter(function (ns) {\n // do not serialize built in namespace\n return ns.prefix !== 'xml';\n }).map(function (ns) {\n var name = 'xmlns' + (ns.prefix ? ':' + ns.prefix : '');\n return {\n name: name,\n value: ns.uri\n };\n });\n}\nfunction getElementNs(ns, descriptor) {\n if (descriptor.isGeneric) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n localName: descriptor.ns.localName\n }, ns);\n } else {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n localName: nameToAlias(descriptor.ns.localName, descriptor.$pkg)\n }, ns);\n }\n}\nfunction getPropertyNs(ns, descriptor) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n localName: descriptor.ns.localName\n }, ns);\n}\nfunction getSerializableProperties(element) {\n var descriptor = element.$descriptor;\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.filter)(descriptor.properties, function (p) {\n var name = p.name;\n if (p.isVirtual) {\n return false;\n }\n\n // do not serialize defaults\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.has)(element, name)) {\n return false;\n }\n var value = element[name];\n\n // do not serialize default equals\n if (value === p.default) {\n return false;\n }\n\n // do not serialize null properties\n if (value === null) {\n return false;\n }\n return p.isMany ? value.length : true;\n });\n}\nvar ESCAPE_ATTR_MAP = {\n '\\n': '#10',\n '\\n\\r': '#10',\n '\"': '#34',\n '\\'': '#39',\n '<': '#60',\n '>': '#62',\n '&': '#38'\n};\nvar ESCAPE_MAP = {\n '<': 'lt',\n '>': 'gt',\n '&': 'amp'\n};\nfunction escape(str, charPattern, replaceMap) {\n // ensure we are handling strings here\n str = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(str) ? str : '' + str;\n return str.replace(charPattern, function (s) {\n return '&' + replaceMap[s] + ';';\n });\n}\n\n/**\n * Escape a string attribute to not contain any bad values (line breaks, '\"', ...)\n *\n * @param {String} str the string to escape\n * @return {String} the escaped string\n */\nfunction escapeAttr(str) {\n return escape(str, ESCAPE_ATTR_CHARS, ESCAPE_ATTR_MAP);\n}\nfunction escapeBody(str) {\n return escape(str, ESCAPE_CHARS, ESCAPE_MAP);\n}\nfunction filterAttributes(props) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.filter)(props, function (p) {\n return p.isAttr;\n });\n}\nfunction filterContained(props) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.filter)(props, function (p) {\n return !p.isAttr;\n });\n}\nfunction ReferenceSerializer(tagName) {\n this.tagName = tagName;\n}\nReferenceSerializer.prototype.build = function (element) {\n this.element = element;\n return this;\n};\nReferenceSerializer.prototype.serializeTo = function (writer) {\n writer.appendIndent().append('<' + this.tagName + '>' + this.element.id + '' + this.tagName + '>').appendNewLine();\n};\nfunction BodySerializer() {}\nBodySerializer.prototype.serializeValue = BodySerializer.prototype.serializeTo = function (writer) {\n writer.append(this.escape ? escapeBody(this.value) : this.value);\n};\nBodySerializer.prototype.build = function (prop, value) {\n this.value = value;\n if (prop.type === 'String' && value.search(ESCAPE_CHARS) !== -1) {\n this.escape = true;\n }\n return this;\n};\nfunction ValueSerializer(tagName) {\n this.tagName = tagName;\n}\ninherits(ValueSerializer, BodySerializer);\nValueSerializer.prototype.serializeTo = function (writer) {\n writer.appendIndent().append('<' + this.tagName + '>');\n this.serializeValue(writer);\n writer.append('' + this.tagName + '>').appendNewLine();\n};\nfunction ElementSerializer(parent, propertyDescriptor) {\n this.body = [];\n this.attrs = [];\n this.parent = parent;\n this.propertyDescriptor = propertyDescriptor;\n}\nElementSerializer.prototype.build = function (element) {\n this.element = element;\n var elementDescriptor = element.$descriptor,\n propertyDescriptor = this.propertyDescriptor;\n var otherAttrs, properties;\n var isGeneric = elementDescriptor.isGeneric;\n if (isGeneric) {\n otherAttrs = this.parseGenericNsAttributes(element);\n } else {\n otherAttrs = this.parseNsAttributes(element);\n }\n if (propertyDescriptor) {\n this.ns = this.nsPropertyTagName(propertyDescriptor);\n } else {\n this.ns = this.nsTagName(elementDescriptor);\n }\n\n // compute tag name\n this.tagName = this.addTagName(this.ns);\n if (isGeneric) {\n this.parseGenericContainments(element);\n } else {\n properties = getSerializableProperties(element);\n this.parseAttributes(filterAttributes(properties));\n this.parseContainments(filterContained(properties));\n }\n this.parseGenericAttributes(element, otherAttrs);\n return this;\n};\nElementSerializer.prototype.nsTagName = function (descriptor) {\n var effectiveNs = this.logNamespaceUsed(descriptor.ns);\n return getElementNs(effectiveNs, descriptor);\n};\nElementSerializer.prototype.nsPropertyTagName = function (descriptor) {\n var effectiveNs = this.logNamespaceUsed(descriptor.ns);\n return getPropertyNs(effectiveNs, descriptor);\n};\nElementSerializer.prototype.isLocalNs = function (ns) {\n return ns.uri === this.ns.uri;\n};\n\n/**\n * Get the actual ns attribute name for the given element.\n *\n * @param {Object} element\n * @param {Boolean} [element.inherited=false]\n *\n * @return {Object} nsName\n */\nElementSerializer.prototype.nsAttributeName = function (element) {\n var ns;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(element)) {\n ns = parseName(element);\n } else {\n ns = element.ns;\n }\n\n // return just local name for inherited attributes\n if (element.inherited) {\n return {\n localName: ns.localName\n };\n }\n\n // parse + log effective ns\n var effectiveNs = this.logNamespaceUsed(ns);\n\n // LOG ACTUAL namespace use\n this.getNamespaces().logUsed(effectiveNs);\n\n // strip prefix if same namespace like parent\n if (this.isLocalNs(effectiveNs)) {\n return {\n localName: ns.localName\n };\n } else {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n localName: ns.localName\n }, effectiveNs);\n }\n};\nElementSerializer.prototype.parseGenericNsAttributes = function (element) {\n return Object.entries(element).filter(([key, value]) => !key.startsWith('$') && this.parseNsAttribute(element, key, value)).map(([key, value]) => ({\n name: key,\n value: value\n }));\n};\nElementSerializer.prototype.parseGenericContainments = function (element) {\n var body = element.$body;\n if (body) {\n this.body.push(new BodySerializer().build({\n type: 'String'\n }, body));\n }\n var children = element.$children;\n if (children) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(children, child => {\n this.body.push(new ElementSerializer(this).build(child));\n });\n }\n};\nElementSerializer.prototype.parseNsAttribute = function (element, name, value) {\n var model = element.$model;\n var nameNs = parseName(name);\n var ns;\n\n // parse xmlns:foo=\"http://foo.bar\"\n if (nameNs.prefix === 'xmlns') {\n ns = {\n prefix: nameNs.localName,\n uri: value\n };\n }\n\n // parse xmlns=\"http://foo.bar\"\n if (!nameNs.prefix && nameNs.localName === 'xmlns') {\n ns = {\n uri: value\n };\n }\n if (!ns) {\n return {\n name: name,\n value: value\n };\n }\n if (model && model.getPackage(value)) {\n // register well known namespace\n this.logNamespace(ns, true, true);\n } else {\n // log custom namespace directly as used\n var actualNs = this.logNamespaceUsed(ns, true);\n this.getNamespaces().logUsed(actualNs);\n }\n};\n\n/**\n * Parse namespaces and return a list of left over generic attributes\n *\n * @param {Object} element\n * @return {Array}\n */\nElementSerializer.prototype.parseNsAttributes = function (element) {\n var self = this;\n var genericAttrs = element.$attrs;\n var attributes = [];\n\n // parse namespace attributes first\n // and log them. push non namespace attributes to a list\n // and process them later\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(genericAttrs, function (value, name) {\n var nonNsAttr = self.parseNsAttribute(element, name, value);\n if (nonNsAttr) {\n attributes.push(nonNsAttr);\n }\n });\n return attributes;\n};\nElementSerializer.prototype.parseGenericAttributes = function (element, attributes) {\n var self = this;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(attributes, function (attr) {\n try {\n self.addAttribute(self.nsAttributeName(attr.name), attr.value);\n } catch (e) {\n // eslint-disable-next-line no-undef\n typeof console !== 'undefined' && console.warn(`missing namespace information for <${attr.name}=${attr.value}> on`, element, e);\n }\n });\n};\nElementSerializer.prototype.parseContainments = function (properties) {\n var self = this,\n body = this.body,\n element = this.element;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(properties, function (p) {\n var value = element.get(p.name),\n isReference = p.isReference,\n isMany = p.isMany;\n if (!isMany) {\n value = [value];\n }\n if (p.isBody) {\n body.push(new BodySerializer().build(p, value[0]));\n } else if (isSimple(p.type)) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(value, function (v) {\n body.push(new ValueSerializer(self.addTagName(self.nsPropertyTagName(p))).build(p, v));\n });\n } else if (isReference) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(value, function (v) {\n body.push(new ReferenceSerializer(self.addTagName(self.nsPropertyTagName(p))).build(v));\n });\n } else {\n // allow serialization via type\n // rather than element name\n var serialization = getSerialization(p);\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(value, function (v) {\n var serializer;\n if (serialization) {\n if (serialization === SERIALIZE_PROPERTY) {\n serializer = new ElementSerializer(self, p);\n } else {\n serializer = new TypeSerializer(self, p, serialization);\n }\n } else {\n serializer = new ElementSerializer(self);\n }\n body.push(serializer.build(v));\n });\n }\n });\n};\nElementSerializer.prototype.getNamespaces = function (local) {\n var namespaces = this.namespaces,\n parent = this.parent,\n parentNamespaces;\n if (!namespaces) {\n parentNamespaces = parent && parent.getNamespaces();\n if (local || !parentNamespaces) {\n this.namespaces = namespaces = new Namespaces(parentNamespaces);\n } else {\n namespaces = parentNamespaces;\n }\n }\n return namespaces;\n};\nElementSerializer.prototype.logNamespace = function (ns, wellknown, local) {\n var namespaces = this.getNamespaces(local);\n var nsUri = ns.uri,\n nsPrefix = ns.prefix;\n var existing = namespaces.byUri(nsUri);\n if (!existing || local) {\n namespaces.add(ns, wellknown);\n }\n namespaces.mapPrefix(nsPrefix, nsUri);\n return ns;\n};\nElementSerializer.prototype.logNamespaceUsed = function (ns, local) {\n var namespaces = this.getNamespaces(local);\n\n // ns may be\n //\n // * prefix only\n // * prefix:uri\n // * localName only\n\n var prefix = ns.prefix,\n uri = ns.uri,\n newPrefix,\n idx,\n wellknownUri;\n\n // handle anonymous namespaces (elementForm=unqualified), cf. #23\n if (!prefix && !uri) {\n return {\n localName: ns.localName\n };\n }\n wellknownUri = namespaces.defaultUriByPrefix(prefix);\n uri = uri || wellknownUri || namespaces.uriByPrefix(prefix);\n if (!uri) {\n throw new Error('no namespace uri given for prefix <' + prefix + '>');\n }\n ns = namespaces.byUri(uri);\n\n // register new default prefix in local scope\n if (!ns && !prefix) {\n ns = this.logNamespace({\n uri\n }, wellknownUri === uri, true);\n }\n if (!ns) {\n newPrefix = prefix;\n idx = 1;\n\n // find a prefix that is not mapped yet\n while (namespaces.uriByPrefix(newPrefix)) {\n newPrefix = prefix + '_' + idx++;\n }\n ns = this.logNamespace({\n prefix: newPrefix,\n uri: uri\n }, wellknownUri === uri);\n }\n if (prefix) {\n namespaces.mapPrefix(prefix, uri);\n }\n return ns;\n};\nElementSerializer.prototype.parseAttributes = function (properties) {\n var self = this,\n element = this.element;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(properties, function (p) {\n var value = element.get(p.name);\n if (p.isReference) {\n if (!p.isMany) {\n value = value.id;\n } else {\n var values = [];\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(value, function (v) {\n values.push(v.id);\n });\n\n // IDREFS is a whitespace-separated list of references.\n value = values.join(' ');\n }\n }\n self.addAttribute(self.nsAttributeName(p), value);\n });\n};\nElementSerializer.prototype.addTagName = function (nsTagName) {\n var actualNs = this.logNamespaceUsed(nsTagName);\n this.getNamespaces().logUsed(actualNs);\n return nsName(nsTagName);\n};\nElementSerializer.prototype.addAttribute = function (name, value) {\n var attrs = this.attrs;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(value)) {\n value = escapeAttr(value);\n }\n\n // de-duplicate attributes\n // https://github.com/bpmn-io/moddle-xml/issues/66\n var idx = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.findIndex)(attrs, function (element) {\n return element.name.localName === name.localName && element.name.uri === name.uri && element.name.prefix === name.prefix;\n });\n var attr = {\n name: name,\n value: value\n };\n if (idx !== -1) {\n attrs.splice(idx, 1, attr);\n } else {\n attrs.push(attr);\n }\n};\nElementSerializer.prototype.serializeAttributes = function (writer) {\n var attrs = this.attrs,\n namespaces = this.namespaces;\n if (namespaces) {\n attrs = getNsAttrs(namespaces).concat(attrs);\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(attrs, function (a) {\n writer.append(' ').append(nsName(a.name)).append('=\"').append(a.value).append('\"');\n });\n};\nElementSerializer.prototype.serializeTo = function (writer) {\n var firstBody = this.body[0],\n indent = firstBody && firstBody.constructor !== BodySerializer;\n writer.appendIndent().append('<' + this.tagName);\n this.serializeAttributes(writer);\n writer.append(firstBody ? '>' : ' />');\n if (firstBody) {\n if (indent) {\n writer.appendNewLine().indent();\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(this.body, function (b) {\n b.serializeTo(writer);\n });\n if (indent) {\n writer.unindent().appendIndent();\n }\n writer.append('' + this.tagName + '>');\n }\n writer.appendNewLine();\n};\n\n/**\n * A serializer for types that handles serialization of data types\n */\nfunction TypeSerializer(parent, propertyDescriptor, serialization) {\n ElementSerializer.call(this, parent, propertyDescriptor);\n this.serialization = serialization;\n}\ninherits(TypeSerializer, ElementSerializer);\nTypeSerializer.prototype.parseNsAttributes = function (element) {\n // extracted attributes with serialization attribute\n // stripped; it may be later\n var attributes = ElementSerializer.prototype.parseNsAttributes.call(this, element).filter(attr => attr.name !== this.serialization);\n var descriptor = element.$descriptor;\n\n // only serialize if necessary\n if (descriptor.name === this.propertyDescriptor.type) {\n return attributes;\n }\n var typeNs = this.typeNs = this.nsTagName(descriptor);\n this.getNamespaces().logUsed(this.typeNs);\n\n // add xsi:type attribute to represent the elements\n // actual type\n\n var pkg = element.$model.getPackage(typeNs.uri),\n typePrefix = pkg.xml && pkg.xml.typePrefix || '';\n this.addAttribute(this.nsAttributeName(this.serialization), (typeNs.prefix ? typeNs.prefix + ':' : '') + typePrefix + descriptor.ns.localName);\n return attributes;\n};\nTypeSerializer.prototype.isLocalNs = function (ns) {\n return ns.uri === (this.typeNs || this.ns).uri;\n};\nfunction SavingWriter() {\n this.value = '';\n this.write = function (str) {\n this.value += str;\n };\n}\nfunction FormatingWriter(out, format) {\n var indent = [''];\n this.append = function (str) {\n out.write(str);\n return this;\n };\n this.appendNewLine = function () {\n if (format) {\n out.write('\\n');\n }\n return this;\n };\n this.appendIndent = function () {\n if (format) {\n out.write(indent.join(' '));\n }\n return this;\n };\n this.indent = function () {\n indent.push('');\n return this;\n };\n this.unindent = function () {\n indent.pop();\n return this;\n };\n}\n\n/**\n * A writer for meta-model backed document trees\n *\n * @param {Object} options output options to pass into the writer\n */\nfunction Writer(options) {\n options = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n format: false,\n preamble: true\n }, options || {});\n function toXML(tree, writer) {\n var internalWriter = writer || new SavingWriter();\n var formatingWriter = new FormatingWriter(internalWriter, options.format);\n if (options.preamble) {\n formatingWriter.append(XML_PREAMBLE);\n }\n var serializer = new ElementSerializer();\n var model = tree.$model;\n serializer.getNamespaces().mapDefaultPrefixes(getDefaultPrefixMappings(model));\n serializer.build(tree).serializeTo(formatingWriter);\n if (!writer) {\n return internalWriter.value;\n }\n }\n return {\n toXML: toXML\n };\n}\n\n// helpers ///////////\n\n/**\n * @param {Moddle} model\n *\n * @return { Record } map from prefix to URI\n */\nfunction getDefaultPrefixMappings(model) {\n const nsMap = model.config && model.config.nsMap || {};\n const prefixMap = {};\n\n // { prefix -> uri }\n for (const prefix in DEFAULT_NS_MAP) {\n prefixMap[prefix] = DEFAULT_NS_MAP[prefix];\n }\n\n // { uri -> prefix }\n for (const uri in nsMap) {\n const prefix = nsMap[uri];\n prefixMap[prefix] = uri;\n }\n for (const pkg of model.getPackages()) {\n prefixMap[pkg.prefix] = pkg.uri;\n }\n return prefixMap;\n}\n\n/**\n * A sub class of {@link Moddle} with support for import and export of BPMN 2.0 xml files.\n *\n * @class BpmnModdle\n * @extends Moddle\n *\n * @param {Object|Array} packages to use for instantiating the model\n * @param {Object} [options] additional options to pass over\n */\nfunction BpmnModdle(packages, options) {\n Moddle.call(this, packages, options);\n}\nBpmnModdle.prototype = Object.create(Moddle.prototype);\n\n/**\n * The fromXML result.\n *\n * @typedef {Object} ParseResult\n *\n * @property {ModdleElement} rootElement\n * @property {Array} references\n * @property {Array} warnings\n * @property {Object} elementsById - a mapping containing each ID -> ModdleElement\n */\n\n/**\n * The fromXML error.\n *\n * @typedef {Error} ParseError\n *\n * @property {Array} warnings\n */\n\n/**\n * Instantiates a BPMN model tree from a given xml string.\n *\n * @param {String} xmlStr\n * @param {String} [typeName='bpmn:Definitions'] name of the root element\n * @param {Object} [options] options to pass to the underlying reader\n *\n * @returns {Promise}\n */\nBpmnModdle.prototype.fromXML = function (xmlStr, typeName, options) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(typeName)) {\n options = typeName;\n typeName = 'bpmn:Definitions';\n }\n var reader = new Reader((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n model: this,\n lax: true\n }, options));\n var rootHandler = reader.handler(typeName);\n return reader.fromXML(xmlStr, rootHandler);\n};\n\n/**\n * The toXML result.\n *\n * @typedef {Object} SerializationResult\n *\n * @property {String} xml\n */\n\n/**\n * Serializes a BPMN 2.0 object tree to XML.\n *\n * @param {String} element the root element, typically an instance of `bpmn:Definitions`\n * @param {Object} [options] to pass to the underlying writer\n *\n * @returns {Promise}\n */\nBpmnModdle.prototype.toXML = function (element, options) {\n var writer = new Writer(options);\n return new Promise(function (resolve, reject) {\n try {\n var result = writer.toXML(element);\n return resolve({\n xml: result\n });\n } catch (err) {\n return reject(err);\n }\n });\n};\nvar name$5 = \"BPMN20\";\nvar uri$5 = \"http://www.omg.org/spec/BPMN/20100524/MODEL\";\nvar prefix$5 = \"bpmn\";\nvar associations$5 = [];\nvar types$5 = [{\n name: \"Interface\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"operations\",\n type: \"Operation\",\n isMany: true\n }, {\n name: \"implementationRef\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Operation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"inMessageRef\",\n type: \"Message\",\n isReference: true\n }, {\n name: \"outMessageRef\",\n type: \"Message\",\n isReference: true\n }, {\n name: \"errorRef\",\n type: \"Error\",\n isMany: true,\n isReference: true\n }, {\n name: \"implementationRef\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"EndPoint\",\n superClass: [\"RootElement\"]\n}, {\n name: \"Auditing\",\n superClass: [\"BaseElement\"]\n}, {\n name: \"GlobalTask\",\n superClass: [\"CallableElement\"],\n properties: [{\n name: \"resources\",\n type: \"ResourceRole\",\n isMany: true\n }]\n}, {\n name: \"Monitoring\",\n superClass: [\"BaseElement\"]\n}, {\n name: \"Performer\",\n superClass: [\"ResourceRole\"]\n}, {\n name: \"Process\",\n superClass: [\"FlowElementsContainer\", \"CallableElement\"],\n properties: [{\n name: \"processType\",\n type: \"ProcessType\",\n isAttr: true\n }, {\n name: \"isClosed\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"auditing\",\n type: \"Auditing\"\n }, {\n name: \"monitoring\",\n type: \"Monitoring\"\n }, {\n name: \"properties\",\n type: \"Property\",\n isMany: true\n }, {\n name: \"laneSets\",\n isMany: true,\n replaces: \"FlowElementsContainer#laneSets\",\n type: \"LaneSet\"\n }, {\n name: \"flowElements\",\n isMany: true,\n replaces: \"FlowElementsContainer#flowElements\",\n type: \"FlowElement\"\n }, {\n name: \"artifacts\",\n type: \"Artifact\",\n isMany: true\n }, {\n name: \"resources\",\n type: \"ResourceRole\",\n isMany: true\n }, {\n name: \"correlationSubscriptions\",\n type: \"CorrelationSubscription\",\n isMany: true\n }, {\n name: \"supports\",\n type: \"Process\",\n isMany: true,\n isReference: true\n }, {\n name: \"definitionalCollaborationRef\",\n type: \"Collaboration\",\n isAttr: true,\n isReference: true\n }, {\n name: \"isExecutable\",\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"LaneSet\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"lanes\",\n type: \"Lane\",\n isMany: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Lane\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"partitionElementRef\",\n type: \"BaseElement\",\n isAttr: true,\n isReference: true\n }, {\n name: \"partitionElement\",\n type: \"BaseElement\"\n }, {\n name: \"flowNodeRef\",\n type: \"FlowNode\",\n isMany: true,\n isReference: true\n }, {\n name: \"childLaneSet\",\n type: \"LaneSet\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"GlobalManualTask\",\n superClass: [\"GlobalTask\"]\n}, {\n name: \"ManualTask\",\n superClass: [\"Task\"]\n}, {\n name: \"UserTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"renderings\",\n type: \"Rendering\",\n isMany: true\n }, {\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Rendering\",\n superClass: [\"BaseElement\"]\n}, {\n name: \"HumanPerformer\",\n superClass: [\"Performer\"]\n}, {\n name: \"PotentialOwner\",\n superClass: [\"HumanPerformer\"]\n}, {\n name: \"GlobalUserTask\",\n superClass: [\"GlobalTask\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"renderings\",\n type: \"Rendering\",\n isMany: true\n }]\n}, {\n name: \"Gateway\",\n isAbstract: true,\n superClass: [\"FlowNode\"],\n properties: [{\n name: \"gatewayDirection\",\n type: \"GatewayDirection\",\n \"default\": \"Unspecified\",\n isAttr: true\n }]\n}, {\n name: \"EventBasedGateway\",\n superClass: [\"Gateway\"],\n properties: [{\n name: \"instantiate\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"eventGatewayType\",\n type: \"EventBasedGatewayType\",\n isAttr: true,\n \"default\": \"Exclusive\"\n }]\n}, {\n name: \"ComplexGateway\",\n superClass: [\"Gateway\"],\n properties: [{\n name: \"activationCondition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"default\",\n type: \"SequenceFlow\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ExclusiveGateway\",\n superClass: [\"Gateway\"],\n properties: [{\n name: \"default\",\n type: \"SequenceFlow\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"InclusiveGateway\",\n superClass: [\"Gateway\"],\n properties: [{\n name: \"default\",\n type: \"SequenceFlow\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ParallelGateway\",\n superClass: [\"Gateway\"]\n}, {\n name: \"RootElement\",\n isAbstract: true,\n superClass: [\"BaseElement\"]\n}, {\n name: \"Relationship\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"type\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"direction\",\n type: \"RelationshipDirection\",\n isAttr: true\n }, {\n name: \"source\",\n isMany: true,\n isReference: true,\n type: \"Element\"\n }, {\n name: \"target\",\n isMany: true,\n isReference: true,\n type: \"Element\"\n }]\n}, {\n name: \"BaseElement\",\n isAbstract: true,\n properties: [{\n name: \"id\",\n isAttr: true,\n type: \"String\",\n isId: true\n }, {\n name: \"documentation\",\n type: \"Documentation\",\n isMany: true\n }, {\n name: \"extensionDefinitions\",\n type: \"ExtensionDefinition\",\n isMany: true,\n isReference: true\n }, {\n name: \"extensionElements\",\n type: \"ExtensionElements\"\n }]\n}, {\n name: \"Extension\",\n properties: [{\n name: \"mustUnderstand\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"definition\",\n type: \"ExtensionDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ExtensionDefinition\",\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"extensionAttributeDefinitions\",\n type: \"ExtensionAttributeDefinition\",\n isMany: true\n }]\n}, {\n name: \"ExtensionAttributeDefinition\",\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"type\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isReference\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"extensionDefinition\",\n type: \"ExtensionDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ExtensionElements\",\n properties: [{\n name: \"valueRef\",\n isAttr: true,\n isReference: true,\n type: \"Element\"\n }, {\n name: \"values\",\n type: \"Element\",\n isMany: true\n }, {\n name: \"extensionAttributeDefinition\",\n type: \"ExtensionAttributeDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Documentation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"text\",\n type: \"String\",\n isBody: true\n }, {\n name: \"textFormat\",\n \"default\": \"text/plain\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Event\",\n isAbstract: true,\n superClass: [\"FlowNode\", \"InteractionNode\"],\n properties: [{\n name: \"properties\",\n type: \"Property\",\n isMany: true\n }]\n}, {\n name: \"IntermediateCatchEvent\",\n superClass: [\"CatchEvent\"]\n}, {\n name: \"IntermediateThrowEvent\",\n superClass: [\"ThrowEvent\"]\n}, {\n name: \"EndEvent\",\n superClass: [\"ThrowEvent\"]\n}, {\n name: \"StartEvent\",\n superClass: [\"CatchEvent\"],\n properties: [{\n name: \"isInterrupting\",\n \"default\": true,\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"ThrowEvent\",\n isAbstract: true,\n superClass: [\"Event\"],\n properties: [{\n name: \"dataInputs\",\n type: \"DataInput\",\n isMany: true\n }, {\n name: \"dataInputAssociations\",\n type: \"DataInputAssociation\",\n isMany: true\n }, {\n name: \"inputSet\",\n type: \"InputSet\"\n }, {\n name: \"eventDefinitions\",\n type: \"EventDefinition\",\n isMany: true\n }, {\n name: \"eventDefinitionRef\",\n type: \"EventDefinition\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"CatchEvent\",\n isAbstract: true,\n superClass: [\"Event\"],\n properties: [{\n name: \"parallelMultiple\",\n isAttr: true,\n type: \"Boolean\",\n \"default\": false\n }, {\n name: \"dataOutputs\",\n type: \"DataOutput\",\n isMany: true\n }, {\n name: \"dataOutputAssociations\",\n type: \"DataOutputAssociation\",\n isMany: true\n }, {\n name: \"outputSet\",\n type: \"OutputSet\"\n }, {\n name: \"eventDefinitions\",\n type: \"EventDefinition\",\n isMany: true\n }, {\n name: \"eventDefinitionRef\",\n type: \"EventDefinition\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"BoundaryEvent\",\n superClass: [\"CatchEvent\"],\n properties: [{\n name: \"cancelActivity\",\n \"default\": true,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"attachedToRef\",\n type: \"Activity\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"EventDefinition\",\n isAbstract: true,\n superClass: [\"RootElement\"]\n}, {\n name: \"CancelEventDefinition\",\n superClass: [\"EventDefinition\"]\n}, {\n name: \"ErrorEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"errorRef\",\n type: \"Error\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"TerminateEventDefinition\",\n superClass: [\"EventDefinition\"]\n}, {\n name: \"EscalationEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"escalationRef\",\n type: \"Escalation\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Escalation\",\n properties: [{\n name: \"structureRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"escalationCode\",\n isAttr: true,\n type: \"String\"\n }],\n superClass: [\"RootElement\"]\n}, {\n name: \"CompensateEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"waitForCompletion\",\n isAttr: true,\n type: \"Boolean\",\n \"default\": true\n }, {\n name: \"activityRef\",\n type: \"Activity\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"TimerEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"timeDate\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"timeCycle\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"timeDuration\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"LinkEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"target\",\n type: \"LinkEventDefinition\",\n isReference: true\n }, {\n name: \"source\",\n type: \"LinkEventDefinition\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"MessageEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ConditionalEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"condition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"SignalEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"signalRef\",\n type: \"Signal\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Signal\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"structureRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ImplicitThrowEvent\",\n superClass: [\"ThrowEvent\"]\n}, {\n name: \"DataState\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ItemAwareElement\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"itemSubjectRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"dataState\",\n type: \"DataState\"\n }]\n}, {\n name: \"DataAssociation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"sourceRef\",\n type: \"ItemAwareElement\",\n isMany: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"ItemAwareElement\",\n isReference: true\n }, {\n name: \"transformation\",\n type: \"FormalExpression\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"assignment\",\n type: \"Assignment\",\n isMany: true\n }]\n}, {\n name: \"DataInput\",\n superClass: [\"ItemAwareElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isCollection\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"inputSetRef\",\n type: \"InputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"inputSetWithOptional\",\n type: \"InputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"inputSetWithWhileExecuting\",\n type: \"InputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }]\n}, {\n name: \"DataOutput\",\n superClass: [\"ItemAwareElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isCollection\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"outputSetRef\",\n type: \"OutputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"outputSetWithOptional\",\n type: \"OutputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"outputSetWithWhileExecuting\",\n type: \"OutputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }]\n}, {\n name: \"InputSet\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"dataInputRefs\",\n type: \"DataInput\",\n isMany: true,\n isReference: true\n }, {\n name: \"optionalInputRefs\",\n type: \"DataInput\",\n isMany: true,\n isReference: true\n }, {\n name: \"whileExecutingInputRefs\",\n type: \"DataInput\",\n isMany: true,\n isReference: true\n }, {\n name: \"outputSetRefs\",\n type: \"OutputSet\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"OutputSet\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"dataOutputRefs\",\n type: \"DataOutput\",\n isMany: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"inputSetRefs\",\n type: \"InputSet\",\n isMany: true,\n isReference: true\n }, {\n name: \"optionalOutputRefs\",\n type: \"DataOutput\",\n isMany: true,\n isReference: true\n }, {\n name: \"whileExecutingOutputRefs\",\n type: \"DataOutput\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"Property\",\n superClass: [\"ItemAwareElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"DataInputAssociation\",\n superClass: [\"DataAssociation\"]\n}, {\n name: \"DataOutputAssociation\",\n superClass: [\"DataAssociation\"]\n}, {\n name: \"InputOutputSpecification\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"dataInputs\",\n type: \"DataInput\",\n isMany: true\n }, {\n name: \"dataOutputs\",\n type: \"DataOutput\",\n isMany: true\n }, {\n name: \"inputSets\",\n type: \"InputSet\",\n isMany: true\n }, {\n name: \"outputSets\",\n type: \"OutputSet\",\n isMany: true\n }]\n}, {\n name: \"DataObject\",\n superClass: [\"FlowElement\", \"ItemAwareElement\"],\n properties: [{\n name: \"isCollection\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"InputOutputBinding\",\n properties: [{\n name: \"inputDataRef\",\n type: \"InputSet\",\n isAttr: true,\n isReference: true\n }, {\n name: \"outputDataRef\",\n type: \"OutputSet\",\n isAttr: true,\n isReference: true\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Assignment\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"from\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"to\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"DataStore\",\n superClass: [\"RootElement\", \"ItemAwareElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"capacity\",\n isAttr: true,\n type: \"Integer\"\n }, {\n name: \"isUnlimited\",\n \"default\": true,\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"DataStoreReference\",\n superClass: [\"ItemAwareElement\", \"FlowElement\"],\n properties: [{\n name: \"dataStoreRef\",\n type: \"DataStore\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"DataObjectReference\",\n superClass: [\"ItemAwareElement\", \"FlowElement\"],\n properties: [{\n name: \"dataObjectRef\",\n type: \"DataObject\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ConversationLink\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"sourceRef\",\n type: \"InteractionNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"InteractionNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ConversationAssociation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"innerConversationNodeRef\",\n type: \"ConversationNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"outerConversationNodeRef\",\n type: \"ConversationNode\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"CallConversation\",\n superClass: [\"ConversationNode\"],\n properties: [{\n name: \"calledCollaborationRef\",\n type: \"Collaboration\",\n isAttr: true,\n isReference: true\n }, {\n name: \"participantAssociations\",\n type: \"ParticipantAssociation\",\n isMany: true\n }]\n}, {\n name: \"Conversation\",\n superClass: [\"ConversationNode\"]\n}, {\n name: \"SubConversation\",\n superClass: [\"ConversationNode\"],\n properties: [{\n name: \"conversationNodes\",\n type: \"ConversationNode\",\n isMany: true\n }]\n}, {\n name: \"ConversationNode\",\n isAbstract: true,\n superClass: [\"InteractionNode\", \"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"participantRef\",\n type: \"Participant\",\n isMany: true,\n isReference: true\n }, {\n name: \"messageFlowRefs\",\n type: \"MessageFlow\",\n isMany: true,\n isReference: true\n }, {\n name: \"correlationKeys\",\n type: \"CorrelationKey\",\n isMany: true\n }]\n}, {\n name: \"GlobalConversation\",\n superClass: [\"Collaboration\"]\n}, {\n name: \"PartnerEntity\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"participantRef\",\n type: \"Participant\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"PartnerRole\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"participantRef\",\n type: \"Participant\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"CorrelationProperty\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"correlationPropertyRetrievalExpression\",\n type: \"CorrelationPropertyRetrievalExpression\",\n isMany: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"type\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Error\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"structureRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"errorCode\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"CorrelationKey\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"correlationPropertyRef\",\n type: \"CorrelationProperty\",\n isMany: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Expression\",\n superClass: [\"BaseElement\"],\n isAbstract: false,\n properties: [{\n name: \"body\",\n isBody: true,\n type: \"String\"\n }]\n}, {\n name: \"FormalExpression\",\n superClass: [\"Expression\"],\n properties: [{\n name: \"language\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"evaluatesToTypeRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Message\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"itemRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ItemDefinition\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"itemKind\",\n type: \"ItemKind\",\n isAttr: true\n }, {\n name: \"structureRef\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isCollection\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"import\",\n type: \"Import\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"FlowElement\",\n isAbstract: true,\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"auditing\",\n type: \"Auditing\"\n }, {\n name: \"monitoring\",\n type: \"Monitoring\"\n }, {\n name: \"categoryValueRef\",\n type: \"CategoryValue\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"SequenceFlow\",\n superClass: [\"FlowElement\"],\n properties: [{\n name: \"isImmediate\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"conditionExpression\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"sourceRef\",\n type: \"FlowNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"FlowNode\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"FlowElementsContainer\",\n isAbstract: true,\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"laneSets\",\n type: \"LaneSet\",\n isMany: true\n }, {\n name: \"flowElements\",\n type: \"FlowElement\",\n isMany: true\n }]\n}, {\n name: \"CallableElement\",\n isAbstract: true,\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"ioSpecification\",\n type: \"InputOutputSpecification\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"supportedInterfaceRef\",\n type: \"Interface\",\n isMany: true,\n isReference: true\n }, {\n name: \"ioBinding\",\n type: \"InputOutputBinding\",\n isMany: true,\n xml: {\n serialize: \"property\"\n }\n }]\n}, {\n name: \"FlowNode\",\n isAbstract: true,\n superClass: [\"FlowElement\"],\n properties: [{\n name: \"incoming\",\n type: \"SequenceFlow\",\n isMany: true,\n isReference: true\n }, {\n name: \"outgoing\",\n type: \"SequenceFlow\",\n isMany: true,\n isReference: true\n }, {\n name: \"lanes\",\n type: \"Lane\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }]\n}, {\n name: \"CorrelationPropertyRetrievalExpression\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"messagePath\",\n type: \"FormalExpression\"\n }, {\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"CorrelationPropertyBinding\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"dataPath\",\n type: \"FormalExpression\"\n }, {\n name: \"correlationPropertyRef\",\n type: \"CorrelationProperty\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Resource\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"resourceParameters\",\n type: \"ResourceParameter\",\n isMany: true\n }]\n}, {\n name: \"ResourceParameter\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isRequired\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"type\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"CorrelationSubscription\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"correlationKeyRef\",\n type: \"CorrelationKey\",\n isAttr: true,\n isReference: true\n }, {\n name: \"correlationPropertyBinding\",\n type: \"CorrelationPropertyBinding\",\n isMany: true\n }]\n}, {\n name: \"MessageFlow\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"sourceRef\",\n type: \"InteractionNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"InteractionNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"MessageFlowAssociation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"innerMessageFlowRef\",\n type: \"MessageFlow\",\n isAttr: true,\n isReference: true\n }, {\n name: \"outerMessageFlowRef\",\n type: \"MessageFlow\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"InteractionNode\",\n isAbstract: true,\n properties: [{\n name: \"incomingConversationLinks\",\n type: \"ConversationLink\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"outgoingConversationLinks\",\n type: \"ConversationLink\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }]\n}, {\n name: \"Participant\",\n superClass: [\"InteractionNode\", \"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"interfaceRef\",\n type: \"Interface\",\n isMany: true,\n isReference: true\n }, {\n name: \"participantMultiplicity\",\n type: \"ParticipantMultiplicity\"\n }, {\n name: \"endPointRefs\",\n type: \"EndPoint\",\n isMany: true,\n isReference: true\n }, {\n name: \"processRef\",\n type: \"Process\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ParticipantAssociation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"innerParticipantRef\",\n type: \"Participant\",\n isAttr: true,\n isReference: true\n }, {\n name: \"outerParticipantRef\",\n type: \"Participant\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ParticipantMultiplicity\",\n properties: [{\n name: \"minimum\",\n \"default\": 0,\n isAttr: true,\n type: \"Integer\"\n }, {\n name: \"maximum\",\n \"default\": 1,\n isAttr: true,\n type: \"Integer\"\n }],\n superClass: [\"BaseElement\"]\n}, {\n name: \"Collaboration\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isClosed\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"participants\",\n type: \"Participant\",\n isMany: true\n }, {\n name: \"messageFlows\",\n type: \"MessageFlow\",\n isMany: true\n }, {\n name: \"artifacts\",\n type: \"Artifact\",\n isMany: true\n }, {\n name: \"conversations\",\n type: \"ConversationNode\",\n isMany: true\n }, {\n name: \"conversationAssociations\",\n type: \"ConversationAssociation\"\n }, {\n name: \"participantAssociations\",\n type: \"ParticipantAssociation\",\n isMany: true\n }, {\n name: \"messageFlowAssociations\",\n type: \"MessageFlowAssociation\",\n isMany: true\n }, {\n name: \"correlationKeys\",\n type: \"CorrelationKey\",\n isMany: true\n }, {\n name: \"choreographyRef\",\n type: \"Choreography\",\n isMany: true,\n isReference: true\n }, {\n name: \"conversationLinks\",\n type: \"ConversationLink\",\n isMany: true\n }]\n}, {\n name: \"ChoreographyActivity\",\n isAbstract: true,\n superClass: [\"FlowNode\"],\n properties: [{\n name: \"participantRef\",\n type: \"Participant\",\n isMany: true,\n isReference: true\n }, {\n name: \"initiatingParticipantRef\",\n type: \"Participant\",\n isAttr: true,\n isReference: true\n }, {\n name: \"correlationKeys\",\n type: \"CorrelationKey\",\n isMany: true\n }, {\n name: \"loopType\",\n type: \"ChoreographyLoopType\",\n \"default\": \"None\",\n isAttr: true\n }]\n}, {\n name: \"CallChoreography\",\n superClass: [\"ChoreographyActivity\"],\n properties: [{\n name: \"calledChoreographyRef\",\n type: \"Choreography\",\n isAttr: true,\n isReference: true\n }, {\n name: \"participantAssociations\",\n type: \"ParticipantAssociation\",\n isMany: true\n }]\n}, {\n name: \"SubChoreography\",\n superClass: [\"ChoreographyActivity\", \"FlowElementsContainer\"],\n properties: [{\n name: \"artifacts\",\n type: \"Artifact\",\n isMany: true\n }]\n}, {\n name: \"ChoreographyTask\",\n superClass: [\"ChoreographyActivity\"],\n properties: [{\n name: \"messageFlowRef\",\n type: \"MessageFlow\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"Choreography\",\n superClass: [\"Collaboration\", \"FlowElementsContainer\"]\n}, {\n name: \"GlobalChoreographyTask\",\n superClass: [\"Choreography\"],\n properties: [{\n name: \"initiatingParticipantRef\",\n type: \"Participant\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"TextAnnotation\",\n superClass: [\"Artifact\"],\n properties: [{\n name: \"text\",\n type: \"String\"\n }, {\n name: \"textFormat\",\n \"default\": \"text/plain\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Group\",\n superClass: [\"Artifact\"],\n properties: [{\n name: \"categoryValueRef\",\n type: \"CategoryValue\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Association\",\n superClass: [\"Artifact\"],\n properties: [{\n name: \"associationDirection\",\n type: \"AssociationDirection\",\n isAttr: true\n }, {\n name: \"sourceRef\",\n type: \"BaseElement\",\n isAttr: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"BaseElement\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Category\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"categoryValue\",\n type: \"CategoryValue\",\n isMany: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Artifact\",\n isAbstract: true,\n superClass: [\"BaseElement\"]\n}, {\n name: \"CategoryValue\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"categorizedFlowElements\",\n type: \"FlowElement\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"value\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Activity\",\n isAbstract: true,\n superClass: [\"FlowNode\"],\n properties: [{\n name: \"isForCompensation\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"default\",\n type: \"SequenceFlow\",\n isAttr: true,\n isReference: true\n }, {\n name: \"ioSpecification\",\n type: \"InputOutputSpecification\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"boundaryEventRefs\",\n type: \"BoundaryEvent\",\n isMany: true,\n isReference: true\n }, {\n name: \"properties\",\n type: \"Property\",\n isMany: true\n }, {\n name: \"dataInputAssociations\",\n type: \"DataInputAssociation\",\n isMany: true\n }, {\n name: \"dataOutputAssociations\",\n type: \"DataOutputAssociation\",\n isMany: true\n }, {\n name: \"startQuantity\",\n \"default\": 1,\n isAttr: true,\n type: \"Integer\"\n }, {\n name: \"resources\",\n type: \"ResourceRole\",\n isMany: true\n }, {\n name: \"completionQuantity\",\n \"default\": 1,\n isAttr: true,\n type: \"Integer\"\n }, {\n name: \"loopCharacteristics\",\n type: \"LoopCharacteristics\"\n }]\n}, {\n name: \"ServiceTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"SubProcess\",\n superClass: [\"Activity\", \"FlowElementsContainer\", \"InteractionNode\"],\n properties: [{\n name: \"triggeredByEvent\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"artifacts\",\n type: \"Artifact\",\n isMany: true\n }]\n}, {\n name: \"LoopCharacteristics\",\n isAbstract: true,\n superClass: [\"BaseElement\"]\n}, {\n name: \"MultiInstanceLoopCharacteristics\",\n superClass: [\"LoopCharacteristics\"],\n properties: [{\n name: \"isSequential\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"behavior\",\n type: \"MultiInstanceBehavior\",\n \"default\": \"All\",\n isAttr: true\n }, {\n name: \"loopCardinality\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"loopDataInputRef\",\n type: \"ItemAwareElement\",\n isReference: true\n }, {\n name: \"loopDataOutputRef\",\n type: \"ItemAwareElement\",\n isReference: true\n }, {\n name: \"inputDataItem\",\n type: \"DataInput\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"outputDataItem\",\n type: \"DataOutput\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"complexBehaviorDefinition\",\n type: \"ComplexBehaviorDefinition\",\n isMany: true\n }, {\n name: \"completionCondition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"oneBehaviorEventRef\",\n type: \"EventDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"noneBehaviorEventRef\",\n type: \"EventDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"StandardLoopCharacteristics\",\n superClass: [\"LoopCharacteristics\"],\n properties: [{\n name: \"testBefore\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"loopCondition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"loopMaximum\",\n type: \"Integer\",\n isAttr: true\n }]\n}, {\n name: \"CallActivity\",\n superClass: [\"Activity\", \"InteractionNode\"],\n properties: [{\n name: \"calledElement\",\n type: \"String\",\n isAttr: true\n }]\n}, {\n name: \"Task\",\n superClass: [\"Activity\", \"InteractionNode\"]\n}, {\n name: \"SendTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }, {\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ReceiveTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"instantiate\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }, {\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ScriptTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"scriptFormat\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"script\",\n type: \"String\"\n }]\n}, {\n name: \"BusinessRuleTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"AdHocSubProcess\",\n superClass: [\"SubProcess\"],\n properties: [{\n name: \"completionCondition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"ordering\",\n type: \"AdHocOrdering\",\n isAttr: true\n }, {\n name: \"cancelRemainingInstances\",\n \"default\": true,\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"Transaction\",\n superClass: [\"SubProcess\"],\n properties: [{\n name: \"protocol\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"method\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"GlobalScriptTask\",\n superClass: [\"GlobalTask\"],\n properties: [{\n name: \"scriptLanguage\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"script\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"GlobalBusinessRuleTask\",\n superClass: [\"GlobalTask\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ComplexBehaviorDefinition\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"condition\",\n type: \"FormalExpression\"\n }, {\n name: \"event\",\n type: \"ImplicitThrowEvent\"\n }]\n}, {\n name: \"ResourceRole\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"resourceRef\",\n type: \"Resource\",\n isReference: true\n }, {\n name: \"resourceParameterBindings\",\n type: \"ResourceParameterBinding\",\n isMany: true\n }, {\n name: \"resourceAssignmentExpression\",\n type: \"ResourceAssignmentExpression\"\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ResourceParameterBinding\",\n properties: [{\n name: \"expression\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"parameterRef\",\n type: \"ResourceParameter\",\n isAttr: true,\n isReference: true\n }],\n superClass: [\"BaseElement\"]\n}, {\n name: \"ResourceAssignmentExpression\",\n properties: [{\n name: \"expression\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }],\n superClass: [\"BaseElement\"]\n}, {\n name: \"Import\",\n properties: [{\n name: \"importType\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"location\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"namespace\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Definitions\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"targetNamespace\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"expressionLanguage\",\n \"default\": \"http://www.w3.org/1999/XPath\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"typeLanguage\",\n \"default\": \"http://www.w3.org/2001/XMLSchema\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"imports\",\n type: \"Import\",\n isMany: true\n }, {\n name: \"extensions\",\n type: \"Extension\",\n isMany: true\n }, {\n name: \"rootElements\",\n type: \"RootElement\",\n isMany: true\n }, {\n name: \"diagrams\",\n isMany: true,\n type: \"bpmndi:BPMNDiagram\"\n }, {\n name: \"exporter\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"relationships\",\n type: \"Relationship\",\n isMany: true\n }, {\n name: \"exporterVersion\",\n isAttr: true,\n type: \"String\"\n }]\n}];\nvar enumerations$3 = [{\n name: \"ProcessType\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"Public\"\n }, {\n name: \"Private\"\n }]\n}, {\n name: \"GatewayDirection\",\n literalValues: [{\n name: \"Unspecified\"\n }, {\n name: \"Converging\"\n }, {\n name: \"Diverging\"\n }, {\n name: \"Mixed\"\n }]\n}, {\n name: \"EventBasedGatewayType\",\n literalValues: [{\n name: \"Parallel\"\n }, {\n name: \"Exclusive\"\n }]\n}, {\n name: \"RelationshipDirection\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"Forward\"\n }, {\n name: \"Backward\"\n }, {\n name: \"Both\"\n }]\n}, {\n name: \"ItemKind\",\n literalValues: [{\n name: \"Physical\"\n }, {\n name: \"Information\"\n }]\n}, {\n name: \"ChoreographyLoopType\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"Standard\"\n }, {\n name: \"MultiInstanceSequential\"\n }, {\n name: \"MultiInstanceParallel\"\n }]\n}, {\n name: \"AssociationDirection\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"One\"\n }, {\n name: \"Both\"\n }]\n}, {\n name: \"MultiInstanceBehavior\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"One\"\n }, {\n name: \"All\"\n }, {\n name: \"Complex\"\n }]\n}, {\n name: \"AdHocOrdering\",\n literalValues: [{\n name: \"Parallel\"\n }, {\n name: \"Sequential\"\n }]\n}];\nvar xml$1 = {\n tagAlias: \"lowerCase\",\n typePrefix: \"t\"\n};\nvar BpmnPackage = {\n name: name$5,\n uri: uri$5,\n prefix: prefix$5,\n associations: associations$5,\n types: types$5,\n enumerations: enumerations$3,\n xml: xml$1\n};\nvar name$4 = \"BPMNDI\";\nvar uri$4 = \"http://www.omg.org/spec/BPMN/20100524/DI\";\nvar prefix$4 = \"bpmndi\";\nvar types$4 = [{\n name: \"BPMNDiagram\",\n properties: [{\n name: \"plane\",\n type: \"BPMNPlane\",\n redefines: \"di:Diagram#rootElement\"\n }, {\n name: \"labelStyle\",\n type: \"BPMNLabelStyle\",\n isMany: true\n }],\n superClass: [\"di:Diagram\"]\n}, {\n name: \"BPMNPlane\",\n properties: [{\n name: \"bpmnElement\",\n isAttr: true,\n isReference: true,\n type: \"bpmn:BaseElement\",\n redefines: \"di:DiagramElement#modelElement\"\n }],\n superClass: [\"di:Plane\"]\n}, {\n name: \"BPMNShape\",\n properties: [{\n name: \"bpmnElement\",\n isAttr: true,\n isReference: true,\n type: \"bpmn:BaseElement\",\n redefines: \"di:DiagramElement#modelElement\"\n }, {\n name: \"isHorizontal\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"isExpanded\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"isMarkerVisible\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"label\",\n type: \"BPMNLabel\"\n }, {\n name: \"isMessageVisible\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"participantBandKind\",\n type: \"ParticipantBandKind\",\n isAttr: true\n }, {\n name: \"choreographyActivityShape\",\n type: \"BPMNShape\",\n isAttr: true,\n isReference: true\n }],\n superClass: [\"di:LabeledShape\"]\n}, {\n name: \"BPMNEdge\",\n properties: [{\n name: \"label\",\n type: \"BPMNLabel\"\n }, {\n name: \"bpmnElement\",\n isAttr: true,\n isReference: true,\n type: \"bpmn:BaseElement\",\n redefines: \"di:DiagramElement#modelElement\"\n }, {\n name: \"sourceElement\",\n isAttr: true,\n isReference: true,\n type: \"di:DiagramElement\",\n redefines: \"di:Edge#source\"\n }, {\n name: \"targetElement\",\n isAttr: true,\n isReference: true,\n type: \"di:DiagramElement\",\n redefines: \"di:Edge#target\"\n }, {\n name: \"messageVisibleKind\",\n type: \"MessageVisibleKind\",\n isAttr: true,\n \"default\": \"initiating\"\n }],\n superClass: [\"di:LabeledEdge\"]\n}, {\n name: \"BPMNLabel\",\n properties: [{\n name: \"labelStyle\",\n type: \"BPMNLabelStyle\",\n isAttr: true,\n isReference: true,\n redefines: \"di:DiagramElement#style\"\n }],\n superClass: [\"di:Label\"]\n}, {\n name: \"BPMNLabelStyle\",\n properties: [{\n name: \"font\",\n type: \"dc:Font\"\n }],\n superClass: [\"di:Style\"]\n}];\nvar enumerations$2 = [{\n name: \"ParticipantBandKind\",\n literalValues: [{\n name: \"top_initiating\"\n }, {\n name: \"middle_initiating\"\n }, {\n name: \"bottom_initiating\"\n }, {\n name: \"top_non_initiating\"\n }, {\n name: \"middle_non_initiating\"\n }, {\n name: \"bottom_non_initiating\"\n }]\n}, {\n name: \"MessageVisibleKind\",\n literalValues: [{\n name: \"initiating\"\n }, {\n name: \"non_initiating\"\n }]\n}];\nvar associations$4 = [];\nvar BpmnDiPackage = {\n name: name$4,\n uri: uri$4,\n prefix: prefix$4,\n types: types$4,\n enumerations: enumerations$2,\n associations: associations$4\n};\nvar name$3 = \"DC\";\nvar uri$3 = \"http://www.omg.org/spec/DD/20100524/DC\";\nvar prefix$3 = \"dc\";\nvar types$3 = [{\n name: \"Boolean\"\n}, {\n name: \"Integer\"\n}, {\n name: \"Real\"\n}, {\n name: \"String\"\n}, {\n name: \"Font\",\n properties: [{\n name: \"name\",\n type: \"String\",\n isAttr: true\n }, {\n name: \"size\",\n type: \"Real\",\n isAttr: true\n }, {\n name: \"isBold\",\n type: \"Boolean\",\n isAttr: true\n }, {\n name: \"isItalic\",\n type: \"Boolean\",\n isAttr: true\n }, {\n name: \"isUnderline\",\n type: \"Boolean\",\n isAttr: true\n }, {\n name: \"isStrikeThrough\",\n type: \"Boolean\",\n isAttr: true\n }]\n}, {\n name: \"Point\",\n properties: [{\n name: \"x\",\n type: \"Real\",\n \"default\": \"0\",\n isAttr: true\n }, {\n name: \"y\",\n type: \"Real\",\n \"default\": \"0\",\n isAttr: true\n }]\n}, {\n name: \"Bounds\",\n properties: [{\n name: \"x\",\n type: \"Real\",\n \"default\": \"0\",\n isAttr: true\n }, {\n name: \"y\",\n type: \"Real\",\n \"default\": \"0\",\n isAttr: true\n }, {\n name: \"width\",\n type: \"Real\",\n isAttr: true\n }, {\n name: \"height\",\n type: \"Real\",\n isAttr: true\n }]\n}];\nvar associations$3 = [];\nvar DcPackage = {\n name: name$3,\n uri: uri$3,\n prefix: prefix$3,\n types: types$3,\n associations: associations$3\n};\nvar name$2 = \"DI\";\nvar uri$2 = \"http://www.omg.org/spec/DD/20100524/DI\";\nvar prefix$2 = \"di\";\nvar types$2 = [{\n name: \"DiagramElement\",\n isAbstract: true,\n properties: [{\n name: \"id\",\n isAttr: true,\n isId: true,\n type: \"String\"\n }, {\n name: \"extension\",\n type: \"Extension\"\n }, {\n name: \"owningDiagram\",\n type: \"Diagram\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"owningElement\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"modelElement\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true,\n type: \"Element\"\n }, {\n name: \"style\",\n type: \"Style\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"ownedElement\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isMany: true,\n isVirtual: true\n }]\n}, {\n name: \"Node\",\n isAbstract: true,\n superClass: [\"DiagramElement\"]\n}, {\n name: \"Edge\",\n isAbstract: true,\n superClass: [\"DiagramElement\"],\n properties: [{\n name: \"source\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"target\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"waypoint\",\n isUnique: false,\n isMany: true,\n type: \"dc:Point\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"Diagram\",\n isAbstract: true,\n properties: [{\n name: \"id\",\n isAttr: true,\n isId: true,\n type: \"String\"\n }, {\n name: \"rootElement\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isVirtual: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"documentation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"resolution\",\n isAttr: true,\n type: \"Real\"\n }, {\n name: \"ownedStyle\",\n type: \"Style\",\n isReadOnly: true,\n isMany: true,\n isVirtual: true\n }]\n}, {\n name: \"Shape\",\n isAbstract: true,\n superClass: [\"Node\"],\n properties: [{\n name: \"bounds\",\n type: \"dc:Bounds\"\n }]\n}, {\n name: \"Plane\",\n isAbstract: true,\n superClass: [\"Node\"],\n properties: [{\n name: \"planeElement\",\n type: \"DiagramElement\",\n subsettedProperty: \"DiagramElement-ownedElement\",\n isMany: true\n }]\n}, {\n name: \"LabeledEdge\",\n isAbstract: true,\n superClass: [\"Edge\"],\n properties: [{\n name: \"ownedLabel\",\n type: \"Label\",\n isReadOnly: true,\n subsettedProperty: \"DiagramElement-ownedElement\",\n isMany: true,\n isVirtual: true\n }]\n}, {\n name: \"LabeledShape\",\n isAbstract: true,\n superClass: [\"Shape\"],\n properties: [{\n name: \"ownedLabel\",\n type: \"Label\",\n isReadOnly: true,\n subsettedProperty: \"DiagramElement-ownedElement\",\n isMany: true,\n isVirtual: true\n }]\n}, {\n name: \"Label\",\n isAbstract: true,\n superClass: [\"Node\"],\n properties: [{\n name: \"bounds\",\n type: \"dc:Bounds\"\n }]\n}, {\n name: \"Style\",\n isAbstract: true,\n properties: [{\n name: \"id\",\n isAttr: true,\n isId: true,\n type: \"String\"\n }]\n}, {\n name: \"Extension\",\n properties: [{\n name: \"values\",\n isMany: true,\n type: \"Element\"\n }]\n}];\nvar associations$2 = [];\nvar xml$2 = {\n tagAlias: \"lowerCase\"\n};\nvar DiPackage = {\n name: name$2,\n uri: uri$2,\n prefix: prefix$2,\n types: types$2,\n associations: associations$2,\n xml: xml$2\n};\nvar name$1 = \"bpmn.io colors for BPMN\";\nvar uri$1 = \"http://bpmn.io/schema/bpmn/biocolor/1.0\";\nvar prefix$1 = \"bioc\";\nvar types$1 = [{\n name: \"ColoredShape\",\n \"extends\": [\"bpmndi:BPMNShape\"],\n properties: [{\n name: \"stroke\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"fill\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ColoredEdge\",\n \"extends\": [\"bpmndi:BPMNEdge\"],\n properties: [{\n name: \"stroke\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"fill\",\n isAttr: true,\n type: \"String\"\n }]\n}];\nvar enumerations$1 = [];\nvar associations$1 = [];\nvar BiocPackage = {\n name: name$1,\n uri: uri$1,\n prefix: prefix$1,\n types: types$1,\n enumerations: enumerations$1,\n associations: associations$1\n};\nvar name$6 = \"BPMN in Color\";\nvar uri$6 = \"http://www.omg.org/spec/BPMN/non-normative/color/1.0\";\nvar prefix$6 = \"color\";\nvar types$6 = [{\n name: \"ColoredLabel\",\n \"extends\": [\"bpmndi:BPMNLabel\"],\n properties: [{\n name: \"color\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ColoredShape\",\n \"extends\": [\"bpmndi:BPMNShape\"],\n properties: [{\n name: \"background-color\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"border-color\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ColoredEdge\",\n \"extends\": [\"bpmndi:BPMNEdge\"],\n properties: [{\n name: \"border-color\",\n isAttr: true,\n type: \"String\"\n }]\n}];\nvar enumerations = [];\nvar associations$6 = [];\nvar BpmnInColorPackage = {\n name: name$6,\n uri: uri$6,\n prefix: prefix$6,\n types: types$6,\n enumerations: enumerations,\n associations: associations$6\n};\nconst packages = {\n bpmn: BpmnPackage,\n bpmndi: BpmnDiPackage,\n dc: DcPackage,\n di: DiPackage,\n bioc: BiocPackage,\n color: BpmnInColorPackage\n};\nfunction SimpleBpmnModdle(additionalPackages, options) {\n const pks = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, packages, additionalPackages);\n return new BpmnModdle(pks, options);\n}\n\nvar name = \"zeebe\";\nvar prefix = \"zeebe\";\nvar uri = \"http://camunda.org/schema/zeebe/1.0\";\nvar xml = {\n\ttagAlias: \"lowerCase\"\n};\nvar associations = [\n];\nvar types = [\n\t{\n\t\tname: \"ZeebeServiceTask\",\n\t\t\"extends\": [\n\t\t\t\"bpmn:ServiceTask\",\n\t\t\t\"bpmn:BusinessRuleTask\",\n\t\t\t\"bpmn:ScriptTask\",\n\t\t\t\"bpmn:SendTask\",\n\t\t\t\"bpmn:EndEvent\",\n\t\t\t\"bpmn:IntermediateThrowEvent\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"retryCounter\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"IoMapping\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"ioMapping\",\n\t\t\t\ttype: \"IoMapping\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputParameters\",\n\t\t\t\tisMany: true,\n\t\t\t\ttype: \"Input\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputParameters\",\n\t\t\t\tisMany: true,\n\t\t\t\ttype: \"Output\"\n\t\t\t}\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:CallActivity\",\n\t\t\t\t\"bpmn:Event\",\n\t\t\t\t\"bpmn:ReceiveTask\",\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:SubProcess\",\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tname: \"InputOutputParameter\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"source\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"target\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Subscription\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"correlationKey\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Input\",\n\t\tsuperClass: [\n\t\t\t\"InputOutputParameter\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:CallActivity\",\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:SubProcess\",\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tname: \"Output\",\n\t\tsuperClass: [\n\t\t\t\"InputOutputParameter\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:CallActivity\",\n\t\t\t\t\"bpmn:Event\",\n\t\t\t\t\"bpmn:ReceiveTask\",\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:SubProcess\",\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tname: \"TaskHeaders\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"values\",\n\t\t\t\ttype: \"Header\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Header\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"id\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"value\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TaskDefinition\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"zeebe:ZeebeServiceTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"type\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"retries\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"LoopCharacteristics\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:ReceiveTask\",\n\t\t\t\t\"bpmn:SubProcess\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"inputCollection\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputElement\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputCollection\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputElement\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CalledElement\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:CallActivity\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"processId\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"processIdExpression\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"propagateAllChildVariables\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"propagateAllParentVariables\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\t\"default\": true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"UserTaskForm\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:Process\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"id\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"body\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisBody: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"FormDefinition\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"formKey\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"formId\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CalledDecision\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:BusinessRuleTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"decisionId\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resultVariable\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"AssignmentDefinition\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"assignee\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"candidateGroups\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"candidateUsers\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TaskSchedule\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"dueDate\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"followUpDate\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Properties\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"properties\",\n\t\t\t\ttype: \"Property\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Property\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"value\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TemplateSupported\",\n\t\tisAbstract: true,\n\t\t\"extends\": [\n\t\t\t\"bpmn:Collaboration\",\n\t\t\t\"bpmn:Process\",\n\t\t\t\"bpmn:FlowElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"modelerTemplate\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"modelerTemplateVersion\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Integer\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"modelerTemplateIcon\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TemplatedRootElement\",\n\t\tisAbstract: true,\n\t\t\"extends\": [\n\t\t\t\"bpmn:Error\",\n\t\t\t\"bpmn:Escalation\",\n\t\t\t\"bpmn:Message\",\n\t\t\t\"bpmn:Signal\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"modelerTemplate\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Script\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:ScriptTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"expression\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resultVariable\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t}\n];\nvar zeebeModdle = {\n\tname: name,\n\tprefix: prefix,\n\turi: uri,\n\txml: xml,\n\tassociations: associations,\n\ttypes: types\n};\n\n/**\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information regarding copyright\n * ownership.\n *\n * Camunda licenses this file to you under the MIT; you may not use this file\n * except in compliance with the MIT License.\n */\n\nconst elementTemplateLintRule = ({\n templates = []\n}) => {\n const moddle = new SimpleBpmnModdle({\n zeebe: zeebeModdle\n });\n const validator = new Validator(moddle).addAll(templates);\n const validTemplates = validator.getValidTemplates();\n\n // We use the ElementTemplates Module without the required bpmn-js modules\n // As we only use it to facilitate template ID and version lookup,\n // access to commandstack etc. is not required\n const elementTemplates = new ElementTemplates();\n elementTemplates.set(validTemplates);\n function check(node, reporter) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(node, 'bpmn:FlowElement')) {\n return;\n }\n let template = elementTemplates.get(node);\n const templateId = elementTemplates._getTemplateId(node);\n\n // Handle missing template\n if (templateId && !template) {\n reporter.report(node.id, 'Linked element template not found', {\n name: node.name\n });\n return;\n }\n if (!template) {\n return;\n }\n template = applyConditions(node, template);\n\n // Check attributes\n template.properties.forEach(property => {\n const value = getPropertyValue(node, property);\n const error = validateProperty(value, property);\n if (!error) {\n return;\n }\n reporter.report(node.id, error, {\n propertiesPanel: {\n entryIds: [getEntryId(property, template)]\n },\n name: node.name\n });\n });\n }\n return {\n check\n };\n};\nconst ElementTemplateLinterPlugin = function (templates) {\n return {\n config: {\n rules: {\n 'element-templates/validate': ['error', {\n templates\n }]\n }\n },\n resolver: new (bpmnlint_lib_resolver_static_resolver__WEBPACK_IMPORTED_MODULE_10___default())({\n 'rule:bpmnlint-plugin-element-templates/validate': elementTemplateLintRule\n })\n };\n};\n\n// helpers //////////////////////\n\nfunction getEntryId(property, template) {\n const index = template.properties.filter(p => p.group === property.group).indexOf(property);\n const path = ['custom-entry', template.id];\n if (property.group) {\n path.push(property.group);\n }\n path.push(index);\n return path.join('-');\n}\n\n\n//# sourceMappingURL=index.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1lbGVtZW50LXRlbXBsYXRlcy9kaXN0L2luZGV4LmVzbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEwRTtBQUNoRDtBQUN5TTtBQUN4TDtBQUMwSDtBQUMvSTtBQUM0RDtBQUNKO0FBQ2xCO0FBQ2U7QUFDZjtBQUNtYTtBQUMzYjtBQUMyRDtBQUNaO0FBQ2U7QUFDQztBQUNqQjtBQUNsRDtBQUNtQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLHlCQUF5Qiw4RUFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLHlCQUF5Qiw4RUFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLHlCQUF5Qiw4RUFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLGVBQWU7QUFDM0I7QUFDQTtBQUNBLHlCQUF5Qiw4RUFBaUI7QUFDMUM7QUFDQSxNQUFNLCtEQUFFO0FBQ1I7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrREFBRTtBQUNiLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQSx3REFBd0QsYUFBYTtBQUNyRTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsc0RBQWE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLGNBQWMsT0FBTyxFQUFFLGdDQUFnQztBQUN2RDtBQUNBO0FBQ0EsY0FBYyxPQUFPLEVBQUUsaUNBQWlDLFVBQVU7QUFDbEU7QUFDQSxLQUFLLEVBQUU7QUFDUDtBQUNBO0FBQ0EsY0FBYyxPQUFPLEVBQUUsaUNBQWlDLFVBQVU7QUFDbEU7QUFDQSxLQUFLLEVBQUU7QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLFNBQVMsbURBQVE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixPQUFPLEVBQUUsbUJBQW1CO0FBQzlDO0FBQ0EsZ0JBQWdCLE9BQU8sRUFBRSwrQkFBK0IsUUFBUTtBQUNoRTtBQUNBLE9BQU8sRUFBRTtBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLDhFQUFpQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSix1Q0FBdUMsS0FBSyxpQkFBaUIsR0FBRztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsSUFBSSxJQUFJO0FBQ3BDLGtDQUFrQyxZQUFZO0FBQzlDLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0osa0dBQWtHLCtEQUFFLGlDQUFpQywyRUFBaUI7QUFDdEo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsOEVBQWlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTiwyQkFBMkIsOEVBQWlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOLDJCQUEyQiw4RUFBaUI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdCQUFnQjtBQUM3QixhQUFhLGVBQWU7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdCQUFnQjtBQUM3QixhQUFhLFFBQVE7QUFDckIsYUFBYSxlQUFlO0FBQzVCLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsZ0JBQWdCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywrQ0FBSTtBQUNiO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGtGQUFrQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbURBQVE7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSTtBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNB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QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVMsaURBQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxRQUFRLGNBQWM7QUFDakMsV0FBVyxRQUFRLFlBQVksR0FBRztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0Isc0VBQWU7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxPQUFPLG1EQUFRO0FBQ2Y7QUFDQTtBQUNBLEVBQUUsa0RBQU8sQ0FBQywrQ0FBSTtBQUNkLHVCQUF1QixpREFBTTtBQUM3QjtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsUUFBUTtBQUNuQixXQUFXLGFBQWE7QUFDeEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsUUFBUTtBQUNuQixXQUFXLGFBQWE7QUFDeEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsUUFBUTtBQUNuQixXQUFXLGFBQWE7QUFDeEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsUUFBUTtBQUNuQixXQUFXLGFBQWE7QUFDeEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLFFBQVE7QUFDbkIsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsUUFBUTtBQUNuQixXQUFXLGFBQWE7QUFDeEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaURBQU0sR0FBRztBQUN6QjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsZUFBZTtBQUMxQixXQUFXLGVBQWU7QUFDMUIsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLGVBQWU7QUFDMUIsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsOEVBQWlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0IsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQ0FBb0MsOEVBQWlCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isa0RBQU87QUFDekI7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0JBQWdCO0FBQzdCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrREFBTztBQUMzQjtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0IsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQixhQUFhLGVBQWU7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsa0VBQUs7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGtEQUFPO0FBQ2pDO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0JBQWdCO0FBQzdCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksK0NBQUk7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixrREFBTztBQUN6QjtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdCQUFnQjtBQUM3QixhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLCtEQUFFO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYywrREFBRTtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFlBQVksK0RBQUU7QUFDZDtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixrREFBTztBQUNsQztBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsa0RBQU87QUFDbkM7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0JBQWdCO0FBQzdCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsYUFBYSxlQUFlO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isa0RBQU87QUFDekI7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0JBQWdCO0FBQzdCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw4RUFBaUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsK0NBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsOEVBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixZQUFZLCtEQUFFO0FBQ2Q7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdCQUFnQjtBQUM3QixhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0IsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4QkFBOEI7QUFDekMsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSx1QkFBdUIsOEVBQWlCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxrRUFBSztBQUNiO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFdBQVcsK0NBQUk7QUFDZjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsV0FBVywrQ0FBSTtBQUNmLGFBQWEsbURBQVE7QUFDckIsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFFBQVEsK0RBQUU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLCtDQUFJO0FBQ2pCO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTixhQUFhLCtDQUFJO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQ0FBSTtBQUNmO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0NBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsV0FBVywrQ0FBSTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFdBQVcsK0NBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFdBQVcsK0NBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsV0FBVywrQ0FBSTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDhFQUFpQjtBQUMxQztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0EsMERBQTBELGFBQWE7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNEQUFhO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRywwQ0FBMEM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsa0RBQU87QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVEsa0RBQU87QUFDZjtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtREFBUTtBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksb0RBQVM7QUFDckI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsa0RBQU87QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrREFBTztBQUNYO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9C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SDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsaURBQU0sR0FBRztBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsK0RBQUU7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsa0JBQWtCLCtFQUFjO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVpVTtBQUNqVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9icG1uLWpzLWVsZW1lbnQtdGVtcGxhdGVzL2Rpc3QvaW5kZXguZXNtLmpzP2YxOWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QnVzaW5lc3NPYmplY3QsIGlzLCBpc0FueSB9IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCBhcyBpc1VuZGVmaW5lZCQxLCBpc1N0cmluZywgZmluZCwgaXNOaWwsIGZsYXR0ZW4sIHZhbHVlcywgaXNPYmplY3QsIGZpbHRlciwgaXNBcnJheSwgaXNGdW5jdGlvbiwgd2l0aG91dCwgZm9yRWFjaCwgZ3JvdXBCeSwgaXNOdW1iZXIsIHNvcnRCeSwga2V5cywgYXNzaWduLCBiaW5kLCBzZXQsIHBpY2ssIGZpbmRJbmRleCwgaGFzIH0gZnJvbSAnbWluLWRhc2gnO1xuaW1wb3J0IHNlbXZlckNvbXBhcmUgZnJvbSAnc2VtdmVyLWNvbXBhcmUnO1xuaW1wb3J0IHsgZ2V0U2NoZW1hVmVyc2lvbiBhcyBnZXRTY2hlbWFWZXJzaW9uJDEsIHZhbGlkYXRlLCBnZXRaZWViZVNjaGVtYVZlcnNpb24sIGdldFplZWJlU2NoZW1hUGFja2FnZSwgdmFsaWRhdGVaZWViZSB9IGZyb20gJ0BicG1uLWlvL2VsZW1lbnQtdGVtcGxhdGVzLXZhbGlkYXRvcic7XG5pbXBvcnQgSWRzIGZyb20gJ2lkcyc7XG5pbXBvcnQgeyBnZXRMYWJlbCwgc2V0TGFiZWwgfSBmcm9tICdicG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsVXRpbCc7XG5pbXBvcnQgeyBpc1BsYW5lLCBnZXRTaGFwZUlkRnJvbVBsYW5lIH0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9EcmlsbGRvd25VdGlsJztcbmltcG9ydCB7IGlzRXZlbnRTdWJQcm9jZXNzIH0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwnO1xuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5pbXBvcnQgdHJhbnNsYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcbmltcG9ydCB7IHVzZUxheW91dFN0YXRlLCBIZWFkZXJCdXR0b24sIEFycm93SWNvbiwgQ3JlYXRlSWNvbiwgRHJvcGRvd25CdXR0b24sIFRleHRBcmVhRW50cnksIFRleHRGaWVsZEVudHJ5LCBGZWVsRW50cnkgYXMgRmVlbEVudHJ5JDEsIEZlZWxUZXh0QXJlYUVudHJ5IGFzIEZlZWxUZXh0QXJlYUVudHJ5JDEsIFNlbGVjdEVudHJ5LCBGZWVsQ2hlY2tib3hFbnRyeSwgQ2hlY2tib3hFbnRyeSwgRmVlbE51bWJlckVudHJ5LCBOdW1iZXJGaWVsZEVudHJ5LCBHcm91cCwgaXNGZWVsRW50cnlFZGl0ZWQsIGlzTnVtYmVyRmllbGRFbnRyeUVkaXRlZCwgaXNDaGVja2JveEVudHJ5RWRpdGVkLCBpc1NlbGVjdEVudHJ5RWRpdGVkLCBpc1RleHRGaWVsZEVudHJ5RWRpdGVkLCBpc1RleHRBcmVhRW50cnlFZGl0ZWQsIHVzZVByZXZpb3VzLCBUb2dnbGVTd2l0Y2hFbnRyeSwgTGlzdEdyb3VwIH0gZnJvbSAnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZVNlcnZpY2UsIENhbXVuZGFQbGF0Zm9ybVByb3BlcnRpZXNQcm92aWRlck1vZHVsZSB9IGZyb20gJ2JwbW4tanMtcHJvcGVydGllcy1wYW5lbCc7XG5pbXBvcnQgeyBqc3hzLCBqc3gsIEZyYWdtZW50IH0gZnJvbSAnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCBhcyBjcmVhdGVFbGVtZW50JDEsIGgsIENvbXBvbmVudCB9IGZyb20gJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwvcHJlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvaG9va3MnO1xuaW1wb3J0IHsgZ2V0VmFyaWFibGVzRm9yRWxlbWVudCB9IGZyb20gJ0BicG1uLWlvL2V4dHJhY3QtcHJvY2Vzcy12YXJpYWJsZXMvemVlYmUnO1xuaW1wb3J0IHsgcXVlcnkgfSBmcm9tICdtaW4tZG9tJztcbmltcG9ydCBTdGF0aWNSZXNvbHZlciBmcm9tICdicG1ubGludC9saWIvcmVzb2x2ZXIvc3RhdGljLXJlc29sdmVyJztcblxuLyoqXG4gKiBUaGUgQlBNTiAyLjAgZXh0ZW5zaW9uIGF0dHJpYnV0ZSBuYW1lIHVuZGVyXG4gKiB3aGljaCB0aGUgZWxlbWVudCB0ZW1wbGF0ZSBJRCBpcyBzdG9yZWQuXG4gKlxuICogQHR5cGUge1N0cmluZ31cbiAqL1xuY29uc3QgVEVNUExBVEVfSURfQVRUUiQxID0gJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZSc7XG5cbi8qKlxuICogVGhlIEJQTU4gMi4wIGV4dGVuc2lvbiBhdHRyaWJ1dGUgbmFtZSB1bmRlclxuICogd2hpY2ggdGhlIGVsZW1lbnQgdGVtcGxhdGUgdmVyc2lvbiBpcyBzdG9yZWQuXG4gKlxuICogQHR5cGUge1N0cmluZ31cbiAqL1xuY29uc3QgVEVNUExBVEVfVkVSU0lPTl9BVFRSJDEgPSAnemVlYmU6bW9kZWxlclRlbXBsYXRlVmVyc2lvbic7XG5cbi8qKlxuICogVGhlIEJQTU4gMi4wIGV4dGVuc2lvbiBhdHRyaWJ1dGUgbmFtZSB1bmRlclxuICogd2hpY2ggdGhlIGVsZW1lbnQgdGVtcGxhdGUgaWNvbiBpcyBzdG9yZWQuXG4gKlxuICogQHR5cGUge1N0cmluZ31cbiAqL1xuY29uc3QgVEVNUExBVEVfSUNPTl9BVFRSID0gJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZUljb24nO1xuXG4vKipcbiAqIEdldCB0ZW1wbGF0ZSBpZCBmb3IgYSBnaXZlbiBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGVJZCQxKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChURU1QTEFURV9JRF9BVFRSJDEpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IHRlbXBsYXRlIHZlcnNpb24gZm9yIGEgZ2l2ZW4gZGlhZ3JhbSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlVmVyc2lvbiQxKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChURU1QTEFURV9WRVJTSU9OX0FUVFIkMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGVtcGxhdGUgaWNvbiBmb3IgYSBnaXZlbiBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGVJY29uKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChURU1QTEFURV9JQ09OX0FUVFIpO1xuICB9XG59XG5cbi8qKlxuICogRmluZCBleHRlbnNpb24gd2l0aCBnaXZlbiB0eXBlIGluXG4gKiBCUE1OIGVsZW1lbnQsIGRpYWdyYW0gZWxlbWVudCBvciBFeHRlbnNpb25FbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZXh0ZW5zaW9uXG4gKi9cbmZ1bmN0aW9uIGZpbmRFeHRlbnNpb24kMShlbGVtZW50LCB0eXBlKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGxldCBleHRlbnNpb25FbGVtZW50cztcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpKSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdDtcbiAgfSBlbHNlIHtcbiAgICBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgfVxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLmZpbmQodmFsdWUgPT4ge1xuICAgIHJldHVybiBpcyh2YWx1ZSwgdHlwZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZFplZWJlUHJvcGVydHkoemVlYmVQcm9wZXJ0aWVzLCBiaW5kaW5nKSB7XG4gIHJldHVybiB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykuZmluZCh2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIHZhbHVlLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaW5kSW5wdXRQYXJhbWV0ZXIkMShpb01hcHBpbmcsIGJpbmRpbmcpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IGlvTWFwcGluZy5nZXQoJ2lucHV0UGFyYW1ldGVycycpO1xuICByZXR1cm4gcGFyYW1ldGVycy5maW5kKHBhcmFtZXRlciA9PiB7XG4gICAgcmV0dXJuIHBhcmFtZXRlci50YXJnZXQgPT09IGJpbmRpbmcubmFtZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaW5kT3V0cHV0UGFyYW1ldGVyJDEoaW9NYXBwaW5nLCBiaW5kaW5nKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBpb01hcHBpbmcuZ2V0KCdvdXRwdXRQYXJhbWV0ZXJzJyk7XG4gIHJldHVybiBwYXJhbWV0ZXJzLmZpbmQocGFyYW1ldGVyID0+IHtcbiAgICByZXR1cm4gcGFyYW1ldGVyLnNvdXJjZSA9PT0gYmluZGluZy5zb3VyY2U7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZFRhc2tIZWFkZXIodGFza0hlYWRlcnMsIGJpbmRpbmcpIHtcbiAgY29uc3QgaGVhZGVycyA9IHRhc2tIZWFkZXJzLmdldCgndmFsdWVzJyk7XG4gIHJldHVybiBoZWFkZXJzLmZpbmQoaGVhZGVyID0+IHtcbiAgICByZXR1cm4gaGVhZGVyLmtleSA9PT0gYmluZGluZy5rZXk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZE1lc3NhZ2UoYnVzaW5lc3NPYmplY3QpIHtcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgY29uc3QgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpO1xuICAgIGlmICghZXZlbnREZWZpbml0aW9ucyB8fCAhZXZlbnREZWZpbml0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYnVzaW5lc3NPYmplY3QgPSBldmVudERlZmluaXRpb25zWzBdO1xuICB9XG4gIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnbWVzc2FnZVJlZicpO1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5KSB7XG4gIGlmIChwcm9wZXJ0eS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5LnZhbHVlO1xuICB9XG4gIGlmIChwcm9wZXJ0eS5nZW5lcmF0ZWRWYWx1ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGVcbiAgICB9ID0gcHJvcGVydHkuZ2VuZXJhdGVkVmFsdWU7XG4gICAgaWYgKHR5cGUgPT09ICd1dWlkJykge1xuICAgICAgcmV0dXJuIHY0KCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIEJQTU4gMi4wIGV4dGVuc2lvbiBhdHRyaWJ1dGUgbmFtZSB1bmRlclxuICogd2hpY2ggdGhlIGVsZW1lbnQgdGVtcGxhdGUgSUQgaXMgc3RvcmVkLlxuICpcbiAqIEB0eXBlIHtTdHJpbmd9XG4gKi9cbmNvbnN0IFRFTVBMQVRFX0lEX0FUVFIgPSAnY2FtdW5kYTptb2RlbGVyVGVtcGxhdGUnO1xuXG4vKipcbiAqIFRoZSBCUE1OIDIuMCBleHRlbnNpb24gYXR0cmlidXRlIG5hbWUgdW5kZXJcbiAqIHdoaWNoIHRoZSBlbGVtZW50IHRlbXBsYXRlIHZlcnNpb24gaXMgc3RvcmVkLlxuICpcbiAqIEB0eXBlIHtTdHJpbmd9XG4gKi9cbmNvbnN0IFRFTVBMQVRFX1ZFUlNJT05fQVRUUiA9ICdjYW11bmRhOm1vZGVsZXJUZW1wbGF0ZVZlcnNpb24nO1xuXG4vKipcbiAqIEdldCB0ZW1wbGF0ZSBpZCBmb3IgYSBnaXZlbiBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGVJZChlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmIChidXNpbmVzc09iamVjdCkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoVEVNUExBVEVfSURfQVRUUik7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGVtcGxhdGUgdmVyc2lvbiBmb3IgYSBnaXZlbiBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGVWZXJzaW9uKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChURU1QTEFURV9WRVJTSU9OX0FUVFIpO1xuICB9XG59XG5cbi8qKlxuICogRmluZCBleHRlbnNpb24gd2l0aCBnaXZlbiB0eXBlIGluXG4gKiBCUE1OIGVsZW1lbnQsIGRpYWdyYW0gZWxlbWVudCBvciBFeHRlbnNpb25FbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZXh0ZW5zaW9uXG4gKi9cbmZ1bmN0aW9uIGZpbmRFeHRlbnNpb24oZWxlbWVudCwgdHlwZSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBsZXQgZXh0ZW5zaW9uRWxlbWVudHM7XG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnKSkge1xuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3Q7XG4gIH0gZWxzZSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gIH1cbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLmZpbmQodmFsdWUgPT4ge1xuICAgIHJldHVybiBpcyh2YWx1ZSwgdHlwZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgdHlwZXMpIHtcbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maWx0ZXIodmFsdWUgPT4ge1xuICAgIHJldHVybiBpc0FueSh2YWx1ZSwgdHlwZXMpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRDYW11bmRhSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtcbiAgICB0eXBlXG4gIH0gPSBiaW5kaW5nO1xuICBsZXQgbWF0Y2hlcjtcbiAgaWYgKHR5cGUgPT09ICdjYW11bmRhOmluJykge1xuICAgIG1hdGNoZXIgPSBlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBpcyhlbGVtZW50LCAnY2FtdW5kYTpJbicpICYmIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZyk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY2FtdW5kYTpvdXQnKSB7XG4gICAgbWF0Y2hlciA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGlzKGVsZW1lbnQsICdjYW11bmRhOk91dCcpICYmIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZyk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY2FtdW5kYTppbjpidXNpbmVzc0tleScpIHtcbiAgICBtYXRjaGVyID0gZWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gaXMoZWxlbWVudCwgJ2NhbXVuZGE6SW4nKSAmJiAnYnVzaW5lc3NLZXknIGluIGVsZW1lbnQ7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maW5kKG1hdGNoZXIpO1xufVxuZnVuY3Rpb24gZmluZENhbXVuZGFQcm9wZXJ0eShjYW11bmRhUHJvcGVydGllcywgYmluZGluZykge1xuICByZXR1cm4gY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCd2YWx1ZXMnKS5maW5kKHZhbHVlID0+IHtcbiAgICByZXR1cm4gdmFsdWUubmFtZSA9PT0gYmluZGluZy5uYW1lO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRJbnB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZykge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gaW5wdXRPdXRwdXQuZ2V0KCdpbnB1dFBhcmFtZXRlcnMnKTtcbiAgcmV0dXJuIHBhcmFtZXRlcnMuZmluZChwYXJhbWV0ZXIgPT4ge1xuICAgIHJldHVybiBwYXJhbWV0ZXIubmFtZSA9PT0gYmluZGluZy5uYW1lO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnb3V0cHV0UGFyYW1ldGVycycpO1xuICByZXR1cm4gcGFyYW1ldGVycy5maW5kKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZVxuICAgIH0gPSBwYXJhbWV0ZXI7XG4gICAgaWYgKCFiaW5kaW5nLnNjcmlwdEZvcm1hdCkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSBiaW5kaW5nLnNvdXJjZTtcbiAgICB9XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHBhcmFtZXRlci5nZXQoJ2NhbXVuZGE6ZGVmaW5pdGlvbicpO1xuICAgIGlmICghZGVmaW5pdGlvbiB8fCBiaW5kaW5nLnNjcmlwdEZvcm1hdCAhPT0gZGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6c2NyaXB0Rm9ybWF0JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb24uZ2V0KCdjYW11bmRhOnZhbHVlJykgPT09IGJpbmRpbmcuc291cmNlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb24oZWxlbWVudCwgZXJyb3JSZWYpIHtcbiAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb25zID0gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgWydjYW11bmRhOkVycm9yRXZlbnREZWZpbml0aW9uJ10pO1xuICBsZXQgZXJyb3I7XG5cbiAgLy8gZXJyb3IgSUQgaGFzIHRvIHN0YXJ0IHdpdGggPEVycm9yXyR7IGVycm9yUmVmIH1fPlxuICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb25zLmZpbmQoZGVmaW5pdGlvbiA9PiB7XG4gICAgZXJyb3IgPSBkZWZpbml0aW9uLmdldCgnYnBtbjplcnJvclJlZicpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yLmdldCgnYnBtbjppZCcpLnN0YXJ0c1dpdGgoYEVycm9yXyR7ZXJyb3JSZWZ9YCk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xuICBpZiAoYmluZGluZy50eXBlID09PSAnY2FtdW5kYTppbicpIHtcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHRhcmdldCBhdHRyaWJ1dGVcbiAgICBpZiAoYmluZGluZy50YXJnZXQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnRhcmdldCA9PT0gYmluZGluZy50YXJnZXQ7XG4gICAgfVxuICB9XG4gIGlmIChiaW5kaW5nLnR5cGUgPT09ICdjYW11bmRhOm91dCcpIHtcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHNvdXJjZSAvIHNvdXJjZUV4cHJlc3Npb25cbiAgICBpZiAoYmluZGluZy5zb3VyY2UpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNvdXJjZSA9PT0gYmluZGluZy5zb3VyY2U7XG4gICAgfVxuICAgIGlmIChiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNvdXJjZUV4cHJlc3Npb24gPT09IGJpbmRpbmcuc291cmNlRXhwcmVzc2lvbjtcbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGJhc2VkIHZhcmlhYmxlcyAvIGxvY2FsIGNvbWJpbmF0aW9uXG4gIGlmIChiaW5kaW5nLnZhcmlhYmxlcykge1xuICAgIHJldHVybiBlbGVtZW50LnZhcmlhYmxlcyA9PT0gJ2FsbCcgJiYgKGJpbmRpbmcudmFyaWFibGVzICE9PSAnbG9jYWwnIHx8IGVsZW1lbnQubG9jYWwpO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0cnkgZm9yIGVsZW1lbnQgdGVtcGxhdGVzLlxuICovXG5sZXQgRWxlbWVudFRlbXBsYXRlcyQxID0gY2xhc3MgRWxlbWVudFRlbXBsYXRlcyB7XG4gIGNvbnN0cnVjdG9yKGNvbW1hbmRTdGFjaywgZXZlbnRCdXMsIG1vZGVsaW5nLCBpbmplY3Rvcikge1xuICAgIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbiAgICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgICB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGVtcGxhdGUgd2l0aCBnaXZlbiBJRCBhbmQgb3B0aW9uYWwgdmVyc2lvbiBvciBmb3IgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGlkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmVyc2lvbl1cbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudFRlbXBsYXRlfVxuICAgKi9cbiAgZ2V0KGlkLCB2ZXJzaW9uKSB7XG4gICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5fdGVtcGxhdGVzO1xuICAgIGxldCBlbGVtZW50O1xuICAgIGlmIChpc1VuZGVmaW5lZCQxKGlkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZyhpZCkpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZCQxKHZlcnNpb24pKSB7XG4gICAgICAgIHZlcnNpb24gPSAnXyc7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVzW2lkXSAmJiB0ZW1wbGF0ZXNbaWRdW3ZlcnNpb25dKSB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXNbaWRdW3ZlcnNpb25dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSBpZDtcbiAgICAgIHJldHVybiB0aGlzLmdldCh0aGlzLl9nZXRUZW1wbGF0ZUlkKGVsZW1lbnQpLCB0aGlzLl9nZXRUZW1wbGF0ZVZlcnNpb24oZWxlbWVudCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCB0ZW1wbGF0ZSBmb3IgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50VGVtcGxhdGV9XG4gICAqL1xuICBnZXREZWZhdWx0KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmluZCh0aGlzLmdldEFsbChlbGVtZW50KSwgZnVuY3Rpb24gKHRlbXBsYXRlKSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuaXNEZWZhdWx0O1xuICAgIH0pIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0ZW1wbGF0ZXMgKHdpdGggZ2l2ZW4gSUQgb3IgYXBwbGljYWJsZSB0byBlbGVtZW50KS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IFtpZF1cbiAgICogQHJldHVybiB7QXJyYXk8RWxlbWVudFRlbXBsYXRlPn1cbiAgICovXG4gIGdldEFsbChpZCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUZW1wbGF0ZVZlcmlvbnMoaWQsIHtcbiAgICAgIGluY2x1ZGVEZXByZWNhdGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0ZW1wbGF0ZXMgKHdpdGggZ2l2ZW4gSUQgb3IgYXBwbGljYWJsZSB0byBlbGVtZW50KSB3aXRoIHRoZSBsYXRlc3RcbiAgICogdmVyc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IFtpZF1cbiAgICogQHBhcmFtIHt7IGRlcHJlY2F0ZWQ/OiBib29sZWFuIH19IFtvcHRpb25zXVxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheTxFbGVtZW50VGVtcGxhdGU+fVxuICAgKi9cbiAgZ2V0TGF0ZXN0KGlkLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VGVtcGxhdGVWZXJpb25zKGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGF0ZXN0OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxFbGVtZW50VGVtcGxhdGU+fSB0ZW1wbGF0ZXNcbiAgICovXG4gIHNldCh0ZW1wbGF0ZXMpIHtcbiAgICB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcbiAgICB0ZW1wbGF0ZXMuZm9yRWFjaCh0ZW1wbGF0ZSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRlbXBsYXRlLmlkLFxuICAgICAgICB2ZXJzaW9uID0gaXNVbmRlZmluZWQkMSh0ZW1wbGF0ZS52ZXJzaW9uKSA/ICdfJyA6IHRlbXBsYXRlLnZlcnNpb247XG4gICAgICBpZiAoIXRoaXMuX3RlbXBsYXRlc1tpZF0pIHtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVzW2lkXSA9IHtcbiAgICAgICAgICBsYXRlc3Q6IHRlbXBsYXRlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLl90ZW1wbGF0ZXNbaWRdW3ZlcnNpb25dID0gdGVtcGxhdGU7XG4gICAgICBjb25zdCBsYXRlc3RWZXJpb25zID0gdGhpcy5fdGVtcGxhdGVzW2lkXS5sYXRlc3QudmVyc2lvbjtcbiAgICAgIGlmIChpc1VuZGVmaW5lZCQxKGxhdGVzdFZlcmlvbnMpIHx8IHRlbXBsYXRlLnZlcnNpb24gPiBsYXRlc3RWZXJpb25zKSB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlc1tpZF0ubGF0ZXN0ID0gdGVtcGxhdGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfG51bGx9IGlkXG4gICAqIEBwYXJhbSB7IHsgbGF0ZXN0PzogYm9vbGVhbiwgZGVwcmVjYXRlZD86IGJvb2xlYW4gfSBbb3B0aW9uc11cbiAgICpcbiAgICogQHJldHVybiB7QXJyYXk8RWxlbWVudFRlbXBsYXRlPn1cbiAgICovXG4gIF9nZXRUZW1wbGF0ZVZlcmlvbnMoaWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGxhdGVzdDogbGF0ZXN0T25seSxcbiAgICAgIGRlcHJlY2F0ZWQ6IGluY2x1ZGVEZXByZWNhdGVkXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5fdGVtcGxhdGVzO1xuICAgIGNvbnN0IGdldFZlcnNpb25zID0gdGVtcGxhdGUgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXRlc3QsXG4gICAgICAgIC4uLnZlcnNpb25zXG4gICAgICB9ID0gdGVtcGxhdGU7XG4gICAgICByZXR1cm4gbGF0ZXN0T25seSA/ICFpbmNsdWRlRGVwcmVjYXRlZCAmJiBsYXRlc3QuZGVwcmVjYXRlZCA/IFtdIDogW2xhdGVzdF0gOiB2YWx1ZXModmVyc2lvbnMpO1xuICAgIH07XG4gICAgaWYgKGlzTmlsKGlkKSkge1xuICAgICAgcmV0dXJuIGZsYXR0ZW4odmFsdWVzKHRlbXBsYXRlcykubWFwKGdldFZlcnNpb25zKSk7XG4gICAgfVxuICAgIGlmIChpc09iamVjdChpZCkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBpZDtcbiAgICAgIHJldHVybiBmaWx0ZXIodGhpcy5fZ2V0VGVtcGxhdGVWZXJpb25zKG51bGwsIG9wdGlvbnMpLCBmdW5jdGlvbiAodGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIHRlbXBsYXRlLmFwcGxpZXNUbyk7XG4gICAgICB9KSB8fCBbXTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKGlkKSkge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlc1tpZF0gJiYgZ2V0VmVyc2lvbnModGVtcGxhdGVzW2lkXSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V8dW5kZWZpbmVkfScpO1xuICB9XG4gIF9nZXRUZW1wbGF0ZUlkKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VGVtcGxhdGVJZChlbGVtZW50KTtcbiAgfVxuICBfZ2V0VGVtcGxhdGVWZXJzaW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VGVtcGxhdGVWZXJzaW9uKGVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGVsZW1lbnQgdGVtcGxhdGUgdG8gYSBnaXZlbiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlfSBuZXdUZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICAgKi9cbiAgYXBwbHlUZW1wbGF0ZShlbGVtZW50LCBuZXdUZW1wbGF0ZSkge1xuICAgIGxldCBhY3Rpb24gPSAnYXBwbHknO1xuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG5ld1RlbXBsYXRlXG4gICAgfTtcbiAgICBjb25zdCBvbGRUZW1wbGF0ZSA9IHRoaXMuZ2V0KGVsZW1lbnQpO1xuICAgIGlmIChvbGRUZW1wbGF0ZSAmJiAhbmV3VGVtcGxhdGUpIHtcbiAgICAgIGFjdGlvbiA9ICd1bmxpbmsnO1xuICAgICAgcGF5bG9hZCA9IHtcbiAgICAgICAgZWxlbWVudFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG5ld1RlbXBsYXRlICYmIG9sZFRlbXBsYXRlICYmIG5ld1RlbXBsYXRlLmlkID09PSBvbGRUZW1wbGF0ZS5pZCkge1xuICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGUsXG4gICAgICBvbGRUZW1wbGF0ZVxuICAgIH07XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXNQYW5lbC5jYW11bmRhLmNoYW5nZVRlbXBsYXRlJywgY29udGV4dCk7XG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZShgZWxlbWVudFRlbXBsYXRlcy4ke2FjdGlvbn1gLCBwYXlsb2FkKTtcbiAgICByZXR1cm4gY29udGV4dC5lbGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0ZW1wbGF0ZSBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICAgKi9cbiAgcmVtb3ZlVGVtcGxhdGUoZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50QnVzID0gdGhpcy5faW5qZWN0b3IuZ2V0KCdldmVudEJ1cycpO1xuICAgIGV2ZW50QnVzLmZpcmUoJ2VsZW1lbnRUZW1wbGF0ZXMucmVtb3ZlJywge1xuICAgICAgZWxlbWVudFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBlbGVtZW50XG4gICAgfTtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllc1BhbmVsLnJlbW92ZVRlbXBsYXRlJywgY29udGV4dCk7XG4gICAgcmV0dXJuIGNvbnRleHQubmV3RWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmxpbmsgdGVtcGxhdGUgZnJvbSBhIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAgICovXG4gIHVubGlua1RlbXBsYXRlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseVRlbXBsYXRlKGVsZW1lbnQsIG51bGwpO1xuICB9XG59O1xuRWxlbWVudFRlbXBsYXRlcyQxLiRpbmplY3QgPSBbJ2NvbW1hbmRTdGFjaycsICdldmVudEJ1cycsICdtb2RlbGluZycsICdpbmplY3RvciddO1xuXG4vKipcbiAqIFJlZ2lzdHJ5IGZvciBlbGVtZW50IHRlbXBsYXRlcy5cbiAqL1xuY2xhc3MgRWxlbWVudFRlbXBsYXRlcyBleHRlbmRzIEVsZW1lbnRUZW1wbGF0ZXMkMSB7XG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlRWxlbWVudEZhY3RvcnksIGNvbW1hbmRTdGFjaywgZXZlbnRCdXMsIG1vZGVsaW5nLCBpbmplY3Rvcikge1xuICAgIHN1cGVyKGNvbW1hbmRTdGFjaywgZXZlbnRCdXMsIG1vZGVsaW5nLCBpbmplY3Rvcik7XG4gICAgdGhpcy5fdGVtcGxhdGVFbGVtZW50RmFjdG9yeSA9IHRlbXBsYXRlRWxlbWVudEZhY3Rvcnk7XG4gIH1cbiAgX2dldFRlbXBsYXRlSWQoZWxlbWVudCkge1xuICAgIHJldHVybiBnZXRUZW1wbGF0ZUlkJDEoZWxlbWVudCk7XG4gIH1cbiAgX2dldFRlbXBsYXRlVmVyc2lvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldFRlbXBsYXRlVmVyc2lvbiQxKGVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlbGVtZW50IGJhc2VkIG9uIGFuIGVsZW1lbnQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlfSB0ZW1wbGF0ZVxuICAgKiBAcmV0dXJucyB7ZGpzLm1vZGVsLkJhc2V9XG4gICAqL1xuICBjcmVhdGVFbGVtZW50KHRlbXBsYXRlKSB7XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0ZW1wbGF0ZSBpcyBtaXNzaW5nJyk7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl90ZW1wbGF0ZUVsZW1lbnRGYWN0b3J5LmNyZWF0ZSh0ZW1wbGF0ZSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgZWxlbWVudCB0ZW1wbGF0ZSB0byBhIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtFbGVtZW50VGVtcGxhdGV9IG5ld1RlbXBsYXRlXG4gICAqXG4gICAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gICAqL1xuICBhcHBseVRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgbGV0IGFjdGlvbiA9ICdhcHBseSc7XG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGVcbiAgICB9O1xuICAgIGNvbnN0IG9sZFRlbXBsYXRlID0gdGhpcy5nZXQoZWxlbWVudCk7XG4gICAgaWYgKG9sZFRlbXBsYXRlICYmICFuZXdUZW1wbGF0ZSkge1xuICAgICAgYWN0aW9uID0gJ3VubGluayc7XG4gICAgICBwYXlsb2FkID0ge1xuICAgICAgICBlbGVtZW50XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobmV3VGVtcGxhdGUgJiYgb2xkVGVtcGxhdGUgJiYgbmV3VGVtcGxhdGUuaWQgPT09IG9sZFRlbXBsYXRlLmlkKSB7XG4gICAgICBhY3Rpb24gPSAndXBkYXRlJztcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBuZXdUZW1wbGF0ZSxcbiAgICAgIG9sZFRlbXBsYXRlXG4gICAgfTtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllc1BhbmVsLnplZWJlLmNoYW5nZVRlbXBsYXRlJywgY29udGV4dCk7XG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZShgZWxlbWVudFRlbXBsYXRlcy4ke2FjdGlvbn1gLCBwYXlsb2FkKTtcbiAgICByZXR1cm4gY29udGV4dC5lbGVtZW50O1xuICB9XG59XG5FbGVtZW50VGVtcGxhdGVzLiRpbmplY3QgPSBbJ3RlbXBsYXRlRWxlbWVudEZhY3RvcnknLCAnY29tbWFuZFN0YWNrJywgJ2V2ZW50QnVzJywgJ21vZGVsaW5nJywgJ2luamVjdG9yJ107XG5cbmNvbnN0IFNVUFBPUlRFRF9TQ0hFTUFfVkVSU0lPTiQxID0gZ2V0U2NoZW1hVmVyc2lvbiQxKCk7XG5jb25zdCBNT1JQSEFCTEVfVFlQRVMgPSBbJ2JwbW46QWN0aXZpdHknLCAnYnBtbjpFdmVudCcsICdicG1uOkdhdGV3YXknXTtcblxuLyoqXG4gKiBBIGVsZW1lbnQgdGVtcGxhdGUgdmFsaWRhdG9yLlxuICovXG5sZXQgVmFsaWRhdG9yJDEgPSBjbGFzcyBWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3Rvcihtb2RkbGUpIHtcbiAgICB0aGlzLl90ZW1wbGF0ZXNCeUlkID0ge307XG4gICAgdGhpcy5fdmFsaWRUZW1wbGF0ZXMgPSBbXTtcbiAgICB0aGlzLl9lcnJvcnMgPSBbXTtcbiAgICB0aGlzLl9tb2RkbGUgPSBtb2RkbGU7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PFRlbXBsYXRlRGVzY3JpcHRvcj59IHRlbXBsYXRlc1xuICAgKlxuICAgKiBAcmV0dXJuIHtWYWxpZGF0b3J9XG4gICAqL1xuICBhZGRBbGwodGVtcGxhdGVzKSB7XG4gICAgaWYgKCFpc0FycmF5KHRlbXBsYXRlcykpIHtcbiAgICAgIHRoaXMuX2xvZ0Vycm9yKCd0ZW1wbGF0ZXMgbXVzdCBiZSBbXScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZXMuZm9yRWFjaCh0aGlzLmFkZCwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZ2l2ZW4gZWxlbWVudCB0ZW1wbGF0ZSwgaWYgaXQgaXMgdmFsaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVEZXNjcmlwdG9yfSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtWYWxpZGF0b3J9XG4gICAqL1xuICBhZGQodGVtcGxhdGUpIHtcbiAgICBjb25zdCBlcnIgPSB0aGlzLl92YWxpZGF0ZVRlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICBsZXQgaWQsIHZlcnNpb247XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIGlkID0gdGVtcGxhdGUuaWQ7XG4gICAgICB2ZXJzaW9uID0gdGVtcGxhdGUudmVyc2lvbiB8fCAnXyc7XG4gICAgICBpZiAoIXRoaXMuX3RlbXBsYXRlc0J5SWRbaWRdKSB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlc0J5SWRbaWRdID0ge307XG4gICAgICB9XG4gICAgICB0aGlzLl90ZW1wbGF0ZXNCeUlkW2lkXVt2ZXJzaW9uXSA9IHRlbXBsYXRlO1xuICAgICAgdGhpcy5fdmFsaWRUZW1wbGF0ZXMucHVzaCh0ZW1wbGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGdpdmVuIHRlbXBsYXRlIGFuZCByZXR1cm4gZXJyb3IgKGlmIGFueSkuXG4gICAqXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVEZXNjcmlwdG9yfSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtFcnJvcn0gdmFsaWRhdGlvbiBlcnJvciwgaWYgYW55XG4gICAqL1xuICBfdmFsaWRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSkge1xuICAgIGxldCBlcnI7XG4gICAgY29uc3QgaWQgPSB0ZW1wbGF0ZS5pZCxcbiAgICAgIHZlcnNpb24gPSB0ZW1wbGF0ZS52ZXJzaW9uIHx8ICdfJyxcbiAgICAgIHNjaGVtYVZlcnNpb24gPSB0ZW1wbGF0ZS4kc2NoZW1hICYmIGdldFNjaGVtYVZlcnNpb24odGVtcGxhdGUuJHNjaGVtYSk7XG5cbiAgICAvLyAoMSkgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzY2hlbWFWZXJzaW9uICYmIHNlbXZlckNvbXBhcmUoU1VQUE9SVEVEX1NDSEVNQV9WRVJTSU9OJDEsIHNjaGVtYVZlcnNpb24pIDwgMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGB1bnN1cHBvcnRlZCBlbGVtZW50IHRlbXBsYXRlIHNjaGVtYSB2ZXJzaW9uIDwke3NjaGVtYVZlcnNpb259Pi4gWW91ciBpbnN0YWxsYXRpb24gb25seSBzdXBwb3J0cyB1cCB0byB2ZXJzaW9uIDwke1NVUFBPUlRFRF9TQ0hFTUFfVkVSU0lPTiQxfT4uIFBsZWFzZSB1cGRhdGUgeW91ciBpbnN0YWxsYXRpb25gLCB0ZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIHZlcnNpb25pbmdcbiAgICBpZiAodGhpcy5fdGVtcGxhdGVzQnlJZFtpZF0gJiYgdGhpcy5fdGVtcGxhdGVzQnlJZFtpZF1bdmVyc2lvbl0pIHtcbiAgICAgIGlmICh2ZXJzaW9uID09PSAnXycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGB0ZW1wbGF0ZSBpZCA8JHtpZH0+IGFscmVhZHkgdXNlZGAsIHRlbXBsYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcihgdGVtcGxhdGUgaWQgPCR7aWR9PiBhbmQgdmVyc2lvbiA8JHt2ZXJzaW9ufT4gYWxyZWFkeSB1c2VkYCwgdGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vICgzKSBlbGVtZW50VHlwZSB2YWxpZGF0aW9uXG4gICAgY29uc3QgZWxlbWVudFR5cGVFcnJvciA9IHRoaXMuX3ZhbGlkYXRlRWxlbWVudFR5cGUodGVtcGxhdGUpO1xuICAgIGlmIChlbGVtZW50VHlwZUVycm9yKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFR5cGVFcnJvcjtcbiAgICB9XG5cbiAgICAvLyAoNCkgSlNPTiBzY2hlbWEgY29tcGxpYW5jZVxuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZSh0ZW1wbGF0ZSk7XG4gICAgY29uc3Qge1xuICAgICAgZXJyb3JzLFxuICAgICAgdmFsaWRcbiAgICB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoJ2ludmFsaWQgdGVtcGxhdGUnKTtcbiAgICAgIGZpbHRlcmVkU2NoZW1hRXJyb3JzKGVycm9ycykuZm9yRWFjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ0Vycm9yKGVycm9yLm1lc3NhZ2UsIHRlbXBsYXRlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXJyO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGVsZW1lbnRUeXBlIGZvciBnaXZlbiB0ZW1wbGF0ZSBhbmQgcmV0dXJuIGVycm9yIChpZiBhbnkpLlxuICAgKlxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcbiAgICpcbiAgICogQHJldHVybiB7RXJyb3J9IHZhbGlkYXRpb24gZXJyb3IsIGlmIGFueVxuICAgKi9cbiAgX3ZhbGlkYXRlRWxlbWVudFR5cGUodGVtcGxhdGUpIHtcbiAgICBpZiAodGVtcGxhdGUuZWxlbWVudFR5cGUgJiYgdGVtcGxhdGUuYXBwbGllc1RvKSB7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZSA9IHRlbXBsYXRlLmVsZW1lbnRUeXBlLnZhbHVlLFxuICAgICAgICBhcHBsaWVzVG8gPSB0ZW1wbGF0ZS5hcHBsaWVzVG87XG5cbiAgICAgIC8vICgzLjEpIHRlbXBsYXRlIGNhbiBiZSBhcHBsaWVkIHRvIGVsZW1lbnRUeXBlXG4gICAgICAvLyBwcmV2ZW50cyBjYXNlcyB3aGVyZSB0aGUgZWxlbWVudFR5cGUgaXMgbm90IHBhcnQgb2YgYXBwbGllc1RvXG4gICAgICBpZiAoIWFwcGxpZXNUby5maW5kKHR5cGUgPT4gdGhpcy5faXNUeXBlKGVsZW1lbnRUeXBlLCB0eXBlKSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGB0ZW1wbGF0ZSBkb2VzIG5vdCBhcHBseSB0byByZXF1ZXN0ZWQgZWxlbWVudCB0eXBlIDwke2VsZW1lbnRUeXBlfT5gLCB0ZW1wbGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vICgzLjIpIHRlbXBsYXRlIG9ubHkgYXBwbGllcyB0byBzYW1lIHR5cGUgb2YgZWxlbWVudFxuICAgICAgLy8gcHJldmVudCBlbGVtZW50VGVtcGxhdGVzIHRvIG1vcnBoIGludG8gaW5jb21wYXRpYmxlIHR5cGVzLCBlLmcuIFRhc2sgLT4gU2VxdWVuY2VGbG93XG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZVR5cGUgb2YgYXBwbGllc1RvKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FuTW9ycGgoc291cmNlVHlwZSwgZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGBjYW4gbm90IG1vcnBoIDwke3NvdXJjZVR5cGV9PiBpbnRvIDwke2VsZW1lbnRUeXBlfT5gLCB0ZW1wbGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZ2l2ZW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgZ2l2ZW4gYmFzZSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZVR5cGVcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuICBfaXNUeXBlKHR5cGUsIGJhc2VUeXBlKSB7XG4gICAgY29uc3QgbW9kZGxlVHlwZSA9IHRoaXMuX21vZGRsZS5nZXRUeXBlKHR5cGUpO1xuICAgIHJldHVybiBtb2RkbGVUeXBlICYmIGJhc2VUeXBlIGluIHRoaXMuX21vZGRsZS5nZXRFbGVtZW50RGVzY3JpcHRvcihtb2RkbGVUeXBlKS5hbGxUeXBlc0J5TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiB0eXBlIGNhbiBiZSBtb3JwaGVkIGludG8gYW5vdGhlciB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc291cmNlVHlwZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0VHlwZVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG4gIF9jYW5Nb3JwaChzb3VyY2VUeXBlLCB0YXJnZXRUeXBlKSB7XG4gICAgaWYgKHNvdXJjZVR5cGUgPT09IHRhcmdldFR5cGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBiYXNlVHlwZSA9IE1PUlBIQUJMRV9UWVBFUy5maW5kKHR5cGUgPT4gdGhpcy5faXNUeXBlKHNvdXJjZVR5cGUsIHR5cGUpKTtcbiAgICBpZiAoIWJhc2VUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pc1R5cGUodGFyZ2V0VHlwZSwgYmFzZVR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZyBhbiBlcnJvciBmb3IgdGhlIGdpdmVuIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7KFN0cmluZ3xFcnJvcil9IGVyclxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcbiAgICpcbiAgICogQHJldHVybiB7RXJyb3J9IGxvZ2dlZCB2YWxpZGF0aW9uIGVycm9yc1xuICAgKi9cbiAgX2xvZ0Vycm9yKGVyciwgdGVtcGxhdGUpIHtcbiAgICBpZiAoaXNTdHJpbmcoZXJyKSkge1xuICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH0gPSB0ZW1wbGF0ZTtcbiAgICAgICAgZXJyID0gYHRlbXBsYXRlKGlkOiA8JHtpZH0+LCBuYW1lOiA8JHtuYW1lfT4pOiAke2Vycn1gO1xuICAgICAgfVxuICAgICAgZXJyID0gbmV3IEVycm9yKGVycik7XG4gICAgfVxuICAgIHRoaXMuX2Vycm9ycy5wdXNoKGVycik7XG4gICAgcmV0dXJuIGVycjtcbiAgfVxuICBnZXRFcnJvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9ycztcbiAgfVxuICBnZXRWYWxpZFRlbXBsYXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRUZW1wbGF0ZXM7XG4gIH1cbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG4vKipcbiAqIEV4dHJhY3Qgc2NoZW1hIHZlcnNpb24gZnJvbSBzY2hlbWEgVVJJXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNjaGVtYVVyaSAtIGZvciBleGFtcGxlIGh0dHBzOi8vdW5wa2cuY29tL0BjYW11bmRhL2VsZW1lbnQtdGVtcGxhdGVzLWpzb24tc2NoZW1hQDk5Ljk5Ljk5L3Jlc291cmNlcy9zY2hlbWEuanNvblxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gZm9yIGV4YW1wbGUgJzk5Ljk5Ljk5J1xuICovXG5mdW5jdGlvbiBnZXRTY2hlbWFWZXJzaW9uKHNjaGVtYVVyaSkge1xuICBjb25zdCByZSA9IC9cXGQrXFwuXFxkK1xcLlxcZCsvZztcbiAgY29uc3QgbWF0Y2ggPSBzY2hlbWFVcmkubWF0Y2gocmUpO1xuICByZXR1cm4gbWF0Y2ggPT09IG51bGwgPyB1bmRlZmluZWQgOiBtYXRjaFswXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IG9ubHkgcmVsZXZhbnQgZXJyb3JzIG9mIHRoZSB2YWxpZGF0aW9uIHJlc3VsdC5cbiAqXG4gKiBUaGUgSlNPTiBTY2hlbWEgd2UgdXNlIHVuZGVyIHRoZSBob29kIHByb2R1Y2VzIG1vcmUgZXJyb3JzIHRoYW4gd2UgbmVlZCBmb3IgYVxuICogZGV0ZWN0ZWQgc2NoZW1hIHZpb2xhdGlvbiAoZm9yIGV4YW1wbGUsIHVubWF0Y2hlZCBzdWItc2NoZW1hcywgaWYtdGhlbi1ydWxlcyxcbiAqIGBvbmVPZmAtZGVmaW5pdGlvbnMgLi4uKS5cbiAqXG4gKiBXZSBjYWxsIHRoZXNlIGVycm9ycyBcInJlbGV2YW50XCIgdGhhdCBoYXZlIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgZGVmaW5lZCBieSB1cyBPUlxuICogYXJlIGJhc2ljIGRhdGEgdHlwZSBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc2NoZW1hRXJyb3JzXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGZpbHRlcmVkU2NoZW1hRXJyb3JzKHNjaGVtYUVycm9ycykge1xuICByZXR1cm4gZmlsdGVyKHNjaGVtYUVycm9ycywgZXJyID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBpbnN0YW5jZVBhdGgsXG4gICAgICBrZXl3b3JkXG4gICAgfSA9IGVycjtcblxuICAgIC8vICgxKSByZWd1bGFyIGVycm9ycyBhcmUgY3VzdG9taXplZCBmcm9tIHRoZSBzY2hlbWFcbiAgICBpZiAoa2V5d29yZCA9PT0gJ2Vycm9yTWVzc2FnZScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vICgyKSBkYXRhIHR5cGUgZXJyb3JzXG4gICAgLy8gaWdub3JlIHR5cGUgZXJyb3JzIG5lc3RlZCBpbiBzY29wZXNcbiAgICBpZiAoa2V5d29yZCA9PT0gJ3R5cGUnICYmIGluc3RhbmNlUGF0aCAmJiAhaW5zdGFuY2VQYXRoLnN0YXJ0c1dpdGgoJy9zY29wZXMvJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG5jb25zdCBTVVBQT1JURURfU0NIRU1BX1ZFUlNJT04gPSBnZXRaZWViZVNjaGVtYVZlcnNpb24oKTtcbmNvbnN0IFNVUFBPUlRFRF9TQ0hFTUFfUEFDS0FHRSA9IGdldFplZWJlU2NoZW1hUGFja2FnZSgpO1xuXG4vKipcbiAqIEEgQ2FtdW5kYSBDbG91ZCBlbGVtZW50IHRlbXBsYXRlIHZhbGlkYXRvci5cbiAqL1xuY2xhc3MgVmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdG9yJDEge1xuICBjb25zdHJ1Y3Rvcihtb2RkbGUpIHtcbiAgICBzdXBlcihtb2RkbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGdpdmVuIHRlbXBsYXRlIGFuZCByZXR1cm4gZXJyb3IgKGlmIGFueSkuXG4gICAqXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVEZXNjcmlwdG9yfSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtFcnJvcn0gdmFsaWRhdGlvbiBlcnJvciwgaWYgYW55XG4gICAqL1xuICBfdmFsaWRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSkge1xuICAgIGxldCBlcnI7XG4gICAgY29uc3QgaWQgPSB0ZW1wbGF0ZS5pZCxcbiAgICAgIHZlcnNpb24gPSB0ZW1wbGF0ZS52ZXJzaW9uIHx8ICdfJyxcbiAgICAgIHNjaGVtYSA9IHRlbXBsYXRlLiRzY2hlbWEsXG4gICAgICBzY2hlbWFWZXJzaW9uID0gc2NoZW1hICYmIGdldFNjaGVtYVZlcnNpb24oc2NoZW1hKTtcblxuICAgIC8vICgxKSAkc2NoZW1hIGF0dHJpYnV0ZSBkZWZpbmVkXG4gICAgaWYgKCFzY2hlbWEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignbWlzc2luZyAkc2NoZW1hIGF0dHJpYnV0ZS4nLCB0ZW1wbGF0ZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1NjaGVtYVZhbGlkKHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcihgdW5zdXBwb3J0ZWQgJHNjaGVtYSBhdHRyaWJ1dGUgPCR7c2NoZW1hfT4uYCwgdGVtcGxhdGUpO1xuICAgIH1cblxuICAgIC8vICgyKSBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHNjaGVtYVZlcnNpb24gJiYgc2VtdmVyQ29tcGFyZShTVVBQT1JURURfU0NIRU1BX1ZFUlNJT04sIHNjaGVtYVZlcnNpb24pIDwgMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGB1bnN1cHBvcnRlZCBlbGVtZW50IHRlbXBsYXRlIHNjaGVtYSB2ZXJzaW9uIDwke3NjaGVtYVZlcnNpb259Pi4gWW91ciBpbnN0YWxsYXRpb24gb25seSBzdXBwb3J0cyB1cCB0byB2ZXJzaW9uIDwke1NVUFBPUlRFRF9TQ0hFTUFfVkVSU0lPTn0+LiBQbGVhc2UgdXBkYXRlIHlvdXIgaW5zdGFsbGF0aW9uYCwgdGVtcGxhdGUpO1xuICAgIH1cblxuICAgIC8vICgzKSB2ZXJzaW9uaW5nXG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlc0J5SWRbaWRdICYmIHRoaXMuX3RlbXBsYXRlc0J5SWRbaWRdW3ZlcnNpb25dKSB7XG4gICAgICBpZiAodmVyc2lvbiA9PT0gJ18nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcihgdGVtcGxhdGUgaWQgPCR7aWR9PiBhbHJlYWR5IHVzZWRgLCB0ZW1wbGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9nRXJyb3IoYHRlbXBsYXRlIGlkIDwke2lkfT4gYW5kIHZlcnNpb24gPCR7dmVyc2lvbn0+IGFscmVhZHkgdXNlZGAsIHRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAoNCkgZWxlbWVudFR5cGUgdmFsaWRhdGlvblxuICAgIGNvbnN0IGVsZW1lbnRUeXBlRXJyb3IgPSB0aGlzLl92YWxpZGF0ZUVsZW1lbnRUeXBlKHRlbXBsYXRlKTtcbiAgICBpZiAoZWxlbWVudFR5cGVFcnJvcikge1xuICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlRXJyb3I7XG4gICAgfVxuXG4gICAgLy8gKDUpIEpTT04gc2NoZW1hIGNvbXBsaWFuY2VcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVaZWViZSh0ZW1wbGF0ZSk7XG4gICAgY29uc3Qge1xuICAgICAgZXJyb3JzLFxuICAgICAgdmFsaWRcbiAgICB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoJ2ludmFsaWQgdGVtcGxhdGUnKTtcbiAgICAgIGZpbHRlcmVkU2NoZW1hRXJyb3JzKGVycm9ycykuZm9yRWFjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ0Vycm9yKGVycm9yLm1lc3NhZ2UsIHRlbXBsYXRlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXJyO1xuICB9XG4gIGlzU2NoZW1hVmFsaWQoc2NoZW1hKSB7XG4gICAgcmV0dXJuIHNjaGVtYSAmJiBzY2hlbWEuaW5jbHVkZXMoU1VQUE9SVEVEX1NDSEVNQV9QQUNLQUdFKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBndXkgcmVzcG9uc2libGUgZm9yIHRlbXBsYXRlIGxvYWRpbmcuXG4gKlxuICogUHJvdmlkZSB0aGUgYWN0dWFsIHRlbXBsYXRlcyB2aWEgdGhlIGBjb25maWcuZWxlbWVudFRlbXBsYXRlc2AuXG4gKlxuICogVGhhdCBjb25maWd1cmF0aW9uIGNhbiBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgdGVtcGxhdGVcbiAqIGRlc2NyaXB0b3JzIG9yIGEgbm9kZSBzdHlsZSBjYWxsYmFjayB0byByZXRyaWV2ZVxuICogdGhlIHRlbXBsYXRlcyBhc3luY2hyb25vdXNseS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRlbXBsYXRlRGVzY3JpcHRvcj58RnVuY3Rpb259IGxvYWRUZW1wbGF0ZXNcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RkbGVcbiAqL1xubGV0IEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIkMSA9IGNsYXNzIEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihsb2FkVGVtcGxhdGVzLCBldmVudEJ1cywgZWxlbWVudFRlbXBsYXRlcywgbW9kZGxlKSB7XG4gICAgdGhpcy5fbG9hZFRlbXBsYXRlcyA9IGxvYWRUZW1wbGF0ZXM7XG4gICAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgICB0aGlzLl9tb2RkbGUgPSBtb2RkbGU7XG4gICAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsICgpID0+IHtcbiAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfSk7XG4gIH1cbiAgcmVsb2FkKCkge1xuICAgIGNvbnN0IGxvYWRUZW1wbGF0ZXMgPSB0aGlzLl9sb2FkVGVtcGxhdGVzO1xuXG4gICAgLy8gbm8gdGVtcGxhdGVzIHNwZWNpZmllZFxuICAgIGlmIChpc1VuZGVmaW5lZCQxKGxvYWRUZW1wbGF0ZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGVtcGxhdGUgbG9hZGVyIGZ1bmN0aW9uIHNwZWNpZmllZFxuICAgIGlmIChpc0Z1bmN0aW9uKGxvYWRUZW1wbGF0ZXMpKSB7XG4gICAgICByZXR1cm4gbG9hZFRlbXBsYXRlcygoZXJyLCB0ZW1wbGF0ZXMpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlRXJyb3JzKFtlcnJdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFRlbXBsYXRlcyh0ZW1wbGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGVtcGxhdGVzIGFycmF5IHNwZWNpZmllZFxuICAgIGlmIChsb2FkVGVtcGxhdGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0VGVtcGxhdGVzKGxvYWRUZW1wbGF0ZXMpO1xuICAgIH1cbiAgfVxuICBzZXRUZW1wbGF0ZXModGVtcGxhdGVzKSB7XG4gICAgY29uc3QgZWxlbWVudFRlbXBsYXRlcyA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMsXG4gICAgICBtb2RkbGUgPSB0aGlzLl9tb2RkbGU7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvciQxKG1vZGRsZSkuYWRkQWxsKHRlbXBsYXRlcyk7XG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdG9yLmdldEVycm9ycygpLFxuICAgICAgdmFsaWRUZW1wbGF0ZXMgPSB2YWxpZGF0b3IuZ2V0VmFsaWRUZW1wbGF0ZXMoKTtcbiAgICBlbGVtZW50VGVtcGxhdGVzLnNldCh2YWxpZFRlbXBsYXRlcyk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVFcnJvcnMoZXJyb3JzKTtcbiAgICB9XG4gICAgdGhpcy50ZW1wbGF0ZXNDaGFuZ2VkKCk7XG4gIH1cbiAgdGVtcGxhdGVzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50VGVtcGxhdGVzLmNoYW5nZWQnKTtcbiAgfVxuICB0ZW1wbGF0ZUVycm9ycyhlcnJvcnMpIHtcbiAgICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50VGVtcGxhdGVzLmVycm9ycycsIHtcbiAgICAgIGVycm9yczogZXJyb3JzXG4gICAgfSk7XG4gIH1cbn07XG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyJDEuJGluamVjdCA9IFsnY29uZmlnLmVsZW1lbnRUZW1wbGF0ZXMnLCAnZXZlbnRCdXMnLCAnZWxlbWVudFRlbXBsYXRlcycsICdtb2RkbGUnXTtcblxuY2xhc3MgRWxlbWVudFRlbXBsYXRlc0xvYWRlciBleHRlbmRzIEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIkMSB7XG4gIGNvbnN0cnVjdG9yKGxvYWRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzLCBtb2RkbGUpIHtcbiAgICBzdXBlcihsb2FkVGVtcGxhdGVzLCBldmVudEJ1cywgZWxlbWVudFRlbXBsYXRlcywgbW9kZGxlKTtcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgfVxuICBzZXRUZW1wbGF0ZXModGVtcGxhdGVzKSB7XG4gICAgY29uc3QgZWxlbWVudFRlbXBsYXRlcyA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMsXG4gICAgICBtb2RkbGUgPSB0aGlzLl9tb2RkbGU7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcihtb2RkbGUpLmFkZEFsbCh0ZW1wbGF0ZXMpO1xuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRvci5nZXRFcnJvcnMoKSxcbiAgICAgIHZhbGlkVGVtcGxhdGVzID0gdmFsaWRhdG9yLmdldFZhbGlkVGVtcGxhdGVzKCk7XG4gICAgZWxlbWVudFRlbXBsYXRlcy5zZXQodmFsaWRUZW1wbGF0ZXMpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlRXJyb3JzKGVycm9ycyk7XG4gICAgfVxuICAgIHRoaXMudGVtcGxhdGVzQ2hhbmdlZCgpO1xuICB9XG59XG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyLiRpbmplY3QgPSBbJ2NvbmZpZy5lbGVtZW50VGVtcGxhdGVzJywgJ2V2ZW50QnVzJywgJ2VsZW1lbnRUZW1wbGF0ZXMnLCAnbW9kZGxlJ107XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGVsZW1lbnQgYW5kIHNldCBpdHMgcGFyZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBlbGVtZW50VHlwZSBvZiB0aGUgbmV3IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIG9mIHRoZSBuZXcgZWxlbWVudCBpbiBrZXktdmFsdWUgcGFpcnNcbiAqIEBwYXJhbSB7bW9kZGxlLm9iamVjdH0gcGFyZW50IG9mIHRoZSBuZXcgZWxlbWVudFxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gZmFjdG9yeSB3aGljaCBjcmVhdGVzIHRoZSBuZXcgZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudCB3aGljaCBpcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGUsIHByb3BlcnRpZXMsIHBhcmVudCwgZmFjdG9yeSkge1xuICBjb25zdCBlbGVtZW50ID0gZmFjdG9yeS5jcmVhdGUoZWxlbWVudFR5cGUsIHByb3BlcnRpZXMpO1xuICBpZiAocGFyZW50KSB7XG4gICAgZWxlbWVudC4kcGFyZW50ID0gcGFyZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIGdlbmVyYXRlIGEgc2VtYW50aWMgaWQgd2l0aCBnaXZlbiBwcmVmaXhcbiAqL1xuZnVuY3Rpb24gbmV4dElkKHByZWZpeCkge1xuICBjb25zdCBpZHMgPSBuZXcgSWRzKFszMiwgMzIsIDFdKTtcbiAgcmV0dXJuIGlkcy5uZXh0UHJlZml4ZWQocHJlZml4KTtcbn1cbmZ1bmN0aW9uIGdldFJvb3QoYnVzaW5lc3NPYmplY3QpIHtcbiAgbGV0IHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICB3aGlsZSAocGFyZW50LiRwYXJlbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuZnVuY3Rpb24gZmlsdGVyRWxlbWVudHNCeVR5cGUob2JqZWN0TGlzdCwgdHlwZSkge1xuICBjb25zdCBsaXN0ID0gb2JqZWN0TGlzdCB8fCBbXTtcbiAgcmV0dXJuIGxpc3QuZmlsdGVyKGVsZW1lbnQgPT4gaXMoZWxlbWVudCwgdHlwZSkpO1xufVxuZnVuY3Rpb24gZmluZFJvb3RFbGVtZW50c0J5VHlwZShidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFR5cGUpIHtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoYnVzaW5lc3NPYmplY3QpO1xuICByZXR1cm4gZmlsdGVyRWxlbWVudHNCeVR5cGUocm9vdC5nZXQoJ3Jvb3RFbGVtZW50cycpLCByZWZlcmVuY2VkVHlwZSk7XG59XG5mdW5jdGlvbiBmaW5kUm9vdEVsZW1lbnRCeUlkKGJ1c2luZXNzT2JqZWN0LCB0eXBlLCBpZCkge1xuICBjb25zdCBlbGVtZW50cyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHR5cGUpO1xuICByZXR1cm4gZWxlbWVudHMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuaWQgPT09IGlkKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5wdXQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW5cbiAqIGJpbmRpbmcgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQYXJhbWV0ZXIkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3Qge1xuICAgIG5hbWVcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOklucHV0Jywge1xuICAgIHNvdXJjZTogdmFsdWUsXG4gICAgdGFyZ2V0OiBuYW1lXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBvdXRwdXQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW5cbiAqIGJpbmRpbmcgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT3V0cHV0UGFyYW1ldGVyJDEoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XG4gIGNvbnN0IHtcbiAgICBzb3VyY2VcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOk91dHB1dCcsIHtcbiAgICBzb3VyY2UsXG4gICAgdGFyZ2V0OiB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB0YXNrIGhlYWRlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRhc2tIZWFkZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XG4gIGNvbnN0IHtcbiAgICBrZXlcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOkhlYWRlcicsIHtcbiAgICBrZXksXG4gICAgdmFsdWVcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGFzayBkZWZpbml0aW9uIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHJzXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRhc2tEZWZpbml0aW9uKGF0dHJzID0ge30sIGJwbW5GYWN0b3J5KSB7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOlRhc2tEZWZpbml0aW9uJywgYXR0cnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB6ZWViZTpQcm9wZXJ0eSBmcm9tIHRoZSBnaXZlbiBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlWmVlYmVQcm9wZXJ0eShiaW5kaW5nLCB2YWx1ZSA9ICcnLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCB7XG4gICAgbmFtZVxuICB9ID0gYmluZGluZztcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnemVlYmU6UHJvcGVydHknLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjYWxsZWQgZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhdHRyc1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWxsZWRFbGVtZW50KGF0dHJzID0ge30sIGJwbW5GYWN0b3J5KSB7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOkNhbGxlZEVsZW1lbnQnLCBhdHRycyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHdoZXRoZXIgYW4gZWxlbWVudCBzaG91bGQgYmUgdXBkYXRlZCBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqXG4gKiBUaGF0IG1hdGNoZXMgb25jZVxuICogYSkgdGhlIHByb3BlcnR5IHZhbHVlIGlzIG5vdCBlbXB0eSwgb3JcbiAqIGIpIHRoZSBwcm9wZXJ0eSBpcyBub3Qgb3B0aW9uYWxcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0eVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZSh2YWx1ZSwgcHJvcGVydHkpIHtcbiAgY29uc3Qge1xuICAgIG9wdGlvbmFsXG4gIH0gPSBwcm9wZXJ0eTtcbiAgcmV0dXJuIHZhbHVlIHx8ICFvcHRpb25hbDtcbn1cblxuLyoqXG4gKiBHZXRzIG9yLCBpbiBjYXNlIG5vdCBleGlzdGVudCwgY3JlYXRlcyBleHRlbnNpb24gZWxlbWVudCBmb3IgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqIEByZXR1cm5zIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBlbnN1cmVFeHRlbnNpb24oZWxlbWVudCwgdHlwZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge30sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgYnVzaW5lc3NPYmplY3Quc2V0KCdleHRlbnNpb25FbGVtZW50cycsIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgfVxuICBsZXQgZXh0ZW5zaW9uID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCB0eXBlKTtcbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICBleHRlbnNpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUodHlwZSk7XG4gICAgZXh0ZW5zaW9uLiRwYXJlbnQgPSBleHRlbnNpb25FbGVtZW50cztcbiAgICBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLnB1c2goZXh0ZW5zaW9uKTtcbiAgfVxuICByZXR1cm4gZXh0ZW5zaW9uO1xufVxuXG5jb25zdCBQUk9QRVJUWV9UWVBFJDEgPSAncHJvcGVydHknO1xuY29uc3QgWkVCQkVfUFJPUEVSVFlfVFlQRSA9ICd6ZWViZTpwcm9wZXJ0eSc7XG5jb25zdCBaRUJCRV9JTlBVVF9UWVBFID0gJ3plZWJlOmlucHV0JztcbmNvbnN0IFpFRUJFX09VVFBVVF9UWVBFID0gJ3plZWJlOm91dHB1dCc7XG5jb25zdCBaRUVCRV9QUk9QRVJUWV9UWVBFID0gJ3plZWJlOnByb3BlcnR5JztcbmNvbnN0IFpFRUJFX1RBU0tfREVGSU5JVElPTl9UWVBFX1RZUEUgPSAnemVlYmU6dGFza0RlZmluaXRpb246dHlwZSc7XG5jb25zdCBaRUVCRV9UQVNLX0RFRklOSVRJT04gPSAnemVlYmU6dGFza0RlZmluaXRpb24nO1xuY29uc3QgWkVFQkVfVEFTS19IRUFERVJfVFlQRSA9ICd6ZWViZTp0YXNrSGVhZGVyJztcbmNvbnN0IE1FU1NBR0VfUFJPUEVSVFlfVFlQRSA9ICdicG1uOk1lc3NhZ2UjcHJvcGVydHknO1xuY29uc3QgTUVTU0FHRV9aRUVCRV9TVUJTQ1JJUFRJT05fUFJPUEVSVFlfVFlQRSA9ICdicG1uOk1lc3NhZ2UjemVlYmU6c3Vic2NyaXB0aW9uI3Byb3BlcnR5JztcbmNvbnN0IFpFRUJFX0NBTExFRF9FTEVNRU5UID0gJ3plZWJlOmNhbGxlZEVsZW1lbnQnO1xuY29uc3QgRVhURU5TSU9OX0JJTkRJTkdfVFlQRVMkMSA9IFtNRVNTQUdFX1pFRUJFX1NVQlNDUklQVElPTl9QUk9QRVJUWV9UWVBFLCBaRUJCRV9JTlBVVF9UWVBFLCBaRUVCRV9PVVRQVVRfVFlQRSwgWkVFQkVfUFJPUEVSVFlfVFlQRSwgWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRSwgWkVFQkVfVEFTS19ERUZJTklUSU9OLCBaRUVCRV9UQVNLX0hFQURFUl9UWVBFLCBaRUVCRV9DQUxMRURfRUxFTUVOVF07XG5jb25zdCBUQVNLX0RFRklOSVRJT05fVFlQRVMgPSBbWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRSwgWkVFQkVfVEFTS19ERUZJTklUSU9OXTtcbmNvbnN0IElPX0JJTkRJTkdfVFlQRVMkMSA9IFtaRUJCRV9JTlBVVF9UWVBFLCBaRUVCRV9PVVRQVVRfVFlQRV07XG5jb25zdCBNRVNTQUdFX0JJTkRJTkdfVFlQRVMgPSBbTUVTU0FHRV9QUk9QRVJUWV9UWVBFLCBNRVNTQUdFX1pFRUJFX1NVQlNDUklQVElPTl9QUk9QRVJUWV9UWVBFXTtcbmNvbnN0IFBST1BFUlRZX0JJTkRJTkdfVFlQRVMgPSBbUFJPUEVSVFlfVFlQRSQxLCBNRVNTQUdFX1BST1BFUlRZX1RZUEVdO1xuXG5mdW5jdGlvbiBnZXRUYXNrRGVmaW5pdGlvblByb3BlcnR5TmFtZShiaW5kaW5nKSB7XG4gIHJldHVybiBiaW5kaW5nLnR5cGUgPT09IFpFRUJFX1RBU0tfREVGSU5JVElPTl9UWVBFX1RZUEUgPyAndHlwZScgOiBiaW5kaW5nLnByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiByZW1vdmVSb290RWxlbWVudChyb290RWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJyksXG4gICAgY2FudmFzID0gaW5qZWN0b3IuZ2V0KCdjYW52YXMnKSxcbiAgICBicG1uanMgPSBpbmplY3Rvci5nZXQoJ2JwbW5qcycpO1xuICBjb25zdCBlbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgZGVmaW5pdGlvbnMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICByb290RWxlbWVudHMgPSBkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpO1xuICBjb25zdCBuZXdSb290RWxlbWVudHMgPSByb290RWxlbWVudHMuZmlsdGVyKGUgPT4gZSAhPT0gcm9vdEVsZW1lbnQpO1xuXG4gIC8vIHNob3J0LWNpcmN1aXQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSB1cGRhdGVzXG4gIGlmIChuZXdSb290RWxlbWVudHMubGVuZ3RoID09PSByb290RWxlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgZGVmaW5pdGlvbnMsIHtcbiAgICByb290RWxlbWVudHM6IG5ld1Jvb3RFbGVtZW50c1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgbWVzc2FnZSBmcm9tIGVsZW1lbnQgYW5kIHRoZSBkaWFncmFtLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCdicG1uLWpzL2xpYi9tb2RlbC9UeXBlcycpLkVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCdkaWRpJykuSW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU1lc3NhZ2UoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IGJvID0gZ2V0UmVmZXJyaW5nRWxlbWVudChlbGVtZW50KTtcblxuICAvLyBFdmVudCBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50IGRlZmluaXRpb25cbiAgaWYgKCFibykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtZXNzYWdlID0gZmluZE1lc3NhZ2UoYm8pO1xuICBpZiAoIW1lc3NhZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBibywge1xuICAgIG1lc3NhZ2VSZWY6IHVuZGVmaW5lZFxuICB9KTtcbiAgcmVtb3ZlUm9vdEVsZW1lbnQobWVzc2FnZSwgaW5qZWN0b3IpO1xufVxuZnVuY3Rpb24gZ2V0UmVmZXJyaW5nRWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmIChpcyhibywgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKVswXTtcbiAgfVxuICByZXR1cm4gYm87XG59XG5cbi8qKlxuICogQXBwbGllcyBhbiBlbGVtZW50IHRlbXBsYXRlIHRvIGFuIGVsZW1lbnQuIFNldHMgYHplZWJlOm1vZGVsZXJUZW1wbGF0ZWAgYW5kXG4gKiBgemVlYmU6bW9kZWxlclRlbXBsYXRlVmVyc2lvbmAuXG4gKi9cbmxldCBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyJDEgPSBjbGFzcyBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoYnBtbkZhY3RvcnksIGJwbW5SZXBsYWNlLCBjb21tYW5kU3RhY2ssIG1vZGVsaW5nLCBpbmplY3Rvcikge1xuICAgIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gICAgdGhpcy5fYnBtblJlcGxhY2UgPSBicG1uUmVwbGFjZTtcbiAgICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICAgIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbiAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBhbiBlbGVtZW50J3MgdGVtcGxhdGUgYW5kIHVwZGF0ZSBpdHMgcHJvcGVydGllcyBhcyBzcGVjaWZpZWQgaW4gYG5ld1RlbXBsYXRlYC4gU3BlY2lmeVxuICAgKiBgb2xkVGVtcGxhdGVgIHRvIHVwZGF0ZSBmcm9tIG9uZSB0ZW1wbGF0ZSB0byBhbm90aGVyLiBJZiBgbmV3VGVtcGxhdGVgIGlzbid0IHNwZWNpZmllZCB0aGVcbiAgICogYHplZWJlOm1vZGVsZXJUZW1wbGF0ZWAgYW5kIGB6ZWViZTptb2RlbGVyVGVtcGxhdGVWZXJzaW9uYCBwcm9wZXJ0aWVzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tXG4gICAqIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5lbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dC5vbGRUZW1wbGF0ZV1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0Lm5ld1RlbXBsYXRlXVxuICAgKi9cbiAgcHJlRXhlY3V0ZShjb250ZXh0KSB7XG4gICAgbGV0IG5ld1RlbXBsYXRlID0gY29udGV4dC5uZXdUZW1wbGF0ZSxcbiAgICAgIG9sZFRlbXBsYXRlID0gY29udGV4dC5vbGRUZW1wbGF0ZTtcbiAgICBsZXQgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDtcblxuICAgIC8vIHVwZGF0ZSB6ZWViZTptb2RlbGVyVGVtcGxhdGUgYXR0cmlidXRlXG4gICAgdGhpcy5fdXBkYXRlWmVlYmVNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuXG4gICAgLy8gdXBkYXRlIHplZWJlOm1vZGVsZXJUZW1wbGF0ZUljb25cbiAgICB0aGlzLl91cGRhdGVaZWViZU1vZGVsZXJUZW1wbGF0ZUljb24oZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuICAgIGlmIChuZXdUZW1wbGF0ZSkge1xuICAgICAgLy8gdXBkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCA9IHRoaXMuX3VwZGF0ZUVsZW1lbnRUeXBlKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLl91cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSB6ZWViZTpUYXNrRGVmaW5pdGlvblxuICAgICAgdGhpcy5fdXBkYXRlWmVlYmVUYXNrRGVmaW5pdGlvbihlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gICAgICAvLyB1cGRhdGUgemVlYmU6SW5wdXQgYW5kIHplZWJlOk91dHB1dCBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLl91cGRhdGVaZWViZUlucHV0T3V0cHV0UGFyYW1ldGVyUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gICAgICAvLyB1cGRhdGUgemVlYmU6SGVhZGVyIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZVplZWJlVGFza0hlYWRlclByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIHplZWJlOlByb3BlcnR5IHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZVplZWJlUHJvcGVydHlQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgICB0aGlzLl91cGRhdGVNZXNzYWdlKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgICB0aGlzLl91cGRhdGVDYWxsZWRFbGVtZW50KGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgfVxuICB9XG4gIF9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0pO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwge1xuICAgICAgICBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHM7XG4gIH1cbiAgX3VwZGF0ZVplZWJlTW9kZWxlclRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgY29uc3QgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcbiAgICBjb25zdCBuZXdJZCA9IG5ld1RlbXBsYXRlICYmIG5ld1RlbXBsYXRlLmlkO1xuICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBuZXdUZW1wbGF0ZSAmJiBuZXdUZW1wbGF0ZS52ZXJzaW9uO1xuICAgIGlmIChnZXRUZW1wbGF0ZUlkJDEoZWxlbWVudCkgIT09IG5ld0lkIHx8IGdldFRlbXBsYXRlVmVyc2lvbiQxKGVsZW1lbnQpICE9PSBuZXdWZXJzaW9uKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZSc6IG5ld0lkLFxuICAgICAgICAnemVlYmU6bW9kZWxlclRlbXBsYXRlVmVyc2lvbic6IG5ld1ZlcnNpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfdXBkYXRlWmVlYmVNb2RlbGVyVGVtcGxhdGVJY29uKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgY29uc3QgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcbiAgICBjb25zdCBuZXdJY29uID0gbmV3VGVtcGxhdGUgJiYgbmV3VGVtcGxhdGUuaWNvbjtcbiAgICBjb25zdCBuZXdJY29uQ29udGVudHMgPSBuZXdJY29uICYmIG5ld0ljb24uY29udGVudHM7XG4gICAgaWYgKGdldFRlbXBsYXRlSWNvbihlbGVtZW50KSAhPT0gbmV3SWNvbkNvbnRlbnRzKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZUljb24nOiBuZXdJY29uQ29udGVudHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gbmV3VGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdUeXBlID0gbmV3QmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG5ld0JpbmRpbmdUeXBlID09PSAncHJvcGVydHknO1xuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIG9sZCBQcm9wZXJ0aWVzIGlmIG5vIG5ldyBQcm9wZXJ0aWVzIHNwZWNpZmllZFxuICAgIGNvbnN0IHByb3BlcnRpZXNUb1JlbW92ZSA9IG9sZFRlbXBsYXRlICYmIG9sZFRlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG9sZFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5JyAmJiAhbmV3UHJvcGVydGllcy5maW5kKG5ld1Byb3BlcnR5ID0+IG5ld1Byb3BlcnR5LmJpbmRpbmcubmFtZSA9PT0gb2xkUHJvcGVydHkuYmluZGluZy5uYW1lKTtcbiAgICB9KSB8fCBbXTtcbiAgICBpZiAocHJvcGVydGllc1RvUmVtb3ZlLmxlbmd0aCkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHByb3BlcnRpZXNUb1JlbW92ZS5yZWR1Y2UoKHByb3BlcnRpZXMsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHkuYmluZGluZy5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICB9LCB7fSk7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczogcGF5bG9hZFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghbmV3UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmV3UHJvcGVydGllcy5mb3JFYWNoKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZFByb3BlcnR5ID0gZmluZE9sZFByb3BlcnR5JDEob2xkVGVtcGxhdGUsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdOYW1lID0gbmV3QmluZGluZy5uYW1lLFxuICAgICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKG5ld1Byb3BlcnR5KSxcbiAgICAgICAgY2hhbmdlZEVsZW1lbnQgPSBidXNpbmVzc09iamVjdDtcbiAgICAgIGxldCBwcm9wZXJ0aWVzID0ge307XG4gICAgICBpZiAoc2hvdWxkS2VlcFZhbHVlKGNoYW5nZWRFbGVtZW50LCBvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByb3BlcnRpZXNbbmV3QmluZGluZ05hbWVdID0gbmV3UHJvcGVydHlWYWx1ZTtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYHplZWJlOlRhc2tEZWZpbml0aW9uYCBwcm9wZXJ0aWVzIG9mIHNwZWNpZmllZCBidXNpbmVzcyBvYmplY3QuIFRoaXNcbiAgICogY2FuIG9ubHkgZXhpc3QgaW4gYGJwbW46RXh0ZW5zaW9uRWxlbWVudHNgLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICovXG4gIF91cGRhdGVaZWViZVRhc2tEZWZpbml0aW9uKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBUQVNLX0RFRklOSVRJT05fVFlQRVMuaW5jbHVkZXMobmV3QmluZGluZ1R5cGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICBsZXQgdGFza0RlZmluaXRpb24gPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpO1xuXG4gICAgLy8gKDEpIHJlbW92ZSBvbGQgdGFzayBkZWZpbml0aW9uIGlmIG5vIG5ldyBwcm9wZXJ0aWVzIHNwZWNpZmllZFxuXG4gICAgaWYgKCFuZXdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQoYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKSwgdGFza0RlZmluaXRpb24pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGdldFRhc2tEZWZpbml0aW9uUHJvcGVydHlOYW1lKG5ld0JpbmRpbmcpO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCB0YXNrIGRlZmluaXRpb25cbiAgICAgIGlmICh0YXNrRGVmaW5pdGlvbikge1xuICAgICAgICBpZiAoIXNob3VsZEtlZXBWYWx1ZSh0YXNrRGVmaW5pdGlvbiwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBbcHJvcGVydHlOYW1lXTogbmV3UHJvcGVydHlWYWx1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAoMykgYWRkIG5ldyB0YXNrIGRlZmluaXRpb25cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIFtwcm9wZXJ0eU5hbWVdOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIHRhc2tEZWZpbml0aW9uID0gY3JlYXRlVGFza0RlZmluaXRpb24ocHJvcGVydGllcywgYnBtbkZhY3RvcnkpO1xuICAgICAgICB0YXNrRGVmaW5pdGlvbi4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCB0YXNrRGVmaW5pdGlvbl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBwcm9wZXJ0aWVzIG5vIGxvbmdlciB0ZW1wbGF0ZWRcbiAgICBjb25zdCBvbGRQcm9wZXJ0aWVzID0gb2xkVGVtcGxhdGUgJiYgb2xkVGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIob2xkUHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZEJpbmRpbmdUeXBlID0gb2xkQmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIFRBU0tfREVGSU5JVElPTl9UWVBFUy5pbmNsdWRlcyhvbGRCaW5kaW5nVHlwZSkgJiYgIW5ld1Byb3BlcnRpZXMuZmluZChuZXdQcm9wZXJ0eSA9PiBuZXdQcm9wZXJ0eS5iaW5kaW5nLnByb3BlcnR5ID09PSBvbGRQcm9wZXJ0eS5iaW5kaW5nLnByb3BlcnR5KTtcbiAgICB9KSB8fCBbXTtcbiAgICBvbGRQcm9wZXJ0aWVzLmZvckVhY2gob2xkUHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgW29sZFByb3BlcnR5LmJpbmRpbmcucHJvcGVydHldOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrRGVmaW5pdGlvbixcbiAgICAgICAgcHJvcGVydGllc1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGB6ZWViZTpJbnB1dGAgYW5kIGB6ZWViZTpPdXRwdXRgIHByb3BlcnRpZXMgb2Ygc3BlY2lmaWVkIGJ1c2luZXNzXG4gICAqIG9iamVjdC4gQm90aCBjYW4gb25seSBleGlzdCBpbiBgemVlYmU6aW9NYXBwaW5nYCB3aGljaCBjYW4gZXhpc3QgaW4gYGJwbW46RXh0ZW5zaW9uRWxlbWVudHNgLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICovXG4gIF91cGRhdGVaZWViZUlucHV0T3V0cHV0UGFyYW1ldGVyUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09ICd6ZWViZTppbnB1dCcgfHwgbmV3QmluZGluZ1R5cGUgPT09ICd6ZWViZTpvdXRwdXQnO1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICBsZXQgaW9NYXBwaW5nID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6SW9NYXBwaW5nJyk7XG5cbiAgICAvLyAoMSkgcmVtb3ZlIG9sZCBtYXBwaW5ncyBpZiBubyBuZXcgc3BlY2lmaWVkXG4gICAgaWYgKCFuZXdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgaWYgKCFpb01hcHBpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQoYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKSwgaW9NYXBwaW5nKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFpb01hcHBpbmcpIHtcbiAgICAgIGlvTWFwcGluZyA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnemVlYmU6SW9NYXBwaW5nJyk7XG4gICAgICBpb01hcHBpbmcuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCBpb01hcHBpbmddXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBvbGRJbnB1dHMgPSBpb01hcHBpbmcuZ2V0KCd6ZWViZTppbnB1dFBhcmFtZXRlcnMnKSA/IGlvTWFwcGluZy5nZXQoJ3plZWJlOmlucHV0UGFyYW1ldGVycycpLnNsaWNlKCkgOiBbXTtcbiAgICBjb25zdCBvbGRPdXRwdXRzID0gaW9NYXBwaW5nLmdldCgnemVlYmU6b3V0cHV0UGFyYW1ldGVycycpID8gaW9NYXBwaW5nLmdldCgnemVlYmU6b3V0cHV0UGFyYW1ldGVycycpLnNsaWNlKCkgOiBbXTtcbiAgICBsZXQgcHJvcGVydHlOYW1lO1xuICAgIG5ld1Byb3BlcnRpZXMuZm9yRWFjaChuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eSQxKG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIGlucHV0T3JPdXRwdXQgPSBmaW5kQnVzaW5lc3NPYmplY3QoYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3UHJvcGVydHlWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShuZXdQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIGxldCBuZXdJbnB1dE9yT3V0cHV0LCBwcm9wZXJ0aWVzO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICAgIGlmIChpbnB1dE9yT3V0cHV0KSB7XG4gICAgICAgIC8vICgyYSkgZXhjbHVkZSBvbGQgaW5wdXRzIGFuZCBvdXRwdXRzIGZyb20gY2xlYW51cCwgdW5sZXNzXG4gICAgICAgIC8vIGEpIG9wdGlvbmFsIGFuZCBoYXMgZW1wdHkgdmFsdWUsIGFuZFxuICAgICAgICAvLyBiKSBub3QgY2hhbmdlZFxuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlKG5ld1Byb3BlcnR5VmFsdWUsIG5ld1Byb3BlcnR5KSB8fCBzaG91bGRLZWVwVmFsdWUoaW5wdXRPck91dHB1dCwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICAgIGlmIChpcyhpbnB1dE9yT3V0cHV0LCAnemVlYmU6SW5wdXQnKSkge1xuICAgICAgICAgICAgcmVtb3ZlJDEob2xkSW5wdXRzLCBpbnB1dE9yT3V0cHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlJDEob2xkT3V0cHV0cywgaW5wdXRPck91dHB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gKDJhKSBkbyB1cGRhdGVzICh1bmxlc3MgY2hhbmdlZClcbiAgICAgICAgaWYgKCFzaG91bGRLZWVwVmFsdWUoaW5wdXRPck91dHB1dCwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICAgIGlmIChpcyhpbnB1dE9yT3V0cHV0LCAnemVlYmU6SW5wdXQnKSkge1xuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICAgc291cmNlOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICB0YXJnZXQ6IG5ld1Byb3BlcnR5VmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogaW5wdXRPck91dHB1dCxcbiAgICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAoMykgYWRkIG5ldyBpbnB1dHMgYW5kIG91dHB1dHMgKHVubGVzcyBvcHRpb25hbClcbiAgICAgIGVsc2UgaWYgKHNob3VsZFVwZGF0ZShuZXdQcm9wZXJ0eVZhbHVlLCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnemVlYmU6aW5wdXQnKSB7XG4gICAgICAgICAgcHJvcGVydHlOYW1lID0gJ2lucHV0UGFyYW1ldGVycyc7XG4gICAgICAgICAgbmV3SW5wdXRPck91dHB1dCA9IGNyZWF0ZUlucHV0UGFyYW1ldGVyJDEobmV3QmluZGluZywgbmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICdvdXRwdXRQYXJhbWV0ZXJzJztcbiAgICAgICAgICBuZXdJbnB1dE9yT3V0cHV0ID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyJDEobmV3QmluZGluZywgbmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0lucHV0T3JPdXRwdXQuJHBhcmVudCA9IGlvTWFwcGluZztcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlvTWFwcGluZyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBbcHJvcGVydHlOYW1lXTogWy4uLmlvTWFwcGluZy5nZXQocHJvcGVydHlOYW1lKSwgbmV3SW5wdXRPck91dHB1dF1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBvbGQgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgaWYgKG9sZElucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlvTWFwcGluZyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGlucHV0UGFyYW1ldGVyczogd2l0aG91dChpb01hcHBpbmcuZ2V0KCdpbnB1dFBhcmFtZXRlcnMnKSwgaW5wdXRQYXJhbWV0ZXIgPT4gb2xkSW5wdXRzLmluY2x1ZGVzKGlucHV0UGFyYW1ldGVyKSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvbGRPdXRwdXRzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogaW9NYXBwaW5nLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogd2l0aG91dChpb01hcHBpbmcuZ2V0KCdvdXRwdXRQYXJhbWV0ZXJzJyksIG91dHB1dFBhcmFtZXRlciA9PiBvbGRPdXRwdXRzLmluY2x1ZGVzKG91dHB1dFBhcmFtZXRlcikpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYHplZWJlOkhlYWRlcmAgcHJvcGVydGllcyBvZiBzcGVjaWZpZWQgYnVzaW5lc3NcbiAgICogb2JqZWN0LiBUaG9zZSBjYW4gb25seSBleGlzdCBpbiBgemVlYmU6dGFza0hlYWRlcnNgIHdoaWNoIGNhbiBleGlzdCBpbiBgYnBtbjpFeHRlbnNpb25FbGVtZW50c2AuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdUZW1wbGF0ZVxuICAgKi9cbiAgX3VwZGF0ZVplZWJlVGFza0hlYWRlclByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gbmV3VGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdUeXBlID0gbmV3QmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG5ld0JpbmRpbmdUeXBlID09PSAnemVlYmU6dGFza0hlYWRlcic7XG4gICAgfSk7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIGxldCB0YXNrSGVhZGVycyA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOlRhc2tIZWFkZXJzJyk7XG5cbiAgICAvLyAoMSkgcmVtb3ZlIG9sZCBoZWFkZXJzIGlmIG5vIG5ldyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRhc2tIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsdWVzOiB3aXRob3V0KGJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIHRhc2tIZWFkZXJzKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF0YXNrSGVhZGVycykge1xuICAgICAgdGFza0hlYWRlcnMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOlRhc2tIZWFkZXJzJyk7XG4gICAgICB0YXNrSGVhZGVycy4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZhbHVlczogWy4uLmJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIHRhc2tIZWFkZXJzXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgb2xkSGVhZGVycyA9IHRhc2tIZWFkZXJzLmdldCgnemVlYmU6dmFsdWVzJykgPyB0YXNrSGVhZGVycy5nZXQoJ3plZWJlOnZhbHVlcycpLnNsaWNlKCkgOiBbXTtcbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBvbGRIZWFkZXIgPSBmaW5kQnVzaW5lc3NPYmplY3QoYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3UHJvcGVydHlWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShuZXdQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCBoZWFkZXJzXG4gICAgICBpZiAob2xkSGVhZGVyKSB7XG4gICAgICAgIGlmICghc2hvdWxkS2VlcFZhbHVlKG9sZEhlYWRlciwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlWYWx1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBvbGRIZWFkZXIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlJDEob2xkSGVhZGVycywgb2xkSGVhZGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gKDMpIGFkZCBuZXcgKG5vbi1lbXB0eSkgaGVhZGVyc1xuICAgICAgZWxzZSBpZiAobmV3UHJvcGVydHlWYWx1ZSkge1xuICAgICAgICBjb25zdCBuZXdIZWFkZXIgPSBjcmVhdGVUYXNrSGVhZGVyKG5ld0JpbmRpbmcsIG5ld1Byb3BlcnR5VmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgbmV3SGVhZGVyLiRwYXJlbnQgPSB0YXNrSGVhZGVycztcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHRhc2tIZWFkZXJzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLnRhc2tIZWFkZXJzLmdldCgndmFsdWVzJyksIG5ld0hlYWRlcl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBvbGQgaGVhZGVyc1xuICAgIGlmIChvbGRIZWFkZXJzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogdGFza0hlYWRlcnMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQodGFza0hlYWRlcnMuZ2V0KCd2YWx1ZXMnKSwgaGVhZGVyID0+IG9sZEhlYWRlcnMuaW5jbHVkZXMoaGVhZGVyKSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB6ZWViZTpQcm9wZXJ0eSBwcm9wZXJ0aWVzIG9mIHplZWJlOlByb3BlcnRpZXMgZXh0ZW5zaW9uIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdUZW1wbGF0ZVxuICAgKi9cbiAgX3VwZGF0ZVplZWJlUHJvcGVydHlQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBuZXdCaW5kaW5nVHlwZSA9PT0gJ3plZWJlOnByb3BlcnR5JztcbiAgICB9KTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IHRoaXMuX2dldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XG4gICAgbGV0IHplZWJlUHJvcGVydGllcyA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOlByb3BlcnRpZXMnKTtcblxuICAgIC8vICgxKSByZW1vdmUgb2xkIHplZWJlOlByb3BlcnRpZXMgaWYgbm8gbmV3IHplZWJlOlByb3BlcnR5IHByb3BlcnRpZXNcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXplZWJlUHJvcGVydGllcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZhbHVlczogd2l0aG91dChidXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCB6ZWViZVByb3BlcnRpZXMpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXplZWJlUHJvcGVydGllcykge1xuICAgICAgemVlYmVQcm9wZXJ0aWVzID0gYnBtbkZhY3RvcnkuY3JlYXRlKCd6ZWViZTpQcm9wZXJ0aWVzJyk7XG4gICAgICB6ZWViZVByb3BlcnRpZXMuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCB6ZWViZVByb3BlcnRpZXNdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBvbGRaZWViZVByb3BlcnRpZXMgPSB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykgPyB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykuc2xpY2UoKSA6IFtdO1xuICAgIG5ld1Byb3BlcnRpZXMuZm9yRWFjaChuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eSQxKG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIG9sZFplZWJlUHJvcGVydHkgPSBmaW5kQnVzaW5lc3NPYmplY3QoYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3UHJvcGVydHlWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShuZXdQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCB6ZWViZTpQcm9wZXJ0eVxuICAgICAgaWYgKG9sZFplZWJlUHJvcGVydHkpIHtcbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZShuZXdQcm9wZXJ0eVZhbHVlLCBuZXdQcm9wZXJ0eSkgfHwgc2hvdWxkS2VlcFZhbHVlKG9sZFplZWJlUHJvcGVydHksIG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgICByZW1vdmUkMShvbGRaZWViZVByb3BlcnRpZXMsIG9sZFplZWJlUHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2hvdWxkS2VlcFZhbHVlKG9sZFplZWJlUHJvcGVydHksIG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG9sZFplZWJlUHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gKDMpIGFkZCBuZXcgemVlYmU6UHJvcGVydHlcbiAgICAgIGVsc2UgaWYgKHNob3VsZFVwZGF0ZShuZXdQcm9wZXJ0eVZhbHVlLCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgY29uc3QgbmV3UHJvcGVydHkgPSBjcmVhdGVaZWViZVByb3BlcnR5KG5ld0JpbmRpbmcsIG5ld1Byb3BlcnR5VmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgbmV3UHJvcGVydHkuJHBhcmVudCA9IHplZWJlUHJvcGVydGllcztcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHplZWJlUHJvcGVydGllcyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbLi4uemVlYmVQcm9wZXJ0aWVzLmdldCgncHJvcGVydGllcycpLCBuZXdQcm9wZXJ0eV1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBvbGQgemVlYmU6UHJvcGVydHlcbiAgICBpZiAob2xkWmVlYmVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogemVlYmVQcm9wZXJ0aWVzLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcHJvcGVydGllczogd2l0aG91dCh6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJyksIHplZWJlUHJvcGVydHkgPT4gb2xkWmVlYmVQcm9wZXJ0aWVzLmluY2x1ZGVzKHplZWJlUHJvcGVydHkpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgX3VwZGF0ZU1lc3NhZ2UoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKSB7XG4gICAgLy8gdXBkYXRlIGJwbW46TWVzc2FnZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5fdXBkYXRlTWVzc2FnZVByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgIC8vIHVwZGF0ZSBicG1uOk1lc3NhZ2UgemVlYmU6c3Vic2NyaXB0aW9uIHByb3BlcnRpZXNcbiAgICB0aGlzLl91cGRhdGVNZXNzYWdlWmVlYmVTdWJzY3JpcHRpb25Qcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgdGhpcy5fdXBkYXRlWmVlYmVNb2RlbGVyVGVtcGxhdGVPblJlZmVyZW5jZWRFbGVtZW50KGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgaWYgKCFoYXNNZXNzYWdlUHJvcGVydGllcyhuZXdUZW1wbGF0ZSkpIHtcbiAgICAgIHJlbW92ZU1lc3NhZ2UoZWxlbWVudCwgdGhpcy5faW5qZWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYnBtbjpNZXNzYWdlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdUZW1wbGF0ZVxuICAgKi9cbiAgX3VwZGF0ZU1lc3NhZ2VQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09IE1FU1NBR0VfUFJPUEVSVFlfVFlQRTtcbiAgICB9KTtcbiAgICBjb25zdCByZW1vdmVkUHJvcGVydGllcyA9IG9sZFRlbXBsYXRlICYmIG9sZFRlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG9sZFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gTUVTU0FHRV9QUk9QRVJUWV9UWVBFICYmICFuZXdQcm9wZXJ0aWVzLmZpbmQobmV3UHJvcGVydHkgPT4gbmV3UHJvcGVydHkuYmluZGluZy5uYW1lID09PSBvbGRQcm9wZXJ0eS5iaW5kaW5nLm5hbWUpO1xuICAgIH0pIHx8IFtdO1xuICAgIGxldCBtZXNzYWdlID0gdGhpcy5fZ2V0TWVzc2FnZShlbGVtZW50KTtcbiAgICBtZXNzYWdlICYmIHJlbW92ZWRQcm9wZXJ0aWVzLmZvckVhY2gocmVtb3ZlZFByb3BlcnR5ID0+IHtcbiAgICAgIHRoaXMuX21vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgbWVzc2FnZSwge1xuICAgICAgICBbcmVtb3ZlZFByb3BlcnR5LmJpbmRpbmcubmFtZV06IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKCFuZXdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtZXNzYWdlID0gdGhpcy5fZ2V0T3JDcmVhdGVNZXNzYWdlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ05hbWUgPSBuZXdCaW5kaW5nLm5hbWUsXG4gICAgICAgIG5ld1Byb3BlcnR5VmFsdWUgPSBnZXREZWZhdWx0VmFsdWUobmV3UHJvcGVydHkpLFxuICAgICAgICBjaGFuZ2VkRWxlbWVudCA9IG1lc3NhZ2U7XG4gICAgICBsZXQgcHJvcGVydGllcyA9IHt9O1xuICAgICAgaWYgKHNob3VsZEtlZXBWYWx1ZShjaGFuZ2VkRWxlbWVudCwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwcm9wZXJ0aWVzW25ld0JpbmRpbmdOYW1lXSA9IG5ld1Byb3BlcnR5VmFsdWU7XG4gICAgICB0aGlzLl9tb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGNoYW5nZWRFbGVtZW50LCBwcm9wZXJ0aWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYnBtbjpNZXNzYWdlI3plZWJlOnN1YnNjcmlwdGlvbiBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICovXG4gIF91cGRhdGVNZXNzYWdlWmVlYmVTdWJzY3JpcHRpb25Qcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09IE1FU1NBR0VfWkVFQkVfU1VCU0NSSVBUSU9OX1BST1BFUlRZX1RZUEU7XG4gICAgfSk7XG4gICAgY29uc3QgcmVtb3ZlZFByb3BlcnRpZXMgPSBvbGRUZW1wbGF0ZSAmJiBvbGRUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihvbGRQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gb2xkQmluZGluZ1R5cGUgPT09IE1FU1NBR0VfWkVFQkVfU1VCU0NSSVBUSU9OX1BST1BFUlRZX1RZUEUgJiYgIW5ld1Byb3BlcnRpZXMuZmluZChuZXdQcm9wZXJ0eSA9PiBuZXdQcm9wZXJ0eS5iaW5kaW5nLm5hbWUgPT09IG9sZFByb3BlcnR5LmJpbmRpbmcubmFtZSk7XG4gICAgfSkgfHwgW107XG4gICAgaWYgKCFuZXdQcm9wZXJ0aWVzLmxlbmd0aCAmJiAhcmVtb3ZlZFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl9nZXRPckNyZWF0ZU1lc3NhZ2UoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuICAgIGNvbnN0IG1lc3NhZ2VFeHRlbnNpb25FbGVtZW50cyA9IHRoaXMuX2dldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgbWVzc2FnZSk7XG4gICAgY29uc3QgemVlYmVTdWJzY3JpcHRpb24gPSB0aGlzLl9nZXRTdWJzY3JpcHRpb24oZWxlbWVudCwgbWVzc2FnZSk7XG4gICAgY29uc3QgcHJvcGVydGllc1RvU2V0ID0gbmV3UHJvcGVydGllcy5yZWR1Y2UoKHByb3BlcnRpZXMsIG5ld1Byb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eSQxKG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nTmFtZSA9IG5ld0JpbmRpbmcubmFtZSxcbiAgICAgICAgbmV3UHJvcGVydHlWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShuZXdQcm9wZXJ0eSksXG4gICAgICAgIGNoYW5nZWRFbGVtZW50ID0gemVlYmVTdWJzY3JpcHRpb247XG4gICAgICBpZiAoc2hvdWxkS2VlcFZhbHVlKGNoYW5nZWRFbGVtZW50LCBvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgfVxuICAgICAgcHJvcGVydGllc1tuZXdCaW5kaW5nTmFtZV0gPSBuZXdQcm9wZXJ0eVZhbHVlO1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSwge30pO1xuXG4gICAgLy8gVXBkYXRlIHplZWJlIFN1YnNjcmlwdGlvblxuICAgIGlmICh6ZWViZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCB6ZWViZVN1YnNjcmlwdGlvbiwgcHJvcGVydGllc1RvU2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3JlYXRlIG5ldyBTdWJzY3JpcHRpb25cbiAgICAgIGNvbnN0IG5ld1N1YnNjcmlwdGlvbiA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOlN1YnNjcmlwdGlvbicsIHByb3BlcnRpZXNUb1NldCwgbWVzc2FnZSwgdGhpcy5fYnBtbkZhY3RvcnkpO1xuICAgICAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBtZXNzYWdlRXh0ZW5zaW9uRWxlbWVudHMsIHtcbiAgICAgICAgdmFsdWVzOiBbLi4ubWVzc2FnZUV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIG5ld1N1YnNjcmlwdGlvbl1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBvbGQgcHJvcGVydGllc1xuICAgIGlmICghb2xkVGVtcGxhdGUgfHwgIXplZWJlU3Vic2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3BlcnRpZXNUb1JlbW92ZSA9IHJlbW92ZWRQcm9wZXJ0aWVzLnJlZHVjZSgocHJvcGVydGllcywgcmVtb3ZlZFByb3BlcnR5KSA9PiB7XG4gICAgICBwcm9wZXJ0aWVzW3JlbW92ZWRQcm9wZXJ0eS5iaW5kaW5nLm5hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSwge30pO1xuICAgIHRoaXMuX21vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgemVlYmVTdWJzY3JpcHRpb24sIHByb3BlcnRpZXNUb1JlbW92ZSk7XG4gIH1cbiAgX3VwZGF0ZVplZWJlTW9kZWxlclRlbXBsYXRlT25SZWZlcmVuY2VkRWxlbWVudChlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmaW5kTWVzc2FnZShidXNpbmVzc09iamVjdCk7XG4gICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChnZXRUZW1wbGF0ZUlkJDEobWVzc2FnZSkgPT09IG5ld1RlbXBsYXRlLmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX21vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgbWVzc2FnZSwge1xuICAgICAgJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZSc6IG5ld1RlbXBsYXRlLmlkXG4gICAgfSk7XG4gIH1cbiAgX2dldFN1YnNjcmlwdGlvbihlbGVtZW50LCBibykge1xuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBibyk7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCAnemVlYmU6U3Vic2NyaXB0aW9uJyk7XG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIGV4dGVuc2lvbjtcbiAgICB9XG4gIH1cbiAgX2dldE9yQ3JlYXRlTWVzc2FnZShlbGVtZW50LCB0ZW1wbGF0ZSkge1xuICAgIHJldHVybiB0aGlzLl9nZXRNZXNzYWdlKGVsZW1lbnQpIHx8IHRoaXMuX2NyZWF0ZU1lc3NhZ2UoZWxlbWVudCwgdGVtcGxhdGUpO1xuICB9XG4gIF9jcmVhdGVNZXNzYWdlKGVsZW1lbnQsIHRlbXBsYXRlKSB7XG4gICAgbGV0IGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgaWYgKGlzKGJvLCAnYnBtbjpFdmVudCcpKSB7XG4gICAgICBibyA9IGJvLmdldCgnZXZlbnREZWZpbml0aW9ucycpWzBdO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOk1lc3NhZ2UnLCB7XG4gICAgICAnemVlYmU6bW9kZWxlclRlbXBsYXRlJzogdGVtcGxhdGUuaWRcbiAgICB9KTtcbiAgICBtZXNzYWdlLiRwYXJlbnQgPSBnZXRSb290KGJvKTtcbiAgICB0aGlzLl9tb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGJvLCB7XG4gICAgICBtZXNzYWdlUmVmOiBtZXNzYWdlXG4gICAgfSk7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cbiAgX2dldE1lc3NhZ2UoZWxlbWVudCkge1xuICAgIGxldCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGlmIChpcyhibywgJ2JwbW46RXZlbnQnKSkge1xuICAgICAgYm8gPSBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIGJvICYmIGJvLmdldCgnbWVzc2FnZVJlZicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBgemVlYmU6Q2FsbGVkRWxlbWVudGAgcHJvcGVydGllcyBvZiBzcGVjaWZpZWQgYnVzaW5lc3Mgb2JqZWN0LiBUaGlzXG4gICAqIGNhbiBvbmx5IGV4aXN0IGluIGBicG1uOkV4dGVuc2lvbkVsZW1lbnRzYC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlQ2FsbGVkRWxlbWVudChlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09IFpFRUJFX0NBTExFRF9FTEVNRU5UO1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICBsZXQgY2FsbGVkRWxlbWVudCA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOkNhbGxlZEVsZW1lbnQnKTtcblxuICAgIC8vICgxKSByZW1vdmUgb2xkIGNhbGxlZCBlbGVtZW50IGlmIG5vIG5ldyBwcm9wZXJ0aWVzIHNwZWNpZmllZFxuICAgIGlmICghbmV3UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsdWVzOiB3aXRob3V0KGJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIGNhbGxlZEVsZW1lbnQpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKG5ld1Byb3BlcnR5KSxcbiAgICAgICAgcHJvcGVydHlOYW1lID0gbmV3UHJvcGVydHkuYmluZGluZy5wcm9wZXJ0eTtcblxuICAgICAgLy8gKDIpIHVwZGF0ZSBvbGQgY2FsbGVkIGVsZW1lbnRcbiAgICAgIGlmIChjYWxsZWRFbGVtZW50KSB7XG4gICAgICAgIGlmICghc2hvdWxkS2VlcFZhbHVlKGNhbGxlZEVsZW1lbnQsIG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgW3Byb3BlcnR5TmFtZV06IG5ld1Byb3BlcnR5VmFsdWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogY2FsbGVkRWxlbWVudCxcbiAgICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAoMykgYWRkIG5ldyBjYWxsZWQgZWxlbWVudFxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgW3Byb3BlcnR5TmFtZV06IG5ld1Byb3BlcnR5VmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgY2FsbGVkRWxlbWVudCA9IGNyZWF0ZUNhbGxlZEVsZW1lbnQocHJvcGVydGllcywgYnBtbkZhY3RvcnkpO1xuICAgICAgICBjYWxsZWRFbGVtZW50LiRwYXJlbnQgPSBidXNpbmVzc09iamVjdDtcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIGNhbGxlZEVsZW1lbnRdXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSByZW1vdmUgcHJvcGVydGllcyBubyBsb25nZXIgdGVtcGxhdGVkXG4gICAgY29uc3Qgb2xkUHJvcGVydGllcyA9IG9sZFRlbXBsYXRlICYmIG9sZFRlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG9sZFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gWkVFQkVfQ0FMTEVEX0VMRU1FTlQgJiYgIW5ld1Byb3BlcnRpZXMuZmluZChuZXdQcm9wZXJ0eSA9PiBuZXdQcm9wZXJ0eS5iaW5kaW5nLnByb3BlcnR5ID09PSBvbGRQcm9wZXJ0eS5iaW5kaW5nLnByb3BlcnR5KTtcbiAgICB9KSB8fCBbXTtcbiAgICBvbGRQcm9wZXJ0aWVzLmZvckVhY2gob2xkUHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgW29sZFByb3BlcnR5LmJpbmRpbmcucHJvcGVydHldOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBjYWxsZWRFbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudFR5cGUuXG4gICAqIFRha2VzIGludG8gYWNjb3VudCB0aGUgZXZlbnREZWZpbml0aW9uIGZvciBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlRWxlbWVudFR5cGUoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKSB7XG4gICAgLy8gZGV0ZXJtaW5lIG5ldyB0YXNrIHR5cGVcbiAgICBjb25zdCBuZXdUeXBlID0gbmV3VGVtcGxhdGUuZWxlbWVudFR5cGU7XG4gICAgaWYgKCFuZXdUeXBlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBUT0RPKG5yZSk6IGhhbmRsZSBvbGQgZXZlbnQgZGVmaW5pdGlvblxuICAgIGNvbnN0IG9sZFR5cGUgPSBvbGRUZW1wbGF0ZSAmJiBvbGRUZW1wbGF0ZS5lbGVtZW50VHlwZSB8fCB7XG4gICAgICB2YWx1ZTogZWxlbWVudC50eXBlXG4gICAgfTtcblxuICAgIC8vIERvIG5vdCByZXBsYWNlIGlmIHRoZSBlbGVtZW50IHR5cGUgZGlkIG5vdCBjaGFuZ2VcbiAgICBpZiAob2xkVHlwZSAmJiBvbGRUeXBlLnZhbHVlID09PSBuZXdUeXBlLnZhbHVlICYmIG9sZFR5cGUuZXZlbnREZWZpbml0aW9uID09PSBuZXdUeXBlLmV2ZW50RGVmaW5pdGlvbikge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0ge1xuICAgICAgdHlwZTogbmV3VHlwZS52YWx1ZVxuICAgIH07XG4gICAgaWYgKG5ld1R5cGUuZXZlbnREZWZpbml0aW9uKSB7XG4gICAgICByZXBsYWNlbWVudC5ldmVudERlZmluaXRpb25UeXBlID0gbmV3VHlwZS5ldmVudERlZmluaXRpb247XG4gICAgfVxuICAgIGNvbnN0IHJlcGxhY2VkRWxlbWVudCA9IHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIHJlcGxhY2VtZW50KTtcbiAgICByZXR1cm4gcmVwbGFjZWRFbGVtZW50O1xuICB9XG59O1xuQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlciQxLiRpbmplY3QgPSBbJ2JwbW5GYWN0b3J5JywgJ2JwbW5SZXBsYWNlJywgJ2NvbW1hbmRTdGFjaycsICdtb2RlbGluZycsICdpbmplY3RvciddO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBGaW5kIGJ1c2luZXNzIG9iamVjdCBtYXRjaGluZyBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZmluZEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nLFxuICAgIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlO1xuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKGJpbmRpbmdUeXBlKSkge1xuICAgIHJldHVybiBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpO1xuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOmlucHV0JyB8fCBiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOm91dHB1dCcpIHtcbiAgICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOklvTWFwcGluZycpO1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnemVlYmU6aW5wdXQnKSB7XG4gICAgICByZXR1cm4gZmluZChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3plZWJlOmlucHV0UGFyYW1ldGVycycpLCBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmdldCgnemVlYmU6dGFyZ2V0JykgPT09IGJpbmRpbmcubmFtZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmluZChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3plZWJlOm91dHB1dFBhcmFtZXRlcnMnKSwgZnVuY3Rpb24gKG91dHB1dCkge1xuICAgICAgICByZXR1cm4gb3V0cHV0LmdldCgnemVlYmU6c291cmNlJykgPT09IGJpbmRpbmcuc291cmNlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOnRhc2tIZWFkZXInKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrSGVhZGVycycpO1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmQoZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd6ZWViZTp2YWx1ZXMnKSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZ2V0KCd6ZWViZTprZXknKSA9PT0gYmluZGluZy5rZXk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGJpbmRpbmdUeXBlID09PSAnemVlYmU6cHJvcGVydHknKSB7XG4gICAgY29uc3QgemVlYmVQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6UHJvcGVydGllcycpO1xuICAgIGlmICghemVlYmVQcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykuZmluZCh2YWx1ZSA9PiB7XG4gICAgICByZXR1cm4gdmFsdWUuZ2V0KCduYW1lJykgPT09IGJpbmRpbmcubmFtZTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgb2xkIHByb3BlcnR5IG1hdGNoaW5nIHNwZWNpZmllZCBuZXcgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbmV3UHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpIHtcbiAgaWYgKCFvbGRUZW1wbGF0ZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBvbGRQcm9wZXJ0aWVzID0gb2xkVGVtcGxhdGUucHJvcGVydGllcyxcbiAgICBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICBuZXdCaW5kaW5nTmFtZSA9IG5ld0JpbmRpbmcubmFtZSxcbiAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAncHJvcGVydHknKSB7XG4gICAgcmV0dXJuIGZpbmQob2xkUHJvcGVydGllcywgZnVuY3Rpb24gKG9sZFByb3BlcnR5KSB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ05hbWUgPSBvbGRCaW5kaW5nLm5hbWUsXG4gICAgICAgIG9sZEJpbmRpbmdUeXBlID0gb2xkQmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG9sZEJpbmRpbmdUeXBlID09PSAncHJvcGVydHknICYmIG9sZEJpbmRpbmdOYW1lID09PSBuZXdCaW5kaW5nTmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKG5ld0JpbmRpbmdUeXBlKSkge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZFByb3BlcnR5TmFtZSA9IGdldFRhc2tEZWZpbml0aW9uUHJvcGVydHlOYW1lKG9sZEJpbmRpbmcpLFxuICAgICAgICBuZXdQcm9wZXJ0eU5hbWUgPSBnZXRUYXNrRGVmaW5pdGlvblByb3BlcnR5TmFtZShuZXdCaW5kaW5nKTtcbiAgICAgIHJldHVybiBvbGRQcm9wZXJ0eU5hbWUgPT09IG5ld1Byb3BlcnR5TmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICd6ZWViZTppbnB1dCcpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nTmFtZSA9IG9sZEJpbmRpbmcubmFtZSxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09ICd6ZWViZTppbnB1dCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEJpbmRpbmdOYW1lID09PSBuZXdCaW5kaW5nTmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICd6ZWViZTpvdXRwdXQnKSB7XG4gICAgcmV0dXJuIGZpbmQob2xkUHJvcGVydGllcywgZnVuY3Rpb24gKG9sZFByb3BlcnR5KSB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09ICd6ZWViZTpvdXRwdXQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvbGRCaW5kaW5nLnNvdXJjZSA9PT0gbmV3QmluZGluZy5zb3VyY2U7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnemVlYmU6dGFza0hlYWRlcicpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIGlmIChvbGRCaW5kaW5nVHlwZSAhPT0gJ3plZWJlOnRhc2tIZWFkZXInKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvbGRCaW5kaW5nLmtleSA9PT0gbmV3QmluZGluZy5rZXk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnemVlYmU6cHJvcGVydHknKSB7XG4gICAgcmV0dXJuIG9sZFByb3BlcnRpZXMuZmluZChvbGRQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09ICd6ZWViZTpwcm9wZXJ0eScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEJpbmRpbmcubmFtZSA9PT0gbmV3QmluZGluZy5uYW1lO1xuICAgIH0pO1xuICB9XG4gIGlmIChuZXdCaW5kaW5nVHlwZSA9PT0gTUVTU0FHRV9QUk9QRVJUWV9UWVBFKSB7XG4gICAgcmV0dXJuIG9sZFByb3BlcnRpZXMuZmluZChvbGRQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09IE1FU1NBR0VfUFJPUEVSVFlfVFlQRSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkQmluZGluZy5uYW1lID09PSBuZXdCaW5kaW5nLm5hbWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSBNRVNTQUdFX1pFRUJFX1NVQlNDUklQVElPTl9QUk9QRVJUWV9UWVBFKSB7XG4gICAgcmV0dXJuIG9sZFByb3BlcnRpZXMuZmluZChvbGRQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09IE1FU1NBR0VfWkVFQkVfU1VCU0NSSVBUSU9OX1BST1BFUlRZX1RZUEUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEJpbmRpbmcubmFtZSA9PT0gbmV3QmluZGluZy5uYW1lO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZXhpc3RpbmcgcHJvcGVydHkgc2hvdWxkIGJlIGtlZXB0LiBUaGlzIGlzIHRoZSBjYXNlIGlmXG4gKiAgLSBhbiBvbGQgdGVtcGxhdGUgd2FzIHNldCBhbmQgdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdFxuICogIC0gbm8gdGVtcGxhdGUgd2FzIHNldCBidXQgdGhlIHByb3BlcnR5IHdhcyBzZXQgbWFudWFsbHlcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG5ld1Byb3BlcnR5XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZEtlZXBWYWx1ZShlbGVtZW50LCBvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgLy8gXCJIaWRkZW5cIiB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgYSBjb25zdGFudFxuICBpZiAobmV3UHJvcGVydHkudHlwZSA9PT0gJ0hpZGRlbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBEcm9wZG93bnMgc2hvdWxkIGtlZXAgZXhpc3RpbmcgY29uZmlndXJhdGlvblxuICAvLyBjZi4gaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2lzc3Vlcy83NjdcbiAgaWYgKG5ld1Byb3BlcnR5LnR5cGUgPT09ICdEcm9wZG93bicpIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlJDEoZWxlbWVudCwgbmV3UHJvcGVydHkpO1xuXG4gICAgLy8gb25seSBrZWVwIHZhbHVlIGlmIG9sZCB2YWx1ZSBpcyBhIHZhbGlkIG9wdGlvblxuICAgIHJldHVybiBuZXdQcm9wZXJ0eS5jaG9pY2VzICYmIG5ld1Byb3BlcnR5LmNob2ljZXMuc29tZShjaG9pY2UgPT4gY2hvaWNlLnZhbHVlID09PSBjdXJyZW50VmFsdWUpO1xuICB9XG5cbiAgLy8ga2VlcCBleGlzdGluZyBvbGQgcHJvcGVydHkgaWZcbiAgLy8gdXNlciBjaGFuZ2VkIGl0IGZyb20gdGhlIG9yaWdpbmFsXG4gIGlmIChvbGRQcm9wZXJ0eSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUNoYW5nZWQkMShlbGVtZW50LCBvbGRQcm9wZXJ0eSk7XG4gIH1cblxuICAvLyBrZWVwIGV4aXN0aW5nIHByb3BlcnR5IHZhbHVlXG4gIHJldHVybiAhIWdldFByb3BlcnR5VmFsdWUkMShlbGVtZW50LCBuZXdQcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBwcm9wZXJ0eSB3YXMgY2hhbmdlZCBhZnRlciBiZWluZyBzZXQgYnkgdGVtcGxhdGUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHlDaGFuZ2VkJDEoZWxlbWVudCwgb2xkUHJvcGVydHkpIHtcbiAgY29uc3Qgb2xkUHJvcGVydHlWYWx1ZSA9IG9sZFByb3BlcnR5LnZhbHVlO1xuICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZSQxKGVsZW1lbnQsIG9sZFByb3BlcnR5KSAhPT0gb2xkUHJvcGVydHlWYWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWUkMShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBpZiAoIWJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nLFxuICAgIGJpbmRpbmdOYW1lID0gYmluZGluZy5uYW1lLFxuICAgIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlO1xuICBpZiAoYmluZGluZ1R5cGUgPT09ICdwcm9wZXJ0eScpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KGJpbmRpbmdOYW1lKTtcbiAgfVxuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKGJpbmRpbmdUeXBlKSkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoZ2V0VGFza0RlZmluaXRpb25Qcm9wZXJ0eU5hbWUoYmluZGluZykpO1xuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOmlucHV0Jykge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ3plZWJlOnNvdXJjZScpO1xuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOm91dHB1dCcpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCd6ZWViZTp0YXJnZXQnKTtcbiAgfVxuICBpZiAoYmluZGluZ1R5cGUgPT09ICd6ZWViZTp0YXNrSGVhZGVyJykge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ3plZWJlOnZhbHVlJyk7XG4gIH1cbiAgaWYgKGJpbmRpbmdUeXBlID09PSAnemVlYmU6cHJvcGVydHknKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnemVlYmU6dmFsdWUnKTtcbiAgfVxuICBpZiAoYmluZGluZ1R5cGUgPT09IE1FU1NBR0VfUFJPUEVSVFlfVFlQRSkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoYmluZGluZ05hbWUpO1xuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gTUVTU0FHRV9aRUVCRV9TVUJTQ1JJUFRJT05fUFJPUEVSVFlfVFlQRSkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoYmluZGluZ05hbWUpO1xuICB9XG59XG5mdW5jdGlvbiByZW1vdmUkMShhcnJheSwgaXRlbSkge1xuICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XG4gIGlmIChpc1VuZGVmaW5lZCQxKGluZGV4KSkge1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICByZXR1cm4gYXJyYXk7XG59XG5mdW5jdGlvbiBoYXNNZXNzYWdlUHJvcGVydGllcyh0ZW1wbGF0ZSkge1xuICByZXR1cm4gdGVtcGxhdGUucHJvcGVydGllcy5zb21lKHAgPT4gTUVTU0FHRV9CSU5ESU5HX1RZUEVTLmluY2x1ZGVzKHAuYmluZGluZy50eXBlKSk7XG59XG5cbmNsYXNzIFJlbW92ZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihtb2RlbGluZywgZWxlbWVudEZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgY2FudmFzLCBicG1uRmFjdG9yeSwgcmVwbGFjZSwgY29tbWFuZFN0YWNrKSB7XG4gICAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICAgIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gICAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgICB0aGlzLl9yZXBsYWNlID0gcmVwbGFjZTtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2sgPSBjb21tYW5kU3RhY2s7XG4gIH1cbiAgcHJlRXhlY3V0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudFxuICAgIH0gPSBjb250ZXh0O1xuICAgIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgICAgY29udGV4dC5uZXdFbGVtZW50ID0gdGhpcy5fcmVtb3ZlVGVtcGxhdGUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQubmV3RWxlbWVudCA9IHRoaXMuX3JlbW92ZVJvb3RUZW1wbGF0ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgX3JlbW92ZVRlbXBsYXRlKGVsZW1lbnQpIHtcbiAgICBjb25zdCByZXBsYWNlID0gdGhpcy5fcmVwbGFjZTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IHR5cGUgPSBidXNpbmVzc09iamVjdC4kdHlwZSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGUgPSB0aGlzLl9nZXRFdmVudERlZmluaXRpb25UeXBlKGJ1c2luZXNzT2JqZWN0KTtcbiAgICBjb25zdCBuZXdCdXNpbmVzc09iamVjdCA9IHRoaXMuX2NyZWF0ZUJsYW5rQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgcmV0dXJuIHJlcGxhY2UucmVwbGFjZUVsZW1lbnQoZWxlbWVudCwge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGJ1c2luZXNzT2JqZWN0OiBuZXdCdXNpbmVzc09iamVjdCxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6IGV2ZW50RGVmaW5pdGlvblR5cGVcbiAgICB9LCB7XG4gICAgICBjcmVhdGVFbGVtZW50c0JlaGF2aW9yOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0ZW1wbGF0ZSBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICAgKi9cbiAgX3JlbW92ZVJvb3RUZW1wbGF0ZShlbGVtZW50KSB7XG4gICAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmcsXG4gICAgICBlbGVtZW50RmFjdG9yeSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gICAgLy8gV2UgYXJlIGluc2lkZSBhIGNvbGxhcHNlZCBzdWJwcm9jZXNzLCBtb3ZlIHVwIHRvIHRoZSBwYXJlbnQgYmVmb3JlIHJlcGxhY2luZyB0aGUgY29sbGFwc2VkIG9iamVjdFxuICAgIGlmIChpc1BsYW5lKGVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBzaGFwZUlkID0gZ2V0U2hhcGVJZEZyb21QbGFuZShlbGVtZW50KTtcbiAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZUlkKTtcbiAgICAgIGlmIChzaGFwZSAmJiBzaGFwZSAhPT0gZWxlbWVudCkge1xuICAgICAgICBjYW52YXMuc2V0Um9vdEVsZW1lbnQoY2FudmFzLmZpbmRSb290KHNoYXBlKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVUZW1wbGF0ZShzaGFwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgY29uc3QgdHlwZSA9IGJ1c2luZXNzT2JqZWN0LiR0eXBlO1xuICAgIGNvbnN0IG5ld0J1c2luZXNzT2JqZWN0ID0gdGhpcy5fY3JlYXRlQmxhbmtCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCBuZXdSb290ID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlKCdyb290Jywge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGJ1c2luZXNzT2JqZWN0OiBuZXdCdXNpbmVzc09iamVjdFxuICAgIH0pO1xuICAgIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjYW52YXMudXBkYXRlUm9vdCcsIHtcbiAgICAgIG5ld1Jvb3Q6IG5ld1Jvb3QsXG4gICAgICBvbGRSb290OiBlbGVtZW50XG4gICAgfSk7XG4gICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKGVsZW1lbnQuY2hpbGRyZW4sIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfSwgbmV3Um9vdCk7XG4gICAgcmV0dXJuIG5ld1Jvb3Q7XG4gIH1cbiAgX2dldEV2ZW50RGVmaW5pdGlvblR5cGUoYnVzaW5lc3NPYmplY3QpIHtcbiAgICBpZiAoIWJ1c2luZXNzT2JqZWN0LmV2ZW50RGVmaW5pdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBldmVudERlZmluaXRpb24gPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zWzBdO1xuICAgIGlmICghZXZlbnREZWZpbml0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50RGVmaW5pdGlvbi4kdHlwZTtcbiAgfVxuICBfY3JlYXRlQmxhbmtCdXNpbmVzc09iamVjdChlbGVtZW50KSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeTtcbiAgICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgbmV3Qm8gPSBicG1uRmFjdG9yeS5jcmVhdGUoYm8uJHR5cGUpLFxuICAgICAgbGFiZWwgPSBnZXRMYWJlbChlbGVtZW50KTtcbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICByZXR1cm4gbmV3Qm87XG4gICAgfVxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHcm91cCcpKSB7XG4gICAgICBuZXdCby5jYXRlZ29yeVZhbHVlUmVmID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5VmFsdWUnKTtcbiAgICB9XG4gICAgc2V0TGFiZWwoe1xuICAgICAgYnVzaW5lc3NPYmplY3Q6IG5ld0JvXG4gICAgfSwgbGFiZWwpO1xuICAgIHJldHVybiBuZXdCbztcbiAgfVxufVxuUmVtb3ZlRWxlbWVudFRlbXBsYXRlSGFuZGxlci4kaW5qZWN0ID0gWydtb2RlbGluZycsICdlbGVtZW50RmFjdG9yeScsICdlbGVtZW50UmVnaXN0cnknLCAnY2FudmFzJywgJ2JwbW5GYWN0b3J5JywgJ3JlcGxhY2UnLCAnY29tbWFuZFN0YWNrJ107XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgY29tYmluZXMgYW5kIGV4ZWN1dGVzIG11bHRpcGxlIGNvbW1hbmRzLlxuICpcbiAqIEFsbCB1cGRhdGVzIGFyZSBidW5kbGVkIG9uIHRoZSBjb21tYW5kIHN0YWNrIGFuZCBleGVjdXRlZCBpbiBvbmUgc3RlcC5cbiAqIFRoaXMgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXZlcnQgdGhlIGNoYW5nZXMgaW4gb25lIHN0ZXAuXG4gKlxuICogRXhhbXBsZSB1c2UgY2FzZTogcmVtb3ZlIHRoZSBjYW11bmRhOmZvcm1LZXkgYXR0cmlidXRlIGFuZCBpbiBhZGRpdGlvblxuICogYWRkIGFsbCBmb3JtIGZpZWxkcyBuZWVkZWQgZm9yIHRoZSBjYW11bmRhOmZvcm1EYXRhIHByb3BlcnR5LlxuICovXG5jbGFzcyBNdWx0aUNvbW1hbmRIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoY29tbWFuZFN0YWNrKSB7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xuICB9XG4gIHByZUV4ZWN1dGUoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcbiAgICBmb3JFYWNoKGNvbnRleHQsIGZ1bmN0aW9uIChjb21tYW5kKSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLmNtZCwgY29tbWFuZC5jb250ZXh0KTtcbiAgICB9KTtcbiAgfVxufVxuTXVsdGlDb21tYW5kSGFuZGxlci4kaW5qZWN0ID0gWydjb21tYW5kU3RhY2snXTtcblxubGV0IEVsZW1lbnRUZW1wbGF0ZXNDb21tYW5kcyQxID0gY2xhc3MgRWxlbWVudFRlbXBsYXRlc0NvbW1hbmRzIHtcbiAgY29uc3RydWN0b3IoY29tbWFuZFN0YWNrLCBlbGVtZW50VGVtcGxhdGVzLCBldmVudEJ1cykge1xuICAgIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoJ2VsZW1lbnQtdGVtcGxhdGVzLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBNdWx0aUNvbW1hbmRIYW5kbGVyKTtcbiAgICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdwcm9wZXJ0aWVzUGFuZWwuemVlYmUuY2hhbmdlVGVtcGxhdGUnLCBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyJDEpO1xuICAgIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoJ3Byb3BlcnRpZXNQYW5lbC5yZW1vdmVUZW1wbGF0ZScsIFJlbW92ZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIpO1xuXG4gICAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBzaGFwZSBjcmVhdGlvblxuICAgIGV2ZW50QnVzLm9uKFsnY29tbWFuZFN0YWNrLnNoYXBlLmNyZWF0ZS5wb3N0RXhlY3V0ZWQnXSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBoaW50cyA9IHt9LFxuICAgICAgICAgIHNoYXBlXG4gICAgICAgIH1cbiAgICAgIH0gPSBldmVudDtcbiAgICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgICBhcHBseURlZmF1bHRUZW1wbGF0ZSQxKHNoYXBlLCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBjb25uZWN0aW9uIGNyZWF0aW9uXG4gICAgZXZlbnRCdXMub24oWydjb21tYW5kU3RhY2suY29ubmVjdGlvbi5jcmVhdGUucG9zdEV4ZWN1dGVkJ10sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgaGludHMgPSB7fSxcbiAgICAgICAgICBjb25uZWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0gPSBldmVudDtcbiAgICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgICBhcHBseURlZmF1bHRUZW1wbGF0ZSQxKGNvbm5lY3Rpb24sIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5FbGVtZW50VGVtcGxhdGVzQ29tbWFuZHMkMS4kaW5qZWN0ID0gWydjb21tYW5kU3RhY2snLCAnZWxlbWVudFRlbXBsYXRlcycsICdldmVudEJ1cyddO1xuZnVuY3Rpb24gYXBwbHlEZWZhdWx0VGVtcGxhdGUkMShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2spIHtcbiAgaWYgKCFlbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KSAmJiBlbGVtZW50VGVtcGxhdGVzLmdldERlZmF1bHQoZWxlbWVudCkpIHtcbiAgICBjb25zdCBjb21tYW5kID0gJ3Byb3BlcnRpZXNQYW5lbC56ZWViZS5jaGFuZ2VUZW1wbGF0ZSc7XG4gICAgY29uc3QgY29tbWFuZENvbnRleHQgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGU6IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0RGVmYXVsdChlbGVtZW50KVxuICAgIH07XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoY29tbWFuZCwgY29tbWFuZENvbnRleHQpO1xuICB9XG59XG5cbnZhciBjb21tYW5kc01vZHVsZSQxID0ge1xuICBfX2luaXRfXzogWydlbGVtZW50VGVtcGxhdGVDb21tYW5kcyddLFxuICBlbGVtZW50VGVtcGxhdGVDb21tYW5kczogWyd0eXBlJywgRWxlbWVudFRlbXBsYXRlc0NvbW1hbmRzJDFdXG59O1xuXG5jbGFzcyBQcm9wZXJ0eUJpbmRpbmdQcm92aWRlciB7XG4gIHN0YXRpYyBjcmVhdGUoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BlcnR5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lXG4gICAgfSA9IGJpbmRpbmc7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgYnVzaW5lc3NPYmplY3RbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5jbGFzcyBUYXNrRGVmaW5pdGlvblR5cGVCaW5kaW5nUHJvdmlkZXIge1xuICBzdGF0aWMgY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGJwbW5GYWN0b3J5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldFRhc2tEZWZpbml0aW9uUHJvcGVydHlOYW1lKHByb3BlcnR5LmJpbmRpbmcpO1xuICAgIGNvbnN0IHRhc2tEZWZpbml0aW9uID0gZW5zdXJlRXh0ZW5zaW9uKGVsZW1lbnQsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicsIGJwbW5GYWN0b3J5KTtcbiAgICB0YXNrRGVmaW5pdGlvbi5zZXQocHJvcGVydHlOYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuY2xhc3MgSW5wdXRCaW5kaW5nUHJvdmlkZXIge1xuICBzdGF0aWMgY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGJwbW5GYWN0b3J5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSk7XG4gICAgY29uc3QgaW9NYXBwaW5nID0gZW5zdXJlRXh0ZW5zaW9uKGVsZW1lbnQsICd6ZWViZTpJb01hcHBpbmcnLCBicG1uRmFjdG9yeSk7XG4gICAgaWYgKCFzaG91bGRVcGRhdGUodmFsdWUsIHByb3BlcnR5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dCA9IGNyZWF0ZUlucHV0UGFyYW1ldGVyJDEoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICBpbnB1dC4kcGFyZW50ID0gaW9NYXBwaW5nO1xuICAgIGlvTWFwcGluZy5nZXQoJ2lucHV0UGFyYW1ldGVycycpLnB1c2goaW5wdXQpO1xuICB9XG59XG5cbmNsYXNzIE91dHB1dEJpbmRpbmdQcm92aWRlciB7XG4gIHN0YXRpYyBjcmVhdGUoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BlcnR5LFxuICAgICAgYnBtbkZhY3RvcnlcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICBiaW5kaW5nXG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5KTtcbiAgICBjb25zdCBpb01hcHBpbmcgPSBlbnN1cmVFeHRlbnNpb24oZWxlbWVudCwgJ3plZWJlOklvTWFwcGluZycsIGJwbW5GYWN0b3J5KTtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZSh2YWx1ZSwgcHJvcGVydHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IGNyZWF0ZU91dHB1dFBhcmFtZXRlciQxKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgb3V0cHV0LiRwYXJlbnQgPSBpb01hcHBpbmc7XG4gICAgaW9NYXBwaW5nLmdldCgnb3V0cHV0UGFyYW1ldGVycycpLnB1c2gob3V0cHV0KTtcbiAgfVxufVxuXG5jbGFzcyBUYXNrSGVhZGVyQmluZGluZ1Byb3ZpZGVyIHtcbiAgc3RhdGljIGNyZWF0ZShlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgcHJvcGVydHksXG4gICAgICBicG1uRmFjdG9yeVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHtcbiAgICAgIGJpbmRpbmdcbiAgICB9ID0gcHJvcGVydHk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGNvbnN0IHRhc2tIZWFkZXJzID0gZW5zdXJlRXh0ZW5zaW9uKGVsZW1lbnQsICd6ZWViZTpUYXNrSGVhZGVycycsIGJwbW5GYWN0b3J5KTtcbiAgICBjb25zdCBoZWFkZXIgPSBjcmVhdGVUYXNrSGVhZGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgaGVhZGVyLiRwYXJlbnQgPSB0YXNrSGVhZGVycztcbiAgICB0YXNrSGVhZGVycy5nZXQoJ3ZhbHVlcycpLnB1c2goaGVhZGVyKTtcbiAgfVxufVxuXG5jbGFzcyBaZWViZVByb3BlcnRpZXNQcm92aWRlciB7XG4gIHN0YXRpYyBjcmVhdGUoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BlcnR5LFxuICAgICAgYnBtbkZhY3RvcnlcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICBiaW5kaW5nXG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5KTtcbiAgICBjb25zdCB6ZWViZVByb3BlcnRpZXMgPSBlbnN1cmVFeHRlbnNpb24oZWxlbWVudCwgJ3plZWJlOlByb3BlcnRpZXMnLCBicG1uRmFjdG9yeSk7XG4gICAgaWYgKCFzaG91bGRVcGRhdGUodmFsdWUsIHByb3BlcnR5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB6ZWViZVByb3BlcnR5ID0gY3JlYXRlWmVlYmVQcm9wZXJ0eShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIHplZWJlUHJvcGVydHkuJHBhcmVudCA9IHplZWJlUHJvcGVydGllcztcbiAgICB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykucHVzaCh6ZWViZVByb3BlcnR5KTtcbiAgfVxufVxuXG5jbGFzcyBNZXNzYWdlUHJvcGVydHlCaW5kaW5nUHJvdmlkZXIge1xuICBzdGF0aWMgY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIHByb3BlcnR5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lXG4gICAgfSA9IGJpbmRpbmc7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXZlbnQnKSkge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKVswXTtcbiAgICB9XG4gICAgbGV0IG1lc3NhZ2UgPSBidXNpbmVzc09iamVjdC5nZXQoJ21lc3NhZ2VSZWYnKTtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46TWVzc2FnZScsIHtcbiAgICAgICAgJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZSc6IGdldFRlbXBsYXRlSWQkMShlbGVtZW50KVxuICAgICAgfSk7XG4gICAgICBidXNpbmVzc09iamVjdC5zZXQoJ21lc3NhZ2VSZWYnLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgbWVzc2FnZS5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIE1lc3NhZ2VaZWViZVN1YnNjcmlwdGlvbkJpbmRpbmdQcm92aWRlciB7XG4gIHN0YXRpYyBjcmVhdGUoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIGJwbW5GYWN0b3J5LFxuICAgICAgcHJvcGVydHlcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICBiaW5kaW5nXG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWVcbiAgICB9ID0gYmluZGluZztcbiAgICBjb25zdCB2YWx1ZSA9IGdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSk7XG4gICAgbGV0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgICBidXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpWzBdO1xuICAgIH1cbiAgICBsZXQgbWVzc2FnZSA9IGJ1c2luZXNzT2JqZWN0LmdldCgnbWVzc2FnZVJlZicpO1xuICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpNZXNzYWdlJywge1xuICAgICAgICAnemVlYmU6bW9kZWxlclRlbXBsYXRlJzogZ2V0VGVtcGxhdGVJZCQxKGVsZW1lbnQpXG4gICAgICB9KTtcbiAgICAgIGJ1c2luZXNzT2JqZWN0LnNldCgnbWVzc2FnZVJlZicsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBlbnN1cmVFeHRlbnNpb24obWVzc2FnZSwgJ3plZWJlOlN1YnNjcmlwdGlvbicsIGJwbW5GYWN0b3J5KTtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZSh2YWx1ZSwgcHJvcGVydHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1YnNjcmlwdGlvbi5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIENhbGxlZEVsZW1lbnRCaW5kaW5nUHJvdmlkZXIge1xuICBzdGF0aWMgY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGJwbW5GYWN0b3J5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eTogcHJvcGVydHlOYW1lXG4gICAgfSA9IGJpbmRpbmc7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGNvbnN0IGNhbGxlZEVsZW1lbnQgPSBlbnN1cmVFeHRlbnNpb24oZWxlbWVudCwgJ3plZWJlOkNhbGxlZEVsZW1lbnQnLCBicG1uRmFjdG9yeSk7XG5cbiAgICAvLyBUT0RPKEBiYXJtYWMpOiByZW1vdmUgaWYgd2UgZGVjaWRlIHRvIHN1cHBvcnQgcHJvcGFnYXRpb24gaW4gdGVtcGxhdGVzXG4gICAgZW5zdXJlTm9Qcm9wYWdhdGlvbihjYWxsZWRFbGVtZW50KTtcbiAgICBjYWxsZWRFbGVtZW50LnNldChwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZW5zdXJlTm9Qcm9wYWdhdGlvbihjYWxsZWRFbGVtZW50KSB7XG4gIGNhbGxlZEVsZW1lbnQuc2V0KCdwcm9wYWdhdGVBbGxDaGlsZFZhcmlhYmxlcycsIGZhbHNlKTtcbiAgY2FsbGVkRWxlbWVudC5zZXQoJ3Byb3BhZ2F0ZUFsbFBhcmVudFZhcmlhYmxlcycsIGZhbHNlKTtcbn1cblxuY29uc3QgUFJJTUlUSVZFX01PRERMRV9UWVBFUyQxID0gWydCb29sZWFuJywgJ0ludGVnZXInLCAnU3RyaW5nJ107XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSkge1xuICBjb25zdCByYXdWYWx1ZSA9IGdldFJhd1Byb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpO1xuICBjb25zdCB7XG4gICAgdHlwZVxuICB9ID0gcHJvcGVydHk7XG4gIGlmICh0eXBlID09PSAnQm9vbGVhbicpIHtcbiAgICByZXR1cm4gZ2V0Qm9vbGVhblByb3BlcnR5VmFsdWUocmF3VmFsdWUpO1xuICB9XG4gIHJldHVybiByYXdWYWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFJhd1Byb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHksIHNjb3BlKSB7XG4gIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBkZWZhdWx0VmFsdWUgPSAnJztcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBwcm9wZXJ0eTogYmluZGluZ1Byb3BlcnR5LFxuICAgIHR5cGVcbiAgfSA9IGJpbmRpbmc7XG5cbiAgLy8gcHJvcGVydHlcbiAgaWYgKHR5cGUgPT09ICdwcm9wZXJ0eScpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJ1c2luZXNzT2JqZWN0LmdldChuYW1lKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkJDEodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICAvLyB6ZWViZTp0YXNrRGVmaW5pdGlvblxuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgY29uc3QgdGFza0RlZmluaXRpb24gPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpO1xuICAgIGlmICh0YXNrRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHR5cGUgPT09IFpFRUJFX1RBU0tfREVGSU5JVElPTl9UWVBFX1RZUEUpIHtcbiAgICAgICAgcmV0dXJuIHRhc2tEZWZpbml0aW9uLmdldCgndHlwZScpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBaRUVCRV9UQVNLX0RFRklOSVRJT04pIHtcbiAgICAgICAgcmV0dXJuIHRhc2tEZWZpbml0aW9uLmdldChiaW5kaW5nUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG4gIGlmIChJT19CSU5ESU5HX1RZUEVTJDEuaW5jbHVkZXModHlwZSkpIHtcbiAgICBjb25zdCBpb01hcHBpbmcgPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpJb01hcHBpbmcnKTtcbiAgICBpZiAoIWlvTWFwcGluZykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyB6ZWViZTpJbnB1dFxuICAgIGlmICh0eXBlID09PSBaRUJCRV9JTlBVVF9UWVBFKSB7XG4gICAgICBjb25zdCBpbnB1dFBhcmFtZXRlciA9IGZpbmRJbnB1dFBhcmFtZXRlciQxKGlvTWFwcGluZywgYmluZGluZyk7XG4gICAgICBpZiAoaW5wdXRQYXJhbWV0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0UGFyYW1ldGVyLmdldCgnc291cmNlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIC8vIHplZWJlOk91dHB1dFxuICAgIGlmICh0eXBlID09PSBaRUVCRV9PVVRQVVRfVFlQRSkge1xuICAgICAgY29uc3Qgb3V0cHV0UGFyYW1ldGVyID0gZmluZE91dHB1dFBhcmFtZXRlciQxKGlvTWFwcGluZywgYmluZGluZyk7XG4gICAgICBpZiAob3V0cHV0UGFyYW1ldGVyKSB7XG4gICAgICAgIHJldHVybiBvdXRwdXRQYXJhbWV0ZXIuZ2V0KCd0YXJnZXQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLy8gemVlYmU6dGFza0hlYWRlcnNcbiAgaWYgKHR5cGUgPT09IFpFRUJFX1RBU0tfSEVBREVSX1RZUEUpIHtcbiAgICBjb25zdCB0YXNrSGVhZGVycyA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOlRhc2tIZWFkZXJzJyk7XG4gICAgaWYgKCF0YXNrSGVhZGVycykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyID0gZmluZFRhc2tIZWFkZXIodGFza0hlYWRlcnMsIGJpbmRpbmcpO1xuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuZ2V0KCd2YWx1ZScpO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgLy8gemVlYmU6UHJvcGVydHlcbiAgaWYgKHR5cGUgPT09IFpFRUJFX1BST1BFUlRZX1RZUEUpIHtcbiAgICBjb25zdCB6ZWViZVByb3BlcnRpZXMgPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpQcm9wZXJ0aWVzJyk7XG4gICAgaWYgKHplZWJlUHJvcGVydGllcykge1xuICAgICAgY29uc3QgemVlYmVQcm9wZXJ0eSA9IGZpbmRaZWViZVByb3BlcnR5KHplZWJlUHJvcGVydGllcywgYmluZGluZyk7XG4gICAgICBpZiAoemVlYmVQcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gemVlYmVQcm9wZXJ0eS5nZXQoJ3ZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICAvLyBicG1uOk1lc3NhZ2UjcHJvcGVydHlcbiAgaWYgKHR5cGUgPT09IE1FU1NBR0VfUFJPUEVSVFlfVFlQRSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmaW5kTWVzc2FnZShidXNpbmVzc09iamVjdCk7XG4gICAgY29uc3QgdmFsdWUgPSBtZXNzYWdlID8gbWVzc2FnZS5nZXQobmFtZSkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFpc1VuZGVmaW5lZCQxKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgLy8gYnBtbjpNZXNzYWdlI3plZWJlOnN1YnNjcmlwdGlvbiNwcm9wZXJ0eVxuICBpZiAodHlwZSA9PT0gTUVTU0FHRV9aRUVCRV9TVUJTQ1JJUFRJT05fUFJPUEVSVFlfVFlQRSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmaW5kTWVzc2FnZShidXNpbmVzc09iamVjdCk7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGZpbmRFeHRlbnNpb24kMShtZXNzYWdlLCAnemVlYmU6U3Vic2NyaXB0aW9uJyk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHN1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlvbi5nZXQobmFtZSkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkJDEodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb24uZ2V0KG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgLy8gemVlYmU6Y2FsbGVkRWxlbWVudFxuICBpZiAodHlwZSA9PT0gWkVFQkVfQ0FMTEVEX0VMRU1FTlQpIHtcbiAgICBjb25zdCBjYWxsZWRFbGVtZW50ID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6Q2FsbGVkRWxlbWVudCcpO1xuICAgIHJldHVybiBjYWxsZWRFbGVtZW50ID8gY2FsbGVkRWxlbWVudC5nZXQoYmluZGluZ1Byb3BlcnR5KSA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIC8vIHNob3VsZCBuZXZlciB0aHJvdyBhcyB0ZW1wbGF0ZXMgYXJlIHZhbGlkYXRlZCBiZWZvcmVoYW5kXG4gIHRocm93IHVua25vd25CaW5kaW5nRXJyb3IkMShlbGVtZW50LCBwcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogQ2FzdCBhIHN0cmluZyB2YWx1ZSB0byBhIGJvb2xlYW4gaWYgcG9zc2libGUuIE90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlLlxuICogQ2Fubm90IGFsd2F5cyBjYXN0IGR1ZSB0byBGRUVMIGV4cHJlc3Npb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldEJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlICd0cnVlJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ2ZhbHNlJzpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5jb25zdCBOT19PUCA9IG51bGw7XG5mdW5jdGlvbiBzZXRQcm9wZXJ0eVZhbHVlKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICBsZXQgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICB0eXBlXG4gIH0gPSBiaW5kaW5nO1xuICBsZXQgZXh0ZW5zaW9uRWxlbWVudHM7XG4gIGxldCBwcm9wZXJ0eVZhbHVlO1xuICBjb25zdCBjb21tYW5kcyA9IFtdO1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGVsZW1lbnQsXG4gICAgcHJvcGVydHlcbiAgfTtcblxuICAvLyBlbnN1cmUgbWVzc2FnZSBleGlzdHNcbiAgaWYgKE1FU1NBR0VfQklORElOR19UWVBFUy5pbmNsdWRlcyh0eXBlKSkge1xuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXZlbnQnKSkge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKVswXTtcbiAgICB9XG4gICAgbGV0IG1lc3NhZ2UgPSBmaW5kTWVzc2FnZShidXNpbmVzc09iamVjdCk7XG4gICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOk1lc3NhZ2UnLCB7XG4gICAgICAgICd6ZWViZTptb2RlbGVyVGVtcGxhdGUnOiBnZXRUZW1wbGF0ZUlkJDEoZWxlbWVudClcbiAgICAgIH0pO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1lc3NhZ2VSZWY6IG1lc3NhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBidXNpbmVzc09iamVjdCA9IG1lc3NhZ2U7XG4gIH1cblxuICAvLyBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gIGlmIChFWFRFTlNJT05fQklORElOR19UWVBFUyQxLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgbnVsbCwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goTk9fT1ApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3BlcnR5XG4gIGlmIChQUk9QRVJUWV9CSU5ESU5HX1RZUEVTLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgY29uc3QgcHJvcGVydHlEZXNjcmlwdG9yID0gYnVzaW5lc3NPYmplY3QuJGRlc2NyaXB0b3IucHJvcGVydGllc0J5TmFtZVtuYW1lXTtcblxuICAgIC8vIGlmIHByb3BlcnR5IG5vdCBjcmVhdGVkIHlldFxuICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgICAvLyBtYWtlIHN1cmUgd2UgY3JlYXRlIHRoZSBwcm9wZXJ0eVxuICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHR5cGU6IHByb3BlcnR5VHlwZVxuICAgICAgfSA9IHByb3BlcnR5RGVzY3JpcHRvcjtcblxuICAgICAgLy8gZG8gbm90IG92ZXJyaWRlIG5vbi1wcmltaXRpdmUgdHlwZXNcbiAgICAgIGlmICghUFJJTUlUSVZFX01PRERMRV9UWVBFUyQxLmluY2x1ZGVzKHByb3BlcnR5VHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3Qgc2V0IHByb3BlcnR5IG9mIHR5cGUgPCR7cHJvcGVydHlUeXBlfT5gKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdCb29sZWFuJykge1xuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gISF2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlUeXBlID09PSAnSW50ZWdlcicpIHtcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIGlmIChpc05hTihwcm9wZXJ0eVZhbHVlKSkge1xuICAgICAgICAgIC8vIGRvIG5vdCBzZXQgTmFOIHZhbHVlXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IHJlbW92ZSB0aGUgcHJvcGVydHlcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzVW5kZWZpbmVkJDEocHJvcGVydHlWYWx1ZSkpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBbbmFtZV06IHByb3BlcnR5VmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21tYW5kcy5wdXNoKE5PX09QKTtcbiAgICB9XG4gIH1cblxuICAvLyB6ZWViZTp0YXNrRGVmaW5pdGlvblxuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgY29uc3Qgb2xkVGFza0RlZmluaXRpb24gPSBmaW5kRXh0ZW5zaW9uJDEoZXh0ZW5zaW9uRWxlbWVudHMsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpLFxuICAgICAgcHJvcGVydHlOYW1lID0gZ2V0VGFza0RlZmluaXRpb25Qcm9wZXJ0eU5hbWUoYmluZGluZyksXG4gICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICBbcHJvcGVydHlOYW1lXTogdmFsdWUgfHwgJydcbiAgICAgIH07XG4gICAgaWYgKG9sZFRhc2tEZWZpbml0aW9uKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBvbGRUYXNrRGVmaW5pdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3VGFza0RlZmluaXRpb24gPSBjcmVhdGVUYXNrRGVmaW5pdGlvbihwcm9wZXJ0aWVzLCBicG1uRmFjdG9yeSk7XG4gICAgICBuZXdUYXNrRGVmaW5pdGlvbi4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLnZhbHVlcywgbmV3VGFza0RlZmluaXRpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKElPX0JJTkRJTkdfVFlQRVMkMS5pbmNsdWRlcyh0eXBlKSkge1xuICAgIGxldCBpb01hcHBpbmcgPSBmaW5kRXh0ZW5zaW9uJDEoZXh0ZW5zaW9uRWxlbWVudHMsICd6ZWViZTpJb01hcHBpbmcnKTtcbiAgICBpZiAoIWlvTWFwcGluZykge1xuICAgICAgaW9NYXBwaW5nID0gY3JlYXRlRWxlbWVudCgnemVlYmU6SW9NYXBwaW5nJywgbnVsbCwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBpb01hcHBpbmddXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB6ZWViZTpJbnB1dFxuICAgIGlmICh0eXBlID09PSBaRUJCRV9JTlBVVF9UWVBFKSB7XG4gICAgICBjb25zdCBvbGRaZWViZUlucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyJDEoaW9NYXBwaW5nLCBiaW5kaW5nKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGlvTWFwcGluZy5nZXQoJ2lucHV0UGFyYW1ldGVycycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkWmVlYmVJbnB1dFBhcmFtZXRlcik7XG5cbiAgICAgIC8vIGRvIG5vdCBwZXJzaXN0IGVtcHR5IHBhcmFtZXRlcnMgd2hlbiBjb25maWd1cmVkIGFzIDxvcHRpb25hbD5cbiAgICAgIGlmIChzaG91bGRVcGRhdGUodmFsdWUsIHByb3BlcnR5KSkge1xuICAgICAgICBjb25zdCBuZXdaZWViZUlucHV0UGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB2YWx1ZXMucHVzaChuZXdaZWViZUlucHV0UGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBpb01hcHBpbmcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiBbLi4udmFsdWVzXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gemVlYmU6T3V0cHV0XG4gICAgaWYgKHR5cGUgPT09IFpFRUJFX09VVFBVVF9UWVBFKSB7XG4gICAgICBjb25zdCBvbGRaZWViZU91dHB1dFBhcmFtZXRlciA9IGZpbmRPdXRwdXRQYXJhbWV0ZXIkMShpb01hcHBpbmcsIGJpbmRpbmcpO1xuICAgICAgY29uc3QgdmFsdWVzID0gaW9NYXBwaW5nLmdldCgnb3V0cHV0UGFyYW1ldGVycycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkWmVlYmVPdXRwdXRQYXJhbWV0ZXIpO1xuXG4gICAgICAvLyBkbyBub3QgcGVyc2lzdCBlbXB0eSBwYXJhbWV0ZXJzIHdoZW4gY29uZmlndXJlZCBhcyA8b3B0aW9uYWw+XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKHZhbHVlLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgY29uc3QgbmV3WmVlYmVPdXRwdXRQYXJhbWV0ZXIgPSBjcmVhdGVPdXRwdXRQYXJhbWV0ZXIkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB2YWx1ZXMucHVzaChuZXdaZWViZU91dHB1dFBhcmFtZXRlcik7XG4gICAgICB9XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogaW9NYXBwaW5nLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICdvdXRwdXRQYXJhbWV0ZXJzJzogWy4uLnZhbHVlc11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHplZWJlOnRhc2tIZWFkZXJzXG4gIGlmICh0eXBlID09PSBaRUVCRV9UQVNLX0hFQURFUl9UWVBFKSB7XG4gICAgbGV0IHRhc2tIZWFkZXJzID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCAnemVlYmU6VGFza0hlYWRlcnMnKTtcbiAgICBpZiAoIXRhc2tIZWFkZXJzKSB7XG4gICAgICB0YXNrSGVhZGVycyA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOlRhc2tIZWFkZXJzJywgbnVsbCwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB0YXNrSGVhZGVyc11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBvbGRUYXNrSGVhZGVyID0gZmluZFRhc2tIZWFkZXIodGFza0hlYWRlcnMsIGJpbmRpbmcpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHRhc2tIZWFkZXJzLmdldCgndmFsdWVzJykuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBvbGRUYXNrSGVhZGVyKTtcblxuICAgIC8vIGRvIG5vdCBwZXJzaXN0IHRhc2sgaGVhZGVycyB3aXRoIGVtcHR5IHZhbHVlXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHRhc2tIZWFkZXJzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1Rhc2tIZWFkZXIgPSBjcmVhdGVUYXNrSGVhZGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogdGFza0hlYWRlcnMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4udmFsdWVzLCBuZXdUYXNrSGVhZGVyXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gemVlYmU6UHJvcGVydHlcbiAgaWYgKHR5cGUgPT09IFpFRUJFX1BST1BFUlRZX1RZUEUpIHtcbiAgICBsZXQgemVlYmVQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCAnemVlYmU6UHJvcGVydGllcycpO1xuICAgIGlmICghemVlYmVQcm9wZXJ0aWVzKSB7XG4gICAgICB6ZWViZVByb3BlcnRpZXMgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpQcm9wZXJ0aWVzJywgbnVsbCwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB6ZWViZVByb3BlcnRpZXNdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgb2xkWmVlYmVQcm9wZXJ0eSA9IGZpbmRaZWViZVByb3BlcnR5KHplZWJlUHJvcGVydGllcywgYmluZGluZyk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHplZWJlUHJvcGVydGllcy5nZXQoJ3Byb3BlcnRpZXMnKS5maWx0ZXIocHJvcGVydHkgPT4gcHJvcGVydHkgIT09IG9sZFplZWJlUHJvcGVydHkpO1xuICAgIGlmIChzaG91bGRVcGRhdGUodmFsdWUsIHByb3BlcnR5KSkge1xuICAgICAgY29uc3QgbmV3WmVlYmVQcm9wZXJ0eSA9IGNyZWF0ZVplZWJlUHJvcGVydHkoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgIHByb3BlcnRpZXMucHVzaChuZXdaZWViZVByb3BlcnR5KTtcbiAgICB9XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiB6ZWViZVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGJwbW46TWVzc2FnZSN6ZWViZTpzdWJzY3JpcHRpb24jcHJvcGVydHlcbiAgaWYgKHR5cGUgPT09IE1FU1NBR0VfWkVFQkVfU1VCU0NSSVBUSU9OX1BST1BFUlRZX1RZUEUpIHtcbiAgICBsZXQgc3Vic2NyaXB0aW9uID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCAnemVlYmU6U3Vic2NyaXB0aW9uJyk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIFtuYW1lXTogdmFsdWUgfHwgJydcbiAgICB9O1xuICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHN1YnNjcmlwdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic2NyaXB0aW9uID0gY3JlYXRlRWxlbWVudCgnemVlYmU6U3Vic2NyaXB0aW9uJywgcHJvcGVydGllcywgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBzdWJzY3JpcHRpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyB6ZWViZTpjYWxsZWRFbGVtZW50XG4gIGlmICh0eXBlID09PSBaRUVCRV9DQUxMRURfRUxFTUVOVCkge1xuICAgIGxldCBjYWxsZWRFbGVtZW50ID0gZmluZEV4dGVuc2lvbiQxKGVsZW1lbnQsICd6ZWViZTpDYWxsZWRFbGVtZW50Jyk7XG4gICAgY29uc3QgcHJvcGVydHlOYW1lID0gYmluZGluZy5wcm9wZXJ0eTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgW3Byb3BlcnR5TmFtZV06IHZhbHVlIHx8ICcnXG4gICAgfTtcbiAgICBpZiAoY2FsbGVkRWxlbWVudCkge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogY2FsbGVkRWxlbWVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGVkRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOkNhbGxlZEVsZW1lbnQnLCBwcm9wZXJ0aWVzLCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGNhbGxlZEVsZW1lbnRdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvbW1hbmRzVG9FeGVjdXRlID0gY29tbWFuZHMuZmlsdGVyKGNvbW1hbmQgPT4gY29tbWFuZCAhPT0gTk9fT1ApO1xuICAgIGNvbW1hbmRzVG9FeGVjdXRlLmxlbmd0aCAmJiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC10ZW1wbGF0ZXMubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzVG9FeGVjdXRlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzaG91bGQgbmV2ZXIgdGhyb3cgYXMgdGVtcGxhdGVzIGFyZSB2YWxpZGF0ZWQgYmVmb3JlaGFuZFxuICB0aHJvdyB1bmtub3duQmluZGluZ0Vycm9yJDEoZWxlbWVudCwgcHJvcGVydHkpO1xufVxuXG4vLyBUT0RPKEBiYXJtYWMpOiBmaXggdHJhbnNsYXRlIHVzYWdlIChodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzLWVsZW1lbnQtdGVtcGxhdGVzL3B1bGwvNTMjaXNzdWVjb21tZW50LTE5MDYyMDMyNzApXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHZhbHVlLCBwcm9wZXJ0eSwgdHJhbnNsYXRlID0gZGVmYXVsdFRyYW5zbGF0ZSkge1xuICBjb25zdCB7XG4gICAgY29uc3RyYWludHMgPSB7fSxcbiAgICBsYWJlbFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICBtYXhMZW5ndGgsXG4gICAgbWluTGVuZ3RoLFxuICAgIG5vdEVtcHR5XG4gIH0gPSBjb25zdHJhaW50cztcbiAgaWYgKG5vdEVtcHR5ICYmIGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZSgnbXVzdCBub3QgYmUgZW1wdHkuJyl9YDtcbiAgfVxuICBpZiAobWF4TGVuZ3RoICYmICh2YWx1ZSB8fCAnJykubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZSgnbXVzdCBoYXZlIG1heCBsZW5ndGgge21heExlbmd0aH0uJywge1xuICAgICAgbWF4TGVuZ3RoXG4gICAgfSl9YDtcbiAgfVxuICBpZiAobWluTGVuZ3RoICYmICh2YWx1ZSB8fCAnJykubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZSgnbXVzdCBoYXZlIG1pbiBsZW5ndGgge21pbkxlbmd0aH0uJywge1xuICAgICAgbWluTGVuZ3RoXG4gICAgfSl9YDtcbiAgfVxuICBsZXQge1xuICAgIHBhdHRlcm5cbiAgfSA9IGNvbnN0cmFpbnRzO1xuICBpZiAocGF0dGVybikge1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGlmICghaXNTdHJpbmcocGF0dGVybikpIHtcbiAgICAgIG1lc3NhZ2UgPSBwYXR0ZXJuLm1lc3NhZ2U7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi52YWx1ZTtcbiAgICB9XG4gICAgaWYgKCFtYXRjaGVzUGF0dGVybiQxKHZhbHVlLCBwYXR0ZXJuKSkge1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZShtZXNzYWdlKX1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZSgnbXVzdCBtYXRjaCBwYXR0ZXJuIHtwYXR0ZXJufS4nLCB7XG4gICAgICAgIHBhdHRlcm5cbiAgICAgIH0pfWA7XG4gICAgfVxuICB9XG59XG5cbi8vIGhlbHBlcnNcbmZ1bmN0aW9uIHVua25vd25CaW5kaW5nRXJyb3IkMShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBpZCA9IGJ1c2luZXNzT2JqZWN0LmdldCgnaWQnKTtcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCB7XG4gICAgdHlwZVxuICB9ID0gYmluZGluZztcbiAgcmV0dXJuIG5ldyBFcnJvcihgdW5rbm93biBiaW5kaW5nIDwke3R5cGV9PiBmb3IgZWxlbWVudCA8JHtpZH0+LCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW5gKTtcbn1cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gIXZhbHVlLnRyaW0oKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBtYXRjaGVzUGF0dGVybiQxKHN0cmluZywgcGF0dGVybikge1xuICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuKS50ZXN0KHN0cmluZyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0VHJhbnNsYXRlKHRlbXBsYXRlLCByZXBsYWNlbWVudHMpIHtcbiAgcmVwbGFjZW1lbnRzID0gcmVwbGFjZW1lbnRzIHx8IHt9O1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgveyhbXn1dKyl9L2csIGZ1bmN0aW9uIChfLCBrZXkpIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2tleV0gfHwgJ3snICsga2V5ICsgJ30nO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBjb25kaXRpb25zLCByZW1vdmUgcHJvcGVydGllcyBmcm9tIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZnVuY3Rpb24gYXBwbHlDb25kaXRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZSkge1xuICBjb25zdCB7XG4gICAgcHJvcGVydGllc1xuICB9ID0gZWxlbWVudFRlbXBsYXRlO1xuICBjb25zdCBmaWx0ZXJlZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmZpbHRlcihwcm9wZXJ0eSA9PiB7XG4gICAgcmV0dXJuIGlzUHJvcGVydHlBbGxvd2VkKGVsZW1lbnQsIHByb3BlcnR5KSAmJiBpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCBwcm9wZXJ0eSk7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLmVsZW1lbnRUZW1wbGF0ZSxcbiAgICBwcm9wZXJ0aWVzOiBmaWx0ZXJlZFByb3BlcnRpZXNcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIHByb3BlcnRpZXMsIHByb3BlcnR5KSB7XG4gIGNvbnN0IHtcbiAgICBjb25kaXRpb25cbiAgfSA9IHByb3BlcnR5O1xuXG4gIC8vIElmIG5vIGNvbmRpdGlvbiBpcyBkZWZpbmVkLCByZXR1cm4gdHJ1ZS5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIG11bHRpcGxlIChcImFuZFwiKSBjb25kaXRpb25zXG4gIGlmIChjb25kaXRpb24uYWxsTWF0Y2gpIHtcbiAgICBjb25zdCBjb25kaXRpb25zID0gY29uZGl0aW9uLmFsbE1hdGNoO1xuICAgIHJldHVybiBjb25kaXRpb25zLmV2ZXJ5KGNvbmRpdGlvbiA9PiBpc1NpbXBsZUNvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCBjb25kaXRpb24pKTtcbiAgfVxuXG4gIC8vIHNpbmdsZSBjb25kaXRpb25cbiAgcmV0dXJuIGlzU2ltcGxlQ29uZGl0aW9uTWV0KGVsZW1lbnQsIHByb3BlcnRpZXMsIGNvbmRpdGlvbik7XG59XG5mdW5jdGlvbiBpc1NpbXBsZUNvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCBjb25kaXRpb24pIHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIGVxdWFscyxcbiAgICBvbmVPZixcbiAgICBpc0FjdGl2ZVxuICB9ID0gY29uZGl0aW9uO1xuICBpZiAodHlwZW9mIGlzQWN0aXZlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHJlbGF0ZWRDb25kaXRpb24gPSBwcm9wZXJ0aWVzLmZpbmQocCA9PiBwLmlkID09PSBwcm9wZXJ0eSk7XG4gICAgaWYgKCFyZWxhdGVkQ29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gIWlzQWN0aXZlO1xuICAgIH1cbiAgICByZXR1cm4gaXNBY3RpdmUgPyBpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCByZWxhdGVkQ29uZGl0aW9uKSA6ICFpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCByZWxhdGVkQ29uZGl0aW9uKTtcbiAgfVxuICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0VmFsdWUoZWxlbWVudCwgcHJvcGVydGllcywgcHJvcGVydHkpO1xuICBpZiAoaGFzUHJvcGVydHkoY29uZGl0aW9uLCAnZXF1YWxzJykpIHtcbiAgICByZXR1cm4gcHJvcGVydHlWYWx1ZSA9PT0gZXF1YWxzO1xuICB9XG4gIGlmIChvbmVPZikge1xuICAgIHJldHVybiBvbmVPZi5pbmNsdWRlcyhwcm9wZXJ0eVZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZShlbGVtZW50LCBwcm9wZXJ0aWVzLCBwcm9wZXJ0eUlkKSB7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllcy5maW5kKHAgPT4gcC5pZCA9PT0gcHJvcGVydHlJZCk7XG4gIGlmICghcHJvcGVydHkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpO1xufVxuZnVuY3Rpb24gaXNQcm9wZXJ0eUFsbG93ZWQoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCB7XG4gICAgdHlwZVxuICB9ID0gYmluZGluZztcbiAgaWYgKHR5cGUgPT09ICdicG1uOk1lc3NhZ2UjemVlYmU6c3Vic2NyaXB0aW9uI3Byb3BlcnR5JyAmJiBiaW5kaW5nLm5hbWUgPT09ICdjb3JyZWxhdGlvbktleScgJiYgaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50LnBhcmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIGtleSkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cblxuY2xhc3MgVGVtcGxhdGVFbGVtZW50RmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKGJwbW5GYWN0b3J5LCBlbGVtZW50RmFjdG9yeSkge1xuICAgIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gICAgdGhpcy5fZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcbiAgICB0aGlzLl9wcm92aWRlcnMgPSB7XG4gICAgICBbUFJPUEVSVFlfVFlQRSQxXTogUHJvcGVydHlCaW5kaW5nUHJvdmlkZXIsXG4gICAgICBbWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRV06IFRhc2tEZWZpbml0aW9uVHlwZUJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtaRUVCRV9UQVNLX0RFRklOSVRJT05dOiBUYXNrRGVmaW5pdGlvblR5cGVCaW5kaW5nUHJvdmlkZXIsXG4gICAgICBbWkVCQkVfUFJPUEVSVFlfVFlQRV06IFplZWJlUHJvcGVydGllc1Byb3ZpZGVyLFxuICAgICAgW1pFQkJFX0lOUFVUX1RZUEVdOiBJbnB1dEJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtaRUVCRV9PVVRQVVRfVFlQRV06IE91dHB1dEJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtaRUVCRV9UQVNLX0hFQURFUl9UWVBFXTogVGFza0hlYWRlckJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtNRVNTQUdFX1BST1BFUlRZX1RZUEVdOiBNZXNzYWdlUHJvcGVydHlCaW5kaW5nUHJvdmlkZXIsXG4gICAgICBbTUVTU0FHRV9aRUVCRV9TVUJTQ1JJUFRJT05fUFJPUEVSVFlfVFlQRV06IE1lc3NhZ2VaZWViZVN1YnNjcmlwdGlvbkJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtaRUVCRV9DQUxMRURfRUxFTUVOVF06IENhbGxlZEVsZW1lbnRCaW5kaW5nUHJvdmlkZXJcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlbGVtZW50IGJhc2VkIG9uIGFuIGVsZW1lbnQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlfSB0ZW1wbGF0ZVxuICAgKiBAcmV0dXJucyB7ZGpzLm1vZGVsLkJhc2V9XG4gICAqL1xuICBjcmVhdGUodGVtcGxhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSA9IHRlbXBsYXRlO1xuXG4gICAgLy8gKDEpIGJhc2Ugc2hhcGVcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fY3JlYXRlU2hhcGUodGVtcGxhdGUpO1xuXG4gICAgLy8gKDIpIGFwcGx5IHRlbXBsYXRlXG4gICAgdGhpcy5fc2V0TW9kZWxlclRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlKTtcblxuICAgIC8vICgzKSBhcHBseSBpY29uXG4gICAgaWYgKGhhc0ljb24odGVtcGxhdGUpKSB7XG4gICAgICB0aGlzLl9zZXRNb2RlbGVyVGVtcGxhdGVJY29uKGVsZW1lbnQsIHRlbXBsYXRlKTtcbiAgICB9XG5cbiAgICAvLyAoNCkgYXBwbHkgcHJvcGVydGllc1xuICAgIHRoaXMuX2FwcGx5UHJvcGVydGllcyhlbGVtZW50LCBwcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBfY3JlYXRlU2hhcGUodGVtcGxhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcHBsaWVzVG8sXG4gICAgICBlbGVtZW50VHlwZSA9IHt9XG4gICAgfSA9IHRlbXBsYXRlO1xuICAgIGNvbnN0IGVsZW1lbnRGYWN0b3J5ID0gdGhpcy5fZWxlbWVudEZhY3Rvcnk7XG4gICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICB0eXBlOiBlbGVtZW50VHlwZS52YWx1ZSB8fCBhcHBsaWVzVG9bMF1cbiAgICB9O1xuXG4gICAgLy8gYXBwbHkgZXZlbnREZWZpbml0aW9uXG4gICAgaWYgKGVsZW1lbnRUeXBlLmV2ZW50RGVmaW5pdGlvbikge1xuICAgICAgYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZSA9IGVsZW1lbnRUeXBlLmV2ZW50RGVmaW5pdGlvbjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGF0dHJzKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBfZW5zdXJlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3Rvcnk7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0pO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgYnVzaW5lc3NPYmplY3Quc2V0KCdleHRlbnNpb25FbGVtZW50cycsIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzO1xuICB9XG4gIF9zZXRNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgdGVtcGxhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCxcbiAgICAgIHZlcnNpb25cbiAgICB9ID0gdGVtcGxhdGU7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBidXNpbmVzc09iamVjdC5zZXQoJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZScsIGlkKTtcbiAgICBidXNpbmVzc09iamVjdC5zZXQoJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZVZlcnNpb24nLCB2ZXJzaW9uKTtcbiAgfVxuICBfc2V0TW9kZWxlclRlbXBsYXRlSWNvbihlbGVtZW50LCB0ZW1wbGF0ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGljb25cbiAgICB9ID0gdGVtcGxhdGU7XG4gICAgY29uc3Qge1xuICAgICAgY29udGVudHNcbiAgICB9ID0gaWNvbjtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGJ1c2luZXNzT2JqZWN0LnNldCgnemVlYmU6bW9kZWxlclRlbXBsYXRlSWNvbicsIGNvbnRlbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBwcm9wZXJ0aWVzIHRvIGEgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IHByb3BlcnRpZXNcbiAgICovXG4gIF9hcHBseVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHByb2Nlc3NlZFByb3BlcnRpZXMgPSBbXTtcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4gdGhpcy5fYXBwbHlQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSwgcHJvcGVydGllcywgcHJvY2Vzc2VkUHJvcGVydGllcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgcHJvcGVydHkgYW5kIGl0cyBwYXJlbnQgcHJvcGVydGllcyB0byBhbiBlbGVtZW50IGJhc2VkIG9uIGNvbmRpdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gcHJvcGVydGllc1xuICAgKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IHByb2Nlc3NlZFByb3BlcnRpZXNcbiAgICovXG4gIF9hcHBseVByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5LCBwcm9wZXJ0aWVzLCBwcm9jZXNzZWRQcm9wZXJ0aWVzKSB7XG4gICAgLy8gc2tpcCBpZiBhbHJlYWR5IHByb2Nlc3NlZFxuICAgIGlmIChwcm9jZXNzZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3BlcnR5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IGRlcGVuZGFudCBwcm9wZXJ0eSBmaXJzdCBpZiBub3QgYWxyZWFkeSBhcHBsaWVkXG4gICAgY29uc3QgZGVwZW5kZW50UHJvcGVydGllcyA9IGZpbmREZXBlbmRlbnRQcm9wZXJ0aWVzKHByb3BlcnR5LCBwcm9wZXJ0aWVzKTtcbiAgICBkZXBlbmRlbnRQcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4gdGhpcy5fYXBwbHlQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSwgcHJvcGVydGllcywgcHJvY2Vzc2VkUHJvcGVydGllcykpO1xuXG4gICAgLy8gY2hlY2sgY29uZGl0aW9uIGFuZCBhcHBseSBwcm9wZXJ0eSBpZiBjb25kaXRpb24gaXMgbWV0XG4gICAgaWYgKGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIHByb3BlcnRpZXMsIHByb3BlcnR5KSkge1xuICAgICAgdGhpcy5fYmluZFByb3BlcnR5KHByb3BlcnR5LCBlbGVtZW50KTtcbiAgICB9XG4gICAgcHJvY2Vzc2VkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHByb3BlcnR5IHRvIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge2Rqcy5Nb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqL1xuICBfYmluZFByb3BlcnR5KHByb3BlcnR5LCBlbGVtZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB7XG4gICAgICB0eXBlOiBiaW5kaW5nVHlwZVxuICAgIH0gPSBiaW5kaW5nO1xuICAgIGNvbnN0IGJpbmRpbmdQcm92aWRlciA9IHRoaXMuX3Byb3ZpZGVyc1tiaW5kaW5nVHlwZV07XG4gICAgYmluZGluZ1Byb3ZpZGVyLmNyZWF0ZShlbGVtZW50LCB7XG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGJwbW5GYWN0b3J5OiB0aGlzLl9icG1uRmFjdG9yeVxuICAgIH0pO1xuICB9XG59XG5UZW1wbGF0ZUVsZW1lbnRGYWN0b3J5LiRpbmplY3QgPSBbJ2JwbW5GYWN0b3J5JywgJ2VsZW1lbnRGYWN0b3J5J107XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGhhc0ljb24odGVtcGxhdGUpIHtcbiAgY29uc3Qge1xuICAgIGljb25cbiAgfSA9IHRlbXBsYXRlO1xuICByZXR1cm4gISEoaWNvbiAmJiBpY29uLmNvbnRlbnRzKTtcbn1cbmZ1bmN0aW9uIGZpbmREZXBlbmRlbnRQcm9wZXJ0aWVzKHByb3BlcnR5LCBwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHtcbiAgICBjb25kaXRpb25cbiAgfSA9IHByb3BlcnR5O1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBkZXBlbmRlbnRQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ5QnlJZChwcm9wZXJ0aWVzLCBjb25kaXRpb24ucHJvcGVydHkpO1xuICBpZiAoZGVwZW5kZW50UHJvcGVydHkpIHtcbiAgICByZXR1cm4gW2RlcGVuZGVudFByb3BlcnR5XTtcbiAgfVxuICByZXR1cm4gW107XG59XG5mdW5jdGlvbiBmaW5kUHJvcGVyeUJ5SWQocHJvcGVydGllcywgaWQpIHtcbiAgcmV0dXJuIGZpbmQocHJvcGVydGllcywgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5LmlkID09PSBpZDtcbiAgfSk7XG59XG5cbnZhciBjcmVhdGVNb2R1bGUgPSB7XG4gIF9faW5pdF9fOiBbJ3RlbXBsYXRlRWxlbWVudEZhY3RvcnknXSxcbiAgdGVtcGxhdGVFbGVtZW50RmFjdG9yeTogWyd0eXBlJywgVGVtcGxhdGVFbGVtZW50RmFjdG9yeV1cbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBjb25kaXRpb25zIG9mIGFuIGVsZW1lbnQgdGVtcGxhdGUgYW5kIHNldHMvcmVzZXRzIHRoZVxuICogY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIG9uIHRoZSBlbGVtZW50LlxuICovXG5jbGFzcyBDb25kaXRpb25hbEJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IoZXZlbnRCdXMsIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjaywgYnBtbkZhY3RvcnksIGluamVjdG9yKSB7XG4gICAgc3VwZXIoZXZlbnRCdXMpO1xuICAgIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gICAgdGhpcy5fZWxlbWVudFRlbXBsYXRlcyA9IGVsZW1lbnRUZW1wbGF0ZXM7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xuICAgIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcblxuICAgIC8vICgxKSBzYXZlIHByZS1jb25kaXRpb25hbCBzdGF0ZSBiZWZvcmUgdXBkYXRpbmcgYSBwcm9wZXJ0eVxuICAgIHRoaXMucHJlRXhlY3V0ZShbJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCAnZWxlbWVudC5tb3ZlJ10sIHRoaXMuX3NhdmVDb25kaXRpb25hbFN0YXRlLCB0cnVlLCB0aGlzKTtcblxuICAgIC8vICgyKSBjaGVjayBpZiB3ZSBuZWVkIHRvIGFwcGx5IHBvc3QtY29uZGl0aW9uYWwgdXBkYXRlc1xuICAgIC8vXG4gICAgLy8gICBpZiBbYWRkaXRpb25hbCBiaW5kaW5ncyBhY3RpdmF0ZV0gdGhlblxuICAgIC8vICAgICAocmUtKXRyaWdnZXIgc2V0dGluZyB0aGUgdGVtcGxhdGVcbiAgICAvLyAgIGVsc2VcbiAgICAvLyAgICAgZWxzZSB3ZSdyZSBkb25lXG4gICAgLy9cbiAgICB0aGlzLnBvc3RFeGVjdXRlKFsnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsICdwcm9wZXJ0aWVzUGFuZWwuemVlYmUuY2hhbmdlVGVtcGxhdGUnLCAnZWxlbWVudC5tb3ZlJ10sIHRoaXMuX2FwcGx5Q29uZGl0aW9ucywgdHJ1ZSwgdGhpcyk7XG5cbiAgICAvLyAoMykgc2V0IGNvbmRpdGlvbnMgYmVmb3JlIGNoYW5naW5nIHRoZSB0ZW1wbGF0ZVxuICAgIHRoaXMucHJlRXhlY3V0ZShbJ3Byb3BlcnRpZXNQYW5lbC56ZWViZS5jaGFuZ2VUZW1wbGF0ZSddLCB0aGlzLl9lbnN1cmVDb25kaXRpb25hbCwgdHJ1ZSwgdGhpcyk7XG4gIH1cbiAgX3NhdmVDb25kaXRpb25hbFN0YXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50XG4gICAgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KTtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRleHQub2xkVGVtcGxhdGVXaXRoQ29uZGl0aW9ucyA9IGFwcGx5Q29uZGl0aW9ucyhlbGVtZW50LCB0ZW1wbGF0ZSk7XG4gIH1cbiAgX2FwcGx5Q29uZGl0aW9ucyhjb250ZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG5ld1RlbXBsYXRlLFxuICAgICAgb2xkVGVtcGxhdGVXaXRoQ29uZGl0aW9uc1xuICAgIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5fZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCk7XG5cbiAgICAvLyBuZXcgVGVtcGxhdGUgaXMgcGVyc2lzdGVkIGJlZm9yZSBhcHBseWluZyBkZWZhdWx0IHZhbHVlcyxcbiAgICAvLyBuZXcgY29uZGl0aW9ucyBtaWdodCBhcHBseSBhZnRlciB0aGUgZGVmYXVsdHMgYXJlIHByZXNlbnQuXG4gICAgY29uc3Qgb2xkVGVtcGxhdGUgPSBvbGRUZW1wbGF0ZVdpdGhDb25kaXRpb25zIHx8IG5ld1RlbXBsYXRlO1xuICAgIGlmICghdGVtcGxhdGUgfHwgIW9sZFRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld1RlbXBsYXRlV2l0aENvbmRpdGlvbnMgPSBhcHBseUNvbmRpdGlvbnMoZWxlbWVudCwgdGVtcGxhdGUpO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgbmV3IGJpbmRpbmdzIHdlcmUgYWN0aXZhdGVkXG4gICAgaWYgKCFoYXNEaWZmZXJlbnRQcm9wZXJ0eUJpbmRpbmdzKG5ld1RlbXBsYXRlV2l0aENvbmRpdGlvbnMsIG9sZFRlbXBsYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRvIGFub3RoZXIgcGFzcyB0byBhcHBseSBmdXJ0aGVyIGNvbmRpdGlvbmFsIGJpbmRpbmdzXG4gICAgLy8gbmV3VGVtcGxhdGUgd2lsbCBhbHdheXMgYmUgdGhlIG9yaWdpbmFsIHRlbXBsYXRlOyBpdCBpcyBmaWx0ZXJlZFxuICAgIC8vIGF0IGEgbGF0ZXIgc3RlcCAoMylcbiAgICBjb25zdCBjaGFuZ2VDb250ZXh0ID0ge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG5ld1RlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICAgIG9sZFRlbXBsYXRlXG4gICAgfTtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllc1BhbmVsLnplZWJlLmNoYW5nZVRlbXBsYXRlJywgY2hhbmdlQ29udGV4dCk7XG4gIH1cbiAgX2Vuc3VyZUNvbmRpdGlvbmFsKGNvbnRleHQpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGVcbiAgICB9ID0gY29udGV4dDtcbiAgICBpZiAoIW5ld1RlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIGNvbmRpdGlvbnMgYXJlIGFwcGxpZWQgYmVmb3JlIGNoYW5naW5nIHRoZSB0ZW1wbGF0ZS5cbiAgICAvLyBgbmV3VGVtcGxhdGVgIHdpbGwgYWx3YXlzIGJlIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS5cbiAgICBjb250ZXh0Lm5ld1RlbXBsYXRlID0gYXBwbHlDb25kaXRpb25zKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcbiAgfVxufVxuQ29uZGl0aW9uYWxCZWhhdmlvci4kaW5qZWN0ID0gWydldmVudEJ1cycsICdlbGVtZW50VGVtcGxhdGVzJywgJ2NvbW1hbmRTdGFjaycsICdicG1uRmFjdG9yeScsICdpbmplY3RvciddO1xuXG4vLyBoZWxwZXJzXG5cbmZ1bmN0aW9uIGhhc0RpZmZlcmVudFByb3BlcnR5QmluZGluZ3Moc291cmNlVGVtcGxhdGUsIHRhcmdldFRlbXBsYXRlKSB7XG4gIHJldHVybiBoYXNOZXdQcm9wZXJ0aWVzKHNvdXJjZVRlbXBsYXRlLCB0YXJnZXRUZW1wbGF0ZSkgfHwgaGFzUmVtb3ZlZFByb3BlcnRpZXMoc291cmNlVGVtcGxhdGUsIHRhcmdldFRlbXBsYXRlKTtcbn1cbmZ1bmN0aW9uIGhhc05ld1Byb3BlcnRpZXMoc291cmNlVGVtcGxhdGUsIHRhcmdldFRlbXBsYXRlKSB7XG4gIGxldCBwcm9wZXJ0aWVzID0gdGFyZ2V0VGVtcGxhdGUucHJvcGVydGllcztcbiAgcmV0dXJuIHByb3BlcnRpZXMuc29tZSh0YXJnZXRQcm9wID0+ICFzb3VyY2VUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbmQoc291cmNlUHJvcCA9PiBjb21wYXJlUHJvcHMoc291cmNlUHJvcCwgdGFyZ2V0UHJvcCkpKTtcbn1cbmZ1bmN0aW9uIGhhc1JlbW92ZWRQcm9wZXJ0aWVzKG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICBjb25zdCBvbGRQcm9wZXJ0aWVzID0gZ2V0TWlzc2luZ1Byb3BlcnRpZXMobmV3VGVtcGxhdGUsIG9sZFRlbXBsYXRlKTtcblxuICAvLyBlbnN1cmUgWE1MIHByb3BlcnRpZXMgYXJlIG1hbnRhaW5lZCBmb3IgcHJvcGVydGllcyB3aXRoXG4gIC8vIGRpZmZlcmVudCBjb25kaXRpb25zIGJ1dCBzYW1lIGJpbmRpbmdzXG4gIHJldHVybiBvbGRQcm9wZXJ0aWVzLnNvbWUocHJvcGVydHkgPT4gIWZpbmRQcm9wZXJ0eVdpdGhCaW5kaW5nKG5ld1RlbXBsYXRlLCBwcm9wZXJ0eSkpO1xufVxuZnVuY3Rpb24gZ2V0TWlzc2luZ1Byb3BlcnRpZXMoc291cmNlVGVtcGxhdGUsIHRhcmdldFRlbXBsYXRlKSB7XG4gIGxldCBwcm9wZXJ0aWVzID0gdGFyZ2V0VGVtcGxhdGUucHJvcGVydGllcztcbiAgcmV0dXJuIHByb3BlcnRpZXMuZmlsdGVyKHRhcmdldFByb3AgPT4gIXNvdXJjZVRlbXBsYXRlLnByb3BlcnRpZXMuZmluZChzb3VyY2VQcm9wID0+IGNvbXBhcmVQcm9wcyhzb3VyY2VQcm9wLCB0YXJnZXRQcm9wKSkpO1xufVxuZnVuY3Rpb24gY29tcGFyZVByb3BzKHNvdXJjZVByb3AsIHRhcmdldFByb3ApIHtcbiAgcmV0dXJuIGFyZUJpbmRpbmdzRXF1YWwoc291cmNlUHJvcC5iaW5kaW5nLCB0YXJnZXRQcm9wLmJpbmRpbmcpICYmIGVxdWFscyhzb3VyY2VQcm9wLmNvbmRpdGlvbiwgdGFyZ2V0UHJvcC5jb25kaXRpb24pO1xufVxuZnVuY3Rpb24gZmluZFByb3BlcnR5V2l0aEJpbmRpbmcodGVtcGxhdGUsIHByb3AxKSB7XG4gIHJldHVybiB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLnNvbWUocHJvcDIgPT4gYXJlQmluZGluZ3NFcXVhbChwcm9wMS5iaW5kaW5nLCBwcm9wMi5iaW5kaW5nKSk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVSZXBsYWNlciQxKGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuICAgIHJldHVybiBrZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIG9ialtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGFyZUJpbmRpbmdzRXF1YWwoYmluZGluZzEsIGJpbmRpbmcyKSB7XG4gIGJpbmRpbmcxID0gbm9ybWFsaXplQmluZGluZyhiaW5kaW5nMSk7XG4gIGJpbmRpbmcyID0gbm9ybWFsaXplQmluZGluZyhiaW5kaW5nMik7XG4gIHJldHVybiBlcXVhbHMoYmluZGluZzEsIGJpbmRpbmcyKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGRlcHJlY2F0ZWQgYmluZGluZyB0eXBlIHRvIG5ldyB0eXBlLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVCaW5kaW5nKGJpbmRpbmcpIHtcbiAgaWYgKGJpbmRpbmcudHlwZSA9PT0gWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5iaW5kaW5nLFxuICAgICAgdHlwZTogWkVFQkVfVEFTS19ERUZJTklUSU9OLFxuICAgICAgcHJvcGVydHk6ICd0eXBlJ1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGJpbmRpbmc7XG59XG5mdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSwgbm9ybWFsaXplUmVwbGFjZXIkMSkgPT09IEpTT04uc3RyaW5naWZ5KGIsIG5vcm1hbGl6ZVJlcGxhY2VyJDEpO1xufVxuXG4vKipcbiAqIFRoaXMgQmVoYXZpb3IgY2hlY2tzIGlmIHRoZSBuZXcgZWxlbWVudCdzIHR5cGUgaXMgaW5cbiAqIHRoZSBsaXN0IG9mIGVsZW1lbnRzIHRoZSB0ZW1wbGF0ZSBhcHBsaWVzIHRvIGFuZCB1bmxpbmtzXG4gKiBpdCBpZiBub3QuXG4gKi9cbmxldCBSZXBsYWNlQmVoYXZpb3IkMSA9IGNsYXNzIFJlcGxhY2VCZWhhdmlvciBleHRlbmRzIENvbW1hbmRJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRUZW1wbGF0ZXMsIGluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IuZ2V0KCdldmVudEJ1cycpKTtcbiAgICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUucmVwbGFjZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBvbGRCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG9sZFNoYXBlKSxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlLFxuICAgICAgICBuZXdCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NoYXBlKTtcbiAgICAgIGlmICghb2xkQm8ubW9kZWxlclRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gbmV3Qm8ubW9kZWxlclRlbXBsYXRlO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IG5ld0JvLm1vZGVsZXJUZW1wbGF0ZVZlcnNpb247XG4gICAgICBjb25zdCBlbGVtZW50VGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldCh0ZW1wbGF0ZSwgdmVyc2lvbik7XG4gICAgICBpZiAoIWVsZW1lbnRUZW1wbGF0ZSkge1xuICAgICAgICBlbGVtZW50VGVtcGxhdGVzLnVubGlua1RlbXBsYXRlKG5ld1NoYXBlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBsaWVzVG8sXG4gICAgICAgIGVsZW1lbnRUeXBlXG4gICAgICB9ID0gZWxlbWVudFRlbXBsYXRlO1xuICAgICAgaWYgKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGlmICghaXMobmV3U2hhcGUsIGVsZW1lbnRUeXBlLnZhbHVlKSB8fCBzaG91bGRVbmxpbmtFdmVudChuZXdTaGFwZSwgZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShuZXdTaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYWxsb3dlZCA9IGFwcGxpZXNUby5yZWR1Y2UoKGFsbG93ZWQsIHR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIGFsbG93ZWQgfHwgaXMobmV3Qm8sIHR5cGUpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgaWYgKCFhbGxvd2VkKSB7XG4gICAgICAgIGVsZW1lbnRUZW1wbGF0ZXMudW5saW5rVGVtcGxhdGUobmV3U2hhcGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuUmVwbGFjZUJlaGF2aW9yJDEuJGluamVjdCA9IFsnZWxlbWVudFRlbXBsYXRlcycsICdpbmplY3RvciddO1xuZnVuY3Rpb24gc2hvdWxkVW5saW5rRXZlbnQobmV3U2hhcGUsIGVsZW1lbnRUeXBlKSB7XG4gIGlmICghaXMobmV3U2hhcGUsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qge1xuICAgICAgZXZlbnREZWZpbml0aW9uXG4gICAgfSA9IGVsZW1lbnRUeXBlLFxuICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QobmV3U2hhcGUpLFxuICAgIGV2ZW50RGVmaW5pdGlvbnMgPSBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKTtcbiAgaWYgKCFldmVudERlZmluaXRpb24pIHtcbiAgICByZXR1cm4gZXZlbnREZWZpbml0aW9ucy5sZW5ndGggIT09IDA7XG4gIH1cbiAgcmV0dXJuICFpcyhldmVudERlZmluaXRpb25zWzBdLCBldmVudERlZmluaXRpb24pO1xufVxuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBvcmlnaW5hbCBvcmRlciBvZiB0aGUgdGVtcGxhdGUgcHJvcGVydGllc1xuICogb24gdGhlIG1vZGRsZSBlbGVtZW50LlxuICovXG5jbGFzcyBVcGRhdGVUZW1wbGF0ZVByb3BlcnRpZXNPcmRlciBleHRlbmRzIENvbW1hbmRJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2ssIGJwbW5GYWN0b3J5KSB7XG4gICAgc3VwZXIoZXZlbnRCdXMpO1xuICAgIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gICAgdGhpcy5fZWxlbWVudFRlbXBsYXRlcyA9IGVsZW1lbnRUZW1wbGF0ZXM7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xuICAgIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gICAgdGhpcy5wb3N0RXhlY3V0ZShbJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnXSwgdGhpcy5fdXBkYXRlUHJvcGVydGllc09yZGVyLCB0cnVlLCB0aGlzKTtcbiAgfVxuICBfdXBkYXRlUHJvcGVydGllc09yZGVyKGNvbnRleHQpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50XG4gICAgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRlbXBsYXRlUHJvcGVydGllcyA9IGFwcGx5Q29uZGl0aW9ucyhlbGVtZW50LCB0ZW1wbGF0ZSkucHJvcGVydGllcztcblxuICAgIC8vIHplZWJlOlByb3BlcnR5XG4gICAgY29uc3QgemVlYmVQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6UHJvcGVydGllcycpO1xuICAgIGlmICh6ZWViZVByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVplZWJlUHJvcGVydGllc09yZGVyKHplZWJlUHJvcGVydGllcywgdGVtcGxhdGVQcm9wZXJ0aWVzLCBjb21tYW5kcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgLy8gemVlYmU6SW9NYXBwaW5nXG4gICAgY29uc3QgaW9NYXBwaW5nID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6SW9NYXBwaW5nJyk7XG4gICAgaWYgKGlvTWFwcGluZykge1xuICAgICAgLy8gemVlYmU6SW5wdXRcbiAgICAgIHRoaXMuX3VwZGF0ZUlucHV0T3JkZXIoaW9NYXBwaW5nLCB0ZW1wbGF0ZVByb3BlcnRpZXMsIGNvbW1hbmRzLCBjb250ZXh0KTtcblxuICAgICAgLy8gemVlYmU6T3V0cHV0XG4gICAgICB0aGlzLl91cGRhdGVPdXRwdXRPcmRlcihpb01hcHBpbmcsIHRlbXBsYXRlUHJvcGVydGllcywgY29tbWFuZHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8vIHplZWJlOlRhc2tIZWFkZXJzXG4gICAgY29uc3QgdGFza0hlYWRlcnMgPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrSGVhZGVycycpO1xuICAgIGlmICh0YXNrSGVhZGVycykge1xuICAgICAgdGhpcy5fdXBkYXRlVGFza0hlYWRlcnNPcmRlcih0YXNrSGVhZGVycywgdGVtcGxhdGVQcm9wZXJ0aWVzLCBjb21tYW5kcywgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNvbW1hbmRzVG9FeGVjdXRlID0gY29tbWFuZHMuZmlsdGVyKGNvbW1hbmQgPT4gY29tbWFuZCAhPT0gbnVsbCk7XG4gICAgICBjb21tYW5kc1RvRXhlY3V0ZS5sZW5ndGggJiYgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQtdGVtcGxhdGVzLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kc1RvRXhlY3V0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIF91cGRhdGVaZWViZVByb3BlcnRpZXNPcmRlcih6ZWViZVByb3BlcnRpZXMsIHRlbXBsYXRlUHJvcGVydGllcywgY29tbWFuZHMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBmaW5kSW5kZXggPSAocHJvcGVydGllcywgcHJvcGVydHlUb0ZpbmQpID0+IHByb3BlcnRpZXMuZmluZEluZGV4KHByb3AgPT4gcHJvcC5iaW5kaW5nLnR5cGUgPT0gJ3plZWJlOnByb3BlcnR5JyAmJiBwcm9wLmJpbmRpbmcubmFtZSA9PT0gcHJvcGVydHlUb0ZpbmQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJyk7XG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuICAgIGxldCBuZXdQcm9wZXJ0aWVzT3JkZXIgPSBbLi4ucHJvcGVydGllc107XG4gICAgc29ydFByb3BlcnRpZXMobmV3UHJvcGVydGllc09yZGVyLCBmaW5kSW5kZXgsIHRlbXBsYXRlUHJvcGVydGllcyk7XG4gICAgaWYgKCFhcnJheUVxdWFscyhuZXdQcm9wZXJ0aWVzT3JkZXIsIHByb3BlcnRpZXMpKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogemVlYmVQcm9wZXJ0aWVzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXNPcmRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVJbnB1dE9yZGVyKGlvTWFwcGluZywgdGVtcGxhdGVQcm9wZXJ0aWVzLCBjb21tYW5kcywgY29udGV4dCkge1xuICAgIGNvbnN0IGZpbmRJbmRleCA9IChwcm9wZXJ0aWVzLCBwcm9wZXJ0eVRvRmluZCkgPT4gcHJvcGVydGllcy5maW5kSW5kZXgocHJvcCA9PiBwcm9wLmJpbmRpbmcudHlwZSA9PSAnemVlYmU6aW5wdXQnICYmIHByb3AuYmluZGluZy5uYW1lID09PSBwcm9wZXJ0eVRvRmluZC5nZXQoJ3RhcmdldCcpKTtcbiAgICBjb25zdCBpbnB1dFBhcmFtZXRlcnMgPSBpb01hcHBpbmcuZ2V0KCdpbnB1dFBhcmFtZXRlcnMnKTtcbiAgICBpZiAoaW5wdXRQYXJhbWV0ZXJzLmxlbmd0aCA8IDEpIHJldHVybjtcbiAgICBsZXQgbmV3SW5wdXRPcmRlciA9IFsuLi5pbnB1dFBhcmFtZXRlcnNdO1xuICAgIHNvcnRQcm9wZXJ0aWVzKG5ld0lucHV0T3JkZXIsIGZpbmRJbmRleCwgdGVtcGxhdGVQcm9wZXJ0aWVzKTtcbiAgICBpZiAoIWFycmF5RXF1YWxzKG5ld0lucHV0T3JkZXIsIGlucHV0UGFyYW1ldGVycykpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBpb01hcHBpbmcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiBuZXdJbnB1dE9yZGVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgX3VwZGF0ZU91dHB1dE9yZGVyKGlvTWFwcGluZywgdGVtcGxhdGVQcm9wZXJ0aWVzLCBjb21tYW5kcywgY29udGV4dCkge1xuICAgIGNvbnN0IGZpbmRJbmRleCA9IChwcm9wZXJ0aWVzLCBwcm9wZXJ0eVRvRmluZCkgPT4gcHJvcGVydGllcy5maW5kSW5kZXgocHJvcCA9PiBwcm9wLmJpbmRpbmcudHlwZSA9PSAnemVlYmU6b3V0cHV0JyAmJiBwcm9wLmJpbmRpbmcuc291cmNlID09PSBwcm9wZXJ0eVRvRmluZC5nZXQoJ3NvdXJjZScpKTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbWV0ZXJzID0gaW9NYXBwaW5nLmdldCgnb3V0cHV0UGFyYW1ldGVycycpO1xuICAgIGlmIChvdXRwdXRQYXJhbWV0ZXJzLmxlbmd0aCA8IDEpIHJldHVybjtcbiAgICBsZXQgbmV3T3V0cHV0T3JkZXIgPSBbLi4ub3V0cHV0UGFyYW1ldGVyc107XG4gICAgc29ydFByb3BlcnRpZXMobmV3T3V0cHV0T3JkZXIsIGZpbmRJbmRleCwgdGVtcGxhdGVQcm9wZXJ0aWVzKTtcbiAgICBpZiAoIWFycmF5RXF1YWxzKG5ld091dHB1dE9yZGVyLCBvdXRwdXRQYXJhbWV0ZXJzKSkge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlvTWFwcGluZyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBvdXRwdXRQYXJhbWV0ZXJzOiBuZXdPdXRwdXRPcmRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVUYXNrSGVhZGVyc09yZGVyKHRhc2tIZWFkZXJzLCB0ZW1wbGF0ZVByb3BlcnRpZXMsIGNvbW1hbmRzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgZmluZEluZGV4ID0gKHByb3BlcnRpZXMsIHByb3BlcnR5VG9GaW5kKSA9PiBwcm9wZXJ0aWVzLmZpbmRJbmRleChwcm9wID0+IHByb3AuYmluZGluZy50eXBlID09ICd6ZWViZTp0YXNrSGVhZGVyJyAmJiBwcm9wLmJpbmRpbmcua2V5ID09PSBwcm9wZXJ0eVRvRmluZC5nZXQoJ2tleScpKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGFza0hlYWRlcnMuZ2V0KCd6ZWViZTp2YWx1ZXMnKTtcbiAgICBpZiAoaGVhZGVycy5sZW5ndGggPCAxKSByZXR1cm47XG4gICAgbGV0IG5ld0hlYWRlcnNPcmRlciA9IFsuLi5oZWFkZXJzXTtcbiAgICBzb3J0UHJvcGVydGllcyhuZXdIZWFkZXJzT3JkZXIsIGZpbmRJbmRleCwgdGVtcGxhdGVQcm9wZXJ0aWVzKTtcbiAgICBpZiAoIWFycmF5RXF1YWxzKG5ld0hlYWRlcnNPcmRlciwgaGVhZGVycykpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrSGVhZGVycyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IG5ld0hlYWRlcnNPcmRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5VcGRhdGVUZW1wbGF0ZVByb3BlcnRpZXNPcmRlci4kaW5qZWN0ID0gWydldmVudEJ1cycsICdlbGVtZW50VGVtcGxhdGVzJywgJ2NvbW1hbmRTdGFjaycsICdicG1uRmFjdG9yeSddO1xuXG4vLyBoZWxwZXJzXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuICAgIHJldHVybiBrZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIG9ialtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIG9iamVjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShhLCBub3JtYWxpemVSZXBsYWNlcikgPT09IEpTT04uc3RyaW5naWZ5KGIsIG5vcm1hbGl6ZVJlcGxhY2VyKTtcbn1cbmZ1bmN0aW9uIGFycmF5RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGEuZXZlcnkoKGVsZW1lbnQsIGlkeCkgPT4gb2JqZWN0RXF1YWxzKGVsZW1lbnQsIGJbaWR4XSkpO1xufVxuZnVuY3Rpb24gc29ydFByb3BlcnRpZXMoYXJyYXksIGZpbmRJbmRleCwgdGVtcGxhdGVQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBhcnJheS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYUluZGV4ID0gZmluZEluZGV4KHRlbXBsYXRlUHJvcGVydGllcywgYSk7XG4gICAgY29uc3QgYkluZGV4ID0gZmluZEluZGV4KHRlbXBsYXRlUHJvcGVydGllcywgYik7XG4gICAgcmV0dXJuIGFJbmRleCAtIGJJbmRleDtcbiAgfSk7XG59XG5cbi8qKlxuICogSGFuZGxlcyByZWZlcmVuY2VkIGVsZW1lbnRzLlxuICovXG5jbGFzcyBSZWZlcmVuY2VkRWxlbWVudEJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IoZXZlbnRCdXMsIGVsZW1lbnRUZW1wbGF0ZXMsIG1vZGVsaW5nLCBpbmplY3RvciwgbW9kZGxlQ29weSwgYnBtbkZhY3RvcnkpIHtcbiAgICBzdXBlcihldmVudEJ1cyk7XG4gICAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgdGhpcy5wb3N0RXhlY3V0ZWQoWydlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJ10sIHRoaXMuX2hhbmRsZVByb3BlcnRpZXNVcGRhdGUsIHRydWUsIHRoaXMpO1xuICAgIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5yZXBsYWNlJywgdGhpcy5faGFuZGxlUmVwbGFjZW1lbnQsIHRydWUsIHRoaXMpO1xuICAgIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5kZWxldGUnLCB0aGlzLl9oYW5kbGVSZW1vdmFsLCB0cnVlLCB0aGlzKTtcblxuICAgIC8vIGNvcHkgdGVtcGxhdGVkIHJvb3QgZWxlbWVudCB3aGVuIHBhc3RpbmdcbiAgICBldmVudEJ1cy5vbignY29weVBhc3RlLnBhc3RlRWxlbWVudCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlZmVyZW5jZWRSb290RWxlbWVudFxuICAgICAgfSA9IGNvbnRleHQuZGVzY3JpcHRvcjtcbiAgICAgIGlmICghcmVmZXJlbmNlZFJvb3RFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghZ2V0VGVtcGxhdGVJZCQxKHJlZmVyZW5jZWRSb290RWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29udGV4dC5kZXNjcmlwdG9yLnJlZmVyZW5jZWRSb290RWxlbWVudCA9IG1vZGRsZUNvcHkuY29weUVsZW1lbnQocmVmZXJlbmNlZFJvb3RFbGVtZW50LCBicG1uRmFjdG9yeS5jcmVhdGUocmVmZXJlbmNlZFJvb3RFbGVtZW50LiR0eXBlKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5saW5rIHJlZmVyZW5jZWQgZWxlbWVudCB3aGVuIHRlbXBsYXRlIGlzIHVubGlua2VkLlxuICAgKi9cbiAgX2hhbmRsZVByb3BlcnRpZXNVcGRhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSA9IGNvbnRleHQ7XG4gICAgaWYgKCFjYW5IYXZlUmVmZXJlbmNlZEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCEoVEVNUExBVEVfSURfQVRUUiQxIGluIHByb3BlcnRpZXMpIHx8IGlzU3RyaW5nKHByb3BlcnRpZXNbVEVNUExBVEVfSURfQVRUUiQxXSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCBtZXNzYWdlID0gZmluZE1lc3NhZ2UoYm8pO1xuICAgIGlmIChtZXNzYWdlICYmIGdldFRlbXBsYXRlSWQkMShtZXNzYWdlKSkge1xuICAgICAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBtZXNzYWdlLCB7XG4gICAgICAgIFtURU1QTEFURV9JRF9BVFRSJDFdOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHJlZmVyZW5jZWQgZWxlbWVudCB3aGVuIHRlbXBsYXRlIGlzIHJlbW92ZWQuXG4gICAqIEtlZXAgcmVmZXJlbmNlZCBlbGVtZW50IHdoZW4gdGVtcGxhdGUgaXMgcmVwbGFjZWQuXG4gICAqL1xuICBfaGFuZGxlUmVwbGFjZW1lbnQoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9sZFNoYXBlLFxuICAgICAgbmV3U2hhcGVcbiAgICB9ID0gY29udGV4dDtcbiAgICBjb25zdCBvbGRUZW1wbGF0ZSA9IGdldFRlbXBsYXRlSWQkMShvbGRTaGFwZSksXG4gICAgICBuZXdUZW1wbGF0ZSA9IGdldFRlbXBsYXRlSWQkMShuZXdTaGFwZSk7XG4gICAgaWYgKCFjYW5IYXZlUmVmZXJlbmNlZEVsZW1lbnQob2xkU2hhcGUpIHx8ICFvbGRUZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KG9sZFNoYXBlKTtcbiAgICBjb25zdCBtZXNzYWdlID0gZmluZE1lc3NhZ2UoYm8pO1xuICAgIGlmICghbWVzc2FnZSB8fCAhZ2V0VGVtcGxhdGVJZCQxKG1lc3NhZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghY2FuSGF2ZVJlZmVyZW5jZWRFbGVtZW50KG5ld1NoYXBlKSB8fCAhbmV3VGVtcGxhdGUpIHtcbiAgICAgIHJlbW92ZVJvb3RFbGVtZW50KG1lc3NhZ2UsIHRoaXMuX2luamVjdG9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWRkTWVzc2FnZShuZXdTaGFwZSwgbWVzc2FnZSk7XG4gIH1cbiAgX2hhbmRsZVJlbW92YWwoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNoYXBlXG4gICAgfSA9IGNvbnRleHQ7XG4gICAgaWYgKGlzTGFiZWwoc2hhcGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghY2FuSGF2ZVJlZmVyZW5jZWRFbGVtZW50KHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWdldFRlbXBsYXRlSWQkMShzaGFwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XG4gICAgY29uc3QgbWVzc2FnZSA9IGZpbmRNZXNzYWdlKGJvKTtcbiAgICBpZiAobWVzc2FnZSAmJiBnZXRUZW1wbGF0ZUlkJDEobWVzc2FnZSkpIHtcbiAgICAgIHJlbW92ZVJvb3RFbGVtZW50KG1lc3NhZ2UsIHRoaXMuX2luamVjdG9yKTtcbiAgICB9XG4gIH1cbiAgX2FkZE1lc3NhZ2UoZWxlbWVudCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGJvID0gZ2V0UmVmZXJyaW5nRWxlbWVudChlbGVtZW50KTtcbiAgICB0aGlzLl9tb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGJvLCB7XG4gICAgICAnbWVzc2FnZVJlZic6IG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxufVxuUmVmZXJlbmNlZEVsZW1lbnRCZWhhdmlvci4kaW5qZWN0ID0gWydldmVudEJ1cycsICdlbGVtZW50VGVtcGxhdGVzJywgJ21vZGVsaW5nJywgJ2luamVjdG9yJywgJ21vZGRsZUNvcHknLCAnYnBtbkZhY3RvcnknXTtcbmZ1bmN0aW9uIGNhbkhhdmVSZWZlcmVuY2VkRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBpc0FueShlbGVtZW50LCBbJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycsICdicG1uOkV2ZW50J10pO1xufVxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdsYWJlbCc7XG59XG5cbi8qKlxuICogSGFuZGxlcyBnZW5lcmF0ZWQgdmFsdWUgcHJvcGVydGllcy5cbiAqL1xuY2xhc3MgR2VuZXJhdGVkVmFsdWVCZWhhdmlvciBleHRlbmRzIENvbW1hbmRJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzLCBtb2RlbGluZywgY29tbWFuZFN0YWNrLCBicG1uRmFjdG9yeSkge1xuICAgIHN1cGVyKGV2ZW50QnVzKTtcbiAgICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICAgIHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMgPSBlbGVtZW50VGVtcGxhdGVzO1xuICAgIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gICAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBjb250ZXh0ID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlO1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KTtcbiAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2VuZXJhdGVkUHJvcHMgPSB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAuZ2VuZXJhdGVkVmFsdWUpO1xuICAgICAgZ2VuZXJhdGVkUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgaWYgKCFnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHApO1xuICAgICAgICBzZXRQcm9wZXJ0eVZhbHVlKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHAsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRydWUpO1xuICB9XG59XG5HZW5lcmF0ZWRWYWx1ZUJlaGF2aW9yLiRpbmplY3QgPSBbJ2V2ZW50QnVzJywgJ2VsZW1lbnRUZW1wbGF0ZXMnLCAnbW9kZWxpbmcnLCAnY29tbWFuZFN0YWNrJywgJ2JwbW5GYWN0b3J5J107XG5cbi8qKlxuICogRW5mb3JjZXMgbm8gdmFyaWFibGUgcHJvcGFnYXRpb24gZm9yIHRlbXBsYXRlZCBjYWxsIGFjdGl2aXRpZXMuXG4gKi9cbmNsYXNzIENhbGxlZEVsZW1lbnRCZWhhdmlvciBleHRlbmRzIENvbW1hbmRJbnRlcmNlcHRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0geyp9IGV2ZW50QnVzXG4gICAqIEBwYXJhbSB7Kn0gbW9kZWxpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL0VsZW1lbnRUZW1wbGF0ZXMnKS5kZWZhdWx0fSBlbGVtZW50VGVtcGxhdGVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihldmVudEJ1cywgbW9kZWxpbmcsIGVsZW1lbnRUZW1wbGF0ZXMpIHtcbiAgICBzdXBlcihldmVudEJ1cyk7XG4gICAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgICB0aGlzLnBvc3RFeGVjdXRlZChbJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnXSwgdGhpcy5fZW5zdXJlTm9Qcm9wYWdhdGlvbiwgdHJ1ZSwgdGhpcyk7XG4gIH1cbiAgX2Vuc3VyZU5vUHJvcGFnYXRpb24oY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnRcbiAgICB9ID0gY29udGV4dDtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMuZ2V0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2FsbGVkRWxlbWVudCA9IGZpbmRFeHRlbnNpb24kMShlbGVtZW50LCAnemVlYmU6Q2FsbGVkRWxlbWVudCcpO1xuICAgIGlmICghY2FsbGVkRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIFsncHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXMnLCAncHJvcGFnYXRlQWxsUGFyZW50VmFyaWFibGVzJ10pIHtcbiAgICAgIGlmIChjYWxsZWRFbGVtZW50LmdldChwcm9wZXJ0eSkgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX21vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgY2FsbGVkRWxlbWVudCwge1xuICAgICAgICAgIFtwcm9wZXJ0eV06IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuQ2FsbGVkRWxlbWVudEJlaGF2aW9yLiRpbmplY3QgPSBbJ2V2ZW50QnVzJywgJ21vZGVsaW5nJywgJ2VsZW1lbnRUZW1wbGF0ZXMnXTtcblxudmFyIGJlaGF2aW9yTW9kdWxlJDEgPSB7XG4gIF9faW5pdF9fOiBbJ2VsZW1lbnRUZW1wbGF0ZXNSZXBsYWNlQmVoYXZpb3InLCAnZWxlbWVudFRlbXBsYXRlc0NvbmRpdGlvbmFsQmVoYXZpb3InLCAnZWxlbWVudFRlbXBsYXRlc0dlbmVyYXRlZFZhbHVlQmVoYXZpb3InLCAnZWxlbWVudFRlbXBsYXRlc1JlZmVyZW5jZWRFbGVtZW50QmVoYXZpb3InLCAnZWxlbWVudFRlbXBsYXRlc1VwZGF0ZVByb3BlcnRpZXNPcmRlckJlaGF2aW9yJywgJ2VsZW1lbnRUZW1wbGF0ZXNDYWxsZWRFbGVtZW50QmVoYXZpb3InXSxcbiAgZWxlbWVudFRlbXBsYXRlc1JlcGxhY2VCZWhhdmlvcjogWyd0eXBlJywgUmVwbGFjZUJlaGF2aW9yJDFdLFxuICBlbGVtZW50VGVtcGxhdGVzQ29uZGl0aW9uYWxCZWhhdmlvcjogWyd0eXBlJywgQ29uZGl0aW9uYWxCZWhhdmlvcl0sXG4gIGVsZW1lbnRUZW1wbGF0ZXNHZW5lcmF0ZWRWYWx1ZUJlaGF2aW9yOiBbJ3R5cGUnLCBHZW5lcmF0ZWRWYWx1ZUJlaGF2aW9yXSxcbiAgZWxlbWVudFRlbXBsYXRlc1JlZmVyZW5jZWRFbGVtZW50QmVoYXZpb3I6IFsndHlwZScsIFJlZmVyZW5jZWRFbGVtZW50QmVoYXZpb3JdLFxuICBlbGVtZW50VGVtcGxhdGVzVXBkYXRlUHJvcGVydGllc09yZGVyQmVoYXZpb3I6IFsndHlwZScsIFVwZGF0ZVRlbXBsYXRlUHJvcGVydGllc09yZGVyXSxcbiAgZWxlbWVudFRlbXBsYXRlc0NhbGxlZEVsZW1lbnRCZWhhdmlvcjogWyd0eXBlJywgQ2FsbGVkRWxlbWVudEJlaGF2aW9yXVxufTtcblxudmFyIGNvcmVNb2R1bGUkMSA9IHtcbiAgX19kZXBlbmRzX186IFtjb21tYW5kc01vZHVsZSQxLCBiZWhhdmlvck1vZHVsZSQxLCBjcmVhdGVNb2R1bGVdLFxuICBfX2luaXRfXzogWydlbGVtZW50VGVtcGxhdGVzTG9hZGVyJ10sXG4gIGVsZW1lbnRUZW1wbGF0ZXM6IFsndHlwZScsIEVsZW1lbnRUZW1wbGF0ZXNdLFxuICBlbGVtZW50VGVtcGxhdGVzTG9hZGVyOiBbJ3R5cGUnLCBFbGVtZW50VGVtcGxhdGVzTG9hZGVyXVxufTtcblxuZnVuY3Rpb24gZ2V0VmVyc2lvbk9yRGF0ZUZyb21UZW1wbGF0ZSh0ZW1wbGF0ZSkge1xuICBjb25zdCBtZXRhZGF0YSA9IHRlbXBsYXRlLm1ldGFkYXRhLFxuICAgIHZlcnNpb24gPSB0ZW1wbGF0ZS52ZXJzaW9uO1xuICBpZiAobWV0YWRhdGEpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkJDEobWV0YWRhdGEuY3JlYXRlZCkpIHtcbiAgICAgIHJldHVybiB0b0RhdGVTdHJpbmcobWV0YWRhdGEuY3JlYXRlZCk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQkMShtZXRhZGF0YS51cGRhdGVkKSkge1xuICAgICAgcmV0dXJuIHRvRGF0ZVN0cmluZyhtZXRhZGF0YS51cGRhdGVkKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkJDEodmVyc2lvbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdmVyc2lvbjtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vXG5cbi8qKlxuICogRXhhbXBsZTogMDEuMDEuMTkwMCAwMTowMVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lc3RhbXBcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRvRGF0ZVN0cmluZyh0aW1lc3RhbXApIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gd2l0aExlYWRpbmdaZXJvcyhTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkpO1xuICBjb25zdCBkYXkgPSB3aXRoTGVhZGluZ1plcm9zKFN0cmluZyhkYXRlLmdldERhdGUoKSkpO1xuICBjb25zdCBob3VycyA9IHdpdGhMZWFkaW5nWmVyb3MoU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkpO1xuICBjb25zdCBtaW51dGVzID0gd2l0aExlYWRpbmdaZXJvcyhTdHJpbmcoZGF0ZS5nZXRNaW51dGVzKCkpKTtcbiAgcmV0dXJuIGRheSArICcuJyArIG1vbnRoICsgJy4nICsgeWVhciArICcgJyArIGhvdXJzICsgJzonICsgbWludXRlcztcbn1cbmZ1bmN0aW9uIHdpdGhMZWFkaW5nWmVyb3Moc3RyaW5nKSB7XG4gIHJldHVybiBsZWZ0UGFkKHN0cmluZywgMiwgJzAnKTtcbn1cbmZ1bmN0aW9uIGxlZnRQYWQoc3RyaW5nLCBsZW5ndGgsIGNoYXJhY3Rlcikge1xuICB3aGlsZSAoc3RyaW5nLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIHN0cmluZyA9IGNoYXJhY3RlciArIHN0cmluZztcbiAgfVxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50VGVtcGxhdGVzR3JvdXAocHJvcHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZ2V0VGVtcGxhdGVJZDogZ2V0VGVtcGxhdGVJZCQxID0gZ2V0VGVtcGxhdGVJZFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBmdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzR3JvdXAocHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsLFxuICAgICAgZWxlbWVudCxcbiAgICAgIGVudHJpZXMgPSBbXVxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VMYXlvdXRTdGF0ZShbJ2dyb3VwcycsIGlkLCAnb3BlbiddLCBmYWxzZSk7XG4gICAgY29uc3QgZW1wdHkgPSAhZW50cmllcy5sZW5ndGg7XG4gICAgY29uc3QgdG9nZ2xlT3BlbiA9ICgpID0+ICFlbXB0eSAmJiBzZXRPcGVuKCFvcGVuKTtcbiAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cCBiaW8tcHJvcGVydGllcy1wYW5lbC10ZW1wbGF0ZXMtZ3JvdXBcIixcbiAgICAgIFwiZGF0YS1ncm91cC1pZFwiOiAnZ3JvdXAtJyArIGlkLFxuICAgICAgY2hpbGRyZW46IFtqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWdyb3VwLWhlYWRlcicsIHtcbiAgICAgICAgICBlbXB0eSxcbiAgICAgICAgICBvcGVuOiBvcGVuICYmICFlbXB0eVxuICAgICAgICB9KSxcbiAgICAgICAgb25DbGljazogdG9nZ2xlT3BlbixcbiAgICAgICAgY2hpbGRyZW46IFtqc3goXCJkaXZcIiwge1xuICAgICAgICAgIHRpdGxlOiBsYWJlbCxcbiAgICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1oZWFkZXItdGl0bGVcIixcbiAgICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgICAgfSksIGpzeHMoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWdyb3VwLWhlYWRlci1idXR0b25zXCIsXG4gICAgICAgICAgY2hpbGRyZW46IFtqc3goVGVtcGxhdGVHcm91cEJ1dHRvbnMsIHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICBnZXRUZW1wbGF0ZUlkOiBnZXRUZW1wbGF0ZUlkJDFcbiAgICAgICAgICB9KSwgIWVtcHR5ICYmIGpzeChTZWN0aW9uVG9nZ2xlLCB7XG4gICAgICAgICAgICBvcGVuOiBvcGVuXG4gICAgICAgICAgfSldXG4gICAgICAgIH0pXVxuICAgICAgfSksIGpzeChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1lbnRyaWVzJywge1xuICAgICAgICAgIG9wZW46IG9wZW4gJiYgIWVtcHR5XG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgICAgICAgICAgaWRcbiAgICAgICAgICB9ID0gZW50cnk7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMShDb21wb25lbnQsIHtcbiAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAga2V5OiBpZCxcbiAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIH0pXVxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gU2VjdGlvblRvZ2dsZSh7XG4gIG9wZW5cbn0pIHtcbiAgcmV0dXJuIGpzeChIZWFkZXJCdXR0b24sIHtcbiAgICB0aXRsZTogXCJUb2dnbGUgc2VjdGlvblwiLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93XCIsXG4gICAgY2hpbGRyZW46IGpzeChBcnJvd0ljb24sIHtcbiAgICAgIGNsYXNzOiBvcGVuID8gJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd24nIDogJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LXJpZ2h0J1xuICAgIH0pXG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5lbGVtZW50XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9wcy5nZXRUZW1wbGF0ZUlkXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9wcy51bmxpbmtUZW1wbGF0ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcHJvcHMudXBkYXRlVGVtcGxhdGVcbiAqL1xuZnVuY3Rpb24gVGVtcGxhdGVHcm91cEJ1dHRvbnMoe1xuICBlbGVtZW50LFxuICBnZXRUZW1wbGF0ZUlkXG59KSB7XG4gIGNvbnN0IGVsZW1lbnRUZW1wbGF0ZXMgPSB1c2VTZXJ2aWNlKCdlbGVtZW50VGVtcGxhdGVzJyk7XG4gIGNvbnN0IHRlbXBsYXRlU3RhdGUgPSBnZXRUZW1wbGF0ZVN0YXRlKGVsZW1lbnRUZW1wbGF0ZXMsIGVsZW1lbnQsIGdldFRlbXBsYXRlSWQpO1xuICBpZiAodGVtcGxhdGVTdGF0ZS50eXBlID09PSAnTk9fVEVNUExBVEUnKSB7XG4gICAgcmV0dXJuIGpzeChTZWxlY3RFbnRyeVRlbXBsYXRlLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodGVtcGxhdGVTdGF0ZS50eXBlID09PSAnS05PV05fVEVNUExBVEUnKSB7XG4gICAgcmV0dXJuIGpzeChBcHBsaWVkVGVtcGxhdGUsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZVN0YXRlLnR5cGUgPT09ICdVTktOT1dOX1RFTVBMQVRFJykge1xuICAgIHJldHVybiBqc3goVW5rbm93blRlbXBsYXRlLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodGVtcGxhdGVTdGF0ZS50eXBlID09PSAnREVQUkVDQVRFRF9URU1QTEFURScpIHtcbiAgICByZXR1cm4ganN4KERlcHJlY2F0ZWRUZW1wbGF0ZSwge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHRlbXBsYXRlU3RhdGU6IHRlbXBsYXRlU3RhdGVcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZVN0YXRlLnR5cGUgPT09ICdPVVREQVRFRF9URU1QTEFURScpIHtcbiAgICByZXR1cm4ganN4KE91dGRhdGVkVGVtcGxhdGUsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICB0ZW1wbGF0ZVN0YXRlOiB0ZW1wbGF0ZVN0YXRlXG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIFNlbGVjdEVudHJ5VGVtcGxhdGUoe1xuICBlbGVtZW50XG59KSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBldmVudEJ1cyA9IHVzZVNlcnZpY2UoJ2V2ZW50QnVzJyk7XG4gIGNvbnN0IHNlbGVjdFRlbXBsYXRlID0gKCkgPT4gZXZlbnRCdXMuZmlyZSgnZWxlbWVudFRlbXBsYXRlcy5zZWxlY3QnLCB7XG4gICAgZWxlbWVudFxuICB9KTtcbiAgcmV0dXJuIGpzeHMoSGVhZGVyQnV0dG9uLCB7XG4gICAgdGl0bGU6IFwiU2VsZWN0IGEgdGVtcGxhdGVcIixcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1zZWxlY3QtdGVtcGxhdGUtYnV0dG9uXCIsXG4gICAgb25DbGljazogc2VsZWN0VGVtcGxhdGUsXG4gICAgY2hpbGRyZW46IFtqc3goQ3JlYXRlSWNvbiwge30pLCBqc3goXCJzcGFuXCIsIHtcbiAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ1NlbGVjdCcpXG4gICAgfSldXG4gIH0pO1xufVxuZnVuY3Rpb24gQXBwbGllZFRlbXBsYXRlKHtcbiAgZWxlbWVudFxufSkge1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBlbGVtZW50VGVtcGxhdGVzID0gdXNlU2VydmljZSgnZWxlbWVudFRlbXBsYXRlcycpO1xuICBjb25zdCBtZW51SXRlbXMgPSBbe1xuICAgIGVudHJ5OiB0cmFuc2xhdGUoJ1VubGluaycpLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShlbGVtZW50KVxuICB9LCB7XG4gICAgZW50cnk6IGpzeChSZW1vdmVUZW1wbGF0ZSwge30pLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy5yZW1vdmVUZW1wbGF0ZShlbGVtZW50KVxuICB9XTtcbiAgcmV0dXJuIGpzeChEcm9wZG93bkJ1dHRvbiwge1xuICAgIG1lbnVJdGVtczogbWVudUl0ZW1zLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFwcGxpZWQtdGVtcGxhdGUtYnV0dG9uXCIsXG4gICAgY2hpbGRyZW46IGpzeHMoSGVhZGVyQnV0dG9uLCB7XG4gICAgICBjaGlsZHJlbjogW2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdBcHBsaWVkJylcbiAgICAgIH0pLCBqc3goQXJyb3dJY29uLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd25cIlxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiBSZW1vdmVUZW1wbGF0ZSgpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1yZW1vdmUtdGVtcGxhdGVcIixcbiAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdSZW1vdmUnKVxuICB9KTtcbn1cbmZ1bmN0aW9uIFVua25vd25UZW1wbGF0ZSh7XG4gIGVsZW1lbnRcbn0pIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZWxlbWVudFRlbXBsYXRlcyA9IHVzZVNlcnZpY2UoJ2VsZW1lbnRUZW1wbGF0ZXMnKTtcbiAgY29uc3QgbWVudUl0ZW1zID0gW3tcbiAgICBlbnRyeToganN4KE5vdEZvdW5kVGV4dCwge30pXG4gIH0sIHtcbiAgICBzZXBhcmF0b3I6IHRydWVcbiAgfSwge1xuICAgIGVudHJ5OiB0cmFuc2xhdGUoJ1VubGluaycpLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShlbGVtZW50KVxuICB9LCB7XG4gICAgZW50cnk6IGpzeChSZW1vdmVUZW1wbGF0ZSwge30pLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy5yZW1vdmVUZW1wbGF0ZShlbGVtZW50KVxuICB9XTtcbiAgcmV0dXJuIGpzeChEcm9wZG93bkJ1dHRvbiwge1xuICAgIG1lbnVJdGVtczogbWVudUl0ZW1zLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXRlbXBsYXRlLW5vdC1mb3VuZFwiLFxuICAgIGNoaWxkcmVuOiBqc3hzKEhlYWRlckJ1dHRvbiwge1xuICAgICAgY2hpbGRyZW46IFtqc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTm90IGZvdW5kJylcbiAgICAgIH0pLCBqc3goQXJyb3dJY29uLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd25cIlxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiBOb3RGb3VuZFRleHQoKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC10ZW1wbGF0ZS1ub3QtZm91bmQtdGV4dFwiLFxuICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ1RoZSB0ZW1wbGF0ZSBhcHBsaWVkIHdhcyBub3QgZm91bmQuIFRoZXJlZm9yZSwgaXRzIHByb3BlcnRpZXMgY2Fubm90IGJlIHNob3duLiBVbmxpbmsgdG8gYWNjZXNzIHRoZSBkYXRhLicpXG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge1Vua25vd25UZW1wbGF0ZX0gdGVtcGxhdGVTdGF0ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gdW5saW5rVGVtcGxhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHVwZGF0ZVRlbXBsYXRlXG4gKi9cbmZ1bmN0aW9uIE91dGRhdGVkVGVtcGxhdGUoe1xuICBlbGVtZW50LFxuICB0ZW1wbGF0ZVN0YXRlXG59KSB7XG4gIGNvbnN0IHtcbiAgICBuZXdlclRlbXBsYXRlXG4gIH0gPSB0ZW1wbGF0ZVN0YXRlO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBlbGVtZW50VGVtcGxhdGVzID0gdXNlU2VydmljZSgnZWxlbWVudFRlbXBsYXRlcycpO1xuICBjb25zdCBtZW51SXRlbXMgPSBbe1xuICAgIGVudHJ5OiBqc3goVXBkYXRlQXZhaWxhYmxlVGV4dCwge1xuICAgICAgbmV3ZXJUZW1wbGF0ZTogbmV3ZXJUZW1wbGF0ZVxuICAgIH0pXG4gIH0sIHtcbiAgICBzZXBhcmF0b3I6IHRydWVcbiAgfSwge1xuICAgIGVudHJ5OiB0cmFuc2xhdGUoJ1VwZGF0ZScpLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy5hcHBseVRlbXBsYXRlKGVsZW1lbnQsIG5ld2VyVGVtcGxhdGUpXG4gIH0sIHtcbiAgICBlbnRyeTogdHJhbnNsYXRlKCdVbmxpbmsnKSxcbiAgICBhY3Rpb246ICgpID0+IGVsZW1lbnRUZW1wbGF0ZXMudW5saW5rVGVtcGxhdGUoZWxlbWVudClcbiAgfSwge1xuICAgIGVudHJ5OiBqc3goUmVtb3ZlVGVtcGxhdGUsIHt9KSxcbiAgICBhY3Rpb246ICgpID0+IGVsZW1lbnRUZW1wbGF0ZXMucmVtb3ZlVGVtcGxhdGUoZWxlbWVudClcbiAgfV07XG4gIHJldHVybiBqc3goRHJvcGRvd25CdXR0b24sIHtcbiAgICBtZW51SXRlbXM6IG1lbnVJdGVtcyxcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC10ZW1wbGF0ZS11cGRhdGUtYXZhaWxhYmxlXCIsXG4gICAgY2hpbGRyZW46IGpzeHMoSGVhZGVyQnV0dG9uLCB7XG4gICAgICBjaGlsZHJlbjogW2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdVcGRhdGUgYXZhaWxhYmxlJylcbiAgICAgIH0pLCBqc3goQXJyb3dJY29uLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd25cIlxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiBVcGRhdGVBdmFpbGFibGVUZXh0KHtcbiAgbmV3ZXJUZW1wbGF0ZVxufSkge1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgdGV4dCA9IHRyYW5zbGF0ZSgnQSBuZXcgdmVyc2lvbiBvZiB0aGUgdGVtcGxhdGUgaXMgYXZhaWxhYmxlOiB7dGVtcGxhdGVWZXJzaW9ufScsIHtcbiAgICB0ZW1wbGF0ZVZlcnNpb246IGdldFZlcnNpb25PckRhdGVGcm9tVGVtcGxhdGUobmV3ZXJUZW1wbGF0ZSlcbiAgfSk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXRlbXBsYXRlLXVwZGF0ZS1hdmFpbGFibGUtdGV4dFwiLFxuICAgIGNoaWxkcmVuOiB0ZXh0XG4gIH0pO1xufVxuZnVuY3Rpb24gRGVwcmVjYXRlZFRlbXBsYXRlKHtcbiAgZWxlbWVudCxcbiAgdGVtcGxhdGVTdGF0ZVxufSkge1xuICBjb25zdCB7XG4gICAgdGVtcGxhdGVcbiAgfSA9IHRlbXBsYXRlU3RhdGU7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpLFxuICAgIGVsZW1lbnRUZW1wbGF0ZXMgPSB1c2VTZXJ2aWNlKCdlbGVtZW50VGVtcGxhdGVzJyk7XG4gIGNvbnN0IG1lbnVJdGVtcyA9IFt7XG4gICAgZW50cnk6IGpzeChEZXByZWNhdGlvbldhcm5pbmcsIHtcbiAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZVxuICAgIH0pXG4gIH0sIHtcbiAgICBzZXBhcmF0b3I6IHRydWVcbiAgfSwge1xuICAgIGVudHJ5OiB0cmFuc2xhdGUoJ1VubGluaycpLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShlbGVtZW50KVxuICB9LCB7XG4gICAgZW50cnk6IGpzeChSZW1vdmVUZW1wbGF0ZSwge30pLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy5yZW1vdmVUZW1wbGF0ZShlbGVtZW50KVxuICB9XTtcbiAgcmV0dXJuIGpzeChEcm9wZG93bkJ1dHRvbiwge1xuICAgIG1lbnVJdGVtczogbWVudUl0ZW1zLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWRlcHJlY2F0ZWQtdGVtcGxhdGUtYnV0dG9uXCIsXG4gICAgY2hpbGRyZW46IGpzeHMoSGVhZGVyQnV0dG9uLCB7XG4gICAgICBjaGlsZHJlbjogW2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdEZXByZWNhdGVkJylcbiAgICAgIH0pLCBqc3goQXJyb3dJY29uLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd25cIlxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiBEZXByZWNhdGlvbldhcm5pbmcoe1xuICB0ZW1wbGF0ZVxufSkge1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2UgPSB0cmFuc2xhdGUoJ1RoaXMgdGVtcGxhdGUgaXMgZGVwcmVjYXRlZC4nKSxcbiAgICBkb2N1bWVudGF0aW9uUmVmXG4gIH0gPSB0ZW1wbGF0ZS5kZXByZWNhdGVkO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZGVwcmVjYXRlZC10ZW1wbGF0ZS10ZXh0XCIsXG4gICAgY2hpbGRyZW46IFttZXNzYWdlLCBkb2N1bWVudGF0aW9uUmVmICYmIGpzeHMoRnJhZ21lbnQsIHtcbiAgICAgIGNoaWxkcmVuOiBbXCJcXHhBMFwiLCBqc3goXCJhXCIsIHtcbiAgICAgICAgaHJlZjogZG9jdW1lbnRhdGlvblJlZixcbiAgICAgICAgY2hpbGRyZW46IGpzeChEb2N1bWVudGF0aW9uSWNvbiwge30pXG4gICAgICB9KV1cbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBEb2N1bWVudGF0aW9uSWNvbigpIHtcbiAgcmV0dXJuIGpzeChcInN2Z1wiLCB7XG4gICAgd2lkdGg6IFwiMTJcIixcbiAgICBoZWlnaHQ6IFwiMTJcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxMiAxMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IGpzeChcInBhdGhcIiwge1xuICAgICAgXCJmaWxsLXJ1bGVcIjogXCJldmVub2RkXCIsXG4gICAgICBcImNsaXAtcnVsZVwiOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTEwLjYzNjggMTAuNjM3NVY1LjkxNzYxSDExLjk5OTVWMTAuNjM4MkMxMS45OTk1IDEwLjk5NzMgMTEuODYyMyAxMS4zMTQxIDExLjU4NzggMTEuNTg4NUMxMS4zMTM0IDExLjg2MyAxMC45OTY2IDEyLjAwMDIgMTAuNjM3NSAxMi4wMDAySDEuMzYyNjZDMC45ODIzNDUgMTIuMDAwMiAwLjY2MDE1OSAxMS44NjgxIDAuMzk2MTAyIDExLjYwNDFDMC4xMzIwNDQgMTEuMzQgMS41MjU4OGUtMDUgMTEuMDE3OCAxLjUyNTg4ZS0wNSAxMC42Mzc1VjEuMzYyNjdDMS41MjU4OGUtMDUgMC45ODIzNiAwLjEzMjA0NCAwLjY2MDE3MyAwLjM5NjEwMiAwLjM5NjExNkMwLjY2MDE1OSAwLjEzMjA1OCAwLjk4MjM0NSAyLjk1NjM5ZS0wNSAxLjM2MjY2IDIuOTU2MzllLTA1SDUuOTE2MjRWMS4zNjI2N0gxLjM2MjY2VjEwLjYzNzVIMTAuNjM2OFpNMTIgMEg3LjI3OTRMNy4yNzg3MyAxLjM2MTk3SDkuNjg3MDFMMy4wNjUwNyA3Ljk4MzkxTDQuMDE1NDEgOC45MzQyNUwxMC42MzczIDIuMzEyMzFWNC43MjA1OUgxMlYwWlwiLFxuICAgICAgZmlsbDogXCIjODE4Nzk4XCJcbiAgICB9KVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vL1xuXG4vKipcbiAqIERldGVybWluZSB0ZW1wbGF0ZSBzdGF0ZSBpbiB0aGUgY3VycmVudCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50VGVtcGxhdGVzXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtmdW5jdGlvbn0gZ2V0VGVtcGxhdGVJZFxuICogQHJldHVybnMge1RlbXBsYXRlU3RhdGV9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlU3RhdGUoZWxlbWVudFRlbXBsYXRlcywgZWxlbWVudCwgZ2V0VGVtcGxhdGVJZCkge1xuICBjb25zdCB0ZW1wbGF0ZUlkID0gZ2V0VGVtcGxhdGVJZChlbGVtZW50KSxcbiAgICB0ZW1wbGF0ZSA9IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0KGVsZW1lbnQpO1xuICBpZiAoIXRlbXBsYXRlSWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ05PX1RFTVBMQVRFJ1xuICAgIH07XG4gIH1cbiAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVU5LTk9XTl9URU1QTEFURScsXG4gICAgICB0ZW1wbGF0ZUlkXG4gICAgfTtcbiAgfVxuICBpZiAodGVtcGxhdGUuZGVwcmVjYXRlZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnREVQUkVDQVRFRF9URU1QTEFURScsXG4gICAgICB0ZW1wbGF0ZVxuICAgIH07XG4gIH1cbiAgY29uc3QgbmV3ZXJUZW1wbGF0ZSA9IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0TGF0ZXN0KHRlbXBsYXRlSWQsIHtcbiAgICBkZXByZWNhdGVkOiB0cnVlXG4gIH0pWzBdO1xuICBpZiAobmV3ZXJUZW1wbGF0ZSAhPT0gdGVtcGxhdGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ09VVERBVEVEX1RFTVBMQVRFJyxcbiAgICAgIHRlbXBsYXRlLFxuICAgICAgbmV3ZXJUZW1wbGF0ZVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnS05PV05fVEVNUExBVEUnLFxuICAgIHRlbXBsYXRlXG4gIH07XG59XG5cbmZ1bmN0aW9uIFRlbXBsYXRlUHJvcHMoe1xuICBlbGVtZW50LFxuICBlbGVtZW50VGVtcGxhdGVzXG59KSB7XG4gIGNvbnN0IHRlbXBsYXRlID0gZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCk7XG4gIGlmICghdGVtcGxhdGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICd0ZW1wbGF0ZS1uYW1lJyxcbiAgICBjb21wb25lbnQ6IFRlbXBsYXRlTmFtZSxcbiAgICB0ZW1wbGF0ZVxuICB9LCB7XG4gICAgaWQ6ICd0ZW1wbGF0ZS12ZXJzaW9uJyxcbiAgICBjb21wb25lbnQ6IFRlbXBsYXRlVmVyc2lvbixcbiAgICB0ZW1wbGF0ZVxuICB9LCB7XG4gICAgaWQ6ICd0ZW1wbGF0ZS1kZXNjcmlwdGlvbicsXG4gICAgY29tcG9uZW50OiBUZW1wbGF0ZURlc2NyaXB0aW9uLFxuICAgIHRlbXBsYXRlXG4gIH1dLmZpbHRlcihlbnRyeSA9PiAhIWVudHJ5LmNvbXBvbmVudCk7XG59XG5mdW5jdGlvbiBUZW1wbGF0ZU5hbWUoe1xuICBpZCxcbiAgdGVtcGxhdGVcbn0pIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIHJldHVybiBqc3goVGV4dEVudHJ5LCB7XG4gICAgaWQ6IGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ05hbWUnKSxcbiAgICBjb250ZW50OiB0ZW1wbGF0ZS5uYW1lXG4gIH0pO1xufVxuZnVuY3Rpb24gVGVtcGxhdGVWZXJzaW9uKHtcbiAgaWQsXG4gIHRlbXBsYXRlXG59KSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0VmVyc2lvbk9yRGF0ZUZyb21UZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gIHJldHVybiB2ZXJzaW9uID8ganN4KFRleHRFbnRyeSwge1xuICAgIGlkOiBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWZXJzaW9uJyksXG4gICAgY29udGVudDogdmVyc2lvblxuICB9KSA6IG51bGw7XG59XG5mdW5jdGlvbiBUZW1wbGF0ZURlc2NyaXB0aW9uKHtcbiAgaWQsXG4gIHRlbXBsYXRlXG59KSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb25cbiAgfSA9IHRlbXBsYXRlO1xuICByZXR1cm4gZGVzY3JpcHRpb24gPyBqc3goVGV4dEVudHJ5LCB7XG4gICAgaWQ6IGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Rlc2NyaXB0aW9uJyksXG4gICAgY29udGVudDogdGVtcGxhdGUuZGVzY3JpcHRpb25cbiAgfSkgOiBudWxsO1xufVxuZnVuY3Rpb24gVGV4dEVudHJ5KHtcbiAgaWQsXG4gIGxhYmVsLFxuICBjb250ZW50XG59KSB7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBcImRhdGEtZW50cnktaWRcIjogaWQsXG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZW50cnkgYmlvLXByb3BlcnRpZXMtcGFuZWwtdGV4dC1lbnRyeVwiLFxuICAgIGNoaWxkcmVuOiBbanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1sYWJlbFwiLFxuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSksIGpzeChcInNwYW5cIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtdGV4dC1lbnRyeV9fY29udGVudFwiLFxuICAgICAgY2hpbGRyZW46IGNvbnRlbnRcbiAgICB9KV1cbiAgfSk7XG59XG5cbnZhciBlLFxuICBvID0ge307XG5mdW5jdGlvbiBuKHIsIHQsIGUpIHtcbiAgaWYgKDMgPT09IHIubm9kZVR5cGUpIHtcbiAgICB2YXIgbyA9IFwidGV4dENvbnRlbnRcIiBpbiByID8gci50ZXh0Q29udGVudCA6IHIubm9kZVZhbHVlIHx8IFwiXCI7XG4gICAgaWYgKCExICE9PSBuLm9wdGlvbnMudHJpbSkge1xuICAgICAgdmFyIGEgPSAwID09PSB0IHx8IHQgPT09IGUubGVuZ3RoIC0gMTtcbiAgICAgIGlmICgoIShvID0gby5tYXRjaCgvXltcXHNcXG5dKyQvZykgJiYgXCJhbGxcIiAhPT0gbi5vcHRpb25zLnRyaW0gPyBcIiBcIiA6IG8ucmVwbGFjZSgvKF5bXFxzXFxuXSt8W1xcc1xcbl0rJCkvZywgXCJhbGxcIiA9PT0gbi5vcHRpb25zLnRyaW0gfHwgYSA/IFwiXCIgOiBcIiBcIikpIHx8IFwiIFwiID09PSBvKSAmJiBlLmxlbmd0aCA+IDEgJiYgYSkgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBvO1xuICB9XG4gIGlmICgxICE9PSByLm5vZGVUeXBlKSByZXR1cm4gbnVsbDtcbiAgdmFyIHAgPSBTdHJpbmcoci5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFwic2NyaXB0XCIgPT09IHAgJiYgIW4ub3B0aW9ucy5hbGxvd1NjcmlwdHMpIHJldHVybiBudWxsO1xuICB2YXIgbCxcbiAgICBzLFxuICAgIHUgPSBuLmgocCwgZnVuY3Rpb24gKHIpIHtcbiAgICAgIHZhciB0ID0gciAmJiByLmxlbmd0aDtcbiAgICAgIGlmICghdCkgcmV0dXJuIG51bGw7XG4gICAgICBmb3IgKHZhciBlID0ge30sIG8gPSAwOyBvIDwgdDsgbysrKSB7XG4gICAgICAgIHZhciBhID0gcltvXSxcbiAgICAgICAgICBpID0gYS5uYW1lLFxuICAgICAgICAgIHAgPSBhLnZhbHVlO1xuICAgICAgICBcIm9uXCIgPT09IGkuc3Vic3RyaW5nKDAsIDIpICYmIG4ub3B0aW9ucy5hbGxvd0V2ZW50cyAmJiAocCA9IG5ldyBGdW5jdGlvbihwKSksIGVbaV0gPSBwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGU7XG4gICAgfShyLmF0dHJpYnV0ZXMpLCAocyA9IChsID0gci5jaGlsZE5vZGVzKSAmJiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwobCwgbikuZmlsdGVyKGkpKSAmJiBzLmxlbmd0aCA/IHMgOiBudWxsKTtcbiAgcmV0dXJuIG4udmlzaXRvciAmJiBuLnZpc2l0b3IodSksIHU7XG59XG52YXIgYSxcbiAgaSA9IGZ1bmN0aW9uIChyKSB7XG4gICAgcmV0dXJuIHI7XG4gIH0sXG4gIHAgPSB7fTtcbmZ1bmN0aW9uIGwocikge1xuICB2YXIgdCA9IChyLnR5cGUgfHwgXCJcIikudG9Mb3dlckNhc2UoKSxcbiAgICBlID0gbC5tYXA7XG4gIGUgJiYgZS5oYXNPd25Qcm9wZXJ0eSh0KSA/IChyLnR5cGUgPSBlW3RdLCByLnByb3BzID0gT2JqZWN0LmtleXMoci5wcm9wcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgdmFyIG87XG4gICAgcmV0dXJuIHRbKG8gPSBlLCBvLnJlcGxhY2UoLy0oLikvZywgZnVuY3Rpb24gKHIsIHQpIHtcbiAgICAgIHJldHVybiB0LnRvVXBwZXJDYXNlKCk7XG4gICAgfSkpXSA9IHIucHJvcHNbZV0sIHQ7XG4gIH0sIHt9KSkgOiByLnR5cGUgPSB0LnJlcGxhY2UoL1teYS16MC05LV0vaSwgXCJcIik7XG59XG52YXIgTWFya3VwID0gKGZ1bmN0aW9uICh0KSB7XG4gIGZ1bmN0aW9uIGkoKSB7XG4gICAgdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiB0ICYmIChpLl9fcHJvdG9fXyA9IHQpLCAoaS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHQgJiYgdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IGksIGkuc2V0UmV2aXZlciA9IGZ1bmN0aW9uIChyKSB7XG4gICAgYSA9IHI7XG4gIH0sIGkucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChyKSB7XG4gICAgdmFyIHQgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiByLndyYXAgIT09IHQud3JhcCB8fCByLnR5cGUgIT09IHQudHlwZSB8fCByLm1hcmt1cCAhPT0gdC5tYXJrdXA7XG4gIH0sIGkucHJvdG90eXBlLnNldENvbXBvbmVudHMgPSBmdW5jdGlvbiAocikge1xuICAgIGlmICh0aGlzLm1hcCA9IHt9LCByKSBmb3IgKHZhciB0IGluIHIpIGlmIChyLmhhc093blByb3BlcnR5KHQpKSB7XG4gICAgICB2YXIgZSA9IHQucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16MC05XSl8KFthLXowLTldKykoW0EtWl0pL2csIFwiJDEkMy0kMiQ0XCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLm1hcFtlXSA9IHJbdF07XG4gICAgfVxuICB9LCBpLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBpID0gdC53cmFwO1xuICAgIHZvaWQgMCA9PT0gaSAmJiAoaSA9ICEwKTtcbiAgICB2YXIgcyxcbiAgICAgIHUgPSB0LnR5cGUsXG4gICAgICBjID0gdC5tYXJrdXAsXG4gICAgICBtID0gdC5jb21wb25lbnRzLFxuICAgICAgdiA9IHQucmV2aXZlcixcbiAgICAgIGYgPSB0Lm9uRXJyb3IsXG4gICAgICBkID0gdFtcImFsbG93LXNjcmlwdHNcIl0sXG4gICAgICBoJDEgPSB0W1wiYWxsb3ctZXZlbnRzXCJdLFxuICAgICAgeSA9IHQudHJpbSxcbiAgICAgIHcgPSBmdW5jdGlvbiAociwgdCkge1xuICAgICAgICB2YXIgZSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBvIGluIHIpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBvKSAmJiAtMSA9PT0gdC5pbmRleE9mKG8pICYmIChlW29dID0gcltvXSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSh0LCBbXCJ3cmFwXCIsIFwidHlwZVwiLCBcIm1hcmt1cFwiLCBcImNvbXBvbmVudHNcIiwgXCJyZXZpdmVyXCIsIFwib25FcnJvclwiLCBcImFsbG93LXNjcmlwdHNcIiwgXCJhbGxvdy1ldmVudHNcIiwgXCJ0cmltXCJdKSxcbiAgICAgIEMgPSB2IHx8IHRoaXMucmV2aXZlciB8fCB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZXZpdmVyIHx8IGEgfHwgaDtcbiAgICB0aGlzLnNldENvbXBvbmVudHMobSk7XG4gICAgdmFyIGcgPSB7XG4gICAgICBhbGxvd1NjcmlwdHM6IGQsXG4gICAgICBhbGxvd0V2ZW50czogaCQxLFxuICAgICAgdHJpbTogeVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHMgPSBmdW5jdGlvbiAociwgdCwgYSwgaSwgcykge1xuICAgICAgICB2YXIgdSA9IGZ1bmN0aW9uIChyLCB0KSB7XG4gICAgICAgICAgdmFyIG8sXG4gICAgICAgICAgICBuLFxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwID0gXCJodG1sXCIgPT09IHQgPyBcInRleHQvaHRtbFwiIDogXCJhcHBsaWNhdGlvbi94bWxcIjtcbiAgICAgICAgICBcImh0bWxcIiA9PT0gdCA/IChpID0gXCJib2R5XCIsIGEgPSBcIjwhRE9DVFlQRSBodG1sPlxcbjxodG1sPjxib2R5PlwiICsgciArIFwiPC9ib2R5PjwvaHRtbD5cIikgOiAoaSA9IFwieG1sXCIsIGEgPSAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxuPHhtbD4nICsgciArIFwiPC94bWw+XCIpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhhLCBwKTtcbiAgICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgICBuID0gcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG8gfHwgXCJodG1sXCIgIT09IHQgfHwgKChvID0gZSB8fCAoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5pbXBsZW1lbnRhdGlvbiAmJiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQpIHJldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoXCJcIik7XG4gICAgICAgICAgICB2YXIgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICAgICAgICByZXR1cm4gci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6LTk5OWVtOyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IG92ZXJmbG93OmhpZGRlbjtcIiwgci5zZXRBdHRyaWJ1dGUoXCJzYW5kYm94XCIsIFwiYWxsb3ctZm9ybXNcIiksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHIuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgICB9KCkpKS5vcGVuKCksIG8ud3JpdGUoYSksIG8uY2xvc2UoKSksIG8pIHtcbiAgICAgICAgICAgIHZhciBsID0gby5nZXRFbGVtZW50c0J5VGFnTmFtZShpKVswXSxcbiAgICAgICAgICAgICAgcyA9IGwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiByICYmICFzICYmIChsLmVycm9yID0gXCJEb2N1bWVudCBwYXJzZSBmYWlsZWQuXCIpLCBzICYmIFwicGFyc2VyZXJyb3JcIiA9PT0gU3RyaW5nKHMubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCkgJiYgKHMucmVtb3ZlQ2hpbGQocy5maXJzdENoaWxkKSwgcy5yZW1vdmVDaGlsZChzLmxhc3RDaGlsZCksIGwuZXJyb3IgPSBzLnRleHRDb250ZW50IHx8IHMubm9kZVZhbHVlIHx8IG4gfHwgXCJVbmtub3duIGVycm9yXCIsIGwucmVtb3ZlQ2hpbGQocykpLCBsO1xuICAgICAgICAgIH1cbiAgICAgICAgfShyLCB0KTtcbiAgICAgICAgaWYgKHUgJiYgdS5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHUuZXJyb3IpO1xuICAgICAgICB2YXIgYyA9IHUgJiYgdS5ib2R5IHx8IHU7XG4gICAgICAgIGwubWFwID0gaSB8fCBwO1xuICAgICAgICB2YXIgbSA9IGMgJiYgZnVuY3Rpb24gKHIsIHQsIGUsIGEpIHtcbiAgICAgICAgICByZXR1cm4gbi52aXNpdG9yID0gdCwgbi5oID0gZSwgbi5vcHRpb25zID0gYSB8fCBvLCBuKHIpO1xuICAgICAgICB9KGMsIGwsIGEsIHMpO1xuICAgICAgICByZXR1cm4gbC5tYXAgPSBudWxsLCBtICYmIG0ucHJvcHMgJiYgbS5wcm9wcy5jaGlsZHJlbiB8fCBudWxsO1xuICAgICAgfShjLCB1LCBDLCB0aGlzLm1hcCwgZyk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgZiA/IGYoe1xuICAgICAgICBlcnJvcjogclxuICAgICAgfSkgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBjb25zb2xlICYmIGNvbnNvbGUuZXJyb3IgJiYgY29uc29sZS5lcnJvcihcInByZWFjdC1tYXJrdXA6IFwiICsgcik7XG4gICAgfVxuICAgIGlmICghMSA9PT0gaSkgcmV0dXJuIHMgfHwgbnVsbDtcbiAgICB2YXIgeCA9IHcuaGFzT3duUHJvcGVydHkoXCJjbGFzc05hbWVcIikgPyBcImNsYXNzTmFtZVwiIDogXCJjbGFzc1wiLFxuICAgICAgYiA9IHdbeF07XG4gICAgcmV0dXJuIGIgPyBiLnNwbGljZSA/IGIuc3BsaWNlKDAsIDAsIFwibWFya3VwXCIpIDogXCJzdHJpbmdcIiA9PSB0eXBlb2YgYiA/IHdbeF0gKz0gXCIgbWFya3VwXCIgOiBcIm9iamVjdFwiID09IHR5cGVvZiBiICYmIChiLm1hcmt1cCA9ICEwKSA6IHdbeF0gPSBcIm1hcmt1cFwiLCBDKFwiZGl2XCIsIHcsIHMgfHwgbnVsbCk7XG4gIH0sIGk7XG59KShDb21wb25lbnQpO1xuXG4vKipcbiAqIENvcGllZCBmcm9tIGV4aXN0aW5nIGZvcm0tanMjU2FuaXRpemVyXG4gKiBjZi4gaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vZm9ybS1qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy9mb3JtLWpzLXZpZXdlci9zcmMvcmVuZGVyL2NvbXBvbmVudHMvU2FuaXRpemVyLmpzXG4gKi9cblxuY29uc3QgTk9ERV9UWVBFX1RFWFQgPSAzLFxuICBOT0RFX1RZUEVfRUxFTUVOVCA9IDE7XG5jb25zdCBBTExPV0VEX05PREVTID0gWydoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdzcGFuJywgJ2VtJywgJ2EnLCAncCcsICdkaXYnLCAndWwnLCAnb2wnLCAnbGknLCAnaHInLCAnYmxvY2txdW90ZScsICdpbWcnLCAncHJlJywgJ2NvZGUnLCAnYnInLCAnc3Ryb25nJ107XG5jb25zdCBBTExPV0VEX0FUVFJJQlVURVMgPSBbJ2FsaWduJywgJ2FsdCcsICdjbGFzcycsICdocmVmJywgJ2lkJywgJ25hbWUnLCAncmVsJywgJ3RhcmdldCcsICdzcmMnXTtcbmNvbnN0IEFMTE9XRURfVVJJX1BBVFRFUk4gPSAvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cXC1dKyg/OlteYS16Ky5cXC06XXwkKSkvaTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuY29uc3QgQVRUUl9XSElURVNQQUNFX1BBVFRFUk4gPSAvW1xcdTAwMDAtXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MTgwRVxcdTIwMDAtXFx1MjAyOVxcdTIwNUZcXHUzMDAwXS9nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuY29uc3QgRk9STV9FTEVNRU5UID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuXG4vKipcbiAqIFNhbml0aXplIGEgSFRNTCBzdHJpbmcgYW5kIHJldHVybiB0aGUgY2xlYW5lZCwgc2FmZSB2ZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNhbml0aXplSFRNTChodG1sKSB7XG4gIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoYDwhRE9DVFlQRSBodG1sPlxcbjxodG1sPjxib2R5PjxkaXY+JHtodG1sfWAsICd0ZXh0L2h0bWwnKTtcbiAgZG9jLm5vcm1hbGl6ZSgpO1xuICBjb25zdCBlbGVtZW50ID0gZG9jLmJvZHkuZmlyc3RDaGlsZDtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBzYW5pdGl6ZU5vZGUoIC8qKiBAdHlwZSBFbGVtZW50ICovZWxlbWVudCk7XG4gICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHRoYXQgZG9jdW1lbnQgcGFyc2luZ1xuICAgIC8vIGRvZXMgbm90IHdvcmsgYXQgYWxsLCBkdWUgdG8gSFRNTCBnaWJiZXJpc2hcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzYW5pdGl6ZSBhIEhUTUwgbm9kZSwgcG90ZW50aWFsbHlcbiAqIHJlbW92aW5nIGl0LCBpdHMgY2hpbGRyZW4gb3IgYXR0cmlidXRlcy5cbiAqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3NuYXJrZG93bi9pc3N1ZXMvNzBcbiAqIGFuZCBodHRwczovL2dpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS4gU2ltcGxpZmllZFxuICogZm9yIG91ciB1c2UtY2FzZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVOb2RlKG5vZGUpIHtcbiAgLy8gYWxsb3cgdGV4dCBub2Rlc1xuICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX1RFWFQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBkaXNhbGxvdyBhbGwgb3RoZXIgbm9kZXMgYnV0IEVsZW1lbnRcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRV9FTEVNRU5UKSB7XG4gICAgcmV0dXJuIG5vZGUucmVtb3ZlKCk7XG4gIH1cbiAgY29uc3QgbGNUYWcgPSBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAvLyBkaXNhbGxvdyBub24td2hpdGVsaXN0ZWQgdGFnc1xuICBpZiAoIUFMTE9XRURfTk9ERVMuaW5jbHVkZXMobGNUYWcpKSB7XG4gICAgcmV0dXJuIG5vZGUucmVtb3ZlKCk7XG4gIH1cbiAgY29uc3QgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlcztcblxuICAvLyBjbGVhbiBhdHRyaWJ1dGVzXG4gIGZvciAobGV0IGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOykge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV07XG4gICAgY29uc3QgbmFtZSA9IGF0dHJpYnV0ZS5uYW1lO1xuICAgIGNvbnN0IGxjTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIG5vcm1hbGl6ZSBub2RlIHZhbHVlXG4gICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGUudmFsdWUudHJpbSgpO1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGNvbnN0IHZhbGlkID0gaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSk7XG4gICAgaWYgKHZhbGlkKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9yY2Ugbm9vcGVuZXIgb24gdGFyZ2V0PVwiX2JsYW5rXCIgbGlua3NcbiAgaWYgKGxjVGFnID09PSAnYScgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSAnX2JsYW5rJyAmJiBub2RlLmdldEF0dHJpYnV0ZSgncmVsJykgIT09ICdub29wZW5lcicpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyJyk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGktLTspIHtcbiAgICBzYW5pdGl6ZU5vZGUoIC8qKiBAdHlwZSBFbGVtZW50ICovbm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhdHRyaWJ1dGVzIGZvciB2YWxpZGl0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGNUYWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBsY05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkge1xuICAvLyBkaXNhbGxvdyBtb3N0IGF0dHJpYnV0ZXMgYmFzZWQgb24gd2hpdGVsaXN0XG4gIGlmICghQUxMT1dFRF9BVFRSSUJVVEVTLmluY2x1ZGVzKGxjTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBkaXNhbGxvdyBcIkRPTSBjbG9iYmVyaW5nXCIgLyBwb2x1dGlvbiBvZiBkb2N1bWVudCBhbmQgd3JhcHBpbmcgZm9ybSBlbGVtZW50c1xuICBpZiAoKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykgJiYgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIEZPUk1fRUxFTUVOVCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGxjTmFtZSA9PT0gJ3RhcmdldCcgJiYgdmFsdWUgIT09ICdfYmxhbmsnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gYWxsb3cgdmFsaWQgdXJsIGxpbmtzIG9ubHlcbiAgaWYgKGxjTmFtZSA9PT0gJ2hyZWYnICYmICFBTExPV0VEX1VSSV9QQVRURVJOLnRlc3QodmFsdWUucmVwbGFjZShBVFRSX1dISVRFU1BBQ0VfUEFUVEVSTiwgJycpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gUHJvcGVydHlUb29sdGlwKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIHRvb2x0aXAgJiYganN4KE1hcmt1cCwge1xuICAgIG1hcmt1cDogc2FuaXRpemVIVE1MKHRvb2x0aXApLFxuICAgIHRyaW06IGZhbHNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VQcm9wZXJ0eUFjY2Vzc29ycyhicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBjb25zdCBkaXJlY3RTZXQgPSB1c2VDYWxsYmFjayhwcm9wZXJ0eVNldHRlciQxKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KSwgW2JwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5XSk7XG4gIGNvbnN0IGRpcmVjdEdldCA9IHVzZUNhbGxiYWNrKHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLCBbZWxlbWVudCwgcHJvcGVydHldKTtcbiAgY29uc3QgW2lzRmVlbEVuYWJsZWQsIHNldElzRmVlbEVuYWJsZWRdID0gdXNlU3RhdGUoZmVlbEVuYWJsZWQocHJvcGVydHksIGRpcmVjdEdldCgpKSk7XG4gIGNvbnN0IGhhbmRsZUZlZWxUb2dnbGUgPSB1c2VDYWxsYmFjayh2YWx1ZSA9PiB7XG4gICAgaWYgKCFpc0ZlZWxFbmFibGVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aCgnPScpKSB7XG4gICAgICBzZXRJc0ZlZWxFbmFibGVkKHRydWUpO1xuICAgIH1cbiAgICBpZiAoaXNGZWVsRW5hYmxlZCAmJiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhdmFsdWUuc3RhcnRzV2l0aCgnPScpKSkge1xuICAgICAgc2V0SXNGZWVsRW5hYmxlZChmYWxzZSk7XG4gICAgfVxuICB9LCBbaXNGZWVsRW5hYmxlZF0pO1xuICBjb25zdCBzZXQgPSB1c2VDYWxsYmFjaygodmFsdWUsIGVycm9yKSA9PiB7XG4gICAgaGFuZGxlRmVlbFRvZ2dsZSh2YWx1ZSk7XG4gICAgZGlyZWN0U2V0KHRvRmVlbEV4cHJlc3Npb24odmFsdWUsIHByb3BlcnR5LnR5cGUpKTtcbiAgfSwgW2RpcmVjdFNldCwgcHJvcGVydHksIGhhbmRsZUZlZWxUb2dnbGVdKTtcbiAgY29uc3QgZ2V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChpc0ZlZWxFbmFibGVkKSB7XG4gICAgICByZXR1cm4gZGlyZWN0R2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tRmVlbEV4cHJlc3Npb24oZGlyZWN0R2V0KCksIHByb3BlcnR5LnR5cGUpO1xuICB9LCBbZGlyZWN0R2V0LCBwcm9wZXJ0eSwgaXNGZWVsRW5hYmxlZF0pO1xuICBpZiAoIWlzU3BlY2lhbEZlZWxQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICByZXR1cm4gW2RpcmVjdEdldCwgZGlyZWN0U2V0XTtcbiAgfVxuICByZXR1cm4gW2dldCwgc2V0XTtcbn1cbmNvbnN0IGlzU3BlY2lhbEZlZWxQcm9wZXJ0eSA9IHByb3BlcnR5ID0+IHtcbiAgcmV0dXJuIFsnb3B0aW9uYWwnLCAnc3RhdGljJ10uaW5jbHVkZXMocHJvcGVydHkuZmVlbCkgJiYgWydCb29sZWFuJywgJ051bWJlciddLmluY2x1ZGVzKHByb3BlcnR5LnR5cGUpO1xufTtcbmNvbnN0IHRvRmVlbEV4cHJlc3Npb24gPSAodmFsdWUsIHR5cGUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aCgnPScpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh0eXBlID09PSAnQm9vbGVhbicpIHtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiB2YWx1ZTtcbiAgICByZXR1cm4gJz0nICsgISF2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gJz0nICsgdmFsdWUudG9TdHJpbmcoKTtcbn07XG5jb25zdCBmcm9tRmVlbEV4cHJlc3Npb24gPSAodmFsdWUsIHR5cGUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aCgnPScpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ0Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSAnZmFsc2UnO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5jb25zdCBmZWVsRW5hYmxlZCA9IChwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgaWYgKCFpc1NwZWNpYWxGZWVsUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICdCb29sZWFuJykge1xuICAgIHJldHVybiAhKHZhbHVlID09PSAnPXRydWUnIHx8IHZhbHVlID09PSAnPWZhbHNlJyk7XG4gIH1cbiAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgcmV0dXJuIGlzTmFOKGZyb21GZWVsRXhwcmVzc2lvbih2YWx1ZSwgcHJvcGVydHkudHlwZSkpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbmZ1bmN0aW9uIHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3BlcnR5U2V0dGVyJDEoYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjaywgZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHNldFByb3BlcnR5VmFsdWUoYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjaywgZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3BlcnR5VmFsaWRhdG9yJDEodHJhbnNsYXRlLCBwcm9wZXJ0eSkge1xuICByZXR1cm4gdmFsdWUgPT4gdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSk7XG59XG5mdW5jdGlvbiBncm91cEJ5R3JvdXBJZCQxKHByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIGdyb3VwQnkocHJvcGVydGllcywgJ2dyb3VwJyk7XG59XG5mdW5jdGlvbiBmaW5kQ3VzdG9tR3JvdXAkMShncm91cHMsIGlkKSB7XG4gIHJldHVybiBmaW5kKGdyb3VwcywgZyA9PiBnLmlkID09PSBpZCk7XG59XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHByb3BlcnR5IGV4ZWN1dGVkIGJ5IHRoZSBlbmdpbmU/XG4gKlxuICogQHBhcmFtIHsgeyBiaW5kaW5nOiB7IHR5cGU6IHN0cmluZyB9IH0gfSBwcm9wZXJ0eVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNFeHRlcm5hbFByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBbJ3plZWJlOnByb3BlcnR5JywgJ3plZWJlOnRhc2tIZWFkZXInXS5pbmNsdWRlcyhwcm9wZXJ0eS5iaW5kaW5nLnR5cGUpO1xufVxuXG5mdW5jdGlvbiBQcm9wZXJ0eURlc2NyaXB0aW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4gZGVzY3JpcHRpb24gJiYganN4KE1hcmt1cCwge1xuICAgIG1hcmt1cDogc2FuaXRpemVIVE1MKHRyYW5zbGF0ZShkZXNjcmlwdGlvbikpLFxuICAgIHRyaW06IGZhbHNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBUZXh0QXJlYVByb3BlcnR5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZWRpdGFibGUsXG4gICAgbGFiZWwsXG4gICAgZmVlbCxcbiAgICBsYW5ndWFnZSxcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4gVGV4dEFyZWFFbnRyeSh7XG4gICAgZGVib3VuY2UsXG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBmZWVsLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIG1vbm9zcGFjZTogISFsYW5ndWFnZSxcbiAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlciQxKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IkMSh0cmFuc2xhdGUsIHByb3BlcnR5KSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlLFxuICAgIHRvb2x0aXA6IFByb3BlcnR5VG9vbHRpcCh7XG4gICAgICB0b29sdGlwXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFN0cmluZ1Byb3BlcnR5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZWRpdGFibGUsXG4gICAgbGFiZWwsXG4gICAgZmVlbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGRlYm91bmNlLFxuICAgIGVsZW1lbnQsXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLFxuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIGZlZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgZGVzY3JpcHRpb246IFByb3BlcnR5RGVzY3JpcHRpb24oe1xuICAgICAgZGVzY3JpcHRpb25cbiAgICB9KSxcbiAgICBzZXRWYWx1ZTogcHJvcGVydHlTZXR0ZXIkMShicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSksXG4gICAgdmFsaWRhdGU6IHByb3BlcnR5VmFsaWRhdG9yJDEodHJhbnNsYXRlLCBwcm9wZXJ0eSksXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB0b29sdGlwOiBQcm9wZXJ0eVRvb2x0aXAoe1xuICAgICAgdG9vbHRpcFxuICAgIH0pXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VTZXJ2aWNlSWZBdmFpbGFibGUoc2VydmljZSwgZmFsbGJhY2spIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSB1c2VTZXJ2aWNlKHNlcnZpY2UsIGZhbHNlKTtcbiAgaWYgKCFyZXNvbHZlZCkge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5mdW5jdGlvbiB3aXRoVmFyaWFibGVDb250ZXh0KENvbXBvbmVudCkge1xuICByZXR1cm4gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGJwbW5FbGVtZW50LFxuICAgICAgZWxlbWVudFxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBibyA9IChicG1uRWxlbWVudCB8fCBlbGVtZW50KS5idXNpbmVzc09iamVjdDtcbiAgICBjb25zdCBbdmFyaWFibGVzLCBzZXRWYXJpYWJsZXNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IGV2ZW50QnVzID0gdXNlU2VydmljZSgnZXZlbnRCdXMnKTtcbiAgICBjb25zdCB2YXJpYWJsZVJlc29sdmVyID0gdXNlU2VydmljZUlmQXZhaWxhYmxlKCd2YXJpYWJsZVJlc29sdmVyJywge1xuICAgICAgZ2V0VmFyaWFibGVzRm9yRWxlbWVudFxuICAgIH0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBleHRyYWN0VmFyaWFibGVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBhd2FpdCB2YXJpYWJsZVJlc29sdmVyLmdldFZhcmlhYmxlc0ZvckVsZW1lbnQoYm8pO1xuICAgICAgICBzZXRWYXJpYWJsZXModmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnZhcmlhYmxlLFxuICAgICAgICAgICAgaW5mbzogdmFyaWFibGUuaW5mbyB8fCB2YXJpYWJsZS5vcmlnaW4gJiYgJ1dyaXR0ZW4gaW4gJyArIHZhcmlhYmxlLm9yaWdpbi5tYXAob3JpZ2luID0+IG9yaWdpbi5uYW1lIHx8IG9yaWdpbi5pZCkuam9pbignLCAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiB1bmRlZmluZWQsIHNvIHRoZSBldmVudCBwcm9wYWdhdGlvbiBpcyBub3QgY2FuY2VsZWQuXG4gICAgICAvLyBDZi4gaHR0cHM6Ly9naXRodWIuY29tL2NhbXVuZGEvY2FtdW5kYS1tb2RlbGVyL2lzc3Vlcy8zMzkyXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgZXh0cmFjdFZhcmlhYmxlcygpO1xuICAgICAgfTtcbiAgICAgIGV2ZW50QnVzLm9uKCdjb21tYW5kU3RhY2suY2hhbmdlZCcsIGNhbGxiYWNrKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBldmVudEJ1cy5vZmYoJ2NvbW1hbmRTdGFjay5jaGFuZ2VkJywgY2FsbGJhY2spO1xuICAgICAgfTtcbiAgICB9LCBbYm9dKTtcbiAgICByZXR1cm4ganN4KENvbXBvbmVudCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlc1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiB3aXRoVG9vbHRpcENvbnRhaW5lcihDb21wb25lbnQpIHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB0b29sdGlwQ29udGFpbmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSB1c2VTZXJ2aWNlKCdjb25maWcnKTtcbiAgICAgIHJldHVybiBjb25maWcgJiYgY29uZmlnLnByb3BlcnRpZXNQYW5lbCAmJiBjb25maWcucHJvcGVydGllc1BhbmVsLmZlZWxUb29sdGlwQ29udGFpbmVyO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4ganN4KENvbXBvbmVudCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB0b29sdGlwQ29udGFpbmVyOiB0b29sdGlwQ29udGFpbmVyXG4gICAgfSk7XG4gIH07XG59XG5cbmNvbnN0IEZlZWxFbnRyeSA9IHdpdGhUb29sdGlwQ29udGFpbmVyKEZlZWxFbnRyeSQxKTtcbmNvbnN0IEZlZWxUZXh0QXJlYUVudHJ5ID0gd2l0aFRvb2x0aXBDb250YWluZXIoRmVlbFRleHRBcmVhRW50cnkkMSk7XG5jb25zdCBGZWVsRW50cnlXaXRoVmFyaWFibGVDb250ZXh0ID0gd2l0aFZhcmlhYmxlQ29udGV4dChGZWVsRW50cnkpO1xuY29uc3QgRmVlbFRleHRBcmVhRW50cnlXaXRoVmFyaWFibGVDb250ZXh0ID0gd2l0aFZhcmlhYmxlQ29udGV4dChGZWVsVGV4dEFyZWFFbnRyeSk7XG5cbmZ1bmN0aW9uIEZlZWxQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBwcm9wZXJ0eVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlZGl0YWJsZSxcbiAgICBsYWJlbCxcbiAgICBmZWVsLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHRvb2x0aXBcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0JyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IFRleHRGaWVsZENvbXBvbmVudCA9ICFpc0V4dGVybmFsUHJvcGVydHkocHJvcGVydHkpID8gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCA6IEZlZWxFbnRyeTtcbiAgcmV0dXJuIFRleHRGaWVsZENvbXBvbmVudCh7XG4gICAgZGVib3VuY2UsXG4gICAgZWxlbWVudCxcbiAgICBnZXRWYWx1ZTogcHJvcGVydHlHZXR0ZXIkMShlbGVtZW50LCBwcm9wZXJ0eSksXG4gICAgaWQsXG4gICAgbGFiZWwsXG4gICAgZmVlbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBkZXNjcmlwdGlvbjogUHJvcGVydHlEZXNjcmlwdGlvbih7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlciQxKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IkMSh0cmFuc2xhdGUsIHByb3BlcnR5KSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlLFxuICAgIHRvb2x0aXA6IFByb3BlcnR5VG9vbHRpcCh7XG4gICAgICB0b29sdGlwXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEZlZWxUZXh0QXJlYVByb3BlcnR5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIHByb3BlcnR5XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGVkaXRhYmxlLFxuICAgIGxhYmVsLFxuICAgIGZlZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgVGV4dEFyZWFDb21wb25lbnQgPSAhaXNFeHRlcm5hbFByb3BlcnR5KHByb3BlcnR5KSA/IEZlZWxUZXh0QXJlYUVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCA6IEZlZWxUZXh0QXJlYUVudHJ5O1xuICByZXR1cm4gVGV4dEFyZWFDb21wb25lbnQoe1xuICAgIGRlYm91bmNlLFxuICAgIGVsZW1lbnQsXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLFxuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIGZlZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgZGVzY3JpcHRpb246IFByb3BlcnR5RGVzY3JpcHRpb24oe1xuICAgICAgZGVzY3JpcHRpb25cbiAgICB9KSxcbiAgICBzZXRWYWx1ZTogcHJvcGVydHlTZXR0ZXIkMShicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSksXG4gICAgdmFsaWRhdGU6IHByb3BlcnR5VmFsaWRhdG9yJDEodHJhbnNsYXRlLCBwcm9wZXJ0eSksXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB0b29sdGlwOiBQcm9wZXJ0eVRvb2x0aXAoe1xuICAgICAgdG9vbHRpcFxuICAgIH0pXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBEcm9wZG93blByb3BlcnR5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZWRpdGFibGUsXG4gICAgbGFiZWwsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjaG9pY2VzLFxuICAgICAgb3B0aW9uYWxcbiAgICB9ID0gcHJvcGVydHk7XG4gICAgbGV0IGRyb3Bkb3duT3B0aW9ucyA9IFtdO1xuICAgIGRyb3Bkb3duT3B0aW9ucyA9IGNob2ljZXMubWFwKCh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbmFsKSB7XG4gICAgICBkcm9wZG93bk9wdGlvbnMgPSBbe1xuICAgICAgICBsYWJlbDogJycsXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICAgIH0sIC4uLmRyb3Bkb3duT3B0aW9uc107XG4gICAgfVxuICAgIHJldHVybiBkcm9wZG93bk9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBnZXRPcHRpb25zLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlciQxKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IkMSh0cmFuc2xhdGUsIHByb3BlcnR5KSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlLFxuICAgIHRvb2x0aXA6IFByb3BlcnR5VG9vbHRpcCh7XG4gICAgICB0b29sdGlwXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEJvb2xlYW5Qcm9wZXJ0eSQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIHByb3BlcnR5XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGVkaXRhYmxlLFxuICAgIGxhYmVsLFxuICAgIHRvb2x0aXAsXG4gICAgZmVlbFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgQ29tcG9uZW50ID0gZmVlbCA9PT0gJ29wdGlvbmFsJyA/IEZlZWxDaGVja2JveEVudHJ5IDogQ2hlY2tib3hFbnRyeTtcbiAgY29uc3QgW2dldFZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VQcm9wZXJ0eUFjY2Vzc29ycyhicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSk7XG4gIHJldHVybiBDb21wb25lbnQoe1xuICAgIGVsZW1lbnQsXG4gICAgZGVib3VuY2UsXG4gICAgdHJhbnNsYXRlLFxuICAgIGdldFZhbHVlLFxuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgc2V0VmFsdWUsXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB0b29sdGlwOiBQcm9wZXJ0eVRvb2x0aXAoe1xuICAgICAgdG9vbHRpcFxuICAgIH0pXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBOdW1iZXJQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBwcm9wZXJ0eVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlZGl0YWJsZSxcbiAgICBsYWJlbCxcbiAgICBmZWVsLFxuICAgIHRvb2x0aXBcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBDb21wb25lbnQgPSBmZWVsID09PSAnb3B0aW9uYWwnID8gRmVlbE51bWJlckVudHJ5IDogTnVtYmVyRmllbGRFbnRyeTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBbZ2V0VmFsdWUsIHNldFZhbHVlXSA9IHVzZVByb3BlcnR5QWNjZXNzb3JzKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgY29uc3QgdmFsaWRhdGUgPSB1c2VDYWxsYmFjayh2YWx1ZSA9PiB7XG4gICAgaWYgKGlzU3BlY2lhbEZlZWxQcm9wZXJ0eShwcm9wZXJ0eSkgJiYgaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ2UnKSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnU2NpZW50aWZpYyBub3RhdGlvbiBpcyBkaXNhbGxvd2VkIGluIEZFRUwuJyk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRWYWxpZGF0b3IgPSBwcm9wZXJ0eVZhbGlkYXRvciQxKHRyYW5zbGF0ZSwgcHJvcGVydHkpO1xuICAgIHJldHVybiBkZWZhdWx0VmFsaWRhdG9yKHZhbHVlKTtcbiAgfSwgW3RyYW5zbGF0ZSwgcHJvcGVydHldKTtcbiAgcmV0dXJuIENvbXBvbmVudCh7XG4gICAgZGVib3VuY2UsXG4gICAgZWxlbWVudCxcbiAgICBnZXRWYWx1ZSxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBkZXNjcmlwdGlvbjogUHJvcGVydHlEZXNjcmlwdGlvbih7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pLFxuICAgIHNldFZhbHVlLFxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlLFxuICAgIHRvb2x0aXA6IFByb3BlcnR5VG9vbHRpcCh7XG4gICAgICB0b29sdGlwXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEN1c3RvbVByb3BlcnRpZXMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBlbGVtZW50VGVtcGxhdGUsXG4gICAgaW5qZWN0b3JcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHByb3BlcnRpZXMsXG4gICAgZ3JvdXBzOiBwcm9wZXJ0eUdyb3Vwc1xuICB9ID0gZWxlbWVudFRlbXBsYXRlO1xuXG4gIC8vICgxKSBncm91cCBwcm9wZXJ0aWVzIGJ5IGdyb3VwIGlkXG4gIGNvbnN0IGdyb3VwZWRQcm9wZXJ0aWVzID0gZ3JvdXBCeUdyb3VwSWQkMShwcm9wZXJ0aWVzKTtcbiAgY29uc3QgZGVmYXVsdFByb3BzID0gW107XG4gIGZvckVhY2goZ3JvdXBlZFByb3BlcnRpZXMsIChwcm9wZXJ0aWVzLCBncm91cElkKSA9PiB7XG4gICAgY29uc3QgZ3JvdXAgPSBmaW5kQ3VzdG9tR3JvdXAkMShwcm9wZXJ0eUdyb3VwcywgZ3JvdXBJZCk7XG4gICAgaWYgKCFncm91cCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wcy5wdXNoKC4uLnByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBhZGRDdXN0b21Hcm91cCQxKGdyb3Vwcywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIGlkOiBgRWxlbWVudFRlbXBsYXRlc19fQ3VzdG9tUHJvcGVydGllcy0ke2dyb3VwSWR9YCxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoZ3JvdXAubGFiZWwpLFxuICAgICAgb3BlbkJ5RGVmYXVsdDogZ3JvdXAub3BlbkJ5RGVmYXVsdCxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgICB0ZW1wbGF0ZUlkOiBgJHtpZH0tJHtncm91cElkfWAsXG4gICAgICB0b29sdGlwOiBQcm9wZXJ0eVRvb2x0aXAoe1xuICAgICAgICB0b29sdGlwOiBncm91cC50b29sdGlwXG4gICAgICB9KVxuICAgIH0pO1xuICB9KTtcblxuICAvLyAoMikgYWRkIGRlZmF1bHQgY3VzdG9tIHByb3BzXG4gIGlmIChkZWZhdWx0UHJvcHMubGVuZ3RoKSB7XG4gICAgYWRkQ3VzdG9tR3JvdXAkMShncm91cHMsIHtcbiAgICAgIGlkOiAnRWxlbWVudFRlbXBsYXRlc19fQ3VzdG9tUHJvcGVydGllcycsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdDdXN0b20gcHJvcGVydGllcycpLFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByb3BlcnRpZXM6IGRlZmF1bHRQcm9wcyxcbiAgICAgIHRlbXBsYXRlSWQ6IGlkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cbmZ1bmN0aW9uIGFkZEN1c3RvbUdyb3VwJDEoZ3JvdXBzLCBwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBvcGVuQnlEZWZhdWx0ID0gdHJ1ZSxcbiAgICBwcm9wZXJ0aWVzLFxuICAgIHRlbXBsYXRlSWQsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGN1c3RvbVByb3BlcnRpZXNHcm91cCA9IHtcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFtdLFxuICAgIHNob3VsZE9wZW46IG9wZW5CeURlZmF1bHQsXG4gICAgdG9vbHRpcFxuICB9O1xuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gY3JlYXRlQ3VzdG9tRW50cnkkMShgY3VzdG9tLWVudHJ5LSR7dGVtcGxhdGVJZH0tJHtpbmRleH1gLCBlbGVtZW50LCBwcm9wZXJ0eSk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBjdXN0b21Qcm9wZXJ0aWVzR3JvdXAuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY3VzdG9tUHJvcGVydGllc0dyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgZ3JvdXBzLnB1c2goY3VzdG9tUHJvcGVydGllc0dyb3VwKTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tRW50cnkkMShpZCwgZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgbGV0IHtcbiAgICB0eXBlLFxuICAgIGZlZWxcbiAgfSA9IHByb3BlcnR5O1xuICBpZiAoIXR5cGUpIHtcbiAgICB0eXBlID0gZ2V0RGVmYXVsdFR5cGUkMShwcm9wZXJ0eSk7XG4gIH1cbiAgaWYgKGZlZWwgPT09ICdyZXF1aXJlZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBjb21wb25lbnQ6IEZlZWxQcm9wZXJ0eSxcbiAgICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBjb21wb25lbnQ6IE51bWJlclByb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzTnVtYmVyRmllbGRFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ0Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgY29tcG9uZW50OiBCb29sZWFuUHJvcGVydHkkMSxcbiAgICAgIGlzRWRpdGVkOiBpc0NoZWNrYm94RW50cnlFZGl0ZWQsXG4gICAgICBwcm9wZXJ0eVxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdEcm9wZG93bicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBjb21wb25lbnQ6IERyb3Bkb3duUHJvcGVydHkkMSxcbiAgICAgIGlzRWRpdGVkOiBpc1NlbGVjdEVudHJ5RWRpdGVkLFxuICAgICAgcHJvcGVydHlcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xuICAgIGlmIChmZWVsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgY29tcG9uZW50OiBGZWVsUHJvcGVydHksXG4gICAgICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZCxcbiAgICAgICAgcHJvcGVydHlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGNvbXBvbmVudDogU3RyaW5nUHJvcGVydHkkMSxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkLFxuICAgICAgcHJvcGVydHlcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSAnVGV4dCcpIHtcbiAgICBpZiAoZmVlbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbXBvbmVudDogRmVlbFRleHRBcmVhUHJvcGVydHksXG4gICAgICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZCxcbiAgICAgICAgcHJvcGVydHlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGNvbXBvbmVudDogVGV4dEFyZWFQcm9wZXJ0eSQxLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEFyZWFFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5XG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFR5cGUkMShwcm9wZXJ0eSkge1xuICBjb25zdCB7XG4gICAgYmluZGluZ1xuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICB0eXBlXG4gIH0gPSBiaW5kaW5nO1xuICBpZiAoW1BST1BFUlRZX1RZUEUkMSwgWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRSwgWkVFQkVfVEFTS19ERUZJTklUSU9OLCBaRUJCRV9JTlBVVF9UWVBFLCBaRUVCRV9PVVRQVVRfVFlQRSwgWkVFQkVfUFJPUEVSVFlfVFlQRSwgWkVFQkVfVEFTS19IRUFERVJfVFlQRV0uaW5jbHVkZXModHlwZSkpIHtcbiAgICByZXR1cm4gJ1N0cmluZyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVmZXJlbmNlU2VsZWN0RW50cnkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGF1dG9Gb2N1c0VudHJ5LFxuICAgIGVsZW1lbnQsXG4gICAgZ2V0T3B0aW9uc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKGVsZW1lbnQpO1xuICBjb25zdCBwcmV2T3B0aW9ucyA9IHVzZVByZXZpb3VzKG9wdGlvbnMpO1xuXG4gIC8vIGF1dG8gZm9jdXMgc3BlY2lmYyBvdGhlciBlbnRyeSB3aGVuIG9wdGlvbnMgY2hhbmdlZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXNFbnRyeSAmJiBwcmV2T3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IHByZXZPcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBxdWVyeShgW2RhdGEtZW50cnktaWQ9XCIke2F1dG9Gb2N1c0VudHJ5fVwiXWApO1xuICAgICAgY29uc3QgZm9jdXNhYmxlSW5wdXQgPSBxdWVyeSgnLmJpby1wcm9wZXJ0aWVzLXBhbmVsLWlucHV0JywgZW50cnkpO1xuICAgICAgaWYgKGZvY3VzYWJsZUlucHV0KSB7XG4gICAgICAgIGZvY3VzYWJsZUlucHV0LnNlbGVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW29wdGlvbnNdKTtcbiAgcmV0dXJuIGpzeChTZWxlY3RFbnRyeSwge1xuICAgIC4uLnByb3BzXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgZXZlbnRUeXBlKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKSB8fCBbXTtcbiAgcmV0dXJuIGZpbmQoZXZlbnREZWZpbml0aW9ucywgZnVuY3Rpb24gKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXMoZGVmaW5pdGlvbiwgZXZlbnRUeXBlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBpc01lc3NhZ2VTdXBwb3J0ZWQoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSB8fCBpc0FueShlbGVtZW50LCBbJ2JwbW46U3RhcnRFdmVudCcsICdicG1uOkVuZEV2ZW50JywgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsICdicG1uOkJvdW5kYXJ5RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50J10pICYmICEhZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSkge1xuICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgfVxuICByZXR1cm4gZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2UoZWxlbWVudCkge1xuICBjb25zdCBtZXNzYWdlRXZlbnREZWZpbml0aW9uID0gZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgcmV0dXJuIG1lc3NhZ2VFdmVudERlZmluaXRpb24gJiYgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbi5nZXQoJ21lc3NhZ2VSZWYnKTtcbn1cbmZ1bmN0aW9uIGdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmNvbnN0IEVNUFRZX09QVElPTiA9ICcnO1xuY29uc3QgQ1JFQVRFX05FV19PUFRJT04gPSAnY3JlYXRlLW5ldyc7XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBNZXNzYWdlUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzTWVzc2FnZVN1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW3tcbiAgICBpZDogJ21lc3NhZ2VSZWYnLFxuICAgIGNvbXBvbmVudDogTWVzc2FnZVJlZixcbiAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIE1lc3NhZ2VSZWYocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IG1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBnZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gZ2V0TWVzc2FnZShlbGVtZW50KTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UuZ2V0KCdpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFlfT1BUSU9OO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb25zdCByb290ID0gZ2V0Um9vdChtZXNzYWdlRXZlbnREZWZpbml0aW9uKTtcbiAgICBsZXQgbWVzc2FnZTtcblxuICAgIC8vICgxKSBjcmVhdGUgbmV3IG1lc3NhZ2VcbiAgICBpZiAodmFsdWUgPT09IENSRUFURV9ORVdfT1BUSU9OKSB7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZCgnTWVzc2FnZV8nKTtcbiAgICAgIG1lc3NhZ2UgPSBjcmVhdGVFbGVtZW50KCdicG1uOk1lc3NhZ2UnLCB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lOiBpZFxuICAgICAgfSwgcm9vdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgdmFsdWUgPSBtZXNzYWdlLmdldCgnaWQnKTtcbiAgICB9XG5cbiAgICAvLyAoMikgdXBkYXRlIChvciByZW1vdmUpIG1lc3NhZ2VSZWZcbiAgICBtZXNzYWdlID0gZmluZFJvb3RFbGVtZW50QnlJZChtZXNzYWdlRXZlbnREZWZpbml0aW9uLCAnYnBtbjpNZXNzYWdlJywgdmFsdWUpIHx8IG1lc3NhZ2U7XG5cbiAgICAvLyAoMykgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgcmV0dXJuIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiwge1xuICAgICAgbWVzc2FnZVJlZjogbWVzc2FnZVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gW3tcbiAgICAgIHZhbHVlOiBFTVBUWV9PUFRJT04sXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBDUkVBVEVfTkVXX09QVElPTixcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NyZWF0ZSBuZXcgLi4uJylcbiAgICB9XTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksICdicG1uOk1lc3NhZ2UnKTtcbiAgICBjb25zdCBmaWx0ZXJlZE1lc3NhZ2VzID0gd2l0aG91dFRlbXBsYXRlZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcbiAgICBzb3J0QnlOYW1lKGZpbHRlcmVkTWVzc2FnZXMpLmZvckVhY2gobWVzc2FnZSA9PiB7XG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICB2YWx1ZTogbWVzc2FnZS5nZXQoJ2lkJyksXG4gICAgICAgIGxhYmVsOiBtZXNzYWdlLmdldCgnbmFtZScpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcbiAgcmV0dXJuIFJlZmVyZW5jZVNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbWVzc2FnZVJlZicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnR2xvYmFsIG1lc3NhZ2UgcmVmZXJlbmNlJyksXG4gICAgYXV0b0ZvY3VzRW50cnk6ICdtZXNzYWdlTmFtZScsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIHdpdGhvdXRUZW1wbGF0ZWRNZXNzYWdlcyhtZXNzYWdlcykge1xuICByZXR1cm4gbWVzc2FnZXMuZmlsdGVyKG1lc3NhZ2UgPT4gIW1lc3NhZ2UuZ2V0KCd6ZWViZTptb2RlbGVyVGVtcGxhdGUnKSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHNvcnRCeU5hbWUoZWxlbWVudHMpIHtcbiAgcmV0dXJuIHNvcnRCeShlbGVtZW50cywgZSA9PiAoZS5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuY29uc3QgTE9XRVJfUFJJT1JJVFkkMSA9IDMwMDtcbmNvbnN0IEFMV0FZU19ESVNQTEFZRURfR1JPVVBTJDEgPSBbJ2dlbmVyYWwnLCAnZG9jdW1lbnRhdGlvbicsICdtdWx0aUluc3RhbmNlJ107XG5sZXQgRWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlciQxID0gY2xhc3MgRWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlciB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRUZW1wbGF0ZXMsIHByb3BlcnRpZXNQYW5lbCwgaW5qZWN0b3IpIHtcbiAgICBwcm9wZXJ0aWVzUGFuZWwucmVnaXN0ZXJQcm92aWRlcihMT1dFUl9QUklPUklUWSQxLCB0aGlzKTtcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xuICB9XG4gIGdldEdyb3VwcyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdyb3VwcyA9PiB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX2luamVjdG9yO1xuICAgICAgdXBkYXRlTWVzc2FnZUdyb3VwKGdyb3VwcywgZWxlbWVudCk7XG4gICAgICBpZiAoIXRoaXMuX3Nob3VsZFNob3dUZW1wbGF0ZVByb3BlcnRpZXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG5cbiAgICAgIC8vICgwKSBDb3B5IHByb3ZpZGVkIGdyb3Vwc1xuICAgICAgZ3JvdXBzID0gZ3JvdXBzLnNsaWNlKCk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZXNHcm91cCA9IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaWQ6ICdFbGVtZW50VGVtcGxhdGVzX19UZW1wbGF0ZScsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RlbXBsYXRlJyksXG4gICAgICAgIGNvbXBvbmVudDogY3JlYXRlRWxlbWVudFRlbXBsYXRlc0dyb3VwKHtcbiAgICAgICAgICBnZXRUZW1wbGF0ZUlkOiBnZXRUZW1wbGF0ZUlkJDFcbiAgICAgICAgfSksXG4gICAgICAgIGVudHJpZXM6IFRlbXBsYXRlUHJvcHMoe1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZWxlbWVudFRlbXBsYXRlczogdGhpcy5fZWxlbWVudFRlbXBsYXRlc1xuICAgICAgICB9KVxuICAgICAgfTtcblxuICAgICAgLy8gKDEpIEFkZCB0ZW1wbGF0ZXMgZ3JvdXBcbiAgICAgIGFkZEdyb3Vwc0FmdGVyJDEoQUxXQVlTX0RJU1BMQVlFRF9HUk9VUFMkMSwgZ3JvdXBzLCBbdGVtcGxhdGVzR3JvdXBdKTtcbiAgICAgIGxldCBlbGVtZW50VGVtcGxhdGUgPSB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KTtcbiAgICAgIGlmIChlbGVtZW50VGVtcGxhdGUpIHtcbiAgICAgICAgZWxlbWVudFRlbXBsYXRlID0gYXBwbHlDb25kaXRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZSk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlU3BlY2lmaWNHcm91cHMgPSBbXS5jb25jYXQoQ3VzdG9tUHJvcGVydGllcyQxKHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnRUZW1wbGF0ZSxcbiAgICAgICAgICBpbmplY3RvclxuICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gKDIpIGFkZCB0ZW1wbGF0ZS1zcGVjaWZpYyBwcm9wZXJ0aWVzIGdyb3Vwc1xuICAgICAgICBhZGRHcm91cHNBZnRlciQxKCdFbGVtZW50VGVtcGxhdGVzX19UZW1wbGF0ZScsIGdyb3VwcywgdGVtcGxhdGVTcGVjaWZpY0dyb3Vwcyk7XG4gICAgICB9XG5cbiAgICAgIC8vICgzKSBhcHBseSBlbnRyaWVzIHZpc2libGVcbiAgICAgIGlmIChnZXRUZW1wbGF0ZUlkJDEoZWxlbWVudCkpIHtcbiAgICAgICAgZ3JvdXBzID0gZmlsdGVyV2l0aEVudHJpZXNWaXNpYmxlJDEoZWxlbWVudFRlbXBsYXRlIHx8IHt9LCBncm91cHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9O1xuICB9XG4gIF9zaG91bGRTaG93VGVtcGxhdGVQcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VGVtcGxhdGVJZCQxKGVsZW1lbnQpIHx8IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMuZ2V0QWxsKGVsZW1lbnQpLmxlbmd0aDtcbiAgfVxufTtcbkVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXIkMS4kaW5qZWN0ID0gWydlbGVtZW50VGVtcGxhdGVzJywgJ3Byb3BlcnRpZXNQYW5lbCcsICdpbmplY3RvciddO1xuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHVwZGF0ZU1lc3NhZ2VHcm91cChncm91cHMsIGVsZW1lbnQpIHtcbiAgY29uc3QgbWVzc2FnZUdyb3VwID0gZmluZEdyb3VwKGdyb3VwcywgJ21lc3NhZ2UnKTtcbiAgaWYgKCFtZXNzYWdlR3JvdXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbWVzc2FnZUdyb3VwLmVudHJpZXMgPSBvdmVycmlkZUdlbmVyaWNFbnRyaWVzKG1lc3NhZ2VHcm91cC5lbnRyaWVzLCBNZXNzYWdlUHJvcHMoe1xuICAgIGVsZW1lbnRcbiAgfSkpO1xufVxuZnVuY3Rpb24gZmluZEdyb3VwKGdyb3VwcywgaWQpIHtcbiAgcmV0dXJuIGdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gaWQpO1xufVxuZnVuY3Rpb24gb3ZlcnJpZGVHZW5lcmljRW50cmllcyhvbGRFbnRyaWVzLCBuZXdFbnRyaWVzKSB7XG4gIHJldHVybiBvbGRFbnRyaWVzLm1hcChvbGRFbnRyeSA9PiBuZXdFbnRyaWVzLmZpbmQobmV3RW50cnkgPT4gbmV3RW50cnkuaWQgPT09IG9sZEVudHJ5LmlkKSB8fCBvbGRFbnRyeSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBpZE9ySWRzXG4gKiBAcGFyYW0ge0FycmF5PHsgaWQ6IHN0cmluZyB9fSBncm91cHNcbiAqIEBwYXJhbSB7QXJyYXk8eyBpZDogc3RyaW5nIH0+fSBncm91cHNUb0FkZFxuICovXG5mdW5jdGlvbiBhZGRHcm91cHNBZnRlciQxKGlkT3JJZHMsIGdyb3VwcywgZ3JvdXBzVG9BZGQpIHtcbiAgbGV0IGlkcyA9IGlkT3JJZHM7XG4gIGlmICghQXJyYXkuaXNBcnJheShpZE9ySWRzKSkge1xuICAgIGlkcyA9IFtpZE9ySWRzXTtcbiAgfVxuXG4gIC8vIGZpbmQgaW5kZXggb2YgbGFzdCBncm91cCB3aXRoIHByb3ZpZGVkIGlkXG4gIGNvbnN0IGluZGV4ID0gZ3JvdXBzLnJlZHVjZSgoYWNjLCBncm91cCwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaWRzLmluY2x1ZGVzKGdyb3VwLmlkKSA/IGluZGV4IDogYWNjO1xuICB9LCAtMSk7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBncm91cHMuc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4uZ3JvdXBzVG9BZGQpO1xuICB9IGVsc2Uge1xuICAgIC8vIGFkZCBpbiB0aGUgYmVnaW5uaW5nIGlmIGdyb3VwIHdpdGggcHJvdmlkZWQgaWQgaXMgbWlzc2luZ1xuICAgIGdyb3Vwcy51bnNoaWZ0KC4uLmdyb3Vwc1RvQWRkKTtcbiAgfVxufVxuZnVuY3Rpb24gZmlsdGVyV2l0aEVudHJpZXNWaXNpYmxlJDEodGVtcGxhdGUsIGdyb3Vwcykge1xuICBpZiAoIXRlbXBsYXRlLmVudHJpZXNWaXNpYmxlKSB7XG4gICAgcmV0dXJuIGdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4ge1xuICAgICAgcmV0dXJuIEFMV0FZU19ESVNQTEFZRURfR1JPVVBTJDEuaW5jbHVkZXMoZ3JvdXAuaWQpIHx8IGdyb3VwLmlkLnN0YXJ0c1dpdGgoJ0VsZW1lbnRUZW1wbGF0ZXNfXycpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBncm91cHM7XG59XG5cbnZhciBwcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUkMSA9IHtcbiAgX19kZXBlbmRzX186IFt0cmFuc2xhdGVNb2R1bGVdLFxuICBfX2luaXRfXzogWydlbGVtZW50VGVtcGxhdGVzUHJvcGVydGllc1Byb3ZpZGVyJ10sXG4gIGVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXI6IFsndHlwZScsIEVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXIkMV1cbn07XG5cbnZhciBpbmRleCQxID0ge1xuICBfX2RlcGVuZHNfXzogW2NvcmVNb2R1bGUkMSwgcHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlJDFdXG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGxlZ2FjeSBzY29wZXMgZGVzY3JpcHRvciB0byBuZXdlciBzdXBwb3J0ZWQgYXJyYXkgc3RydWN0dXJlLlxuICpcbiAqIEZvciBleGFtcGxlLCBpdCB0cmFuc2Zvcm1zXG4gKlxuICogc2NvcGVzOiB7XG4gKiAgICdjYW11bmRhOkNvbm5lY3Rvcic6XG4gKiAgICAgeyBwcm9wZXJ0aWVzOiBbXVxuICogICB9XG4gKiB9XG4gKlxuICogdG9cbiAqXG4gKiBzY29wZXM6IFtcbiAqICAge1xuICogICAgIHR5cGU6ICdjYW11bmRhOkNvbm5lY3RvcicsXG4gKiAgICAgcHJvcGVydGllczogW11cbiAqICAgfVxuICogXVxuICpcbiAqIEBwYXJhbSB7U2NvcGVzRGVzY3JpcHRvcn0gc2NvcGVzXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiBoYW5kbGVMZWdhY3lTY29wZXMoc2NvcGVzID0gW10pIHtcbiAgY29uc3Qgc2NvcGVzQXNBcnJheSA9IFtdO1xuICBpZiAoIWlzT2JqZWN0KHNjb3BlcykpIHtcbiAgICByZXR1cm4gc2NvcGVzO1xuICB9XG4gIGZvckVhY2goa2V5cyhzY29wZXMpLCBmdW5jdGlvbiAoc2NvcGVOYW1lKSB7XG4gICAgc2NvcGVzQXNBcnJheS5wdXNoKGFzc2lnbih7XG4gICAgICB0eXBlOiBzY29wZU5hbWVcbiAgICB9LCBzY29wZXNbc2NvcGVOYW1lXSkpO1xuICB9KTtcbiAgcmV0dXJuIHNjb3Blc0FzQXJyYXk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGlucHV0IHBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBzY3JpcHRGb3JtYXRcbiAgfSA9IGJpbmRpbmc7XG4gIGxldCBwYXJhbWV0ZXJWYWx1ZSwgcGFyYW1ldGVyRGVmaW5pdGlvbjtcbiAgaWYgKHNjcmlwdEZvcm1hdCkge1xuICAgIHBhcmFtZXRlckRlZmluaXRpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6U2NyaXB0Jywge1xuICAgICAgc2NyaXB0Rm9ybWF0LFxuICAgICAgdmFsdWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwYXJhbWV0ZXJWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6SW5wdXRQYXJhbWV0ZXInLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZTogcGFyYW1ldGVyVmFsdWUsXG4gICAgZGVmaW5pdGlvbjogcGFyYW1ldGVyRGVmaW5pdGlvblxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gb3V0cHV0IHBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU91dHB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3Qge1xuICAgIHNjcmlwdEZvcm1hdCxcbiAgICBzb3VyY2VcbiAgfSA9IGJpbmRpbmc7XG4gIGxldCBwYXJhbWV0ZXJWYWx1ZSwgcGFyYW1ldGVyRGVmaW5pdGlvbjtcbiAgaWYgKHNjcmlwdEZvcm1hdCkge1xuICAgIHBhcmFtZXRlckRlZmluaXRpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6U2NyaXB0Jywge1xuICAgICAgc2NyaXB0Rm9ybWF0LFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhcmFtZXRlclZhbHVlID0gc291cmNlO1xuICB9XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6T3V0cHV0UGFyYW1ldGVyJywge1xuICAgIG5hbWU6IHZhbHVlLFxuICAgIHZhbHVlOiBwYXJhbWV0ZXJWYWx1ZSxcbiAgICBkZWZpbml0aW9uOiBwYXJhbWV0ZXJEZWZpbml0aW9uXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBjYW11bmRhIHByb3BlcnR5IGZyb20gdGhlIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYW11bmRhUHJvcGVydHkoYmluZGluZywgdmFsdWUgPSAnJywgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3Qge1xuICAgIG5hbWVcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6UHJvcGVydHknLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgY2FtdW5kYTppbiBlbGVtZW50IGZyb20gZ2l2ZW4gYmluZGluZy5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhbXVuZGFJbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3QgYXR0cnMgPSBjcmVhdGVDYW11bmRhSW5PdXRBdHRycyhiaW5kaW5nLCB2YWx1ZSk7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6SW4nLCBhdHRycyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGNhbXVuZGE6aW4gd2l0aCBidXNpbmVzc0tleSBlbGVtZW50IGZyb20gZ2l2ZW4gYmluZGluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FtdW5kYUluV2l0aEJ1c2luZXNzS2V5KHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdjYW11bmRhOkluJywge1xuICAgIGJ1c2luZXNzS2V5OiB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgY2FtdW5kYTpvdXQgZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYW11bmRhT3V0KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCBhdHRycyA9IGNyZWF0ZUNhbXVuZGFJbk91dEF0dHJzKGJpbmRpbmcsIHZhbHVlKTtcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnY2FtdW5kYTpPdXQnLCBhdHRycyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGNhbXVuZGE6ZXhlY3V0aW9uTGlzdGVuZXIgZWxlbWVudCBjb250YWluaW5nIGFuIGlubGluZSBzY3JpcHQgZnJvbSBnaXZlbiBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FtdW5kYUV4ZWN1dGlvbkxpc3RlbmVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCB7XG4gICAgZXZlbnQsXG4gICAgaW1wbGVtZW50YXRpb25UeXBlLFxuICAgIHNjcmlwdEZvcm1hdFxuICB9ID0gYmluZGluZztcblxuICAvLyBUbyBndWFyYW50ZWUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc2NyaXB0Rm9ybWF0IGlzIHRha2VuIGludG8gYWNjb3VudCBhbmQgaGFzIHByZWNlZGVuY2UgYmVmb3JlIGFueSBvdGhlciB0eXBlXG4gIGlmIChpbXBsZW1lbnRhdGlvblR5cGUgPT09ICdzY3JpcHQnIHx8IHNjcmlwdEZvcm1hdCkge1xuICAgIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXInLCB7XG4gICAgICBldmVudCxcbiAgICAgIHNjcmlwdDogYnBtbkZhY3RvcnkuY3JlYXRlKCdjYW11bmRhOlNjcmlwdCcsIHtcbiAgICAgICAgc2NyaXB0Rm9ybWF0LFxuICAgICAgICB2YWx1ZVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyJywge1xuICAgIGV2ZW50LFxuICAgIFtpbXBsZW1lbnRhdGlvblR5cGVdOiB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgY2FtdW5kYTpmaWVsZCBlbGVtZW50IGNvbnRhaW5pbmcgc3RyaW5nIG9yIGV4cHJlc3Npb24gZnJvbSBnaXZlbiBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FtdW5kYUZpZWxkSW5qZWN0aW9uKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCBERUZBVUxUX1BST1BTID0ge1xuICAgICdzdHJpbmcnOiB1bmRlZmluZWQsXG4gICAgJ2V4cHJlc3Npb24nOiB1bmRlZmluZWQsXG4gICAgJ25hbWUnOiB1bmRlZmluZWRcbiAgfTtcbiAgY29uc3QgcHJvcHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUFJPUFMpO1xuICBjb25zdCB7XG4gICAgZXhwcmVzc2lvbixcbiAgICBuYW1lXG4gIH0gPSBiaW5kaW5nO1xuICBpZiAoIWV4cHJlc3Npb24pIHtcbiAgICBwcm9wcy5zdHJpbmcgPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBwcm9wcy5leHByZXNzaW9uID0gdmFsdWU7XG4gIH1cbiAgcHJvcHMubmFtZSA9IG5hbWU7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6RmllbGQnLCBwcm9wcyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGNhbXVuZGE6ZXJyb3JFdmVudERlZmluaXRpb24gZWxlbWVudCBjb250YWluaW5nIGV4cHJlc3Npb24gYW5kIGVycm9yUmVmXG4gKiBmcm9tIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZXJyb3JSZWZcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbihleHByZXNzaW9uLCBlcnJvclJlZiwgcGFyZW50LCBicG1uRmFjdG9yeSkge1xuICBjb25zdCBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvbicsIHtcbiAgICBlcnJvclJlZixcbiAgICBleHByZXNzaW9uXG4gIH0pO1xuICBlcnJvckV2ZW50RGVmaW5pdGlvbi4kcGFyZW50ID0gcGFyZW50O1xuICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb247XG59XG5cbi8qKlxuICogQ3JlYXRlIGJwbW46ZXJyb3IgZWxlbWVudCBjb250YWluaW5nIGEgc3BlY2lmaWMgZXJyb3IgaWQgZ2l2ZW4gYnkgYSBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBiaW5kaW5nRXJyb3JSZWZcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4geyBNb2RkbGVFbGVtZW50IH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXJyb3IoYmluZGluZ0Vycm9yUmVmLCBwYXJlbnQsIGJwbW5GYWN0b3J5KSB7XG4gIGNvbnN0IGVycm9yID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkVycm9yJywge1xuICAgIC8vIHdlIG5lZWQgdG8gbGF0ZXIgcmV0cmlldmUgdGhlIGVycm9yIGZyb20gYSBiaW5kaW5nXG4gICAgaWQ6IG5leHRJZCgnRXJyb3JfJyArIGJpbmRpbmdFcnJvclJlZiArICdfJylcbiAgfSk7XG4gIGVycm9yLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlIHByb3BlcnRpZXMgZm9yIGNhbXVuZGE6aW4gYW5kIGNhbXVuZGE6b3V0IHR5cGVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDYW11bmRhSW5PdXRBdHRycyhiaW5kaW5nLCB2YWx1ZSkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG4gIGNvbnN0IHtcbiAgICBleHByZXNzaW9uLFxuICAgIHNvdXJjZSxcbiAgICBzb3VyY2VFeHByZXNzaW9uLFxuICAgIHRhcmdldCxcbiAgICB0eXBlLFxuICAgIHZhcmlhYmxlc1xuICB9ID0gYmluZGluZztcblxuICAvLyBleHBsaWNpdGx5IGNvdmVyIGFsbCBjb25kaXRpb25zIGFzIHNwZWNpZmllZCBoZXJlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2FtdW5kYS9jYW11bmRhLW1vZGVsZXIvYmxvYi9kZXZlbG9wL2RvY3MvZWxlbWVudC10ZW1wbGF0ZXMvUkVBRE1FLm1kI2NhbXVuZGFpblxuICBpZiAodHlwZSA9PT0gJ2NhbXVuZGE6aW4nKSB7XG4gICAgaWYgKHRhcmdldCAmJiAhZXhwcmVzc2lvbiAmJiAhdmFyaWFibGVzKSB7XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgZXhwcmVzc2lvbiA9PT0gdHJ1ZSAmJiAhdmFyaWFibGVzKSB7XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlRXhwcmVzc2lvbiA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIXRhcmdldCAmJiAhZXhwcmVzc2lvbiAmJiB2YXJpYWJsZXMgPT09ICdsb2NhbCcpIHtcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xuICAgICAgcHJvcGVydGllcy52YXJpYWJsZXMgPSAnYWxsJztcbiAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiAhZXhwcmVzc2lvbiAmJiB2YXJpYWJsZXMgPT09ICdsb2NhbCcpIHtcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xuICAgICAgcHJvcGVydGllcy5zb3VyY2UgPSB2YWx1ZTtcbiAgICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIGV4cHJlc3Npb24gJiYgdmFyaWFibGVzID09PSAnbG9jYWwnKSB7XG4gICAgICBwcm9wZXJ0aWVzLmxvY2FsID0gdHJ1ZTtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlRXhwcmVzc2lvbiA9IHZhbHVlO1xuICAgICAgcHJvcGVydGllcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgfSBlbHNlIGlmICghdGFyZ2V0ICYmICFleHByZXNzaW9uICYmIHZhcmlhYmxlcyA9PT0gJ2FsbCcpIHtcbiAgICAgIHByb3BlcnRpZXMudmFyaWFibGVzID0gJ2FsbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb25maWd1cmF0aW9uIGZvciBjYW11bmRhOmluIGVsZW1lbnQgdGVtcGxhdGUgYmluZGluZycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cGxpY2l0bHkgY292ZXIgYWxsIGNvbmRpdGlvbnMgYXMgc3BlY2lmaWVkIGhlcmU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW11bmRhL2NhbXVuZGEtbW9kZWxlci9ibG9iL2RldmVsb3AvZG9jcy9lbGVtZW50LXRlbXBsYXRlcy9SRUFETUUubWQjY2FtdW5kYW91dFxuICBpZiAodHlwZSA9PT0gJ2NhbXVuZGE6b3V0Jykge1xuICAgIGlmIChzb3VyY2UgJiYgIXNvdXJjZUV4cHJlc3Npb24gJiYgIXZhcmlhYmxlcykge1xuICAgICAgcHJvcGVydGllcy50YXJnZXQgPSB2YWx1ZTtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlID0gc291cmNlO1xuICAgIH0gZWxzZSBpZiAoIXNvdXJjZSAmJiBzb3VyY2VFeHByZXNzaW9uICYmICF2YXJpYWJsZXMpIHtcbiAgICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdmFsdWU7XG4gICAgICBwcm9wZXJ0aWVzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xuICAgIH0gZWxzZSBpZiAoIXNvdXJjZSAmJiAhc291cmNlRXhwcmVzc2lvbiAmJiB2YXJpYWJsZXMgPT09ICdhbGwnKSB7XG4gICAgICBwcm9wZXJ0aWVzLnZhcmlhYmxlcyA9ICdhbGwnO1xuICAgIH0gZWxzZSBpZiAoc291cmNlICYmICFzb3VyY2VFeHByZXNzaW9uICYmIHZhcmlhYmxlcyA9PT0gJ2xvY2FsJykge1xuICAgICAgcHJvcGVydGllcy5sb2NhbCA9IHRydWU7XG4gICAgICBwcm9wZXJ0aWVzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICghc291cmNlICYmIHNvdXJjZUV4cHJlc3Npb24gJiYgdmFyaWFibGVzID09PSAnbG9jYWwnKSB7XG4gICAgICBwcm9wZXJ0aWVzLmxvY2FsID0gdHJ1ZTtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlRXhwcmVzc2lvbiA9IHNvdXJjZUV4cHJlc3Npb247XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIXNvdXJjZSAmJiAhc291cmNlRXhwcmVzc2lvbiAmJiB2YXJpYWJsZXMgPT09ICdsb2NhbCcpIHtcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xuICAgICAgcHJvcGVydGllcy52YXJpYWJsZXMgPSAnYWxsJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yIGNhbXVuZGE6b3V0IGVsZW1lbnQgdGVtcGxhdGUgYmluZGluZycpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuY29uc3QgQ0FNVU5EQV9TRVJWSUNFX1RBU0tfTElLRSA9IFsnY2FtdW5kYTpjbGFzcycsICdjYW11bmRhOmRlbGVnYXRlRXhwcmVzc2lvbicsICdjYW11bmRhOmV4cHJlc3Npb24nXTtcblxuLyoqXG4gKiBBcHBsaWVzIGFuIGVsZW1lbnQgdGVtcGxhdGUgdG8gYW4gZWxlbWVudC4gU2V0cyBgY2FtdW5kYTptb2RlbGVyVGVtcGxhdGVgIGFuZFxuICogYGNhbXVuZGE6bW9kZWxlclRlbXBsYXRlVmVyc2lvbmAuXG4gKi9cbmNsYXNzIENoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihicG1uRmFjdG9yeSwgYnBtblJlcGxhY2UsIGNvbW1hbmRTdGFjaywgbW9kZWxpbmcpIHtcbiAgICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xuICAgIHRoaXMuX2JwbW5SZXBsYWNlID0gYnBtblJlcGxhY2U7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xuICAgIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIGFuIGVsZW1lbnQncyB0ZW1wbGF0ZSBhbmQgdXBkYXRlIGl0cyBwcm9wZXJ0aWVzIGFzIHNwZWNpZmllZCBpbiBgbmV3VGVtcGxhdGVgLiBTcGVjaWZ5XG4gICAqIGBvbGRUZW1wbGF0ZWAgdG8gdXBkYXRlIGZyb20gb25lIHRlbXBsYXRlIHRvIGFub3RoZXIuIElmIGBuZXdUZW1wbGF0ZWAgaXNuJ3Qgc3BlY2lmaWVkIHRoZVxuICAgKiBgY2FtdW5kYTptb2RlbGVyVGVtcGxhdGVgIGFuZCBgY2FtdW5kYTptb2RlbGVyVGVtcGxhdGVWZXJzaW9uYCBwcm9wZXJ0aWVzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tXG4gICAqIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5lbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dC5vbGRUZW1wbGF0ZV1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0Lm5ld1RlbXBsYXRlXVxuICAgKi9cbiAgcHJlRXhlY3V0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbmV3VGVtcGxhdGUgPSBjb250ZXh0Lm5ld1RlbXBsYXRlLFxuICAgICAgb2xkVGVtcGxhdGUgPSBjb250ZXh0Lm9sZFRlbXBsYXRlO1xuICAgIGxldCBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50O1xuXG4gICAgLy8gdXBkYXRlIGNhbXVuZGE6bW9kZWxlclRlbXBsYXRlIGF0dHJpYnV0ZVxuICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuICAgIGlmIChuZXdUZW1wbGF0ZSkge1xuICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCA9IHRoaXMuX3VwZGF0ZVRhc2tUeXBlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXIgcHJvcGVydGllc1xuICAgICAgdGhpcy5fdXBkYXRlQ2FtdW5kYUV4ZWN1dGlvbkxpc3RlbmVyUHJvcGVydGllcyhlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBjYW11bmRhOkZpZWxkIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFGaWVsZFByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6SW4gYW5kIGNhbXVuZGE6T3V0IHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFJbk91dFByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6SW5wdXRQYXJhbWV0ZXIgYW5kIGNhbXVuZGE6T3V0cHV0UGFyYW1ldGVyIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFJbnB1dE91dHB1dFBhcmFtZXRlclByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6UHJvcGVydHkgcHJvcGVydGllc1xuICAgICAgdGhpcy5fdXBkYXRlQ2FtdW5kYVByb3BlcnR5UHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gICAgICAvLyB1cGRhdGUgY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvbiBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLl91cGRhdGVDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb25Qcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzIGZvciBlYWNoIHNjb3BlXG4gICAgICBoYW5kbGVMZWdhY3lTY29wZXMobmV3VGVtcGxhdGUuc2NvcGVzKS5mb3JFYWNoKG5ld1Njb3BlVGVtcGxhdGUgPT4ge1xuICAgICAgICB0aGlzLl91cGRhdGVTY29wZVByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1Njb3BlVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeSxcbiAgICAgIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0pO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50c1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGNhbXVuZGE6RXJyb3JFdmVudERlZmluaXRpb25gIHByb3BlcnRpZXMgb2Ygc3BlY2lmaWVkIGJ1c2luZXNzIG9iamVjdC4gRXZlbnRcbiAgICogZGVmaW5pdGlvbnMgY2FuIG9ubHkgZXhpc3QgaW4gYGJwbW46RXh0ZW5zaW9uRWxlbWVudHNgLlxuICAgKlxuICAgKiBFbnN1cmVzIGFuIGJwbW46RXJyb3IgZXhpc3RzIGZvciB0aGUgZXZlbnQgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlQ2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmVycm9yRXZlbnREZWZpbml0aW9uJztcbiAgICB9KTtcblxuICAgIC8vICgxKSBkbyBub3Qgb3ZlcnJpZGUgaWYgbm8gdXBkYXRlc1xuICAgIGlmICghbmV3UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIGNvbnN0IG9sZEVycm9yRXZlbnREZWZpbml0aW9ucyA9IGZpbmRFeHRlbnNpb25zKGVsZW1lbnQsIFsnY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvbiddKTtcbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkob2xkVGVtcGxhdGUsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgb2xkRXZlbnREZWZpbml0aW9uID0gb2xkUHJvcGVydHkgJiYgZmluZE9sZEJ1c2luZXNzT2JqZWN0KGV4dGVuc2lvbkVsZW1lbnRzLCBvbGRQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCBldmVudCBkZWZpbml0aW9uc1xuICAgICAgaWYgKG9sZFByb3BlcnR5ICYmIG9sZEV2ZW50RGVmaW5pdGlvbikge1xuICAgICAgICBpZiAoIXByb3BlcnR5Q2hhbmdlZChvbGRFdmVudERlZmluaXRpb24sIG9sZFByb3BlcnR5KSkge1xuICAgICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogb2xkRXZlbnREZWZpbml0aW9uLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBleHByZXNzaW9uOiBuZXdQcm9wZXJ0eS52YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShvbGRFcnJvckV2ZW50RGVmaW5pdGlvbnMsIG9sZEV2ZW50RGVmaW5pdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vICgzKSBjcmVhdGUgbmV3IGV2ZW50IGRlZmluaXRpb24gKyBlcnJvclxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZ2V0Um9vdChnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSksXG4gICAgICAgICAgbmV3RXJyb3IgPSBjcmVhdGVFcnJvcihuZXdCaW5kaW5nLmVycm9yUmVmLCByb290RWxlbWVudCwgYnBtbkZhY3RvcnkpLFxuICAgICAgICAgIG5ld0V2ZW50RGVmaW5pdGlvbiA9IGNyZWF0ZUNhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbihuZXdQcm9wZXJ0eS52YWx1ZSwgbmV3RXJyb3IsIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiByb290RWxlbWVudCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICByb290RWxlbWVudHM6IFsuLi5yb290RWxlbWVudC5nZXQoJ3Jvb3RFbGVtZW50cycpLCBuZXdFcnJvcl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgbmV3RXZlbnREZWZpbml0aW9uXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgcmVtb3ZlIG9sZCBldmVudCBkZWZpbml0aW9uc1xuICAgIGlmIChvbGRFcnJvckV2ZW50RGVmaW5pdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZhbHVlczogd2l0aG91dChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB2YWx1ZSA9PiBvbGRFcnJvckV2ZW50RGVmaW5pdGlvbnMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGBjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyYCBwcm9wZXJ0aWVzIG9mIHNwZWNpZmllZCBidXNpbmVzcyBvYmplY3QuIEV4ZWN1dGlvbiBsaXN0ZW5lcnNcbiAgICogd2lsbCBhbHdheXMgYmUgb3ZlcnJpZGRlbi4gRXhlY3V0aW9uIGxpc3RlbmVycyBjYW4gb25seSBleGlzdCBpbiBgYnBtbjpFeHRlbnNpb25FbGVtZW50c2AuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlQ2FtdW5kYUV4ZWN1dGlvbkxpc3RlbmVyUHJvcGVydGllcyhlbGVtZW50LCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6ZXhlY3V0aW9uTGlzdGVuZXInO1xuICAgIH0pO1xuXG4gICAgLy8gKDEpIGRvIG5vdCBvdmVycmlkZSBvbGQgZXhlY3V0aW9uIGxpc3RlbmVycyBpZiBubyBuZXcgZXhlY3V0aW9uIGxpc3RlbmVycyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcblxuICAgIC8vICgyKSByZW1vdmUgb2xkIGV4ZWN1dGlvbiBsaXN0ZW5lcnNcbiAgICBjb25zdCBvbGRFeGVjdXRpb25MaXN0ZW5lcnMgPSBmaW5kRXh0ZW5zaW9ucyhlbGVtZW50LCBbJ2NhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXInXSk7XG5cbiAgICAvLyAoMykgYWRkIG5ldyBleGVjdXRpb24gbGlzdGVuZXJzXG4gICAgY29uc3QgbmV3RXhlY3V0aW9uTGlzdGVuZXJzID0gbmV3UHJvcGVydGllcy5tYXAobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eS52YWx1ZTtcbiAgICAgIHJldHVybiBjcmVhdGVDYW11bmRhRXhlY3V0aW9uTGlzdGVuZXIobmV3QmluZGluZywgcHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIH0pO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlczogWy4uLndpdGhvdXQoZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgdmFsdWUgPT4gb2xkRXhlY3V0aW9uTGlzdGVuZXJzLmluY2x1ZGVzKHZhbHVlKSksIC4uLm5ld0V4ZWN1dGlvbkxpc3RlbmVyc11cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGNhbXVuZGE6RmllbGRgIHByb3BlcnRpZXMgb2Ygc3BlY2lmaWVkIGJ1c2luZXNzIG9iamVjdC5cbiAgICogSWYgYnVzaW5lc3Mgb2JqZWN0IGlzIGBjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyYCBvciBgY2FtdW5kYTpUYXNrTGlzdGVuZXJgIGBmaWVsZHNgIHByb3BlcnR5XG4gICAqIHdpbGwgYmUgdXBkYXRlZC4gT3RoZXJ3aXNlIGBleHRlbnNpb25FbGVtZW50cy52YWx1ZXNgIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYnVzaW5lc3NPYmplY3RcbiAgICovXG4gIF91cGRhdGVDYW11bmRhRmllbGRQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSwgYnVzaW5lc3NPYmplY3QpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmZpZWxkJztcbiAgICB9KTtcblxuICAgIC8vICgxKSBkbyBub3Qgb3ZlcnJpZGUgb2xkIGZpZWxkcyBpZiBubyBuZXcgZmllbGRzIHNwZWNpZmllZFxuICAgIGlmICghbmV3UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBpc0FueShidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyJywgJ2NhbXVuZGE6VGFza0xpc3RlbmVyJ10pID8gJ2ZpZWxkcycgOiAndmFsdWVzJztcbiAgICBjb25zdCBvbGRGaWVsZHMgPSBmaW5kRXh0ZW5zaW9ucyhlbGVtZW50LCBbJ2NhbXVuZGE6RmllbGQnXSk7XG4gICAgbmV3UHJvcGVydGllcy5mb3JFYWNoKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZFByb3BlcnR5ID0gZmluZE9sZFByb3BlcnR5KG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIG9sZEZpZWxkID0gb2xkUHJvcGVydHkgJiYgZmluZE9sZEJ1c2luZXNzT2JqZWN0KGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCBmaWVsZHNcbiAgICAgIGlmIChvbGRQcm9wZXJ0eSAmJiBvbGRGaWVsZCkge1xuICAgICAgICBpZiAoIXByb3BlcnR5Q2hhbmdlZChvbGRGaWVsZCwgb2xkUHJvcGVydHkpKSB7XG4gICAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBvbGRGaWVsZCxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgc3RyaW5nOiBuZXdQcm9wZXJ0eS52YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShvbGRGaWVsZHMsIG9sZEZpZWxkKTtcbiAgICAgIH1cblxuICAgICAgLy8gKDMpIGFkZCBuZXcgZmllbGRzXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3Q2FtdW5kYUZpZWxkSW5qZWN0aW9uID0gY3JlYXRlQ2FtdW5kYUZpZWxkSW5qZWN0aW9uKG5ld0JpbmRpbmcsIG5ld1Byb3BlcnR5LnZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBbcHJvcGVydHlOYW1lXTogWy4uLmJ1c2luZXNzT2JqZWN0LmdldChwcm9wZXJ0eU5hbWUpLCBuZXdDYW11bmRhRmllbGRJbmplY3Rpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSByZW1vdmUgb2xkIGZpZWxkc1xuICAgIGlmIChvbGRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIFtwcm9wZXJ0eU5hbWVdOiB3aXRob3V0KGJ1c2luZXNzT2JqZWN0LmdldChwcm9wZXJ0eU5hbWUpLCB2YWx1ZSA9PiBvbGRGaWVsZHMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGBjYW11bmRhOkluYCBhbmQgYGNhbXVuZGE6T3V0YCBwcm9wZXJ0aWVzIG9mIHNwZWNpZmllZCBidXNpbmVzcyBvYmplY3QuIE9ubHlcbiAgICogYGJwbW46Q2FsbEFjdGl2aXR5YCBhbmQgZXZlbnRzIHdpdGggYGJwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uYCBjYW4gaGF2ZSBpbnMuIE9ubHlcbiAgICogYGNhbXVuZGE6Q2FsbEFjdGl2aXR5YCBjYW4gaGF2ZSBvdXRzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICovXG4gIF91cGRhdGVDYW11bmRhSW5PdXRQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW4nIHx8IG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbjpidXNpbmVzc0tleScgfHwgbmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCc7XG4gICAgfSk7XG5cbiAgICAvLyAoMSkgZG8gbm90IG92ZXJyaWRlIG9sZCBmaWVsZHMgaWYgbm8gbmV3IGZpZWxkcyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGV4dGVuc2lvbiBlbGVtZW50cyBvZiBlaXRoZXIgc2lnbmFsIGV2ZW50IGRlZmluaXRpb24gb3IgY2FsbCBhY3Rpdml0eVxuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhnZXRTaWduYWxFdmVudERlZmluaXRpb24oZWxlbWVudCkgfHwgZWxlbWVudCk7XG4gICAgY29uc3Qgb2xkSW5zQW5kT3V0cyA9IGZpbmRFeHRlbnNpb25zKGV4dGVuc2lvbkVsZW1lbnRzLCBbJ2NhbXVuZGE6SW4nLCAnY2FtdW5kYTpPdXQnXSk7XG4gICAgbmV3UHJvcGVydGllcy5mb3JFYWNoKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZFByb3BlcnR5ID0gZmluZE9sZFByb3BlcnR5KG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eSAmJiBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRJbk91ck91dCA9IG9sZFByb3BlcnR5ICYmIGZpbmRPbGRCdXNpbmVzc09iamVjdChleHRlbnNpb25FbGVtZW50cywgb2xkUHJvcGVydHkpLFxuICAgICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gbmV3UHJvcGVydHkudmFsdWUsXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZSxcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgICAgbGV0IG5ld0luT3JPdXQ7XG5cbiAgICAgIC8vICgyKSB1cGRhdGUgb2xkIGlucyBhbmQgb3V0c1xuICAgICAgaWYgKG9sZFByb3BlcnR5ICYmIG9sZEluT3VyT3V0KSB7XG4gICAgICAgIGlmICghcHJvcGVydHlDaGFuZ2VkKG9sZEluT3VyT3V0LCBvbGRQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluJykge1xuICAgICAgICAgICAgaWYgKG5ld0JpbmRpbmcuZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzWydjYW11bmRhOnNvdXJjZUV4cHJlc3Npb24nXSA9IG5ld1Byb3BlcnR5VmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzWydjYW11bmRhOnNvdXJjZSddID0gbmV3UHJvcGVydHlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbjpidXNpbmVzc0tleScpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXNbJ2NhbXVuZGE6YnVzaW5lc3NLZXknXSA9IG5ld1Byb3BlcnR5VmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6b3V0Jykge1xuICAgICAgICAgICAgcHJvcGVydGllc1snY2FtdW5kYTp0YXJnZXQnXSA9IG5ld1Byb3BlcnR5VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6bG9jYWwgcHJvcGVydHkgaWYgaXQgY2hhbmdlZFxuICAgICAgICBpZiAob2xkQmluZGluZy5sb2NhbCAmJiAhbmV3QmluZGluZy5sb2NhbCB8fCAhb2xkQmluZGluZy5sb2NhbCAmJiBuZXdCaW5kaW5nLmxvY2FsKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5sb2NhbCA9IG5ld0JpbmRpbmcubG9jYWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXMocHJvcGVydGllcykpIHtcbiAgICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG9sZEluT3VyT3V0LFxuICAgICAgICAgICAgcHJvcGVydGllc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShvbGRJbnNBbmRPdXRzLCBvbGRJbk91ck91dCk7XG4gICAgICB9XG5cbiAgICAgIC8vICgzKSBhZGQgbmV3IGlucyBhbmQgb3V0c1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW4nKSB7XG4gICAgICAgICAgbmV3SW5Pck91dCA9IGNyZWF0ZUNhbXVuZGFJbihuZXdCaW5kaW5nLCBuZXdQcm9wZXJ0eVZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCcpIHtcbiAgICAgICAgICBuZXdJbk9yT3V0ID0gY3JlYXRlQ2FtdW5kYU91dChuZXdCaW5kaW5nLCBuZXdQcm9wZXJ0eVZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluOmJ1c2luZXNzS2V5Jykge1xuICAgICAgICAgIG5ld0luT3JPdXQgPSBjcmVhdGVDYW11bmRhSW5XaXRoQnVzaW5lc3NLZXkobmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBuZXdJbk9yT3V0XVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgcmVtb3ZlIG9sZCBpbnMgYW5kIG91dHNcbiAgICBpZiAob2xkSW5zQW5kT3V0cy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsdWVzOiB3aXRob3V0KGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIHZhbHVlID0+IG9sZEluc0FuZE91dHMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGBjYW11bmRhOklucHV0UGFyYW1ldGVyYCBhbmQgYGNhbXVuZGE6T3V0cHV0UGFyYW1ldGVyYCBwcm9wZXJ0aWVzIG9mIHNwZWNpZmllZCBidXNpbmVzc1xuICAgKiBvYmplY3QuIEJvdGggY2FuIG9ubHkgZXhpc3QgaW4gYGNhbXVuZGE6SW5wdXRPdXRwdXRgIHdoaWNoIGNhbiBleGlzdCBpbiBgYnBtbjpFeHRlbnNpb25FbGVtZW50c2BcbiAgICogb3IgYGNhbXVuZGE6Q29ubmVjdG9yYC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlQ2FtdW5kYUlucHV0T3V0cHV0UGFyYW1ldGVyUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUsIGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gbmV3VGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdUeXBlID0gbmV3QmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcicgfHwgbmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dHB1dFBhcmFtZXRlcic7XG4gICAgfSk7XG5cbiAgICAvLyAoMSkgZG8gbm90IG92ZXJyaWRlIG9sZCBpbnB1dHMgYW5kIG91dHB1dHMgaWYgbm8gbmV3IGlucHV0cyBhbmQgb3V0cHV0cyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICB9XG4gICAgbGV0IGlucHV0T3V0cHV0O1xuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6Q29ubmVjdG9yJykpIHtcbiAgICAgIGlucHV0T3V0cHV0ID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmlucHV0T3V0cHV0Jyk7XG4gICAgICBpZiAoIWlucHV0T3V0cHV0KSB7XG4gICAgICAgIGlucHV0T3V0cHV0ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdjYW11bmRhOklucHV0T3V0cHV0Jyk7XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpbnB1dE91dHB1dFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKTtcbiAgICAgIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICAgICAgaW5wdXRPdXRwdXQgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKTtcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIGlucHV0T3V0cHV0XVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9sZElucHV0cyA9IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTppbnB1dFBhcmFtZXRlcnMnKSA/IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTppbnB1dFBhcmFtZXRlcnMnKS5zbGljZSgpIDogW107XG4gICAgY29uc3Qgb2xkT3V0cHV0cyA9IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXJzJykgPyBpbnB1dE91dHB1dC5nZXQoJ2NhbXVuZGE6b3V0cHV0UGFyYW1ldGVycycpLnNsaWNlKCkgOiBbXTtcbiAgICBsZXQgcHJvcGVydHlOYW1lO1xuICAgIG5ld1Byb3BlcnRpZXMuZm9yRWFjaChuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBvbGRJbnB1dE9yT3V0cHV0ID0gb2xkUHJvcGVydHkgJiYgZmluZE9sZEJ1c2luZXNzT2JqZWN0KGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0eSksXG4gICAgICAgIG5ld1Byb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eS52YWx1ZSxcbiAgICAgICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdUeXBlID0gbmV3QmluZGluZy50eXBlO1xuICAgICAgbGV0IG5ld0lucHV0T3JPdXRwdXQsIHByb3BlcnRpZXM7XG5cbiAgICAgIC8vICgyKSB1cGRhdGUgb2xkIGlucHV0cyBhbmQgb3V0cHV0c1xuICAgICAgaWYgKG9sZFByb3BlcnR5ICYmIG9sZElucHV0T3JPdXRwdXQpIHtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eUNoYW5nZWQob2xkSW5wdXRPck91dHB1dCwgb2xkUHJvcGVydHkpKSB7XG4gICAgICAgICAgaWYgKGlzKG9sZElucHV0T3JPdXRwdXQsICdjYW11bmRhOklucHV0UGFyYW1ldGVyJykpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICBuYW1lOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG9sZElucHV0T3JPdXRwdXQsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzKG9sZElucHV0T3JPdXRwdXQsICdjYW11bmRhOklucHV0UGFyYW1ldGVyJykpIHtcbiAgICAgICAgICByZW1vdmUob2xkSW5wdXRzLCBvbGRJbnB1dE9yT3V0cHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmUob2xkT3V0cHV0cywgb2xkSW5wdXRPck91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gKDMpIGFkZCBuZXcgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcicpIHtcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSAnaW5wdXRQYXJhbWV0ZXJzJztcbiAgICAgICAgICBuZXdJbnB1dE9yT3V0cHV0ID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIobmV3QmluZGluZywgbmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICdvdXRwdXRQYXJhbWV0ZXJzJztcbiAgICAgICAgICBuZXdJbnB1dE9yT3V0cHV0ID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyKG5ld0JpbmRpbmcsIG5ld1Byb3BlcnR5VmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogaW5wdXRPdXRwdXQsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgW3Byb3BlcnR5TmFtZV06IFsuLi5pbnB1dE91dHB1dC5nZXQocHJvcGVydHlOYW1lKSwgbmV3SW5wdXRPck91dHB1dF1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBvbGQgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgaWYgKG9sZElucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlucHV0T3V0cHV0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiB3aXRob3V0KGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyksIGlucHV0UGFyYW1ldGVyID0+IG9sZElucHV0cy5pbmNsdWRlcyhpbnB1dFBhcmFtZXRlcikpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob2xkT3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlucHV0T3V0cHV0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogd2l0aG91dChpbnB1dE91dHB1dC5nZXQoJ291dHB1dFBhcmFtZXRlcnMnKSwgb3V0cHV0UGFyYW1ldGVyID0+IG9sZE91dHB1dHMuaW5jbHVkZXMob3V0cHV0UGFyYW1ldGVyKSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVDYW11bmRhTW9kZWxlclRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgY29uc3QgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcbiAgICBjb25zdCBuZXdJZCA9IG5ld1RlbXBsYXRlICYmIG5ld1RlbXBsYXRlLmlkO1xuICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBuZXdUZW1wbGF0ZSAmJiBuZXdUZW1wbGF0ZS52ZXJzaW9uO1xuICAgIGlmIChnZXRUZW1wbGF0ZUlkKGVsZW1lbnQpICE9PSBuZXdJZCB8fCBnZXRUZW1wbGF0ZVZlcnNpb24oZWxlbWVudCkgIT09IG5ld1ZlcnNpb24pIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgICAnY2FtdW5kYTptb2RlbGVyVGVtcGxhdGUnOiBuZXdJZCxcbiAgICAgICAgJ2NhbXVuZGE6bW9kZWxlclRlbXBsYXRlVmVyc2lvbic6IG5ld1ZlcnNpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGNhbXVuZGE6UHJvcGVydHlgIHByb3BlcnRpZXMgb2Ygc3BlY2lmaWVkIGJ1c2luZXNzIG9iamVjdC4gYGNhbXVuZGE6UHJvcGVydHlgIGNhbiBvbmx5XG4gICAqIGV4aXN0IGluIGBjYW11bmRhOlByb3BlcnRpZXNgLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBidXNpbmVzc09iamVjdFxuICAgKi9cbiAgX3VwZGF0ZUNhbXVuZGFQcm9wZXJ0eVByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlLCBidXNpbmVzc09iamVjdCkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6cHJvcGVydHknO1xuICAgIH0pO1xuXG4gICAgLy8gKDEpIGRvIG5vdCBvdmVycmlkZSBvbGQgcHJvcGVydGllcyBpZiBubyBuZXcgcHJvcGVydGllcyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChidXNpbmVzc09iamVjdCkge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGJ1c2luZXNzT2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIH1cbiAgICBsZXQgY2FtdW5kYVByb3BlcnRpZXMgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpQcm9wZXJ0aWVzJyk7XG4gICAgaWYgKCFjYW11bmRhUHJvcGVydGllcykge1xuICAgICAgY2FtdW5kYVByb3BlcnRpZXMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6UHJvcGVydGllcycpO1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCBjYW11bmRhUHJvcGVydGllc11cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG9sZENhbXVuZGFQcm9wZXJ0aWVzID0gY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCdjYW11bmRhOnZhbHVlcycpID8gY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCdjYW11bmRhOnZhbHVlcycpLnNsaWNlKCkgOiBbXTtcbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkob2xkVGVtcGxhdGUsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgb2xkQ2FtdW5kYVByb3BlcnR5ID0gb2xkUHJvcGVydHkgJiYgZmluZE9sZEJ1c2luZXNzT2JqZWN0KGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0eSksXG4gICAgICAgIG5ld1Byb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eS52YWx1ZSxcbiAgICAgICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmc7XG5cbiAgICAgIC8vICgyKSB1cGRhdGUgb2xkIHByb3BlcnRpZXNcbiAgICAgIGlmIChvbGRQcm9wZXJ0eSAmJiBvbGRDYW11bmRhUHJvcGVydHkpIHtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eUNoYW5nZWQob2xkQ2FtdW5kYVByb3BlcnR5LCBvbGRQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG9sZENhbXVuZGFQcm9wZXJ0eSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5VmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUob2xkQ2FtdW5kYVByb3BlcnRpZXMsIG9sZENhbXVuZGFQcm9wZXJ0eSk7XG4gICAgICB9XG5cbiAgICAgIC8vICgzKSBhZGQgbmV3IHByb3BlcnRpZXNcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdDYW11bmRhUHJvcGVydHkgPSBjcmVhdGVDYW11bmRhUHJvcGVydHkobmV3QmluZGluZywgbmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogY2FtdW5kYVByb3BlcnRpZXMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCd2YWx1ZXMnKSwgbmV3Q2FtdW5kYVByb3BlcnR5XVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgcmVtb3ZlIG9sZCBwcm9wZXJ0aWVzXG4gICAgaWYgKG9sZENhbXVuZGFQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogY2FtdW5kYVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQoY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCd2YWx1ZXMnKSwgdmFsdWUgPT4gb2xkQ2FtdW5kYVByb3BlcnRpZXMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGBicG1uOmNvbmRpdGlvbkV4cHJlc3Npb25gIHByb3BlcnR5IG9mIHNwZWNpZmllZCBlbGVtZW50LiBTaW5jZSBjb25kaXRpb24gZXhwcmVzc2lvbiBpc1xuICAgKiBpcyBub3QgcHJpbWl0aXZlIGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdQcm9wZXJ0eVxuICAgKi9cbiAgX3VwZGF0ZUNvbmRpdGlvbkV4cHJlc3Npb24oZWxlbWVudCwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjayxcbiAgICAgIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG4gICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gbmV3UHJvcGVydHkudmFsdWU7XG4gICAgaWYgKCFvbGRQcm9wZXJ0eSkge1xuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb246IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpGb3JtYWxFeHByZXNzaW9uJywge1xuICAgICAgICAgIGJvZHk6IG5ld1Byb3BlcnR5VmFsdWUsXG4gICAgICAgICAgbGFuZ3VhZ2U6IG5ld0JpbmRpbmcuc2NyaXB0Rm9ybWF0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICBvbGRQcm9wZXJ0eVZhbHVlID0gb2xkUHJvcGVydHkudmFsdWU7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb24gPSBidXNpbmVzc09iamVjdC5nZXQoJ2JwbW46Y29uZGl0aW9uRXhwcmVzc2lvbicpO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7fTtcbiAgICBpZiAoY29uZGl0aW9uRXhwcmVzc2lvbi5nZXQoJ2JvZHknKSA9PT0gb2xkUHJvcGVydHlWYWx1ZSkge1xuICAgICAgcHJvcGVydGllcy5ib2R5ID0gbmV3UHJvcGVydHlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGNvbmRpdGlvbkV4cHJlc3Npb24uZ2V0KCdsYW5ndWFnZScpID09PSBvbGRCaW5kaW5nLnNjcmlwdEZvcm1hdCkge1xuICAgICAgcHJvcGVydGllcy5sYW5ndWFnZSA9IG5ld0JpbmRpbmcuc2NyaXB0Rm9ybWF0O1xuICAgIH1cbiAgICBpZiAoIWtleXMocHJvcGVydGllcykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogY29uZGl0aW9uRXhwcmVzc2lvbixcbiAgICAgIHByb3BlcnRpZXNcbiAgICB9KTtcbiAgfVxuICBfdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUsIGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgY29uc3QgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09ICdwcm9wZXJ0eSc7XG4gICAgfSk7XG4gICAgY29uc3Qgb2xkUHJvcGVydGllcyA9IG9sZFRlbXBsYXRlICYmIG9sZFRlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG9sZFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5JztcbiAgICB9KTtcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgfVxuICAgIG5ld1Byb3BlcnRpZXMuZm9yRWFjaChuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ05hbWUgPSBuZXdCaW5kaW5nLm5hbWUsXG4gICAgICAgIG5ld1Byb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eS52YWx1ZTtcbiAgICAgIGxldCBjaGFuZ2VkRWxlbWVudCwgcHJvcGVydGllcztcbiAgICAgIGlmIChvbGRQcm9wZXJ0eSkge1xuICAgICAgICByZW1vdmUob2xkUHJvcGVydGllcywgb2xkUHJvcGVydHkpO1xuICAgICAgfVxuICAgICAgaWYgKG5ld0JpbmRpbmdOYW1lID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29uZGl0aW9uRXhwcmVzc2lvbihlbGVtZW50LCBvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFcnJvcicpKSB7XG4gICAgICAgICAgY2hhbmdlZEVsZW1lbnQgPSBidXNpbmVzc09iamVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VkRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9sZFByb3BlcnR5ICYmIHByb3BlcnR5Q2hhbmdlZChjaGFuZ2VkRWxlbWVudCwgb2xkUHJvcGVydHkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgcHJvcGVydGllc1tuZXdCaW5kaW5nTmFtZV0gPSBuZXdQcm9wZXJ0eVZhbHVlO1xuXG4gICAgICAgIC8vIG9ubHkgb25lIG9mIGBjYW11bmRhOmNsYXNzYCwgYGNhbXVuZGE6ZGVsZWdhdGVFeHByZXNzaW9uYCBhbmQgYGNhbXVuZGE6ZXhwcmVzc2lvbmAgY2FuIGJlIHNldFxuICAgICAgICAvLyBUT0RPKHBoaWxpcHBmcm9tbWUpOiBlbnN1cmluZyBvbmx5IG9uZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGlzIHNldCBhdCBhIHRpbWUgc2hvdWxkIGJlXG4gICAgICAgIC8vIGltcGxlbWVudGVkIGluIGEgYmVoYXZpb3IgYW5kIG5vdCBpbiB0aGlzIGhhbmRsZXIgYW5kIHByb3BlcnRpZXMgcGFuZWwgVUlcbiAgICAgICAgaWYgKENBTVVOREFfU0VSVklDRV9UQVNLX0xJS0UuaW5kZXhPZihuZXdCaW5kaW5nTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgQ0FNVU5EQV9TRVJWSUNFX1RBU0tfTElLRS5mb3JFYWNoKGNhbXVuZGFTZXJ2aWNlVGFza0xpa2VQcm9wZXJ0eSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FtdW5kYVNlcnZpY2VUYXNrTGlrZVByb3BlcnR5ICE9PSBuZXdCaW5kaW5nTmFtZSkge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2NhbXVuZGFTZXJ2aWNlVGFza0xpa2VQcm9wZXJ0eV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgb2xkIHByb3BlcnRpZXMgbm90IHByZXNlbnQgaW4gbmV3IHRlbXBsYXRlXG4gICAgb2xkUHJvcGVydGllcyAmJiBvbGRQcm9wZXJ0aWVzLmZvckVhY2gob2xkUHJvcGVydHkgPT4ge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBbb2xkUHJvcGVydHkuYmluZGluZy5uYW1lXTogbnVsbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcHJvcGVydGllcyBmb3IgYSBzcGVjaWZpZWQgc2NvcGUuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdTY29wZVRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdUZW1wbGF0ZVxuICAgKi9cbiAgX3VwZGF0ZVNjb3BlUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3U2NvcGVUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IHNjb3BlTmFtZSA9IG5ld1Njb3BlVGVtcGxhdGUudHlwZTtcbiAgICBsZXQgc2NvcGVFbGVtZW50O1xuICAgIHNjb3BlRWxlbWVudCA9IGZpbmRPbGRTY29wZUVsZW1lbnQoZWxlbWVudCwgbmV3U2NvcGVUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuICAgIGlmICghc2NvcGVFbGVtZW50KSB7XG4gICAgICBzY29wZUVsZW1lbnQgPSBicG1uRmFjdG9yeS5jcmVhdGUoc2NvcGVOYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgb2xkU2NvcGVUZW1wbGF0ZSA9IGZpbmRPbGRTY29wZVRlbXBsYXRlKG5ld1Njb3BlVGVtcGxhdGUsIG9sZFRlbXBsYXRlKTtcblxuICAgIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5fdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBvbGRTY29wZVRlbXBsYXRlLCBuZXdTY29wZVRlbXBsYXRlLCBzY29wZUVsZW1lbnQpO1xuXG4gICAgLy8gdXBkYXRlIGNhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXIgcHJvcGVydGllc1xuICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFFeGVjdXRpb25MaXN0ZW5lclByb3BlcnRpZXMoZWxlbWVudCwgbmV3U2NvcGVUZW1wbGF0ZSk7XG5cbiAgICAvLyB1cGRhdGUgY2FtdW5kYTpJbiBhbmQgY2FtdW5kYTpPdXQgcHJvcGVydGllc1xuICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFJbk91dFByb3BlcnRpZXMoZWxlbWVudCwgb2xkU2NvcGVUZW1wbGF0ZSwgbmV3U2NvcGVUZW1wbGF0ZSk7XG5cbiAgICAvLyB1cGRhdGUgY2FtdW5kYTpJbnB1dFBhcmFtZXRlciBhbmQgY2FtdW5kYTpPdXRwdXRQYXJhbWV0ZXIgcHJvcGVydGllc1xuICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFJbnB1dE91dHB1dFBhcmFtZXRlclByb3BlcnRpZXMoZWxlbWVudCwgb2xkU2NvcGVUZW1wbGF0ZSwgbmV3U2NvcGVUZW1wbGF0ZSwgc2NvcGVFbGVtZW50KTtcblxuICAgIC8vIHVwZGF0ZSBjYW11bmRhOkZpZWxkIHByb3BlcnRpZXNcbiAgICB0aGlzLl91cGRhdGVDYW11bmRhRmllbGRQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFNjb3BlVGVtcGxhdGUsIG5ld1Njb3BlVGVtcGxhdGUsIHNjb3BlRWxlbWVudCk7XG5cbiAgICAvLyB1cGRhdGUgY2FtdW5kYTpQcm9wZXJ0eSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5fdXBkYXRlQ2FtdW5kYVByb3BlcnR5UHJvcGVydGllcyhlbGVtZW50LCBvbGRTY29wZVRlbXBsYXRlLCBuZXdTY29wZVRlbXBsYXRlLCBzY29wZUVsZW1lbnQpO1xuXG4gICAgLy8gYXNzdW1lIHRoYXQgcm9vdCBlbGVtZW50cyB3ZXJlIGFscmVhZHkgY3JlYXRlZCBpbiByb290IGJ5IHJlZmVyZW5jZWQgZXZlbnQgZGVmaW5pdGlvbiBiaW5kaW5nXG4gICAgaWYgKGlzUm9vdEVsZW1lbnRTY29wZShzY29wZU5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBzY29wZUVsZW1lbnRdXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnRUeXBlXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlVGFza1R5cGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpIHtcbiAgICAvLyBkZXRlcm1pbmUgbmV3IHRhc2sgdHlwZVxuICAgIGNvbnN0IG5ld1R5cGUgPSBuZXdUZW1wbGF0ZS5lbGVtZW50VHlwZTtcbiAgICBpZiAoIW5ld1R5cGUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIGRvbid0IHJlcGxhY2UgVGFzayB0aGF0IGlzIGFscmVhZHkgdGhlIGNvcnJlY3QgdHlwZVxuICAgIGlmIChlbGVtZW50LiR0eXBlID09PSBuZXdUeXBlLnZhbHVlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIHtcbiAgICAgIHR5cGU6IG5ld1R5cGUudmFsdWVcbiAgICB9KTtcbiAgfVxufVxuQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlci4kaW5qZWN0ID0gWydicG1uRmFjdG9yeScsICdicG1uUmVwbGFjZScsICdjb21tYW5kU3RhY2snLCAnbW9kZWxpbmcnXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbi8qKlxuICogRmluZCBvbGQgYnVzaW5lc3Mgb2JqZWN0IG1hdGNoaW5nIHNwZWNpZmllZCBvbGQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZmluZE9sZEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIG9sZFByb3BlcnR5KSB7XG4gIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgIHByb3BlcnR5TmFtZTtcbiAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6ZmllbGQnKSB7XG4gICAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbJ2NhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXInLCAnY2FtdW5kYTpUYXNrTGlzdGVuZXInXSkpIHtcbiAgICAgIHByb3BlcnR5TmFtZSA9ICdjYW11bmRhOmZpZWxkcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BlcnR5TmFtZSA9ICdicG1uOnZhbHVlcyc7XG4gICAgfVxuICAgIGlmICghYnVzaW5lc3NPYmplY3QgfHwgIWJ1c2luZXNzT2JqZWN0LmdldChwcm9wZXJ0eU5hbWUpIHx8ICFidXNpbmVzc09iamVjdC5nZXQocHJvcGVydHlOYW1lKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmQoYnVzaW5lc3NPYmplY3QuZ2V0KHByb3BlcnR5TmFtZSksIGZ1bmN0aW9uIChvbGRCdXNpbmVzc09iamVjdCkge1xuICAgICAgcmV0dXJuIG9sZEJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpuYW1lJykgPT09IG9sZEJpbmRpbmcubmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluJykge1xuICAgIHJldHVybiBmaW5kKGJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIGZ1bmN0aW9uIChvbGRCdXNpbmVzc09iamVjdCkge1xuICAgICAgcmV0dXJuIG9sZEJ1c2luZXNzT2JqZWN0LmdldCgndGFyZ2V0JykgPT09IG9sZEJpbmRpbmcudGFyZ2V0O1xuICAgIH0pO1xuICB9XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW46YnVzaW5lc3NLZXknKSB7XG4gICAgcmV0dXJuIGZpbmQoYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKSwgZnVuY3Rpb24gKG9sZEJ1c2luZXNzT2JqZWN0KSB7XG4gICAgICByZXR1cm4gaXNTdHJpbmcob2xkQnVzaW5lc3NPYmplY3QuZ2V0KCdidXNpbmVzc0tleScpKTtcbiAgICB9KTtcbiAgfVxuICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCcpIHtcbiAgICByZXR1cm4gZmluZChidXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCBmdW5jdGlvbiAob2xkQnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIHJldHVybiBvbGRCdXNpbmVzc09iamVjdC5nZXQoJ3NvdXJjZScpID09PSBvbGRCaW5kaW5nLnNvdXJjZSB8fCBvbGRCdXNpbmVzc09iamVjdC5nZXQoJ3NvdXJjZUV4cHJlc3Npb24nKSB8fCBvbGRCaW5kaW5nLnNvdXJjZUV4cHJlc3Npb247XG4gICAgfSk7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcicgfHwgb2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dHB1dFBhcmFtZXRlcicpIHtcbiAgICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOkNvbm5lY3RvcicpKSB7XG4gICAgICBidXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTppbnB1dE91dHB1dCcpO1xuICAgICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKTtcbiAgICAgIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmlucHV0UGFyYW1ldGVyJykge1xuICAgICAgcmV0dXJuIGZpbmQoYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmlucHV0UGFyYW1ldGVycycpLCBmdW5jdGlvbiAob2xkQnVzaW5lc3NPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG9sZEJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpuYW1lJykgPT09IG9sZEJpbmRpbmcubmFtZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmluZChidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6b3V0cHV0UGFyYW1ldGVycycpLCBmdW5jdGlvbiAob2xkQnVzaW5lc3NPYmplY3QpIHtcbiAgICAgICAgaWYgKG9sZEJpbmRpbmcuc2NyaXB0Rm9ybWF0KSB7XG4gICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IG9sZEJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpkZWZpbml0aW9uJyk7XG4gICAgICAgICAgcmV0dXJuIGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6dmFsdWUnKSA9PT0gb2xkQmluZGluZy5zb3VyY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9sZEJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTp2YWx1ZScpID09PSBvbGRCaW5kaW5nLnNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6cHJvcGVydHknKSB7XG4gICAgaWYgKCFidXNpbmVzc09iamVjdCB8fCAhYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKSB8fCAhYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYnVzaW5lc3NPYmplY3QgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpQcm9wZXJ0aWVzJyk7XG4gICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gZmluZChidXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCBmdW5jdGlvbiAob2xkQnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIHJldHVybiBvbGRCdXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6bmFtZScpID09PSBvbGRCaW5kaW5nLm5hbWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTplcnJvckV2ZW50RGVmaW5pdGlvbicpIHtcbiAgICByZXR1cm4gZmluZENhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCBvbGRCaW5kaW5nLmVycm9yUmVmKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgb2xkIHByb3BlcnR5IG1hdGNoaW5nIHNwZWNpZmllZCBuZXcgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbmV3UHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBmaW5kT2xkUHJvcGVydHkob2xkVGVtcGxhdGUsIG5ld1Byb3BlcnR5KSB7XG4gIGlmICghb2xkVGVtcGxhdGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgb2xkUHJvcGVydGllcyA9IG9sZFRlbXBsYXRlLnByb3BlcnRpZXMsXG4gICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgbmV3QmluZGluZ05hbWUgPSBuZXdCaW5kaW5nLm5hbWUsXG4gICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gIGlmIChuZXdCaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5Jykge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZEJpbmRpbmdOYW1lID0gb2xkQmluZGluZy5uYW1lLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5JyAmJiBvbGRCaW5kaW5nTmFtZSA9PT0gbmV3QmluZGluZ05hbWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpmaWVsZCcpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nTmFtZSA9IG9sZEJpbmRpbmcubmFtZSxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gb2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmZpZWxkJyAmJiBvbGRCaW5kaW5nTmFtZSA9PT0gbmV3QmluZGluZ05hbWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbicpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIGlmIChvbGRCaW5kaW5nVHlwZSAhPT0gJ2NhbXVuZGE6aW4nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYWx3YXlzIG92ZXJyaWRlIGlmIGNoYW5nZSBmcm9tIHNvdXJjZSB0byBzb3VyY2UgZXhwcmVzc2lvbiBvciB2aWNlIHZlcnNhXG4gICAgICBpZiAob2xkQmluZGluZy5leHByZXNzaW9uICYmICFuZXdCaW5kaW5nLmV4cHJlc3Npb24gfHwgIW9sZEJpbmRpbmcuZXhwcmVzc2lvbiAmJiBuZXdCaW5kaW5nLmV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEJpbmRpbmcudGFyZ2V0ID09PSBuZXdCaW5kaW5nLnRhcmdldDtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluOmJ1c2luZXNzS2V5Jykge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZEJpbmRpbmdUeXBlID0gb2xkQmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbjpidXNpbmVzc0tleSc7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpvdXQnKSB7XG4gICAgcmV0dXJuIGZpbmQob2xkUHJvcGVydGllcywgZnVuY3Rpb24gKG9sZFByb3BlcnR5KSB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gb2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCcgJiYgKG9sZEJpbmRpbmcuc291cmNlID09PSBuZXdCaW5kaW5nLnNvdXJjZSB8fCBvbGRCaW5kaW5nLnNvdXJjZUV4cHJlc3Npb24gPT09IG5ld0JpbmRpbmcuc291cmNlRXhwcmVzc2lvbik7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcicpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nTmFtZSA9IG9sZEJpbmRpbmcubmFtZSxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09ICdjYW11bmRhOmlucHV0UGFyYW1ldGVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkQmluZGluZ05hbWUgPT09IG5ld0JpbmRpbmdOYW1lICYmIG9sZEJpbmRpbmcuc2NyaXB0Rm9ybWF0ID09PSBuZXdCaW5kaW5nLnNjcmlwdEZvcm1hdDtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dHB1dFBhcmFtZXRlcicpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIGlmIChvbGRCaW5kaW5nVHlwZSAhPT0gJ2NhbXVuZGE6b3V0cHV0UGFyYW1ldGVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkQmluZGluZy5zb3VyY2UgPT09IG5ld0JpbmRpbmcuc291cmNlICYmIG9sZEJpbmRpbmcuc2NyaXB0Rm9ybWF0ID09PSBuZXdCaW5kaW5nLnNjcmlwdEZvcm1hdDtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOnByb3BlcnR5Jykge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZEJpbmRpbmdOYW1lID0gb2xkQmluZGluZy5uYW1lLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6cHJvcGVydHknICYmIG9sZEJpbmRpbmdOYW1lID09PSBuZXdCaW5kaW5nTmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmVycm9yRXZlbnREZWZpbml0aW9uJykge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3QgbmV3QmluZGluZ1JlZiA9IG5ld0JpbmRpbmcuZXJyb3JSZWYsXG4gICAgICAgIG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nUmVmID0gb2xkQmluZGluZy5lcnJvclJlZixcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gb2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmVycm9yRXZlbnREZWZpbml0aW9uJyAmJiBvbGRCaW5kaW5nUmVmID09PSBuZXdCaW5kaW5nUmVmO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBmaW5kT2xkU2NvcGVFbGVtZW50KGVsZW1lbnQsIHNjb3BlVGVtcGxhdGUsIHRlbXBsYXRlKSB7XG4gIGNvbnN0IHNjb3BlTmFtZSA9IHNjb3BlVGVtcGxhdGUudHlwZSxcbiAgICBpZCA9IHNjb3BlVGVtcGxhdGUuaWQ7XG4gIGlmIChzY29wZU5hbWUgPT09ICdjYW11bmRhOkNvbm5lY3RvcicpIHtcbiAgICByZXR1cm4gZmluZEV4dGVuc2lvbihlbGVtZW50LCAnY2FtdW5kYTpDb25uZWN0b3InKTtcbiAgfVxuICBpZiAoc2NvcGVOYW1lID09PSAnYnBtbjpFcnJvcicpIHtcbiAgICAvLyAoMSkgZmluZCBieSBlcnJvciBldmVudCBkZWZpbml0aW9uIGJpbmRpbmdcbiAgICBjb25zdCBlcnJvckV2ZW50RGVmaW5pdGlvbkJpbmRpbmcgPSBmaW5kRXJyb3JFdmVudERlZmluaXRpb25CaW5kaW5nKHRlbXBsYXRlLCBpZCk7XG4gICAgaWYgKCFlcnJvckV2ZW50RGVmaW5pdGlvbkJpbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAoMikgZmluZCBlcnJvciBldmVudCBkZWZpbml0aW9uXG4gICAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb24gPSBmaW5kT2xkQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb25CaW5kaW5nKTtcbiAgICBpZiAoIWVycm9yRXZlbnREZWZpbml0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gKDMpIHJldHJpZXZlIHJlZmVyZW5jZWQgZXJyb3JcbiAgICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb24uZXJyb3JSZWY7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzUm9vdEVsZW1lbnRTY29wZShzY29wZU5hbWUpIHtcbiAgcmV0dXJuIFsnYnBtbjpFcnJvciddLmluY2x1ZGVzKHNjb3BlTmFtZSk7XG59XG5mdW5jdGlvbiBmaW5kT2xkU2NvcGVUZW1wbGF0ZShzY29wZVRlbXBsYXRlLCBvbGRUZW1wbGF0ZSkge1xuICBjb25zdCBzY29wZU5hbWUgPSBzY29wZVRlbXBsYXRlLnR5cGUsXG4gICAgc2NvcGVJZCA9IHNjb3BlVGVtcGxhdGUuaWQsXG4gICAgc2NvcGVzID0gb2xkVGVtcGxhdGUgJiYgaGFuZGxlTGVnYWN5U2NvcGVzKG9sZFRlbXBsYXRlLnNjb3Blcyk7XG4gIHJldHVybiBzY29wZXMgJiYgZmluZChzY29wZXMsIGZ1bmN0aW9uIChzY29wZSkge1xuICAgIGlmIChpc1Jvb3RFbGVtZW50U2NvcGUoc2NvcGVOYW1lKSkge1xuICAgICAgcmV0dXJuIHNjb3BlLmlkID09PSBzY29wZUlkO1xuICAgIH1cbiAgICByZXR1cm4gc2NvcGUudHlwZSA9PT0gc2NvcGVOYW1lO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRFcnJvckV2ZW50RGVmaW5pdGlvbkJpbmRpbmcodGVtcGxhdGUsIHRlbXBsYXRlRXJyb3JJZCkge1xuICByZXR1cm4gZmluZCh0ZW1wbGF0ZS5wcm9wZXJ0aWVzLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICByZXR1cm4gcHJvcGVydHkuYmluZGluZy5lcnJvclJlZiA9PT0gdGVtcGxhdGVFcnJvcklkO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHByb3BlcnR5IHdhcyBjaGFuZ2VkIGFmdGVyIGJlaW5nIHNldCBieSB0ZW1wbGF0ZS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wZXJ0eVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eUNoYW5nZWQoZWxlbWVudCwgb2xkUHJvcGVydHkpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgb2xkQmluZGluZ05hbWUgPSBvbGRCaW5kaW5nLm5hbWUsXG4gICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGUsXG4gICAgb2xkUHJvcGVydHlWYWx1ZSA9IG9sZFByb3BlcnR5LnZhbHVlO1xuICBsZXQgY29uZGl0aW9uRXhwcmVzc2lvbiwgZGVmaW5pdGlvbjtcbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAncHJvcGVydHknKSB7XG4gICAgaWYgKG9sZEJpbmRpbmdOYW1lID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb24gPSBidXNpbmVzc09iamVjdC5nZXQoJ2JwbW46Y29uZGl0aW9uRXhwcmVzc2lvbicpO1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbkV4cHJlc3Npb24uZ2V0KCdicG1uOmJvZHknKSAhPT0gb2xkUHJvcGVydHlWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChvbGRCaW5kaW5nTmFtZSkgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpmaWVsZCcpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnN0cmluZycpICE9PSBvbGRQcm9wZXJ0eVZhbHVlO1xuICB9XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW4nKSB7XG4gICAgaWYgKG9sZEJpbmRpbmcuZXhwcmVzc2lvbikge1xuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnc291cmNlRXhwcmVzc2lvbicpICE9PSBvbGRQcm9wZXJ0eVZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnNvdXJjZScpICE9PSBvbGRQcm9wZXJ0eVZhbHVlO1xuICAgIH1cbiAgfVxuICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluOmJ1c2luZXNzS2V5Jykge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6YnVzaW5lc3NLZXknKSAhPT0gb2xkUHJvcGVydHlWYWx1ZTtcbiAgfVxuICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCcpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnRhcmdldCcpICE9PSBvbGRQcm9wZXJ0eVZhbHVlO1xuICB9XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW5wdXRQYXJhbWV0ZXInKSB7XG4gICAgaWYgKG9sZEJpbmRpbmcuc2NyaXB0Rm9ybWF0KSB7XG4gICAgICBkZWZpbml0aW9uID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmRlZmluaXRpb24nKTtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uICYmIGRlZmluaXRpb24uZ2V0KCdjYW11bmRhOnZhbHVlJykgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6dmFsdWUnKSAhPT0gb2xkUHJvcGVydHlWYWx1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXInKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpuYW1lJykgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpwcm9wZXJ0eScpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnZhbHVlJykgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTplcnJvckV2ZW50RGVmaW5pdGlvbicpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHByZXNzaW9uJykgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZShhcnJheSwgaXRlbSkge1xuICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XG4gIGlmIChpc1VuZGVmaW5lZCQxKGluZGV4KSkge1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmNsYXNzIEVsZW1lbnRUZW1wbGF0ZXNDb21tYW5kcyB7XG4gIGNvbnN0cnVjdG9yKGNvbW1hbmRTdGFjaywgZWxlbWVudFRlbXBsYXRlcywgZXZlbnRCdXMpIHtcbiAgICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdlbGVtZW50LXRlbXBsYXRlcy5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgTXVsdGlDb21tYW5kSGFuZGxlcik7XG4gICAgY29tbWFuZFN0YWNrLnJlZ2lzdGVySGFuZGxlcigncHJvcGVydGllc1BhbmVsLmNhbXVuZGEuY2hhbmdlVGVtcGxhdGUnLCBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyKTtcbiAgICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdwcm9wZXJ0aWVzUGFuZWwucmVtb3ZlVGVtcGxhdGUnLCBSZW1vdmVFbGVtZW50VGVtcGxhdGVIYW5kbGVyKTtcblxuICAgIC8vIGFwcGx5IGRlZmF1bHQgZWxlbWVudCB0ZW1wbGF0ZXMgb24gc2hhcGUgY3JlYXRpb25cbiAgICBldmVudEJ1cy5vbihbJ2NvbW1hbmRTdGFjay5zaGFwZS5jcmVhdGUucG9zdEV4ZWN1dGVkJ10sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgaGludHMgPSB7fSxcbiAgICAgICAgICBzaGFwZVxuICAgICAgICB9XG4gICAgICB9ID0gZXZlbnQ7XG4gICAgICBpZiAoaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgYXBwbHlEZWZhdWx0VGVtcGxhdGUoc2hhcGUsIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBhcHBseSBkZWZhdWx0IGVsZW1lbnQgdGVtcGxhdGVzIG9uIGNvbm5lY3Rpb24gY3JlYXRpb25cbiAgICBldmVudEJ1cy5vbihbJ2NvbW1hbmRTdGFjay5jb25uZWN0aW9uLmNyZWF0ZS5wb3N0RXhlY3V0ZWQnXSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBoaW50cyA9IHt9LFxuICAgICAgICAgIGNvbm5lY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSA9IGV2ZW50O1xuICAgICAgaWYgKGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgIT09IGZhbHNlKSB7XG4gICAgICAgIGFwcGx5RGVmYXVsdFRlbXBsYXRlKGNvbm5lY3Rpb24sIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbkVsZW1lbnRUZW1wbGF0ZXNDb21tYW5kcy4kaW5qZWN0ID0gWydjb21tYW5kU3RhY2snLCAnZWxlbWVudFRlbXBsYXRlcycsICdldmVudEJ1cyddO1xuZnVuY3Rpb24gYXBwbHlEZWZhdWx0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgY29tbWFuZFN0YWNrKSB7XG4gIGlmICghZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCkgJiYgZWxlbWVudFRlbXBsYXRlcy5nZXREZWZhdWx0KGVsZW1lbnQpKSB7XG4gICAgY29uc3QgY29tbWFuZCA9ICdwcm9wZXJ0aWVzUGFuZWwuY2FtdW5kYS5jaGFuZ2VUZW1wbGF0ZSc7XG4gICAgY29uc3QgY29tbWFuZENvbnRleHQgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGU6IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0RGVmYXVsdChlbGVtZW50KVxuICAgIH07XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoY29tbWFuZCwgY29tbWFuZENvbnRleHQpO1xuICB9XG59XG5cbnZhciBjb21tYW5kc01vZHVsZSA9IHtcbiAgX19pbml0X186IFsnZWxlbWVudFRlbXBsYXRlQ29tbWFuZHMnXSxcbiAgZWxlbWVudFRlbXBsYXRlQ29tbWFuZHM6IFsndHlwZScsIEVsZW1lbnRUZW1wbGF0ZXNDb21tYW5kc11cbn07XG5cbi8qKlxuICogVGhpcyBCZWhhdmlvciBjaGVja3MgaWYgdGhlIG5ldyBlbGVtZW50J3MgdHlwZSBpcyBpblxuICogdGhlIGxpc3Qgb2YgZWxlbWVudHMgdGhlIHRlbXBsYXRlIGFwcGxpZXMgdG8gYW5kIHVubGlua3NcbiAqIGl0IGlmIG5vdC5cbiAqL1xuY2xhc3MgUmVwbGFjZUJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudFRlbXBsYXRlcywgaW5qZWN0b3IpIHtcbiAgICBzdXBlcihpbmplY3Rvci5nZXQoJ2V2ZW50QnVzJykpO1xuICAgIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5yZXBsYWNlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBvbGRTaGFwZSA9IGNvbnRleHQub2xkU2hhcGUsXG4gICAgICAgIG9sZEJvID0gZ2V0QnVzaW5lc3NPYmplY3Qob2xkU2hhcGUpLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGUsXG4gICAgICAgIG5ld0JvID0gZ2V0QnVzaW5lc3NPYmplY3QobmV3U2hhcGUpO1xuICAgICAgaWYgKCFvbGRCby5tb2RlbGVyVGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBuZXdCby5tb2RlbGVyVGVtcGxhdGU7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gbmV3Qm8ubW9kZWxlclRlbXBsYXRlVmVyc2lvbjtcbiAgICAgIGNvbnN0IGVsZW1lbnRUZW1wbGF0ZSA9IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0KHRlbXBsYXRlLCB2ZXJzaW9uKTtcbiAgICAgIGlmICghZWxlbWVudFRlbXBsYXRlKSB7XG4gICAgICAgIGVsZW1lbnRUZW1wbGF0ZXMudW5saW5rVGVtcGxhdGUobmV3U2hhcGUsIGluamVjdG9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBsaWVzVG8sXG4gICAgICAgIGVsZW1lbnRUeXBlXG4gICAgICB9ID0gZWxlbWVudFRlbXBsYXRlO1xuICAgICAgaWYgKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGlmICghaXMobmV3U2hhcGUsIGVsZW1lbnRUeXBlLnZhbHVlKSkge1xuICAgICAgICAgIGVsZW1lbnRUZW1wbGF0ZXMudW5saW5rVGVtcGxhdGUobmV3U2hhcGUsIGluamVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxvd2VkID0gYXBwbGllc1RvLnJlZHVjZSgoYWxsb3dlZCwgdHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4gYWxsb3dlZCB8fCBpcyhuZXdCbywgdHlwZSk7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShuZXdTaGFwZSwgaW5qZWN0b3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5SZXBsYWNlQmVoYXZpb3IuJGluamVjdCA9IFsnZWxlbWVudFRlbXBsYXRlcycsICdpbmplY3RvciddO1xuXG52YXIgYmVoYXZpb3JNb2R1bGUgPSB7XG4gIF9faW5pdF9fOiBbJ2VsZW1lbnRUZW1wbGF0ZXNSZXBsYWNlQmVoYXZpb3InXSxcbiAgZWxlbWVudFRlbXBsYXRlc1JlcGxhY2VCZWhhdmlvcjogWyd0eXBlJywgUmVwbGFjZUJlaGF2aW9yXVxufTtcblxudmFyIGNvcmVNb2R1bGUgPSB7XG4gIF9fZGVwZW5kc19fOiBbY29tbWFuZHNNb2R1bGUsIGJlaGF2aW9yTW9kdWxlXSxcbiAgX19pbml0X186IFsnZWxlbWVudFRlbXBsYXRlc0xvYWRlciddLFxuICBlbGVtZW50VGVtcGxhdGVzOiBbJ3R5cGUnLCBFbGVtZW50VGVtcGxhdGVzJDFdLFxuICBlbGVtZW50VGVtcGxhdGVzTG9hZGVyOiBbJ3R5cGUnLCBFbGVtZW50VGVtcGxhdGVzTG9hZGVyJDFdXG59O1xuXG5jb25zdCBDQU1VTkRBX0VSUk9SX0VWRU5UX0RFRklOSVRJT05fVFlQRSQxID0gJ2NhbXVuZGE6ZXJyb3JFdmVudERlZmluaXRpb24nO1xuY29uc3QgQ0FNVU5EQV9FWEVDVVRJT05fTElTVEVORVJfVFlQRSA9ICdjYW11bmRhOmV4ZWN1dGlvbkxpc3RlbmVyJztcbmNvbnN0IENBTVVOREFfRklFTERfVFlQRSA9ICdjYW11bmRhOmZpZWxkJztcbmNvbnN0IENBTVVOREFfSU5fQlVTSU5FU1NfS0VZX1RZUEUgPSAnY2FtdW5kYTppbjpidXNpbmVzc0tleSc7XG5jb25zdCBDQU1VTkRBX0lOX1RZUEUgPSAnY2FtdW5kYTppbic7XG5jb25zdCBDQU1VTkRBX0lOUFVUX1BBUkFNRVRFUl9UWVBFJDEgPSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcic7XG5jb25zdCBDQU1VTkRBX09VVF9UWVBFID0gJ2NhbXVuZGE6b3V0JztcbmNvbnN0IENBTVVOREFfT1VUUFVUX1BBUkFNRVRFUl9UWVBFJDEgPSAnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXInO1xuY29uc3QgQ0FNVU5EQV9QUk9QRVJUWV9UWVBFID0gJ2NhbXVuZGE6cHJvcGVydHknO1xuY29uc3QgUFJPUEVSVFlfVFlQRSA9ICdwcm9wZXJ0eSc7XG5jb25zdCBFWFRFTlNJT05fQklORElOR19UWVBFUyA9IFtDQU1VTkRBX0VSUk9SX0VWRU5UX0RFRklOSVRJT05fVFlQRSQxLCBDQU1VTkRBX0ZJRUxEX1RZUEUsIENBTVVOREFfSU5fVFlQRSwgQ0FNVU5EQV9JTl9CVVNJTkVTU19LRVlfVFlQRSwgQ0FNVU5EQV9JTlBVVF9QQVJBTUVURVJfVFlQRSQxLCBDQU1VTkRBX09VVF9UWVBFLCBDQU1VTkRBX09VVFBVVF9QQVJBTUVURVJfVFlQRSQxLCBDQU1VTkRBX1BST1BFUlRZX1RZUEVdO1xuY29uc3QgSU9fQklORElOR19UWVBFUyA9IFtDQU1VTkRBX0lOUFVUX1BBUkFNRVRFUl9UWVBFJDEsIENBTVVOREFfT1VUUFVUX1BBUkFNRVRFUl9UWVBFJDFdO1xuY29uc3QgSU5fT1VUX0JJTkRJTkdfVFlQRVMgPSBbQ0FNVU5EQV9JTl9CVVNJTkVTU19LRVlfVFlQRSwgQ0FNVU5EQV9JTl9UWVBFLCBDQU1VTkRBX09VVF9UWVBFXTtcblxuY29uc3QgUFJJTUlUSVZFX01PRERMRV9UWVBFUyA9IFsnQm9vbGVhbicsICdJbnRlZ2VyJywgJ1N0cmluZyddO1xuZnVuY3Rpb24gQ3VzdG9tUHJvcGVydGllcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBlbGVtZW50VGVtcGxhdGUsXG4gICAgaW5qZWN0b3JcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHByb3BlcnRpZXMsXG4gICAgZ3JvdXBzOiBwcm9wZXJ0eUdyb3VwcyxcbiAgICBzY29wZXNcbiAgfSA9IGVsZW1lbnRUZW1wbGF0ZTtcblxuICAvLyAoMSkgZ3JvdXAgcHJvcGVydGllcyBieSBncm91cCBpZFxuICBjb25zdCBncm91cGVkUHJvcGVydGllcyA9IGdyb3VwQnlHcm91cElkKHByb3BlcnRpZXMpO1xuICBjb25zdCBkZWZhdWx0UHJvcHMgPSBbXTtcbiAgZm9yRWFjaChncm91cGVkUHJvcGVydGllcywgKHByb3BlcnRpZXMsIGdyb3VwSWQpID0+IHtcbiAgICBjb25zdCBncm91cCA9IGZpbmRDdXN0b21Hcm91cChwcm9wZXJ0eUdyb3VwcywgZ3JvdXBJZCk7XG4gICAgaWYgKCFncm91cCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wcy5wdXNoKC4uLnByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBhZGRDdXN0b21Hcm91cChncm91cHMsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpZDogYEVsZW1lbnRUZW1wbGF0ZXNfX0N1c3RvbVByb3BlcnRpZXMtJHtncm91cElkfWAsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKGdyb3VwLmxhYmVsKSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgICB0ZW1wbGF0ZUlkOiBgJHtpZH0tJHtncm91cElkfWBcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gKDIpIGFkZCBkZWZhdWx0IGN1c3RvbSBwcm9wc1xuICBpZiAoZGVmYXVsdFByb3BzLmxlbmd0aCkge1xuICAgIGFkZEN1c3RvbUdyb3VwKGdyb3Vwcywge1xuICAgICAgaWQ6ICdFbGVtZW50VGVtcGxhdGVzX19DdXN0b21Qcm9wZXJ0aWVzJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0N1c3RvbSBwcm9wZXJ0aWVzJyksXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcGVydGllczogZGVmYXVsdFByb3BzLFxuICAgICAgdGVtcGxhdGVJZDogaWRcbiAgICB9KTtcbiAgfVxuXG4gIC8vICgzKSBhZGQgY3VzdG9tIHNjb3BlcyBwcm9wc1xuICBpZiAoaXNBcnJheShzY29wZXMpKSB7XG4gICAgc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlXG4gICAgICB9ID0gc2NvcGU7XG4gICAgICBjb25zdCBpZCA9IHR5cGUucmVwbGFjZSgvOi9nLCAnLScpO1xuICAgICAgYWRkQ3VzdG9tR3JvdXAoZ3JvdXBzLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlkOiBgRWxlbWVudFRlbXBsYXRlc19fQ3VzdG9tR3JvdXAtJHtpZH1gLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKGBDdXN0b20gcHJvcGVydGllcyBmb3Igc2NvcGUgPCR7dHlwZX0+YCksXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIHRlbXBsYXRlSWQ6IGlkLFxuICAgICAgICBzY29wZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cbmZ1bmN0aW9uIGFkZEN1c3RvbUdyb3VwKGdyb3VwcywgcHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgbGFiZWwsXG4gICAgcHJvcGVydGllcyxcbiAgICBzY29wZSxcbiAgICB0ZW1wbGF0ZUlkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY3VzdG9tUHJvcGVydGllc0dyb3VwID0ge1xuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogW10sXG4gICAgc2hvdWxkT3BlbjogdHJ1ZVxuICB9O1xuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gY3JlYXRlQ3VzdG9tRW50cnkoYGN1c3RvbS1lbnRyeS0ke3RlbXBsYXRlSWR9LSR7aW5kZXh9YCwgZWxlbWVudCwgcHJvcGVydHksIHNjb3BlKTtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGN1c3RvbVByb3BlcnRpZXNHcm91cC5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjdXN0b21Qcm9wZXJ0aWVzR3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICBncm91cHMucHVzaChjdXN0b21Qcm9wZXJ0aWVzR3JvdXApO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVDdXN0b21FbnRyeShpZCwgZWxlbWVudCwgcHJvcGVydHksIHNjb3BlKSB7XG4gIGxldCB7XG4gICAgdHlwZVxuICB9ID0gcHJvcGVydHk7XG4gIGlmICghdHlwZSkge1xuICAgIHR5cGUgPSBnZXREZWZhdWx0VHlwZShwcm9wZXJ0eSk7XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdCb29sZWFuJykge1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGNvbXBvbmVudDogQm9vbGVhblByb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzQ2hlY2tib3hFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5LFxuICAgICAgc2NvcGVcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSAnRHJvcGRvd24nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgY29tcG9uZW50OiBEcm9wZG93blByb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWQsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHNjb3BlXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBjb21wb25lbnQ6IFN0cmluZ1Byb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWQsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHNjb3BlXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ1RleHQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgY29tcG9uZW50OiBUZXh0QXJlYVByb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEFyZWFFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5LFxuICAgICAgc2NvcGVcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0VHlwZShwcm9wZXJ0eSkge1xuICBjb25zdCB7XG4gICAgYmluZGluZ1xuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICB0eXBlXG4gIH0gPSBiaW5kaW5nO1xuICBpZiAoW1BST1BFUlRZX1RZUEUsIENBTVVOREFfUFJPUEVSVFlfVFlQRSwgQ0FNVU5EQV9JTl9UWVBFLCBDQU1VTkRBX0lOX0JVU0lORVNTX0tFWV9UWVBFLCBDQU1VTkRBX09VVF9UWVBFLCBDQU1VTkRBX0ZJRUxEX1RZUEVdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgcmV0dXJuICdTdHJpbmcnO1xuICB9XG4gIGlmICh0eXBlID09PSBDQU1VTkRBX0VYRUNVVElPTl9MSVNURU5FUl9UWVBFKSB7XG4gICAgcmV0dXJuICdIaWRkZW4nO1xuICB9XG59XG5mdW5jdGlvbiBCb29sZWFuUHJvcGVydHkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHksXG4gICAgc2NvcGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZWRpdGFibGUsXG4gICAgbGFiZWxcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIHJldHVybiBDaGVja2JveEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGdldFZhbHVlOiBwcm9wZXJ0eUdldHRlcihlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpLFxuICAgIGlkLFxuICAgIGxhYmVsOiBsYWJlbCA/IHRyYW5zbGF0ZShsYWJlbCkgOiBsYWJlbCxcbiAgICBkZXNjcmlwdGlvbjogUHJvcGVydHlEZXNjcmlwdGlvbih7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlcihicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpLFxuICAgIGRpc2FibGVkOiBlZGl0YWJsZSA9PT0gZmFsc2VcbiAgfSk7XG59XG5mdW5jdGlvbiBEcm9wZG93blByb3BlcnR5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIHByb3BlcnR5LFxuICAgIHNjb3BlXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGVkaXRhYmxlLFxuICAgIGxhYmVsXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNob2ljZXNcbiAgICB9ID0gcHJvcGVydHk7XG4gICAgcmV0dXJuIGNob2ljZXMubWFwKCh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKG5hbWUpLFxuICAgICAgICB2YWx1ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIGxhYmVsOiBsYWJlbCA/IHRyYW5zbGF0ZShsYWJlbCkgOiBsYWJlbCxcbiAgICBnZXRPcHRpb25zLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyKGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSksXG4gICAgc2V0VmFsdWU6IHByb3BlcnR5U2V0dGVyKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSksXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IodHJhbnNsYXRlLCBwcm9wZXJ0eSlcbiAgfSk7XG59XG5mdW5jdGlvbiBTdHJpbmdQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBwcm9wZXJ0eSxcbiAgICBzY29wZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlZGl0YWJsZSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlclxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBkZWJvdW5jZSxcbiAgICBlbGVtZW50LFxuICAgIGdldFZhbHVlOiBwcm9wZXJ0eUdldHRlcihlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpLFxuICAgIGlkLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIGxhYmVsOiBsYWJlbCA/IHRyYW5zbGF0ZShsYWJlbCkgOiBsYWJlbCxcbiAgICBkZXNjcmlwdGlvbjogUHJvcGVydHlEZXNjcmlwdGlvbih7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlcihicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpLFxuICAgIHZhbGlkYXRlOiBwcm9wZXJ0eVZhbGlkYXRvcih0cmFuc2xhdGUsIHByb3BlcnR5KSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlXG4gIH0pO1xufVxuZnVuY3Rpb24gVGV4dEFyZWFQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBwcm9wZXJ0eSxcbiAgICBzY29wZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlZGl0YWJsZSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlclxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgcmV0dXJuIFRleHRBcmVhRW50cnkoe1xuICAgIGRlYm91bmNlLFxuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGFiZWw6IGxhYmVsID8gdHJhbnNsYXRlKGxhYmVsKSA6IGxhYmVsLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyKGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSksXG4gICAgc2V0VmFsdWU6IHByb3BlcnR5U2V0dGVyKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSksXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IodHJhbnNsYXRlLCBwcm9wZXJ0eSlcbiAgfSk7XG59XG5mdW5jdGlvbiBwcm9wZXJ0eUdldHRlcihlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IHtcbiAgICAgIGJpbmRpbmcsXG4gICAgICB2YWx1ZTogZGVmYXVsdFZhbHVlID0gJydcbiAgICB9ID0gcHJvcGVydHk7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGVcbiAgICB9ID0gYmluZGluZztcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2NvcGVCdXNpbmVzc09iamVjdChidXNpbmVzc09iamVjdCwgc2NvcGUpO1xuICAgICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHByb3BlcnR5XG4gICAgaWYgKHR5cGUgPT09ICdwcm9wZXJ0eScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYnVzaW5lc3NPYmplY3QuZ2V0KG5hbWUpO1xuICAgICAgaWYgKG5hbWUgPT09ICdjb25kaXRpb25FeHByZXNzaW9uJykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCdib2R5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQkMSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjYW11bmRhOkVycm9yRXZlbnREZWZpbml0aW9uXG4gICAgaWYgKHR5cGUgPT09IENBTVVOREFfRVJST1JfRVZFTlRfREVGSU5JVElPTl9UWVBFJDEpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZXJyb3JSZWZcbiAgICAgIH0gPSBiaW5kaW5nO1xuICAgICAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb24gPSBmaW5kQ2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uKGJ1c2luZXNzT2JqZWN0LCBlcnJvclJlZik7XG4gICAgICBpZiAoZXJyb3JFdmVudERlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGVycm9yRXZlbnREZWZpbml0aW9uLmdldCgnY2FtdW5kYTpleHByZXNzaW9uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpGaWVsZFxuICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0ZJRUxEX1RZUEUpIHtcbiAgICAgIGNvbnN0IGNhbXVuZGFGaWVsZHMgPSBmaW5kRXh0ZW5zaW9ucyhidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkZpZWxkJ10pO1xuICAgICAgY29uc3QgY2FtdW5kYUZpZWxkID0gY2FtdW5kYUZpZWxkcy5maW5kKGNhbXVuZGFGaWVsZCA9PiB7XG4gICAgICAgIHJldHVybiBjYW11bmRhRmllbGQuZ2V0KCdjYW11bmRhOm5hbWUnKSA9PT0gbmFtZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNhbXVuZGFGaWVsZCkge1xuICAgICAgICByZXR1cm4gY2FtdW5kYUZpZWxkLmdldCgnY2FtdW5kYTpzdHJpbmcnKSB8fCBjYW11bmRhRmllbGQuZ2V0KCdjYW11bmRhOmV4cHJlc3Npb24nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjYW11bmRhOlByb3BlcnR5XG4gICAgaWYgKHR5cGUgPT09IENBTVVOREFfUFJPUEVSVFlfVFlQRSkge1xuICAgICAgbGV0IGNhbXVuZGFQcm9wZXJ0aWVzO1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIC8vIFRPRE8ocGhpbGlwcGZyb21tZSk6IGFzIG9ubHkgYnBtbjpFcnJvciBhbmQgY2FtdW5kYTpDb25uZWN0b3IgYXJlIHN1cHBvcnRlZCB0aGlzIGNvZGUgaXMgcHJhY3RpY2FsbHkgZGVhZFxuICAgICAgICBjYW11bmRhUHJvcGVydGllcyA9IGJ1c2luZXNzT2JqZWN0LmdldCgncHJvcGVydGllcycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FtdW5kYVByb3BlcnRpZXMgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpQcm9wZXJ0aWVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoY2FtdW5kYVByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgY2FtdW5kYVByb3BlcnR5ID0gZmluZENhbXVuZGFQcm9wZXJ0eShjYW11bmRhUHJvcGVydGllcywgYmluZGluZyk7XG4gICAgICAgIGlmIChjYW11bmRhUHJvcGVydHkpIHtcbiAgICAgICAgICByZXR1cm4gY2FtdW5kYVByb3BlcnR5LmdldCgnY2FtdW5kYTp2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBpZiAoSU9fQklORElOR19UWVBFUy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbGV0IGlucHV0T3V0cHV0O1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGlucHV0T3V0cHV0ID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdpbnB1dE91dHB1dCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFpbnB1dE91dHB1dCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBjYW11bmRhOklucHV0UGFyYW1ldGVyXG4gICAgICBpZiAodHlwZSA9PT0gQ0FNVU5EQV9JTlBVVF9QQVJBTUVURVJfVFlQRSQxKSB7XG4gICAgICAgIGNvbnN0IGlucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcbiAgICAgICAgaWYgKGlucHV0UGFyYW1ldGVyKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc2NyaXB0Rm9ybWF0XG4gICAgICAgICAgfSA9IGJpbmRpbmc7XG4gICAgICAgICAgaWYgKHNjcmlwdEZvcm1hdCkge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGlucHV0UGFyYW1ldGVyLmdldCgnY2FtdW5kYTpkZWZpbml0aW9uJyk7XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6dmFsdWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0UGFyYW1ldGVyLmdldCgndmFsdWUnKSB8fCAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gY2FtdW5kYTpPdXRwdXRQYXJhbWV0ZXJcbiAgICAgIGlmICh0eXBlID09PSBDQU1VTkRBX09VVFBVVF9QQVJBTUVURVJfVFlQRSQxKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dFBhcmFtZXRlciA9IGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xuICAgICAgICBpZiAob3V0cHV0UGFyYW1ldGVyKSB7XG4gICAgICAgICAgcmV0dXJuIG91dHB1dFBhcmFtZXRlci5nZXQoJ2NhbXVuZGE6bmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpJbiBhbmQgY2FtdW5kYTpPdXRcbiAgICBpZiAoSU5fT1VUX0JJTkRJTkdfVFlQRVMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGNvbnN0IGNhbXVuZGFJbk91dCA9IGZpbmRDYW11bmRhSW5PdXQoYnVzaW5lc3NPYmplY3QsIGJpbmRpbmcpO1xuICAgICAgaWYgKGNhbXVuZGFJbk91dCkge1xuICAgICAgICBpZiAodHlwZSA9PT0gQ0FNVU5EQV9JTl9CVVNJTkVTU19LRVlfVFlQRSkge1xuICAgICAgICAgIHJldHVybiBjYW11bmRhSW5PdXQuZ2V0KCdjYW11bmRhOmJ1c2luZXNzS2V5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gQ0FNVU5EQV9PVVRfVFlQRSkge1xuICAgICAgICAgIHJldHVybiBjYW11bmRhSW5PdXQuZ2V0KCdjYW11bmRhOnRhcmdldCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IENBTVVOREFfSU5fVFlQRSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25cbiAgICAgICAgICB9ID0gYmluZGluZztcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbXVuZGFJbk91dC5nZXQoJ2NhbXVuZGE6c291cmNlRXhwcmVzc2lvbicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2FtdW5kYUluT3V0LmdldCgnY2FtdW5kYTpzb3VyY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIG5ldmVyIHRocm93IGFzIHRlbXBsYXRlcyBhcmUgdmFsaWRhdGVkIGJlZm9yZWhhbmRcbiAgICB0aHJvdyB1bmtub3duQmluZGluZ0Vycm9yKGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3BlcnR5U2V0dGVyKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSkge1xuICByZXR1cm4gZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUpIHtcbiAgICBsZXQgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCB7XG4gICAgICBiaW5kaW5nXG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlXG4gICAgfSA9IGJpbmRpbmc7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnQgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHM7XG4gICAgbGV0IHByb3BlcnR5VmFsdWU7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBpZiAoRVhURU5TSU9OX0JJTkRJTkdfVFlQRVMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICAgICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCBudWxsLCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2NvcGVCdXNpbmVzc09iamVjdChidXNpbmVzc09iamVjdCwgc2NvcGUpO1xuICAgICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgICAvLyBicG1uOkVycm9yXG4gICAgICAgIGlmIChzY29wZS50eXBlID09PSAnYnBtbjpFcnJvcicpIHtcbiAgICAgICAgICBidXNpbmVzc09iamVjdCA9IGNyZWF0ZUVycm9yKHNjb3BlLmlkLCByb290RWxlbWVudCwgYnBtbkZhY3RvcnkpO1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogcm9vdEVsZW1lbnQsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICByb290RWxlbWVudHM6IFsuLi5yb290RWxlbWVudC5nZXQoJ3Jvb3RFbGVtZW50cycpLCBidXNpbmVzc09iamVjdF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gY3JlYXRlRWxlbWVudChzY29wZS50eXBlLCBudWxsLCBlbGVtZW50LCBicG1uRmFjdG9yeSk7XG4gICAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGJ1c2luZXNzT2JqZWN0XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwcm9wZXJ0eVxuICAgIGlmICh0eXBlID09PSAncHJvcGVydHknKSB7XG4gICAgICBpZiAobmFtZSA9PT0gJ2NvbmRpdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY3JpcHRGb3JtYXRcbiAgICAgICAgfSA9IGJpbmRpbmc7XG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSBjcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XG4gICAgICAgICAgYm9keTogdmFsdWUsXG4gICAgICAgICAgbGFuZ3VhZ2U6IHNjcmlwdEZvcm1hdFxuICAgICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlEZXNjcmlwdG9yID0gYnVzaW5lc3NPYmplY3QuJGRlc2NyaXB0b3IucHJvcGVydGllc0J5TmFtZVtuYW1lXTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHR5cGU6IHByb3BlcnR5VHlwZVxuICAgICAgICB9ID0gcHJvcGVydHlEZXNjcmlwdG9yO1xuXG4gICAgICAgIC8vIGRvIG5vdCBvdmVycmlkZSBub24tcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIGlmICghUFJJTUlUSVZFX01PRERMRV9UWVBFUy5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3Qgc2V0IHByb3BlcnR5IG9mIHR5cGUgPCR7cHJvcGVydHlUeXBlfT5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydHlUeXBlID09PSAnQm9vbGVhbicpIHtcbiAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gISF2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdJbnRlZ2VyJykge1xuICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICAgIGlmIChpc05hTihwcm9wZXJ0eVZhbHVlKSkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHNldCBOYU4gdmFsdWVcbiAgICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCByZW1vdmUgdGhlIHByb3BlcnR5XG4gICAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkJDEocHJvcGVydHlWYWx1ZSkpIHtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIFtuYW1lXTogcHJvcGVydHlWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvblxuICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0VSUk9SX0VWRU5UX0RFRklOSVRJT05fVFlQRSQxKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGVycm9yUmVmXG4gICAgICB9ID0gYmluZGluZztcbiAgICAgIGNvbnN0IG9sZENhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbiA9IGZpbmRDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb24oYnVzaW5lc3NPYmplY3QsIGVycm9yUmVmKTtcbiAgICAgIGlmIChvbGRDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb24pIHtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogb2xkQ2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAnY2FtdW5kYTpleHByZXNzaW9uJzogdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3RXJyb3IgPSBjcmVhdGVFcnJvcihiaW5kaW5nLmVycm9yUmVmLCByb290RWxlbWVudCwgYnBtbkZhY3RvcnkpLFxuICAgICAgICAgIG5ld0NhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbiA9IGNyZWF0ZUNhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbih2YWx1ZSwgbmV3RXJyb3IsIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHJvb3RFbGVtZW50LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICByb290RWxlbWVudHM6IFsuLi5yb290RWxlbWVudC5nZXQoJ3Jvb3RFbGVtZW50cycpLCBuZXdFcnJvcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgbmV3Q2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpGaWVsZFxuICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0ZJRUxEX1RZUEUpIHtcbiAgICAgIGNvbnN0IG9sZENhbXVuZGFGaWVsZHMgPSBmaW5kRXh0ZW5zaW9ucyhidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkZpZWxkJ10pO1xuICAgICAgY29uc3QgbmV3Q2FtdW5kYUZpZWxkcyA9IFtdO1xuICAgICAgaWYgKG9sZENhbXVuZGFGaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIG9sZENhbXVuZGFGaWVsZHMuZm9yRWFjaChjYW11bmRhRmllbGQgPT4ge1xuICAgICAgICAgIGlmIChjYW11bmRhRmllbGQubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgbmV3Q2FtdW5kYUZpZWxkcy5wdXNoKGNyZWF0ZUNhbXVuZGFGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Q2FtdW5kYUZpZWxkcy5wdXNoKGNhbXVuZGFGaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0NhbXVuZGFGaWVsZHMucHVzaChjcmVhdGVDYW11bmRhRmllbGRJbmplY3Rpb24oYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSk7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLmZpbHRlcih2YWx1ZSA9PiAhb2xkQ2FtdW5kYUZpZWxkcy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLnZhbHVlcywgLi4ubmV3Q2FtdW5kYUZpZWxkc11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGNhbXVuZGE6UHJvcGVydHlcbiAgICBpZiAodHlwZSA9PT0gQ0FNVU5EQV9QUk9QRVJUWV9UWVBFKSB7XG4gICAgICBsZXQgY2FtdW5kYVByb3BlcnRpZXM7XG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgY2FtdW5kYVByb3BlcnRpZXMgPSBidXNpbmVzc09iamVjdC5nZXQoJ3Byb3BlcnRpZXMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbXVuZGFQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2NhbXVuZGE6UHJvcGVydGllcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYW11bmRhUHJvcGVydGllcykge1xuICAgICAgICBjYW11bmRhUHJvcGVydGllcyA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6UHJvcGVydGllcycsIG51bGwsIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBjYW11bmRhUHJvcGVydGllc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGNhbXVuZGFQcm9wZXJ0aWVzXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG9sZENhbXVuZGFQcm9wZXJ0eSA9IGZpbmRDYW11bmRhUHJvcGVydHkoY2FtdW5kYVByb3BlcnRpZXMsIGJpbmRpbmcpO1xuICAgICAgY29uc3QgbmV3Q2FtdW5kYVByb3BlcnR5ID0gY3JlYXRlQ2FtdW5kYVByb3BlcnR5KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBjYW11bmRhUHJvcGVydGllcy5nZXQoJ3ZhbHVlcycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkQ2FtdW5kYVByb3BlcnR5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBjYW11bmRhUHJvcGVydGllcyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi52YWx1ZXMsIG5ld0NhbXVuZGFQcm9wZXJ0eV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoSU9fQklORElOR19UWVBFUy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbGV0IGlucHV0T3V0cHV0O1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGlucHV0T3V0cHV0ID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdpbnB1dE91dHB1dCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGV4dGVuc2lvbkVsZW1lbnRzLCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFpbnB1dE91dHB1dCkge1xuICAgICAgICBpbnB1dE91dHB1dCA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6SW5wdXRPdXRwdXQnLCBudWxsLCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgaW5wdXRPdXRwdXRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBpbnB1dE91dHB1dF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNhbXVuZGE6SW5wdXRQYXJhbWV0ZXJcbiAgICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0lOUFVUX1BBUkFNRVRFUl9UWVBFJDEpIHtcbiAgICAgICAgY29uc3Qgb2xkQ2FtdW5kYUlucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcbiAgICAgICAgY29uc3QgbmV3Q2FtdW5kYUlucHV0UGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gaW5wdXRPdXRwdXQuZ2V0KCdjYW11bmRhOmlucHV0UGFyYW1ldGVycycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkQ2FtdW5kYUlucHV0UGFyYW1ldGVyKTtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogaW5wdXRPdXRwdXQsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICdjYW11bmRhOmlucHV0UGFyYW1ldGVycyc6IFsuLi52YWx1ZXMsIG5ld0NhbXVuZGFJbnB1dFBhcmFtZXRlcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBjYW11bmRhOk91dHB1dFBhcmFtZXRlclxuICAgICAgaWYgKHR5cGUgPT09IENBTVVOREFfT1VUUFVUX1BBUkFNRVRFUl9UWVBFJDEpIHtcbiAgICAgICAgY29uc3Qgb2xkQ2FtdW5kYU91dHB1dFBhcmFtZXRlciA9IGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xuICAgICAgICBjb25zdCBuZXdDYW11bmRhT3V0cHV0UGFyYW1ldGVyID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXJzJykuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBvbGRDYW11bmRhT3V0cHV0UGFyYW1ldGVyKTtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogaW5wdXRPdXRwdXQsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICdjYW11bmRhOm91dHB1dFBhcmFtZXRlcnMnOiBbLi4udmFsdWVzLCBuZXdDYW11bmRhT3V0cHV0UGFyYW1ldGVyXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpJbiBhbmQgY2FtdW5kYTpPdXRcbiAgICBpZiAoSU5fT1VUX0JJTkRJTkdfVFlQRVMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGNvbnN0IG9sZENhbXVuZGFJbk91dCA9IGZpbmRDYW11bmRhSW5PdXQoYnVzaW5lc3NPYmplY3QsIGJpbmRpbmcpO1xuICAgICAgbGV0IG5ld0NhbXVuZGFJbk91dDtcbiAgICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0lOX1RZUEUpIHtcbiAgICAgICAgbmV3Q2FtdW5kYUluT3V0ID0gY3JlYXRlQ2FtdW5kYUluKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IENBTVVOREFfT1VUX1RZUEUpIHtcbiAgICAgICAgbmV3Q2FtdW5kYUluT3V0ID0gY3JlYXRlQ2FtdW5kYU91dChiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q2FtdW5kYUluT3V0ID0gY3JlYXRlQ2FtdW5kYUluV2l0aEJ1c2luZXNzS2V5KHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkQ2FtdW5kYUluT3V0KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi52YWx1ZXMsIG5ld0NhbXVuZGFJbk91dF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC10ZW1wbGF0ZXMubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzaG91bGQgbmV2ZXIgdGhyb3cgYXMgdGVtcGxhdGVzIGFyZSB2YWxpZGF0ZWQgYmVmb3JlaGFuZFxuICAgIHRocm93IHVua25vd25CaW5kaW5nRXJyb3IoZWxlbWVudCwgcHJvcGVydHkpO1xuICB9O1xufVxuZnVuY3Rpb24gcHJvcGVydHlWYWxpZGF0b3IodHJhbnNsYXRlLCBwcm9wZXJ0eSkge1xuICByZXR1cm4gZnVuY3Rpb24gdmFsaWRhdGUodmFsdWUpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb25zdHJhaW50cyA9IHt9XG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHtcbiAgICAgIG1heExlbmd0aCxcbiAgICAgIG1pbkxlbmd0aCxcbiAgICAgIG5vdEVtcHR5XG4gICAgfSA9IGNvbnN0cmFpbnRzO1xuICAgIGlmIChub3RFbXB0eSAmJiBpc0VtcHR5U3RyaW5nKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnTXVzdCBub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChtYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IGhhdmUgbWF4IGxlbmd0aCB7bWF4TGVuZ3RofS4nLCB7XG4gICAgICAgIG1heExlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChtaW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IGhhdmUgbWluIGxlbmd0aCB7bWluTGVuZ3RofS4nLCB7XG4gICAgICAgIG1pbkxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCB7XG4gICAgICBwYXR0ZXJuXG4gICAgfSA9IGNvbnN0cmFpbnRzO1xuICAgIGlmIChwYXR0ZXJuKSB7XG4gICAgICBsZXQgbWVzc2FnZTtcbiAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybikpIHtcbiAgICAgICAgbWVzc2FnZSA9IHBhdHRlcm4ubWVzc2FnZTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4udmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKHZhbHVlLCBwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZSB8fCB0cmFuc2xhdGUoJ011c3QgbWF0Y2ggcGF0dGVybiB7cGF0dGVybn0uJywge1xuICAgICAgICAgIHBhdHRlcm5cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0U2NvcGVCdXNpbmVzc09iamVjdChidXNpbmVzc09iamVjdCwgc2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHR5cGVcbiAgfSA9IHNjb3BlO1xuICBpZiAodHlwZSA9PT0gJ2JwbW46RXJyb3InKSB7XG4gICAgLy8gcmV0cmlldmUgZXJyb3IgdGhyb3VnaCByZWZlcmVuY2VkIGVycm9yIGV2ZW50IGRlZmluaXRpb25cbiAgICBjb25zdCBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGZpbmRDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb24oYnVzaW5lc3NPYmplY3QsIGlkKTtcbiAgICBpZiAoZXJyb3JFdmVudERlZmluaXRpb24pIHtcbiAgICAgIHJldHVybiBlcnJvckV2ZW50RGVmaW5pdGlvbi5nZXQoJ2Vycm9yUmVmJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCB0eXBlKTtcbn1cbmZ1bmN0aW9uIHVua25vd25CaW5kaW5nRXJyb3IoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgaWQgPSBidXNpbmVzc09iamVjdC5nZXQoJ2lkJyk7XG4gIGNvbnN0IHtcbiAgICBiaW5kaW5nXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3Qge1xuICAgIHR5cGVcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBuZXcgRXJyb3IoYHVua25vd24gYmluZGluZyA8JHt0eXBlfT4gZm9yIGVsZW1lbnQgPCR7aWR9PiwgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuYCk7XG59XG5mdW5jdGlvbiBpc0VtcHR5U3RyaW5nKHN0cmluZykge1xuICByZXR1cm4gIXN0cmluZyB8fCAhc3RyaW5nLnRyaW0oKS5sZW5ndGg7XG59XG5mdW5jdGlvbiBtYXRjaGVzUGF0dGVybihzdHJpbmcsIHBhdHRlcm4pIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybikudGVzdChzdHJpbmcpO1xufVxuZnVuY3Rpb24gZ3JvdXBCeUdyb3VwSWQocHJvcGVydGllcykge1xuICByZXR1cm4gZ3JvdXBCeShwcm9wZXJ0aWVzLCAnZ3JvdXAnKTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXN0b21Hcm91cChncm91cHMsIGlkKSB7XG4gIHJldHVybiBmaW5kKGdyb3VwcywgZyA9PiBnLmlkID09PSBpZCk7XG59XG5cbmZ1bmN0aW9uIEVycm9yUHJvcGVydGllcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpbmRleCxcbiAgICBwcm9wZXJ0eSxcbiAgICBncm91cHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgYmluZGluZyxcbiAgICBsYWJlbFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICBlcnJvclJlZlxuICB9ID0gYmluZGluZztcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICBlcnJvckV2ZW50RGVmaW5pdGlvbnMgPSBmaW5kRXh0ZW5zaW9ucyhidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkVycm9yRXZlbnREZWZpbml0aW9uJ10pO1xuICBpZiAoIWVycm9yRXZlbnREZWZpbml0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb24gPSBmaW5kQ2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIGVycm9yUmVmKTtcbiAgY29uc3QgaWQgPSBgJHtlbGVtZW50LmlkfS1lcnJvci0ke2luZGV4fWA7XG4gIGxldCBlbnRyaWVzID0gW107XG4gIGNvbnN0IGVycm9yR3JvdXAgPSBncm91cHMuZmluZCgoe1xuICAgIGlkXG4gIH0pID0+IGlkID09PSAnQ2FtdW5kYVBsYXRmb3JtX19FcnJvcnMnKTtcbiAgY29uc3Qgb3JpZ2luYWxJdGVtID0gZXJyb3JHcm91cC5pdGVtcy5maW5kKCh7XG4gICAgZW50cmllc1xuICB9KSA9PiBlbnRyaWVzWzBdLmVycm9yRXZlbnREZWZpbml0aW9uID09PSBlcnJvckV2ZW50RGVmaW5pdGlvbik7XG4gIGVudHJpZXMgPSBvcmlnaW5hbEl0ZW0uZW50cmllcztcblxuICAvLyAoMSkgcmVtb3ZlIGdsb2JhbCBlcnJvciByZWZlcmVuY2VkIGVudHJ5XG4gIC8vIGVudHJpZXMuc2hpZnQoKTtcbiAgZW50cmllcyA9IHJlbW92ZUVudHJ5JDEoZW50cmllcywgJy1lcnJvclJlZicpO1xuXG4gIC8vICgyKSByZW1vdmUgdGhyb3cgZXhwcmVzc2lvbiBpbnB1dFxuICAvLyBlbnRyaWVzLnBvcCgpO1xuICBlbnRyaWVzID0gcmVtb3ZlRW50cnkkMShlbnRyaWVzLCAnLWV4cHJlc3Npb24nKTtcblxuICAvLyAoMykgYWRkIGRpc2FibGVkIHRocm93IGV4cHJlc3Npb24gaW5wdXRcbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogYCR7aWR9LWV4cHJlc3Npb25gLFxuICAgIGNvbXBvbmVudDogRXhwcmVzc2lvbixcbiAgICBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICBwcm9wZXJ0eVxuICB9KTtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICBpZCxcbiAgICBsYWJlbDogbGFiZWwgfHwgZ2V0RXJyb3JMYWJlbChlcnJvckV2ZW50RGVmaW5pdGlvbiksXG4gICAgZW50cmllc1xuICB9O1xuICByZXR1cm4gaXRlbTtcbn1cbmZ1bmN0aW9uIEV4cHJlc3Npb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgIGlkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9ICgpID0+IHt9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdjYW11bmRhOmV4cHJlc3Npb24nKTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50OiBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUaHJvdyBleHByZXNzaW9uJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2UsXG4gICAgZGlzYWJsZWQ6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiByZW1vdmVFbnRyeSQxKGVudHJpZXMsIHN1ZmZpeCkge1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoe1xuICAgIGlkXG4gIH0pID0+IGlkLmVuZHNXaXRoKHN1ZmZpeCkpO1xuICByZXR1cm4gd2l0aG91dChlbnRyaWVzLCBlbnRyeSk7XG59XG5mdW5jdGlvbiBnZXRFcnJvckxhYmVsKGVycm9yRXZlbnREZWZpbml0aW9uKSB7XG4gIGNvbnN0IGVycm9yID0gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdlcnJvclJlZicpO1xuICBpZiAoIWVycm9yKSB7XG4gICAgcmV0dXJuICc8bm8gcmVmZXJlbmNlPic7XG4gIH1cbiAgY29uc3QgZXJyb3JDb2RlID0gZXJyb3IuZ2V0KCdlcnJvckNvZGUnKSxcbiAgICBuYW1lID0gZXJyb3IuZ2V0KCduYW1lJykgfHwgJzx1bm5hbWVkPic7XG4gIGlmIChlcnJvckNvZGUpIHtcbiAgICByZXR1cm4gYCR7bmFtZX0gKGNvZGUgPSAke2Vycm9yQ29kZX0pYDtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn1cblxuZnVuY3Rpb24gSW5wdXRQcm9wZXJ0aWVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGluZGV4LFxuICAgIHByb3BlcnR5LFxuICAgIGdyb3Vwc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBiaW5kaW5nLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGxhYmVsXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3Qge1xuICAgIG5hbWVcbiAgfSA9IGJpbmRpbmc7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xuICBjb25zdCBpbnB1dFBhcmFtZXRlciA9IGlucHV0T3V0cHV0ICYmIGZpbmRJbnB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG4gIGNvbnN0IGlkID0gYCR7ZWxlbWVudC5pZH0taW5wdXRQYXJhbWV0ZXItJHtpbmRleH1gO1xuICBsZXQgZW50cmllcyA9IFtdO1xuICBpZiAoaW5wdXRQYXJhbWV0ZXIpIHtcbiAgICBjb25zdCBpbnB1dEdyb3VwID0gZ3JvdXBzLmZpbmQoKHtcbiAgICAgIGlkXG4gICAgfSkgPT4gaWQgPT09ICdDYW11bmRhUGxhdGZvcm1fX0lucHV0Jyk7XG4gICAgY29uc3QgaXRlbSA9IGlucHV0R3JvdXAuaXRlbXMuZmluZCgoe1xuICAgICAgZW50cmllc1xuICAgIH0pID0+IGVudHJpZXNbMF0ucGFyYW1ldGVyID09PSBpbnB1dFBhcmFtZXRlcik7XG4gICAgZW50cmllcyA9IGl0ZW0uZW50cmllcztcblxuICAgIC8vICgxKSByZW1vdmUgbmFtZSBlbnRyeVxuICAgIGVudHJpZXMgPSByZW1vdmVFbnRyeShlbnRyaWVzLCAnLW5hbWUnKTtcbiAgfVxuXG4gIC8vICgyKSBhZGQgbG9jYWwgdmFyaWFibGUgYXNzaWdubWVudCBlbnRyeVxuICBlbnRyaWVzLnVuc2hpZnQoe1xuICAgIGlkOiBgJHtpZH0tbG9jYWwtdmFyaWFibGUtYXNzaWdubWVudGAsXG4gICAgY29tcG9uZW50OiBMb2NhbFZhcmlhYmxlQXNzaWdubWVudCxcbiAgICBpbnB1dFBhcmFtZXRlcixcbiAgICBwcm9wZXJ0eVxuICB9KTtcblxuICAvLyAoMykgYWRkIGRlc2NyaXB0aW9uIGVudHJ5XG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIGVudHJpZXMudW5zaGlmdCh7XG4gICAgICBpZDogYCR7aWR9LWRlc2NyaXB0aW9uYCxcbiAgICAgIGNvbXBvbmVudDogRGVzY3JpcHRpb24kMSxcbiAgICAgIHRleHQ6IGRlc2NyaXB0aW9uXG4gICAgfSk7XG4gIH1cblxuICAvLyBAYmFybWFjOiBiaW5kaW5nI25hbWUgaXMgcmVxdWlyZWQgc28gdGhlcmUgaXMgbm8gdGhpcmQgb3B0aW9uXG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgaWQsXG4gICAgbGFiZWw6IGxhYmVsIHx8IG5hbWUsXG4gICAgZW50cmllc1xuICB9O1xuICByZXR1cm4gaXRlbTtcbn1cblxuLy8gVE9ETyhwaGlsaXBwZnJvbW1lKTogYWRkIHRleHQgZW50cnkgdG8gcHJvcGVydGllcy1wYW5lbFxuZnVuY3Rpb24gRGVzY3JpcHRpb24kMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdGV4dFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWVudHJ5XCIsXG4gICAgXCJkYXRhLWVudHJ5LWlkXCI6IGlkLFxuICAgIGNoaWxkcmVuOiBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZGVzY3JpcHRpb25cIixcbiAgICAgIGNoaWxkcmVuOiBqc3goUHJvcGVydHlEZXNjcmlwdGlvbiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogdGV4dFxuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn1cbmZ1bmN0aW9uIExvY2FsVmFyaWFibGVBc3NpZ25tZW50KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIHByb3BlcnR5LFxuICAgIGlucHV0UGFyYW1ldGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gaW5wdXRQYXJhbWV0ZXI7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYWRkSW5wdXRQYXJhbWV0ZXIoZWxlbWVudCwgcHJvcGVydHksIGJwbW5GYWN0b3J5LCBtb2RlbGluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZUlucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGJpbmRpbmcsIG1vZGVsaW5nKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBUb2dnbGVTd2l0Y2hFbnRyeSh7XG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTG9jYWwgdmFyaWFibGUgYXNzaWdubWVudCcpLFxuICAgIHN3aXRjaGVyTGFiZWw6IGlucHV0UGFyYW1ldGVyID8gdHJhbnNsYXRlKCdPbicpIDogdHJhbnNsYXRlKCdPZmYnKSxcbiAgICBkZXNjcmlwdGlvbjogaW5wdXRQYXJhbWV0ZXIgPyAnJyA6IHRyYW5zbGF0ZSgnUGFyYW1ldGVyIHdvblxcJ3QgYmUgY3JlYXRlZCBhcyBsb2NhbCB2YXJpYWJsZS4nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIGFkZElucHV0UGFyYW1ldGVyKGVsZW1lbnQsIHByb3BlcnR5LCBicG1uRmFjdG9yeSwgbW9kZWxpbmcpIHtcbiAgY29uc3Qge1xuICAgIGJpbmRpbmcsXG4gICAgdmFsdWVcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgY29uc3QgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xuICBsZXQgdXBkYXRlZEJ1c2luZXNzT2JqZWN0LCB1cGRhdGU7XG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICB1cGRhdGVkQnVzaW5lc3NPYmplY3QgPSBidXNpbmVzc09iamVjdDtcbiAgICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzJDEoYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KSxcbiAgICAgIGlucHV0T3V0cHV0ID0gY3JlYXRlSW5wdXRPdXRwdXQkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnksIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgICBleHRlbnNpb25FbGVtZW50cy52YWx1ZXMucHVzaChpbnB1dE91dHB1dCk7XG4gICAgdXBkYXRlID0ge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICB9O1xuICB9IGVsc2UgaWYgKCFpbnB1dE91dHB1dCkge1xuICAgIHVwZGF0ZWRCdXNpbmVzc09iamVjdCA9IGV4dGVuc2lvbkVsZW1lbnRzO1xuICAgIGNvbnN0IGlucHV0T3V0cHV0ID0gY3JlYXRlSW5wdXRPdXRwdXQkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnksIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgICB1cGRhdGUgPSB7XG4gICAgICB2YWx1ZXM6IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJykuY29uY2F0KGlucHV0T3V0cHV0KVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlZEJ1c2luZXNzT2JqZWN0ID0gaW5wdXRPdXRwdXQ7XG4gICAgY29uc3QgaW5wdXRQYXJhbWV0ZXIgPSBjcmVhdGVJbnB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIGlucHV0UGFyYW1ldGVyLiRwYXJlbnQgPSBpbnB1dE91dHB1dDtcbiAgICB1cGRhdGUgPSB7XG4gICAgICBpbnB1dFBhcmFtZXRlcnM6IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTppbnB1dFBhcmFtZXRlcnMnKS5jb25jYXQoaW5wdXRQYXJhbWV0ZXIpXG4gICAgfTtcbiAgfVxuICBtb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHVwZGF0ZWRCdXNpbmVzc09iamVjdCwgdXBkYXRlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUlucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGJpbmRpbmcsIG1vZGVsaW5nKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKSxcbiAgICBpbnB1dFBhcmFtZXRlcnMgPSBpbnB1dE91dHB1dC5nZXQoJ2NhbXVuZGE6aW5wdXRQYXJhbWV0ZXJzJyk7XG4gIGNvbnN0IGlucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcbiAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBpbnB1dE91dHB1dCwge1xuICAgIGlucHV0UGFyYW1ldGVyczogd2l0aG91dChpbnB1dFBhcmFtZXRlcnMsIGlucHV0UGFyYW1ldGVyKVxuICB9KTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUVudHJ5KGVudHJpZXMsIHN1ZmZpeCkge1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoe1xuICAgIGlkXG4gIH0pID0+IGlkLmVuZHNXaXRoKHN1ZmZpeCkpO1xuICByZXR1cm4gd2l0aG91dChlbnRyaWVzLCBlbnRyeSk7XG59XG5mdW5jdGlvbiBjcmVhdGVFeHRlbnNpb25FbGVtZW50cyQxKGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSkge1xuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICB2YWx1ZXM6IFtdXG4gIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnB1dE91dHB1dCQxKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSwgZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgY29uc3QgaW5wdXRQYXJhbWV0ZXIgPSBjcmVhdGVJbnB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICBjb25zdCBpbnB1dE91dHB1dCA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6SW5wdXRPdXRwdXQnLCB7XG4gICAgaW5wdXRQYXJhbWV0ZXJzOiBbaW5wdXRQYXJhbWV0ZXJdLFxuICAgIG91dHB1dFBhcmFtZXRlcnM6IFtdXG4gIH0sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gIGlucHV0UGFyYW1ldGVyLiRwYXJlbnQgPSBpbnB1dE91dHB1dDtcbiAgcmV0dXJuIGlucHV0T3V0cHV0O1xufVxuXG5jb25zdCBTUEFDRV9SRUdFWCA9IC9cXHMvO1xuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xuICByZXR1cm4gU1BBQ0VfUkVHRVgudGVzdCh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIE91dHB1dFByb3BlcnRpZXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaW5kZXgsXG4gICAgaW5qZWN0b3IsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgYmluZGluZyxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBsYWJlbFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICBuYW1lXG4gIH0gPSBiaW5kaW5nO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgIGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qgb3V0cHV0UGFyYW1ldGVyID0gaW5wdXRPdXRwdXQgJiYgZmluZE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG4gIGNvbnN0IGlkID0gYCR7ZWxlbWVudC5pZH0tb3V0cHV0UGFyYW1ldGVyLSR7aW5kZXh9YDtcbiAgbGV0IGVudHJpZXMgPSBbXTtcblxuICAvLyAoMSkgYWRkIGRlc2NyaXB0aW9uIGVudHJ5XG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogYCR7aWR9LWRlc2NyaXB0aW9uYCxcbiAgICAgIGNvbXBvbmVudDogRGVzY3JpcHRpb24sXG4gICAgICB0ZXh0OiBkZXNjcmlwdGlvblxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDIpIGFkZCBsb2NhbCB2YXJpYWJsZSBhc3NpZ25tZW50IGVudHJ5XG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6IGAke2lkfS1sb2NhbC12YXJpYWJsZS1hc3NpZ25tZW50YCxcbiAgICBjb21wb25lbnQ6IFByb2Nlc3NWYXJpYWJsZUFzc2lnbm1lbnQsXG4gICAgb3V0cHV0UGFyYW1ldGVyLFxuICAgIHByb3BlcnR5XG4gIH0pO1xuICBpZiAob3V0cHV0UGFyYW1ldGVyKSB7XG4gICAgLy8gKDMpIGFkZCBhc3NpZ24gdG8gcHJvY2VzcyB2YXJpYWJsZSBlbnRyeVxuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogYCR7aWR9LWFzc2lnbi10by1wcm9jZXNzLXZhcmlhYmxlYCxcbiAgICAgIGNvbXBvbmVudDogQXNzaWduVG9Qcm9jZXNzVmFyaWFibGUsXG4gICAgICBwcm9wZXJ0eVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgaWQsXG4gICAgbGFiZWw6IGxhYmVsIHx8IG5hbWUgfHwgdHJhbnNsYXRlKCc8dW5uYW1lZD4nKSxcbiAgICBlbnRyaWVzXG4gIH07XG4gIHJldHVybiBpdGVtO1xufVxuXG4vLyBUT0RPKHBoaWxpcHBmcm9tbWUpOiBhZGQgdGV4dCBlbnRyeSB0byBwcm9wZXJ0aWVzLXBhbmVsXG5mdW5jdGlvbiBEZXNjcmlwdGlvbihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdGV4dFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWVudHJ5XCIsXG4gICAgXCJkYXRhLWVudHJ5LWlkXCI6IGlkLFxuICAgIGNoaWxkcmVuOiBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZGVzY3JpcHRpb25cIixcbiAgICAgIGNoaWxkcmVuOiBqc3goUHJvcGVydHlEZXNjcmlwdGlvbiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogdGV4dFxuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn1cbmZ1bmN0aW9uIFByb2Nlc3NWYXJpYWJsZUFzc2lnbm1lbnQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHksXG4gICAgb3V0cHV0UGFyYW1ldGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gb3V0cHV0UGFyYW1ldGVyO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGFkZE91dHB1dFBhcmFtZXRlcihlbGVtZW50LCBwcm9wZXJ0eSwgYnBtbkZhY3RvcnksIG1vZGVsaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlT3V0cHV0UGFyYW1ldGVyKGVsZW1lbnQsIGJpbmRpbmcsIG1vZGVsaW5nKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBUb2dnbGVTd2l0Y2hFbnRyeSh7XG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJvY2VzcyB2YXJpYWJsZSBhc3NpZ25tZW50JyksXG4gICAgc3dpdGNoZXJMYWJlbDogb3V0cHV0UGFyYW1ldGVyID8gdHJhbnNsYXRlKCdPbicpIDogdHJhbnNsYXRlKCdPZmYnKSxcbiAgICBkZXNjcmlwdGlvbjogb3V0cHV0UGFyYW1ldGVyID8gJycgOiB0cmFuc2xhdGUoJ1BhcmFtZXRlciB3b25cXCd0IGJlIGF2YWlsYWJsZSBpbiBwcm9jZXNzIHNjb3BlLicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0pO1xufVxuZnVuY3Rpb24gQXNzaWduVG9Qcm9jZXNzVmFyaWFibGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgYmluZGluZ1xuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihlbGVtZW50LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpLFxuICAgIG91dHB1dFBhcmFtZXRlciA9IGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBvdXRwdXRQYXJhbWV0ZXIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5hbWU6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBvdXRwdXRQYXJhbWV0ZXIuZ2V0KCdjYW11bmRhOm5hbWUnKTtcbiAgfTtcbiAgY29uc3QgdmFsaWRhdGUgPSB2YWx1ZSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnUHJvY2VzcyB2YXJpYWJsZSBuYW1lIG11c3Qgbm90IGJlIGVtcHR5LicpO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbnNTcGFjZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ1Byb2Nlc3MgdmFyaWFibGUgbmFtZSBtdXN0IG5vdCBjb250YWluIHNwYWNlcy4nKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZGVib3VuY2UsXG4gICAgZWxlbWVudDogb3V0cHV0UGFyYW1ldGVyLFxuICAgIGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Fzc2lnbiB0byBwcm9jZXNzIHZhcmlhYmxlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgdmFsaWRhdGVcbiAgfSk7XG59XG5mdW5jdGlvbiBhZGRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgcHJvcGVydHksIGJwbW5GYWN0b3J5LCBtb2RlbGluZykge1xuICBjb25zdCB7XG4gICAgYmluZGluZyxcbiAgICB2YWx1ZVxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICBjb25zdCBpbnB1dE91dHB1dCA9IGZpbmRFeHRlbnNpb24oYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOklucHV0T3V0cHV0Jyk7XG4gIGxldCB1cGRhdGVkQnVzaW5lc3NPYmplY3QsIHVwZGF0ZTtcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIHVwZGF0ZWRCdXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KSxcbiAgICAgIGlucHV0T3V0cHV0ID0gY3JlYXRlSW5wdXRPdXRwdXQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5LCBleHRlbnNpb25FbGVtZW50cyk7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMudmFsdWVzLnB1c2goaW5wdXRPdXRwdXQpO1xuICAgIHVwZGF0ZSA9IHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgfTtcbiAgfSBlbHNlIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICB1cGRhdGVkQnVzaW5lc3NPYmplY3QgPSBleHRlbnNpb25FbGVtZW50cztcbiAgICBjb25zdCBpbnB1dE91dHB1dCA9IGNyZWF0ZUlucHV0T3V0cHV0KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSwgZXh0ZW5zaW9uRWxlbWVudHMpO1xuICAgIHVwZGF0ZSA9IHtcbiAgICAgIHZhbHVlczogZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5jb25jYXQoaW5wdXRPdXRwdXQpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGVkQnVzaW5lc3NPYmplY3QgPSBpbnB1dE91dHB1dDtcbiAgICBjb25zdCBvdXRwdXRQYXJhbWV0ZXIgPSBjcmVhdGVPdXRwdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICBvdXRwdXRQYXJhbWV0ZXIuJHBhcmVudCA9IGlucHV0T3V0cHV0O1xuICAgIHVwZGF0ZSA9IHtcbiAgICAgIG91dHB1dFBhcmFtZXRlcnM6IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXJzJykuY29uY2F0KG91dHB1dFBhcmFtZXRlcilcbiAgICB9O1xuICB9XG4gIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgdXBkYXRlZEJ1c2luZXNzT2JqZWN0LCB1cGRhdGUpO1xufVxuZnVuY3Rpb24gcmVtb3ZlT3V0cHV0UGFyYW1ldGVyKGVsZW1lbnQsIGJpbmRpbmcsIG1vZGVsaW5nKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKSxcbiAgICBvdXRwdXRQYXJhbWV0ZXJzID0gaW5wdXRPdXRwdXQuZ2V0KCdjYW11bmRhOm91dHB1dFBhcmFtZXRlcnMnKTtcbiAgY29uc3Qgb3V0cHV0UGFyYW1ldGVyID0gZmluZE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG4gIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgaW5wdXRPdXRwdXQsIHtcbiAgICBvdXRwdXRQYXJhbWV0ZXJzOiB3aXRob3V0KG91dHB1dFBhcmFtZXRlcnMsIG91dHB1dFBhcmFtZXRlcilcbiAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVFeHRlbnNpb25FbGVtZW50cyhidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgdmFsdWVzOiBbXVxuICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5wdXRPdXRwdXQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5LCBleHRlbnNpb25FbGVtZW50cykge1xuICBjb25zdCBvdXRwdXRQYXJhbWV0ZXIgPSBjcmVhdGVPdXRwdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgY29uc3QgaW5wdXRPdXRwdXQgPSBjcmVhdGVFbGVtZW50KCdjYW11bmRhOklucHV0T3V0cHV0Jywge1xuICAgIGlucHV0UGFyYW1ldGVyczogW10sXG4gICAgb3V0cHV0UGFyYW1ldGVyczogW291dHB1dFBhcmFtZXRlcl1cbiAgfSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgb3V0cHV0UGFyYW1ldGVyLiRwYXJlbnQgPSBpbnB1dE91dHB1dDtcbiAgcmV0dXJuIGlucHV0T3V0cHV0O1xufVxuXG5jb25zdCBDQU1VTkRBX0VSUk9SX0VWRU5UX0RFRklOSVRJT05fVFlQRSA9ICdjYW11bmRhOmVycm9yRXZlbnREZWZpbml0aW9uJyxcbiAgQ0FNVU5EQV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdjYW11bmRhOmlucHV0UGFyYW1ldGVyJyxcbiAgQ0FNVU5EQV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUgPSAnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXInO1xuY29uc3QgTE9XRVJfUFJJT1JJVFkgPSAzMDA7XG5jb25zdCBBTFdBWVNfRElTUExBWUVEX0dST1VQUyA9IFsnZ2VuZXJhbCcsICdkb2N1bWVudGF0aW9uJywgJ211bHRpSW5zdGFuY2UnXTtcbmNsYXNzIEVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXIge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50VGVtcGxhdGVzLCBwcm9wZXJ0aWVzUGFuZWwsIGluamVjdG9yKSB7XG4gICAgcHJvcGVydGllc1BhbmVsLnJlZ2lzdGVyUHJvdmlkZXIoTE9XRVJfUFJJT1JJVFksIHRoaXMpO1xuICAgIHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMgPSBlbGVtZW50VGVtcGxhdGVzO1xuICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gIH1cbiAgZ2V0R3JvdXBzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ3JvdXBzID0+IHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gdGhpcy5faW5qZWN0b3I7XG4gICAgICBpZiAoIXRoaXMuX3Nob3VsZFNob3dUZW1wbGF0ZVByb3BlcnRpZXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG5cbiAgICAgIC8vICgwKSBDb3B5IHByb3ZpZGVkIGdyb3Vwc1xuICAgICAgZ3JvdXBzID0gZ3JvdXBzLnNsaWNlKCk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZXNHcm91cCA9IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaWQ6ICdFbGVtZW50VGVtcGxhdGVzX19UZW1wbGF0ZScsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RlbXBsYXRlJyksXG4gICAgICAgIGNvbXBvbmVudDogY3JlYXRlRWxlbWVudFRlbXBsYXRlc0dyb3VwKCksXG4gICAgICAgIGVudHJpZXM6IFRlbXBsYXRlUHJvcHMoe1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZWxlbWVudFRlbXBsYXRlczogdGhpcy5fZWxlbWVudFRlbXBsYXRlc1xuICAgICAgICB9KVxuICAgICAgfTtcblxuICAgICAgLy8gKDEpIEFkZCB0ZW1wbGF0ZXMgZ3JvdXBcbiAgICAgIGFkZEdyb3Vwc0FmdGVyKEFMV0FZU19ESVNQTEFZRURfR1JPVVBTLCBncm91cHMsIFt0ZW1wbGF0ZXNHcm91cF0pO1xuICAgICAgY29uc3QgZWxlbWVudFRlbXBsYXRlID0gdGhpcy5fZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCk7XG4gICAgICBpZiAoZWxlbWVudFRlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlU3BlY2lmaWNHcm91cHMgPSBbXS5jb25jYXQoY3JlYXRlSW5wdXRHcm91cChlbGVtZW50LCBlbGVtZW50VGVtcGxhdGUsIGluamVjdG9yLCBncm91cHMpIHx8IFtdLCBjcmVhdGVPdXRwdXRHcm91cChlbGVtZW50LCBlbGVtZW50VGVtcGxhdGUsIGluamVjdG9yKSB8fCBbXSwgY3JlYXRlRXJyb3JHcm91cChlbGVtZW50LCBlbGVtZW50VGVtcGxhdGUsIGluamVjdG9yLCBncm91cHMpIHx8IFtdLCBDdXN0b21Qcm9wZXJ0aWVzKHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnRUZW1wbGF0ZSxcbiAgICAgICAgICBpbmplY3RvclxuICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gKDIpIGFkZCB0ZW1wbGF0ZS1zcGVjaWZpYyBwcm9wZXJ0aWVzIGdyb3Vwc1xuICAgICAgICBhZGRHcm91cHNBZnRlcignRWxlbWVudFRlbXBsYXRlc19fVGVtcGxhdGUnLCBncm91cHMsIHRlbXBsYXRlU3BlY2lmaWNHcm91cHMpO1xuICAgICAgfVxuXG4gICAgICAvLyAoMykgYXBwbHkgZW50cmllcyB2aXNpYmxlXG4gICAgICBpZiAoZ2V0VGVtcGxhdGVJZChlbGVtZW50KSkge1xuICAgICAgICBncm91cHMgPSBmaWx0ZXJXaXRoRW50cmllc1Zpc2libGUoZWxlbWVudFRlbXBsYXRlIHx8IHt9LCBncm91cHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9O1xuICB9XG4gIF9zaG91bGRTaG93VGVtcGxhdGVQcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VGVtcGxhdGVJZChlbGVtZW50KSB8fCB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldEFsbChlbGVtZW50KS5sZW5ndGg7XG4gIH1cbn1cbkVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXIuJGluamVjdCA9IFsnZWxlbWVudFRlbXBsYXRlcycsICdwcm9wZXJ0aWVzUGFuZWwnLCAnaW5qZWN0b3InXTtcblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVJbnB1dEdyb3VwKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZSwgaW5qZWN0b3IsIGdyb3Vwcykge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dHMnKSxcbiAgICBpZDogJ0VsZW1lbnRUZW1wbGF0ZXNfX0lucHV0JyxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICBpdGVtczogW11cbiAgfTtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnRUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcigoe1xuICAgIGJpbmRpbmcsXG4gICAgdHlwZVxuICB9KSA9PiB7XG4gICAgcmV0dXJuICF0eXBlICYmIGJpbmRpbmcudHlwZSA9PT0gQ0FNVU5EQV9JTlBVVF9QQVJBTUVURVJfVFlQRTtcbiAgfSk7XG4gIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHksIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaXRlbSA9IElucHV0UHJvcGVydGllcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5kZXgsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGdyb3Vwc1xuICAgIH0pO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBncm91cC5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGlmIGVtcHR5XG4gIGlmICghZ3JvdXAuaXRlbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuZnVuY3Rpb24gY3JlYXRlT3V0cHV0R3JvdXAoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlLCBpbmplY3RvciwgZ3JvdXBzKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dHB1dHMnKSxcbiAgICBpZDogJ0VsZW1lbnRUZW1wbGF0ZXNfX091dHB1dCcsXG4gICAgY29tcG9uZW50OiBMaXN0R3JvdXAsXG4gICAgaXRlbXM6IFtdXG4gIH07XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBlbGVtZW50VGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIoKHtcbiAgICBiaW5kaW5nLFxuICAgIHR5cGVcbiAgfSkgPT4ge1xuICAgIHJldHVybiAhdHlwZSAmJiBiaW5kaW5nLnR5cGUgPT09IENBTVVOREFfT1VUUFVUX1BBUkFNRVRFUl9UWVBFO1xuICB9KTtcbiAgcHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpdGVtID0gT3V0cHV0UHJvcGVydGllcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5kZXgsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGluamVjdG9yXG4gICAgfSk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGdyb3VwLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgfVxuICB9KTtcblxuICAvLyByZW1vdmUgaWYgZW1wdHlcbiAgaWYgKCFncm91cC5pdGVtcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5mdW5jdGlvbiBjcmVhdGVFcnJvckdyb3VwKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZSwgaW5qZWN0b3IsIGdyb3Vwcykge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvcnMnKSxcbiAgICBpZDogJ0VsZW1lbnRUZW1wbGF0ZXNfX0Vycm9yJyxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICBpdGVtczogW11cbiAgfTtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnRUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcigoe1xuICAgIGJpbmRpbmcsXG4gICAgdHlwZVxuICB9KSA9PiB7XG4gICAgcmV0dXJuICF0eXBlICYmIGJpbmRpbmcudHlwZSA9PT0gQ0FNVU5EQV9FUlJPUl9FVkVOVF9ERUZJTklUSU9OX1RZUEU7XG4gIH0pO1xuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSBFcnJvclByb3BlcnRpZXMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluZGV4LFxuICAgICAgcHJvcGVydHksXG4gICAgICBncm91cHNcbiAgICB9KTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgZ3JvdXAuaXRlbXMucHVzaChpdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBpZiBlbXB0eVxuICBpZiAoIWdyb3VwLml0ZW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGlkT3JJZHNcbiAqIEBwYXJhbSB7QXJyYXk8eyBpZDogc3RyaW5nIH19IGdyb3Vwc1xuICogQHBhcmFtIHtBcnJheTx7IGlkOiBzdHJpbmcgfT59IGdyb3Vwc1RvQWRkXG4gKi9cbmZ1bmN0aW9uIGFkZEdyb3Vwc0FmdGVyKGlkT3JJZHMsIGdyb3VwcywgZ3JvdXBzVG9BZGQpIHtcbiAgbGV0IGlkcyA9IGlkT3JJZHM7XG4gIGlmICghQXJyYXkuaXNBcnJheShpZE9ySWRzKSkge1xuICAgIGlkcyA9IFtpZE9ySWRzXTtcbiAgfVxuXG4gIC8vIGZpbmQgaW5kZXggb2YgbGFzdCBncm91cCB3aXRoIHByb3ZpZGVkIGlkXG4gIGNvbnN0IGluZGV4ID0gZ3JvdXBzLnJlZHVjZSgoYWNjLCBncm91cCwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaWRzLmluY2x1ZGVzKGdyb3VwLmlkKSA/IGluZGV4IDogYWNjO1xuICB9LCAtMSk7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBncm91cHMuc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4uZ3JvdXBzVG9BZGQpO1xuICB9IGVsc2Uge1xuICAgIC8vIGFkZCBpbiB0aGUgYmVnaW5uaW5nIGlmIGdyb3VwIHdpdGggcHJvdmlkZWQgaWQgaXMgbWlzc2luZ1xuICAgIGdyb3Vwcy51bnNoaWZ0KC4uLmdyb3Vwc1RvQWRkKTtcbiAgfVxufVxuZnVuY3Rpb24gZmlsdGVyV2l0aEVudHJpZXNWaXNpYmxlKHRlbXBsYXRlLCBncm91cHMpIHtcbiAgaWYgKCF0ZW1wbGF0ZS5lbnRyaWVzVmlzaWJsZSkge1xuICAgIHJldHVybiBncm91cHMuZmlsdGVyKGdyb3VwID0+IHtcbiAgICAgIHJldHVybiBBTFdBWVNfRElTUExBWUVEX0dST1VQUy5pbmNsdWRlcyhncm91cC5pZCkgfHwgZ3JvdXAuaWQuc3RhcnRzV2l0aCgnRWxlbWVudFRlbXBsYXRlc19fJyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cblxudmFyIHByb3BlcnRpZXNQcm92aWRlck1vZHVsZSA9IHtcbiAgX19kZXBlbmRzX186IFt0cmFuc2xhdGVNb2R1bGUsIENhbXVuZGFQbGF0Zm9ybVByb3BlcnRpZXNQcm92aWRlck1vZHVsZV0sXG4gIF9faW5pdF9fOiBbJ2VsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXInXSxcbiAgZWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlcjogWyd0eXBlJywgRWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlcl1cbn07XG5cbnZhciBpbmRleCA9IHtcbiAgX19kZXBlbmRzX186IFtjb3JlTW9kdWxlLCBwcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGVdXG59O1xuXG4vKipcbiAqIE1vZGRsZSBiYXNlIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIEJhc2UoKSB7fVxuQmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuJG1vZGVsLnByb3BlcnRpZXMuZ2V0KHRoaXMsIG5hbWUpO1xufTtcbkJhc2UucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLiRtb2RlbC5wcm9wZXJ0aWVzLnNldCh0aGlzLCBuYW1lLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIEEgbW9kZWwgZWxlbWVudCBmYWN0b3J5LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RlbFxuICogQHBhcmFtIHtQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIEZhY3RvcnkobW9kZWwsIHByb3BlcnRpZXMpIHtcbiAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xufVxuRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlVHlwZSA9IGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7XG4gIHZhciBwcm9wcyA9IHRoaXMucHJvcGVydGllcyxcbiAgICBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2UucHJvdG90eXBlKTtcblxuICAvLyBpbml0aWFsaXplIGRlZmF1bHQgdmFsdWVzXG4gIGZvckVhY2goZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbiAocCkge1xuICAgIGlmICghcC5pc01hbnkgJiYgcC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3RvdHlwZVtwLm5hbWVdID0gcC5kZWZhdWx0O1xuICAgIH1cbiAgfSk7XG4gIHByb3BzLmRlZmluZU1vZGVsKHByb3RvdHlwZSwgbW9kZWwpO1xuICBwcm9wcy5kZWZpbmVEZXNjcmlwdG9yKHByb3RvdHlwZSwgZGVzY3JpcHRvcik7XG4gIHZhciBuYW1lID0gZGVzY3JpcHRvci5ucy5uYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHR5cGUgY29uc3RydWN0b3JcbiAgICovXG4gIGZ1bmN0aW9uIE1vZGRsZUVsZW1lbnQoYXR0cnMpIHtcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyR0eXBlJywge1xuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckYXR0cnMnLCB7XG4gICAgICB2YWx1ZToge31cbiAgICB9KTtcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyRwYXJlbnQnLCB7XG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZvckVhY2goYXR0cnMsIGJpbmQoZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICB0aGlzLnNldChrZXksIHZhbCk7XG4gICAgfSwgdGhpcykpO1xuICB9XG4gIE1vZGRsZUVsZW1lbnQucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBNb2RkbGVFbGVtZW50Lmhhc1R5cGUgPSBwcm90b3R5cGUuJGluc3RhbmNlT2YgPSB0aGlzLm1vZGVsLmhhc1R5cGU7XG5cbiAgLy8gc3RhdGljIGxpbmtzXG4gIHByb3BzLmRlZmluZU1vZGVsKE1vZGRsZUVsZW1lbnQsIG1vZGVsKTtcbiAgcHJvcHMuZGVmaW5lRGVzY3JpcHRvcihNb2RkbGVFbGVtZW50LCBkZXNjcmlwdG9yKTtcbiAgcmV0dXJuIE1vZGRsZUVsZW1lbnQ7XG59O1xuXG4vKipcbiAqIEJ1aWx0LWluIG1vZGRsZSB0eXBlc1xuICovXG52YXIgQlVJTFRJTlMgPSB7XG4gIFN0cmluZzogdHJ1ZSxcbiAgQm9vbGVhbjogdHJ1ZSxcbiAgSW50ZWdlcjogdHJ1ZSxcbiAgUmVhbDogdHJ1ZSxcbiAgRWxlbWVudDogdHJ1ZVxufTtcblxuLyoqXG4gKiBDb252ZXJ0ZXJzIGZvciBidWlsdCBpbiB0eXBlcyBmcm9tIHN0cmluZyByZXByZXNlbnRhdGlvbnNcbiAqL1xudmFyIFRZUEVfQ09OVkVSVEVSUyA9IHtcbiAgU3RyaW5nOiBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzO1xuICB9LFxuICBCb29sZWFuOiBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzID09PSAndHJ1ZSc7XG4gIH0sXG4gIEludGVnZXI6IGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHMsIDEwKTtcbiAgfSxcbiAgUmVhbDogZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdHlwZSB0byBpdHMgcmVhbCByZXByZXNlbnRhdGlvblxuICovXG5mdW5jdGlvbiBjb2VyY2VUeXBlKHR5cGUsIHZhbHVlKSB7XG4gIHZhciBjb252ZXJ0ZXIgPSBUWVBFX0NPTlZFUlRFUlNbdHlwZV07XG4gIGlmIChjb252ZXJ0ZXIpIHtcbiAgICByZXR1cm4gY29udmVydGVyKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBidWlsdC1pblxuICovXG5mdW5jdGlvbiBpc0J1aWx0SW4odHlwZSkge1xuICByZXR1cm4gISFCVUlMVElOU1t0eXBlXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBzaW1wbGVcbiAqL1xuZnVuY3Rpb24gaXNTaW1wbGUodHlwZSkge1xuICByZXR1cm4gISFUWVBFX0NPTlZFUlRFUlNbdHlwZV07XG59XG5cbi8qKlxuICogUGFyc2VzIGEgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgbmFtZSBvZiB0aGUgZm9ybSAobnM6KWxvY2FsTmFtZSB0byBhbiBvYmplY3QsXG4gKiBnaXZlbiBhIGRlZmF1bHQgcHJlZml4IHRvIGFzc3VtZSBpbiBjYXNlIG5vIGV4cGxpY2l0IG5hbWVzcGFjZSBpcyBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IFtkZWZhdWx0UHJlZml4XSB0aGUgZGVmYXVsdCBwcmVmaXggdG8gdGFrZSwgaWYgbm9uZSBpcyBwcmVzZW50LlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhcnNlZCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTmFtZShuYW1lLCBkZWZhdWx0UHJlZml4KSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoLzovKSxcbiAgICBsb2NhbE5hbWUsXG4gICAgcHJlZml4O1xuXG4gIC8vIG5vIHByZWZpeCAoaS5lLiBvbmx5IGxvY2FsIG5hbWUpXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICBsb2NhbE5hbWUgPSBuYW1lO1xuICAgIHByZWZpeCA9IGRlZmF1bHRQcmVmaXg7XG4gIH1cblxuICAvLyBwcmVmaXggKyBsb2NhbCBuYW1lXG4gIGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGxvY2FsTmFtZSA9IHBhcnRzWzFdO1xuICAgIHByZWZpeCA9IHBhcnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgPHByZWZpeDpsb2NhbE5hbWU+IG9yIDxsb2NhbE5hbWU+LCBnb3QgJyArIG5hbWUpO1xuICB9XG4gIG5hbWUgPSAocHJlZml4ID8gcHJlZml4ICsgJzonIDogJycpICsgbG9jYWxOYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgcHJlZml4OiBwcmVmaXgsXG4gICAgbG9jYWxOYW1lOiBsb2NhbE5hbWVcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgdG8gYnVpbGQgZWxlbWVudCBkZXNjcmlwdG9ycy5cbiAqL1xuZnVuY3Rpb24gRGVzY3JpcHRvckJ1aWxkZXIobmFtZU5zKSB7XG4gIHRoaXMubnMgPSBuYW1lTnM7XG4gIHRoaXMubmFtZSA9IG5hbWVOcy5uYW1lO1xuICB0aGlzLmFsbFR5cGVzID0gW107XG4gIHRoaXMuYWxsVHlwZXNCeU5hbWUgPSB7fTtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gW107XG4gIHRoaXMucHJvcGVydGllc0J5TmFtZSA9IHt9O1xufVxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGljayh0aGlzLCBbJ25zJywgJ25hbWUnLCAnYWxsVHlwZXMnLCAnYWxsVHlwZXNCeU5hbWUnLCAncHJvcGVydGllcycsICdwcm9wZXJ0aWVzQnlOYW1lJywgJ2JvZHlQcm9wZXJ0eScsICdpZFByb3BlcnR5J10pO1xufTtcblxuLyoqXG4gKiBBZGQgcHJvcGVydHkgYXQgZ2l2ZW4gaW5kZXguXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBcbiAqIEBwYXJhbSB7TnVtYmVyfSBbaWR4XVxuICogQHBhcmFtIHtCb29sZWFufSBbdmFsaWRhdGU9dHJ1ZV1cbiAqL1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZFByb3BlcnR5ID0gZnVuY3Rpb24gKHAsIGlkeCwgdmFsaWRhdGUpIHtcbiAgaWYgKHR5cGVvZiBpZHggPT09ICdib29sZWFuJykge1xuICAgIHZhbGlkYXRlID0gaWR4O1xuICAgIGlkeCA9IHVuZGVmaW5lZDtcbiAgfVxuICB0aGlzLmFkZE5hbWVkUHJvcGVydHkocCwgdmFsaWRhdGUgIT09IGZhbHNlKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gIGlmIChpZHggIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMuc3BsaWNlKGlkeCwgMCwgcCk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy5wdXNoKHApO1xuICB9XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlcGxhY2VQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHksIHJlcGxhY2UpIHtcbiAgdmFyIG9sZE5hbWVOcyA9IG9sZFByb3BlcnR5Lm5zO1xuICB2YXIgcHJvcHMgPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgcHJvcGVydGllc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZSxcbiAgICByZW5hbWUgPSBvbGRQcm9wZXJ0eS5uYW1lICE9PSBuZXdQcm9wZXJ0eS5uYW1lO1xuICBpZiAob2xkUHJvcGVydHkuaXNJZCkge1xuICAgIGlmICghbmV3UHJvcGVydHkuaXNJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0eSA8JyArIG5ld1Byb3BlcnR5Lm5zLm5hbWUgKyAnPiBtdXN0IGJlIGlkIHByb3BlcnR5ICcgKyAndG8gcmVmaW5lIDwnICsgb2xkUHJvcGVydHkubnMubmFtZSArICc+Jyk7XG4gICAgfVxuICAgIHRoaXMuc2V0SWRQcm9wZXJ0eShuZXdQcm9wZXJ0eSwgZmFsc2UpO1xuICB9XG4gIGlmIChvbGRQcm9wZXJ0eS5pc0JvZHkpIHtcbiAgICBpZiAoIW5ld1Byb3BlcnR5LmlzQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0eSA8JyArIG5ld1Byb3BlcnR5Lm5zLm5hbWUgKyAnPiBtdXN0IGJlIGJvZHkgcHJvcGVydHkgJyArICd0byByZWZpbmUgPCcgKyBvbGRQcm9wZXJ0eS5ucy5uYW1lICsgJz4nKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBDaGVjayBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5zZXRCb2R5UHJvcGVydHkobmV3UHJvcGVydHksIGZhbHNlKTtcbiAgfVxuXG4gIC8vIHZhbGlkYXRlIGV4aXN0ZW5jZSBhbmQgZ2V0IGxvY2F0aW9uIG9mIG9sZCBwcm9wZXJ0eVxuICB2YXIgaWR4ID0gcHJvcHMuaW5kZXhPZihvbGRQcm9wZXJ0eSk7XG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0eSA8JyArIG9sZE5hbWVOcy5uYW1lICsgJz4gbm90IGZvdW5kIGluIHByb3BlcnR5IGxpc3QnKTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBvbGQgcHJvcGVydHlcbiAgcHJvcHMuc3BsaWNlKGlkeCwgMSk7XG5cbiAgLy8gcmVwbGFjaW5nIHRoZSBuYW1lZCBwcm9wZXJ0eSBpcyBpbnRlbnRpb25hbFxuICAvL1xuICAvLyAgKiB2YWxpZGF0ZSBvbmx5IGlmIHRoaXMgaXMgYSBcInJlbmFtZVwiIG9wZXJhdGlvblxuICAvLyAgKiBhZGQgYXQgc3BlY2lmaWMgaW5kZXggdW5sZXNzIHdlIFwicmVwbGFjZVwiXG4gIC8vXG4gIHRoaXMuYWRkUHJvcGVydHkobmV3UHJvcGVydHksIHJlcGxhY2UgPyB1bmRlZmluZWQgOiBpZHgsIHJlbmFtZSk7XG5cbiAgLy8gbWFrZSBuZXcgcHJvcGVydHkgYXZhaWxhYmxlIHVuZGVyIG9sZCBuYW1lXG4gIHByb3BlcnRpZXNCeU5hbWVbb2xkTmFtZU5zLm5hbWVdID0gcHJvcGVydGllc0J5TmFtZVtvbGROYW1lTnMubG9jYWxOYW1lXSA9IG5ld1Byb3BlcnR5O1xufTtcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZWRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKHAsIHRhcmdldFByb3BlcnR5TmFtZSwgcmVwbGFjZSkge1xuICB2YXIgbnNQcmVmaXggPSBwLm5zLnByZWZpeDtcbiAgdmFyIHBhcnRzID0gdGFyZ2V0UHJvcGVydHlOYW1lLnNwbGl0KCcjJyk7XG4gIHZhciBuYW1lID0gcGFyc2VOYW1lKHBhcnRzWzBdLCBuc1ByZWZpeCk7XG4gIHZhciBhdHRyTmFtZSA9IHBhcnNlTmFtZShwYXJ0c1sxXSwgbmFtZS5wcmVmaXgpLm5hbWU7XG4gIHZhciByZWRlZmluZWRQcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllc0J5TmFtZVthdHRyTmFtZV07XG4gIGlmICghcmVkZWZpbmVkUHJvcGVydHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZmluZWQgcHJvcGVydHkgPCcgKyBhdHRyTmFtZSArICc+IG5vdCBmb3VuZCcpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVwbGFjZVByb3BlcnR5KHJlZGVmaW5lZFByb3BlcnR5LCBwLCByZXBsYWNlKTtcbiAgfVxuICBkZWxldGUgcC5yZWRlZmluZXM7XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZE5hbWVkUHJvcGVydHkgPSBmdW5jdGlvbiAocCwgdmFsaWRhdGUpIHtcbiAgdmFyIG5zID0gcC5ucyxcbiAgICBwcm9wc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgdGhpcy5hc3NlcnROb3REZWZpbmVkKHAsIG5zLm5hbWUpO1xuICAgIHRoaXMuYXNzZXJ0Tm90RGVmaW5lZChwLCBucy5sb2NhbE5hbWUpO1xuICB9XG4gIHByb3BzQnlOYW1lW25zLm5hbWVdID0gcHJvcHNCeU5hbWVbbnMubG9jYWxOYW1lXSA9IHA7XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlbW92ZU5hbWVkUHJvcGVydHkgPSBmdW5jdGlvbiAocCkge1xuICB2YXIgbnMgPSBwLm5zLFxuICAgIHByb3BzQnlOYW1lID0gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lO1xuICBkZWxldGUgcHJvcHNCeU5hbWVbbnMubmFtZV07XG4gIGRlbGV0ZSBwcm9wc0J5TmFtZVtucy5sb2NhbE5hbWVdO1xufTtcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5zZXRCb2R5UHJvcGVydHkgPSBmdW5jdGlvbiAocCwgdmFsaWRhdGUpIHtcbiAgaWYgKHZhbGlkYXRlICYmIHRoaXMuYm9keVByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdib2R5IHByb3BlcnR5IGRlZmluZWQgbXVsdGlwbGUgdGltZXMgJyArICcoPCcgKyB0aGlzLmJvZHlQcm9wZXJ0eS5ucy5uYW1lICsgJz4sIDwnICsgcC5ucy5uYW1lICsgJz4pJyk7XG4gIH1cbiAgdGhpcy5ib2R5UHJvcGVydHkgPSBwO1xufTtcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5zZXRJZFByb3BlcnR5ID0gZnVuY3Rpb24gKHAsIHZhbGlkYXRlKSB7XG4gIGlmICh2YWxpZGF0ZSAmJiB0aGlzLmlkUHJvcGVydHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIHByb3BlcnR5IGRlZmluZWQgbXVsdGlwbGUgdGltZXMgJyArICcoPCcgKyB0aGlzLmlkUHJvcGVydHkubnMubmFtZSArICc+LCA8JyArIHAubnMubmFtZSArICc+KScpO1xuICB9XG4gIHRoaXMuaWRQcm9wZXJ0eSA9IHA7XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFzc2VydE5vdFRyYWl0ID0gZnVuY3Rpb24gKHR5cGVEZXNjcmlwdG9yKSB7XG4gIGNvbnN0IF9leHRlbmRzID0gdHlwZURlc2NyaXB0b3IuZXh0ZW5kcyB8fCBbXTtcbiAgaWYgKF9leHRlbmRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGNyZWF0ZSA8JHt0eXBlRGVzY3JpcHRvci5uYW1lfT4gZXh0ZW5kaW5nIDwke3R5cGVEZXNjcmlwdG9yLmV4dGVuZHN9PmApO1xuICB9XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFzc2VydE5vdERlZmluZWQgPSBmdW5jdGlvbiAocCwgbmFtZSkge1xuICB2YXIgcHJvcGVydHlOYW1lID0gcC5uYW1lLFxuICAgIGRlZmluZWRQcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdO1xuICBpZiAoZGVmaW5lZFByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0eSA8JyArIHByb3BlcnR5TmFtZSArICc+IGFscmVhZHkgZGVmaW5lZDsgJyArICdvdmVycmlkZSBvZiA8JyArIGRlZmluZWRQcm9wZXJ0eS5kZWZpbmVkQnkubnMubmFtZSArICcjJyArIGRlZmluZWRQcm9wZXJ0eS5ucy5uYW1lICsgJz4gYnkgJyArICc8JyArIHAuZGVmaW5lZEJ5Lm5zLm5hbWUgKyAnIycgKyBwLm5zLm5hbWUgKyAnPiBub3QgYWxsb3dlZCB3aXRob3V0IHJlZGVmaW5lcycpO1xuICB9XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmhhc1Byb3BlcnR5ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMucHJvcGVydGllc0J5TmFtZVtuYW1lXTtcbn07XG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkVHJhaXQgPSBmdW5jdGlvbiAodCwgaW5oZXJpdGVkKSB7XG4gIGlmIChpbmhlcml0ZWQpIHtcbiAgICB0aGlzLmFzc2VydE5vdFRyYWl0KHQpO1xuICB9XG4gIHZhciB0eXBlc0J5TmFtZSA9IHRoaXMuYWxsVHlwZXNCeU5hbWUsXG4gICAgdHlwZXMgPSB0aGlzLmFsbFR5cGVzO1xuICB2YXIgdHlwZU5hbWUgPSB0Lm5hbWU7XG4gIGlmICh0eXBlTmFtZSBpbiB0eXBlc0J5TmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3JFYWNoKHQucHJvcGVydGllcywgYmluZChmdW5jdGlvbiAocCkge1xuICAgIC8vIGNsb25lIHByb3BlcnR5IHRvIGFsbG93IGV4dGVuc2lvbnNcbiAgICBwID0gYXNzaWduKHt9LCBwLCB7XG4gICAgICBuYW1lOiBwLm5zLmxvY2FsTmFtZSxcbiAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsICdkZWZpbmVkQnknLCB7XG4gICAgICB2YWx1ZTogdFxuICAgIH0pO1xuICAgIHZhciByZXBsYWNlcyA9IHAucmVwbGFjZXMsXG4gICAgICByZWRlZmluZXMgPSBwLnJlZGVmaW5lcztcblxuICAgIC8vIGFkZCByZXBsYWNlL3JlZGVmaW5lIHN1cHBvcnRcbiAgICBpZiAocmVwbGFjZXMgfHwgcmVkZWZpbmVzKSB7XG4gICAgICB0aGlzLnJlZGVmaW5lUHJvcGVydHkocCwgcmVwbGFjZXMgfHwgcmVkZWZpbmVzLCByZXBsYWNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwLmlzQm9keSkge1xuICAgICAgICB0aGlzLnNldEJvZHlQcm9wZXJ0eShwKTtcbiAgICAgIH1cbiAgICAgIGlmIChwLmlzSWQpIHtcbiAgICAgICAgdGhpcy5zZXRJZFByb3BlcnR5KHApO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRQcm9wZXJ0eShwKTtcbiAgICB9XG4gIH0sIHRoaXMpKTtcbiAgdHlwZXMucHVzaCh0KTtcbiAgdHlwZXNCeU5hbWVbdHlwZU5hbWVdID0gdDtcbn07XG5cbi8qKlxuICogQSByZWdpc3RyeSBvZiBNb2RkbGUgcGFja2FnZXMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxQYWNrYWdlPn0gcGFja2FnZXNcbiAqIEBwYXJhbSB7UHJvcGVydGllc30gcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBSZWdpc3RyeShwYWNrYWdlcywgcHJvcGVydGllcykge1xuICB0aGlzLnBhY2thZ2VNYXAgPSB7fTtcbiAgdGhpcy50eXBlTWFwID0ge307XG4gIHRoaXMucGFja2FnZXMgPSBbXTtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgZm9yRWFjaChwYWNrYWdlcywgYmluZCh0aGlzLnJlZ2lzdGVyUGFja2FnZSwgdGhpcykpO1xufVxuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2UgPSBmdW5jdGlvbiAodXJpT3JQcmVmaXgpIHtcbiAgcmV0dXJuIHRoaXMucGFja2FnZU1hcFt1cmlPclByZWZpeF07XG59O1xuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wYWNrYWdlcztcbn07XG5SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJQYWNrYWdlID0gZnVuY3Rpb24gKHBrZykge1xuICAvLyBjb3B5IHBhY2thZ2VcbiAgcGtnID0gYXNzaWduKHt9LCBwa2cpO1xuICB2YXIgcGtnTWFwID0gdGhpcy5wYWNrYWdlTWFwO1xuICBlbnN1cmVBdmFpbGFibGUocGtnTWFwLCBwa2csICdwcmVmaXgnKTtcbiAgZW5zdXJlQXZhaWxhYmxlKHBrZ01hcCwgcGtnLCAndXJpJyk7XG5cbiAgLy8gcmVnaXN0ZXIgdHlwZXNcbiAgZm9yRWFjaChwa2cudHlwZXMsIGJpbmQoZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcbiAgICB0aGlzLnJlZ2lzdGVyVHlwZShkZXNjcmlwdG9yLCBwa2cpO1xuICB9LCB0aGlzKSk7XG4gIHBrZ01hcFtwa2cudXJpXSA9IHBrZ01hcFtwa2cucHJlZml4XSA9IHBrZztcbiAgdGhpcy5wYWNrYWdlcy5wdXNoKHBrZyk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgdHlwZSBmcm9tIGEgc3BlY2lmaWMgcGFja2FnZSB3aXRoIHVzXG4gKi9cblJlZ2lzdHJ5LnByb3RvdHlwZS5yZWdpc3RlclR5cGUgPSBmdW5jdGlvbiAodHlwZSwgcGtnKSB7XG4gIHR5cGUgPSBhc3NpZ24oe30sIHR5cGUsIHtcbiAgICBzdXBlckNsYXNzOiAodHlwZS5zdXBlckNsYXNzIHx8IFtdKS5zbGljZSgpLFxuICAgIGV4dGVuZHM6ICh0eXBlLmV4dGVuZHMgfHwgW10pLnNsaWNlKCksXG4gICAgcHJvcGVydGllczogKHR5cGUucHJvcGVydGllcyB8fCBbXSkuc2xpY2UoKSxcbiAgICBtZXRhOiBhc3NpZ24odHlwZS5tZXRhIHx8IHt9KVxuICB9KTtcbiAgdmFyIG5zID0gcGFyc2VOYW1lKHR5cGUubmFtZSwgcGtnLnByZWZpeCksXG4gICAgbmFtZSA9IG5zLm5hbWUsXG4gICAgcHJvcGVydGllc0J5TmFtZSA9IHt9O1xuXG4gIC8vIHBhcnNlIHByb3BlcnRpZXNcbiAgZm9yRWFjaCh0eXBlLnByb3BlcnRpZXMsIGJpbmQoZnVuY3Rpb24gKHApIHtcbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgbmFtZXNcbiAgICB2YXIgcHJvcGVydHlOcyA9IHBhcnNlTmFtZShwLm5hbWUsIG5zLnByZWZpeCksXG4gICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5zLm5hbWU7XG5cbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgdHlwZXNcbiAgICBpZiAoIWlzQnVpbHRJbihwLnR5cGUpKSB7XG4gICAgICBwLnR5cGUgPSBwYXJzZU5hbWUocC50eXBlLCBwcm9wZXJ0eU5zLnByZWZpeCkubmFtZTtcbiAgICB9XG4gICAgYXNzaWduKHAsIHtcbiAgICAgIG5zOiBwcm9wZXJ0eU5zLFxuICAgICAgbmFtZTogcHJvcGVydHlOYW1lXG4gICAgfSk7XG4gICAgcHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdID0gcDtcbiAgfSwgdGhpcykpO1xuXG4gIC8vIHVwZGF0ZSBucyArIG5hbWVcbiAgYXNzaWduKHR5cGUsIHtcbiAgICBuczogbnMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwcm9wZXJ0aWVzQnlOYW1lOiBwcm9wZXJ0aWVzQnlOYW1lXG4gIH0pO1xuICBmb3JFYWNoKHR5cGUuZXh0ZW5kcywgYmluZChmdW5jdGlvbiAoZXh0ZW5kc05hbWUpIHtcbiAgICB2YXIgZXh0ZW5kc05hbWVOcyA9IHBhcnNlTmFtZShleHRlbmRzTmFtZSwgbnMucHJlZml4KTtcbiAgICB2YXIgZXh0ZW5kZWQgPSB0aGlzLnR5cGVNYXBbZXh0ZW5kc05hbWVOcy5uYW1lXTtcbiAgICBleHRlbmRlZC50cmFpdHMgPSBleHRlbmRlZC50cmFpdHMgfHwgW107XG4gICAgZXh0ZW5kZWQudHJhaXRzLnB1c2gobmFtZSk7XG4gIH0sIHRoaXMpKTtcblxuICAvLyBsaW5rIHRvIHBhY2thZ2VcbiAgdGhpcy5kZWZpbmVQYWNrYWdlKHR5cGUsIHBrZyk7XG5cbiAgLy8gcmVnaXN0ZXJcbiAgdGhpcy50eXBlTWFwW25hbWVdID0gdHlwZTtcbn07XG5cbi8qKlxuICogVHJhdmVyc2UgdGhlIHR5cGUgaGllcmFyY2h5IGZyb20gYm90dG9tIHRvIHRvcCxcbiAqIGNhbGxpbmcgaXRlcmF0b3Igd2l0aCAodHlwZSwgaW5oZXJpdGVkKSBmb3IgYWxsIGVsZW1lbnRzIGluXG4gKiB0aGUgaW5oZXJpdGFuY2UgY2hhaW4uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5zTmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3RyYWl0PWZhbHNlXVxuICovXG5SZWdpc3RyeS5wcm90b3R5cGUubWFwVHlwZXMgPSBmdW5jdGlvbiAobnNOYW1lLCBpdGVyYXRvciwgdHJhaXQpIHtcbiAgdmFyIHR5cGUgPSBpc0J1aWx0SW4obnNOYW1lLm5hbWUpID8ge1xuICAgIG5hbWU6IG5zTmFtZS5uYW1lXG4gIH0gOiB0aGlzLnR5cGVNYXBbbnNOYW1lLm5hbWVdO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIHRoZSBzZWxlY3RlZCBzdXBlciB0eXBlIG9yIHRyYWl0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjbHNcbiAgICogQHBhcmFtIHtCb29sZWFufSBbdHJhaXQ9ZmFsc2VdXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZShjbHMsIHRyYWl0KSB7XG4gICAgdmFyIHBhcmVudE5zID0gcGFyc2VOYW1lKGNscywgaXNCdWlsdEluKGNscykgPyAnJyA6IG5zTmFtZS5wcmVmaXgpO1xuICAgIHNlbGYubWFwVHlwZXMocGFyZW50TnMsIGl0ZXJhdG9yLCB0cmFpdCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHRyYWl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2xzXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZVRyYWl0KGNscykge1xuICAgIHJldHVybiB0cmF2ZXJzZShjbHMsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIHRoZSBzZWxlY3RlZCBzdXBlciB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjbHNcbiAgICovXG4gIGZ1bmN0aW9uIHRyYXZlcnNlU3VwZXIoY2xzKSB7XG4gICAgcmV0dXJuIHRyYXZlcnNlKGNscywgZmFsc2UpO1xuICB9XG4gIGlmICghdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB0eXBlIDwnICsgbnNOYW1lLm5hbWUgKyAnPicpO1xuICB9XG4gIGZvckVhY2godHlwZS5zdXBlckNsYXNzLCB0cmFpdCA/IHRyYXZlcnNlVHJhaXQgOiB0cmF2ZXJzZVN1cGVyKTtcblxuICAvLyBjYWxsIGl0ZXJhdG9yIHdpdGggKHR5cGUsIGluaGVyaXRlZD0hdHJhaXQpXG4gIGl0ZXJhdG9yKHR5cGUsICF0cmFpdCk7XG4gIGZvckVhY2godHlwZS50cmFpdHMsIHRyYXZlcnNlVHJhaXQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlZmZlY3RpdmUgZGVzY3JpcHRvciBmb3IgYSB0eXBlLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gdHlwZSB0aGUgbmFtZXNwYWNlZCBuYW1lIChuczpsb2NhbE5hbWUpIG9mIHRoZSB0eXBlXG4gKlxuICogQHJldHVybiB7RGVzY3JpcHRvcn0gdGhlIHJlc3VsdGluZyBlZmZlY3RpdmUgZGVzY3JpcHRvclxuICovXG5SZWdpc3RyeS5wcm90b3R5cGUuZ2V0RWZmZWN0aXZlRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBuc05hbWUgPSBwYXJzZU5hbWUobmFtZSk7XG4gIHZhciBidWlsZGVyID0gbmV3IERlc2NyaXB0b3JCdWlsZGVyKG5zTmFtZSk7XG4gIHRoaXMubWFwVHlwZXMobnNOYW1lLCBmdW5jdGlvbiAodHlwZSwgaW5oZXJpdGVkKSB7XG4gICAgYnVpbGRlci5hZGRUcmFpdCh0eXBlLCBpbmhlcml0ZWQpO1xuICB9KTtcbiAgdmFyIGRlc2NyaXB0b3IgPSBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgLy8gZGVmaW5lIHBhY2thZ2UgbGlua1xuICB0aGlzLmRlZmluZVBhY2thZ2UoZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hbGxUeXBlc1tkZXNjcmlwdG9yLmFsbFR5cGVzLmxlbmd0aCAtIDFdLiRwa2cpO1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5SZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lUGFja2FnZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHBrZykge1xuICB0aGlzLnByb3BlcnRpZXMuZGVmaW5lKHRhcmdldCwgJyRwa2cnLCB7XG4gICAgdmFsdWU6IHBrZ1xuICB9KTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBlbnN1cmVBdmFpbGFibGUocGFja2FnZU1hcCwgcGtnLCBpZGVudGlmaWVyS2V5KSB7XG4gIHZhciB2YWx1ZSA9IHBrZ1tpZGVudGlmaWVyS2V5XTtcbiAgaWYgKHZhbHVlIGluIHBhY2thZ2VNYXApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhY2thZ2Ugd2l0aCAnICsgaWRlbnRpZmllcktleSArICcgPCcgKyB2YWx1ZSArICc+IGFscmVhZHkgZGVmaW5lZCcpO1xuICB9XG59XG5cbi8qKlxuICogQSB1dGlsaXR5IHRoYXQgZ2V0cyBhbmQgc2V0cyBwcm9wZXJ0aWVzIG9mIG1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsXG4gKi9cbmZ1bmN0aW9uIFByb3BlcnRpZXMobW9kZWwpIHtcbiAgdGhpcy5tb2RlbCA9IG1vZGVsO1xufVxuXG4vKipcbiAqIFNldHMgYSBuYW1lZCBwcm9wZXJ0eSBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGUgcHJvcGVydHkgZ2V0cyBkZWxldGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKCFpc1N0cmluZyhuYW1lKSB8fCAhbmFtZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwcm9wZXJ0eSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5nZXRQcm9wZXJ0eSh0YXJnZXQsIG5hbWUpO1xuICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHkgJiYgcHJvcGVydHkubmFtZTtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIC8vIHVuc2V0IHRoZSBwcm9wZXJ0eSwgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyB1bmRlZmluZWQ7XG4gICAgLy8gZGVsZXRlIGZyb20gJGF0dHJzIChmb3IgZXh0ZW5zaW9ucykgb3IgdGhlIHRhcmdldCBpdHNlbGZcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRhcmdldC4kYXR0cnNbc3RyaXBHbG9iYWwobmFtZSldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBzZXQgdGhlIHByb3BlcnR5LCBkZWZpbmluZyB3ZWxsIGRlZmluZWQgcHJvcGVydGllcyBvbiB0aGUgZmx5XG4gICAgLy8gb3Igc2ltcGx5IHVwZGF0aW5nIHRoZW0gaW4gdGFyZ2V0LiRhdHRycyAoZm9yIGV4dGVuc2lvbnMpXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXRbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQuJGF0dHJzW3N0cmlwR2xvYmFsKG5hbWUpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUpIHtcbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5nZXRQcm9wZXJ0eSh0YXJnZXQsIG5hbWUpO1xuICBpZiAoIXByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHRhcmdldC4kYXR0cnNbc3RyaXBHbG9iYWwobmFtZSldO1xuICB9XG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xuXG4gIC8vIGNoZWNrIGlmIGFjY2VzcyB0byBjb2xsZWN0aW9uIHByb3BlcnR5IGFuZCBsYXppbHkgaW5pdGlhbGl6ZSBpdFxuICBpZiAoIXRhcmdldFtwcm9wZXJ0eU5hbWVdICYmIHByb3BlcnR5LmlzTWFueSkge1xuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIFtdKTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5TmFtZV07XG59O1xuXG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5IG9uIHRoZSB0YXJnZXQgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICovXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucy53cml0YWJsZSkge1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cbiAgICAvLyB1c2UgZ2V0dGVycyBmb3IgcmVhZC1vbmx5IHZhcmlhYmxlcyB0byBzdXBwb3J0IEVTNiBwcm94aWVzXG4gICAgLy8gY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9icG1uLWlvL2ludGVybmFsLWRvY3MvaXNzdWVzLzM4NlxuICAgIG9wdGlvbnMgPSBhc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIG9wdGlvbnMudmFsdWU7XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIERlZmluZSB0aGUgZGVzY3JpcHRvciBmb3IgYW4gZWxlbWVudFxuICovXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5kZWZpbmVEZXNjcmlwdG9yID0gZnVuY3Rpb24gKHRhcmdldCwgZGVzY3JpcHRvcikge1xuICB0aGlzLmRlZmluZSh0YXJnZXQsICckZGVzY3JpcHRvcicsIHtcbiAgICB2YWx1ZTogZGVzY3JpcHRvclxuICB9KTtcbn07XG5cbi8qKlxuICogRGVmaW5lIHRoZSBtb2RlbCBmb3IgYW4gZWxlbWVudFxuICovXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5kZWZpbmVNb2RlbCA9IGZ1bmN0aW9uICh0YXJnZXQsIG1vZGVsKSB7XG4gIHRoaXMuZGVmaW5lKHRhcmdldCwgJyRtb2RlbCcsIHtcbiAgICB2YWx1ZTogbW9kZWxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybiBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7YW55fSB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKlxuICogQHJldHVybiB7b2JqZWN0IHwgbnVsbH0gcHJvcGVydHlcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lKSB7XG4gIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7XG4gIHZhciBwcm9wZXJ0eSA9IG1vZGVsLmdldFByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIG5hbWUpO1xuICBpZiAocHJvcGVydHkpIHtcbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cbiAgaWYgKG5hbWUuaW5jbHVkZXMoJzonKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHN0cmljdCA9IG1vZGVsLmNvbmZpZy5zdHJpY3Q7XG4gIGlmICh0eXBlb2Ygc3RyaWN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcihgdW5rbm93biBwcm9wZXJ0eSA8JHtuYW1lfT4gb24gPCR7dGFyZ2V0LiR0eXBlfT5gKTtcbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5Lm5hbWUsIHtcbiAgICBlbnVtZXJhYmxlOiAhcHJvcGVydHkuaXNSZWZlcmVuY2UsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIHN0cmlwR2xvYmFsKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXjovLCAnJyk7XG59XG5cbi8vIE1vZGRsZSBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQGNsYXNzIE1vZGRsZVxuICpcbiAqIEEgbW9kZWwgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgZWxlbWVudHMgb2YgYSBzcGVjaWZpYyB0eXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIE1vZGRsZSA9IHJlcXVpcmUoJ21vZGRsZScpO1xuICpcbiAqIHZhciBwa2cgPSB7XG4gKiAgIG5hbWU6ICdteXBhY2thZ2UnLFxuICogICBwcmVmaXg6ICdteScsXG4gKiAgIHR5cGVzOiBbXG4gKiAgICAgeyBuYW1lOiAnUm9vdCcgfVxuICogICBdXG4gKiB9O1xuICpcbiAqIHZhciBtb2RkbGUgPSBuZXcgTW9kZGxlKFtwa2ddKTtcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBhY2thZ2U+fSBwYWNrYWdlcyB0aGUgcGFja2FnZXMgdG8gY29udGFpblxuICpcbiAqIEBwYXJhbSB7IHsgc3RyaWN0PzogYm9vbGVhbiB9IH0gW2NvbmZpZ10gbW9kZGxlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZnVuY3Rpb24gTW9kZGxlKHBhY2thZ2VzLCBjb25maWcgPSB7fSkge1xuICB0aGlzLnByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcyh0aGlzKTtcbiAgdGhpcy5mYWN0b3J5ID0gbmV3IEZhY3RvcnkodGhpcywgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgdGhpcy5yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeShwYWNrYWdlcywgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgdGhpcy50eXBlQ2FjaGUgPSB7fTtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAqXG4gKiBAbWV0aG9kIE1vZGRsZSNjcmVhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmb28gPSBtb2RkbGUuY3JlYXRlKCdteTpGb28nKTtcbiAqIHZhciBiYXIgPSBtb2RkbGUuY3JlYXRlKCdteTpCYXInLCB7IGlkOiAnQkFSXzEnIH0pO1xuICpcbiAqIEBwYXJhbSAge1N0cmluZ3xPYmplY3R9IGRlc2NyaXB0b3IgdGhlIHR5cGUgZGVzY3JpcHRvciBvciBuYW1lIGtub3cgdG8gdGhlIG1vZGVsXG4gKiBAcGFyYW0gIHtPYmplY3R9IGF0dHJzICAgYSBudW1iZXIgb2YgYXR0cmlidXRlcyB0byBpbml0aWFsaXplIHRoZSBtb2RlbCBpbnN0YW5jZSB3aXRoXG4gKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgbW9kZWwgaW5zdGFuY2VcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzY3JpcHRvciwgYXR0cnMpIHtcbiAgdmFyIFR5cGUgPSB0aGlzLmdldFR5cGUoZGVzY3JpcHRvcik7XG4gIGlmICghVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB0eXBlIDwnICsgZGVzY3JpcHRvciArICc+Jyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBUeXBlKGF0dHJzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHlwZSByZXByZXNlbnRpbmcgYSBnaXZlbiBkZXNjcmlwdG9yXG4gKlxuICogQG1ldGhvZCBNb2RkbGUjZ2V0VHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIEZvbyA9IG1vZGRsZS5nZXRUeXBlKCdteTpGb28nKTtcbiAqIHZhciBmb28gPSBuZXcgRm9vKHsgJ2lkJyA6ICdGT09fMScgfSk7XG4gKlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gZGVzY3JpcHRvciB0aGUgdHlwZSBkZXNjcmlwdG9yIG9yIG5hbWUga25vdyB0byB0aGUgbW9kZWxcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICB0aGUgdHlwZSByZXByZXNlbnRpbmcgdGhlIGRlc2NyaXB0b3JcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcbiAgdmFyIGNhY2hlID0gdGhpcy50eXBlQ2FjaGU7XG4gIHZhciBuYW1lID0gaXNTdHJpbmcoZGVzY3JpcHRvcikgPyBkZXNjcmlwdG9yIDogZGVzY3JpcHRvci5ucy5uYW1lO1xuICB2YXIgdHlwZSA9IGNhY2hlW25hbWVdO1xuICBpZiAoIXR5cGUpIHtcbiAgICBkZXNjcmlwdG9yID0gdGhpcy5yZWdpc3RyeS5nZXRFZmZlY3RpdmVEZXNjcmlwdG9yKG5hbWUpO1xuICAgIHR5cGUgPSBjYWNoZVtuYW1lXSA9IHRoaXMuZmFjdG9yeS5jcmVhdGVUeXBlKGRlc2NyaXB0b3IpO1xuICB9XG4gIHJldHVybiB0eXBlO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFueS1lbGVtZW50IHR5cGUgdG8gYmUgdXNlZCB3aXRoaW4gbW9kZWwgaW5zdGFuY2VzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGN1c3RvbSBlbGVtZW50cyB0aGF0IGxpZSBvdXRzaWRlIHRoZSBtZXRhLW1vZGVsLlxuICogVGhlIGNyZWF0ZWQgZWxlbWVudCBjb250YWlucyBhbGwgdGhlIG1ldGEtZGF0YSByZXF1aXJlZCB0byBzZXJpYWxpemUgaXRcbiAqIGFzIHBhcnQgb2YgbWV0YS1tb2RlbCBlbGVtZW50cy5cbiAqXG4gKiBAbWV0aG9kIE1vZGRsZSNjcmVhdGVBbnlcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmb28gPSBtb2RkbGUuY3JlYXRlQW55KCd2ZW5kb3I6Rm9vJywgJ2h0dHA6Ly92ZW5kb3InLCB7XG4gKiAgIHZhbHVlOiAnYmFyJ1xuICogfSk7XG4gKlxuICogdmFyIGNvbnRhaW5lciA9IG1vZGRsZS5jcmVhdGUoJ215OkNvbnRhaW5lcicsICdodHRwOi8vbXknLCB7XG4gKiAgIGFueTogWyBmb28gXVxuICogfSk7XG4gKlxuICogLy8gZ28gYWhlYWQgYW5kIHNlcmlhbGl6ZSB0aGUgc3R1ZmZcbiAqXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lICB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtICB7U3RyaW5nfSBuc1VyaSB0aGUgbmFtZXNwYWNlIHVyaSBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtICB7T2JqZWN0fSBbcHJvcGVydGllc10gYSBtYXAgb2YgcHJvcGVydGllcyB0byBpbml0aWFsaXplIHRoZSBpbnN0YW5jZSB3aXRoXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBhbnkgdHlwZSBpbnN0YW5jZVxuICovXG5Nb2RkbGUucHJvdG90eXBlLmNyZWF0ZUFueSA9IGZ1bmN0aW9uIChuYW1lLCBuc1VyaSwgcHJvcGVydGllcykge1xuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpO1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAkdHlwZTogbmFtZSxcbiAgICAkaW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlID09PSB0aGlzLiR0eXBlO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIFtrZXldLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xuICB2YXIgZGVzY3JpcHRvciA9IHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIGlzR2VuZXJpYzogdHJ1ZSxcbiAgICBuczoge1xuICAgICAgcHJlZml4OiBuYW1lTnMucHJlZml4LFxuICAgICAgbG9jYWxOYW1lOiBuYW1lTnMubG9jYWxOYW1lLFxuICAgICAgdXJpOiBuc1VyaVxuICAgIH1cbiAgfTtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZURlc2NyaXB0b3IoZWxlbWVudCwgZGVzY3JpcHRvcik7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmVNb2RlbChlbGVtZW50LCB0aGlzKTtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZShlbGVtZW50LCAnZ2V0Jywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xuICB0aGlzLnByb3BlcnRpZXMuZGVmaW5lKGVsZW1lbnQsICdzZXQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmUoZWxlbWVudCwgJyRwYXJlbnQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmUoZWxlbWVudCwgJyRpbnN0YW5jZU9mJywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChhLCBrZXkpIHtcbiAgICBpZiAoaXNPYmplY3QoYSkgJiYgYS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbGVtZW50W2EubmFtZV0gPSBhLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50W2tleV0gPSBhO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcmVnaXN0ZXJlZCBwYWNrYWdlIGJ5IHVyaSBvciBwcmVmaXhcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYWNrYWdlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uICh1cmlPclByZWZpeCkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS5nZXRQYWNrYWdlKHVyaU9yUHJlZml4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHNuYXBzaG90IG9mIGFsbCBrbm93biBwYWNrYWdlc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhY2thZ2VcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRQYWNrYWdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVnaXN0cnkuZ2V0UGFja2FnZXMoKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgYW4gZWxlbWVudFxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldEVsZW1lbnREZXNjcmlwdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuJGRlc2NyaXB0b3I7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvciBvciBpbnN0YW5jZVxuICogcmVwcmVzZW50cyB0aGUgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBNYXkgYmUgYXBwbGllZCB0byB0aGlzLCBpZiBlbGVtZW50IGlzIG9taXR0ZWQuXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuaGFzVHlwZSA9IGZ1bmN0aW9uIChlbGVtZW50LCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICB0eXBlID0gZWxlbWVudDtcbiAgICBlbGVtZW50ID0gdGhpcztcbiAgfVxuICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuJG1vZGVsLmdldEVsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnQpO1xuICByZXR1cm4gdHlwZSBpbiBkZXNjcmlwdG9yLmFsbFR5cGVzQnlOYW1lO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIG9mIGFuIGVsZW1lbnRzIG5hbWVkIHByb3BlcnR5XG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIHJldHVybiB0aGlzLmdldEVsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnQpLnByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHldO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbWFwcGVkIHR5cGUncyBkZXNjcmlwdG9yXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0VHlwZURlc2NyaXB0b3IgPSBmdW5jdGlvbiAodHlwZSkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS50eXBlTWFwW3R5cGVdO1xufTtcblxudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIEVOVElUWV9QQVRURVJOID0gLyYjKFxcZCspO3wmI3goWzAtOWEtZl0rKTt8JihcXHcrKTsvaWc7XG52YXIgRU5USVRZX01BUFBJTkcgPSB7XG4gICdhbXAnOiAnJicsXG4gICdhcG9zJzogJ1xcJycsXG4gICdndCc6ICc+JyxcbiAgJ2x0JzogJzwnLFxuICAncXVvdCc6ICdcIidcbn07XG5cbi8vIG1hcCBVUFBFUkNBU0UgdmFyaWFudHMgb2Ygc3VwcG9ydGVkIHNwZWNpYWwgY2hhcnNcbk9iamVjdC5rZXlzKEVOVElUWV9NQVBQSU5HKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gIEVOVElUWV9NQVBQSU5HW2sudG9VcHBlckNhc2UoKV0gPSBFTlRJVFlfTUFQUElOR1trXTtcbn0pO1xuZnVuY3Rpb24gcmVwbGFjZUVudGl0aWVzKF8sIGQsIHgsIHopIHtcbiAgLy8gcmVzZXJ2ZWQgbmFtZXMsIGkuZS4gJm5ic3A7XG4gIGlmICh6KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoRU5USVRZX01BUFBJTkcsIHopKSB7XG4gICAgICByZXR1cm4gRU5USVRZX01BUFBJTkdbel07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhbGwgYmFjayB0byBvcmlnaW5hbCB2YWx1ZVxuICAgICAgcmV0dXJuICcmJyArIHogKyAnOyc7XG4gICAgfVxuICB9XG5cbiAgLy8gZGVjaW1hbCBlbmNvZGVkIGNoYXJcbiAgaWYgKGQpIHtcbiAgICByZXR1cm4gZnJvbUNoYXJDb2RlKGQpO1xuICB9XG5cbiAgLy8gaGV4IGVuY29kZWQgY2hhclxuICByZXR1cm4gZnJvbUNoYXJDb2RlKHBhcnNlSW50KHgsIDE2KSk7XG59XG5cbi8qKlxuICogQSBiYXNpYyBlbnRpdHkgZGVjb2RlciB0aGF0IGNhbiBkZWNvZGUgYSBtaW5pbWFsXG4gKiBzdWItc2V0IG9mIHJlc2VydmVkIG5hbWVzICgmYW1wOykgYXMgd2VsbCBhc1xuICogaGV4ICgmI3hhYWY7KSBhbmQgZGVjaW1hbCAoJiMxMjMxOykgZW5jb2RlZCBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBkZWNvZGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGVFbnRpdGllcyhzKSB7XG4gIGlmIChzLmxlbmd0aCA+IDMgJiYgcy5pbmRleE9mKCcmJykgIT09IC0xKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZShFTlRJVFlfUEFUVEVSTiwgcmVwbGFjZUVudGl0aWVzKTtcbiAgfVxuICByZXR1cm4gcztcbn1cbnZhciBOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSA9ICdub24td2hpdGVzcGFjZSBvdXRzaWRlIG9mIHJvb3Qgbm9kZSc7XG5mdW5jdGlvbiBlcnJvciQxKG1zZykge1xuICByZXR1cm4gbmV3IEVycm9yKG1zZyk7XG59XG5mdW5jdGlvbiBtaXNzaW5nTmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCkge1xuICByZXR1cm4gJ21pc3NpbmcgbmFtZXNwYWNlIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPic7XG59XG5mdW5jdGlvbiBnZXR0ZXIoZ2V0Rm4pIHtcbiAgcmV0dXJuIHtcbiAgICAnZ2V0JzogZ2V0Rm4sXG4gICAgJ2VudW1lcmFibGUnOiB0cnVlXG4gIH07XG59XG5mdW5jdGlvbiBjbG9uZU5zTWF0cml4KG5zTWF0cml4KSB7XG4gIHZhciBjbG9uZSA9IHt9LFxuICAgIGtleTtcbiAgZm9yIChrZXkgaW4gbnNNYXRyaXgpIHtcbiAgICBjbG9uZVtrZXldID0gbnNNYXRyaXhba2V5XTtcbiAgfVxuICByZXR1cm4gY2xvbmU7XG59XG5mdW5jdGlvbiB1cmlQcmVmaXgocHJlZml4KSB7XG4gIHJldHVybiBwcmVmaXggKyAnJHVyaSc7XG59XG5mdW5jdGlvbiBidWlsZE5zTWF0cml4KG5zVXJpVG9QcmVmaXgpIHtcbiAgdmFyIG5zTWF0cml4ID0ge30sXG4gICAgdXJpLFxuICAgIHByZWZpeDtcbiAgZm9yICh1cmkgaW4gbnNVcmlUb1ByZWZpeCkge1xuICAgIHByZWZpeCA9IG5zVXJpVG9QcmVmaXhbdXJpXTtcbiAgICBuc01hdHJpeFtwcmVmaXhdID0gcHJlZml4O1xuICAgIG5zTWF0cml4W3VyaVByZWZpeChwcmVmaXgpXSA9IHVyaTtcbiAgfVxuICByZXR1cm4gbnNNYXRyaXg7XG59XG5mdW5jdGlvbiBub29wR2V0Q29udGV4dCgpIHtcbiAgcmV0dXJuIHtcbiAgICBsaW5lOiAwLFxuICAgIGNvbHVtbjogMFxuICB9O1xufVxuZnVuY3Rpb24gdGhyb3dGdW5jKGVycikge1xuICB0aHJvdyBlcnI7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBwYXJzZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0gIHshT2JqZWN0PHN0cmluZywgPz49fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIFBhcnNlcihvcHRpb25zKSB7XG4gIGlmICghdGhpcykge1xuICAgIHJldHVybiBuZXcgUGFyc2VyKG9wdGlvbnMpO1xuICB9XG4gIHZhciBwcm94eSA9IG9wdGlvbnMgJiYgb3B0aW9uc1sncHJveHknXTtcbiAgdmFyIG9uVGV4dCxcbiAgICBvbk9wZW5UYWcsXG4gICAgb25DbG9zZVRhZyxcbiAgICBvbkNEQVRBLFxuICAgIG9uRXJyb3IgPSB0aHJvd0Z1bmMsXG4gICAgb25XYXJuaW5nLFxuICAgIG9uQ29tbWVudCxcbiAgICBvblF1ZXN0aW9uLFxuICAgIG9uQXR0ZW50aW9uO1xuICB2YXIgZ2V0Q29udGV4dCA9IG5vb3BHZXRDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBEbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBjdXJyZW50IGVsZW1lbnRzIGF0dHJpYnV0ZXMgZm9yIG5hbWVzcGFjZXM/XG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgdmFyIG1heWJlTlMgPSBmYWxzZTtcblxuICAvKipcbiAgICogRG8gd2UgcHJvY2VzcyBuYW1lc3BhY2VzIGF0IGFsbD9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgaXNOYW1lc3BhY2UgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGNhdWdodCBlcnJvciByZXR1cm5lZCBvbiBwYXJzZSBlbmRcbiAgICpcbiAgICogQHR5cGUge0Vycm9yfVxuICAgKi9cbiAgdmFyIHJldHVybkVycm9yID0gbnVsbDtcblxuICAvKipcbiAgICogU2hvdWxkIHdlIHN0b3AgcGFyc2luZz9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgcGFyc2VTdG9wID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIHsgdXJpOiBwcmVmaXggfSB1c2VkIGJ5IHRoZSBwYXJzZXIuXG4gICAqXG4gICAqIFRoaXMgbWFwIHdpbGwgZW5zdXJlIHdlIGNhbiBub3JtYWxpemUgcHJlZml4ZXMgZHVyaW5nIHByb2Nlc3Npbmc7XG4gICAqIGZvciBlYWNoIHVyaSwgb25seSBvbmUgcHJlZml4IHdpbGwgYmUgZXhwb3NlZCB0byB0aGUgaGFuZGxlcnMuXG4gICAqXG4gICAqIEB0eXBlIHshT2JqZWN0PHN0cmluZywgc3RyaW5nPn19XG4gICAqL1xuICB2YXIgbnNVcmlUb1ByZWZpeDtcblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNlIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8RXJyb3J9IGVyclxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyKSB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICBlcnIgPSBlcnJvciQxKGVycik7XG4gICAgfVxuICAgIHJldHVybkVycm9yID0gZXJyO1xuICAgIG9uRXJyb3IoZXJyLCBnZXRDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcGFyc2UgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xFcnJvcn0gZXJyXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVXYXJuaW5nKGVycikge1xuICAgIGlmICghb25XYXJuaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgZXJyID0gZXJyb3IkMShlcnIpO1xuICAgIH1cbiAgICBvbldhcm5pbmcoZXJyLCBnZXRDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBwYXJzZSBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIG5hbWVcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNiXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cbiAgICovXG4gIHRoaXNbJ29uJ10gPSBmdW5jdGlvbiAobmFtZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJvciQxKCdyZXF1aXJlZCBhcmdzIDxuYW1lLCBjYj4nKTtcbiAgICB9XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlICdvcGVuVGFnJzpcbiAgICAgICAgb25PcGVuVGFnID0gY2I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIG9uVGV4dCA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlVGFnJzpcbiAgICAgICAgb25DbG9zZVRhZyA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgb25FcnJvciA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgICBvbldhcm5pbmcgPSBjYjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjZGF0YSc6XG4gICAgICAgIG9uQ0RBVEEgPSBjYjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhdHRlbnRpb24nOlxuICAgICAgICBvbkF0dGVudGlvbiA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIDwhWFhYWFggenp6ej1cImVlZWVcIj5cbiAgICAgIGNhc2UgJ3F1ZXN0aW9uJzpcbiAgICAgICAgb25RdWVzdGlvbiA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIDw/IC4uLi4gID8+XG4gICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgb25Db21tZW50ID0gY2I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgZXJyb3IkMSgndW5zdXBwb3J0ZWQgZXZlbnQ6ICcgKyBuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZXNwYWNlIHRvIHByZWZpeCBtYXBwaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBwYXJzZXIubnMoe1xuICAgKiAgICdodHRwOi8vZm9vJzogJ2ZvbycsXG4gICAqICAgJ2h0dHA6Ly9iYXInOiAnYmFyJ1xuICAgKiB9KTtcbiAgICpcbiAgICogQHBhcmFtICB7IU9iamVjdDxzdHJpbmcsIHN0cmluZz59IG5zTWFwXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cbiAgICovXG4gIHRoaXNbJ25zJ10gPSBmdW5jdGlvbiAobnNNYXApIHtcbiAgICBpZiAodHlwZW9mIG5zTWFwID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbnNNYXAgPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBuc01hcCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IGVycm9yJDEoJ3JlcXVpcmVkIGFyZ3MgPG5zTWFwPXt9PicpO1xuICAgIH1cbiAgICB2YXIgX25zVXJpVG9QcmVmaXggPSB7fSxcbiAgICAgIGs7XG4gICAgZm9yIChrIGluIG5zTWFwKSB7XG4gICAgICBfbnNVcmlUb1ByZWZpeFtrXSA9IG5zTWFwW2tdO1xuICAgIH1cbiAgICBpc05hbWVzcGFjZSA9IHRydWU7XG4gICAgbnNVcmlUb1ByZWZpeCA9IF9uc1VyaVRvUHJlZml4O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSB4bWwgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHhtbFxuICAgKlxuICAgKiBAcmV0dXJuIHtFcnJvcn0gcmV0dXJuRXJyb3IsIGlmIG5vdCB0aHJvd25cbiAgICovXG4gIHRoaXNbJ3BhcnNlJ10gPSBmdW5jdGlvbiAoeG1sKSB7XG4gICAgaWYgKHR5cGVvZiB4bWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBlcnJvciQxKCdyZXF1aXJlZCBhcmdzIDx4bWw9c3RyaW5nPicpO1xuICAgIH1cbiAgICByZXR1cm5FcnJvciA9IG51bGw7XG4gICAgcGFyc2UoeG1sKTtcbiAgICBnZXRDb250ZXh0ID0gbm9vcEdldENvbnRleHQ7XG4gICAgcGFyc2VTdG9wID0gZmFsc2U7XG4gICAgcmV0dXJuIHJldHVybkVycm9yO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdG9wIHBhcnNpbmcuXG4gICAqL1xuICB0aGlzWydzdG9wJ10gPSBmdW5jdGlvbiAoKSB7XG4gICAgcGFyc2VTdG9wID0gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2Ugc3RyaW5nLCBpbnZva2luZyBjb25maWd1cmVkIGxpc3RlbmVycyBvbiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHhtbFxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2UoeG1sKSB7XG4gICAgdmFyIG5zTWF0cml4U3RhY2sgPSBpc05hbWVzcGFjZSA/IFtdIDogbnVsbCxcbiAgICAgIG5zTWF0cml4ID0gaXNOYW1lc3BhY2UgPyBidWlsZE5zTWF0cml4KG5zVXJpVG9QcmVmaXgpIDogbnVsbCxcbiAgICAgIF9uc01hdHJpeCxcbiAgICAgIG5vZGVTdGFjayA9IFtdLFxuICAgICAgYW5vbnltb3VzTnNDb3VudCA9IDAsXG4gICAgICB0YWdTdGFydCA9IGZhbHNlLFxuICAgICAgdGFnRW5kID0gZmFsc2UsXG4gICAgICBpID0gMCxcbiAgICAgIGogPSAwLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBxLFxuICAgICAgdyxcbiAgICAgIHYsXG4gICAgICB4bWxucyxcbiAgICAgIGVsZW1lbnROYW1lLFxuICAgICAgX2VsZW1lbnROYW1lLFxuICAgICAgZWxlbWVudFByb3h5O1xuICAgIHZhciBhdHRyc1N0cmluZyA9ICcnLFxuICAgICAgYXR0cnNTdGFydCA9IDAsXG4gICAgICBjYWNoZWRBdHRycyAvLyBmYWxzZSA9IHBhcnNlZCB3aXRoIGVycm9ycywgbnVsbCA9IG5lZWRzIHBhcnNpbmdcbiAgICA7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBhdHRyaWJ1dGVzIG9uIGRlbWFuZCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIGF0dHJpYnV0ZXMuXG4gICAgICpcbiAgICAgKiBSZXR1cm4gc2VtYW50aWNzOiAoMSkgYGZhbHNlYCBvbiBhdHRyaWJ1dGUgcGFyc2UgZXJyb3IsXG4gICAgICogKDIpIG9iamVjdCBoYXNoIG9uIGV4dHJhY3RlZCBhdHRycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW58T2JqZWN0fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEF0dHJzKCkge1xuICAgICAgaWYgKGNhY2hlZEF0dHJzICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRBdHRycztcbiAgICAgIH1cbiAgICAgIHZhciBuc1VyaSxcbiAgICAgICAgbnNVcmlQcmVmaXgsXG4gICAgICAgIG5zTmFtZSxcbiAgICAgICAgZGVmYXVsdEFsaWFzID0gaXNOYW1lc3BhY2UgJiYgbnNNYXRyaXhbJ3htbG5zJ10sXG4gICAgICAgIGF0dHJMaXN0ID0gaXNOYW1lc3BhY2UgJiYgbWF5YmVOUyA/IFtdIDogbnVsbCxcbiAgICAgICAgaSA9IGF0dHJzU3RhcnQsXG4gICAgICAgIHMgPSBhdHRyc1N0cmluZyxcbiAgICAgICAgbCA9IHMubGVuZ3RoLFxuICAgICAgICBoYXNOZXdNYXRyaXgsXG4gICAgICAgIG5ld2FsaWFzLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgYWxpYXMsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGF0dHJzID0ge30sXG4gICAgICAgIHNlZW5BdHRycyA9IHt9LFxuICAgICAgICBza2lwQXR0cixcbiAgICAgICAgdyxcbiAgICAgICAgajtcbiAgICAgIHBhcnNlQXR0cjogZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgc2tpcEF0dHIgPSBmYWxzZTtcbiAgICAgICAgdyA9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKHcgPT09IDMyIHx8IHcgPCAxNCAmJiB3ID4gOCkge1xuICAgICAgICAgIC8vIFdISVRFU1BBQ0U9eyBcXGZcXG5cXHJcXHRcXHZ9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3YWl0IGZvciBub24gd2hpdGVzcGFjZSBjaGFyYWN0ZXJcbiAgICAgICAgaWYgKHcgPCA2NSB8fCB3ID4gMTIyIHx8IHcgPiA5MCAmJiB3IDwgOTcpIHtcbiAgICAgICAgICBpZiAodyAhPT0gOTUgJiYgdyAhPT0gNTgpIHtcbiAgICAgICAgICAgIC8vIGNoYXIgOTVcIl9cIiA1OFwiOlwiXG4gICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdpbGxlZ2FsIGZpcnN0IGNoYXIgYXR0cmlidXRlIG5hbWUnKTtcbiAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYXJzZSBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICBmb3IgKGogPSBpICsgMTsgaiA8IGw7IGorKykge1xuICAgICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaik7XG4gICAgICAgICAgaWYgKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA+IDQ3ICYmIHcgPCA1OSB8fCB3ID09PSA0NiB8fFxuICAgICAgICAgIC8vICcuJ1xuICAgICAgICAgIHcgPT09IDQ1IHx8XG4gICAgICAgICAgLy8gJy0nXG4gICAgICAgICAgdyA9PT0gOTUgLy8gJ18nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHdoaXRlc3BhY2VcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgdyA8IDE0ICYmIHcgPiA4KSB7XG4gICAgICAgICAgICAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdtaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZScpO1xuICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICBjb250aW51ZSBwYXJzZUF0dHI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZXhwZWN0ZWQgXCI9XCJcbiAgICAgICAgICBpZiAodyA9PT0gNjEpIHtcbiAgICAgICAgICAgIC8vIFwiPVwiID09IDYxXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFuZGxlV2FybmluZygnaWxsZWdhbCBhdHRyaWJ1dGUgbmFtZSBjaGFyJyk7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSBzLnN1YnN0cmluZyhpLCBqKTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICd4bWxuczp4bWxucycpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdpbGxlZ2FsIGRlY2xhcmF0aW9uIG9mIHhtbG5zJyk7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaiArIDEpO1xuICAgICAgICBpZiAodyA9PT0gMzQpIHtcbiAgICAgICAgICAvLyAnXCInXG4gICAgICAgICAgaiA9IHMuaW5kZXhPZignXCInLCBpID0gaiArIDIpO1xuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgaiA9IHMuaW5kZXhPZignXFwnJywgaSk7XG4gICAgICAgICAgICBpZiAoaiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaGFuZGxlV2FybmluZygnYXR0cmlidXRlIHZhbHVlIHF1b3RlIG1pc3NtYXRjaCcpO1xuICAgICAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHcgPT09IDM5KSB7XG4gICAgICAgICAgLy8gXCInXCJcbiAgICAgICAgICBqID0gcy5pbmRleE9mKCdcXCcnLCBpID0gaiArIDIpO1xuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgaiA9IHMuaW5kZXhPZignXCInLCBpKTtcbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJyk7XG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUgcXVvdGVzJyk7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gc2tpcCB0byBuZXh0IHNwYWNlXG4gICAgICAgICAgZm9yIChqID0gaiArIDE7IGogPCBsOyBqKyspIHtcbiAgICAgICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaiArIDEpO1xuICAgICAgICAgICAgaWYgKHcgPT09IDMyIHx8IHcgPCAxNCAmJiB3ID4gOCkge1xuICAgICAgICAgICAgICAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA9PT0gLTEpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdtaXNzaW5nIGNsb3NpbmcgcXVvdGVzJyk7XG4gICAgICAgICAgaiA9IGw7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2tpcEF0dHIpIHtcbiAgICAgICAgICB2YWx1ZSA9IHMuc3Vic3RyaW5nKGksIGopO1xuICAgICAgICB9XG4gICAgICAgIGkgPSBqO1xuXG4gICAgICAgIC8vIGVuc3VyZSBTUEFDRSBmb2xsb3dzIGF0dHJpYnV0ZVxuICAgICAgICAvLyBza2lwIGlsbGVnYWwgY29udGVudCBvdGhlcndpc2VcbiAgICAgICAgLy8gZXhhbXBsZSBhPVwiYlwiY1xuICAgICAgICBmb3IgKDsgaiArIDEgPCBsOyBqKyspIHtcbiAgICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGogKyAxKTtcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgdyA8IDE0ICYmIHcgPiA4KSB7XG4gICAgICAgICAgICAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGSVJTVCBJTExFR0FMIENIQVJcbiAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgaGFuZGxlV2FybmluZygnaWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgYXR0cmlidXRlIGVuZCcpO1xuICAgICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkdmFuY2UgY3Vyc29yIHRvIG5leHQgYXR0cmlidXRlXG4gICAgICAgIGkgPSBqICsgMTtcbiAgICAgICAgaWYgKHNraXBBdHRyKSB7XG4gICAgICAgICAgY29udGludWUgcGFyc2VBdHRyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgYXR0cmlidXRlIHJlLWRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChuYW1lIGluIHNlZW5BdHRycykge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2F0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPiBhbHJlYWR5IGRlZmluZWQnKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzZWVuQXR0cnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICBpZiAoIWlzTmFtZXNwYWNlKSB7XG4gICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRyeSB0byBleHRyYWN0IG5hbWVzcGFjZSBpbmZvcm1hdGlvblxuICAgICAgICBpZiAobWF5YmVOUykge1xuICAgICAgICAgIG5ld2FsaWFzID0gbmFtZSA9PT0gJ3htbG5zJyA/ICd4bWxucycgOiBuYW1lLmNoYXJDb2RlQXQoMCkgPT09IDEyMCAmJiBuYW1lLnN1YnN0cigwLCA2KSA9PT0gJ3htbG5zOicgPyBuYW1lLnN1YnN0cig2KSA6IG51bGw7XG5cbiAgICAgICAgICAvLyBoYW5kbGUgeG1sbnMoOmFsaWFzKSBhc3NpZ25tZW50XG4gICAgICAgICAgaWYgKG5ld2FsaWFzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBuc1VyaSA9IGRlY29kZUVudGl0aWVzKHZhbHVlKTtcbiAgICAgICAgICAgIG5zVXJpUHJlZml4ID0gdXJpUHJlZml4KG5ld2FsaWFzKTtcbiAgICAgICAgICAgIGFsaWFzID0gbnNVcmlUb1ByZWZpeFtuc1VyaV07XG4gICAgICAgICAgICBpZiAoIWFsaWFzKSB7XG4gICAgICAgICAgICAgIC8vIG5vIHByZWZpeCBkZWZpbmVkIG9yIHByZWZpeCBjb2xsaXNpb25cbiAgICAgICAgICAgICAgaWYgKG5ld2FsaWFzID09PSAneG1sbnMnIHx8IG5zVXJpUHJlZml4IGluIG5zTWF0cml4ICYmIG5zTWF0cml4W25zVXJpUHJlZml4XSAhPT0gbnNVcmkpIHtcbiAgICAgICAgICAgICAgICAvLyBhbG9jYXRlIGZyZWUgbnMgcHJlZml4XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgYWxpYXMgPSAnbnMnICsgYW5vbnltb3VzTnNDb3VudCsrO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHR5cGVvZiBuc01hdHJpeFthbGlhc10gIT09ICd1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IG5ld2FsaWFzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5zVXJpVG9QcmVmaXhbbnNVcmldID0gYWxpYXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobnNNYXRyaXhbbmV3YWxpYXNdICE9PSBhbGlhcykge1xuICAgICAgICAgICAgICBpZiAoIWhhc05ld01hdHJpeCkge1xuICAgICAgICAgICAgICAgIG5zTWF0cml4ID0gY2xvbmVOc01hdHJpeChuc01hdHJpeCk7XG4gICAgICAgICAgICAgICAgaGFzTmV3TWF0cml4ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuc01hdHJpeFtuZXdhbGlhc10gPSBhbGlhcztcbiAgICAgICAgICAgICAgaWYgKG5ld2FsaWFzID09PSAneG1sbnMnKSB7XG4gICAgICAgICAgICAgICAgbnNNYXRyaXhbdXJpUHJlZml4KGFsaWFzKV0gPSBuc1VyaTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0QWxpYXMgPSBhbGlhcztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuc01hdHJpeFtuc1VyaVByZWZpeF0gPSBuc1VyaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXhwb3NlIHhtbG5zKDphc2QpPVwiLi4uXCIgaW4gYXR0cmlidXRlc1xuICAgICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbGxlY3QgYXR0cmlidXRlcyB1bnRpbCBhbGwgbmFtZXNwYWNlXG4gICAgICAgICAgLy8gZGVjbGFyYXRpb25zIGFyZSBwcm9jZXNzZWRcbiAgICAgICAgICBhdHRyTGlzdC5wdXNoKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvKiogZW5kIGlmIChtYXliZU5zKSAqL1xuXG4gICAgICAgIC8vIGhhbmRsZSBhdHRyaWJ1dGVzIG9uIGVsZW1lbnQgd2l0aG91dFxuICAgICAgICAvLyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zXG4gICAgICAgIHcgPSBuYW1lLmluZGV4T2YoJzonKTtcbiAgICAgICAgaWYgKHcgPT09IC0xKSB7XG4gICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICBpZiAoIShuc05hbWUgPSBuc01hdHJpeFtuYW1lLnN1YnN0cmluZygwLCB3KV0pKSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZyhtaXNzaW5nTmFtZXNwYWNlRm9yUHJlZml4KG5hbWUuc3Vic3RyaW5nKDAsIHcpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9IGRlZmF1bHRBbGlhcyA9PT0gbnNOYW1lID8gbmFtZS5zdWJzdHIodyArIDEpIDogbnNOYW1lICsgbmFtZS5zdWJzdHIodyk7XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgbnMgYXR0cmlidXRlIG5hbWVcblxuICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGUgZGVmZXJyZWQsIHBvc3NpYmx5IG5hbWVzcGFjZWQgYXR0cmlidXRlc1xuICAgICAgaWYgKG1heWJlTlMpIHtcbiAgICAgICAgLy8gbm9ybWFsaXplIGNhcHR1cmVkIGF0dHJpYnV0ZXNcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGF0dHJMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIG5hbWUgPSBhdHRyTGlzdFtpKytdO1xuICAgICAgICAgIHZhbHVlID0gYXR0ckxpc3RbaV07XG4gICAgICAgICAgdyA9IG5hbWUuaW5kZXhPZignOicpO1xuICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgICAgICBpZiAoIShuc05hbWUgPSBuc01hdHJpeFtuYW1lLnN1YnN0cmluZygwLCB3KV0pKSB7XG4gICAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcobWlzc2luZ05hbWVzcGFjZUZvclByZWZpeChuYW1lLnN1YnN0cmluZygwLCB3KSkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5hbWUgPSBkZWZhdWx0QWxpYXMgPT09IG5zTmFtZSA/IG5hbWUuc3Vic3RyKHcgKyAxKSA6IG5zTmFtZSArIG5hbWUuc3Vic3RyKHcpO1xuXG4gICAgICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgY2FwdHVyZWQgYXR0cmlidXRlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhY2hlZEF0dHJzID0gYXR0cnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdCB0aGUgcGFyc2UgY29udGV4dCB7IGxpbmUsIGNvbHVtbiwgcGFydCB9XG4gICAgICogZnJvbSB0aGUgY3VycmVudCBwYXJzZXIgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHBhcnNlIGNvbnRleHRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQYXJzZUNvbnRleHQoKSB7XG4gICAgICB2YXIgc3BsaXRzUmUgPSAvKFxcclxcbnxcXHJ8XFxuKS9nO1xuICAgICAgdmFyIGxpbmUgPSAwO1xuICAgICAgdmFyIGNvbHVtbiA9IDA7XG4gICAgICB2YXIgc3RhcnRPZkxpbmUgPSAwO1xuICAgICAgdmFyIGVuZE9mTGluZSA9IGo7XG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgZGF0YTtcbiAgICAgIHdoaWxlIChpID49IHN0YXJ0T2ZMaW5lKSB7XG4gICAgICAgIG1hdGNoID0gc3BsaXRzUmUuZXhlYyh4bWwpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQgb2YgbGluZSA9IChicmVhayBpZHggKyBicmVhayBjaGFycylcbiAgICAgICAgZW5kT2ZMaW5lID0gbWF0Y2hbMF0ubGVuZ3RoICsgbWF0Y2guaW5kZXg7XG4gICAgICAgIGlmIChlbmRPZkxpbmUgPiBpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZHZhbmNlIHRvIG5leHQgbGluZVxuICAgICAgICBsaW5lICs9IDE7XG4gICAgICAgIHN0YXJ0T2ZMaW5lID0gZW5kT2ZMaW5lO1xuICAgICAgfVxuXG4gICAgICAvLyBFT0YgZXJyb3JzXG4gICAgICBpZiAoaSA9PSAtMSkge1xuICAgICAgICBjb2x1bW4gPSBlbmRPZkxpbmU7XG4gICAgICAgIGRhdGEgPSB4bWwuc3Vic3RyaW5nKGopO1xuICAgICAgfSBlbHNlXG4gICAgICAgIC8vIHN0YXJ0IGVycm9yc1xuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIGRhdGEgPSB4bWwuc3Vic3RyaW5nKGosIGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb3RoZXIgZXJyb3JzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbHVtbiA9IGkgLSBzdGFydE9mTGluZTtcbiAgICAgICAgICBkYXRhID0gaiA9PSAtMSA/IHhtbC5zdWJzdHJpbmcoaSkgOiB4bWwuc3Vic3RyaW5nKGksIGogKyAxKTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RhdGEnOiBkYXRhLFxuICAgICAgICAnbGluZSc6IGxpbmUsXG4gICAgICAgICdjb2x1bW4nOiBjb2x1bW5cbiAgICAgIH07XG4gICAgfVxuICAgIGdldENvbnRleHQgPSBnZXRQYXJzZUNvbnRleHQ7XG4gICAgaWYgKHByb3h5KSB7XG4gICAgICBlbGVtZW50UHJveHkgPSBPYmplY3QuY3JlYXRlKHt9LCB7XG4gICAgICAgICduYW1lJzogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudE5hbWU7XG4gICAgICAgIH0pLFxuICAgICAgICAnb3JpZ2luYWxOYW1lJzogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX2VsZW1lbnROYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgJ2F0dHJzJzogZ2V0dGVyKGdldEF0dHJzKSxcbiAgICAgICAgJ25zJzogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbnNNYXRyaXg7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhY3R1YWwgcGFyc2UgbG9naWNcbiAgICB3aGlsZSAoaiAhPT0gLTEpIHtcbiAgICAgIGlmICh4bWwuY2hhckNvZGVBdChqKSA9PT0gNjApIHtcbiAgICAgICAgLy8gXCI8XCJcbiAgICAgICAgaSA9IGo7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpID0geG1sLmluZGV4T2YoJzwnLCBqKTtcbiAgICAgIH1cblxuICAgICAgLy8gcGFyc2UgZW5kXG4gICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgaWYgKG5vZGVTdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuZXhwZWN0ZWQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignbWlzc2luZyBzdGFydCB0YWcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA8IHhtbC5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhqKS50cmltKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHBhcnNlIHRleHRcbiAgICAgIGlmIChqICE9PSBpKSB7XG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG9uVGV4dCkge1xuICAgICAgICAgICAgb25UZXh0KHhtbC5zdWJzdHJpbmcoaiwgaSksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhqLCBpKS50cmltKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3ID0geG1sLmNoYXJDb2RlQXQoaSArIDEpO1xuXG4gICAgICAvLyBwYXJzZSBjb21tZW50cyArIENEQVRBXG4gICAgICBpZiAodyA9PT0gMzMpIHtcbiAgICAgICAgLy8gXCIhXCJcbiAgICAgICAgcSA9IHhtbC5jaGFyQ29kZUF0KGkgKyAyKTtcblxuICAgICAgICAvLyBDREFUQSBzZWN0aW9uXG4gICAgICAgIGlmIChxID09PSA5MSAmJiB4bWwuc3Vic3RyKGkgKyAzLCA2KSA9PT0gJ0NEQVRBWycpIHtcbiAgICAgICAgICAvLyA5MSA9PSBcIltcIlxuICAgICAgICAgIGogPSB4bWwuaW5kZXhPZignXV0+JywgaSk7XG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIGNkYXRhJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvbkNEQVRBKSB7XG4gICAgICAgICAgICBvbkNEQVRBKHhtbC5zdWJzdHJpbmcoaSArIDksIGopLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBqICs9IDM7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21tZW50XG4gICAgICAgIGlmIChxID09PSA0NSAmJiB4bWwuY2hhckNvZGVBdChpICsgMykgPT09IDQ1KSB7XG4gICAgICAgICAgLy8gNDUgPT0gXCItXCJcbiAgICAgICAgICBqID0geG1sLmluZGV4T2YoJy0tPicsIGkpO1xuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCBjb21tZW50Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvbkNvbW1lbnQpIHtcbiAgICAgICAgICAgIG9uQ29tbWVudCh4bWwuc3Vic3RyaW5nKGkgKyA0LCBqKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGogKz0gMztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSBxdWVzdGlvbiA8PyAuLi4gPz5cbiAgICAgIGlmICh3ID09PSA2Mykge1xuICAgICAgICAvLyBcIj9cIlxuICAgICAgICBqID0geG1sLmluZGV4T2YoJz8+JywgaSk7XG4gICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5jbG9zZWQgcXVlc3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25RdWVzdGlvbikge1xuICAgICAgICAgIG9uUXVlc3Rpb24oeG1sLnN1YnN0cmluZyhpLCBqICsgMiksIGdldENvbnRleHQpO1xuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZmluZCBtYXRjaGluZyBjbG9zaW5nIHRhZyBmb3IgYXR0ZW50aW9uIG9yIHN0YW5kYXJkIHRhZ3NcbiAgICAgIC8vIGZvciB0aGF0IHdlIG11c3Qgc2tpcCB0aHJvdWdoIGF0dHJpYnV0ZSB2YWx1ZXNcbiAgICAgIC8vIChlbmNsb3NlZCBpbiBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcylcbiAgICAgIGZvciAoeCA9IGkgKyAxOzsgeCsrKSB7XG4gICAgICAgIHYgPSB4bWwuY2hhckNvZGVBdCh4KTtcbiAgICAgICAgaWYgKGlzTmFOKHYpKSB7XG4gICAgICAgICAgaiA9IC0xO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5jbG9zZWQgdGFnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBbMTBdIEF0dFZhbHVlIDo6PSAnXCInIChbXjwmXCJdIHwgUmVmZXJlbmNlKSogJ1wiJyB8IFwiJ1wiIChbXjwmJ10gfCBSZWZlcmVuY2UpKiBcIidcIlxuICAgICAgICAvLyBza2lwcyB0aGUgcXVvdGVkIHN0cmluZ1xuICAgICAgICAvLyAoZG91YmxlIHF1b3RlcykgZG9lcyBub3QgYXBwZWFyIGluIGEgbGl0ZXJhbCBlbmNsb3NlZCBieSAoZG91YmxlIHF1b3RlcylcbiAgICAgICAgLy8gKHNpbmdsZSBxdW90ZSkgZG9lcyBub3QgYXBwZWFyIGluIGEgbGl0ZXJhbCBlbmNsb3NlZCBieSAoc2luZ2xlIHF1b3RlKVxuICAgICAgICBpZiAodiA9PT0gMzQpIHtcbiAgICAgICAgICAvLyAgJ1wiJ1xuICAgICAgICAgIHEgPSB4bWwuaW5kZXhPZignXCInLCB4ICsgMSk7XG4gICAgICAgICAgeCA9IHEgIT09IC0xID8gcSA6IHg7XG4gICAgICAgIH0gZWxzZSBpZiAodiA9PT0gMzkpIHtcbiAgICAgICAgICAvLyBcIidcIlxuICAgICAgICAgIHEgPSB4bWwuaW5kZXhPZihcIidcIiwgeCArIDEpO1xuICAgICAgICAgIHggPSBxICE9PSAtMSA/IHEgOiB4O1xuICAgICAgICB9IGVsc2UgaWYgKHYgPT09IDYyKSB7XG4gICAgICAgICAgLy8gJz4nXG4gICAgICAgICAgaiA9IHg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcGFyc2UgYXR0ZW50aW9uIDwhIC4uLj5cbiAgICAgIC8vIHByZXZpb3VzbHkgY29tbWVudCBhbmQgQ0RBVEEgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkXG4gICAgICBpZiAodyA9PT0gMzMpIHtcbiAgICAgICAgLy8gXCIhXCJcblxuICAgICAgICBpZiAob25BdHRlbnRpb24pIHtcbiAgICAgICAgICBvbkF0dGVudGlvbih4bWwuc3Vic3RyaW5nKGksIGogKyAxKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaiArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZG9uJ3QgcHJvY2VzcyBhdHRyaWJ1dGVzO1xuICAgICAgLy8gdGhlcmUgYXJlIG5vbmVcbiAgICAgIGNhY2hlZEF0dHJzID0ge307XG5cbiAgICAgIC8vIGlmICh4bWwuY2hhckNvZGVBdChpKzEpID09PSA0NykgeyAvLyA8Ly4uLlxuICAgICAgaWYgKHcgPT09IDQ3KSB7XG4gICAgICAgIC8vIDwvLi4uXG4gICAgICAgIHRhZ1N0YXJ0ID0gZmFsc2U7XG4gICAgICAgIHRhZ0VuZCA9IHRydWU7XG4gICAgICAgIGlmICghbm9kZVN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignbWlzc2luZyBvcGVuIHRhZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmVyaWZ5IG9wZW4gPC0+IGNsb3NlIHRhZyBtYXRjaFxuICAgICAgICB4ID0gZWxlbWVudE5hbWUgPSBub2RlU3RhY2sucG9wKCk7XG4gICAgICAgIHEgPSBpICsgMiArIHgubGVuZ3RoO1xuICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhpICsgMiwgcSkgIT09IHgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2Nsb3NpbmcgdGFnIG1pc21hdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2ZXJpZnkgY2hhcnMgaW4gY2xvc2UgdGFnXG4gICAgICAgIGZvciAoOyBxIDwgajsgcSsrKSB7XG4gICAgICAgICAgdyA9IHhtbC5jaGFyQ29kZUF0KHEpO1xuICAgICAgICAgIGlmICh3ID09PSAzMiB8fCB3ID4gOCAmJiB3IDwgMTQpIHtcbiAgICAgICAgICAgIC8vIFxcZlxcblxcclxcdFxcdiBzcGFjZVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignY2xvc2UgdGFnJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh4bWwuY2hhckNvZGVBdChqIC0gMSkgPT09IDQ3KSB7XG4gICAgICAgICAgLy8gLi4uLz5cbiAgICAgICAgICB4ID0gZWxlbWVudE5hbWUgPSB4bWwuc3Vic3RyaW5nKGkgKyAxLCBqIC0gMSk7XG4gICAgICAgICAgdGFnU3RhcnQgPSB0cnVlO1xuICAgICAgICAgIHRhZ0VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeCA9IGVsZW1lbnROYW1lID0geG1sLnN1YnN0cmluZyhpICsgMSwgaik7XG4gICAgICAgICAgdGFnU3RhcnQgPSB0cnVlO1xuICAgICAgICAgIHRhZ0VuZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA9PT0gOTUgfHwgdyA9PT0gNTgpKSB7XG4gICAgICAgICAgLy8gY2hhciA5NVwiX1wiIDU4XCI6XCJcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2lsbGVnYWwgZmlyc3QgY2hhciBub2RlTmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAocSA9IDEsIHkgPSB4Lmxlbmd0aDsgcSA8IHk7IHErKykge1xuICAgICAgICAgIHcgPSB4LmNoYXJDb2RlQXQocSk7XG4gICAgICAgICAgaWYgKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA+IDQ3ICYmIHcgPCA1OSB8fCB3ID09PSA0NSB8fCB3ID09PSA5NSB8fCB3ID09IDQ2KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8IHcgPCAxNCAmJiB3ID4gOCkge1xuICAgICAgICAgICAgLy8gXFxmXFxuXFxyXFx0XFx2IHNwYWNlXG4gICAgICAgICAgICBlbGVtZW50TmFtZSA9IHguc3Vic3RyaW5nKDAsIHEpO1xuXG4gICAgICAgICAgICAvLyBtYXliZSB0aGVyZSBhcmUgYXR0cmlidXRlc1xuICAgICAgICAgICAgY2FjaGVkQXR0cnMgPSBudWxsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignaW52YWxpZCBub2RlTmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFnRW5kKSB7XG4gICAgICAgICAgbm9kZVN0YWNrLnB1c2goZWxlbWVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgICAgX25zTWF0cml4ID0gbnNNYXRyaXg7XG4gICAgICAgIGlmICh0YWdTdGFydCkge1xuICAgICAgICAgIC8vIHJlbWVtYmVyIG9sZCBuYW1lc3BhY2VcbiAgICAgICAgICAvLyB1bmxlc3Mgd2UncmUgc2VsZi1jbG9zaW5nXG4gICAgICAgICAgaWYgKCF0YWdFbmQpIHtcbiAgICAgICAgICAgIG5zTWF0cml4U3RhY2sucHVzaChfbnNNYXRyaXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2FjaGVkQXR0cnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIHF1aWNrIGNoZWNrLCB3aGV0aGVyIHRoZXJlIG1heSBiZSBuYW1lc3BhY2VcbiAgICAgICAgICAgIC8vIGRlY2xhcmF0aW9ucyBvbiB0aGUgbm9kZTsgaWYgdGhhdCBpcyB0aGUgY2FzZVxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBlYWdlcmx5IHBhcnNlIHRoZSBub2RlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIGlmIChtYXliZU5TID0geC5pbmRleE9mKCd4bWxucycsIHEpICE9PSAtMSkge1xuICAgICAgICAgICAgICBhdHRyc1N0YXJ0ID0gcTtcbiAgICAgICAgICAgICAgYXR0cnNTdHJpbmcgPSB4O1xuICAgICAgICAgICAgICBnZXRBdHRycygpO1xuICAgICAgICAgICAgICBtYXliZU5TID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lO1xuICAgICAgICB3ID0gZWxlbWVudE5hbWUuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAodyAhPT0gLTEpIHtcbiAgICAgICAgICB4bWxucyA9IG5zTWF0cml4W2VsZW1lbnROYW1lLnN1YnN0cmluZygwLCB3KV07XG5cbiAgICAgICAgICAvLyBwcmVmaXggZ2l2ZW47IG5hbWVzcGFjZSBtdXN0IGV4aXN0XG4gICAgICAgICAgaWYgKCF4bWxucykge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdtaXNzaW5nIG5hbWVzcGFjZSBvbiA8JyArIF9lbGVtZW50TmFtZSArICc+Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsZW1lbnROYW1lID0gZWxlbWVudE5hbWUuc3Vic3RyKHcgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4bWxucyA9IG5zTWF0cml4Wyd4bWxucyddO1xuXG4gICAgICAgICAgLy8gaWYgbm8gZGVmYXVsdCBuYW1lc3BhY2UgaXMgZGVmaW5lZCxcbiAgICAgICAgICAvLyB3ZSdsbCBpbXBvcnQgdGhlIGVsZW1lbnQgYXMgYW5vbnltb3VzLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gaXQgaXMgdXAgdG8gdXNlcnMgdG8gY29ycmVjdCB0aGF0IHRvIHRoZSBkb2N1bWVudCBkZWZpbmVkXG4gICAgICAgICAgLy8gdGFyZ2V0TmFtZXNwYWNlLCBvciB3aGF0ZXZlciB0aGVpciB1bmRlcnNhbmRpbmcgb2YgdGhlXG4gICAgICAgICAgLy8gWE1MIHNwZWMgbWFuZGF0ZXMuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGp1c3QgbmFtZXNwYWNlIHByZWZpeHMgYXMgY29uZmlndXJlZFxuICAgICAgICBpZiAoeG1sbnMpIHtcbiAgICAgICAgICBlbGVtZW50TmFtZSA9IHhtbG5zICsgJzonICsgZWxlbWVudE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YWdTdGFydCkge1xuICAgICAgICBhdHRyc1N0YXJ0ID0gcTtcbiAgICAgICAgYXR0cnNTdHJpbmcgPSB4O1xuICAgICAgICBpZiAob25PcGVuVGFnKSB7XG4gICAgICAgICAgaWYgKHByb3h5KSB7XG4gICAgICAgICAgICBvbk9wZW5UYWcoZWxlbWVudFByb3h5LCBkZWNvZGVFbnRpdGllcywgdGFnRW5kLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25PcGVuVGFnKGVsZW1lbnROYW1lLCBnZXRBdHRycywgZGVjb2RlRW50aXRpZXMsIHRhZ0VuZCwgZ2V0Q29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YWdFbmQpIHtcbiAgICAgICAgaWYgKG9uQ2xvc2VUYWcpIHtcbiAgICAgICAgICBvbkNsb3NlVGFnKHByb3h5ID8gZWxlbWVudFByb3h5IDogZWxlbWVudE5hbWUsIGRlY29kZUVudGl0aWVzLCB0YWdTdGFydCwgZ2V0Q29udGV4dCk7XG4gICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc3RvcmUgb2xkIG5hbWVzcGFjZVxuICAgICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgICAgICBpZiAoIXRhZ1N0YXJ0KSB7XG4gICAgICAgICAgICBuc01hdHJpeCA9IG5zTWF0cml4U3RhY2sucG9wKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5zTWF0cml4ID0gX25zTWF0cml4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaiArPSAxO1xuICAgIH1cbiAgfSAvKiogZW5kIHBhcnNlICovXG59XG5cbmZ1bmN0aW9uIGhhc0xvd2VyQ2FzZUFsaWFzKHBrZykge1xuICByZXR1cm4gcGtnLnhtbCAmJiBwa2cueG1sLnRhZ0FsaWFzID09PSAnbG93ZXJDYXNlJztcbn1cbnZhciBERUZBVUxUX05TX01BUCA9IHtcbiAgJ3hzaSc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScsXG4gICd4bWwnOiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ1xufTtcbnZhciBTRVJJQUxJWkVfUFJPUEVSVFkgPSAncHJvcGVydHknO1xuZnVuY3Rpb24gZ2V0U2VyaWFsaXphdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnhtbCAmJiBlbGVtZW50LnhtbC5zZXJpYWxpemU7XG59XG5mdW5jdGlvbiBnZXRTZXJpYWxpemF0aW9uVHlwZShlbGVtZW50KSB7XG4gIGNvbnN0IHR5cGUgPSBnZXRTZXJpYWxpemF0aW9uKGVsZW1lbnQpO1xuICByZXR1cm4gdHlwZSAhPT0gU0VSSUFMSVpFX1BST1BFUlRZICYmICh0eXBlIHx8IG51bGwpO1xufVxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cbmZ1bmN0aW9uIGFsaWFzVG9OYW1lKGFsaWFzTnMsIHBrZykge1xuICBpZiAoIWhhc0xvd2VyQ2FzZUFsaWFzKHBrZykpIHtcbiAgICByZXR1cm4gYWxpYXNOcy5uYW1lO1xuICB9XG4gIHJldHVybiBhbGlhc05zLnByZWZpeCArICc6JyArIGNhcGl0YWxpemUoYWxpYXNOcy5sb2NhbE5hbWUpO1xufVxuXG4vKipcbiAqIFVuLXByZWZpeCBhIHBvdGVudGlhbGx5IHByZWZpeGVkIHR5cGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge05zTmFtZX0gbmFtZU5zXG4gKiBAcGFyYW0ge09iamVjdH0gW3BrZ11cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKSB7XG4gIHZhciBuYW1lID0gbmFtZU5zLm5hbWUsXG4gICAgbG9jYWxOYW1lID0gbmFtZU5zLmxvY2FsTmFtZTtcbiAgdmFyIHR5cGVQcmVmaXggPSBwa2cgJiYgcGtnLnhtbCAmJiBwa2cueG1sLnR5cGVQcmVmaXg7XG4gIGlmICh0eXBlUHJlZml4ICYmIGxvY2FsTmFtZS5pbmRleE9mKHR5cGVQcmVmaXgpID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWVOcy5wcmVmaXggKyAnOicgKyBsb2NhbE5hbWUuc2xpY2UodHlwZVByZWZpeC5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVUeXBlTmFtZShuYW1lLCBuc01hcCwgbW9kZWwpIHtcbiAgLy8gbm9ybWFsaXplIGFnYWluc3QgYWN0dWFsIE5TXG4gIGNvbnN0IG5hbWVOcyA9IHBhcnNlTmFtZShuYW1lLCBuc01hcC54bWxucyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gYCR7bnNNYXBbbmFtZU5zLnByZWZpeF0gfHwgbmFtZU5zLnByZWZpeH06JHtuYW1lTnMubG9jYWxOYW1lfWA7XG4gIGNvbnN0IG5vcm1hbGl6ZWROYW1lTnMgPSBwYXJzZU5hbWUobm9ybWFsaXplZE5hbWUpO1xuXG4gIC8vIGRldGVybWluZSBhY3R1YWwgdHlwZSBuYW1lLCBiYXNlZCBvbiBwYWNrYWdlLWRlZmluZWQgcHJlZml4XG4gIHZhciBwa2cgPSBtb2RlbC5nZXRQYWNrYWdlKG5vcm1hbGl6ZWROYW1lTnMucHJlZml4KTtcbiAgcmV0dXJuIHByZWZpeGVkVG9OYW1lKG5vcm1hbGl6ZWROYW1lTnMsIHBrZyk7XG59XG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtb2RkbGUgZGVzY3JpcHRvciBmb3IgYSBnaXZlbiBpbnN0YW5jZSBvciB0eXBlLlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR8RnVuY3Rpb259IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBtb2RkbGUgZGVzY3JpcHRvclxuICovXG5mdW5jdGlvbiBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuJGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQSBwYXJzZSBjb250ZXh0LlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0VsZW1lbnRIYW5kbGVyfSBvcHRpb25zLnJvb3RIYW5kbGVyIHRoZSByb290IGhhbmRsZXIgZm9yIHBhcnNpbmcgYSBkb2N1bWVudFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sYXg9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSBpbnZhbGlkIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHQob3B0aW9ucykge1xuICAvKipcbiAgICogQHByb3BlcnR5IHtFbGVtZW50SGFuZGxlcn0gcm9vdEhhbmRsZXJcbiAgICovXG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gbGF4XG4gICAqL1xuXG4gIGFzc2lnbih0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5lbGVtZW50c0J5SWQgPSB7fTtcbiAgdGhpcy5yZWZlcmVuY2VzID0gW107XG4gIHRoaXMud2FybmluZ3MgPSBbXTtcblxuICAvKipcbiAgICogQWRkIGFuIHVucmVzb2x2ZWQgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlXG4gICAqL1xuICB0aGlzLmFkZFJlZmVyZW5jZSA9IGZ1bmN0aW9uIChyZWZlcmVuY2UpIHtcbiAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9jZXNzZWQgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICB0aGlzLmFkZEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgdGhyb3cgZXJyb3IoJ2V4cGVjdGVkIGVsZW1lbnQnKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IHRoaXMuZWxlbWVudHNCeUlkO1xuICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50KTtcbiAgICB2YXIgaWRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IuaWRQcm9wZXJ0eSxcbiAgICAgIGlkO1xuICAgIGlmIChpZFByb3BlcnR5KSB7XG4gICAgICBpZCA9IGVsZW1lbnQuZ2V0KGlkUHJvcGVydHkubmFtZSk7XG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgLy8gZm9yIFFOYW1lIHZhbGlkYXRpb24gYXMgcGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVDaGFyXG4gICAgICAgIGlmICghL14oW2Etel1bXFx3LS5dKjopP1thLXpfXVtcXHctLl0qJC9pLnRlc3QoaWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIElEIDwnICsgaWQgKyAnPicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50c0J5SWRbaWRdKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3IoJ2R1cGxpY2F0ZSBJRCA8JyArIGlkICsgJz4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c0J5SWRbaWRdID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpbXBvcnQgd2FybmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHdhcm5pbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IHdhcm5pbmcubWVzc2FnZVxuICAgKiBAcGFyYW0ge0Vycm9yfSBbd2FybmluZy5lcnJvcl1cbiAgICovXG4gIHRoaXMuYWRkV2FybmluZyA9IGZ1bmN0aW9uICh3YXJuaW5nKSB7XG4gICAgdGhpcy53YXJuaW5ncy5wdXNoKHdhcm5pbmcpO1xuICB9O1xufVxuZnVuY3Rpb24gQmFzZUhhbmRsZXIoKSB7fVxuQmFzZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uICgpIHt9O1xuQmFzZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZVRleHQgPSBmdW5jdGlvbiAoKSB7fTtcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQSBzaW1wbGUgcGFzcyB0aHJvdWdoIGhhbmRsZXIgdGhhdCBkb2VzIG5vdGhpbmcgZXhjZXB0IGZvclxuICogaWdub3JpbmcgYWxsIGlucHV0IGl0IHJlY2VpdmVzLlxuICpcbiAqIFRoaXMgaXMgdXNlZCB0byBpZ25vcmUgdW5rbm93biBlbGVtZW50cyBhbmRcbiAqIGF0dHJpYnV0ZXMuXG4gKi9cbmZ1bmN0aW9uIE5vb3BIYW5kbGVyKCkge31cbk5vb3BIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZUhhbmRsZXIucHJvdG90eXBlKTtcbk5vb3BIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5mdW5jdGlvbiBCb2R5SGFuZGxlcigpIHt9XG5Cb2R5SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSk7XG5Cb2R5SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlVGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIHRoaXMuYm9keSA9ICh0aGlzLmJvZHkgfHwgJycpICsgdGV4dDtcbn07XG5mdW5jdGlvbiBSZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5LCBjb250ZXh0KSB7XG4gIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICB0aHJvdyBlcnJvcignZXhwZWN0ZWQgbm8gc3ViIG5vZGVzJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5jcmVhdGVSZWZlcmVuY2Uobm9kZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVsZW1lbnQuaWQgPSB0aGlzLmJvZHk7XG59O1xuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuY3JlYXRlUmVmZXJlbmNlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0eTogdGhpcy5wcm9wZXJ0eS5ucy5uYW1lLFxuICAgIGlkOiAnJ1xuICB9O1xufTtcbmZ1bmN0aW9uIFZhbHVlSGFuZGxlcihwcm9wZXJ0eURlc2MsIGVsZW1lbnQpIHtcbiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgdGhpcy5wcm9wZXJ0eURlc2MgPSBwcm9wZXJ0eURlc2M7XG59XG5WYWx1ZUhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuVmFsdWVIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2YWx1ZSA9IHRoaXMuYm9keSB8fCAnJyxcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgIHByb3BlcnR5RGVzYyA9IHRoaXMucHJvcGVydHlEZXNjO1xuICB2YWx1ZSA9IGNvZXJjZVR5cGUocHJvcGVydHlEZXNjLnR5cGUsIHZhbHVlKTtcbiAgaWYgKHByb3BlcnR5RGVzYy5pc01hbnkpIHtcbiAgICBlbGVtZW50LmdldChwcm9wZXJ0eURlc2MubmFtZSkucHVzaCh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXQocHJvcGVydHlEZXNjLm5hbWUsIHZhbHVlKTtcbiAgfVxufTtcbmZ1bmN0aW9uIEJhc2VFbGVtZW50SGFuZGxlcigpIHt9XG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuQmFzZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIHBhcnNlciA9IHRoaXMsXG4gICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudCA9IHRoaXMuY3JlYXRlRWxlbWVudChub2RlKTtcbiAgICB0aGlzLmNvbnRleHQuYWRkRWxlbWVudChlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZXIgPSB0aGlzLmhhbmRsZUNoaWxkKG5vZGUpO1xuICB9XG4gIHJldHVybiBwYXJzZXI7XG59O1xuXG4vKipcbiAqIEBjbGFzcyBSZWFkZXIuRWxlbWVudEhhbmRsZXJcbiAqXG4gKi9cbmZ1bmN0aW9uIEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMudHlwZSA9IG1vZGVsLmdldFR5cGUodHlwZU5hbWUpO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKTtcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5hZGRSZWZlcmVuY2UgPSBmdW5jdGlvbiAocmVmZXJlbmNlKSB7XG4gIHRoaXMuY29udGV4dC5hZGRSZWZlcmVuY2UocmVmZXJlbmNlKTtcbn07XG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlVGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpLFxuICAgIGJvZHlQcm9wZXJ0eSA9IGRlc2NyaXB0b3IuYm9keVByb3BlcnR5O1xuICBpZiAoIWJvZHlQcm9wZXJ0eSkge1xuICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIGJvZHkgdGV4dCA8JyArIHRleHQgKyAnPicpO1xuICB9XG4gIEJvZHlIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0LmNhbGwodGhpcywgdGV4dCk7XG59O1xuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5ib2R5LFxuICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQsXG4gICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCksXG4gICAgYm9keVByb3BlcnR5ID0gZGVzY3JpcHRvci5ib2R5UHJvcGVydHk7XG4gIGlmIChib2R5UHJvcGVydHkgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbHVlID0gY29lcmNlVHlwZShib2R5UHJvcGVydHkudHlwZSwgdmFsdWUpO1xuICAgIGVsZW1lbnQuc2V0KGJvZHlQcm9wZXJ0eS5uYW1lLCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmcm9tIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IG5vZGUgdGhlIHhtbCBub2RlXG4gKi9cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXMsXG4gICAgVHlwZSA9IHRoaXMudHlwZSxcbiAgICBkZXNjcmlwdG9yID0gZ2V0TW9kZGxlRGVzY3JpcHRvcihUeXBlKSxcbiAgICBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgIGluc3RhbmNlID0gbmV3IFR5cGUoe30pLFxuICAgIG1vZGVsID0gdGhpcy5tb2RlbCxcbiAgICBwcm9wTmFtZU5zO1xuICBmb3JFYWNoKGF0dHJpYnV0ZXMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgIHZhciBwcm9wID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW25hbWVdLFxuICAgICAgdmFsdWVzO1xuICAgIGlmIChwcm9wICYmIHByb3AuaXNSZWZlcmVuY2UpIHtcbiAgICAgIGlmICghcHJvcC5pc01hbnkpIHtcbiAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2Uoe1xuICAgICAgICAgIGVsZW1lbnQ6IGluc3RhbmNlLFxuICAgICAgICAgIHByb3BlcnR5OiBwcm9wLm5zLm5hbWUsXG4gICAgICAgICAgaWQ6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSURSRUZTOiBwYXJzZSByZWZlcmVuY2VzIGFzIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3RcbiAgICAgICAgdmFsdWVzID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yRWFjaCh2YWx1ZXMsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2Uoe1xuICAgICAgICAgICAgZWxlbWVudDogaW5zdGFuY2UsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcC5ucy5uYW1lLFxuICAgICAgICAgICAgaWQ6IHZcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHZhbHVlID0gY29lcmNlVHlwZShwcm9wLnR5cGUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3htbG5zJykge1xuICAgICAgICBuYW1lID0gJzonICsgbmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BOYW1lTnMgPSBwYXJzZU5hbWUobmFtZSwgZGVzY3JpcHRvci5ucy5wcmVmaXgpO1xuXG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgYXR0cmlidXRlIGlzIGRlZmluZWQgaW4gYSB3ZWxsLWtub3duIG5hbWVzcGFjZVxuICAgICAgICAvLyBpZiB0aGF0IGlzIHRoZSBjYXNlIHdlIGVtaXQgYSB3YXJuaW5nIHRvIGluZGljYXRlIHBvdGVudGlhbCBtaXN1c2VcbiAgICAgICAgaWYgKG1vZGVsLmdldFBhY2thZ2UocHJvcE5hbWVOcy5wcmVmaXgpKSB7XG4gICAgICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICd1bmtub3duIGF0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPicsXG4gICAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcbiAgICAgICAgICAgIHByb3BlcnR5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGluc3RhbmNlLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufTtcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUZvck5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICB2YXIgbmFtZSA9IG5vZGUubmFtZTtcbiAgdmFyIG5hbWVOcyA9IHBhcnNlTmFtZShuYW1lKTtcbiAgdmFyIHR5cGUgPSB0aGlzLnR5cGUsXG4gICAgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKHR5cGUpO1xuICB2YXIgcHJvcGVydHlOYW1lID0gbmFtZU5zLm5hbWUsXG4gICAgcHJvcGVydHkgPSBkZXNjcmlwdG9yLnByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHlOYW1lXTtcblxuICAvLyBzZWFyY2ggZm9yIHByb3BlcnRpZXMgYnkgbmFtZSBmaXJzdFxuXG4gIGlmIChwcm9wZXJ0eSAmJiAhcHJvcGVydHkuaXNBdHRyKSB7XG4gICAgY29uc3Qgc2VyaWFsaXphdGlvblR5cGUgPSBnZXRTZXJpYWxpemF0aW9uVHlwZShwcm9wZXJ0eSk7XG4gICAgaWYgKHNlcmlhbGl6YXRpb25UeXBlKSB7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZU5hbWUgPSBub2RlLmF0dHJpYnV0ZXNbc2VyaWFsaXphdGlvblR5cGVdO1xuXG4gICAgICAvLyB0eXBlIGlzIG9wdGlvbmFsLCBpZiBpdCBkb2VzIG5vdCBleGlzdHMgdGhlXG4gICAgICAvLyBkZWZhdWx0IHR5cGUgaXMgYXNzdW1lZFxuICAgICAgaWYgKGVsZW1lbnRUeXBlTmFtZSkge1xuICAgICAgICAvLyBjb252ZXJ0IHRoZSBwcmVmaXggdXNlZCB0byB0aGUgbWFwcGVkIGZvcm0sIGJ1dCBhbHNvXG4gICAgICAgIC8vIHRha2UgcG9zc2libGUgdHlwZSBwcmVmaXhlcyBmcm9tIFhNTFxuICAgICAgICAvLyBpbnRvIGFjY291bnQsIGkuZS46IHhzaTp0eXBlPVwidHtBY3R1YWxUeXBlfVwiLFxuICAgICAgICBjb25zdCBub3JtYWxpemVkVHlwZU5hbWUgPSBub3JtYWxpemVUeXBlTmFtZShlbGVtZW50VHlwZU5hbWUsIG5vZGUubnMsIG1vZGVsKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBtb2RlbC5nZXRUeXBlKG5vcm1hbGl6ZWRUeXBlTmFtZSk7XG4gICAgICAgIHJldHVybiBhc3NpZ24oe30sIHByb3BlcnR5LCB7XG4gICAgICAgICAgZWZmZWN0aXZlVHlwZTogZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50VHlwZSkubmFtZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWFyY2ggZm9yIHByb3BlcnRpZXMgYnkgbmFtZSBmaXJzdFxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuICB2YXIgcGtnID0gbW9kZWwuZ2V0UGFja2FnZShuYW1lTnMucHJlZml4KTtcbiAgaWYgKHBrZykge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlTmFtZSA9IGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKTtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IG1vZGVsLmdldFR5cGUoZWxlbWVudFR5cGVOYW1lKTtcblxuICAgIC8vIHNlYXJjaCBmb3IgY29sbGVjdGlvbiBtZW1iZXJzIGxhdGVyXG4gICAgcHJvcGVydHkgPSBmaW5kKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiAhcC5pc1ZpcnR1YWwgJiYgIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgZWxlbWVudFR5cGUuaGFzVHlwZShwLnR5cGUpO1xuICAgIH0pO1xuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcbiAgICAgICAgZWZmZWN0aXZlVHlwZTogZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50VHlwZSkubmFtZVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHBhcnNlIHVua25vd24gZWxlbWVudCAobWF5YmUgZXh0ZW5zaW9uKVxuICAgIHByb3BlcnR5ID0gZmluZChkZXNjcmlwdG9yLnByb3BlcnRpZXMsIGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgcC50eXBlID09PSAnRWxlbWVudCc7XG4gICAgfSk7XG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgfVxuICB9XG4gIHRocm93IGVycm9yKCd1bnJlY29nbml6ZWQgZWxlbWVudCA8JyArIG5hbWVOcy5uYW1lICsgJz4nKTtcbn07XG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnRWxlbWVudERlc2NyaXB0b3JbJyArIGdldE1vZGRsZURlc2NyaXB0b3IodGhpcy50eXBlKS5uYW1lICsgJ10nO1xufTtcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS52YWx1ZUhhbmRsZXIgPSBmdW5jdGlvbiAocHJvcGVydHlEZXNjLCBlbGVtZW50KSB7XG4gIHJldHVybiBuZXcgVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCk7XG59O1xuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnJlZmVyZW5jZUhhbmRsZXIgPSBmdW5jdGlvbiAocHJvcGVydHlEZXNjKSB7XG4gIHJldHVybiBuZXcgUmVmZXJlbmNlSGFuZGxlcihwcm9wZXJ0eURlc2MsIHRoaXMuY29udGV4dCk7XG59O1xuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbiAodHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ0VsZW1lbnQnKSB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmljRWxlbWVudEhhbmRsZXIodGhpcy5tb2RlbCwgdHlwZSwgdGhpcy5jb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEVsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsIHR5cGUsIHRoaXMuY29udGV4dCk7XG4gIH1cbn07XG5cbi8qKlxuICogSGFuZGxlIHRoZSBjaGlsZCBlbGVtZW50IHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlIHRoZSB4bWwgbm9kZVxuICovXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlQ2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xuICB2YXIgcHJvcGVydHlEZXNjLCB0eXBlLCBlbGVtZW50LCBjaGlsZEhhbmRsZXI7XG4gIHByb3BlcnR5RGVzYyA9IHRoaXMuZ2V0UHJvcGVydHlGb3JOb2RlKG5vZGUpO1xuICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICB0eXBlID0gcHJvcGVydHlEZXNjLmVmZmVjdGl2ZVR5cGUgfHwgcHJvcGVydHlEZXNjLnR5cGU7XG4gIGlmIChpc1NpbXBsZSh0eXBlKSkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlSGFuZGxlcihwcm9wZXJ0eURlc2MsIGVsZW1lbnQpO1xuICB9XG4gIGlmIChwcm9wZXJ0eURlc2MuaXNSZWZlcmVuY2UpIHtcbiAgICBjaGlsZEhhbmRsZXIgPSB0aGlzLnJlZmVyZW5jZUhhbmRsZXIocHJvcGVydHlEZXNjKS5oYW5kbGVOb2RlKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkSGFuZGxlciA9IHRoaXMuaGFuZGxlcih0eXBlKS5oYW5kbGVOb2RlKG5vZGUpO1xuICB9XG4gIHZhciBuZXdFbGVtZW50ID0gY2hpbGRIYW5kbGVyLmVsZW1lbnQ7XG5cbiAgLy8gY2hpbGQgaGFuZGxlcyBtYXkgZGVjaWRlIHRvIHNraXAgZWxlbWVudHNcbiAgLy8gYnkgbm90IHJldHVybmluZyBhbnl0aGluZ1xuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb3BlcnR5RGVzYy5pc01hbnkpIHtcbiAgICAgIGVsZW1lbnQuZ2V0KHByb3BlcnR5RGVzYy5uYW1lKS5wdXNoKG5ld0VsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnNldChwcm9wZXJ0eURlc2MubmFtZSwgbmV3RWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eURlc2MuaXNSZWZlcmVuY2UpIHtcbiAgICAgIGFzc2lnbihuZXdFbGVtZW50LCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb250ZXh0LmFkZFJlZmVyZW5jZShuZXdFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXN0YWJsaXNoIGNoaWxkIC0+IHBhcmVudCByZWxhdGlvbnNoaXBcbiAgICAgIG5ld0VsZW1lbnQuJHBhcmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGlsZEhhbmRsZXI7XG59O1xuXG4vKipcbiAqIEFuIGVsZW1lbnQgaGFuZGxlciB0aGF0IHBlcmZvcm1zIHNwZWNpYWwgdmFsaWRhdGlvblxuICogdG8gZW5zdXJlIHRoZSBub2RlIGl0IGdldHMgaW5pdGlhbGl6ZWQgd2l0aCBtYXRjaGVzXG4gKiB0aGUgaGFuZGxlcnMgdHlwZSAobmFtZXNwYWNlIHdpc2UpLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RlbFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVOYW1lXG4gKiBAcGFyYW0ge0NvbnRleHR9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gUm9vdEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICBFbGVtZW50SGFuZGxlci5jYWxsKHRoaXMsIG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCk7XG59XG5Sb290RWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIG5hbWUgPSBub2RlLm5hbWUsXG4gICAgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpLFxuICAgIG1vZGVsID0gdGhpcy5tb2RlbCxcbiAgICB0eXBlID0gdGhpcy50eXBlLFxuICAgIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCksXG4gICAgdHlwZU5hbWUgPSBwa2cgJiYgYWxpYXNUb05hbWUobmFtZU5zLCBwa2cpIHx8IG5hbWU7XG5cbiAgLy8gdmVyaWZ5IHRoZSBjb3JyZWN0IG5hbWVzcGFjZSBpZiB3ZSBwYXJzZVxuICAvLyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgaGFuZGxlciB0cmVlXG4gIC8vXG4gIC8vIHRoaXMgZW5zdXJlcyB3ZSBkb24ndCBtaXN0YWtlbmx5IGltcG9ydCB3cm9uZyBuYW1lc3BhY2UgZWxlbWVudHNcbiAgaWYgKCF0eXBlLmhhc1R5cGUodHlwZU5hbWUpKSB7XG4gICAgdGhyb3cgZXJyb3IoJ3VuZXhwZWN0ZWQgZWxlbWVudCA8JyArIG5vZGUub3JpZ2luYWxOYW1lICsgJz4nKTtcbiAgfVxuICByZXR1cm4gRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlKTtcbn07XG5mdW5jdGlvbiBHZW5lcmljRWxlbWVudEhhbmRsZXIobW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KSB7XG4gIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIG5hbWUgPSBub2RlLm5hbWUsXG4gICAgbnMgPSBwYXJzZU5hbWUobmFtZSksXG4gICAgcHJlZml4ID0gbnMucHJlZml4LFxuICAgIHVyaSA9IG5vZGUubnNbcHJlZml4ICsgJyR1cmknXSxcbiAgICBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzO1xuICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdGVBbnkobmFtZSwgdXJpLCBhdHRyaWJ1dGVzKTtcbn07XG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUNoaWxkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGhhbmRsZXIgPSBuZXcgR2VuZXJpY0VsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsICdFbGVtZW50JywgdGhpcy5jb250ZXh0KS5oYW5kbGVOb2RlKG5vZGUpLFxuICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gIHZhciBuZXdFbGVtZW50ID0gaGFuZGxlci5lbGVtZW50LFxuICAgIGNoaWxkcmVuO1xuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRyZW4gPSBlbGVtZW50LiRjaGlsZHJlbiA9IGVsZW1lbnQuJGNoaWxkcmVuIHx8IFtdO1xuICAgIGNoaWxkcmVuLnB1c2gobmV3RWxlbWVudCk7XG5cbiAgICAvLyBlc3RhYmxpc2ggY2hpbGQgLT4gcGFyZW50IHJlbGF0aW9uc2hpcFxuICAgIG5ld0VsZW1lbnQuJHBhcmVudCA9IGVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXI7XG59O1xuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJvZHkpIHtcbiAgICB0aGlzLmVsZW1lbnQuJGJvZHkgPSB0aGlzLmJvZHk7XG4gIH1cbn07XG5cbi8qKlxuICogQSByZWFkZXIgZm9yIGEgbWV0YS1tb2RlbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge01vZGVsfSBvcHRpb25zLm1vZGVsIHVzZWQgdG8gcmVhZCB4bWwgZmlsZXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0aW9ucy5sYXggd2hldGhlciB0byBtYWtlIHBhcnNlIGVycm9ycyB3YXJuaW5nc1xuICovXG5mdW5jdGlvbiBSZWFkZXIob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIE1vZGRsZSkge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBtb2RlbDogb3B0aW9uc1xuICAgIH07XG4gIH1cbiAgYXNzaWduKHRoaXMsIHtcbiAgICBsYXg6IGZhbHNlXG4gIH0sIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFRoZSBmcm9tWE1MIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJzZVJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7TW9kZGxlRWxlbWVudH0gcm9vdEVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8T2JqZWN0Pn0gcmVmZXJlbmNlc1xuICogQHByb3BlcnR5IHtBcnJheTxFcnJvcj59IHdhcm5pbmdzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZWxlbWVudHNCeUlkIC0gYSBtYXBwaW5nIGNvbnRhaW5pbmcgZWFjaCBJRCAtPiBNb2RkbGVFbGVtZW50XG4gKi9cblxuLyoqXG4gKiBUaGUgZnJvbVhNTCByZXN1bHQuXG4gKlxuICogQHR5cGVkZWYge0Vycm9yfSBQYXJzZUVycm9yXG4gKlxuICogQHByb3BlcnR5IHtBcnJheTxFcnJvcj59IHdhcm5pbmdzXG4gKi9cblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gWE1MIGludG8gYSBtb2RkbGUgZG9jdW1lbnQgdHJlZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30geG1sXG4gKiBAcGFyYW0ge0VsZW1lbnRIYW5kbGVyfE9iamVjdH0gb3B0aW9ucyBvciByb290SGFuZGxlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlUmVzdWx0LCBQYXJzZUVycm9yPn1cbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5mcm9tWE1MID0gZnVuY3Rpb24gKHhtbCwgb3B0aW9ucywgZG9uZSkge1xuICB2YXIgcm9vdEhhbmRsZXIgPSBvcHRpb25zLnJvb3RIYW5kbGVyO1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEVsZW1lbnRIYW5kbGVyKSB7XG4gICAgLy8gcm9vdCBoYW5kbGVyIHBhc3NlZCB2aWEgKHhtbCwgeyByb290SGFuZGxlcjogRWxlbWVudEhhbmRsZXIgfSwgLi4uKVxuICAgIHJvb3RIYW5kbGVyID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcm9vdEhhbmRsZXIgcGFzc2VkIHZpYSAoeG1sLCAnc29tZVN0cmluZycsIC4uLilcbiAgICAgIHJvb3RIYW5kbGVyID0gdGhpcy5oYW5kbGVyKG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvb3RIYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcm9vdEhhbmRsZXIgcGFzc2VkIHZpYSAoeG1sLCB7IHJvb3RIYW5kbGVyOiAnc29tZVN0cmluZycgfSwgLi4uKVxuICAgICAgcm9vdEhhbmRsZXIgPSB0aGlzLmhhbmRsZXIocm9vdEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgIGxheCA9IHRoaXMubGF4O1xuICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KGFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgcm9vdEhhbmRsZXI6IHJvb3RIYW5kbGVyXG4gICAgfSkpLFxuICAgIHBhcnNlciA9IG5ldyBQYXJzZXIoe1xuICAgICAgcHJveHk6IHRydWVcbiAgICB9KSxcbiAgICBzdGFjayA9IGNyZWF0ZVN0YWNrKCk7XG4gIHJvb3RIYW5kbGVyLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gIC8vIHB1c2ggcm9vdCBoYW5kbGVyXG4gIHN0YWNrLnB1c2gocm9vdEhhbmRsZXIpO1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGdldENvbnRleHRcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gbGF4XG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgaGFuZGxlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyLCBnZXRDb250ZXh0LCBsYXgpIHtcbiAgICB2YXIgY3R4ID0gZ2V0Q29udGV4dCgpO1xuICAgIHZhciBsaW5lID0gY3R4LmxpbmUsXG4gICAgICBjb2x1bW4gPSBjdHguY29sdW1uLFxuICAgICAgZGF0YSA9IGN0eC5kYXRhO1xuXG4gICAgLy8gd2UgcmVjZWl2ZSB0aGUgZnVsbCBjb250ZXh0IGRhdGEgaGVyZSxcbiAgICAvLyBmb3IgZWxlbWVudHMgdHJpbSBkb3duIHRoZSBpbmZvcm1hdGlvblxuICAgIC8vIHRvIHRoZSB0YWcgbmFtZSwgb25seVxuICAgIGlmIChkYXRhLmNoYXJBdCgwKSA9PT0gJzwnICYmIGRhdGEuaW5kZXhPZignICcpICE9PSAtMSkge1xuICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgZGF0YS5pbmRleE9mKCcgJykpICsgJz4nO1xuICAgIH1cbiAgICB2YXIgbWVzc2FnZSA9ICd1bnBhcnNhYmxlIGNvbnRlbnQgJyArIChkYXRhID8gZGF0YSArICcgJyA6ICcnKSArICdkZXRlY3RlZFxcblxcdCcgKyAnbGluZTogJyArIGxpbmUgKyAnXFxuXFx0JyArICdjb2x1bW46ICcgKyBjb2x1bW4gKyAnXFxuXFx0JyArICduZXN0ZWQgZXJyb3I6ICcgKyBlcnIubWVzc2FnZTtcbiAgICBpZiAobGF4KSB7XG4gICAgICBjb250ZXh0LmFkZFdhcm5pbmcoe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlV2FybmluZyhlcnIsIGdldENvbnRleHQpIHtcbiAgICAvLyBqdXN0IGxpa2UgaGFuZGxpbmcgZXJyb3JzIGluIDxsYXg9dHJ1ZT4gbW9kZVxuICAgIHJldHVybiBoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgY29sbGVjdGVkIHJlZmVyZW5jZXMgb24gcGFyc2UgZW5kLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZVJlZmVyZW5jZXMoKSB7XG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IGNvbnRleHQuZWxlbWVudHNCeUlkO1xuICAgIHZhciByZWZlcmVuY2VzID0gY29udGV4dC5yZWZlcmVuY2VzO1xuICAgIHZhciBpLCByO1xuICAgIGZvciAoaSA9IDA7IHIgPSByZWZlcmVuY2VzW2ldOyBpKyspIHtcbiAgICAgIHZhciBlbGVtZW50ID0gci5lbGVtZW50O1xuICAgICAgdmFyIHJlZmVyZW5jZSA9IGVsZW1lbnRzQnlJZFtyLmlkXTtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCkucHJvcGVydGllc0J5TmFtZVtyLnByb3BlcnR5XTtcbiAgICAgIGlmICghcmVmZXJlbmNlKSB7XG4gICAgICAgIGNvbnRleHQuYWRkV2FybmluZyh7XG4gICAgICAgICAgbWVzc2FnZTogJ3VucmVzb2x2ZWQgcmVmZXJlbmNlIDwnICsgci5pZCArICc+JyxcbiAgICAgICAgICBlbGVtZW50OiByLmVsZW1lbnQsXG4gICAgICAgICAgcHJvcGVydHk6IHIucHJvcGVydHksXG4gICAgICAgICAgdmFsdWU6IHIuaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcGVydHkuaXNNYW55KSB7XG4gICAgICAgIHZhciBjb2xsZWN0aW9uID0gZWxlbWVudC5nZXQocHJvcGVydHkubmFtZSksXG4gICAgICAgICAgaWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKHIpO1xuXG4gICAgICAgIC8vIHdlIHJlcGxhY2UgYW4gZXhpc3RpbmcgcGxhY2UgaG9sZGVyIChpZHggIT0gLTEpIG9yXG4gICAgICAgIC8vIGFwcGVuZCB0byB0aGUgY29sbGVjdGlvbiBpbnN0ZWFkXG4gICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgaWR4ID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZWZlcmVuY2UpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdW5yZXNvbHZhYmxlIHJlZmVyZW5jZVxuICAgICAgICAgIGNvbGxlY3Rpb24uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWRkIG9yIHVwZGF0ZSByZWZlcmVuY2UgaW4gY29sbGVjdGlvblxuICAgICAgICAgIGNvbGxlY3Rpb25baWR4XSA9IHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXQocHJvcGVydHkubmFtZSwgcmVmZXJlbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgc3RhY2sucG9wKCkuaGFuZGxlRW5kKCk7XG4gIH1cbiAgdmFyIFBSRUFNQkxFX1NUQVJUX1BBVFRFUk4gPSAvXjxcXD94bWwgL2k7XG4gIHZhciBFTkNPRElOR19QQVRURVJOID0gLyBlbmNvZGluZz1cIihbXlwiXSspXCIvaTtcbiAgdmFyIFVURl84X1BBVFRFUk4gPSAvXnV0Zi04JC9pO1xuICBmdW5jdGlvbiBoYW5kbGVRdWVzdGlvbihxdWVzdGlvbikge1xuICAgIGlmICghUFJFQU1CTEVfU1RBUlRfUEFUVEVSTi50ZXN0KHF1ZXN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbWF0Y2ggPSBFTkNPRElOR19QQVRURVJOLmV4ZWMocXVlc3Rpb24pO1xuICAgIHZhciBlbmNvZGluZyA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIGlmICghZW5jb2RpbmcgfHwgVVRGXzhfUEFUVEVSTi50ZXN0KGVuY29kaW5nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZXh0LmFkZFdhcm5pbmcoe1xuICAgICAgbWVzc2FnZTogJ3Vuc3VwcG9ydGVkIGRvY3VtZW50IGVuY29kaW5nIDwnICsgZW5jb2RpbmcgKyAnPiwgJyArICdmYWxsaW5nIGJhY2sgdG8gVVRGLTgnXG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlT3Blbihub2RlLCBnZXRDb250ZXh0KSB7XG4gICAgdmFyIGhhbmRsZXIgPSBzdGFjay5wZWVrKCk7XG4gICAgdHJ5IHtcbiAgICAgIHN0YWNrLnB1c2goaGFuZGxlci5oYW5kbGVOb2RlKG5vZGUpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIGxheCkpIHtcbiAgICAgICAgc3RhY2sucHVzaChuZXcgTm9vcEhhbmRsZXIoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUNEYXRhKHRleHQsIGdldENvbnRleHQpIHtcbiAgICB0cnkge1xuICAgICAgc3RhY2sucGVlaygpLmhhbmRsZVRleHQodGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoYW5kbGVXYXJuaW5nKGVyciwgZ2V0Q29udGV4dCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZVRleHQodGV4dCwgZ2V0Q29udGV4dCkge1xuICAgIC8vIHN0cmlwIHdoaXRlc3BhY2Ugb25seSBub2RlcywgaS5lLiBiZWZvcmVcbiAgICAvLyA8IUNEQVRBWyAuLi4gXT4gc2VjdGlvbnMgYW5kIGluIGJldHdlZW4gdGFnc1xuXG4gICAgaWYgKCF0ZXh0LnRyaW0oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYW5kbGVDRGF0YSh0ZXh0LCBnZXRDb250ZXh0KTtcbiAgfVxuICB2YXIgdXJpTWFwID0gbW9kZWwuZ2V0UGFja2FnZXMoKS5yZWR1Y2UoZnVuY3Rpb24gKHVyaU1hcCwgcCkge1xuICAgIHVyaU1hcFtwLnVyaV0gPSBwLnByZWZpeDtcbiAgICByZXR1cm4gdXJpTWFwO1xuICB9LCBPYmplY3QuZW50cmllcyhERUZBVUxUX05TX01BUCkucmVkdWNlKGZ1bmN0aW9uIChtYXAsIFtwcmVmaXgsIHVybF0pIHtcbiAgICBtYXBbdXJsXSA9IHByZWZpeDtcbiAgICByZXR1cm4gbWFwO1xuICB9LCBtb2RlbC5jb25maWcgJiYgbW9kZWwuY29uZmlnLm5zTWFwIHx8IHt9KSk7XG4gIHBhcnNlci5ucyh1cmlNYXApLm9uKCdvcGVuVGFnJywgZnVuY3Rpb24gKG9iaiwgZGVjb2RlU3RyLCBzZWxmQ2xvc2luZywgZ2V0Q29udGV4dCkge1xuICAgIC8vIGdyYWNlZnVsbHkgaGFuZGxlIHVucGFyc2FibGUgYXR0cmlidXRlcyAoYXR0cnM9ZmFsc2UpXG4gICAgdmFyIGF0dHJzID0gb2JqLmF0dHJzIHx8IHt9O1xuICAgIHZhciBkZWNvZGVkQXR0cnMgPSBPYmplY3Qua2V5cyhhdHRycykucmVkdWNlKGZ1bmN0aW9uIChkLCBrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVN0cihhdHRyc1trZXldKTtcbiAgICAgIGRba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIGQ7XG4gICAgfSwge30pO1xuICAgIHZhciBub2RlID0ge1xuICAgICAgbmFtZTogb2JqLm5hbWUsXG4gICAgICBvcmlnaW5hbE5hbWU6IG9iai5vcmlnaW5hbE5hbWUsXG4gICAgICBhdHRyaWJ1dGVzOiBkZWNvZGVkQXR0cnMsXG4gICAgICBuczogb2JqLm5zXG4gICAgfTtcbiAgICBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpO1xuICB9KS5vbigncXVlc3Rpb24nLCBoYW5kbGVRdWVzdGlvbikub24oJ2Nsb3NlVGFnJywgaGFuZGxlQ2xvc2UpLm9uKCdjZGF0YScsIGhhbmRsZUNEYXRhKS5vbigndGV4dCcsIGZ1bmN0aW9uICh0ZXh0LCBkZWNvZGVFbnRpdGllcywgZ2V0Q29udGV4dCkge1xuICAgIGhhbmRsZVRleHQoZGVjb2RlRW50aXRpZXModGV4dCksIGdldENvbnRleHQpO1xuICB9KS5vbignZXJyb3InLCBoYW5kbGVFcnJvcikub24oJ3dhcm4nLCBoYW5kbGVXYXJuaW5nKTtcblxuICAvLyBhc3luYyBYTUwgcGFyc2luZyB0byBtYWtlIHN1cmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudFxuICAvLyAobm9kZSBvciBicm93ZXIpIGlzIGtlcHQgcmVzcG9uc2l2ZSBhbmQgdGhhdCBjZXJ0YWluIG9wdGltaXphdGlvblxuICAvLyBzdHJhdGVnaWVzIGNhbiBraWNrIGluLlxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBlcnI7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlci5wYXJzZSh4bWwpO1xuICAgICAgcmVzb2x2ZVJlZmVyZW5jZXMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnIgPSBlO1xuICAgIH1cbiAgICB2YXIgcm9vdEVsZW1lbnQgPSByb290SGFuZGxlci5lbGVtZW50O1xuICAgIGlmICghZXJyICYmICFyb290RWxlbWVudCkge1xuICAgICAgZXJyID0gZXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBkb2N1bWVudCBhcyA8JyArIHJvb3RIYW5kbGVyLnR5cGUuJGRlc2NyaXB0b3IubmFtZSArICc+Jyk7XG4gICAgfVxuICAgIHZhciB3YXJuaW5ncyA9IGNvbnRleHQud2FybmluZ3M7XG4gICAgdmFyIHJlZmVyZW5jZXMgPSBjb250ZXh0LnJlZmVyZW5jZXM7XG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IGNvbnRleHQuZWxlbWVudHNCeUlkO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci53YXJuaW5ncyA9IHdhcm5pbmdzO1xuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgIHJvb3RFbGVtZW50OiByb290RWxlbWVudCxcbiAgICAgICAgZWxlbWVudHNCeUlkOiBlbGVtZW50c0J5SWQsXG4gICAgICAgIHJlZmVyZW5jZXM6IHJlZmVyZW5jZXMsXG4gICAgICAgIHdhcm5pbmdzOiB3YXJuaW5nc1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5SZWFkZXIucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gbmV3IFJvb3RFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCBuYW1lKTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gY3JlYXRlU3RhY2soKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RhY2ssICdwZWVrJywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdGFjaztcbn1cbnZhciBYTUxfUFJFQU1CTEUgPSAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxuJztcbnZhciBFU0NBUEVfQVRUUl9DSEFSUyA9IC88fD58J3xcInwmfFxcblxccnxcXG4vZztcbnZhciBFU0NBUEVfQ0hBUlMgPSAvPHw+fCYvZztcbmZ1bmN0aW9uIE5hbWVzcGFjZXMocGFyZW50KSB7XG4gIHRoaXMucHJlZml4TWFwID0ge307XG4gIHRoaXMudXJpTWFwID0ge307XG4gIHRoaXMudXNlZCA9IHt9O1xuICB0aGlzLndlbGxrbm93biA9IFtdO1xuICB0aGlzLmN1c3RvbSA9IFtdO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5kZWZhdWx0UHJlZml4TWFwID0gcGFyZW50ICYmIHBhcmVudC5kZWZhdWx0UHJlZml4TWFwIHx8IHt9O1xufVxuTmFtZXNwYWNlcy5wcm90b3R5cGUubWFwRGVmYXVsdFByZWZpeGVzID0gZnVuY3Rpb24gKGRlZmF1bHRQcmVmaXhNYXApIHtcbiAgdGhpcy5kZWZhdWx0UHJlZml4TWFwID0gZGVmYXVsdFByZWZpeE1hcDtcbn07XG5OYW1lc3BhY2VzLnByb3RvdHlwZS5kZWZhdWx0VXJpQnlQcmVmaXggPSBmdW5jdGlvbiAocHJlZml4KSB7XG4gIHJldHVybiB0aGlzLmRlZmF1bHRQcmVmaXhNYXBbcHJlZml4XTtcbn07XG5OYW1lc3BhY2VzLnByb3RvdHlwZS5ieVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgcmV0dXJuIHRoaXMudXJpTWFwW3VyaV0gfHwgdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuYnlVcmkodXJpKTtcbn07XG5OYW1lc3BhY2VzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobnMsIGlzV2VsbGtub3duKSB7XG4gIHRoaXMudXJpTWFwW25zLnVyaV0gPSBucztcbiAgaWYgKGlzV2VsbGtub3duKSB7XG4gICAgdGhpcy53ZWxsa25vd24ucHVzaChucyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5jdXN0b20ucHVzaChucyk7XG4gIH1cbiAgdGhpcy5tYXBQcmVmaXgobnMucHJlZml4LCBucy51cmkpO1xufTtcbk5hbWVzcGFjZXMucHJvdG90eXBlLnVyaUJ5UHJlZml4ID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICByZXR1cm4gdGhpcy5wcmVmaXhNYXBbcHJlZml4IHx8ICd4bWxucyddIHx8IHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LnVyaUJ5UHJlZml4KHByZWZpeCk7XG59O1xuTmFtZXNwYWNlcy5wcm90b3R5cGUubWFwUHJlZml4ID0gZnVuY3Rpb24gKHByZWZpeCwgdXJpKSB7XG4gIHRoaXMucHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXSA9IHVyaTtcbn07XG5OYW1lc3BhY2VzLnByb3RvdHlwZS5nZXROU0tleSA9IGZ1bmN0aW9uIChucykge1xuICByZXR1cm4gbnMucHJlZml4ICE9PSB1bmRlZmluZWQgPyBucy51cmkgKyAnfCcgKyBucy5wcmVmaXggOiBucy51cmk7XG59O1xuTmFtZXNwYWNlcy5wcm90b3R5cGUubG9nVXNlZCA9IGZ1bmN0aW9uIChucykge1xuICB2YXIgdXJpID0gbnMudXJpO1xuICB2YXIgbnNLZXkgPSB0aGlzLmdldE5TS2V5KG5zKTtcbiAgdGhpcy51c2VkW25zS2V5XSA9IHRoaXMuYnlVcmkodXJpKTtcblxuICAvLyBJbmZvcm0gcGFyZW50IHJlY3Vyc2l2ZWx5IGFib3V0IHRoZSB1c2FnZSBvZiB0aGlzIE5TXG4gIGlmICh0aGlzLnBhcmVudCkge1xuICAgIHRoaXMucGFyZW50LmxvZ1VzZWQobnMpO1xuICB9XG59O1xuTmFtZXNwYWNlcy5wcm90b3R5cGUuZ2V0VXNlZCA9IGZ1bmN0aW9uIChucykge1xuICB2YXIgYWxsTnMgPSBbXS5jb25jYXQodGhpcy53ZWxsa25vd24sIHRoaXMuY3VzdG9tKTtcbiAgcmV0dXJuIGFsbE5zLmZpbHRlcihucyA9PiB7XG4gICAgdmFyIG5zS2V5ID0gdGhpcy5nZXROU0tleShucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlZFtuc0tleV07XG4gIH0pO1xufTtcbmZ1bmN0aW9uIGxvd2VyKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuZnVuY3Rpb24gbmFtZVRvQWxpYXMobmFtZSwgcGtnKSB7XG4gIGlmIChoYXNMb3dlckNhc2VBbGlhcyhwa2cpKSB7XG4gICAgcmV0dXJuIGxvd2VyKG5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBuc05hbWUobnMpIHtcbiAgaWYgKGlzU3RyaW5nKG5zKSkge1xuICAgIHJldHVybiBucztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKG5zLnByZWZpeCA/IG5zLnByZWZpeCArICc6JyA6ICcnKSArIG5zLmxvY2FsTmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TnNBdHRycyhuYW1lc3BhY2VzKSB7XG4gIHJldHVybiBuYW1lc3BhY2VzLmdldFVzZWQoKS5maWx0ZXIoZnVuY3Rpb24gKG5zKSB7XG4gICAgLy8gZG8gbm90IHNlcmlhbGl6ZSBidWlsdCBpbiA8eG1sPiBuYW1lc3BhY2VcbiAgICByZXR1cm4gbnMucHJlZml4ICE9PSAneG1sJztcbiAgfSkubWFwKGZ1bmN0aW9uIChucykge1xuICAgIHZhciBuYW1lID0gJ3htbG5zJyArIChucy5wcmVmaXggPyAnOicgKyBucy5wcmVmaXggOiAnJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogbnMudXJpXG4gICAgfTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50TnMobnMsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljKSB7XG4gICAgcmV0dXJuIGFzc2lnbih7XG4gICAgICBsb2NhbE5hbWU6IGRlc2NyaXB0b3IubnMubG9jYWxOYW1lXG4gICAgfSwgbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhc3NpZ24oe1xuICAgICAgbG9jYWxOYW1lOiBuYW1lVG9BbGlhcyhkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSwgZGVzY3JpcHRvci4kcGtnKVxuICAgIH0sIG5zKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UHJvcGVydHlOcyhucywgZGVzY3JpcHRvcikge1xuICByZXR1cm4gYXNzaWduKHtcbiAgICBsb2NhbE5hbWU6IGRlc2NyaXB0b3IubnMubG9jYWxOYW1lXG4gIH0sIG5zKTtcbn1cbmZ1bmN0aW9uIGdldFNlcmlhbGl6YWJsZVByb3BlcnRpZXMoZWxlbWVudCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuJGRlc2NyaXB0b3I7XG4gIHJldHVybiBmaWx0ZXIoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbiAocCkge1xuICAgIHZhciBuYW1lID0gcC5uYW1lO1xuICAgIGlmIChwLmlzVmlydHVhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgZGVmYXVsdHNcbiAgICBpZiAoIWhhcyhlbGVtZW50LCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50W25hbWVdO1xuXG4gICAgLy8gZG8gbm90IHNlcmlhbGl6ZSBkZWZhdWx0IGVxdWFsc1xuICAgIGlmICh2YWx1ZSA9PT0gcC5kZWZhdWx0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZG8gbm90IHNlcmlhbGl6ZSBudWxsIHByb3BlcnRpZXNcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHAuaXNNYW55ID8gdmFsdWUubGVuZ3RoIDogdHJ1ZTtcbiAgfSk7XG59XG52YXIgRVNDQVBFX0FUVFJfTUFQID0ge1xuICAnXFxuJzogJyMxMCcsXG4gICdcXG5cXHInOiAnIzEwJyxcbiAgJ1wiJzogJyMzNCcsXG4gICdcXCcnOiAnIzM5JyxcbiAgJzwnOiAnIzYwJyxcbiAgJz4nOiAnIzYyJyxcbiAgJyYnOiAnIzM4J1xufTtcbnZhciBFU0NBUEVfTUFQID0ge1xuICAnPCc6ICdsdCcsXG4gICc+JzogJ2d0JyxcbiAgJyYnOiAnYW1wJ1xufTtcbmZ1bmN0aW9uIGVzY2FwZShzdHIsIGNoYXJQYXR0ZXJuLCByZXBsYWNlTWFwKSB7XG4gIC8vIGVuc3VyZSB3ZSBhcmUgaGFuZGxpbmcgc3RyaW5ncyBoZXJlXG4gIHN0ciA9IGlzU3RyaW5nKHN0cikgPyBzdHIgOiAnJyArIHN0cjtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGNoYXJQYXR0ZXJuLCBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiAnJicgKyByZXBsYWNlTWFwW3NdICsgJzsnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgYXR0cmlidXRlIHRvIG5vdCBjb250YWluIGFueSBiYWQgdmFsdWVzIChsaW5lIGJyZWFrcywgJ1wiJywgLi4uKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBlc2NhcGVcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUF0dHIoc3RyKSB7XG4gIHJldHVybiBlc2NhcGUoc3RyLCBFU0NBUEVfQVRUUl9DSEFSUywgRVNDQVBFX0FUVFJfTUFQKTtcbn1cbmZ1bmN0aW9uIGVzY2FwZUJvZHkoc3RyKSB7XG4gIHJldHVybiBlc2NhcGUoc3RyLCBFU0NBUEVfQ0hBUlMsIEVTQ0FQRV9NQVApO1xufVxuZnVuY3Rpb24gZmlsdGVyQXR0cmlidXRlcyhwcm9wcykge1xuICByZXR1cm4gZmlsdGVyKHByb3BzLCBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwLmlzQXR0cjtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJDb250YWluZWQocHJvcHMpIHtcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gIXAuaXNBdHRyO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFJlZmVyZW5jZVNlcmlhbGl6ZXIodGFnTmFtZSkge1xuICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lO1xufVxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICByZXR1cm4gdGhpcztcbn07XG5SZWZlcmVuY2VTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uICh3cml0ZXIpIHtcbiAgd3JpdGVyLmFwcGVuZEluZGVudCgpLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUgKyAnPicgKyB0aGlzLmVsZW1lbnQuaWQgKyAnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKS5hcHBlbmROZXdMaW5lKCk7XG59O1xuZnVuY3Rpb24gQm9keVNlcmlhbGl6ZXIoKSB7fVxuQm9keVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVZhbHVlID0gQm9keVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24gKHdyaXRlcikge1xuICB3cml0ZXIuYXBwZW5kKHRoaXMuZXNjYXBlID8gZXNjYXBlQm9keSh0aGlzLnZhbHVlKSA6IHRoaXMudmFsdWUpO1xufTtcbkJvZHlTZXJpYWxpemVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uIChwcm9wLCB2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIGlmIChwcm9wLnR5cGUgPT09ICdTdHJpbmcnICYmIHZhbHVlLnNlYXJjaChFU0NBUEVfQ0hBUlMpICE9PSAtMSkge1xuICAgIHRoaXMuZXNjYXBlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5mdW5jdGlvbiBWYWx1ZVNlcmlhbGl6ZXIodGFnTmFtZSkge1xuICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lO1xufVxuaW5oZXJpdHMoVmFsdWVTZXJpYWxpemVyLCBCb2R5U2VyaWFsaXplcik7XG5WYWx1ZVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24gKHdyaXRlcikge1xuICB3cml0ZXIuYXBwZW5kSW5kZW50KCkuYXBwZW5kKCc8JyArIHRoaXMudGFnTmFtZSArICc+Jyk7XG4gIHRoaXMuc2VyaWFsaXplVmFsdWUod3JpdGVyKTtcbiAgd3JpdGVyLmFwcGVuZCgnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKS5hcHBlbmROZXdMaW5lKCk7XG59O1xuZnVuY3Rpb24gRWxlbWVudFNlcmlhbGl6ZXIocGFyZW50LCBwcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgdGhpcy5ib2R5ID0gW107XG4gIHRoaXMuYXR0cnMgPSBbXTtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMucHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yO1xufVxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgdmFyIGVsZW1lbnREZXNjcmlwdG9yID0gZWxlbWVudC4kZGVzY3JpcHRvcixcbiAgICBwcm9wZXJ0eURlc2NyaXB0b3IgPSB0aGlzLnByb3BlcnR5RGVzY3JpcHRvcjtcbiAgdmFyIG90aGVyQXR0cnMsIHByb3BlcnRpZXM7XG4gIHZhciBpc0dlbmVyaWMgPSBlbGVtZW50RGVzY3JpcHRvci5pc0dlbmVyaWM7XG4gIGlmIChpc0dlbmVyaWMpIHtcbiAgICBvdGhlckF0dHJzID0gdGhpcy5wYXJzZUdlbmVyaWNOc0F0dHJpYnV0ZXMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgb3RoZXJBdHRycyA9IHRoaXMucGFyc2VOc0F0dHJpYnV0ZXMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKHByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHRoaXMubnMgPSB0aGlzLm5zUHJvcGVydHlUYWdOYW1lKHByb3BlcnR5RGVzY3JpcHRvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5ucyA9IHRoaXMubnNUYWdOYW1lKGVsZW1lbnREZXNjcmlwdG9yKTtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgdGFnIG5hbWVcbiAgdGhpcy50YWdOYW1lID0gdGhpcy5hZGRUYWdOYW1lKHRoaXMubnMpO1xuICBpZiAoaXNHZW5lcmljKSB7XG4gICAgdGhpcy5wYXJzZUdlbmVyaWNDb250YWlubWVudHMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcyA9IGdldFNlcmlhbGl6YWJsZVByb3BlcnRpZXMoZWxlbWVudCk7XG4gICAgdGhpcy5wYXJzZUF0dHJpYnV0ZXMoZmlsdGVyQXR0cmlidXRlcyhwcm9wZXJ0aWVzKSk7XG4gICAgdGhpcy5wYXJzZUNvbnRhaW5tZW50cyhmaWx0ZXJDb250YWluZWQocHJvcGVydGllcykpO1xuICB9XG4gIHRoaXMucGFyc2VHZW5lcmljQXR0cmlidXRlcyhlbGVtZW50LCBvdGhlckF0dHJzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLm5zVGFnTmFtZSA9IGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKTtcbiAgcmV0dXJuIGdldEVsZW1lbnROcyhlZmZlY3RpdmVOcywgZGVzY3JpcHRvcik7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLm5zUHJvcGVydHlUYWdOYW1lID0gZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcbiAgdmFyIGVmZmVjdGl2ZU5zID0gdGhpcy5sb2dOYW1lc3BhY2VVc2VkKGRlc2NyaXB0b3IubnMpO1xuICByZXR1cm4gZ2V0UHJvcGVydHlOcyhlZmZlY3RpdmVOcywgZGVzY3JpcHRvcik7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmlzTG9jYWxOcyA9IGZ1bmN0aW9uIChucykge1xuICByZXR1cm4gbnMudXJpID09PSB0aGlzLm5zLnVyaTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBhY3R1YWwgbnMgYXR0cmlidXRlIG5hbWUgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtlbGVtZW50LmluaGVyaXRlZD1mYWxzZV1cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG5zTmFtZVxuICovXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubnNBdHRyaWJ1dGVOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdmFyIG5zO1xuICBpZiAoaXNTdHJpbmcoZWxlbWVudCkpIHtcbiAgICBucyA9IHBhcnNlTmFtZShlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBucyA9IGVsZW1lbnQubnM7XG4gIH1cblxuICAvLyByZXR1cm4ganVzdCBsb2NhbCBuYW1lIGZvciBpbmhlcml0ZWQgYXR0cmlidXRlc1xuICBpZiAoZWxlbWVudC5pbmhlcml0ZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWVcbiAgICB9O1xuICB9XG5cbiAgLy8gcGFyc2UgKyBsb2cgZWZmZWN0aXZlIG5zXG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucyk7XG5cbiAgLy8gTE9HIEFDVFVBTCBuYW1lc3BhY2UgdXNlXG4gIHRoaXMuZ2V0TmFtZXNwYWNlcygpLmxvZ1VzZWQoZWZmZWN0aXZlTnMpO1xuXG4gIC8vIHN0cmlwIHByZWZpeCBpZiBzYW1lIG5hbWVzcGFjZSBsaWtlIHBhcmVudFxuICBpZiAodGhpcy5pc0xvY2FsTnMoZWZmZWN0aXZlTnMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsTmFtZTogbnMubG9jYWxOYW1lXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXNzaWduKHtcbiAgICAgIGxvY2FsTmFtZTogbnMubG9jYWxOYW1lXG4gICAgfSwgZWZmZWN0aXZlTnMpO1xuICB9XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlR2VuZXJpY05zQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlbGVtZW50KS5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gIWtleS5zdGFydHNXaXRoKCckJykgJiYgdGhpcy5wYXJzZU5zQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICBuYW1lOiBrZXksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pKTtcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VHZW5lcmljQ29udGFpbm1lbnRzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdmFyIGJvZHkgPSBlbGVtZW50LiRib2R5O1xuICBpZiAoYm9keSkge1xuICAgIHRoaXMuYm9keS5wdXNoKG5ldyBCb2R5U2VyaWFsaXplcigpLmJ1aWxkKHtcbiAgICAgIHR5cGU6ICdTdHJpbmcnXG4gICAgfSwgYm9keSkpO1xuICB9XG4gIHZhciBjaGlsZHJlbiA9IGVsZW1lbnQuJGNoaWxkcmVuO1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICBmb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICB0aGlzLmJvZHkucHVzaChuZXcgRWxlbWVudFNlcmlhbGl6ZXIodGhpcykuYnVpbGQoY2hpbGQpKTtcbiAgICB9KTtcbiAgfVxufTtcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZU5zQXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBtb2RlbCA9IGVsZW1lbnQuJG1vZGVsO1xuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpO1xuICB2YXIgbnM7XG5cbiAgLy8gcGFyc2UgeG1sbnM6Zm9vPVwiaHR0cDovL2Zvby5iYXJcIlxuICBpZiAobmFtZU5zLnByZWZpeCA9PT0gJ3htbG5zJykge1xuICAgIG5zID0ge1xuICAgICAgcHJlZml4OiBuYW1lTnMubG9jYWxOYW1lLFxuICAgICAgdXJpOiB2YWx1ZVxuICAgIH07XG4gIH1cblxuICAvLyBwYXJzZSB4bWxucz1cImh0dHA6Ly9mb28uYmFyXCJcbiAgaWYgKCFuYW1lTnMucHJlZml4ICYmIG5hbWVOcy5sb2NhbE5hbWUgPT09ICd4bWxucycpIHtcbiAgICBucyA9IHtcbiAgICAgIHVyaTogdmFsdWVcbiAgICB9O1xuICB9XG4gIGlmICghbnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH07XG4gIH1cbiAgaWYgKG1vZGVsICYmIG1vZGVsLmdldFBhY2thZ2UodmFsdWUpKSB7XG4gICAgLy8gcmVnaXN0ZXIgd2VsbCBrbm93biBuYW1lc3BhY2VcbiAgICB0aGlzLmxvZ05hbWVzcGFjZShucywgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbG9nIGN1c3RvbSBuYW1lc3BhY2UgZGlyZWN0bHkgYXMgdXNlZFxuICAgIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucywgdHJ1ZSk7XG4gICAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZChhY3R1YWxOcyk7XG4gIH1cbn07XG5cbi8qKlxuICogUGFyc2UgbmFtZXNwYWNlcyBhbmQgcmV0dXJuIGEgbGlzdCBvZiBsZWZ0IG92ZXIgZ2VuZXJpYyBhdHRyaWJ1dGVzXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fVxuICovXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBnZW5lcmljQXR0cnMgPSBlbGVtZW50LiRhdHRycztcbiAgdmFyIGF0dHJpYnV0ZXMgPSBbXTtcblxuICAvLyBwYXJzZSBuYW1lc3BhY2UgYXR0cmlidXRlcyBmaXJzdFxuICAvLyBhbmQgbG9nIHRoZW0uIHB1c2ggbm9uIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIHRvIGEgbGlzdFxuICAvLyBhbmQgcHJvY2VzcyB0aGVtIGxhdGVyXG4gIGZvckVhY2goZ2VuZXJpY0F0dHJzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICB2YXIgbm9uTnNBdHRyID0gc2VsZi5wYXJzZU5zQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICBpZiAobm9uTnNBdHRyKSB7XG4gICAgICBhdHRyaWJ1dGVzLnB1c2gobm9uTnNBdHRyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXR0cmlidXRlcztcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VHZW5lcmljQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChlbGVtZW50LCBhdHRyaWJ1dGVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZm9yRWFjaChhdHRyaWJ1dGVzLCBmdW5jdGlvbiAoYXR0cikge1xuICAgIHRyeSB7XG4gICAgICBzZWxmLmFkZEF0dHJpYnV0ZShzZWxmLm5zQXR0cmlidXRlTmFtZShhdHRyLm5hbWUpLCBhdHRyLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4oYG1pc3NpbmcgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGZvciA8JHthdHRyLm5hbWV9PSR7YXR0ci52YWx1ZX0+IG9uYCwgZWxlbWVudCwgZSk7XG4gICAgfVxuICB9KTtcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VDb250YWlubWVudHMgPSBmdW5jdGlvbiAocHJvcGVydGllcykge1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgYm9keSA9IHRoaXMuYm9keSxcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChwKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXQocC5uYW1lKSxcbiAgICAgIGlzUmVmZXJlbmNlID0gcC5pc1JlZmVyZW5jZSxcbiAgICAgIGlzTWFueSA9IHAuaXNNYW55O1xuICAgIGlmICghaXNNYW55KSB7XG4gICAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgfVxuICAgIGlmIChwLmlzQm9keSkge1xuICAgICAgYm9keS5wdXNoKG5ldyBCb2R5U2VyaWFsaXplcigpLmJ1aWxkKHAsIHZhbHVlWzBdKSk7XG4gICAgfSBlbHNlIGlmIChpc1NpbXBsZShwLnR5cGUpKSB7XG4gICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICBib2R5LnB1c2gobmV3IFZhbHVlU2VyaWFsaXplcihzZWxmLmFkZFRhZ05hbWUoc2VsZi5uc1Byb3BlcnR5VGFnTmFtZShwKSkpLmJ1aWxkKHAsIHYpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNSZWZlcmVuY2UpIHtcbiAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGJvZHkucHVzaChuZXcgUmVmZXJlbmNlU2VyaWFsaXplcihzZWxmLmFkZFRhZ05hbWUoc2VsZi5uc1Byb3BlcnR5VGFnTmFtZShwKSkpLmJ1aWxkKHYpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhbGxvdyBzZXJpYWxpemF0aW9uIHZpYSB0eXBlXG4gICAgICAvLyByYXRoZXIgdGhhbiBlbGVtZW50IG5hbWVcbiAgICAgIHZhciBzZXJpYWxpemF0aW9uID0gZ2V0U2VyaWFsaXphdGlvbihwKTtcbiAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHZhciBzZXJpYWxpemVyO1xuICAgICAgICBpZiAoc2VyaWFsaXphdGlvbikge1xuICAgICAgICAgIGlmIChzZXJpYWxpemF0aW9uID09PSBTRVJJQUxJWkVfUFJPUEVSVFkpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZiwgcCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgVHlwZVNlcmlhbGl6ZXIoc2VsZiwgcCwgc2VyaWFsaXphdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgYm9keS5wdXNoKHNlcmlhbGl6ZXIuYnVpbGQodikpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlcyA9IGZ1bmN0aW9uIChsb2NhbCkge1xuICB2YXIgbmFtZXNwYWNlcyA9IHRoaXMubmFtZXNwYWNlcyxcbiAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICBwYXJlbnROYW1lc3BhY2VzO1xuICBpZiAoIW5hbWVzcGFjZXMpIHtcbiAgICBwYXJlbnROYW1lc3BhY2VzID0gcGFyZW50ICYmIHBhcmVudC5nZXROYW1lc3BhY2VzKCk7XG4gICAgaWYgKGxvY2FsIHx8ICFwYXJlbnROYW1lc3BhY2VzKSB7XG4gICAgICB0aGlzLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzID0gbmV3IE5hbWVzcGFjZXMocGFyZW50TmFtZXNwYWNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWVzcGFjZXMgPSBwYXJlbnROYW1lc3BhY2VzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNwYWNlcztcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubG9nTmFtZXNwYWNlID0gZnVuY3Rpb24gKG5zLCB3ZWxsa25vd24sIGxvY2FsKSB7XG4gIHZhciBuYW1lc3BhY2VzID0gdGhpcy5nZXROYW1lc3BhY2VzKGxvY2FsKTtcbiAgdmFyIG5zVXJpID0gbnMudXJpLFxuICAgIG5zUHJlZml4ID0gbnMucHJlZml4O1xuICB2YXIgZXhpc3RpbmcgPSBuYW1lc3BhY2VzLmJ5VXJpKG5zVXJpKTtcbiAgaWYgKCFleGlzdGluZyB8fCBsb2NhbCkge1xuICAgIG5hbWVzcGFjZXMuYWRkKG5zLCB3ZWxsa25vd24pO1xuICB9XG4gIG5hbWVzcGFjZXMubWFwUHJlZml4KG5zUHJlZml4LCBuc1VyaSk7XG4gIHJldHVybiBucztcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubG9nTmFtZXNwYWNlVXNlZCA9IGZ1bmN0aW9uIChucywgbG9jYWwpIHtcbiAgdmFyIG5hbWVzcGFjZXMgPSB0aGlzLmdldE5hbWVzcGFjZXMobG9jYWwpO1xuXG4gIC8vIG5zIG1heSBiZVxuICAvL1xuICAvLyAgICogcHJlZml4IG9ubHlcbiAgLy8gICAqIHByZWZpeDp1cmlcbiAgLy8gICAqIGxvY2FsTmFtZSBvbmx5XG5cbiAgdmFyIHByZWZpeCA9IG5zLnByZWZpeCxcbiAgICB1cmkgPSBucy51cmksXG4gICAgbmV3UHJlZml4LFxuICAgIGlkeCxcbiAgICB3ZWxsa25vd25Vcmk7XG5cbiAgLy8gaGFuZGxlIGFub255bW91cyBuYW1lc3BhY2VzIChlbGVtZW50Rm9ybT11bnF1YWxpZmllZCksIGNmLiAjMjNcbiAgaWYgKCFwcmVmaXggJiYgIXVyaSkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2NhbE5hbWU6IG5zLmxvY2FsTmFtZVxuICAgIH07XG4gIH1cbiAgd2VsbGtub3duVXJpID0gbmFtZXNwYWNlcy5kZWZhdWx0VXJpQnlQcmVmaXgocHJlZml4KTtcbiAgdXJpID0gdXJpIHx8IHdlbGxrbm93blVyaSB8fCBuYW1lc3BhY2VzLnVyaUJ5UHJlZml4KHByZWZpeCk7XG4gIGlmICghdXJpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBuYW1lc3BhY2UgdXJpIGdpdmVuIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPicpO1xuICB9XG4gIG5zID0gbmFtZXNwYWNlcy5ieVVyaSh1cmkpO1xuXG4gIC8vIHJlZ2lzdGVyIG5ldyBkZWZhdWx0IHByZWZpeCA8eG1sbnM+IGluIGxvY2FsIHNjb3BlXG4gIGlmICghbnMgJiYgIXByZWZpeCkge1xuICAgIG5zID0gdGhpcy5sb2dOYW1lc3BhY2Uoe1xuICAgICAgdXJpXG4gICAgfSwgd2VsbGtub3duVXJpID09PSB1cmksIHRydWUpO1xuICB9XG4gIGlmICghbnMpIHtcbiAgICBuZXdQcmVmaXggPSBwcmVmaXg7XG4gICAgaWR4ID0gMTtcblxuICAgIC8vIGZpbmQgYSBwcmVmaXggdGhhdCBpcyBub3QgbWFwcGVkIHlldFxuICAgIHdoaWxlIChuYW1lc3BhY2VzLnVyaUJ5UHJlZml4KG5ld1ByZWZpeCkpIHtcbiAgICAgIG5ld1ByZWZpeCA9IHByZWZpeCArICdfJyArIGlkeCsrO1xuICAgIH1cbiAgICBucyA9IHRoaXMubG9nTmFtZXNwYWNlKHtcbiAgICAgIHByZWZpeDogbmV3UHJlZml4LFxuICAgICAgdXJpOiB1cmlcbiAgICB9LCB3ZWxsa25vd25VcmkgPT09IHVyaSk7XG4gIH1cbiAgaWYgKHByZWZpeCkge1xuICAgIG5hbWVzcGFjZXMubWFwUHJlZml4KHByZWZpeCwgdXJpKTtcbiAgfVxuICByZXR1cm4gbnM7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gIHZhciBzZWxmID0gdGhpcyxcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChwKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXQocC5uYW1lKTtcbiAgICBpZiAocC5pc1JlZmVyZW5jZSkge1xuICAgICAgaWYgKCFwLmlzTWFueSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHYuaWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJRFJFRlMgaXMgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHJlZmVyZW5jZXMuXG4gICAgICAgIHZhbHVlID0gdmFsdWVzLmpvaW4oJyAnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5hZGRBdHRyaWJ1dGUoc2VsZi5uc0F0dHJpYnV0ZU5hbWUocCksIHZhbHVlKTtcbiAgfSk7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZFRhZ05hbWUgPSBmdW5jdGlvbiAobnNUYWdOYW1lKSB7XG4gIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChuc1RhZ05hbWUpO1xuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGFjdHVhbE5zKTtcbiAgcmV0dXJuIG5zTmFtZShuc1RhZ05hbWUpO1xufTtcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdmFyIGF0dHJzID0gdGhpcy5hdHRycztcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhbHVlID0gZXNjYXBlQXR0cih2YWx1ZSk7XG4gIH1cblxuICAvLyBkZS1kdXBsaWNhdGUgYXR0cmlidXRlc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9tb2RkbGUteG1sL2lzc3Vlcy82NlxuICB2YXIgaWR4ID0gZmluZEluZGV4KGF0dHJzLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm5hbWUubG9jYWxOYW1lID09PSBuYW1lLmxvY2FsTmFtZSAmJiBlbGVtZW50Lm5hbWUudXJpID09PSBuYW1lLnVyaSAmJiBlbGVtZW50Lm5hbWUucHJlZml4ID09PSBuYW1lLnByZWZpeDtcbiAgfSk7XG4gIHZhciBhdHRyID0ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG4gIGlmIChpZHggIT09IC0xKSB7XG4gICAgYXR0cnMuc3BsaWNlKGlkeCwgMSwgYXR0cik7XG4gIH0gZWxzZSB7XG4gICAgYXR0cnMucHVzaChhdHRyKTtcbiAgfVxufTtcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHdyaXRlcikge1xuICB2YXIgYXR0cnMgPSB0aGlzLmF0dHJzLFxuICAgIG5hbWVzcGFjZXMgPSB0aGlzLm5hbWVzcGFjZXM7XG4gIGlmIChuYW1lc3BhY2VzKSB7XG4gICAgYXR0cnMgPSBnZXROc0F0dHJzKG5hbWVzcGFjZXMpLmNvbmNhdChhdHRycyk7XG4gIH1cbiAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGEpIHtcbiAgICB3cml0ZXIuYXBwZW5kKCcgJykuYXBwZW5kKG5zTmFtZShhLm5hbWUpKS5hcHBlbmQoJz1cIicpLmFwcGVuZChhLnZhbHVlKS5hcHBlbmQoJ1wiJyk7XG4gIH0pO1xufTtcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uICh3cml0ZXIpIHtcbiAgdmFyIGZpcnN0Qm9keSA9IHRoaXMuYm9keVswXSxcbiAgICBpbmRlbnQgPSBmaXJzdEJvZHkgJiYgZmlyc3RCb2R5LmNvbnN0cnVjdG9yICE9PSBCb2R5U2VyaWFsaXplcjtcbiAgd3JpdGVyLmFwcGVuZEluZGVudCgpLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUpO1xuICB0aGlzLnNlcmlhbGl6ZUF0dHJpYnV0ZXMod3JpdGVyKTtcbiAgd3JpdGVyLmFwcGVuZChmaXJzdEJvZHkgPyAnPicgOiAnIC8+Jyk7XG4gIGlmIChmaXJzdEJvZHkpIHtcbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICB3cml0ZXIuYXBwZW5kTmV3TGluZSgpLmluZGVudCgpO1xuICAgIH1cbiAgICBmb3JFYWNoKHRoaXMuYm9keSwgZnVuY3Rpb24gKGIpIHtcbiAgICAgIGIuc2VyaWFsaXplVG8od3JpdGVyKTtcbiAgICB9KTtcbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICB3cml0ZXIudW5pbmRlbnQoKS5hcHBlbmRJbmRlbnQoKTtcbiAgICB9XG4gICAgd3JpdGVyLmFwcGVuZCgnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKTtcbiAgfVxuICB3cml0ZXIuYXBwZW5kTmV3TGluZSgpO1xufTtcblxuLyoqXG4gKiBBIHNlcmlhbGl6ZXIgZm9yIHR5cGVzIHRoYXQgaGFuZGxlcyBzZXJpYWxpemF0aW9uIG9mIGRhdGEgdHlwZXNcbiAqL1xuZnVuY3Rpb24gVHlwZVNlcmlhbGl6ZXIocGFyZW50LCBwcm9wZXJ0eURlc2NyaXB0b3IsIHNlcmlhbGl6YXRpb24pIHtcbiAgRWxlbWVudFNlcmlhbGl6ZXIuY2FsbCh0aGlzLCBwYXJlbnQsIHByb3BlcnR5RGVzY3JpcHRvcik7XG4gIHRoaXMuc2VyaWFsaXphdGlvbiA9IHNlcmlhbGl6YXRpb247XG59XG5pbmhlcml0cyhUeXBlU2VyaWFsaXplciwgRWxlbWVudFNlcmlhbGl6ZXIpO1xuVHlwZVNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgLy8gZXh0cmFjdGVkIGF0dHJpYnV0ZXMgd2l0aCBzZXJpYWxpemF0aW9uIGF0dHJpYnV0ZVxuICAvLyA8dHlwZT10eXBlTmFtZT4gc3RyaXBwZWQ7IGl0IG1heSBiZSBsYXRlclxuICB2YXIgYXR0cmlidXRlcyA9IEVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZU5zQXR0cmlidXRlcy5jYWxsKHRoaXMsIGVsZW1lbnQpLmZpbHRlcihhdHRyID0+IGF0dHIubmFtZSAhPT0gdGhpcy5zZXJpYWxpemF0aW9uKTtcbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRkZXNjcmlwdG9yO1xuXG4gIC8vIG9ubHkgc2VyaWFsaXplIDx0eXBlPXR5cGVOYW1lPiBpZiBuZWNlc3NhcnlcbiAgaWYgKGRlc2NyaXB0b3IubmFtZSA9PT0gdGhpcy5wcm9wZXJ0eURlc2NyaXB0b3IudHlwZSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9XG4gIHZhciB0eXBlTnMgPSB0aGlzLnR5cGVOcyA9IHRoaXMubnNUYWdOYW1lKGRlc2NyaXB0b3IpO1xuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKHRoaXMudHlwZU5zKTtcblxuICAvLyBhZGQgeHNpOnR5cGUgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgZWxlbWVudHNcbiAgLy8gYWN0dWFsIHR5cGVcblxuICB2YXIgcGtnID0gZWxlbWVudC4kbW9kZWwuZ2V0UGFja2FnZSh0eXBlTnMudXJpKSxcbiAgICB0eXBlUHJlZml4ID0gcGtnLnhtbCAmJiBwa2cueG1sLnR5cGVQcmVmaXggfHwgJyc7XG4gIHRoaXMuYWRkQXR0cmlidXRlKHRoaXMubnNBdHRyaWJ1dGVOYW1lKHRoaXMuc2VyaWFsaXphdGlvbiksICh0eXBlTnMucHJlZml4ID8gdHlwZU5zLnByZWZpeCArICc6JyA6ICcnKSArIHR5cGVQcmVmaXggKyBkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSk7XG4gIHJldHVybiBhdHRyaWJ1dGVzO1xufTtcblR5cGVTZXJpYWxpemVyLnByb3RvdHlwZS5pc0xvY2FsTnMgPSBmdW5jdGlvbiAobnMpIHtcbiAgcmV0dXJuIG5zLnVyaSA9PT0gKHRoaXMudHlwZU5zIHx8IHRoaXMubnMpLnVyaTtcbn07XG5mdW5jdGlvbiBTYXZpbmdXcml0ZXIoKSB7XG4gIHRoaXMudmFsdWUgPSAnJztcbiAgdGhpcy53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB0aGlzLnZhbHVlICs9IHN0cjtcbiAgfTtcbn1cbmZ1bmN0aW9uIEZvcm1hdGluZ1dyaXRlcihvdXQsIGZvcm1hdCkge1xuICB2YXIgaW5kZW50ID0gWycnXTtcbiAgdGhpcy5hcHBlbmQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgb3V0LndyaXRlKHN0cik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHRoaXMuYXBwZW5kTmV3TGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBvdXQud3JpdGUoJ1xcbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgdGhpcy5hcHBlbmRJbmRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgb3V0LndyaXRlKGluZGVudC5qb2luKCcgICcpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHRoaXMuaW5kZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIGluZGVudC5wdXNoKCcnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgdGhpcy51bmluZGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpbmRlbnQucG9wKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59XG5cbi8qKlxuICogQSB3cml0ZXIgZm9yIG1ldGEtbW9kZWwgYmFja2VkIGRvY3VtZW50IHRyZWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgb3V0cHV0IG9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSB3cml0ZXJcbiAqL1xuZnVuY3Rpb24gV3JpdGVyKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGFzc2lnbih7XG4gICAgZm9ybWF0OiBmYWxzZSxcbiAgICBwcmVhbWJsZTogdHJ1ZVxuICB9LCBvcHRpb25zIHx8IHt9KTtcbiAgZnVuY3Rpb24gdG9YTUwodHJlZSwgd3JpdGVyKSB7XG4gICAgdmFyIGludGVybmFsV3JpdGVyID0gd3JpdGVyIHx8IG5ldyBTYXZpbmdXcml0ZXIoKTtcbiAgICB2YXIgZm9ybWF0aW5nV3JpdGVyID0gbmV3IEZvcm1hdGluZ1dyaXRlcihpbnRlcm5hbFdyaXRlciwgb3B0aW9ucy5mb3JtYXQpO1xuICAgIGlmIChvcHRpb25zLnByZWFtYmxlKSB7XG4gICAgICBmb3JtYXRpbmdXcml0ZXIuYXBwZW5kKFhNTF9QUkVBTUJMRSk7XG4gICAgfVxuICAgIHZhciBzZXJpYWxpemVyID0gbmV3IEVsZW1lbnRTZXJpYWxpemVyKCk7XG4gICAgdmFyIG1vZGVsID0gdHJlZS4kbW9kZWw7XG4gICAgc2VyaWFsaXplci5nZXROYW1lc3BhY2VzKCkubWFwRGVmYXVsdFByZWZpeGVzKGdldERlZmF1bHRQcmVmaXhNYXBwaW5ncyhtb2RlbCkpO1xuICAgIHNlcmlhbGl6ZXIuYnVpbGQodHJlZSkuc2VyaWFsaXplVG8oZm9ybWF0aW5nV3JpdGVyKTtcbiAgICBpZiAoIXdyaXRlcikge1xuICAgICAgcmV0dXJuIGludGVybmFsV3JpdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHRvWE1MOiB0b1hNTFxuICB9O1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vXG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGVsXG4gKlxuICogQHJldHVybiB7IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSBtYXAgZnJvbSBwcmVmaXggdG8gVVJJXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmVmaXhNYXBwaW5ncyhtb2RlbCkge1xuICBjb25zdCBuc01hcCA9IG1vZGVsLmNvbmZpZyAmJiBtb2RlbC5jb25maWcubnNNYXAgfHwge307XG4gIGNvbnN0IHByZWZpeE1hcCA9IHt9O1xuXG4gIC8vIHsgcHJlZml4IC0+IHVyaSB9XG4gIGZvciAoY29uc3QgcHJlZml4IGluIERFRkFVTFRfTlNfTUFQKSB7XG4gICAgcHJlZml4TWFwW3ByZWZpeF0gPSBERUZBVUxUX05TX01BUFtwcmVmaXhdO1xuICB9XG5cbiAgLy8geyB1cmkgLT4gcHJlZml4IH1cbiAgZm9yIChjb25zdCB1cmkgaW4gbnNNYXApIHtcbiAgICBjb25zdCBwcmVmaXggPSBuc01hcFt1cmldO1xuICAgIHByZWZpeE1hcFtwcmVmaXhdID0gdXJpO1xuICB9XG4gIGZvciAoY29uc3QgcGtnIG9mIG1vZGVsLmdldFBhY2thZ2VzKCkpIHtcbiAgICBwcmVmaXhNYXBbcGtnLnByZWZpeF0gPSBwa2cudXJpO1xuICB9XG4gIHJldHVybiBwcmVmaXhNYXA7XG59XG5cbi8qKlxuICogQSBzdWIgY2xhc3Mgb2Yge0BsaW5rIE1vZGRsZX0gd2l0aCBzdXBwb3J0IGZvciBpbXBvcnQgYW5kIGV4cG9ydCBvZiBCUE1OIDIuMCB4bWwgZmlsZXMuXG4gKlxuICogQGNsYXNzIEJwbW5Nb2RkbGVcbiAqIEBleHRlbmRzIE1vZGRsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBwYWNrYWdlcyB0byB1c2UgZm9yIGluc3RhbnRpYXRpbmcgdGhlIG1vZGVsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBwYXNzIG92ZXJcbiAqL1xuZnVuY3Rpb24gQnBtbk1vZGRsZShwYWNrYWdlcywgb3B0aW9ucykge1xuICBNb2RkbGUuY2FsbCh0aGlzLCBwYWNrYWdlcywgb3B0aW9ucyk7XG59XG5CcG1uTW9kZGxlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9kZGxlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtNb2RkbGVFbGVtZW50fSByb290RWxlbWVudFxuICogQHByb3BlcnR5IHtBcnJheTxPYmplY3Q+fSByZWZlcmVuY2VzXG4gKiBAcHJvcGVydHkge0FycmF5PEVycm9yPn0gd2FybmluZ3NcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbGVtZW50c0J5SWQgLSBhIG1hcHBpbmcgY29udGFpbmluZyBlYWNoIElEIC0+IE1vZGRsZUVsZW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBmcm9tWE1MIGVycm9yLlxuICpcbiAqIEB0eXBlZGVmIHtFcnJvcn0gUGFyc2VFcnJvclxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogSW5zdGFudGlhdGVzIGEgQlBNTiBtb2RlbCB0cmVlIGZyb20gYSBnaXZlbiB4bWwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIHhtbFN0clxuICogQHBhcmFtIHtTdHJpbmd9ICAgW3R5cGVOYW1lPSdicG1uOkRlZmluaXRpb25zJ10gbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyByZWFkZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZVJlc3VsdCwgUGFyc2VFcnJvcj59XG4gKi9cbkJwbW5Nb2RkbGUucHJvdG90eXBlLmZyb21YTUwgPSBmdW5jdGlvbiAoeG1sU3RyLCB0eXBlTmFtZSwgb3B0aW9ucykge1xuICBpZiAoIWlzU3RyaW5nKHR5cGVOYW1lKSkge1xuICAgIG9wdGlvbnMgPSB0eXBlTmFtZTtcbiAgICB0eXBlTmFtZSA9ICdicG1uOkRlZmluaXRpb25zJztcbiAgfVxuICB2YXIgcmVhZGVyID0gbmV3IFJlYWRlcihhc3NpZ24oe1xuICAgIG1vZGVsOiB0aGlzLFxuICAgIGxheDogdHJ1ZVxuICB9LCBvcHRpb25zKSk7XG4gIHZhciByb290SGFuZGxlciA9IHJlYWRlci5oYW5kbGVyKHR5cGVOYW1lKTtcbiAgcmV0dXJuIHJlYWRlci5mcm9tWE1MKHhtbFN0ciwgcm9vdEhhbmRsZXIpO1xufTtcblxuLyoqXG4gKiBUaGUgdG9YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlcmlhbGl6YXRpb25SZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge1N0cmluZ30geG1sXG4gKi9cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgQlBNTiAyLjAgb2JqZWN0IHRyZWUgdG8gWE1MLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIGVsZW1lbnQgICAgdGhlIHJvb3QgZWxlbWVudCwgdHlwaWNhbGx5IGFuIGluc3RhbmNlIG9mIGBicG1uOkRlZmluaXRpb25zYFxuICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdICB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nIHdyaXRlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlcmlhbGl6YXRpb25SZXN1bHQsIEVycm9yPn1cbiAqL1xuQnBtbk1vZGRsZS5wcm90b3R5cGUudG9YTUwgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlcihvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlc3VsdCA9IHdyaXRlci50b1hNTChlbGVtZW50KTtcbiAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgeG1sOiByZXN1bHRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH1cbiAgfSk7XG59O1xudmFyIG5hbWUkNSA9IFwiQlBNTjIwXCI7XG52YXIgdXJpJDUgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUxcIjtcbnZhciBwcmVmaXgkNSA9IFwiYnBtblwiO1xudmFyIGFzc29jaWF0aW9ucyQ1ID0gW107XG52YXIgdHlwZXMkNSA9IFt7XG4gIG5hbWU6IFwiSW50ZXJmYWNlXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm9wZXJhdGlvbnNcIixcbiAgICB0eXBlOiBcIk9wZXJhdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJpbXBsZW1lbnRhdGlvblJlZlwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiT3BlcmF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImluTWVzc2FnZVJlZlwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZVwiLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm91dE1lc3NhZ2VSZWZcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VcIixcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJlcnJvclJlZlwiLFxuICAgIHR5cGU6IFwiRXJyb3JcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW1wbGVtZW50YXRpb25SZWZcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkVuZFBvaW50XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiQXVkaXRpbmdcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl1cbn0sIHtcbiAgbmFtZTogXCJHbG9iYWxUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNhbGxhYmxlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInJlc291cmNlc1wiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTW9uaXRvcmluZ1wiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIlBlcmZvcm1lclwiLFxuICBzdXBlckNsYXNzOiBbXCJSZXNvdXJjZVJvbGVcIl1cbn0sIHtcbiAgbmFtZTogXCJQcm9jZXNzXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkZsb3dFbGVtZW50c0NvbnRhaW5lclwiLCBcIkNhbGxhYmxlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInByb2Nlc3NUeXBlXCIsXG4gICAgdHlwZTogXCJQcm9jZXNzVHlwZVwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJpc0Nsb3NlZFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJhdWRpdGluZ1wiLFxuICAgIHR5cGU6IFwiQXVkaXRpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJtb25pdG9yaW5nXCIsXG4gICAgdHlwZTogXCJNb25pdG9yaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwiUHJvcGVydHlcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibGFuZVNldHNcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgcmVwbGFjZXM6IFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyI2xhbmVTZXRzXCIsXG4gICAgdHlwZTogXCJMYW5lU2V0XCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZmxvd0VsZW1lbnRzXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIHJlcGxhY2VzOiBcIkZsb3dFbGVtZW50c0NvbnRhaW5lciNmbG93RWxlbWVudHNcIixcbiAgICB0eXBlOiBcIkZsb3dFbGVtZW50XCJcbiAgfSwge1xuICAgIG5hbWU6IFwiYXJ0aWZhY3RzXCIsXG4gICAgdHlwZTogXCJBcnRpZmFjdFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJyZXNvdXJjZXNcIixcbiAgICB0eXBlOiBcIlJlc291cmNlUm9sZVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjb3JyZWxhdGlvblN1YnNjcmlwdGlvbnNcIixcbiAgICB0eXBlOiBcIkNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInN1cHBvcnRzXCIsXG4gICAgdHlwZTogXCJQcm9jZXNzXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImRlZmluaXRpb25hbENvbGxhYm9yYXRpb25SZWZcIixcbiAgICB0eXBlOiBcIkNvbGxhYm9yYXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNFeGVjdXRhYmxlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTGFuZVNldFwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImxhbmVzXCIsXG4gICAgdHlwZTogXCJMYW5lXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkxhbmVcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGl0aW9uRWxlbWVudFJlZlwiLFxuICAgIHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGl0aW9uRWxlbWVudFwiLFxuICAgIHR5cGU6IFwiQmFzZUVsZW1lbnRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJmbG93Tm9kZVJlZlwiLFxuICAgIHR5cGU6IFwiRmxvd05vZGVcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY2hpbGRMYW5lU2V0XCIsXG4gICAgdHlwZTogXCJMYW5lU2V0XCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJHbG9iYWxNYW51YWxUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdsb2JhbFRhc2tcIl1cbn0sIHtcbiAgbmFtZTogXCJNYW51YWxUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlRhc2tcIl1cbn0sIHtcbiAgbmFtZTogXCJVc2VyVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJUYXNrXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwicmVuZGVyaW5nc1wiLFxuICAgIHR5cGU6IFwiUmVuZGVyaW5nXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJSZW5kZXJpbmdcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl1cbn0sIHtcbiAgbmFtZTogXCJIdW1hblBlcmZvcm1lclwiLFxuICBzdXBlckNsYXNzOiBbXCJQZXJmb3JtZXJcIl1cbn0sIHtcbiAgbmFtZTogXCJQb3RlbnRpYWxPd25lclwiLFxuICBzdXBlckNsYXNzOiBbXCJIdW1hblBlcmZvcm1lclwiXVxufSwge1xuICBuYW1lOiBcIkdsb2JhbFVzZXJUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdsb2JhbFRhc2tcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlbmRlcmluZ3NcIixcbiAgICB0eXBlOiBcIlJlbmRlcmluZ1wiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkdhdGV3YXlcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiRmxvd05vZGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJnYXRld2F5RGlyZWN0aW9uXCIsXG4gICAgdHlwZTogXCJHYXRld2F5RGlyZWN0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCI6IFwiVW5zcGVjaWZpZWRcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFdmVudEJhc2VkR2F0ZXdheVwiLFxuICBzdXBlckNsYXNzOiBbXCJHYXRld2F5XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW5zdGFudGlhdGVcIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImV2ZW50R2F0ZXdheVR5cGVcIixcbiAgICB0eXBlOiBcIkV2ZW50QmFzZWRHYXRld2F5VHlwZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBcImRlZmF1bHRcIjogXCJFeGNsdXNpdmVcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvbXBsZXhHYXRld2F5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdhdGV3YXlcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJhY3RpdmF0aW9uQ29uZGl0aW9uXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgIHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRXhjbHVzaXZlR2F0ZXdheVwiLFxuICBzdXBlckNsYXNzOiBbXCJHYXRld2F5XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgIHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiSW5jbHVzaXZlR2F0ZXdheVwiLFxuICBzdXBlckNsYXNzOiBbXCJHYXRld2F5XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgIHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiUGFyYWxsZWxHYXRld2F5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdhdGV3YXlcIl1cbn0sIHtcbiAgbmFtZTogXCJSb290RWxlbWVudFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIlJlbGF0aW9uc2hpcFwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInR5cGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJkaXJlY3Rpb25cIixcbiAgICB0eXBlOiBcIlJlbGF0aW9uc2hpcERpcmVjdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJzb3VyY2VcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJFbGVtZW50XCJcbiAgfSwge1xuICAgIG5hbWU6IFwidGFyZ2V0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHR5cGU6IFwiRWxlbWVudFwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQmFzZUVsZW1lbnRcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlkXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgaXNJZDogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJkb2N1bWVudGF0aW9uXCIsXG4gICAgdHlwZTogXCJEb2N1bWVudGF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImV4dGVuc2lvbkRlZmluaXRpb25zXCIsXG4gICAgdHlwZTogXCJFeHRlbnNpb25EZWZpbml0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImV4dGVuc2lvbkVsZW1lbnRzXCIsXG4gICAgdHlwZTogXCJFeHRlbnNpb25FbGVtZW50c1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRXh0ZW5zaW9uXCIsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJtdXN0VW5kZXJzdGFuZFwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZGVmaW5pdGlvblwiLFxuICAgIHR5cGU6IFwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJleHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uc1wiLFxuICAgIHR5cGU6IFwiRXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJ0eXBlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNSZWZlcmVuY2VcIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImV4dGVuc2lvbkRlZmluaXRpb25cIixcbiAgICB0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFeHRlbnNpb25FbGVtZW50c1wiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwidmFsdWVSZWZcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJFbGVtZW50XCJcbiAgfSwge1xuICAgIG5hbWU6IFwidmFsdWVzXCIsXG4gICAgdHlwZTogXCJFbGVtZW50XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcbiAgICB0eXBlOiBcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJEb2N1bWVudGF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwidGV4dFwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgaXNCb2R5OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInRleHRGb3JtYXRcIixcbiAgICBcImRlZmF1bHRcIjogXCJ0ZXh0L3BsYWluXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFdmVudFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJGbG93Tm9kZVwiLCBcIkludGVyYWN0aW9uTm9kZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIlByb3BlcnR5XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudFwiLFxuICBzdXBlckNsYXNzOiBbXCJDYXRjaEV2ZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiSW50ZXJtZWRpYXRlVGhyb3dFdmVudFwiLFxuICBzdXBlckNsYXNzOiBbXCJUaHJvd0V2ZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiRW5kRXZlbnRcIixcbiAgc3VwZXJDbGFzczogW1wiVGhyb3dFdmVudFwiXVxufSwge1xuICBuYW1lOiBcIlN0YXJ0RXZlbnRcIixcbiAgc3VwZXJDbGFzczogW1wiQ2F0Y2hFdmVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlzSW50ZXJydXB0aW5nXCIsXG4gICAgXCJkZWZhdWx0XCI6IHRydWUsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiVGhyb3dFdmVudFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImRhdGFJbnB1dHNcIixcbiAgICB0eXBlOiBcIkRhdGFJbnB1dFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJkYXRhSW5wdXRBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlucHV0U2V0XCIsXG4gICAgdHlwZTogXCJJbnB1dFNldFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImV2ZW50RGVmaW5pdGlvbnNcIixcbiAgICB0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJldmVudERlZmluaXRpb25SZWZcIixcbiAgICB0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNhdGNoRXZlbnRcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiRXZlbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJwYXJhbGxlbE11bHRpcGxlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICB9LCB7XG4gICAgbmFtZTogXCJkYXRhT3V0cHV0c1wiLFxuICAgIHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJkYXRhT3V0cHV0QXNzb2NpYXRpb25zXCIsXG4gICAgdHlwZTogXCJEYXRhT3V0cHV0QXNzb2NpYXRpb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0cHV0U2V0XCIsXG4gICAgdHlwZTogXCJPdXRwdXRTZXRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJldmVudERlZmluaXRpb25zXCIsXG4gICAgdHlwZTogXCJFdmVudERlZmluaXRpb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZXZlbnREZWZpbml0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJFdmVudERlZmluaXRpb25cIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJCb3VuZGFyeUV2ZW50XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNhdGNoRXZlbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjYW5jZWxBY3Rpdml0eVwiLFxuICAgIFwiZGVmYXVsdFwiOiB0cnVlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJhdHRhY2hlZFRvUmVmXCIsXG4gICAgdHlwZTogXCJBY3Rpdml0eVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJSb290RWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIkNhbmNlbEV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl1cbn0sIHtcbiAgbmFtZTogXCJFcnJvckV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJlcnJvclJlZlwiLFxuICAgIHR5cGU6IFwiRXJyb3JcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJUZXJtaW5hdGVFdmVudERlZmluaXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiRXZlbnREZWZpbml0aW9uXCJdXG59LCB7XG4gIG5hbWU6IFwiRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJlc2NhbGF0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJFc2NhbGF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRXNjYWxhdGlvblwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG4gICAgdHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZXNjYWxhdGlvbkNvZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XSxcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl1cbn0sIHtcbiAgbmFtZTogXCJDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkV2ZW50RGVmaW5pdGlvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIndhaXRGb3JDb21wbGV0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiLFxuICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImFjdGl2aXR5UmVmXCIsXG4gICAgdHlwZTogXCJBY3Rpdml0eVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlRpbWVyRXZlbnREZWZpbml0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkV2ZW50RGVmaW5pdGlvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInRpbWVEYXRlXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwidGltZUN5Y2xlXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwidGltZUR1cmF0aW9uXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJMaW5rRXZlbnREZWZpbml0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkV2ZW50RGVmaW5pdGlvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXRcIixcbiAgICB0eXBlOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJzb3VyY2VcIixcbiAgICB0eXBlOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJNZXNzYWdlRXZlbnREZWZpbml0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkV2ZW50RGVmaW5pdGlvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm1lc3NhZ2VSZWZcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3BlcmF0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJPcGVyYXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb25kaXRpb25cIixcbiAgICB0eXBlOiBcIkV4cHJlc3Npb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG4gICAgfVxuICB9XVxufSwge1xuICBuYW1lOiBcIlNpZ25hbEV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzaWduYWxSZWZcIixcbiAgICB0eXBlOiBcIlNpZ25hbFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlNpZ25hbFwiLFxuICBzdXBlckNsYXNzOiBbXCJSb290RWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInN0cnVjdHVyZVJlZlwiLFxuICAgIHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlRocm93RXZlbnRcIl1cbn0sIHtcbiAgbmFtZTogXCJEYXRhU3RhdGVcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaXRlbVN1YmplY3RSZWZcIixcbiAgICB0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImRhdGFTdGF0ZVwiLFxuICAgIHR5cGU6IFwiRGF0YVN0YXRlXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJEYXRhQXNzb2NpYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzb3VyY2VSZWZcIixcbiAgICB0eXBlOiBcIkl0ZW1Bd2FyZUVsZW1lbnRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwidGFyZ2V0UmVmXCIsXG4gICAgdHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwidHJhbnNmb3JtYXRpb25cIixcbiAgICB0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJhc3NpZ25tZW50XCIsXG4gICAgdHlwZTogXCJBc3NpZ25tZW50XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRGF0YUlucHV0XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkl0ZW1Bd2FyZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNDb2xsZWN0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJpbnB1dFNldFJlZlwiLFxuICAgIHR5cGU6IFwiSW5wdXRTZXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlucHV0U2V0V2l0aE9wdGlvbmFsXCIsXG4gICAgdHlwZTogXCJJbnB1dFNldFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW5wdXRTZXRXaXRoV2hpbGVFeGVjdXRpbmdcIixcbiAgICB0eXBlOiBcIklucHV0U2V0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkRhdGFPdXRwdXRcIixcbiAgc3VwZXJDbGFzczogW1wiSXRlbUF3YXJlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc0NvbGxlY3Rpb25cIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm91dHB1dFNldFJlZlwiLFxuICAgIHR5cGU6IFwiT3V0cHV0U2V0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRwdXRTZXRXaXRoT3B0aW9uYWxcIixcbiAgICB0eXBlOiBcIk91dHB1dFNldFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0cHV0U2V0V2l0aFdoaWxlRXhlY3V0aW5nXCIsXG4gICAgdHlwZTogXCJPdXRwdXRTZXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiSW5wdXRTZXRcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZGF0YUlucHV0UmVmc1wiLFxuICAgIHR5cGU6IFwiRGF0YUlucHV0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm9wdGlvbmFsSW5wdXRSZWZzXCIsXG4gICAgdHlwZTogXCJEYXRhSW5wdXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwid2hpbGVFeGVjdXRpbmdJbnB1dFJlZnNcIixcbiAgICB0eXBlOiBcIkRhdGFJbnB1dFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRwdXRTZXRSZWZzXCIsXG4gICAgdHlwZTogXCJPdXRwdXRTZXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJPdXRwdXRTZXRcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJkYXRhT3V0cHV0UmVmc1wiLFxuICAgIHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaW5wdXRTZXRSZWZzXCIsXG4gICAgdHlwZTogXCJJbnB1dFNldFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvcHRpb25hbE91dHB1dFJlZnNcIixcbiAgICB0eXBlOiBcIkRhdGFPdXRwdXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwid2hpbGVFeGVjdXRpbmdPdXRwdXRSZWZzXCIsXG4gICAgdHlwZTogXCJEYXRhT3V0cHV0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiUHJvcGVydHlcIixcbiAgc3VwZXJDbGFzczogW1wiSXRlbUF3YXJlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkRhdGFBc3NvY2lhdGlvblwiXVxufSwge1xuICBuYW1lOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJEYXRhQXNzb2NpYXRpb25cIl1cbn0sIHtcbiAgbmFtZTogXCJJbnB1dE91dHB1dFNwZWNpZmljYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJkYXRhSW5wdXRzXCIsXG4gICAgdHlwZTogXCJEYXRhSW5wdXRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZGF0YU91dHB1dHNcIixcbiAgICB0eXBlOiBcIkRhdGFPdXRwdXRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW5wdXRTZXRzXCIsXG4gICAgdHlwZTogXCJJbnB1dFNldFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRwdXRTZXRzXCIsXG4gICAgdHlwZTogXCJPdXRwdXRTZXRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJEYXRhT2JqZWN0XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkZsb3dFbGVtZW50XCIsIFwiSXRlbUF3YXJlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJJbnB1dE91dHB1dEJpbmRpbmdcIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlucHV0RGF0YVJlZlwiLFxuICAgIHR5cGU6IFwiSW5wdXRTZXRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0cHV0RGF0YVJlZlwiLFxuICAgIHR5cGU6IFwiT3V0cHV0U2V0XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuICAgIHR5cGU6IFwiT3BlcmF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQXNzaWdubWVudFwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImZyb21cIixcbiAgICB0eXBlOiBcIkV4cHJlc3Npb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJ0b1wiLFxuICAgIHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInhzaTp0eXBlXCJcbiAgICB9XG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRGF0YVN0b3JlXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCIsIFwiSXRlbUF3YXJlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJjYXBhY2l0eVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkludGVnZXJcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc1VubGltaXRlZFwiLFxuICAgIFwiZGVmYXVsdFwiOiB0cnVlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkRhdGFTdG9yZVJlZmVyZW5jZVwiLFxuICBzdXBlckNsYXNzOiBbXCJJdGVtQXdhcmVFbGVtZW50XCIsIFwiRmxvd0VsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJkYXRhU3RvcmVSZWZcIixcbiAgICB0eXBlOiBcIkRhdGFTdG9yZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkRhdGFPYmplY3RSZWZlcmVuY2VcIixcbiAgc3VwZXJDbGFzczogW1wiSXRlbUF3YXJlRWxlbWVudFwiLCBcIkZsb3dFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZGF0YU9iamVjdFJlZlwiLFxuICAgIHR5cGU6IFwiRGF0YU9iamVjdFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvbnZlcnNhdGlvbkxpbmtcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzb3VyY2VSZWZcIixcbiAgICB0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXRSZWZcIixcbiAgICB0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDb252ZXJzYXRpb25Bc3NvY2lhdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlubmVyQ29udmVyc2F0aW9uTm9kZVJlZlwiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRlckNvbnZlcnNhdGlvbk5vZGVSZWZcIixcbiAgICB0eXBlOiBcIkNvbnZlcnNhdGlvbk5vZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDYWxsQ29udmVyc2F0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNvbnZlcnNhdGlvbk5vZGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjYWxsZWRDb2xsYWJvcmF0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJDb2xsYWJvcmF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29udmVyc2F0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNvbnZlcnNhdGlvbk5vZGVcIl1cbn0sIHtcbiAgbmFtZTogXCJTdWJDb252ZXJzYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQ29udmVyc2F0aW9uTm9kZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImNvbnZlcnNhdGlvbk5vZGVzXCIsXG4gICAgdHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJJbnRlcmFjdGlvbk5vZGVcIiwgXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibWVzc2FnZUZsb3dSZWZzXCIsXG4gICAgdHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjb3JyZWxhdGlvbktleXNcIixcbiAgICB0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiR2xvYmFsQ29udmVyc2F0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNvbGxhYm9yYXRpb25cIl1cbn0sIHtcbiAgbmFtZTogXCJQYXJ0bmVyRW50aXR5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcnRpY2lwYW50UmVmXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlBhcnRuZXJSb2xlXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcnRpY2lwYW50UmVmXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvcnJlbGF0aW9uUHJvcGVydHlcIixcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb3JyZWxhdGlvblByb3BlcnR5UmV0cmlldmFsRXhwcmVzc2lvblwiLFxuICAgIHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInR5cGVcIixcbiAgICB0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRXJyb3JcIixcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzdHJ1Y3R1cmVSZWZcIixcbiAgICB0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJlcnJvckNvZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eVJlZlwiLFxuICAgIHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFeHByZXNzaW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBpc0Fic3RyYWN0OiBmYWxzZSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImJvZHlcIixcbiAgICBpc0JvZHk6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcbiAgc3VwZXJDbGFzczogW1wiRXhwcmVzc2lvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImxhbmd1YWdlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZXZhbHVhdGVzVG9UeXBlUmVmXCIsXG4gICAgdHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIk1lc3NhZ2VcIixcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXRlbVJlZlwiLFxuICAgIHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJSb290RWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIml0ZW1LaW5kXCIsXG4gICAgdHlwZTogXCJJdGVtS2luZFwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJzdHJ1Y3R1cmVSZWZcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc0NvbGxlY3Rpb25cIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImltcG9ydFwiLFxuICAgIHR5cGU6IFwiSW1wb3J0XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRmxvd0VsZW1lbnRcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiYXVkaXRpbmdcIixcbiAgICB0eXBlOiBcIkF1ZGl0aW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibW9uaXRvcmluZ1wiLFxuICAgIHR5cGU6IFwiTW9uaXRvcmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImNhdGVnb3J5VmFsdWVSZWZcIixcbiAgICB0eXBlOiBcIkNhdGVnb3J5VmFsdWVcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJTZXF1ZW5jZUZsb3dcIixcbiAgc3VwZXJDbGFzczogW1wiRmxvd0VsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpc0ltbWVkaWF0ZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJjb25kaXRpb25FeHByZXNzaW9uXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwic291cmNlUmVmXCIsXG4gICAgdHlwZTogXCJGbG93Tm9kZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXRSZWZcIixcbiAgICB0eXBlOiBcIkZsb3dOb2RlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibGFuZVNldHNcIixcbiAgICB0eXBlOiBcIkxhbmVTZXRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZmxvd0VsZW1lbnRzXCIsXG4gICAgdHlwZTogXCJGbG93RWxlbWVudFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNhbGxhYmxlRWxlbWVudFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJSb290RWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpb1NwZWNpZmljYXRpb25cIixcbiAgICB0eXBlOiBcIklucHV0T3V0cHV0U3BlY2lmaWNhdGlvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInByb3BlcnR5XCJcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiBcInN1cHBvcnRlZEludGVyZmFjZVJlZlwiLFxuICAgIHR5cGU6IFwiSW50ZXJmYWNlXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlvQmluZGluZ1wiLFxuICAgIHR5cGU6IFwiSW5wdXRPdXRwdXRCaW5kaW5nXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInByb3BlcnR5XCJcbiAgICB9XG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRmxvd05vZGVcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiRmxvd0VsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbmNvbWluZ1wiLFxuICAgIHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm91dGdvaW5nXCIsXG4gICAgdHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibGFuZXNcIixcbiAgICB0eXBlOiBcIkxhbmVcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJtZXNzYWdlUGF0aFwiLFxuICAgIHR5cGU6IFwiRm9ybWFsRXhwcmVzc2lvblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm1lc3NhZ2VSZWZcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImRhdGFQYXRoXCIsXG4gICAgdHlwZTogXCJGb3JtYWxFeHByZXNzaW9uXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eVJlZlwiLFxuICAgIHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlJlc291cmNlXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlc291cmNlUGFyYW1ldGVyc1wiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJSZXNvdXJjZVBhcmFtZXRlclwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc1JlcXVpcmVkXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInR5cGVcIixcbiAgICB0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29ycmVsYXRpb25TdWJzY3JpcHRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb3JyZWxhdGlvbktleVJlZlwiLFxuICAgIHR5cGU6IFwiQ29ycmVsYXRpb25LZXlcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIixcbiAgICB0eXBlOiBcIkNvcnJlbGF0aW9uUHJvcGVydHlCaW5kaW5nXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTWVzc2FnZUZsb3dcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwic291cmNlUmVmXCIsXG4gICAgdHlwZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwidGFyZ2V0UmVmXCIsXG4gICAgdHlwZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIk1lc3NhZ2VGbG93QXNzb2NpYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbm5lck1lc3NhZ2VGbG93UmVmXCIsXG4gICAgdHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRlck1lc3NhZ2VGbG93UmVmXCIsXG4gICAgdHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW5jb21pbmdDb252ZXJzYXRpb25MaW5rc1wiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0Z29pbmdDb252ZXJzYXRpb25MaW5rc1wiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJQYXJ0aWNpcGFudFwiLFxuICBzdXBlckNsYXNzOiBbXCJJbnRlcmFjdGlvbk5vZGVcIiwgXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpbnRlcmZhY2VSZWZcIixcbiAgICB0eXBlOiBcIkludGVyZmFjZVwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJwYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRNdWx0aXBsaWNpdHlcIlxuICB9LCB7XG4gICAgbmFtZTogXCJlbmRQb2ludFJlZnNcIixcbiAgICB0eXBlOiBcIkVuZFBvaW50XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInByb2Nlc3NSZWZcIixcbiAgICB0eXBlOiBcIlByb2Nlc3NcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW5uZXJQYXJ0aWNpcGFudFJlZlwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0ZXJQYXJ0aWNpcGFudFJlZlwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJQYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibWluaW11bVwiLFxuICAgIFwiZGVmYXVsdFwiOiAwLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkludGVnZXJcIlxuICB9LCB7XG4gICAgbmFtZTogXCJtYXhpbXVtXCIsXG4gICAgXCJkZWZhdWx0XCI6IDEsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiSW50ZWdlclwiXG4gIH1dLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIkNvbGxhYm9yYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNDbG9zZWRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGljaXBhbnRzXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJtZXNzYWdlRmxvd3NcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VGbG93XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImFydGlmYWN0c1wiLFxuICAgIHR5cGU6IFwiQXJ0aWZhY3RcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY29udmVyc2F0aW9uc1wiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjb252ZXJzYXRpb25Bc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIkNvbnZlcnNhdGlvbkFzc29jaWF0aW9uXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGljaXBhbnRBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIlBhcnRpY2lwYW50QXNzb2NpYXRpb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibWVzc2FnZUZsb3dBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VGbG93QXNzb2NpYXRpb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25LZXlzXCIsXG4gICAgdHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjaG9yZW9ncmFwaHlSZWZcIixcbiAgICB0eXBlOiBcIkNob3Jlb2dyYXBoeVwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjb252ZXJzYXRpb25MaW5rc1wiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIkZsb3dOb2RlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwicGFydGljaXBhbnRSZWZcIixcbiAgICB0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImluaXRpYXRpbmdQYXJ0aWNpcGFudFJlZlwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25LZXlzXCIsXG4gICAgdHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJsb29wVHlwZVwiLFxuICAgIHR5cGU6IFwiQ2hvcmVvZ3JhcGh5TG9vcFR5cGVcIixcbiAgICBcImRlZmF1bHRcIjogXCJOb25lXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ2FsbENob3Jlb2dyYXBoeVwiLFxuICBzdXBlckNsYXNzOiBbXCJDaG9yZW9ncmFwaHlBY3Rpdml0eVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImNhbGxlZENob3Jlb2dyYXBoeVJlZlwiLFxuICAgIHR5cGU6IFwiQ2hvcmVvZ3JhcGh5XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiU3ViQ2hvcmVvZ3JhcGh5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsIFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYXJ0aWZhY3RzXCIsXG4gICAgdHlwZTogXCJBcnRpZmFjdFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNob3Jlb2dyYXBoeVRhc2tcIixcbiAgc3VwZXJDbGFzczogW1wiQ2hvcmVvZ3JhcGh5QWN0aXZpdHlcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJtZXNzYWdlRmxvd1JlZlwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZUZsb3dcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDaG9yZW9ncmFwaHlcIixcbiAgc3VwZXJDbGFzczogW1wiQ29sbGFib3JhdGlvblwiLCBcIkZsb3dFbGVtZW50c0NvbnRhaW5lclwiXVxufSwge1xuICBuYW1lOiBcIkdsb2JhbENob3Jlb2dyYXBoeVRhc2tcIixcbiAgc3VwZXJDbGFzczogW1wiQ2hvcmVvZ3JhcGh5XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW5pdGlhdGluZ1BhcnRpY2lwYW50UmVmXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlRleHRBbm5vdGF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkFydGlmYWN0XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwidGV4dFwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwidGV4dEZvcm1hdFwiLFxuICAgIFwiZGVmYXVsdFwiOiBcInRleHQvcGxhaW5cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkdyb3VwXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkFydGlmYWN0XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiY2F0ZWdvcnlWYWx1ZVJlZlwiLFxuICAgIHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkFzc29jaWF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkFydGlmYWN0XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYXNzb2NpYXRpb25EaXJlY3Rpb25cIixcbiAgICB0eXBlOiBcIkFzc29jaWF0aW9uRGlyZWN0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInNvdXJjZVJlZlwiLFxuICAgIHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwidGFyZ2V0UmVmXCIsXG4gICAgdHlwZTogXCJCYXNlRWxlbWVudFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNhdGVnb3J5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiY2F0ZWdvcnlWYWx1ZVwiLFxuICAgIHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJBcnRpZmFjdFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIkNhdGVnb3J5VmFsdWVcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjYXRlZ29yaXplZEZsb3dFbGVtZW50c1wiLFxuICAgIHR5cGU6IFwiRmxvd0VsZW1lbnRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInZhbHVlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJBY3Rpdml0eVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJGbG93Tm9kZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlzRm9yQ29tcGVuc2F0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgdHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW9TcGVjaWZpY2F0aW9uXCIsXG4gICAgdHlwZTogXCJJbnB1dE91dHB1dFNwZWNpZmljYXRpb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJib3VuZGFyeUV2ZW50UmVmc1wiLFxuICAgIHR5cGU6IFwiQm91bmRhcnlFdmVudFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJwcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogXCJQcm9wZXJ0eVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJkYXRhSW5wdXRBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImRhdGFPdXRwdXRBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJzdGFydFF1YW50aXR5XCIsXG4gICAgXCJkZWZhdWx0XCI6IDEsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiSW50ZWdlclwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlc291cmNlc1wiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImNvbXBsZXRpb25RdWFudGl0eVwiLFxuICAgIFwiZGVmYXVsdFwiOiAxLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkludGVnZXJcIlxuICB9LCB7XG4gICAgbmFtZTogXCJsb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG4gICAgdHlwZTogXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJTZXJ2aWNlVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJUYXNrXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJvcGVyYXRpb25SZWZcIixcbiAgICB0eXBlOiBcIk9wZXJhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlN1YlByb2Nlc3NcIixcbiAgc3VwZXJDbGFzczogW1wiQWN0aXZpdHlcIiwgXCJGbG93RWxlbWVudHNDb250YWluZXJcIiwgXCJJbnRlcmFjdGlvbk5vZGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJ0cmlnZ2VyZWRCeUV2ZW50XCIsXG4gICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJhcnRpZmFjdHNcIixcbiAgICB0eXBlOiBcIkFydGlmYWN0XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTG9vcENoYXJhY3RlcmlzdGljc1wiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIk11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpc1NlcXVlbnRpYWxcIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImJlaGF2aW9yXCIsXG4gICAgdHlwZTogXCJNdWx0aUluc3RhbmNlQmVoYXZpb3JcIixcbiAgICBcImRlZmF1bHRcIjogXCJBbGxcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibG9vcENhcmRpbmFsaXR5XCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwibG9vcERhdGFJbnB1dFJlZlwiLFxuICAgIHR5cGU6IFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImxvb3BEYXRhT3V0cHV0UmVmXCIsXG4gICAgdHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW5wdXREYXRhSXRlbVwiLFxuICAgIHR5cGU6IFwiRGF0YUlucHV0XCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwicHJvcGVydHlcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwib3V0cHV0RGF0YUl0ZW1cIixcbiAgICB0eXBlOiBcIkRhdGFPdXRwdXRcIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJjb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG4gICAgdHlwZTogXCJDb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImNvbXBsZXRpb25Db25kaXRpb25cIixcbiAgICB0eXBlOiBcIkV4cHJlc3Npb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJvbmVCZWhhdmlvckV2ZW50UmVmXCIsXG4gICAgdHlwZTogXCJFdmVudERlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibm9uZUJlaGF2aW9yRXZlbnRSZWZcIixcbiAgICB0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlN0YW5kYXJkTG9vcENoYXJhY3RlcmlzdGljc1wiLFxuICBzdXBlckNsYXNzOiBbXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwidGVzdEJlZm9yZVwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibG9vcENvbmRpdGlvblwiLFxuICAgIHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInhzaTp0eXBlXCJcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiBcImxvb3BNYXhpbXVtXCIsXG4gICAgdHlwZTogXCJJbnRlZ2VyXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ2FsbEFjdGl2aXR5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkFjdGl2aXR5XCIsIFwiSW50ZXJhY3Rpb25Ob2RlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiY2FsbGVkRWxlbWVudFwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJBY3Rpdml0eVwiLCBcIkludGVyYWN0aW9uTm9kZVwiXVxufSwge1xuICBuYW1lOiBcIlNlbmRUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlRhc2tcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuICAgIHR5cGU6IFwiT3BlcmF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm1lc3NhZ2VSZWZcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJSZWNlaXZlVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJUYXNrXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpbnN0YW50aWF0ZVwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwib3BlcmF0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJPcGVyYXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlNjcmlwdFRhc2tcIixcbiAgc3VwZXJDbGFzczogW1wiVGFza1wiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInNjcmlwdEZvcm1hdFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInNjcmlwdFwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJCdXNpbmVzc1J1bGVUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlRhc2tcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQWRIb2NTdWJQcm9jZXNzXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlN1YlByb2Nlc3NcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb21wbGV0aW9uQ29uZGl0aW9uXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwib3JkZXJpbmdcIixcbiAgICB0eXBlOiBcIkFkSG9jT3JkZXJpbmdcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY2FuY2VsUmVtYWluaW5nSW5zdGFuY2VzXCIsXG4gICAgXCJkZWZhdWx0XCI6IHRydWUsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiVHJhbnNhY3Rpb25cIixcbiAgc3VwZXJDbGFzczogW1wiU3ViUHJvY2Vzc1wiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInByb3RvY29sXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibWV0aG9kXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJHbG9iYWxTY3JpcHRUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdsb2JhbFRhc2tcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzY3JpcHRMYW5ndWFnZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInNjcmlwdFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiR2xvYmFsQnVzaW5lc3NSdWxlVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJHbG9iYWxUYXNrXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvbXBsZXhCZWhhdmlvckRlZmluaXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb25kaXRpb25cIixcbiAgICB0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIlxuICB9LCB7XG4gICAgbmFtZTogXCJldmVudFwiLFxuICAgIHR5cGU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJSZXNvdXJjZVJvbGVcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJyZXNvdXJjZVJlZlwiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VcIixcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJyZXNvdXJjZVBhcmFtZXRlckJpbmRpbmdzXCIsXG4gICAgdHlwZTogXCJSZXNvdXJjZVBhcmFtZXRlckJpbmRpbmdcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwicmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIlJlc291cmNlUGFyYW1ldGVyQmluZGluZ1wiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZXhwcmVzc2lvblwiLFxuICAgIHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInhzaTp0eXBlXCJcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcmFtZXRlclJlZlwiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV0sXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiUmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZXhwcmVzc2lvblwiLFxuICAgIHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInhzaTp0eXBlXCJcbiAgICB9XG4gIH1dLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIkltcG9ydFwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW1wb3J0VHlwZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImxvY2F0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibmFtZXNwYWNlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJEZWZpbml0aW9uc1wiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXROYW1lc3BhY2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJleHByZXNzaW9uTGFuZ3VhZ2VcIixcbiAgICBcImRlZmF1bHRcIjogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hQYXRoXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwidHlwZUxhbmd1YWdlXCIsXG4gICAgXCJkZWZhdWx0XCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWFcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpbXBvcnRzXCIsXG4gICAgdHlwZTogXCJJbXBvcnRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZXh0ZW5zaW9uc1wiLFxuICAgIHR5cGU6IFwiRXh0ZW5zaW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInJvb3RFbGVtZW50c1wiLFxuICAgIHR5cGU6IFwiUm9vdEVsZW1lbnRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZGlhZ3JhbXNcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgdHlwZTogXCJicG1uZGk6QlBNTkRpYWdyYW1cIlxuICB9LCB7XG4gICAgbmFtZTogXCJleHBvcnRlclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlbGF0aW9uc2hpcHNcIixcbiAgICB0eXBlOiBcIlJlbGF0aW9uc2hpcFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJleHBvcnRlclZlcnNpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufV07XG52YXIgZW51bWVyYXRpb25zJDMgPSBbe1xuICBuYW1lOiBcIlByb2Nlc3NUeXBlXCIsXG4gIGxpdGVyYWxWYWx1ZXM6IFt7XG4gICAgbmFtZTogXCJOb25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiUHVibGljXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiUHJpdmF0ZVwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiR2F0ZXdheURpcmVjdGlvblwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiVW5zcGVjaWZpZWRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJDb252ZXJnaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiRGl2ZXJnaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiTWl4ZWRcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkV2ZW50QmFzZWRHYXRld2F5VHlwZVwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiUGFyYWxsZWxcIlxuICB9LCB7XG4gICAgbmFtZTogXCJFeGNsdXNpdmVcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIlJlbGF0aW9uc2hpcERpcmVjdGlvblwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiTm9uZVwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIkZvcndhcmRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJCYWNrd2FyZFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIkJvdGhcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkl0ZW1LaW5kXCIsXG4gIGxpdGVyYWxWYWx1ZXM6IFt7XG4gICAgbmFtZTogXCJQaHlzaWNhbFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIkluZm9ybWF0aW9uXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDaG9yZW9ncmFwaHlMb29wVHlwZVwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiTm9uZVwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIlN0YW5kYXJkXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiTXVsdGlJbnN0YW5jZVNlcXVlbnRpYWxcIlxuICB9LCB7XG4gICAgbmFtZTogXCJNdWx0aUluc3RhbmNlUGFyYWxsZWxcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkFzc29jaWF0aW9uRGlyZWN0aW9uXCIsXG4gIGxpdGVyYWxWYWx1ZXM6IFt7XG4gICAgbmFtZTogXCJOb25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiT25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiQm90aFwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTXVsdGlJbnN0YW5jZUJlaGF2aW9yXCIsXG4gIGxpdGVyYWxWYWx1ZXM6IFt7XG4gICAgbmFtZTogXCJOb25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiT25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiQWxsXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiQ29tcGxleFwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQWRIb2NPcmRlcmluZ1wiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiUGFyYWxsZWxcIlxuICB9LCB7XG4gICAgbmFtZTogXCJTZXF1ZW50aWFsXCJcbiAgfV1cbn1dO1xudmFyIHhtbCQxID0ge1xuICB0YWdBbGlhczogXCJsb3dlckNhc2VcIixcbiAgdHlwZVByZWZpeDogXCJ0XCJcbn07XG52YXIgQnBtblBhY2thZ2UgPSB7XG4gIG5hbWU6IG5hbWUkNSxcbiAgdXJpOiB1cmkkNSxcbiAgcHJlZml4OiBwcmVmaXgkNSxcbiAgYXNzb2NpYXRpb25zOiBhc3NvY2lhdGlvbnMkNSxcbiAgdHlwZXM6IHR5cGVzJDUsXG4gIGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDMsXG4gIHhtbDogeG1sJDFcbn07XG52YXIgbmFtZSQ0ID0gXCJCUE1ORElcIjtcbnZhciB1cmkkNCA9IFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVwiO1xudmFyIHByZWZpeCQ0ID0gXCJicG1uZGlcIjtcbnZhciB0eXBlcyQ0ID0gW3tcbiAgbmFtZTogXCJCUE1ORGlhZ3JhbVwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwicGxhbmVcIixcbiAgICB0eXBlOiBcIkJQTU5QbGFuZVwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpEaWFncmFtI3Jvb3RFbGVtZW50XCJcbiAgfSwge1xuICAgIG5hbWU6IFwibGFiZWxTdHlsZVwiLFxuICAgIHR5cGU6IFwiQlBNTkxhYmVsU3R5bGVcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfV0sXG4gIHN1cGVyQ2xhc3M6IFtcImRpOkRpYWdyYW1cIl1cbn0sIHtcbiAgbmFtZTogXCJCUE1OUGxhbmVcIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImJwbW5FbGVtZW50XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNtb2RlbEVsZW1lbnRcIlxuICB9XSxcbiAgc3VwZXJDbGFzczogW1wiZGk6UGxhbmVcIl1cbn0sIHtcbiAgbmFtZTogXCJCUE1OU2hhcGVcIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImJwbW5FbGVtZW50XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNtb2RlbEVsZW1lbnRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc0hvcml6b250YWxcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNFeHBhbmRlZFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc01hcmtlclZpc2libGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibGFiZWxcIixcbiAgICB0eXBlOiBcIkJQTU5MYWJlbFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImlzTWVzc2FnZVZpc2libGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGljaXBhbnRCYW5kS2luZFwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRCYW5kS2luZFwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjaG9yZW9ncmFwaHlBY3Rpdml0eVNoYXBlXCIsXG4gICAgdHlwZTogXCJCUE1OU2hhcGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV0sXG4gIHN1cGVyQ2xhc3M6IFtcImRpOkxhYmVsZWRTaGFwZVwiXVxufSwge1xuICBuYW1lOiBcIkJQTU5FZGdlXCIsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJsYWJlbFwiLFxuICAgIHR5cGU6IFwiQlBNTkxhYmVsXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiYnBtbkVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJicG1uOkJhc2VFbGVtZW50XCIsXG4gICAgcmVkZWZpbmVzOiBcImRpOkRpYWdyYW1FbGVtZW50I21vZGVsRWxlbWVudFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInNvdXJjZUVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJkaTpEaWFncmFtRWxlbWVudFwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpFZGdlI3NvdXJjZVwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInRhcmdldEVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJkaTpEaWFncmFtRWxlbWVudFwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpFZGdlI3RhcmdldFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZVZpc2libGVLaW5kXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIFwiZGVmYXVsdFwiOiBcImluaXRpYXRpbmdcIlxuICB9XSxcbiAgc3VwZXJDbGFzczogW1wiZGk6TGFiZWxlZEVkZ2VcIl1cbn0sIHtcbiAgbmFtZTogXCJCUE1OTGFiZWxcIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImxhYmVsU3R5bGVcIixcbiAgICB0eXBlOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNzdHlsZVwiXG4gIH1dLFxuICBzdXBlckNsYXNzOiBbXCJkaTpMYWJlbFwiXVxufSwge1xuICBuYW1lOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJmb250XCIsXG4gICAgdHlwZTogXCJkYzpGb250XCJcbiAgfV0sXG4gIHN1cGVyQ2xhc3M6IFtcImRpOlN0eWxlXCJdXG59XTtcbnZhciBlbnVtZXJhdGlvbnMkMiA9IFt7XG4gIG5hbWU6IFwiUGFydGljaXBhbnRCYW5kS2luZFwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwidG9wX2luaXRpYXRpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJtaWRkbGVfaW5pdGlhdGluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImJvdHRvbV9pbml0aWF0aW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwidG9wX25vbl9pbml0aWF0aW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibWlkZGxlX25vbl9pbml0aWF0aW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiYm90dG9tX25vbl9pbml0aWF0aW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJNZXNzYWdlVmlzaWJsZUtpbmRcIixcbiAgbGl0ZXJhbFZhbHVlczogW3tcbiAgICBuYW1lOiBcImluaXRpYXRpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJub25faW5pdGlhdGluZ1wiXG4gIH1dXG59XTtcbnZhciBhc3NvY2lhdGlvbnMkNCA9IFtdO1xudmFyIEJwbW5EaVBhY2thZ2UgPSB7XG4gIG5hbWU6IG5hbWUkNCxcbiAgdXJpOiB1cmkkNCxcbiAgcHJlZml4OiBwcmVmaXgkNCxcbiAgdHlwZXM6IHR5cGVzJDQsXG4gIGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDIsXG4gIGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDRcbn07XG52YXIgbmFtZSQzID0gXCJEQ1wiO1xudmFyIHVyaSQzID0gXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiO1xudmFyIHByZWZpeCQzID0gXCJkY1wiO1xudmFyIHR5cGVzJDMgPSBbe1xuICBuYW1lOiBcIkJvb2xlYW5cIlxufSwge1xuICBuYW1lOiBcIkludGVnZXJcIlxufSwge1xuICBuYW1lOiBcIlJlYWxcIlxufSwge1xuICBuYW1lOiBcIlN0cmluZ1wiXG59LCB7XG4gIG5hbWU6IFwiRm9udFwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInNpemVcIixcbiAgICB0eXBlOiBcIlJlYWxcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNCb2xkXCIsXG4gICAgdHlwZTogXCJCb29sZWFuXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlzSXRhbGljXCIsXG4gICAgdHlwZTogXCJCb29sZWFuXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlzVW5kZXJsaW5lXCIsXG4gICAgdHlwZTogXCJCb29sZWFuXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlzU3RyaWtlVGhyb3VnaFwiLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlBvaW50XCIsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJ4XCIsXG4gICAgdHlwZTogXCJSZWFsXCIsXG4gICAgXCJkZWZhdWx0XCI6IFwiMFwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJ5XCIsXG4gICAgdHlwZTogXCJSZWFsXCIsXG4gICAgXCJkZWZhdWx0XCI6IFwiMFwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkJvdW5kc1wiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwieFwiLFxuICAgIHR5cGU6IFwiUmVhbFwiLFxuICAgIFwiZGVmYXVsdFwiOiBcIjBcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwieVwiLFxuICAgIHR5cGU6IFwiUmVhbFwiLFxuICAgIFwiZGVmYXVsdFwiOiBcIjBcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwid2lkdGhcIixcbiAgICB0eXBlOiBcIlJlYWxcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaGVpZ2h0XCIsXG4gICAgdHlwZTogXCJSZWFsXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH1dXG59XTtcbnZhciBhc3NvY2lhdGlvbnMkMyA9IFtdO1xudmFyIERjUGFja2FnZSA9IHtcbiAgbmFtZTogbmFtZSQzLFxuICB1cmk6IHVyaSQzLFxuICBwcmVmaXg6IHByZWZpeCQzLFxuICB0eXBlczogdHlwZXMkMyxcbiAgYXNzb2NpYXRpb25zOiBhc3NvY2lhdGlvbnMkM1xufTtcbnZhciBuYW1lJDIgPSBcIkRJXCI7XG52YXIgdXJpJDIgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXCI7XG52YXIgcHJlZml4JDIgPSBcImRpXCI7XG52YXIgdHlwZXMkMiA9IFt7XG4gIG5hbWU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlkXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzSWQ6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJleHRlbnNpb25cIixcbiAgICB0eXBlOiBcIkV4dGVuc2lvblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm93bmluZ0RpYWdyYW1cIixcbiAgICB0eXBlOiBcIkRpYWdyYW1cIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvd25pbmdFbGVtZW50XCIsXG4gICAgdHlwZTogXCJEaWFncmFtRWxlbWVudFwiLFxuICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm1vZGVsRWxlbWVudFwiLFxuICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHR5cGU6IFwiRWxlbWVudFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInN0eWxlXCIsXG4gICAgdHlwZTogXCJTdHlsZVwiLFxuICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm93bmVkRWxlbWVudFwiLFxuICAgIHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJOb2RlXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIkRpYWdyYW1FbGVtZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiRWRnZVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJEaWFncmFtRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInNvdXJjZVwiLFxuICAgIHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXRcIixcbiAgICB0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG4gICAgaXNSZWFkT25seTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwid2F5cG9pbnRcIixcbiAgICBpc1VuaXF1ZTogZmFsc2UsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIHR5cGU6IFwiZGM6UG9pbnRcIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG4gICAgfVxuICB9XVxufSwge1xuICBuYW1lOiBcIkRpYWdyYW1cIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlkXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzSWQ6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJyb290RWxlbWVudFwiLFxuICAgIHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZG9jdW1lbnRhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlc29sdXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJSZWFsXCJcbiAgfSwge1xuICAgIG5hbWU6IFwib3duZWRTdHlsZVwiLFxuICAgIHR5cGU6IFwiU3R5bGVcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJTaGFwZVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJOb2RlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYm91bmRzXCIsXG4gICAgdHlwZTogXCJkYzpCb3VuZHNcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIlBsYW5lXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIk5vZGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJwbGFuZUVsZW1lbnRcIixcbiAgICB0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG4gICAgc3Vic2V0dGVkUHJvcGVydHk6IFwiRGlhZ3JhbUVsZW1lbnQtb3duZWRFbGVtZW50XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTGFiZWxlZEVkZ2VcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiRWRnZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm93bmVkTGFiZWxcIixcbiAgICB0eXBlOiBcIkxhYmVsXCIsXG4gICAgaXNSZWFkT25seTogdHJ1ZSxcbiAgICBzdWJzZXR0ZWRQcm9wZXJ0eTogXCJEaWFncmFtRWxlbWVudC1vd25lZEVsZW1lbnRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTGFiZWxlZFNoYXBlXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIlNoYXBlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwib3duZWRMYWJlbFwiLFxuICAgIHR5cGU6IFwiTGFiZWxcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIHN1YnNldHRlZFByb3BlcnR5OiBcIkRpYWdyYW1FbGVtZW50LW93bmVkRWxlbWVudFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJMYWJlbFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJOb2RlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYm91bmRzXCIsXG4gICAgdHlwZTogXCJkYzpCb3VuZHNcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIlN0eWxlXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpZFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc0lkOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFeHRlbnNpb25cIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInZhbHVlc1wiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICB0eXBlOiBcIkVsZW1lbnRcIlxuICB9XVxufV07XG52YXIgYXNzb2NpYXRpb25zJDIgPSBbXTtcbnZhciB4bWwkMiA9IHtcbiAgdGFnQWxpYXM6IFwibG93ZXJDYXNlXCJcbn07XG52YXIgRGlQYWNrYWdlID0ge1xuICBuYW1lOiBuYW1lJDIsXG4gIHVyaTogdXJpJDIsXG4gIHByZWZpeDogcHJlZml4JDIsXG4gIHR5cGVzOiB0eXBlcyQyLFxuICBhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQyLFxuICB4bWw6IHhtbCQyXG59O1xudmFyIG5hbWUkMSA9IFwiYnBtbi5pbyBjb2xvcnMgZm9yIEJQTU5cIjtcbnZhciB1cmkkMSA9IFwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW4vYmlvY29sb3IvMS4wXCI7XG52YXIgcHJlZml4JDEgPSBcImJpb2NcIjtcbnZhciB0eXBlcyQxID0gW3tcbiAgbmFtZTogXCJDb2xvcmVkU2hhcGVcIixcbiAgXCJleHRlbmRzXCI6IFtcImJwbW5kaTpCUE1OU2hhcGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzdHJva2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJmaWxsXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDb2xvcmVkRWRnZVwiLFxuICBcImV4dGVuZHNcIjogW1wiYnBtbmRpOkJQTU5FZGdlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwic3Ryb2tlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZmlsbFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59XTtcbnZhciBlbnVtZXJhdGlvbnMkMSA9IFtdO1xudmFyIGFzc29jaWF0aW9ucyQxID0gW107XG52YXIgQmlvY1BhY2thZ2UgPSB7XG4gIG5hbWU6IG5hbWUkMSxcbiAgdXJpOiB1cmkkMSxcbiAgcHJlZml4OiBwcmVmaXgkMSxcbiAgdHlwZXM6IHR5cGVzJDEsXG4gIGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDEsXG4gIGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDFcbn07XG52YXIgbmFtZSQ2ID0gXCJCUE1OIGluIENvbG9yXCI7XG52YXIgdXJpJDYgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vbm9uLW5vcm1hdGl2ZS9jb2xvci8xLjBcIjtcbnZhciBwcmVmaXgkNiA9IFwiY29sb3JcIjtcbnZhciB0eXBlcyQ2ID0gW3tcbiAgbmFtZTogXCJDb2xvcmVkTGFiZWxcIixcbiAgXCJleHRlbmRzXCI6IFtcImJwbW5kaTpCUE1OTGFiZWxcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb2xvclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29sb3JlZFNoYXBlXCIsXG4gIFwiZXh0ZW5kc1wiOiBbXCJicG1uZGk6QlBNTlNoYXBlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImJvcmRlci1jb2xvclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29sb3JlZEVkZ2VcIixcbiAgXCJleHRlbmRzXCI6IFtcImJwbW5kaTpCUE1ORWRnZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImJvcmRlci1jb2xvclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59XTtcbnZhciBlbnVtZXJhdGlvbnMgPSBbXTtcbnZhciBhc3NvY2lhdGlvbnMkNiA9IFtdO1xudmFyIEJwbW5JbkNvbG9yUGFja2FnZSA9IHtcbiAgbmFtZTogbmFtZSQ2LFxuICB1cmk6IHVyaSQ2LFxuICBwcmVmaXg6IHByZWZpeCQ2LFxuICB0eXBlczogdHlwZXMkNixcbiAgZW51bWVyYXRpb25zOiBlbnVtZXJhdGlvbnMsXG4gIGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDZcbn07XG5jb25zdCBwYWNrYWdlcyA9IHtcbiAgYnBtbjogQnBtblBhY2thZ2UsXG4gIGJwbW5kaTogQnBtbkRpUGFja2FnZSxcbiAgZGM6IERjUGFja2FnZSxcbiAgZGk6IERpUGFja2FnZSxcbiAgYmlvYzogQmlvY1BhY2thZ2UsXG4gIGNvbG9yOiBCcG1uSW5Db2xvclBhY2thZ2Vcbn07XG5mdW5jdGlvbiBTaW1wbGVCcG1uTW9kZGxlKGFkZGl0aW9uYWxQYWNrYWdlcywgb3B0aW9ucykge1xuICBjb25zdCBwa3MgPSBhc3NpZ24oe30sIHBhY2thZ2VzLCBhZGRpdGlvbmFsUGFja2FnZXMpO1xuICByZXR1cm4gbmV3IEJwbW5Nb2RkbGUocGtzLCBvcHRpb25zKTtcbn1cblxudmFyIG5hbWUgPSBcInplZWJlXCI7XG52YXIgcHJlZml4ID0gXCJ6ZWViZVwiO1xudmFyIHVyaSA9IFwiaHR0cDovL2NhbXVuZGEub3JnL3NjaGVtYS96ZWViZS8xLjBcIjtcbnZhciB4bWwgPSB7XG5cdHRhZ0FsaWFzOiBcImxvd2VyQ2FzZVwiXG59O1xudmFyIGFzc29jaWF0aW9ucyA9IFtcbl07XG52YXIgdHlwZXMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIlplZWJlU2VydmljZVRhc2tcIixcblx0XHRcImV4dGVuZHNcIjogW1xuXHRcdFx0XCJicG1uOlNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcImJwbW46QnVzaW5lc3NSdWxlVGFza1wiLFxuXHRcdFx0XCJicG1uOlNjcmlwdFRhc2tcIixcblx0XHRcdFwiYnBtbjpTZW5kVGFza1wiLFxuXHRcdFx0XCJicG1uOkVuZEV2ZW50XCIsXG5cdFx0XHRcImJwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmV0cnlDb3VudGVyXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW9NYXBwaW5nXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpb01hcHBpbmdcIixcblx0XHRcdFx0dHlwZTogXCJJb01hcHBpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFBhcmFtZXRlcnNcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0UGFyYW1ldGVyc1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcImJwbW46Q2FsbEFjdGl2aXR5XCIsXG5cdFx0XHRcdFwiYnBtbjpFdmVudFwiLFxuXHRcdFx0XHRcImJwbW46UmVjZWl2ZVRhc2tcIixcblx0XHRcdFx0XCJ6ZWViZTpaZWViZVNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpTdWJQcm9jZXNzXCIsXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnB1dE91dHB1dFBhcmFtZXRlclwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN1YnNjcmlwdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25LZXlcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnB1dFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJcIlxuXHRcdF0sXG5cdFx0bWV0YToge1xuXHRcdFx0YWxsb3dlZEluOiBbXG5cdFx0XHRcdFwiYnBtbjpDYWxsQWN0aXZpdHlcIixcblx0XHRcdFx0XCJ6ZWViZTpaZWViZVNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpTdWJQcm9jZXNzXCIsXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJPdXRwdXRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIklucHV0T3V0cHV0UGFyYW1ldGVyXCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcImJwbW46Q2FsbEFjdGl2aXR5XCIsXG5cdFx0XHRcdFwiYnBtbjpFdmVudFwiLFxuXHRcdFx0XHRcImJwbW46UmVjZWl2ZVRhc2tcIixcblx0XHRcdFx0XCJ6ZWViZTpaZWViZVNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpTdWJQcm9jZXNzXCIsXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUYXNrSGVhZGVyc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWxlbWVudFwiXG5cdFx0XSxcblx0XHRtZXRhOiB7XG5cdFx0XHRhbGxvd2VkSW46IFtcblx0XHRcdFx0XCJ6ZWViZTpaZWViZVNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidmFsdWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiSGVhZGVyXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSGVhZGVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpZFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwia2V5XCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRhc2tEZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcInplZWJlOlplZWJlU2VydmljZVRhc2tcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJldHJpZXNcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcInplZWJlOlplZWJlU2VydmljZVRhc2tcIixcblx0XHRcdFx0XCJicG1uOlJlY2VpdmVUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpTdWJQcm9jZXNzXCJcblx0XHRcdF1cblx0XHR9LFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dENvbGxlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlucHV0RWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0Q29sbGVjdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0RWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxlZEVsZW1lbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0bWV0YToge1xuXHRcdFx0YWxsb3dlZEluOiBbXG5cdFx0XHRcdFwiYnBtbjpDYWxsQWN0aXZpdHlcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb2Nlc3NJZFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvY2Vzc0lkRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXNcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9wYWdhdGVBbGxQYXJlbnRWYXJpYWJsZXNcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlVzZXJUYXNrRm9ybVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWxlbWVudFwiXG5cdFx0XSxcblx0XHRtZXRhOiB7XG5cdFx0XHRhbGxvd2VkSW46IFtcblx0XHRcdFx0XCJicG1uOlByb2Nlc3NcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlkXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib2R5XCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQm9keTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRm9ybURlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0bWV0YToge1xuXHRcdFx0YWxsb3dlZEluOiBbXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZm9ybUtleVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZm9ybUlkXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FsbGVkRGVjaXNpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0bWV0YToge1xuXHRcdFx0YWxsb3dlZEluOiBbXG5cdFx0XHRcdFwiYnBtbjpCdXNpbmVzc1J1bGVUYXNrXCJcblx0XHRcdF1cblx0XHR9LFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWNpc2lvbklkXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXN1bHRWYXJpYWJsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc2lnbm1lbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcImJwbW46VXNlclRhc2tcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFzc2lnbmVlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYW5kaWRhdGVHcm91cHNcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbmRpZGF0ZVVzZXJzXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVGFza1NjaGVkdWxlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcImJwbW46VXNlclRhc2tcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImR1ZURhdGVcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZvbGxvd1VwRGF0ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlByb3BlcnRpZXNcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb3BlcnRpZXNcIixcblx0XHRcdFx0dHlwZTogXCJQcm9wZXJ0eVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlByb3BlcnR5XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInZhbHVlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVGVtcGxhdGVTdXBwb3J0ZWRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdFwiZXh0ZW5kc1wiOiBbXG5cdFx0XHRcImJwbW46Q29sbGFib3JhdGlvblwiLFxuXHRcdFx0XCJicG1uOlByb2Nlc3NcIixcblx0XHRcdFwiYnBtbjpGbG93RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9kZWxlclRlbXBsYXRlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtb2RlbGVyVGVtcGxhdGVWZXJzaW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9kZWxlclRlbXBsYXRlSWNvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRlbXBsYXRlZFJvb3RFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRcImV4dGVuZHNcIjogW1xuXHRcdFx0XCJicG1uOkVycm9yXCIsXG5cdFx0XHRcImJwbW46RXNjYWxhdGlvblwiLFxuXHRcdFx0XCJicG1uOk1lc3NhZ2VcIixcblx0XHRcdFwiYnBtbjpTaWduYWxcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1vZGVsZXJUZW1wbGF0ZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNjcmlwdFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWxlbWVudFwiXG5cdFx0XSxcblx0XHRtZXRhOiB7XG5cdFx0XHRhbGxvd2VkSW46IFtcblx0XHRcdFx0XCJicG1uOlNjcmlwdFRhc2tcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc3VsdFZhcmlhYmxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciB6ZWViZU1vZGRsZSA9IHtcblx0bmFtZTogbmFtZSxcblx0cHJlZml4OiBwcmVmaXgsXG5cdHVyaTogdXJpLFxuXHR4bWw6IHhtbCxcblx0YXNzb2NpYXRpb25zOiBhc3NvY2lhdGlvbnMsXG5cdHR5cGVzOiB0eXBlc1xufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgQ2FtdW5kYSBTZXJ2aWNlcyBHbWJIIGFuZC9vciBsaWNlbnNlZCB0byBDYW11bmRhIFNlcnZpY2VzIEdtYkhcbiAqIHVuZGVyIG9uZSBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodFxuICogb3duZXJzaGlwLlxuICpcbiAqIENhbXVuZGEgbGljZW5zZXMgdGhpcyBmaWxlIHRvIHlvdSB1bmRlciB0aGUgTUlUOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlXG4gKiBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBlbGVtZW50VGVtcGxhdGVMaW50UnVsZSA9ICh7XG4gIHRlbXBsYXRlcyA9IFtdXG59KSA9PiB7XG4gIGNvbnN0IG1vZGRsZSA9IG5ldyBTaW1wbGVCcG1uTW9kZGxlKHtcbiAgICB6ZWViZTogemVlYmVNb2RkbGVcbiAgfSk7XG4gIGNvbnN0IHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IobW9kZGxlKS5hZGRBbGwodGVtcGxhdGVzKTtcbiAgY29uc3QgdmFsaWRUZW1wbGF0ZXMgPSB2YWxpZGF0b3IuZ2V0VmFsaWRUZW1wbGF0ZXMoKTtcblxuICAvLyBXZSB1c2UgdGhlIEVsZW1lbnRUZW1wbGF0ZXMgTW9kdWxlIHdpdGhvdXQgdGhlIHJlcXVpcmVkIGJwbW4tanMgbW9kdWxlc1xuICAvLyBBcyB3ZSBvbmx5IHVzZSBpdCB0byBmYWNpbGl0YXRlIHRlbXBsYXRlIElEIGFuZCB2ZXJzaW9uIGxvb2t1cCxcbiAgLy8gYWNjZXNzIHRvIGNvbW1hbmRzdGFjayBldGMuIGlzIG5vdCByZXF1aXJlZFxuICBjb25zdCBlbGVtZW50VGVtcGxhdGVzID0gbmV3IEVsZW1lbnRUZW1wbGF0ZXMoKTtcbiAgZWxlbWVudFRlbXBsYXRlcy5zZXQodmFsaWRUZW1wbGF0ZXMpO1xuICBmdW5jdGlvbiBjaGVjayhub2RlLCByZXBvcnRlcikge1xuICAgIGlmICghaXMobm9kZSwgJ2JwbW46Rmxvd0VsZW1lbnQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldChub2RlKTtcbiAgICBjb25zdCB0ZW1wbGF0ZUlkID0gZWxlbWVudFRlbXBsYXRlcy5fZ2V0VGVtcGxhdGVJZChub2RlKTtcblxuICAgIC8vIEhhbmRsZSBtaXNzaW5nIHRlbXBsYXRlXG4gICAgaWYgKHRlbXBsYXRlSWQgJiYgIXRlbXBsYXRlKSB7XG4gICAgICByZXBvcnRlci5yZXBvcnQobm9kZS5pZCwgJ0xpbmtlZCBlbGVtZW50IHRlbXBsYXRlIG5vdCBmb3VuZCcsIHtcbiAgICAgICAgbmFtZTogbm9kZS5uYW1lXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZSA9IGFwcGx5Q29uZGl0aW9ucyhub2RlLCB0ZW1wbGF0ZSk7XG5cbiAgICAvLyBDaGVjayBhdHRyaWJ1dGVzXG4gICAgdGVtcGxhdGUucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShub2RlLCBwcm9wZXJ0eSk7XG4gICAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRlUHJvcGVydHkodmFsdWUsIHByb3BlcnR5KTtcbiAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVwb3J0ZXIucmVwb3J0KG5vZGUuaWQsIGVycm9yLCB7XG4gICAgICAgIHByb3BlcnRpZXNQYW5lbDoge1xuICAgICAgICAgIGVudHJ5SWRzOiBbZ2V0RW50cnlJZChwcm9wZXJ0eSwgdGVtcGxhdGUpXVxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiBub2RlLm5hbWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2hlY2tcbiAgfTtcbn07XG5jb25zdCBFbGVtZW50VGVtcGxhdGVMaW50ZXJQbHVnaW4gPSBmdW5jdGlvbiAodGVtcGxhdGVzKSB7XG4gIHJldHVybiB7XG4gICAgY29uZmlnOiB7XG4gICAgICBydWxlczoge1xuICAgICAgICAnZWxlbWVudC10ZW1wbGF0ZXMvdmFsaWRhdGUnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIHRlbXBsYXRlc1xuICAgICAgICB9XVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVzb2x2ZXI6IG5ldyBTdGF0aWNSZXNvbHZlcih7XG4gICAgICAncnVsZTpicG1ubGludC1wbHVnaW4tZWxlbWVudC10ZW1wbGF0ZXMvdmFsaWRhdGUnOiBlbGVtZW50VGVtcGxhdGVMaW50UnVsZVxuICAgIH0pXG4gIH07XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RW50cnlJZChwcm9wZXJ0eSwgdGVtcGxhdGUpIHtcbiAgY29uc3QgaW5kZXggPSB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAuZ3JvdXAgPT09IHByb3BlcnR5Lmdyb3VwKS5pbmRleE9mKHByb3BlcnR5KTtcbiAgY29uc3QgcGF0aCA9IFsnY3VzdG9tLWVudHJ5JywgdGVtcGxhdGUuaWRdO1xuICBpZiAocHJvcGVydHkuZ3JvdXApIHtcbiAgICBwYXRoLnB1c2gocHJvcGVydHkuZ3JvdXApO1xuICB9XG4gIHBhdGgucHVzaChpbmRleCk7XG4gIHJldHVybiBwYXRoLmpvaW4oJy0nKTtcbn1cblxuZXhwb3J0IHsgY29yZU1vZHVsZSQxIGFzIENsb3VkRWxlbWVudFRlbXBsYXRlc0NvcmVNb2R1bGUsIEVsZW1lbnRUZW1wbGF0ZUxpbnRlclBsdWdpbiBhcyBDbG91ZEVsZW1lbnRUZW1wbGF0ZXNMaW50ZXJQbHVnaW4sIGluZGV4JDEgYXMgQ2xvdWRFbGVtZW50VGVtcGxhdGVzUHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlLCBWYWxpZGF0b3IgYXMgQ2xvdWRFbGVtZW50VGVtcGxhdGVzVmFsaWRhdG9yLCBjb3JlTW9kdWxlIGFzIEVsZW1lbnRUZW1wbGF0ZXNDb3JlTW9kdWxlLCBpbmRleCBhcyBFbGVtZW50VGVtcGxhdGVzUHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-element-templates/dist/index.esm.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js-element-templates/node_modules/@bpmn-io/extract-process-variables/zeebe/index.js":
/*!***************************************************************************************************************!*\
!*** ./node_modules/bpmn-js-element-templates/node_modules/@bpmn-io/extract-process-variables/zeebe/index.js ***!
\***************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n\nvar minDash = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.cjs\");\n\n/**\n * Get a inputOutput from the business object\n *\n * @param {ModdleElement} element\n *\n * @return {ModdleElement} the inputOutput object\n */\nfunction getInputOutput(element) {\n return (getElements(element, 'zeebe:IoMapping') || [])[0];\n}\n\n/**\n * Return all input parameters existing in the business object, and\n * an empty array if none exist.\n *\n * @param {ModdleElement} element\n *\n * @return {Array} a list of input parameter objects\n */\nfunction getInputParameters(element) {\n return getParameters(element, 'inputParameters');\n}\n\n/**\n * Return out mappings existing in the business object\n *\n * @param {ModdleElement} element\n *\n * @return {Array}\n */\nfunction getOutMappings(element) {\n return (getInputOutput(element) || {}).outputParameters;\n}\n\n/**\n * Return out mappings existing in the business object\n *\n * @param {ModdleElement} element\n *\n * @return {Array}\n */\nfunction getInMappings(element) {\n return (getInputOutput(element) || {}).inputParameters;\n}\n\n/**\n * Get the inputElement name from a loopCharacteristics\n *\n * @param {MoodleElement} loopCharacteristics\n * @returns {String} outputCollection\n */\nfunction getInputElement(loopCharacteristics) {\n const extensionElement = getElements(loopCharacteristics, 'zeebe:LoopCharacteristics')[0];\n return extensionElement && extensionElement.inputElement;\n}\n\n/**\n * Get the outputCollection name from a loopCharacteristics\n *\n * @param {MoodleElement} loopCharacteristics\n * @returns {String} outputCollection\n */\nfunction getOutputCollection(loopCharacteristics) {\n const extensionElement = getElements(loopCharacteristics, 'zeebe:LoopCharacteristics')[0];\n return extensionElement && extensionElement.outputCollection;\n\n}\n\n/**\n * Get a calledDecision from the business object\n *\n * @param {MoodleElement} element\n * @returns {MoodleElement} the calledDecision object\n */\nfunction getCalledDecision(element) {\n return (getElements(element, 'zeebe:CalledDecision') || [])[0];\n}\n\n\n/**\n * Get a script from the business object\n *\n * @param {MoodleElement} element\n * @returns {MoodleElement} the script object\n */\nfunction getScript(element) {\n return (getElements(element, 'zeebe:Script') || [])[0];\n}\n\n// helpers //////////\n\nfunction getElements(element, type, property) {\n var elements = getExtensionElements(element, type);\n\n return !property ? elements : (elements[0] || {})[property] || [];\n}\n\nfunction getParameters(element, property) {\n var inputOutput = getInputOutput(element);\n\n return (inputOutput && inputOutput.get(property)) || [];\n}\n\nfunction getExtensionElements(element, type) {\n var elements = [];\n var extensionElements = element.get('extensionElements');\n\n if (typeof extensionElements !== 'undefined') {\n var extensionValues = extensionElements.get('values');\n\n if (typeof extensionValues !== 'undefined') {\n elements = minDash.filter(extensionValues, function(value) {\n return is$2(value, type);\n });\n }\n }\n\n return elements;\n}\n\nfunction is$2(element, type) {\n return (\n element &&\n typeof element.$instanceOf === 'function' &&\n element.$instanceOf(type)\n );\n}\n\n/**\n * Get all parent elements for a given element.\n *\n * @param {ModdleElement|string} element\n *\n * @returns {Array}\n */\nfunction getParents(element) {\n var parents = [];\n var current = element;\n\n while (current.$parent) {\n parents.push(current.$parent);\n current = current.$parent;\n }\n\n return parents;\n}\n\n/**\n * Iterate over each element in a collection, calling the iterator function `fn`\n * with (element, index, recursionDepth).\n *\n * Recurse into all elements that are returned by `fn`.\n *\n * @param {Object|Array} elements\n * @param {Function} fn iterator function called with (element, index, recursionDepth)\n * @param {number} [depth] maximum recursion depth\n */\nfunction eachElement(elements, fn, depth) {\n depth = depth || 0;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(s, i) {\n var filter = fn(s, i, depth);\n\n if (minDash.isArray(filter) && filter.length) {\n eachElement(filter, fn, depth + 1);\n }\n });\n}\n\n/**\n * Adds an element to a collection and returns true if the\n * element was added.\n *\n * @param {Array} elements\n * @param {Object} e\n * @param {boolean} unique\n */\nfunction add(elements, e, unique) {\n var canAdd = !unique || elements.indexOf(e) === -1;\n\n if (canAdd) {\n elements.push(e);\n }\n\n return canAdd;\n}\n\n/**\n * Collects self + flow elements up to a given depth from a list of elements.\n *\n * @param {ModdleElement|Array} elements the elements to select the flowElements from\n * @param {boolean} unique whether to return a unique result set (no duplicates)\n * @param {number} maxDepth the depth to search through or -1 for infinite\n *\n * @return {Array} found elements\n */\nfunction selfAndFlowElements(elements, unique, maxDepth) {\n var result = [],\n processedFlowElements = [];\n\n eachElement(elements, function(element, i, depth) {\n add(result, element, unique);\n\n var flowElements = element.flowElements;\n\n // max traversal depth not reached yet\n if (maxDepth === -1 || depth < maxDepth) {\n\n // flowElements exist && flowElements not yet processed\n if (flowElements && add(processedFlowElements, flowElements, unique)) {\n return flowElements;\n }\n }\n });\n\n return result;\n}\n\n/**\n * Return self + ALL flowElements for a number of elements\n *\n * @param {Array} elements to query\n * @param {boolean} allowDuplicates to allow duplicates in the result set\n *\n * @return {Array} the collected elements\n */\nfunction selfAndAllFlowElements(elements, allowDuplicates) {\n return selfAndFlowElements(elements, !allowDuplicates, -1);\n}\n\n/**\n * Return full moddle element for given element id\n *\n * @param {string} elementId\n * @param {ModdleElement} rootElement\n *\n * @returns {ModdleElement}\n */\nfunction getElement(elementId, rootElement) {\n var allElements = selfAndAllFlowElements(rootElement);\n\n return minDash.find(allElements, function(element) {\n return element.id === elementId;\n });\n}\n\nfunction addVariableToList(variablesList, newVariable) {\n var foundIdx = minDash.findIndex(variablesList, function(variable) {\n return (\n variable.name === newVariable.name && variable.scope === newVariable.scope\n );\n });\n\n if (foundIdx >= 0) {\n variablesList[foundIdx].origin = combineArrays$1(\n variablesList[foundIdx].origin,\n newVariable.origin\n );\n } else {\n variablesList.push(newVariable);\n }\n}\n\n/**\n * Creates new process variable definition object\n * Identifies correct (highest) scope, in which variable is available\n *\n * @param {ModdleElement} flowElement\n * @param {String} name\n * @param {ModdleElement} defaultScope\n *\n * @returns {ProcessVariable}\n */\nfunction createProcessVariable(flowElement, name, defaultScope) {\n var scope = getScope$1(flowElement, defaultScope, name);\n\n return {\n name: name,\n origin: [ flowElement ],\n scope: scope\n };\n}\n\n\n// helpers ////////////////////\n\n/**\n * Set parent container if it defines it's own scope for the variable, so\n * when it defines an input mapping for it. Otherwise returns the default global scope\n */\nfunction getScope$1(element, globalScope, variableName) {\n var parents = getParents(element);\n\n var scopedParent = minDash.find(parents, function(parent) {\n return (\n is$1(parent, 'bpmn:SubProcess') && hasInputParameter(parent, variableName)\n );\n });\n\n return scopedParent ? scopedParent : globalScope;\n}\n\nfunction is$1(element, type) {\n return (\n element &&\n typeof element.$instanceOf === 'function' &&\n element.$instanceOf(type)\n );\n}\n\nfunction hasInputParameter(element, name) {\n return minDash.find(getInputParameters(element), function(input) {\n return input.target === name;\n });\n}\n\nfunction combineArrays$1(a, b) {\n return a.concat(b);\n}\n\n/**\n * Retrieves process variables defined in output mappings, e.g.\n *\n * \n * \n * \n * \n * \n * \n * \n *\n * => Adds one variable \"variable1\" to the list.\n *\n */\nfunction extractInMappings(options) {\n var elements = options.elements,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var inMappings = getInMappings(element);\n\n // extract all variables with correct scope\n minDash.forEach(inMappings, function(mapping) {\n\n var newVariable = createProcessVariable(\n element,\n mapping.target,\n element\n );\n\n addVariableToList(processVariables, newVariable);\n });\n });\n\n return processVariables;\n}\n\n/**\n * Retrieves process variables defined in result variables, e.g.\n *\n * \n * \n * \n * \n * \n * \n * \n *\n * => Adds one variable \"inputElement\"to the list.\n *\n */\nfunction extractInputElement(options) {\n var elements = options.elements,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var loopCharacteristics = element.loopCharacteristics;\n\n var inputElement = loopCharacteristics && getInputElement(loopCharacteristics);\n\n if (inputElement) {\n var newVariable = createProcessVariable(\n element,\n inputElement,\n element\n );\n\n addVariableToList(processVariables, newVariable);\n }\n });\n\n return processVariables;\n}\n\n/**\n * Retrieves process variables defined in output mappings, e.g.\n *\n * \n * \n * \n * \n * \n * \n * \n *\n * => Adds one variable \"variable1\" to the list.\n *\n */\nfunction extractOutMappings(options) {\n var elements = options.elements,\n containerElement = options.containerElement,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var outMappings = getOutMappings(element);\n\n // extract all variables with correct scope\n minDash.forEach(outMappings, function(mapping) {\n var newVariable = createProcessVariable(\n element,\n mapping.target,\n containerElement\n );\n\n addVariableToList(processVariables, newVariable);\n });\n });\n\n return processVariables;\n}\n\n/**\n * Retrieves process variables defined in output collection, e.g.\n *\n * \n * \n * \n * \n * \n * \n * \n *\n * => Adds one variable \"outputCollection\"to the list.\n *\n */\nfunction extractOutputCollections(options) {\n var elements = options.elements,\n containerElement = options.containerElement,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var loopCharacteristics = element.loopCharacteristics;\n\n var outputCollection = loopCharacteristics && getOutputCollection(loopCharacteristics);\n\n if (outputCollection) {\n var newVariable = createProcessVariable(\n element,\n outputCollection,\n containerElement\n );\n\n addVariableToList(processVariables, newVariable);\n }\n });\n\n return processVariables;\n}\n\n/**\n * Retrieves process variables defined in result variables, e.g.\n *\n * \n * \n * \n * \n * \n *\n *\n * => Adds one variable \"variable1\"to the list.\n *\n */\nfunction extractResultVariables(options) {\n var elements = options.elements,\n containerElement = options.containerElement,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var baseElement = getCalledDecision(element) ||\n getScript(element);\n\n if (!baseElement) {\n return;\n }\n\n var resultVariable = baseElement.resultVariable;\n\n if (resultVariable) {\n var newVariable = createProcessVariable(\n element,\n resultVariable,\n containerElement\n );\n\n addVariableToList(processVariables, newVariable);\n }\n });\n\n return processVariables;\n}\n\nvar extractors = [\n extractInMappings,\n extractInputElement,\n extractOutMappings,\n extractOutputCollections,\n extractResultVariables\n];\n\n/**\n * @typedef {Object} ProcessVariable\n * @property {string} name\n * @property {Array} origin\n * @property {ModdleElement} scope\n */\n\n// api /////////////////////////\n\n/**\n * Extractors add ProcessVariables to the `options.processVariables` parameter.\n * @callback extractor\n * @param {Object} options\n * @param {Array} options.elements\n * @param {ModdleElement} options.containerElement\n * @param {Array} options.processVariables\n */\n\n/**\n * Retrieves all process variables for a given container element.\n * @param {ModdleElement} containerElement\n * @param {Array} [additionalExtractors]\n *\n * @returns {Promise>}\n */\nfunction getProcessVariables(containerElement, additionalExtractors = []) {\n var processVariables = [];\n\n // (1) extract all flow elements inside the container\n var elements = selfAndAllFlowElements([ containerElement ], false);\n\n const allPromises = [];\n\n // (2) extract all variables from the extractors\n minDash.forEach([ ...extractors, ...additionalExtractors ], function(extractor) {\n allPromises.push(extractor({\n elements: elements,\n containerElement: containerElement,\n processVariables: processVariables\n }));\n });\n\n return Promise.all(allPromises)\n .then(() => processVariables);\n}\n\n/**\n * Retrieves all variables which are available in the given scope\n *\n * * Exclude variables which are only available in other scopes\n * * Exclude variables which are produced by the given element\n * * Include variables which are available in parent scopes\n *\n * @param {string} scope\n * @param {ModdleElement} rootElement element from where to extract all variables\n * @param {Array} [additionalExtractors]\n *\n * @returns {Promise>}\n */\nasync function getVariablesForScope(scope, rootElement, additionalExtractors = []) {\n\n var allVariables = await getProcessVariables(rootElement, additionalExtractors);\n\n var scopeElement = getElement(scope, rootElement);\n\n // (1) get variables for given scope\n var scopeVariables = minDash.filter(allVariables, function(variable) {\n return variable.scope.id === scopeElement.id;\n });\n\n // (2) get variables for parent scopes\n var parents = getParents(scopeElement);\n\n var parentsScopeVariables = minDash.filter(allVariables, function(variable) {\n return minDash.find(parents, function(parent) {\n return parent.id === variable.scope.id;\n });\n });\n\n return combineArrays(scopeVariables, parentsScopeVariables);\n}\n\n\nfunction getVariablesForElement(element, additionalExtractors = []) {\n return getVariablesForScope(getScope(element), getRootElement(element), additionalExtractors);\n}\n\nfunction getScope(element) {\n const bo = getBusinessObject(element);\n\n if (is(element, 'bpmn:Participant')) {\n return bo.processRef.id;\n }\n\n return bo.id;\n}\n\nfunction getRootElement(element) {\n const businessObject = getBusinessObject(element);\n\n if (is(businessObject, 'bpmn:Participant')) {\n return businessObject.processRef;\n }\n\n if (is(businessObject, 'bpmn:Process')) {\n return businessObject;\n }\n\n let parent = businessObject;\n\n while (parent.$parent && !is(parent, 'bpmn:Process')) {\n parent = parent.$parent;\n }\n\n return parent;\n}\n\n\n// helpers ////////////////////\n\nfunction combineArrays(a, b) {\n return a.concat(b);\n}\n\n\nfunction getBusinessObject(element) {\n return (element && element.businessObject) || element;\n}\n\n\nfunction is(element, type) {\n var bo = getBusinessObject(element);\n\n return bo && (typeof bo.$instanceOf === 'function') && bo.$instanceOf(type);\n}\n\nexports.getProcessVariables = getProcessVariables;\nexports.getVariablesForElement = getVariablesForElement;\nexports.getVariablesForScope = getVariablesForScope;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1lbGVtZW50LXRlbXBsYXRlcy9ub2RlX21vZHVsZXMvQGJwbW4taW8vZXh0cmFjdC1wcm9jZXNzLXZhcmlhYmxlcy96ZWViZS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7O0FBRTdELGNBQWMsbUJBQU8sQ0FBQyx3REFBVTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWSxlQUFlO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxlQUFlO0FBQzNCO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksc0JBQXNCO0FBQ2xDLFlBQVksVUFBVTtBQUN0QixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9DQUFvQztBQUNoRCxZQUFZLFNBQVM7QUFDckIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEMsWUFBWSxTQUFTO0FBQ3JCO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsZUFBZTtBQUMxQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxzQkFBc0I7QUFDcEMsY0FBYyxlQUFlO0FBQzdCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLGVBQWU7QUFDMUIsV0FBVyx3QkFBd0I7QUFDbkM7O0FBRUE7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxlQUFlO0FBQzFCLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0IsOEJBQThCO0FBQzlCLDRCQUE0QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9icG1uLWpzLWVsZW1lbnQtdGVtcGxhdGVzL25vZGVfbW9kdWxlcy9AYnBtbi1pby9leHRyYWN0LXByb2Nlc3MtdmFyaWFibGVzL3plZWJlL2luZGV4LmpzPzBkZTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgbWluRGFzaCA9IHJlcXVpcmUoJ21pbi1kYXNoJyk7XG5cbi8qKlxuICogR2V0IGEgaW5wdXRPdXRwdXQgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGlucHV0T3V0cHV0IG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRJbnB1dE91dHB1dChlbGVtZW50KSB7XG4gIHJldHVybiAoZ2V0RWxlbWVudHMoZWxlbWVudCwgJ3plZWJlOklvTWFwcGluZycpIHx8IFtdKVswXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGlucHV0IHBhcmFtZXRlcnMgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdCwgYW5kXG4gKiBhbiBlbXB0eSBhcnJheSBpZiBub25lIGV4aXN0LlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gYSBsaXN0IG9mIGlucHV0IHBhcmFtZXRlciBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGdldElucHV0UGFyYW1ldGVycyhlbGVtZW50KSB7XG4gIHJldHVybiBnZXRQYXJhbWV0ZXJzKGVsZW1lbnQsICdpbnB1dFBhcmFtZXRlcnMnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gb3V0IG1hcHBpbmdzIGV4aXN0aW5nIGluIHRoZSBidXNpbmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn1cbiAqL1xuZnVuY3Rpb24gZ2V0T3V0TWFwcGluZ3MoZWxlbWVudCkge1xuICByZXR1cm4gKGdldElucHV0T3V0cHV0KGVsZW1lbnQpIHx8IHt9KS5vdXRwdXRQYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIFJldHVybiBvdXQgbWFwcGluZ3MgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fVxuICovXG5mdW5jdGlvbiBnZXRJbk1hcHBpbmdzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIChnZXRJbnB1dE91dHB1dChlbGVtZW50KSB8fCB7fSkuaW5wdXRQYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW5wdXRFbGVtZW50IG5hbWUgZnJvbSBhIGxvb3BDaGFyYWN0ZXJpc3RpY3NcbiAqXG4gKiBAcGFyYW0ge01vb2RsZUVsZW1lbnR9IGxvb3BDaGFyYWN0ZXJpc3RpY3NcbiAqIEByZXR1cm5zIHtTdHJpbmd9IG91dHB1dENvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0SW5wdXRFbGVtZW50KGxvb3BDaGFyYWN0ZXJpc3RpY3MpIHtcbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudCA9IGdldEVsZW1lbnRzKGxvb3BDaGFyYWN0ZXJpc3RpY3MsICd6ZWViZTpMb29wQ2hhcmFjdGVyaXN0aWNzJylbMF07XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50ICYmIGV4dGVuc2lvbkVsZW1lbnQuaW5wdXRFbGVtZW50O1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3V0cHV0Q29sbGVjdGlvbiBuYW1lIGZyb20gYSBsb29wQ2hhcmFjdGVyaXN0aWNzXG4gKlxuICogQHBhcmFtIHtNb29kbGVFbGVtZW50fSBsb29wQ2hhcmFjdGVyaXN0aWNzXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBvdXRwdXRDb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE91dHB1dENvbGxlY3Rpb24obG9vcENoYXJhY3RlcmlzdGljcykge1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50ID0gZ2V0RWxlbWVudHMobG9vcENoYXJhY3RlcmlzdGljcywgJ3plZWJlOkxvb3BDaGFyYWN0ZXJpc3RpY3MnKVswXTtcbiAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnQgJiYgZXh0ZW5zaW9uRWxlbWVudC5vdXRwdXRDb2xsZWN0aW9uO1xuXG59XG5cbi8qKlxuICogR2V0IGEgY2FsbGVkRGVjaXNpb24gZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtNb29kbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7TW9vZGxlRWxlbWVudH0gdGhlIGNhbGxlZERlY2lzaW9uIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRDYWxsZWREZWNpc2lvbihlbGVtZW50KSB7XG4gIHJldHVybiAoZ2V0RWxlbWVudHMoZWxlbWVudCwgJ3plZWJlOkNhbGxlZERlY2lzaW9uJykgfHwgW10pWzBdO1xufVxuXG5cbi8qKlxuICogR2V0IGEgc2NyaXB0IGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7TW9vZGxlRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge01vb2RsZUVsZW1lbnR9IHRoZSBzY3JpcHQgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGdldFNjcmlwdChlbGVtZW50KSB7XG4gIHJldHVybiAoZ2V0RWxlbWVudHMoZWxlbWVudCwgJ3plZWJlOlNjcmlwdCcpIHx8IFtdKVswXTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRzKGVsZW1lbnQsIHR5cGUsIHByb3BlcnR5KSB7XG4gIHZhciBlbGVtZW50cyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIHR5cGUpO1xuXG4gIHJldHVybiAhcHJvcGVydHkgPyBlbGVtZW50cyA6IChlbGVtZW50c1swXSB8fCB7fSlbcHJvcGVydHldIHx8IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJzKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIHZhciBpbnB1dE91dHB1dCA9IGdldElucHV0T3V0cHV0KGVsZW1lbnQpO1xuXG4gIHJldHVybiAoaW5wdXRPdXRwdXQgJiYgaW5wdXRPdXRwdXQuZ2V0KHByb3BlcnR5KSkgfHwgW107XG59XG5cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIHR5cGUpIHtcbiAgdmFyIGVsZW1lbnRzID0gW107XG4gIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnQuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gIGlmICh0eXBlb2YgZXh0ZW5zaW9uRWxlbWVudHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGV4dGVuc2lvblZhbHVlcyA9IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyk7XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvblZhbHVlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVsZW1lbnRzID0gbWluRGFzaC5maWx0ZXIoZXh0ZW5zaW9uVmFsdWVzLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXMkMih2YWx1ZSwgdHlwZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGlzJDIoZWxlbWVudCwgdHlwZSkge1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnQgJiZcbiAgICB0eXBlb2YgZWxlbWVudC4kaW5zdGFuY2VPZiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIGVsZW1lbnQuJGluc3RhbmNlT2YodHlwZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIHBhcmVudCBlbGVtZW50cyBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxzdHJpbmd9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8TW9kZGxlRWxlbWVudD59XG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudCkge1xuICB2YXIgcGFyZW50cyA9IFtdO1xuICB2YXIgY3VycmVudCA9IGVsZW1lbnQ7XG5cbiAgd2hpbGUgKGN1cnJlbnQuJHBhcmVudCkge1xuICAgIHBhcmVudHMucHVzaChjdXJyZW50LiRwYXJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gcGFyZW50cztcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgY2FsbGluZyB0aGUgaXRlcmF0b3IgZnVuY3Rpb24gYGZuYFxuICogd2l0aCAoZWxlbWVudCwgaW5kZXgsIHJlY3Vyc2lvbkRlcHRoKS5cbiAqXG4gKiBSZWN1cnNlIGludG8gYWxsIGVsZW1lbnRzIHRoYXQgYXJlIHJldHVybmVkIGJ5IGBmbmAuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5PE9iamVjdD59IGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gaXRlcmF0b3IgZnVuY3Rpb24gY2FsbGVkIHdpdGggKGVsZW1lbnQsIGluZGV4LCByZWN1cnNpb25EZXB0aClcbiAqIEBwYXJhbSAge251bWJlcn0gW2RlcHRoXSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aFxuICovXG5mdW5jdGlvbiBlYWNoRWxlbWVudChlbGVtZW50cywgZm4sIGRlcHRoKSB7XG4gIGRlcHRoID0gZGVwdGggfHwgMDtcblxuICBpZiAoIW1pbkRhc2guaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIG1pbkRhc2guZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24ocywgaSkge1xuICAgIHZhciBmaWx0ZXIgPSBmbihzLCBpLCBkZXB0aCk7XG5cbiAgICBpZiAobWluRGFzaC5pc0FycmF5KGZpbHRlcikgJiYgZmlsdGVyLmxlbmd0aCkge1xuICAgICAgZWFjaEVsZW1lbnQoZmlsdGVyLCBmbiwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZWxlbWVudCB0byBhIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGVcbiAqIGVsZW1lbnQgd2FzIGFkZGVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVuaXF1ZVxuICovXG5mdW5jdGlvbiBhZGQoZWxlbWVudHMsIGUsIHVuaXF1ZSkge1xuICB2YXIgY2FuQWRkID0gIXVuaXF1ZSB8fCBlbGVtZW50cy5pbmRleE9mKGUpID09PSAtMTtcblxuICBpZiAoY2FuQWRkKSB7XG4gICAgZWxlbWVudHMucHVzaChlKTtcbiAgfVxuXG4gIHJldHVybiBjYW5BZGQ7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgc2VsZiArIGZsb3cgZWxlbWVudHMgdXAgdG8gYSBnaXZlbiBkZXB0aCBmcm9tIGEgbGlzdCBvZiBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fEFycmF5PE1vZGRsZUVsZW1lbnQ+fSBlbGVtZW50cyB0aGUgZWxlbWVudHMgdG8gc2VsZWN0IHRoZSBmbG93RWxlbWVudHMgZnJvbVxuICogQHBhcmFtICB7Ym9vbGVhbn0gdW5pcXVlIHdoZXRoZXIgdG8gcmV0dXJuIGEgdW5pcXVlIHJlc3VsdCBzZXQgKG5vIGR1cGxpY2F0ZXMpXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1heERlcHRoIHRoZSBkZXB0aCB0byBzZWFyY2ggdGhyb3VnaCBvciAtMSBmb3IgaW5maW5pdGVcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gZm91bmQgZWxlbWVudHNcbiAqL1xuZnVuY3Rpb24gc2VsZkFuZEZsb3dFbGVtZW50cyhlbGVtZW50cywgdW5pcXVlLCBtYXhEZXB0aCkge1xuICB2YXIgcmVzdWx0ID0gW10sXG4gICAgICBwcm9jZXNzZWRGbG93RWxlbWVudHMgPSBbXTtcblxuICBlYWNoRWxlbWVudChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaSwgZGVwdGgpIHtcbiAgICBhZGQocmVzdWx0LCBlbGVtZW50LCB1bmlxdWUpO1xuXG4gICAgdmFyIGZsb3dFbGVtZW50cyA9IGVsZW1lbnQuZmxvd0VsZW1lbnRzO1xuXG4gICAgLy8gbWF4IHRyYXZlcnNhbCBkZXB0aCBub3QgcmVhY2hlZCB5ZXRcbiAgICBpZiAobWF4RGVwdGggPT09IC0xIHx8IGRlcHRoIDwgbWF4RGVwdGgpIHtcblxuICAgICAgLy8gZmxvd0VsZW1lbnRzIGV4aXN0ICYmIGZsb3dFbGVtZW50cyBub3QgeWV0IHByb2Nlc3NlZFxuICAgICAgaWYgKGZsb3dFbGVtZW50cyAmJiBhZGQocHJvY2Vzc2VkRmxvd0VsZW1lbnRzLCBmbG93RWxlbWVudHMsIHVuaXF1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZsb3dFbGVtZW50cztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHNlbGYgKyBBTEwgZmxvd0VsZW1lbnRzIGZvciBhIG51bWJlciBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBlbGVtZW50cyB0byBxdWVyeVxuICogQHBhcmFtICB7Ym9vbGVhbn0gYWxsb3dEdXBsaWNhdGVzIHRvIGFsbG93IGR1cGxpY2F0ZXMgaW4gdGhlIHJlc3VsdCBzZXRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gdGhlIGNvbGxlY3RlZCBlbGVtZW50c1xuICovXG5mdW5jdGlvbiBzZWxmQW5kQWxsRmxvd0VsZW1lbnRzKGVsZW1lbnRzLCBhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgcmV0dXJuIHNlbGZBbmRGbG93RWxlbWVudHMoZWxlbWVudHMsICFhbGxvd0R1cGxpY2F0ZXMsIC0xKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gZnVsbCBtb2RkbGUgZWxlbWVudCBmb3IgZ2l2ZW4gZWxlbWVudCBpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbGVtZW50SWRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcm9vdEVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZ2V0RWxlbWVudChlbGVtZW50SWQsIHJvb3RFbGVtZW50KSB7XG4gIHZhciBhbGxFbGVtZW50cyA9IHNlbGZBbmRBbGxGbG93RWxlbWVudHMocm9vdEVsZW1lbnQpO1xuXG4gIHJldHVybiBtaW5EYXNoLmZpbmQoYWxsRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5pZCA9PT0gZWxlbWVudElkO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkVmFyaWFibGVUb0xpc3QodmFyaWFibGVzTGlzdCwgbmV3VmFyaWFibGUpIHtcbiAgdmFyIGZvdW5kSWR4ID0gbWluRGFzaC5maW5kSW5kZXgodmFyaWFibGVzTGlzdCwgZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdmFyaWFibGUubmFtZSA9PT0gbmV3VmFyaWFibGUubmFtZSAmJiB2YXJpYWJsZS5zY29wZSA9PT0gbmV3VmFyaWFibGUuc2NvcGVcbiAgICApO1xuICB9KTtcblxuICBpZiAoZm91bmRJZHggPj0gMCkge1xuICAgIHZhcmlhYmxlc0xpc3RbZm91bmRJZHhdLm9yaWdpbiA9IGNvbWJpbmVBcnJheXMkMShcbiAgICAgIHZhcmlhYmxlc0xpc3RbZm91bmRJZHhdLm9yaWdpbixcbiAgICAgIG5ld1ZhcmlhYmxlLm9yaWdpblxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdmFyaWFibGVzTGlzdC5wdXNoKG5ld1ZhcmlhYmxlKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgbmV3IHByb2Nlc3MgdmFyaWFibGUgZGVmaW5pdGlvbiBvYmplY3RcbiAqIElkZW50aWZpZXMgY29ycmVjdCAoaGlnaGVzdCkgc2NvcGUsIGluIHdoaWNoIHZhcmlhYmxlIGlzIGF2YWlsYWJsZVxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZmxvd0VsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmF1bHRTY29wZVxuICpcbiAqIEByZXR1cm5zIHtQcm9jZXNzVmFyaWFibGV9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb2Nlc3NWYXJpYWJsZShmbG93RWxlbWVudCwgbmFtZSwgZGVmYXVsdFNjb3BlKSB7XG4gIHZhciBzY29wZSA9IGdldFNjb3BlJDEoZmxvd0VsZW1lbnQsIGRlZmF1bHRTY29wZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIG9yaWdpbjogWyBmbG93RWxlbWVudCBdLFxuICAgIHNjb3BlOiBzY29wZVxuICB9O1xufVxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBTZXQgcGFyZW50IGNvbnRhaW5lciBpZiBpdCBkZWZpbmVzIGl0J3Mgb3duIHNjb3BlIGZvciB0aGUgdmFyaWFibGUsIHNvXG4gKiB3aGVuIGl0IGRlZmluZXMgYW4gaW5wdXQgbWFwcGluZyBmb3IgaXQuIE90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGdsb2JhbCBzY29wZVxuICovXG5mdW5jdGlvbiBnZXRTY29wZSQxKGVsZW1lbnQsIGdsb2JhbFNjb3BlLCB2YXJpYWJsZU5hbWUpIHtcbiAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGVsZW1lbnQpO1xuXG4gIHZhciBzY29wZWRQYXJlbnQgPSBtaW5EYXNoLmZpbmQocGFyZW50cywgZnVuY3Rpb24ocGFyZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzJDEocGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaGFzSW5wdXRQYXJhbWV0ZXIocGFyZW50LCB2YXJpYWJsZU5hbWUpXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNjb3BlZFBhcmVudCA/IHNjb3BlZFBhcmVudCA6IGdsb2JhbFNjb3BlO1xufVxuXG5mdW5jdGlvbiBpcyQxKGVsZW1lbnQsIHR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50ICYmXG4gICAgICB0eXBlb2YgZWxlbWVudC4kaW5zdGFuY2VPZiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgZWxlbWVudC4kaW5zdGFuY2VPZih0eXBlKVxuICApO1xufVxuXG5mdW5jdGlvbiBoYXNJbnB1dFBhcmFtZXRlcihlbGVtZW50LCBuYW1lKSB7XG4gIHJldHVybiBtaW5EYXNoLmZpbmQoZ2V0SW5wdXRQYXJhbWV0ZXJzKGVsZW1lbnQpLCBmdW5jdGlvbihpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dC50YXJnZXQgPT09IG5hbWU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lQXJyYXlzJDEoYSwgYikge1xuICByZXR1cm4gYS5jb25jYXQoYik7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHByb2Nlc3MgdmFyaWFibGVzIGRlZmluZWQgaW4gb3V0cHV0IG1hcHBpbmdzLCBlLmcuXG4gKlxuICogPGJwbW46c2VydmljZVRhc2sgaWQ9XCJTZXJ2aWNlVGFza1wiPlxuICogICA8YnBtbjpleHRlbnNpb25FbGVtZW50cz5cbiAqICAgICA8emVlYmU6aW9NYXBwaW5nPlxuICogICAgICAgPHplZWJlOmlucHV0IHNvdXJjZT1cIj0gc291cmNlXCIgdGFyZ2V0PVwidmFyaWFibGUxXCIgLz5cbiAqICAgICA8L3plZWJlOmlvTWFwcGluZz5cbiAqICAgPC9icG1uOmV4dGVuc2lvbkVsZW1lbnRzPlxuICogPC9icG1uOnNlcnZpY2VUYXNrPlxuICpcbiAqID0+IEFkZHMgb25lIHZhcmlhYmxlIFwidmFyaWFibGUxXCIgdG8gdGhlIGxpc3QuXG4gKlxuICovXG5mdW5jdGlvbiBleHRyYWN0SW5NYXBwaW5ncyhvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IG9wdGlvbnMuZWxlbWVudHMsXG4gICAgICBwcm9jZXNzVmFyaWFibGVzID0gb3B0aW9ucy5wcm9jZXNzVmFyaWFibGVzO1xuXG4gIGlmICghbWluRGFzaC5pc0FycmF5KGVsZW1lbnRzKSkge1xuICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICB9XG5cbiAgbWluRGFzaC5mb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICB2YXIgaW5NYXBwaW5ncyA9IGdldEluTWFwcGluZ3MoZWxlbWVudCk7XG5cbiAgICAvLyBleHRyYWN0IGFsbCB2YXJpYWJsZXMgd2l0aCBjb3JyZWN0IHNjb3BlXG4gICAgbWluRGFzaC5mb3JFYWNoKGluTWFwcGluZ3MsIGZ1bmN0aW9uKG1hcHBpbmcpIHtcblxuICAgICAgdmFyIG5ld1ZhcmlhYmxlID0gY3JlYXRlUHJvY2Vzc1ZhcmlhYmxlKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtYXBwaW5nLnRhcmdldCxcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcblxuICAgICAgYWRkVmFyaWFibGVUb0xpc3QocHJvY2Vzc1ZhcmlhYmxlcywgbmV3VmFyaWFibGUpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcHJvY2Vzc1ZhcmlhYmxlcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgcHJvY2VzcyB2YXJpYWJsZXMgZGVmaW5lZCBpbiByZXN1bHQgdmFyaWFibGVzLCBlLmcuXG4gKlxuICogPGJwbW46c2VydmljZVRhc2sgaWQ9XCJTZXJ2aWNlVGFza1wiPlxuICogICA8YnBtbjptdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz5cbiAqICAgICA8YnBtbjpleHRlbnNpb25FbGVtZW50cz5cbiAqICAgICAgIDx6ZWViZTpsb29wQ2hhcmFjdGVyaXN0aWNzIGlucHV0RWxlbWVudD1cImlucHV0RWxlbWVudFwiIG91dHB1dENvbGxlY3Rpb249XCJvdXRwdXRDb2xsZWN0aW9uXCIgLz5cbiAqICAgICA8L2JwbW46ZXh0ZW5zaW9uRWxlbWVudHM+XG4gKiAgIDwvYnBtbjptdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz5cbiAqIDwvYnBtbjpzZXJ2aWNlVGFzaz5cbiAqXG4gKiA9PiBBZGRzIG9uZSB2YXJpYWJsZSBcImlucHV0RWxlbWVudFwidG8gdGhlIGxpc3QuXG4gKlxuICovXG5mdW5jdGlvbiBleHRyYWN0SW5wdXRFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gb3B0aW9ucy5lbGVtZW50cyxcbiAgICAgIHByb2Nlc3NWYXJpYWJsZXMgPSBvcHRpb25zLnByb2Nlc3NWYXJpYWJsZXM7XG5cbiAgaWYgKCFtaW5EYXNoLmlzQXJyYXkoZWxlbWVudHMpKSB7XG4gICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gIH1cblxuICBtaW5EYXNoLmZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZWxlbWVudC5sb29wQ2hhcmFjdGVyaXN0aWNzO1xuXG4gICAgdmFyIGlucHV0RWxlbWVudCA9IGxvb3BDaGFyYWN0ZXJpc3RpY3MgJiYgZ2V0SW5wdXRFbGVtZW50KGxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xuXG4gICAgaWYgKGlucHV0RWxlbWVudCkge1xuICAgICAgdmFyIG5ld1ZhcmlhYmxlID0gY3JlYXRlUHJvY2Vzc1ZhcmlhYmxlKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpbnB1dEVsZW1lbnQsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG5cbiAgICAgIGFkZFZhcmlhYmxlVG9MaXN0KHByb2Nlc3NWYXJpYWJsZXMsIG5ld1ZhcmlhYmxlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzVmFyaWFibGVzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBwcm9jZXNzIHZhcmlhYmxlcyBkZWZpbmVkIGluIG91dHB1dCBtYXBwaW5ncywgZS5nLlxuICpcbiAqIDxicG1uOnNlcnZpY2VUYXNrIGlkPVwiU2VydmljZVRhc2tcIj5cbiAqICAgPGJwbW46ZXh0ZW5zaW9uRWxlbWVudHM+XG4gKiAgICAgPHplZWJlOmlvTWFwcGluZz5cbiAqICAgICAgIDx6ZWViZTpvdXRwdXQgc291cmNlPVwiPSBzb3VyY2VcIiB0YXJnZXQ9XCJ2YXJpYWJsZTFcIiAvPlxuICogICAgIDwvemVlYmU6aW9NYXBwaW5nPlxuICogICA8L2JwbW46ZXh0ZW5zaW9uRWxlbWVudHM+XG4gKiA8L2JwbW46c2VydmljZVRhc2s+XG4gKlxuICogPT4gQWRkcyBvbmUgdmFyaWFibGUgXCJ2YXJpYWJsZTFcIiB0byB0aGUgbGlzdC5cbiAqXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RPdXRNYXBwaW5ncyhvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IG9wdGlvbnMuZWxlbWVudHMsXG4gICAgICBjb250YWluZXJFbGVtZW50ID0gb3B0aW9ucy5jb250YWluZXJFbGVtZW50LFxuICAgICAgcHJvY2Vzc1ZhcmlhYmxlcyA9IG9wdGlvbnMucHJvY2Vzc1ZhcmlhYmxlcztcblxuICBpZiAoIW1pbkRhc2guaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIG1pbkRhc2guZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIG91dE1hcHBpbmdzID0gZ2V0T3V0TWFwcGluZ3MoZWxlbWVudCk7XG5cbiAgICAvLyBleHRyYWN0IGFsbCB2YXJpYWJsZXMgd2l0aCBjb3JyZWN0IHNjb3BlXG4gICAgbWluRGFzaC5mb3JFYWNoKG91dE1hcHBpbmdzLCBmdW5jdGlvbihtYXBwaW5nKSB7XG4gICAgICB2YXIgbmV3VmFyaWFibGUgPSBjcmVhdGVQcm9jZXNzVmFyaWFibGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1hcHBpbmcudGFyZ2V0LFxuICAgICAgICBjb250YWluZXJFbGVtZW50XG4gICAgICApO1xuXG4gICAgICBhZGRWYXJpYWJsZVRvTGlzdChwcm9jZXNzVmFyaWFibGVzLCBuZXdWYXJpYWJsZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzVmFyaWFibGVzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBwcm9jZXNzIHZhcmlhYmxlcyBkZWZpbmVkIGluIG91dHB1dCBjb2xsZWN0aW9uLCBlLmcuXG4gKlxuICogPGJwbW46c2VydmljZVRhc2sgaWQ9XCJTZXJ2aWNlVGFza1wiPlxuICogICA8YnBtbjptdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz5cbiAqICAgICA8YnBtbjpleHRlbnNpb25FbGVtZW50cz5cbiAqICAgICAgIDx6ZWViZTpsb29wQ2hhcmFjdGVyaXN0aWNzIGlucHV0RWxlbWVudD1cImlucHV0RWxlbWVudFwiIG91dHB1dENvbGxlY3Rpb249XCJvdXRwdXRDb2xsZWN0aW9uXCIgLz5cbiAqICAgICA8L2JwbW46ZXh0ZW5zaW9uRWxlbWVudHM+XG4gKiAgIDwvYnBtbjptdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz5cbiAqIDwvYnBtbjpzZXJ2aWNlVGFzaz5cbiAqXG4gKiA9PiBBZGRzIG9uZSB2YXJpYWJsZSBcIm91dHB1dENvbGxlY3Rpb25cInRvIHRoZSBsaXN0LlxuICpcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE91dHB1dENvbGxlY3Rpb25zKG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gb3B0aW9ucy5lbGVtZW50cyxcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQgPSBvcHRpb25zLmNvbnRhaW5lckVsZW1lbnQsXG4gICAgICBwcm9jZXNzVmFyaWFibGVzID0gb3B0aW9ucy5wcm9jZXNzVmFyaWFibGVzO1xuXG4gIGlmICghbWluRGFzaC5pc0FycmF5KGVsZW1lbnRzKSkge1xuICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICB9XG5cbiAgbWluRGFzaC5mb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGVsZW1lbnQubG9vcENoYXJhY3RlcmlzdGljcztcblxuICAgIHZhciBvdXRwdXRDb2xsZWN0aW9uID0gbG9vcENoYXJhY3RlcmlzdGljcyAmJiBnZXRPdXRwdXRDb2xsZWN0aW9uKGxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xuXG4gICAgaWYgKG91dHB1dENvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBuZXdWYXJpYWJsZSA9IGNyZWF0ZVByb2Nlc3NWYXJpYWJsZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgb3V0cHV0Q29sbGVjdGlvbixcbiAgICAgICAgY29udGFpbmVyRWxlbWVudFxuICAgICAgKTtcblxuICAgICAgYWRkVmFyaWFibGVUb0xpc3QocHJvY2Vzc1ZhcmlhYmxlcywgbmV3VmFyaWFibGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHByb2Nlc3NWYXJpYWJsZXM7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHByb2Nlc3MgdmFyaWFibGVzIGRlZmluZWQgaW4gcmVzdWx0IHZhcmlhYmxlcywgZS5nLlxuICpcbiAqICAgPGJwbW46YnVzaW5lc3NSdWxlVGFzayBpZD1cIkFjdGl2aXR5XzFcIj5cbiAqICAgICA8YnBtbjpleHRlbnNpb25FbGVtZW50cz5cbiAqICAgICAgIDx6ZWViZTpjYWxsZWREZWNpc2lvbiByZXN1bHRWYXJpYWJsZT1cInZhcmlhYmxlMVwiIC8+XG4gKiAgICAgPC9icG1uOmV4dGVuc2lvbkVsZW1lbnRzPlxuICogICA8L2JwbW46YnVzaW5lc3NSdWxlVGFzaz5cbiAqXG4gKlxuICogPT4gQWRkcyBvbmUgdmFyaWFibGUgXCJ2YXJpYWJsZTFcInRvIHRoZSBsaXN0LlxuICpcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFJlc3VsdFZhcmlhYmxlcyhvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IG9wdGlvbnMuZWxlbWVudHMsXG4gICAgICBjb250YWluZXJFbGVtZW50ID0gb3B0aW9ucy5jb250YWluZXJFbGVtZW50LFxuICAgICAgcHJvY2Vzc1ZhcmlhYmxlcyA9IG9wdGlvbnMucHJvY2Vzc1ZhcmlhYmxlcztcblxuICBpZiAoIW1pbkRhc2guaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIG1pbkRhc2guZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIGJhc2VFbGVtZW50ID0gZ2V0Q2FsbGVkRGVjaXNpb24oZWxlbWVudCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBnZXRTY3JpcHQoZWxlbWVudCk7XG5cbiAgICBpZiAoIWJhc2VFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdFZhcmlhYmxlID0gYmFzZUVsZW1lbnQucmVzdWx0VmFyaWFibGU7XG5cbiAgICBpZiAocmVzdWx0VmFyaWFibGUpIHtcbiAgICAgIHZhciBuZXdWYXJpYWJsZSA9IGNyZWF0ZVByb2Nlc3NWYXJpYWJsZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcmVzdWx0VmFyaWFibGUsXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnRcbiAgICAgICk7XG5cbiAgICAgIGFkZFZhcmlhYmxlVG9MaXN0KHByb2Nlc3NWYXJpYWJsZXMsIG5ld1ZhcmlhYmxlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzVmFyaWFibGVzO1xufVxuXG52YXIgZXh0cmFjdG9ycyA9IFtcbiAgZXh0cmFjdEluTWFwcGluZ3MsXG4gIGV4dHJhY3RJbnB1dEVsZW1lbnQsXG4gIGV4dHJhY3RPdXRNYXBwaW5ncyxcbiAgZXh0cmFjdE91dHB1dENvbGxlY3Rpb25zLFxuICBleHRyYWN0UmVzdWx0VmFyaWFibGVzXG5dO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFByb2Nlc3NWYXJpYWJsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8TW9kZGxlRWxlbWVudD59IG9yaWdpblxuICogQHByb3BlcnR5IHtNb2RkbGVFbGVtZW50fSBzY29wZVxuICovXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogRXh0cmFjdG9ycyBhZGQgUHJvY2Vzc1ZhcmlhYmxlcyB0byB0aGUgYG9wdGlvbnMucHJvY2Vzc1ZhcmlhYmxlc2AgcGFyYW1ldGVyLlxuICogQGNhbGxiYWNrIGV4dHJhY3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXk8TW9kZGxlRWxlbWVudD59IG9wdGlvbnMuZWxlbWVudHNcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gb3B0aW9ucy5jb250YWluZXJFbGVtZW50XG4gKiBAcGFyYW0ge0FycmF5PFByb2Nlc3NWYXJpYWJsZT59IG9wdGlvbnMucHJvY2Vzc1ZhcmlhYmxlc1xuICovXG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBwcm9jZXNzIHZhcmlhYmxlcyBmb3IgYSBnaXZlbiBjb250YWluZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGFpbmVyRWxlbWVudFxuICogQHBhcmFtIHtBcnJheTxleHRyYWN0b3I+fSBbYWRkaXRpb25hbEV4dHJhY3RvcnNdXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8UHJvY2Vzc1ZhcmlhYmxlPj59XG4gKi9cbmZ1bmN0aW9uIGdldFByb2Nlc3NWYXJpYWJsZXMoY29udGFpbmVyRWxlbWVudCwgYWRkaXRpb25hbEV4dHJhY3RvcnMgPSBbXSkge1xuICB2YXIgcHJvY2Vzc1ZhcmlhYmxlcyA9IFtdO1xuXG4gIC8vICgxKSBleHRyYWN0IGFsbCBmbG93IGVsZW1lbnRzIGluc2lkZSB0aGUgY29udGFpbmVyXG4gIHZhciBlbGVtZW50cyA9IHNlbGZBbmRBbGxGbG93RWxlbWVudHMoWyBjb250YWluZXJFbGVtZW50IF0sIGZhbHNlKTtcblxuICBjb25zdCBhbGxQcm9taXNlcyA9IFtdO1xuXG4gIC8vICgyKSBleHRyYWN0IGFsbCB2YXJpYWJsZXMgZnJvbSB0aGUgZXh0cmFjdG9yc1xuICBtaW5EYXNoLmZvckVhY2goWyAuLi5leHRyYWN0b3JzLCAuLi5hZGRpdGlvbmFsRXh0cmFjdG9ycyBdLCBmdW5jdGlvbihleHRyYWN0b3IpIHtcbiAgICBhbGxQcm9taXNlcy5wdXNoKGV4dHJhY3Rvcih7XG4gICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICBjb250YWluZXJFbGVtZW50OiBjb250YWluZXJFbGVtZW50LFxuICAgICAgcHJvY2Vzc1ZhcmlhYmxlczogcHJvY2Vzc1ZhcmlhYmxlc1xuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKGFsbFByb21pc2VzKVxuICAgIC50aGVuKCgpID0+IHByb2Nlc3NWYXJpYWJsZXMpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgdmFyaWFibGVzIHdoaWNoIGFyZSBhdmFpbGFibGUgaW4gdGhlIGdpdmVuIHNjb3BlXG4gKlxuICogKiBFeGNsdWRlIHZhcmlhYmxlcyB3aGljaCBhcmUgb25seSBhdmFpbGFibGUgaW4gb3RoZXIgc2NvcGVzXG4gKiAqIEV4Y2x1ZGUgdmFyaWFibGVzIHdoaWNoIGFyZSBwcm9kdWNlZCBieSB0aGUgZ2l2ZW4gZWxlbWVudFxuICogKiBJbmNsdWRlIHZhcmlhYmxlcyB3aGljaCBhcmUgYXZhaWxhYmxlIGluIHBhcmVudCBzY29wZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcm9vdEVsZW1lbnQgZWxlbWVudCBmcm9tIHdoZXJlIHRvIGV4dHJhY3QgYWxsIHZhcmlhYmxlc1xuICogQHBhcmFtIHtBcnJheTxleHRyYWN0b3I+fSBbYWRkaXRpb25hbEV4dHJhY3RvcnNdXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8UHJvY2Vzc1ZhcmlhYmxlPj59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFZhcmlhYmxlc0ZvclNjb3BlKHNjb3BlLCByb290RWxlbWVudCwgYWRkaXRpb25hbEV4dHJhY3RvcnMgPSBbXSkge1xuXG4gIHZhciBhbGxWYXJpYWJsZXMgPSBhd2FpdCBnZXRQcm9jZXNzVmFyaWFibGVzKHJvb3RFbGVtZW50LCBhZGRpdGlvbmFsRXh0cmFjdG9ycyk7XG5cbiAgdmFyIHNjb3BlRWxlbWVudCA9IGdldEVsZW1lbnQoc2NvcGUsIHJvb3RFbGVtZW50KTtcblxuICAvLyAoMSkgZ2V0IHZhcmlhYmxlcyBmb3IgZ2l2ZW4gc2NvcGVcbiAgdmFyIHNjb3BlVmFyaWFibGVzID0gbWluRGFzaC5maWx0ZXIoYWxsVmFyaWFibGVzLCBmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgIHJldHVybiB2YXJpYWJsZS5zY29wZS5pZCA9PT0gc2NvcGVFbGVtZW50LmlkO1xuICB9KTtcblxuICAvLyAoMikgZ2V0IHZhcmlhYmxlcyBmb3IgcGFyZW50IHNjb3Blc1xuICB2YXIgcGFyZW50cyA9IGdldFBhcmVudHMoc2NvcGVFbGVtZW50KTtcblxuICB2YXIgcGFyZW50c1Njb3BlVmFyaWFibGVzID0gbWluRGFzaC5maWx0ZXIoYWxsVmFyaWFibGVzLCBmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgIHJldHVybiBtaW5EYXNoLmZpbmQocGFyZW50cywgZnVuY3Rpb24ocGFyZW50KSB7XG4gICAgICByZXR1cm4gcGFyZW50LmlkID09PSB2YXJpYWJsZS5zY29wZS5pZDtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmVBcnJheXMoc2NvcGVWYXJpYWJsZXMsIHBhcmVudHNTY29wZVZhcmlhYmxlcyk7XG59XG5cblxuZnVuY3Rpb24gZ2V0VmFyaWFibGVzRm9yRWxlbWVudChlbGVtZW50LCBhZGRpdGlvbmFsRXh0cmFjdG9ycyA9IFtdKSB7XG4gIHJldHVybiBnZXRWYXJpYWJsZXNGb3JTY29wZShnZXRTY29wZShlbGVtZW50KSwgZ2V0Um9vdEVsZW1lbnQoZWxlbWVudCksIGFkZGl0aW9uYWxFeHRyYWN0b3JzKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NvcGUoZWxlbWVudCkge1xuICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIGJvLnByb2Nlc3NSZWYuaWQ7XG4gIH1cblxuICByZXR1cm4gYm8uaWQ7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZjtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0O1xuICB9XG5cbiAgbGV0IHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuXG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCAmJiAhaXMocGFyZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjb21iaW5lQXJyYXlzKGEsIGIpIHtcbiAgcmV0dXJuIGEuY29uY2F0KGIpO1xufVxuXG5cbmZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChlbGVtZW50ICYmIGVsZW1lbnQuYnVzaW5lc3NPYmplY3QpIHx8IGVsZW1lbnQ7XG59XG5cblxuZnVuY3Rpb24gaXMoZWxlbWVudCwgdHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gYm8gJiYgKHR5cGVvZiBiby4kaW5zdGFuY2VPZiA9PT0gJ2Z1bmN0aW9uJykgJiYgYm8uJGluc3RhbmNlT2YodHlwZSk7XG59XG5cbmV4cG9ydHMuZ2V0UHJvY2Vzc1ZhcmlhYmxlcyA9IGdldFByb2Nlc3NWYXJpYWJsZXM7XG5leHBvcnRzLmdldFZhcmlhYmxlc0ZvckVsZW1lbnQgPSBnZXRWYXJpYWJsZXNGb3JFbGVtZW50O1xuZXhwb3J0cy5nZXRWYXJpYWJsZXNGb3JTY29wZSA9IGdldFZhcmlhYmxlc0ZvclNjb3BlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-element-templates/node_modules/@bpmn-io/extract-process-variables/zeebe/index.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js-executable-fix/index.js":
/*!******************************************************!*\
!*** ./node_modules/bpmn-js-executable-fix/index.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _src__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src */ \"./node_modules/bpmn-js-executable-fix/src/index.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_src__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF3Qzs7QUFFeEMsaUVBQWUsNENBQW1CLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9pbmRleC5qcz82YWRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGVjdXRhYmxlRml4TW9kdWxlIGZyb20gJy4vc3JjJztcblxuZXhwb3J0IGRlZmF1bHQgRXhlY3V0YWJsZUZpeE1vZHVsZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-executable-fix/index.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js-executable-fix/src/ExecutableFix.js":
/*!******************************************************************!*\
!*** ./node_modules/bpmn-js-executable-fix/src/ExecutableFix.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ fixIsExecutable)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n/**\n * Fix bpmn:Process#isExecutable to always be set to either\n * true or false after edit.\n *\n * This is an initializer that may be passed to a modules\n * __init__ block.\n *\n * @param {EventBus} eventBus\n */\nfunction fixIsExecutable(eventBus) {\n\n function fixIfProcess(element) {\n\n // exclude labels\n if (element.labelTarget) {\n return;\n }\n\n var bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element);\n\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(bo, 'bpmn:Participant')) {\n bo = bo.processRef;\n }\n\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(bo, 'bpmn:Process')) {\n bo.isExecutable = !!bo.isExecutable;\n }\n }\n\n eventBus.on([ 'shape.added', 'root.added' ], function(event) {\n fixIfProcess(event.element);\n });\n\n eventBus.on('elements.changed', function(event) {\n\n var elements = event.elements;\n\n elements.forEach(function(element) {\n fixIfProcess(element);\n });\n\n });\n}\n\nfixIsExecutable.$inject = [ 'eventBus' ];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9zcmMvRXhlY3V0YWJsZUZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUdvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDZTs7QUFFZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLDZFQUFpQjs7QUFFOUIsUUFBUSw4REFBRTtBQUNWO0FBQ0E7O0FBRUEsUUFBUSw4REFBRTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxHQUFHO0FBQ0g7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9zcmMvRXhlY3V0YWJsZUZpeC5qcz9kM2JjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBpc1xufSBmcm9tICdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogRml4IGJwbW46UHJvY2VzcyNpc0V4ZWN1dGFibGUgdG8gYWx3YXlzIGJlIHNldCB0byBlaXRoZXJcbiAqIHRydWUgb3IgZmFsc2UgYWZ0ZXIgZWRpdC5cbiAqXG4gKiBUaGlzIGlzIGFuIGluaXRpYWxpemVyIHRoYXQgbWF5IGJlIHBhc3NlZCB0byBhIG1vZHVsZXNcbiAqIF9faW5pdF9fIGJsb2NrLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpeElzRXhlY3V0YWJsZShldmVudEJ1cykge1xuXG4gIGZ1bmN0aW9uIGZpeElmUHJvY2VzcyhlbGVtZW50KSB7XG5cbiAgICAvLyBleGNsdWRlIGxhYmVsc1xuICAgIGlmIChlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICBpZiAoaXMoYm8sICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGJvID0gYm8ucHJvY2Vzc1JlZjtcbiAgICB9XG5cbiAgICBpZiAoaXMoYm8sICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgYm8uaXNFeGVjdXRhYmxlID0gISFiby5pc0V4ZWN1dGFibGU7XG4gICAgfVxuICB9XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUuYWRkZWQnLCAncm9vdC5hZGRlZCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBmaXhJZlByb2Nlc3MoZXZlbnQuZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50cy5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50cyA9IGV2ZW50LmVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBmaXhJZlByb2Nlc3MoZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgfSk7XG59XG5cbmZpeElzRXhlY3V0YWJsZS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-executable-fix/src/ExecutableFix.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js-executable-fix/src/index.js":
/*!**********************************************************!*\
!*** ./node_modules/bpmn-js-executable-fix/src/index.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ExecutableFix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ExecutableFix */ \"./node_modules/bpmn-js-executable-fix/src/ExecutableFix.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __init__: [\n _ExecutableFix__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNEM7OztBQUc1QyxpRUFBZTtBQUNmO0FBQ0EsSUFBSSxzREFBYTtBQUNqQjtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9icG1uLWpzLWV4ZWN1dGFibGUtZml4L3NyYy9pbmRleC5qcz8xNWJlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGVjdXRhYmxlRml4IGZyb20gJy4vRXhlY3V0YWJsZUZpeCc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgIEV4ZWN1dGFibGVGaXhcbiAgXVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-executable-fix/src/index.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js-properties-panel/dist/index.esm.js":
/*!*****************************************************************!*\
!*** ./node_modules/bpmn-js-properties-panel/dist/index.esm.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BpmnPropertiesPanelModule: () => (/* binding */ index$3),\n/* harmony export */ BpmnPropertiesProviderModule: () => (/* binding */ index$2),\n/* harmony export */ CamundaPlatformPropertiesProviderModule: () => (/* binding */ index),\n/* harmony export */ CamundaPlatformTooltipProvider: () => (/* binding */ TooltipProvider),\n/* harmony export */ ZeebePropertiesProviderModule: () => (/* binding */ index$1),\n/* harmony export */ ZeebeTooltipProvider: () => (/* binding */ TooltipProvider$1),\n/* harmony export */ useService: () => (/* binding */ useService)\n/* harmony export */ });\n/* harmony import */ var _bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact/hooks */ \"./node_modules/@bpmn-io/properties-panel/preact/hooks/dist/hooks.module.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @bpmn-io/properties-panel */ \"./node_modules/@bpmn-io/properties-panel/dist/index.esm.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact */ \"./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js\");\n/* harmony import */ var bpmn_js_lib_features_label_editing_LabelUtil__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! bpmn-js/lib/features/label-editing/LabelUtil */ \"./node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! bpmn-js/lib/features/modeling/util/ModelingUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! bpmn-js/lib/util/DiUtil */ \"./node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact/compat */ \"./node_modules/@bpmn-io/properties-panel/preact/compat/dist/compat.module.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact/jsx-runtime */ \"./node_modules/@bpmn-io/properties-panel/preact/jsx-runtime/dist/jsxRuntime.module.js\");\n/* harmony import */ var diagram_js_lib_features_keyboard_KeyboardUtil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! diagram-js/lib/features/keyboard/KeyboardUtil */ \"./node_modules/diagram-js/lib/features/keyboard/KeyboardUtil.js\");\n/* harmony import */ var min_dom__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! min-dom */ \"./node_modules/min-dom/dist/index.esm.js\");\n/* harmony import */ var ids__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ids */ \"./node_modules/ids/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/diagram-js/lib/util/Collections.js\");\n/* harmony import */ var _bpmn_io_extract_process_variables_zeebe__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @bpmn-io/extract-process-variables/zeebe */ \"./node_modules/@bpmn-io/extract-process-variables/zeebe/index.mjs\");\n/* harmony import */ var array_move__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! array-move */ \"./node_modules/array-move/index.js\");\n/* harmony import */ var _bpmn_io_extract_process_variables__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @bpmn-io/extract-process-variables */ \"./node_modules/@bpmn-io/extract-process-variables/dist/index.mjs\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst BpmnPropertiesPanelContext = (0,_bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_2__.createContext)({\n selectedElement: null,\n injector: null,\n getService() {\n return null;\n }\n});\n\nfunction useService(type, strict) {\n const {\n getService\n } = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(BpmnPropertiesPanelContext);\n return getService(type, strict);\n}\n\nfunction _extends$1o() { return _extends$1o = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1o.apply(null, arguments); }\nvar AssociationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1o({\n width: \"32\",\n height: \"32\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n stroke: \"#000\",\n strokeWidth: \"2\",\n fill: \"none\",\n strokeDasharray: \"3.3,6\",\n strokeLinecap: \"square\",\n d: \"M1.5 30.5l29-29\"\n}));\n\nfunction _extends$1n() { return _extends$1n = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1n.apply(null, arguments); }\nvar BusinessRuleTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1n({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zM5.296 7.398v12.665h16.87V7.398H5.296zm.718 4.386h15.433v3.44H9.985v-3.432h-.719v3.431H6.014v-3.44zm0 4.158h3.252v3.403H6.014v-3.403zm3.97 0h11.463v3.403H9.985v-3.403z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.079 8.209v3.587H21.44V8.209z\"\n}));\n\nfunction _extends$1m() { return _extends$1m = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1m.apply(null, arguments); }\nvar CallActivityIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1m({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M24.978 3c3.761 0 6.89 2.979 7.018 6.695l.004.238V22.4c0 3.747-3.05 6.804-6.783 6.93l-.24.003H7.023c-3.761 0-6.89-2.978-7.018-6.695L0 22.4V9.933C0 6.187 3.05 3.13 6.783 3.004L7.023 3h17.955zm0 3.667H7.022c-1.842 0-3.255 1.344-3.35 3.079l-.005.187V22.4c0 1.761 1.35 3.167 3.16 3.262l.195.005L10 25.666V15h12v10.666h2.978c1.842 0 3.255-1.344 3.35-3.079l.005-.187V9.933c0-1.761-1.35-3.166-3.16-3.261l-.195-.005zm-3.732 9.087H10.754v9.912h10.491v-9.912zm-4.475 1.817v2.658h2.658v1.542H16.77v2.658H15.23V21.77H12.57V20.23h2.658V17.57h1.542z\"\n}));\n\nfunction _extends$1l() { return _extends$1l = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1l.apply(null, arguments); }\nvar CollaborationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1l({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"g\", {\n fillRule: \"evenodd\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fillRule: \"nonzero\",\n d: \"M0 0v8.62h32V0H0zm1.655 7.054v-5.37h28.62v5.37H1.656zM0 23.38V32h32v-8.62H0zm1.655 7.054v-5.37h28.62v5.37H1.656z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M24 8l4 7h-8l4-7zm0 2l-2.28 4h4.56L24 10zM23.5 21h1v3h-1zM23.5 15h1v3h-1zM8 24l-4-7h8l-4 7zm0-2l2.28-4H5.72L8 22zM7.5 8h1v3h-1zM7.5 14h1v3h-1z\"\n})));\n\nfunction _extends$1k() { return _extends$1k = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1k.apply(null, arguments); }\nvar ConditionalFlowIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1k({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M32 .041S20.42 5.95 14.537 8.713c1.26 1.15 2.432 2.392 3.648 3.588-5.703 5.78-3.15 3.303-8.087 8.316l-8.472 1.377L0 32l10.006-1.626.098-.598 1.279-7.873c4.975-5.052 2.403-2.555 8.118-8.346 1.218 1.214 2.43 2.435 3.648 3.648C26.29 11.018 32 .041 32 .041zM9.603 22.397L8.54 28.91 2.03 29.97l1.061-6.515 6.512-1.058z\"\n}));\n\nfunction _extends$1j() { return _extends$1j = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1j.apply(null, arguments); }\nvar ConnectionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1j({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M32 .06S20.33 6.014 14.403 8.798c1.27 1.16 2.451 2.41 3.676 3.616L0 30.734 1.325 32l18.08-18.32c1.227 1.223 2.448 2.453 3.676 3.676C26.247 11.12 32 .06 32 .06z\"\n}));\n\nfunction _extends$1i() { return _extends$1i = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1i.apply(null, arguments); }\nvar DataInputOutputAssociationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1i({\n width: \"32\",\n height: \"32\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n stroke: \"#000\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeDasharray: \"1.1,4.3\",\n d: \"M1.5 30.5L27 5\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M31.803.197L26.5 16.107l-1.52-1.52 3.783-11.35-11.35 3.783-1.52-1.52z\"\n}));\n\nfunction _extends$1h() { return _extends$1h = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1h.apply(null, arguments); }\nvar DataInputIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1h({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M20.833 0H3.488v32H28V7.36L20.833 0zm-2.105 1.818v7.507h7.454v20.857H5.306V1.818h13.422zm1.818.493l5.06 5.196h-5.06V2.311zm-9.182.86v3.744H7.081v3.222h4.283v3.743l5.7-5.354-5.7-5.354zm.808 1.868l3.711 3.487-3.71 3.487V9.329H7.888V7.723h4.283V5.039z\"\n}));\n\nfunction _extends$1g() { return _extends$1g = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1g.apply(null, arguments); }\nvar DataObjectIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1g({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M21.345 0H4v32h24.512V7.36L21.345 0zM19.24 1.818v7.507h7.454v20.857H5.818V1.818H19.24zm1.818.493l5.06 5.196h-5.06V2.311z\"\n}));\n\nfunction _extends$1f() { return _extends$1f = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1f.apply(null, arguments); }\nvar DataOutputIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1f({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M20.833 0H3.488v32H28V7.36L20.833 0zm-2.105 1.818v7.507h7.454v20.857H5.306V1.818h13.422zm1.818.493l5.06 5.196h-5.06V2.311zm-9.182.86v3.744H7.081v3.222h4.283v3.743l5.7-5.354-5.7-5.354z\"\n}));\n\nfunction _extends$1e() { return _extends$1e = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1e.apply(null, arguments); }\nvar DataStoreIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1e({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.008 1c-3.712 0-7.417.306-10.319.939-1.45.316-2.7.71-3.68 1.226C1.065 3.662.297 4.304.061 5.23a.823.823 0 00-.035.15L0 5.502l.017.084c-.012 7.41 0 14.46 0 22.08l.017.082c.203.985.995 1.656 1.975 2.172.98.517 2.23.91 3.68 1.226 2.902.633 6.607.94 10.319.94 3.711 0 7.416-.307 10.318-.94 1.451-.316 2.701-.71 3.68-1.226.98-.516 1.772-1.187 1.975-2.172l.017-.082V5.541a.825.825 0 000-.106v-.016l-.002-.013a.823.823 0 00-.046-.197c-.244-.916-1.007-1.55-1.943-2.044-.98-.516-2.23-.91-3.68-1.226C23.423 1.306 19.718 1 16.006 1zm0 1.646c3.62 0 7.245.308 9.968.901 1.36.297 2.497.67 3.263 1.074.612.323.932.643 1.063.882-.131.24-.451.56-1.063.882-.766.404-1.902.777-3.263 1.074-2.723.594-6.349.901-9.968.901-3.62 0-7.245-.307-9.968-.901-1.361-.297-2.497-.67-3.264-1.074-.611-.322-.931-.642-1.062-.882.13-.24.451-.56 1.062-.882.767-.403 1.903-.777 3.264-1.074 2.723-.593 6.348-.9 9.968-.9zM1.664 7.647c.112.067.227.132.345.194.98.517 2.23.91 3.68 1.226 2.902.633 6.607.94 10.319.94 3.711 0 7.416-.307 10.318-.94 1.451-.316 2.701-.71 3.68-1.226.119-.062.234-.127.346-.194v1.93c-.08.245-.398.619-1.113.995-.766.404-1.902.777-3.263 1.074-2.723.594-6.349.901-9.968.901-3.62 0-7.245-.307-9.968-.9-1.361-.298-2.497-.671-3.264-1.075-.714-.376-1.032-.75-1.112-.995v-1.93zm0 4.187c.112.067.227.132.345.195.98.516 2.23.91 3.68 1.226 2.902.632 6.607.938 10.319.938 3.711 0 7.416-.306 10.318-.938 1.451-.317 2.701-.71 3.68-1.226.119-.063.234-.128.346-.195v1.93c-.08.245-.398.619-1.113.995-.766.404-1.902.777-3.263 1.074-2.723.594-6.349.901-9.968.901-3.62 0-7.245-.307-9.968-.9-1.361-.298-2.497-.67-3.264-1.075-.714-.376-1.032-.75-1.112-.995v-1.93zm0 4.188c.112.067.227.131.345.194.98.516 2.23.91 3.68 1.226 2.902.633 6.607.939 10.319.939 3.711 0 7.416-.306 10.318-.94 1.451-.316 2.701-.709 3.68-1.225.119-.063.234-.127.346-.194V27.47c-.08.245-.398.618-1.113.995-.766.404-1.902.777-3.263 1.074-2.723.594-6.349.9-9.968.9-3.62 0-7.245-.306-9.968-.9-1.361-.297-2.497-.67-3.264-1.074-.714-.377-1.032-.75-1.112-.995V16.022z\"\n}));\n\nfunction _extends$1d() { return _extends$1d = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1d.apply(null, arguments); }\nvar DefaultFlowIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1d({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M32 .06S20.33 6.014 14.403 8.798c1.27 1.16 2.451 2.41 3.676 3.616L6.84 23.804H.046v1.755h5.063L0 30.735 1.325 32l6.357-6.441h7.145v-1.756H9.414l9.99-10.123c1.228 1.223 2.45 2.453 3.677 3.676C26.247 11.12 32 .06 32 .06z\"\n}));\n\nfunction _extends$1c() { return _extends$1c = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1c.apply(null, arguments); }\nvar EndEventCancelIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1c({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm-3.955 3.918L8.94 12.072l3.985 3.985-3.913 3.913 3.048 3.047 3.913-3.913 3.987 3.987 3.096-3.096-3.987-3.987 3.913-3.913-3.047-3.048-3.913 3.913-3.985-3.985z\"\n}));\n\nfunction _extends$1b() { return _extends$1b = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1b.apply(null, arguments); }\nvar EndEventCompensationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1b({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm-.56 5.744l-7.407 5.23 7.408 5.234v-5.057c2.384 1.687 4.771 3.371 7.157 5.057V10.801l-7.157 5.054v-5.054z\"\n}));\n\nfunction _extends$1a() { return _extends$1a = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1a.apply(null, arguments); }\nvar EndEventErrorIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1a({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm6.132 4.166l-3.633 7.363-4.516-5.874-4.102 12.131 4.599-5.91 4.743 5.427 2.909-13.137z\"\n}));\n\nfunction _extends$19() { return _extends$19 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$19.apply(null, arguments); }\nvar EndEventEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$19({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm.006 3.9c-1.672 4.653-2.733 9.5-4.406 14.153 1.535-1.525 2.872-3.234 4.406-4.759l4.406 4.76c-1.497-4.71-2.91-9.445-4.406-14.155z\"\n}));\n\nfunction _extends$18() { return _extends$18 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$18.apply(null, arguments); }\nvar EndEventLinkIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$18({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676 0C7.943.007.834 6.45.104 14.16c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 4.958 23.394.313 16.978.032A18.532 18.532 0 0015.676 0zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm1.78 4.065v3.555H9.779v6.713h7.994v3.554l5.828-6.91-5.828-6.912z\"\n}));\n\nfunction _extends$17() { return _extends$17 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$17.apply(null, arguments); }\nvar EndEventMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$17({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676 0C7.943.007.834 6.45.104 14.16c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 4.958 23.394.313 16.978.032A18.532 18.532 0 0015.676 0zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm-5.91 5.448l6.041 4.9 6.04-4.9H10.084zm-1.34 1.137v9.92h14.513v-9.718l-7.132 5.786-7.381-5.988z\"\n}));\n\nfunction _extends$16() { return _extends$16 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$16.apply(null, arguments); }\nvar EndEventMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$16({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676 0C7.943.007.834 6.45.104 14.16c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 4.958 23.394.313 16.978.032A18.529 18.529 0 0015.676 0zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm.011 3.039l-7.619 5.53 2.91 8.95h9.418l2.91-8.95-7.619-5.53z\"\n}));\n\nfunction _extends$15() { return _extends$15 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$15.apply(null, arguments); }\nvar EndEventNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$15({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.84.042C8.654-.01 1.913 5.437.4 12.454-1.057 18.62 1.554 25.495 6.784 29.09c5.076 3.636 12.31 3.92 17.59.544 5.309-3.251 8.435-9.744 7.445-15.921C30.91 7.307 25.795 1.738 19.442.422a16.064 16.064 0 00-3.602-.38zm.382 5.01c5.28-.017 10.13 4.353 10.669 9.61.687 5.025-2.552 10.281-7.423 11.792-4.754 1.617-10.486-.447-12.962-4.856-2.74-4.575-1.574-11.094 2.768-14.27a11.05 11.05 0 016.948-2.276z\"\n}));\n\nfunction _extends$14() { return _extends$14 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$14.apply(null, arguments); }\nvar EndEventSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$14({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm.006 3.492c-2.261 4.07-4.532 8.136-6.797 12.204h13.595L15.999 8.55z\"\n}));\n\nfunction _extends$13() { return _extends$13 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$13.apply(null, arguments); }\nvar EndEventTerminateIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$13({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm.006 2.859c-5.264-.2-9.495 5.551-7.755 10.516 1.366 5.085 8.108 7.436 12.339 4.301 4.455-2.807 4.708-9.943.462-13.058A8.128 8.128 0 0016 7.915z\"\n}));\n\nfunction _extends$12() { return _extends$12 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$12.apply(null, arguments); }\nvar EventSubProcessExpandedIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$12({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M7.295 4.78h1.779V3.003h-1.78V4.78zm3.558 0h1.779V3.003h-1.78V4.78zm3.557 0h1.78V3.003h-1.78V4.78zm3.558 0h1.78V3.003h-1.78V4.78zm3.558 0h1.779V3.003h-1.779V4.78zm3.558 0c.55.014 1.106-.034 1.654.045l.245-1.762c-.629-.096-1.266-.05-1.9-.061V4.78zM5.732 3.004a5.933 5.933 0 00-.915.093c.111.582.226 1.164.315 1.75.358-.101.947.098.746-.483-.096-.382.164-1.208-.146-1.36zm22.372 2.281c.427.234.812.547 1.13.915.42-.4 1.002-.777 1.33-1.18a5.863 5.863 0 00-1.593-1.289l-.867 1.554zm-25.27-1.44c-.587.354-1.11.811-1.539 1.345.47.333.96.86 1.417 1.077.299-.362.66-.673 1.065-.913-.328-.493-.55-1.055-.944-1.509zM30.515 7.26c-.563.046-.557.342-.378.784.154.25-.097.862.25.85.525-.023 1.14.043 1.612-.032a5.891 5.891 0 00-.362-2.027l-1.122.425zM.268 7.114A6.042 6.042 0 000 9.052h1.78c-.013-.5.047-1.003.208-1.478L.296 7.027l-.026.079-.002.008zM30.22 12.45H32v-1.779h-1.779v1.779zm-30.22.16h1.78v-1.779H0v1.78zm30.22 3.398H32v-1.78h-1.779v1.78zm-30.22.16h1.78v-1.779H0v1.779zm30.22 3.398H32v-1.78h-1.779v1.78zm-30.22.16h1.78v-1.78H0v1.78zm30.22 3.397H32v-1.779h-1.779v1.78zm-30.22.16h1.78v-1.778H0v1.778zm30.137 1.47a4.059 4.059 0 01-.522 1.32c.506.283 1.046.715 1.53.908a5.836 5.836 0 00.744-1.918c-.576-.094-1.209-.264-1.752-.31zm-29.984.51c.157.676.435 1.325.82 1.904l1.486-.977a4.065 4.065 0 01-.577-1.347l-1.73.42zm28.427 1.943c-.371.277-.79.49-1.234.627l.548 1.693a5.84 5.84 0 001.835-.96l-1.082-1.412-.066.05-.001.002zm-26.164 1.47c.567.413 1.21.722 1.886.907.14-.569.343-1.175.444-1.722a4.062 4.062 0 01-1.283-.624l-1.047 1.438zm3.88 1.119h1.779v-1.78h-1.78v1.78zm3.55 0h1.787v-1.78H9.846v1.78zm3.565 0h1.78v-1.78h-1.78v1.78zm3.558 0h1.78v-1.78h-1.78v1.78zm3.451 0h1.743v-1.78h-1.743v1.78zm3.665 0h1.779v-1.78h-1.78v1.78zm-1.922-.545V16.776H9.846V29.25h12.318zM10.967 17.905h10.068V27.97H10.967V17.905zm1.336 3.998v1.711h7.396v-1.711h-7.396z\",\n opacity: \".97\"\n}));\n\nfunction _extends$11() { return _extends$11 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$11.apply(null, arguments); }\nvar GatewayComplexIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$11({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.001 0a1.29 1.29 0 00-.917.373L.373 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.917.372A1.294 1.294 0 0016.002 0zM16 2.181l13.821 13.821L16 29.823 2.179 16.003 16 2.18zm-.327 6.79v.007l-.145.027-.118.08-.083.123-.028.145v4.954L11.793 10.8l-.125-.08-.14-.029-.144.027-.122.082-.46.46-.085.125-.026.142.028.14.08.125 3.505 3.505H9.347l-.001-.002-.145.032-.118.08-.083.122-.028.146v.652l.029.147.082.119.12.08.144.032h4.956L10.8 20.207v-.001l-.084.124-.026.142.028.14.08.124.46.461.126.082.14.029.143-.027.124-.084L15.3 17.69v4.964-.001l.028.147.082.12.12.08.144.031h.652l.148-.03.118-.08.083-.12.028-.146v-4.962l3.505 3.505.126.082.14.027.142-.027.124-.084.461-.46.083-.123s.028-.144.027-.146l-.028-.14-.082-.126-3.496-3.496h4.948l.148-.03.119-.08.082-.12.028-.147v-.652l-.028-.145-.083-.122-.119-.08s-.147-.033-.147-.031h-4.964l3.512-3.512.082-.122.029-.144-.028-.14-.084-.124-.46-.461-.123-.082-.14-.027-.145.027-.122.082-3.507 3.507V9.348l-.028-.146-.082-.122-.12-.08-.147-.029h-.652z\"\n}));\n\nfunction _extends$10() { return _extends$10 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$10.apply(null, arguments); }\nvar GatewayEventBasedIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$10({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 0a1.29 1.29 0 00-.918.373L.371 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.915.372A1.294 1.294 0 0016 0zm-.002 2.181l13.821 13.821-13.821 13.821-13.821-13.82L15.998 2.18zm0 5.876l-.254.185-7.377 5.355 2.915 8.964h9.433l2.915-8.964-7.631-5.54zm0 1.07l6.614 4.8-2.526 7.769h-8.175l-2.526-7.768 6.614-4.802z\"\n}));\n\nfunction _extends$$() { return _extends$$ = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$$.apply(null, arguments); }\nvar GatewayNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$$({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M.373 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.917.373a1.313 1.313 0 00-1.833 0L.373 15.084zm1.806.918L16 2.182l13.821 13.82L16 29.823 2.179 16.003z\"\n}));\n\nfunction _extends$_() { return _extends$_ = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$_.apply(null, arguments); }\nvar GatewayOrIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$_({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.001 0a1.29 1.29 0 00-.917.373L.373 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.917.372A1.294 1.294 0 0016.002 0zM16 2.181l13.821 13.821L16 29.823 2.179 16.003 16 2.18zm0 6.379a7.447 7.447 0 00-7.44 7.441A7.447 7.447 0 0016 23.443 7.447 7.447 0 0023.443 16a7.447 7.447 0 00-7.441-7.441zm0 .825a6.61 6.61 0 016.617 6.616A6.61 6.61 0 0116 22.618 6.61 6.61 0 019.385 16 6.61 6.61 0 0116 9.385z\"\n}));\n\nfunction _extends$Z() { return _extends$Z = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$Z.apply(null, arguments); }\nvar GatewayParallelIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$Z({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.001 0a1.29 1.29 0 00-.917.373L.373 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.917.372A1.294 1.294 0 0016.002 0zM16 2.181l13.821 13.821L16 29.823 2.179 16.003 16 2.18zm-.377 5.708l-.168.032-.136.092-.096.14-.032.168v6.868h-6.87l-.002-.002-.166.037-.137.092v-.002l-.095.141-.033.167v.753s.032.169.034.17l.094.138.138.092.167.036h6.87v6.867l-.001-.001.033.17.095.138.138.092s.166.035.167.037h.752l.17-.036.137-.092.095-.137.033-.17v-6.867h6.868l.17-.035.137-.092.095-.137.033-.17v-.753s-.033-.165-.032-.167l-.096-.14-.138-.093s-.17-.037-.17-.035H16.81V8.323l-.033-.168-.094-.14-.138-.092-.17-.034h-.752z\"\n}));\n\nfunction _extends$Y() { return _extends$Y = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$Y.apply(null, arguments); }\nvar GatewayXorIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$Y({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 0a1.29 1.29 0 00-.918.373L.371 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.915.372A1.294 1.294 0 0016 0zm-.002 2.181l13.821 13.821-13.821 13.821-13.821-13.82L15.998 2.18zm-5.162 7.69l-.166.032-.141.096-.532.532s-.097.142-.097.144l-.03.164.032.162.093.144 4.857 4.858-4.855 4.855v-.001L9.9 21l-.03.164.032.162s.093.142.093.144l.531.532.146.095.162.032.164-.03.144-.097 4.855-4.856 4.857 4.857.145.095.162.032.164-.03.144-.097.531-.532.095-.14.033-.168-.033-.162-.095-.146L17.144 16 22 11.144l.095-.14.033-.166-.033-.163-.097-.144-.532-.532-.14-.095-.163-.032-.166.032-.141.095L16 14.855l-4.858-4.858v-.002l-.144-.092-.162-.032z\"\n}));\n\nfunction _extends$X() { return _extends$X = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$X.apply(null, arguments); }\nvar GroupIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$X({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.34.016c-2.333.025-4.684 1.77-5.29 4.17C.608 5.848.88 7.608.804 9.314v2.922h2.041c.038-2.332-.076-4.673.062-7C3.14 3.355 4.869 1.938 6.643 2.04h8.956V.009c-3.086 0-6.173-.02-9.258 0v.007zm13.094 2.023h1.92V.009h-1.92v2.03zm5.756 0c1.265-.069 2.66.045 3.602 1.055 1.036.983 1.201 2.523 1.122 3.91v6.313h2.078c-.03-2.677.062-5.36-.047-8.032-.17-2.743-2.62-5.111-5.215-5.236-.511-.064-1.027-.02-1.54-.033v2.023zM.803 18.319h2.041v-2.026H.804v2.026zm29.11 1.084h2.08v-2.03h-2.08v2.03zM.804 26.148c.004 2.218 1.393 4.366 3.313 5.28 1.728.853 3.681.448 5.521.544.43-.112 1.29.231 1.435-.183v-1.847c-1.788-.043-3.584.094-5.365-.082-1.67-.354-2.919-2.048-2.863-3.844v-3.644H.804v3.777zm29.11-.068c.04 1.961-1.508 3.787-3.381 3.842-1.954.06-3.914.02-5.87.026v2.03c2.118-.042 4.242.08 6.355-.063 2.524-.264 4.818-2.644 4.94-5.323.08-1.039.014-2.085.035-3.126h-2.078v2.613zm-15.006 5.898h1.92v-2.03h-1.92v2.03z\"\n}));\n\nfunction _extends$W() { return _extends$W = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$W.apply(null, arguments); }\nvar IntermediateEventCatchCancelIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$W({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.111.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.454 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.215-2.282-2.022-5.3-3.217-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.082 11.082 0 0116 5.021zm-3.956 3.946l-3.096 3.097 3.985 3.985-3.913 3.913 3.047 3.048 3.913-3.913 3.988 3.987 3.097-3.096L19.076 16l3.914-3.913-3.048-3.048-3.913 3.913-3.986-3.985zm-.002 1.222l3.988 3.987 3.913-3.913 1.826 1.826-3.913 3.913 3.985 3.986-1.873 1.873-3.985-3.985-3.913 3.913-1.827-1.827 3.914-3.913-3.988-3.987 1.873-1.873z\"\n}));\n\nfunction _extends$V() { return _extends$V = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$V.apply(null, arguments); }\nvar IntermediateEventCatchCompensationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$V({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm-.56 5.772l-7.408 5.231 7.409 5.234v-5.057c2.385 1.687 4.771 3.371 7.157 5.057V10.793l-7.157 5.055v-5.055zm-.865 1.665v7.125l-5.048-3.562 5.048-3.563zm7.161 0v7.132l-5.048-3.566 5.048-3.566z\"\n}));\n\nfunction _extends$U() { return _extends$U = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$U.apply(null, arguments); }\nvar IntermediateEventCatchConditionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$U({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.97.04h-.127C8.713-.018 2.003 5.334.437 12.286c-1.51 6.123.98 13.005 6.136 16.665 5.125 3.788 12.546 4.105 17.912.623 5.272-3.276 8.33-9.766 7.325-15.916-.904-6.241-5.79-11.7-11.95-13.143A16.082 16.082 0 0015.97.04zm-.181 1.724c.115 0 .23 0 .347.003 6.625-.066 12.823 5.149 13.89 11.69 1.13 5.91-1.908 12.349-7.262 15.138-5.473 3.013-12.866 1.884-17.116-2.726C1.291 21.372.444 13.914 3.802 8.602c2.493-4.112 7.169-6.819 11.987-6.838zm.283 1.554c-.117 0-.234.002-.351.005-6.1 0-11.691 5.049-12.346 11.114-.78 5.684 2.795 11.612 8.218 13.52 5.139 1.943 11.416.101 14.624-4.38 3.461-4.583 3.262-11.538-.596-15.831-2.36-2.747-5.924-4.423-9.549-4.428zm-.078 1.695c.078 0 .156 0 .234.003 5.4 0 10.321 4.556 10.734 9.942.563 5.13-2.958 10.364-7.971 11.678-4.832 1.41-10.457-.935-12.746-5.446-2.463-4.559-1.2-10.795 3.014-13.883a11.072 11.072 0 016.735-2.294zm-5.352 4.266V22.761h10.716V9.279H10.642zm.863.866h8.987v11.75h-8.987v-11.75zm.927 1.323v.862h7.133v-.862h-7.133zm0 2.602v.866h7.133v-.866h-7.133zm0 3.008v.862h7.133v-.862h-7.133zm0 2.717v.863h7.133v-.863h-7.133z\"\n}));\n\nfunction _extends$T() { return _extends$T = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$T.apply(null, arguments); }\nvar IntermediateEventCatchErrorIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$T({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm6.132 4.194c-1.21 2.455-2.422 4.91-3.633 7.364l-4.516-5.875-4.103 12.133 4.6-5.912c1.58 1.81 3.162 3.619 4.744 5.429L22.13 9.215zM14.383 13.1l4.295 5.445 1.073-2.387-1.027 4.131-4.384-5.157-1.778 2.75 1.821-4.782z\"\n}));\n\nfunction _extends$S() { return _extends$S = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$S.apply(null, arguments); }\nvar IntermediateEventCatchEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$S({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm.006 3.927c-1.672 4.654-2.734 9.502-4.406 14.155 1.534-1.525 2.872-3.234 4.406-4.759l4.406 4.76c-1.496-4.71-2.91-9.446-4.406-14.156zm.032 2.929c.822 2.586 1.598 5.186 2.42 7.771l-2.42-2.612c-.682.597-2.452 2.884-2.338 2.388.87-2.487 1.447-5.067 2.338-7.547z\"\n}));\n\nfunction _extends$R() { return _extends$R = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$R.apply(null, arguments); }\nvar IntermediateEventCatchLinkIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$R({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm1.78 4.093v3.555H9.785v6.714h7.994v3.554l5.829-6.911-5.83-6.912zm.974 2.584l3.61 4.295-3.61 4.294v-1.933h-7.88v-4.688h7.88v-1.968z\"\n}));\n\nfunction _extends$Q() { return _extends$Q = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$Q.apply(null, arguments); }\nvar IntermediateEventCatchMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$Q({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm-7.245 5.475v11.06h14.502v-11.06H8.754zm3.222 1.728h8.057c-1.427.878-2.854 2.806-4.281 3.016l-3.776-3.016zm9.554 1.017v6.587H10.48V13.24l5.524 4.414 5.526-4.414z\"\n}));\n\nfunction _extends$P() { return _extends$P = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$P.apply(null, arguments); }\nvar IntermediateEventCatchMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$P({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm.006 3.073l-7.62 5.531 2.91 8.95h9.42l2.91-8.95-7.62-5.53zm0 1.067l6.604 4.794-2.523 7.757h-8.162l-2.522-7.757 6.603-4.794z\"\n}));\n\nfunction _extends$O() { return _extends$O = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$O.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingConditionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$O({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M10.638 9.563V23.056h10.724V9.563H10.638zm.863.866h8.995v11.76H11.5V10.43zm.928 1.324v.862h7.139v-.862h-7.14zm0 2.605v.866h7.139v-.866h-7.14zm0 3.01v.863h7.139v-.863h-7.14zm0 2.72v.863h7.139v-.864h-7.14zM15.999.308h-.004l-.188.001h-.011l-.188.004h-.011L15.41.32h-.011l-.187.008h-.005L15.2.33l-.187.01h-.005l-.005.001-.187.013h-.011L14.62.37h-.01l-.186.018h-.011l-.185.02-.005.001h-.006l-.185.022-.005.001h-.005l-.185.025h-.005l-.005.001-.185.027h-.005l-.005.001-.184.029h-.005l-.005.001-.183.031-.006.001-.005.001-.182.033-.006.001-.005.001-.182.035-.005.001-.005.001-.182.038h-.005l-.005.002-.181.04h-.005l-.005.002-.18.042-.006.001-.005.001-.18.044-.005.002h-.005l-.17.045-.152.054-.139.082-.121.106-.1.127-.074.143-.046.155-.017.16.013.16.043.156.07.145.097.13.119.108.137.085.15.058.159.03.16-.001.133-.023.165-.043.168-.041.171-.04.171-.037.172-.036.17-.033.173-.03.17-.03.177-.027.171-.025.175-.022.175-.02.175-.02.176-.016.175-.014.177-.012.176-.01.177-.007.174-.006.177-.003.178-.001h.177l.178.004.174.006.177.007.176.01.177.012.175.014.176.017.175.018.175.02.175.023.171.025.176.027.17.03.174.03.17.033.171.036.154.033.16.02.161-.01.156-.04.146-.069.131-.094.111-.117.087-.135.061-.15.032-.158.002-.16-.027-.16-.057-.15L20 1.023l-.108-.12-.128-.097-.145-.073-.128-.038-.158-.035-.005-.001-.005-.001L19.14.62h-.005l-.005-.002-.182-.035h-.006L18.938.58l-.182-.033h-.006l-.005-.002-.183-.03-.005-.001-.006-.001-.183-.029h-.005l-.006-.001-.184-.027h-.005l-.005-.001-.185-.024h-.005L17.968.43 17.783.41l-.006-.001h-.005l-.185-.02h-.006l-.005-.001L17.39.37h-.005L17.38.368l-.187-.015h-.005l-.005-.001-.187-.013h-.011L16.8.328h-.011L16.6.32h-.011l-.187-.006h-.011L16.204.31h-.011L16.005.31H16zm9.016 2.935l-.16.004-.158.033-.15.062-.134.09-.116.111-.093.132-.067.147-.038.156-.01.161.022.16.05.153.078.141.103.124.102.087.045.034.142.106.137.105.14.11.136.11.135.112.134.115.134.117.13.115.132.122.128.12.127.122.126.125.124.126.124.128.121.13.118.128.118.132.117.133.113.134.113.136.11.136.109.137.109.142.104.14.103.14.101.142.1.144.099.146.095.145.094.147.093.15.092.15.087.149.087.15.084.152.084.155.08.152.08.155.04.081.084.138.11.119.128.096.145.072.155.043.16.013.16-.016.155-.046.144-.074.127-.099.106-.12.083-.14.055-.151.026-.16-.004-.16-.034-.158-.05-.124-.042-.085-.002-.004-.003-.005-.084-.165-.002-.004-.003-.005-.086-.164-.002-.004-.003-.005-.088-.162-.002-.005-.003-.005-.09-.161-.002-.005-.003-.004-.092-.16-.003-.005-.002-.005-.094-.16-.003-.004-.003-.004-.096-.159-.002-.004-.003-.005-.098-.157-.003-.004-.003-.005-.1-.156-.003-.004-.003-.005-.101-.154-.003-.005-.003-.004-.104-.154-.003-.004-.003-.005-.106-.152-.003-.005-.003-.004-.108-.151-.003-.004-.003-.005-.11-.15-.003-.004-.003-.004-.111-.15-.004-.003-.003-.005-.113-.147-.004-.004-.003-.005-.115-.146-.004-.004-.003-.004-.117-.145-.004-.004-.003-.004-.12-.144-.003-.004-.003-.004-.121-.142-.004-.004-.003-.004-.123-.141-.003-.004-.004-.004-.125-.14-.003-.004-.004-.004-.127-.138-.003-.004-.004-.004-.128-.136-.004-.004-.004-.004-.13-.135-.004-.004-.004-.004-.132-.134-.003-.004-.004-.003-.134-.133-.004-.003-.004-.004-.135-.13-.004-.004-.004-.004-.136-.128-.004-.004-.004-.004-.138-.126-.004-.004-.004-.003-.14-.125-.004-.004-.004-.003-.14-.123-.005-.004-.004-.003-.142-.121-.004-.004-.004-.003-.144-.12-.004-.003-.004-.003-.145-.117-.004-.004-.004-.003-.147-.115-.004-.004-.004-.003-.148-.113-.004-.003-.004-.004-.149-.111-.004-.003-.004-.004-.05-.036-.14-.083-.15-.055-.16-.027zm-18.381.344l-.161.008-.157.037-.147.066-.111.074-.04.032-.005.003-.004.004-.145.117-.004.003-.004.004-.144.119-.004.003-.004.004-.142.12-.004.004-.004.004-.141.123-.004.003-.004.004-.14.125-.004.003-.004.004-.138.126-.004.004-.004.004-.136.128-.004.004-.004.004-.135.13-.004.004-.004.003-.134.133-.004.003L4.682 5l-.132.134-.003.004-.004.004-.13.135-.004.004-.004.004-.128.136-.004.004-.004.004-.126.138-.004.004-.003.004-.125.14-.004.004-.003.004-.123.14-.004.005-.003.004-.121.142-.004.004-.003.004-.12.144-.003.004-.003.004-.117.145-.004.004-.003.004-.115.146-.004.005-.003.004-.113.147-.003.005-.004.004-.111.149-.003.004-.004.004-.11.15-.002.005-.003.004-.108.151-.003.004-.003.005-.106.152-.003.005-.003.004-.104.154-.003.004-.003.005-.102.154-.003.005-.002.004-.1.156-.003.005-.003.004-.098.157-.003.005-.003.004-.096.159-.002.004-.003.005-.094.16-.003.004-.002.004-.092.16-.003.005-.003.005-.09.161-.002.005-.003.005-.088.162-.002.005-.003.004-.086.164-.002.005-.002.004-.084.165-.003.005-.002.004-.082.166-.002.004-.003.005-.08.167-.002.004-.002.005-.078.168-.002.004-.002.005-.045.1-.053.153-.023.16.007.16.037.157.065.148.092.132.114.114.134.09.148.064.157.035.161.006.16-.025.152-.054.14-.08.121-.106.1-.126.065-.118.043-.095.074-.16.075-.155.077-.157.08-.155.08-.152.083-.155.085-.152.086-.15.088-.149.091-.15.094-.15.094-.147.095-.145.099-.146.1-.144.1-.142.104-.14.104-.14.11-.142.107-.137.11-.136.114-.136.113-.134.117-.133.118-.132.117-.129.122-.13.124-.127.123-.126.127-.125.127-.122.128-.12.132-.122.13-.115.133-.117.135-.115.135-.111.136-.11.037-.03.117-.11.094-.132.068-.146.04-.156.01-.161-.02-.16-.05-.154-.076-.141-.102-.125-.123-.104-.14-.08-.153-.051-.16-.023zM16 3.595h-.005l-.148.001h-.01l-.147.003h-.011l-.147.005h-.011l-.146.007h-.011l-.146.009h-.011l-.146.01h-.005l-.005.001-.146.012h-.011l-.145.014h-.006l-.005.001-.05.006-.158.031-.15.06-.135.088-.117.111-.094.13-.069.147-.04.156-.01.16.019.16.049.154.076.142.102.125.123.105.14.08.152.051.16.023.134-.003.045-.005.135-.013.133-.01.136-.01.135-.007.137-.006.136-.004.136-.003h.274l.136.003.136.004.136.006.136.007.136.01.133.01.135.013.135.014.135.016.134.018.132.018.134.021.133.023.133.024.133.025.13.027.132.03.132.03.129.031.13.034.129.035.129.036.13.04.126.038.128.042.126.042.128.045.127.047.126.047.12.048.127.051.123.052.006.002.147.048.16.021.16-.009.157-.038.147-.067.131-.093.112-.116.089-.135.062-.149.033-.158.004-.16-.027-.16-.055-.151-.083-.139-.107-.12-.127-.099-.118-.063-.004-.001-.005-.003-.005-.002-.133-.056-.005-.002-.005-.002-.134-.054-.004-.002-.005-.002-.135-.053-.005-.002-.005-.002-.135-.051-.005-.002-.005-.002-.135-.05-.005-.001-.005-.002-.137-.048-.005-.001-.005-.002-.137-.046-.005-.002-.005-.002-.137-.044-.005-.002-.005-.001-.138-.043-.006-.002-.005-.001-.138-.042-.005-.001-.005-.002-.14-.04H19.4l-.005-.002-.14-.038-.005-.001-.005-.002-.14-.036-.005-.001-.005-.001-.141-.035-.005-.001-.005-.001-.142-.033-.005-.001-.005-.001-.142-.031-.005-.002h-.005l-.142-.03-.005-.001-.005-.001-.143-.028h-.005l-.005-.002-.143-.025-.006-.001-.005-.001-.143-.024-.005-.001-.006-.001-.143-.022-.006-.001h-.005l-.144-.022h-.005l-.006-.001-.144-.019h-.005l-.006-.001-.144-.017h-.006l-.005-.001-.145-.016h-.011l-.145-.014H17.1l-.005-.001-.146-.012h-.01l-.146-.01-.006-.001h-.005l-.146-.009h-.011l-.147-.006h-.01L16.32 3.6h-.011l-.147-.003h-.011l-.147-.001H16zm-5.482 1.366l-.16.008-.157.037-.123.053-.06.032-.005.002-.004.003-.128.069-.004.002-.005.003-.126.07-.005.003-.004.002-.126.072-.005.003-.004.003-.125.073-.004.003-.005.003-.124.075-.004.003-.005.002-.123.077-.004.003-.005.003-.122.078-.004.003-.005.003-.121.08-.004.002-.005.003-.12.082-.005.003-.004.003-.12.083-.004.003-.004.003-.118.084-.005.003-.004.003-.118.086-.004.003-.004.003-.117.088-.004.003-.004.003-.116.089-.004.003-.004.004-.114.09-.005.003-.004.003-.113.092-.004.004-.004.003-.113.093-.004.004-.004.003-.111.095-.005.003-.004.004-.11.096-.004.004-.004.003-.11.098-.003.003-.004.004-.108.1-.004.003-.004.003-.107.101-.004.004-.004.003-.106.102-.004.004-.003.004-.105.103-.004.004-.004.004-.103.105-.004.004-.004.003-.102.106-.003.004-.004.004-.1.107-.004.004-.004.004-.099.108-.004.004-.003.004-.098.11-.003.003-.004.004-.096.11-.004.005-.003.004-.095.111-.003.004-.004.004-.093.113-.003.004-.004.004-.092.113-.003.004-.003.005-.09.114-.004.004-.003.004-.089.116-.003.004-.003.004-.088.117-.003.004-.003.004-.086.118-.003.004-.003.005-.084.118-.003.004-.003.005-.083.12-.003.003-.003.005-.082.12-.003.005-.002.004-.068.103-.076.142-.048.154-.018.16.011.161.041.156.07.146.095.13.117.11.136.086.15.06.158.03.162.002.158-.03.15-.057.138-.085.119-.109.082-.105.065-.099.075-.11.077-.113.077-.107.08-.11.08-.108.084-.108.083-.105.086-.106.086-.104.088-.104.089-.101.09-.102.093-.101.093-.099.094-.097.095-.096.098-.097.098-.095.099-.093.1-.092.103-.091.101-.089.104-.088.104-.086.106-.086.106-.083.106-.082.109-.082.108-.079.11-.078.11-.076.112-.076.112-.074.113-.072.113-.071.115-.07.115-.068.118-.067.117-.065.12-.065.054-.029.135-.088.116-.111.094-.132.068-.146.04-.156.009-.161-.02-.16-.05-.153-.078-.142-.102-.125-.123-.103-.141-.079-.153-.051-.16-.022zm13.91 2.116l-.162.008-.157.037-.147.066-.132.092-.113.116-.09.134-.063.148-.034.157-.005.162.025.159.055.152.082.138.086.103.09.09.094.098.092.099.093.1.091.103.089.101.088.104.086.104.086.106.083.105.083.108.08.108.081.11.077.107.077.112.075.111.075.114.072.113.071.113.07.114.068.118.067.115.065.118.064.117.062.117.061.121.059.119.059.122.056.121.054.12.055.125.051.123.051.125.048.123.048.127.047.126.044.125.043.128.042.129.039.126.038.13.022.076.058.15.085.137.11.119.129.096.145.07.155.043.16.013.161-.017.154-.046.144-.075.126-.1.106-.12.082-.14.055-.151.025-.16-.005-.16-.026-.132-.023-.082-.002-.005-.001-.005-.042-.139-.001-.005-.002-.005-.043-.138-.001-.005-.002-.005-.044-.137-.002-.005-.002-.005-.046-.137-.002-.005-.001-.005-.048-.137-.002-.005-.002-.005-.05-.135-.001-.005-.002-.005-.051-.135-.002-.005-.002-.005-.053-.135-.002-.005-.002-.005-.054-.133-.002-.005-.002-.005-.057-.133-.002-.005-.002-.005-.057-.132-.003-.005-.002-.005-.06-.132-.001-.005-.002-.004-.061-.132-.003-.004-.002-.005-.063-.13-.002-.005-.002-.005-.064-.13-.003-.004-.002-.005-.066-.129-.002-.004-.003-.005-.067-.128-.002-.005-.003-.004-.069-.128-.002-.004-.003-.005-.07-.126-.003-.005-.003-.004-.072-.126-.002-.005-.003-.004-.074-.125-.002-.004-.003-.005-.075-.124-.003-.004-.003-.005-.076-.123-.003-.004-.003-.005-.078-.122-.003-.004-.003-.005-.08-.121-.003-.004-.003-.005-.081-.12-.003-.005-.003-.004-.083-.12-.003-.004-.003-.004-.084-.118-.003-.005-.003-.004-.086-.118-.003-.004-.004-.004-.087-.117-.003-.004-.003-.004-.09-.116-.002-.004-.004-.004-.09-.114-.003-.005-.004-.004-.091-.113-.004-.004-.003-.004-.094-.113-.003-.004-.003-.004-.095-.111-.004-.004-.003-.004-.096-.11-.004-.005-.003-.004-.098-.11-.004-.003-.003-.004-.1-.108-.003-.004-.004-.004-.1-.107-.004-.004-.004-.004-.102-.106-.003-.003-.004-.004-.093-.095-.124-.103-.14-.08-.153-.05-.16-.023zM4.45 13.135l-.161.002-.158.032-.15.06-.135.088-.118.11-.094.131-.069.146-.035.129-.026.132v.005l-.002.005-.025.143-.001.005-.001.006-.024.143-.001.005-.001.006-.022.143-.001.006-.001.005-.02.144-.001.005-.001.005-.019.145v.005l-.001.006-.017.144v.006l-.001.005-.016.145v.011l-.014.145v.005l-.001.006-.012.146v.01l-.01.146-.001.006v.005l-.009.146v.011l-.007.146v.011l-.004.147v.011l-.003.147v.01l-.002.148v.01l.001.148v.01l.003.147v.011l.005.147v.01l.007.147v.011l.009.146v.011l.01.146v.01l.013.146v.011l.014.145v.005l.001.006.016.145v.011l.018.144v.006l.001.005.019.144v.006l.001.005.021.144v.005l.002.006.022.143v.006l.002.005.024.143v.005l.002.006.025.143.001.005.001.005.028.143.001.005.001.005.03.142v.005l.002.006.03.141.002.005.001.005.033.142v.005l.002.005.035.14v.006l.002.005.036.14.002.005.001.005.038.14.001.005.002.005.04.14v.005l.002.005.042.138.001.006.002.005.042.138.002.005.002.005.017.054.064.148.09.134.114.114.132.092.148.065.157.037.16.007.16-.023.153-.052.14-.08.123-.104.102-.125.076-.142.049-.153.02-.16-.011-.161-.031-.13-.017-.051-.039-.126-.038-.13-.037-.128-.035-.13-.033-.128-.033-.134-.03-.13-.029-.131-.026-.13-.026-.133-.024-.133-.023-.133-.02-.132-.02-.136-.017-.132-.016-.135-.014-.135-.012-.133-.012-.138-.009-.133-.007-.136-.006-.138-.004-.134-.003-.136v-.274l.003-.136.004-.134.006-.139.007-.136.01-.133.01-.138.013-.132.014-.135.016-.135.017-.132.02-.137.02-.13.023-.134.024-.133.024-.126.016-.16-.014-.161-.044-.155-.072-.145-.098-.128-.12-.108-.137-.084-.15-.057-.16-.029zm26.698 1.601l-.161.01-.157.04-.146.067-.131.093-.112.117-.088.135-.061.149-.033.157-.005.134.006.14.006.176.003.177.001.178-.001.177-.003.178-.006.177-.007.176-.01.177-.012.176-.015.176-.016.173-.018.175-.02.175-.024.174-.025.175-.026.17-.03.174-.03.173-.033.17-.036.172-.037.17-.04.17-.042.172-.043.168-.045.166-.048.169-.05.167-.052.168-.053.164-.056.166-.058.166-.06.16-.062.165-.062.158-.066.165-.068.16-.07.16-.07.158-.075.159-.074.155-.079.158-.08.158-.06.15-.03.158-.001.161.029.159.058.15.085.137.108.119.13.097.144.07.156.044.16.013.16-.017.155-.046.143-.074.127-.1.107-.12.07-.115.083-.164.003-.005.002-.004.082-.166.002-.005.003-.004.08-.167.002-.005.002-.004.078-.168.002-.005.002-.004.076-.169.002-.004.002-.005.074-.17.002-.004.002-.005.072-.17.002-.005.002-.005.07-.171.001-.005.002-.005.068-.172.002-.004.002-.005.065-.173.002-.005.002-.005.063-.173.002-.005.002-.005.06-.174.003-.005.001-.005.06-.175.001-.005.002-.005.057-.176.001-.005.002-.005.055-.177.001-.005.002-.005.052-.177.002-.005.001-.005.051-.178.001-.005.002-.005.048-.179.002-.005v-.005l.047-.179.001-.005.002-.005.044-.18v-.005l.002-.005.042-.18.001-.006.001-.005.04-.181.001-.005.001-.005.037-.182.002-.005v-.005l.036-.182v-.006l.002-.005.033-.182v-.006l.002-.005.03-.183.001-.005.001-.005.029-.184v-.005l.001-.006.027-.184v-.005l.001-.005.024-.185v-.005l.001-.005.022-.185v-.006l.001-.005.02-.185v-.006l.001-.005.017-.186v-.005l.001-.005.015-.187v-.005l.001-.005.013-.187v-.01l.01-.187.001-.006v-.005l.009-.187v-.011l.006-.187V16.7l.004-.188v-.011l.001-.188v-.01l-.001-.188v-.011l-.004-.188v-.011l-.006-.187v-.011l-.007-.145-.022-.16-.05-.152-.08-.141-.103-.124-.125-.102-.141-.077-.153-.05-.16-.02zm-30.21.572l-.161.001-.158.032-.15.06-.136.087-.117.11-.095.131-.068.146-.04.156-.012.133-.001.14v.01l.001.188v.011l.004.188v.011l.006.187v.011l.008.187v.011l.011.187v.005l.001.005.013.187v.01l.016.187v.01l.018.186v.011l.02.185.001.005v.006l.022.185.001.005v.005l.025.185v.005l.001.005.027.184v.006l.001.005.029.184v.005l.001.005.031.183.001.005.001.006.033.182.001.005.001.006.035.182.001.005.001.005.038.182v.005l.002.005.04.181v.005l.002.005.042.18.001.006.001.005.044.18.002.005v.005l.047.18.001.004.002.005.048.179.002.005.001.005.05.178.002.005.001.005.053.177.002.005.001.005.055.177.002.005.001.005.057.176.002.005.001.005.06.175.001.005.002.005.061.174.002.005.002.005.063.173.002.005.002.005.065.173.002.005.002.004.067.172.002.005.002.005.07.171.002.005.002.005.072.17.002.005.002.004.074.17.002.005.002.004.076.169.002.004.002.005.078.168.002.004.002.005.08.167.003.004.002.005.082.166.002.004.003.005.02.04.086.136.11.118.13.095.146.07.156.041.16.012.16-.019.155-.048.142-.075.126-.1.105-.123.08-.14.054-.152.024-.16-.006-.16-.036-.158-.051-.123-.018-.034-.078-.158-.074-.155-.074-.16-.071-.157-.07-.16-.068-.16-.067-.165-.062-.158-.062-.164-.059-.161-.058-.166-.056-.166-.053-.164-.052-.168-.05-.167-.048-.17-.045-.165-.043-.168-.043-.172-.039-.17-.037-.17-.036-.172-.033-.17-.03-.173-.03-.174-.027-.17-.025-.175-.022-.174-.021-.175-.018-.175-.017-.173-.014-.176-.012-.176-.01-.177-.007-.176-.006-.177-.003-.178-.001-.177v-.134l-.013-.16-.044-.156-.072-.144-.097-.129-.12-.108-.137-.085-.15-.057-.159-.028zm26.798 2.024l-.16.007-.157.038-.148.066-.132.092-.113.115-.09.134-.062.148-.03.127-.001.004-.023.134-.024.133-.026.133-.026.13-.03.132-.03.129-.032.134-.033.128-.035.13-.037.128-.038.13-.04.126-.04.128-.044.128-.044.126-.046.126-.048.126-.05.125-.05.125-.051.122-.054.123-.055.122-.056.12-.058.122-.06.12-.061.12-.063.119-.062.116-.067.119-.066.116-.069.115-.069.115-.07.113-.073.113-.074.112-.076.113-.077.112-.077.107-.08.11-.08.107-.085.11-.044.056-.088.135-.06.15-.033.158-.002.16.027.16.057.15.083.138.108.12.128.098.144.072.155.045.16.015.161-.016.155-.044.144-.073.128-.098.09-.099.05-.061.003-.004.003-.005.089-.115.003-.004.003-.005.088-.116.003-.004.003-.005.086-.117.003-.004.003-.005.084-.118.003-.004.003-.005.083-.12.003-.004.003-.004.081-.12.003-.005.003-.004.08-.121.003-.005.003-.004.078-.122.003-.005.003-.004.077-.123.002-.005.003-.004.075-.124.003-.005.003-.004.073-.125.003-.005.003-.004.072-.126.002-.004.003-.005.07-.126.003-.005.002-.005.07-.127.002-.004.002-.005.068-.128.002-.005.002-.004.066-.13.003-.004.002-.005.064-.13.002-.004.003-.005.062-.13.002-.005.003-.005.06-.13.003-.005.002-.005.06-.132.002-.005.002-.005.057-.132.003-.005.002-.005.056-.133.002-.005.002-.005.054-.134.002-.004.002-.005.053-.135.002-.005.002-.005.051-.135.002-.005.002-.005.05-.135.001-.005.002-.005.048-.137.001-.005.002-.005.046-.137.002-.005.002-.005.044-.137.002-.005.002-.005.042-.138.002-.005.001-.006.042-.138.001-.005.002-.005.04-.14v-.005l.002-.005.038-.14.001-.005.002-.005.036-.14.001-.005.001-.005.035-.141.001-.005.001-.005.033-.142.001-.005.001-.005.031-.141.001-.006.002-.005.029-.142v-.005l.002-.005.028-.143v-.005l.002-.005.025-.143.001-.006.001-.005.024-.143.001-.005.001-.006.001-.006.01-.161-.02-.16-.05-.154-.077-.141-.102-.125-.123-.104-.141-.079-.153-.051-.16-.022zM6.841 23.019l-.16.024-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.018.16.011.161.041.156.07.146.077.109.04.048.003.004.003.004.095.111.003.004.004.004.096.11.004.005.003.004.098.109.003.004.004.004.1.108.003.004.003.004.101.107.004.004.003.004.102.105.004.004.004.004.103.105.004.004.004.003.105.104.003.004.004.003.106.102.004.004.004.004.107.1.004.004.004.004.108.099.004.003.004.004.11.098.003.003.004.004.11.096.004.003.005.004.11.095.005.003.004.004.113.093.004.003.004.004.113.091.004.004.005.003.114.09.004.004.004.003.116.089.004.003.004.003.117.088.004.003.004.003.118.086.004.003.005.003.118.084.004.003.005.003.119.083.004.003.005.003.12.081.005.003.004.003.121.08.005.003.004.003.122.078.005.003.004.003.123.076.005.003.004.003.124.075.005.003.004.003.125.073.004.003.005.002.126.073.004.002.005.003.126.07.005.003.004.002.128.07.004.002.005.002.128.067.005.003.004.002.13.066.004.002.005.003.13.064.004.002.005.003.13.062.005.002.004.003.132.06.004.003.005.002.132.06.005.002.005.002.132.057.005.002.005.002.133.057.005.002.005.002.133.054.005.002.005.002.13.05.154.045.16.016.16-.015.156-.045.144-.072.128-.098.108-.12.083-.138.057-.15.028-.16-.003-.16-.032-.159-.061-.149-.088-.135-.11-.117-.132-.094-.12-.058-.124-.049-.126-.051-.122-.051-.122-.054-.12-.054-.126-.058-.119-.057-.12-.06-.12-.06-.118-.063-.117-.064-.119-.066-.116-.066-.115-.068-.115-.07-.113-.07-.115-.074-.112-.074-.11-.075-.11-.076-.112-.08-.11-.08-.109-.081-.106-.082-.104-.082-.106-.086-.105-.087-.101-.086-.105-.091-.1-.09-.1-.091-.1-.094-.097-.094-.1-.098-.093-.095-.096-.1-.093-.098-.092-.101-.089-.1-.09-.102-.088-.104-.036-.043-.114-.114-.133-.091-.148-.065-.157-.036-.161-.006zm15.063 2.701l-.16.014-.156.044-.12.057-.06.034-.12.066-.117.064-.118.062-.12.061-.12.06-.118.057-.126.058-.12.054-.122.054-.122.05-.126.052-.125.05-.124.046-.127.047-.125.044-.129.043-.126.04-.13.042-.128.038-.127.035-.13.036-.131.034-.129.031-.132.03-.13.03-.135.027-.133.026-.13.023-.13.022-.137.021-.132.02-.134.017-.132.015-.138.015-.135.013-.133.01-.138.01-.136.007-.134.006-.136.004-.14.003-.16.018-.155.047-.142.076-.127.1-.105.122-.08.14-.054.151-.025.16.006.16.035.158.064.148.09.134.114.114.133.092.147.065.157.036.134.008.145-.002h.011l.147-.005h.01l.147-.007h.011l.146-.009h.011l.146-.01h.005l.005-.001.146-.012h.011l.145-.014h.005l.006-.001.145-.016h.011l.144-.018h.006l.005-.001.144-.02h.011l.144-.021.005-.001h.006l.143-.023.006-.001h.005l.143-.025h.005l.006-.002.143-.026h.005l.005-.002.143-.027.005-.001.005-.001.142-.03h.005l.005-.002.142-.03.005-.002.005-.001.142-.033.005-.001.005-.001.14-.035.006-.001.005-.001.14-.037h.005l.005-.002.14-.038.005-.002h.005l.14-.04.005-.002.005-.001.138-.042.005-.001.006-.002.138-.043.005-.001.005-.002.137-.044.005-.002.005-.002.137-.046.005-.002.005-.001.137-.048.005-.002.005-.002.135-.05.005-.001.005-.002.135-.051.005-.002.005-.002.135-.053.005-.002.004-.002.134-.054.005-.002.005-.002.133-.057.005-.002.005-.002.132-.057.005-.003.005-.002.132-.06.005-.001.004-.002.131-.061.005-.003.005-.002.13-.062.005-.003.005-.002.13-.064.004-.003.005-.002.128-.066.005-.002.005-.003.128-.067.005-.002.004-.003.127-.069.005-.002.005-.003.126-.07.005-.003.004-.003.065-.037.132-.093.112-.115.089-.135.062-.149.034-.157.003-.161-.026-.16-.055-.15-.082-.14-.107-.12-.127-.1-.144-.073-.154-.046-.16-.016zM6.33 27.127l-.16.023-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.02.16.012.161.041.156.07.146.094.13.096.093.032.026.004.003.004.004.145.117.004.003.004.004.146.115.005.003.004.004.147.113.005.003.004.004.149.111.004.003.004.003.15.11.005.003.004.003.151.108.004.003.005.003.152.106.005.003.004.003.154.104.004.003.005.003.154.102.005.002.004.003.156.1.005.003.004.003.157.098.005.003.004.002.159.096.004.003.005.003.16.094.004.003.004.002.16.092.005.003.005.002.161.09.005.003.005.002.162.088.005.003.004.002.164.086.005.003.004.002.165.084.005.003.004.002.166.082.004.002.005.003.167.08.004.002.005.002.168.078.004.002.005.002.168.076.005.002.005.002.17.074.004.002.005.002.17.072.005.002.005.002.17.07.006.002.005.001.171.068.005.002.005.002.173.065.005.002.005.002.173.063.005.002.005.002.174.06.005.003.005.001.175.06.005.001.005.002.176.057.005.001.005.002.176.055.006.001.005.002.177.052.005.002.005.001.178.05.005.002.005.002.178.048.006.001.005.002.179.046.005.001.005.002.18.044h.005l.005.002.18.042.006.001.005.001.159.035.16.02.16-.01.157-.04.146-.069.13-.094.112-.117.087-.136.06-.149.033-.158.002-.161-.028-.159-.057-.15-.084-.138-.108-.12-.128-.098-.144-.072-.128-.039-.154-.033-.168-.04-.171-.041-.17-.044-.168-.046-.167-.047-.168-.05-.165-.051-.166-.054-.166-.056-.163-.057-.165-.06-.161-.062-.164-.064-.16-.065-.16-.068-.162-.07-.157-.07-.157-.074-.157-.075-.156-.077-.153-.079-.156-.082-.153-.082-.154-.086-.15-.086-.152-.09-.148-.09-.147-.092-.149-.095-.145-.095-.144-.098-.145-.1-.143-.102-.14-.103-.14-.104-.14-.108-.139-.11-.136-.11-.027-.022-.133-.091-.148-.065-.157-.036-.161-.006zm19.215.087l-.16.01-.157.039-.146.067-.11.076-.064.051-.139.11-.14.108-.14.104-.14.103-.143.101-.145.101-.144.098-.145.095-.149.095-.148.093-.147.089-.152.09-.15.086-.154.086-.153.082-.156.082-.153.079-.156.077-.157.075-.158.073-.157.071-.16.07-.16.068-.161.065-.164.064-.161.061-.165.06-.163.058-.166.056-.166.054-.166.051-.167.05-.167.047-.17.046-.168.044-.171.042-.168.039-.17.037-.11.023-.154.047-.143.075-.126.1-.106.122-.081.139-.054.152-.025.16.006.16.035.158.063.148.09.133.114.115.132.092.148.065.157.037.16.007.133-.016.115-.024.005-.001.005-.001.181-.04h.005l.005-.002.18-.042.006-.001.005-.001.18-.044.005-.002.005-.001.18-.046.004-.002h.005l.179-.05h.005l.005-.002.178-.05.005-.002.005-.002.177-.052.005-.002.005-.001.177-.055.005-.002.005-.001.176-.057.005-.002.005-.002.175-.059.005-.001.005-.002.174-.061.005-.002.005-.002.173-.063.005-.002.005-.002.173-.065.004-.002.005-.002.172-.068.005-.002.005-.002.171-.07.005-.001.005-.002.17-.072.005-.002.004-.002.17-.074.005-.002.004-.002.169-.076.004-.002.005-.002.168-.078.004-.002.005-.003.167-.08.004-.002.005-.002.166-.082.004-.002.005-.003.165-.084.004-.002.005-.003.163-.086.005-.002.005-.003.162-.088.005-.002.005-.003.161-.09.005-.002.004-.003.16-.092.005-.003.005-.002.16-.094.004-.003.004-.003.158-.096.005-.002.004-.003.158-.098.004-.003.005-.003.156-.1.004-.003.004-.003.155-.101.005-.003.004-.003.154-.104.004-.003.004-.003.153-.106.004-.003.005-.003.151-.108.004-.003.005-.003.15-.11.004-.003.004-.003.149-.112.004-.003.004-.003.148-.113.004-.004.004-.003.147-.115.004-.004.004-.003.068-.055.116-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.05-.153-.08-.14-.103-.125-.124-.102-.142-.077-.153-.05-.16-.02z\"\n}));\n\nfunction _extends$N() { return _extends$N = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$N.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$N({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.012 9.222c-1.673 4.657-2.735 9.508-4.409 14.164 1.536-1.526 2.874-3.236 4.41-4.762l4.408 4.762c-1.497-4.712-2.911-9.451-4.409-14.164zm.032 2.93c.823 2.588 1.599 5.19 2.421 7.777l-2.42-2.614c-.683.598-2.454 2.886-2.34 2.39.871-2.489 1.448-5.07 2.34-7.552zM16.012.312c-1.448.02-2.93.157-4.302.628-.852.447-.255 1.863.66 1.574 2.255-.608 4.648-.607 6.922-.108.934.075 1.228-1.376.338-1.67C18.451.44 17.227.317 16.012.311zm9.012 2.934c-.913-.104-1.272 1.258-.454 1.648 1.834 1.36 3.293 3.185 4.31 5.22.526.776 1.842.098 1.515-.78a15.522 15.522 0 00-5.06-6.006c-.1-.044-.203-.07-.31-.082zM6.65 3.59c-.762.089-1.24.809-1.805 1.267C3.38 6.295 2.163 8.007 1.37 9.905c-.266.898 1.094 1.484 1.564.675a14.825 14.825 0 014.327-5.56c.476-.515.09-1.419-.612-1.431zm9.362.007c-.698.066-1.689-.16-2.033.635-.282.733.535 1.358 1.217 1.125 1.806-.147 3.63.203 5.293.907.902.255 1.472-1.112.656-1.573-1.6-.735-3.374-1.089-5.133-1.094zm-5.479 1.365c-.835.15-1.517.76-2.21 1.226-1.203.94-2.318 2.061-3.057 3.402-.33.904 1.063 1.552 1.547.723 1.045-1.656 2.596-2.925 4.285-3.873.545-.499.171-1.463-.565-1.478zm13.903 2.115c-.875-.07-1.22 1.173-.501 1.627 1.325 1.34 2.188 3.062 2.748 4.84.468.84 1.869.21 1.557-.699-.604-2.118-1.751-4.097-3.351-5.615a.93.93 0 00-.453-.153zM4.467 13.132c-.822-.07-.996.826-1.046 1.455-.256 1.93-.094 3.933.562 5.769.406.844 1.807.365 1.612-.551a11.498 11.498 0 01-.334-5.808.874.874 0 00-.794-.865zm26.687 1.6c-.746-.037-1.014.785-.879 1.395.043 2.393-.57 4.771-1.66 6.894-.31.884 1.02 1.536 1.53.75a15.632 15.632 0 001.821-8.372.876.876 0 00-.812-.667zm-30.197.571c-.782-.073-1.044.775-.933 1.404.068 2.414.661 4.833 1.809 6.962.534.77 1.842.076 1.505-.798a14.833 14.833 0 01-1.603-6.861.876.876 0 00-.778-.707zm26.787 2.024c-.777-.048-.952.797-1.021 1.392-.354 1.692-1.202 3.231-2.216 4.608-.407.872.925 1.638 1.48.852 1.361-1.733 2.296-3.827 2.582-6.017a.874.874 0 00-.825-.835zM6.857 23.012c-.808.018-1.082 1.122-.47 1.59 1.393 1.607 3.187 2.886 5.194 3.599.91.222 1.43-1.165.598-1.596a11.495 11.495 0 01-4.723-3.396.899.899 0 00-.599-.197zm15.057 2.7c-.81.194-1.504.76-2.325.972-1.203.458-2.5.536-3.758.664-.869.307-.573 1.728.346 1.663 2.201-.034 4.412-.626 6.293-1.778.604-.495.227-1.532-.556-1.521zM6.346 27.118c-.833.008-1.11 1.218-.395 1.617 1.986 1.602 4.358 2.749 6.868 3.226.933.076 1.227-1.376.338-1.67a14.838 14.838 0 01-6.345-3.066.929.929 0 00-.466-.107zm19.208.087c-.766.09-1.241.841-1.922 1.158-1.516.991-3.251 1.58-4.996 2.005-.872.405-.346 1.849.584 1.604 2.543-.526 4.98-1.66 6.963-3.344.47-.52.072-1.42-.63-1.423z\"\n}));\n\nfunction _extends$M() { return _extends$M = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$M.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$M({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M8.742 10.464v11.072h14.516V10.464H8.742zm3.224 1.73h8.066a69569 69569 0 00-4.034 3.22l-4.032-3.22zm9.565 1.018v6.594H10.469v-6.593L16 17.63l5.532-4.419zM16 0h-.005l-.188.001h-.011l-.188.004h-.011l-.187.006h-.011l-.187.008h-.005L15.2.02l-.187.01h-.005l-.005.001-.187.013h-.011L14.62.06h-.01l-.186.018h-.011l-.185.02-.005.001h-.006l-.185.022-.005.001h-.005l-.185.025h-.005l-.005.001-.185.027h-.005l-.005.001-.184.029h-.005l-.005.001-.183.031-.006.001-.005.001-.182.033-.006.001-.005.001-.182.035-.005.001-.005.001-.182.038h-.005l-.005.002-.181.04h-.005l-.005.002-.18.042-.006.001-.005.001-.18.044-.005.002h-.005l-.17.045-.152.054-.139.082-.121.106-.1.127-.074.143-.046.155-.017.16.013.16.043.156.07.145.097.13.119.108.137.085.15.058.159.03.16-.001.133-.023.165-.043.168-.041.171-.04.171-.037.172-.036.17-.033.173-.03.17-.03.177-.027.171-.025.175-.022.175-.02.175-.02.176-.016.175-.014.177-.012.176-.01.177-.007.174-.006.177-.003L16 1.73h.177l.178.004.174.006.177.007.176.01.177.012.175.014.176.017.175.018.175.02.175.023.171.025.176.027.17.03.174.03.17.033.171.036.154.033.16.02.161-.01.156-.04.146-.069.131-.094.111-.117.087-.135.061-.15.032-.158.002-.16-.027-.16-.057-.15L20 .714l-.108-.12-.128-.097-.145-.073-.128-.038-.158-.035-.005-.001-.005-.001L19.14.31h-.005l-.005-.002-.182-.035h-.006l-.005-.002-.182-.033h-.006l-.005-.002-.183-.03-.005-.001-.006-.001-.183-.029h-.005l-.006-.001-.184-.027h-.005l-.005-.001-.185-.024h-.005L17.968.12 17.783.1l-.006-.001h-.005l-.185-.02h-.006l-.005-.001L17.39.06h-.005L17.38.06l-.187-.015h-.005l-.005-.001-.187-.013h-.011L16.8.02h-.011L16.6.01h-.011l-.187-.006h-.011L16.204 0h-.011L16.005 0H16zm9.015 2.935l-.16.004-.158.033-.15.062-.134.09-.116.111-.093.132-.067.147-.038.156-.01.161.022.16.05.153.078.141.103.124.102.087.045.034.142.106.137.105.14.11.136.11.135.112.134.115.134.117.13.115.132.122.128.12.127.122.126.125.124.126.124.128.121.13.118.128.118.132.117.133.113.134.113.136.11.136.109.137.109.142.104.14.103.14.101.142.1.144.099.146.095.145.094.147.093.15.092.15.087.149.087.15.084.152.084.155.08.152.08.155.04.081.084.138.11.119.128.096.145.072.155.043.16.013.16-.016.155-.046.144-.074.127-.099.106-.12.083-.14.055-.151.026-.16-.004-.16-.034-.158-.05-.124-.042-.085-.002-.004-.003-.005-.084-.165-.002-.004-.003-.005-.086-.164-.002-.004-.003-.005-.088-.162-.002-.005-.003-.005-.09-.161-.002-.005-.003-.004-.092-.16-.003-.005-.002-.005-.094-.16-.003-.004-.003-.004-.096-.159-.002-.004-.003-.005-.098-.157-.003-.004-.003-.005-.1-.156-.003-.004-.003-.005-.101-.154-.003-.005-.003-.004-.104-.154-.003-.004-.003-.005-.106-.152-.003-.005-.003-.004-.108-.151-.003-.004-.003-.005-.11-.15-.003-.004-.003-.004-.111-.15-.004-.003-.003-.005-.113-.147-.004-.004-.003-.005-.115-.146-.004-.004-.003-.004-.117-.145-.004-.004-.003-.004-.12-.144-.003-.004-.003-.004-.121-.142-.004-.004-.003-.004-.123-.141-.003-.004-.004-.004-.125-.14-.003-.004-.004-.004-.127-.138-.003-.004-.004-.004-.128-.136-.004-.004-.004-.004-.13-.135-.004-.004-.004-.004-.132-.134-.003-.004-.004-.003-.134-.133-.004-.003-.004-.004-.135-.13-.004-.004-.004-.004-.136-.128-.004-.004-.004-.004-.138-.126-.004-.004-.004-.003-.14-.125-.004-.004-.004-.003-.14-.123-.005-.004-.004-.003-.142-.121-.004-.004-.004-.003-.144-.12-.004-.003-.004-.003-.145-.117-.004-.004-.004-.003-.147-.115-.004-.004-.004-.003-.148-.113-.004-.003-.004-.004-.149-.111-.004-.003-.004-.004-.05-.036-.14-.083-.15-.055-.16-.027zM6.634 3.28l-.161.008-.157.037-.147.066-.111.074-.04.032-.005.003-.004.004-.145.117-.004.003-.004.004-.144.119-.004.003-.004.004-.142.12-.004.004-.004.004-.141.123-.004.003-.004.004-.14.125-.004.003-.004.004-.138.126-.004.004-.004.004-.136.128-.004.004-.004.004-.135.13-.004.004-.004.003-.134.133-.004.003-.004.004-.132.134-.003.004-.004.004-.13.135-.004.004-.004.004-.128.136-.004.004-.004.004-.126.138-.004.004-.003.004-.125.14-.004.004-.003.004-.123.14-.004.005-.003.004-.121.142-.004.004-.003.004-.12.144-.003.004-.003.004-.117.145-.004.004-.003.004-.115.146-.004.005-.003.004-.113.147-.003.005-.004.004-.111.149-.003.004-.004.004-.11.15-.002.005-.003.004-.108.151-.003.004-.003.005-.106.152-.003.005-.003.004-.104.154-.003.004-.003.005-.102.154-.003.005-.002.004-.1.156-.003.005-.003.004-.098.157-.003.005-.003.004-.096.159-.002.004-.003.005-.094.16-.003.004-.002.004-.092.16-.003.005-.003.005-.09.161-.002.005-.003.005-.088.162-.002.005-.003.004-.086.164-.002.005-.002.004-.084.165-.003.005-.002.004-.082.166-.002.004-.003.005-.08.167-.002.004-.002.005-.078.168-.002.004-.002.005-.045.1-.053.153-.023.16.007.16.037.157.065.148.092.132.114.114.134.09.148.064.157.035.161.006.16-.025.152-.054.14-.08.121-.106.1-.126.065-.118.043-.095.074-.16.075-.155.077-.157.08-.155.08-.152.083-.155.085-.152.086-.15.088-.149.091-.15.094-.15.094-.147.095-.145.099-.146.1-.144.1-.142.104-.14.104-.14.11-.142.107-.137.11-.136.114-.136.113-.134.117-.133.118-.132.117-.129.122-.13.124-.127.123-.126.127-.125.127-.122.128-.12.132-.122.13-.115.133-.117.135-.115.135-.111.136-.11.037-.03.117-.11.094-.132.068-.146.04-.156.01-.161-.02-.16-.05-.154-.076-.141-.102-.125-.123-.104-.14-.08-.153-.051-.16-.023zM16 3.286h-.005l-.148.001h-.01l-.147.003h-.011l-.147.005h-.011l-.146.007h-.011l-.146.009h-.011l-.146.01h-.005l-.005.001-.146.012h-.011l-.145.014h-.006l-.005.001-.05.006-.158.031-.15.06-.135.088-.117.111-.094.13-.069.147-.04.156-.01.16.019.16.049.154.076.142.102.125.123.105.14.08.152.051.16.023.134-.003.045-.005.135-.013.133-.01.136-.01.135-.007.137-.006.136-.004.136-.003h.274l.136.003.136.004.136.006.136.007.136.01.133.01.135.013.135.014.135.016.134.018.132.018.134.021.133.023.133.024.133.025.13.027.132.03.132.03.129.031.13.034.129.035.129.036.13.04.126.038.128.042.126.042.128.045.127.047.126.047.12.048.127.051.123.052.006.002.147.048.16.021.16-.009.157-.038.147-.067.131-.093.112-.116.089-.135.062-.149.033-.158.004-.16-.027-.16-.055-.151-.083-.139-.107-.12-.127-.099-.118-.063-.004-.001-.005-.003-.005-.002-.133-.056-.005-.002-.005-.002-.134-.054-.004-.002-.005-.002-.135-.053-.005-.002-.005-.002-.135-.051-.005-.002-.005-.002-.135-.05-.005-.001-.005-.002-.137-.048-.005-.001-.005-.002-.137-.046-.005-.002-.005-.002-.137-.044-.005-.002-.005-.001-.138-.043-.006-.002-.005-.001-.138-.042-.005-.001-.005-.002-.14-.04H19.4l-.005-.002-.14-.038-.005-.001-.005-.002-.14-.036-.005-.001-.005-.001-.141-.035-.005-.001-.005-.001-.142-.033-.005-.001-.005-.001-.142-.031-.005-.002h-.005l-.142-.03-.005-.001-.005-.001-.143-.028h-.005l-.005-.002-.143-.025-.006-.001-.005-.001-.143-.024-.005-.001-.006-.001-.143-.022-.006-.001h-.005l-.144-.022h-.005l-.006-.001-.144-.019h-.005l-.006-.001-.144-.017h-.006l-.005-.001-.145-.016h-.011l-.145-.014H17.1l-.005-.001-.146-.012h-.01l-.146-.01-.006-.001h-.005l-.146-.009h-.011l-.147-.006h-.01l-.147-.005h-.011l-.147-.003h-.011l-.147-.001H16zm-5.482 1.366l-.16.008-.157.037-.123.053-.06.032-.005.002-.004.003-.128.069-.004.002-.005.003-.126.07-.005.003-.004.002-.126.072-.005.003-.004.003-.125.073-.004.003-.005.003-.124.075-.004.003-.005.002-.123.077-.004.003-.005.003-.122.078-.004.003-.005.003-.121.08-.004.002-.005.003-.12.082-.005.003-.004.003-.12.083-.004.003-.004.003-.118.084-.005.003-.004.003-.118.086-.004.003-.004.003-.117.088-.004.003-.004.003-.116.089-.004.003-.004.004-.114.09-.005.003-.004.003-.113.092-.004.004-.004.003-.113.093-.004.004-.004.003-.111.095-.005.003-.004.004-.11.096-.004.004-.004.003-.11.098-.003.003-.004.004-.108.1-.004.003-.004.003-.107.101-.004.004-.004.003-.106.102-.004.004-.003.004-.105.103-.004.004-.004.004-.103.105-.004.004-.004.003-.102.106-.003.004-.004.004-.1.107-.004.004-.004.004-.099.108-.004.004-.003.004-.098.11-.003.003-.004.004-.096.11-.004.005-.003.004-.095.111-.003.004-.004.004-.093.113-.003.004-.004.004-.092.113-.003.004-.003.005-.09.114-.004.004-.003.004-.089.116-.003.004-.003.004-.088.117-.003.004-.003.004-.086.118-.003.004-.003.005-.084.118-.003.004-.003.005-.083.12-.003.003-.003.005-.082.12-.003.005-.002.004-.068.103-.076.142-.048.154-.018.16.011.161.041.156.07.146.095.13.117.11.136.086.15.06.158.03.162.002.158-.03.15-.057.138-.085.119-.109.082-.105.065-.099.075-.11.077-.113.077-.107.08-.11.08-.108.084-.108.083-.105.086-.106.086-.104.088-.104.089-.101.09-.102.093-.101.093-.099.094-.097.095-.096.098-.097.098-.095.099-.093.1-.092.103-.091.101-.089.104-.088.104-.086.106-.086.106-.083.106-.082.109-.082.108-.079.11-.078.11-.076.112-.076.112-.074.113-.072.113-.071.115-.07.115-.068.118-.067.117-.065.12-.065.054-.029.135-.088.116-.111.094-.132.068-.146.04-.156.009-.161-.02-.16-.05-.153-.078-.142-.102-.125-.123-.103-.141-.079-.153-.051-.16-.022zm13.91 2.116l-.162.008-.157.037-.147.066-.132.092-.113.116-.09.134-.063.148-.034.157-.005.162.025.159.055.152.082.138.086.103.09.09.094.098.092.099.093.1.091.103.089.101.088.104.086.104.086.106.083.105.083.108.08.108.081.11.077.107.077.112.075.111.075.114.072.113.071.113.07.114.068.118.067.115.065.118.064.117.062.117.061.121.059.119.059.122.056.121.054.12.055.125.051.123.051.125.048.123.048.127.047.126.044.125.043.128.042.129.039.126.038.13.022.076.058.15.085.137.11.119.129.096.145.07.155.043.16.013.161-.017.154-.046.144-.075.126-.1.106-.12.082-.14.055-.151.025-.16-.005-.16-.026-.132-.023-.082-.002-.005-.001-.005-.042-.139-.001-.005-.002-.005-.043-.138-.001-.005-.002-.005-.044-.137-.002-.005-.002-.005-.046-.137-.002-.005-.001-.005-.048-.137-.002-.005-.002-.005-.05-.135-.001-.005-.002-.005-.051-.135-.002-.005-.002-.005-.053-.135-.002-.005-.002-.005-.054-.133-.002-.005-.002-.005-.057-.133-.002-.005-.002-.005-.057-.132-.003-.005-.002-.005-.06-.132-.001-.005-.002-.004-.061-.132-.003-.004-.002-.005-.063-.13-.002-.005-.002-.005-.064-.13-.003-.004-.002-.005-.066-.129-.002-.004-.003-.005-.067-.128-.002-.005-.003-.004-.069-.128-.002-.004-.003-.005-.07-.126-.003-.005-.003-.004-.072-.126-.002-.005-.003-.004-.074-.125-.002-.004-.003-.005-.075-.124-.003-.004-.003-.005-.076-.123-.003-.004-.003-.005-.078-.122-.003-.004-.003-.005-.08-.121-.003-.004-.003-.005-.081-.12-.003-.005-.003-.004-.083-.12-.003-.004-.003-.004-.084-.118-.003-.005-.003-.004-.086-.118-.003-.004-.004-.004-.087-.117-.003-.004-.003-.004-.09-.116-.002-.004-.004-.004-.09-.114-.003-.005-.004-.004-.091-.113-.004-.004-.003-.004-.094-.113-.003-.004-.003-.004-.095-.111-.004-.004-.003-.004-.096-.11-.004-.005-.003-.004-.098-.11-.004-.003-.003-.004-.1-.108-.003-.004-.004-.004-.1-.107-.004-.004-.004-.004-.102-.106-.003-.003-.004-.004-.093-.095-.124-.103-.14-.08-.153-.05-.16-.023zM4.45 12.826l-.161.002-.158.032-.15.06-.135.088-.118.11-.094.131-.069.146-.035.129-.026.132v.005l-.002.005-.025.143-.001.005-.001.006-.024.143-.001.005-.001.006-.022.143-.001.006-.001.005-.02.144-.001.005-.001.005-.019.145v.005l-.001.006-.017.144v.006l-.001.005-.016.145v.011l-.014.145v.005l-.001.006-.012.146v.01l-.01.146-.001.006v.005l-.009.146v.011l-.007.146v.011l-.004.147v.011l-.003.147v.01l-.002.148v.01l.001.148v.01l.003.147v.011l.005.147v.01l.007.147v.011l.009.146v.011l.01.146v.01l.013.146v.011l.014.145v.005l.001.006.016.145v.011l.018.144v.006l.001.005.019.144v.006l.001.005.021.144v.005l.002.006.022.143v.006l.002.005.024.143v.005l.002.006.025.143.001.005.001.005.028.143.001.005.001.005.03.142v.005l.002.006.03.141.002.005.001.005.033.142v.005l.002.005.035.14v.006l.002.005.036.14.002.005.001.005.038.14.001.005.002.005.04.14v.005l.002.005.042.138.001.006.002.005.042.138.002.005.002.005.017.054.064.148.09.134.114.114.132.092.148.065.157.037.16.007.16-.023.153-.052.14-.08.123-.104.102-.125.076-.142.049-.153.02-.16-.011-.161-.031-.13-.017-.051-.039-.126-.038-.13-.037-.128-.035-.13-.033-.128-.033-.134-.03-.13-.029-.131-.026-.13-.026-.133-.024-.133-.023-.133-.02-.132-.02-.136-.017-.132-.016-.135-.014-.135-.012-.133-.012-.138-.009-.133-.007-.136-.006-.138-.004-.134-.003-.136v-.274l.003-.136.004-.134.006-.139.007-.136.01-.133.01-.138.013-.132.014-.135.016-.135.017-.132.02-.137.02-.13.023-.134.024-.133.024-.126.016-.16-.014-.161-.044-.155-.072-.145-.098-.128-.12-.108-.137-.084-.15-.057-.16-.029zm26.698 1.601l-.161.01-.157.04-.146.067-.131.093-.112.117-.088.135-.061.149-.033.157-.005.134.006.14.006.176.003.177.001.178-.001.177-.003.178-.006.177-.007.176-.01.177-.012.176-.015.176-.016.173-.018.175-.02.175-.024.174-.025.175-.026.17-.03.174-.03.173-.033.17-.036.172-.037.17-.04.17-.042.172-.043.168-.045.166-.048.169-.05.167-.052.168-.053.164-.056.166-.058.166-.06.16-.062.165-.062.158-.066.165-.068.16-.07.16-.07.158-.075.159-.074.155-.079.158-.08.158-.06.15-.03.158-.001.161.029.159.058.15.085.137.108.119.13.097.144.07.156.044.16.013.16-.017.155-.046.143-.074.127-.1.107-.12.07-.115.083-.164.003-.005.002-.004.082-.166.002-.005.003-.004.08-.167.002-.005.002-.004.078-.168.002-.005.002-.004.076-.169.002-.004.002-.005.074-.17.002-.004.002-.005.072-.17.002-.005.002-.005.07-.171.001-.005.002-.005.068-.172.002-.004.002-.005.065-.173.002-.005.002-.005.063-.173.002-.005.002-.005.06-.174.003-.005.001-.005.06-.175.001-.005.002-.005.057-.176.001-.005.002-.005.055-.177.001-.005.002-.005.052-.177.002-.005.001-.005.051-.178.001-.005.002-.005.048-.179.002-.005v-.005l.047-.179.001-.005.002-.005.044-.18v-.005l.002-.005.042-.18.001-.006.001-.005.04-.181.001-.005.001-.005.037-.182.002-.005v-.005l.036-.182v-.006l.002-.005.033-.182v-.006l.002-.005.03-.183.001-.005.001-.005.029-.184v-.005l.001-.006.027-.184v-.005l.001-.005.024-.185v-.005l.001-.005.022-.185v-.006l.001-.005.02-.185v-.006l.001-.005.017-.186v-.005l.001-.005.015-.187v-.005l.001-.005.013-.187v-.01l.01-.187.001-.006v-.005l.009-.187v-.011l.006-.187v-.011l.004-.188v-.011l.001-.188v-.01l-.001-.188v-.011l-.004-.188v-.011l-.006-.187v-.011l-.007-.145-.022-.16-.05-.152-.08-.141-.103-.124-.125-.102-.141-.077-.153-.05-.16-.02zM.938 15L.777 15l-.158.032-.15.06-.136.087-.117.11-.095.131-.068.146-.04.156-.012.133-.001.14v.01l.001.188v.011l.004.188v.011l.006.187v.011l.008.187v.011l.011.187v.005l.001.005.013.187v.01l.016.187v.01l.018.186v.011l.02.185.001.005v.006l.022.185.001.005v.005l.025.185v.005l.001.005.027.184v.006l.001.005.029.184v.005l.001.005.031.183.001.005.001.006.033.182.001.005.001.006.035.182.001.005.001.005.038.182v.005l.002.005.04.181v.005l.002.005.042.18.001.006.001.005.044.18.002.005v.005l.047.18.001.004.002.005.048.179.002.005.001.005.05.178.002.005.001.005.053.177.002.005.001.005.055.177.002.005.001.005.057.176.002.005.001.005.06.175.001.005.002.005.061.174.002.005.002.005.063.173.002.005.002.005.065.173.002.005.002.004.067.172.002.005.002.005.07.171.002.005.002.005.072.17.002.005.002.004.074.17.002.005.002.004.076.169.002.004.002.005.078.168.002.004.002.005.08.167.003.004.002.005.082.166.002.004.003.005.02.04.086.136.11.118.13.095.146.07.156.041.16.012.16-.019.155-.048.142-.075.126-.1.105-.123.08-.14.054-.152.024-.16-.006-.16-.036-.158-.051-.123-.018-.034-.078-.158L3.1 22.1l-.074-.16-.071-.157-.07-.16-.068-.16-.067-.165-.062-.158-.062-.164-.059-.161-.058-.166-.056-.166-.053-.164-.052-.168-.05-.167-.048-.17-.045-.165-.043-.168-.043-.172-.039-.17-.037-.17-.036-.172-.033-.17-.03-.173-.03-.174-.027-.17-.025-.175-.022-.174-.021-.175-.018-.175-.017-.173-.014-.176-.012-.176-.01-.177-.007-.176-.006-.177-.003-.178L1.73 16v-.134l-.013-.16-.044-.156-.072-.144-.097-.129-.12-.108-.137-.085-.15-.057L.938 15zm26.798 2.024l-.16.007-.157.038-.148.066-.132.092-.113.115-.09.134-.062.148-.03.127-.001.004-.023.134-.024.133-.026.133-.026.13-.03.132-.03.129-.032.134-.033.128-.035.13-.037.128-.038.13-.04.126-.04.128-.044.128-.044.126-.046.126-.048.126-.05.125-.05.125-.051.122-.054.123-.055.122-.056.12-.058.122-.06.12-.061.12-.063.119-.062.116-.067.119-.066.116-.069.115-.069.115-.07.113-.073.113-.074.112-.076.113-.077.112-.077.107-.08.11-.08.107-.085.11-.044.056-.088.135-.06.15-.033.158-.002.16.027.16.057.15.083.138.108.12.128.098.144.072.155.045.16.015.161-.016.155-.044.144-.073.128-.098.09-.099.05-.061.003-.004.003-.005.089-.115.003-.004.003-.005.088-.116.003-.004.003-.005.086-.117.003-.004.003-.005.084-.118.003-.004.003-.005.083-.12.003-.004.003-.004.081-.12.003-.005.003-.004.08-.121.003-.005.003-.004.078-.122.003-.005.003-.004.077-.123.002-.005.003-.004.075-.124.003-.005.003-.004.073-.125.003-.005.003-.004.072-.126.002-.004.003-.005.07-.126.003-.005.002-.005.07-.127.002-.004.002-.005.068-.128.002-.005.002-.004.066-.13.003-.004.002-.005.064-.13.002-.004.003-.005.062-.13.002-.005.003-.005.06-.13.003-.005.002-.005.06-.132.002-.005.002-.005.057-.132.003-.005.002-.005.056-.133.002-.005.002-.005.054-.134.002-.004.002-.005.053-.135.002-.005.002-.005.051-.135.002-.005.002-.005.05-.135.001-.005.002-.005.048-.137.001-.005.002-.005.046-.137.002-.005.002-.005.044-.137.002-.005.002-.005.042-.138.002-.005.001-.006.042-.138.001-.005.002-.005.04-.14V19.4l.002-.005.038-.14.001-.005.002-.005.036-.14.001-.005.001-.005.035-.141.001-.005.001-.005.033-.142.001-.005.001-.005.031-.141.001-.006.002-.005.029-.142v-.005l.002-.005.028-.143v-.005l.002-.005.025-.143.001-.006.001-.005.024-.143.001-.005.001-.006.001-.006.01-.161-.02-.16-.05-.154-.077-.141-.102-.125-.123-.104-.141-.079-.153-.051-.16-.022zM6.841 22.71l-.16.024-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.018.16.011.161.041.156.07.146.077.109.04.048.003.004.003.004.095.111.003.004.004.004.096.11.004.005.003.004.098.109.003.004.004.004.1.108.003.004.003.004.101.107.004.004.003.004.102.105.004.004.004.004.103.105.004.004.004.003.105.104.003.004.004.003.106.102.004.004.004.004.107.1.004.004.004.004.108.099.004.003.004.004.11.098.003.003.004.004.11.096.004.003.005.004.11.095.005.003.004.004.113.093.004.003.004.004.113.091.004.004.005.003.114.09.004.004.004.003.116.089.004.003.004.003.117.088.004.003.004.003.118.086.004.003.005.003.118.084.004.003.005.003.119.083.004.003.005.003.12.081.005.003.004.003.121.08.005.003.004.003.122.078.005.003.004.003.123.076.005.003.004.003.124.075.005.003.004.003.125.073.004.003.005.002.126.073.004.002.005.003.126.07.005.003.004.002.128.07.004.002.005.002.128.067.005.003.004.002.13.066.004.002.005.003.13.064.004.002.005.003.13.062.005.002.004.003.132.06.004.003.005.002.132.06.005.002.005.002.132.057.005.002.005.002.133.057.005.002.005.002.133.054.005.002.005.002.13.05.154.045.16.016.16-.015.156-.045.144-.072.128-.098.108-.12.083-.138.057-.15.028-.16-.003-.16-.032-.159-.061-.149-.088-.135-.11-.117-.132-.094-.12-.058-.124-.049-.126-.051-.122-.051-.122-.054-.12-.054-.126-.058-.119-.057-.12-.06-.12-.06-.118-.063-.117-.064-.119-.066-.116-.066-.115-.068-.115-.07-.113-.07-.115-.074-.112-.074-.11-.075-.11-.076-.112-.08-.11-.08-.109-.081-.106-.082-.104-.082-.106-.086-.105-.087-.101-.086-.105-.091-.1-.09-.1-.091-.1-.094-.097-.094-.1-.098-.093-.095-.096-.1-.093-.098-.092-.101-.089-.1-.09-.102-.088-.104-.036-.043-.114-.114-.133-.091-.148-.065-.157-.036-.161-.006zm15.063 2.701l-.16.014-.156.044-.12.057-.06.034-.12.066-.117.064-.118.062-.12.061-.12.06-.118.057-.126.058-.12.054-.122.054-.122.05-.126.052-.125.05-.124.046-.127.047-.125.044-.129.043-.126.04-.13.042-.128.038-.127.035-.13.036-.131.034-.129.031-.132.03-.13.03-.135.027-.133.026-.13.023-.13.022-.137.021-.132.02-.134.017-.132.015-.138.015-.135.013-.133.01-.138.01-.136.007-.134.006-.136.004-.14.003-.16.018-.155.047-.142.076-.127.1-.105.122-.08.14-.054.151-.025.16.006.16.035.158.064.148.09.134.114.114.133.092.147.065.157.036.134.008.145-.002h.011l.147-.005h.01l.147-.007h.011l.146-.009h.011l.146-.01h.005l.005-.001.146-.012h.011l.145-.014h.005l.006-.001.145-.016h.011l.144-.018h.006l.005-.001.144-.02h.011l.144-.021.005-.001h.006l.143-.023.006-.001h.005l.143-.025h.005l.006-.002.143-.026h.005l.005-.002.143-.027.005-.001.005-.001.142-.03h.005l.005-.002.142-.03.005-.002.005-.001.142-.033.005-.001.005-.001.14-.035.006-.001.005-.001.14-.037h.005l.005-.002.14-.038.005-.002h.005l.14-.04.005-.002.005-.001.138-.042.005-.001.006-.002.138-.043.005-.001.005-.002.137-.044.005-.002.005-.002.137-.046.005-.002.005-.001.137-.048.005-.002.005-.002.135-.05.005-.001.005-.002.135-.051.005-.002.005-.002.135-.053.005-.002.004-.002.134-.054.005-.002.005-.002.133-.057.005-.002.005-.002.132-.057.005-.003.005-.002.132-.06.005-.001.004-.002.131-.061.005-.003.005-.002.13-.062.005-.003.005-.002.13-.064.004-.003.005-.002.128-.066.005-.002.005-.003.128-.067.005-.002.004-.003.127-.069.005-.002.005-.003.126-.07.005-.003.004-.003.065-.037.132-.093.112-.115.089-.135.062-.149.034-.157.003-.161-.026-.16-.055-.15-.082-.14-.107-.12-.127-.1-.144-.073-.154-.046-.16-.016zM6.33 26.818l-.16.023-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.02.16.012.161.041.156.07.146.094.13.096.093.032.026.004.003.004.004.145.117.004.003.004.004.146.115.005.003.004.004.147.113.005.003.004.004.149.111.004.003.004.003.15.11.005.003.004.003.151.108.004.003.005.003.152.106.005.003.004.003.154.104.004.003.005.003.154.102.005.002.004.003.156.1.005.003.004.003.157.098.005.003.004.002.159.096.004.003.005.003.16.094.004.003.004.002.16.092.005.003.005.002.161.09.005.003.005.002.162.088.005.003.004.002.164.086.005.003.004.002.165.084.005.003.004.002.166.082.004.002.005.003.167.08.004.002.005.002.168.078.004.002.005.002.168.076.005.002.005.002.17.074.004.002.005.002.17.072.005.002.005.002.17.07.006.002.005.001.171.068.005.002.005.002.173.065.005.002.005.002.173.063.005.002.005.002.174.06.005.003.005.001.175.06.005.001.005.002.176.057.005.001.005.002.176.055.006.001.005.002.177.052.005.002.005.001.178.05.005.002.005.002.178.048.006.001.005.002.179.046.005.001.005.002.18.044h.005l.005.002.18.042.006.001.005.001.159.035.16.02.16-.01.157-.04.146-.069.13-.094.112-.117.087-.136.06-.149.033-.158.002-.161-.028-.159-.057-.15-.084-.138-.108-.12-.128-.098-.144-.072-.128-.039-.154-.033-.168-.04-.171-.041-.17-.044-.168-.046-.167-.047-.168-.05-.165-.051-.166-.054-.166-.056-.163-.057-.165-.06-.161-.062-.164-.064-.16-.065-.16-.068-.162-.07-.157-.07-.157-.074-.157-.075-.156-.077-.153-.079-.156-.082-.153-.082-.154-.086-.15-.086-.152-.09-.148-.09-.147-.092-.149-.095-.145-.095-.144-.098-.145-.1-.143-.102-.14-.103-.14-.104-.14-.108-.139-.11-.136-.11-.027-.022-.133-.091-.148-.065-.157-.036-.161-.006zm19.215.087l-.16.01-.157.039-.146.067-.11.076-.064.051-.139.11-.14.108-.14.104-.14.103-.143.101-.145.101-.144.098-.145.095-.149.095-.148.093-.147.089-.152.09-.15.086-.154.086-.153.082-.156.082-.153.079-.156.077-.157.075-.158.073-.157.071-.16.07-.16.068-.161.065-.164.064-.161.061-.165.06-.163.058-.166.056-.166.054-.166.051-.167.05-.167.047-.17.046-.168.044-.171.042-.168.039-.17.037-.11.023-.154.047-.143.075-.126.1-.106.122-.081.139-.054.152-.025.16.006.16.035.158.063.148.09.133.114.115.132.092.148.065.157.037.16.007.133-.016.115-.024.005-.001.005-.001.181-.04h.005l.005-.002.18-.042.006-.001.005-.001.18-.044.005-.002.005-.001.18-.046.004-.002h.005l.179-.05h.005l.005-.002.178-.05.005-.002.005-.002.177-.052.005-.002.005-.001.177-.055.005-.002.005-.001.176-.057.005-.002.005-.002.175-.059.005-.001.005-.002.174-.061.005-.002.005-.002.173-.063.005-.002.005-.002.173-.065.004-.002.005-.002.172-.068.005-.002.005-.002.171-.07.005-.001.005-.002.17-.072.005-.002.004-.002.17-.074.005-.002.004-.002.169-.076.004-.002.005-.002.168-.078.004-.002.005-.003.167-.08.004-.002.005-.002.166-.082.004-.002.005-.003.165-.084.004-.002.005-.003.163-.086.005-.002.005-.003.162-.088.005-.002.005-.003.161-.09.005-.002.004-.003.16-.092.005-.003.005-.002.16-.094.004-.003.004-.003.158-.096.005-.002.004-.003.158-.098.004-.003.005-.003.156-.1.004-.003.004-.003.155-.101.005-.003.004-.003.154-.104.004-.003.004-.003.153-.106.004-.003.005-.003.151-.108.004-.003.005-.003.15-.11.004-.003.004-.003.149-.112.004-.003.004-.003.148-.113.004-.004.004-.003.147-.115.004-.004.004-.003.068-.055.116-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.05-.153-.08-.14-.103-.125-.124-.102-.142-.077-.153-.05-.16-.02z\"\n}));\n\nfunction _extends$L() { return _extends$L = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$L.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$L({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M23.637 13.902l-7.625-5.535-7.624 5.535 2.912 8.956h9.425l2.912-8.956zm-1.017.33l-2.524 7.762H11.93l-2.524-7.762 6.607-4.796 6.608 4.796zM16.012.311c-1.448.02-2.93.157-4.302.628-.852.447-.255 1.863.66 1.574 2.255-.608 4.648-.607 6.922-.108.934.075 1.228-1.376.338-1.67C18.451.44 17.227.317 16.012.311zm9.012 2.934c-.913-.104-1.272 1.258-.454 1.648 1.834 1.36 3.293 3.185 4.31 5.22.526.776 1.842.098 1.515-.78a15.522 15.522 0 00-5.06-6.006c-.1-.044-.203-.07-.31-.082zM6.65 3.59c-.762.089-1.24.809-1.805 1.267C3.38 6.295 2.163 8.007 1.37 9.905c-.266.898 1.094 1.484 1.564.675a14.825 14.825 0 014.327-5.56c.476-.515.09-1.419-.612-1.431zm9.362.007c-.698.066-1.689-.16-2.033.635-.282.733.535 1.358 1.217 1.125 1.806-.147 3.63.203 5.293.907.902.255 1.472-1.112.656-1.573-1.6-.735-3.374-1.089-5.133-1.094zm-5.479 1.365c-.835.15-1.517.76-2.21 1.226-1.203.94-2.318 2.061-3.057 3.402-.33.904 1.063 1.552 1.547.723 1.045-1.656 2.596-2.925 4.285-3.873.545-.499.171-1.463-.565-1.478zm13.903 2.115c-.875-.07-1.22 1.173-.501 1.627 1.325 1.34 2.188 3.062 2.748 4.84.468.84 1.869.21 1.557-.699-.604-2.118-1.751-4.097-3.351-5.615a.93.93 0 00-.453-.153zM4.467 13.132c-.822-.07-.996.826-1.046 1.455-.256 1.93-.094 3.933.562 5.769.406.844 1.807.365 1.612-.551a11.498 11.498 0 01-.334-5.808.874.874 0 00-.794-.865zm26.687 1.6c-.746-.037-1.014.785-.879 1.395.043 2.393-.57 4.771-1.66 6.894-.31.884 1.02 1.536 1.53.75a15.632 15.632 0 001.821-8.372.876.876 0 00-.812-.667zm-30.197.571c-.782-.073-1.044.775-.933 1.404.068 2.414.661 4.833 1.809 6.962.534.77 1.842.076 1.505-.798a14.833 14.833 0 01-1.603-6.861.876.876 0 00-.778-.707zm26.787 2.024c-.777-.048-.952.797-1.021 1.392-.354 1.692-1.202 3.231-2.216 4.608-.407.872.925 1.638 1.48.852 1.361-1.733 2.296-3.827 2.582-6.017a.874.874 0 00-.825-.835zM6.857 23.012c-.808.018-1.082 1.122-.47 1.59 1.393 1.607 3.187 2.886 5.194 3.599.91.222 1.43-1.165.598-1.596a11.495 11.495 0 01-4.723-3.396.899.899 0 00-.599-.197zm15.057 2.7c-.81.194-1.504.76-2.325.972-1.203.458-2.5.536-3.758.664-.869.307-.573 1.728.346 1.663 2.201-.034 4.412-.626 6.293-1.778.604-.495.227-1.532-.556-1.521zM6.346 27.118c-.833.008-1.11 1.218-.395 1.617 1.986 1.602 4.358 2.749 6.868 3.226.933.076 1.227-1.376.338-1.67a14.838 14.838 0 01-6.345-3.066.929.929 0 00-.466-.107zm19.208.087c-.766.09-1.241.841-1.922 1.158-1.516.991-3.251 1.58-4.996 2.005-.872.405-.346 1.849.584 1.604 2.543-.526 4.98-1.66 6.963-3.344.47-.52.072-1.42-.63-1.423z\"\n}));\n\nfunction _extends$K() { return _extends$K = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$K.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingParallelIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$K({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M13.51 9.081v4.428H9.08v4.982h4.428v4.428h4.982V18.49h4.428v-4.982H18.49V9.081h-4.982zm.83.83h3.32v4.428h4.429v3.322H17.66v4.428h-3.32v-4.454H9.91v-3.296h4.428V9.911zM16 0h-.005l-.188.001h-.011l-.188.004h-.011l-.187.006h-.011l-.187.008h-.005L15.2.02l-.187.01h-.005l-.005.001-.187.013h-.011L14.62.06h-.01l-.186.018h-.011l-.185.02-.005.001h-.006l-.185.022-.005.001h-.005l-.185.025h-.005l-.005.001-.185.027h-.005l-.005.001-.184.029h-.005l-.005.001-.183.031-.006.001-.005.001-.182.033-.006.001-.005.001-.182.035-.005.001-.005.001-.182.038h-.005l-.005.002-.181.04h-.005l-.005.002-.18.042-.006.001-.005.001-.18.044-.005.002h-.005l-.17.045-.152.054-.139.082-.121.106-.1.127-.074.143-.046.155-.017.16.013.16.043.156.07.145.097.13.119.108.137.085.15.058.159.03.16-.001.133-.023.165-.043.168-.041.171-.04.171-.037.172-.036.17-.033.173-.03.17-.03.177-.027.171-.025.175-.022.175-.02.175-.02.176-.016.175-.014.177-.012.176-.01.177-.007.174-.006.177-.003L16 1.73h.177l.178.004.174.006.177.007.176.01.177.012.175.014.176.017.175.018.175.02.175.023.171.025.176.027.17.03.174.03.17.033.171.036.154.033.16.02.161-.01.156-.04.146-.069.131-.094.111-.117.087-.135.061-.15.032-.158.002-.16-.027-.16-.057-.15L20 .714l-.108-.12-.128-.097-.145-.073-.128-.038-.158-.035-.005-.001-.005-.001L19.14.31h-.005l-.005-.002-.182-.035h-.006l-.005-.002-.182-.033h-.006l-.005-.002-.183-.03-.005-.001-.006-.001-.183-.029h-.005l-.006-.001-.184-.027h-.005l-.005-.001-.185-.024h-.005L17.968.12 17.783.1l-.006-.001h-.005l-.185-.02h-.006l-.005-.001L17.39.06h-.005L17.38.06l-.187-.015h-.005l-.005-.001-.187-.013h-.011L16.8.02h-.011L16.6.01h-.011l-.187-.006h-.011L16.204 0h-.011L16.005 0H16zm9.015 2.935l-.16.004-.158.033-.15.062-.134.09-.116.111-.093.132-.067.147-.038.156-.01.161.022.16.05.153.078.141.103.124.102.087.045.034.142.106.137.105.14.11.136.11.135.112.134.115.134.117.13.115.132.122.128.12.127.122.126.125.124.126.124.128.121.13.118.128.118.132.117.133.113.134.113.136.11.136.109.137.109.142.104.14.103.14.101.142.1.144.099.146.095.145.094.147.093.15.092.15.087.149.087.15.084.152.084.155.08.152.08.155.04.081.084.138.11.119.128.096.145.072.155.043.16.013.16-.016.155-.046.144-.074.127-.099.106-.12.083-.14.055-.151.026-.16-.004-.16-.034-.158-.05-.124-.042-.085-.002-.004-.003-.005-.084-.165-.002-.004-.003-.005-.086-.164-.002-.004-.003-.005-.088-.162-.002-.005-.003-.005-.09-.161-.002-.005-.003-.004-.092-.16-.003-.005-.002-.005-.094-.16-.003-.004-.003-.004-.096-.159-.002-.004-.003-.005-.098-.157-.003-.004-.003-.005-.1-.156-.003-.004-.003-.005-.101-.154-.003-.005-.003-.004-.104-.154-.003-.004-.003-.005-.106-.152-.003-.005-.003-.004-.108-.151-.003-.004-.003-.005-.11-.15-.003-.004-.003-.004-.111-.15-.004-.003-.003-.005-.113-.147-.004-.004-.003-.005-.115-.146-.004-.004-.003-.004-.117-.145-.004-.004-.003-.004-.12-.144-.003-.004-.003-.004-.121-.142-.004-.004-.003-.004-.123-.141-.003-.004-.004-.004-.125-.14-.003-.004-.004-.004-.127-.138-.003-.004-.004-.004-.128-.136-.004-.004-.004-.004-.13-.135-.004-.004-.004-.004-.132-.134-.003-.004-.004-.003-.134-.133-.004-.003-.004-.004-.135-.13-.004-.004-.004-.004-.136-.128-.004-.004-.004-.004-.138-.126-.004-.004-.004-.003-.14-.125-.004-.004-.004-.003-.14-.123-.005-.004-.004-.003-.142-.121-.004-.004-.004-.003-.144-.12-.004-.003-.004-.003-.145-.117-.004-.004-.004-.003-.147-.115-.004-.004-.004-.003-.148-.113-.004-.003-.004-.004-.149-.111-.004-.003-.004-.004-.05-.036-.14-.083-.15-.055-.16-.027zM6.634 3.28l-.161.008-.157.037-.147.066-.111.074-.04.032-.005.003-.004.004-.145.117-.004.003-.004.004-.144.119-.004.003-.004.004-.142.12-.004.004-.004.004-.141.123-.004.003-.004.004-.14.125-.004.003-.004.004-.138.126-.004.004-.004.004-.136.128-.004.004-.004.004-.135.13-.004.004-.004.003-.134.133-.004.003-.004.004-.132.134-.003.004-.004.004-.13.135-.004.004-.004.004-.128.136-.004.004-.004.004-.126.138-.004.004-.003.004-.125.14-.004.004-.003.004-.123.14-.004.005-.003.004-.121.142-.004.004-.003.004-.12.144-.003.004-.003.004-.117.145-.004.004-.003.004-.115.146-.004.005-.003.004-.113.147-.003.005-.004.004-.111.149-.003.004-.004.004-.11.15-.002.005-.003.004-.108.151-.003.004-.003.005-.106.152-.003.005-.003.004-.104.154-.003.004-.003.005-.102.154-.003.005-.002.004-.1.156-.003.005-.003.004-.098.157-.003.005-.003.004-.096.159-.002.004-.003.005-.094.16-.003.004-.002.004-.092.16-.003.005-.003.005-.09.161-.002.005-.003.005-.088.162-.002.005-.003.004-.086.164-.002.005-.002.004-.084.165-.003.005-.002.004-.082.166-.002.004-.003.005-.08.167-.002.004-.002.005-.078.168-.002.004-.002.005-.045.1-.053.153-.023.16.007.16.037.157.065.148.092.132.114.114.134.09.148.064.157.035.161.006.16-.025.152-.054.14-.08.121-.106.1-.126.065-.118.043-.095.074-.16.075-.155.077-.157.08-.155.08-.152.083-.155.085-.152.086-.15.088-.149.091-.15.094-.15.094-.147.095-.145.099-.146.1-.144.1-.142.104-.14.104-.14.11-.142.107-.137.11-.136.114-.136.113-.134.117-.133.118-.132.117-.129.122-.13.124-.127.123-.126.127-.125.127-.122.128-.12.132-.122.13-.115.133-.117.135-.115.135-.111.136-.11.037-.03.117-.11.094-.132.068-.146.04-.156.01-.161-.02-.16-.05-.154-.076-.141-.102-.125-.123-.104-.14-.08-.153-.051-.16-.023zM16 3.286h-.005l-.148.001h-.01l-.147.003h-.011l-.147.005h-.011l-.146.007h-.011l-.146.009h-.011l-.146.01h-.005l-.005.001-.146.012h-.011l-.145.014h-.006l-.005.001-.05.006-.158.031-.15.06-.135.088-.117.111-.094.13-.069.147-.04.156-.01.16.019.16.049.154.076.142.102.125.123.105.14.08.152.051.16.023.134-.003.045-.005.135-.013.133-.01.136-.01.135-.007.137-.006.136-.004.136-.003h.274l.136.003.136.004.136.006.136.007.136.01.133.01.135.013.135.014.135.016.134.018.132.018.134.021.133.023.133.024.133.025.13.027.132.03.132.03.129.031.13.034.129.035.129.036.13.04.126.038.128.042.126.042.128.045.127.047.126.047.12.048.127.051.123.052.006.002.147.048.16.021.16-.009.157-.038.147-.067.131-.093.112-.116.089-.135.062-.149.033-.158.004-.16-.027-.16-.055-.151-.083-.139-.107-.12-.127-.099-.118-.063-.004-.001-.005-.003-.005-.002-.133-.056-.005-.002-.005-.002-.134-.054-.004-.002-.005-.002-.135-.053-.005-.002-.005-.002-.135-.051-.005-.002-.005-.002-.135-.05-.005-.001-.005-.002-.137-.048-.005-.001-.005-.002-.137-.046-.005-.002-.005-.002-.137-.044-.005-.002-.005-.001-.138-.043-.006-.002-.005-.001-.138-.042-.005-.001-.005-.002-.14-.04H19.4l-.005-.002-.14-.038-.005-.001-.005-.002-.14-.036-.005-.001-.005-.001-.141-.035-.005-.001-.005-.001-.142-.033-.005-.001-.005-.001-.142-.031-.005-.002h-.005l-.142-.03-.005-.001-.005-.001-.143-.028h-.005l-.005-.002-.143-.025-.006-.001-.005-.001-.143-.024-.005-.001-.006-.001-.143-.022-.006-.001h-.005l-.144-.022h-.005l-.006-.001-.144-.019h-.005l-.006-.001-.144-.017h-.006l-.005-.001-.145-.016h-.011l-.145-.014H17.1l-.005-.001-.146-.012h-.01l-.146-.01-.006-.001h-.005l-.146-.009h-.011l-.147-.006h-.01l-.147-.005h-.011l-.147-.003h-.011l-.147-.001H16zm-5.482 1.366l-.16.008-.157.037-.123.053-.06.032-.005.002-.004.003-.128.069-.004.002-.005.003-.126.07-.005.003-.004.002-.126.072-.005.003-.004.003-.125.073-.004.003-.005.003-.124.075-.004.003-.005.002-.123.077-.004.003-.005.003-.122.078-.004.003-.005.003-.121.08-.004.002-.005.003-.12.082-.005.003-.004.003-.12.083-.004.003-.004.003-.118.084-.005.003-.004.003-.118.086-.004.003-.004.003-.117.088-.004.003-.004.003-.116.089-.004.003-.004.004-.114.09-.005.003-.004.003-.113.092-.004.004-.004.003-.113.093-.004.004-.004.003-.111.095-.005.003-.004.004-.11.096-.004.004-.004.003-.11.098-.003.003-.004.004-.108.1-.004.003-.004.003-.107.101-.004.004-.004.003-.106.102-.004.004-.003.004-.105.103-.004.004-.004.004-.103.105-.004.004-.004.003-.102.106-.003.004-.004.004-.1.107-.004.004-.004.004-.099.108-.004.004-.003.004-.098.11-.003.003-.004.004-.096.11-.004.005-.003.004-.095.111-.003.004-.004.004-.093.113-.003.004-.004.004-.092.113-.003.004-.003.005-.09.114-.004.004-.003.004-.089.116-.003.004-.003.004-.088.117-.003.004-.003.004-.086.118-.003.004-.003.005-.084.118-.003.004-.003.005-.083.12-.003.003-.003.005-.082.12-.003.005-.002.004-.068.103-.076.142-.048.154-.018.16.011.161.041.156.07.146.095.13.117.11.136.086.15.06.158.03.162.002.158-.03.15-.057.138-.085.119-.109.082-.105.065-.099.075-.11.077-.113.077-.107.08-.11.08-.108.084-.108.083-.105.086-.106.086-.104.088-.104.089-.101.09-.102.093-.101.093-.099.094-.097.095-.096.098-.097.098-.095.099-.093.1-.092.103-.091.101-.089.104-.088.104-.086.106-.086.106-.083.106-.082.109-.082.108-.079.11-.078.11-.076.112-.076.112-.074.113-.072.113-.071.115-.07.115-.068.118-.067.117-.065.12-.065.054-.029.135-.088.116-.111.094-.132.068-.146.04-.156.009-.161-.02-.16-.05-.153-.078-.142-.102-.125-.123-.103-.141-.079-.153-.051-.16-.022zm13.91 2.116l-.162.008-.157.037-.147.066-.132.092-.113.116-.09.134-.063.148-.034.157-.005.162.025.159.055.152.082.138.086.103.09.09.094.098.092.099.093.1.091.103.089.101.088.104.086.104.086.106.083.105.083.108.08.108.081.11.077.107.077.112.075.111.075.114.072.113.071.113.07.114.068.118.067.115.065.118.064.117.062.117.061.121.059.119.059.122.056.121.054.12.055.125.051.123.051.125.048.123.048.127.047.126.044.125.043.128.042.129.039.126.038.13.022.076.058.15.085.137.11.119.129.096.145.07.155.043.16.013.161-.017.154-.046.144-.075.126-.1.106-.12.082-.14.055-.151.025-.16-.005-.16-.026-.132-.023-.082-.002-.005-.001-.005-.042-.139-.001-.005-.002-.005-.043-.138-.001-.005-.002-.005-.044-.137-.002-.005-.002-.005-.046-.137-.002-.005-.001-.005-.048-.137-.002-.005-.002-.005-.05-.135-.001-.005-.002-.005-.051-.135-.002-.005-.002-.005-.053-.135-.002-.005-.002-.005-.054-.133-.002-.005-.002-.005-.057-.133-.002-.005-.002-.005-.057-.132-.003-.005-.002-.005-.06-.132-.001-.005-.002-.004-.061-.132-.003-.004-.002-.005-.063-.13-.002-.005-.002-.005-.064-.13-.003-.004-.002-.005-.066-.129-.002-.004-.003-.005-.067-.128-.002-.005-.003-.004-.069-.128-.002-.004-.003-.005-.07-.126-.003-.005-.003-.004-.072-.126-.002-.005-.003-.004-.074-.125-.002-.004-.003-.005-.075-.124-.003-.004-.003-.005-.076-.123-.003-.004-.003-.005-.078-.122-.003-.004-.003-.005-.08-.121-.003-.004-.003-.005-.081-.12-.003-.005-.003-.004-.083-.12-.003-.004-.003-.004-.084-.118-.003-.005-.003-.004-.086-.118-.003-.004-.004-.004-.087-.117-.003-.004-.003-.004-.09-.116-.002-.004-.004-.004-.09-.114-.003-.005-.004-.004-.091-.113-.004-.004-.003-.004-.094-.113-.003-.004-.003-.004-.095-.111-.004-.004-.003-.004-.096-.11-.004-.005-.003-.004-.098-.11-.004-.003-.003-.004-.1-.108-.003-.004-.004-.004-.1-.107-.004-.004-.004-.004-.102-.106-.003-.003-.004-.004-.093-.095-.124-.103-.14-.08-.153-.05-.16-.023zM4.45 12.826l-.161.002-.158.032-.15.06-.135.088-.118.11-.094.131-.069.146-.035.129-.026.132v.005l-.002.005-.025.143-.001.005-.001.006-.024.143-.001.005-.001.006-.022.143-.001.006-.001.005-.02.144-.001.005-.001.005-.019.145v.005l-.001.006-.017.144v.006l-.001.005-.016.145v.011l-.014.145v.005l-.001.006-.012.146v.01l-.01.146-.001.006v.005l-.009.146v.011l-.007.146v.011l-.004.147v.011l-.003.147v.01l-.002.148v.01l.001.148v.01l.003.147v.011l.005.147v.01l.007.147v.011l.009.146v.011l.01.146v.01l.013.146v.011l.014.145v.005l.001.006.016.145v.011l.018.144v.006l.001.005.019.144v.006l.001.005.021.144v.005l.002.006.022.143v.006l.002.005.024.143v.005l.002.006.025.143.001.005.001.005.028.143.001.005.001.005.03.142v.005l.002.006.03.141.002.005.001.005.033.142v.005l.002.005.035.14v.006l.002.005.036.14.002.005.001.005.038.14.001.005.002.005.04.14v.005l.002.005.042.138.001.006.002.005.042.138.002.005.002.005.017.054.064.148.09.134.114.114.132.092.148.065.157.037.16.007.16-.023.153-.052.14-.08.123-.104.102-.125.076-.142.049-.153.02-.16-.011-.161-.031-.13-.017-.051-.039-.126-.038-.13-.037-.128-.035-.13-.033-.128-.033-.134-.03-.13-.029-.131-.026-.13-.026-.133-.024-.133-.023-.133-.02-.132-.02-.136-.017-.132-.016-.135-.014-.135-.012-.133-.012-.138-.009-.133-.007-.136-.006-.138-.004-.134-.003-.136v-.274l.003-.136.004-.134.006-.139.007-.136.01-.133.01-.138.013-.132.014-.135.016-.135.017-.132.02-.137.02-.13.023-.134.024-.133.024-.126.016-.16-.014-.161-.044-.155-.072-.145-.098-.128-.12-.108-.137-.084-.15-.057-.16-.029zm26.698 1.601l-.161.01-.157.04-.146.067-.131.093-.112.117-.088.135-.061.149-.033.157-.005.134.006.14.006.176.003.177.001.178-.001.177-.003.178-.006.177-.007.176-.01.177-.012.176-.015.176-.016.173-.018.175-.02.175-.024.174-.025.175-.026.17-.03.174-.03.173-.033.17-.036.172-.037.17-.04.17-.042.172-.043.168-.045.166-.048.169-.05.167-.052.168-.053.164-.056.166-.058.166-.06.16-.062.165-.062.158-.066.165-.068.16-.07.16-.07.158-.075.159-.074.155-.079.158-.08.158-.06.15-.03.158-.001.161.029.159.058.15.085.137.108.119.13.097.144.07.156.044.16.013.16-.017.155-.046.143-.074.127-.1.107-.12.07-.115.083-.164.003-.005.002-.004.082-.166.002-.005.003-.004.08-.167.002-.005.002-.004.078-.168.002-.005.002-.004.076-.169.002-.004.002-.005.074-.17.002-.004.002-.005.072-.17.002-.005.002-.005.07-.171.001-.005.002-.005.068-.172.002-.004.002-.005.065-.173.002-.005.002-.005.063-.173.002-.005.002-.005.06-.174.003-.005.001-.005.06-.175.001-.005.002-.005.057-.176.001-.005.002-.005.055-.177.001-.005.002-.005.052-.177.002-.005.001-.005.051-.178.001-.005.002-.005.048-.179.002-.005v-.005l.047-.179.001-.005.002-.005.044-.18v-.005l.002-.005.042-.18.001-.006.001-.005.04-.181.001-.005.001-.005.037-.182.002-.005v-.005l.036-.182v-.006l.002-.005.033-.182v-.006l.002-.005.03-.183.001-.005.001-.005.029-.184v-.005l.001-.006.027-.184v-.005l.001-.005.024-.185v-.005l.001-.005.022-.185v-.006l.001-.005.02-.185v-.006l.001-.005.017-.186v-.005l.001-.005.015-.187v-.005l.001-.005.013-.187v-.01l.01-.187.001-.006v-.005l.009-.187v-.011l.006-.187v-.011l.004-.188v-.011l.001-.188v-.01l-.001-.188v-.011l-.004-.188v-.011l-.006-.187v-.011l-.007-.145-.022-.16-.05-.152-.08-.141-.103-.124-.125-.102-.141-.077-.153-.05-.16-.02zM.938 15L.777 15l-.158.032-.15.06-.136.087-.117.11-.095.131-.068.146-.04.156-.012.133-.001.14v.01l.001.188v.011l.004.188v.011l.006.187v.011l.008.187v.011l.011.187v.005l.001.005.013.187v.01l.016.187v.01l.018.186v.011l.02.185.001.005v.006l.022.185.001.005v.005l.025.185v.005l.001.005.027.184v.006l.001.005.029.184v.005l.001.005.031.183.001.005.001.006.033.182.001.005.001.006.035.182.001.005.001.005.038.182v.005l.002.005.04.181v.005l.002.005.042.18.001.006.001.005.044.18.002.005v.005l.047.18.001.004.002.005.048.179.002.005.001.005.05.178.002.005.001.005.053.177.002.005.001.005.055.177.002.005.001.005.057.176.002.005.001.005.06.175.001.005.002.005.061.174.002.005.002.005.063.173.002.005.002.005.065.173.002.005.002.004.067.172.002.005.002.005.07.171.002.005.002.005.072.17.002.005.002.004.074.17.002.005.002.004.076.169.002.004.002.005.078.168.002.004.002.005.08.167.003.004.002.005.082.166.002.004.003.005.02.04.086.136.11.118.13.095.146.07.156.041.16.012.16-.019.155-.048.142-.075.126-.1.105-.123.08-.14.054-.152.024-.16-.006-.16-.036-.158-.051-.123-.018-.034-.078-.158L3.1 22.1l-.074-.16-.071-.157-.07-.16-.068-.16-.067-.165-.062-.158-.062-.164-.059-.161-.058-.166-.056-.166-.053-.164-.052-.168-.05-.167-.048-.17-.045-.165-.043-.168-.043-.172-.039-.17-.037-.17-.036-.172-.033-.17-.03-.173-.03-.174-.027-.17-.025-.175-.022-.174-.021-.175-.018-.175-.017-.173-.014-.176-.012-.176-.01-.177-.007-.176-.006-.177-.003-.178L1.73 16v-.134l-.013-.16-.044-.156-.072-.144-.097-.129-.12-.108-.137-.085-.15-.057L.938 15zm26.798 2.024l-.16.007-.157.038-.148.066-.132.092-.113.115-.09.134-.062.148-.03.127-.001.004-.023.134-.024.133-.026.133-.026.13-.03.132-.03.129-.032.134-.033.128-.035.13-.037.128-.038.13-.04.126-.04.128-.044.128-.044.126-.046.126-.048.126-.05.125-.05.125-.051.122-.054.123-.055.122-.056.12-.058.122-.06.12-.061.12-.063.119-.062.116-.067.119-.066.116-.069.115-.069.115-.07.113-.073.113-.074.112-.076.113-.077.112-.077.107-.08.11-.08.107-.085.11-.044.056-.088.135-.06.15-.033.158-.002.16.027.16.057.15.083.138.108.12.128.098.144.072.155.045.16.015.161-.016.155-.044.144-.073.128-.098.09-.099.05-.061.003-.004.003-.005.089-.115.003-.004.003-.005.088-.116.003-.004.003-.005.086-.117.003-.004.003-.005.084-.118.003-.004.003-.005.083-.12.003-.004.003-.004.081-.12.003-.005.003-.004.08-.121.003-.005.003-.004.078-.122.003-.005.003-.004.077-.123.002-.005.003-.004.075-.124.003-.005.003-.004.073-.125.003-.005.003-.004.072-.126.002-.004.003-.005.07-.126.003-.005.002-.005.07-.127.002-.004.002-.005.068-.128.002-.005.002-.004.066-.13.003-.004.002-.005.064-.13.002-.004.003-.005.062-.13.002-.005.003-.005.06-.13.003-.005.002-.005.06-.132.002-.005.002-.005.057-.132.003-.005.002-.005.056-.133.002-.005.002-.005.054-.134.002-.004.002-.005.053-.135.002-.005.002-.005.051-.135.002-.005.002-.005.05-.135.001-.005.002-.005.048-.137.001-.005.002-.005.046-.137.002-.005.002-.005.044-.137.002-.005.002-.005.042-.138.002-.005.001-.006.042-.138.001-.005.002-.005.04-.14V19.4l.002-.005.038-.14.001-.005.002-.005.036-.14.001-.005.001-.005.035-.141.001-.005.001-.005.033-.142.001-.005.001-.005.031-.141.001-.006.002-.005.029-.142v-.005l.002-.005.028-.143v-.005l.002-.005.025-.143.001-.006.001-.005.024-.143.001-.005.001-.006.001-.006.01-.161-.02-.16-.05-.154-.077-.141-.102-.125-.123-.104-.141-.079-.153-.051-.16-.022zM6.841 22.71l-.16.024-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.018.16.011.161.041.156.07.146.077.109.04.048.003.004.003.004.095.111.003.004.004.004.096.11.004.005.003.004.098.109.003.004.004.004.1.108.003.004.003.004.101.107.004.004.003.004.102.105.004.004.004.004.103.105.004.004.004.003.105.104.003.004.004.003.106.102.004.004.004.004.107.1.004.004.004.004.108.099.004.003.004.004.11.098.003.003.004.004.11.096.004.003.005.004.11.095.005.003.004.004.113.093.004.003.004.004.113.091.004.004.005.003.114.09.004.004.004.003.116.089.004.003.004.003.117.088.004.003.004.003.118.086.004.003.005.003.118.084.004.003.005.003.119.083.004.003.005.003.12.081.005.003.004.003.121.08.005.003.004.003.122.078.005.003.004.003.123.076.005.003.004.003.124.075.005.003.004.003.125.073.004.003.005.002.126.073.004.002.005.003.126.07.005.003.004.002.128.07.004.002.005.002.128.067.005.003.004.002.13.066.004.002.005.003.13.064.004.002.005.003.13.062.005.002.004.003.132.06.004.003.005.002.132.06.005.002.005.002.132.057.005.002.005.002.133.057.005.002.005.002.133.054.005.002.005.002.13.05.154.045.16.016.16-.015.156-.045.144-.072.128-.098.108-.12.083-.138.057-.15.028-.16-.003-.16-.032-.159-.061-.149-.088-.135-.11-.117-.132-.094-.12-.058-.124-.049-.126-.051-.122-.051-.122-.054-.12-.054-.126-.058-.119-.057-.12-.06-.12-.06-.118-.063-.117-.064-.119-.066-.116-.066-.115-.068-.115-.07-.113-.07-.115-.074-.112-.074-.11-.075-.11-.076-.112-.08-.11-.08-.109-.081-.106-.082-.104-.082-.106-.086-.105-.087-.101-.086-.105-.091-.1-.09-.1-.091-.1-.094-.097-.094-.1-.098-.093-.095-.096-.1-.093-.098-.092-.101-.089-.1-.09-.102-.088-.104-.036-.043-.114-.114-.133-.091-.148-.065-.157-.036-.161-.006zm15.063 2.701l-.16.014-.156.044-.12.057-.06.034-.12.066-.117.064-.118.062-.12.061-.12.06-.118.057-.126.058-.12.054-.122.054-.122.05-.126.052-.125.05-.124.046-.127.047-.125.044-.129.043-.126.04-.13.042-.128.038-.127.035-.13.036-.131.034-.129.031-.132.03-.13.03-.135.027-.133.026-.13.023-.13.022-.137.021-.132.02-.134.017-.132.015-.138.015-.135.013-.133.01-.138.01-.136.007-.134.006-.136.004-.14.003-.16.018-.155.047-.142.076-.127.1-.105.122-.08.14-.054.151-.025.16.006.16.035.158.064.148.09.134.114.114.133.092.147.065.157.036.134.008.145-.002h.011l.147-.005h.01l.147-.007h.011l.146-.009h.011l.146-.01h.005l.005-.001.146-.012h.011l.145-.014h.005l.006-.001.145-.016h.011l.144-.018h.006l.005-.001.144-.02h.011l.144-.021.005-.001h.006l.143-.023.006-.001h.005l.143-.025h.005l.006-.002.143-.026h.005l.005-.002.143-.027.005-.001.005-.001.142-.03h.005l.005-.002.142-.03.005-.002.005-.001.142-.033.005-.001.005-.001.14-.035.006-.001.005-.001.14-.037h.005l.005-.002.14-.038.005-.002h.005l.14-.04.005-.002.005-.001.138-.042.005-.001.006-.002.138-.043.005-.001.005-.002.137-.044.005-.002.005-.002.137-.046.005-.002.005-.001.137-.048.005-.002.005-.002.135-.05.005-.001.005-.002.135-.051.005-.002.005-.002.135-.053.005-.002.004-.002.134-.054.005-.002.005-.002.133-.057.005-.002.005-.002.132-.057.005-.003.005-.002.132-.06.005-.001.004-.002.131-.061.005-.003.005-.002.13-.062.005-.003.005-.002.13-.064.004-.003.005-.002.128-.066.005-.002.005-.003.128-.067.005-.002.004-.003.127-.069.005-.002.005-.003.126-.07.005-.003.004-.003.065-.037.132-.093.112-.115.089-.135.062-.149.034-.157.003-.161-.026-.16-.055-.15-.082-.14-.107-.12-.127-.1-.144-.073-.154-.046-.16-.016zM6.33 26.818l-.16.023-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.02.16.012.161.041.156.07.146.094.13.096.093.032.026.004.003.004.004.145.117.004.003.004.004.146.115.005.003.004.004.147.113.005.003.004.004.149.111.004.003.004.003.15.11.005.003.004.003.151.108.004.003.005.003.152.106.005.003.004.003.154.104.004.003.005.003.154.102.005.002.004.003.156.1.005.003.004.003.157.098.005.003.004.002.159.096.004.003.005.003.16.094.004.003.004.002.16.092.005.003.005.002.161.09.005.003.005.002.162.088.005.003.004.002.164.086.005.003.004.002.165.084.005.003.004.002.166.082.004.002.005.003.167.08.004.002.005.002.168.078.004.002.005.002.168.076.005.002.005.002.17.074.004.002.005.002.17.072.005.002.005.002.17.07.006.002.005.001.171.068.005.002.005.002.173.065.005.002.005.002.173.063.005.002.005.002.174.06.005.003.005.001.175.06.005.001.005.002.176.057.005.001.005.002.176.055.006.001.005.002.177.052.005.002.005.001.178.05.005.002.005.002.178.048.006.001.005.002.179.046.005.001.005.002.18.044h.005l.005.002.18.042.006.001.005.001.159.035.16.02.16-.01.157-.04.146-.069.13-.094.112-.117.087-.136.06-.149.033-.158.002-.161-.028-.159-.057-.15-.084-.138-.108-.12-.128-.098-.144-.072-.128-.039-.154-.033-.168-.04-.171-.041-.17-.044-.168-.046-.167-.047-.168-.05-.165-.051-.166-.054-.166-.056-.163-.057-.165-.06-.161-.062-.164-.064-.16-.065-.16-.068-.162-.07-.157-.07-.157-.074-.157-.075-.156-.077-.153-.079-.156-.082-.153-.082-.154-.086-.15-.086-.152-.09-.148-.09-.147-.092-.149-.095-.145-.095-.144-.098-.145-.1-.143-.102-.14-.103-.14-.104-.14-.108-.139-.11-.136-.11-.027-.022-.133-.091-.148-.065-.157-.036-.161-.006zm19.215.087l-.16.01-.157.039-.146.067-.11.076-.064.051-.139.11-.14.108-.14.104-.14.103-.143.101-.145.101-.144.098-.145.095-.149.095-.148.093-.147.089-.152.09-.15.086-.154.086-.153.082-.156.082-.153.079-.156.077-.157.075-.158.073-.157.071-.16.07-.16.068-.161.065-.164.064-.161.061-.165.06-.163.058-.166.056-.166.054-.166.051-.167.05-.167.047-.17.046-.168.044-.171.042-.168.039-.17.037-.11.023-.154.047-.143.075-.126.1-.106.122-.081.139-.054.152-.025.16.006.16.035.158.063.148.09.133.114.115.132.092.148.065.157.037.16.007.133-.016.115-.024.005-.001.005-.001.181-.04h.005l.005-.002.18-.042.006-.001.005-.001.18-.044.005-.002.005-.001.18-.046.004-.002h.005l.179-.05h.005l.005-.002.178-.05.005-.002.005-.002.177-.052.005-.002.005-.001.177-.055.005-.002.005-.001.176-.057.005-.002.005-.002.175-.059.005-.001.005-.002.174-.061.005-.002.005-.002.173-.063.005-.002.005-.002.173-.065.004-.002.005-.002.172-.068.005-.002.005-.002.171-.07.005-.001.005-.002.17-.072.005-.002.004-.002.17-.074.005-.002.004-.002.169-.076.004-.002.005-.002.168-.078.004-.002.005-.003.167-.08.004-.002.005-.002.166-.082.004-.002.005-.003.165-.084.004-.002.005-.003.163-.086.005-.002.005-.003.162-.088.005-.002.005-.003.161-.09.005-.002.004-.003.16-.092.005-.003.005-.002.16-.094.004-.003.004-.003.158-.096.005-.002.004-.003.158-.098.004-.003.005-.003.156-.1.004-.003.004-.003.155-.101.005-.003.004-.003.154-.104.004-.003.004-.003.153-.106.004-.003.005-.003.151-.108.004-.003.005-.003.15-.11.004-.003.004-.003.149-.112.004-.003.004-.003.148-.113.004-.004.004-.003.147-.115.004-.004.004-.003.068-.055.116-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.05-.153-.08-.14-.103-.125-.124-.102-.142-.077-.153-.05-.16-.02z\",\n opacity: \".98\"\n}));\n\nfunction _extends$J() { return _extends$J = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$J.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$J({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.012 8.816L9.21 21.026h13.606l-6.803-12.21zm0 1.776l5.332 9.57H10.681l5.331-9.57zm0-10.281c-1.448.02-2.93.157-4.302.628-.852.447-.255 1.863.66 1.574 2.255-.608 4.648-.607 6.922-.108.934.075 1.228-1.376.338-1.67C18.451.44 17.227.317 16.012.311zm9.012 2.934c-.913-.104-1.272 1.258-.454 1.648 1.834 1.36 3.293 3.185 4.31 5.22.526.776 1.842.098 1.515-.78a15.522 15.522 0 00-5.06-6.006c-.1-.044-.203-.07-.31-.082zM6.65 3.59c-.762.089-1.24.809-1.805 1.267C3.38 6.295 2.163 8.007 1.37 9.905c-.266.898 1.094 1.484 1.564.675a14.825 14.825 0 014.327-5.56c.476-.515.09-1.419-.612-1.431zm9.362.007c-.698.066-1.689-.16-2.033.635-.282.733.535 1.358 1.217 1.125 1.806-.147 3.63.203 5.293.907.902.255 1.472-1.112.656-1.573-1.6-.735-3.374-1.089-5.133-1.094zm-5.479 1.365c-.835.15-1.517.76-2.21 1.226-1.203.94-2.318 2.061-3.057 3.402-.33.904 1.063 1.552 1.547.723 1.045-1.656 2.596-2.925 4.285-3.873.545-.499.171-1.463-.565-1.478zm13.903 2.115c-.875-.07-1.22 1.173-.501 1.627 1.325 1.34 2.188 3.062 2.748 4.84.468.84 1.869.21 1.557-.699-.604-2.118-1.751-4.097-3.351-5.615a.93.93 0 00-.453-.153zM4.467 13.132c-.822-.07-.996.826-1.046 1.455-.256 1.93-.094 3.933.562 5.769.406.844 1.807.365 1.612-.551a11.498 11.498 0 01-.334-5.808.874.874 0 00-.794-.865zm26.687 1.6c-.746-.037-1.014.785-.879 1.395.043 2.393-.57 4.771-1.66 6.894-.31.884 1.02 1.536 1.53.75a15.632 15.632 0 001.821-8.372.876.876 0 00-.812-.667zm-30.197.571c-.782-.073-1.044.775-.933 1.404.068 2.414.661 4.833 1.809 6.962.534.77 1.842.076 1.505-.798a14.833 14.833 0 01-1.603-6.861.876.876 0 00-.778-.707zm26.787 2.024c-.777-.048-.952.797-1.021 1.392-.354 1.692-1.202 3.231-2.216 4.608-.407.872.925 1.638 1.48.852 1.361-1.733 2.296-3.827 2.582-6.017a.874.874 0 00-.825-.835zM6.857 23.012c-.808.018-1.082 1.122-.47 1.59 1.393 1.607 3.187 2.886 5.194 3.599.91.222 1.43-1.165.598-1.596a11.495 11.495 0 01-4.723-3.396.899.899 0 00-.599-.197zm15.057 2.7c-.81.194-1.504.76-2.325.972-1.203.458-2.5.536-3.758.664-.869.307-.573 1.728.346 1.663 2.201-.034 4.412-.626 6.293-1.778.604-.495.227-1.532-.556-1.521zM6.346 27.118c-.833.008-1.11 1.218-.395 1.617 1.986 1.602 4.358 2.749 6.868 3.226.933.076 1.227-1.376.338-1.67a14.838 14.838 0 01-6.345-3.066.929.929 0 00-.466-.107zm19.208.087c-.766.09-1.241.841-1.922 1.158-1.516.991-3.251 1.58-4.996 2.005-.872.405-.346 1.849.584 1.604 2.543-.526 4.98-1.66 6.963-3.344.47-.52.072-1.42-.63-1.423z\"\n}));\n\nfunction _extends$I() { return _extends$I = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$I.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingTimerIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$I({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.998 8.406c-3.018-.041-5.92 1.926-7.031 4.727-1.138 2.695-.51 6.012 1.537 8.103 1.99 2.141 5.268 2.93 8.014 1.927 2.878-.98 4.992-3.827 5.068-6.87.153-2.957-1.624-5.88-4.3-7.137a7.552 7.552 0 00-3.288-.75zm0 1.384c2.759-.052 5.373 1.973 6.015 4.655.704 2.578-.482 5.517-2.791 6.867-2.358 1.48-5.682 1.086-7.618-.918-2.043-1.971-2.407-5.381-.84-7.745 1.11-1.763 3.15-2.88 5.234-2.86zm1.962 1.765l-2.074 3.762c-.64.068-.793 1.04-.202 1.3.39.27.696-.18 1.052-.165h3.17v-.865h-3.182l1.993-3.615c-.252-.14-.505-.278-.757-.417zm-1.965-8.268h-.158l-.147.003h-.011l-.147.005h-.011l-.146.007h-.011l-.146.009h-.011l-.146.01h-.005l-.005.001-.146.012h-.011l-.145.014h-.006l-.005.001-.05.006-.158.031-.15.06-.135.088-.117.111-.094.13-.069.147-.04.156-.01.16.019.16.049.154.076.142.102.125.123.105.14.08.152.051.16.023.134-.003.045-.005.135-.013.133-.01.136-.01.135-.007.137-.006.136-.004.136-.003h.274l.136.003.136.004.136.006.136.007.136.01.133.01.135.013.135.014.135.016.134.018.132.018.134.021.133.023.133.024.133.025.13.027.132.03.132.03.129.031.13.034.129.035.129.036.13.04.126.038.128.042.126.042.128.045.127.047.126.048.12.047.127.051.123.052.006.002.147.048.16.021.16-.009.157-.038.147-.067.131-.093.112-.116.089-.135.062-.149.033-.158.004-.16-.027-.16-.055-.151-.083-.138-.107-.121-.127-.099-.118-.063-.004-.001-.005-.003-.005-.002-.133-.056-.005-.002-.005-.002-.134-.054-.004-.002-.005-.002-.135-.053-.005-.002-.005-.002-.135-.051-.005-.002-.005-.002-.135-.05-.005-.001-.005-.002-.137-.048-.005-.001-.005-.002-.137-.046-.005-.002-.005-.002-.137-.044-.005-.002-.005-.001-.138-.043-.005-.002-.006-.001-.138-.042-.005-.001-.005-.002-.14-.04H19.4l-.005-.002-.14-.038-.005-.001-.005-.002-.14-.036-.005-.001-.005-.001-.141-.035-.005-.001-.005-.001-.142-.033-.005-.001-.005-.001-.141-.031-.006-.002h-.005l-.142-.03-.005-.001-.005-.001-.143-.028h-.005l-.005-.001-.143-.026-.006-.001-.005-.001-.143-.024-.005-.001-.006-.001-.143-.022-.006-.001h-.005l-.144-.022h-.005l-.006-.001-.144-.019h-.005l-.006-.001-.144-.017h-.006l-.005-.001-.145-.016h-.011l-.145-.014H17.1l-.005-.001-.146-.012h-.01l-.146-.01-.006-.001h-.005l-.146-.009h-.011l-.147-.006h-.01l-.147-.005h-.011l-.147-.003h-.01l-.148-.001h-.01zM10.357 4.66l-.156.037-.123.053-.06.032-.005.002-.004.003-.128.069-.004.002-.005.003-.126.07-.005.003-.004.002-.126.072-.005.003-.004.003-.125.073-.004.003-.005.003-.124.075-.004.003-.005.002-.123.077-.004.003-.005.003-.122.078-.004.003-.005.003-.121.08-.004.002-.005.003-.12.082-.005.003-.004.003-.12.083-.004.003-.004.003-.118.084-.005.003-.004.003-.118.086-.004.003-.004.003-.117.088-.004.003-.004.003-.116.089-.004.003-.004.004-.114.09-.005.003-.004.003-.113.092-.004.004-.004.003-.113.093-.004.004-.004.003-.111.095-.004.003-.005.004-.11.096-.004.004-.004.003-.109.098-.004.003-.004.004-.108.1-.004.003-.004.003-.107.101-.004.004-.004.003-.106.102-.003.004-.004.004-.105.103-.004.004-.004.004-.103.105-.004.004-.004.003-.102.106-.003.004-.004.004-.1.107-.004.004-.004.004-.099.108-.004.004-.003.004-.098.11-.003.003-.004.004-.096.11-.004.005-.003.004-.095.111-.003.004-.004.004-.093.113-.003.004-.004.004-.092.113-.003.004-.003.005-.09.114-.004.004-.003.004-.089.116-.003.004-.003.004-.088.117-.003.004-.003.005-.086.117-.003.004-.003.005-.084.118-.003.004-.003.005-.083.12-.003.003-.003.005-.082.12-.003.005-.002.004-.068.103-.076.142-.048.154-.018.16.011.161.041.156.07.146.095.13.117.11.136.086.15.06.158.03.162.002.158-.029.15-.058.138-.085.119-.108.082-.106.065-.099.075-.11.077-.113.077-.107.08-.11.08-.108.084-.108.083-.105.086-.106.086-.104.088-.104.089-.101.09-.102.093-.101.093-.099.094-.097.095-.096.098-.097.098-.095.099-.093.1-.092.103-.091.101-.089.104-.088.104-.086.106-.086.106-.083.106-.082.109-.082.108-.079.11-.078.11-.076.112-.076.112-.074.113-.072.113-.071.115-.07.115-.068.118-.067.117-.065.12-.065.054-.029.135-.088.116-.111.094-.132.068-.146.04-.156.009-.161-.02-.16-.05-.153-.078-.142-.102-.125-.123-.103-.141-.079-.153-.051-.16-.022-.16.008zm13.91 2.116l-.158.037-.147.066-.132.092-.113.116-.09.134-.063.148-.034.157-.005.162.026.159.054.152.082.139.086.102.09.09.094.098.093.099.092.1.091.103.089.101.088.104.086.104.086.106.083.105.083.108.08.108.081.11.077.107.077.112.075.111.075.114.072.113.071.113.07.115.068.117.067.115.065.118.064.117.062.118.061.12.059.119.059.122.056.121.054.12.055.125.051.123.051.125.048.123.049.127.046.126.044.125.043.128.042.129.039.126.038.13.022.076.058.15.086.137.109.119.129.096.145.07.155.043.16.013.161-.017.155-.046.143-.074.126-.1.106-.122.082-.138.055-.152.025-.16-.005-.16-.026-.132-.023-.082-.002-.005-.001-.005-.042-.139-.001-.005-.002-.005-.043-.138-.001-.005-.002-.005-.044-.137-.002-.005-.002-.005-.046-.137-.002-.005-.001-.005-.048-.137-.002-.005-.002-.005-.05-.135-.001-.005-.002-.005-.051-.135-.002-.005-.002-.005-.053-.135-.002-.005-.002-.005-.054-.133-.002-.005-.002-.005-.057-.133-.002-.005-.002-.005-.057-.132-.003-.005-.002-.005-.059-.132-.002-.005-.002-.004-.061-.132-.003-.004-.002-.005-.062-.13-.003-.005-.002-.005-.064-.13-.003-.004-.002-.005-.066-.129-.002-.004-.003-.005-.067-.128-.002-.005-.003-.004-.069-.128-.002-.004-.003-.005-.07-.126-.003-.005-.003-.004-.072-.126-.002-.005-.003-.004-.073-.125-.003-.004-.003-.005-.075-.124-.003-.004-.003-.005-.076-.123-.003-.004-.003-.005-.078-.122-.003-.004-.003-.005-.08-.121-.003-.004-.003-.005-.08-.12-.004-.005-.003-.004-.083-.12-.003-.004-.003-.004-.084-.118-.003-.005-.003-.004-.086-.117-.003-.005-.003-.004-.088-.117-.003-.004-.003-.004-.09-.116-.002-.004-.004-.004-.09-.114-.003-.005-.004-.004-.091-.113-.004-.004-.003-.004-.093-.113-.004-.004-.003-.004-.095-.111-.004-.004-.003-.004-.096-.11-.004-.005-.003-.004-.098-.109-.004-.004-.003-.004-.1-.108-.003-.004-.004-.004-.1-.107-.004-.004-.004-.004-.102-.106-.003-.003-.004-.004-.093-.095-.124-.103-.14-.08-.153-.05-.16-.023-.16.008zM4.288 12.828l-.158.032-.15.06-.135.088-.117.11-.095.131-.069.146-.035.129-.026.132v.005l-.002.005-.025.143-.001.005-.001.006-.024.143-.001.005-.001.006-.022.143-.001.006-.001.005-.02.144-.001.005-.001.006-.019.144v.005l-.001.006-.017.144v.006l-.001.005-.016.145v.011l-.014.145v.006l-.001.005-.012.146v.01l-.01.146-.001.006v.005l-.009.146v.011l-.007.146v.011l-.004.147v.011l-.003.147v.01l-.002.148v.01l.001.148v.01l.003.147v.011l.005.147v.01l.007.147v.011l.009.146v.011l.01.146v.01l.013.146v.011l.014.145v.005l.001.006.016.145v.011l.018.144v.006l.001.005.019.144v.006l.001.005.021.144v.005l.002.006.022.143v.006l.002.005.024.143v.005l.002.006.025.143.001.005.001.005.028.143.001.005.001.005.03.142v.005l.002.006.03.141.002.005.001.006.033.14v.006l.002.005.035.14v.006l.002.005.036.14.002.005.001.005.038.14.001.005.002.005.04.14v.005l.002.005.042.138.001.006.002.005.042.138.002.005.002.005.017.054.064.148.09.134.114.114.132.092.148.065.157.037.16.007.16-.023.153-.052.14-.08.123-.103.102-.126.076-.142.049-.153.02-.16-.01-.161-.032-.13-.017-.051-.039-.126-.038-.13-.037-.128-.035-.13-.033-.128-.033-.134-.03-.13-.029-.131-.026-.13-.026-.132-.024-.134-.023-.133-.02-.132-.02-.136-.017-.132-.016-.135-.014-.135-.012-.133-.012-.138-.009-.133-.007-.136-.006-.138-.004-.134-.003-.136v-.274l.003-.136.004-.134.006-.139.007-.136.01-.132.01-.139.013-.132.014-.135.016-.135.017-.132.02-.137.02-.13.023-.134.024-.133.024-.126.016-.16-.014-.161-.044-.155-.072-.145-.098-.128-.12-.108-.137-.084-.15-.057-.16-.029-.16.002zm23.286 4.202l-.156.038-.148.066-.132.092-.113.115-.09.134-.062.148-.03.127-.001.004-.023.134-.024.134-.026.132-.026.13-.03.132-.03.129-.032.134-.033.128-.035.13-.037.128-.038.13-.04.126-.04.128-.044.128-.044.126-.046.126-.048.126-.05.125-.05.125-.051.122-.054.123-.055.122-.056.12-.058.122-.06.12-.061.12-.062.119-.063.116-.067.119-.066.116-.068.115-.07.115-.07.113-.073.113-.074.112-.076.113-.077.112-.077.107-.08.11-.08.108-.085.109-.044.056-.088.135-.06.15-.033.158-.002.16.027.16.057.15.083.138.108.12.128.098.144.072.155.045.16.015.161-.016.155-.044.144-.073.128-.098.09-.099.05-.061.003-.004.003-.005.089-.115.003-.004.003-.005.088-.116.003-.004.003-.005.086-.117.003-.004.003-.005.084-.118.003-.004.003-.005.083-.12.003-.004.003-.004.082-.12.003-.005.002-.004.08-.121.003-.005.003-.004.078-.122.003-.005.003-.004.077-.123.002-.005.003-.004.075-.124.003-.005.003-.004.073-.125.003-.004.003-.005.072-.126.002-.004.003-.005.07-.126.003-.005.002-.005.07-.127.002-.004.002-.005.068-.128.002-.005.002-.004.066-.13.003-.004.002-.005.064-.13.002-.004.003-.005.062-.13.003-.005.002-.005.06-.13.003-.005.002-.005.06-.132.002-.005.002-.005.057-.132.003-.005.002-.005.056-.133.002-.005.002-.005.054-.134.002-.004.002-.005.053-.135.002-.005.002-.005.051-.135.002-.005.002-.005.05-.135.001-.005.002-.005.048-.137.001-.005.002-.005.046-.137.002-.005.002-.005.044-.137.002-.005.002-.005.042-.138.002-.005.002-.006.04-.138.002-.005.002-.005.04-.14V19.4l.002-.005.038-.14.001-.005.002-.005.036-.14.001-.005.001-.005.035-.141.001-.005.001-.005.033-.141.001-.006.001-.005.031-.141.002-.006v-.005l.03-.142.001-.005.001-.005.028-.143v-.005l.002-.005.025-.143.001-.006.001-.005.024-.143.001-.005.001-.006.001-.006.01-.161-.02-.16-.05-.154-.077-.141-.102-.125-.123-.104-.141-.079-.153-.051-.16-.022-.16.007zM6.681 22.734l-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.018.16.011.161.041.156.07.146.077.11.04.047.003.004.003.004.095.111.003.004.004.004.096.11.004.005.003.004.098.109.003.004.004.004.1.108.003.004.003.004.101.107.004.004.003.004.102.106.004.003.004.004.103.105.004.004.004.004.105.103.004.004.003.003.106.102.004.004.004.004.107.1.004.004.004.004.108.099.004.003.004.004.11.098.003.003.004.004.11.096.005.004.004.003.11.095.005.003.004.004.113.093.004.003.004.004.113.091.004.004.005.003.114.09.004.004.004.003.116.089.004.003.004.003.117.088.004.003.004.003.118.086.004.003.005.003.118.084.004.003.005.003.119.083.004.003.005.003.12.081.005.003.004.003.121.08.005.003.004.003.122.078.005.003.004.003.123.076.005.003.004.003.124.075.005.003.004.003.125.073.004.003.005.003.126.072.004.002.005.003.126.07.005.003.004.002.128.07.004.002.005.002.128.068.005.002.004.002.13.066.004.003.005.002.13.064.004.002.005.003.13.062.005.002.004.003.132.06.004.003.005.002.132.06.005.002.005.002.132.057.005.002.005.003.133.056.005.002.005.002.133.054.005.002.005.002.13.05.154.045.16.016.161-.015.155-.045.144-.072.128-.098.108-.12.083-.138.057-.15.028-.16-.003-.16-.032-.158-.061-.15-.088-.135-.11-.117-.132-.094-.12-.058-.124-.049-.126-.051-.122-.051-.122-.054-.12-.054-.126-.058-.119-.057-.12-.06-.12-.06-.118-.063-.117-.064-.119-.066-.116-.066-.115-.068-.115-.07-.113-.07-.115-.074-.112-.074-.11-.075-.11-.076-.112-.079-.11-.08-.109-.082-.106-.082-.104-.082-.106-.086-.105-.087-.101-.086-.105-.091-.1-.09-.1-.091-.1-.094-.097-.094-.1-.098-.093-.095-.096-.1-.093-.098-.092-.101-.089-.1-.09-.102-.088-.104-.036-.043-.114-.114-.133-.091-.148-.065-.157-.036-.161-.006-.16.024zm15.063 2.691l-.156.044-.12.057-.06.034-.12.066-.116.064-.119.062-.12.061-.12.06-.118.057-.126.058-.12.054-.122.054-.122.05-.126.052-.125.05-.124.046-.127.047-.125.044-.129.043-.126.04-.13.042-.128.038-.127.036-.13.035-.131.034-.129.031-.132.03-.13.03-.135.027-.133.026-.13.023-.13.022-.137.021-.132.02-.134.017-.132.015-.138.015-.135.013-.133.01-.138.01-.136.007-.134.006-.136.004-.14.003-.16.018-.155.047-.142.076-.127.1-.105.122-.08.14-.054.151-.025.16.006.16.035.158.064.148.09.134.114.114.133.092.147.065.157.036.134.008.145-.002h.011l.147-.005h.01l.147-.007h.011l.146-.009h.011l.146-.01h.005l.005-.001.146-.012h.011l.145-.014h.005l.006-.001.145-.016h.011l.144-.018h.006l.005-.001.144-.02h.011l.144-.021h.005l.006-.002.143-.022h.006l.005-.002.143-.024h.005l.006-.002.143-.026h.005l.005-.002.143-.027.005-.001.005-.001.142-.03h.005l.005-.002.142-.03.005-.002.005-.001.142-.033.005-.001.005-.001.14-.035.006-.001.005-.001.14-.036.005-.002.005-.001.14-.038.005-.001.005-.002.14-.04h.005l.005-.002.138-.042.005-.001.006-.002.138-.043.005-.001.005-.002.137-.044.005-.002.005-.002.137-.046.005-.002.005-.001.137-.048.005-.002.005-.002.135-.05.005-.001.005-.002.135-.051.005-.002.005-.002.135-.053.005-.002.004-.002.134-.054.005-.002.005-.002.133-.056.005-.003.005-.002.132-.057.005-.002.005-.003.132-.059.005-.002.004-.002.131-.061.005-.003.005-.002.13-.062.005-.003.005-.002.13-.064.004-.002.005-.003.129-.066.004-.002.005-.003.128-.067.005-.002.004-.003.127-.069.005-.002.005-.003.126-.07.005-.003.004-.002.065-.038.132-.093.112-.115.089-.135.062-.149.034-.157.004-.161-.027-.16-.055-.15-.082-.14-.107-.12-.127-.1-.144-.073-.154-.045-.16-.017-.161.014zM15.994 0l-.187.001h-.011l-.188.004h-.011l-.187.006h-.011l-.187.008h-.005L15.2.02l-.187.01h-.005l-.005.001-.187.013h-.01L14.62.06h-.01l-.186.018h-.011l-.185.02-.005.001h-.006l-.185.022-.005.001h-.005l-.185.025h-.005l-.005.001-.184.027h-.006l-.005.001-.184.029h-.005l-.005.001-.183.031-.005.001-.006.001-.182.033-.006.001-.005.001-.182.035-.005.001-.005.001-.182.038h-.005l-.005.002-.181.04h-.005l-.005.002-.18.042-.006.001-.005.001-.18.044-.005.002h-.005l-.17.045-.152.054-.139.082-.121.106-.1.127-.074.143-.046.155-.017.16.013.16.043.156.07.145.097.13.119.108.137.085.15.058.159.03.16-.001.133-.023.165-.043.168-.041.171-.04.171-.037.172-.036.17-.033.173-.03.17-.03.177-.027.171-.025.175-.022.175-.02.175-.02.176-.016.175-.014.177-.012.176-.01.177-.007.174-.006.177-.003L16 1.73h.177l.178.004.174.006.177.007.176.01.177.012.175.014.176.017.175.018.175.02.175.023.171.025.177.027.17.03.173.03.17.033.171.036.154.033.16.02.161-.01.156-.04.146-.069.131-.094.111-.117.088-.135.06-.15.032-.158.002-.16-.027-.16-.057-.15L20 .714l-.108-.12-.128-.097-.144-.073-.129-.038-.158-.035-.005-.001-.005-.001L19.14.31h-.005l-.005-.002-.182-.035h-.006l-.005-.002-.182-.033h-.006l-.005-.002-.183-.03-.005-.001-.005-.001-.184-.029h-.005l-.006-.001-.184-.027h-.005l-.005-.001-.185-.024h-.005L17.968.12 17.783.1l-.006-.001h-.005l-.185-.02h-.006l-.005-.001L17.39.06 17.385.06h-.005l-.187-.015h-.005l-.005-.001-.187-.013h-.01L16.799.02h-.011L16.6.01h-.011l-.187-.006h-.011L16.204 0h-.011L16.005 0h-.01zm8.86 2.939l-.157.033-.15.062-.134.09-.116.111-.093.132-.067.147-.038.156-.01.161.022.16.05.153.078.141.103.124.102.087.045.034.142.106.137.105.14.11.136.11.135.112.134.115.134.117.13.115.132.122.128.12.127.122.127.125.123.126.124.128.121.13.118.128.118.132.117.133.113.134.113.136.11.136.109.137.109.142.104.14.103.14.101.142.1.144.099.146.095.145.094.147.093.15.092.15.087.149.087.15.085.152.083.155.08.152.08.155.04.081.084.138.11.119.128.096.145.072.155.043.16.013.161-.016.155-.046.143-.074.127-.099.106-.12.083-.14.055-.151.026-.16-.004-.16-.034-.158-.05-.124-.042-.085-.002-.004-.003-.005-.084-.165-.002-.004-.003-.005-.086-.164-.002-.004-.003-.005-.088-.162-.002-.005-.003-.005-.09-.161-.002-.005-.003-.004-.092-.16-.002-.005-.003-.005-.094-.16-.003-.004-.003-.004-.096-.159-.002-.004-.003-.005-.098-.157-.003-.004-.003-.005-.1-.156-.003-.004-.002-.005-.102-.154-.003-.005-.003-.004-.104-.154-.003-.004-.003-.005-.106-.152-.003-.004-.003-.005-.108-.151-.003-.004-.003-.005-.11-.15-.003-.004-.003-.004-.111-.15-.004-.003-.003-.005-.113-.147-.004-.004-.003-.005-.115-.146-.004-.004-.003-.004-.117-.145-.004-.004-.003-.004-.12-.144-.003-.004-.003-.004-.121-.142-.003-.004-.004-.004-.123-.141-.003-.004-.004-.004-.125-.14-.003-.004-.004-.004-.127-.138-.003-.004-.004-.004-.128-.136-.004-.004-.004-.004-.13-.135-.004-.004-.003-.004-.133-.134-.003-.004-.004-.003-.134-.133-.004-.003-.004-.004-.135-.13-.004-.004-.004-.004-.136-.128-.004-.004-.004-.004-.138-.126-.004-.004-.004-.003-.14-.125-.004-.004-.004-.003-.14-.123-.005-.004-.004-.003-.142-.121-.004-.004-.004-.003-.144-.12-.004-.003-.004-.003-.145-.117-.004-.004-.004-.003-.147-.115-.004-.004-.004-.003-.148-.113-.004-.003-.004-.004-.149-.111-.004-.003-.004-.004-.05-.036-.14-.083-.15-.055-.16-.027-.16.004zm-18.381.348l-.157.037-.147.066-.111.074-.04.032-.005.003-.004.004-.145.117-.004.003-.004.004-.144.119-.004.003-.004.004-.142.12-.004.004-.004.004-.141.123-.004.003-.004.004-.14.125-.004.003-.004.004-.138.126-.004.004-.004.004-.136.128-.004.004-.004.004-.135.13-.004.004-.004.003-.134.133-.004.003-.004.004-.132.134-.003.004-.004.004-.13.135-.004.004-.004.004-.128.136-.004.004-.004.004-.126.138-.004.004-.003.004-.125.14-.004.004-.003.004-.123.14-.004.005-.003.004-.121.142-.004.004-.003.004-.12.144-.003.004-.003.004-.117.145-.004.004-.003.004-.115.146-.004.005-.003.004-.113.147-.003.005-.004.004-.111.149-.003.004-.004.004-.11.15-.002.005-.003.004-.108.151-.003.005-.003.004-.106.152-.003.005-.003.004-.104.154-.003.004-.003.005-.102.154-.003.005-.002.004-.1.156-.003.005-.003.004-.098.157-.003.005-.003.004-.096.159-.002.004-.003.005-.094.16-.003.004-.002.004-.092.16-.003.005-.003.005-.09.161-.002.005-.003.005-.088.162-.002.005-.003.004-.086.164-.002.005-.002.004-.084.165-.003.005-.002.004-.082.166-.002.005-.003.004-.08.167-.002.004-.002.005-.078.168-.002.004-.002.005-.045.1-.053.153-.023.16.007.16.037.157.065.148.092.132.114.114.134.09.148.064.157.035.161.006.16-.025.152-.054.14-.08.121-.106.1-.126.065-.118.043-.095.074-.16.075-.155.077-.157.08-.155.08-.152.083-.155.085-.152.086-.15.088-.149.091-.15.094-.15.094-.147.095-.145.099-.146.1-.144.1-.142.104-.14.104-.14.11-.142.107-.137.11-.136.114-.136.113-.134.117-.133.118-.132.117-.129.122-.13.124-.127.123-.126.127-.125.127-.122.128-.12.132-.122.13-.115.133-.117.135-.115.135-.111.136-.11.037-.03.117-.11.094-.132.068-.146.04-.156.01-.161-.02-.16-.05-.154-.076-.141-.102-.125-.123-.104-.14-.08-.153-.051-.16-.023-.161.008zm24.514 11.15l-.157.04-.146.067-.131.093-.112.117-.088.135-.061.149-.033.157-.005.134.006.14.006.176.003.177.001.178-.001.177-.003.178-.006.177-.007.176-.01.177-.012.176-.015.176-.016.173-.018.175-.02.175-.024.174-.024.175-.027.17-.03.174-.03.173-.033.17-.036.172-.037.17-.04.17-.042.172-.043.168-.045.166-.048.169-.05.167-.052.168-.053.164-.056.166-.058.166-.06.161-.061.164-.063.158-.066.165-.068.16-.07.16-.07.158-.075.159-.074.155-.078.158-.081.158-.06.15-.03.158-.001.161.029.159.058.15.085.137.108.12.13.096.144.07.156.044.16.013.16-.017.155-.046.143-.074.127-.1.107-.12.07-.115.083-.164.003-.005.002-.004.082-.166.002-.005.003-.004.08-.167.002-.005.002-.004.078-.168.002-.004.002-.005.076-.169.002-.004.002-.005.074-.17.002-.004.002-.005.072-.17.002-.005.002-.005.07-.17.002-.006.001-.005.068-.172.002-.004.002-.005.065-.173.002-.005.002-.005.063-.173.002-.005.002-.005.06-.174.003-.005.001-.005.06-.175.001-.005.002-.005.057-.176.001-.005.002-.005.055-.177.001-.005.002-.005.052-.177.002-.005.001-.005.051-.178.001-.005.002-.005.048-.179.002-.005v-.005l.047-.179.001-.005.002-.005.044-.18v-.005l.002-.005.042-.18.001-.006.001-.005.04-.18.001-.006.001-.005.038-.182v-.005l.002-.005.035-.182v-.006l.002-.005.033-.182v-.006l.002-.005.03-.183.001-.005.001-.005.029-.184v-.005l.001-.006.027-.184v-.005l.001-.005.024-.185v-.005l.001-.005.022-.185v-.006l.001-.005.02-.185v-.006l.001-.005.017-.186v-.005l.001-.005.015-.187v-.005l.001-.005.013-.187v-.01l.01-.187.001-.006v-.005l.009-.187v-.011l.006-.187v-.011l.004-.188v-.011l.001-.188v-.01l-.001-.188v-.011l-.004-.188v-.011l-.006-.187v-.011l-.007-.145-.022-.16-.05-.152-.08-.141-.103-.124-.125-.102-.141-.077-.153-.05-.16-.02-.161.009zM.777 15l-.158.032-.15.06-.136.087-.117.11-.095.131-.068.146-.04.156-.012.133-.001.14v.01l.001.188v.011l.004.188v.011l.006.187v.011l.008.187v.011l.011.187v.005l.001.005.013.187v.01l.016.187v.01l.018.186v.011l.02.185.001.005v.006l.022.185.001.005v.005l.025.185v.005l.001.005.027.184v.006l.001.005.029.184v.005l.001.005.031.183.001.005.001.006.033.182.001.005.001.006.035.182.001.005.001.005.038.182v.005l.002.005.04.181v.005l.002.005.042.18.001.006.001.005.044.18.002.005v.005l.047.18.001.004.002.005.048.179.002.005.001.005.05.178.002.005.001.005.053.177.002.005.001.005.055.177.002.005.001.005.057.176.002.005.001.005.06.175.001.005.002.005.061.174.002.005.002.005.063.173.002.005.002.005.065.173.002.005.002.004.067.172.002.005.002.005.07.171.002.005.002.005.072.17.002.005.002.005.074.169.002.005.002.004.076.169.002.005.002.004.078.168.002.004.002.005.08.167.003.004.002.005.082.166.002.004.003.005.02.04.086.136.11.118.13.095.146.07.156.041.16.012.16-.019.155-.048.142-.075.126-.1.105-.123.08-.14.054-.152.024-.16-.006-.16-.036-.158-.051-.123-.018-.034-.078-.158L3.1 22.1l-.074-.16-.071-.156-.07-.162-.068-.16-.067-.164-.062-.158-.062-.164-.059-.161-.058-.166-.056-.166-.053-.164-.052-.168-.05-.167-.048-.17-.045-.165-.043-.168-.043-.172-.039-.17-.037-.17-.036-.172-.033-.17-.03-.173-.03-.174-.027-.17-.025-.175-.022-.174-.021-.175-.018-.175-.017-.173-.014-.176-.012-.176-.01-.177-.007-.176-.006-.177-.003-.178L1.73 16v-.134l-.013-.16-.044-.156-.072-.144-.097-.129-.12-.108-.137-.085-.15-.057L.938 15 .777 15zM6.17 26.842l-.152.052-.14.08-.122.105-.101.126-.076.142-.048.154-.02.16.012.161.041.156.07.146.094.13.096.093.032.026.004.003.004.004.145.117.004.003.004.004.146.115.005.003.004.004.147.113.005.003.004.004.149.111.004.003.004.003.15.11.005.003.004.003.151.108.005.003.004.003.152.106.005.003.004.003.154.104.004.003.005.003.154.102.005.002.004.003.156.1.005.003.004.003.157.098.005.003.004.002.159.096.004.003.005.003.16.094.004.003.004.002.16.092.005.003.005.002.161.09.005.003.005.003.162.088.005.002.004.002.164.087.005.002.004.002.165.084.005.003.004.002.166.082.004.002.005.003.167.08.004.002.005.002.168.078.004.002.005.002.169.076.004.002.005.002.17.074.004.002.005.002.17.072.005.002.005.002.17.07.006.002.005.001.171.068.005.002.005.002.173.065.005.002.005.002.173.063.005.002.005.002.174.061.005.002.005.001.175.06.005.001.005.002.176.057.005.001.005.002.177.055.005.001.005.002.177.052.005.002.005.001.178.051.005.001.005.002.178.048.006.002h.005l.179.047.005.001.005.002.18.044h.005l.005.002.18.042.006.001.005.001.159.035.16.02.16-.01.157-.04.146-.069.13-.094.112-.117.087-.136.06-.149.033-.158.002-.161-.028-.159-.057-.15-.084-.138-.108-.12-.128-.098-.144-.072-.128-.039-.154-.033-.168-.04-.171-.041-.169-.044-.17-.045-.166-.048-.168-.05-.165-.051-.166-.054-.166-.056-.163-.057-.165-.06-.161-.062-.164-.064-.16-.065-.16-.068-.162-.07-.157-.07-.157-.074-.157-.075-.156-.077-.153-.079-.156-.082-.153-.082-.154-.086-.15-.086-.152-.09-.148-.09-.147-.092-.149-.095-.145-.095-.144-.098-.145-.1-.143-.102-.14-.103-.14-.104-.14-.108-.139-.11-.136-.11-.027-.022-.133-.091-.148-.065-.157-.036-.161-.006-.16.024zm19.214.073l-.156.039-.146.067-.11.076-.064.051-.139.11-.14.108-.14.104-.14.103-.143.101-.145.101-.144.098-.145.095-.149.095-.148.093-.147.089-.152.09-.15.086-.154.086-.153.082-.156.082-.153.079-.156.077-.157.075-.157.073-.158.071-.16.07-.16.068-.161.065-.164.064-.161.061-.165.06-.163.058-.166.056-.166.054-.166.051-.167.05-.167.048-.17.045-.168.044-.171.042-.168.039-.17.037-.11.023-.154.047-.143.075-.126.1-.106.122-.081.139-.054.152-.025.16.006.16.035.158.063.148.09.133.114.115.132.092.148.065.157.037.16.008.133-.017.115-.024h.005l.005-.002.181-.04h.005l.005-.002.18-.042.006-.001.005-.001.18-.044.005-.002h.005l.18-.047.004-.001.005-.002.179-.048.005-.002.005-.001.178-.05.005-.002.005-.002.177-.052.005-.002.005-.001.177-.055.005-.002.005-.001.176-.057.005-.002.005-.002.175-.059.005-.001.005-.002.174-.061.005-.002.005-.002.173-.063.005-.002.005-.002.173-.065.005-.002.004-.002.172-.068.005-.001.005-.002.171-.07.005-.002.005-.002.17-.072.005-.002.005-.002.169-.074.005-.002.004-.002.169-.076.004-.002.005-.002.168-.078.004-.002.005-.002.167-.08.004-.003.005-.002.166-.082.004-.002.005-.003.165-.084.004-.002.005-.002.163-.087.005-.002.005-.002.162-.088.005-.003.005-.003.161-.09.005-.002.004-.003.16-.092.005-.002.005-.003.16-.094.004-.003.004-.003.158-.096.005-.002.004-.003.158-.098.004-.003.005-.003.156-.1.004-.003.004-.002.155-.102.005-.003.004-.003.154-.104.004-.003.005-.003.152-.106.004-.003.005-.003.151-.108.004-.003.005-.003.15-.11.004-.003.004-.003.149-.111.004-.004.004-.003.148-.113.004-.004.004-.003.147-.115.004-.004.004-.003.068-.055.116-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.05-.153-.08-.14-.103-.125-.124-.102-.142-.077-.153-.05-.16-.02-.16.009z\"\n}));\n\nfunction _extends$H() { return _extends$H = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$H.apply(null, arguments); }\nvar IntermediateEventCatchParallelMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$H({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.157.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.408 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.215-2.282-2.022-5.3-3.217-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.082 11.082 0 0116 4.975zm-2.15 3.281v5.534H8.213v4.38h5.636v5.534h4.31V18.17h5.639v-4.38h-5.64V8.256h-4.31zm.865.865h2.583v5.534h5.635v2.65h-5.635v5.533h-2.583v-5.534h-5.64v-2.649h5.64V9.121z\"\n}));\n\nfunction _extends$G() { return _extends$G = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$G.apply(null, arguments); }\nvar IntermediateEventCatchSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$G({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm.006 3.521L9.206 20.745h13.598L16.005 8.542zm0 1.775l5.329 9.564H10.677l5.328-9.564z\"\n}));\n\nfunction _extends$F() { return _extends$F = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$F.apply(null, arguments); }\nvar IntermediateEventCatchTimerIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$F({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.97.04h-.127C8.713-.018 2.003 5.334.437 12.286c-1.51 6.123.98 13.005 6.136 16.665 5.125 3.788 12.546 4.105 17.912.623 5.272-3.276 8.33-9.766 7.325-15.916-.904-6.241-5.79-11.7-11.95-13.143A16.082 16.082 0 0015.97.04zm-.181 1.724c.115 0 .23 0 .347.003 6.625-.066 12.823 5.149 13.89 11.69 1.13 5.91-1.908 12.349-7.262 15.138-5.473 3.013-12.866 1.884-17.116-2.726C1.291 21.372.444 13.914 3.802 8.602c2.493-4.112 7.169-6.819 11.987-6.838zm.283 1.554c-.117 0-.234.002-.351.005-6.1 0-11.691 5.049-12.346 11.114-.78 5.684 2.795 11.612 8.218 13.52 5.139 1.943 11.416.101 14.624-4.38 3.461-4.583 3.262-11.538-.596-15.831-2.36-2.747-5.924-4.423-9.549-4.428zm-.078 1.695c.078 0 .156 0 .234.003 5.4 0 10.321 4.556 10.734 9.942.563 5.13-2.958 10.364-7.971 11.678-4.832 1.41-10.457-.935-12.746-5.446-2.463-4.559-1.2-10.795 3.014-13.883a11.072 11.072 0 016.735-2.294zm-.137 3.42c-2.965.02-5.792 1.968-6.884 4.722-1.137 2.693-.509 6.007 1.536 8.096 1.988 2.14 5.263 2.929 8.007 1.926 2.875-.98 4.987-3.824 5.063-6.865.154-2.954-1.622-5.875-4.295-7.13a7.545 7.545 0 00-3.427-.75zm.27 1.381c2.708.013 5.249 2.014 5.88 4.652.704 2.576-.481 5.512-2.788 6.862-2.356 1.478-5.677 1.084-7.611-.918-2.042-1.97-2.405-5.376-.839-7.738 1.11-1.762 3.146-2.877 5.229-2.857h.13zm1.831 1.764l-2.072 3.76c-.64.068-.792 1.039-.202 1.298.39.27.696-.18 1.051-.164h3.168v-.864h-3.18l1.992-3.612-.757-.418z\"\n}));\n\nfunction _extends$E() { return _extends$E = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$E.apply(null, arguments); }\nvar IntermediateEventNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$E({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.848.001C8.113-.093.931 6.281.125 13.983c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.207C29.105 4.938 23.55.48 17.367.06A16.448 16.448 0 0015.848 0v.001zm.293 1.727c7.113-.099 13.662 5.97 14.077 13.08.56 6.299-3.516 12.735-9.582 14.679-5.798 2.004-12.806-.12-16.283-5.237C.717 19.159.874 11.638 5.016 6.876 7.722 3.638 11.902 1.63 16.14 1.728zm-.415 1.555C9.157 3.258 3.256 9.156 3.278 15.729c-.16 5.965 4.365 11.725 10.293 12.737 5.409 1.065 11.37-1.744 13.775-6.753 2.534-4.986 1.386-11.627-2.953-15.251-2.364-2.077-5.512-3.27-8.667-3.18zm.507 1.692c5.82-.026 11.013 5.318 10.79 11.143-.024 5.3-4.313 10.267-9.636 10.803-5.075.667-10.426-2.588-11.885-7.553-1.535-4.744.494-10.46 4.925-12.885a11.072 11.072 0 015.806-1.508z\"\n}));\n\nfunction _extends$D() { return _extends$D = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$D.apply(null, arguments); }\nvar IntermediateEventThrowCompensationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$D({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm-.56 5.772l-7.408 5.231 7.409 5.234v-5.057c2.385 1.687 4.771 3.371 7.157 5.057V10.747l-7.157 5.055v-5.055z\"\n}));\n\nfunction _extends$C() { return _extends$C = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$C.apply(null, arguments); }\nvar IntermediateEventThrowEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$C({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm.006 3.927c-1.672 4.654-2.734 9.502-4.406 14.155 1.534-1.525 2.872-3.234 4.406-4.759l4.406 4.76c-1.496-4.71-2.91-9.446-4.406-14.156z\"\n}));\n\nfunction _extends$B() { return _extends$B = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$B.apply(null, arguments); }\nvar IntermediateEventThrowLinkIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$B({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm1.78 4.093v3.555H9.785v6.714h7.994v3.554l5.829-6.911-5.83-6.912z\"\n}));\n\nfunction _extends$A() { return _extends$A = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$A.apply(null, arguments); }\nvar IntermediateEventThrowMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$A({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm-5.91 5.475l6.04 4.901 6.042-4.9H10.088zm-1.341 1.138v9.921h14.514V11.79l-7.132 5.787-7.382-5.99z\"\n}));\n\nfunction _extends$z() { return _extends$z = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$z.apply(null, arguments); }\nvar IntermediateEventThrowMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$z({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm.006 3.073l-7.62 5.532 2.91 8.95h9.42l2.91-8.95-7.62-5.532z\"\n}));\n\nfunction _extends$y() { return _extends$y = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$y.apply(null, arguments); }\nvar IntermediateEventThrowSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$y({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm.006 3.52c-2.261 4.07-4.533 8.136-6.798 12.205h13.596L16.005 8.495z\"\n}));\n\nfunction _extends$x() { return _extends$x = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$x.apply(null, arguments); }\nvar LaneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$x({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M0 7v18.62h32V7H0zm1.655 17.056V8.684h28.62v15.372H1.656z\"\n}));\n\nfunction _extends$w() { return _extends$w = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$w.apply(null, arguments); }\nvar ManualTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$w({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zm4.43 1.328c-.222.005-.43.09-.606.203-.985.638-4.356 2.977-5.096 3.486-.67.46-1.12 1.153-1.38 1.974-.27.858-.235 1.793-.232 2.576.002.59.016 1.104.17 1.727.22.908.634 1.63 1.23 2.118.597.49 1.363.732 2.23.734 3.038.012 6.078.016 9.119 0 .327-.002.645-.127.848-.37.204-.241.287-.56.291-.914a1.732 1.732 0 00-.097-.625h.327c.335 0 .641-.11.852-.316.21-.206.317-.475.374-.754a1.783 1.783 0 00-.126-1.143 1.18 1.18 0 00.877-.521c.196-.306.257-.666.258-1.025.001-.375-.088-.738-.293-1.033a1.179 1.179 0 00-.958-.512h-.478c.108-.237.156-.505.155-.782-.003-.373-.098-.721-.316-.99a1.21 1.21 0 00-.943-.43c-2.273-.004-4.236.018-6.412.012l-.19-.001c.102-.104.202-.205.312-.314.337-.336.662-.652.83-.869.4-.516.46-1.215.123-1.729-.178-.272-.439-.456-.72-.494a.93.93 0 00-.148-.008zm.029.728l.022.001c.055.008.115.027.209.172.132.201.126.606-.09.884-.079.102-.431.465-.767.8-.337.334-.657.643-.815.836-.153.186-.096.338-.056.435.04.096.085.212.298.263.063.014.066.01.086.012l.066.003c2.429.027 4.986-.004 7.223-.003.194 0 .293.056.379.162.086.105.151.286.153.533 0 .257-.065.467-.155.59-.09.124-.183.182-.37.183-1.706-.001-3.411-.005-5.117-.009v.731c2.23.004 4.461.01 6.692.012.17 0 .265.06.361.2.096.138.164.364.163.615 0 .268-.058.501-.143.634-.085.132-.162.193-.385.195-2.32-.001-4.554-.006-6.688-.003v.73c1.905 0 3.809.003 5.713.001.194.005.316.09.416.26.102.173.151.442.093.728-.04.193-.102.313-.17.38-.067.065-.148.108-.343.108h-5.71l.002.734c1.445 0 2.89-.01 4.334-.001.162 0 .232.041.297.123.064.081.123.238.12.488-.003.244-.061.385-.12.455-.06.07-.127.11-.296.11-3.037.016-6.076.012-9.113 0-.735-.002-1.316-.196-1.77-.568-.454-.372-.793-.935-.986-1.728-.134-.546-.146-.978-.148-1.558-.003-.796-.018-1.664.199-2.354.222-.705.582-1.24 1.096-1.593.75-.515 4.14-2.866 5.079-3.474a.504.504 0 01.241-.087z\"\n}));\n\nfunction _extends$v() { return _extends$v = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$v.apply(null, arguments); }\nvar MessageFlowIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$v({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M4.073 26.607l1.295 1.296L1.325 32l-.662-.633L0 30.735l4.073-4.128zm6.953-7.046l1.296 1.296L1.325 32l7.555-7.656-1.295-1.296 1.455-1.474 1.986-2.013zM32 .06s-2.699 5.189-5.417 10.462l-.326.633c-1.14 2.214-2.265 4.407-3.176 6.2-1.228-1.222-2.449-2.452-3.676-3.675l-3.57 3.618-1.297-1.296 3.541-3.588c-.98-.964-1.932-1.958-2.923-2.91l-.753-.706c2.68-1.258 6.533-3.165 9.95-4.876l.617-.309C28.838 1.673 32 .06 32 .06zm-4.126 4.06l-.015.007-.115.057-.048.024-.115.057L17.7 9.172l5.017 4.948 5.157-10z\"\n}));\n\nfunction _extends$u() { return _extends$u = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$u.apply(null, arguments); }\nvar ParticipantIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$u({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M0 5v22.069h32V5H0zm30.276 1.684v18.82H6.62V6.684h23.655zm-28.62 0h3.31v18.82h-3.31V6.684z\"\n}));\n\nfunction _extends$t() { return _extends$t = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$t.apply(null, arguments); }\nvar ProcessIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$t({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M16.177 0l.137.002c.452.009.9.037 1.342.082.346.036.62.303.68.646l.437 2.536c.055.319.296.57.608.655.986.269 1.923.653 2.796 1.14.28.155.624.145.885-.039l2.083-1.47a.775.775 0 01.937.022c.86.699 1.645 1.484 2.343 2.343.22.27.223.653.023.937l-1.439 2.038a.833.833 0 00-.031.896c.512.889.92 1.846 1.204 2.855a.833.833 0 00.653.601l2.435.42c.342.059.61.333.645.679a15.928 15.928 0 01.08 2.064l-.003.114c-.012.382-.038.76-.077 1.134a.775.775 0 01-.645.68l-2.396.412a.835.835 0 00-.656.61 12.511 12.511 0 01-1.2 2.917.832.832 0 00.034.892l1.396 1.978c.2.284.196.667-.023.936a16.104 16.104 0 01-2.343 2.343.775.775 0 01-.937.023l-1.99-1.404a.833.833 0 00-.88-.026c-.907.516-1.886.922-2.916 1.2a.833.833 0 00-.61.656l-.414 2.396a.775.775 0 01-.679.646 16.096 16.096 0 01-3.312 0 .775.775 0 01-.679-.646l-.423-2.452a.834.834 0 00-.598-.636 12.474 12.474 0 01-1.468-.514 12.49 12.49 0 01-1.417-.68.833.833 0 00-.878.03l-2.026 1.43a.775.775 0 01-.937-.023 16.069 16.069 0 01-2.342-2.342.774.774 0 01-.024-.936l1.402-1.986a.833.833 0 00.032-.896 12.507 12.507 0 01-1.214-2.911.833.833 0 00-.655-.606l-2.386-.412a.775.775 0 01-.646-.678 16.097 16.097 0 010-3.314.775.775 0 01.646-.678l2.386-.412a.833.833 0 00.655-.606 12.507 12.507 0 011.214-2.911.833.833 0 00-.032-.896L3.552 6.853a.774.774 0 01.023-.936 16.091 16.091 0 012.343-2.343.775.775 0 01.937-.023l2.03 1.433c.26.177.6.182.874.028.915-.512 1.88-.9 2.87-1.167a.833.833 0 00.612-.656l.424-2.46a.775.775 0 01.679-.645C14.845.032 15.348.004 15.85 0h.326zM16 6.4c-5.302 0-9.6 4.297-9.6 9.599 0 5.302 4.298 9.6 9.6 9.6s9.6-4.298 9.6-9.6-4.298-9.6-9.6-9.6zm-3 4.283c0-1.425 1.637-2.203 2.715-1.29l5.69 4.815c.794.672.794 1.91 0 2.583l-5.69 4.815c-1.078.913-2.715.134-2.715-1.29z\"\n}));\n\nfunction _extends$s() { return _extends$s = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$s.apply(null, arguments); }\nvar ReceiveTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$s({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zM5.23 7.764v11.577h17.55V7.764H5.23zm1.816.758h13.917l-6.959 4.577-6.958-4.577zm-1.06.21l8.018 5.274 8.018-5.275v9.853H5.987V8.73z\"\n}));\n\nfunction _extends$r() { return _extends$r = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$r.apply(null, arguments); }\nvar ScriptTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$r({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zm2.99 3.077l-.077.045-.026.015c-1.09.646-1.84 1.239-2.336 1.818-.496.579-.735 1.162-.742 1.725-.014 1.119.812 1.958 1.544 2.708.732.75 1.385 1.456 1.446 2.041.032.298-.039.598-.364 1.008-.324.408-.911.897-1.85 1.445l-1.388.808h8.56l.101-.059c.996-.58 1.667-1.116 2.094-1.655.429-.54.603-1.107.547-1.638-.11-1.052-.967-1.818-1.688-2.556-.721-.739-1.306-1.436-1.298-2.092.004-.331.132-.7.535-1.171.402-.47 1.08-1.02 2.119-1.636l1.362-.806h-8.54zm.241.867h5.271a6.83 6.83 0 00-1.113 1.01c-.496.58-.736 1.163-.743 1.726-.014 1.119.812 1.958 1.544 2.708.732.75 1.385 1.456 1.446 2.041.032.298-.039.598-.364 1.008-.312.393-.872.862-1.753 1.386H8.728c.367-.286.658-.566.88-.847.43-.54.604-1.107.548-1.638-.11-1.052-.968-1.818-1.688-2.556-.721-.739-1.306-1.435-1.298-2.092.004-.331.132-.7.534-1.171.389-.454 1.04-.984 2.021-1.575zm-1.233 1.48v.4h4.12v-.4h-4.12zm-.154 2.158v.4H12.6v-.4H8.34zm1.931 2.158v.4h4.126v-.4H10.27zm.59 2.158v.4h4.276v-.4h-4.276z\"\n}));\n\nfunction _extends$q() { return _extends$q = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$q.apply(null, arguments); }\nvar SendTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$q({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zm-1.38 3.16l8.332 4.717L21.78 8.16H5.114zm.021 1.745v9.309H21.8V9.905l-8.353 4.655-8.31-4.655z\"\n}));\n\nfunction _extends$p() { return _extends$p = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$p.apply(null, arguments); }\nvar ServiceTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$p({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zm1.22 1.681V7.84c-.329.093-.63.223-.914.382l-.83-.82-1.554 1.561.83.82c-.16.288-.285.594-.372.911l-1.177.002v2.2l1.189-.004c.109.431.345.819.58 1.165v-1.898l-1.038.004v-.737l1.034-.002.058-.294c.084-.429.252-.838.493-1.203l.165-.25-.727-.718.523-.526.728.719.247-.165c.379-.25.793-.417 1.206-.505l.291-.06-.002-1.01h.75L9.19 8.417H11.16c-.185-.221-.951-.508-1.237-.588L9.93 6.68H7.713zm2.078 2.105l.003 1.158a4.19 4.19 0 00-.915.383l-.83-.821-1.553 1.562.83.82c-.16.288-.286.593-.373.91l-1.176.003v2.2l1.188-.004c.094.326.224.624.383.905l-.85.847 1.57 1.543.847-.843c.29.161.599.286.919.373v1.198c.756.006 1.56.003 2.206.003V17.81a4.19 4.19 0 00.915-.383l.847.835 1.554-1.56-.848-.836c.16-.288.286-.594.373-.912l1.152-.007V12.75l-1.165.007a4.09 4.09 0 00-.382-.905l.805-.807-1.57-1.546-.804.806a4.16 4.16 0 00-.915-.372l.007-1.147H9.792zm.732.73h.751l-.006 1.005.297.058c.43.085.844.252 1.21.492l.25.162.701-.704.528.52-.702.704.169.25c.248.374.412.779.505 1.196l.061.292 1.016-.006v.737l-1.01.006-.058.292c-.085.43-.252.838-.494 1.205l-.165.25.744.733-.523.525-.743-.734-.248.165c-.378.247-.789.418-1.203.503l-.294.058v1.067h-.745v-1.059l-.295-.057a3.395 3.395 0 01-1.21-.492l-.248-.162-.747.743-.528-.52.747-.744-.17-.25a3.546 3.546 0 01-.506-1.196l-.06-.291-1.04.004v-.738l1.034-.002.058-.294c.085-.428.252-.837.493-1.203l.165-.25-.726-.718.522-.526.728.72.248-.166a3.546 3.546 0 011.205-.504l.292-.06-.003-1.01zm.388 2.685a1.65 1.65 0 00-1.645 1.645c0 .904.74 1.645 1.645 1.645a1.65 1.65 0 001.645-1.645 1.65 1.65 0 00-1.645-1.645zm0 .73a.91.91 0 01.915.915.91.91 0 01-.915.914.91.91 0 01-.915-.914.91.91 0 01.915-.915z\"\n}));\n\nfunction _extends$o() { return _extends$o = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$o.apply(null, arguments); }\nvar StartEventCompensationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$o({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.001C9.705-.084 3.643 3.964 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994 0zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626C2.101 23.171.377 16.07 2.848 10.44c2.14-5.205 7.515-8.774 13.147-8.708zm-.566 9.03l-7.415 5.235 7.415 5.238v-5.062c2.386 1.689 4.775 3.375 7.163 5.062V10.761l-7.163 5.058v-5.058zm-.866 1.666v7.13L9.51 15.993l5.052-3.565zm7.166 0v7.137l-5.052-3.568 5.052-3.569z\"\n}));\n\nfunction _extends$n() { return _extends$n = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$n.apply(null, arguments); }\nvar StartEventConditionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$n({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 0C7.174 0 0 7.174 0 16s7.174 16 16 16 16-7.174 16-16S24.826 0 16 0zm0 1.73c7.892 0 14.27 6.378 14.27 14.27 0 7.891-6.379 14.27-14.27 14.27S1.73 23.891 1.73 16C1.73 8.108 8.108 1.73 16 1.73zm-5.362 7.523v13.493h10.724V9.253H10.638zm.863.866h8.995V21.88H11.501V10.12zm.928 1.324v.863h7.139v-.863h-7.139zm0 2.605v.867h7.139v-.867h-7.139zm0 3.01v.864h7.139v-.863h-7.139zm0 2.72v.863h7.139v-.863h-7.139z\"\n}));\n\nfunction _extends$m() { return _extends$m = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$m.apply(null, arguments); }\nvar StartEventErrorIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$m({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.005C9.705-.08 3.643 3.968 1.257 9.78-1.235 15.49.06 22.581 4.42 27.034c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994.005zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626-4.814-3.838-6.538-10.939-4.067-16.57 2.14-5.205 7.515-8.774 13.147-8.708zm6.13 7.45l-3.635 7.37-4.52-5.88c-1.37 4.048-2.738 8.095-4.106 12.143l4.603-5.917 4.748 5.433 2.91-13.149zm-7.754 3.889l4.299 5.449 1.073-2.39-1.028 4.135-4.387-5.16-1.78 2.75 1.823-4.784z\"\n}));\n\nfunction _extends$l() { return _extends$l = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$l.apply(null, arguments); }\nvar StartEventEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$l({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.001C9.705-.084 3.643 3.964 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994 0zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626C2.101 23.171.377 16.07 2.848 10.44c2.14-5.205 7.515-8.774 13.147-8.708zm0 7.183c-1.674 4.658-2.736 9.509-4.41 14.166 1.535-1.526 2.874-3.236 4.41-4.763l4.41 4.763c-1.499-4.713-2.913-9.453-4.41-14.166zm.032 2.931c.822 2.588 1.598 5.19 2.42 7.778l-2.42-2.615c-.683.598-2.455 2.887-2.34 2.39.871-2.489 1.448-5.07 2.34-7.553z\"\n}));\n\nfunction _extends$k() { return _extends$k = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$k.apply(null, arguments); }\nvar StartEventMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$k({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.001C9.705-.084 3.643 3.964 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994 0zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626C2.101 23.171.377 16.07 2.848 10.44c2.14-5.205 7.515-8.774 13.147-8.708zm-7.257 8.732v11.069h14.513v-11.07H8.738zm3.224 1.73h8.064c-1.428.878-2.857 2.807-4.285 3.018l-3.779-3.019zm9.562 1.017v6.593H10.465V13.21l5.528 4.417 5.53-4.418z\"\n}));\n\nfunction _extends$j() { return _extends$j = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$j.apply(null, arguments); }\nvar StartEventMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$j({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.001C9.705-.084 3.643 3.964 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994 0zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626C2.101 23.171.377 16.07 2.848 10.44c2.14-5.205 7.515-8.774 13.147-8.708zm0 6.328l-7.626 5.536c.97 2.986 1.942 5.971 2.913 8.957h9.426l2.912-8.957-7.625-5.536zm0 1.068l6.609 4.798-2.525 7.763H11.91l-2.524-7.763 6.609-4.798z\"\n}));\n\nfunction _extends$i() { return _extends$i = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$i.apply(null, arguments); }\nvar StartEventNonInterruptingConditionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$i({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M10.632 9.189V22.68h10.723V9.189H10.632zm.862.865h8.994v11.76H11.494v-11.76zm.928 1.324v.863h7.138v-.863h-7.138zm0 2.605v.866h7.138v-.866h-7.138zm0 3.01v.863h7.138v-.863h-7.138zm0 2.72v.862h7.138v-.863h-7.138zM16.12 0h-.232l-.22.004h-.012l-.221.006h-.012l-.22.01h-.012l-.22.013h-.012l-.22.016h-.012l-.22.019h-.005l-.006.001-.22.021h-.006l-.005.001-.22.025h-.011l-.22.028h-.005l-.006.002-.219.03h-.005l-.006.001-.218.033-.006.001-.006.001-.217.036-.006.001-.006.001-.217.039-.006.001-.006.001-.216.042-.006.001-.006.001-.215.045-.006.001-.006.002-.215.047-.006.002-.006.001-.214.05-.006.002-.006.002-.115.029-.152.053-.14.081-.122.106-.1.126-.075.143-.047.154-.018.16.012.16.042.156.07.145.095.13.118.11.137.086.15.059.158.03h.161l.132-.022.11-.028.202-.047.203-.046.208-.043.202-.039.206-.037.206-.034.205-.03.208-.03.205-.025.209-.023.208-.02.21-.017.209-.015.207-.011.21-.009.21-.006.207-.003h.21l.21.002.207.005.207.008.212.011.207.014.208.017.209.019.208.022.205.025.206.028.207.03.208.035.205.036.202.039.052.01.16.018.16-.012.156-.042.146-.07.13-.096.109-.119.085-.136.06-.15.03-.159v-.16l-.03-.16-.059-.15-.086-.136-.109-.118-.13-.096-.145-.07-.128-.038-.057-.011-.006-.002h-.006l-.216-.042-.006-.001-.006-.001-.217-.039H18.9l-.006-.002-.217-.035-.006-.001-.006-.001-.218-.032-.006-.001-.006-.001-.218-.03h-.006l-.006-.001-.219-.027h-.011l-.22-.024-.005-.001h-.006l-.22-.021h-.006l-.006-.001-.22-.017-.005-.001h-.006L17.06.03h-.012l-.22-.012h-.012l-.22-.01h-.012l-.22-.005h-.012L16.132 0h-.012zm8.715 2.783l-.157.034-.149.063-.134.089-.116.112-.092.132-.067.147-.038.157-.008.16.021.16.051.153.079.141.103.124.102.087.052.038h.001l.087.064v.001l.082.061.002.001.076.059h.001l.084.065.082.066.002.001.079.063.002.002.077.063.081.067.002.002.077.065.076.065.001.002.08.07.078.07h.002l.075.068.077.072.002.001.073.069.077.073.072.07.002.001.077.076.07.07v.001l.075.076.07.073.002.001.074.079.002.002.069.074.069.075.074.082.07.08.002.001.068.079h.001l.067.079.068.082.065.078.001.002.068.083.067.084.063.081.001.002.067.087.002.002.063.084.001.001.064.087.008.01.008.01.095.12.093.121.09.119.087.119.088.122.086.123.084.12.081.122.001.002.084.126.08.126.08.127.077.126.079.131.074.127.075.131.073.131.07.13.07.133.069.133.045.09.086.137.109.119.13.096.144.07.156.042.16.013.16-.017.155-.047.143-.075.126-.1.106-.121.082-.14.054-.151.025-.16-.005-.16-.035-.158-.05-.124-.048-.095-.002-.004-.002-.004-.073-.14-.002-.005-.002-.004-.074-.14-.002-.004-.002-.004-.076-.14-.002-.003-.002-.004-.077-.139-.003-.004-.002-.004-.078-.138-.003-.004-.002-.003-.08-.137-.002-.004-.003-.004-.081-.136-.002-.004-.003-.004-.083-.136-.002-.003-.002-.004-.085-.135-.002-.004-.003-.003-.085-.134-.003-.004-.002-.004-.087-.132-.003-.004-.003-.004-.088-.132-.003-.003-.002-.004-.09-.13-.003-.005-.003-.003-.091-.13-.003-.004-.002-.004-.093-.129-.003-.003-.003-.004-.094-.128-.003-.004-.003-.003-.095-.127-.003-.004-.003-.004-.097-.125-.003-.004-.003-.004-.09-.114-.06-.082-.003-.003-.002-.003-.069-.091-.002-.004-.002-.003-.07-.09-.003-.003-.002-.003-.07-.09-.003-.003-.002-.003-.071-.09-.002-.003-.003-.002-.072-.089-.002-.003-.002-.003-.073-.088-.002-.003-.002-.002-.074-.087-.002-.003-.002-.003-.074-.086-.003-.003-.002-.003-.074-.086-.003-.002-.002-.003-.075-.085-.003-.003-.002-.002-.076-.084-.002-.003-.003-.003-.076-.083-.002-.003-.003-.003-.077-.082-.002-.003-.003-.002-.077-.082-.003-.003-.003-.002-.078-.081-.002-.003-.003-.003-.078-.08-.003-.002-.003-.003-.079-.08-.002-.002-.003-.002-.08-.08-.002-.002-.003-.002-.08-.078-.003-.003-.003-.002-.08-.077-.003-.003-.003-.002-.082-.077-.002-.002-.003-.002-.082-.076-.003-.002-.002-.003-.083-.075-.003-.002-.002-.003-.084-.074-.002-.002-.003-.002-.084-.074-.003-.002-.002-.002-.085-.073-.002-.002-.003-.003-.085-.071-.003-.003-.002-.002-.086-.07-.003-.003-.002-.002-.086-.07-.003-.003-.003-.002-.086-.07-.003-.002-.003-.002-.087-.069-.002-.002-.003-.002-.088-.068-.002-.002-.003-.002-.088-.067-.003-.003-.003-.002-.088-.066-.003-.002-.003-.002-.089-.066-.003-.002-.003-.002-.057-.042-.14-.082-.15-.055-.16-.026-.16.004zM6.377 3.21l-.157.037-.148.066-.111.074-.007.006-.003.002-.003.002-.086.069-.003.002-.002.002-.086.07-.003.002-.002.002-.086.07-.002.003-.003.002-.085.071-.002.002-.003.003-.084.071-.003.003-.002.002-.084.072-.003.003-.002.002-.083.073-.003.003-.002.002-.083.074-.002.002-.003.003-.082.074-.003.003-.002.002-.081.076-.003.002-.003.002-.08.077-.003.002-.003.003-.08.076-.002.003-.003.002-.08.078-.002.002-.003.003-.079.078-.002.003-.003.002-.078.08-.003.002-.002.002-.078.08-.002.003-.003.002-.077.08-.003.004-.002.002-.077.081-.002.003-.003.003-.076.082-.002.002-.003.003-.075.082-.002.003-.003.003-.074.083-.003.003-.002.003-.074.084-.003.003-.002.002-.074.085-.002.003-.002.003-.073.085-.003.003-.002.003-.072.086-.002.003-.003.003-.071.087-.003.003-.002.002-.07.088-.003.003-.002.003-.07.088-.003.003-.002.003-.07.09-.002.002-.002.003-.069.09-.002.003-.003.003-.068.09-.002.003-.002.003-.067.092-.003.003-.002.003-.067.092-.002.003-.002.003-.066.092-.002.003-.002.004-.066.093-.002.003-.002.003-.065.094-.002.003-.002.004-.064.094-.002.003-.002.004-.063.095-.002.003-.002.003-.063.097-.002.003-.002.003-.046.073-.05.07-.003.002-.002.003-.067.093-.003.003-.002.003-.066.094-.002.003-.002.003-.066.094-.002.003-.002.003-.064.094-.002.004-.002.003-.064.094-.002.004-.002.003-.062.095-.002.003-.002.003-.062.096-.002.003-.002.003-.06.096-.003.003-.002.003-.06.096-.001.004-.002.003-.059.096-.002.004-.002.003-.058.097-.002.003-.001.003-.057.098-.002.003-.002.003-.056.098-.002.003-.002.003-.055.098-.002.004-.001.003-.055.098-.001.004-.002.003-.054.099-.001.003-.002.003-.052.1-.002.002-.002.004-.051.1-.002.002-.002.004-.05.1-.002.003-.002.003-.05.1v.003l-.002.004-.05.1v.003l-.002.004-.048.1-.002.004-.001.003-.047.101-.002.003-.001.004-.013.027-.052.152-.024.16.006.16.037.157.064.148.091.133.114.114.134.09.147.065.157.036.162.006.159-.024.152-.053.14-.08.122-.105.1-.126.066-.117.01-.023.044-.095.045-.095.002-.003.042-.087.048-.097.048-.095v-.001l.048-.092.001-.001.047-.09.05-.093.002-.002.049-.09.052-.092.001-.002.051-.089.001-.002.051-.087.053-.088.001-.002.055-.091.057-.091.057-.09.001-.002.057-.089.055-.083.001-.002.06-.09.06-.088.062-.089.001-.001.06-.084.063-.088.065-.089.017-.023.016-.025.06-.094.059-.09v-.002l.058-.086.057-.086.001-.001.062-.09.062-.088.001-.002.06-.085.002-.002.06-.082.063-.087.064-.084.002-.002.061-.08.065-.084.064-.08v-.001l.067-.083.067-.082.07-.083.069-.08.063-.074.074-.083.068-.077.002-.002.07-.076.07-.075.072-.077.001-.001.067-.07.076-.078.002-.002.07-.07.075-.075.002-.002.072-.07.075-.072.002-.002.073-.069.074-.068.001-.001.08-.073.076-.068.002-.002.072-.063v-.001l.078-.067.079-.068.002-.001.08-.068.002-.002.077-.063.082-.066.001-.001.075-.06.002-.002.006-.004.117-.111.094-.131.068-.146.04-.156.01-.161-.019-.16-.049-.154-.076-.141-.102-.125-.123-.105-.14-.079-.153-.052-.16-.023-.16.007zm24.596 11.088l-.156.04-.146.067-.131.094-.112.117-.087.135-.061.15-.033.157-.004.134.007.142.005.152.004.15.002.149v.153l.001.011v.015l.004.11.002.11v.002l.002.106v.321l-.003.102-.002.106-.004.107-.005.105-.006.106-.006.106-.008.106v.002l-.008.103v.002l-.01.1-.01.105-.01.105-.013.105-.012.099v.002l-.014.108-.014.1-.016.105-.016.103v.002l-.017.099-.018.104-.019.103v.002l-.019.097-.02.104-.022.103v.001l-.022.098-.023.103v.002l-.024.096-.025.103v.002l-.024.096-.027.102v.003l-.026.093v.001l-.029.103v.002l-.03.099-.028.097v.002l-.03.095-.03.096v.001l-.033.1-.031.095v.002l-.035.1v.003l-.034.094v.003l-.035.096v.001l-.034.09v.002l-.038.098-.036.093v.002l-.038.095-.079.194-.08.188-.085.189-.087.19-.09.184-.092.183-.095.184-.05.093-.064.148-.034.158-.005.16.026.16.054.151.082.14.106.12.127.1.143.075.154.046.16.017.161-.013.156-.042.144-.071.13-.096.109-.119.072-.112.053-.099.003-.005.003-.006.102-.195.003-.006.003-.006.098-.196.003-.006.003-.006.096-.197.002-.006.003-.006.093-.2.002-.006.003-.006.09-.2.002-.006.003-.007.086-.202.003-.006.002-.006.084-.203.002-.005.001-.005.04-.102.002-.003.001-.003.04-.103.001-.003.001-.003.04-.103v-.004l.001-.003.039-.103v-.003l.002-.003.037-.104.001-.003.001-.003.037-.104v-.004l.002-.003.035-.104.002-.003v-.004l.035-.104.002-.004v-.003l.034-.105.002-.003v-.003l.034-.105v-.004l.002-.003.032-.106.001-.003.001-.003.031-.106.001-.003.001-.004.031-.106.001-.003.001-.004.03-.106v-.003l.002-.004.028-.107.001-.003.001-.003.028-.107.001-.004.001-.003.027-.107.001-.004v-.003l.027-.108.001-.003v-.004l.026-.108.001-.003v-.004l.025-.108.001-.003v-.004l.025-.108v-.004l.001-.003.023-.109v-.003l.001-.004.022-.109v-.003l.002-.004.02-.109.001-.004v-.003l.02-.11.002-.003v-.004l.02-.11v-.007l.019-.11v-.003l.001-.004.017-.11v-.004l.001-.003.017-.11v-.008l.016-.11v-.004l.001-.004.015-.11v-.008l.015-.111v-.008l.013-.111v-.007l.013-.112v-.007l.011-.112v-.004l.001-.004.01-.112v-.007l.01-.112v-.008l.008-.112v-.008l.007-.113v-.007l.007-.113v-.008l.005-.113v-.007l.005-.114v-.007l.003-.114v-.007l.003-.114v-.129l.001-.114v-.13l-.003-.114v-.008l-.003-.115v-.007l-.003-.102v-.155l-.003-.158v-.01l-.004-.158v-.01l-.006-.158v-.01l-.007-.148-.023-.16-.051-.152-.08-.14-.103-.124-.125-.102-.142-.077-.153-.05-.16-.02-.161.01zm-30.213.66l-.157.034-.149.063-.134.09-.115.113-.092.132-.067.147-.037.156-.009.134.001.11V15.95l.006.22v.012l.01.22v.012l.012.22v.006l.001.006.015.22v.005l.001.006.018.22.001.006v.006l.022.219v.006l.001.006.024.219.001.006v.006l.028.218.001.006v.006l.031.218.001.006.001.006.033.218.001.006.001.005.037.218v.006l.002.005.04.217v.006l.001.006.043.216.001.006.001.006.046.216v.005l.002.006.048.215.002.006.001.006.051.214.002.006v.006l.055.214.002.005.001.006.057.213.002.006.001.005.06.213.002.005.001.006.063.212.002.005.001.006.066.21.002.006.002.006.068.21.002.005.002.005.07.21.003.005.002.005.074.208.002.006.002.005.077.207.002.006.002.005.08.206.002.005.002.006.082.204.002.006.002.005.086.204.002.005.002.006.088.202.002.005.003.006.09.2.003.006.002.005.094.2.002.006.003.005.096.199.002.005.003.005.03.062.086.137.11.118.128.097.145.07.156.043.16.013.16-.017.155-.047.143-.074.127-.1.106-.121.081-.14.055-.15.025-.16-.005-.161-.034-.158-.05-.124-.028-.055-.092-.19-.087-.188-.087-.192-.083-.19-.08-.193-.078-.194-.076-.196-.073-.195-.07-.197-.067-.198-.065-.199-.063-.2-.059-.2-.056-.2-.055-.204-.05-.201-.049-.202-.046-.205-.043-.206-.04-.203-.038-.207-.034-.204-.032-.207-.028-.205-.026-.207-.023-.208-.02-.207-.018-.207-.014-.208-.011-.207-.009-.208-.005-.207-.002-.104-.017-.16-.046-.155-.074-.143-.1-.126-.121-.107-.139-.081-.152-.055-.159-.025-.161.004zm24.585 11.83l-.156.039-.146.068-.11.076-.015.012-.163.129-.166.127-.168.125-.17.124-.17.12-.172.118-.173.115-.176.114-.177.111-.18.11-.178.105-.182.104-.182.101-.184.1-.184.095-.189.095-.186.09-.188.089-.19.086-.19.082-.193.081-.195.078-.191.074-.197.073-.195.07-.196.065-.198.064-.198.061-.2.058-.2.055-.2.052-.2.049-.151.035-.153.05-.141.078-.125.103-.103.124-.078.14-.05.154-.022.16.009.16.038.157.067.147.093.132.116.112.134.089.149.062.158.034.16.003.133-.02.158-.035.006-.002.006-.001.213-.052.006-.002.007-.001.212-.056.006-.001.006-.002.212-.058.006-.002.006-.002.211-.061.006-.002.006-.002.21-.064.006-.002.006-.002.21-.067.005-.002.006-.002.208-.07.006-.002.006-.003.207-.073.006-.002.006-.002.206-.077.006-.002.005-.002.206-.08.005-.001.006-.003.204-.082.006-.002.005-.002.203-.085.006-.003.005-.002.202-.088.006-.002.005-.003.2-.09.006-.003.006-.003.2-.093.005-.003.005-.002.198-.096.006-.003.005-.003.197-.099.005-.002.005-.003.196-.102.005-.002.005-.003.195-.105.005-.002.005-.003.193-.107.005-.003.005-.003.191-.11.005-.003.005-.003.19-.112.005-.003.005-.003.189-.115.005-.003.005-.003.187-.117.005-.003.004-.004.186-.12.005-.003.004-.003.184-.122.005-.003.005-.004.182-.125.004-.003.005-.003.18-.128.005-.003.005-.003.179-.13.004-.003.005-.004.177-.132.004-.004.005-.003.175-.135.005-.003.004-.004.173-.137.005-.003.004-.004.019-.015.115-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.052-.153-.079-.14-.103-.124-.125-.102-.142-.078-.153-.05-.16-.02-.16.01zm-19.17.054l-.153.051-.14.079-.124.103-.103.125-.077.141-.05.153-.02.16.009.161.04.156.067.147.093.131.095.094.047.04.005.004.005.004.17.14.005.004.005.004.172.137.004.004.005.003.086.067.003.002.003.002.087.067.003.002.003.002.088.066.002.003.003.002.089.065.002.002.003.002.09.065.002.002.003.002.09.064.002.002.003.002.09.063.003.002.003.002.09.063.003.002.003.002.092.062.002.002.003.002.092.061.003.002.003.002.092.06.003.003.003.001.093.06.003.002.003.002.093.06.003.001.003.002.094.058.003.002.003.002.095.058.003.001.003.002.095.057.003.002.003.002.095.056.003.002.003.002.096.055.004.002.003.001.096.055.003.002.003.002.098.053.003.002.003.002.097.053.004.002.003.001.098.053.003.001.003.002.099.052.003.001.003.002.1.05.003.002.003.002.1.05.003.002.003.001.1.05h.003l.004.003.1.048.004.001.003.002.101.048.003.001.004.002.101.046.004.002.003.001.102.046.004.002.003.001.103.045.003.002.003.001.103.045.004.001.003.002.104.043.003.001.004.002.104.042.003.002.004.001.104.042.004.001.003.002.105.04.004.002.003.001.106.04.003.002h.004l.106.04.004.001.003.002.107.038.003.001.004.001.107.038.003.001.004.001.107.037.004.001.004.001.108.036.003.001.004.001.108.035.004.001.003.001.11.034.003.001.004.001.109.033.004.002h.003l.11.033h.004l.003.002.11.031.004.001.004.001.084.023.081.028.004.001.003.001.109.037.003.001.004.001.109.036.003.001.004.001.109.035h.003l.004.002.11.033.003.001.003.001.11.033.003.001.004.001.109.031.004.002h.003l.11.031.003.001.004.001.11.03h.003l.003.001.11.029h.004l.003.002.11.027.003.001.004.001.11.027h.003l.004.001.004.001.16.022.16-.008.157-.038.147-.067.132-.092.112-.116.09-.134.062-.149.034-.157.004-.161-.025-.16-.055-.151-.082-.139-.107-.12-.127-.1-.143-.074-.124-.04h-.003l-.104-.025-.103-.026h-.002l-.095-.026h-.001l-.101-.027h-.002l-.1-.028h-.002l-.103-.03-.104-.032-.097-.03h-.002l-.103-.033-.102-.033-.101-.034-.106-.036-.027-.01-.027-.007-.107-.03-.104-.029-.104-.03h-.002l-.097-.03-.102-.032-.102-.032-.102-.034-.103-.035-.096-.034-.1-.036-.101-.037h-.002l-.094-.036-.096-.037-.097-.04h-.002l-.099-.04-.098-.042h-.002l-.092-.04-.097-.043-.095-.043-.097-.044h-.002l-.09-.043-.094-.045-.094-.046-.093-.047-.09-.046-.096-.05-.088-.047-.002-.001-.09-.049-.094-.052-.002-.002-.087-.049-.087-.05h-.002l-.088-.053h-.001l-.09-.055-.086-.052-.002-.001-.089-.055-.084-.054h-.002l-.09-.059h-.001l-.085-.056-.001-.001-.084-.056-.082-.056h-.001l-.086-.06-.082-.058H7.79l-.086-.062-.002-.002-.08-.058-.081-.06h-.001l-.085-.064-.002-.002-.076-.058-.002-.002-.082-.064-.161-.128-.162-.133-.04-.034-.132-.092-.147-.066-.157-.038-.16-.008-.16.022z\"\n}));\n\nfunction _extends$h() { return _extends$h = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$h.apply(null, arguments); }\nvar StartEventNonInterruptingEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$h({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 9.209c-1.674 4.655-2.735 9.504-4.408 14.16 1.534-1.526 2.873-3.235 4.407-4.761l4.408 4.76c-1.497-4.71-2.91-9.448-4.408-14.16zm.031 2.93c.822 2.586 1.598 5.187 2.42 7.774l-2.42-2.614c-.682.598-2.453 2.886-2.34 2.389.873-2.488 1.45-5.068 2.34-7.55zM16.132.364c-1.51.016-3.055.139-4.492.614-.854.442-.266 1.861.651 1.578 2.266-.58 4.656-.596 6.944-.144.935.063 1.21-1.391.318-1.674-1.118-.26-2.274-.361-3.42-.374zm8.865 2.777c-.931-.1-1.262 1.29-.425 1.666 1.863 1.364 3.222 3.298 4.322 5.296.617.737 1.875-.145 1.398-.979-1.184-2.275-2.808-4.384-4.923-5.866a.863.863 0 00-.372-.117zM6.55 3.564c-.734.078-1.196.762-1.735 1.206C3.552 6.02 2.55 7.511 1.681 9.053c-.31.533-.71 1.33-.03 1.767.615.432 1.282-.132 1.446-.742.796-1.475 1.746-2.89 2.934-4.08.43-.548 1.292-.822 1.34-1.595a.874.874 0 00-.822-.839zm24.582 11.078c-.771-.033-1.004.82-.873 1.437.13 2.395-.471 4.797-1.615 6.897-.33.876.984 1.559 1.512.785a14.276 14.276 0 001.761-8.54.865.865 0 00-.785-.579zm-30.195.666c-.774-.06-1.032.785-.905 1.407.117 2.41.732 4.81 1.858 6.945.528.774 1.84.09 1.51-.786A15.932 15.932 0 011.728 16a.876.876 0 00-.79-.692zm24.57 11.817c-.762.099-1.243.835-1.919 1.16-1.514 1.002-3.237 1.632-4.978 2.092-.864.423-.307 1.855.616 1.591 2.528-.578 4.93-1.75 6.913-3.421.469-.522.07-1.42-.631-1.422zm-19.16.042c-.845.001-1.12 1.228-.395 1.628 1.665 1.401 3.667 2.348 5.76 2.912.618.178 1.482.565 1.893-.177.355-.628-.226-1.297-.87-1.326-1.972-.515-3.912-1.285-5.5-2.594-.26-.213-.522-.472-.888-.443z\"\n}));\n\nfunction _extends$g() { return _extends$g = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$g.apply(null, arguments); }\nvar StartEventNonInterruptingMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$g({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M8.746 10.393v11.064h14.506V10.393H8.746zm3.223 1.728h8.06c-1.428.879-2.856 2.807-4.283 3.018l-3.777-3.018zm9.557 1.018v6.59H10.473v-6.59l5.525 4.416 5.528-4.416zM16.132 0c-1.51.016-3.055.139-4.492.614-.854.442-.266 1.861.651 1.578 2.266-.58 4.656-.596 6.944-.144.935.063 1.21-1.391.318-1.674-1.118-.26-2.274-.361-3.42-.374zm8.865 2.777c-.931-.1-1.262 1.29-.425 1.666 1.863 1.364 3.222 3.298 4.322 5.296.617.737 1.875-.145 1.398-.979-1.184-2.275-2.808-4.384-4.923-5.866a.863.863 0 00-.372-.117zM6.55 3.2c-.734.078-1.196.762-1.735 1.206C3.552 5.656 2.55 7.147 1.681 8.69c-.31.533-.71 1.33-.03 1.767.615.432 1.282-.132 1.446-.742.796-1.475 1.746-2.89 2.934-4.08.43-.548 1.292-.822 1.34-1.595a.874.874 0 00-.822-.839zm24.582 11.078c-.771-.033-1.004.82-.873 1.437.13 2.395-.471 4.797-1.615 6.897-.33.876.984 1.559 1.512.785a14.276 14.276 0 001.761-8.54.865.865 0 00-.785-.579zm-30.195.666c-.774-.06-1.032.785-.905 1.407.117 2.41.732 4.81 1.858 6.945.528.774 1.84.09 1.51-.786a15.932 15.932 0 01-1.672-6.874.876.876 0 00-.79-.692zm24.57 11.817c-.762.099-1.243.835-1.919 1.16-1.514 1.002-3.237 1.632-4.978 2.092-.864.423-.307 1.855.616 1.591 2.528-.578 4.93-1.75 6.913-3.421.469-.522.07-1.42-.631-1.422zm-19.16.042c-.845.001-1.12 1.228-.395 1.628 1.665 1.401 3.667 2.348 5.76 2.912.618.178 1.482.565 1.893-.177.355-.628-.226-1.297-.87-1.326-1.972-.515-3.912-1.285-5.5-2.594-.26-.213-.522-.472-.888-.443z\"\n}));\n\nfunction _extends$f() { return _extends$f = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$f.apply(null, arguments); }\nvar StartEventNonInterruptingMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$f({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M23.621 13.524L16 7.99l-7.622 5.534 2.911 8.952h9.422l2.911-8.952zm-1.016.33l-2.523 7.759h-8.165l-2.524-7.76L16 9.059l6.606 4.796zM16.132 0c-1.51.016-3.055.139-4.492.614-.854.442-.266 1.861.651 1.578 2.266-.58 4.656-.596 6.944-.144.935.063 1.21-1.391.318-1.674-1.118-.26-2.274-.361-3.42-.374zm8.865 2.777c-.931-.1-1.262 1.29-.425 1.666 1.863 1.364 3.222 3.298 4.322 5.296.617.737 1.875-.145 1.398-.979-1.184-2.275-2.808-4.384-4.923-5.866a.863.863 0 00-.372-.117zM6.55 3.2c-.734.078-1.196.762-1.735 1.206C3.552 5.656 2.55 7.147 1.681 8.69c-.31.533-.71 1.33-.03 1.767.615.432 1.282-.132 1.446-.742.796-1.475 1.746-2.89 2.934-4.08.43-.548 1.292-.822 1.34-1.595a.874.874 0 00-.822-.839zm24.582 11.078c-.771-.033-1.004.82-.873 1.437.13 2.395-.471 4.797-1.615 6.897-.33.876.984 1.559 1.512.785a14.276 14.276 0 001.761-8.54.865.865 0 00-.785-.579zm-30.195.666c-.774-.06-1.032.785-.905 1.407.117 2.41.732 4.81 1.858 6.945.528.774 1.84.09 1.51-.786a15.932 15.932 0 01-1.672-6.874.876.876 0 00-.79-.692zm24.57 11.817c-.762.099-1.243.835-1.919 1.16-1.514 1.002-3.237 1.632-4.978 2.092-.864.423-.307 1.855.616 1.591 2.528-.578 4.93-1.75 6.913-3.421.469-.522.07-1.42-.631-1.422zm-19.16.042c-.845.001-1.12 1.228-.395 1.628 1.665 1.401 3.667 2.348 5.76 2.912.618.178 1.482.565 1.893-.177.355-.628-.226-1.297-.87-1.326-1.972-.515-3.912-1.285-5.5-2.594-.26-.213-.522-.472-.888-.443z\"\n}));\n\nfunction _extends$e() { return _extends$e = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$e.apply(null, arguments); }\nvar StartEventNonInterruptingParallelMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$e({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M13.503 9.016v4.428H9.075v4.98h4.428v4.428h4.98v-4.427h4.428v-4.981h-4.427V9.016h-4.981zm.83.83h3.32v4.428h4.428v3.32h-4.428v4.428h-3.32v-4.454H9.905v-3.294h4.428V9.846zM16.12 0h-.232l-.22.004h-.012l-.221.006h-.012l-.22.01h-.012l-.22.013h-.012l-.22.016h-.012l-.22.019h-.005l-.006.001-.22.021h-.006l-.005.001-.22.025h-.011l-.22.028h-.005l-.006.002-.219.03h-.005l-.006.001-.218.033-.006.001-.006.001-.217.036-.006.001-.006.001-.217.039-.006.001-.006.001-.216.042-.006.001-.006.001-.215.045-.006.001-.006.002-.215.047-.006.002-.006.001-.214.05-.006.002-.006.002-.115.029-.152.053-.14.081-.122.106-.1.126-.075.143-.047.154-.018.16.012.16.042.156.07.145.095.13.118.11.137.086.15.059.158.03h.161l.132-.022.11-.028.202-.047.203-.046.208-.043.202-.039.206-.037.206-.034.205-.03.208-.03.205-.025.209-.023.208-.02.21-.017.209-.015.207-.011.21-.009.21-.006.207-.003h.21l.21.002.207.005.207.008.212.011.207.014.208.017.209.019.208.022.205.025.206.028.207.03.208.035.205.036.202.039.052.01.16.018.16-.012.156-.042.146-.07.13-.096.109-.119.085-.136.06-.15.03-.159v-.16l-.03-.16-.059-.15-.086-.136-.109-.118-.13-.096-.145-.07-.128-.038-.057-.011-.006-.002h-.006l-.216-.042-.006-.001-.006-.001-.217-.039H18.9l-.006-.002-.217-.035-.006-.001-.006-.001-.218-.032-.006-.001-.006-.001-.218-.03h-.006l-.006-.001-.219-.027h-.011l-.22-.024-.005-.001h-.006l-.22-.021h-.006l-.006-.001-.22-.017-.005-.001h-.006L17.06.03h-.012l-.22-.012h-.012l-.22-.01h-.012l-.22-.005h-.012L16.132 0h-.012zm8.715 2.783l-.157.034-.149.063-.134.089-.116.112-.092.132-.067.147-.038.157-.008.16.021.16.051.153.079.141.103.124.102.087.052.038h.001l.087.064v.001l.082.061.002.001.076.059h.001l.084.065.082.066.002.001.079.063.002.002.077.063.081.067.002.002.077.065.076.065.001.002.08.07.078.07h.002l.075.068.077.072.002.001.073.069.077.073.072.07.002.001.077.076.07.07v.001l.075.076.07.073.002.001.074.079.002.002.069.074.069.075.074.082.07.08.002.001.068.079h.001l.067.079.068.082.065.078.001.002.068.083.067.084.063.081.001.002.067.087.002.002.063.084.001.001.064.087.008.01.008.01.095.12.093.121.09.119.087.119.088.122.086.123.084.12.081.122.001.002.084.126.08.126.08.127.077.126.079.131.074.127.075.131.073.131.07.13.07.133.069.133.045.09.086.137.109.119.13.096.144.07.156.042.16.013.16-.017.155-.047.143-.075.126-.1.106-.121.082-.14.054-.151.025-.16-.005-.16-.035-.158-.05-.124-.048-.095-.002-.004-.002-.004-.073-.14-.002-.005-.002-.004-.074-.14-.002-.004-.002-.004-.076-.14-.002-.003-.002-.004-.077-.139-.003-.004-.002-.004-.078-.138-.003-.004-.002-.003-.08-.137-.002-.004-.003-.004-.081-.136-.002-.004-.003-.004-.083-.136-.002-.003-.002-.004-.085-.135-.002-.004-.003-.003-.085-.134-.003-.004-.002-.004-.087-.132-.003-.004-.003-.004-.088-.132-.003-.003-.002-.004-.09-.13-.003-.005-.003-.003-.091-.13-.003-.004-.002-.004-.093-.129-.003-.003-.003-.004-.094-.128-.003-.004-.003-.003-.095-.127-.003-.004-.003-.004-.097-.125-.003-.004-.003-.004-.09-.114-.06-.082-.003-.003-.002-.003-.069-.091-.002-.004-.002-.003-.07-.09-.003-.003-.002-.003-.07-.09-.003-.003-.002-.003-.071-.09-.002-.003-.003-.002-.072-.089-.002-.003-.002-.003-.073-.088-.002-.003-.002-.002-.074-.087-.002-.003-.002-.003-.074-.086-.003-.003-.002-.003-.074-.086-.003-.002-.002-.003-.075-.085-.003-.003-.002-.002-.076-.084-.002-.003-.003-.003-.076-.083-.002-.003-.003-.003-.077-.082-.002-.003-.003-.002-.077-.082-.003-.003-.003-.002-.078-.081-.002-.003-.003-.003-.078-.08-.003-.002-.003-.003-.079-.08-.002-.002-.003-.002-.08-.08-.002-.002-.003-.002-.08-.078-.003-.003-.003-.002-.08-.077-.003-.003-.003-.002-.082-.077-.002-.002-.003-.002-.082-.076-.003-.002-.002-.003-.083-.075-.003-.002-.002-.003-.084-.074-.002-.002-.003-.002-.084-.074-.003-.002-.002-.002-.085-.073-.002-.002-.003-.003-.085-.071-.003-.003-.002-.002-.086-.07-.003-.003-.002-.002-.086-.07-.003-.003-.003-.002-.086-.07-.003-.002-.003-.002-.087-.069-.002-.002-.003-.002-.088-.068-.002-.002-.003-.002-.088-.067-.003-.003-.003-.002-.088-.066-.003-.002-.003-.002-.089-.066-.003-.002-.003-.002-.057-.042-.14-.082-.15-.055-.16-.026-.16.004zM6.377 3.21l-.157.037-.148.066-.111.074-.007.006-.003.002-.003.002-.086.069-.003.002-.002.002-.086.07-.003.002-.002.002-.086.07-.002.003-.003.002-.085.071-.002.002-.003.003-.084.071-.003.003-.002.002-.084.072-.003.003-.002.002-.083.073-.003.003-.002.002-.083.074-.002.002-.003.003-.082.074-.003.003-.002.002-.081.076-.003.002-.003.002-.08.077-.003.002-.003.003-.08.076-.002.003-.003.002-.08.078-.002.002-.003.003-.079.078-.002.003-.003.002-.078.08-.003.002-.002.002-.078.08-.002.003-.003.002-.077.08-.003.004-.002.002-.077.081-.002.003-.003.003-.076.082-.002.002-.003.003-.075.082-.002.003-.003.003-.074.083-.003.003-.002.003-.074.084-.003.003-.002.002-.074.085-.002.003-.002.003-.073.085-.003.003-.002.003-.072.086-.002.003-.003.003-.071.087-.003.003-.002.002-.07.088-.003.003-.002.003-.07.088-.003.003-.002.003-.07.09-.002.002-.002.003-.069.09-.002.003-.003.003-.068.09-.002.003-.002.003-.067.092-.003.003-.002.003-.067.092-.002.003-.002.003-.066.092-.002.003-.002.004-.066.093-.002.003-.002.003-.065.094-.002.003-.002.004-.064.094-.002.003-.002.004-.063.095-.002.003-.002.003-.063.097-.002.003-.002.003-.046.073-.05.07-.003.002-.002.003-.067.093-.003.003-.002.003-.066.094-.002.003-.002.003-.066.094-.002.003-.002.003-.064.094-.002.004-.002.003-.064.094-.002.004-.002.003-.062.095-.002.003-.002.003-.062.096-.002.003-.002.003-.06.096-.003.003-.002.003-.06.096-.001.004-.002.003-.059.096-.002.004-.002.003-.058.097-.002.003-.001.003-.057.098-.002.003-.002.003-.056.098-.002.003-.002.003-.055.098-.002.004-.001.003-.055.098-.001.004-.002.003-.054.099-.001.003-.002.003-.052.1-.002.002-.002.004-.051.1-.002.002-.002.004-.05.1-.002.003-.002.003-.05.1v.003l-.002.004-.05.1v.003l-.002.004-.048.1-.002.004-.001.003-.047.101-.002.003-.001.004-.013.027-.052.152-.024.16.006.16.037.157.064.148.091.133.114.114.134.09.147.065.157.036.162.006.159-.024.152-.053.14-.08.122-.105.1-.126.066-.117.01-.023.044-.095.045-.095.002-.003.042-.087.048-.097.048-.095v-.001l.048-.092.001-.001.047-.09.05-.093.002-.002.049-.09.052-.092.001-.002.051-.089.001-.002.051-.087.053-.088.001-.002.055-.091.057-.091.057-.09.001-.002.057-.089.055-.083.001-.002.06-.09.06-.088.062-.089.001-.001.06-.084.063-.088.065-.089.017-.023.016-.025.06-.094.059-.09v-.002l.058-.086.057-.086.001-.001.062-.09.062-.088.001-.002.06-.085.002-.002.06-.082.063-.087.064-.084.002-.002.061-.08.065-.084.064-.08v-.001l.067-.083.067-.082.07-.083.069-.08.063-.074.074-.083.068-.077.002-.002.07-.076.07-.075.072-.077.001-.001.067-.07.076-.078.002-.002.07-.07.075-.075.002-.002.072-.07.075-.072.002-.002.073-.069.074-.068.001-.001.08-.073.076-.068.002-.002.072-.063v-.001l.078-.067.079-.068.002-.001.08-.068.002-.002.077-.063.082-.066.001-.001.075-.06.002-.002.006-.004.117-.111.094-.131.068-.146.04-.156.01-.161-.019-.16-.049-.154-.076-.141-.102-.125-.123-.105-.14-.079-.153-.052-.16-.023-.16.007zm24.596 11.088l-.156.04-.146.067-.131.094-.112.117-.087.135-.061.15-.033.157-.004.134.007.142.005.152.004.15.002.149v.153l.001.011v.015l.004.11.002.11v.002l.002.106v.321l-.003.102-.002.106-.004.107-.005.105-.006.106-.006.106-.008.106v.002l-.008.103v.002l-.01.1-.01.105-.01.105-.013.105-.012.099v.002l-.014.108-.014.1-.016.105-.016.103v.002l-.017.099-.018.104-.019.103v.002l-.019.097-.02.104-.022.103v.001l-.022.098-.023.103v.002l-.024.096-.025.103v.002l-.024.096-.027.102v.003l-.026.093v.001l-.029.103v.002l-.03.099-.028.097v.002l-.03.095-.03.096v.001l-.033.1-.031.095v.002l-.035.1v.003l-.034.094v.003l-.035.096v.001l-.034.09v.002l-.038.098-.036.093v.002l-.038.095-.079.194-.08.188-.085.189-.087.19-.09.184-.092.183-.095.184-.05.093-.064.148-.034.158-.005.16.026.16.054.151.082.14.106.12.127.1.143.075.154.046.16.017.161-.013.156-.042.144-.071.13-.096.109-.119.072-.112.053-.099.003-.005.003-.006.102-.195.003-.006.003-.006.098-.196.003-.006.003-.006.096-.197.002-.006.003-.006.093-.2.002-.006.003-.006.09-.2.002-.006.003-.007.086-.202.003-.006.002-.006.084-.203.002-.005.001-.005.04-.102.002-.003.001-.003.04-.103.001-.003.001-.003.04-.103v-.004l.001-.003.039-.103v-.003l.002-.003.037-.104.001-.003.001-.003.037-.104v-.004l.002-.003.035-.104.002-.003v-.004l.035-.104.002-.004v-.003l.034-.105.002-.003v-.003l.034-.105v-.004l.002-.003.032-.106.001-.003.001-.003.031-.106.001-.003.001-.004.031-.106.001-.003.001-.004.03-.106v-.003l.002-.004.028-.107.001-.003.001-.003.028-.107.001-.004.001-.003.027-.107.001-.004v-.003l.027-.108.001-.003v-.004l.026-.108.001-.003v-.004l.025-.108.001-.003v-.004l.025-.108v-.004l.001-.003.023-.109v-.003l.001-.004.022-.109v-.003l.002-.004.02-.109.001-.004v-.003l.02-.11.002-.003v-.004l.02-.11v-.007l.019-.11v-.003l.001-.004.017-.11v-.004l.001-.003.017-.11v-.008l.016-.11v-.004l.001-.004.015-.11v-.008l.015-.111v-.008l.013-.111v-.007l.013-.112v-.007l.011-.112v-.004l.001-.004.01-.112v-.007l.01-.112v-.008l.008-.112v-.008l.007-.113v-.007l.007-.113v-.008l.005-.113v-.007l.005-.114v-.007l.003-.114v-.007l.003-.114v-.129l.001-.114v-.13l-.003-.114v-.008l-.003-.115v-.007l-.003-.102v-.155l-.003-.158v-.01l-.004-.158v-.01l-.006-.158v-.01l-.007-.148-.023-.16-.051-.152-.08-.14-.103-.124-.125-.102-.142-.077-.153-.05-.16-.02-.161.01zm-30.213.66l-.157.034-.149.063-.134.09-.115.113-.092.132-.067.147-.037.156-.009.134.001.11V15.95l.006.22v.012l.01.22v.012l.012.22v.006l.001.006.015.22v.005l.001.006.018.22.001.006v.006l.022.219v.006l.001.006.024.219.001.006v.006l.028.218.001.006v.006l.031.218.001.006.001.006.033.218.001.006.001.005.037.218v.006l.002.005.04.217v.006l.001.006.043.216.001.006.001.006.046.216v.005l.002.006.048.215.002.006.001.006.051.214.002.006v.006l.055.214.002.005.001.006.057.213.002.006.001.005.06.213.002.005.001.006.063.212.002.005.001.006.066.21.002.006.002.006.068.21.002.005.002.005.07.21.003.005.002.005.074.208.002.006.002.005.077.207.002.006.002.005.08.206.002.005.002.006.082.204.002.006.002.005.086.204.002.005.002.006.088.202.002.005.003.006.09.2.003.006.002.005.094.2.002.006.003.005.096.199.002.005.003.005.03.062.086.137.11.118.128.097.145.07.156.043.16.013.16-.017.155-.047.143-.074.127-.1.106-.121.081-.14.055-.15.025-.16-.005-.161-.034-.158-.05-.124-.028-.055-.092-.19-.087-.188-.087-.192-.083-.19-.08-.193-.078-.194-.076-.196-.073-.195-.07-.197-.067-.198-.065-.199-.063-.2-.059-.2-.056-.2-.055-.204-.05-.201-.049-.202-.046-.205-.043-.206-.04-.203-.038-.207-.034-.204-.032-.207-.028-.205-.026-.207-.023-.208-.02-.207-.018-.207-.014-.208-.011-.207-.009-.208-.005-.207-.002-.104-.017-.16-.046-.155-.074-.143-.1-.126-.121-.107-.139-.081-.152-.055-.159-.025-.161.004zm24.585 11.83l-.156.039-.146.068-.11.076-.015.012-.163.129-.166.127-.168.125-.17.124-.17.12-.172.118-.173.115-.176.114-.177.111-.18.11-.178.105-.182.104-.182.101-.184.1-.184.095-.189.095-.186.09-.188.089-.19.086-.19.082-.193.081-.195.078-.191.074-.197.073-.195.07-.196.065-.198.064-.198.061-.2.058-.2.055-.2.052-.2.049-.151.035-.153.05-.141.078-.125.103-.103.124-.078.14-.05.154-.022.16.009.16.038.157.067.147.093.132.116.112.134.089.149.062.158.034.16.003.133-.02.158-.035.006-.002.006-.001.213-.052.006-.002.007-.001.212-.056.006-.001.006-.002.212-.058.006-.002.006-.002.211-.061.006-.002.006-.002.21-.064.006-.002.006-.002.21-.067.005-.002.006-.002.208-.07.006-.002.006-.003.207-.073.006-.002.006-.002.206-.077.006-.002.005-.002.206-.08.005-.001.006-.003.204-.082.006-.002.005-.002.203-.085.006-.003.005-.002.202-.088.006-.002.005-.003.2-.09.006-.003.006-.003.2-.093.005-.003.005-.002.198-.096.006-.003.005-.003.197-.099.005-.002.005-.003.196-.102.005-.002.005-.003.195-.105.005-.002.005-.003.193-.107.005-.003.005-.003.191-.11.005-.003.005-.003.19-.112.005-.003.005-.003.189-.115.005-.003.005-.003.187-.117.005-.003.004-.004.186-.12.005-.003.004-.003.184-.122.005-.003.005-.004.182-.125.004-.003.005-.003.18-.128.005-.003.005-.003.179-.13.004-.003.005-.004.177-.132.004-.004.005-.003.175-.135.005-.003.004-.004.173-.137.005-.003.004-.004.019-.015.115-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.052-.153-.079-.14-.103-.124-.125-.102-.142-.078-.153-.05-.16-.02-.16.01zm-19.17.054l-.153.051-.14.079-.124.103-.103.125-.077.141-.05.153-.02.16.009.161.04.156.067.147.093.131.095.094.047.04.005.004.005.004.17.14.005.004.005.004.172.137.004.004.005.003.086.067.003.002.003.002.087.067.003.002.003.002.088.066.002.003.003.002.089.065.002.002.003.002.09.065.002.002.003.002.09.064.002.002.003.002.09.063.003.002.003.002.09.063.003.002.003.002.092.062.002.002.003.002.092.061.003.002.003.002.092.06.003.003.003.001.093.06.003.002.003.002.093.06.003.001.003.002.094.058.003.002.003.002.095.058.003.001.003.002.095.057.003.002.003.002.095.056.003.002.003.002.096.055.004.002.003.001.096.055.003.002.003.002.098.053.003.002.003.002.097.053.004.002.003.001.098.053.003.001.003.002.099.052.003.001.003.002.1.05.003.002.003.002.1.05.003.002.003.001.1.05h.003l.004.003.1.048.004.001.003.002.101.048.003.001.004.002.101.046.004.002.003.001.102.046.004.002.003.001.103.045.003.002.003.001.103.045.004.001.003.002.104.043.003.001.004.002.104.042.003.002.004.001.104.042.004.001.003.002.105.04.004.002.003.001.106.04.003.002h.004l.106.04.004.001.003.002.107.038.003.001.004.001.107.038.003.001.004.001.107.037.004.001.004.001.108.036.003.001.004.001.108.035.004.001.003.001.11.034.003.001.004.001.109.033.004.002h.003l.11.033h.004l.003.002.11.031.004.001.004.001.084.023.081.028.004.001.003.001.109.037.003.001.004.001.109.036.003.001.004.001.109.035h.003l.004.002.11.033.003.001.003.001.11.033.003.001.004.001.109.031.004.002h.003l.11.031.003.001.004.001.11.03h.003l.003.001.11.029h.004l.003.002.11.027.003.001.004.001.11.027h.003l.004.001.004.001.16.022.16-.008.157-.038.147-.067.132-.092.112-.116.09-.134.062-.149.034-.157.004-.161-.025-.16-.055-.151-.082-.139-.107-.12-.127-.1-.143-.074-.124-.04h-.003l-.104-.025-.103-.026h-.002l-.095-.026h-.001l-.101-.027h-.002l-.1-.028h-.002l-.103-.03-.104-.032-.097-.03h-.002l-.103-.033-.102-.033-.101-.034-.106-.036-.027-.01-.027-.007-.107-.03-.104-.029-.104-.03h-.002l-.097-.03-.102-.032-.102-.032-.102-.034-.103-.035-.096-.034-.1-.036-.101-.037h-.002l-.094-.036-.096-.037-.097-.04h-.002l-.099-.04-.098-.042h-.002l-.092-.04-.097-.043-.095-.043-.097-.044h-.002l-.09-.043-.094-.045-.094-.046-.093-.047-.09-.046-.096-.05-.088-.047-.002-.001-.09-.049-.094-.052-.002-.002-.087-.049-.087-.05h-.002l-.088-.053h-.001l-.09-.055-.086-.052-.002-.001-.089-.055-.084-.054h-.002l-.09-.059h-.001l-.085-.056-.001-.001-.084-.056-.082-.056h-.001l-.086-.06-.082-.058H7.79l-.086-.062-.002-.002-.08-.058-.081-.06h-.001l-.085-.064-.002-.002-.076-.058-.002-.002-.082-.064-.161-.128-.162-.133-.04-.034-.132-.092-.147-.066-.157-.038-.16-.008-.16.022z\",\n opacity: \".98\"\n}));\n\nfunction _extends$d() { return _extends$d = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$d.apply(null, arguments); }\nvar StartEventNonInterruptingSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$d({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.007 8.82L9.21 21.022h13.596L16.007 8.82zm0 1.775l5.328 9.563H10.68l5.327-9.563zM16.14.386c-1.571.236-4.195-.284-4.9 1.381.619 1.703 2.745.069 4.085.365 1.421-.13 2.84.2 4.235.259C21.27.784 18.19.344 17 .413a20.456 20.456 0 00-.86-.027zM25 3.162c-2.19.694.401 2.26 1.181 3.094 1.083 1.152 1.954 2.484 2.715 3.864 1.48 1.005 1.845-1.26.81-2.03-1.158-1.897-2.613-3.704-4.513-4.89l-.192-.038zm-18.438.423c-1.793.712-2.909 2.548-4.01 4.061-.773.814-2.211 3.653.005 3.211 1.123-1.469 1.87-3.306 3.267-4.614.664-.7 2.73-2.013.738-2.658zm24.57 11.072c-1.659.435-.468 2.667-.99 3.895a13.427 13.427 0 01-1.497 4.435c-.23 1.659 1.991 1.165 2.018-.199a14.277 14.277 0 001.254-7.552.865.865 0 00-.785-.579zm-30.18.666c-1.677.386-.633 2.667-.608 3.876.371 1.623.792 3.35 1.79 4.696 2.382.321.571-2.338.292-3.492a15.92 15.92 0 01-.684-4.39.877.877 0 00-.79-.69zm24.558 11.81c-1.755.865-3.303 2.266-5.274 2.765-1.162-.016-3.074 1.271-1.331 2.102 2.66-.447 5.163-1.733 7.236-3.445.472-.506.06-1.432-.631-1.421zm-19.151.043c-2.004.786.416 2.405 1.43 2.913 1.608.904 3.379 1.636 5.208 1.877 1.77-.804-.228-2.094-1.357-2.073-1.75-.537-3.403-1.396-4.798-2.586l-.227-.104-.256-.027z\"\n}));\n\nfunction _extends$c() { return _extends$c = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$c.apply(null, arguments); }\nvar StartEventNonInterruptingTimerIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$c({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.991 8.7c-3.018-.042-5.92 1.925-7.03 4.725-1.138 2.695-.509 6.011 1.537 8.102 1.99 2.142 5.267 2.93 8.013 1.927 2.877-.98 4.99-3.826 5.067-6.87.153-2.956-1.624-5.88-4.299-7.135a7.551 7.551 0 00-3.288-.75zm0 1.383c2.758-.052 5.372 1.972 6.014 4.654.704 2.578-.482 5.516-2.79 6.867-2.358 1.48-5.682 1.085-7.617-.919-2.043-1.97-2.407-5.38-.84-7.743 1.11-1.764 3.149-2.88 5.233-2.86zm1.962 1.764l-2.074 3.762c-.64.068-.793 1.04-.202 1.3.39.27.696-.18 1.052-.165h3.17v-.865h-3.182l1.993-3.614-.757-.418zM16.12.358h-.232l-.22.004h-.012l-.221.006h-.012l-.22.01h-.012l-.22.013h-.012l-.22.016h-.012l-.22.019h-.005l-.006.001-.22.021h-.006l-.005.001-.22.025h-.011l-.22.028h-.005l-.006.002-.219.03h-.005l-.006.001-.218.033-.006.001-.006.001-.217.036-.006.001-.006.001-.217.039-.006.001-.006.001-.216.042-.006.001-.006.001-.215.045-.006.001-.006.002-.215.047-.006.002-.006.001-.214.05-.006.002-.006.002-.115.029-.152.053-.14.081-.122.106-.1.126-.075.143-.047.154-.018.16.012.16.042.156.07.145.095.13.118.11.137.086.15.059.158.03h.161l.132-.022.11-.028.202-.047.203-.046.208-.043.202-.039.206-.037.206-.034.205-.03.208-.03.205-.025.209-.023.208-.02.21-.017.209-.015.207-.011.21-.009.21-.006.207-.003h.21l.21.002.207.005.207.008.212.011.207.014.208.017.209.019.208.022.205.025.206.028.207.03.208.035.205.036.202.039.052.01.16.018.16-.012.156-.042.146-.07.13-.096.109-.119.085-.136.06-.15.03-.159v-.16l-.03-.16-.059-.15-.086-.136L19.823.9l-.13-.096-.145-.07-.128-.038-.057-.011-.006-.002h-.006L19.135.64l-.006-.001-.006-.001-.217-.039H18.9l-.006-.002-.217-.035-.006-.001-.006-.001-.218-.032-.006-.001-.006-.001-.218-.03h-.006l-.006-.001-.219-.027h-.011l-.22-.024-.005-.001h-.006l-.22-.021h-.006L17.512.42l-.22-.017-.005-.001h-.006l-.22-.015h-.012l-.22-.012h-.012l-.22-.01h-.012l-.22-.005h-.012l-.221-.003h-.012zm8.715 2.783l-.157.034-.149.063-.134.089-.116.112-.092.132-.067.147-.038.157-.008.16.021.16.051.153.079.141.103.124.102.087.052.038h.001l.087.064v.001l.082.061.002.001.076.059h.001l.084.065.082.066.002.001.079.063.002.002.077.063.081.067.002.002.077.065.076.065.001.002.08.07.078.07h.002l.075.068.077.072.002.001.073.069.077.073.072.07.002.001.077.076.07.07v.001l.075.076.07.073.002.001.074.079.002.002.069.074.069.075.074.082.07.08.002.001.068.079h.001l.067.079.068.082.065.078.001.002.068.083.067.084.063.081.001.002.067.087.002.002.063.084.001.001.064.087.008.01.008.01.095.12.093.121.09.119.087.119.088.122.086.123.084.12.081.122.001.002.084.126.08.126.08.127.077.126.079.131.074.127.075.131.073.131.07.13.07.133.069.133.045.09.086.137.109.119.13.096.144.07.156.042.16.013.16-.017.155-.047.143-.075.126-.1.106-.121.082-.14.054-.151.025-.16-.005-.16-.035-.158-.05-.124-.048-.095-.002-.004-.002-.004-.073-.14-.002-.005-.002-.004-.074-.14-.002-.004-.002-.004-.076-.14-.002-.003-.002-.004-.077-.139-.003-.004-.002-.004-.078-.138-.003-.004-.002-.003-.08-.137-.002-.004-.003-.004-.081-.136-.002-.004-.003-.004-.083-.136-.002-.003-.002-.004-.085-.135-.002-.004-.003-.003-.085-.134-.003-.004-.002-.004-.087-.132-.003-.004-.003-.004-.088-.132-.003-.003-.002-.004-.09-.13-.003-.005-.003-.003-.091-.13-.003-.004-.002-.004-.093-.129-.003-.003-.003-.004-.094-.128-.003-.004-.003-.003-.095-.127-.003-.004-.003-.004-.097-.125-.003-.004-.003-.004-.09-.114-.06-.082-.003-.003-.002-.003-.069-.091-.002-.004-.002-.003-.07-.09-.003-.003-.002-.003-.07-.09-.003-.003-.002-.003-.071-.09-.002-.003-.003-.002-.072-.089-.002-.003-.002-.003-.073-.088-.002-.003-.002-.002-.074-.087-.002-.003-.002-.003-.074-.086-.003-.003-.002-.003-.074-.086-.003-.002-.002-.003-.075-.085-.003-.003-.002-.002-.076-.084-.002-.003-.003-.003-.076-.083-.002-.003-.003-.003-.077-.082-.002-.003-.003-.002-.077-.082-.003-.003-.003-.002-.078-.081-.002-.003-.003-.003-.078-.08-.003-.002-.003-.003-.079-.08-.002-.002-.003-.002-.08-.08-.002-.002-.003-.002-.08-.078-.003-.003-.003-.002-.08-.077-.003-.003-.003-.002-.082-.077-.002-.002-.003-.002-.082-.076-.003-.002-.002-.003-.083-.075-.003-.002-.002-.003-.084-.074-.002-.002-.003-.002-.084-.074-.003-.002-.002-.002-.085-.073-.002-.002-.003-.003-.085-.071-.003-.003-.002-.002-.086-.07-.003-.003-.002-.002-.086-.07-.003-.003-.003-.002-.086-.07-.003-.002-.003-.002-.087-.069-.002-.002-.003-.002-.088-.068-.002-.002-.003-.002-.088-.067-.003-.003-.003-.002-.088-.066-.003-.002-.003-.002-.089-.066-.003-.002-.003-.002-.057-.042-.14-.082-.15-.055-.16-.026-.16.004zm-18.458.426l-.157.037-.148.066-.111.074-.007.006-.003.002-.003.002-.086.069-.003.002-.002.002-.086.07-.003.002-.002.002-.086.07-.002.003-.003.002-.085.071-.002.002-.003.003-.084.071-.003.003-.002.002-.084.072-.003.003-.002.002-.083.073-.003.003-.002.002-.083.074-.002.002-.003.003-.082.074-.003.003-.002.002-.081.076-.003.002-.003.002-.08.077-.003.002-.003.003-.08.076-.002.003-.003.002-.08.078-.002.002-.003.003-.079.078-.002.003-.003.002-.078.08-.003.002-.002.002-.078.08-.002.003-.003.002-.077.08-.003.004-.002.002-.077.081-.002.003-.003.003-.076.082-.002.002-.003.003-.075.082-.002.003-.003.003-.074.083-.003.003-.002.003-.074.084-.003.003-.002.002-.074.085-.002.003-.002.003-.073.085-.003.003-.002.003-.072.086-.002.003-.003.003-.071.087-.003.003-.002.002-.07.088-.003.003-.002.003-.07.088-.003.003-.002.003-.07.09-.002.002-.002.003-.069.09-.002.003-.003.003-.068.09-.002.003-.002.003-.067.092-.003.003-.002.003-.067.092-.002.003-.002.003-.066.092-.002.003-.002.004-.066.093-.002.003-.002.003-.065.094-.002.003-.002.004-.064.094-.002.003-.002.004-.063.095-.002.003-.002.003-.063.097-.002.003-.002.003-.046.073-.05.07-.003.002-.002.003-.067.093-.003.003-.002.003-.066.094-.002.003-.002.003-.066.094-.002.003-.002.003-.064.094-.002.004-.002.003-.064.094-.002.004-.002.003-.062.095-.002.003-.002.003-.062.096-.002.003-.002.003-.06.096-.003.003-.002.003-.06.096-.001.004-.002.003-.059.096-.002.004-.002.003-.058.097-.002.003-.001.003-.057.098-.002.003-.002.003-.056.098-.002.003-.002.003-.055.098-.002.004-.001.003-.055.098-.001.004-.002.003-.054.099-.001.003-.002.003-.052.1-.002.002-.002.004-.051.1-.002.002-.002.004-.05.1-.002.003-.002.003-.05.1v.003l-.002.004-.05.1V9.5l-.002.004-.048.1-.002.004-.001.003-.047.101-.002.003-.001.004-.013.027-.052.152-.024.16.006.16.037.157.064.148.091.133.114.114.134.09.147.065.157.036.162.006.159-.024.152-.053.14-.08.122-.105.1-.126.066-.117.01-.023.044-.095.045-.095.002-.003.042-.087.048-.097.048-.095v-.001l.048-.092.001-.001.047-.09.05-.093.002-.002.049-.09.052-.092.001-.002.051-.089.001-.002.051-.087.053-.088.001-.002.055-.091.057-.091.057-.09.001-.002.057-.089.055-.083.001-.002.06-.09.06-.088.062-.089.001-.001.06-.084.063-.088.065-.089.017-.023.016-.025.06-.094.059-.09v-.002l.058-.086.057-.086.001-.001.062-.09.062-.088.001-.002.06-.085.002-.002.06-.082.063-.087.064-.084.002-.002.061-.08.065-.084.064-.08v-.001l.067-.083.067-.082.07-.083.069-.08.063-.074.074-.083.068-.077.002-.002.07-.076.07-.075.072-.077.001-.001.067-.07.076-.078.002-.002.07-.07.075-.075.002-.002.072-.07.075-.072.002-.002.073-.069.074-.068.001-.001.08-.073.076-.068.002-.002.072-.063v-.001l.078-.067.079-.068.002-.001.08-.068.002-.002.077-.063.082-.066.001-.001.075-.06.002-.002.006-.004.117-.111.094-.131.068-.146.04-.156.01-.161-.019-.16-.049-.154-.076-.141-.102-.125-.123-.105-.14-.079-.153-.052-.16-.023-.16.007zm24.596 11.088l-.156.04-.146.067-.131.094-.112.117-.087.135-.061.15-.033.157-.004.134.007.142.005.152.004.15.002.149v.153l.001.011v.015l.004.11.002.11v.002l.002.106v.321l-.003.102-.002.106-.004.107-.005.105-.006.106-.006.106-.008.106v.002l-.008.103v.002l-.01.1-.01.105-.01.105-.013.105-.012.099v.002l-.014.108-.014.1-.016.105-.016.103v.002l-.017.099-.018.104-.019.103v.002l-.019.097-.02.104-.022.103v.001l-.022.098-.023.103v.002l-.024.096-.025.103v.002l-.024.096-.027.102v.003l-.026.093v.001l-.029.103v.002l-.03.099-.028.097v.002l-.03.095-.03.096v.001l-.033.1-.031.095v.002l-.035.1v.003l-.034.094v.003l-.035.096v.001l-.034.09v.002l-.038.098-.036.093v.002l-.038.095-.079.194-.08.188-.085.189-.087.19-.09.184-.092.183-.095.184-.05.093-.064.148-.034.158-.005.16.026.16.054.151.082.14.106.12.127.1.143.075.154.046.16.017.161-.013.156-.042.144-.071.13-.096.109-.119.072-.112.053-.099.003-.005.003-.006.102-.195.003-.006.003-.006.098-.196.003-.006.003-.006.096-.197.002-.006.003-.006.093-.2.002-.006.003-.006.09-.2.002-.006.003-.007.086-.202.003-.006.002-.006.084-.203.002-.005.001-.005.04-.102.002-.003.001-.003.04-.103.001-.003.001-.003.04-.103v-.004l.001-.003.039-.103v-.003l.002-.003.037-.104.001-.003.001-.003.037-.104v-.004l.002-.003.035-.104.002-.003v-.004l.035-.104.002-.004v-.003l.034-.105.002-.003v-.003l.034-.105v-.004l.002-.003.032-.106.001-.003.001-.003.031-.106.001-.003.001-.004.031-.106.001-.003.001-.004.03-.106v-.003l.002-.004.028-.107.001-.003.001-.003.028-.107.001-.004.001-.003.027-.107.001-.004v-.003l.027-.108.001-.003v-.004l.026-.108.001-.003v-.004l.025-.108.001-.003v-.004l.025-.108v-.004l.001-.003.023-.109v-.003l.001-.004.022-.109v-.003l.002-.004.02-.109.001-.004v-.003l.02-.11.002-.003v-.004l.02-.11v-.007l.019-.11v-.003l.001-.004.017-.11v-.004l.001-.003.017-.11v-.008l.016-.11v-.004l.001-.004.015-.11v-.008l.015-.111v-.008l.013-.111v-.007l.013-.112v-.007l.011-.112v-.004l.001-.004.01-.112v-.007l.01-.112v-.008l.008-.112v-.008l.007-.113v-.007l.007-.113v-.008l.005-.113v-.007l.005-.114v-.007l.003-.114v-.007l.003-.114v-.129l.001-.114v-.13l-.003-.114V16.5l-.003-.115v-.007l-.003-.102v-.155l-.003-.158v-.01l-.004-.158v-.01l-.006-.158v-.01l-.007-.148-.023-.16-.051-.152-.08-.14-.103-.124-.125-.102-.142-.077-.153-.05-.16-.02-.161.01zm-30.213.66l-.157.034-.149.063-.134.09-.115.113-.092.132-.067.147-.037.156-.009.134.001.11V16.308l.006.22v.012l.01.22v.012l.012.22v.006l.001.006.015.22v.005l.001.006.018.22.001.006v.006l.022.219v.006l.001.006.024.219.001.006v.006l.028.218.001.006v.006l.031.218.001.006.001.006.033.218.001.006.001.005.037.218v.006l.002.005.04.217v.006l.001.006.043.216.001.006.001.006.046.216v.005l.002.006.048.215.002.006.001.006.051.214.002.006v.006l.055.214.002.005.001.006.057.213.002.006.001.005.06.213.002.005.001.006.063.212.002.005.001.006.066.21.002.006.002.006.068.21.002.005.002.005.07.21.003.005.002.005.074.208.002.006.002.005.077.207.002.006.002.005.08.206.002.005.002.006.082.204.002.006.002.005.086.204.002.005.002.006.088.202.002.005.003.006.09.2.003.006.002.005.094.2.002.006.003.005.096.199.002.005.003.005.03.062.086.137.11.118.128.097.145.07.156.043.16.013.16-.017.155-.047.143-.074.127-.1.106-.121.081-.14.055-.15.025-.16-.005-.161-.034-.158-.05-.124-.028-.055-.092-.19-.087-.188-.087-.192-.083-.19-.08-.193-.078-.194-.076-.196-.073-.195-.07-.197-.067-.198-.065-.199-.063-.2-.059-.2-.056-.2-.055-.204-.05-.201-.049-.202-.046-.205-.043-.206-.04-.203-.038-.207-.034-.204-.032-.207-.028-.205-.026-.207-.023-.208-.02-.207-.018-.207-.014-.208-.011-.207-.009-.208-.005-.207-.002-.104-.017-.16-.046-.155-.074-.143-.1-.126-.121-.107-.139-.081-.152-.055-.159-.025-.161.004zm24.585 11.83l-.156.039-.146.068-.11.076-.015.012-.163.129-.166.127-.168.125-.17.124-.17.12-.172.118-.173.115-.176.114-.177.111-.18.11-.178.105-.182.104-.182.101-.184.1-.184.095-.189.095-.186.09-.188.089-.19.086-.19.082-.193.081-.195.078-.191.074-.197.073-.195.07-.196.065-.198.064-.198.061-.2.058-.2.055-.2.052-.2.049-.151.035-.153.05-.141.078-.125.103-.103.124-.078.14-.05.154-.022.16.009.16.038.157.067.147.093.132.116.112.134.089.149.062.158.034.16.003.133-.02.158-.035.006-.002.006-.001.213-.052.006-.002.007-.001.212-.056.006-.001.006-.002.212-.058.006-.002.006-.002.211-.061.006-.002.006-.002.21-.064.006-.002.006-.002.21-.067.005-.002.006-.002.208-.07.006-.002.006-.003.207-.073.006-.002.006-.002.206-.077.006-.002.005-.002.206-.08.005-.001.006-.003.204-.082.006-.002.005-.002.203-.085.006-.003.005-.002.202-.088.006-.002.005-.003.2-.09.006-.003.006-.003.2-.093.005-.003.005-.002.198-.096.006-.003.005-.003.197-.099.005-.002.005-.003.196-.102.005-.002.005-.003.195-.105.005-.002.005-.003.193-.107.005-.003.005-.003.191-.11.005-.003.005-.003.19-.112.005-.003.005-.003.189-.115.005-.003.005-.003.187-.117.005-.003.004-.004.186-.12.005-.003.004-.003.184-.122.005-.003.005-.004.182-.125.004-.003.005-.003.18-.128.005-.003.005-.003.179-.13.004-.003.005-.004.177-.132.004-.004.005-.003.175-.135.005-.003.004-.004.173-.137.005-.003.004-.004.019-.015.115-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.052-.153-.079-.14-.103-.124-.125-.102-.142-.078-.153-.05-.16-.02-.16.01zm-19.17.054l-.153.051-.14.079-.124.103-.103.125-.077.141-.05.153-.02.16.009.161.04.156.067.147.093.131.095.094.047.04.005.004.005.004.17.14.005.004.005.004.172.137.004.004.005.003.086.067.003.002.003.002.087.067.003.002.003.002.088.066.002.003.003.002.089.065.002.002.003.002.09.065.002.002.003.002.09.064.002.002.003.002.09.063.003.002.003.002.09.063.003.002.003.002.092.062.002.002.003.002.092.061.003.002.003.002.092.06.003.003.003.001.093.06.003.002.003.002.093.06.003.001.003.002.094.058.003.002.003.002.095.058.003.001.003.002.095.057.003.002.003.002.095.056.003.002.003.002.096.055.004.002.003.001.096.055.003.002.003.002.098.053.003.002.003.002.097.053.004.002.003.001.098.053.003.001.003.002.099.052.003.001.003.002.1.05.003.002.003.002.1.05.003.002.003.001.1.05h.003l.004.003.1.048.004.001.003.002.101.048.003.001.004.002.101.046.004.002.003.001.102.046.004.002.003.001.103.045.003.002.003.001.103.045.004.001.003.002.104.043.003.001.004.002.104.042.003.002.004.001.104.042.004.001.003.002.105.04.004.002.003.001.106.04.003.002h.004l.106.04.004.001.003.002.107.038.003.001.004.001.107.038.003.001.004.001.107.037.004.001.004.001.108.036.003.001.004.001.108.035.004.001.003.001.11.034.003.001.004.001.109.033.004.002h.003l.11.033h.004l.003.002.11.031.004.001.004.001.084.023.081.028.004.001.003.001.109.037.003.001.004.001.109.036.003.001.004.001.109.035h.003l.004.002.11.033.003.001.003.001.11.033.003.001.004.001.109.031.004.002h.003l.11.031.003.001.004.001.11.03h.003l.003.001.11.029h.004l.003.002.11.027.003.001.004.001.11.027h.003l.004.001.004.001.16.022.16-.008.157-.038.147-.067.132-.092.112-.116.09-.134.062-.149.034-.157.004-.161-.025-.16-.055-.151-.082-.139-.107-.12-.127-.1-.143-.074-.124-.04h-.003l-.104-.025-.103-.026h-.002l-.095-.026h-.001l-.101-.027h-.002l-.1-.028h-.002l-.103-.03-.104-.032-.097-.03h-.002l-.103-.033-.102-.033-.101-.034-.106-.036-.027-.01-.027-.007-.107-.03-.104-.029-.104-.03h-.002l-.097-.03-.102-.032-.102-.032-.102-.034-.103-.035-.096-.034-.1-.036-.101-.037h-.002l-.094-.036-.096-.037-.097-.04h-.002l-.099-.04-.098-.042h-.002l-.092-.04-.097-.043-.095-.043-.097-.044h-.002l-.09-.043-.094-.045-.094-.046-.093-.047-.09-.046-.096-.05-.088-.047-.002-.001-.09-.049-.094-.052-.002-.002-.087-.049-.087-.05h-.002l-.088-.053h-.001l-.09-.055-.086-.052-.002-.001-.089-.055-.084-.054h-.002l-.09-.059h-.001l-.085-.056-.001-.001-.084-.056-.082-.056h-.001l-.086-.06-.082-.058H7.79l-.086-.062-.002-.002-.08-.058-.081-.06h-.001l-.085-.064-.002-.002-.076-.058-.002-.002-.082-.064-.161-.128-.162-.133-.04-.034-.132-.092-.147-.066-.157-.038-.16-.008-.16.022z\"\n}));\n\nfunction _extends$b() { return _extends$b = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$b.apply(null, arguments); }\nvar StartEventNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$b({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.847.004C9.61-.016 3.624 4.014 1.257 9.78-1.235 15.49.06 22.581 4.42 27.034c4.193 4.513 11.101 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.268.403-6.228-3.26-12.441-8.87-15.154A15.924 15.924 0 0015.846.004zm.439 1.729c6.105.033 11.856 4.45 13.435 10.359 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.625-4.814-3.84-6.538-10.94-4.067-16.57 2.14-5.206 7.515-8.775 13.147-8.71.097-.001.194-.002.29-.001z\"\n}));\n\nfunction _extends$a() { return _extends$a = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$a.apply(null, arguments); }\nvar StartEventParallelMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$a({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.847 0C9.61-.02 3.624 4.01 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.101 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.268.403-6.228-3.26-12.441-8.87-15.154A15.924 15.924 0 0015.846 0zm.439 1.729c6.105.033 11.856 4.45 13.435 10.359 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.625C2.101 23.17.377 16.07 2.848 10.44c2.134-5.2 7.522-8.78 13.147-8.71.097-.001.194-.002.29-.001zM13.504 9.08v4.427H9.077v4.98h4.427v4.427h4.98v-4.427h4.428v-4.98h-4.427V9.08h-4.98zm.83.83h3.32v4.427h4.428v3.32h-4.427v4.427h-3.32v-4.453H9.906v-3.294h4.427V9.91z\"\n}));\n\nfunction _extends$9() { return _extends$9 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$9.apply(null, arguments); }\nvar StartEventSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$9({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.005C9.705-.08 3.643 3.968 1.257 9.78-1.235 15.49.06 22.581 4.42 27.034c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994.005zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626-4.814-3.838-6.538-10.939-4.067-16.57 2.14-5.205 7.515-8.774 13.147-8.708zm0 6.776L9.19 20.724H22.8L15.995 8.511zm0 1.777l5.332 9.572H10.662l5.333-9.572z\"\n}));\n\nfunction _extends$8() { return _extends$8 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$8.apply(null, arguments); }\nvar StartEventTimerIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$8({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 0C7.174 0 0 7.174 0 16s7.174 16 16 16 16-7.174 16-16S24.826 0 16 0zm0 1.73c7.892 0 14.27 6.378 14.27 14.27 0 7.891-6.379 14.27-14.27 14.27S1.73 23.891 1.73 16C1.73 8.108 8.108 1.73 16 1.73zm-.143 6.676c-2.967.02-5.797 1.97-6.89 4.727-1.138 2.695-.51 6.012 1.537 8.102 1.99 2.142 5.268 2.932 8.014 1.928 2.878-.98 4.992-3.827 5.068-6.87.153-2.957-1.624-5.881-4.3-7.137a7.552 7.552 0 00-3.43-.75zm.27 1.383c2.71.012 5.254 2.015 5.886 4.656.704 2.577-.482 5.517-2.791 6.867-2.358 1.48-5.682 1.085-7.618-.918-2.043-1.971-2.407-5.381-.84-7.745 1.11-1.763 3.15-2.88 5.234-2.86h.13zm1.833 1.765l-2.074 3.763c-.64.068-.793 1.04-.202 1.3.39.27.696-.18 1.052-.165h3.17v-.865h-3.181l1.992-3.615-.757-.418z\"\n}));\n\nfunction _extends$7() { return _extends$7 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$7.apply(null, arguments); }\nvar SubprocessCollapsedIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$7({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M5.637 3A5.644 5.644 0 000 8.637v15.417a5.644 5.644 0 005.637 5.637h20.726A5.644 5.644 0 0032 24.054V8.637A5.644 5.644 0 0026.363 3H5.637zm0 1.778h20.726a3.83 3.83 0 013.859 3.859v15.417a3.83 3.83 0 01-3.859 3.858h-4.201V16.695H9.838v11.217H5.637a3.83 3.83 0 01-3.859-3.858V8.637a3.83 3.83 0 013.859-3.859zm5.33 13.046h10.066v10.065H10.967V17.824zm4.189 1.431V22.06H12.35v1.689h2.804V26.554h1.69V23.749h2.804V22.06h-2.804V19.255h-1.69z\"\n}));\n\nfunction _extends$6() { return _extends$6 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$6.apply(null, arguments); }\nvar SubprocessExpandedIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$6({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M5.636 3A5.642 5.642 0 000 8.636v15.418a5.643 5.643 0 005.636 5.636h20.728A5.643 5.643 0 0032 24.054V8.636A5.642 5.642 0 0026.364 3H5.636zm0 1.778h20.728a3.83 3.83 0 013.858 3.858v15.418a3.83 3.83 0 01-3.858 3.858h-4.203V16.723H9.84v11.189H5.636a3.83 3.83 0 01-3.858-3.858V8.636a3.83 3.83 0 013.858-3.858zm5.331 13.074h10.066v10.06H10.967v-10.06zm1.336 3.996v1.711h7.394v-1.71h-7.394z\"\n}));\n\nfunction _extends$5() { return _extends$5 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$5.apply(null, arguments); }\nvar TaskNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$5({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 2.667C2.916 2.667 0 5.57 0 9.142v13.383C0 26.097 2.916 29 6.494 29h19.012C29.084 29 32 26.097 32 22.525V9.142c0-3.572-2.916-6.475-6.494-6.475H6.494zm0 2h19.012c2.509 0 4.494 1.98 4.494 4.475v13.383C30 25.02 28.015 27 25.506 27H6.494C3.985 27 2 25.02 2 22.525V9.142c0-2.495 1.985-4.475 4.494-4.475z\"\n}));\n\nfunction _extends$4() { return _extends$4 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$4.apply(null, arguments); }\nvar TextAnnotationicon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$4({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M22.087 0v31.647H32v-1.788h-8.125V1.788H32V0h-9.913zm-2.924 13.999l-2.737 2.167 2.167 2.738 2.738-2.167-2.168-2.738zm-5.475 4.335L10.95 20.5l2.168 2.738 2.737-2.168-2.167-2.737zm-5.475 4.335l-2.738 2.167 2.168 2.738 2.737-2.168-2.167-2.737zm-5.476 4.335L0 29.17l2.167 2.738 2.738-2.168-2.168-2.737z\"\n}));\n\nfunction _extends$3() { return _extends$3 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$3.apply(null, arguments); }\nvar TransactionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$3({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M5.422 3A5.424 5.424 0 000 8.422v15.822a5.424 5.424 0 005.422 5.423h21.156A5.424 5.424 0 0032 24.244V8.422A5.424 5.424 0 0026.578 3H5.422zm0 1.244h21.156a4.155 4.155 0 014.178 4.178v15.822a4.155 4.155 0 01-4.178 4.178H5.422a4.155 4.155 0 01-4.178-4.178V8.422a4.155 4.155 0 014.178-4.178zm1.056 1.778a3.373 3.373 0 00-3.367 3.366v13.89a3.373 3.373 0 003.367 3.366h19.044a3.373 3.373 0 003.367-3.366V9.388a3.373 3.373 0 00-3.367-3.366H6.478zm0 1.245h19.044c1.187 0 2.122.935 2.122 2.121v13.89a2.104 2.104 0 01-2.122 2.122H6.478a2.104 2.104 0 01-2.122-2.122V9.388c0-1.186.935-2.121 2.122-2.121z\"\n}));\n\nfunction _extends$2() { return _extends$2 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$2.apply(null, arguments); }\nvar UserTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$2({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10.263 7.468c-1.698 0-2.912 1.305-2.915 2.791v.001c0 .45.121.924.311 1.352.138.309.308.593.516.82-1.235.423-2.683 1.119-3.414 2.49l-.04.075v4.44h11.083v-4.44l-.04-.074c-.72-1.352-2.136-2.047-3.36-2.471.597-.608.774-1.392.774-2.192-.004-1.487-1.218-2.792-2.915-2.792zm-1.16 1.583c.08 0 .165.003.26.008.757.045 1.012.181 1.207.31.196.13.334.252.851.268.404-.016.598-.087.737-.169.056-.033.103-.067.152-.1.128.275.197.578.198.893 0 .894-.154 1.52-.975 2.034l.08.604c.171.052.348.11.527.171.025.105.054.242.073.387.02.153.029.311.016.43a.422.422 0 01-.056.19c-.417.417-1.157.66-1.908.66-.75 0-1.49-.243-1.908-.66a.422.422 0 01-.056-.19 1.949 1.949 0 01.016-.43c.02-.146.049-.284.074-.388.177-.062.352-.118.521-.17l.048-.648a.616.616 0 00-.126-.118c-.183-.138-.405-.44-.562-.793-.157-.353-.254-.757-.254-1.08 0-.387.105-.758.297-1.079l.11-.04c.143-.046.339-.09.679-.09zm-1.448 4.304l-.002.014c-.025.185-.04.387-.018.589.021.202.074.42.248.593.595.594 1.494.857 2.382.857.889 0 1.788-.263 2.382-.857.174-.174.227-.391.249-.593a2.496 2.496 0 00-.018-.59l-.002-.01c.903.396 1.776.963 2.258 1.81v3.599H13.53v-2.538h-.67v2.538H7.651v-2.538h-.67v2.538H5.39v-3.599c.483-.849 1.359-1.416 2.264-1.813zM6.495 3C2.914 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.01C28.016 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5z\"\n}));\n\nvar iconsByType = {\n 'Association': AssociationIcon,\n 'BusinessRuleTask': BusinessRuleTaskIcon,\n 'CallActivity': CallActivityIcon,\n 'Collaboration': CollaborationIcon,\n 'ConditionalFlow': ConditionalFlowIcon,\n 'SequenceFlow': ConnectionIcon,\n 'DataInput': DataInputIcon,\n 'DataInputAssociation': DataInputOutputAssociationIcon,\n 'DataOutput': DataOutputIcon,\n 'DataOutputAssociation': DataInputOutputAssociationIcon,\n 'DataObjectReference': DataObjectIcon,\n 'DataStoreReference': DataStoreIcon,\n 'DefaultFlow': DefaultFlowIcon,\n 'CancelEndEvent': EndEventCancelIcon,\n 'CompensateEndEvent': EndEventCompensationIcon,\n 'ErrorEndEvent': EndEventErrorIcon,\n 'EscalationEndEvent': EndEventEscalationIcon,\n 'LinkEndEvent': EndEventLinkIcon,\n 'MessageEndEvent': EndEventMessageIcon,\n 'MultipleEndEvent': EndEventMultipleIcon,\n 'EndEvent': EndEventNoneIcon,\n 'SignalEndEvent': EndEventSignalIcon,\n 'TerminateEndEvent': EndEventTerminateIcon,\n 'EventSubProcess': EventSubProcessExpandedIcon,\n 'ComplexGateway': GatewayComplexIcon,\n 'EventBasedGateway': GatewayEventBasedIcon,\n 'ExclusiveGateway': GatewayXorIcon,\n 'Gateway': GatewayNoneIcon,\n 'InclusiveGateway': GatewayOrIcon,\n 'ParallelGateway': GatewayParallelIcon,\n 'Group': GroupIcon,\n 'CancelIntermediateCatchEvent': IntermediateEventCatchCancelIcon,\n 'CompensateIntermediateCatchEvent': IntermediateEventCatchCompensationIcon,\n 'ConditionalIntermediateCatchEvent': IntermediateEventCatchConditionIcon,\n 'ErrorIntermediateCatchEvent': IntermediateEventCatchErrorIcon,\n 'EscalationIntermediateCatchEvent': IntermediateEventCatchEscalationIcon,\n 'LinkIntermediateCatchEvent': IntermediateEventCatchLinkIcon,\n 'MessageIntermediateCatchEvent': IntermediateEventCatchMessageIcon,\n 'MultipleIntermediateCatchEvent': IntermediateEventCatchMultipleIcon,\n 'ConditionalIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingConditionIcon,\n 'EscalationIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingEscalationIcon,\n 'MessageIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingMessageIcon,\n 'MultipleIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingMultipleIcon,\n 'ParallelIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingParallelIcon,\n 'SignalIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingSignalIcon,\n 'TimerIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingTimerIcon,\n 'ParallelMultipleIntermediateCatchEvent': IntermediateEventCatchParallelMultipleIcon,\n 'SignalIntermediateCatchEvent': IntermediateEventCatchSignalIcon,\n 'TimerIntermediateCatchEvent': IntermediateEventCatchTimerIcon,\n 'IntermediateThrowEvent': IntermediateEventNoneIcon,\n 'CompensateIntermediateThrowEvent': IntermediateEventThrowCompensationIcon,\n 'EscalationIntermediateThrowEvent': IntermediateEventThrowEscalationIcon,\n 'LinkIntermediateThrowEvent': IntermediateEventThrowLinkIcon,\n 'MessageIntermediateThrowEvent': IntermediateEventThrowMessageIcon,\n 'MultipleIntermediateThrowEvent': IntermediateEventThrowMultipleIcon,\n 'SignalIntermediateThrowEvent': IntermediateEventThrowSignalIcon,\n 'Lane': LaneIcon,\n 'ManualTask': ManualTaskIcon,\n 'MessageFlow': MessageFlowIcon,\n 'Participant': ParticipantIcon,\n 'Process': ProcessIcon,\n 'ReceiveTask': ReceiveTaskIcon,\n 'ScriptTask': ScriptTaskIcon,\n 'SendTask': SendTaskIcon,\n 'ServiceTask': ServiceTaskIcon,\n 'CompensateStartEvent': StartEventCompensationIcon,\n 'ConditionalStartEvent': StartEventConditionIcon,\n 'ErrorStartEvent': StartEventErrorIcon,\n 'EscalationStartEvent': StartEventEscalationIcon,\n 'MessageStartEvent': StartEventMessageIcon,\n 'MultipleStartEvent': StartEventMultipleIcon,\n 'ConditionalStartEventNonInterrupting': StartEventNonInterruptingConditionIcon,\n 'EscalationStartEventNonInterrupting': StartEventNonInterruptingEscalationIcon,\n 'MessageStartEventNonInterrupting': StartEventNonInterruptingMessageIcon,\n 'MultipleStartEventNonInterrupting': StartEventNonInterruptingMultipleIcon,\n 'ParallelMultipleStartEventNonInterrupting': StartEventNonInterruptingParallelMultipleIcon,\n 'SignalStartEventNonInterrupting': StartEventNonInterruptingSignalIcon,\n 'TimerStartEventNonInterrupting': StartEventNonInterruptingTimerIcon,\n 'CancelBoundaryEvent': IntermediateEventCatchCancelIcon,\n 'CompensateBoundaryEvent': IntermediateEventCatchCompensationIcon,\n 'ConditionalBoundaryEvent': IntermediateEventCatchConditionIcon,\n 'ErrorBoundaryEvent': IntermediateEventCatchErrorIcon,\n 'EscalationBoundaryEvent': IntermediateEventCatchEscalationIcon,\n 'LinkBoundaryEvent': IntermediateEventCatchLinkIcon,\n 'MessageBoundaryEvent': IntermediateEventCatchMessageIcon,\n 'MultipleBoundaryEvent': IntermediateEventCatchMultipleIcon,\n 'BoundaryEvent': IntermediateEventNoneIcon,\n 'ConditionalBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingConditionIcon,\n 'EscalationBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingEscalationIcon,\n 'MessageBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingMessageIcon,\n 'MultipleBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingMultipleIcon,\n 'ParallelBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingParallelIcon,\n 'SignalBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingSignalIcon,\n 'TimerBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingTimerIcon,\n 'ParallelMultipleBoundaryEvent': IntermediateEventCatchParallelMultipleIcon,\n 'SignalBoundaryEvent': IntermediateEventCatchSignalIcon,\n 'TimerBoundaryEvent': IntermediateEventCatchTimerIcon,\n 'StartEvent': StartEventNoneIcon,\n 'ParallelMultipleStartEvent': StartEventParallelMultipleIcon,\n 'SignalStartEvent': StartEventSignalIcon,\n 'TimerStartEvent': StartEventTimerIcon,\n 'CollapsedSubProcess': SubprocessCollapsedIcon,\n 'CollapsedAdHocSubProcess': SubprocessCollapsedIcon,\n 'ExpandedSubProcess': SubprocessExpandedIcon,\n 'ExpandedAdHocSubProcess': SubprocessExpandedIcon,\n 'Task': TaskNoneIcon,\n 'TextAnnotation': TextAnnotationicon,\n 'Transaction': TransactionIcon,\n 'UserTask': UserTaskIcon\n};\n\nfunction getConcreteType(element) {\n const {\n type: elementType\n } = element;\n let type = getRawType(elementType);\n\n // (1) event definition types\n const eventDefinition = getEventDefinition$2(element);\n if (eventDefinition) {\n type = `${getEventDefinitionPrefix(eventDefinition)}${type}`;\n\n // (1.1) interrupting / non interrupting\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') && !(0,bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isInterrupting)(element) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BoundaryEvent') && !isCancelActivity(element)) {\n type = `${type}NonInterrupting`;\n }\n return type;\n }\n\n // (2) sub process types\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SubProcess') && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Transaction')) {\n if ((0,bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isEventSubProcess)(element)) {\n type = `Event${type}`;\n } else {\n const expanded = (0,bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isExpanded)(element) && !isPlane(element);\n type = `${expanded ? 'Expanded' : 'Collapsed'}${type}`;\n }\n }\n\n // (3) conditional + default flows\n if (isDefaultFlow(element)) {\n type = 'DefaultFlow';\n }\n if (isConditionalFlow(element)) {\n type = 'ConditionalFlow';\n }\n return type;\n}\nconst PanelHeaderProvider = translate => {\n if (!translate) translate = text => text;\n return {\n getDocumentationRef: element => {\n const elementTemplates = getTemplatesService();\n if (elementTemplates) {\n return getTemplateDocumentation(element, elementTemplates);\n }\n },\n getElementLabel: element => {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process')) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).name;\n }\n return (0,bpmn_js_lib_features_label_editing_LabelUtil__WEBPACK_IMPORTED_MODULE_11__.getLabel)(element);\n },\n getElementIcon: element => {\n const concreteType = getConcreteType(element);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const config = useService('config.elementTemplateIconRenderer', false);\n const {\n iconProperty = 'zeebe:modelerTemplateIcon'\n } = config || {};\n const templateIcon = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get(iconProperty);\n if (templateIcon) {\n return () => (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"img\", {\n class: \"bio-properties-panel-header-template-icon\",\n width: \"32\",\n height: \"32\",\n src: templateIcon\n });\n }\n return iconsByType[concreteType];\n },\n getTypeLabel: element => {\n const elementTemplates = getTemplatesService();\n if (elementTemplates) {\n const template = getTemplate(element, elementTemplates);\n if (template && template.name) {\n return translate(template.name);\n }\n }\n const concreteType = getConcreteType(element);\n return translate(concreteType.replace(/(\\B[A-Z])/g, ' $1').replace(/(\\bNon Interrupting)/g, '($1)'));\n }\n };\n};\n\n// helpers ///////////////////////\n\nfunction isCancelActivity(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return businessObject && businessObject.cancelActivity !== false;\n}\nfunction getEventDefinition$2(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n eventDefinitions = businessObject.eventDefinitions;\n return eventDefinitions && eventDefinitions[0];\n}\nfunction getRawType(type) {\n return type.split(':')[1];\n}\nfunction getEventDefinitionPrefix(eventDefinition) {\n const rawType = getRawType(eventDefinition.$type);\n return rawType.replace('EventDefinition', '');\n}\nfunction isDefaultFlow(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const sourceBusinessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element.source);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow') || !sourceBusinessObject) {\n return false;\n }\n return sourceBusinessObject.default && sourceBusinessObject.default === businessObject && ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(sourceBusinessObject, 'bpmn:Gateway') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(sourceBusinessObject, 'bpmn:Activity'));\n}\nfunction isConditionalFlow(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const sourceBusinessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element.source);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow') || !sourceBusinessObject) {\n return false;\n }\n return businessObject.conditionExpression && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(sourceBusinessObject, 'bpmn:Activity');\n}\nfunction isPlane(element) {\n // Backwards compatibility for bpmn-js<8\n const di = element && (element.di || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).di);\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(di, 'bpmndi:BPMNPlane');\n}\nfunction getTemplatesService() {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useService('elementTemplates', false);\n}\nfunction getTemplate(element, elementTemplates) {\n return elementTemplates.get(element);\n}\nfunction getTemplateDocumentation(element, elementTemplates) {\n const template = getTemplate(element, elementTemplates);\n return template && template.documentationRef;\n}\n\nfunction _extends$1() { return _extends$1 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1.apply(null, arguments); }\nvar EmptyIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: \"64\",\n height: \"64\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"defs\", null, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"rect\", {\n id: \"a\",\n width: \"57\",\n height: \"47\",\n x: \"3\",\n y: \"8\",\n rx: \"7\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"mask\", {\n id: \"b\",\n width: \"57\",\n height: \"47\",\n x: \"0\",\n y: \"0\",\n fill: \"#fff\",\n maskContentUnits: \"userSpaceOnUse\",\n maskUnits: \"objectBoundingBox\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"use\", {\n xlinkHref: \"#a\"\n}))), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M52 11a5 5 0 015 5v31a5 5 0 01-5 5H11a5 5 0 01-5-5V16a5 5 0 015-5h41zm0 2H11a3 3 0 00-2.995 2.824L8 16v31a3 3 0 002.824 2.995L11 50h41a3 3 0 002.995-2.824L55 47V16a3 3 0 00-2.824-2.995L52 13z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#D5D7DD\",\n d: \"M16 24h31v6H16zM21 33h21v6H21z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"use\", {\n stroke: \"#B9BCC6\",\n strokeDasharray: \"5 2\",\n strokeWidth: \"2\",\n mask: \"url(#b)\",\n xlinkHref: \"#a\"\n})));\n\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nvar MultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: \"128\",\n height: \"64\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"defs\", null, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n id: \"a\",\n d: \"M9 9h110v47H9z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"mask\", {\n id: \"b\",\n width: \"110\",\n height: \"47\",\n x: \"0\",\n y: \"0\",\n fill: \"#fff\",\n maskContentUnits: \"userSpaceOnUse\",\n maskUnits: \"objectBoundingBox\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"use\", {\n xlinkHref: \"#a\"\n}))), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M25 20.272L37.728 33 25 45.728 12.272 33 25 20.272zm0 2.829L15.1 33l9.9 9.9 9.9-9.9-9.9-9.9z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#D5D7DD\",\n d: \"M17 47h16v6H17z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M35 32h27v2H35z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M60 30v6l6-3z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#D5D7DD\",\n d: \"M80 34h21v6H80z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"g\", null, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M111 12a5 5 0 015 5v31a5 5 0 01-5 5H70a5 5 0 01-5-5V17a5 5 0 015-5h41zm0 2H70a3 3 0 00-3 3v31a3 3 0 003 3h41a3 3 0 003-3V17a3 3 0 00-3-3z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#D5D7DD\",\n d: \"M75 25h31v6H75z\"\n})), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"use\", {\n stroke: \"#B9BCC6\",\n strokeDasharray: \"5 2\",\n strokeWidth: \"2\",\n mask: \"url(#b)\",\n xlinkHref: \"#a\"\n})));\n\nconst PanelPlaceholderProvider = translate => {\n if (!translate) translate = text => text;\n return {\n getEmpty: () => {\n return {\n text: translate('Select an element to edit its properties.'),\n icon: EmptyIcon\n };\n },\n getMultiple: () => {\n return {\n text: translate('Multiple elements are selected. Select a single element to edit its properties.'),\n icon: MultipleIcon\n };\n }\n };\n};\n\nfunction BpmnPropertiesPanel(props) {\n const {\n element,\n injector,\n getProviders,\n layoutConfig: initialLayoutConfig,\n descriptionConfig,\n tooltipConfig,\n feelPopupContainer,\n getFeelPopupLinks\n } = props;\n const canvas = injector.get('canvas');\n const elementRegistry = injector.get('elementRegistry');\n const eventBus = injector.get('eventBus');\n const translate = injector.get('translate');\n const [state, setState] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)({\n selectedElement: element\n });\n const selectedElement = state.selectedElement;\n\n /**\n * @param {djs.model.Base | Array} element\n */\n const _update = element => {\n if (!element) {\n return;\n }\n let newSelectedElement = element;\n\n // handle labels\n if (newSelectedElement && newSelectedElement.type === 'label') {\n newSelectedElement = newSelectedElement.labelTarget;\n }\n setState({\n ...state,\n selectedElement: newSelectedElement\n });\n\n // notify interested parties on property panel updates\n eventBus.fire('propertiesPanel.updated', {\n element: newSelectedElement\n });\n };\n\n // (2) react on element changes\n\n // (2a) selection changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onSelectionChanged = e => {\n const {\n newSelection = []\n } = e;\n if (newSelection.length > 1) {\n return _update(newSelection);\n }\n const newElement = newSelection[0];\n const rootElement = canvas.getRootElement();\n if (isImplicitRoot$1(rootElement)) {\n return;\n }\n _update(newElement || rootElement);\n };\n eventBus.on('selection.changed', onSelectionChanged);\n return () => {\n eventBus.off('selection.changed', onSelectionChanged);\n };\n }, []);\n\n // (2b) selected element changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onElementsChanged = e => {\n const elements = e.elements;\n const updatedElement = findElement(elements, selectedElement);\n if (updatedElement && elementExists(updatedElement, elementRegistry)) {\n _update(updatedElement);\n }\n };\n eventBus.on('elements.changed', onElementsChanged);\n return () => {\n eventBus.off('elements.changed', onElementsChanged);\n };\n }, [selectedElement]);\n\n // (2c) root element changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onRootAdded = e => {\n const element = e.element;\n _update(element);\n };\n eventBus.on('root.added', onRootAdded);\n return () => {\n eventBus.off('root.added', onRootAdded);\n };\n }, [selectedElement]);\n\n // (2d) provided entries changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onProvidersChanged = () => {\n _update(selectedElement);\n };\n eventBus.on('propertiesPanel.providersChanged', onProvidersChanged);\n return () => {\n eventBus.off('propertiesPanel.providersChanged', onProvidersChanged);\n };\n }, [selectedElement]);\n\n // (2e) element templates changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onTemplatesChanged = () => {\n _update(selectedElement);\n };\n eventBus.on('elementTemplates.changed', onTemplatesChanged);\n return () => {\n eventBus.off('elementTemplates.changed', onTemplatesChanged);\n };\n }, [selectedElement]);\n\n // (3) create properties panel context\n const bpmnPropertiesPanelContext = {\n selectedElement,\n injector,\n getService(type, strict) {\n return injector.get(type, strict);\n }\n };\n\n // (4) retrieve groups for selected element\n const providers = getProviders(selectedElement);\n const groups = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.reduce)(providers, function (groups, provider) {\n // do not collect groups for multi element state\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isArray)(selectedElement)) {\n return [];\n }\n const updater = provider.getGroups(selectedElement);\n return updater(groups);\n }, []);\n }, [providers, selectedElement]);\n\n // (5) notify layout changes\n const [layoutConfig, setLayoutConfig] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(initialLayoutConfig || {});\n const onLayoutChanged = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newLayout => {\n eventBus.fire('propertiesPanel.layoutChanged', {\n layout: newLayout\n });\n }, [eventBus]);\n\n // React to external layout changes\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const cb = e => {\n const {\n layout\n } = e;\n setLayoutConfig(layout);\n };\n eventBus.on('propertiesPanel.setLayout', cb);\n return () => eventBus.off('propertiesPanel.setLayout', cb);\n }, [eventBus, setLayoutConfig]);\n\n // (6) notify description changes\n const onDescriptionLoaded = description => {\n eventBus.fire('propertiesPanel.descriptionLoaded', {\n description\n });\n };\n\n // (7) notify tooltip changes\n const onTooltipLoaded = tooltip => {\n eventBus.fire('propertiesPanel.tooltipLoaded', {\n tooltip\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(BpmnPropertiesPanelContext.Provider, {\n value: bpmnPropertiesPanelContext,\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.PropertiesPanel, {\n element: selectedElement,\n headerProvider: PanelHeaderProvider(translate),\n placeholderProvider: PanelPlaceholderProvider(translate),\n groups: groups,\n layoutConfig: layoutConfig,\n layoutChanged: onLayoutChanged,\n descriptionConfig: descriptionConfig,\n descriptionLoaded: onDescriptionLoaded,\n tooltipConfig: tooltipConfig,\n tooltipLoaded: onTooltipLoaded,\n feelPopupContainer: feelPopupContainer,\n getFeelPopupLinks: getFeelPopupLinks,\n eventBus: eventBus\n })\n });\n}\n\n// helpers //////////////////////////\n\nfunction isImplicitRoot$1(element) {\n return element && element.isImplicit;\n}\nfunction findElement(elements, element) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.find)(elements, e => e === element);\n}\nfunction elementExists(element, elementRegistry) {\n return element && elementRegistry.get(element.id);\n}\n\nconst DEFAULT_PRIORITY = 1000;\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').GroupDefinition } GroupDefinition\n * @typedef { import('@bpmn-io/properties-panel').ListGroupDefinition } ListGroupDefinition\n * @typedef { { getGroups: (ModdleElement) => (Array{GroupDefinition|ListGroupDefinition}) => Array{GroupDefinition|ListGroupDefinition}) } PropertiesProvider\n */\n\nclass BpmnPropertiesPanelRenderer {\n constructor(config, injector, eventBus) {\n const {\n parent,\n layout: layoutConfig,\n description: descriptionConfig,\n tooltip: tooltipConfig,\n feelPopupContainer,\n getFeelPopupLinks\n } = config || {};\n this._eventBus = eventBus;\n this._injector = injector;\n this._layoutConfig = layoutConfig;\n this._descriptionConfig = descriptionConfig;\n this._tooltipConfig = tooltipConfig;\n this._feelPopupContainer = feelPopupContainer;\n this._getFeelPopupLinks = getFeelPopupLinks;\n this._container = (0,min_dom__WEBPACK_IMPORTED_MODULE_13__.domify)('
');\n var commandStack = injector.get('commandStack', false);\n commandStack && setupKeyboard(this._container, eventBus, commandStack);\n eventBus.on('diagram.init', () => {\n if (parent) {\n this.attachTo(parent);\n }\n });\n eventBus.on('diagram.destroy', () => {\n this.detach();\n });\n eventBus.on('root.added', event => {\n const {\n element\n } = event;\n this._render(element);\n });\n }\n\n /**\n * Attach the properties panel to a parent node.\n *\n * @param {HTMLElement} container\n */\n attachTo(container) {\n if (!container) {\n throw new Error('container required');\n }\n\n // unwrap jQuery if provided\n if (container.get && container.constructor.prototype.jquery) {\n container = container.get(0);\n }\n if (typeof container === 'string') {\n container = (0,min_dom__WEBPACK_IMPORTED_MODULE_13__.query)(container);\n }\n\n // (1) detach from old parent\n this.detach();\n\n // (2) append to parent container\n container.appendChild(this._container);\n\n // (3) notify interested parties\n this._eventBus.fire('propertiesPanel.attach');\n }\n\n /**\n * Detach the properties panel from its parent node.\n */\n detach() {\n const parentNode = this._container.parentNode;\n if (parentNode) {\n parentNode.removeChild(this._container);\n this._eventBus.fire('propertiesPanel.detach');\n }\n }\n\n /**\n * Register a new properties provider to the properties panel.\n *\n * @param {Number} [priority]\n * @param {PropertiesProvider} provider\n */\n registerProvider(priority, provider) {\n if (!provider) {\n provider = priority;\n priority = DEFAULT_PRIORITY;\n }\n if (typeof provider.getGroups !== 'function') {\n console.error('Properties provider does not implement #getGroups(element) API');\n return;\n }\n this._eventBus.on('propertiesPanel.getProviders', priority, function (event) {\n event.providers.push(provider);\n });\n this._eventBus.fire('propertiesPanel.providersChanged');\n }\n\n /**\n * Updates the layout of the properties panel.\n * @param {Object} layout\n */\n setLayout(layout) {\n this._eventBus.fire('propertiesPanel.setLayout', {\n layout\n });\n }\n _getProviders() {\n const event = this._eventBus.createEvent({\n type: 'propertiesPanel.getProviders',\n providers: []\n });\n this._eventBus.fire(event);\n return event.providers;\n }\n _render(element) {\n const canvas = this._injector.get('canvas');\n if (!element) {\n element = canvas.getRootElement();\n }\n if (isImplicitRoot(element)) {\n return;\n }\n (0,_bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_2__.render)((0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(BpmnPropertiesPanel, {\n element: element,\n injector: this._injector,\n getProviders: this._getProviders.bind(this),\n layoutConfig: this._layoutConfig,\n descriptionConfig: this._descriptionConfig,\n tooltipConfig: this._tooltipConfig,\n feelPopupContainer: this._feelPopupContainer,\n getFeelPopupLinks: this._getFeelPopupLinks\n }), this._container);\n this._eventBus.fire('propertiesPanel.rendered');\n }\n _destroy() {\n if (this._container) {\n (0,_bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_2__.render)(null, this._container);\n this._eventBus.fire('propertiesPanel.destroyed');\n }\n }\n}\nBpmnPropertiesPanelRenderer.$inject = ['config.propertiesPanel', 'injector', 'eventBus'];\n\n// helpers ///////////////////////\n\nfunction isImplicitRoot(element) {\n return element && element.isImplicit;\n}\n\n/**\n * Setup keyboard bindings (undo, redo) on the given container.\n *\n * @param {Element} container\n * @param {EventBus} eventBus\n * @param {CommandStack} commandStack\n */\nfunction setupKeyboard(container, eventBus, commandStack) {\n function cancel(event) {\n event.preventDefault();\n event.stopPropagation();\n }\n function handleKeys(event) {\n if ((0,diagram_js_lib_features_keyboard_KeyboardUtil__WEBPACK_IMPORTED_MODULE_14__.isUndo)(event)) {\n commandStack.undo();\n return cancel(event);\n }\n if ((0,diagram_js_lib_features_keyboard_KeyboardUtil__WEBPACK_IMPORTED_MODULE_14__.isRedo)(event)) {\n commandStack.redo();\n return cancel(event);\n }\n }\n eventBus.on('keyboard.bind', function () {\n min_dom__WEBPACK_IMPORTED_MODULE_13__.event.bind(container, 'keydown', handleKeys);\n });\n eventBus.on('keyboard.unbind', function () {\n min_dom__WEBPACK_IMPORTED_MODULE_13__.event.unbind(container, 'keydown', handleKeys);\n });\n}\n\n/**\n * A handler that combines and executes multiple commands.\n *\n * All updates are bundled on the command stack and executed in one step.\n * This also makes it possible to revert the changes in one step.\n *\n * Example use case: remove the camunda:formKey attribute and in addition\n * add all form fields needed for the camunda:formData property.\n */\nclass MultiCommandHandler {\n constructor(commandStack) {\n this._commandStack = commandStack;\n }\n preExecute(context) {\n const commandStack = this._commandStack;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.forEach)(context, function (command) {\n commandStack.execute(command.cmd, command.context);\n });\n }\n}\nMultiCommandHandler.$inject = ['commandStack'];\n\nconst HANDLERS = {\n 'properties-panel.multi-command-executor': MultiCommandHandler\n};\nfunction CommandInitializer(eventBus, commandStack) {\n eventBus.on('diagram.init', function () {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.forEach)(HANDLERS, function (handler, id) {\n commandStack.registerHandler(id, handler);\n });\n });\n}\nCommandInitializer.$inject = ['eventBus', 'commandStack'];\nvar Commands = {\n __init__: [CommandInitializer]\n};\n\nvar index$3 = {\n __depends__: [Commands, _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.DebounceInputModule, _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.FeelPopupModule],\n __init__: ['propertiesPanel'],\n propertiesPanel: ['type', BpmnPropertiesPanelRenderer]\n};\n\nfunction ReferenceSelectEntry(props) {\n const {\n autoFocusEntry,\n element,\n getOptions\n } = props;\n const options = getOptions(element);\n const prevOptions = (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.usePrevious)(options);\n\n // auto focus specifc other entry when options changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (autoFocusEntry && prevOptions && options.length > prevOptions.length) {\n const entry = (0,min_dom__WEBPACK_IMPORTED_MODULE_13__.query)(`[data-entry-id=\"${autoFocusEntry}\"]`);\n const focusableInput = (0,min_dom__WEBPACK_IMPORTED_MODULE_13__.query)('.bio-properties-panel-input', entry);\n if (focusableInput) {\n focusableInput.select();\n }\n }\n }, [options]);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n ...props\n });\n}\n\nfunction isErrorSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:StartEvent', 'bpmn:BoundaryEvent', 'bpmn:EndEvent']) && !!getErrorEventDefinition$1(element);\n}\nfunction getErrorEventDefinition$1(element) {\n return getEventDefinition$1(element, 'bpmn:ErrorEventDefinition');\n}\nfunction getTimerEventDefinition$1(element) {\n return getEventDefinition$1(element, 'bpmn:TimerEventDefinition');\n}\nfunction getError(element) {\n const errorEventDefinition = getErrorEventDefinition$1(element);\n return errorEventDefinition && errorEventDefinition.get('errorRef');\n}\nfunction getEventDefinition$1(element, eventType) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const eventDefinitions = businessObject.get('eventDefinitions') || [];\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.find)(eventDefinitions, function (definition) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(definition, eventType);\n });\n}\nfunction isMessageSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ReceiveTask') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:StartEvent', 'bpmn:EndEvent', 'bpmn:IntermediateThrowEvent', 'bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent']) && !!getMessageEventDefinition(element);\n}\nfunction getMessageEventDefinition(element) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ReceiveTask')) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n }\n return getEventDefinition$1(element, 'bpmn:MessageEventDefinition');\n}\nfunction getMessage(element) {\n const messageEventDefinition = getMessageEventDefinition(element);\n return messageEventDefinition && messageEventDefinition.get('messageRef');\n}\nfunction getLinkEventDefinition(element) {\n return getEventDefinition$1(element, 'bpmn:LinkEventDefinition');\n}\nfunction getSignalEventDefinition$1(element) {\n return getEventDefinition$1(element, 'bpmn:SignalEventDefinition');\n}\nfunction isLinkSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:IntermediateThrowEvent', 'bpmn:IntermediateCatchEvent']) && !!getLinkEventDefinition(element);\n}\nfunction isSignalSupported$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Event') && !!getSignalEventDefinition$1(element);\n}\nfunction getSignal$1(element) {\n const signalEventDefinition = getSignalEventDefinition$1(element);\n return signalEventDefinition && signalEventDefinition.get('signalRef');\n}\nfunction getEscalationEventDefinition(element) {\n return getEventDefinition$1(element, 'bpmn:EscalationEventDefinition');\n}\nfunction isEscalationSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Event') && !!getEscalationEventDefinition(element);\n}\nfunction getEscalation(element) {\n const escalationEventDefinition = getEscalationEventDefinition(element);\n return escalationEventDefinition && escalationEventDefinition.get('escalationRef');\n}\nfunction isCompensationSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent']) && !!getCompensateEventDefinition$1(element);\n}\nfunction getCompensateEventDefinition$1(element) {\n return getEventDefinition$1(element, 'bpmn:CompensateEventDefinition');\n}\nfunction getCompensateActivity(element) {\n const compensateEventDefinition = getCompensateEventDefinition$1(element);\n return compensateEventDefinition && compensateEventDefinition.get('activityRef');\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction CompensationProps(props) {\n const {\n element\n } = props;\n if (!isCompensationSupported(element)) {\n return [];\n }\n return [{\n id: 'waitForCompletion',\n component: WaitForCompletion,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }, {\n id: 'activityRef',\n component: ActivityRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n}\nfunction WaitForCompletion(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const compensateEventDefinition = getCompensateEventDefinition$1(element);\n const getValue = () => {\n return compensateEventDefinition.get('waitForCompletion');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: compensateEventDefinition,\n properties: {\n waitForCompletion: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'waitForCompletion',\n label: translate('Wait for completion'),\n getValue,\n setValue\n });\n}\nfunction ActivityRef(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const elementRegistry = useService('elementRegistry');\n const translate = useService('translate');\n const compensateEventDefinition = getCompensateEventDefinition$1(element);\n const getValue = () => {\n const activityRef = getCompensateActivity(element);\n return activityRef && activityRef.get('id');\n };\n const setValue = value => {\n // update (or remove) activityRef\n const activityRef = value ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(elementRegistry.get(value)) : undefined;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: compensateEventDefinition,\n properties: {\n activityRef\n }\n });\n };\n const getOptions = () => {\n let options = [{\n value: '',\n label: translate('')\n }];\n const activities = findActivityRefs(element);\n sortByName$6(activities).forEach(function (activity) {\n options.push({\n value: activity.id,\n label: createOptionLabel(activity)\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'activityRef',\n label: translate('Activity reference'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n// helper /////////////////////////\n\nfunction getFlowElements(element, type) {\n const {\n flowElements\n } = element;\n return flowElements.filter(function (flowElement) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(flowElement, type);\n });\n}\nfunction getContainedActivities(element) {\n return getFlowElements(element, 'bpmn:Activity');\n}\nfunction getContainedBoundaryEvents(element) {\n return getFlowElements(element, 'bpmn:BoundaryEvent');\n}\n\n/**\n * Checks whether an Activity is attaching a CompensateEvent of the parent container.\n *\n * @param {ModdleElement} activity\n * @param {Array} boundaryEvents\n * @returns {Boolean}\n */\nfunction hasCompensationEventAttached(activity, boundaryEvents) {\n const {\n id: activityId\n } = activity;\n return !!(0,min_dash__WEBPACK_IMPORTED_MODULE_12__.find)(boundaryEvents, function (boundaryEvent) {\n const {\n attachedToRef\n } = boundaryEvent;\n const compensateEventDefinition = getCompensateEventDefinition$1(boundaryEvent);\n return attachedToRef && compensateEventDefinition && attachedToRef.id === activityId;\n });\n}\n\n/**\n * Checks whether an Activity can be compensated. That's the case when it is\n * a) a CallActivity\n * b) a SubProcess, when it is not event based and not a compensation\n * c) any other Activity, when it is attaching a CompensateEvent of the parent container\n *\n * @param {ModdleElement} activity\n * @param {Array} boundaryEvents\n * @returns {Boolean}\n */\nfunction canBeCompensated(activity, boundaryEvents) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(activity, 'bpmn:CallActivity') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(activity, 'bpmn:SubProcess') && !activity.triggeredByEvent && !activity.isForCompensation || hasCompensationEventAttached(activity, boundaryEvents);\n}\nfunction getActivitiesForCompensation(element) {\n const activities = getContainedActivities(element);\n const boundaryEvents = getContainedBoundaryEvents(element);\n return activities.filter(function (activity) {\n return canBeCompensated(activity, boundaryEvents);\n });\n}\n\n/**\n * Retrieves all possible activities to reference for a Compensation.\n *\n * @param {djs.model.Base} element\n * @returns {Array}\n */\nfunction findActivityRefs(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let parent = businessObject.$parent;\n\n // (1) get all activities in parent container\n let activities = getActivitiesForCompensation(parent);\n\n // (2) if throwing compensation event is inside an EventSubProcess,\n // also get all activities outside of the event sub process\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parent, 'bpmn:SubProcess') && parent.triggeredByEvent) {\n parent = parent.$parent;\n if (parent) {\n activities = [...activities, ...getActivitiesForCompensation(parent)];\n }\n }\n return activities;\n}\n\n/**\n * Retrieves an option label in the form\n * a) with name: \"my Task (id=Task_1)\"\n * b) without name: \"(id=Task_1)\"\n *\n * @param {ModdleElement} activity\n * @returns {String}\n */\nfunction createOptionLabel(activity) {\n const {\n id,\n name\n } = activity;\n return `${name ? name + ' ' : ''}(id=${id})`;\n}\nfunction sortByName$6(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nconst DOCUMENTATION_TEXT_FORMAT = 'text/plain';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction DocumentationProps(props) {\n const {\n element\n } = props;\n const entries = [{\n id: 'documentation',\n component: ElementDocumentationProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited\n }];\n if (hasProcessRef$3(element)) {\n entries.push({\n id: 'processDocumentation',\n component: ProcessDocumentationProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited\n });\n }\n return entries;\n}\nfunction ElementDocumentationProperty(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = getDocumentation((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element));\n const setValue = setDocumentation(element, (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), bpmnFactory, commandStack);\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element,\n id: 'documentation',\n label: translate('Element documentation'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ProcessDocumentationProperty(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const processRef = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).processRef;\n const getValue = getDocumentation(processRef);\n const setValue = setDocumentation(element, processRef, bpmnFactory, commandStack);\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element,\n id: 'processDocumentation',\n label: translate('Process documentation'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ////////////////////////////\n\nfunction hasProcessRef$3(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && element.businessObject.get('processRef');\n}\nfunction findDocumentation(docs) {\n return docs.find(function (d) {\n return (d.textFormat || DOCUMENTATION_TEXT_FORMAT) === DOCUMENTATION_TEXT_FORMAT;\n });\n}\n\n/**\n * Retrieves a documentation element from a given moddle element.\n *\n * @param {ModdleElement} businessObject\n *\n * @returns {ModdleElement} documentation element inside the given moddle element.\n */\nfunction getDocumentation(businessObject) {\n return function () {\n const documentation = findDocumentation(businessObject && businessObject.get('documentation'));\n return documentation && documentation.text;\n };\n}\n\n/**\n * Sets a documentation element for a given moddle element.\n *\n * @param {ModdleElement} businessObject\n */\nfunction setDocumentation(element, businessObject, bpmnFactory, commandStack) {\n return function (value) {\n let documentation = findDocumentation(businessObject && businessObject.get('documentation'));\n\n // (1) update or removing existing documentation\n if (documentation) {\n if (value) {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: documentation,\n properties: {\n text: value\n }\n });\n } else {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n documentation: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(businessObject.get('documentation'), documentation)\n }\n });\n }\n }\n\n // (2) create new documentation entry\n if (value) {\n documentation = bpmnFactory.create('bpmn:Documentation', {\n text: value\n });\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n documentation: [...businessObject.get('documentation'), documentation]\n }\n });\n }\n };\n}\n\n/**\n * Create a new element and (optionally) set its parent.\n *\n * @param {string} type\n * @param {Object} properties\n * @param {import('bpmn-js/lib/model/Types').ModdleElement} parent\n * @param {import('bpmn-js/lib/features/modeling/BpmnFactory').default} bpmnFactory\n *\n * @returns {import('bpmn-js/lib/model/Types').ModdleElement}\n */\nfunction createElement(type, properties, parent, bpmnFactory) {\n const element = bpmnFactory.create(type, properties);\n if (parent) {\n element.$parent = parent;\n }\n return element;\n}\n\n/**\n * generate a semantic id with given prefix\n */\nfunction nextId(prefix) {\n const ids = new ids__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([32, 32, 1]);\n return ids.nextPrefixed(prefix);\n}\nfunction getRoot(businessObject) {\n let parent = businessObject;\n while (parent.$parent) {\n parent = parent.$parent;\n }\n return parent;\n}\nfunction filterElementsByType(objectList, type) {\n const list = objectList || [];\n return list.filter(element => (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, type));\n}\nfunction findRootElementsByType(businessObject, referencedType) {\n const root = getRoot(businessObject);\n return filterElementsByType(root.get('rootElements'), referencedType);\n}\nfunction findRootElementById(businessObject, type, id) {\n const elements = findRootElementsByType(businessObject, type);\n return elements.find(element => element.id === id);\n}\n\nconst EMPTY_OPTION$4 = '';\nconst CREATE_NEW_OPTION$4 = 'create-new';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction ErrorProps$2(props) {\n const {\n element\n } = props;\n if (!isErrorSupported(element)) {\n return [];\n }\n const error = getError(element);\n let entries = [{\n id: 'errorRef',\n component: ErrorRef$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (error) {\n entries = [...entries, {\n id: 'errorName',\n component: ErrorName$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'errorCode',\n component: ErrorCode$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n }\n return entries;\n}\nfunction ErrorRef$1(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const errorEventDefinition = getErrorEventDefinition$1(element);\n const getValue = () => {\n const error = getError(element);\n if (error) {\n return error.get('id');\n }\n return EMPTY_OPTION$4;\n };\n const setValue = value => {\n const root = getRoot(errorEventDefinition);\n const commands = [];\n let error;\n\n // (1) create new error\n if (value === CREATE_NEW_OPTION$4) {\n error = createElement('bpmn:Error', {\n name: nextId('Error_')\n }, root, bpmnFactory);\n value = error.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), error]\n }\n }\n });\n }\n\n // (2) update (or remove) errorRef\n error = error || findRootElementById(errorEventDefinition, 'bpmn:Error', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: errorEventDefinition,\n properties: {\n errorRef: error\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION$4,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION$4,\n label: translate('Create new ...')\n }];\n const errors = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Error');\n sortByName$5(errors).forEach(error => {\n options.push({\n value: error.get('id'),\n label: error.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'errorRef',\n label: translate('Global error reference'),\n autoFocusEntry: 'errorName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction ErrorName$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const error = getError(element);\n const getValue = () => {\n return error.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'errorName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ErrorCode$2(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const error = getError(element);\n const getValue = () => {\n return error.get('errorCode');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n errorCode: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'errorCode',\n label: translate('Code'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper /////////////////////////\n\nfunction sortByName$5(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nconst CREATE_NEW_OPTION$3 = 'create-new';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction EscalationProps$2(props) {\n const {\n element\n } = props;\n if (!isEscalationSupported(element)) {\n return [];\n }\n const escalation = getEscalation(element);\n let entries = [{\n id: 'escalationRef',\n component: EscalationRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (escalation) {\n entries = [...entries, {\n id: 'escalationName',\n component: EscalationName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'escalationCode',\n component: EscalationCode$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n }\n return entries;\n}\nfunction EscalationRef(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const escalationEventDefinition = getEscalationEventDefinition(element);\n const getValue = () => {\n const escalation = getEscalation(element);\n return escalation && escalation.get('id');\n };\n const setValue = value => {\n const root = getRoot(escalationEventDefinition);\n const commands = [];\n let escalation;\n\n // (1) create new escalation\n if (value === CREATE_NEW_OPTION$3) {\n const id = nextId('Escalation_');\n escalation = createElement('bpmn:Escalation', {\n id,\n name: id\n }, root, bpmnFactory);\n value = escalation.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), escalation]\n }\n }\n });\n }\n\n // (2) update (or remove) escalationRef\n escalation = escalation || findRootElementById(escalationEventDefinition, 'bpmn:Escalation', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: escalationEventDefinition,\n properties: {\n escalationRef: escalation\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: '',\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION$3,\n label: translate('Create new ...')\n }];\n const escalations = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Escalation');\n sortByName$4(escalations).forEach(escalation => {\n options.push({\n value: escalation.get('id'),\n label: escalation.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'escalationRef',\n label: translate('Global escalation reference'),\n autoFocusEntry: 'escalationName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction EscalationName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const escalation = getEscalation(element);\n const getValue = () => {\n return escalation.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: escalation,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'escalationName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction EscalationCode$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const escalation = getEscalation(element);\n const getValue = () => {\n return escalation.get('escalationCode');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: escalation,\n properties: {\n escalationCode: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'escalationCode',\n label: translate('Code'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper /////////////////////////\n\nfunction sortByName$4(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction ExecutableProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') && !hasProcessRef$2(element)) {\n return [];\n }\n return [{\n id: 'isExecutable',\n component: Executable,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }];\n}\nfunction Executable(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n let getValue, setValue;\n setValue = value => {\n modeling.updateProperties(element, {\n isExecutable: value\n });\n };\n getValue = element => {\n return element.businessObject.isExecutable;\n };\n\n // handle properties on processRef level for participants\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n const process = element.businessObject.get('processRef');\n setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n isExecutable: value\n }\n });\n };\n getValue = () => {\n return process.get('isExecutable');\n };\n }\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'isExecutable',\n label: translate('Executable'),\n getValue,\n setValue\n });\n}\n\n// helper /////////////////////\n\nfunction hasProcessRef$2(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && element.businessObject.get('processRef');\n}\n\nconst SPACE_REGEX = /\\s/;\n\n// for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar\nconst QNAME_REGEX = /^([a-z][\\w-.]*:)?[a-z_][\\w-.]*$/i;\n\n// for ID validation as per BPMN Schema (QName - Namespace)\nconst ID_REGEX = /^[a-z_][\\w-.]*$/i;\n\n/**\n * checks whether the id value is valid\n *\n * @param {ModdleElement} element\n * @param {String} idValue\n * @param {Function} translate\n *\n * @return {String} error message\n */\nfunction isIdValid(element, idValue, translate) {\n const assigned = element.$model.ids.assigned(idValue);\n const idAlreadyExists = assigned && assigned !== element;\n if (!idValue) {\n return translate('ID must not be empty.');\n }\n if (idAlreadyExists) {\n return translate('ID must be unique.');\n }\n return validateId(idValue, translate);\n}\nfunction validateId(idValue, translate) {\n if (containsSpace(idValue)) {\n return translate('ID must not contain spaces.');\n }\n if (!ID_REGEX.test(idValue)) {\n if (QNAME_REGEX.test(idValue)) {\n return translate('ID must not contain prefix.');\n }\n return translate('ID must be a valid QName.');\n }\n}\nfunction containsSpace(value) {\n return SPACE_REGEX.test(value);\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction IdProps$1() {\n return [{\n id: 'id',\n component: Id$4,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction Id$4(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const debounce = useService('debounceInput');\n const translate = useService('translate');\n const setValue = (value, error) => {\n if (error) {\n return;\n }\n modeling.updateProperties(element, {\n id: value\n });\n };\n const getValue = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(element => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).id;\n }, [element]);\n const validate = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(value => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return isIdValid(businessObject, value, translate);\n }, [element, translate]);\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'id',\n label: translate((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') ? 'Participant ID' : 'ID'),\n getValue,\n setValue,\n debounce,\n validate\n });\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction LinkProps(props) {\n const {\n element\n } = props;\n if (!isLinkSupported(element)) {\n return [];\n }\n return [{\n id: 'linkName',\n component: LinkName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction LinkName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const linkEventDefinition = getLinkEventDefinition(element);\n const getValue = () => {\n return linkEventDefinition.get('name');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: linkEventDefinition,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'linkName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\n\nconst EMPTY_OPTION$3 = '';\nconst CREATE_NEW_OPTION$2 = 'create-new';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction MessageProps$1(props) {\n const {\n element\n } = props;\n if (!isMessageSupported(element)) {\n return [];\n }\n const message = getMessage(element);\n let entries = [{\n id: 'messageRef',\n component: MessageRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (message) {\n entries = [...entries, {\n id: 'messageName',\n component: MessageName$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n }\n return entries;\n}\nfunction MessageRef(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const messageEventDefinition = getMessageEventDefinition(element);\n const getValue = () => {\n const message = getMessage(element);\n if (message) {\n return message.get('id');\n }\n return EMPTY_OPTION$3;\n };\n const setValue = value => {\n const root = getRoot(messageEventDefinition);\n const commands = [];\n let message;\n\n // (1) create new message\n if (value === CREATE_NEW_OPTION$2) {\n const id = nextId('Message_');\n message = createElement('bpmn:Message', {\n id,\n name: id\n }, root, bpmnFactory);\n value = message.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), message]\n }\n }\n });\n }\n\n // (2) update (or remove) messageRef\n message = message || findRootElementById(messageEventDefinition, 'bpmn:Message', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: messageEventDefinition,\n properties: {\n messageRef: message\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION$3,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION$2,\n label: translate('Create new ...')\n }];\n const messages = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Message');\n sortByName$3(messages).forEach(message => {\n options.push({\n value: message.get('id'),\n label: message.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'messageRef',\n label: translate('Global message reference'),\n autoFocusEntry: 'messageName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction MessageName$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const message = getMessage(element);\n const getValue = () => {\n return message.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: message,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'messageName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper /////////////////////////\n\nfunction sortByName$3(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction MultiInstanceProps$2(props) {\n const {\n element\n } = props;\n if (!isMultiInstanceSupported$1(element)) {\n return [];\n }\n const entries = [{\n id: 'loopCardinality',\n component: LoopCardinality,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'completionCondition',\n component: CompletionCondition$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n return entries;\n}\nfunction LoopCardinality(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const debounce = useService('debounceInput');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getLoopCardinalityValue(element);\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', updateFormalExpression(element, 'loopCardinality', value, bpmnFactory));\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'loopCardinality',\n label: translate('Loop cardinality'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction CompletionCondition$1(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const debounce = useService('debounceInput');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getCompletionConditionValue(element);\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', updateFormalExpression(element, 'completionCondition', value, bpmnFactory));\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'completionCondition',\n label: translate('Completion condition'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ////////////////////////////\n\n// generic ///////////////////////////\n\n/**\n * isMultiInstanceSupported - check whether given element supports MultiInstanceLoopCharacteristics.\n *\n * @param {djs.model.Base} element\n * @return {boolean}\n */\nfunction isMultiInstanceSupported$1(element) {\n const loopCharacteristics = getLoopCharacteristics$2(element);\n return !!loopCharacteristics && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(loopCharacteristics, 'bpmn:MultiInstanceLoopCharacteristics');\n}\n\n/**\n * getBody - get the body of a given expression.\n *\n * @param {ModdleElement} expression\n * @return {string} the body (value) of the expression\n */\nfunction getBody(expression) {\n return expression && expression.get('body');\n}\n\n/**\n * getProperty - get a property value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n * @param {string} propertyName\n *\n * @return {any} the property value\n */\nfunction getProperty$2(element, propertyName) {\n const loopCharacteristics = getLoopCharacteristics$2(element);\n return loopCharacteristics && loopCharacteristics.get(propertyName);\n}\n\n/**\n * getLoopCharacteristics - get loopCharacteristics of a given element.\n *\n * @param {djs.model.Base} element\n * @return {ModdleElement | undefined}\n */\nfunction getLoopCharacteristics$2(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return bo.loopCharacteristics;\n}\n\n/**\n * createFormalExpression - creates a 'bpmn:FormalExpression' element.\n *\n * @param {ModdleElement} parent\n * @param {string} body\n * @param {BpmnFactory} bpmnFactory\n *\n * @result {ModdleElement} a formal expression\n */\nfunction createFormalExpression$1(parent, body, bpmnFactory) {\n return createElement('bpmn:FormalExpression', {\n body: body\n }, parent, bpmnFactory);\n}\n\n/**\n * updateFormalExpression - updates a specific formal expression of the loop characteristics.\n *\n * @param {djs.model.Base} element\n * @param {string} propertyName\n * @param {string} newValue\n * @param {BpmnFactory} bpmnFactory\n */\nfunction updateFormalExpression(element, propertyName, newValue, bpmnFactory) {\n const loopCharacteristics = getLoopCharacteristics$2(element);\n const expressionProps = {};\n if (!newValue) {\n // remove formal expression\n expressionProps[propertyName] = undefined;\n return {\n element,\n moddleElement: loopCharacteristics,\n properties: expressionProps\n };\n }\n const existingExpression = loopCharacteristics.get(propertyName);\n if (!existingExpression) {\n // add formal expression\n expressionProps[propertyName] = createFormalExpression$1(loopCharacteristics, newValue, bpmnFactory);\n return {\n element,\n moddleElement: loopCharacteristics,\n properties: expressionProps\n };\n }\n\n // edit existing formal expression\n return {\n element,\n moddleElement: existingExpression,\n properties: {\n body: newValue\n }\n };\n}\n\n// loopCardinality\n\n/**\n * getLoopCardinality - get the loop cardinality of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {ModdleElement} an expression representing the loop cardinality\n */\nfunction getLoopCardinality(element) {\n return getProperty$2(element, 'loopCardinality');\n}\n\n/**\n * getLoopCardinalityValue - get the loop cardinality value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {string} the loop cardinality value\n */\nfunction getLoopCardinalityValue(element) {\n const loopCardinality = getLoopCardinality(element);\n return getBody(loopCardinality);\n}\n\n// completionCondition /////////////////////\n\n/**\n * getCompletionCondition - get the completion condition of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {ModdleElement} an expression representing the completion condition\n */\nfunction getCompletionCondition$1(element) {\n return getProperty$2(element, 'completionCondition');\n}\n\n/**\n * getCompletionConditionValue - get the completion condition value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {string} the completion condition value\n */\nfunction getCompletionConditionValue(element) {\n const completionCondition = getCompletionCondition$1(element);\n return getBody(completionCondition);\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction NameProps(props) {\n const {\n element\n } = props;\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:Collaboration', 'bpmn:DataAssociation', 'bpmn:Association'])) {\n return [];\n }\n return [{\n id: 'name',\n component: Name$3,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited\n }];\n}\nfunction Name$3(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const debounce = useService('debounceInput');\n const canvas = useService('canvas');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n\n // (1) default: name\n let options = {\n element,\n id: 'name',\n label: translate('Name'),\n debounce,\n setValue: value => {\n modeling.updateProperties(element, {\n name: value\n });\n },\n getValue: element => {\n return element.businessObject.name;\n },\n autoResize: true\n };\n\n // (2) text annotations\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:TextAnnotation')) {\n options = {\n ...options,\n setValue: value => {\n modeling.updateProperties(element, {\n text: value\n });\n },\n getValue: element => {\n return element.businessObject.text;\n }\n };\n }\n\n // (3) groups\n else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Group')) {\n options = {\n ...options,\n setValue: value => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n categoryValueRef = businessObject.categoryValueRef;\n if (!categoryValueRef) {\n initializeCategory(businessObject, canvas.getRootElement(), bpmnFactory);\n }\n modeling.updateLabel(element, value);\n },\n getValue: element => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n categoryValueRef = businessObject.categoryValueRef;\n return categoryValueRef && categoryValueRef.value;\n }\n };\n }\n\n // (4) participants (only update label)\n else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n options.label = translate('Participant Name');\n }\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)(options);\n}\n\n// helpers ////////////////////////\n\nfunction initializeCategory(businessObject, rootElement, bpmnFactory) {\n const definitions = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(rootElement).$parent;\n const categoryValue = createCategoryValue(definitions, bpmnFactory);\n businessObject.categoryValueRef = categoryValue;\n}\nfunction createCategoryValue(definitions, bpmnFactory) {\n const categoryValue = bpmnFactory.create('bpmn:CategoryValue');\n const category = bpmnFactory.create('bpmn:Category', {\n categoryValue: [categoryValue]\n });\n\n // add to correct place\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_15__.add)(definitions.get('rootElements'), category);\n (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(category).$parent = definitions;\n (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(categoryValue).$parent = category;\n return categoryValue;\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction ProcessProps$1(props) {\n const {\n element\n } = props;\n if (!hasProcessRef$1(element)) {\n return [];\n }\n return [{\n id: 'processId',\n component: ProcessId$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'processName',\n component: ProcessName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction ProcessName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const process = element.businessObject.get('processRef');\n const getValue = () => {\n return process.get('name');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'processName',\n label: translate('Process name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ProcessId$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const process = element.businessObject.get('processRef');\n const getValue = () => {\n return process.get('id');\n };\n const setValue = (value, error) => {\n if (error) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n id: value\n }\n });\n };\n const validate = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(value => {\n return isIdValid(process, value, translate);\n }, [process, translate]);\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'processId',\n label: translate('Process ID'),\n getValue,\n setValue,\n debounce,\n validate\n });\n}\n\n// helper ////////////////\n\nfunction hasProcessRef$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && element.businessObject.get('processRef');\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\nconst EMPTY_OPTION$2 = '';\nconst CREATE_NEW_OPTION$1 = 'create-new';\n\n/**\n * @returns {Entry[]}\n */\nfunction SignalProps$1(props) {\n const {\n element\n } = props;\n if (!isSignalSupported$1(element)) {\n return [];\n }\n const signal = getSignal$1(element);\n let entries = [{\n id: 'signalRef',\n component: SignalRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (signal) {\n entries = [...entries, {\n id: 'signalName',\n component: SignalName$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n }\n return entries;\n}\nfunction SignalRef(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const signalEventDefinition = getSignalEventDefinition$1(element);\n const getValue = () => {\n const signal = getSignal$1(element);\n if (signal) {\n return signal.get('id');\n }\n return EMPTY_OPTION$2;\n };\n const setValue = value => {\n const root = getRoot(signalEventDefinition);\n const commands = [];\n let signal;\n\n // (1) create new signal\n if (value === CREATE_NEW_OPTION$1) {\n const id = nextId('Signal_');\n signal = createElement('bpmn:Signal', {\n id,\n name: id\n }, root, bpmnFactory);\n value = signal.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), signal]\n }\n }\n });\n }\n\n // (2) update (or remove) signalRef\n signal = signal || findRootElementById(signalEventDefinition, 'bpmn:Signal', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: signalEventDefinition,\n properties: {\n signalRef: signal\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION$2,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION$1,\n label: translate('Create new ...')\n }];\n const signals = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Signal');\n sortByName$2(signals).forEach(signal => {\n options.push({\n value: signal.get('id'),\n label: signal.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'signalRef',\n label: translate('Global signal reference'),\n autoFocusEntry: 'signalName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction SignalName$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const signal = getSignal$1(element);\n const getValue = () => {\n return signal.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: signal,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'signalName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper /////////////////////////\n\nfunction sortByName$2(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nfunction getErrorEventDefinition(element) {\n return getEventDefinition(element, 'bpmn:ErrorEventDefinition');\n}\nfunction isTimerSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:StartEvent', 'bpmn:IntermediateCatchEvent', 'bpmn:BoundaryEvent']) && !!getTimerEventDefinition(element);\n}\n\n/**\n * Get the timer definition type for a given timer event definition.\n *\n * @param {ModdleElement} timer\n *\n * @return {string|undefined} the timer definition type\n */\nfunction getTimerDefinitionType(timer) {\n if (!timer) {\n return;\n }\n const timeDate = timer.get('timeDate');\n if (typeof timeDate !== 'undefined') {\n return 'timeDate';\n }\n const timeCycle = timer.get('timeCycle');\n if (typeof timeCycle !== 'undefined') {\n return 'timeCycle';\n }\n const timeDuration = timer.get('timeDuration');\n if (typeof timeDuration !== 'undefined') {\n return 'timeDuration';\n }\n}\nfunction getTimerEventDefinition(element) {\n return getEventDefinition(element, 'bpmn:TimerEventDefinition');\n}\nfunction getEventDefinition(element, eventType) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const eventDefinitions = businessObject.get('eventDefinitions') || [];\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.find)(eventDefinitions, function (definition) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(definition, eventType);\n });\n}\nfunction getSignalEventDefinition(element) {\n return getEventDefinition(element, 'bpmn:SignalEventDefinition');\n}\nfunction isSignalSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Event') && !!getSignalEventDefinition(element);\n}\nfunction getSignal(element) {\n const signalEventDefinition = getSignalEventDefinition(element);\n return signalEventDefinition && signalEventDefinition.get('signalRef');\n}\nfunction getCompensateEventDefinition(element) {\n return getEventDefinition(element, 'bpmn:CompensateEventDefinition');\n}\n\nfunction TimerProps$2(props) {\n const {\n element,\n idPrefix\n } = props;\n let {\n timerEventDefinition\n } = props;\n if (!timerEventDefinition) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n timerEventDefinition = getTimerEventDefinition(businessObject);\n }\n const timerEventDefinitionType = getTimerDefinitionType(timerEventDefinition);\n\n // (1) Only show for supported elements\n if (!isTimerSupported(element)) {\n return [];\n }\n\n // (2) Provide entries, have a value only if selection was made\n const entries = [];\n entries.push({\n id: getId$1(idPrefix, 'timerEventDefinitionType'),\n component: TimerEventDefinitionType$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited,\n timerEventDefinition,\n timerEventDefinitionType\n });\n if (timerEventDefinitionType) {\n entries.push({\n id: getId$1(idPrefix, 'timerEventDefinitionValue'),\n component: TimerEventDefinitionValue$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n timerEventDefinition,\n timerEventDefinitionType\n });\n }\n return entries;\n}\n\n/**\n * TimerEventDefinitionType - Generic select entry allowing to select a specific\n * timerEventDefintionType. To be used together with timerEventDefinitionValue.\n *\n * @param {type} props\n * @return {SelectEntry}\n */\nfunction TimerEventDefinitionType$2(props) {\n const {\n element,\n timerEventDefinition,\n timerEventDefinitionType\n } = props;\n const commandStack = useService('commandStack'),\n bpmnFactory = useService('bpmnFactory'),\n translate = useService('translate');\n const getValue = () => {\n return timerEventDefinitionType || '';\n };\n const setValue = value => {\n // (1) Check if value is different to current type\n if (value === timerEventDefinitionType) {\n return;\n }\n\n // (2) Create empty formalExpression element\n const formalExpression = bpmnFactory.create('bpmn:FormalExpression', {\n body: undefined\n });\n formalExpression.$parent = timerEventDefinition;\n\n // (3) Set the value for selected timerEventDefinitionType\n const newProps = {\n timeDuration: undefined,\n timeDate: undefined,\n timeCycle: undefined\n };\n if (value !== '') {\n newProps[value] = formalExpression;\n }\n\n // (4) Execute businessObject update\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: timerEventDefinition,\n properties: newProps\n });\n };\n const getOptions = element => {\n return [{\n value: '',\n label: translate('')\n }, {\n value: 'timeDate',\n label: translate('Date')\n }, {\n value: 'timeDuration',\n label: translate('Duration')\n }, {\n value: 'timeCycle',\n label: translate('Cycle')\n }];\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'timerEventDefinitionType',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n/**\n * TimerEventDefinitionValue - Generic textField entry allowing to specify the\n * timerEventDefintionValue based on the set timerEventDefintionType. To be used\n * together with timerEventDefinitionType.\n *\n * @param {type} props\n * @return {TextFieldEntry}\n */\nfunction TimerEventDefinitionValue$2(props) {\n const {\n element,\n timerEventDefinition,\n timerEventDefinitionType\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const timerEventFormalExpression = timerEventDefinition.get(timerEventDefinitionType);\n const getValue = () => {\n return timerEventFormalExpression && timerEventFormalExpression.get('body');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: timerEventFormalExpression,\n properties: {\n body: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'timerEventDefinitionValue',\n label: translate('Value'),\n getValue,\n setValue,\n debounce,\n tooltip: getTimerEventDefinitionValueDescription$2(timerEventDefinitionType, translate)\n });\n}\n\n// helper //////////////////////////\n\nfunction getTimerEventDefinitionValueDescription$2(timerDefinitionType, translate) {\n switch (timerDefinitionType) {\n case 'timeDate':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A specific point in time defined as ISO 8601 combined date and time representation.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"2019-10-01T12:00:00Z\"\n }), \" - \", translate('UTC time')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"2019-10-02T08:09:40+02:00\"\n }), \" - \", translate('UTC plus 2 hours zone offset')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.org/manual/latest/reference/bpmn20/events/timer-events/#time-date\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Documentation: Timer events')\n })]\n });\n case 'timeCycle':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A cycle defined as ISO 8601 repeating intervals format.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"R5/PT10S\"\n }), \" - \", translate('every 10 seconds, up to 5 times')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"R/P1D\"\n }), \" - \", translate('every day, infinitely')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.org/manual/latest/reference/bpmn20/events/timer-events/#time-cycle\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Documentation: Timer events')\n })]\n });\n case 'timeDuration':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A time duration defined as ISO 8601 durations format.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"PT15S\"\n }), \" - \", translate('15 seconds')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"PT1H30M\"\n }), \" - \", translate('1 hour and 30 minutes')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"P14D\"\n }), \" - \", translate('14 days')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.org/manual/latest/reference/bpmn20/events/timer-events/#time-duration\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Documentation: Timer events')\n })]\n });\n }\n}\nfunction getId$1(idPrefix, id) {\n return idPrefix ? idPrefix + id : id;\n}\n\nfunction GeneralGroup(element, injector) {\n const translate = injector.get('translate');\n const entries = [...NameProps({\n element\n }), ...IdProps$1(), ...ProcessProps$1({\n element\n }), ...ExecutableProps({\n element\n })];\n return {\n id: 'general',\n label: translate('General'),\n entries,\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n}\nfunction CompensationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Compensation'),\n id: 'compensation',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...CompensationProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction DocumentationGroup(element, injector) {\n const translate = injector.get('translate');\n const entries = [...DocumentationProps({\n element\n })];\n return {\n id: 'documentation',\n label: translate('Documentation'),\n entries,\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n}\nfunction ErrorGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'error',\n label: translate('Error'),\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...ErrorProps$2({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction MessageGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'message',\n label: translate('Message'),\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...MessageProps$1({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction SignalGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'signal',\n label: translate('Signal'),\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...SignalProps$1({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction LinkGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Link'),\n id: 'link',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...LinkProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction EscalationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'escalation',\n label: translate('Escalation'),\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...EscalationProps$2({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction TimerGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Timer'),\n id: 'timer',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...TimerProps$2({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction MultiInstanceGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Multi-instance'),\n id: 'multiInstance',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...MultiInstanceProps$2({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction getGroups(element, injector) {\n const groups = [GeneralGroup(element, injector), DocumentationGroup(element, injector), CompensationGroup(element, injector), ErrorGroup(element, injector), LinkGroup(element, injector), MessageGroup(element, injector), MultiInstanceGroup(element, injector), SignalGroup(element, injector), EscalationGroup(element, injector), TimerGroup(element, injector)];\n\n // contract: if a group returns null, it should not be displayed at all\n return groups.filter(group => group !== null);\n}\nclass BpmnPropertiesProvider {\n constructor(propertiesPanel, injector) {\n propertiesPanel.registerProvider(this);\n this._injector = injector;\n }\n getGroups(element) {\n return groups => {\n groups = groups.concat(getGroups(element, this._injector));\n return groups;\n };\n }\n}\nBpmnPropertiesProvider.$inject = ['propertiesPanel', 'injector'];\n\nvar index$2 = {\n __init__: ['bpmnPropertiesProvider'],\n bpmnPropertiesProvider: ['type', BpmnPropertiesProvider]\n};\n\n/**\n * Get extension elements of business object. Optionally filter by type.\n *\n * @param {ModdleElement} businessObject\n * @param {string} [type=undefined]\n * @returns {Array}\n */\nfunction getExtensionElementsList(businessObject, type = undefined) {\n const extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n return [];\n }\n const values = extensionElements.get('values');\n if (!values || !values.length) {\n return [];\n }\n if (type) {\n return values.filter(value => (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(value, type));\n }\n return values;\n}\n\n/**\n * Add one or more extension elements. Create bpmn:ExtensionElements if it doesn't exist.\n *\n * @param {ModdleElement} element\n * @param {ModdleElement} businessObject\n * @param {ModdleElement|Array} extensionElementsToAdd\n * @param {CommandStack} commandStack\n */\nfunction addExtensionElements(element, businessObject, extensionElementToAdd, bpmnFactory, commandStack) {\n const commands = [];\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) create bpmn:ExtensionElements if it doesn't exist\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n extensionElementToAdd.$parent = extensionElements;\n\n // (2) add extension element to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), extensionElementToAdd]\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n}\n\n/**\n * Remove one or more extension elements. Remove bpmn:ExtensionElements afterwards if it's empty.\n *\n * @param {ModdleElement} element\n * @param {ModdleElement} businessObject\n * @param {ModdleElement|Array} extensionElementsToRemove\n * @param {CommandStack} commandStack\n */\nfunction removeExtensionElements(element, businessObject, extensionElementsToRemove, commandStack) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isArray)(extensionElementsToRemove)) {\n extensionElementsToRemove = [extensionElementsToRemove];\n }\n const extensionElements = businessObject.get('extensionElements'),\n values = extensionElements.get('values').filter(value => !extensionElementsToRemove.includes(value));\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values\n }\n });\n}\n\nfunction withProps(Component, otherProps) {\n return props => {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Component, {\n ...props,\n ...otherProps\n });\n };\n}\n\nconst fallbackResolver = {\n getVariablesForElement: bo => (0,_bpmn_io_extract_process_variables_zeebe__WEBPACK_IMPORTED_MODULE_6__.getVariablesForElement)(bo)\n};\nfunction withVariableContext(Component) {\n return props => {\n const {\n bpmnElement,\n element\n } = props;\n const bo = (bpmnElement || element).businessObject;\n const [variables, setVariables] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n const eventBus = useService('eventBus');\n const variableResolver = useServiceIfAvailable('variableResolver', fallbackResolver);\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const extractVariables = async () => {\n const variables = await variableResolver.getVariablesForElement(bo, element);\n setVariables(variables.map(variable => {\n return {\n ...variable,\n info: variable.info || variable.origin && 'Written in ' + variable.origin.map(origin => origin.name || origin.id).join(', ')\n };\n }));\n };\n\n // The callback must return undefined, so the event propagation is not canceled.\n // Cf. https://github.com/camunda/camunda-modeler/issues/3392\n const callback = () => {\n extractVariables();\n };\n eventBus.on('commandStack.changed', callback);\n callback();\n return () => {\n eventBus.off('commandStack.changed', callback);\n };\n }, [bo]);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Component, {\n ...props,\n variables: variables\n });\n };\n}\n\n// helpers //////////\n\nfunction useServiceIfAvailable(service, fallback) {\n const resolved = useService(service, false);\n if (!resolved) {\n return fallback;\n }\n return resolved;\n}\n\nfunction withTooltipContainer(Component) {\n return props => {\n const tooltipContainer = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const config = useService('config');\n return config && config.propertiesPanel && config.propertiesPanel.feelTooltipContainer;\n }, []);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(Component, {\n ...props,\n tooltipContainer: tooltipContainer\n });\n };\n}\n\nconst FeelEntry = withTooltipContainer(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.FeelEntry);\nconst FeelEntryWithVariableContext = withVariableContext(FeelEntry);\n\nfunction AssignmentDefinitionProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask')) {\n return [];\n }\n return [{\n id: 'assignmentDefinitionAssignee',\n component: Assignee$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }, {\n id: 'assignmentDefinitionCandidateGroups',\n component: CandidateGroups$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }, {\n id: 'assignmentDefinitionCandidateUsers',\n component: CandidateUsers$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }];\n}\nfunction Assignee$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getAssignmentDefinition(element) || {}).assignee;\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure AssignmentDefinition\n let assignmentDefinition = getAssignmentDefinition(element);\n if (!assignmentDefinition) {\n assignmentDefinition = createElement('zeebe:AssignmentDefinition', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), assignmentDefinition]\n }\n }\n });\n }\n\n // (3) update assignee definition type\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: assignmentDefinition,\n properties: {\n assignee: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'assignmentDefinitionAssignee',\n label: translate('Assignee'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\nfunction CandidateGroups$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getAssignmentDefinition(element) || {}).candidateGroups;\n };\n const setValue = value => {\n let commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure assignmentDefinition\n let assignmentDefinition = getAssignmentDefinition(element);\n if (!assignmentDefinition) {\n assignmentDefinition = createElement('zeebe:AssignmentDefinition', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), assignmentDefinition]\n }\n }\n });\n }\n\n // (3) update candidateGroups\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: assignmentDefinition,\n properties: {\n candidateGroups: value\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'assignmentDefinitionCandidateGroups',\n label: translate('Candidate groups'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\nfunction CandidateUsers$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getAssignmentDefinition(element) || {}).candidateUsers;\n };\n const setValue = value => {\n let commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure assignmentDefinition\n let assignmentDefinition = getAssignmentDefinition(element);\n if (!assignmentDefinition) {\n assignmentDefinition = createElement('zeebe:AssignmentDefinition', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), assignmentDefinition]\n }\n }\n });\n }\n\n // (3) update candidateUsers\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: assignmentDefinition,\n properties: {\n candidateUsers: value\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'assignmentDefinitionCandidateUsers',\n label: translate('Candidate users'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction getAssignmentDefinition(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:AssignmentDefinition')[0];\n}\n\nfunction isZeebeServiceTask(element) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'zeebe:ZeebeServiceTask')) return false;\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:EndEvent') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:IntermediateThrowEvent')) {\n return !!getMessageEventDefinition(element);\n }\n\n // BusinessRuleTask and ScriptTask are ServiceTasks only if they have a TaskDefinition\n // (ie. if the implementation is set to ==JobWorker)\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:BusinessRuleTask', 'bpmn:ScriptTask']) && !getTaskDefinition$3(element)) {\n return false;\n }\n return true;\n}\nfunction isMessageEndEvent(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:EndEvent') && !!getMessageEventDefinition(element);\n}\nfunction isMessageThrowEvent(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:IntermediateThrowEvent') && !!getMessageEventDefinition(element);\n}\n\n// helper ////////////////\n\nfunction getTaskDefinition$3(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:TaskDefinition')[0];\n}\n\nfunction areHeadersSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask') || isZeebeServiceTask(element);\n}\n\n/**\n * Get first zeebe:TaskHeaders element for a specific element.\n *\n * @param {ModdleElement} element\n *\n * @return {ModdleElement} a zeebe:TaskHeader element\n */\nfunction getTaskHeaders$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:TaskHeaders')[0];\n}\n\n/**\n * Retrieve all zeebe:Header elements for a specific element.\n *\n * @param {ModdleElement} element\n *\n * @return {Array} a list of zeebe:Header elements\n */\nfunction getHeaders(element) {\n const taskHeaders = getTaskHeaders$1(element);\n return taskHeaders ? taskHeaders.get('values') : [];\n}\n\nconst DMN_IMPLEMENTATION_OPTION = 'dmn',\n JOB_WORKER_IMPLEMENTATION_OPTION$2 = 'jobWorker',\n DEFAULT_IMPLEMENTATION_OPTION$1 = '';\nfunction BusinessRuleImplementationProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BusinessRuleTask')) {\n return [];\n }\n return [{\n id: 'businessRuleImplementation',\n component: BusinessRuleImplementation,\n isEdited: () => isBusinessRuleImplementationEdited(element)\n }];\n}\nfunction BusinessRuleImplementation(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const getValue = () => {\n if (getCalledDecision$1(element)) {\n return DMN_IMPLEMENTATION_OPTION;\n }\n if (getTaskDefinition$2(element)) {\n return JOB_WORKER_IMPLEMENTATION_OPTION$2;\n }\n return DEFAULT_IMPLEMENTATION_OPTION$1;\n };\n\n /**\n * Set value by either creating a zeebe:calledDecision or a zeebe:taskDefintion\n * extension element. Note that they must not exist both at the same time, however\n * this will be ensured by a bpmn-js behavior (and not by the propPanel).\n */\n const setValue = value => {\n let extensionElement, extensionElementType;\n if (value === DMN_IMPLEMENTATION_OPTION) {\n extensionElement = getCalledDecision$1(element);\n extensionElementType = 'zeebe:CalledDecision';\n } else if (value === JOB_WORKER_IMPLEMENTATION_OPTION$2) {\n extensionElement = getTaskDefinition$2(element);\n extensionElementType = 'zeebe:TaskDefinition';\n } else {\n resetElement$1(element, commandStack);\n }\n if (!extensionElement && extensionElementType) {\n extensionElement = createElement(extensionElementType, {}, null, bpmnFactory);\n updateExtensionElements$1(element, extensionElement, bpmnFactory, commandStack);\n }\n };\n const getOptions = () => {\n const options = [{\n value: DEFAULT_IMPLEMENTATION_OPTION$1,\n label: translate('')\n }, {\n value: DMN_IMPLEMENTATION_OPTION,\n label: translate('DMN decision')\n }, {\n value: JOB_WORKER_IMPLEMENTATION_OPTION$2,\n label: translate('Job worker')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id,\n label: translate('Implementation'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n// helper ///////////////////////\n\nfunction getTaskDefinition$2(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:TaskDefinition')[0];\n}\nfunction getCalledDecision$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:CalledDecision')[0];\n}\nfunction isBusinessRuleImplementationEdited(element) {\n return getTaskDefinition$2(element) || getCalledDecision$1(element);\n}\nfunction resetElement$1(element, commandStack) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const toRemove = [getTaskDefinition$2(element), getTaskHeaders$1(element), getCalledDecision$1(element)].filter(Boolean);\n removeExtensionElements(element, businessObject, toRemove, commandStack);\n}\nfunction updateExtensionElements$1(element, extensionElementToAdd, bpmnFactory, commandStack) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const commands = [];\n let extensionElements = businessObject.get('extensionElements');\n let extensionElementValues;\n\n // (1) create bpmn:ExtensionElements if it doesn't exist\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n extensionElementToAdd.$parent = extensionElements;\n\n // (2) remove old exension element from extensionElements\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(extensionElementToAdd, 'zeebe:TaskDefinition')) {\n extensionElementValues = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), getCalledDecision$1(element));\n } else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(extensionElementToAdd, 'zeebe:CalledDecision')) {\n extensionElementValues = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), getTaskDefinition$2(element));\n }\n\n // (3) add extension element to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElementValues, extensionElementToAdd]\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n}\n\nfunction Binding$2(props) {\n const {\n element,\n type\n } = props;\n const bpmnFactory = useService('bpmnFactory'),\n commandStack = useService('commandStack'),\n translate = useService('translate');\n const getValue = () => getBindingType(element, type);\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n\n // (1) ensure extension elements\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure extension element\n let extensionElement = getExtensionElementsList(businessObject, type)[0];\n if (!extensionElement) {\n extensionElement = createElement(type, {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), extensionElement]\n }\n }\n });\n }\n\n // (3) Update bindingType attribute\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElement,\n properties: {\n bindingType: value\n }\n }\n });\n\n // (4) Execute the commands\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => [{\n value: 'latest',\n label: translate('latest')\n }, {\n value: 'deployment',\n label: translate('deployment')\n }, {\n value: 'versionTag',\n label: translate('version tag')\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n element: element,\n id: \"bindingType\",\n label: translate('Binding'),\n getValue: getValue,\n setValue: setValue,\n getOptions: getOptions\n });\n}\nfunction getBindingType(element, type) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const extensionElement = getExtensionElementsList(businessObject, type)[0];\n if (!extensionElement) {\n return 'latest';\n }\n return extensionElement.get('bindingType');\n}\n\nfunction VersionTag$3(props) {\n const {\n element,\n type\n } = props;\n const bpmnFactory = useService('bpmnFactory'),\n commandStack = useService('commandStack'),\n debounce = useService('debounceInput'),\n translate = useService('translate');\n const getValue = () => getVersionTag$1(element, type);\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n\n // (1) ensure extension elements\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure extension element\n let extensionElement = getExtensionElementsList(businessObject, type)[0];\n if (!extensionElement) {\n extensionElement = createElement(type, {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), extensionElement]\n }\n }\n });\n }\n\n // (3) Update versionTag attribute\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElement,\n properties: {\n versionTag: value\n }\n }\n });\n\n // (4) Execute the commands\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'versionTag',\n label: translate('Version tag'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction getVersionTag$1(element, type) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const extensionElement = getExtensionElementsList(businessObject, type)[0];\n if (!extensionElement) {\n return '';\n }\n return extensionElement.get('versionTag') || '';\n}\n\nconst CalledDecisionBinding = withProps(Binding$2, {\n type: 'zeebe:CalledDecision'\n }),\n CalledDecisionVersionTag = withProps(VersionTag$3, {\n type: 'zeebe:CalledDecision'\n });\nfunction CalledDecisionProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BusinessRuleTask') || !getCalledDecision(element)) {\n return [];\n }\n const entries = [{\n id: 'decisionId',\n component: DecisionID,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }, {\n id: 'bindingType',\n component: CalledDecisionBinding,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (getBindingType(element, 'zeebe:CalledDecision') === 'versionTag') {\n entries.push({\n id: 'versionTag',\n component: CalledDecisionVersionTag,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n entries.push({\n id: 'resultVariable',\n component: ResultVariable$4,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n return entries;\n}\nfunction DecisionID(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getCalledDecision(element) || {}).decisionId;\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure calledDecision\n let calledDecision = getCalledDecision(element);\n if (!calledDecision) {\n calledDecision = createElement('zeebe:CalledDecision', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), calledDecision]\n }\n }\n });\n }\n\n // (3) update caledDecision.decisionId\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: calledDecision,\n properties: {\n decisionId: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id,\n label: translate('Decision ID'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\nfunction ResultVariable$4(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getCalledDecision(element) || {}).resultVariable;\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure calledDecision\n let calledDecision = getCalledDecision(element);\n if (!calledDecision) {\n calledDecision = createElement('zeebe:CalledDecision', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), calledDecision]\n }\n }\n });\n }\n\n // (3) update caledDecision.decisionId\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: calledDecision,\n properties: {\n resultVariable: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id,\n label: translate('Result variable'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction getCalledDecision(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:CalledDecision')[0];\n}\n\nfunction ConditionProps$1(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow')) {\n return [];\n }\n const conditionProps = [];\n if (isConditionalSource$1(element.source)) {\n conditionProps.push({\n id: 'conditionExpression',\n component: ConditionExpression$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n });\n }\n return conditionProps;\n}\nfunction ConditionExpression$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n bpmnFactory = useService('bpmnFactory'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const getValue = () => {\n return getConditionExpression$1(element);\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n\n // (1) If we set value to a default flow, make it a non-default flow\n // by updating the element source\n const source = element.source;\n if (source.businessObject.default === businessObject) {\n commands.push({\n cmd: 'element.updateProperties',\n context: {\n element: source,\n properties: {\n 'default': undefined\n }\n }\n });\n }\n\n // (2) Create and set formalExpression element containing the conditionExpression,\n // unless the provided value is empty\n const formalExpressionElement = value && value != '' ? createElement('bpmn:FormalExpression', {\n body: value\n }, businessObject, bpmnFactory) : undefined;\n commands.push({\n cmd: 'element.updateProperties',\n context: {\n element: element,\n properties: {\n conditionExpression: formalExpressionElement\n }\n }\n });\n\n // (3) Execute the commands\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'conditionExpression',\n label: translate('Condition expression'),\n feel: 'required',\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper //////////////////////////\n\nconst CONDITIONAL_SOURCES$1 = ['bpmn:Activity', 'bpmn:ExclusiveGateway', 'bpmn:InclusiveGateway'];\nfunction isConditionalSource$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, CONDITIONAL_SOURCES$1);\n}\n\n/**\n * getConditionExpression - get the body value of a condition expression for a given element\n *\n * @param {ModdleElement} element\n *\n * @return {string|undefined}\n */\nfunction getConditionExpression$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const conditionExpression = businessObject.conditionExpression;\n if (conditionExpression) {\n return conditionExpression.get('body');\n }\n}\n\nfunction ErrorProps$1(props) {\n const {\n element\n } = props;\n const error = getError(element);\n const entries = [];\n if (error && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ThrowEvent')) {\n entries.push({\n id: 'errorCode',\n component: ErrorCode$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n });\n }\n return entries;\n}\nfunction ErrorCode$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const error = getError(element);\n const getValue = () => {\n return error.get('errorCode');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n errorCode: value\n }\n });\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'errorCode',\n label: translate('Code'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction EscalationProps$1(props) {\n const {\n element\n } = props;\n\n // update throw events only\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ThrowEvent')) {\n return [];\n }\n const escalation = getEscalation(element);\n const entries = [];\n if (escalation) {\n entries.push({\n id: 'escalationCode',\n component: EscalationCode,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n });\n }\n return entries;\n}\nfunction EscalationCode(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const escalation = getEscalation(element);\n const getValue = () => {\n return escalation.get('escalationCode');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: escalation,\n properties: {\n escalationCode: value\n }\n });\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'escalationCode',\n label: translate('Code'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction ListenerType$1(props) {\n const {\n idPrefix,\n element,\n listener\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n modeling.updateModdleProperties(element, listener, {\n type: value\n });\n };\n const getValue = () => {\n return listener.get('type');\n };\n return FeelEntryWithVariableContext({\n element,\n id: idPrefix + '-listenerType',\n label: translate('Listener type'),\n getValue,\n setValue,\n debounce,\n feel: 'optional'\n });\n}\nfunction Retries(props) {\n const {\n idPrefix,\n element,\n listener\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n modeling.updateModdleProperties(element, listener, {\n retries: value\n });\n };\n const getValue = () => {\n return listener.get('retries');\n };\n return FeelEntryWithVariableContext({\n element,\n id: idPrefix + '-retries',\n label: translate('Retries'),\n getValue,\n setValue,\n debounce,\n feel: 'optional'\n });\n}\n\nconst EVENT_TO_LABEL$2 = {\n 'start': 'Start',\n 'end': 'End'\n};\nfunction ExecutionListenerEntries(props) {\n const {\n element,\n idPrefix,\n listener\n } = props;\n const eventTypes = getEventTypes(element);\n const entries = eventTypes.length > 1 ? [{\n id: idPrefix + '-eventType',\n component: EventType$2,\n idPrefix,\n listener,\n eventTypes\n }] : [];\n entries.push({\n id: idPrefix + '-listenerType',\n component: ListenerType$1,\n idPrefix,\n listener\n }, {\n id: idPrefix + '-retries',\n component: Retries,\n idPrefix,\n listener\n });\n return entries;\n}\nfunction EventType$2(props) {\n const {\n idPrefix,\n element,\n listener,\n eventTypes\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const getOptions = () => {\n return eventTypes.map(eventType => ({\n value: eventType,\n label: translate(EVENT_TO_LABEL$2[eventType])\n }));\n };\n const setValue = value => {\n modeling.updateModdleProperties(element, listener, {\n eventType: value\n });\n };\n const getValue = () => {\n return listener.get('eventType');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: idPrefix + '-eventType',\n label: translate('Event type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction getEventTypes(element) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:BoundaryEvent', 'bpmn:StartEvent'])) {\n return ['end'];\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:EndEvent') && getErrorEventDefinition(element)) {\n return ['start'];\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Gateway')) {\n return ['start'];\n }\n return ['start', 'end'];\n}\n\nfunction ExecutionListenersProps({\n element,\n injector\n}) {\n let businessObject = getRelevantBusinessObject$2(element);\n\n // not allowed in empty pools\n if (!businessObject) {\n return;\n }\n const moddle = injector.get('moddle');\n if (!canHaveExecutionListeners(businessObject, moddle)) {\n return;\n }\n const listeners = getListenersList$1(businessObject) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack'),\n modeling = injector.get('modeling'),\n translate = injector.get('translate');\n const items = listeners.map((listener, index) => {\n const id = element.id + '-executionListener-' + index;\n const type = listener.get('type') || '';\n return {\n id,\n label: translate(`${EVENT_TO_LABEL$2[listener.get('eventType')]}: {type}`, {\n type\n }),\n entries: ExecutionListenerEntries({\n idPrefix: id,\n element,\n listener\n }),\n autoFocusEntry: id + '-eventType',\n remove: removeFactory$e({\n modeling,\n element,\n listener\n })\n };\n });\n return {\n items,\n add: addFactory$b({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction removeFactory$e({\n modeling,\n element,\n listener\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = getRelevantBusinessObject$2(element);\n const container = getExecutionListenersContainer(businessObject);\n if (!container) {\n return;\n }\n const listeners = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(container.get('listeners'), listener);\n modeling.updateModdleProperties(element, container, {\n listeners\n });\n };\n}\nfunction addFactory$b({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n let commands = [];\n const businessObject = getRelevantBusinessObject$2(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe:ExecutionListeners\n let executionListeners = getExecutionListenersContainer(businessObject);\n if (!executionListeners) {\n const parent = extensionElements;\n executionListeners = createElement('zeebe:ExecutionListeners', {\n listeners: []\n }, parent, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), executionListeners]\n }\n }\n });\n }\n\n // (3) create zeebe:ExecutionListener\n const executionListener = createElement('zeebe:ExecutionListener', getDefaultListenerProps$1(element), executionListeners, bpmnFactory);\n\n // (4) add executionListener to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: executionListeners,\n properties: {\n listeners: [...executionListeners.get('listeners'), executionListener]\n }\n }\n });\n\n // (5) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\n\n// helper //////////////////\n\nfunction getRelevantBusinessObject$2(element) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n return businessObject.get('processRef');\n }\n return businessObject;\n}\nfunction getExecutionListenersContainer(element) {\n const executionListeners = getExtensionElementsList(element, 'zeebe:ExecutionListeners');\n return executionListeners && executionListeners[0];\n}\nfunction getListenersList$1(element) {\n const executionListeners = getExecutionListenersContainer(element);\n return executionListeners && executionListeners.get('listeners');\n}\nfunction canHaveExecutionListeners(bo, moddle) {\n const executionListenersDescriptor = moddle.getTypeDescriptor('zeebe:ExecutionListeners');\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(bo, executionListenersDescriptor.meta.allowedIn)) {\n return false;\n }\n if (isCompensationBoundaryEvent(bo)) {\n return false;\n }\n return true;\n}\nfunction isCompensationBoundaryEvent(bo) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(bo, 'bpmn:BoundaryEvent') && getCompensateEventDefinition(bo);\n}\nfunction getDefaultListenerProps$1(element) {\n const eventTypes = getEventTypes(element);\n return {\n eventType: eventTypes[0]\n };\n}\n\nconst FORM_KEY_PREFIX = 'camunda-forms:bpmn:',\n USER_TASK_FORM_ID_PREFIX = 'UserTaskForm_';\nconst FORM_TYPES = {\n CAMUNDA_FORM_EMBEDDED: 'camunda-form-embedded',\n CAMUNDA_FORM_LINKED: 'camunda-form-linked',\n CUSTOM_FORM: 'custom-form',\n EXTERNAL_REFERENCE: 'external-reference'\n};\nfunction getFormDefinition(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const formDefinitions = getExtensionElementsList(businessObject, 'zeebe:FormDefinition');\n return formDefinitions[0];\n}\nfunction getUserTaskForm(element, rootElement) {\n rootElement = rootElement || getRootElement$1(element);\n const formDefinition = getFormDefinition(element);\n if (!formDefinition) {\n return;\n }\n const formKey = formDefinition.get('formKey');\n const userTaskForms = getExtensionElementsList(rootElement, 'zeebe:UserTaskForm');\n return userTaskForms.find(userTaskForm => {\n return userTaskFormIdToFormKey(userTaskForm.get('id')) === formKey;\n });\n}\nfunction userTaskFormIdToFormKey(userTaskFormId) {\n return `${FORM_KEY_PREFIX}${userTaskFormId}`;\n}\nfunction createUserTaskFormId() {\n return nextId(USER_TASK_FORM_ID_PREFIX);\n}\nfunction getRootElement$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let parent = businessObject;\n while (parent.$parent && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parent, 'bpmn:Process')) {\n parent = parent.$parent;\n }\n return parent;\n}\nfunction getFormType$1(element) {\n const formDefinition = getFormDefinition(element);\n if (!formDefinition) {\n return;\n }\n const formId = formDefinition.get('formId'),\n formKey = formDefinition.get('formKey'),\n externalReference = formDefinition.get('externalReference');\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isDefined)(formId)) {\n return FORM_TYPES.CAMUNDA_FORM_LINKED;\n }\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isDefined)(externalReference)) {\n return FORM_TYPES.EXTERNAL_REFERENCE;\n }\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isDefined)(formKey)) {\n if (getUserTaskForm(element)) {\n return FORM_TYPES.CAMUNDA_FORM_EMBEDDED;\n }\n return FORM_TYPES.CUSTOM_FORM;\n }\n}\nfunction isZeebeUserTask$1(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(bo, 'zeebe:UserTask').length > 0;\n}\n\nconst FormDefinitionBinding = withProps(Binding$2, {\n type: 'zeebe:FormDefinition'\n }),\n FormDefinitionVersionTag = withProps(VersionTag$3, {\n type: 'zeebe:FormDefinition'\n });\nconst NONE_VALUE = 'none';\nfunction FormProps$1(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask')) {\n return [];\n }\n const entries = [{\n id: 'formType',\n component: FormType$1,\n isEdited: node => node.value !== NONE_VALUE\n }];\n const formType = getFormType$1(element);\n if (formType === FORM_TYPES.CAMUNDA_FORM_EMBEDDED) {\n entries.push({\n id: 'formConfiguration',\n component: FormConfiguration,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited\n });\n } else if (formType === FORM_TYPES.CAMUNDA_FORM_LINKED) {\n entries.push({\n id: 'formId',\n component: FormId,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (formType === FORM_TYPES.CUSTOM_FORM) {\n entries.push({\n id: 'customFormKey',\n component: CustomForm,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (formType === FORM_TYPES.EXTERNAL_REFERENCE) {\n entries.push({\n id: 'externalReference',\n component: ExternalReference,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n });\n }\n if (formType === FORM_TYPES.CAMUNDA_FORM_LINKED) {\n entries.push({\n id: 'bindingType',\n component: FormDefinitionBinding,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n });\n if (getBindingType(element, 'zeebe:FormDefinition') === 'versionTag') {\n entries.push({\n id: 'versionTag',\n component: FormDefinitionVersionTag,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n }\n return entries;\n}\nfunction FormType$1(props) {\n const {\n element\n } = props;\n const injector = useService('injector'),\n translate = useService('translate');\n const getValue = () => {\n return getFormType$1(element) || NONE_VALUE;\n };\n const setValue = value => {\n setFormType(injector, element, value);\n };\n const getOptions = () => {\n return getFormTypeOptions(translate, element);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'formType',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction setFormType(injector, element, value) {\n if (value === FORM_TYPES.CAMUNDA_FORM_EMBEDDED) {\n setUserTaskForm(injector, element, '');\n } else if (value === FORM_TYPES.CAMUNDA_FORM_LINKED) {\n setFormId(injector, element, '');\n } else if (value === FORM_TYPES.CUSTOM_FORM) {\n setCustomFormKey(injector, element, '');\n } else if (value === FORM_TYPES.EXTERNAL_REFERENCE) {\n setExternalReference(injector, element, '');\n } else {\n removeFormDefinition(injector, element);\n }\n}\nfunction getFormTypeOptions(translate, element) {\n if (isZeebeUserTask$1(element)) {\n return [{\n value: NONE_VALUE,\n label: translate('')\n }, {\n value: FORM_TYPES.CAMUNDA_FORM_LINKED,\n label: translate('Camunda Form')\n }, {\n value: FORM_TYPES.EXTERNAL_REFERENCE,\n label: translate('External form reference')\n }];\n }\n return [{\n value: NONE_VALUE,\n label: translate('')\n }, {\n value: FORM_TYPES.CAMUNDA_FORM_LINKED,\n label: translate('Camunda Form (linked)')\n }, {\n value: FORM_TYPES.CAMUNDA_FORM_EMBEDDED,\n label: translate('Camunda Form (embedded)')\n }, {\n value: FORM_TYPES.CUSTOM_FORM,\n label: translate('Custom form key')\n }];\n}\nfunction FormConfiguration(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput'),\n injector = useService('injector'),\n translate = useService('translate');\n const getValue = () => {\n return getUserTaskForm(element).get('body');\n };\n const setValue = value => {\n setUserTaskForm(injector, element, (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isUndefined)(value) ? '' : value);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element,\n id: 'formConfiguration',\n label: translate('Form JSON configuration'),\n rows: 4,\n getValue,\n setValue,\n debounce\n });\n}\nfunction FormId(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput'),\n injector = useService('injector'),\n translate = useService('translate');\n const getValue = () => {\n return getFormDefinition(element).get('formId');\n };\n const setValue = value => {\n setFormId(injector, element, (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isUndefined)(value) ? '' : value);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'formId',\n label: translate('Form ID'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction CustomForm(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput'),\n injector = useService('injector'),\n translate = useService('translate');\n const getValue = () => {\n const formDefinition = getFormDefinition(element);\n return formDefinition.get('formKey');\n };\n const setValue = value => {\n setCustomFormKey(injector, element, (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isUndefined)(value) ? '' : value);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'customFormKey',\n label: translate('Custom form key'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ExternalReference(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput'),\n injector = useService('injector'),\n translate = useService('translate');\n const getValue = () => {\n const formDefinition = getFormDefinition(element);\n return formDefinition.get('externalReference');\n };\n const setValue = value => {\n setExternalReference(injector, element, (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isUndefined)(value) ? '' : value);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'externalReference',\n label: translate('External form reference'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\n// helpers /////////////\n\n/**\n * @typedef { { cmd: string, context: Object } } Command\n * @typedef {Command[]} Commands\n *\n * @typedef {import('diagram-js/lib/model/Types').Element} Element\n * @typedef {import('bpmn-js/lib/model/Types').ModdleElement} ModdleElement\n *\n * @param {import('didi').Injector} Injector\n */\n\n/**\n * @param {Injector} injector\n * @param {Element} element\n *\n * @returns { {\n * commands: Commands,\n * extensionElements: ModdleElement\n * } }\n */\nfunction getOrCreateExtensionElements(injector, element, moddleElement) {\n const businessObject = moddleElement || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n if (extensionElements) {\n return {\n commands: [],\n extensionElements\n };\n }\n const bpmnFactory = injector.get('bpmnFactory');\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n return {\n commands: [createUpdateModdlePropertiesCommand(element, businessObject, {\n extensionElements\n })],\n extensionElements\n };\n}\n\n/**\n * @param {Injector} injector\n * @param {Element} element\n *\n * @returns { {\n* commands: Commands,\n* formDefinition: ModdleElement\n* } }\n*/\nfunction getOrCreateFormDefintition(injector, element) {\n let formDefinition = getFormDefinition(element);\n if (formDefinition) {\n return {\n commands: [],\n formDefinition\n };\n }\n const {\n extensionElements,\n commands\n } = getOrCreateExtensionElements(injector, element);\n formDefinition = createFormDefinition(injector, {}, extensionElements);\n return {\n commands: [...commands, createUpdateModdlePropertiesCommand(element, extensionElements, {\n values: [...extensionElements.get('values'), formDefinition]\n })],\n formDefinition\n };\n}\n\n/**\n * @param {Injector} injector\n * @param {Element} element\n *\n * @returns { {\n * commands: Commands,\n * formDefinition: ModdleElement,\n * userTaskForm: ModdleElement\n * } }\n */\nfunction getOrCreateUserTaskForm(injector, element) {\n let userTaskForm = getUserTaskForm(element);\n if (userTaskForm) {\n return {\n commands: [],\n formDefinition: getFormDefinition(element),\n userTaskForm\n };\n }\n const rootElement = getRootElement$1(element);\n const {\n extensionElements,\n commands: extensionElementsCommands\n } = getOrCreateExtensionElements(injector, element, rootElement);\n const {\n formDefinition,\n commands: formDefinitionCommands\n } = getOrCreateFormDefintition(injector, element);\n const formId = createUserTaskFormId();\n userTaskForm = createUserTaskForm(injector, {\n id: formId\n }, extensionElements);\n return {\n commands: [...extensionElementsCommands, ...formDefinitionCommands, createUpdateModdlePropertiesCommand(element, extensionElements, {\n values: [...extensionElements.get('values'), userTaskForm]\n }), createUpdateModdlePropertiesCommand(element, formDefinition, {\n formKey: userTaskFormIdToFormKey(formId)\n })],\n formDefinition,\n userTaskForm\n };\n}\nfunction setFormId(injector, element, formId) {\n let {\n commands,\n formDefinition\n } = getOrCreateFormDefintition(injector, element);\n const commandStack = injector.get('commandStack');\n commandStack.execute('properties-panel.multi-command-executor', [...commands, createUpdateModdlePropertiesCommand(element, formDefinition, {\n formId\n })]);\n}\nfunction setCustomFormKey(injector, element, formKey) {\n let {\n commands,\n formDefinition\n } = getOrCreateFormDefintition(injector, element);\n const commandStack = injector.get('commandStack');\n commandStack.execute('properties-panel.multi-command-executor', [...commands, createUpdateModdlePropertiesCommand(element, formDefinition, {\n formKey\n })]);\n}\nfunction setExternalReference(injector, element, externalReference) {\n let {\n commands,\n formDefinition\n } = getOrCreateFormDefintition(injector, element);\n const commandStack = injector.get('commandStack');\n commandStack.execute('properties-panel.multi-command-executor', [...commands, createUpdateModdlePropertiesCommand(element, formDefinition, {\n externalReference\n })]);\n}\nfunction setUserTaskForm(injector, element, body) {\n let {\n commands,\n userTaskForm\n } = getOrCreateUserTaskForm(injector, element);\n const commandStack = injector.get('commandStack');\n commandStack.execute('properties-panel.multi-command-executor', [...commands, createUpdateModdlePropertiesCommand(element, userTaskForm, {\n body\n })]);\n}\nfunction removeFormDefinition(injector, element) {\n const formDefinition = getFormDefinition(element);\n\n /**\n * @type {import('bpmn-js/lib/features/modeling/Modeling').default}\n */\n const modeling = injector.get('modeling');\n if (formDefinition) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n extensionElements = businessObject.get('extensionElements');\n modeling.updateModdleProperties(element, extensionElements, {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), formDefinition)\n });\n }\n}\n\n/**\n * @param {Injector} injector\n * @param {Object} properties\n * @param {ModdleElement} parent\n *\n * @returns {ModdleElement}\n */\nfunction createFormDefinition(injector, properties, parent) {\n const bpmnFactory = injector.get('bpmnFactory');\n return createElement('zeebe:FormDefinition', properties, parent, bpmnFactory);\n}\n\n/**\n * @param {Injector} injector\n * @param {Object} properties\n * @param {ModdleElement} parent\n *\n * @returns {ModdleElement}\n */\nfunction createUserTaskForm(injector, properties, parent) {\n const bpmnFactory = injector.get('bpmnFactory');\n return createElement('zeebe:UserTaskForm', properties, parent, bpmnFactory);\n}\n\n/**\n * @param {Element} element\n * @param {ModdleElement} moddleElement\n * @param {Object} properties\n *\n * @returns {Command}\n */\nfunction createUpdateModdlePropertiesCommand(element, moddleElement, properties) {\n return {\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement,\n properties\n }\n };\n}\n\nfunction Header(props) {\n const {\n idPrefix,\n header\n } = props;\n const entries = [{\n id: idPrefix + '-key',\n component: KeyProperty,\n header,\n idPrefix\n }, {\n id: idPrefix + '-value',\n component: ValueProperty$2,\n header,\n idPrefix\n }];\n return entries;\n}\nfunction KeyProperty(props) {\n const {\n idPrefix,\n element,\n header\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: header,\n properties: {\n key: value\n }\n });\n };\n const getValue = header => {\n return header.key;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: header,\n id: idPrefix + '-key',\n label: translate('Key'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ValueProperty$2(props) {\n const {\n idPrefix,\n element,\n header\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: header,\n properties: {\n value\n }\n });\n };\n const getValue = header => {\n return header.value;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element: header,\n id: idPrefix + '-value',\n label: translate('Value'),\n getValue,\n setValue,\n debounce,\n autoResize: true\n });\n}\n\nfunction HeaderProps({\n element,\n injector\n}) {\n if (!areHeadersSupported(element)) {\n return null;\n }\n const headers = getHeaders(element) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = headers.map((header, index) => {\n const id = element.id + '-header-' + index;\n return {\n id,\n label: header.get('key') || '',\n entries: Header({\n idPrefix: id,\n element,\n header\n }),\n autoFocusEntry: id + '-key',\n remove: removeFactory$d({\n commandStack,\n element,\n header\n })\n };\n });\n return {\n items,\n add: addFactory$a({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction removeFactory$d({\n commandStack,\n element,\n header\n}) {\n return function (event) {\n event.stopPropagation();\n let commands = [];\n const taskHeaders = getTaskHeaders$1(element);\n if (!taskHeaders) {\n return;\n }\n const newTaskHeaders = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(taskHeaders.get('values'), header);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: taskHeaders,\n properties: {\n values: newTaskHeaders\n }\n }\n });\n\n // remove zeebe:TaskHeaders if there are no headers anymore\n if (!newTaskHeaders.length) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n extensionElements = businessObject.get('extensionElements');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), taskHeaders)\n }\n }\n });\n }\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\nfunction addFactory$a({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n let commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe:TaskHeaders\n let taskHeaders = getTaskHeaders$1(element);\n if (!taskHeaders) {\n const parent = extensionElements;\n taskHeaders = createElement('zeebe:TaskHeaders', {\n values: []\n }, parent, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), taskHeaders]\n }\n }\n });\n }\n\n // (3) create header\n const header = createElement('zeebe:Header', {}, taskHeaders, bpmnFactory);\n\n // (4) add header to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: taskHeaders,\n properties: {\n values: [...taskHeaders.get('values'), header]\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\n\nfunction getProcessId(element) {\n const calledElement = getCalledElement(element);\n return calledElement ? calledElement.get('processId') : '';\n}\nfunction getCalledElement(element) {\n const calledElements = getCalledElements(element);\n return calledElements[0];\n}\nfunction getCalledElements(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const extElements = getExtensionElementsList(bo, 'zeebe:CalledElement');\n return extElements;\n}\n\nfunction InputPropagationProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity')) {\n return [];\n }\n return [{\n id: 'propagateAllParentVariables',\n component: PropagateAllParentVariables,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isToggleSwitchEntryEdited\n }];\n}\nfunction PropagateAllParentVariables(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n bpmnFactory = useService('bpmnFactory'),\n translate = useService('translate');\n const propagateAllParentVariables = isPropagateAllParentVariables(element);\n const getValue = () => {\n return propagateAllParentVariables;\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n\n // (1) ensure extension elements\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe:calledElement\n let calledElement = getCalledElement(businessObject);\n if (!calledElement) {\n calledElement = createElement('zeebe:CalledElement', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), calledElement]\n }\n }\n });\n }\n\n // (3) Update propagateAllParentVariables attribute\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: calledElement,\n properties: {\n propagateAllParentVariables: value\n }\n }\n });\n\n // (4) Execute the commands\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ToggleSwitchEntry)({\n id: 'propagateAllParentVariables',\n label: translate('Propagate all parent process variables'),\n switcherLabel: propagateAllParentVariables ? translate('On') : translate('Off'),\n tooltip: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('If turned on, all variables from the parent process instance will be propagated to the child process instance.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('Otherwise, only variables defined via input mappings will be propagated.')\n })]\n }),\n getValue,\n setValue\n });\n}\n\n// helper //////////////////////////\n\n/**\n * Check whether the propagateAllParentVariables attribute is set on an element.\n * @param {Object} element\n *\n * @returns {boolean}\n */\nfunction isPropagateAllParentVariables(element) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity')) {\n return undefined;\n }\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n calledElement = getCalledElement(bo);\n return calledElement && (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.has)(calledElement, 'propagateAllParentVariables') ? calledElement.get('propagateAllParentVariables') : /* default value */true;\n}\n\nfunction InputOutputParameter$1(props) {\n const {\n idPrefix,\n parameter\n } = props;\n const entries = [{\n id: idPrefix + '-target',\n component: TargetProperty,\n idPrefix,\n parameter\n }, {\n id: idPrefix + '-source',\n component: SourceProperty,\n idPrefix,\n parameter\n }];\n return entries;\n}\nfunction TargetProperty(props) {\n const {\n idPrefix,\n element,\n parameter\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: parameter,\n properties: {\n target: value\n }\n });\n };\n const getValue = parameter => {\n return parameter.target;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: parameter,\n id: idPrefix + '-target',\n label: translate((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parameter, 'zeebe:Input') ? 'Local variable name' : 'Process variable name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction SourceProperty(props) {\n const {\n idPrefix,\n element,\n parameter\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: parameter,\n properties: {\n source: value\n }\n });\n };\n const getValue = parameter => {\n return parameter.source;\n };\n return FeelEntryWithVariableContext({\n bpmnElement: element,\n element: parameter,\n id: idPrefix + '-source',\n label: translate('Variable assignment value'),\n feel: 'required',\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction getElements$1(bo, type, prop) {\n const elems = getExtensionElementsList(bo, type);\n return !prop ? elems : (elems[0] || {})[prop] || [];\n}\nfunction getParameters$1(element, prop) {\n const ioMapping = getIoMapping(element);\n return ioMapping && ioMapping.get(prop) || [];\n}\n\n/**\n * Get a ioMapping from the business object\n *\n * @param {djs.model.Base} element\n *\n * @return {ModdleElement} the ioMapping object\n */\nfunction getIoMapping(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return (getElements$1(bo, 'zeebe:IoMapping') || [])[0];\n}\n\n/**\n * Return all input parameters existing in the business object, and\n * an empty array if none exist.\n *\n * @param {djs.model.Base} element\n *\n * @return {Array} a list of input parameter objects\n */\nfunction getInputParameters$1(element) {\n return getParameters$1.apply(this, [element, 'inputParameters']);\n}\n\n/**\n * Return all output parameters existing in the business object, and\n * an empty array if none exist.\n *\n * @param {djs.model.Base} element\n *\n * @return {Array} a list of output parameter objects\n */\nfunction getOutputParameters$1(element) {\n return getParameters$1.apply(this, [element, 'outputParameters']);\n}\nfunction areInputParametersSupported$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:UserTask', 'bpmn:SubProcess', 'bpmn:CallActivity', 'bpmn:BusinessRuleTask', 'bpmn:ScriptTask']) || isZeebeServiceTask(element) || isSignalThrowEvent(element);\n}\nfunction areOutputParametersSupported$1(element) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:EndEvent') && (getErrorEventDefinition$1(element) || getTerminateEventDefinition(element))) {\n return false;\n }\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['zeebe:ZeebeServiceTask', 'bpmn:UserTask', 'bpmn:SubProcess', 'bpmn:ReceiveTask', 'bpmn:CallActivity', 'bpmn:Event', 'bpmn:BusinessRuleTask']);\n}\nfunction getTerminateEventDefinition(element) {\n return getEventDefinition$1(element, 'bpmn:TerminateEventDefinition');\n}\nfunction createIOMapping(properties, parent, bpmnFactory) {\n return createElement('zeebe:IoMapping', properties, parent, bpmnFactory);\n}\nfunction isSignalThrowEvent(element) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent'])) {\n return false;\n }\n return !!getEventDefinition$1(element, 'bpmn:SignalEventDefinition');\n}\n\nfunction InputProps$1({\n element,\n injector\n}) {\n if (!areInputParametersSupported$1(element)) {\n return null;\n }\n const inputParameters = getInputParameters$1(element) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = inputParameters.map((parameter, index) => {\n const id = element.id + '-input-' + index;\n return {\n id,\n label: parameter.get('target') || '',\n entries: InputOutputParameter$1({\n idPrefix: id,\n element,\n parameter\n }),\n autoFocusEntry: id + '-target',\n remove: removeFactory$c({\n commandStack,\n element,\n parameter\n })\n };\n });\n return {\n items,\n add: addFactory$9({\n element,\n bpmnFactory,\n commandStack\n })\n };\n}\nfunction removeFactory$c({\n commandStack,\n element,\n parameter\n}) {\n return function (event) {\n event.stopPropagation();\n const commands = [];\n const ioMapping = getIoMapping(element);\n if (!ioMapping) {\n return;\n }\n const inputParameters = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(ioMapping.get('inputParameters'), parameter);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: ioMapping,\n properties: {\n inputParameters\n }\n }\n });\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n extensionElements = businessObject.get('extensionElements'),\n values = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), ioMapping);\n\n // remove ioMapping if there are no input/output parameters anymore\n if (!inputParameters.length && !ioMapping.get('outputParameters').length) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values\n }\n }\n });\n }\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\nfunction addFactory$9({\n element,\n bpmnFactory,\n commandStack\n}) {\n return function (event) {\n event.stopPropagation();\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure IoMapping\n let ioMapping = getIoMapping(element);\n if (!ioMapping) {\n ioMapping = createIOMapping({\n inputParameters: [],\n outputParameters: []\n }, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), ioMapping]\n }\n }\n });\n }\n\n // (3) create parameter\n const newParameter = createElement('zeebe:Input', {\n target: nextId('InputVariable_')\n }, ioMapping, bpmnFactory);\n\n // (4) add parameter to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: ioMapping,\n properties: {\n inputParameters: [...ioMapping.get('inputParameters'), newParameter]\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\n\nfunction MessageProps(props) {\n const {\n element\n } = props;\n const message = getMessage(element);\n const entries = [];\n if (message) {\n entries.push({\n id: 'messageName',\n component: MessageName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n });\n }\n if (message && canHaveSubscriptionCorrelationKey(element)) {\n entries.push({\n id: 'messageSubscriptionCorrelationKey',\n component: SubscriptionCorrelationKey,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n });\n }\n return entries;\n}\nfunction MessageName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const message = getMessage(element);\n const getValue = () => {\n return message.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: message,\n properties: {\n name: value\n }\n });\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'messageName',\n label: translate('Name'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\nfunction SubscriptionCorrelationKey(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getCorrelationKey(element);\n };\n const setValue = value => {\n const commands = [];\n const properties = {\n correlationKey: value\n };\n const message = getMessage(element);\n let extensionElements = message.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, message, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: message,\n properties: {\n extensionElements\n }\n }\n });\n }\n let subscription = getSubscription(element);\n\n // (2a) add subscription with correlation key\n if (!subscription) {\n subscription = createElement('zeebe:Subscription', properties, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), subscription]\n }\n }\n });\n } else {\n // (2b) update existing subscription's correlation key\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n properties,\n moddleElement: subscription\n }\n });\n }\n\n // (3) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'messageSubscriptionCorrelationKey',\n label: translate('Subscription correlation key'),\n feel: 'required',\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction canHaveSubscriptionCorrelationKey(element) {\n // (1) allow for receive task\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ReceiveTask')) {\n return true;\n }\n\n // (2) allow for non start events\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent')) {\n return true;\n }\n\n // (3) allow for start events inside event sub processes\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') && (0,bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isEventSubProcess)(element.parent)) {\n return true;\n }\n return false;\n}\nfunction getCorrelationKey(element) {\n const subscription = getSubscription(element);\n return subscription ? subscription.get('correlationKey') : '';\n}\nfunction getSubscription(element) {\n const message = getMessage(element);\n const subscriptions = getSubscriptions(message);\n return subscriptions[0];\n}\nfunction getSubscriptions(message) {\n const extensionElements = getExtensionElementsList(message, 'zeebe:Subscription');\n return extensionElements;\n}\n\nfunction MultiInstanceProps$1(props) {\n const {\n element\n } = props;\n if (!supportsMultiInstances(element)) {\n return [];\n }\n return [{\n id: 'multiInstance-inputCollection',\n component: InputCollection,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }, {\n id: 'multiInstance-inputElement',\n component: InputElement,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'multiInstance-outputCollection',\n component: OutputCollection,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'multiInstance-outputElement',\n component: OutputElement,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }, {\n id: 'multiInstance-completionCondition',\n component: CompletionCondition,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }];\n}\nfunction InputCollection(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getProperty$1(element, 'inputCollection');\n };\n const setValue = value => {\n return setProperty(element, 'inputCollection', value, commandStack, bpmnFactory);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'multiInstance-inputCollection',\n label: translate('Input collection'),\n feel: 'required',\n getValue,\n setValue,\n debounce\n });\n}\nfunction InputElement(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getProperty$1(element, 'inputElement');\n };\n const setValue = value => {\n return setProperty(element, 'inputElement', value, commandStack, bpmnFactory);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'multiInstance-inputElement',\n label: translate('Input element'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction OutputCollection(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getProperty$1(element, 'outputCollection');\n };\n const setValue = value => {\n return setProperty(element, 'outputCollection', value, commandStack, bpmnFactory);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'multiInstance-outputCollection',\n label: translate('Output collection'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction OutputElement(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getProperty$1(element, 'outputElement');\n };\n const setValue = value => {\n return setProperty(element, 'outputElement', value, commandStack, bpmnFactory);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'multiInstance-outputElement',\n label: translate('Output element'),\n feel: 'required',\n getValue,\n setValue,\n debounce\n });\n}\nfunction CompletionCondition(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n const completionCondition = getCompletionCondition(element);\n return completionCondition && completionCondition.get('body');\n };\n const setValue = value => {\n if (value && value !== '') {\n const loopCharacteristics = getLoopCharacteristics$1(element);\n const completionCondition = createElement('bpmn:FormalExpression', {\n body: value\n }, loopCharacteristics, bpmnFactory);\n setCompletionCondition(element, commandStack, completionCondition);\n } else {\n setCompletionCondition(element, commandStack, undefined);\n }\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'multiInstance-completionCondition',\n label: translate('Completion condition'),\n feel: 'required',\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction getLoopCharacteristics$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return businessObject.get('loopCharacteristics');\n}\nfunction getZeebeLoopCharacteristics(loopCharacteristics) {\n const extensionElements = getExtensionElementsList(loopCharacteristics, 'zeebe:LoopCharacteristics');\n return extensionElements && extensionElements[0];\n}\nfunction supportsMultiInstances(element) {\n return !!getLoopCharacteristics$1(element);\n}\nfunction getCompletionCondition(element) {\n return getLoopCharacteristics$1(element).get('completionCondition');\n}\nfunction setCompletionCondition(element, commandStack, completionCondition = undefined) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: getLoopCharacteristics$1(element),\n properties: {\n completionCondition\n }\n });\n}\nfunction getProperty$1(element, propertyName) {\n const loopCharacteristics = getLoopCharacteristics$1(element),\n zeebeLoopCharacteristics = getZeebeLoopCharacteristics(loopCharacteristics);\n return zeebeLoopCharacteristics && zeebeLoopCharacteristics.get(propertyName);\n}\nfunction setProperty(element, propertyName, value, commandStack, bpmnFactory) {\n const loopCharacteristics = getLoopCharacteristics$1(element);\n const commands = [];\n\n // (1) ensure extension elements\n let extensionElements = loopCharacteristics.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, loopCharacteristics, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: loopCharacteristics,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe loop characteristics\n let zeebeLoopCharacteristics = getZeebeLoopCharacteristics(loopCharacteristics);\n if (!zeebeLoopCharacteristics) {\n zeebeLoopCharacteristics = createElement('zeebe:LoopCharacteristics', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), zeebeLoopCharacteristics]\n }\n }\n });\n }\n\n // (3) update defined property\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: zeebeLoopCharacteristics,\n properties: {\n [propertyName]: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n}\n\nfunction OutputPropagationProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity')) {\n return [];\n }\n return [{\n id: 'propagateAllChildVariables',\n component: PropagateAllChildVariables,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isToggleSwitchEntryEdited\n }];\n}\nfunction PropagateAllChildVariables(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n bpmnFactory = useService('bpmnFactory'),\n translate = useService('translate');\n const propagateAllChildVariables = isPropagateAllChildVariables(element);\n const getValue = () => {\n return propagateAllChildVariables;\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n\n // (1) ensure extension elements\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe:calledElement\n let calledElement = getCalledElement(businessObject);\n if (!calledElement) {\n calledElement = createElement('zeebe:CalledElement', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), calledElement]\n }\n }\n });\n }\n\n // (3) Update propagateAllChildVariables attribute\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: calledElement,\n properties: {\n propagateAllChildVariables: value\n }\n }\n });\n\n // (4) Execute the commands\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ToggleSwitchEntry)({\n id: 'propagateAllChildVariables',\n label: translate('Propagate all child process variables'),\n switcherLabel: propagateAllChildVariables ? translate('On') : translate('Off'),\n tooltip: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('If turned on, all variables from the child process instance will be propagated to the parent process instance.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('Otherwise, only variables defined via output mappings will be propagated.')\n })]\n }),\n getValue,\n setValue\n });\n}\n\n// helper //////////////////////////\n\n/**\n * Determine default value for propagateAllChildVariables attribute\n * @param {Object} element representing a bpmn:CallActivity\n *\n * @returns {boolean}\n */\nfunction determinePropAllChildVariablesDefault(element) {\n const outputParameters = getOutputParameters$1(element);\n if (outputParameters) {\n return outputParameters.length > 0 ? false : true;\n }\n}\n\n/**\n * Check whether the propagateAllChildVariables attribute is set on an element.\n * Note that a default logic will be determine if it is not explicitly set.\n * @param {Object} element\n *\n * @returns {boolean}\n */\nfunction isPropagateAllChildVariables(element) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity')) {\n return undefined;\n }\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n calledElement = getCalledElement(bo);\n return calledElement && (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.has)(calledElement, 'propagateAllChildVariables') ? calledElement.get('propagateAllChildVariables') : determinePropAllChildVariablesDefault(element);\n}\n\nfunction OutputProps$1({\n element,\n injector\n}) {\n if (!areOutputParametersSupported$1(element)) {\n return null;\n }\n const outputParameters = getOutputParameters$1(element) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = outputParameters.map((parameter, index) => {\n const id = element.id + '-output-' + index;\n return {\n id,\n label: parameter.get('target') || '',\n entries: InputOutputParameter$1({\n idPrefix: id,\n element,\n parameter\n }),\n autoFocusEntry: id + '-target',\n remove: removeFactory$b({\n commandStack,\n element,\n parameter\n })\n };\n });\n return {\n items,\n add: addFactory$8({\n element,\n bpmnFactory,\n commandStack\n })\n };\n}\nfunction removeFactory$b({\n commandStack,\n element,\n parameter\n}) {\n return function (event) {\n event.stopPropagation();\n let commands = [];\n const ioMapping = getIoMapping(element);\n if (!ioMapping) {\n return;\n }\n const outputParameters = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(ioMapping.get('outputParameters'), parameter);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: ioMapping,\n properties: {\n outputParameters\n }\n }\n });\n\n // remove ioMapping if there are no input/output parameters anymore\n if (!ioMapping.get('inputParameters').length && !outputParameters.length) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n extensionElements = businessObject.get('extensionElements'),\n values = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), ioMapping);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values\n }\n }\n });\n }\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\nfunction addFactory$8({\n element,\n bpmnFactory,\n commandStack\n}) {\n return function (event) {\n event.stopPropagation();\n let commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure IoMapping\n let ioMapping = getIoMapping(element);\n if (!ioMapping) {\n const parent = extensionElements;\n ioMapping = createIOMapping({\n inputParameters: [],\n outputParameters: []\n }, parent, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), ioMapping]\n }\n }\n });\n }\n\n // (3) create parameter\n const newParameter = createElement('zeebe:Output', {\n target: nextId('OutputVariable_')\n }, ioMapping, bpmnFactory);\n\n // (4) add parameter to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: ioMapping,\n properties: {\n outputParameters: [...ioMapping.get('outputParameters'), newParameter]\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\n\nfunction PriorityDefinitionProps(props) {\n const {\n element\n } = props;\n if (!isZeebeUserTask(element)) {\n return [];\n }\n return [{\n id: 'priorityDefinitionPriority',\n component: Priority$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }];\n}\nfunction Priority$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getPriorityDefinition(element) || {}).priority;\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure PriorityDefinition\n let priorityDefinition = getPriorityDefinition(element);\n const isNullValue = value === null || value === '' || value === undefined;\n if (priorityDefinition && isNullValue) {\n // (2a) remove priority definition if it exists and priority is set to null\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: extensionElements.get('values').filter(v => v !== priorityDefinition)\n }\n }\n });\n } else if (priorityDefinition && !isNullValue) {\n // (2b) update priority definition if it already exists\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: priorityDefinition,\n properties: {\n priority: value\n }\n }\n });\n } else if (!priorityDefinition && !isNullValue) {\n // (2c) create priority definition if it does not exist\n priorityDefinition = createElement('zeebe:PriorityDefinition', {\n priority: value\n }, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), priorityDefinition]\n }\n }\n });\n }\n\n // (3) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'priorityDefinitionPriority',\n label: translate('Priority'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction getPriorityDefinition(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:PriorityDefinition')[0];\n}\nfunction isZeebeUserTask(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask') && !!getExtensionElementsList(businessObject, 'zeebe:UserTask')[0];\n}\n\nconst SCRIPT_IMPLEMENTATION_OPTION = 'script',\n JOB_WORKER_IMPLEMENTATION_OPTION$1 = 'jobWorker',\n DEFAULT_IMPLEMENTATION_OPTION = '';\nfunction ScriptImplementationProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ScriptTask')) {\n return [];\n }\n return [{\n id: 'scriptImplementation',\n component: ScriptImplementation,\n isEdited: () => isScriptImplementationEdited(element)\n }];\n}\nfunction ScriptImplementation(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const getValue = () => {\n if (getScript$1(element)) {\n return SCRIPT_IMPLEMENTATION_OPTION;\n }\n if (getTaskDefinition$1(element)) {\n return JOB_WORKER_IMPLEMENTATION_OPTION$1;\n }\n return DEFAULT_IMPLEMENTATION_OPTION;\n };\n\n /**\n * Set value by either creating a zeebe:script or a zeebe:taskDefintion\n * extension element. Note that they must not exist both at the same time, however\n * this will be ensured by a bpmn-js behavior (and not by the propPanel).\n */\n const setValue = value => {\n let extensionElement, extensionElementType;\n if (value === SCRIPT_IMPLEMENTATION_OPTION) {\n extensionElement = getScript$1(element);\n extensionElementType = 'zeebe:Script';\n } else if (value === JOB_WORKER_IMPLEMENTATION_OPTION$1) {\n extensionElement = getTaskDefinition$1(element);\n extensionElementType = 'zeebe:TaskDefinition';\n } else {\n resetElement(element, commandStack);\n }\n if (!extensionElement && extensionElementType) {\n extensionElement = createElement(extensionElementType, {}, null, bpmnFactory);\n updateExtensionElements(element, extensionElement, bpmnFactory, commandStack);\n }\n };\n const getOptions = () => {\n const options = [{\n value: DEFAULT_IMPLEMENTATION_OPTION,\n label: translate('')\n }, {\n value: SCRIPT_IMPLEMENTATION_OPTION,\n label: translate('FEEL expression')\n }, {\n value: JOB_WORKER_IMPLEMENTATION_OPTION$1,\n label: translate('Job worker')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id,\n label: translate('Implementation'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n// helper ///////////////////////\n\nfunction getTaskDefinition$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:TaskDefinition')[0];\n}\nfunction getScript$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:Script')[0];\n}\nfunction getTaskHeaders(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:TaskHeaders');\n}\nfunction isScriptImplementationEdited(element) {\n return getTaskDefinition$1(element) || getScript$1(element);\n}\nfunction resetElement(element, commandStack) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const taskDefinition = getTaskDefinition$1(element);\n const taskHeaders = getTaskHeaders(element);\n const script = getScript$1(element);\n if (taskDefinition) {\n const removed = [taskDefinition, taskHeaders].filter(Boolean);\n removeExtensionElements(element, businessObject, removed, commandStack);\n return;\n }\n if (script) {\n removeExtensionElements(element, businessObject, script, commandStack);\n }\n}\nfunction updateExtensionElements(element, extensionElementToAdd, bpmnFactory, commandStack) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const commands = [];\n let extensionElements = businessObject.get('extensionElements');\n let extensionElementValues;\n\n // (1) create bpmn:ExtensionElements if it doesn't exist\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n extensionElementToAdd.$parent = extensionElements;\n\n // (2) remove old exension element from extensionElements\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(extensionElementToAdd, 'zeebe:TaskDefinition')) {\n extensionElementValues = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), getScript$1(element));\n } else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(extensionElementToAdd, 'zeebe:Script')) {\n const matcher = extension => (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(extension, ['zeebe:TaskDefinition', 'zeebe:TaskHeaders']);\n extensionElementValues = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), matcher);\n }\n\n // (3) add extension element to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElementValues, extensionElementToAdd]\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n}\n\nfunction ScriptProps$1(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ScriptTask') || !getScript(element)) {\n return [];\n }\n return [{\n id: 'resultVariable',\n component: ResultVariable$3,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'scriptExpression',\n component: Expression$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }];\n}\nfunction Expression$2(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getScript(element) || {}).get('expression');\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure script\n let script = getScript(element);\n if (!script) {\n script = createElement('zeebe:Script', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), script]\n }\n }\n });\n }\n\n // (3) update script.expression\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: script,\n properties: {\n expression: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id,\n label: translate('FEEL expression'),\n feel: 'required',\n getValue,\n setValue,\n debounce\n });\n}\nfunction ResultVariable$3(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getScript(element) || {}).resultVariable;\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure script\n let script = getScript(element);\n if (!script) {\n script = createElement('zeebe:Script', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), script]\n }\n }\n });\n }\n\n // (3) update script.resultVariable\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: script,\n properties: {\n resultVariable: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id,\n label: translate('Result variable'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction getScript(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:Script')[0];\n}\n\n/**\n * @returns {Entry[]}\n */\nfunction SignalProps(props) {\n const {\n element\n } = props;\n if (!isSignalSupported(element)) {\n return [];\n }\n const signal = getSignal(element);\n let entries = [];\n if (signal) {\n entries = [...entries, {\n id: 'signalName',\n component: SignalName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }];\n }\n return entries;\n}\nfunction SignalName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const signal = getSignal(element);\n const getValue = () => {\n return signal.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: signal,\n properties: {\n name: value\n }\n });\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'signalName',\n label: translate('Name'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\nconst CalledElementBinding$1 = withProps(Binding$2, {\n type: 'zeebe:CalledElement'\n }),\n CalledElementVersionTag$1 = withProps(VersionTag$3, {\n type: 'zeebe:CalledElement'\n });\nfunction TargetProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity')) {\n return [];\n }\n const entries = [{\n id: 'targetProcessId',\n component: TargetProcessId,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }, {\n id: 'bindingType',\n component: CalledElementBinding$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (getBindingType(element, 'zeebe:CalledElement') === 'versionTag') {\n entries.push({\n id: 'versionTag',\n component: CalledElementVersionTag$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction TargetProcessId(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack'),\n bpmnFactory = useService('bpmnFactory'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const getValue = () => {\n return getProcessId(element);\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n\n // (1) ensure extension elements\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe:calledElement\n let calledElement = getCalledElement(businessObject);\n if (!calledElement) {\n calledElement = createElement('zeebe:CalledElement', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), calledElement]\n }\n }\n });\n }\n\n // (3) Update processId attribute\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: calledElement,\n properties: {\n processId: value\n }\n }\n });\n\n // (4) Execute the commands\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id,\n label: translate('Process ID'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction TaskDefinitionProps(props) {\n const {\n element\n } = props;\n if (!isZeebeServiceTask(element)) {\n return [];\n }\n return [{\n id: 'taskDefinitionType',\n component: TaskDefinitionType,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }, {\n id: 'taskDefinitionRetries',\n component: TaskDefinitionRetries,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }];\n}\nfunction TaskDefinitionType(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getTaskDefinition(element) || {}).type;\n };\n const setValue = value => {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure task definition\n let taskDefinition = getTaskDefinition(element);\n if (!taskDefinition) {\n taskDefinition = createElement('zeebe:TaskDefinition', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), taskDefinition]\n }\n }\n });\n }\n\n // (3) update task definition type\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: taskDefinition,\n properties: {\n type: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id,\n label: translate('Job type'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\nfunction TaskDefinitionRetries(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (getTaskDefinition(element) || {}).retries;\n };\n const setValue = value => {\n let commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure task definition\n let taskDefinition = getTaskDefinition(element);\n if (!taskDefinition) {\n taskDefinition = createElement('zeebe:TaskDefinition', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), taskDefinition]\n }\n }\n });\n }\n\n // (3) update task definition retries\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: taskDefinition,\n properties: {\n retries: value\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id,\n label: translate('Retries'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction getTaskDefinition(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:TaskDefinition')[0];\n}\n\nconst EVENT_TYPE = ['complete', 'assignment'];\nconst EVENT_TO_LABEL$1 = {\n complete: 'Complete',\n assignment: 'Assignment'\n};\nfunction TaskListenerEntries(props) {\n const {\n idPrefix,\n listener\n } = props;\n return [{\n id: idPrefix + '-eventType',\n component: EventType$1,\n idPrefix,\n listener,\n eventTypes: EVENT_TYPE\n }, {\n id: idPrefix + '-listenerType',\n component: ListenerType$1,\n idPrefix,\n listener\n }, {\n id: idPrefix + '-retries',\n component: Retries,\n idPrefix,\n listener\n }];\n}\nfunction EventType$1(props) {\n const {\n idPrefix,\n element,\n listener,\n eventTypes\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const getOptions = () => {\n return eventTypes.map(eventType => ({\n value: eventType,\n label: translate(EVENT_TO_LABEL$1[eventType])\n }));\n };\n const setValue = value => {\n modeling.updateModdleProperties(element, listener, {\n eventType: value\n });\n };\n const getValue = () => {\n return listener.get('eventType');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: idPrefix + '-eventType',\n label: translate('Event type'),\n getValue,\n setValue,\n getOptions\n });\n}\n\nfunction TaskListenersProps({\n element,\n injector\n}) {\n let businessObject = getRelevantBusinessObject$1(element);\n\n // not allowed in empty pools\n if (!businessObject) {\n return;\n }\n if (!isZeebeUserTask$1(element)) {\n return;\n }\n const moddle = injector.get('moddle');\n if (!canHaveTaskListeners(businessObject, moddle)) {\n return;\n }\n const listeners = getListenersList(businessObject) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack'),\n modeling = injector.get('modeling'),\n translate = injector.get('translate');\n const items = listeners.map((listener, index) => {\n const id = element.id + '-taskListener-' + index;\n const type = listener.get('type') || '';\n return {\n id,\n label: translate(`${EVENT_TO_LABEL$1[listener.get('eventType')]}: {type}`, {\n type\n }),\n entries: TaskListenerEntries({\n idPrefix: id,\n listener\n }),\n autoFocusEntry: id + '-eventType',\n remove: removeFactory$a({\n modeling,\n element,\n listener\n })\n };\n });\n return {\n items,\n add: addFactory$7({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction removeFactory$a({\n modeling,\n element,\n listener\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = getRelevantBusinessObject$1(element);\n const container = getTaskListenersContainer(businessObject);\n if (!container) {\n return;\n }\n const listeners = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(container.get('listeners'), listener);\n modeling.updateModdleProperties(element, container, {\n listeners\n });\n };\n}\nfunction addFactory$7({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n let commands = [];\n const businessObject = getRelevantBusinessObject$1(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe:TaskListeners\n let taskListeners = getTaskListenersContainer(businessObject);\n if (!taskListeners) {\n const parent = extensionElements;\n taskListeners = createElement('zeebe:TaskListeners', {\n listeners: []\n }, parent, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), taskListeners]\n }\n }\n });\n }\n\n // (3) create zeebe:TaskListener\n const TaskListener = createElement('zeebe:TaskListener', getDefaultListenerProps(), taskListeners, bpmnFactory);\n\n // (4) add TaskListener to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: taskListeners,\n properties: {\n listeners: [...taskListeners.get('listeners'), TaskListener]\n }\n }\n });\n\n // (5) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\n\n// helper //////////////////\n\nfunction getRelevantBusinessObject$1(element) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n return businessObject.get('processRef');\n }\n return businessObject;\n}\nfunction getTaskListenersContainer(element) {\n const TaskListeners = getExtensionElementsList(element, 'zeebe:TaskListeners');\n return TaskListeners && TaskListeners[0];\n}\nfunction getListenersList(element) {\n const TaskListeners = getTaskListenersContainer(element);\n return TaskListeners && TaskListeners.get('listeners');\n}\nfunction canHaveTaskListeners(bo, moddle) {\n const TaskListenersDescriptor = moddle.getTypeDescriptor('zeebe:TaskListeners');\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(bo, TaskListenersDescriptor.meta.allowedIn);\n}\nfunction getDefaultListenerProps() {\n return {\n eventType: EVENT_TYPE[0]\n };\n}\n\nfunction TaskScheduleProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask')) {\n return [];\n }\n return [{\n id: 'taskScheduleDueDate',\n component: DueDate$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }, {\n id: 'taskScheduleFollowUpDate',\n component: FollowUpDate$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited\n }];\n}\nfunction DueDate$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n const taskSchedule = getTaskSchedule(element);\n if (!taskSchedule) {\n return;\n }\n return taskSchedule.get('dueDate');\n };\n const setValue = value => {\n let commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe:TaskSchedule\n let taskSchedule = getTaskSchedule(element);\n if (!taskSchedule) {\n taskSchedule = createElement('zeebe:TaskSchedule', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), taskSchedule]\n }\n }\n });\n }\n\n // (3) update zeebe:dueDate\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: taskSchedule,\n properties: {\n dueDate: value\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'taskScheduleDueDate',\n label: translate('Due date'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\nfunction FollowUpDate$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n const taskSchedule = getTaskSchedule(element);\n if (!taskSchedule) {\n return;\n }\n return taskSchedule.get('followUpDate');\n };\n const setValue = value => {\n let commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure zeebe:TaskSchedule\n let taskSchedule = getTaskSchedule(element);\n if (!taskSchedule) {\n taskSchedule = createElement('zeebe:TaskSchedule', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), taskSchedule]\n }\n }\n });\n }\n\n // (3) update zeebe:followUpDate\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: taskSchedule,\n properties: {\n followUpDate: value\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'taskScheduleFollowUpDate',\n label: translate('Follow up date'),\n feel: 'optional',\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction getTaskSchedule(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:TaskSchedule')[0];\n}\n\n/**\n * Check whether a given timer expression type is supported for a given element.\n *\n * @param {string} type\n * @param {Element|ModdleElement} element\n *\n * @return {boolean}\n */\nfunction isTimerExpressionTypeSupported(type, element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n switch (type) {\n case 'timeDate':\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent', 'bpmn:StartEvent']);\n case 'timeCycle':\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') && !hasParentEventSubProcess(businessObject) || !isInterrupting(businessObject)) {\n return true;\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BoundaryEvent') && !isInterrupting(businessObject)) {\n return true;\n }\n return false;\n case 'timeDuration':\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent'])) {\n return true;\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') && hasParentEventSubProcess(businessObject)) {\n return true;\n }\n return false;\n default:\n return false;\n }\n}\nfunction isInterrupting(businessObject) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(businessObject, 'bpmn:BoundaryEvent')) {\n return businessObject.get('cancelActivity') !== false;\n }\n return businessObject.get('isInterrupting') !== false;\n}\nfunction hasParentEventSubProcess(businessObject) {\n const parent = businessObject.$parent;\n return parent && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parent, 'bpmn:SubProcess') && parent.get('triggeredByEvent');\n}\n\nfunction TimerProps$1(props) {\n const {\n element,\n injector\n } = props;\n const translate = injector.get('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n timerEventDefinition = getTimerEventDefinition(businessObject),\n timerEventDefinitionType = getTimerDefinitionType(timerEventDefinition);\n\n // (1) Only show for supported elements\n if (!isTimerSupported(element)) {\n return [];\n }\n const timerOptions = getTimerOptions(element, translate);\n const entries = [];\n entries.push({\n id: 'timerEventDefinitionType',\n component: TimerEventDefinitionType$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited,\n options: timerOptions\n });\n if (timerEventDefinitionType) {\n entries.push({\n id: 'timerEventDefinitionValue',\n component: TimerEventDefinitionValue$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isFeelEntryEdited,\n timerEventDefinitionType: timerEventDefinitionType || timerOptions[0].value\n });\n }\n return entries;\n}\nfunction getTimerOptions(element, translate) {\n const options = [];\n if (isTimerExpressionTypeSupported('timeDate', element)) {\n options.push({\n value: 'timeDate',\n label: translate('Date')\n });\n }\n if (isTimerExpressionTypeSupported('timeDuration', element)) {\n options.push({\n value: 'timeDuration',\n label: translate('Duration')\n });\n }\n if (isTimerExpressionTypeSupported('timeCycle', element)) {\n options.push({\n value: 'timeCycle',\n label: translate('Cycle')\n });\n }\n return options;\n}\n\n/**\n * TimerEventDefinitionType - Generic select entry allowing to select a specific\n * timerEventDefintionType. To be used together with timerEventDefinitionValue.\n *\n * @param {type} props\n * @return {SelectEntry}\n */\nfunction TimerEventDefinitionType$1(props) {\n const {\n element,\n options\n } = props;\n const commandStack = useService('commandStack'),\n bpmnFactory = useService('bpmnFactory'),\n translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n timerEventDefinition = getTimerEventDefinition(businessObject),\n timerEventDefinitionType = getTimerDefinitionType(timerEventDefinition);\n const getValue = () => {\n return timerEventDefinitionType || '';\n };\n const setValue = value => {\n // (1) Check if value is different to current type\n if (value === timerEventDefinitionType) {\n return;\n }\n\n // (2) Create empty formalExpression element\n const formalExpression = createTimerFormalExpression(bpmnFactory, timerEventDefinition);\n\n // (3) Set the value for selected timerEventDefinitionType\n const newProps = {\n timeDuration: undefined,\n timeDate: undefined,\n timeCycle: undefined\n };\n if (value !== '') {\n newProps[value] = formalExpression;\n }\n\n // (4) Execute businessObject update\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: timerEventDefinition,\n properties: newProps\n });\n };\n const getOptions = element => {\n return [{\n value: '',\n label: translate('')\n }, ...options];\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'timerEventDefinitionType',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n/**\n * TimerEventDefinitionValue - Generic textField entry allowing to specify the\n * timerEventDefintionValue based on the set timerEventDefintionType. To be used\n * together with timerEventDefinitionType.\n *\n * @param {object} props\n * @param {ModdleElement} props.element\n * @param {'timeCycle'|'timeDate'|'timeDuration'} props.timerEventDefinitionType?\n * @param {string} props.label?\n * @return {TextFieldEntry}\n */\nfunction TimerEventDefinitionValue$1(props) {\n const {\n element,\n label,\n timerEventDefinitionType\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput'),\n bpmnFactory = useService('bpmnFactory');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n timerEventDefinition = getTimerEventDefinition(businessObject),\n timerEventFormalExpression = timerEventDefinition.get(timerEventDefinitionType);\n const getValue = () => {\n return timerEventFormalExpression && timerEventFormalExpression.get('body');\n };\n const setValue = value => {\n if (!timerEventFormalExpression) {\n const expression = createTimerFormalExpression(bpmnFactory, timerEventDefinition);\n expression.set('body', value);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: timerEventDefinition,\n properties: {\n [timerEventDefinitionType]: expression\n }\n });\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: timerEventFormalExpression,\n properties: {\n body: value\n }\n });\n };\n return FeelEntryWithVariableContext({\n element,\n id: 'timerEventDefinitionValue',\n label: label || translate('Value'),\n feel: 'optional',\n getValue,\n setValue,\n debounce,\n tooltip: getTimerEventDefinitionValueDescription$1(timerEventDefinitionType, translate)\n });\n}\n\n// helper //////////////////////////\n\nfunction createTimerFormalExpression(bpmnFactory, eventDefinition) {\n const formalExpression = bpmnFactory.create('bpmn:FormalExpression', {\n body: undefined\n });\n formalExpression.$parent = eventDefinition;\n return formalExpression;\n}\nfunction getTimerEventDefinitionValueDescription$1(timerDefinitionType, translate) {\n switch (timerDefinitionType) {\n case 'timeDate':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A specific point in time defined as ISO 8601 combined date and time representation.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"2019-10-01T12:00:00Z\"\n }), \" - \", translate('UTC time')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"2019-10-02T08:09:40+02:00\"\n }), \" - \", translate('UTC plus 2 hours zone offset')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/reference/bpmn-processes/timer-events/timer-events#time-date\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Timer documentation'),\n children: translate('How to configure a timer')\n })]\n });\n case 'timeCycle':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A cycle defined as ISO 8601 repeating intervals format, or a cron expression.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"R5/PT10S\"\n }), \" - \", translate('every 10 seconds, up to 5 times')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"R/P1D\"\n }), \" - \", translate('every day, infinitely')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"0 0 9-17 * * MON-FRI\"\n }), \" - \", translate('every hour on the hour from 9-5 p.m. UTC Monday-Friday')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/reference/bpmn-processes/timer-events/timer-events#time-cycle\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Timer documentation'),\n children: translate('How to configure a timer')\n })]\n });\n case 'timeDuration':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A time duration defined as ISO 8601 durations format.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"PT15S\"\n }), \" - \", translate('15 seconds')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"PT1H30M\"\n }), \" - \", translate('1 hour and 30 minutes')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"P14D\"\n }), \" - \", translate('14 days')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/reference/bpmn-processes/timer-events/timer-events#time-duration\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Timer documentation'),\n children: translate('How to configure a timer')\n })]\n });\n }\n}\n\nconst ZEEBE_USER_TASK_IMPLEMENTATION_OPTION = 'zeebeUserTask',\n JOB_WORKER_IMPLEMENTATION_OPTION = 'jobWorker';\nfunction UserTaskImplementationProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask')) {\n return [];\n }\n return [{\n id: 'userTaskImplementation',\n component: UserTaskImplementation,\n isEdited: () => isUserTaskImplementationEdited(element)\n }];\n}\nfunction UserTaskImplementation(props) {\n const {\n element,\n id\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const getValue = () => {\n if (getZeebeUserTask(element)) {\n return ZEEBE_USER_TASK_IMPLEMENTATION_OPTION;\n }\n return JOB_WORKER_IMPLEMENTATION_OPTION;\n };\n\n /**\n * Set value by either creating or removing zeebe:userTask extension element.\n * Note that they must not exist both at the same time, however this\n * will be ensured by a camunda-bpmn-js behavior (and not by the propPanel).\n */\n const setValue = value => {\n if (value === ZEEBE_USER_TASK_IMPLEMENTATION_OPTION) {\n createZeebeUserTask(element, bpmnFactory, commandStack);\n } else if (value === JOB_WORKER_IMPLEMENTATION_OPTION) {\n removeZeebeUserTask(element, commandStack);\n }\n };\n const getOptions = () => {\n const options = [{\n value: ZEEBE_USER_TASK_IMPLEMENTATION_OPTION,\n label: translate('Zeebe user task')\n }, {\n value: JOB_WORKER_IMPLEMENTATION_OPTION,\n label: translate('Job worker')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id,\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n// helper ///////////////////////\nfunction createZeebeUserTask(element, bpmnFactory, commandStack) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const zeebeUserTask = createElement('zeebe:UserTask', {}, businessObject, bpmnFactory);\n addExtensionElements(element, businessObject, zeebeUserTask, bpmnFactory, commandStack);\n}\nfunction removeZeebeUserTask(element, commandStack) {\n const zeebeUserTask = getZeebeUserTask(element);\n removeExtensionElements(element, (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), zeebeUserTask, commandStack);\n}\nfunction isUserTaskImplementationEdited(element) {\n return getZeebeUserTask(element);\n}\nfunction getZeebeUserTask(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'zeebe:UserTask')[0];\n}\n\nfunction VersionTagProps$1(props) {\n const {\n element\n } = props;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') && !((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && businessObject.get('processRef'))) {\n return [];\n }\n return [{\n id: 'versionTag',\n component: VersionTag$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction VersionTag$2(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const debounce = useService('debounceInput');\n const translate = useService('translate');\n const getValue = () => {\n const versionTag = getVersionTag(element);\n if (versionTag) {\n return versionTag.get('value');\n }\n };\n const setValue = value => {\n let commands = [];\n const businessObject = getProcess$4(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure version tag\n let versionTag = getVersionTag(element);\n if (!versionTag) {\n versionTag = createElement('zeebe:VersionTag', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), versionTag]\n }\n }\n });\n }\n\n // (3) update version tag value\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: versionTag,\n properties: {\n value\n }\n }\n });\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'versionTag',\n label: translate('Version tag'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper //////////////////\n\nfunction getProcess$4(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element) : (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('processRef');\n}\nfunction getVersionTag(element) {\n const businessObject = getProcess$4(element);\n return getExtensionElementsList(businessObject, 'zeebe:VersionTag')[0];\n}\n\nfunction ExtensionProperty(props) {\n const {\n idPrefix,\n property\n } = props;\n const entries = [{\n id: idPrefix + '-name',\n component: NameProperty$1,\n idPrefix,\n property\n }, {\n id: idPrefix + '-value',\n component: ValueProperty$1,\n idPrefix,\n property\n }];\n return entries;\n}\nfunction NameProperty$1(props) {\n const {\n idPrefix,\n element,\n property\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: property,\n properties: {\n name: value\n }\n });\n };\n const getValue = () => {\n return property.name;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: property,\n id: idPrefix + '-name',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ValueProperty$1(props) {\n const {\n idPrefix,\n element,\n property\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: property,\n properties: {\n value\n }\n });\n };\n const getValue = () => {\n return property.value;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: property,\n id: idPrefix + '-value',\n label: translate('Value'),\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction ExtensionPropertiesProps({\n element,\n injector,\n namespace = 'camunda'\n}) {\n let businessObject = getRelevantBusinessObject(element);\n\n // do not offer for empty pools\n if (!businessObject) {\n return;\n }\n const properties = getPropertiesList(businessObject, namespace) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = properties.map((property, index) => {\n const id = element.id + '-extensionProperty-' + index;\n return {\n id,\n label: property.get('name') || '',\n entries: ExtensionProperty({\n idPrefix: id,\n element,\n property\n }),\n autoFocusEntry: id + '-name',\n remove: removeFactory$9({\n commandStack,\n element,\n property,\n namespace\n })\n };\n });\n return {\n items,\n add: addFactory$6({\n bpmnFactory,\n commandStack,\n element,\n namespace\n })\n };\n}\nfunction removeFactory$9({\n commandStack,\n element,\n property,\n namespace\n}) {\n return function (event) {\n event.stopPropagation();\n const commands = [];\n const businessObject = getRelevantBusinessObject(element);\n const extensionElements = businessObject.get('extensionElements');\n const properties = getProperties(businessObject, namespace);\n if (!properties) {\n return;\n }\n const propertyName = getPropertyName(namespace);\n const values = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(properties.get(propertyName), property);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: properties,\n properties: {\n [propertyName]: values\n }\n }\n });\n\n // remove camunda:Properties if there are no properties anymore\n if (!values.length) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), properties)\n }\n }\n });\n }\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\nfunction addFactory$6({\n bpmnFactory,\n commandStack,\n element,\n namespace\n}) {\n return function (event) {\n event.stopPropagation();\n let commands = [];\n const businessObject = getRelevantBusinessObject(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n const propertyName = getPropertyName(namespace);\n\n // (2) ensure camunda:Properties\n let properties = getProperties(businessObject, namespace);\n if (!properties) {\n const parent = extensionElements;\n properties = createElement(`${namespace}:Properties`, {\n [propertyName]: []\n }, parent, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), properties]\n }\n }\n });\n }\n\n // (3) create camunda:Property\n const property = createElement(`${namespace}:Property`, {}, properties, bpmnFactory);\n\n // (4) add property to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: properties,\n properties: {\n [propertyName]: [...properties.get(propertyName), property]\n }\n }\n });\n\n // (5) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\n\n// helper //////////////////\n\nfunction getRelevantBusinessObject(element) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n return businessObject.get('processRef');\n }\n return businessObject;\n}\nfunction getPropertyName(namespace = 'camunda') {\n if (namespace === 'zeebe') {\n return 'properties';\n }\n return 'values';\n}\nfunction getProperties(element, namespace = 'camunda') {\n const businessObject = getRelevantBusinessObject(element);\n return getExtensionElementsList(businessObject, `${namespace}:Properties`)[0];\n}\nfunction getPropertiesList(element, namespace = 'camunda') {\n const businessObject = getRelevantBusinessObject(element);\n const properties = getProperties(businessObject, namespace);\n return properties && properties.get(getPropertyName(namespace));\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\nconst LOW_PRIORITY$1 = 500;\nconst ZEEBE_GROUPS = [BusinessRuleImplementationGroup, CalledDecisionGroup, ScriptImplementationGroup, ScriptGroup$1, UserTaskImplementationGroup, TaskDefinitionGroup, AssignmentDefinitionGroup, FormGroup$1, ConditionGroup$1, TargetGroup, InputPropagationGroup, InputGroup$1, OutputPropagationGroup, OutputGroup$1, HeaderGroup, TaskListenersGroup, ExecutionListenersGroup, ExtensionPropertiesGroup$1];\nclass ZeebePropertiesProvider {\n constructor(propertiesPanel, injector) {\n propertiesPanel.registerProvider(LOW_PRIORITY$1, this);\n this._injector = injector;\n }\n getGroups(element) {\n return groups => {\n // (1) add zeebe specific groups\n groups = groups.concat(this._getGroups(element));\n\n // (2) update existing groups with zeebe specific properties\n updateGeneralGroup$1(groups, element);\n updateErrorGroup$1(groups, element);\n updateEscalationGroup$1(groups, element);\n updateMessageGroup(groups, element);\n updateSignalGroup(groups, element);\n updateTimerGroup$1(groups, element, this._injector);\n updateMultiInstanceGroup$1(groups, element);\n\n // (3) remove message group when not applicable\n groups = removeMessageGroup(groups, element);\n return groups;\n };\n }\n _getGroups(element) {\n const groups = ZEEBE_GROUPS.map(createGroup => createGroup(element, this._injector));\n return groups.filter(group => group !== null);\n }\n}\nZeebePropertiesProvider.$inject = ['propertiesPanel', 'injector'];\nfunction CalledDecisionGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'calledDecision',\n label: translate('Called decision'),\n entries: [...CalledDecisionProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction ScriptGroup$1(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'script',\n label: translate('Script'),\n entries: [...ScriptProps$1({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction TaskDefinitionGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'taskDefinition',\n label: translate('Task definition'),\n entries: [...TaskDefinitionProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction InputGroup$1(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'inputs',\n label: translate('Inputs'),\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...InputProps$1({\n element,\n injector\n })\n };\n return group.items ? group : null;\n}\nfunction OutputGroup$1(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'outputs',\n label: translate('Outputs'),\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...OutputProps$1({\n element,\n injector\n })\n };\n return group.items ? group : null;\n}\nfunction ConditionGroup$1(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'condition',\n label: translate('Condition'),\n entries: [...ConditionProps$1({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction FormGroup$1(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'form',\n label: translate('Form'),\n entries: [...FormProps$1({\n element,\n injector\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction TargetGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'calledElement',\n label: translate('Called element'),\n entries: [...TargetProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction HeaderGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'headers',\n label: translate('Headers'),\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...HeaderProps({\n element,\n injector\n })\n };\n return group.items ? group : null;\n}\nfunction OutputPropagationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'outputPropagation',\n label: translate('Output propagation'),\n entries: [...OutputPropagationProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction InputPropagationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'inputPropagation',\n label: translate('Input propagation'),\n entries: [...InputPropagationProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction BusinessRuleImplementationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'businessRuleImplementation',\n label: translate('Implementation'),\n entries: [...BusinessRuleImplementationProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction ScriptImplementationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'scriptImplementation',\n label: translate('Implementation'),\n entries: [...ScriptImplementationProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction UserTaskImplementationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'userTaskImplementation',\n label: translate('Implementation'),\n entries: [...UserTaskImplementationProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction AssignmentDefinitionGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n id: 'assignmentDefinition',\n label: translate('Assignment'),\n entries: [...AssignmentDefinitionProps({\n element\n }), ...TaskScheduleProps({\n element\n }), ...PriorityDefinitionProps({\n element\n })],\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group\n };\n return group.entries.length ? group : null;\n}\nfunction ExecutionListenersGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Execution listeners'),\n id: 'Zeebe__ExecutionListeners',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...ExecutionListenersProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction TaskListenersGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Task listeners'),\n id: 'Zeebe__TaskListeners',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...TaskListenersProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction ExtensionPropertiesGroup$1(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Extension properties'),\n id: 'Zeebe__ExtensionProperties',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...ExtensionPropertiesProps({\n element,\n injector,\n namespace: 'zeebe'\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction updateGeneralGroup$1(groups, element) {\n const generalGroup = findGroup$1(groups, 'general');\n if (!generalGroup) {\n return;\n }\n const {\n entries\n } = generalGroup;\n const executableEntry = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.findIndex)(entries, entry => entry.id === 'isExecutable');\n const insertIndex = executableEntry >= 0 ? executableEntry : entries.length;\n entries.splice(insertIndex, 0, ...VersionTagProps$1({\n element\n }));\n}\nfunction updateErrorGroup$1(groups, element) {\n const errorGroup = findGroup$1(groups, 'error');\n if (!errorGroup) {\n return;\n }\n errorGroup.entries = replaceEntries(errorGroup.entries, ErrorProps$1({\n element\n }));\n}\nfunction updateEscalationGroup$1(groups, element) {\n const escalationGroup = findGroup$1(groups, 'escalation');\n if (!escalationGroup) {\n return;\n }\n escalationGroup.entries = replaceEntries(escalationGroup.entries, EscalationProps$1({\n element\n }));\n}\nfunction updateSignalGroup(groups, element) {\n const signalGroup = findGroup$1(groups, 'signal');\n if (!signalGroup) {\n return;\n }\n signalGroup.entries = replaceEntries(signalGroup.entries, SignalProps({\n element\n }));\n}\nfunction updateMessageGroup(groups, element) {\n const messageGroup = findGroup$1(groups, 'message');\n if (!messageGroup) {\n return;\n }\n messageGroup.entries = replaceEntries(messageGroup.entries, MessageProps({\n element\n }));\n}\n\n// overwrite bpmn generic timerEventDefinition group with zeebe-specific one\nfunction updateTimerGroup$1(groups, element, injector) {\n const timerEventGroup = findGroup$1(groups, 'timer');\n if (!timerEventGroup) {\n return;\n }\n timerEventGroup.entries = [...TimerProps$1({\n element,\n injector\n })];\n}\n\n// overwrite bpmn generic multiInstance group with zeebe-specific one\nfunction updateMultiInstanceGroup$1(groups, element) {\n const multiInstanceGroup = findGroup$1(groups, 'multiInstance');\n if (!multiInstanceGroup) {\n return;\n }\n multiInstanceGroup.entries = [...MultiInstanceProps$1({\n element\n })];\n}\n\n// remove message group from Message End Event & Message Throw Event\nfunction removeMessageGroup(groups, element) {\n const messageGroup = findGroup$1(groups, 'message');\n if (isMessageEndEvent(element) || isMessageThrowEvent(element)) {\n groups = groups.filter(g => g != messageGroup);\n }\n return groups;\n}\n\n// helper /////////////////////\n\nfunction findGroup$1(groups, id) {\n return groups.find(g => g.id === id);\n}\n\n/**\n * Replace entries with the same ID.\n *s\n * @param {Entry[]} oldEntries\n * @param {Entry[]} newEntries\n *\n * @returns {Entry[]} combined entries\n */\nfunction replaceEntries(oldEntries, newEntries) {\n const filteredEntries = oldEntries.filter(oldEntry => !newEntries.find(newEntry => newEntry.id === oldEntry.id));\n return [...filteredEntries, ...newEntries];\n}\n\nvar index$1 = {\n __init__: ['zeebePropertiesProvider'],\n zeebePropertiesProvider: ['type', ZeebePropertiesProvider]\n};\n\nfunction AsynchronousContinuationsProps(props) {\n const {\n element\n } = props;\n const checkboxIsEditedInverted = node => {\n return node && !node.checked;\n };\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const entries = [];\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:AsyncCapable')) {\n entries.push({\n id: 'asynchronousContinuationBefore',\n component: AsynchronousContinuationBefore,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }, {\n id: 'asynchronousContinuationAfter',\n component: AsynchronousContinuationAfter,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n });\n if (isAsyncBefore$2(businessObject) || isAsyncAfter$2(businessObject)) {\n entries.push({\n id: 'exclusive',\n component: Exclusive,\n isEdited: checkboxIsEditedInverted\n });\n }\n }\n return entries;\n}\nfunction AsynchronousContinuationBefore(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return isAsyncBefore$2(businessObject);\n };\n const setValue = value => {\n // overwrite the legacy `async` property, we will use the more explicit `asyncBefore`\n const props = {\n 'camunda:asyncBefore': value,\n 'camunda:async': undefined\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: props\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'asynchronousContinuationBefore',\n label: translate('Before'),\n getValue,\n setValue\n });\n}\nfunction AsynchronousContinuationAfter(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return isAsyncAfter$2(businessObject);\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:asyncAfter': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'asynchronousContinuationAfter',\n label: translate('After'),\n getValue,\n setValue\n });\n}\nfunction Exclusive(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return isExclusive$1(businessObject);\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:exclusive': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'exclusive',\n label: translate('Exclusive'),\n getValue,\n setValue\n });\n}\n\n// helper //////////////////\n\n/**\n * Returns true if the attribute 'camunda:asyncBefore' is set\n * to true.\n *\n * @param {ModdleElement} bo\n *\n * @return {boolean} a boolean value\n */\nfunction isAsyncBefore$2(bo) {\n return !!(bo.get('camunda:asyncBefore') || bo.get('camunda:async'));\n}\n\n/**\n * Returns true if the attribute 'camunda:asyncAfter' is set\n * to true.\n *\n * @param {ModdleElement} bo\n *\n * @return {boolean} a boolean value\n */\nfunction isAsyncAfter$2(bo) {\n return !!bo.get('camunda:asyncAfter');\n}\n\n/**\n * Returns true if the attribute 'camunda:exclusive' is set\n * to true.\n *\n * @param {ModdleElement} bo\n *\n * @return {boolean} a boolean value\n */\nfunction isExclusive$1(bo) {\n return !!bo.get('camunda:exclusive');\n}\n\nconst EMPTY_OPTION$1 = '';\nfunction BusinessKeyProps$1(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') || !hasFormFields(element)) {\n return [];\n }\n return [{\n id: 'businessKey',\n component: BusinessKey$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n}\nfunction BusinessKey$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const formData = getFormData$2(element);\n const getValue = () => {\n return formData.get('camunda:businessKey') || '';\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: formData,\n properties: {\n 'camunda:businessKey': value\n }\n });\n };\n const getOptions = () => {\n const options = [{\n value: EMPTY_OPTION$1,\n label: translate('')\n }];\n const fields = formData.get('fields');\n fields.forEach(field => {\n const id = field.get('camunda:id');\n if (id) {\n options.push({\n value: id,\n label: id\n });\n }\n });\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'businessKey',\n label: translate('Key'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n// helper ///////////////////\n\nfunction getFormData$2(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'camunda:FormData')[0];\n}\nfunction hasFormFields(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const formData = getFormData$2(businessObject);\n return formData && formData.get('camunda:fields').length;\n}\n\nfunction CalledBpmnProps(props) {\n const {\n element\n } = props;\n const entries = [{\n id: 'calledElement',\n component: CalledElement,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'calledElementBinding',\n component: CalledElementBinding,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }, {\n id: 'calledElementTenantId',\n component: CalledElementTenantId,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n const binding = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:calledElementBinding');\n if (binding === 'version') {\n entries.splice(-1, 0, {\n id: 'calledElementVersion',\n component: CalledElementVersion,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (binding === 'versionTag') {\n entries.splice(-1, 0, {\n id: 'calledElementVersionTag',\n component: CalledElementVersionTag,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction CalledElement(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('calledElement');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n calledElement: value || ''\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElement\",\n label: translate('Called element'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction CalledElementBinding(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:calledElementBinding') || 'latest';\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n calledElementBinding: value === 'latest' ? undefined : value,\n calledElementVersion: undefined,\n calledElementVersionTag: undefined\n });\n };\n const getOptions = () => [{\n value: 'latest',\n label: translate('latest')\n }, {\n value: 'deployment',\n label: translate('deployment')\n }, {\n value: 'version',\n label: translate('version')\n }, {\n value: 'versionTag',\n label: translate('version tag')\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n element: element,\n id: \"calledElementBinding\",\n label: translate('Binding'),\n getValue: getValue,\n setValue: setValue,\n getOptions: getOptions\n });\n}\nfunction CalledElementVersion(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:calledElementVersion');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n calledElementVersion: value\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementVersion\",\n label: translate('Version'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction CalledElementVersionTag(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:calledElementVersionTag');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n calledElementVersionTag: value\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementVersionTag\",\n label: translate('Version tag'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction CalledElementTenantId(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:calledElementTenantId');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n calledElementTenantId: value\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementTenantId\",\n label: translate('Tenant ID'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\n\nfunction CalledCmmnProps(props) {\n const {\n element\n } = props;\n const entries = [{\n id: 'calledElementCaseRef',\n component: CaseRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'calledElementCaseBinding',\n component: CaseBinding,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }, {\n id: 'calledElementCaseTenantId',\n component: CaseTenantId,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:caseBinding') === 'version') {\n entries.splice(-1, 0, {\n id: 'calledElementCaseVersion',\n component: CaseVersion,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction CaseRef(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:caseRef');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n caseRef: value || ''\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementCaseRef\",\n label: translate('Case ref'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction CaseBinding(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:caseBinding') || 'latest';\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n caseBinding: value === 'latest' ? undefined : value,\n caseVersion: undefined\n });\n };\n const getOptions = () => [{\n value: 'latest',\n label: translate('latest')\n }, {\n value: 'deployment',\n label: translate('deployment')\n }, {\n value: 'version',\n label: translate('version')\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n element: element,\n id: \"calledElementCaseBinding\",\n label: translate('Binding'),\n getValue: getValue,\n setValue: setValue,\n getOptions: getOptions\n });\n}\nfunction CaseVersion(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:caseVersion');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n caseVersion: value\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementCaseVersion\",\n label: translate('Version'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction CaseTenantId(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:caseTenantId');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n caseTenantId: value\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementCaseTenantId\",\n label: translate('Tenant ID'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\n\nfunction DelegateVariableMappingProps(props) {\n const {\n element\n } = props;\n const entries = [{\n id: 'calledElementDelegateVariableMappingType',\n component: DelegateVariableMappingType,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n const type = getDelegateVariableMappingType(element);\n if (type === 'class') {\n entries.push({\n id: 'calledElementVariableMappingClass',\n component: VariableMappingClass,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (type === 'delegateExpression') {\n entries.push({\n id: 'calledElementVariableMappingDelegateExpression',\n component: VariableMappingDelegateExpression,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nconst DEFAULT_PROPS$5 = {\n 'camunda:variableMappingClass': undefined,\n 'camunda:variableMappingDelegateExpression': undefined\n};\nfunction DelegateVariableMappingType(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getDelegateVariableMappingType(element);\n };\n const setValue = value => {\n const properties = {\n ...DEFAULT_PROPS$5\n };\n if (value === 'class') {\n properties['camunda:variableMappingClass'] = '';\n } else if (value === 'delegateExpression') {\n properties['camunda:variableMappingDelegateExpression'] = '';\n }\n commandStack.execute('element.updateProperties', {\n element,\n properties\n });\n };\n const getOptions = () => [{\n value: 'none',\n label: translate('')\n }, {\n value: 'class',\n label: translate('Class')\n }, {\n value: 'delegateExpression',\n label: translate('Delegate expression')\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n element: element,\n id: \"calledElementDelegateVariableMappingType\",\n label: translate('Delegate Variable Mapping'),\n getValue: getValue,\n setValue: setValue,\n getOptions: getOptions\n });\n}\nfunction VariableMappingDelegateExpression(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:variableMappingDelegateExpression');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n variableMappingDelegateExpression: value || '',\n variableMappingClass: undefined\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementVariableMappingDelegateExpression\",\n label: translate('Delegate Expression'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction VariableMappingClass(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('camunda:variableMappingClass');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n variableMappingDelegateExpression: undefined,\n variableMappingClass: value || ''\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementVariableMappingClass\",\n label: translate('Delegate Class'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\n\n// helper /////\n\nfunction getDelegateVariableMappingType(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if (businessObject.get('camunda:variableMappingClass') !== undefined) {\n return 'class';\n } else if (businessObject.get('camunda:variableMappingDelegateExpression') !== undefined) {\n return 'delegateExpression';\n }\n return 'none';\n}\n\nfunction CallActivityProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity')) {\n return [];\n }\n const entries = [];\n entries.push({\n id: 'calledElementType',\n component: CalledElementType,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n });\n const calledElementType = getCalledElementType(element);\n if (calledElementType === 'bpmn') {\n entries.push(...CalledBpmnProps({\n element\n }), ...BusinessKeyProps({\n element\n }), ...DelegateVariableMappingProps({\n element\n }));\n } else if (calledElementType === 'cmmn') {\n entries.push(...CalledCmmnProps({\n element\n }), ...BusinessKeyProps({\n element\n }));\n } else {\n entries.push(...BusinessKeyProps({\n element\n }));\n }\n return entries;\n}\nconst DEFAULT_PROPS$4 = {\n calledElement: undefined,\n 'camunda:calledElementBinding': undefined,\n 'camunda:calledElementVersion': undefined,\n 'camunda:calledElementTenantId': undefined,\n 'camunda:variableMappingClass': undefined,\n 'camunda:variableMappingDelegateExpression': undefined,\n 'camunda:caseRef': undefined,\n 'camunda:caseBinding': undefined,\n 'camunda:caseVersion': undefined,\n 'camunda:caseTenantId': undefined\n};\nconst DEFAULT_BUSINESS_KEY = '#{execution.processBusinessKey}';\nfunction CalledElementType(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getCalledElementType(element);\n };\n const setValue = value => {\n const properties = {\n ...DEFAULT_PROPS$4\n };\n if (value === 'bpmn') {\n properties['calledElement'] = '';\n } else if (value === 'cmmn') {\n properties['camunda:caseRef'] = '';\n }\n commandStack.execute('element.updateProperties', {\n element,\n properties\n });\n };\n const getOptions = () => [{\n value: '',\n label: translate('')\n }, {\n value: 'bpmn',\n label: translate('BPMN')\n }, {\n value: 'cmmn',\n label: translate('CMMN')\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n element: element,\n id: \"calledElementType\",\n label: translate('Type'),\n getValue: getValue,\n setValue: setValue,\n getOptions: getOptions\n });\n}\nfunction BusinessKeyProps(props) {\n const {\n element\n } = props;\n const entries = [{\n id: 'calledElementBusinessKey',\n component: BusinessKey,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }];\n if (hasBusinessKey(element)) {\n entries.push({\n id: 'calledElementBusinessKeyExpression',\n component: BusinessKeyExpression,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction BusinessKey(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const modeling = useService('modeling');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const getValue = () => {\n return hasBusinessKey(element);\n };\n const setValue = value => {\n if (value) {\n addBusinessKey();\n } else {\n removeBusinessKey();\n }\n };\n function addBusinessKey() {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) If there are no extension elements, create camunda:In and update element's properties\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {}, businessObject, bpmnFactory);\n const businessKeyItem = createBusinessKey(extensionElements);\n extensionElements.set('values', [businessKeyItem]);\n modeling.updateProperties(element, {\n extensionElements\n });\n } else {\n // (2) Otherwise, add camunda:In to the existing values\n const businessKeyItem = createBusinessKey(extensionElements);\n addExtensionElements(element, businessObject, businessKeyItem, bpmnFactory, commandStack);\n }\n }\n function createBusinessKey(parent) {\n return createElement('camunda:In', {\n businessKey: DEFAULT_BUSINESS_KEY\n }, parent, bpmnFactory);\n }\n function removeBusinessKey() {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const camundaInList = getExtensionElementsList(businessObject, 'camunda:In');\n const businessKeyItems = camundaInList.filter(camundaIn => camundaIn.get('businessKey') !== undefined);\n removeExtensionElements(element, businessObject, businessKeyItems, commandStack);\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry, {\n element: element,\n id: \"calledElementBusinessKey\",\n label: translate('Business key'),\n getValue: getValue,\n setValue: setValue\n });\n}\nfunction BusinessKeyExpression(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => getBusinessKey(element);\n const setValue = value => {\n const camundaIn = findCamundaInWithBusinessKey(element);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: camundaIn,\n properties: {\n businessKey: value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"calledElementBusinessKeyExpression\",\n label: translate('Business key expression'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\n\n// helper //////\n\nfunction getCalledElementType(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if (businessObject.get('calledElement') !== undefined) {\n return 'bpmn';\n } else if (businessObject.get('camunda:caseRef') !== undefined) {\n return 'cmmn';\n }\n return '';\n}\nfunction hasBusinessKey(element) {\n return getBusinessKey(element) !== undefined;\n}\nfunction getBusinessKey(element) {\n const camundaIn = findCamundaInWithBusinessKey(element);\n if (camundaIn) {\n return camundaIn.get('businessKey');\n }\n}\nfunction findCamundaInWithBusinessKey(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const camundaInList = getExtensionElementsList(businessObject, 'camunda:In');\n for (const camundaIn of camundaInList) {\n const businessKey = camundaIn.get('businessKey');\n if (businessKey !== undefined) {\n return camundaIn;\n }\n }\n}\n\nfunction CandidateStarterProps(props) {\n const {\n element\n } = props;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') && !((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && businessObject.get('processRef'))) {\n return [];\n }\n return [{\n id: 'candidateStarterGroups',\n component: CandidateStarterGroups,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'candidateStarterUsers',\n component: CandidateStarterUsers,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction CandidateStarterGroups(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const process = getProcess$3(element);\n const getValue = () => {\n return process.get('camunda:candidateStarterGroups') || '';\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: process,\n properties: {\n 'camunda:candidateStarterGroups': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'candidateStarterGroups',\n label: translate('Candidate starter groups'),\n description: translate('Specify more than one group as a comma separated list.'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction CandidateStarterUsers(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const process = getProcess$3(element);\n const getValue = () => {\n return process.get('camunda:candidateStarterUsers') || '';\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: process,\n properties: {\n 'camunda:candidateStarterUsers': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'candidateStarterUsers',\n label: translate('Candidate starter users'),\n description: translate('Specify more than one user as a comma separated list.'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper //////////////////\n\n/**\n * getProcess - get the businessObject of the process referred to by a bpmn:Process\n * or by a bpmn:Participant\n *\n * @param {ModdleElement} element either a bpmn:Process or a bpmn:Participant\n * @return {BusinessObject}\n */\nfunction getProcess$3(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element) : (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('processRef');\n}\n\nfunction ConditionProps(props) {\n const {\n element\n } = props;\n if (!((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow') && isConditionalSource(element.source)) && !getConditionalEventDefinition(element)) {\n return [];\n }\n const entries = [];\n if (getConditionalEventDefinition(element)) {\n entries.push(...VariableEventProps({\n element\n }));\n }\n entries.push({\n id: 'conditionType',\n component: ConditionType,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n });\n const conditionType = getConditionType(element);\n if (conditionType === 'script') {\n entries.push(...ConditionScriptProps({\n element\n }));\n } else if (conditionType === 'expression') {\n entries.push({\n id: 'conditionExpression',\n component: ConditionExpression,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction ConditionType(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const getValue = () => {\n return getConditionType(element);\n };\n const setValue = value => {\n // (1) Remove formalExpression if is selected\n if (value === '') {\n updateCondition(element, commandStack, undefined);\n } else {\n // (2) Create and set formalExpression element containing the conditionExpression\n const attributes = {\n body: '',\n language: value === 'script' ? '' : undefined\n };\n const formalExpressionElement = createFormalExpression(element, attributes, bpmnFactory);\n updateCondition(element, commandStack, formalExpressionElement);\n }\n };\n const getOptions = () => [{\n value: '',\n label: translate('')\n }, {\n value: 'script',\n label: translate('Script')\n }, {\n value: 'expression',\n label: translate('Expression')\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n element: element,\n id: \"conditionType\",\n label: translate('Type'),\n getValue: getValue,\n setValue: setValue,\n getOptions: getOptions\n });\n}\nfunction ConditionExpression(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n bpmnFactory = useService('bpmnFactory'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const getValue = () => {\n return getConditionExpression(element).get('body');\n };\n const setValue = value => {\n const conditionExpression = createFormalExpression(element, {\n body: value\n }, bpmnFactory);\n updateCondition(element, commandStack, conditionExpression);\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"conditionExpression\",\n label: translate('Condition Expression'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction ConditionScriptProps(props) {\n const {\n element\n } = props;\n const entries = [];\n const scriptType = getScriptType$1(element);\n\n // (1) language\n entries.push({\n id: 'conditionScriptLanguage',\n component: Language,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n\n // (2) type\n entries.push({\n id: 'conditionScriptType',\n component: ScriptType,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n });\n\n // (3) script\n if (scriptType === 'script') {\n entries.push({\n id: 'conditionScriptValue',\n component: Script$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited\n });\n } else if (scriptType === 'resource') {\n // (4) resource\n entries.push({\n id: 'conditionScriptResource',\n component: Resource$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction Language(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getConditionExpression(element).get('language');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: getConditionExpression(element),\n properties: {\n language: value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"conditionScriptLanguage\",\n label: translate('Format'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction ScriptType(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getScriptType$1(element);\n };\n const setValue = value => {\n // reset script properties on type change\n const updatedProperties = {\n 'body': value === 'script' ? '' : undefined,\n 'camunda:resource': value === 'resource' ? '' : undefined\n };\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: getConditionExpression(element),\n properties: updatedProperties\n });\n };\n const getOptions = () => {\n const options = [{\n value: 'resource',\n label: translate('External resource')\n }, {\n value: 'script',\n label: translate('Inline script')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'conditionScriptType',\n label: translate('Script type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction Script$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getConditionExpression(element).get('body');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: getConditionExpression(element),\n properties: {\n 'body': value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry, {\n element: element,\n id: \"conditionScriptValue\",\n label: translate('Script'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce,\n monospace: true\n });\n}\nfunction Resource$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getConditionExpression(element).get('camunda:resource');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: getConditionExpression(element),\n properties: {\n 'camunda:resource': value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: true,\n id: \"conditionScriptResource\",\n label: translate('Resource'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction VariableEventProps(props) {\n const {\n element\n } = props;\n const entries = [];\n entries.push({\n id: 'conditionVariableName',\n component: VariableName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') || isInEventSubProcess(element)) {\n entries.push({\n id: 'conditionVariableEvents',\n component: VariableEvents,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction VariableName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getConditionalEventDefinition(element).get('variableName');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: getConditionalEventDefinition(element),\n properties: {\n variableName: value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"conditionVariableName\",\n label: translate('Variable name'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce\n });\n}\nfunction VariableEvents(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return getConditionalEventDefinition(element).get('variableEvents');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: getConditionalEventDefinition(element),\n properties: {\n variableEvents: value || ''\n }\n });\n };\n const tooltip = (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('Specify more than one variable change event as a comma separated list. Variable change events are:')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"li\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"create\"\n })\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"li\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"update\"\n })\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"li\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"delete\"\n })\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.org/manual/latest/reference/bpmn20/custom-extensions/extension-attributes/#variableevents\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Documentation: Variable events')\n })]\n });\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry, {\n element: element,\n id: \"conditionVariableEvents\",\n label: translate('Variable events'),\n getValue: getValue,\n setValue: setValue,\n debounce: debounce,\n tooltip: tooltip\n });\n}\n\n// helper ////////////////////\n\nconst CONDITIONAL_SOURCES = ['bpmn:Activity', 'bpmn:ExclusiveGateway', 'bpmn:InclusiveGateway', 'bpmn:ComplexGateway'];\nfunction isConditionalSource(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, CONDITIONAL_SOURCES);\n}\nfunction getConditionalEventDefinition(element) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Event')) {\n return false;\n }\n return getEventDefinition$1(element, 'bpmn:ConditionalEventDefinition');\n}\nfunction getConditionType(element) {\n const conditionExpression = getConditionExpression(element);\n if (!conditionExpression) {\n return '';\n } else {\n return conditionExpression.get('language') === undefined ? 'expression' : 'script';\n }\n}\n\n/**\n * getConditionExpression - get the body value of a condition expression for a given element\n *\n * @param {ModdleElement} element\n *\n * @return {string|undefined}\n */\nfunction getConditionExpression(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(businessObject, 'bpmn:SequenceFlow')) {\n return businessObject.get('conditionExpression');\n } else if (getConditionalEventDefinition(businessObject)) {\n return getConditionalEventDefinition(businessObject).get('condition');\n }\n}\nfunction getScriptType$1(element) {\n const conditionExpression = getConditionExpression(element);\n const resource = conditionExpression.get('camunda:resource');\n if (typeof resource !== 'undefined') {\n return 'resource';\n } else {\n return 'script';\n }\n}\nfunction updateCondition(element, commandStack, condition = undefined) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow')) {\n commandStack.execute('element.updateProperties', {\n element,\n properties: {\n conditionExpression: condition\n }\n });\n } else {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: getConditionalEventDefinition(element),\n properties: {\n condition\n }\n });\n }\n}\nfunction createFormalExpression(parent, attributes, bpmnFactory) {\n return createElement('bpmn:FormalExpression', attributes, (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parent, 'bpmn:SequenceFlow') ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(parent) : getConditionalEventDefinition(parent), bpmnFactory);\n}\nfunction isInEventSubProcess(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n parent = bo.$parent;\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parent, 'bpmn:SubProcess') && parent.triggeredByEvent;\n}\n\n/**\n * Cf. https://docs.camunda.org/manual/latest/user-guide/process-engine/scripting/\n */\nfunction ScriptProps(props) {\n const {\n element,\n script,\n prefix\n } = props;\n const entries = [];\n const scriptType = getScriptType(script || element);\n const idPrefix = prefix || '';\n\n // (1) scriptFormat\n entries.push({\n id: idPrefix + 'scriptFormat',\n component: Format,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n idPrefix,\n script\n });\n\n // (2) type\n entries.push({\n id: idPrefix + 'scriptType',\n component: Type$3,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited,\n idPrefix,\n script\n });\n\n // (3) script\n if (scriptType === 'script') {\n entries.push({\n id: idPrefix + 'scriptValue',\n component: Script,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited,\n idPrefix,\n script\n });\n }\n\n // (4) resource\n if (scriptType === 'resource') {\n entries.push({\n id: idPrefix + 'scriptResource',\n component: Resource,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n idPrefix,\n script\n });\n }\n return entries;\n}\nfunction Format(props) {\n const {\n element,\n idPrefix,\n script\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = script || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('scriptFormat');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n scriptFormat: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: idPrefix + 'scriptFormat',\n label: translate('Format'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Type$3(props) {\n const {\n element,\n idPrefix,\n script\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const businessObject = script || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const scriptProperty = getScriptProperty(businessObject);\n const getValue = () => {\n return getScriptType(businessObject);\n };\n const setValue = value => {\n // reset script properties on type change\n const properties = {\n [scriptProperty]: value === 'script' ? '' : undefined,\n 'camunda:resource': value === 'resource' ? '' : undefined\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties\n });\n };\n const getOptions = () => {\n const options = [{\n value: '',\n label: translate('')\n }, {\n value: 'resource',\n label: translate('External resource')\n }, {\n value: 'script',\n label: translate('Inline script')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: idPrefix + 'scriptType',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction Script(props) {\n const {\n element,\n idPrefix,\n script\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = script || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const scriptProperty = getScriptProperty(businessObject);\n const getValue = () => {\n return getScriptValue(businessObject);\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n [scriptProperty]: value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element,\n id: idPrefix + 'scriptValue',\n label: translate('Script'),\n getValue,\n setValue,\n debounce,\n monospace: true\n });\n}\nfunction Resource(props) {\n const {\n element,\n idPrefix,\n script\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = script || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:resource');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:resource': value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: idPrefix + 'scriptResource',\n label: translate('Resource'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ////////////////////\n\nfunction getScriptType(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const scriptValue = getScriptValue(businessObject);\n if (typeof scriptValue !== 'undefined') {\n return 'script';\n }\n const resource = businessObject.get('camunda:resource');\n if (typeof resource !== 'undefined') {\n return 'resource';\n }\n}\nfunction getScriptValue(businessObject) {\n return businessObject.get(getScriptProperty(businessObject));\n}\nfunction isScript$2(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:Script');\n}\nfunction getScriptProperty(businessObject) {\n return isScript$2(businessObject) ? 'value' : 'script';\n}\n\nfunction getElements(businessObject, type, property) {\n const elements = getExtensionElementsList(businessObject, type);\n return !property ? elements : (elements[0] || {})[property] || [];\n}\nfunction getParameters(element, prop) {\n const inputOutput = getInputOutput(element);\n return inputOutput && inputOutput.get(prop) || [];\n}\n\n/**\n * Get a camunda:inputOutput from the business object\n *\n * @param {djs.model.Base | ModdleElement} element\n *\n * @return {ModdleElement} the inputOutput object\n */\nfunction getInputOutput(element) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:Connector')) {\n return element.get('inputOutput');\n }\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return (getElements(businessObject, 'camunda:InputOutput') || [])[0];\n}\n\n/**\n * Return all input parameters existing in the business object, and\n * an empty array if none exist.\n *\n * @param {djs.model.Base} element\n *\n * @return {Array} a list of input parameter objects\n */\nfunction getInputParameters(element) {\n return getParameters(element, 'inputParameters');\n}\n\n/**\n * Return all output parameters existing in the business object, and\n * an empty array if none exist.\n *\n * @param {djs.model.Base} element\n *\n * @return {Array} a list of output parameter objects\n */\nfunction getOutputParameters(element) {\n return getParameters(element, 'outputParameters');\n}\nfunction isInputOutputSupported(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(businessObject, 'bpmn:FlowNode') && !((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(businessObject, ['bpmn:StartEvent', 'bpmn:BoundaryEvent', 'bpmn:Gateway']) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(businessObject, 'bpmn:SubProcess') && businessObject.get('triggeredByEvent'));\n}\nfunction areInputParametersSupported(element) {\n return isInputOutputSupported(element);\n}\nfunction areOutputParametersSupported(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return isInputOutputSupported(element) && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(businessObject, 'bpmn:EndEvent') && !businessObject.loopCharacteristics;\n}\nfunction getInputOutputType(parameter) {\n const definitionTypes = {\n 'camunda:Map': 'map',\n 'camunda:List': 'list',\n 'camunda:Script': 'script'\n };\n let type = 'stringOrExpression';\n const definition = parameter.get('definition');\n if (typeof definition !== 'undefined') {\n type = definitionTypes[definition.$type];\n }\n return type;\n}\nfunction CreateParameterCmd(element, type, parent, bpmnFactory) {\n const isInput = type === 'camunda:InputParameter';\n const newParameter = createElement(type, {\n name: nextId(isInput ? 'Input_' : 'Output_')\n }, parent, bpmnFactory);\n const propertyName = isInput ? 'inputParameters' : 'outputParameters';\n return {\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: parent,\n properties: {\n [propertyName]: [...parent.get(propertyName), newParameter]\n }\n }\n };\n}\nfunction AddParameterCmd(element, type, bpmnFactory) {\n const commands = [];\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure inputOutput\n let inputOutput = getInputOutput(element);\n if (!inputOutput) {\n const parent = extensionElements;\n inputOutput = createElement('camunda:InputOutput', {\n inputParameters: [],\n outputParameters: []\n }, parent, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), inputOutput]\n }\n }\n });\n }\n\n // (3) create + add parameter\n commands.push(CreateParameterCmd(element, type, inputOutput, bpmnFactory));\n return commands;\n}\n\nfunction ListProp(props) {\n const {\n element,\n id: idPrefix,\n index,\n item\n } = props;\n const id = `${idPrefix}-listItem-${index}`;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(ListItem, {\n idPrefix: id,\n element: element,\n item: item\n });\n}\nfunction ListProps(props) {\n const {\n idPrefix,\n element,\n parameter\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const list = parameter.get('definition');\n const items = list.get('items');\n function addItem() {\n const value = createElement('camunda:Value', {}, parameter, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: list,\n properties: {\n items: [...list.get('items'), value]\n }\n });\n }\n function removeItem(item) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: list,\n properties: {\n items: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(list.get('items'), item)\n }\n });\n }\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListEntry)({\n element,\n autoFocusEntry: true,\n id: idPrefix + '-list',\n items,\n label: translate('List values'),\n onAdd: addItem,\n onRemove: removeItem,\n component: ListProp\n });\n}\nfunction ListItem(props) {\n const {\n idPrefix,\n element,\n item\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const definitionLabels = {\n 'camunda:Map': translate('Map'),\n 'camunda:List': translate('List'),\n 'camunda:Script': translate('Script')\n };\n const getValue = () => {\n if (isDefinitionType$1(item)) {\n return definitionLabels[item.$type];\n }\n return item.get('value');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: item,\n properties: {\n value\n }\n });\n };\n return ListValue({\n id: idPrefix + '-value',\n disabled: isDefinitionType$1(item),\n getValue,\n setValue\n });\n}\nfunction ListValue(props) {\n const {\n id,\n disabled,\n getValue,\n setValue\n } = props;\n const debounce = useService('debounceInput', true);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SimpleEntry, {\n id: id,\n getValue: getValue,\n setValue: setValue,\n disabled: disabled,\n debounce: debounce\n });\n}\n\n// helper //////////////////////\n\nfunction isScript$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:Script');\n}\nfunction isList$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:List');\n}\nfunction isMap$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:Map');\n}\nfunction isDefinitionType$1(element) {\n return isScript$1(element) || isList$1(element) || isMap$1(element);\n}\n\nfunction MapProp(props) {\n const {\n element,\n id: idPrefix,\n index,\n item: entry,\n open\n } = props;\n const id = `${idPrefix}-mapEntry-${index}`;\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CollapsibleEntry, {\n id: id,\n element: element,\n entries: MapEntry({\n element,\n entry,\n idPrefix: id\n }),\n label: entry.get('key') || translate(''),\n open: open\n });\n}\nfunction MapProps(props) {\n const {\n idPrefix,\n element,\n parameter\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const id = idPrefix + '-map';\n const map = parameter.get('definition');\n const entries = map.get('entries');\n function addEntry() {\n const entry = createElement('camunda:Entry', {}, parameter, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: map,\n properties: {\n entries: [...map.get('entries'), entry]\n }\n });\n }\n function removeEntry(entry) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: map,\n properties: {\n entries: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(map.get('entries'), entry)\n }\n });\n }\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListEntry)({\n element,\n autoFocusEntry: `[data-entry-id=\"${id}-mapEntry-${entries.length - 1}\"] input`,\n id: idPrefix + '-map',\n items: entries,\n label: translate('Map entries'),\n onAdd: addEntry,\n onRemove: removeEntry,\n component: MapProp\n });\n}\nfunction MapEntry(props) {\n const {\n element,\n entry,\n idPrefix\n } = props;\n const entries = [{\n id: idPrefix + '-key',\n component: MapKey,\n entry,\n idPrefix,\n element\n }, {\n id: idPrefix + '-value',\n component: MapValue,\n entry,\n idPrefix,\n element\n }];\n return entries;\n}\nfunction MapKey(props) {\n const {\n element,\n entry,\n idPrefix\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: entry,\n properties: {\n key: value\n }\n });\n };\n const getValue = () => {\n return entry.get('key');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: entry,\n id: idPrefix + '-key',\n label: translate('Key'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction MapValue(props) {\n const {\n element,\n entry,\n idPrefix\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const definition = entry.get('definition');\n const definitionLabels = {\n 'camunda:Map': translate('Map'),\n 'camunda:List': translate('List'),\n 'camunda:Script': translate('Script')\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: entry,\n properties: {\n value\n }\n });\n };\n const getValue = () => {\n if (isDefinitionType(definition)) {\n return definitionLabels[definition.$type];\n }\n return entry.get('value');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: entry,\n id: idPrefix + '-value',\n label: translate('Value'),\n getValue,\n setValue,\n disabled: isDefinitionType(definition),\n debounce\n });\n}\n\n// helper ///////////////////\n\nfunction isScript(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:Script');\n}\nfunction isList(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:List');\n}\nfunction isMap(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:Map');\n}\nfunction isDefinitionType(element) {\n return isScript(element) || isList(element) || isMap(element);\n}\n\nconst DEFAULT_PROPS$3 = {\n value: undefined,\n definition: undefined\n};\nfunction InputOutputParameter(props) {\n const {\n idPrefix,\n element,\n parameter\n } = props;\n const inputOutputType = getInputOutputType(parameter);\n let entries = [{\n id: idPrefix + '-name',\n component: Name$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n idPrefix,\n parameter\n }, {\n id: idPrefix + '-type',\n component: Type$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited,\n idPrefix,\n parameter\n }];\n\n // (1) String or expression\n if (inputOutputType === 'stringOrExpression') {\n entries.push({\n id: idPrefix + '-stringOrExpression',\n component: StringOrExpression,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited,\n idPrefix,\n parameter\n });\n\n // (2) Script\n } else if (inputOutputType === 'script') {\n const script = parameter.get('definition');\n entries = [...entries, ...ScriptProps({\n element,\n prefix: idPrefix + '-',\n script\n })];\n\n // (3) List\n } else if (inputOutputType === 'list') {\n entries.push({\n id: `${idPrefix}-list`,\n component: ListProps,\n idPrefix,\n parameter\n });\n\n // (4) Map\n } else if (inputOutputType === 'map') {\n entries.push({\n id: `${idPrefix}-map`,\n component: MapProps,\n idPrefix,\n parameter\n });\n }\n return entries;\n}\nfunction Name$2(props) {\n const {\n idPrefix,\n element,\n parameter\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: parameter,\n properties: {\n name: value\n }\n });\n };\n const getValue = parameter => {\n return parameter.get('name');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: parameter,\n id: idPrefix + '-name',\n label: translate(isInput(parameter) ? 'Local variable name' : 'Process variable name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Type$2(props) {\n const {\n idPrefix,\n element,\n parameter\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const createDefinitionElement = type => {\n return createElement(type, {}, parameter, bpmnFactory);\n };\n const getValue = mapping => {\n return getInputOutputType(mapping);\n };\n const setValue = value => {\n let properties = {\n ...DEFAULT_PROPS$3\n };\n if (value === 'script') {\n properties.definition = createDefinitionElement('camunda:Script');\n } else if (value === 'list') {\n properties.definition = createDefinitionElement('camunda:List');\n } else if (value === 'map') {\n properties.definition = createDefinitionElement('camunda:Map');\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: parameter,\n properties\n });\n };\n const getOptions = () => {\n const options = [{\n label: translate('List'),\n value: 'list'\n }, {\n label: translate('Map'),\n value: 'map'\n }, {\n label: translate('Script'),\n value: 'script'\n }, {\n label: translate('String or expression'),\n value: 'stringOrExpression'\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element: parameter,\n id: idPrefix + '-type',\n label: translate('Assignment type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction StringOrExpression(props) {\n const {\n idPrefix,\n element,\n parameter\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: parameter,\n properties: {\n value\n }\n });\n };\n const getValue = parameter => {\n return parameter.get('value');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element: parameter,\n id: idPrefix + '-stringOrExpression',\n label: translate('Value'),\n description: translate('Start typing \"${}\" to create an expression.'),\n getValue,\n setValue,\n rows: 1,\n debounce\n });\n}\n\n// helper /////////////////////\n\nfunction isInput(parameter) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parameter, 'camunda:InputParameter');\n}\n\n/**\n * Check whether an element is camunda:ServiceTaskLike\n *\n * @param {djs.model.Base} element\n *\n * @return {boolean} a boolean value\n */\nfunction isServiceTaskLike(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:ServiceTaskLike');\n}\n\n/**\n * Returns 'true' if the given element is 'camunda:DmnCapable'\n *\n * @param {djs.model.Base} element\n *\n * @return {boolean} a boolean value\n */\nfunction isDmnCapable(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:DmnCapable');\n}\n\n/**\n * Returns 'true' if the given element is 'camunda:ExternalCapable'\n *\n * @param {djs.model.Base} element\n *\n * @return {boolean} a boolean value\n */\nfunction isExternalCapable(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:ExternalCapable');\n}\n\n/**\n * getServiceTaskLikeBusinessObject - Get a 'camunda:ServiceTaskLike' business object.\n *\n * If the given element is not a 'camunda:ServiceTaskLike', then 'false'\n * is returned.\n *\n * @param {djs.model.Base} element\n * @return {ModdleElement} the 'camunda:ServiceTaskLike' business object\n */\nfunction getServiceTaskLikeBusinessObject(element) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:IntermediateThrowEvent') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:EndEvent')) {\n // change business object to 'messageEventDefinition' when\n // the element is a message intermediate throw event or message end event\n // because the camunda extensions (e.g. camunda:class) are in the message\n // event definition tag and not in the intermediate throw event or end event tag\n const messageEventDefinition = getMessageEventDefinition(element);\n if (messageEventDefinition) {\n element = messageEventDefinition;\n }\n }\n return isServiceTaskLike(element) && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n}\n\n/**\n * Returns the implementation type of the given element.\n *\n * Possible implementation types are:\n * - dmn\n * - connector\n * - external\n * - class\n * - expression\n * - delegateExpression\n * - script\n * - or undefined, when no matching implementation type is found\n *\n * @param {djs.model.Base} element\n *\n * @return {String} the implementation type\n */\nfunction getImplementationType(element) {\n const businessObject = getListenerBusinessObject(element) || getServiceTaskLikeBusinessObject(element);\n if (!businessObject) {\n return;\n }\n if (isDmnCapable(businessObject)) {\n const decisionRef = businessObject.get('camunda:decisionRef');\n if (typeof decisionRef !== 'undefined') {\n return 'dmn';\n }\n }\n if (isServiceTaskLike(businessObject)) {\n const connectors = getExtensionElementsList(businessObject, 'camunda:Connector');\n if (connectors.length) {\n return 'connector';\n }\n }\n if (isExternalCapable(businessObject)) {\n const type = businessObject.get('camunda:type');\n if (type === 'external') {\n return 'external';\n }\n }\n const cls = businessObject.get('camunda:class');\n if (typeof cls !== 'undefined') {\n return 'class';\n }\n const expression = businessObject.get('camunda:expression');\n if (typeof expression !== 'undefined') {\n return 'expression';\n }\n const delegateExpression = businessObject.get('camunda:delegateExpression');\n if (typeof delegateExpression !== 'undefined') {\n return 'delegateExpression';\n }\n const script = businessObject.get('script');\n if (typeof script !== 'undefined') {\n return 'script';\n }\n}\nfunction getListenerBusinessObject(businessObject) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(businessObject, ['camunda:ExecutionListener', 'camunda:TaskListener'])) {\n return businessObject;\n }\n}\n\nfunction areConnectorsSupported(element) {\n const businessObject = getServiceTaskLikeBusinessObject(element);\n return businessObject && getImplementationType(businessObject) === 'connector';\n}\nfunction getConnectors$2(businessObject) {\n return getExtensionElementsList(businessObject, 'camunda:Connector');\n}\nfunction getConnector$1(element) {\n const businessObject = getServiceTaskLikeBusinessObject(element);\n const connectors = getConnectors$2(businessObject);\n return connectors[0];\n}\n\nfunction ConnectorInputProps(props) {\n const {\n element,\n injector\n } = props;\n if (!areConnectorsSupported(element)) {\n return null;\n }\n const connector = getConnector$1(element);\n const commandStack = injector.get('commandStack'),\n bpmnFactory = injector.get('bpmnFactory');\n const inputParameters = getInputParameters(connector) || [];\n const items = inputParameters.map((parameter, index) => {\n const id = element.id + '-connector-inputParameter-' + index;\n return {\n id,\n label: parameter.get('name') || '',\n entries: InputOutputParameter({\n element,\n idPrefix: id,\n parameter\n }),\n autoFocusEntry: id + '-name',\n remove: removeFactory$8({\n connector,\n element,\n parameter,\n commandStack\n })\n };\n });\n function add(event) {\n event.stopPropagation();\n const commands = [];\n\n // (1) ensure inputOutput\n let inputOutput = getInputOutput(connector);\n if (!inputOutput) {\n inputOutput = createElement('camunda:InputOutput', {\n inputParameters: [],\n outputParameters: []\n }, connector, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element: element,\n moddleElement: connector,\n properties: {\n inputOutput\n }\n }\n });\n }\n\n // (2) create + add parameter\n commands.push(CreateParameterCmd(element, 'camunda:InputParameter', inputOutput, bpmnFactory));\n\n // (3) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n }\n return {\n items,\n add\n };\n}\nfunction removeFactory$8(props) {\n const {\n commandStack,\n connector,\n element,\n parameter\n } = props;\n return function (event) {\n event.stopPropagation();\n const inputOutput = getInputOutput(connector);\n if (!inputOutput) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: inputOutput,\n properties: {\n inputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(inputOutput.get('inputParameters'), parameter)\n }\n });\n };\n}\n\nfunction ConnectorOutputProps(props) {\n const {\n element,\n injector\n } = props;\n if (!areConnectorsSupported(element)) {\n return null;\n }\n const connector = getConnector$1(element);\n const commandStack = injector.get('commandStack'),\n bpmnFactory = injector.get('bpmnFactory');\n const outputParameters = getOutputParameters(connector) || [];\n const items = outputParameters.map((parameter, index) => {\n const id = element.id + '-connector-outputParameter-' + index;\n return {\n id,\n label: parameter.get('name') || '',\n entries: InputOutputParameter({\n idPrefix: id,\n element,\n parameter\n }),\n autoFocusEntry: id + '-name',\n remove: removeFactory$7({\n connector,\n element,\n commandStack,\n parameter\n })\n };\n });\n function add(event) {\n event.stopPropagation();\n const commands = [];\n\n // (1) ensure inputOutput\n let inputOutput = getInputOutput(connector);\n if (!inputOutput) {\n inputOutput = createElement('camunda:InputOutput', {\n inputParameters: [],\n outputParameters: []\n }, connector, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element: element,\n moddleElement: connector,\n properties: {\n inputOutput\n }\n }\n });\n }\n\n // (2) create + add parameter\n commands.push(CreateParameterCmd(element, 'camunda:OutputParameter', inputOutput, bpmnFactory));\n\n // (3) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n }\n return {\n items,\n add\n };\n}\nfunction removeFactory$7(props) {\n const {\n commandStack,\n connector,\n element,\n parameter\n } = props;\n return function (event) {\n event.stopPropagation();\n const inputOutput = getInputOutput(connector);\n if (!inputOutput) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: inputOutput,\n properties: {\n outputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(inputOutput.get('outputParameters'), parameter)\n }\n });\n };\n}\n\nfunction ErrorProps(props) {\n const {\n element,\n entries\n } = props;\n if (!isErrorSupported(element)) {\n return entries;\n }\n const error = getError(element);\n\n // (1) errorMessage (error)\n if (error) {\n const idx = findPlaceToInsert(entries, 'errorCode');\n\n // place below errorCode\n entries.splice(idx, 0, {\n id: 'errorMessage',\n component: ErrorMessage$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n if (!canHaveErrorVariables(element)) {\n return entries;\n }\n\n // (2) errorCodeVariable + errorMessageVariable (errorEventDefinition)\n entries.push({\n id: 'errorCodeVariable',\n component: ErrorCodeVariable,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'errorMessageVariable',\n component: ErrorMessageVariable,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n return entries;\n}\nfunction ErrorMessage$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const error = getError(element);\n const getValue = () => {\n return error.get('camunda:errorMessage');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n 'camunda:errorMessage': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'errorMessage',\n label: translate('Message'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ErrorCodeVariable(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const errorEventDefinition = getErrorEventDefinition$1(element);\n const getValue = () => {\n return errorEventDefinition.get('camunda:errorCodeVariable');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: errorEventDefinition,\n properties: {\n 'camunda:errorCodeVariable': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'errorCodeVariable',\n label: translate('Code variable'),\n description: translate('Define the name of the variable that will contain the error code.'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ErrorMessageVariable(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const errorEventDefinition = getErrorEventDefinition$1(element);\n const getValue = () => {\n return errorEventDefinition.get('camunda:errorMessageVariable');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: errorEventDefinition,\n properties: {\n 'camunda:errorMessageVariable': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'errorMessageVariable',\n label: translate('Message variable'),\n description: translate('Define the name of the variable that will contain the error message.'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction canHaveErrorVariables(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BoundaryEvent');\n}\nfunction findPlaceToInsert(entries, idx) {\n const entryIndex = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.findIndex)(entries, entry => entry.id === idx);\n return entryIndex >= 0 ? entryIndex + 1 : entries.length;\n}\n\nconst EMPTY_OPTION = '';\nconst CREATE_NEW_OPTION = 'create-new';\nfunction Error$1(props) {\n const {\n idPrefix,\n errorEventDefinition\n } = props;\n let entries = [{\n id: idPrefix + '-errorRef',\n component: ErrorRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited,\n errorEventDefinition,\n idPrefix\n }];\n const error = errorEventDefinition.get('errorRef');\n if (error) {\n entries = [...entries, {\n id: idPrefix + '-errorName',\n component: ErrorName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n error,\n errorEventDefinition,\n idPrefix\n }, {\n id: idPrefix + '-errorCode',\n component: ErrorCode,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n error,\n errorEventDefinition,\n idPrefix\n }, {\n id: idPrefix + '-errorMessage',\n component: ErrorMessage,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n error,\n errorEventDefinition,\n idPrefix\n }];\n }\n entries.push({\n id: idPrefix + '-expression',\n component: Expression$1,\n errorEventDefinition,\n idPrefix\n });\n return entries;\n}\nfunction ErrorRef(props) {\n const {\n element,\n errorEventDefinition,\n idPrefix\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n const error = errorEventDefinition.get('errorRef');\n if (error) {\n return error.get('id');\n }\n return EMPTY_OPTION;\n };\n const setValue = value => {\n const root = getRoot(businessObject);\n const commands = [];\n let error;\n\n // (1) create new error\n if (value === CREATE_NEW_OPTION) {\n error = createElement('bpmn:Error', {\n name: nextId('Error_')\n }, root, bpmnFactory);\n value = error.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), error]\n }\n }\n });\n }\n\n // (2) update (or remove) errorRef\n error = error || findRootElementById(businessObject, 'bpmn:Error', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: errorEventDefinition,\n properties: {\n errorRef: error\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION,\n label: translate('Create new ...')\n }];\n const errors = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Error');\n sortByName$1(errors).forEach(error => {\n options.push({\n value: error.get('id'),\n label: error.get('name') || error.get('id')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: idPrefix + '-errorRef',\n label: translate('Global error reference'),\n autoFocusEntry: idPrefix + '-errorName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction ErrorName(props) {\n const {\n element,\n error,\n idPrefix\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return error.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: idPrefix + '-errorName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ErrorCode(props) {\n const {\n element,\n error,\n idPrefix\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return error.get('errorCode');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n errorCode: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: idPrefix + '-errorCode',\n label: translate('Code'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ErrorMessage(props) {\n const {\n element,\n error,\n idPrefix\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return error.get('errorMessage');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n errorMessage: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: idPrefix + '-errorMessage',\n label: translate('Message'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Expression$1(props) {\n const {\n element,\n errorEventDefinition,\n idPrefix\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: errorEventDefinition,\n properties: {\n 'camunda:expression': value\n }\n });\n };\n const getValue = () => {\n return errorEventDefinition.get('camunda:expression');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: errorEventDefinition,\n id: idPrefix + '-expression',\n label: translate('Throw expression'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helpers //////////\n\nfunction sortByName$1(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nfunction ErrorsProps({\n element,\n injector\n}) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ServiceTask') || getImplementationType(element) !== 'external') {\n return null;\n }\n const errorEventDefinitions = getExtensionElementsList(businessObject, 'camunda:ErrorEventDefinition');\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = errorEventDefinitions.map((errorEventDefinition, index) => {\n const id = element.id + '-error-' + index;\n return {\n id,\n label: getErrorLabel(errorEventDefinition),\n entries: Error$1({\n idPrefix: id,\n element,\n errorEventDefinition\n }),\n autoFocusEntry: id + '-errorRef',\n remove: removeFactory$6({\n commandStack,\n element,\n errorEventDefinition\n })\n };\n });\n return {\n items,\n add: addFactory$5({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction removeFactory$6({\n commandStack,\n element,\n errorEventDefinition\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n removeExtensionElements(element, businessObject, errorEventDefinition, commandStack);\n };\n}\nfunction addFactory$5({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const error = createElement('camunda:ErrorEventDefinition', {}, undefined, bpmnFactory);\n addExtensionElements(element, businessObject, error, bpmnFactory, commandStack);\n };\n}\n\n// helpers //////////\n\nfunction getErrorLabel(errorEventDefinition) {\n const error = errorEventDefinition.get('errorRef');\n if (!error) {\n return '';\n }\n const errorCode = error.get('errorCode'),\n name = error.get('name') || '';\n if (errorCode) {\n return `${name} (code = ${errorCode})`;\n }\n return name;\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction EscalationProps(props) {\n const {\n element,\n entries\n } = props;\n if (!(isEscalationSupported(element) && canHaveEscalationVariables(element))) {\n return entries;\n }\n entries.push({\n id: 'escalationCodeVariable',\n component: EscalationCodeVariable,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n return entries;\n}\nfunction EscalationCodeVariable(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const escalationEventDefinition = getEscalationEventDefinition(element);\n const getValue = () => {\n return escalationEventDefinition.get('camunda:escalationCodeVariable');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: escalationEventDefinition,\n properties: {\n 'camunda:escalationCodeVariable': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'escalationCodeVariable',\n label: translate('Code variable'),\n description: translate('Define the name of the variable that will contain the escalation code.'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////////\n\nfunction canHaveEscalationVariables(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BoundaryEvent');\n}\n\nfunction ExternalTaskPriorityProps(props) {\n const {\n element\n } = props;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') && !((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && businessObject.get('processRef')) && !isExternalTaskLike(element)) {\n return [];\n }\n return [{\n id: 'externalTaskPriority',\n component: ExternalTaskPriority,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction ExternalTaskPriority(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n let businessObject;\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('processRef');\n } else if (isExternalTaskLike(element)) {\n businessObject = getServiceTaskLikeBusinessObject(element);\n } else {\n businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n }\n const getValue = () => {\n return businessObject.get('camunda:taskPriority');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:taskPriority': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'externalTaskPriority',\n label: translate('Priority'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper //////////////////\n\nfunction isExternalTaskLike(element) {\n const bo = getServiceTaskLikeBusinessObject(element),\n type = bo && bo.get('camunda:type');\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(bo, 'camunda:ServiceTaskLike') && type && type === 'external';\n}\n\nconst DEFAULT_PROPS$2 = {\n 'stringValue': undefined,\n 'string': undefined,\n 'expression': undefined\n};\nfunction FieldInjection(props) {\n const {\n element,\n idPrefix,\n field\n } = props;\n const entries = [{\n id: idPrefix + '-name',\n component: NameProperty,\n field,\n idPrefix,\n element\n }, {\n id: idPrefix + '-type',\n component: TypeProperty,\n field,\n idPrefix,\n element\n }, {\n id: idPrefix + '-value',\n component: ValueProperty,\n field,\n idPrefix,\n element\n }];\n return entries;\n}\nfunction NameProperty(props) {\n const {\n idPrefix,\n element,\n field\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: field,\n properties: {\n name: value\n }\n });\n };\n const getValue = field => {\n return field.name;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: field,\n id: idPrefix + '-name',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction TypeProperty(props) {\n const {\n idPrefix,\n element,\n field\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate');\n const getValue = field => {\n return determineType(field);\n };\n const setValue = value => {\n const properties = Object.assign({}, DEFAULT_PROPS$2);\n properties[value] = '';\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: field,\n properties\n });\n };\n const getOptions = element => {\n const options = [{\n value: 'string',\n label: translate('String')\n }, {\n value: 'expression',\n label: translate('Expression')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element: field,\n id: idPrefix + '-type',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction ValueProperty(props) {\n const {\n idPrefix,\n element,\n field\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n // (1) determine which type we have set\n const type = determineType(field);\n\n // (2) set property accordingly\n const properties = Object.assign({}, DEFAULT_PROPS$2);\n properties[type] = value || '';\n\n // (3) execute the update command\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: field,\n properties\n });\n };\n const getValue = field => {\n return field.string || field.stringValue || field.expression;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element: field,\n id: idPrefix + '-value',\n label: translate('Value'),\n getValue,\n setValue,\n debounce,\n autoResize: true\n });\n}\n\n// helper ///////////////////\n\n/**\n * determineType - get the type of a fieldInjection based on the attributes\n * set on it\n *\n * @param {ModdleElement} field\n * @return {('string'|'expression')}\n */\nfunction determineType(field) {\n // string is the default type\n return 'string' in field && 'string' || 'expression' in field && 'expression' || 'stringValue' in field && 'string' || 'string';\n}\n\nfunction FieldInjectionProps({\n element,\n injector\n}) {\n const businessObject = getServiceTaskLikeBusinessObject(element);\n if (!businessObject) {\n return null;\n }\n const fieldInjections = getExtensionElementsList(businessObject, 'camunda:Field');\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = fieldInjections.map((field, index) => {\n const id = element.id + '-fieldInjection-' + index;\n return {\n id,\n label: getFieldLabel(field),\n entries: FieldInjection({\n idPrefix: id,\n element,\n field\n }),\n autoFocusEntry: id + '-name',\n remove: removeFactory$5({\n commandStack,\n element,\n field\n })\n };\n });\n return {\n items,\n add: addFactory$4({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction removeFactory$5({\n commandStack,\n element,\n field\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = getServiceTaskLikeBusinessObject(element);\n removeExtensionElements(element, businessObject, field, commandStack);\n };\n}\nfunction addFactory$4({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = getServiceTaskLikeBusinessObject(element);\n const fieldInjection = createElement('camunda:Field', {\n name: undefined,\n string: '',\n // string is the default type\n stringValue: undefined\n }, null, bpmnFactory);\n addExtensionElements(element, businessObject, fieldInjection, bpmnFactory, commandStack);\n };\n}\n\n// helper ///////////////\n\nfunction getFieldLabel(field) {\n return field.name || '';\n}\n\nfunction FormFieldConstraint(props) {\n const {\n constraint,\n element,\n idPrefix\n } = props;\n const entries = [{\n id: idPrefix + '-name',\n component: Name$1,\n constraint,\n idPrefix,\n element\n }, {\n id: idPrefix + '-config',\n component: Config,\n constraint,\n idPrefix,\n element\n }];\n return entries;\n}\nfunction Name$1(props) {\n const {\n idPrefix,\n element,\n constraint\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: constraint,\n properties: {\n name: value\n }\n });\n };\n const getValue = () => {\n return constraint.name;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: constraint,\n id: idPrefix + '-name',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Config(props) {\n const {\n idPrefix,\n element,\n constraint\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: constraint,\n properties: {\n config: value\n }\n });\n };\n const getValue = () => {\n return constraint.config;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: constraint,\n id: idPrefix + '-config',\n label: translate('Config'),\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction FormFieldProperty(props) {\n const {\n element,\n idPrefix,\n property\n } = props;\n const entries = [{\n id: idPrefix + '-id',\n component: Id$3,\n idPrefix,\n property,\n element\n }, {\n id: idPrefix + '-value',\n component: Value$1,\n idPrefix,\n property,\n element\n }];\n return entries;\n}\nfunction Id$3(props) {\n const {\n idPrefix,\n element,\n property\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: property,\n properties: {\n id: value\n }\n });\n };\n const getValue = () => {\n return property.id;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: property,\n id: idPrefix + '-id',\n label: translate('ID'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Value$1(props) {\n const {\n idPrefix,\n element,\n property\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: property,\n properties: {\n value\n }\n });\n };\n const getValue = () => {\n return property.value;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: property,\n id: idPrefix + '-value',\n label: translate('Value'),\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction FormFieldValue(props) {\n const {\n element,\n idPrefix,\n value\n } = props;\n const entries = [{\n id: idPrefix + '-id',\n component: Id$2,\n idPrefix,\n value,\n element\n }, {\n id: idPrefix + '-name',\n component: Name,\n idPrefix,\n value,\n element\n }];\n return entries;\n}\nfunction Id$2(props) {\n const {\n idPrefix,\n element,\n value\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const setValue = val => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: value,\n properties: {\n id: val\n }\n });\n };\n const getValue = () => {\n return value.id;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: value,\n id: idPrefix + '-id',\n label: translate('ID'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Name(props) {\n const {\n idPrefix,\n element,\n value\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const setValue = val => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: value,\n properties: {\n name: val\n }\n });\n };\n const getValue = () => {\n return value.name;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: value,\n id: idPrefix + '-name',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\n\nconst CUSTOM_TYPE_VALUE = '',\n DEFINED_TYPE_VALUES = ['boolean', 'date', 'enum', 'long', 'string', undefined];\nfunction FormField(props) {\n const {\n idPrefix,\n formField\n } = props;\n const entries = [{\n id: idPrefix + '-formFieldID',\n component: Id$1,\n idPrefix,\n formField\n }, {\n id: idPrefix + '-formFieldLabel',\n component: Label,\n idPrefix,\n formField\n }, {\n id: idPrefix + '-formFieldType',\n component: Type$1,\n idPrefix,\n formField\n }];\n if (!DEFINED_TYPE_VALUES.includes(formField.get('type'))) {\n entries.push({\n id: idPrefix + '-formFieldCustomType',\n component: CustomType,\n idPrefix,\n formField\n });\n }\n entries.push({\n id: idPrefix + '-formFieldDefaultValue',\n component: DefaultValue,\n idPrefix,\n formField\n });\n if (formField.get('type') === 'enum') {\n entries.push({\n id: idPrefix + '-formFieldValues',\n component: ValueList,\n formField,\n idPrefix\n });\n }\n entries.push({\n id: idPrefix + '-formFieldConstraints',\n component: ConstraintList,\n formField,\n idPrefix\n }, {\n id: idPrefix + '-formFieldProperties',\n component: PropertiesList,\n formField,\n idPrefix\n });\n return entries;\n}\nfunction Id$1(props) {\n const {\n idPrefix,\n element,\n formField\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: formField,\n properties: {\n id: value\n }\n });\n };\n const getValue = () => {\n return formField.get('id');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: formField,\n id: idPrefix + '-formFieldID',\n label: translate('ID'),\n description: translate('Refers to the process variable name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Label(props) {\n const {\n idPrefix,\n element,\n formField\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: formField,\n properties: {\n label: value\n }\n });\n };\n const getValue = () => {\n return formField.get('label');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: formField,\n id: idPrefix + '-formFieldLabel',\n label: translate('Label'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Type$1(props) {\n const {\n idPrefix,\n element,\n formField\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: formField,\n properties: {\n type: value\n }\n });\n };\n const getValue = () => {\n const type = formField.get('type');\n return DEFINED_TYPE_VALUES.includes(type) ? type : CUSTOM_TYPE_VALUE;\n };\n const getOptions = () => {\n const options = [{\n label: translate('boolean'),\n value: 'boolean'\n }, {\n label: translate('date'),\n value: 'date'\n }, {\n label: translate('enum'),\n value: 'enum'\n }, {\n label: translate('long'),\n value: 'long'\n }, {\n label: translate('string'),\n value: 'string'\n }, {\n label: translate(''),\n value: CUSTOM_TYPE_VALUE\n }];\n\n // for the initial state only, we want to show an empty state\n if (formField.get('type') === undefined) {\n options.unshift({\n label: translate(''),\n value: ''\n });\n }\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element: formField,\n id: idPrefix + '-formFieldType',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction CustomType(props) {\n const {\n idPrefix,\n element,\n formField\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n const type = value || '';\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: formField,\n properties: {\n type\n }\n });\n };\n const getValue = () => {\n return formField.get('type');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: formField,\n id: idPrefix + '-formFieldCustomType',\n label: translate('Custom type'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction DefaultValue(props) {\n const {\n idPrefix,\n element,\n formField\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: formField,\n properties: {\n defaultValue: value\n }\n });\n };\n const getValue = () => {\n return formField.get('defaultValue');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: formField,\n id: idPrefix + '-formFieldDefaultValue',\n label: translate('Default value'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Value(props) {\n const {\n element,\n id: idPrefix,\n index,\n item: value,\n open\n } = props;\n const translate = useService('translate');\n const id = `${idPrefix}-value-${index}`;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CollapsibleEntry, {\n id: id,\n element: element,\n entries: FormFieldValue({\n idPrefix: id,\n element,\n value\n }),\n label: value.get('id') || translate(''),\n open: open\n });\n}\nfunction ValueList(props) {\n const {\n element,\n formField,\n idPrefix\n } = props;\n const id = `${idPrefix}-formFieldValues`;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const values = formField.get('values') || [];\n function addValue() {\n const value = createElement('camunda:Value', {\n id: undefined,\n name: undefined\n }, formField, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: formField,\n properties: {\n values: [...formField.get('values'), value]\n }\n });\n }\n function removeValue(value) {\n commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: formField,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(formField.get('values'), value)\n }\n });\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListEntry, {\n element: element,\n autoFocusEntry: `[data-entry-id=\"${id}-value-${values.length - 1}\"] input`,\n id: id,\n label: translate('Values'),\n items: values,\n component: Value,\n onAdd: addValue,\n onRemove: removeValue\n });\n}\nfunction Constraint(props) {\n const {\n element,\n id: idPrefix,\n index,\n item: constraint,\n open\n } = props;\n const translate = useService('translate');\n const id = `${idPrefix}-constraint-${index}`;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CollapsibleEntry, {\n id: id,\n element: element,\n entries: FormFieldConstraint({\n constraint,\n element,\n idPrefix: id\n }),\n label: constraint.get('name') || translate(''),\n open: open\n });\n}\nfunction ConstraintList(props) {\n const {\n element,\n formField,\n idPrefix\n } = props;\n const id = `${idPrefix}-formFieldConstraints`;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let validation = formField.get('validation');\n const constraints = validation && validation.get('constraints') || [];\n function addConstraint() {\n const commands = [];\n\n // (1) ensure validation\n if (!validation) {\n validation = createElement('camunda:Validation', {}, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: formField,\n properties: {\n validation\n }\n }\n });\n }\n\n // (2) add constraint\n const constraint = createElement('camunda:Constraint', {\n name: undefined,\n config: undefined\n }, validation, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: validation,\n properties: {\n constraints: [...validation.get('constraints'), constraint]\n }\n }\n });\n\n // (3) commit updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n }\n function removeConstraint(constraint) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: validation,\n properties: {\n constraints: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(validation.get('constraints'), constraint)\n }\n });\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListEntry, {\n element: element,\n autoFocusEntry: `[data-entry-id=\"${id}-constraint-${constraints.length - 1}\"] input`,\n id: id,\n label: translate('Constraints'),\n items: constraints,\n component: Constraint,\n onAdd: addConstraint,\n onRemove: removeConstraint\n });\n}\nfunction Property(props) {\n const {\n element,\n id: idPrefix,\n index,\n item: property,\n open\n } = props;\n const translate = useService('translate');\n const id = `${idPrefix}-property-${index}`;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CollapsibleEntry, {\n id: id,\n element: element,\n entries: FormFieldProperty({\n element,\n idPrefix: id,\n property\n }),\n label: property.get('id') || translate(''),\n open: open\n });\n}\nfunction PropertiesList(props) {\n const {\n element,\n formField,\n idPrefix\n } = props;\n const id = `${idPrefix}-formFieldProperties`;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let properties = formField.get('properties');\n const propertyEntries = properties && properties.get('values') || [];\n function addProperty() {\n const commands = [];\n\n // (1) ensure properties\n if (!properties) {\n properties = createElement('camunda:Properties', {}, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: formField,\n properties: {\n properties\n }\n }\n });\n }\n\n // (2) add property\n const property = createElement('camunda:Property', {\n id: undefined,\n value: undefined\n }, properties, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: properties,\n properties: {\n values: [...properties.get('values'), property]\n }\n }\n });\n\n // (3) commit updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n }\n function removeProperty(property) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: properties,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(properties.get('values'), property)\n }\n });\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListEntry, {\n element: element,\n autoFocusEntry: `[data-entry-id=\"${id}-property-${propertyEntries.length - 1}\"] input`,\n id: id,\n label: translate('Properties'),\n items: propertyEntries,\n component: Property,\n onAdd: addProperty,\n onRemove: removeProperty\n });\n}\n\nfunction FormDataProps({\n element,\n injector\n}) {\n if (!isFormDataSupported(element)) {\n return;\n }\n const formFields = getFormFieldsList(element) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = formFields.map((formField, index) => {\n const id = element.id + '-formField-' + index;\n return {\n id,\n label: formField.get('id') || '',\n entries: FormField({\n idPrefix: id,\n element,\n formField\n }),\n autoFocusEntry: id + '-formFieldID',\n remove: removeFactory$4({\n commandStack,\n element,\n formField\n })\n };\n });\n return {\n items,\n add: addFactory$3({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction addFactory$3({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n const commands = [];\n\n // (1) get camunda:FormData\n const formData = getFormData$1(element);\n\n // (2) create camunda:FormField\n const formField = createElement('camunda:FormField', {}, formData, bpmnFactory);\n\n // (3) add formField to list\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: formData,\n properties: {\n fields: [...formData.get('fields'), formField]\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n}\nfunction removeFactory$4({\n commandStack,\n element,\n formField\n}) {\n return function (event) {\n event.stopPropagation();\n const formData = getFormData$1(element),\n formFields = getFormFieldsList(element);\n if (!formFields || !formFields.length) {\n return;\n }\n const fields = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(formData.get('fields'), formField);\n\n // update formData\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: formData,\n properties: {\n fields\n }\n });\n };\n}\n\n// helper ///////////////////////////////\n\nfunction isFormDataSupported(element) {\n const formData = getFormData$1(element);\n return ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element.parent, 'bpmn:SubProcess') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask')) && formData;\n}\nfunction getFormData$1(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(bo, 'camunda:FormData')[0];\n}\nfunction getFormFieldsList(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const formData = getFormData$1(businessObject);\n return formData && formData.fields;\n}\n\nconst FORM_KEY_PROPS = {\n 'camunda:formRef': undefined,\n 'camunda:formRefBinding': undefined,\n 'camunda:formRefVersion': undefined\n};\nconst FORM_REF_PROPS = {\n 'camunda:formKey': undefined\n};\nfunction FormTypeProps(props) {\n return [{\n id: 'formType',\n component: FormType,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n}\nfunction FormType(props) {\n const {\n element\n } = props;\n const translate = useService('translate');\n const bpmnFactory = useService('bpmnFactory');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const commandStack = useService('commandStack');\n let extensionElements = businessObject.get('extensionElements');\n const getValue = () => {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isDefined)(businessObject.get('camunda:formKey'))) {\n return 'formKey';\n } else if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isDefined)(businessObject.get('camunda:formRef'))) {\n return 'formRef';\n } else if (getFormData(element)) {\n return 'formData';\n }\n return '';\n };\n const setValue = value => {\n const commands = removePropertiesCommands(element);\n if (value === 'formData') {\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) create camunda:FormData\n const parent = extensionElements;\n const formData = createElement('camunda:FormData', {\n fields: []\n }, parent, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), formData]\n }\n }\n });\n } else if (value === 'formKey') {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:formKey': ''\n }\n }\n });\n } else if (value === 'formRef') {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:formRef': ''\n }\n }\n });\n }\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n return [{\n value: '',\n label: translate('')\n }, {\n value: 'formRef',\n label: translate('Camunda Forms')\n }, {\n value: 'formKey',\n label: translate('Embedded or External Task Forms')\n }, {\n value: 'formData',\n label: translate('Generated Task Forms')\n }];\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'formType',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction getFormData(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(bo, 'camunda:FormData')[0];\n}\nfunction removePropertiesCommands(element, commandStack) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const extensionElements = businessObject.get('extensionElements');\n const commands = [];\n\n // (1) reset formKey and formRef\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n ...FORM_KEY_PROPS,\n ...FORM_REF_PROPS\n }\n }\n });\n\n // (2) remove formData if defined\n if (extensionElements && getFormData(element)) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), getFormData(element))\n }\n }\n });\n }\n return commands;\n}\n\nfunction getFormRefBinding(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return businessObject.get('camunda:formRefBinding') || 'latest';\n}\nfunction getFormType(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isDefined)(businessObject.get('camunda:formKey'))) {\n return 'formKey';\n } else if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isDefined)(businessObject.get('camunda:formRef'))) {\n return 'formRef';\n }\n}\nfunction isFormSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element.parent, 'bpmn:SubProcess') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask');\n}\n\nfunction FormProps(props) {\n const {\n element\n } = props;\n if (!isFormSupported(element)) {\n return [];\n }\n const formType = getFormType(element),\n bindingType = getFormRefBinding(element);\n\n // (1) display form type select\n const entries = [...FormTypeProps()];\n\n // (2) display form properties based on type\n if (formType === 'formKey') {\n entries.push({\n id: 'formKey',\n component: FormKey,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (formType === 'formRef') {\n entries.push({\n id: 'formRef',\n component: FormRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'formRefBinding',\n component: Binding$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n });\n if (bindingType === 'version') {\n entries.push({\n id: 'formRefVersion',\n component: Version$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n }\n return entries;\n}\nfunction FormKey(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput');\n const modeling = useService('modeling');\n const translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:formKey');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n 'camunda:formKey': (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isUndefined)(value) ? '' : value\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'formKey',\n label: translate('Form key'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction FormRef(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput');\n const modeling = useService('modeling');\n const translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:formRef');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n 'camunda:formRef': (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isUndefined)(value) ? '' : value\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'formRef',\n label: translate('Form reference'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Binding$1(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const translate = useService('translate');\n const getValue = () => {\n return getFormRefBinding(element);\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n 'camunda:formRefBinding': value\n });\n };\n\n // Note: default is \"latest\",\n // cf. https://docs.camunda.org/manual/develop/reference/bpmn20/custom-extensions/extension-attributes/#formrefbinding\n const getOptions = () => {\n const options = [{\n value: 'deployment',\n label: translate('deployment')\n }, {\n value: 'latest',\n label: translate('latest')\n }, {\n value: 'version',\n label: translate('version')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'formRefBinding',\n label: translate('Binding'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction Version$1(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput');\n const modeling = useService('modeling');\n const translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:formRefVersion');\n };\n const setValue = value => {\n modeling.updateProperties(element, {\n 'camunda:formRefVersion': value\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'formRefVersion',\n label: translate('Version'),\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction HistoryCleanupProps(props) {\n const {\n element\n } = props;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') && !((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && businessObject.get('processRef'))) {\n return [];\n }\n return [{\n id: 'historyTimeToLive',\n component: HistoryTimeToLive,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction HistoryTimeToLive(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const process = getProcess$2(element);\n const getValue = () => {\n return process.get('camunda:historyTimeToLive') || '';\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n 'camunda:historyTimeToLive': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'historyTimeToLive',\n label: translate('Time to live'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper //////////////////\n\nfunction getProcess$2(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element) : (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('processRef');\n}\n\nfunction DmnImplementationProps(props) {\n const {\n element\n } = props;\n const entries = [];\n const implementationType = getImplementationType(element);\n const bindingType = getDecisionRefBinding(element);\n if (implementationType !== 'dmn') {\n return entries;\n }\n\n // (1) decisionRef\n entries.push({\n id: 'decisionRef',\n component: DecisionRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n\n // (2) binding\n entries.push({\n id: 'decisionRefBinding',\n component: Binding,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n });\n\n // (3) version\n if (bindingType === 'version') {\n entries.push({\n id: 'decisionRefVersion',\n component: Version,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n\n // (4) versionTag\n if (bindingType === 'versionTag') {\n entries.push({\n id: 'decisionRefVersionTag',\n component: VersionTag$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n\n // (5) tenantId\n entries.push({\n id: 'decisionRefTenantId',\n component: TenantId,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n\n // (6) resultVariable\n entries.push({\n id: 'decisionRefResultVariable',\n component: ResultVariable$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n\n // (7) mapDecisionResult\n if (getResultVariable(element)) {\n entries.push({\n id: 'mapDecisionResult',\n component: MapDecisionResult,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n });\n }\n return entries;\n}\nfunction DecisionRef(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:decisionRef');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:decisionRef': value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'decisionRef',\n label: translate('Decision reference'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Binding(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getDecisionRefBinding(element);\n };\n const setValue = value => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n\n // reset version properties on binding type change\n const updatedProperties = {\n 'camunda:decisionRefVersion': undefined,\n 'camunda:decisionRefVersionTag': undefined,\n 'camunda:decisionRefBinding': value\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: updatedProperties\n });\n };\n\n // Note: default is \"latest\",\n // cf. https://docs.camunda.org/manual/latest/reference/bpmn20/custom-extensions/extension-attributes/#decisionrefbinding\n const getOptions = () => {\n const options = [{\n value: 'deployment',\n label: translate('deployment')\n }, {\n value: 'latest',\n label: translate('latest')\n }, {\n value: 'version',\n label: translate('version')\n }, {\n value: 'versionTag',\n label: translate('versionTag')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'decisionRefBinding',\n label: translate('Binding'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction Version(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:decisionRefVersion');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:decisionRefVersion': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'decisionRefVersion',\n label: translate('Version'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction VersionTag$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:decisionRefVersionTag');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:decisionRefVersionTag': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'decisionRefVersionTag',\n label: translate('Version tag'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction TenantId(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:decisionRefTenantId');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:decisionRefTenantId': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'decisionRefTenantId',\n label: translate('Tenant ID'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ResultVariable$2(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return getResultVariable(businessObject);\n };\n\n // Note: camunda:mapDecisionResult got cleaned up in modeling behavior\n // cf. https://github.com/camunda/camunda-bpmn-js/blob/main/lib/camunda-platform/features/modeling/behavior/UpdateResultVariableBehavior.js\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:resultVariable': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'decisionRefResultVariable',\n label: translate('Result variable'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction MapDecisionResult(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:mapDecisionResult') || 'resultList';\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:mapDecisionResult': value\n }\n });\n };\n\n // Note: default is \"resultList\",\n // cf. https://docs.camunda.org/manual/latest/reference/bpmn20/custom-extensions/extension-attributes/#mapdecisionresult\n const getOptions = () => {\n const options = [{\n value: 'collectEntries',\n label: translate('collectEntries (List)')\n }, {\n value: 'resultList',\n label: translate('resultList (List>)')\n }, {\n value: 'singleEntry',\n label: translate('singleEntry (TypedValue)')\n }, {\n value: 'singleResult',\n label: translate('singleResult (Map)')\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'mapDecisionResult',\n label: translate('Map decision result'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n// helper ////////////////////\n\nfunction getDecisionRefBinding(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return businessObject.get('camunda:decisionRefBinding') || 'latest';\n}\nfunction getResultVariable(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return businessObject.get('camunda:resultVariable');\n}\n\nconst DELEGATE_PROPS = {\n 'camunda:class': undefined,\n 'camunda:expression': undefined,\n 'camunda:delegateExpression': undefined,\n 'camunda:resultVariable': undefined\n};\nconst DMN_CAPABLE_PROPS = {\n 'camunda:decisionRef': undefined,\n 'camunda:decisionRefBinding': 'latest',\n 'camunda:decisionRefVersion': undefined,\n 'camunda:mapDecisionResult': 'resultList',\n 'camunda:decisionRefTenantId': undefined\n};\nconst EXTERNAL_CAPABLE_PROPS = {\n 'camunda:type': undefined,\n 'camunda:topic': undefined\n};\nconst IMPLEMENTATION_TYPE_NONE_LABEL = '',\n IMPLEMENTATION_TYPE_JAVA_LABEL = 'Java class',\n IMPLEMENTATION_TYPE_EXPRESSION_LABEL = 'Expression',\n IMPLEMENTATION_TYPE_DELEGATE_LABEL = 'Delegate expression',\n IMPLEMENTATION_TYPE_DMN_LABEL = 'DMN',\n IMPLEMENTATION_TYPE_EXTERNAL_LABEL = 'External',\n IMPLEMENTATION_TYPE_CONNECTOR_LABEL = 'Connector';\nfunction ImplementationTypeProps(props) {\n return [{\n id: 'implementationType',\n component: ImplementationType,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n}\nfunction ImplementationType(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getImplementationType(element) || '';\n };\n const setValue = value => {\n const oldType = getImplementationType(element);\n const businessObject = getServiceTaskLikeBusinessObject(element);\n const commands = [];\n let updatedProperties = DELEGATE_PROPS;\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) class, expression, delegateExpression\n if (isDelegateType(value)) {\n updatedProperties = {\n ...updatedProperties,\n [value]: isDelegateType(oldType) ? businessObject.get(`camunda:${oldType}`) : ''\n };\n }\n\n // (2) dmn\n if (isDmnCapable(businessObject)) {\n updatedProperties = {\n ...updatedProperties,\n ...DMN_CAPABLE_PROPS\n };\n if (value === 'dmn') {\n updatedProperties = {\n ...updatedProperties,\n 'camunda:decisionRef': ''\n };\n }\n }\n\n // (3) external\n // Note: error event definition elements got cleaned up in modeling behavior\n // cf. https://github.com/camunda/camunda-bpmn-js/blob/main/lib/camunda-platform/features/modeling/behavior/DeleteErrorEventDefinitionBehavior.js\n if (isExternalCapable(businessObject)) {\n updatedProperties = {\n ...updatedProperties,\n ...EXTERNAL_CAPABLE_PROPS\n };\n if (value === 'external') {\n updatedProperties = {\n ...updatedProperties,\n 'camunda:type': 'external',\n 'camunda:topic': ''\n };\n }\n }\n\n // (4) connector\n if (isServiceTaskLike(businessObject)) {\n // (4.1) remove all connectors on type change\n const connectors = getConnectors$1(businessObject);\n if (connectors.length) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(extensionElements.get('values'), value => connectors.includes(value))\n }\n }\n });\n }\n\n // (4.2) create connector\n if (value === 'connector') {\n // ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push(UpdateModdlePropertiesCommand(element, businessObject, {\n extensionElements\n }));\n }\n const connector = createElement('camunda:Connector', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), connector]\n }\n }\n });\n }\n }\n\n // (5) collect all property updates\n commands.push(UpdateModdlePropertiesCommand(element, businessObject, updatedProperties));\n\n // (6) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n const businessObject = getServiceTaskLikeBusinessObject(element);\n const options = [{\n value: '',\n label: translate(IMPLEMENTATION_TYPE_NONE_LABEL)\n }, {\n value: 'class',\n label: translate(IMPLEMENTATION_TYPE_JAVA_LABEL)\n }, {\n value: 'expression',\n label: translate(IMPLEMENTATION_TYPE_EXPRESSION_LABEL)\n }, {\n value: 'delegateExpression',\n label: translate(IMPLEMENTATION_TYPE_DELEGATE_LABEL)\n }];\n if (isDmnCapable(businessObject)) {\n options.push({\n value: 'dmn',\n label: translate(IMPLEMENTATION_TYPE_DMN_LABEL)\n });\n }\n if (isExternalCapable(businessObject)) {\n options.push({\n value: 'external',\n label: translate(IMPLEMENTATION_TYPE_EXTERNAL_LABEL)\n });\n }\n if (isServiceTaskLike(businessObject)) {\n options.push({\n value: 'connector',\n label: translate(IMPLEMENTATION_TYPE_CONNECTOR_LABEL)\n });\n }\n return sortByPriority(options);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'implementationType',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n// helper ///////////////////////\n\nfunction isDelegateType(type) {\n return ['class', 'expression', 'delegateExpression'].includes(type);\n}\nfunction getConnectors$1(businessObject) {\n return getExtensionElementsList(businessObject, 'camunda:Connector');\n}\nfunction UpdateModdlePropertiesCommand(element, businessObject, newProperties) {\n return {\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: newProperties\n }\n };\n}\nfunction sortByPriority(options) {\n const priorities = {\n [IMPLEMENTATION_TYPE_NONE_LABEL]: 0,\n [IMPLEMENTATION_TYPE_JAVA_LABEL]: 3,\n [IMPLEMENTATION_TYPE_EXPRESSION_LABEL]: 4,\n [IMPLEMENTATION_TYPE_DELEGATE_LABEL]: 5,\n [IMPLEMENTATION_TYPE_DMN_LABEL]: 1,\n [IMPLEMENTATION_TYPE_EXTERNAL_LABEL]: 2,\n [IMPLEMENTATION_TYPE_CONNECTOR_LABEL]: 6\n };\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(options, o => priorities[o.label]);\n}\n\nfunction ImplementationProps(props) {\n const {\n element\n } = props;\n if (!getServiceTaskLikeBusinessObject(element)) {\n return [];\n }\n const implementationType = getImplementationType(element);\n\n // (1) display implementation type select\n const entries = [...ImplementationTypeProps()];\n\n // (2) display implementation properties based on type\n if (implementationType === 'class') {\n entries.push({\n id: 'javaClass',\n component: JavaClass,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (implementationType === 'expression') {\n entries.push({\n id: 'expression',\n component: Expression,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'expressionResultVariable',\n component: ResultVariable$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (implementationType === 'delegateExpression') {\n entries.push({\n id: 'delegateExpression',\n component: DelegateExpression,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (implementationType === 'dmn') {\n entries.push(...DmnImplementationProps({\n element\n }));\n } else if (implementationType === 'external') {\n entries.push({\n id: 'externalTopic',\n component: Topic,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n } else if (implementationType === 'connector') {\n entries.push({\n id: 'connectorId',\n component: ConnectorId,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction JavaClass(props) {\n const {\n element,\n businessObject = getServiceTaskLikeBusinessObject(element),\n id = 'javaClass'\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return businessObject.get('camunda:class');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:class': value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id,\n label: translate('Java class'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Expression(props) {\n const {\n element,\n businessObject = getServiceTaskLikeBusinessObject(element),\n id = 'expression'\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return businessObject.get('camunda:expression');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:expression': value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id,\n label: translate('Expression'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ResultVariable$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = getServiceTaskLikeBusinessObject(element);\n const getValue = () => {\n return businessObject.get('camunda:resultVariable');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:resultVariable': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'expressionResultVariable',\n label: translate('Result variable'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction DelegateExpression(props) {\n const {\n element,\n businessObject = getServiceTaskLikeBusinessObject(element),\n id = 'delegateExpression'\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = () => {\n return businessObject.get('camunda:delegateExpression');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:delegateExpression': value || ''\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id,\n label: translate('Delegate expression'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Topic(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = getServiceTaskLikeBusinessObject(element);\n const getValue = () => {\n return businessObject.get('camunda:topic');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:topic': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'externalTopic',\n label: translate('Topic'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ConnectorId(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const connector = getConnector(element);\n const getValue = () => {\n return connector.get('camunda:connectorId');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: connector,\n properties: {\n 'camunda:connectorId': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'connectorId',\n label: translate('Connector ID'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper //////////////////\n\nfunction getConnectors(businessObject) {\n return getExtensionElementsList(businessObject, 'camunda:Connector');\n}\nfunction getConnector(element) {\n const businessObject = getServiceTaskLikeBusinessObject(element);\n const connectors = getConnectors(businessObject);\n return connectors[0];\n}\n\nfunction InitiatorProps(props) {\n const {\n element\n } = props;\n if (!isInitiator(element)) {\n return [];\n }\n return [{\n id: 'initiator',\n component: Initiator,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction Initiator(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:initiator');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:initiator': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'initiator',\n label: translate('Initiator'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ///////////////////\n\nfunction isInitiator(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:Initiator') && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element.parent, 'bpmn:SubProcess');\n}\n\n/**\n * Cf. https://docs.camunda.org/manual/7.15/reference/bpmn20/subprocesses/call-activity/#passing-variables\n */\nfunction InMappingPropagationProps(props) {\n const {\n element\n } = props;\n if (!areInMappingsSupported$1(element)) {\n return [];\n }\n const entries = [{\n id: 'inMapping-propagation',\n component: PropagateAll$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }];\n if (isPropagateAll$1(element)) {\n entries.push({\n id: 'inMapping-propagation-local',\n component: Local$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n });\n }\n return entries;\n}\nfunction PropagateAll$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const getValue = () => {\n return isPropagateAll$1(element);\n };\n const setValue = value => {\n if (value) {\n addInMapping();\n } else {\n removeInMapping();\n }\n };\n function addInMapping() {\n const businessObject = getSignalEventDefinition$1(element) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const mapping = createElement('camunda:In', {\n variables: 'all'\n }, null, bpmnFactory);\n addExtensionElements(element, businessObject, mapping, bpmnFactory, commandStack);\n }\n function removeInMapping() {\n const businessObject = getSignalEventDefinition$1(element) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const mappings = findRelevantInMappings(element);\n removeExtensionElements(element, businessObject, mappings, commandStack);\n }\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n id: 'inMapping-propagation',\n label: translate('Propagate all variables'),\n getValue,\n setValue\n });\n}\nfunction Local$2(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const mapping = findRelevantInMappings(element)[0];\n const getValue = () => {\n return mapping.get('camunda:local');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: mapping,\n properties: {\n local: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'inMapping-propagation-local',\n label: translate('Local'),\n getValue,\n setValue\n });\n}\n\n// helper //////////////////////////\n\nfunction areInMappingsSupported$1(element) {\n const signalEventDefinition = getSignalEventDefinition$1(element);\n if (signalEventDefinition) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:IntermediateThrowEvent', 'bpmn:EndEvent']);\n }\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity');\n}\nfunction getInMappings$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const signalEventDefinition = getSignalEventDefinition$1(businessObject);\n return getExtensionElementsList(signalEventDefinition || businessObject, 'camunda:In');\n}\nfunction findRelevantInMappings(element) {\n const inMappings = getInMappings$1(element);\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.filter)(inMappings, function (mapping) {\n const variables = mapping.get('variables');\n return variables && variables === 'all';\n });\n}\nfunction isPropagateAll$1(element) {\n const mappings = findRelevantInMappings(element);\n return !!mappings.length;\n}\n\nconst DEFAULT_PROPS$1 = {\n 'source': undefined,\n 'sourceExpression': undefined\n};\nfunction InOutMapping(props) {\n const {\n idPrefix,\n mapping\n } = props;\n const type = getInOutType(mapping);\n const entries = [];\n\n // (1) Type\n entries.push({\n id: idPrefix + '-type',\n component: Type,\n idPrefix,\n mapping\n });\n\n // (2) Source\n if (type === 'source') {\n entries.push({\n id: idPrefix + '-source',\n component: Source,\n idPrefix,\n mapping\n });\n }\n\n // (3) Source expression\n if (type === 'sourceExpression') {\n entries.push({\n id: idPrefix + '-sourceExpression',\n component: SourceExpression,\n idPrefix,\n mapping\n });\n }\n\n // (4) Target\n entries.push({\n id: idPrefix + '-target',\n component: Target,\n idPrefix,\n mapping\n });\n\n // (5) Local\n entries.push({\n id: idPrefix + '-local',\n component: Local$1,\n idPrefix,\n mapping\n });\n return entries;\n}\nfunction Type(props) {\n const {\n idPrefix,\n element,\n mapping\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = mapping => {\n return getInOutType(mapping);\n };\n const setValue = value => {\n const properties = {\n ...DEFAULT_PROPS$1,\n [value]: ''\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: mapping,\n properties\n });\n };\n const getOptions = () => {\n const options = [{\n label: translate('Source'),\n value: 'source'\n }, {\n label: translate('Source expression'),\n value: 'sourceExpression'\n }];\n return options;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element: mapping,\n id: idPrefix + '-type',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\nfunction Source(props) {\n const {\n idPrefix,\n element,\n mapping\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: mapping,\n properties: {\n source: value\n }\n });\n };\n const getValue = mapping => {\n return mapping.get('camunda:source');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: mapping,\n id: idPrefix + '-source',\n label: translate('Source'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction SourceExpression(props) {\n const {\n idPrefix,\n element,\n mapping\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: mapping,\n properties: {\n sourceExpression: value\n }\n });\n };\n const getValue = mapping => {\n return mapping.get('camunda:sourceExpression');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: mapping,\n id: idPrefix + '-sourceExpression',\n label: translate('Source expression'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Target(props) {\n const {\n idPrefix,\n element,\n mapping\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: mapping,\n properties: {\n target: value\n }\n });\n };\n const getValue = mapping => {\n return mapping.get('camunda:target');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element: mapping,\n id: idPrefix + '-target',\n label: translate('Target'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Local$1(props) {\n const {\n idPrefix,\n element,\n mapping\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return mapping.get('camunda:local');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: mapping,\n properties: {\n local: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: idPrefix + '-local',\n label: translate('Local'),\n getValue,\n setValue\n });\n}\n\n// helper ///////////////////\n\nfunction getInOutType(mapping) {\n let inOutType = '';\n if (typeof mapping.source !== 'undefined') {\n inOutType = 'source';\n } else if (typeof mapping.sourceExpression !== 'undefined') {\n inOutType = 'sourceExpression';\n }\n return inOutType;\n}\n\n/**\n * Cf. https://docs.camunda.org/manual/latest/reference/bpmn20/custom-extensions/extension-elements/#in\n */\nfunction InMappingProps({\n element,\n injector\n}) {\n if (!areInMappingsSupported(element)) {\n return null;\n }\n const variableMappings = getInMappings(element) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = variableMappings.map((mapping, index) => {\n const id = element.id + '-inMapping-' + index;\n return {\n id,\n label: mapping.get('target') || '',\n entries: InOutMapping({\n idPrefix: id,\n element,\n mapping\n }),\n autoFocusEntry: id + '-target',\n remove: removeFactory$3({\n commandStack,\n element,\n mapping\n })\n };\n });\n return {\n items,\n add: addFactory$2({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction removeFactory$3({\n commandStack,\n element,\n mapping\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = getSignalEventDefinition$1(element) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n removeExtensionElements(element, businessObject, mapping, commandStack);\n };\n}\nfunction addFactory$2({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = getSignalEventDefinition$1(element) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const newMapping = createElement('camunda:In', {\n source: '' // source is the default type\n }, null, bpmnFactory);\n addExtensionElements(element, businessObject, newMapping, bpmnFactory, commandStack);\n };\n}\n\n// helper ///////////////\n\nfunction getInMappings(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const signalEventDefinition = getSignalEventDefinition$1(businessObject);\n const mappings = getExtensionElementsList(signalEventDefinition || businessObject, 'camunda:In');\n\n // only retrieve relevant mappings here, others are handled in other groups\n // mapping.businessKey => camunda-platform/CallAvtivityProps\n // mapping.variables => camunda-platform/InMappingPropagationProps\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.filter)(mappings, function (mapping) {\n return !mapping.businessKey && !(mapping.variables && mapping.variables === 'all');\n });\n}\nfunction areInMappingsSupported(element) {\n const signalEventDefinition = getSignalEventDefinition$1(element);\n if (signalEventDefinition) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:IntermediateThrowEvent', 'bpmn:EndEvent']);\n }\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity');\n}\n\nfunction InputProps(props) {\n const {\n element,\n injector\n } = props;\n if (!areInputParametersSupported(element)) {\n return null;\n }\n const inputParameters = getInputParameters(element) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = inputParameters.map((parameter, index) => {\n const id = element.id + '-inputParameter-' + index;\n return {\n id,\n label: parameter.get('name') || '',\n entries: InputOutputParameter({\n idPrefix: id,\n element,\n parameter\n }),\n autoFocusEntry: id + '-name',\n remove: removeFactory$2({\n element,\n commandStack,\n parameter\n })\n };\n });\n function add(event) {\n event.stopPropagation();\n commandStack.execute('properties-panel.multi-command-executor', AddParameterCmd(element, 'camunda:InputParameter', bpmnFactory));\n }\n return {\n items,\n add\n };\n}\nfunction removeFactory$2(props) {\n const {\n commandStack,\n element,\n parameter\n } = props;\n return function (event) {\n event.stopPropagation();\n const inputOutput = getInputOutput(element);\n if (!inputOutput) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOutput,\n properties: {\n inputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(inputOutput.get('inputParameters'), parameter)\n }\n });\n };\n}\n\nfunction JobExecutionProps(props) {\n const {\n element\n } = props;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const entries = [];\n\n // (1) add retryTimeCycle field for camunda:asyncCapable enabled Elements\n // or TimerEvents\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:AsyncCapable') && isAsync$1(businessObject) || isTimerEvent(element)) {\n entries.push({\n id: 'retryTimeCycle',\n component: RetryTimeCycle,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n\n // (2) add jobPriority field for camunda:jobPriorized with async enabled\n // or Processes\n // or Processes referred to by participants\n // or TimerEvents\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:JobPriorized') && isAsync$1(businessObject) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && businessObject.get('processRef') || isTimerEvent(element)) {\n entries.push({\n id: 'jobPriority',\n component: JobPriority,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction JobPriority(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('processRef') : (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:jobPriority');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:jobPriority': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'jobPriority',\n label: translate('Priority'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction RetryTimeCycle(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory'),\n commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n const failedJobRetryTimeCycle = getExtensionElementsList(businessObject, 'camunda:FailedJobRetryTimeCycle')[0];\n return failedJobRetryTimeCycle && failedJobRetryTimeCycle.body;\n };\n const setValue = value => {\n const commands = [];\n let extensionElements = businessObject.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure failedJobRetryTimeCycle\n let failedJobRetryTimeCycle = getExtensionElementsList(businessObject, 'camunda:FailedJobRetryTimeCycle')[0];\n if (!failedJobRetryTimeCycle) {\n failedJobRetryTimeCycle = createElement('camunda:FailedJobRetryTimeCycle', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), failedJobRetryTimeCycle]\n }\n }\n });\n }\n\n // (3) update failedJobRetryTimeCycle value\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: failedJobRetryTimeCycle,\n properties: {\n body: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'retryTimeCycle',\n label: translate('Retry time cycle'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper //////////////////\n\n/**\n * @param {ModdleElement} bo\n * @return {boolean} a boolean value\n */\nfunction isAsyncBefore$1(bo) {\n return !!(bo.get('camunda:asyncBefore') || bo.get('camunda:async'));\n}\n\n/**\n * @param {ModdleElement} bo\n * @return {boolean}\n */\nfunction isAsyncAfter$1(bo) {\n return !!bo.get('camunda:asyncAfter');\n}\n\n/**\n * isAsync - returns true if the attribute 'camunda:asyncAfter' or 'camunda:asyncBefore'\n * is set to true.\n *\n * @param {ModdleElement} bo\n * @return {boolean}\n */\nfunction isAsync$1(bo) {\n return isAsyncAfter$1(bo) || isAsyncBefore$1(bo);\n}\n\n/**\n * isTimerEvent - returns true if the element is a bpmn:Event with a timerEventDefinition\n *\n * @param {ModdleElement} element\n * @return {boolean}\n */\nfunction isTimerEvent(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Event') && getTimerEventDefinition$1(element);\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction MultiInstanceProps(props) {\n const {\n element\n } = props;\n const loopCharacteristics = getLoopCharacteristics(element);\n let entries = props.entries || [];\n if (!isMultiInstanceSupported(element)) {\n return entries;\n }\n entries.push({\n id: 'collection',\n component: Collection,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'elementVariable',\n component: ElementVariable,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'multiInstanceAsynchronousBefore',\n component: MultiInstanceAsynchronousBefore,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }, {\n id: 'multiInstanceAsynchronousAfter',\n component: MultiInstanceAsynchronousAfter,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n });\n if (isAsync(loopCharacteristics)) {\n entries.push({\n id: 'multiInstanceExclusive',\n component: MultiInstanceExclusive,\n isEdited: checkboxIsEditedInverted\n }, {\n id: 'multiInstanceRetryTimeCycle',\n component: MultiInstanceRetryTimeCycle,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n }\n return entries;\n}\nfunction Collection(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const loopCharacteristics = getLoopCharacteristics(element);\n const getValue = () => {\n return getCollection(element);\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: loopCharacteristics,\n properties: {\n 'camunda:collection': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'collection',\n label: translate('Collection'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ElementVariable(props) {\n const {\n element\n } = props;\n const debounce = useService('debounceInput');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const loopCharacteristics = getLoopCharacteristics(element);\n const getValue = () => {\n return getElementVariable(element);\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: loopCharacteristics,\n properties: {\n 'camunda:elementVariable': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'elementVariable',\n label: translate('Element variable'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction MultiInstanceAsynchronousBefore(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const loopCharacteristics = getLoopCharacteristics(element);\n const getValue = () => {\n return isAsyncBefore(loopCharacteristics);\n };\n const setValue = value => {\n // overwrite the legacy `async` property, we will use the more explicit `asyncBefore`\n const properties = {\n 'camunda:asyncBefore': value,\n 'camunda:async': undefined\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: loopCharacteristics,\n properties\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'multiInstanceAsynchronousBefore',\n label: translate('Asynchronous before'),\n getValue,\n setValue\n });\n}\nfunction MultiInstanceAsynchronousAfter(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const loopCharacteristics = getLoopCharacteristics(element);\n const getValue = () => {\n return isAsyncAfter(loopCharacteristics);\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: loopCharacteristics,\n properties: {\n 'camunda:asyncAfter': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'multiInstanceAsynchronousAfter',\n label: translate('Asynchronous after'),\n getValue,\n setValue\n });\n}\nfunction MultiInstanceExclusive(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate');\n const loopCharacteristics = getLoopCharacteristics(element);\n const getValue = () => {\n return isExclusive(loopCharacteristics);\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: loopCharacteristics,\n properties: {\n 'camunda:exclusive': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'multiInstanceExclusive',\n label: translate('Exclusive'),\n getValue,\n setValue\n });\n}\nfunction MultiInstanceRetryTimeCycle(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory'),\n commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const loopCharacteristics = getLoopCharacteristics(element);\n const getValue = () => {\n const failedJobRetryTimeCycle = getExtensionElementsList(loopCharacteristics, 'camunda:FailedJobRetryTimeCycle')[0];\n return failedJobRetryTimeCycle && failedJobRetryTimeCycle.body;\n };\n const setValue = value => {\n const commands = [];\n let extensionElements = loopCharacteristics.get('extensionElements');\n\n // (1) ensure extension elements\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {\n values: []\n }, loopCharacteristics, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: loopCharacteristics,\n properties: {\n extensionElements\n }\n }\n });\n }\n\n // (2) ensure failedJobRetryTimeCycle\n let failedJobRetryTimeCycle = getExtensionElementsList(loopCharacteristics, 'camunda:FailedJobRetryTimeCycle')[0];\n if (!failedJobRetryTimeCycle) {\n failedJobRetryTimeCycle = createElement('camunda:FailedJobRetryTimeCycle', {}, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element: loopCharacteristics,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), failedJobRetryTimeCycle]\n }\n }\n });\n }\n\n // (3) update failedJobRetryTimeCycle value\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: failedJobRetryTimeCycle,\n properties: {\n body: value\n }\n }\n });\n\n // (4) commit all updates\n commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'multiInstanceRetryTimeCycle',\n label: translate('Retry time cycle'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ////////////////////////////\n\n// generic ///////////////////////////\n\n/**\n * isMultiInstanceSupported - check whether given element supports camunda specific props\n * for multiInstance (ref. ).\n *\n * @param {djs.model.Base} element\n * @return {boolean}\n */\nfunction isMultiInstanceSupported(element) {\n const loopCharacteristics = getLoopCharacteristics(element);\n return !!loopCharacteristics && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(loopCharacteristics, 'camunda:Collectable');\n}\n\n/**\n * getProperty - get a property value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n * @param {string} propertyName\n *\n * @return {any} the property value\n */\nfunction getProperty(element, propertyName) {\n var loopCharacteristics = getLoopCharacteristics(element);\n return loopCharacteristics && loopCharacteristics.get(propertyName);\n}\n\n/**\n * getLoopCharacteristics - get loopCharacteristics of a given element.\n *\n * @param {djs.model.Base} element\n * @return {ModdleElement | undefined}\n */\nfunction getLoopCharacteristics(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return bo.loopCharacteristics;\n}\n\n// collection\n\n/**\n * getCollection - get the 'camunda:collection' attribute value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {string} the 'camunda:collection' value\n */\nfunction getCollection(element) {\n return getProperty(element, 'camunda:collection');\n}\n\n// elementVariable\n\n/**\n * getElementVariable - get the 'camunda:elementVariable' attribute value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {string} the 'camunda:elementVariable' value\n */\nfunction getElementVariable(element) {\n return getProperty(element, 'camunda:elementVariable');\n}\n\n// asyncBefore asyncAfter\n\n/**\n * Returns true if the attribute 'camunda:asyncBefore' is set\n * to true.\n *\n * @param {ModdleElement} bo\n *\n * @return {boolean} a boolean value\n */\nfunction isAsyncBefore(bo) {\n return !!(bo.get('camunda:asyncBefore') || bo.get('camunda:async'));\n}\n\n/**\n * Returns true if the attribute 'camunda:asyncAfter' is set\n * to true.\n *\n * @param {ModdleElement} bo\n *\n * @return {boolean} a boolean value\n */\nfunction isAsyncAfter(bo) {\n return !!bo.get('camunda:asyncAfter');\n}\n\n/**\n * Returns true if the attribute 'camunda:exclusive' is set\n * to true.\n *\n * @param {ModdleElement} bo\n *\n * @return {boolean} a boolean value\n */\nfunction isExclusive(bo) {\n return !!bo.get('camunda:exclusive');\n}\n\n/**\n * isAsync - returns true if the attribute 'camunda:asyncAfter' or 'camunda:asyncBefore'\n * is set to true.\n *\n * @param {ModdleElement} bo\n * @return {boolean}\n */\nfunction isAsync(bo) {\n return isAsyncAfter(bo) || isAsyncBefore(bo);\n}\n\n// Checkbox\n\nfunction checkboxIsEditedInverted(node) {\n return node && !node.checked;\n}\n\n/**\n * Cf. https://docs.camunda.org/manual/7.15/reference/bpmn20/subprocesses/call-activity/#passing-variables\n */\nfunction OutMappingPropagationProps(props) {\n const {\n element\n } = props;\n if (!areOutMappingsSupported$1(element)) {\n return [];\n }\n const entries = [{\n id: 'outMapping-propagation',\n component: PropagateAll,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }];\n if (isPropagateAll(element)) {\n entries.push({\n id: 'outMapping-propagation-local',\n component: Local,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n });\n }\n return entries;\n}\nfunction PropagateAll(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n const getValue = () => {\n return isPropagateAll(element);\n };\n const setValue = value => {\n if (value) {\n addOutMapping();\n } else {\n removeOutMapping();\n }\n };\n function addOutMapping() {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const mapping = createElement('camunda:Out', {\n variables: 'all'\n }, null, bpmnFactory);\n addExtensionElements(element, businessObject, mapping, bpmnFactory, commandStack);\n }\n function removeOutMapping() {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const mappings = findRelevantOutMappings(element);\n removeExtensionElements(element, businessObject, mappings, commandStack);\n }\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n id: 'outMapping-propagation',\n label: translate('Propagate all variables'),\n getValue,\n setValue\n });\n}\nfunction Local(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const mapping = findRelevantOutMappings(element)[0];\n const getValue = () => {\n return mapping.get('camunda:local');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: mapping,\n properties: {\n local: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'outMapping-propagation-local',\n label: translate('Local'),\n getValue,\n setValue\n });\n}\n\n// helper //////////////////////////\n\nfunction areOutMappingsSupported$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity');\n}\nfunction getOutMappings$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return getExtensionElementsList(businessObject, 'camunda:Out');\n}\nfunction findRelevantOutMappings(element) {\n const inMappings = getOutMappings$1(element);\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.filter)(inMappings, function (mapping) {\n const variables = mapping.get('variables');\n return variables && variables === 'all';\n });\n}\nfunction isPropagateAll(element) {\n const mappings = findRelevantOutMappings(element);\n return !!mappings.length;\n}\n\n/**\n * Cf. https://docs.camunda.org/manual/latest/reference/bpmn20/custom-extensions/extension-elements/#out\n */\nfunction OutMappingProps({\n element,\n injector\n}) {\n if (!areOutMappingsSupported(element)) {\n return null;\n }\n const variableMappings = getOutMappings(element) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = variableMappings.map((mapping, index) => {\n const id = element.id + '-outMapping-' + index;\n return {\n id,\n label: mapping.get('target') || '',\n entries: InOutMapping({\n idPrefix: id,\n element,\n mapping\n }),\n autoFocusEntry: id + '-target',\n remove: removeFactory$1({\n commandStack,\n element,\n mapping\n })\n };\n });\n return {\n items,\n add: addFactory$1({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction removeFactory$1({\n commandStack,\n element,\n mapping\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n removeExtensionElements(element, businessObject, mapping, commandStack);\n };\n}\nfunction addFactory$1({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const newMapping = createElement('camunda:Out', {\n source: '' // source is the default type\n }, null, bpmnFactory);\n addExtensionElements(element, businessObject, newMapping, bpmnFactory, commandStack);\n };\n}\n\n// helper ///////////////\n\nfunction getOutMappings(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const mappings = getExtensionElementsList(businessObject, 'camunda:Out');\n\n // only retrieve relevant mappings here, others are handled in other groups\n // mapping.businessKey => camunda-platform/CallAvtivityProps\n // mapping.variables => camunda-platform/OutMappingPropagationProps\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.filter)(mappings, function (mapping) {\n return !mapping.businessKey && !(mapping.variables && mapping.variables === 'all');\n });\n}\nfunction areOutMappingsSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity');\n}\n\nfunction OutputProps({\n element,\n injector\n}) {\n if (!areOutputParametersSupported(element)) {\n return null;\n }\n const outputParameters = getOutputParameters(element) || [];\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const items = outputParameters.map((parameter, index) => {\n const id = element.id + '-outputParameter-' + index;\n return {\n id,\n label: parameter.get('name') || '',\n entries: InputOutputParameter({\n idPrefix: id,\n element,\n parameter\n }),\n autoFocusEntry: id + '-name',\n remove: removeFactory({\n commandStack,\n element,\n parameter\n })\n };\n });\n return {\n items,\n add: addFactory({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction removeFactory({\n commandStack,\n element,\n parameter\n}) {\n return function (event) {\n event.stopPropagation();\n const inputOutput = getInputOutput(element);\n if (!inputOutput) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOutput,\n properties: {\n outputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(inputOutput.get('outputParameters'), parameter)\n }\n });\n };\n}\nfunction addFactory({\n bpmnFactory,\n commandStack,\n element\n}) {\n return function (event) {\n event.stopPropagation();\n commandStack.execute('properties-panel.multi-command-executor', AddParameterCmd(element, 'camunda:OutputParameter', bpmnFactory));\n };\n}\n\nfunction TimerProps(props) {\n const {\n element,\n listener,\n idPrefix\n } = props;\n let {\n timerEventDefinition\n } = props;\n if (!timerEventDefinition) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n timerEventDefinition = getTimerEventDefinition(businessObject);\n }\n const timerEventDefinitionType = getTimerDefinitionType(timerEventDefinition);\n\n // (1) Only show for supported elements\n if (!isTimerSupported(element) && !isTimerSupportedOnListener(listener)) {\n return [];\n }\n\n // (2) Provide entries, have a value only if selection was made\n const entries = [];\n entries.push({\n id: getId(idPrefix, 'timerEventDefinitionType'),\n component: TimerEventDefinitionType,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited,\n timerEventDefinition,\n timerEventDefinitionType\n });\n if (timerEventDefinitionType) {\n entries.push({\n id: getId(idPrefix, 'timerEventDefinitionValue'),\n component: TimerEventDefinitionValue,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n timerEventDefinition,\n timerEventDefinitionType\n });\n }\n return entries;\n}\n\n/**\n * TimerEventDefinitionType - Generic select entry allowing to select a specific\n * timerEventDefintionType. To be used together with timerEventDefinitionValue.\n *\n * @param {type} props\n * @return {SelectEntry}\n */\nfunction TimerEventDefinitionType(props) {\n const {\n element,\n timerEventDefinition,\n timerEventDefinitionType\n } = props;\n const commandStack = useService('commandStack'),\n bpmnFactory = useService('bpmnFactory'),\n translate = useService('translate');\n const getValue = () => {\n return timerEventDefinitionType || '';\n };\n const setValue = value => {\n // (1) Check if value is different to current type\n if (value === timerEventDefinitionType) {\n return;\n }\n\n // (2) Create empty formalExpression element\n const formalExpression = bpmnFactory.create('bpmn:FormalExpression', {\n body: undefined\n });\n formalExpression.$parent = timerEventDefinition;\n\n // (3) Set the value for selected timerEventDefinitionType\n const newProps = {\n timeDuration: undefined,\n timeDate: undefined,\n timeCycle: undefined\n };\n if (value !== '') {\n newProps[value] = formalExpression;\n }\n\n // (4) Execute businessObject update\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: timerEventDefinition,\n properties: newProps\n });\n };\n const getOptions = element => {\n return [{\n value: '',\n label: translate('')\n }, {\n value: 'timeDate',\n label: translate('Date')\n }, {\n value: 'timeDuration',\n label: translate('Duration')\n }, {\n value: 'timeCycle',\n label: translate('Cycle')\n }];\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry)({\n element,\n id: 'timerEventDefinitionType',\n label: translate('Type'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n/**\n * TimerEventDefinitionValue - Generic textField entry allowing to specify the\n * timerEventDefintionValue based on the set timerEventDefintionType. To be used\n * together with timerEventDefinitionType.\n *\n * @param {type} props\n * @return {TextFieldEntry}\n */\nfunction TimerEventDefinitionValue(props) {\n const {\n element,\n timerEventDefinition,\n timerEventDefinitionType\n } = props;\n const commandStack = useService('commandStack'),\n translate = useService('translate'),\n debounce = useService('debounceInput');\n const timerEventFormalExpression = timerEventDefinition.get(timerEventDefinitionType);\n const getValue = () => {\n return timerEventFormalExpression && timerEventFormalExpression.get('body');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: timerEventFormalExpression,\n properties: {\n body: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'timerEventDefinitionValue',\n label: translate('Value'),\n getValue,\n setValue,\n debounce,\n tooltip: getTimerEventDefinitionValueDescription(timerEventDefinitionType, translate)\n });\n}\n\n// helper //////////////////////////\n\nfunction getTimerEventDefinitionValueDescription(timerDefinitionType, translate) {\n switch (timerDefinitionType) {\n case 'timeDate':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A specific point in time defined as ISO 8601 combined date and time representation.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"2019-10-01T12:00:00Z\"\n }), \" - \", translate('UTC time')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"2019-10-02T08:09:40+02:00\"\n }), \" - \", translate('UTC plus 2 hours zone offset')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.org/manual/latest/reference/bpmn20/events/timer-events/#time-date\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Documentation: Timer events')\n })]\n });\n case 'timeCycle':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A cycle defined as ISO 8601 repeating intervals format, or a cron expression.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"R5/PT10S\"\n }), \" - \", translate('every 10 seconds, up to 5 times')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"R/P1D\"\n }), \" - \", translate('every day, infinitely')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"0 0 9-17 * * MON-FRI\"\n }), \" - \", translate('every hour on the hour from 9-5 p.m. UTC Monday-Friday')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.org/manual/latest/reference/bpmn20/events/timer-events/#time-cycle\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Documentation: Timer events')\n })]\n });\n case 'timeDuration':\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('A time duration defined as ISO 8601 durations format.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"ul\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"PT15S\"\n }), \" - \", translate('15 seconds')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"PT1H30M\"\n }), \" - \", translate('1 hour and 30 minutes')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"li\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"P14D\"\n }), \" - \", translate('14 days')]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.org/manual/latest/reference/bpmn20/events/timer-events/#time-duration\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Documentation: Timer events')\n })]\n });\n }\n}\nfunction isTimerSupportedOnListener(listener) {\n return listener && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(listener, 'camunda:TaskListener') && getTimerEventDefinition(listener);\n}\nfunction getId(idPrefix, id) {\n return idPrefix ? idPrefix + id : id;\n}\n\nconst LISTENER_ALLOWED_TYPES = ['bpmn:Activity', 'bpmn:Event', 'bpmn:Gateway', 'bpmn:SequenceFlow', 'bpmn:Process', 'bpmn:Participant'];\nconst SCRIPT_PROPS = {\n 'script': undefined,\n 'resource': undefined,\n 'scriptFormat': undefined\n};\nconst CLASS_PROPS = {\n 'class': undefined\n};\nconst EXPRESSION_PROPS = {\n 'expression': undefined\n};\nconst DELEGATE_EXPRESSION_PROPS = {\n 'delegateExpression': undefined\n};\nconst DEFAULT_PROPS = {\n ...SCRIPT_PROPS,\n ...CLASS_PROPS,\n ...EXPRESSION_PROPS,\n ...DELEGATE_EXPRESSION_PROPS\n};\nconst DEFAULT_EVENT_PROPS = {\n 'eventDefinitions': undefined,\n 'event': undefined\n};\nconst IMPLEMENTATION_TYPE_TO_LABEL = {\n class: 'Java class',\n expression: 'Expression',\n delegateExpression: 'Delegate expression',\n script: 'Script'\n};\nconst EVENT_TO_LABEL = {\n start: 'Start',\n end: 'End',\n take: 'Take',\n create: 'Create',\n assignment: 'Assignment',\n complete: 'Complete',\n delete: 'Delete',\n update: 'Update',\n timeout: 'Timeout'\n};\n\n/**\n * Cf. https://docs.camunda.org/manual/latest/user-guide/process-engine/delegation-code/#execution-listener\n */\nfunction ExecutionListenerProps({\n element,\n injector\n}) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, LISTENER_ALLOWED_TYPES)) {\n return;\n }\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && !element.businessObject.processRef) {\n return;\n }\n const businessObject = getListenersContainer(element);\n const listeners = getExtensionElementsList(businessObject, 'camunda:ExecutionListener');\n return {\n items: listeners.map((listener, index) => {\n const id = `${element.id}-executionListener-${index}`;\n\n // @TODO(barmac): Find a way to pass translate for internationalized label.\n return {\n id,\n label: getListenerLabel(listener),\n entries: ExecutionListener({\n idPrefix: id,\n element,\n listener\n }),\n autoFocusEntry: id + '-javaClass',\n remove: removeListenerFactory({\n element,\n listener,\n commandStack\n })\n };\n }),\n add: addExecutionListenerFactory({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction ExecutionListener(props) {\n const {\n idPrefix,\n element,\n listener\n } = props;\n return [{\n id: `${idPrefix}-eventType`,\n component: EventType,\n listener\n }, {\n id: `${idPrefix}-listenerType`,\n component: ListenerType,\n listener\n }, ...ImplementationDetails({\n idPrefix,\n element,\n listener\n }), {\n id: `${idPrefix}-fields`,\n component: Fields,\n listener\n }];\n}\nfunction TaskListenerProps({\n element,\n injector\n}) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask')) {\n return;\n }\n const bpmnFactory = injector.get('bpmnFactory'),\n commandStack = injector.get('commandStack');\n const businessObject = getListenersContainer(element);\n const listeners = getExtensionElementsList(businessObject, 'camunda:TaskListener');\n return {\n items: listeners.map((listener, index) => {\n const id = `${element.id}-taskListener-${index}`;\n\n // @TODO(barmac): Find a way to pass translate for internationalized label.\n return {\n id,\n label: getListenerLabel(listener),\n entries: TaskListener({\n idPrefix: id,\n element,\n listener\n }),\n autoFocusEntry: id + '-listenerId',\n remove: removeListenerFactory({\n element,\n listener,\n commandStack\n })\n };\n }),\n add: addTaskListenerFactory({\n bpmnFactory,\n commandStack,\n element\n })\n };\n}\nfunction TaskListener(props) {\n const {\n idPrefix,\n element,\n listener\n } = props;\n return [{\n id: `${idPrefix}-eventType`,\n component: EventType,\n listener\n }, {\n id: `${idPrefix}-listenerId`,\n component: ListenerId,\n listener\n }, {\n id: `${idPrefix}-listenerType`,\n component: ListenerType,\n listener\n }, ...ImplementationDetails({\n idPrefix,\n element,\n listener\n }), ...EventTypeDetails({\n idPrefix,\n element,\n listener\n }), {\n id: `${idPrefix}-fields`,\n component: Fields,\n listener\n }];\n}\nfunction removeListenerFactory({\n element,\n listener,\n commandStack\n}) {\n return function removeListener(event) {\n event.stopPropagation();\n removeExtensionElements(element, getListenersContainer(element), listener, commandStack);\n };\n}\nfunction EventType({\n id,\n element,\n listener\n}) {\n const translate = useService('translate');\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n function getValue() {\n return listener.get('event');\n }\n function setValue(value) {\n const properties = getDefaultEventTypeProperties(value, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: listener,\n properties\n });\n }\n function getOptions() {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(listener, 'camunda:TaskListener')) {\n return [{\n value: 'create',\n label: translate('create')\n }, {\n value: 'assignment',\n label: translate('assignment')\n }, {\n value: 'complete',\n label: translate('complete')\n }, {\n value: 'delete',\n label: translate('delete')\n }, {\n value: 'update',\n label: translate('update')\n }, {\n value: 'timeout',\n label: translate('timeout')\n }];\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow')) {\n return [{\n value: 'take',\n label: translate('take')\n }];\n }\n return [{\n value: 'start',\n label: translate('start')\n }, {\n value: 'end',\n label: translate('end')\n }];\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n id: id,\n label: translate('Event type'),\n getValue: getValue,\n setValue: setValue,\n getOptions: getOptions\n });\n}\nfunction ListenerId({\n id,\n element,\n listener\n}) {\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const commandStack = useService('commandStack');\n let options = {\n element,\n id: id,\n label: translate('Listener ID'),\n debounce,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited,\n setValue: value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: listener,\n properties: {\n 'camunda:id': value\n }\n });\n },\n getValue: () => {\n return listener.get('camunda:id');\n }\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)(options);\n}\nfunction ListenerType({\n id,\n element,\n listener\n}) {\n const modeling = useService('modeling');\n const translate = useService('translate');\n const bpmnFactory = useService('bpmnFactory');\n function getValue() {\n return getListenerType(listener);\n }\n function setValue(value) {\n const properties = getDefaultImplementationProperties(value, bpmnFactory);\n modeling.updateModdleProperties(element, listener, properties);\n }\n function getOptions() {\n return getListenerTypeOptions(translate);\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n id: id,\n label: translate('Listener type'),\n getValue: getValue,\n setValue: setValue,\n getOptions: getOptions\n });\n}\nfunction ImplementationDetails(props) {\n const {\n idPrefix,\n element,\n listener\n } = props;\n const type = getListenerType(listener);\n if (type === 'class') {\n return [{\n id: getPrefixedId(idPrefix, 'javaClass'),\n component: JavaClass,\n businessObject: listener\n }];\n } else if (type === 'expression') {\n return [{\n id: getPrefixedId(idPrefix, 'expression'),\n component: Expression,\n businessObject: listener\n }];\n } else if (type === 'delegateExpression') {\n return [{\n id: getPrefixedId(idPrefix, 'delegateExpression'),\n component: DelegateExpression,\n businessObject: listener\n }];\n } else if (type === 'script') {\n return ScriptProps({\n element,\n script: listener.get('script'),\n prefix: idPrefix\n });\n }\n\n // should never happen\n return [];\n}\nfunction EventTypeDetails(props) {\n const {\n idPrefix,\n element,\n listener\n } = props;\n const type = listener.get('event');\n if (type === 'timeout') {\n return TimerProps({\n element,\n listener,\n timerEventDefinition: getTimerEventDefinition$1(listener),\n idPrefix: idPrefix\n });\n }\n return [];\n}\nfunction Field(props) {\n const {\n element,\n id: idPrefix,\n index,\n item: field,\n open\n } = props;\n const fieldId = `${idPrefix}-field-${index}`;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CollapsibleEntry, {\n id: fieldId,\n element: element,\n entries: FieldInjection({\n element,\n field,\n idPrefix: fieldId\n }),\n label: field.get('name') || '',\n open: open\n });\n}\nfunction Fields(props) {\n const {\n id,\n element,\n listener\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const fields = listener.get('fields');\n function addField() {\n const field = createElement('camunda:Field', {}, listener, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: listener,\n properties: {\n fields: [...listener.get('fields'), field]\n }\n });\n }\n function removeField(field) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: listener,\n properties: {\n fields: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(listener.get('fields'), field)\n }\n });\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListEntry, {\n id: id,\n element: element,\n label: translate('Field injection'),\n items: fields,\n component: Field,\n onAdd: addField,\n onRemove: removeField,\n autoFocusEntry: `[data-entry-id=\"${id}-field-${fields.length - 1}\"] input`\n });\n}\nfunction addListenerFactory({\n bpmnFactory,\n commandStack,\n element,\n listenerGroup\n}) {\n return function (event) {\n event.stopPropagation();\n const listener = bpmnFactory.create(listenerGroup, {\n event: getDefaultEvent(element, listenerGroup),\n class: ''\n });\n const businessObject = getListenersContainer(element);\n addExtensionElements(element, businessObject, listener, bpmnFactory, commandStack);\n };\n}\nfunction addTaskListenerFactory(props) {\n return addListenerFactory({\n ...props,\n listenerGroup: 'camunda:TaskListener'\n });\n}\nfunction addExecutionListenerFactory(props) {\n return addListenerFactory({\n ...props,\n listenerGroup: 'camunda:ExecutionListener'\n });\n}\n\n// helper\n\n/**\n * Get a readable label for a listener.\n *\n * @param {ModdleElement} listener\n * @param {string => string} [translate]\n */\nfunction getListenerLabel(listener, translate = value => value) {\n const event = listener.get('event');\n const implementationType = getListenerType(listener);\n return `${translate(EVENT_TO_LABEL[event])}: ${translate(IMPLEMENTATION_TYPE_TO_LABEL[implementationType])}`;\n}\nfunction getListenerTypeOptions(translate) {\n return Object.entries(IMPLEMENTATION_TYPE_TO_LABEL).map(([value, label]) => ({\n value,\n label: translate(label)\n }));\n}\nfunction getListenerType(listener) {\n return getImplementationType(listener);\n}\nfunction getDefaultEvent(element, listenerGroup) {\n if (listenerGroup === 'camunda:TaskListener') return 'create';\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow') ? 'take' : 'start';\n}\nfunction getDefaultImplementationProperties(type, bpmnFactory) {\n switch (type) {\n case 'class':\n return {\n ...DEFAULT_PROPS,\n 'class': ''\n };\n case 'expression':\n return {\n ...DEFAULT_PROPS,\n 'expression': ''\n };\n case 'delegateExpression':\n return {\n ...DEFAULT_PROPS,\n 'delegateExpression': ''\n };\n case 'script':\n return {\n ...DEFAULT_PROPS,\n 'script': bpmnFactory.create('camunda:Script')\n };\n }\n}\nfunction getDefaultEventTypeProperties(type, bpmnFactory) {\n switch (type) {\n case 'timeout':\n return {\n ...DEFAULT_EVENT_PROPS,\n eventDefinitions: [bpmnFactory.create('bpmn:TimerEventDefinition')],\n event: type\n };\n default:\n return {\n ...DEFAULT_EVENT_PROPS,\n event: type\n };\n }\n}\nfunction getPrefixedId(prefix, id) {\n return `${prefix}-${id}`;\n}\nfunction getListenersContainer(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return businessObject.get('processRef') || businessObject;\n}\n\nfunction ProcessVariablesEntry(props) {\n const {\n element\n } = props;\n const [variables, setVariables] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(async () => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const rootElement = getRootElement(businessObject);\n const scope = getScope(element);\n const rawVariables = await (0,_bpmn_io_extract_process_variables__WEBPACK_IMPORTED_MODULE_8__.getVariablesForScope)(scope, rootElement);\n const withName = populateElementNames(sortByName(rawVariables));\n setVariables(withName);\n }, [element]);\n if (!variables.length) {\n return null;\n }\n const byScope = groupByScope(variables);\n const multiScope = isMultiScope(byScope);\n let variableItems = [];\n\n // (2) get variables to display\n if (multiScope) {\n // (2a) multiple scopes, sub scopes first\n // assumption: variables extractor fetches parent variables first\n const reversed = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.map)(reverse((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.keys)(byScope)), scopeKey => byScope[scopeKey]);\n variableItems = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.flatten)(reversed);\n } else {\n // (2b) single scope\n variableItems = variables;\n }\n const items = variableItems.map((variable, index) => {\n const id = element.id + '-variable-' + index;\n return {\n id,\n label: variable.name,\n entries: [...ProcessVariableItem({\n idPrefix: id,\n multiScope,\n variable\n })]\n };\n });\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup, {\n ...props,\n items: items\n });\n}\nfunction ProcessVariablesProps(props) {\n const {\n element\n } = props;\n if (!canHaveProcessVariables(element)) {\n return null;\n }\n return {\n component: ProcessVariablesEntry\n };\n}\nfunction ProcessVariableItem(props) {\n const {\n idPrefix,\n multiScope,\n variable\n } = props;\n let entries = [];\n if (multiScope) {\n entries.push({\n id: idPrefix + '-scope',\n component: Scope,\n idPrefix,\n variable\n });\n }\n entries.push({\n id: idPrefix + '-createdIn',\n component: CreatedIn,\n idPrefix,\n variable\n });\n return entries;\n}\nfunction Scope(props) {\n const {\n idPrefix,\n variable\n } = props;\n const translate = useService('translate');\n const id = idPrefix + '-scope';\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n \"data-entry-id\": id,\n class: \"bio-properties-panel-entry\",\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"b\", {\n style: \"font-weight: bold\",\n class: \"bio-properties-panel-label\",\n children: translate('Scope')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"label\", {\n id: prefixId(id),\n class: \"bio-properties-panel-label\",\n children: variable.scope\n })]\n });\n}\nfunction CreatedIn(props) {\n const {\n idPrefix,\n variable\n } = props;\n const translate = useService('translate');\n const id = idPrefix + '-createdIn';\n const origin = variable.origin.join(', ');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n \"data-entry-id\": id,\n class: \"bio-properties-panel-entry\",\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"b\", {\n style: \"font-weight: bold\",\n class: \"bio-properties-panel-label\",\n children: translate('Created in')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"label\", {\n id: prefixId(id),\n class: \"bio-properties-panel-label\",\n children: origin\n })]\n });\n}\n\n// helper //////////////////////\n\nfunction canHaveProcessVariables(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:Process', 'bpmn:SubProcess']) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && businessObject.get('processRef');\n}\nfunction getRootElement(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(businessObject, 'bpmn:Participant')) {\n return businessObject.processRef;\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(businessObject, 'bpmn:Process')) {\n return businessObject;\n }\n let parent = businessObject;\n while (parent.$parent && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parent, 'bpmn:Process')) {\n parent = parent.$parent;\n }\n return parent;\n}\nfunction getScope(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n return bo.processRef.id;\n }\n return bo.id;\n}\nfunction sortByName(variables) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(variables, function (variable) {\n return variable.name;\n });\n}\nfunction groupByScope(variables) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.groupBy)(variables, 'scope');\n}\nfunction populateElementNames(variables) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.forEach)(variables, function (variable) {\n const names = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.map)(variable.origin, function (element) {\n return element.name || element.id;\n });\n variable.origin = names;\n variable.scope = variable.scope.name || variable.scope.id;\n });\n return variables;\n}\nfunction isMultiScope(scopedVariables) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.keys)(scopedVariables).length > 1;\n}\nfunction reverse(array) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.map)(array, function (a, i) {\n return array[array.length - 1 - i];\n });\n}\nfunction prefixId(id) {\n return `bio-properties-panel-${id}`;\n}\n\nfunction ScriptTaskProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ScriptTask')) {\n return [];\n }\n const entries = [...ScriptProps({\n element\n })];\n entries.push({\n id: 'scriptResultVariable',\n component: ResultVariable,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n });\n return entries;\n}\nfunction ResultVariable(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:resultVariable');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:resultVariable': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'scriptResultVariable',\n label: translate('Result variable'),\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction TasklistProps(props) {\n const {\n element\n } = props;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const isEdited = node => {\n return node && !node.checked;\n };\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') && !((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && businessObject.get('processRef'))) {\n return [];\n }\n return [{\n id: 'isStartableInTasklist',\n component: Startable,\n isEdited\n }];\n}\nfunction Startable(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const process = getProcess$1(element);\n const getValue = () => {\n return process.get('camunda:isStartableInTasklist');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n 'camunda:isStartableInTasklist': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'isStartableInTasklist',\n label: translate('Startable'),\n getValue,\n setValue\n });\n}\n\n// helper //////////////////\n\nfunction getProcess$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element) : (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('processRef');\n}\n\n/**\n * Cf. https://docs.camunda.org/manual/latest/reference/bpmn20/tasks/user-task/\n */\nfunction UserAssignmentProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'camunda:Assignable')) {\n return [];\n }\n return [{\n id: 'assignee',\n component: Assignee,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'candidateGroups',\n component: CandidateGroups,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'candidateUsers',\n component: CandidateUsers,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'dueDate',\n component: DueDate,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'followUpDate',\n component: FollowUpDate,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'priority',\n component: Priority,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction Assignee(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:assignee');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:assignee': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'assignee',\n label: translate('Assignee'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction CandidateUsers(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:candidateUsers');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:candidateUsers': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'candidateUsers',\n label: translate('Candidate users'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction CandidateGroups(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:candidateGroups');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:candidateGroups': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'candidateGroups',\n label: translate('Candidate groups'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction DueDate(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:dueDate');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:dueDate': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'dueDate',\n label: translate('Due date'),\n description: translate('The due date as an EL expression (e.g. ${someDate}) or an ISO date (e.g. 2015-06-26T09:54:00).'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction FollowUpDate(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:followUpDate');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:followUpDate': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'followUpDate',\n label: translate('Follow up date'),\n description: translate('The follow up date as an EL expression (e.g. ${someDate}) or an ' + 'ISO date (e.g. 2015-06-26T09:54:00).'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction Priority(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const getValue = () => {\n return businessObject.get('camunda:priority');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n 'camunda:priority': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'priority',\n label: translate('Priority'),\n getValue,\n setValue,\n debounce\n });\n}\n\nfunction VersionTagProps(props) {\n const {\n element\n } = props;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') && !((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && businessObject.get('processRef'))) {\n return [];\n }\n return [{\n id: 'versionTag',\n component: VersionTag,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction VersionTag(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const process = getProcess(element);\n const getValue = () => {\n return process.get('camunda:versionTag') || '';\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n 'camunda:versionTag': value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'versionTag',\n label: translate('Version tag'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper //////////////////\n\nfunction getProcess(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element) : (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get('processRef');\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction IdProps() {\n return [{\n id: 'id',\n component: Id,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction Id(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const debounce = useService('debounceInput');\n const translate = useService('translate');\n const setValue = (value, error) => {\n if (error) {\n return;\n }\n modeling.updateProperties(element, {\n id: value\n });\n };\n const getValue = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(element => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).id;\n }, [element]);\n const validate = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(value => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return isIdValid(businessObject, value, translate);\n }, [element, translate]);\n const description = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') ? translate('This maps to the process definition key.') : null;\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'id',\n label: translate((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') ? 'Participant ID' : 'ID'),\n getValue,\n setValue,\n debounce,\n validate,\n description\n });\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction ProcessProps(props) {\n const {\n element\n } = props;\n if (!hasProcessRef(element)) {\n return [];\n }\n return [{\n id: 'processId',\n component: ProcessId,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction ProcessId(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const process = element.businessObject.get('processRef');\n const getValue = () => {\n return process.get('id');\n };\n const setValue = (value, error) => {\n if (error) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n id: value\n }\n });\n };\n const validate = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(value => {\n return isIdValid(process, value, translate);\n }, [process, translate]);\n const description = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') ? translate('This maps to the process definition key.') : null;\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'processId',\n label: translate('Process ID'),\n getValue,\n setValue,\n debounce,\n validate,\n description\n });\n}\n\n// helper ////////////////\n\nfunction hasProcessRef(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && element.businessObject.get('processRef');\n}\n\nconst LOW_PRIORITY = 500;\nconst CAMUNDA_PLATFORM_GROUPS = [HistoryCleanupGroup, TasklistGroup, CandidateStarterGroup, ImplementationGroup, ExternalTaskGroup, ProcessVariablesGroup, ErrorsGroup, UserAssignmentGroup, FormGroup, FormDataGroup, TaskListenerGroup, StartInitiatorGroup, ScriptGroup, ConditionGroup, CallActivityGroup, AsynchronousContinuationsGroup, JobExecutionGroup, InMappingPropagationGroup, InMappingGroup, InputGroup, ConnectorInputGroup, OutMappingPropagationGroup, OutMappingGroup, OutputGroup, ConnectorOutputGroup, ExecutionListenerGroup, ExtensionPropertiesGroup, FieldInjectionGroup, BusinessKeyGroup];\n\n/**\n * Provides `camunda` namespace properties.\n *\n * @example\n * ```javascript\n * import BpmnModeler from 'bpmn-js/lib/Modeler';\n * import {\n * BpmnPropertiesPanelModule,\n * BpmnPropertiesProviderModule,\n * CamundaPlatformPropertiesProviderModule\n * } from 'bpmn-js-properties-panel';\n *\n * const modeler = new BpmnModeler({\n * container: '#canvas',\n * propertiesPanel: {\n * parent: '#properties'\n * },\n * additionalModules: [\n * BpmnPropertiesPanelModule,\n * BpmnPropertiesProviderModule,\n * CamundaPlatformPropertiesProviderModule\n * ]\n * });\n * ```\n */\nclass CamundaPlatformPropertiesProvider {\n constructor(propertiesPanel, injector) {\n propertiesPanel.registerProvider(LOW_PRIORITY, this);\n this._injector = injector;\n }\n getGroups(element) {\n return groups => {\n // (1) add Camunda Platform specific groups\n groups = groups.concat(this._getGroups(element));\n\n // (2) update existing groups with Camunda Platform specific properties\n updateGeneralGroup(groups, element);\n updateErrorGroup(groups, element);\n updateEscalationGroup(groups, element);\n updateMultiInstanceGroup(groups, element);\n updateTimerGroup(groups, element);\n\n // (3) move groups given specific priorities\n moveImplementationGroup(groups);\n return groups;\n };\n }\n _getGroups(element) {\n const groups = CAMUNDA_PLATFORM_GROUPS.map(createGroup => createGroup(element, this._injector));\n\n // contract: if a group returns null, it should not be displayed at all\n return groups.filter(group => group !== null);\n }\n}\nCamundaPlatformPropertiesProvider.$inject = ['propertiesPanel', 'injector'];\n\n/**\n * This ensures the group always locates after \n */\nfunction moveImplementationGroup(groups) {\n const documentationGroupIdx = findGroupIndex(groups, 'documentation');\n if (documentationGroupIdx < 0) {\n return;\n }\n return moveGroup(groups, 'CamundaPlatform__Implementation', documentationGroupIdx + 1);\n}\nfunction updateGeneralGroup(groups, element) {\n const generalGroup = findGroup(groups, 'general');\n if (!generalGroup) {\n return;\n }\n const {\n entries\n } = generalGroup;\n\n // (1) replace id with camunda id\n const idIndex = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.findIndex)(entries, entry => entry.id === 'id');\n entries.splice(idIndex, 1, ...IdProps());\n\n // (2) replace processId with camunda processId (if existing)\n const processIdIndex = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.findIndex)(entries, entry => entry.id === 'processId');\n if (processIdIndex && processIdIndex >= 0) {\n entries.splice(processIdIndex, 1, ...ProcessProps({\n element\n }));\n }\n\n // (3) add version tag before executable (if existing)\n const executableEntry = (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.findIndex)(entries, entry => entry.id === 'isExecutable');\n const insertIndex = executableEntry >= 0 ? executableEntry : entries.length;\n entries.splice(insertIndex, 0, ...VersionTagProps({\n element\n }));\n}\nfunction updateErrorGroup(groups, element) {\n const errorGroup = findGroup(groups, 'error');\n if (!errorGroup) {\n return;\n }\n const {\n entries\n } = errorGroup;\n ErrorProps({\n element,\n entries\n });\n}\nfunction updateMultiInstanceGroup(groups, element) {\n const multiInstanceGroup = findGroup(groups, 'multiInstance');\n if (!multiInstanceGroup) {\n return;\n }\n const {\n entries\n } = multiInstanceGroup;\n MultiInstanceProps({\n element,\n entries\n });\n}\nfunction updateEscalationGroup(groups, element) {\n const escalationGroup = findGroup(groups, 'escalation');\n if (!escalationGroup) {\n return;\n }\n const {\n entries\n } = escalationGroup;\n EscalationProps({\n element,\n entries\n });\n}\nfunction updateTimerGroup(groups, element) {\n const timerEventGroup = findGroup(groups, 'timer');\n if (!timerEventGroup) {\n return;\n }\n timerEventGroup.entries = [...TimerProps({\n element\n })];\n}\nfunction ImplementationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Implementation'),\n id: 'CamundaPlatform__Implementation',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...ImplementationProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction ErrorsGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Errors'),\n id: 'CamundaPlatform__Errors',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...ErrorsProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction UserAssignmentGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('User assignment'),\n id: 'CamundaPlatform__UserAssignment',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...UserAssignmentProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction ScriptGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Script'),\n id: 'CamundaPlatform__Script',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...ScriptTaskProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction CallActivityGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Called element'),\n id: 'CamundaPlatform__CallActivity',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...CallActivityProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction ConditionGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Condition'),\n id: 'CamundaPlatform__Condition',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...ConditionProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction StartInitiatorGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Start initiator'),\n id: 'CamundaPlatform__StartInitiator',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...InitiatorProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction ExternalTaskGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('External task'),\n id: 'CamundaPlatform__ExternalTask',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...ExternalTaskPriorityProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction AsynchronousContinuationsGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Asynchronous continuations'),\n id: 'CamundaPlatform__AsynchronousContinuations',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...AsynchronousContinuationsProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction JobExecutionGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Job execution'),\n id: 'CamundaPlatform__JobExecution',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...JobExecutionProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction CandidateStarterGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Candidate starter'),\n id: 'CamundaPlatform__CandidateStarter',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...CandidateStarterProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction FieldInjectionGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Field injections'),\n id: 'CamundaPlatform__FieldInjection',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...FieldInjectionProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction HistoryCleanupGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('History cleanup'),\n id: 'CamundaPlatform__HistoryCleanup',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...HistoryCleanupProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction TasklistGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Tasklist'),\n id: 'CamundaPlatform__Tasklist',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...TasklistProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction InMappingGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('In mappings'),\n id: 'CamundaPlatform__InMapping',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...InMappingProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction InMappingPropagationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('In mapping propagation'),\n id: 'CamundaPlatform__InMappingPropagation',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...InMappingPropagationProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction OutMappingGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Out mappings'),\n id: 'CamundaPlatform__OutMapping',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...OutMappingProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction OutMappingPropagationGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Out mapping propagation'),\n id: 'CamundaPlatform__OutMappingPropagation',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...OutMappingPropagationProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction ProcessVariablesGroup(element, injector) {\n const translate = injector.get('translate');\n const variableProps = ProcessVariablesProps({\n element,\n injector\n });\n if (!variableProps) {\n return null;\n }\n const group = {\n label: translate('Process variables'),\n id: 'CamundaPlatform__ProcessVariables',\n ...variableProps\n };\n return group;\n}\nfunction FormDataGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Form fields'),\n id: 'CamundaPlatform__FormData',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...FormDataProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction BusinessKeyGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Business key'),\n id: 'CamundaPlatform__BusinessKey',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...BusinessKeyProps$1({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction FormGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Forms'),\n id: 'CamundaPlatform__Form',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.Group,\n entries: [...FormProps({\n element\n })]\n };\n if (group.entries.length) {\n return group;\n }\n return null;\n}\nfunction ExecutionListenerGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Execution listeners'),\n id: 'CamundaPlatform__ExecutionListener',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...ExecutionListenerProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction TaskListenerGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Task listeners'),\n id: 'CamundaPlatform__TaskListener',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...TaskListenerProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction InputGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Inputs'),\n id: 'CamundaPlatform__Input',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...InputProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction OutputGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Outputs'),\n id: 'CamundaPlatform__Output',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...OutputProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction ConnectorInputGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Connector inputs'),\n id: 'CamundaPlatform__ConnectorInput',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...ConnectorInputProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction ConnectorOutputGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Connector outputs'),\n id: 'CamundaPlatform__ConnectorOutput',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...ConnectorOutputProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\nfunction ExtensionPropertiesGroup(element, injector) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Extension properties'),\n id: 'CamundaPlatform__ExtensionProperties',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.ListGroup,\n ...ExtensionPropertiesProps({\n element,\n injector\n })\n };\n if (group.items) {\n return group;\n }\n return null;\n}\n\n// helper /////////////////////\n\nfunction findGroup(groups, id) {\n return groups.find(g => g.id === id);\n}\nfunction findGroupIndex(groups, id) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.findIndex)(groups, g => g.id === id);\n}\nfunction moveGroup(groups, id, position) {\n const groupIndex = findGroupIndex(groups, id);\n if (position < 0 || groupIndex < 0) {\n return;\n }\n return (0,array_move__WEBPACK_IMPORTED_MODULE_7__.arrayMoveMutable)(groups, groupIndex, position);\n}\n\nvar index = {\n __init__: ['camundaPlatformPropertiesProvider'],\n camundaPlatformPropertiesProvider: ['type', CamundaPlatformPropertiesProvider]\n};\n\n/* eslint-disable react-hooks/rules-of-hooks */\nconst TooltipProvider$1 = {\n 'group-assignmentDefinition': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Define who the task is assigned to. One or all of the following attributes can be specified simultaneously. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/user-tasks/#assignments\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('User task documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-condition': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Define a boolean condition expression that defines when this flow is taken. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/exclusive-gateways/#conditions\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Conditions documentation'),\n children: translate('Learn how to define conditions.')\n })]\n });\n },\n 'group-businessRuleImplementation': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Evaluate a business rule, for example a DMN decision. To add a custom implementation, use a job worker. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/business-rule-tasks/#defining-a-task\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Business rule task documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-scriptImplementation': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Implement a script task using an inline FEEL expression. To add a custom implementation, use a job worker. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/script-tasks/#defining-a-script-task\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Script task documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-userTaskImplementation': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Implement a user task managed by Zeebe. To add a custom implementation, use a job worker. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/user-tasks/#define-a-user-task\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('User task documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-form': element => {\n const translate = useService('translate');\n if (isZeebeUserTask$1(element)) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Link a form created with the Camunda Forms editor. To associate a custom form, application, or URL to the user task, specify an external reference. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/guides/utilizing-forms/#link-your-form-to-a-bpmn-diagram\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('User task form documentation'),\n children: translate('Learn more.')\n })]\n });\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Link or embed a form created with the Camunda Forms editor. To associate a custom form, application, or URL to the user task, specify a form key. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/guides/utilizing-forms/#link-your-form-to-a-bpmn-diagram\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('User task form documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-calledDecision': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Define the decision to evaluate and how to map back the evaluation result. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/business-rule-tasks/#defining-a-called-decision\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Send task documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-message': element => {\n const translate = useService('translate');\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ReceiveTask')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Define the name of the message (e.g. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"Money collected\"\n }), translate(') and the '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"correlationKey\"\n }), translate(' expression (e.g. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"= orderId\"\n }), translate(')'), translate(' to subscribe to. '), translate('Learn more how to '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/send-tasks\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Send task documentation'),\n children: translate('send ')\n }), translate('and '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/receive-tasks\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Receive task documentation'),\n children: translate('receive messages. ')\n })]\n });\n }\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Define the name of the message (e.g. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"Money collected\"\n }), translate(') and the '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"correlationKey\"\n }), translate(' expression (e.g. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"= orderId\"\n }), translate(')'), translate(' to subscribe to. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/message-events/#messages\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Message event documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-calledElement': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Define the ID of the process to call (e.g. '), \" \", (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"shipping-process\"\n }), translate(' or '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"= \\\"shipping-\\\" + tenantId\"\n }), \" \", translate('). '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/call-activities/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Call activity documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-taskDefinition': element => {\n const translate = useService('translate');\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ServiceTask')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Specify which job workers handle the task work to execute a service (e.g. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"order-items\"\n }), translate('). '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/service-tasks\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Service task documentation'),\n children: translate('Learn more.')\n })]\n });\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BusinessRuleTask')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Specify which job workers handle the task work to evaluate business rules. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/business-rule-tasks/#job-worker-implementation\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Business rule task documentation'),\n children: translate('Learn more.')\n })]\n });\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ScriptTask')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Specify which job workers handle the task work to execute a script. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/script-tasks/#defining-a-task\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Script task documentation'),\n children: translate('Learn more.')\n })]\n });\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SendTask')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Specify which job workers handle the task work to send a message (e.g. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"kafka\"\n }), translate(' or '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"mail\"\n }), translate('). '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/send-tasks/#defining-a-task\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Send task documentation'),\n children: translate('Learn more.')\n })]\n });\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ThrowEvent')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Specify which job workers handle the event work. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/message-events/#message-throw-events\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Message throw event documentation'),\n children: translate('Learn more.')\n })]\n });\n }\n },\n 'group-multiInstance': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Execute this task for each element of a given collection. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"br\", {}), translate('Define an input collection expression that defines the collection to iterate over (e.g. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"= items\"\n }), translate('). '), translate('To collect the output define the output collection and the output element expressions. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/multi-instance/#defining-the-collection-to-iterate-over\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Multi instance documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-error': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Define an error code (e.g. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"code\", {\n children: \"order-not-found\"\n }), translate('). '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/modeler/bpmn/error-events/#defining-the-error\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Error event documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-inputs': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Create a new local variable in the scope of this task. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/concepts/variables/#input-mappings\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Input mappings documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'group-outputs': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [translate('Customize how result variables are merged into the global scope of the process instance. '), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/components/concepts/variables/#output-mappings\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n title: translate('Output mappings documentation'),\n children: translate('Learn more.')\n })]\n });\n },\n 'taskDefinitionRetries': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"p\", {\n children: [translate('The number of times the engine tries executing this activity if a worker signals a failure. The default is three.'), \" \", ' ', (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.io/docs/next/components/best-practices/development/dealing-with-problems-and-exceptions/#leveraging-retries\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Learn more.')\n })]\n })\n });\n },\n 'bindingType': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"p\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"h1\", {\n children: translate('Latest binding')\n }), translate('Uses the most recent deployed resource.')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"p\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"h1\", {\n children: translate('Deployment binding')\n }), translate('Uses the resource found in the same deployment.')]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"p\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"h1\", {\n children: translate('Version tag binding')\n }), translate('Uses the most recent deployed resource with the given version tag.')]\n })]\n });\n },\n 'versionTag': element => {\n const translate = useService('translate');\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:Process', 'bpmn:Participant'])) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('Version tag by which this process can be referenced.')\n })\n });\n } else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:CallActivity')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('Version tag by which the called process will be referenced.')\n })\n });\n } else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BusinessRuleTask')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('Version tag by which the called decision will be referenced.')\n })\n });\n } else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:UserTask')) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('Version tag by which the linked form will be referenced.')\n })\n });\n }\n },\n 'priorityDefinitionPriority': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('An integer value that can range from 0 to 100, where a higher value indicates a higher priority.')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n children: translate('If unset, the default value is 50.')\n })]\n });\n }\n};\n\n/* eslint-disable react-hooks/rules-of-hooks */\n\nconst TooltipProvider = {\n 'historyTimeToLive': element => {\n const translate = useService('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"p\", {\n children: [translate('Number of days before this resource is being cleaned up. If specified, takes precedence over the engine configuration.'), ' ', (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"a\", {\n href: \"https://docs.camunda.org/manual/latest/user-guide/process-engine/history/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: translate('Learn more.')\n })]\n })\n });\n }\n};\n\n\n//# sourceMappingURL=index.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2Rpc3QvaW5kZXguZXNtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQStHO0FBQ3lDO0FBQ29RO0FBQ25WO0FBQ0Q7QUFDYTtBQUN1QjtBQUNoRDtBQUNhO0FBQ007QUFDaEM7QUFDeUI7QUFDbEQ7QUFDZ0M7QUFDNEI7QUFDcEM7QUFDNEI7O0FBRTFFLG1DQUFtQywrRUFBYTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxJQUFJLEVBQUUsa0ZBQVU7QUFDaEI7QUFDQTs7QUFFQSx5QkFBeUIsMkVBQTJFLGdCQUFnQixzQkFBc0IsT0FBTyxzQkFBc0Isb0JBQW9CLGdEQUFnRCxXQUFXO0FBQ3RQO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsQ0FBQyxrQkFBa0IsNkZBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLENBQUMsdUJBQXVCLDZGQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELHlCQUF5QiwyRUFBMkUsZ0JBQWdCLHNCQUFzQixPQUFPLHNCQUFzQixvQkFBb0IsZ0RBQWdELFdBQVc7QUFDdFA7QUFDQSxhQUFhO0FBQ2I7QUFDQSxDQUFDLGtCQUFrQiw2RkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx1QkFBdUIsNkZBQW1CO0FBQzNDO0FBQ0EsQ0FBQyxnQkFBZ0IsNkZBQW1CO0FBQ3BDO0FBQ0EsQ0FBQzs7QUFFRCx5QkFBeUIsMkVBQTJFLGdCQUFnQixzQkFBc0IsT0FBTyxzQkFBc0Isb0JBQW9CLGdEQUFnRCxXQUFXO0FBQ3RQO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsQ0FBQyxrQkFBa0IsNkZBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLENBQUMsdUJBQXVCLDZGQUFtQjtBQUMzQztBQUNBLENBQUM7O0FBRUQseUJBQXlCLDJFQUEyRSxnQkFBZ0Is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QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNkVBQWlCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxTQUFTLGlGQUFHLENBQUMsa0VBQVc7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2RUFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxTQUFTLGlGQUFHLENBQUMscUVBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2RUFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxTQUFTLGlGQUFHLENBQUMscUVBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2RUFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxTQUFTLGlGQUFHLENBQUMscUVBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxjQUFjLDZFQUFzQjtBQUNwQyxHQUFHO0FBQ0g7QUFDQTtBQUNBLGNBQWMsMEVBQW1CO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxnQkFBZ0I7QUFDNUI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxpRUFBSztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrREFBTztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCwwQ0FBMEMsNkVBQWlCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxTQUFTLHlFQUFjO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxTQUFTLHlFQUFjO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxTQUFTLHlFQUFjO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFNBQVMsc0VBQVc7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsd0VBQWE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGVBQWU7QUFDM0IsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMseUVBQWM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMseUVBQWM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHlFQUFjO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHlFQUFjO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx5RUFBYztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx5RUFBYztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0REFBSztBQUNwQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0VBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0VBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDREQUFLO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQUs7QUFDcEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0VBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0VBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUZBQUc7QUFDZCxnQkFBZ0Isa0ZBQUk7QUFDcEIsNkpBQTZKLGlGQUFHO0FBQ2hLO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFK1I7QUFDL1IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2Rpc3QvaW5kZXguZXNtLmpzP2EwODYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tICdAYnBtbi1pby9wcm9wZXJ0aWVzLXBhbmVsL3ByZWFjdC9ob29rcyc7XG5pbXBvcnQgeyByZWR1Y2UsIGlzQXJyYXksIGZpbmQsIGZvckVhY2gsIHNvcnRCeSwgd2l0aG91dCwgaXNEZWZpbmVkLCBpc1VuZGVmaW5lZCwgaGFzLCBmaW5kSW5kZXgsIGZpbHRlciwgbWFwLCBrZXlzLCBmbGF0dGVuLCBncm91cEJ5IH0gZnJvbSAnbWluLWRhc2gnO1xuaW1wb3J0IHsgUHJvcGVydGllc1BhbmVsLCBEZWJvdW5jZUlucHV0TW9kdWxlLCBGZWVsUG9wdXBNb2R1bGUsIHVzZVByZXZpb3VzLCBTZWxlY3RFbnRyeSwgaXNDaGVja2JveEVudHJ5RWRpdGVkLCBpc1NlbGVjdEVudHJ5RWRpdGVkLCBDaGVja2JveEVudHJ5LCBpc1RleHRBcmVhRW50cnlFZGl0ZWQsIFRleHRBcmVhRW50cnksIGlzVGV4dEZpZWxkRW50cnlFZGl0ZWQsIFRleHRGaWVsZEVudHJ5LCBHcm91cCwgRmVlbEVudHJ5IGFzIEZlZWxFbnRyeSQxLCBpc0ZlZWxFbnRyeUVkaXRlZCwgaXNUb2dnbGVTd2l0Y2hFbnRyeUVkaXRlZCwgVG9nZ2xlU3dpdGNoRW50cnksIExpc3RHcm91cCwgTGlzdEVudHJ5LCBTaW1wbGVFbnRyeSwgQ29sbGFwc2libGVFbnRyeSB9IGZyb20gJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgcmVuZGVyIH0gZnJvbSAnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QnO1xuaW1wb3J0IHsgZ2V0TGFiZWwgfSBmcm9tICdicG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsVXRpbCc7XG5pbXBvcnQgeyBpcywgZ2V0QnVzaW5lc3NPYmplY3QsIGlzQW55IGFzIGlzQW55JDEgfSBmcm9tICdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XG5pbXBvcnQgeyBpc0ludGVycnVwdGluZyBhcyBpc0ludGVycnVwdGluZyQxLCBpc0V2ZW50U3ViUHJvY2VzcywgaXNFeHBhbmRlZCB9IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvRGlVdGlsJztcbmltcG9ydCBSZWFjdCBmcm9tICdAYnBtbi1pby9wcm9wZXJ0aWVzLXBhbmVsL3ByZWFjdC9jb21wYXQnO1xuaW1wb3J0IHsganN4LCBqc3hzIH0gZnJvbSAnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgaXNVbmRvLCBpc1JlZG8gfSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZFV0aWwnO1xuaW1wb3J0IHsgZG9taWZ5LCBxdWVyeSwgZXZlbnQgfSBmcm9tICdtaW4tZG9tJztcbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuaW1wb3J0IElkcyBmcm9tICdpZHMnO1xuaW1wb3J0IHsgYWRkIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBnZXRWYXJpYWJsZXNGb3JFbGVtZW50IH0gZnJvbSAnQGJwbW4taW8vZXh0cmFjdC1wcm9jZXNzLXZhcmlhYmxlcy96ZWViZSc7XG5pbXBvcnQgeyBhcnJheU1vdmVNdXRhYmxlIH0gZnJvbSAnYXJyYXktbW92ZSc7XG5pbXBvcnQgeyBnZXRWYXJpYWJsZXNGb3JTY29wZSB9IGZyb20gJ0BicG1uLWlvL2V4dHJhY3QtcHJvY2Vzcy12YXJpYWJsZXMnO1xuXG5jb25zdCBCcG1uUHJvcGVydGllc1BhbmVsQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBzZWxlY3RlZEVsZW1lbnQ6IG51bGwsXG4gIGluamVjdG9yOiBudWxsLFxuICBnZXRTZXJ2aWNlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdXNlU2VydmljZSh0eXBlLCBzdHJpY3QpIHtcbiAgY29uc3Qge1xuICAgIGdldFNlcnZpY2VcbiAgfSA9IHVzZUNvbnRleHQoQnBtblByb3BlcnRpZXNQYW5lbENvbnRleHQpO1xuICByZXR1cm4gZ2V0U2VydmljZSh0eXBlLCBzdHJpY3QpO1xufVxuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxbygpIHsgcmV0dXJuIF9leHRlbmRzJDFvID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDFvLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBBc3NvY2lhdGlvbkljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDFvKHtcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgc3Ryb2tlOiBcIiMwMDBcIixcbiAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgc3Ryb2tlRGFzaGFycmF5OiBcIjMuMyw2XCIsXG4gIHN0cm9rZUxpbmVjYXA6IFwic3F1YXJlXCIsXG4gIGQ6IFwiTTEuNSAzMC41bDI5LTI5XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkMW4oKSB7IHJldHVybiBfZXh0ZW5kcyQxbiA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQxbi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgQnVzaW5lc3NSdWxlVGFza0ljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDFuKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNi40OTQgM0MyLjkxNiAzIDAgNS45MDMgMCA5LjQ3NXYxMy4zODNjMCAzLjU3MiAyLjkxNiA2LjQ3NSA2LjQ5NCA2LjQ3NWgxOS4wMTJjMy41NzggMCA2LjQ5NC0yLjkwMyA2LjQ5NC02LjQ3NVY5LjQ3NUMzMiA1LjkwMyAyOS4wODQgMyAyNS41MDYgM0g2LjQ5NHptMCAyaDE5LjAxMkMyOC4wMTUgNSAzMCA2Ljk4IDMwIDkuNDc1djEzLjM4M2MwIDIuNDk1LTEuOTg1IDQuNDc1LTQuNDk0IDQuNDc1SDYuNDk0QzMuOTg1IDI3LjMzMyAyIDI1LjM1MyAyIDIyLjg1OFY5LjQ3NUMyIDYuOTggMy45ODUgNSA2LjQ5NCA1ek01LjI5NiA3LjM5OHYxMi42NjVoMTYuODdWNy4zOThINS4yOTZ6bS43MTggNC4zODZoMTUuNDMzdjMuNDRIOS45ODV2LTMuNDMyaC0uNzE5djMuNDMxSDYuMDE0di0zLjQ0em0wIDQuMTU4aDMuMjUydjMuNDAzSDYuMDE0di0zLjQwM3ptMy45NyAwaDExLjQ2M3YzLjQwM0g5Ljk4NXYtMy40MDN6XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk02LjA3OSA4LjIwOXYzLjU4N0gyMS40NFY4LjIwOXpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxbSgpIHsgcmV0dXJuIF9leHRlbmRzJDFtID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDFtLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBDYWxsQWN0aXZpdHlJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxbSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTI0Ljk3OCAzYzMuNzYxIDAgNi44OSAyLjk3OSA3LjAxOCA2LjY5NWwuMDA0LjIzOFYyMi40YzAgMy43NDctMy4wNSA2LjgwNC02Ljc4MyA2LjkzbC0uMjQuMDAzSDcuMDIzYy0zLjc2MSAwLTYuODktMi45NzgtNy4wMTgtNi42OTVMMCAyMi40VjkuOTMzQzAgNi4xODcgMy4wNSAzLjEzIDYuNzgzIDMuMDA0TDcuMDIzIDNoMTcuOTU1em0wIDMuNjY3SDcuMDIyYy0xLjg0MiAwLTMuMjU1IDEuMzQ0LTMuMzUgMy4wNzlsLS4wMDUuMTg3VjIyLjRjMCAxLjc2MSAxLjM1IDMuMTY3IDMuMTYgMy4yNjJsLjE5NS4wMDVMMTAgMjUuNjY2VjE1aDEydjEwLjY2NmgyLjk3OGMxLjg0MiAwIDMuMjU1LTEuMzQ0IDMuMzUtMy4wNzlsLjAwNS0uMTg3VjkuOTMzYzAtMS43NjEtMS4zNS0zLjE2Ni0zLjE2LTMuMjYxbC0uMTk1LS4wMDV6bS0zLjczMiA5LjA4N0gxMC43NTR2OS45MTJoMTAuNDkxdi05LjkxMnptLTQuNDc1IDEuODE3djIuNjU4aDIuNjU4djEuNTQySDE2Ljc3djIuNjU4SDE1LjIzVjIxLjc3SDEyLjU3VjIwLjIzaDIuNjU4VjE3LjU3aDEuNTQyelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDFsKCkgeyByZXR1cm4gX2V4dGVuZHMkMWwgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIENvbGxhYm9yYXRpb25JY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxbCh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICBkOiBcIk0wIDB2OC42MmgzMlYwSDB6bTEuNjU1IDcuMDU0di01LjM3aDI4LjYydjUuMzdIMS42NTZ6TTAgMjMuMzhWMzJoMzJ2LTguNjJIMHptMS42NTUgNy4wNTR2LTUuMzdoMjguNjJ2NS4zN0gxLjY1NnpcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTI0IDhsNCA3aC04bDQtN3ptMCAybC0yLjI4IDRoNC41NkwyNCAxMHpNMjMuNSAyMWgxdjNoLTF6TTIzLjUgMTVoMXYzaC0xek04IDI0bC00LTdoOGwtNCA3em0wLTJsMi4yOC00SDUuNzJMOCAyMnpNNy41IDhoMXYzaC0xek03LjUgMTRoMXYzaC0xelwiXG59KSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxaygpIHsgcmV0dXJuIF9leHRlbmRzJDFrID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDFrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBDb25kaXRpb25hbEZsb3dJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxayh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTMyIC4wNDFTMjAuNDIgNS45NSAxNC41MzcgOC43MTNjMS4yNiAxLjE1IDIuNDMyIDIuMzkyIDMuNjQ4IDMuNTg4LTUuNzAzIDUuNzgtMy4xNSAzLjMwMy04LjA4NyA4LjMxNmwtOC40NzIgMS4zNzdMMCAzMmwxMC4wMDYtMS42MjYuMDk4LS41OTggMS4yNzktNy44NzNjNC45NzUtNS4wNTIgMi40MDMtMi41NTUgOC4xMTgtOC4zNDYgMS4yMTggMS4yMTQgMi40MyAyLjQzNSAzLjY0OCAzLjY0OEMyNi4yOSAxMS4wMTggMzIgLjA0MSAzMiAuMDQxek05LjYwMyAyMi4zOTdMOC41NCAyOC45MSAyLjAzIDI5Ljk3bDEuMDYxLTYuNTE1IDYuNTEyLTEuMDU4elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDFqKCkgeyByZXR1cm4gX2V4dGVuZHMkMWogPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMWouYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIENvbm5lY3Rpb25JY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxaih7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTMyIC4wNlMyMC4zMyA2LjAxNCAxNC40MDMgOC43OThjMS4yNyAxLjE2IDIuNDUxIDIuNDEgMy42NzYgMy42MTZMMCAzMC43MzQgMS4zMjUgMzJsMTguMDgtMTguMzJjMS4yMjcgMS4yMjMgMi40NDggMi40NTMgMy42NzYgMy42NzZDMjYuMjQ3IDExLjEyIDMyIC4wNiAzMiAuMDZ6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkMWkoKSB7IHJldHVybiBfZXh0ZW5kcyQxaSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQxaS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgRGF0YUlucHV0T3V0cHV0QXNzb2NpYXRpb25JY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxaSh7XG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIHN0cm9rZTogXCIjMDAwXCIsXG4gIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICBzdHJva2VEYXNoYXJyYXk6IFwiMS4xLDQuM1wiLFxuICBkOiBcIk0xLjUgMzAuNUwyNyA1XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMS44MDMuMTk3TDI2LjUgMTYuMTA3bC0xLjUyLTEuNTIgMy43ODMtMTEuMzUtMTEuMzUgMy43ODMtMS41Mi0xLjUyelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDFoKCkgeyByZXR1cm4gX2V4dGVuZHMkMWggPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMWguYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIERhdGFJbnB1dEljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDFoKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAuODMzIDBIMy40ODh2MzJIMjhWNy4zNkwyMC44MzMgMHptLTIuMTA1IDEuODE4djcuNTA3aDcuNDU0djIwLjg1N0g1LjMwNlYxLjgxOGgxMy40MjJ6bTEuODE4LjQ5M2w1LjA2IDUuMTk2aC01LjA2VjIuMzExem0tOS4xODIuODZ2My43NDRINy4wODF2My4yMjJoNC4yODN2My43NDNsNS43LTUuMzU0LTUuNy01LjM1NHptLjgwOCAxLjg2OGwzLjcxMSAzLjQ4Ny0zLjcxIDMuNDg3VjkuMzI5SDcuODg4VjcuNzIzaDQuMjgzVjUuMDM5elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDFnKCkgeyByZXR1cm4gX2V4dGVuZHMkMWcgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMWcuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIERhdGFPYmplY3RJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxZyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIxLjM0NSAwSDR2MzJoMjQuNTEyVjcuMzZMMjEuMzQ1IDB6TTE5LjI0IDEuODE4djcuNTA3aDcuNDU0djIwLjg1N0g1LjgxOFYxLjgxOEgxOS4yNHptMS44MTguNDkzbDUuMDYgNS4xOTZoLTUuMDZWMi4zMTF6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkMWYoKSB7IHJldHVybiBfZXh0ZW5kcyQxZiA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQxZi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgRGF0YU91dHB1dEljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDFmKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAuODMzIDBIMy40ODh2MzJIMjhWNy4zNkwyMC44MzMgMHptLTIuMTA1IDEuODE4djcuNTA3aDcuNDU0djIwLjg1N0g1LjMwNlYxLjgxOGgxMy40MjJ6bTEuODE4LjQ5M2w1LjA2IDUuMTk2aC01LjA2VjIuMzExem0tOS4xODIuODZ2My43NDRINy4wODF2My4yMjJoNC4yODN2My43NDNsNS43LTUuMzU0LTUuNy01LjM1NHpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxZSgpIHsgcmV0dXJuIF9leHRlbmRzJDFlID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDFlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBEYXRhU3RvcmVJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxZSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2LjAwOCAxYy0zLjcxMiAwLTcuNDE3LjMwNi0xMC4zMTkuOTM5LTEuNDUuMzE2LTIuNy43MS0zLjY4IDEuMjI2QzEuMDY1IDMuNjYyLjI5NyA0LjMwNC4wNjEgNS4yM2EuODIzLjgyMyAwIDAwLS4wMzUuMTVMMCA1LjUwMmwuMDE3LjA4NGMtLjAxMiA3LjQxIDAgMTQuNDYgMCAyMi4wOGwuMDE3LjA4MmMuMjAzLjk4NS45OTUgMS42NTYgMS45NzUgMi4xNzIuOTguNTE3IDIuMjMuOTEgMy42OCAxLjIyNiAyLjkwMi42MzMgNi42MDcuOTQgMTAuMzE5Ljk0IDMuNzExIDAgNy40MTYtLjMwNyAxMC4zMTgtLjk0IDEuNDUxLS4zMTYgMi43MDEtLjcxIDMuNjgtMS4yMjYuOTgtLjUxNiAxLjc3Mi0xLjE4NyAxLjk3NS0yLjE3MmwuMDE3LS4wODJWNS41NDFhLjgyNS44MjUgMCAwMDAtLjEwNnYtLjAxNmwtLjAwMi0uMDEzYS44MjMuODIzIDAgMDAtLjA0Ni0uMTk3Yy0uMjQ0LS45MTYtMS4wMDctMS41NS0xLjk0My0yLjA0NC0uOTgtLjUxNi0yLjIzLS45MS0zLjY4LTEuMjI2QzIzLjQyMyAxLjMwNiAxOS43MTggMSAxNi4wMDYgMXptMCAxLjY0NmMzLjYyIDAgNy4yNDUuMzA4IDkuOTY4LjkwMSAxLjM2LjI5NyAyLjQ5Ny42NyAzLjI2MyAxLjA3NC42MTIuMzIzLjkzMi42NDMgMS4wNjMuODgyLS4xMzEuMjQtLjQ1MS41Ni0xLjA2My44ODItLjc2Ni40MDQtMS45MDIuNzc3LTMuMjYzIDEuMDc0LTIuNzIzLjU5NC02LjM0OS45MDEtOS45NjguOTAxLTMuNjIgMC03LjI0NS0uMzA3LTkuOTY4LS45MDEtMS4zNjEtLjI5Ny0yLjQ5Ny0uNjctMy4yNjQtMS4wNzQtLjYxMS0uMzIyLS45MzEtLjY0Mi0xLjA2Mi0uODgyLjEzLS4yNC40NTEtLjU2IDEuMDYyLS44ODIuNzY3LS40MDMgMS45MDMtLjc3NyAzLjI2NC0xLjA3NCAyLjcyMy0uNTkzIDYuMzQ4LS45IDkuOTY4LS45ek0xLjY2NCA3LjY0N2MuMTEyLjA2Ny4yMjcuMTMyLjM0NS4xOTQuOTguNTE3IDIuMjMuOTEgMy42OCAxLjIyNiAyLjkwMi42MzMgNi42MDcuOTQgMTAuMzE5Ljk0IDMuNzExIDAgNy40MTYtLjMwNyAxMC4zMTgtLjk0IDEuNDUxLS4zMTYgMi43MDEtLjcxIDMuNjgtMS4yMjYuMTE5LS4wNjIuMjM0LS4xMjcuMzQ2LS4xOTR2MS45M2MtLjA4LjI0NS0uMzk4LjYxOS0xLjExMy45OTUtLjc2Ni40MDQtMS45MDIuNzc3LTMuMjYzIDEuMDc0LTIuNzIzLjU5NC02LjM0OS45MDEtOS45NjguOTAxLTMuNjIgMC03LjI0NS0uMzA3LTkuOTY4LS45LTEuMzYxLS4yOTgtMi40OTctLjY3MS0zLjI2NC0xLjA3NS0uNzE0LS4zNzYtMS4wMzItLjc1LTEuMTEyLS45OTV2LTEuOTN6bTAgNC4xODdjLjExMi4wNjcuMjI3LjEzMi4zNDUuMTk1Ljk4LjUxNiAyLjIzLjkxIDMuNjggMS4yMjYgMi45MDIuNjMyIDYuNjA3LjkzOCAxMC4zMTkuOTM4IDMuNzExIDAgNy40MTYtLjMwNiAxMC4zMTgtLjkzOCAxLjQ1MS0uMzE3IDIuNzAxLS43MSAzLjY4LTEuMjI2LjExOS0uMDYzLjIzNC0uMTI4LjM0Ni0uMTk1djEuOTNjLS4wOC4yNDUtLjM5OC42MTktMS4xMTMuOTk1LS43NjYuNDA0LTEuOTAyLjc3Ny0zLjI2MyAxLjA3NC0yLjcyMy41OTQtNi4zNDkuOTAxLTkuOTY4LjkwMS0zLjYyIDAtNy4yNDUtLjMwNy05Ljk2OC0uOS0xLjM2MS0uMjk4LTIuNDk3LS42Ny0zLjI2NC0xLjA3NS0uNzE0LS4zNzYtMS4wMzItLjc1LTEuMTEyLS45OTV2LTEuOTN6bTAgNC4xODhjLjExMi4wNjcuMjI3LjEzMS4zNDUuMTk0Ljk4LjUxNiAyLjIzLjkxIDMuNjggMS4yMjYgMi45MDIuNjMzIDYuNjA3LjkzOSAxMC4zMTkuOTM5IDMuNzExIDAgNy40MTYtLjMwNiAxMC4zMTgtLjk0IDEuNDUxLS4zMTYgMi43MDEtLjcwOSAzLjY4LTEuMjI1LjExOS0uMDYzLjIzNC0uMTI3LjM0Ni0uMTk0VjI3LjQ3Yy0uMDguMjQ1LS4zOTguNjE4LTEuMTEzLjk5NS0uNzY2LjQwNC0xLjkwMi43NzctMy4yNjMgMS4wNzQtMi43MjMuNTk0LTYuMzQ5LjktOS45NjguOS0zLjYyIDAtNy4yNDUtLjMwNi05Ljk2OC0uOS0xLjM2MS0uMjk3LTIuNDk3LS42Ny0zLjI2NC0xLjA3NC0uNzE0LS4zNzctMS4wMzItLjc1LTEuMTEyLS45OTVWMTYuMDIyelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDFkKCkgeyByZXR1cm4gX2V4dGVuZHMkMWQgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMWQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIERlZmF1bHRGbG93SWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkMWQoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMiAuMDZTMjAuMzMgNi4wMTQgMTQuNDAzIDguNzk4YzEuMjcgMS4xNiAyLjQ1MSAyLjQxIDMuNjc2IDMuNjE2TDYuODQgMjMuODA0SC4wNDZ2MS43NTVoNS4wNjNMMCAzMC43MzUgMS4zMjUgMzJsNi4zNTctNi40NDFoNy4xNDV2LTEuNzU2SDkuNDE0bDkuOTktMTAuMTIzYzEuMjI4IDEuMjIzIDIuNDUgMi40NTMgMy42NzcgMy42NzZDMjYuMjQ3IDExLjEyIDMyIC4wNiAzMiAuMDZ6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkMWMoKSB7IHJldHVybiBfZXh0ZW5kcyQxYyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQxYy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgRW5kRXZlbnRDYW5jZWxJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxYyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1LjY3Ni4wNTFDNy45NDMuMDU4LjgzNCA2LjUwMS4xMDQgMTQuMjFjLS43ODMgNi41NjUgMi45MTIgMTMuNDI3IDguOTQyIDE2LjIxNiA1LjYgMi43MzcgMTIuNzg5IDEuODcgMTcuNDM0LTIuMzQ0IDQuNzI1LTQuMDkgNi43OS0xMS4wNiA0LjcxNC0xNy4wMDZDMjkuMjIgNS4wMDkgMjMuMzk0LjM2NCAxNi45NzguMDgzQTE4LjUzMiAxOC41MzIgMCAwMDE1LjY3Ni4wNXptLjMxNyA1LjAwNmM1LjY5NS0uMTY1IDEwLjkxNiA0Ljg1OCAxMC45ODMgMTAuNTU1LjI0NiA1LjIxMi0zLjY3IDEwLjMzLTguODY0IDExLjIwNC01LjAyNiAxLjAwNy0xMC42LTEuODk4LTEyLjM2LTYuNzc3LTEuODk0LTQuODI2LjAzOS0xMC45MjggNC42NDktMTMuNDZhMTEuMDgyIDExLjA4MiAwIDAxNS41OTItMS41MjJ6bS0zLjk1NSAzLjkxOEw4Ljk0IDEyLjA3MmwzLjk4NSAzLjk4NS0zLjkxMyAzLjkxMyAzLjA0OCAzLjA0NyAzLjkxMy0zLjkxMyAzLjk4NyAzLjk4NyAzLjA5Ni0zLjA5Ni0zLjk4Ny0zLjk4NyAzLjkxMy0zLjkxMy0zLjA0Ny0zLjA0OC0zLjkxMyAzLjkxMy0zLjk4NS0zLjk4NXpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxYigpIHsgcmV0dXJuIF9leHRlbmRzJDFiID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDFiLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBFbmRFdmVudENvbXBlbnNhdGlvbkljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDFiKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuNjc2LjA1MUM3Ljk0My4wNTguODM0IDYuNTAxLjEwNCAxNC4yMWMtLjc4MyA2LjU2NSAyLjkxMiAxMy40MjcgOC45NDIgMTYuMjE2IDUuNiAyLjczNyAxMi43ODkgMS44NyAxNy40MzQtMi4zNDQgNC43MjUtNC4wOSA2Ljc5LTExLjA2IDQuNzE0LTE3LjAwNkMyOS4yMiA1LjAwOSAyMy4zOTQuMzY0IDE2Ljk3OC4wODNBMTguNTMyIDE4LjUzMiAwIDAwMTUuNjc2LjA1em0uMzE3IDUuMDA2YzUuNjk1LS4xNjUgMTAuOTE2IDQuODU4IDEwLjk4MyAxMC41NTUuMjQ2IDUuMjEyLTMuNjcgMTAuMzMtOC44NjQgMTEuMjA0LTUuMDI2IDEuMDA3LTEwLjYtMS44OTgtMTIuMzYtNi43NzctMS44OTQtNC44MjYuMDM5LTEwLjkyOCA0LjY0OS0xMy40NmExMS4wODIgMTEuMDgyIDAgMDE1LjU5Mi0xLjUyMnptLS41NiA1Ljc0NGwtNy40MDcgNS4yMyA3LjQwOCA1LjIzNHYtNS4wNTdjMi4zODQgMS42ODcgNC43NzEgMy4zNzEgNy4xNTcgNS4wNTdWMTAuODAxbC03LjE1NyA1LjA1NHYtNS4wNTR6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkMWEoKSB7IHJldHVybiBfZXh0ZW5kcyQxYSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQxYS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgRW5kRXZlbnRFcnJvckljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDFhKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuNjc2LjA1MUM3Ljk0My4wNTguODM0IDYuNTAxLjEwNCAxNC4yMWMtLjc4MyA2LjU2NSAyLjkxMiAxMy40MjcgOC45NDIgMTYuMjE2IDUuNiAyLjczNyAxMi43ODkgMS44NyAxNy40MzQtMi4zNDQgNC43MjUtNC4wOSA2Ljc5LTExLjA2IDQuNzE0LTE3LjAwNkMyOS4yMiA1LjAwOSAyMy4zOTQuMzY0IDE2Ljk3OC4wODNBMTguNTMyIDE4LjUzMiAwIDAwMTUuNjc2LjA1em0uMzE3IDUuMDA2YzUuNjk1LS4xNjUgMTAuOTE2IDQuODU4IDEwLjk4MyAxMC41NTUuMjQ2IDUuMjEyLTMuNjcgMTAuMzMtOC44NjQgMTEuMjA0LTUuMDI2IDEuMDA3LTEwLjYtMS44OTgtMTIuMzYtNi43NzctMS44OTQtNC44MjYuMDM5LTEwLjkyOCA0LjY0OS0xMy40NmExMS4wODIgMTEuMDgyIDAgMDE1LjU5Mi0xLjUyMnptNi4xMzIgNC4xNjZsLTMuNjMzIDcuMzYzLTQuNTE2LTUuODc0LTQuMTAyIDEyLjEzMSA0LjU5OS01LjkxIDQuNzQzIDUuNDI3IDIuOTA5LTEzLjEzN3pcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxOSgpIHsgcmV0dXJuIF9leHRlbmRzJDE5ID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDE5LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBFbmRFdmVudEVzY2FsYXRpb25JY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxOSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1LjY3Ni4wNTFDNy45NDMuMDU4LjgzNCA2LjUwMS4xMDQgMTQuMjFjLS43ODMgNi41NjUgMi45MTIgMTMuNDI3IDguOTQyIDE2LjIxNiA1LjYgMi43MzcgMTIuNzg5IDEuODcgMTcuNDM0LTIuMzQ0IDQuNzI1LTQuMDkgNi43OS0xMS4wNiA0LjcxNC0xNy4wMDZDMjkuMjIgNS4wMDkgMjMuMzk0LjM2NCAxNi45NzguMDgzQTE4LjUzMiAxOC41MzIgMCAwMDE1LjY3Ni4wNXptLjMxNyA1LjAwNmM1LjY5NS0uMTY1IDEwLjkxNiA0Ljg1OCAxMC45ODMgMTAuNTU1LjI0NiA1LjIxMi0zLjY3IDEwLjMzLTguODY0IDExLjIwNC01LjAyNiAxLjAwNy0xMC42LTEuODk4LTEyLjM2LTYuNzc3LTEuODk0LTQuODI2LjAzOS0xMC45MjggNC42NDktMTMuNDZhMTEuMDgyIDExLjA4MiAwIDAxNS41OTItMS41MjJ6bS4wMDYgMy45Yy0xLjY3MiA0LjY1My0yLjczMyA5LjUtNC40MDYgMTQuMTUzIDEuNTM1LTEuNTI1IDIuODcyLTMuMjM0IDQuNDA2LTQuNzU5bDQuNDA2IDQuNzZjLTEuNDk3LTQuNzEtMi45MS05LjQ0NS00LjQwNi0xNC4xNTV6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkMTgoKSB7IHJldHVybiBfZXh0ZW5kcyQxOCA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQxOC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgRW5kRXZlbnRMaW5rSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkMTgoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS42NzYgMEM3Ljk0My4wMDcuODM0IDYuNDUuMTA0IDE0LjE2Yy0uNzgzIDYuNTY1IDIuOTEyIDEzLjQyNyA4Ljk0MiAxNi4yMTYgNS42IDIuNzM3IDEyLjc4OSAxLjg3IDE3LjQzNC0yLjM0NCA0LjcyNS00LjA5IDYuNzktMTEuMDYgNC43MTQtMTcuMDA2QzI5LjIyIDQuOTU4IDIzLjM5NC4zMTMgMTYuOTc4LjAzMkExOC41MzIgMTguNTMyIDAgMDAxNS42NzYgMHptLjMxNyA1LjAwNmM1LjY5NS0uMTY1IDEwLjkxNiA0Ljg1OCAxMC45ODMgMTAuNTU1LjI0NiA1LjIxMi0zLjY3IDEwLjMzLTguODY0IDExLjIwNC01LjAyNiAxLjAwNy0xMC42LTEuODk4LTEyLjM2LTYuNzc3LTEuODk0LTQuODI2LjAzOS0xMC45MjggNC42NDktMTMuNDZhMTEuMDgyIDExLjA4MiAwIDAxNS41OTItMS41MjJ6bTEuNzggNC4wNjV2My41NTVIOS43Nzl2Ni43MTNoNy45OTR2My41NTRsNS44MjgtNi45MS01LjgyOC02LjkxMnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxNygpIHsgcmV0dXJuIF9leHRlbmRzJDE3ID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDE3LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBFbmRFdmVudE1lc3NhZ2VJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxNyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1LjY3NiAwQzcuOTQzLjAwNy44MzQgNi40NS4xMDQgMTQuMTZjLS43ODMgNi41NjUgMi45MTIgMTMuNDI3IDguOTQyIDE2LjIxNiA1LjYgMi43MzcgMTIuNzg5IDEuODcgMTcuNDM0LTIuMzQ0IDQuNzI1LTQuMDkgNi43OS0xMS4wNiA0LjcxNC0xNy4wMDZDMjkuMjIgNC45NTggMjMuMzk0LjMxMyAxNi45NzguMDMyQTE4LjUzMiAxOC41MzIgMCAwMDE1LjY3NiAwem0uMzE3IDUuMDA2YzUuNjk1LS4xNjUgMTAuOTE2IDQuODU4IDEwLjk4MyAxMC41NTUuMjQ2IDUuMjEyLTMuNjcgMTAuMzMtOC44NjQgMTEuMjA0LTUuMDI2IDEuMDA3LTEwLjYtMS44OTgtMTIuMzYtNi43NzctMS44OTQtNC44MjYuMDM5LTEwLjkyOCA0LjY0OS0xMy40NmExMS4wODIgMTEuMDgyIDAgMDE1LjU5Mi0xLjUyMnptLTUuOTEgNS40NDhsNi4wNDEgNC45IDYuMDQtNC45SDEwLjA4NHptLTEuMzQgMS4xMzd2OS45MmgxNC41MTN2LTkuNzE4bC03LjEzMiA1Ljc4Ni03LjM4MS01Ljk4OHpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxNigpIHsgcmV0dXJuIF9leHRlbmRzJDE2ID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDE2LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBFbmRFdmVudE11bHRpcGxlSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkMTYoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS42NzYgMEM3Ljk0My4wMDcuODM0IDYuNDUuMTA0IDE0LjE2Yy0uNzgzIDYuNTY1IDIuOTEyIDEzLjQyNyA4Ljk0MiAxNi4yMTYgNS42IDIuNzM3IDEyLjc4OSAxLjg3IDE3LjQzNC0yLjM0NCA0LjcyNS00LjA5IDYuNzktMTEuMDYgNC43MTQtMTcuMDA2QzI5LjIyIDQuOTU4IDIzLjM5NC4zMTMgMTYuOTc4LjAzMkExOC41MjkgMTguNTI5IDAgMDAxNS42NzYgMHptLjMxNyA1LjAwNmM1LjY5NS0uMTY1IDEwLjkxNiA0Ljg1OCAxMC45ODMgMTAuNTU1LjI0NiA1LjIxMi0zLjY3IDEwLjMzLTguODY0IDExLjIwNC01LjAyNiAxLjAwNy0xMC42LTEuODk4LTEyLjM2LTYuNzc3LTEuODk0LTQuODI2LjAzOS0xMC45MjggNC42NDktMTMuNDZhMTEuMDgyIDExLjA4MiAwIDAxNS41OTItMS41MjJ6bS4wMTEgMy4wMzlsLTcuNjE5IDUuNTMgMi45MSA4Ljk1aDkuNDE4bDIuOTEtOC45NS03LjYxOS01LjUzelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDE1KCkgeyByZXR1cm4gX2V4dGVuZHMkMTUgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMTUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEVuZEV2ZW50Tm9uZUljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDE1KHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuODQuMDQyQzguNjU0LS4wMSAxLjkxMyA1LjQzNy40IDEyLjQ1NC0xLjA1NyAxOC42MiAxLjU1NCAyNS40OTUgNi43ODQgMjkuMDljNS4wNzYgMy42MzYgMTIuMzEgMy45MiAxNy41OS41NDQgNS4zMDktMy4yNTEgOC40MzUtOS43NDQgNy40NDUtMTUuOTIxQzMwLjkxIDcuMzA3IDI1Ljc5NSAxLjczOCAxOS40NDIuNDIyYTE2LjA2NCAxNi4wNjQgMCAwMC0zLjYwMi0uMzh6bS4zODIgNS4wMWM1LjI4LS4wMTcgMTAuMTMgNC4zNTMgMTAuNjY5IDkuNjEuNjg3IDUuMDI1LTIuNTUyIDEwLjI4MS03LjQyMyAxMS43OTItNC43NTQgMS42MTctMTAuNDg2LS40NDctMTIuOTYyLTQuODU2LTIuNzQtNC41NzUtMS41NzQtMTEuMDk0IDIuNzY4LTE0LjI3YTExLjA1IDExLjA1IDAgMDE2Ljk0OC0yLjI3NnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQxNCgpIHsgcmV0dXJuIF9leHRlbmRzJDE0ID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJDE0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBFbmRFdmVudFNpZ25hbEljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDE0KHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuNjc2LjA1MUM3Ljk0My4wNTguODM0IDYuNTAxLjEwNCAxNC4yMWMtLjc4MyA2LjU2NSAyLjkxMiAxMy40MjcgOC45NDIgMTYuMjE2IDUuNiAyLjczNyAxMi43ODkgMS44NyAxNy40MzQtMi4zNDQgNC43MjUtNC4wOSA2Ljc5LTExLjA2IDQuNzE0LTE3LjAwNkMyOS4yMiA1LjAwOSAyMy4zOTQuMzY0IDE2Ljk3OC4wODNBMTguNTMyIDE4LjUzMiAwIDAwMTUuNjc2LjA1em0uMzE3IDUuMDA2YzUuNjk1LS4xNjUgMTAuOTE2IDQuODU4IDEwLjk4MyAxMC41NTUuMjQ2IDUuMjEyLTMuNjcgMTAuMzMtOC44NjQgMTEuMjA0LTUuMDI2IDEuMDA3LTEwLjYtMS44OTgtMTIuMzYtNi43NzctMS44OTQtNC44MjYuMDM5LTEwLjkyOCA0LjY0OS0xMy40NmExMS4wODIgMTEuMDgyIDAgMDE1LjU5Mi0xLjUyMnptLjAwNiAzLjQ5MmMtMi4yNjEgNC4wNy00LjUzMiA4LjEzNi02Ljc5NyAxMi4yMDRoMTMuNTk1TDE1Ljk5OSA4LjU1elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDEzKCkgeyByZXR1cm4gX2V4dGVuZHMkMTMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMTMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEVuZEV2ZW50VGVybWluYXRlSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkMTMoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS42NzYuMDUxQzcuOTQzLjA1OC44MzQgNi41MDEuMTA0IDE0LjIxYy0uNzgzIDYuNTY1IDIuOTEyIDEzLjQyNyA4Ljk0MiAxNi4yMTYgNS42IDIuNzM3IDEyLjc4OSAxLjg3IDE3LjQzNC0yLjM0NCA0LjcyNS00LjA5IDYuNzktMTEuMDYgNC43MTQtMTcuMDA2QzI5LjIyIDUuMDA5IDIzLjM5NC4zNjQgMTYuOTc4LjA4M0ExOC41MzIgMTguNTMyIDAgMDAxNS42NzYuMDV6bS4zMTcgNS4wMDZjNS42OTUtLjE2NSAxMC45MTYgNC44NTggMTAuOTgzIDEwLjU1NS4yNDYgNS4yMTItMy42NyAxMC4zMy04Ljg2NCAxMS4yMDQtNS4wMjYgMS4wMDctMTAuNi0xLjg5OC0xMi4zNi02Ljc3Ny0xLjg5NC00LjgyNi4wMzktMTAuOTI4IDQuNjQ5LTEzLjQ2YTExLjA4MiAxMS4wODIgMCAwMTUuNTkyLTEuNTIyem0uMDA2IDIuODU5Yy01LjI2NC0uMi05LjQ5NSA1LjU1MS03Ljc1NSAxMC41MTYgMS4zNjYgNS4wODUgOC4xMDggNy40MzYgMTIuMzM5IDQuMzAxIDQuNDU1LTIuODA3IDQuNzA4LTkuOTQzLjQ2Mi0xMy4wNThBOC4xMjggOC4xMjggMCAwMDE2IDcuOTE1elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDEyKCkgeyByZXR1cm4gX2V4dGVuZHMkMTIgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMTIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEV2ZW50U3ViUHJvY2Vzc0V4cGFuZGVkSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkMTIoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk03LjI5NSA0Ljc4aDEuNzc5VjMuMDAzaC0xLjc4VjQuNzh6bTMuNTU4IDBoMS43NzlWMy4wMDNoLTEuNzhWNC43OHptMy41NTcgMGgxLjc4VjMuMDAzaC0xLjc4VjQuNzh6bTMuNTU4IDBoMS43OFYzLjAwM2gtMS43OFY0Ljc4em0zLjU1OCAwaDEuNzc5VjMuMDAzaC0xLjc3OVY0Ljc4em0zLjU1OCAwYy41NS4wMTQgMS4xMDYtLjAzNCAxLjY1NC4wNDVsLjI0NS0xLjc2MmMtLjYyOS0uMDk2LTEuMjY2LS4wNS0xLjktLjA2MVY0Ljc4ek01LjczMiAzLjAwNGE1LjkzMyA1LjkzMyAwIDAwLS45MTUuMDkzYy4xMTEuNTgyLjIyNiAxLjE2NC4zMTUgMS43NS4zNTgtLjEwMS45NDcuMDk4Ljc0Ni0uNDgzLS4wOTYtLjM4Mi4xNjQtMS4yMDgtLjE0Ni0xLjM2em0yMi4zNzIgMi4yODFjLjQyNy4yMzQuODEyLjU0NyAxLjEzLjkxNS40Mi0uNCAxLjAwMi0uNzc3IDEuMzMtMS4xOGE1Ljg2MyA1Ljg2MyAwIDAwLTEuNTkzLTEuMjg5bC0uODY3IDEuNTU0em0tMjUuMjctMS40NGMtLjU4Ny4zNTQtMS4xMS44MTEtMS41MzkgMS4zNDUuNDcuMzMzLjk2Ljg2IDEuNDE3IDEuMDc3LjI5OS0uMzYyLjY2LS42NzMgMS4wNjUtLjkxMy0uMzI4LS40OTMtLjU1LTEuMDU1LS45NDQtMS41MDl6TTMwLjUxNSA3LjI2Yy0uNTYzLjA0Ni0uNTU3LjM0Mi0uMzc4Ljc4NC4xNTQuMjUtLjA5Ny44NjIuMjUuODUuNTI1LS4wMjMgMS4xNC4wNDMgMS42MTItLjAzMmE1Ljg5MSA1Ljg5MSAwIDAwLS4zNjItMi4wMjdsLTEuMTIyLjQyNXpNLjI2OCA3LjExNEE2LjA0MiA2LjA0MiAwIDAwMCA5LjA1MmgxLjc4Yy0uMDEzLS41LjA0Ny0xLjAwMy4yMDgtMS40NzhMLjI5NiA3LjAyN2wtLjAyNi4wNzktLjAwMi4wMDh6TTMwLjIyIDEyLjQ1SDMydi0xLjc3OWgtMS43Nzl2MS43Nzl6bS0zMC4yMi4xNmgxLjc4di0xLjc3OUgwdjEuNzh6bTMwLjIyIDMuMzk4SDMydi0xLjc4aC0xLjc3OXYxLjc4em0tMzAuMjIuMTZoMS43OHYtMS43NzlIMHYxLjc3OXptMzAuMjIgMy4zOThIMzJ2LTEuNzhoLTEuNzc5djEuNzh6bS0zMC4yMi4xNmgxLjc4di0xLjc4SDB2MS43OHptMzAuMjIgMy4zOTdIMzJ2LTEuNzc5aC0xLjc3OXYxLjc4em0tMzAuMjIuMTZoMS43OHYtMS43NzhIMHYxLjc3OHptMzAuMTM3IDEuNDdhNC4wNTkgNC4wNTkgMCAwMS0uNTIyIDEuMzJjLjUwNi4yODMgMS4wNDYuNzE1IDEuNTMuOTA4YTUuODM2IDUuODM2IDAgMDAuNzQ0LTEuOTE4Yy0uNTc2LS4wOTQtMS4yMDktLjI2NC0xLjc1Mi0uMzF6bS0yOS45ODQuNTFjLjE1Ny42NzYuNDM1IDEuMzI1LjgyIDEuOTA0bDEuNDg2LS45NzdhNC4wNjUgNC4wNjUgMCAwMS0uNTc3LTEuMzQ3bC0xLjczLjQyem0yOC40MjcgMS45NDNjLS4zNzEuMjc3LS43OS40OS0xLjIzNC42MjdsLjU0OCAxLjY5M2E1Ljg0IDUuODQgMCAwMDEuODM1LS45NmwtMS4wODItMS40MTItLjA2Ni4wNS0uMDAxLjAwMnptLTI2LjE2NCAxLjQ3Yy41NjcuNDEzIDEuMjEuNzIyIDEuODg2LjkwNy4xNC0uNTY5LjM0My0xLjE3NS40NDQtMS43MjJhNC4wNjIgNC4wNjIgMCAwMS0xLjI4My0uNjI0bC0xLjA0NyAxLjQzOHptMy44OCAxLjExOWgxLjc3OXYtMS43OGgtMS43OHYxLjc4em0zLjU1IDBoMS43ODd2LTEuNzhIOS44NDZ2MS43OHptMy41NjUgMGgxLjc4di0xLjc4aC0xLjc4djEuNzh6bTMuNTU4IDBoMS43OHYtMS43OGgtMS43OHYxLjc4em0zLjQ1MSAwaDEuNzQzdi0xLjc4aC0xLjc0M3YxLjc4em0zLjY2NSAwaDEuNzc5di0xLjc4aC0xLjc4djEuNzh6bS0xLjkyMi0uNTQ1VjE2Ljc3Nkg5Ljg0NlYyOS4yNWgxMi4zMTh6TTEwLjk2NyAxNy45MDVoMTAuMDY4VjI3Ljk3SDEwLjk2N1YxNy45MDV6bTEuMzM2IDMuOTk4djEuNzExaDcuMzk2di0xLjcxMWgtNy4zOTZ6XCIsXG4gIG9wYWNpdHk6IFwiLjk3XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkMTEoKSB7IHJldHVybiBfZXh0ZW5kcyQxMSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQxMS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgR2F0ZXdheUNvbXBsZXhJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxMSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2LjAwMSAwYTEuMjkgMS4yOSAwIDAwLS45MTcuMzczTC4zNzMgMTUuMDg0YTEuMzE2IDEuMzE2IDAgMDAuMDAyIDEuODM0bDE0LjcxIDE0LjcwOWExLjMxMyAxLjMxMyAwIDAwMS44MzMgMGwxNC43MTEtMTQuNzExYTEuMzE2IDEuMzE2IDAgMDAtLjAwMi0xLjgzNEwxNi45MTcuMzcyQTEuMjk0IDEuMjk0IDAgMDAxNi4wMDIgMHpNMTYgMi4xODFsMTMuODIxIDEzLjgyMUwxNiAyOS44MjMgMi4xNzkgMTYuMDAzIDE2IDIuMTh6bS0uMzI3IDYuNzl2LjAwN2wtLjE0NS4wMjctLjExOC4wOC0uMDgzLjEyMy0uMDI4LjE0NXY0Ljk1NEwxMS43OTMgMTAuOGwtLjEyNS0uMDgtLjE0LS4wMjktLjE0NC4wMjctLjEyMi4wODItLjQ2LjQ2LS4wODUuMTI1LS4wMjYuMTQyLjAyOC4xNC4wOC4xMjUgMy41MDUgMy41MDVIOS4zNDdsLS4wMDEtLjAwMi0uMTQ1LjAzMi0uMTE4LjA4LS4wODMuMTIyLS4wMjguMTQ2di42NTJsLjAyOS4xNDcuMDgyLjExOS4xMi4wOC4xNDQuMDMyaDQuOTU2TDEwLjggMjAuMjA3di0uMDAxbC0uMDg0LjEyNC0uMDI2LjE0Mi4wMjguMTQuMDguMTI0LjQ2LjQ2MS4xMjYuMDgyLjE0LjAyOS4xNDMtLjAyNy4xMjQtLjA4NEwxNS4zIDE3LjY5djQuOTY0LS4wMDFsLjAyOC4xNDcuMDgyLjEyLjEyLjA4LjE0NC4wMzFoLjY1MmwuMTQ4LS4wMy4xMTgtLjA4LjA4My0uMTIuMDI4LS4xNDZ2LTQuOTYybDMuNTA1IDMuNTA1LjEyNi4wODIuMTQuMDI3LjE0Mi0uMDI3LjEyNC0uMDg0LjQ2MS0uNDYuMDgzLS4xMjNzLjAyOC0uMTQ0LjAyNy0uMTQ2bC0uMDI4LS4xNC0uMDgyLS4xMjYtMy40OTYtMy40OTZoNC45NDhsLjE0OC0uMDMuMTE5LS4wOC4wODItLjEyLjAyOC0uMTQ3di0uNjUybC0uMDI4LS4xNDUtLjA4My0uMTIyLS4xMTktLjA4cy0uMTQ3LS4wMzMtLjE0Ny0uMDMxaC00Ljk2NGwzLjUxMi0zLjUxMi4wODItLjEyMi4wMjktLjE0NC0uMDI4LS4xNC0uMDg0LS4xMjQtLjQ2LS40NjEtLjEyMy0uMDgyLS4xNC0uMDI3LS4xNDUuMDI3LS4xMjIuMDgyLTMuNTA3IDMuNTA3VjkuMzQ4bC0uMDI4LS4xNDYtLjA4Mi0uMTIyLS4xMi0uMDgtLjE0Ny0uMDI5aC0uNjUyelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJDEwKCkgeyByZXR1cm4gX2V4dGVuZHMkMTAgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMTAuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEdhdGV3YXlFdmVudEJhc2VkSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkMTAoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNiAwYTEuMjkgMS4yOSAwIDAwLS45MTguMzczTC4zNzEgMTUuMDg0YTEuMzE2IDEuMzE2IDAgMDAuMDAyIDEuODM0bDE0LjcxIDE0LjcwOWExLjMxMyAxLjMxMyAwIDAwMS44MzMgMGwxNC43MTEtMTQuNzExYTEuMzE2IDEuMzE2IDAgMDAtLjAwMi0xLjgzNEwxNi45MTUuMzcyQTEuMjk0IDEuMjk0IDAgMDAxNiAwem0tLjAwMiAyLjE4MWwxMy44MjEgMTMuODIxLTEzLjgyMSAxMy44MjEtMTMuODIxLTEzLjgyTDE1Ljk5OCAyLjE4em0wIDUuODc2bC0uMjU0LjE4NS03LjM3NyA1LjM1NSAyLjkxNSA4Ljk2NGg5LjQzM2wyLjkxNS04Ljk2NC03LjYzMS01LjU0em0wIDEuMDdsNi42MTQgNC44LTIuNTI2IDcuNzY5aC04LjE3NWwtMi41MjYtNy43NjggNi42MTQtNC44MDJ6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkJCgpIHsgcmV0dXJuIF9leHRlbmRzJCQgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkJC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgR2F0ZXdheU5vbmVJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQkKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNLjM3MyAxNS4wODRhMS4zMTYgMS4zMTYgMCAwMC4wMDIgMS44MzRsMTQuNzEgMTQuNzA5YTEuMzEzIDEuMzEzIDAgMDAxLjgzMyAwbDE0LjcxMS0xNC43MTFhMS4zMTYgMS4zMTYgMCAwMC0uMDAyLTEuODM0TDE2LjkxNy4zNzNhMS4zMTMgMS4zMTMgMCAwMC0xLjgzMyAwTC4zNzMgMTUuMDg0em0xLjgwNi45MThMMTYgMi4xODJsMTMuODIxIDEzLjgyTDE2IDI5LjgyMyAyLjE3OSAxNi4wMDN6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkXygpIHsgcmV0dXJuIF9leHRlbmRzJF8gPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkXy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgR2F0ZXdheU9ySWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkXyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2LjAwMSAwYTEuMjkgMS4yOSAwIDAwLS45MTcuMzczTC4zNzMgMTUuMDg0YTEuMzE2IDEuMzE2IDAgMDAuMDAyIDEuODM0bDE0LjcxIDE0LjcwOWExLjMxMyAxLjMxMyAwIDAwMS44MzMgMGwxNC43MTEtMTQuNzExYTEuMzE2IDEuMzE2IDAgMDAtLjAwMi0xLjgzNEwxNi45MTcuMzcyQTEuMjk0IDEuMjk0IDAgMDAxNi4wMDIgMHpNMTYgMi4xODFsMTMuODIxIDEzLjgyMUwxNiAyOS44MjMgMi4xNzkgMTYuMDAzIDE2IDIuMTh6bTAgNi4zNzlhNy40NDcgNy40NDcgMCAwMC03LjQ0IDcuNDQxQTcuNDQ3IDcuNDQ3IDAgMDAxNiAyMy40NDMgNy40NDcgNy40NDcgMCAwMDIzLjQ0MyAxNmE3LjQ0NyA3LjQ0NyAwIDAwLTcuNDQxLTcuNDQxem0wIC44MjVhNi42MSA2LjYxIDAgMDE2LjYxNyA2LjYxNkE2LjYxIDYuNjEgMCAwMTE2IDIyLjYxOCA2LjYxIDYuNjEgMCAwMTkuMzg1IDE2IDYuNjEgNi42MSAwIDAxMTYgOS4zODV6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkWigpIHsgcmV0dXJuIF9leHRlbmRzJFogPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkWi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgR2F0ZXdheVBhcmFsbGVsSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkWih7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2LjAwMSAwYTEuMjkgMS4yOSAwIDAwLS45MTcuMzczTC4zNzMgMTUuMDg0YTEuMzE2IDEuMzE2IDAgMDAuMDAyIDEuODM0bDE0LjcxIDE0LjcwOWExLjMxMyAxLjMxMyAwIDAwMS44MzMgMGwxNC43MTEtMTQuNzExYTEuMzE2IDEuMzE2IDAgMDAtLjAwMi0xLjgzNEwxNi45MTcuMzcyQTEuMjk0IDEuMjk0IDAgMDAxNi4wMDIgMHpNMTYgMi4xODFsMTMuODIxIDEzLjgyMUwxNiAyOS44MjMgMi4xNzkgMTYuMDAzIDE2IDIuMTh6bS0uMzc3IDUuNzA4bC0uMTY4LjAzMi0uMTM2LjA5Mi0uMDk2LjE0LS4wMzIuMTY4djYuODY4aC02Ljg3bC0uMDAyLS4wMDItLjE2Ni4wMzctLjEzNy4wOTJ2LS4wMDJsLS4wOTUuMTQxLS4wMzMuMTY3di43NTNzLjAzMi4xNjkuMDM0LjE3bC4wOTQuMTM4LjEzOC4wOTIuMTY3LjAzNmg2Ljg3djYuODY3bC0uMDAxLS4wMDEuMDMzLjE3LjA5NS4xMzguMTM4LjA5MnMuMTY2LjAzNS4xNjcuMDM3aC43NTJsLjE3LS4wMzYuMTM3LS4wOTIuMDk1LS4xMzcuMDMzLS4xN3YtNi44NjdoNi44NjhsLjE3LS4wMzUuMTM3LS4wOTIuMDk1LS4xMzcuMDMzLS4xN3YtLjc1M3MtLjAzMy0uMTY1LS4wMzItLjE2N2wtLjA5Ni0uMTQtLjEzOC0uMDkzcy0uMTctLjAzNy0uMTctLjAzNUgxNi44MVY4LjMyM2wtLjAzMy0uMTY4LS4wOTQtLjE0LS4xMzgtLjA5Mi0uMTctLjAzNGgtLjc1MnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRZKCkgeyByZXR1cm4gX2V4dGVuZHMkWSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRZLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBHYXRld2F5WG9ySWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkWSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2IDBhMS4yOSAxLjI5IDAgMDAtLjkxOC4zNzNMLjM3MSAxNS4wODRhMS4zMTYgMS4zMTYgMCAwMC4wMDIgMS44MzRsMTQuNzEgMTQuNzA5YTEuMzEzIDEuMzEzIDAgMDAxLjgzMyAwbDE0LjcxMS0xNC43MTFhMS4zMTYgMS4zMTYgMCAwMC0uMDAyLTEuODM0TDE2LjkxNS4zNzJBMS4yOTQgMS4yOTQgMCAwMDE2IDB6bS0uMDAyIDIuMTgxbDEzLjgyMSAxMy44MjEtMTMuODIxIDEzLjgyMS0xMy44MjEtMTMuODJMMTUuOTk4IDIuMTh6bS01LjE2MiA3LjY5bC0uMTY2LjAzMi0uMTQxLjA5Ni0uNTMyLjUzMnMtLjA5Ny4xNDItLjA5Ny4xNDRsLS4wMy4xNjQuMDMyLjE2Mi4wOTMuMTQ0IDQuODU3IDQuODU4LTQuODU1IDQuODU1di0uMDAxTDkuOSAyMWwtLjAzLjE2NC4wMzIuMTYycy4wOTMuMTQyLjA5My4xNDRsLjUzMS41MzIuMTQ2LjA5NS4xNjIuMDMyLjE2NC0uMDMuMTQ0LS4wOTcgNC44NTUtNC44NTYgNC44NTcgNC44NTcuMTQ1LjA5NS4xNjIuMDMyLjE2NC0uMDMuMTQ0LS4wOTcuNTMxLS41MzIuMDk1LS4xNC4wMzMtLjE2OC0uMDMzLS4xNjItLjA5NS0uMTQ2TDE3LjE0NCAxNiAyMiAxMS4xNDRsLjA5NS0uMTQuMDMzLS4xNjYtLjAzMy0uMTYzLS4wOTctLjE0NC0uNTMyLS41MzItLjE0LS4wOTUtLjE2My0uMDMyLS4xNjYuMDMyLS4xNDEuMDk1TDE2IDE0Ljg1NWwtNC44NTgtNC44NTh2LS4wMDJsLS4xNDQtLjA5Mi0uMTYyLS4wMzJ6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkWCgpIHsgcmV0dXJuIF9leHRlbmRzJFggPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkWC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgR3JvdXBJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRYKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNi4zNC4wMTZjLTIuMzMzLjAyNS00LjY4NCAxLjc3LTUuMjkgNC4xN0MuNjA4IDUuODQ4Ljg4IDcuNjA4LjgwNCA5LjMxNHYyLjkyMmgyLjA0MWMuMDM4LTIuMzMyLS4wNzYtNC42NzMuMDYyLTdDMy4xNCAzLjM1NSA0Ljg2OSAxLjkzOCA2LjY0MyAyLjA0aDguOTU2Vi4wMDljLTMuMDg2IDAtNi4xNzMtLjAyLTkuMjU4IDB2LjAwN3ptMTMuMDk0IDIuMDIzaDEuOTJWLjAwOWgtMS45MnYyLjAzem01Ljc1NiAwYzEuMjY1LS4wNjkgMi42Ni4wNDUgMy42MDIgMS4wNTUgMS4wMzYuOTgzIDEuMjAxIDIuNTIzIDEuMTIyIDMuOTF2Ni4zMTNoMi4wNzhjLS4wMy0yLjY3Ny4wNjItNS4zNi0uMDQ3LTguMDMyLS4xNy0yLjc0My0yLjYyLTUuMTExLTUuMjE1LTUuMjM2LS41MTEtLjA2NC0xLjAyNy0uMDItMS41NC0uMDMzdjIuMDIzek0uODAzIDE4LjMxOWgyLjA0MXYtMi4wMjZILjgwNHYyLjAyNnptMjkuMTEgMS4wODRoMi4wOHYtMi4wM2gtMi4wOHYyLjAzek0uODA0IDI2LjE0OGMuMDA0IDIuMjE4IDEuMzkzIDQuMzY2IDMuMzEzIDUuMjggMS43MjguODUzIDMuNjgxLjQ0OCA1LjUyMS41NDQuNDMtLjExMiAxLjI5LjIzMSAxLjQzNS0uMTgzdi0xLjg0N2MtMS43ODgtLjA0My0zLjU4NC4wOTQtNS4zNjUtLjA4Mi0xLjY3LS4zNTQtMi45MTktMi4wNDgtMi44NjMtMy44NDR2LTMuNjQ0SC44MDR2My43Nzd6bTI5LjExLS4wNjhjLjA0IDEuOTYxLTEuNTA4IDMuNzg3LTMuMzgxIDMuODQyLTEuOTU0LjA2LTMuOTE0LjAyLTUuODcuMDI2djIuMDNjMi4xMTgtLjA0MiA0LjI0Mi4wOCA2LjM1NS0uMDYzIDIuNTI0LS4yNjQgNC44MTgtMi42NDQgNC45NC01LjMyMy4wOC0xLjAzOS4wMTQtMi4wODUuMDM1LTMuMTI2aC0yLjA3OHYyLjYxM3ptLTE1LjAwNiA1Ljg5OGgxLjkydi0yLjAzaC0xLjkydjIuMDN6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkVygpIHsgcmV0dXJuIF9leHRlbmRzJFcgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkVy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRDYXRjaENhbmNlbEljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJFcoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45NzUuMDQ5QzguMTk1LS4xMTEuOTM1IDYuMjg2LjEyNSAxNC4wM2MtLjg1NSA2LjU1IDIuNzQxIDEzLjQ2IDguNzQgMTYuMzE0IDUuNjY2IDIuODQ3IDEzLjAxMiAxLjk5IDE3LjcxLTIuMzMgNC43NDUtNC4xNjIgNi43MjctMTEuMjQzIDQuNTMyLTE3LjIwNkMyOS4wOSA0LjkzIDIzLjQ0NS40NTQgMTcuMjAxLjA5NWMtLjQwOC0uMDMtLjgxNy0uMDQ2LTEuMjI2LS4wNDZ6bS0uMTgxIDEuNzI0YzcuMTM0LS4yNjkgMTMuODQgNS42OCAxNC4zOTkgMTIuODA0LjY4NiA2LjI4My0zLjI2NyAxMi43OTItOS4yODMgMTQuODYyLTUuODQ3IDIuMTYyLTEzLjAyNS4wNi0xNi41NTctNS4xNDFDLjcyOCAxOS4yMi44NzIgMTEuNzI1IDQuOTg1IDYuOTYyYzIuNjMyLTMuMTcxIDYuNjcxLTUuMTc0IDEwLjgwOS01LjE5em0uMjgzIDEuNTUzYy02LjYtLjIxLTEyLjY3MSA1LjU4NS0xMi43OSAxMi4xODUtLjI5MiA1Ljk2NCA0LjEyOSAxMS44MTcgMTAuMDM0IDEyLjk1MyA1LjQ3IDEuMTk4IDExLjU4NC0xLjYxMyAxNC4wMjUtNi43MDIgMi41MjUtNC45NyAxLjM5Ni0xMS41ODUtMi45MTItMTUuMjE1LTIuMjgyLTIuMDIyLTUuMy0zLjIxNy04LjM1Ny0zLjIyek0xNiA1LjAyMWM1LjgxOC0uMTU0IDExLjExNyA1LjA4MiAxMS4wMjQgMTAuOTA1LjEwMyA1LjM4NC00LjIzIDEwLjUtOS42MzYgMTEuMDQzLTUuMDc1LjY2Ny0xMC40MjYtMi41ODctMTEuODg1LTcuNTUyLTEuNTMtNC43My40OC0xMC40MjggNC44ODgtMTIuODY0QTExLjA4MiAxMS4wODIgMCAwMTE2IDUuMDIxem0tMy45NTYgMy45NDZsLTMuMDk2IDMuMDk3IDMuOTg1IDMuOTg1LTMuOTEzIDMuOTEzIDMuMDQ3IDMuMDQ4IDMuOTEzLTMuOTEzIDMuOTg4IDMuOTg3IDMuMDk3LTMuMDk2TDE5LjA3NiAxNmwzLjkxNC0zLjkxMy0zLjA0OC0zLjA0OC0zLjkxMyAzLjkxMy0zLjk4Ni0zLjk4NXptLS4wMDIgMS4yMjJsMy45ODggMy45ODcgMy45MTMtMy45MTMgMS44MjYgMS44MjYtMy45MTMgMy45MTMgMy45ODUgMy45ODYtMS44NzMgMS44NzMtMy45ODUtMy45ODUtMy45MTMgMy45MTMtMS44MjctMS44MjcgMy45MTQtMy45MTMtMy45ODgtMy45ODcgMS44NzMtMS44NzN6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkVigpIHsgcmV0dXJuIF9leHRlbmRzJFYgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkVi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRDYXRjaENvbXBlbnNhdGlvbkljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJFYoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45NzUuMDQ5QzguMTk1LS4xMS45MzUgNi4yODYuMTI1IDE0LjAzYy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuOTMgMjMuNDQ1LjQ1MyAxNy4yMDEuMDk1Yy0uNDA4LS4wMy0uODE3LS4wNDYtMS4yMjYtLjA0NnptLS4xODEgMS43MjRjNy4xMzQtLjI2OSAxMy44NCA1LjY4IDE0LjM5OSAxMi44MDQuNjg2IDYuMjgzLTMuMjY3IDEyLjc5Mi05LjI4MyAxNC44NjItNS44NDcgMi4xNjItMTMuMDI1LjA2LTE2LjU1Ny01LjE0MUMuNzI4IDE5LjIyLjg3MiAxMS43MjUgNC45ODUgNi45NjJjMi42MzItMy4xNzEgNi42NzEtNS4xNzQgMTAuODA5LTUuMTl6bS4yODMgMS41NTNjLTYuNi0uMjEtMTIuNjcxIDUuNTg1LTEyLjc5IDEyLjE4NS0uMjkyIDUuOTY0IDQuMTI5IDExLjgxNyAxMC4wMzQgMTIuOTUzIDUuNDcgMS4xOTggMTEuNTg0LTEuNjEzIDE0LjAyNS02LjcwMiAyLjUyNS00Ljk3IDEuMzk2LTExLjU4NS0yLjkxMi0xNS4yMTYtMi4yODItMi4wMjEtNS4zLTMuMjE2LTguMzU3LTMuMjJ6TTE2IDUuMDIxYzUuODE4LS4xNTQgMTEuMTE3IDUuMDgyIDExLjAyNCAxMC45MDUuMTAzIDUuMzg0LTQuMjMgMTAuNS05LjYzNiAxMS4wNDMtNS4wNzUuNjY3LTEwLjQyNi0yLjU4Ny0xMS44ODUtNy41NTItMS41My00LjczLjQ4LTEwLjQyOCA0Ljg4OC0xMi44NjRBMTEuMDgzIDExLjA4MyAwIDAxMTYgNS4wMjF6bS0uNTYgNS43NzJsLTcuNDA4IDUuMjMxIDcuNDA5IDUuMjM0di01LjA1N2MyLjM4NSAxLjY4NyA0Ljc3MSAzLjM3MSA3LjE1NyA1LjA1N1YxMC43OTNsLTcuMTU3IDUuMDU1di01LjA1NXptLS44NjUgMS42NjV2Ny4xMjVsLTUuMDQ4LTMuNTYyIDUuMDQ4LTMuNTYzem03LjE2MSAwdjcuMTMybC01LjA0OC0zLjU2NiA1LjA0OC0zLjU2NnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRVKCkgeyByZXR1cm4gX2V4dGVuZHMkVSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRVLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBJbnRlcm1lZGlhdGVFdmVudENhdGNoQ29uZGl0aW9uSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkVSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk3LjA0aC0uMTI3QzguNzEzLS4wMTggMi4wMDMgNS4zMzQuNDM3IDEyLjI4NmMtMS41MSA2LjEyMy45OCAxMy4wMDUgNi4xMzYgMTYuNjY1IDUuMTI1IDMuNzg4IDEyLjU0NiA0LjEwNSAxNy45MTIuNjIzIDUuMjcyLTMuMjc2IDguMzMtOS43NjYgNy4zMjUtMTUuOTE2LS45MDQtNi4yNDEtNS43OS0xMS43LTExLjk1LTEzLjE0M0ExNi4wODIgMTYuMDgyIDAgMDAxNS45Ny4wNHptLS4xODEgMS43MjRjLjExNSAwIC4yMyAwIC4zNDcuMDAzIDYuNjI1LS4wNjYgMTIuODIzIDUuMTQ5IDEzLjg5IDExLjY5IDEuMTMgNS45MS0xLjkwOCAxMi4zNDktNy4yNjIgMTUuMTM4LTUuNDczIDMuMDEzLTEyLjg2NiAxLjg4NC0xNy4xMTYtMi43MjZDMS4yOTEgMjEuMzcyLjQ0NCAxMy45MTQgMy44MDIgOC42MDJjMi40OTMtNC4xMTIgNy4xNjktNi44MTkgMTEuOTg3LTYuODM4em0uMjgzIDEuNTU0Yy0uMTE3IDAtLjIzNC4wMDItLjM1MS4wMDUtNi4xIDAtMTEuNjkxIDUuMDQ5LTEyLjM0NiAxMS4xMTQtLjc4IDUuNjg0IDIuNzk1IDExLjYxMiA4LjIxOCAxMy41MiA1LjEzOSAxLjk0MyAxMS40MTYuMTAxIDE0LjYyNC00LjM4IDMuNDYxLTQuNTgzIDMuMjYyLTExLjUzOC0uNTk2LTE1LjgzMS0yLjM2LTIuNzQ3LTUuOTI0LTQuNDIzLTkuNTQ5LTQuNDI4em0tLjA3OCAxLjY5NWMuMDc4IDAgLjE1NiAwIC4yMzQuMDAzIDUuNCAwIDEwLjMyMSA0LjU1NiAxMC43MzQgOS45NDIuNTYzIDUuMTMtMi45NTggMTAuMzY0LTcuOTcxIDExLjY3OC00LjgzMiAxLjQxLTEwLjQ1Ny0uOTM1LTEyLjc0Ni01LjQ0Ni0yLjQ2My00LjU1OS0xLjItMTAuNzk1IDMuMDE0LTEzLjg4M2ExMS4wNzIgMTEuMDcyIDAgMDE2LjczNS0yLjI5NHptLTUuMzUyIDQuMjY2VjIyLjc2MWgxMC43MTZWOS4yNzlIMTAuNjQyem0uODYzLjg2Nmg4Ljk4N3YxMS43NWgtOC45ODd2LTExLjc1em0uOTI3IDEuMzIzdi44NjJoNy4xMzN2LS44NjJoLTcuMTMzem0wIDIuNjAydi44NjZoNy4xMzN2LS44NjZoLTcuMTMzem0wIDMuMDA4di44NjJoNy4xMzN2LS44NjJoLTcuMTMzem0wIDIuNzE3di44NjNoNy4xMzN2LS44NjNoLTcuMTMzelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJFQoKSB7IHJldHVybiBfZXh0ZW5kcyRUID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJFQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hFcnJvckljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJFQoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45NzUuMDQ5QzguMTk1LS4xMS45MzUgNi4yODYuMTI1IDE0LjAzYy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuOTMgMjMuNDQ1LjQ1MyAxNy4yMDEuMDk1Yy0uNDA4LS4wMy0uODE3LS4wNDYtMS4yMjYtLjA0NnptLS4xODEgMS43MjRjNy4xMzQtLjI2OSAxMy44NCA1LjY4IDE0LjM5OSAxMi44MDQuNjg2IDYuMjgzLTMuMjY3IDEyLjc5Mi05LjI4MyAxNC44NjItNS44NDcgMi4xNjItMTMuMDI1LjA2LTE2LjU1Ny01LjE0MUMuNzI4IDE5LjIyLjg3MiAxMS43MjUgNC45ODUgNi45NjJjMi42MzItMy4xNzEgNi42NzEtNS4xNzQgMTAuODA5LTUuMTl6bS4yODMgMS41NTNjLTYuNi0uMjEtMTIuNjcxIDUuNTg1LTEyLjc5IDEyLjE4NS0uMjkyIDUuOTY0IDQuMTI5IDExLjgxNyAxMC4wMzQgMTIuOTUzIDUuNDcgMS4xOTggMTEuNTg0LTEuNjEzIDE0LjAyNS02LjcwMiAyLjUyNS00Ljk3IDEuMzk2LTExLjU4NS0yLjkxMi0xNS4yMTYtMi4yODItMi4wMjEtNS4zLTMuMjE2LTguMzU3LTMuMjJ6TTE2IDUuMDIxYzUuODE4LS4xNTQgMTEuMTE3IDUuMDgyIDExLjAyNCAxMC45MDUuMTAzIDUuMzg0LTQuMjMgMTAuNS05LjYzNiAxMS4wNDMtNS4wNzUuNjY3LTEwLjQyNi0yLjU4Ny0xMS44ODUtNy41NTItMS41My00LjczLjQ4LTEwLjQyOCA0Ljg4OC0xMi44NjRBMTEuMDgzIDExLjA4MyAwIDAxMTYgNS4wMjF6bTYuMTMyIDQuMTk0Yy0xLjIxIDIuNDU1LTIuNDIyIDQuOTEtMy42MzMgNy4zNjRsLTQuNTE2LTUuODc1LTQuMTAzIDEyLjEzMyA0LjYtNS45MTJjMS41OCAxLjgxIDMuMTYyIDMuNjE5IDQuNzQ0IDUuNDI5TDIyLjEzIDkuMjE1ek0xNC4zODMgMTMuMWw0LjI5NSA1LjQ0NSAxLjA3My0yLjM4Ny0xLjAyNyA0LjEzMS00LjM4NC01LjE1Ny0xLjc3OCAyLjc1IDEuODIxLTQuNzgyelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJFMoKSB7IHJldHVybiBfZXh0ZW5kcyRTID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJFMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hFc2NhbGF0aW9uSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkUyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk3NS4wNDlDOC4xOTUtLjExLjkzNSA2LjI4Ni4xMjUgMTQuMDNjLS44NTUgNi41NSAyLjc0MSAxMy40NiA4Ljc0IDE2LjMxNCA1LjY2NiAyLjg0NyAxMy4wMTIgMS45OSAxNy43MS0yLjMzIDQuNzQ1LTQuMTYyIDYuNzI3LTExLjI0MyA0LjUzMi0xNy4yMDZDMjkuMDkgNC45MyAyMy40NDUuNDUzIDE3LjIwMS4wOTVjLS40MDgtLjAzLS44MTctLjA0Ni0xLjIyNi0uMDQ2em0tLjE4MSAxLjcyNGM3LjEzNC0uMjY5IDEzLjg0IDUuNjggMTQuMzk5IDEyLjgwNC42ODYgNi4yODMtMy4yNjcgMTIuNzkyLTkuMjgzIDE0Ljg2Mi01Ljg0NyAyLjE2Mi0xMy4wMjUuMDYtMTYuNTU3LTUuMTQxQy43MjggMTkuMjIuODcyIDExLjcyNSA0Ljk4NSA2Ljk2MmMyLjYzMi0zLjE3MSA2LjY3MS01LjE3NCAxMC44MDktNS4xOXptLjI4MyAxLjU1M2MtNi42LS4yMS0xMi42NzEgNS41ODUtMTIuNzkgMTIuMTg1LS4yOTIgNS45NjQgNC4xMjkgMTEuODE3IDEwLjAzNCAxMi45NTMgNS40NyAxLjE5OCAxMS41ODQtMS42MTMgMTQuMDI1LTYuNzAyIDIuNTI1LTQuOTcgMS4zOTYtMTEuNTg1LTIuOTEyLTE1LjIxNi0yLjI4Mi0yLjAyMS01LjMtMy4yMTYtOC4zNTctMy4yMnpNMTYgNS4wMjFjNS44MTgtLjE1NCAxMS4xMTcgNS4wODIgMTEuMDI0IDEwLjkwNS4xMDMgNS4zODQtNC4yMyAxMC41LTkuNjM2IDExLjA0My01LjA3NS42NjctMTAuNDI2LTIuNTg3LTExLjg4NS03LjU1Mi0xLjUzLTQuNzMuNDgtMTAuNDI4IDQuODg4LTEyLjg2NEExMS4wODMgMTEuMDgzIDAgMDExNiA1LjAyMXptLjAwNiAzLjkyN2MtMS42NzIgNC42NTQtMi43MzQgOS41MDItNC40MDYgMTQuMTU1IDEuNTM0LTEuNTI1IDIuODcyLTMuMjM0IDQuNDA2LTQuNzU5bDQuNDA2IDQuNzZjLTEuNDk2LTQuNzEtMi45MS05LjQ0Ni00LjQwNi0xNC4xNTZ6bS4wMzIgMi45MjljLjgyMiAyLjU4NiAxLjU5OCA1LjE4NiAyLjQyIDcuNzcxbC0yLjQyLTIuNjEyYy0uNjgyLjU5Ny0yLjQ1MiAyLjg4NC0yLjMzOCAyLjM4OC44Ny0yLjQ4NyAxLjQ0Ny01LjA2NyAyLjMzOC03LjU0N3pcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRSKCkgeyByZXR1cm4gX2V4dGVuZHMkUiA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRSLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBJbnRlcm1lZGlhdGVFdmVudENhdGNoTGlua0ljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJFIoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45NzUuMDQ5QzguMTk1LS4xMS45MzUgNi4yODYuMTI1IDE0LjAzYy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuOTMgMjMuNDQ1LjQ1MyAxNy4yMDEuMDk1Yy0uNDA4LS4wMy0uODE3LS4wNDYtMS4yMjYtLjA0NnptLS4xODEgMS43MjRjNy4xMzQtLjI2OSAxMy44NCA1LjY4IDE0LjM5OSAxMi44MDQuNjg2IDYuMjgzLTMuMjY3IDEyLjc5Mi05LjI4MyAxNC44NjItNS44NDcgMi4xNjItMTMuMDI1LjA2LTE2LjU1Ny01LjE0MUMuNzI4IDE5LjIyLjg3MiAxMS43MjUgNC45ODUgNi45NjJjMi42MzItMy4xNzEgNi42NzEtNS4xNzQgMTAuODA5LTUuMTl6bS4yODMgMS41NTNjLTYuNi0uMjEtMTIuNjcxIDUuNTg1LTEyLjc5IDEyLjE4NS0uMjkyIDUuOTY0IDQuMTI5IDExLjgxNyAxMC4wMzQgMTIuOTUzIDUuNDcgMS4xOTggMTEuNTg0LTEuNjEzIDE0LjAyNS02LjcwMiAyLjUyNS00Ljk3IDEuMzk2LTExLjU4NS0yLjkxMi0xNS4yMTYtMi4yODItMi4wMjEtNS4zLTMuMjE2LTguMzU3LTMuMjJ6TTE2IDUuMDIxYzUuODE4LS4xNTQgMTEuMTE3IDUuMDgyIDExLjAyNCAxMC45MDUuMTAzIDUuMzg0LTQuMjMgMTAuNS05LjYzNiAxMS4wNDMtNS4wNzUuNjY3LTEwLjQyNi0yLjU4Ny0xMS44ODUtNy41NTItMS41My00LjczLjQ4LTEwLjQyOCA0Ljg4OC0xMi44NjRBMTEuMDgzIDExLjA4MyAwIDAxMTYgNS4wMjF6bTEuNzggNC4wOTN2My41NTVIOS43ODV2Ni43MTRoNy45OTR2My41NTRsNS44MjktNi45MTEtNS44My02LjkxMnptLjk3NCAyLjU4NGwzLjYxIDQuMjk1LTMuNjEgNC4yOTR2LTEuOTMzaC03Ljg4di00LjY4OGg3Ljg4di0xLjk2OHpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRRKCkgeyByZXR1cm4gX2V4dGVuZHMkUSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRRLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBJbnRlcm1lZGlhdGVFdmVudENhdGNoTWVzc2FnZUljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJFEoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45NzUuMDQ5QzguMTk1LS4xMS45MzUgNi4yODYuMTI1IDE0LjAzYy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuOTMgMjMuNDQ1LjQ1MyAxNy4yMDEuMDk1Yy0uNDA4LS4wMy0uODE3LS4wNDYtMS4yMjYtLjA0NnptLS4xODEgMS43MjRjNy4xMzQtLjI2OSAxMy44NCA1LjY4IDE0LjM5OSAxMi44MDQuNjg2IDYuMjgzLTMuMjY3IDEyLjc5Mi05LjI4MyAxNC44NjItNS44NDcgMi4xNjItMTMuMDI1LjA2LTE2LjU1Ny01LjE0MUMuNzI4IDE5LjIyLjg3MiAxMS43MjUgNC45ODUgNi45NjJjMi42MzItMy4xNzEgNi42NzEtNS4xNzQgMTAuODA5LTUuMTl6bS4yODMgMS41NTNjLTYuNi0uMjEtMTIuNjcxIDUuNTg1LTEyLjc5IDEyLjE4NS0uMjkyIDUuOTY0IDQuMTI5IDExLjgxNyAxMC4wMzQgMTIuOTUzIDUuNDcgMS4xOTggMTEuNTg0LTEuNjEzIDE0LjAyNS02LjcwMiAyLjUyNS00Ljk3IDEuMzk2LTExLjU4NS0yLjkxMi0xNS4yMTYtMi4yODItMi4wMjEtNS4zLTMuMjE2LTguMzU3LTMuMjJ6TTE2IDUuMDIxYzUuODE4LS4xNTQgMTEuMTE3IDUuMDgyIDExLjAyNCAxMC45MDUuMTAzIDUuMzg0LTQuMjMgMTAuNS05LjYzNiAxMS4wNDMtNS4wNzUuNjY3LTEwLjQyNi0yLjU4Ny0xMS44ODUtNy41NTItMS41My00LjczLjQ4LTEwLjQyOCA0Ljg4OC0xMi44NjRBMTEuMDgzIDExLjA4MyAwIDAxMTYgNS4wMjF6bS03LjI0NSA1LjQ3NXYxMS4wNmgxNC41MDJ2LTExLjA2SDguNzU0em0zLjIyMiAxLjcyOGg4LjA1N2MtMS40MjcuODc4LTIuODU0IDIuODA2LTQuMjgxIDMuMDE2bC0zLjc3Ni0zLjAxNnptOS41NTQgMS4wMTd2Ni41ODdIMTAuNDhWMTMuMjRsNS41MjQgNC40MTQgNS41MjYtNC40MTR6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkUCgpIHsgcmV0dXJuIF9leHRlbmRzJFAgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkUC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE11bHRpcGxlSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkUCh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk3NS4wMDNDOC4xOTUtLjE1Ni45MzUgNi4yNC4xMjUgMTMuOTg1Yy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuODg0IDIzLjQ0NS40MDcgMTcuMjAxLjA0OWMtLjQwOC0uMDMtLjgxNy0uMDQ2LTEuMjI2LS4wNDZ6bS0uMTgxIDEuNzI0YzcuMTM0LS4yNjkgMTMuODQgNS42OCAxNC4zOTkgMTIuODA0LjY4NiA2LjI4My0zLjI2NyAxMi43OTItOS4yODMgMTQuODYyLTUuODQ3IDIuMTYyLTEzLjAyNS4wNi0xNi41NTctNS4xNDFDLjcyOCAxOS4xNzQuODcyIDExLjY3OSA0Ljk4NSA2LjkxNmMyLjYzMi0zLjE3MSA2LjY3MS01LjE3NCAxMC44MDktNS4xOXptLjI4MyAxLjU1M2MtNi42LS4yMS0xMi42NzEgNS41ODUtMTIuNzkgMTIuMTg1LS4yOTIgNS45NjQgNC4xMjkgMTEuODE3IDEwLjAzNCAxMi45NTMgNS40NyAxLjE5OCAxMS41ODQtMS42MTMgMTQuMDI1LTYuNzAyIDIuNTI1LTQuOTcgMS4zOTYtMTEuNTg1LTIuOTEyLTE1LjIxNi0yLjI4Mi0yLjAyMS01LjMtMy4yMTYtOC4zNTctMy4yMnpNMTYgNC45NzVjNS44MTgtLjE1NCAxMS4xMTcgNS4wODIgMTEuMDI0IDEwLjkwNS4xMDMgNS4zODQtNC4yMyAxMC41LTkuNjM2IDExLjA0My01LjA3NS42NjctMTAuNDI2LTIuNTg3LTExLjg4NS03LjU1Mi0xLjUzLTQuNzMuNDgtMTAuNDI4IDQuODg4LTEyLjg2NEExMS4wODMgMTEuMDgzIDAgMDExNiA0Ljk3NXptLjAwNiAzLjA3M2wtNy42MiA1LjUzMSAyLjkxIDguOTVoOS40MmwyLjkxLTguOTUtNy42Mi01LjUzem0wIDEuMDY3bDYuNjA0IDQuNzk0LTIuNTIzIDcuNzU3aC04LjE2MmwtMi41MjItNy43NTcgNi42MDMtNC43OTR6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkTygpIHsgcmV0dXJuIF9leHRlbmRzJE8gPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkTy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE5vbkludGVycnVwdGluZ0NvbmRpdGlvbkljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJE8oe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMC42MzggOS41NjNWMjMuMDU2aDEwLjcyNFY5LjU2M0gxMC42Mzh6bS44NjMuODY2aDguOTk1djExLjc2SDExLjVWMTAuNDN6bS45MjggMS4zMjR2Ljg2Mmg3LjEzOXYtLjg2MmgtNy4xNHptMCAyLjYwNXYuODY2aDcuMTM5di0uODY2aC03LjE0em0wIDMuMDF2Ljg2M2g3LjEzOXYtLjg2M2gtNy4xNHptMCAyLjcydi44NjNoNy4xMzl2LS44NjRoLTcuMTR6TTE1Ljk5OS4zMDhoLS4wMDRsLS4xODguMDAxaC0uMDExbC0uMTg4LjAwNGgtLjAxMUwxNS40MS4zMmgtLjAxMWwtLjE4Ny4wMDhoLS4wMDVMMTUuMi4zM2wtLjE4Ny4wMWgtLjAwNWwtLjAwNS4wMDEtLjE4Ny4wMTNoLS4wMTFMMTQuNjIuMzdoLS4wMWwtLjE4Ni4wMThoLS4wMTFsLS4xODUuMDItLjAwNS4wMDFoLS4wMDZsLS4xODUuMDIyLS4wMDUuMDAxaC0uMDA1bC0uMTg1LjAyNWgtLjAwNWwtLjAwNS4wMDEtLjE4NS4wMjdoLS4wMDVsLS4wMDUuMDAxLS4xODQuMDI5aC0uMDA1bC0uMDA1LjAwMS0uMTgzLjAzMS0uMDA2LjAwMS0uMDA1LjAwMS0uMTgyLjAzMy0uMDA2LjAwMS0uMDA1LjAwMS0uMTgyLjAzNS0uMDA1LjAwMS0uMDA1LjAwMS0uMTgyLjAzOGgtLjAwNWwtLjAwNS4wMDItLjE4MS4wNGgtLjAwNWwtLjAwNS4wMDItLjE4LjA0Mi0uMDA2LjAwMS0uMDA1LjAwMS0uMTguMDQ0LS4wMDUuMDAyaC0uMDA1bC0uMTcuMDQ1LS4xNTIuMDU0LS4xMzkuMDgyLS4xMjEuMTA2LS4xLjEyNy0uMDc0LjE0My0uMDQ2LjE1NS0uMDE3LjE2LjAxMy4xNi4wNDMuMTU2LjA3LjE0NS4wOTcuMTMuMTE5LjEwOC4xMzcuMDg1LjE1LjA1OC4xNTkuMDMuMTYtLjAwMS4xMzMtLjAyMy4xNjUtLjA0My4xNjgtLjA0MS4xNzEtLjA0LjE3MS0uMDM3LjE3Mi0uMDM2LjE3LS4wMzMuMTczLS4wMy4xNy0uMDMuMTc3LS4wMjcuMTcxLS4wMjUuMTc1LS4wMjIuMTc1LS4wMi4xNzUtLjAyLjE3Ni0uMDE2LjE3NS0uMDE0LjE3Ny0uMDEyLjE3Ni0uMDEuMTc3LS4wMDcuMTc0LS4wMDYuMTc3LS4wMDMuMTc4LS4wMDFoLjE3N2wuMTc4LjAwNC4xNzQuMDA2LjE3Ny4wMDcuMTc2LjAxLjE3Ny4wMTIuMTc1LjAxNC4xNzYuMDE3LjE3NS4wMTguMTc1LjAyLjE3NS4wMjMuMTcxLjAyNS4xNzYuMDI3LjE3LjAzLjE3NC4wMy4xNy4wMzMuMTcxLjAzNi4xNTQuMDMzLjE2LjAyLjE2MS0uMDEuMTU2LS4wNC4xNDYtLjA2OS4xMzEtLjA5NC4xMTEtLjExNy4wODctLjEzNS4wNjEtLjE1LjAzMi0uMTU4LjAwMi0uMTYtLjAyNy0uMTYtLjA1Ny0uMTVMMjAgMS4wMjNsLS4xMDgtLjEyLS4xMjgtLjA5Ny0uMTQ1LS4wNzMtLjEyOC0uMDM4LS4xNTgtLjAzNS0uMDA1LS4wMDEtLjAwNS0uMDAxTDE5LjE0LjYyaC0uMDA1bC0uMDA1LS4wMDItLjE4Mi0uMDM1aC0uMDA2TDE4LjkzOC41OGwtLjE4Mi0uMDMzaC0uMDA2bC0uMDA1LS4wMDItLjE4My0uMDMtLjAwNS0uMDAxLS4wMDYtLjAwMS0uMTgzLS4wMjloLS4wMDVsLS4wMDYtLjAwMS0uMTg0LS4wMjdoLS4wMDVsLS4wMDUtLjAwMS0uMTg1LS4wMjRoLS4wMDVMMTcuOTY4LjQzIDE3Ljc4My40MWwtLjAwNi0uMDAxaC0uMDA1bC0uMTg1LS4wMmgtLjAwNmwtLjAwNS0uMDAxTDE3LjM5LjM3aC0uMDA1TDE3LjM4LjM2OGwtLjE4Ny0uMDE1aC0uMDA1bC0uMDA1LS4wMDEtLjE4Ny0uMDEzaC0uMDExTDE2LjguMzI4aC0uMDExTDE2LjYuMzJoLS4wMTFsLS4xODctLjAwNmgtLjAxMUwxNi4yMDQuMzFoLS4wMTFMMTYuMDA1LjMxSDE2em05LjAxNiAyLjkzNWwtLjE2LjAwNC0uMTU4LjAzMy0uMTUuMDYyLS4xMzQuMDktLjExNi4xMTEtLjA5My4xMzItLjA2Ny4xNDctLjAzOC4xNTYtLjAxLjE2MS4wMjIuMTYuMDUuMTUzLjA3OC4xNDEuMTAzLjEyNC4xMDIuMDg3LjA0NS4wMzQuMTQyLjEwNi4xMzcuMTA1LjE0LjExLjEzNi4xMS4xMzUuMTEyLjEzNC4xMTUuMTM0LjExNy4xMy4xMTUuMTMyLjEyMi4xMjguMTIuMTI3LjEyMi4xMjYuMTI1LjEyNC4xMjYuMTI0LjEyOC4xMjEuMTMuMTE4LjEyOC4xMTguMTMyLjExNy4xMzMuMTEzLjEzNC4xMTMuMTM2LjExLjEzNi4xMDkuMTM3LjEwOS4xNDIuMTA0LjE0LjEwMy4xNC4xMDEuMTQyLjEuMTQ0LjA5OS4xNDYuMDk1LjE0NS4wOTQuMTQ3LjA5My4xNS4wOTIuMTUuMDg3LjE0OS4wODcuMTUuMDg0LjE1Mi4wODQuMTU1LjA4LjE1Mi4wOC4xNTUuMDQuMDgxLjA4NC4xMzguMTEuMTE5LjEyOC4wOTYuMTQ1LjA3Mi4xNTUuMDQzLjE2LjAxMy4xNi0uMDE2LjE1NS0uMDQ2LjE0NC0uMDc0LjEyNy0uMDk5LjEwNi0uMTIuMDgzLS4xNC4wNTUtLjE1MS4wMjYtLjE2LS4wMDQtLjE2LS4wMzQtLjE1OC0uMDUtLjEyNC0uMDQyLS4wODUtLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDg0LS4xNjUtLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDg2LS4xNjQtLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDg4LS4xNjItLjAwMi0uMDA1LS4wMDMtLjAwNS0uMDktLjE2MS0uMDAyLS4wMDUtLjAwMy0uMDA0LS4wOTItLjE2LS4wMDMtLjAwNS0uMDAyLS4wMDUtLjA5NC0uMTYtLjAwMy0uMDA0LS4wMDMtLjAwNC0uMDk2LS4xNTktLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDk4LS4xNTctLjAwMy0uMDA0LS4wMDMtLjAwNS0uMS0uMTU2LS4wMDMtLjAwNC0uMDAzLS4wMDUtLjEwMS0uMTU0LS4wMDMtLjAwNS0uMDAzLS4wMDQtLjEwNC0uMTU0LS4wMDMtLjAwNC0uMDAzLS4wMDUtLjEwNi0uMTUyLS4wMDMtLjAwNS0uMDAzLS4wMDQtLjEwOC0uMTUxLS4wMDMtLjAwNC0uMDAzLS4wMDUtLjExLS4xNS0uMDAzLS4wMDQtLjAwMy0uMDA0LS4xMTEtLjE1LS4wMDQtLjAwMy0uMDAzLS4wMDUtLjExMy0uMTQ3LS4wMDQtLjAwNC0uMDAzLS4wMDUtLjExNS0uMTQ2LS4wMDQtLjAwNC0uMDAzLS4wMDQtLjExNy0uMTQ1LS4wMDQtLjAwNC0uMDAzLS4wMDQtLjEyLS4xNDQtLjAwMy0uMDA0LS4wMDMtLjAwNC0uMTIxLS4xNDItLjAwNC0uMDA0LS4wMDMtLjAwNC0uMTIzLS4xNDEtLjAwMy0uMDA0LS4wMDQtLjAwNC0uMTI1LS4xNC0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xMjctLjEzOC0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xMjgtLjEzNi0uMDA0LS4wMDQtLjAwNC0uMDA0LS4xMy0uMTM1LS4wMDQtLjAwNC0uMDA0LS4wMDQtLjEzMi0uMTM0LS4wMDMtLjAwNC0uMDA0LS4wMDMtLjEzNC0uMTMzLS4wMDQtLjAwMy0uMDA0LS4wMDQtLjEzNS0uMTMtLjAwNC0uMDA0LS4wMDQtLjAwNC0uMTM2LS4xMjgtLjAwNC0uMDA0LS4wMDQtLjAwNC0uMTM4LS4xMjYtLjAwNC0uMDA0LS4wMDQtLjAwMy0uMTQtLjEyNS0uMDA0LS4wMDQtLjAwNC0uMDAzLS4xNC0uMTIzLS4wMDUtLjAwNC0uMDA0LS4wMDMtLjE0Mi0uMTIxLS4wMDQtLjAwNC0uMDA0LS4wMDMtLjE0NC0uMTItLjAwNC0uMDAzLS4wMDQtLjAwMy0uMTQ1LS4xMTctLjAwNC0uMDA0LS4wMDQtLjAwMy0uMTQ3LS4xMTUtLjAwNC0uMDA0LS4wMDQtLjAwMy0uMTQ4LS4xMTMtLjAwNC0uMDAzLS4wMDQtLjAwNC0uMTQ5LS4xMTEtLjAwNC0uMDAzLS4wMDQtLjAwNC0uMDUtLjAzNi0uMTQtLjA4My0uMTUtLjA1NS0uMTYtLjAyN3ptLTE4LjM4MS4zNDRsLS4xNjEuMDA4LS4xNTcuMDM3LS4xNDcuMDY2LS4xMTEuMDc0LS4wNC4wMzItLjAwNS4wMDMtLjAwNC4wMDQtLjE0NS4xMTctLjAwNC4wMDMtLjAwNC4wMDQtLjE0NC4xMTktLjAwNC4wMDMtLjAwNC4wMDQtLjE0Mi4xMi0uMDA0LjAwNC0uMDA0LjAwNC0uMTQxLjEyMy0uMDA0LjAwMy0uMDA0LjAwNC0uMTQuMTI1LS4wMDQuMDAzLS4wMDQuMDA0LS4xMzguMTI2LS4wMDQuMDA0LS4wMDQuMDA0LS4xMzYuMTI4LS4wMDQuMDA0LS4wMDQuMDA0LS4xMzUuMTMtLjAwNC4wMDQtLjAwNC4wMDMtLjEzNC4xMzMtLjAwNC4wMDNMNC42ODIgNWwtLjEzMi4xMzQtLjAwMy4wMDQtLjAwNC4wMDQtLjEzLjEzNS0uMDA0LjAwNC0uMDA0LjAwNC0uMTI4LjEzNi0uMDA0LjAwNC0uMDA0LjAwNC0uMTI2LjEzOC0uMDA0LjAwNC0uMDAzLjAwNC0uMTI1LjE0LS4wMDQuMDA0LS4wMDMuMDA0LS4xMjMuMTQtLjAwNC4wMDUtLjAwMy4wMDQtLjEyMS4xNDItLjAwNC4wMDQtLjAwMy4wMDQtLjEyLjE0NC0uMDAzLjAwNC0uMDAzLjAwNC0uMTE3LjE0NS0uMDA0LjAwNC0uMDAzLjAwNC0uMTE1LjE0Ni0uMDA0LjAwNS0uMDAzLjAwNC0uMTEzLjE0Ny0uMDAzLjAwNS0uMDA0LjAwNC0uMTExLjE0OS0uMDAzLjAwNC0uMDA0LjAwNC0uMTEuMTUtLjAwMi4wMDUtLjAwMy4wMDQtLjEwOC4xNTEtLjAwMy4wMDQtLjAwMy4wMDUtLjEwNi4xNTItLjAwMy4wMDUtLjAwMy4wMDQtLjEwNC4xNTQtLjAwMy4wMDQtLjAwMy4wMDUtLjEwMi4xNTQtLjAwMy4wMDUtLjAwMi4wMDQtLjEuMTU2LS4wMDMuMDA1LS4wMDMuMDA0LS4wOTguMTU3LS4wMDMuMDA1LS4wMDMuMDA0LS4wOTYuMTU5LS4wMDIuMDA0LS4wMDMuMDA1LS4wOTQuMTYtLjAwMy4wMDQtLjAwMi4wMDQtLjA5Mi4xNi0uMDAzLjAwNS0uMDAzLjAwNS0uMDkuMTYxLS4wMDIuMDA1LS4wMDMuMDA1LS4wODguMTYyLS4wMDIuMDA1LS4wMDMuMDA0LS4wODYuMTY0LS4wMDIuMDA1LS4wMDIuMDA0LS4wODQuMTY1LS4wMDMuMDA1LS4wMDIuMDA0LS4wODIuMTY2LS4wMDIuMDA0LS4wMDMuMDA1LS4wOC4xNjctLjAwMi4wMDQtLjAwMi4wMDUtLjA3OC4xNjgtLjAwMi4wMDQtLjAwMi4wMDUtLjA0NS4xLS4wNTMuMTUzLS4wMjMuMTYuMDA3LjE2LjAzNy4xNTcuMDY1LjE0OC4wOTIuMTMyLjExNC4xMTQuMTM0LjA5LjE0OC4wNjQuMTU3LjAzNS4xNjEuMDA2LjE2LS4wMjUuMTUyLS4wNTQuMTQtLjA4LjEyMS0uMTA2LjEtLjEyNi4wNjUtLjExOC4wNDMtLjA5NS4wNzQtLjE2LjA3NS0uMTU1LjA3Ny0uMTU3LjA4LS4xNTUuMDgtLjE1Mi4wODMtLjE1NS4wODUtLjE1Mi4wODYtLjE1LjA4OC0uMTQ5LjA5MS0uMTUuMDk0LS4xNS4wOTQtLjE0Ny4wOTUtLjE0NS4wOTktLjE0Ni4xLS4xNDQuMS0uMTQyLjEwNC0uMTQuMTA0LS4xNC4xMS0uMTQyLjEwNy0uMTM3LjExLS4xMzYuMTE0LS4xMzYuMTEzLS4xMzQuMTE3LS4xMzMuMTE4LS4xMzIuMTE3LS4xMjkuMTIyLS4xMy4xMjQtLjEyNy4xMjMtLjEyNi4xMjctLjEyNS4xMjctLjEyMi4xMjgtLjEyLjEzMi0uMTIyLjEzLS4xMTUuMTMzLS4xMTcuMTM1LS4xMTUuMTM1LS4xMTEuMTM2LS4xMS4wMzctLjAzLjExNy0uMTEuMDk0LS4xMzIuMDY4LS4xNDYuMDQtLjE1Ni4wMS0uMTYxLS4wMi0uMTYtLjA1LS4xNTQtLjA3Ni0uMTQxLS4xMDItLjEyNS0uMTIzLS4xMDQtLjE0LS4wOC0uMTUzLS4wNTEtLjE2LS4wMjN6TTE2IDMuNTk1aC0uMDA1bC0uMTQ4LjAwMWgtLjAxbC0uMTQ3LjAwM2gtLjAxMWwtLjE0Ny4wMDVoLS4wMTFsLS4xNDYuMDA3aC0uMDExbC0uMTQ2LjAwOWgtLjAxMWwtLjE0Ni4wMWgtLjAwNWwtLjAwNS4wMDEtLjE0Ni4wMTJoLS4wMTFsLS4xNDUuMDE0aC0uMDA2bC0uMDA1LjAwMS0uMDUuMDA2LS4xNTguMDMxLS4xNS4wNi0uMTM1LjA4OC0uMTE3LjExMS0uMDk0LjEzLS4wNjkuMTQ3LS4wNC4xNTYtLjAxLjE2LjAxOS4xNi4wNDkuMTU0LjA3Ni4xNDIuMTAyLjEyNS4xMjMuMTA1LjE0LjA4LjE1Mi4wNTEuMTYuMDIzLjEzNC0uMDAzLjA0NS0uMDA1LjEzNS0uMDEzLjEzMy0uMDEuMTM2LS4wMS4xMzUtLjAwNy4xMzctLjAwNi4xMzYtLjAwNC4xMzYtLjAwM2guMjc0bC4xMzYuMDAzLjEzNi4wMDQuMTM2LjAwNi4xMzYuMDA3LjEzNi4wMS4xMzMuMDEuMTM1LjAxMy4xMzUuMDE0LjEzNS4wMTYuMTM0LjAxOC4xMzIuMDE4LjEzNC4wMjEuMTMzLjAyMy4xMzMuMDI0LjEzMy4wMjUuMTMuMDI3LjEzMi4wMy4xMzIuMDMuMTI5LjAzMS4xMy4wMzQuMTI5LjAzNS4xMjkuMDM2LjEzLjA0LjEyNi4wMzguMTI4LjA0Mi4xMjYuMDQyLjEyOC4wNDUuMTI3LjA0Ny4xMjYuMDQ3LjEyLjA0OC4xMjcuMDUxLjEyMy4wNTIuMDA2LjAwMi4xNDcuMDQ4LjE2LjAyMS4xNi0uMDA5LjE1Ny0uMDM4LjE0Ny0uMDY3LjEzMS0uMDkzLjExMi0uMTE2LjA4OS0uMTM1LjA2Mi0uMTQ5LjAzMy0uMTU4LjAwNC0uMTYtLjAyNy0uMTYtLjA1NS0uMTUxLS4wODMtLjEzOS0uMTA3LS4xMi0uMTI3LS4wOTktLjExOC0uMDYzLS4wMDQtLjAwMS0uMDA1LS4wMDMtLjAwNS0uMDAyLS4xMzMtLjA1Ni0uMDA1LS4wMDItLjAwNS0uMDAyLS4xMzQtLjA1NC0uMDA0LS4wMDItLjAwNS0uMDAyLS4xMzUtLjA1My0uMDA1LS4wMDItLjAwNS0uMDAyLS4xMzUtLjA1MS0uMDA1LS4wMDItLjAwNS0uMDAyLS4xMzUtLjA1LS4wMDUtLjAwMS0uMDA1LS4wMDItLjEzNy0uMDQ4LS4wMDUtLjAwMS0uMDA1LS4wMDItLjEzNy0uMDQ2LS4wMDUtLjAwMi0uMDA1LS4wMDItLjEzNy0uMDQ0LS4wMDUtLjAwMi0uMDA1LS4wMDEtLjEzOC0uMDQzLS4wMDYtLjAwMi0uMDA1LS4wMDEtLjEzOC0uMDQyLS4wMDUtLjAwMS0uMDA1LS4wMDItLjE0LS4wNEgxOS40bC0uMDA1LS4wMDItLjE0LS4wMzgtLjAwNS0uMDAxLS4wMDUtLjAwMi0uMTQtLjAzNi0uMDA1LS4wMDEtLjAwNS0uMDAxLS4xNDEtLjAzNS0uMDA1LS4wMDEtLjAwNS0uMDAxLS4xNDItLjAzMy0uMDA1LS4wMDEtLjAwNS0uMDAxLS4xNDItLjAzMS0uMDA1LS4wMDJoLS4wMDVsLS4xNDItLjAzLS4wMDUtLjAwMS0uMDA1LS4wMDEtLjE0My0uMDI4aC0uMDA1bC0uMDA1LS4wMDItLjE0My0uMDI1LS4wMDYtLjAwMS0uMDA1LS4wMDEtLjE0My0uMDI0LS4wMDUtLjAwMS0uMDA2LS4wMDEtLjE0My0uMDIyLS4wMDYtLjAwMWgtLjAwNWwtLjE0NC0uMDIyaC0uMDA1bC0uMDA2LS4wMDEtLjE0NC0uMDE5aC0uMDA1bC0uMDA2LS4wMDEtLjE0NC0uMDE3aC0uMDA2bC0uMDA1LS4wMDEtLjE0NS0uMDE2aC0uMDExbC0uMTQ1LS4wMTRIMTcuMWwtLjAwNS0uMDAxLS4xNDYtLjAxMmgtLjAxbC0uMTQ2LS4wMS0uMDA2LS4wMDFoLS4wMDVsLS4xNDYtLjAwOWgtLjAxMWwtLjE0Ny0uMDA2aC0uMDFMMTYuMzIgMy42aC0uMDExbC0uMTQ3LS4wMDNoLS4wMTFsLS4xNDctLjAwMUgxNnptLTUuNDgyIDEuMzY2bC0uMTYuMDA4LS4xNTcuMDM3LS4xMjMuMDUzLS4wNi4wMzItLjAwNS4wMDItLjAwNC4wMDMtLjEyOC4wNjktLjAwNC4wMDItLjAwNS4wMDMtLjEyNi4wNy0uMDA1LjAwMy0uMDA0LjAwMi0uMTI2LjA3Mi0uMDA1LjAwMy0uMDA0LjAwMy0uMTI1LjA3My0uMDA0LjAwMy0uMDA1LjAwMy0uMTI0LjA3NS0uMDA0LjAwMy0uMDA1LjAwMi0uMTIzLjA3Ny0uMDA0LjAwMy0uMDA1LjAwMy0uMTIyLjA3OC0uMDA0LjAwMy0uMDA1LjAwMy0uMTIxLjA4LS4wMDQuMDAyLS4wMDUuMDAzLS4xMi4wODItLjAwNS4wMDMtLjAwNC4wMDMtLjEyLjA4My0uMDA0LjAwMy0uMDA0LjAwMy0uMTE4LjA4NC0uMDA1LjAwMy0uMDA0LjAwMy0uMTE4LjA4Ni0uMDA0LjAwMy0uMDA0LjAwMy0uMTE3LjA4OC0uMDA0LjAwMy0uMDA0LjAwMy0uMTE2LjA4OS0uMDA0LjAwMy0uMDA0LjAwNC0uMTE0LjA5LS4wMDUuMDAzLS4wMDQuMDAzLS4xMTMuMDkyLS4wMDQuMDA0LS4wMDQuMDAzLS4xMTMuMDkzLS4wMDQuMDA0LS4wMDQuMDAzLS4xMTEuMDk1LS4wMDUuMDAzLS4wMDQuMDA0LS4xMS4wOTYtLjAwNC4wMDQtLjAwNC4wMDMtLjExLjA5OC0uMDAzLjAwMy0uMDA0LjAwNC0uMTA4LjEtLjAwNC4wMDMtLjAwNC4wMDMtLjEwNy4xMDEtLjAwNC4wMDQtLjAwNC4wMDMtLjEwNi4xMDItLjAwNC4wMDQtLjAwMy4wMDQtLjEwNS4xMDMtLjAwNC4wMDQtLjAwNC4wMDQtLjEwMy4xMDUtLjAwNC4wMDQtLjAwNC4wMDMtLjEwMi4xMDYtLjAwMy4wMDQtLjAwNC4wMDQtLjEuMTA3LS4wMDQuMDA0LS4wMDQuMDA0LS4wOTkuMTA4LS4wMDQuMDA0LS4wMDMuMDA0LS4wOTguMTEtLjAwMy4wMDMtLjAwNC4wMDQtLjA5Ni4xMS0uMDA0LjAwNS0uMDAzLjAwNC0uMDk1LjExMS0uMDAzLjAwNC0uMDA0LjAwNC0uMDkzLjExMy0uMDAzLjAwNC0uMDA0LjAwNC0uMDkyLjExMy0uMDAzLjAwNC0uMDAzLjAwNS0uMDkuMTE0LS4wMDQuMDA0LS4wMDMuMDA0LS4wODkuMTE2LS4wMDMuMDA0LS4wMDMuMDA0LS4wODguMTE3LS4wMDMuMDA0LS4wMDMuMDA0LS4wODYuMTE4LS4wMDMuMDA0LS4wMDMuMDA1LS4wODQuMTE4LS4wMDMuMDA0LS4wMDMuMDA1LS4wODMuMTItLjAwMy4wMDMtLjAwMy4wMDUtLjA4Mi4xMi0uMDAzLjAwNS0uMDAyLjAwNC0uMDY4LjEwMy0uMDc2LjE0Mi0uMDQ4LjE1NC0uMDE4LjE2LjAxMS4xNjEuMDQxLjE1Ni4wNy4xNDYuMDk1LjEzLjExNy4xMS4xMzYuMDg2LjE1LjA2LjE1OC4wMy4xNjIuMDAyLjE1OC0uMDMuMTUtLjA1Ny4xMzgtLjA4NS4xMTktLjEwOS4wODItLjEwNS4wNjUtLjA5OS4wNzUtLjExLjA3Ny0uMTEzLjA3Ny0uMTA3LjA4LS4xMS4wOC0uMTA4LjA4NC0uMTA4LjA4My0uMTA1LjA4Ni0uMTA2LjA4Ni0uMTA0LjA4OC0uMTA0LjA4OS0uMTAxLjA5LS4xMDIuMDkzLS4xMDEuMDkzLS4wOTkuMDk0LS4wOTcuMDk1LS4wOTYuMDk4LS4wOTcuMDk4LS4wOTUuMDk5LS4wOTMuMS0uMDkyLjEwMy0uMDkxLjEwMS0uMDg5LjEwNC0uMDg4LjEwNC0uMDg2LjEwNi0uMDg2LjEwNi0uMDgzLjEwNi0uMDgyLjEwOS0uMDgyLjEwOC0uMDc5LjExLS4wNzguMTEtLjA3Ni4xMTItLjA3Ni4xMTItLjA3NC4xMTMtLjA3Mi4xMTMtLjA3MS4xMTUtLjA3LjExNS0uMDY4LjExOC0uMDY3LjExNy0uMDY1LjEyLS4wNjUuMDU0LS4wMjkuMTM1LS4wODguMTE2LS4xMTEuMDk0LS4xMzIuMDY4LS4xNDYuMDQtLjE1Ni4wMDktLjE2MS0uMDItLjE2LS4wNS0uMTUzLS4wNzgtLjE0Mi0uMTAyLS4xMjUtLjEyMy0uMTAzLS4xNDEtLjA3OS0uMTUzLS4wNTEtLjE2LS4wMjJ6bTEzLjkxIDIuMTE2bC0uMTYyLjAwOC0uMTU3LjAzNy0uMTQ3LjA2Ni0uMTMyLjA5Mi0uMTEzLjExNi0uMDkuMTM0LS4wNjMuMTQ4LS4wMzQuMTU3LS4wMDUuMTYyLjAyNS4xNTkuMDU1LjE1Mi4wODIuMTM4LjA4Ni4xMDMuMDkuMDkuMDk0LjA5OC4wOTIuMDk5LjA5My4xLjA5MS4xMDMuMDg5LjEwMS4wODguMTA0LjA4Ni4xMDQuMDg2LjEwNi4wODMuMTA1LjA4My4xMDguMDguMTA4LjA4MS4xMS4wNzcuMTA3LjA3Ny4xMTIuMDc1LjExMS4wNzUuMTE0LjA3Mi4xMTMuMDcxLjExMy4wNy4xMTQuMDY4LjExOC4wNjcuMTE1LjA2NS4xMTguMDY0LjExNy4wNjIuMTE3LjA2MS4xMjEuMDU5LjExOS4wNTkuMTIyLjA1Ni4xMjEuMDU0LjEyLjA1NS4xMjUuMDUxLjEyMy4wNTEuMTI1LjA0OC4xMjMuMDQ4LjEyNy4wNDcuMTI2LjA0NC4xMjUuMDQzLjEyOC4wNDIuMTI5LjAzOS4xMjYuMDM4LjEzLjAyMi4wNzYuMDU4LjE1LjA4NS4xMzcuMTEuMTE5LjEyOS4wOTYuMTQ1LjA3LjE1NS4wNDMuMTYuMDEzLjE2MS0uMDE3LjE1NC0uMDQ2LjE0NC0uMDc1LjEyNi0uMS4xMDYtLjEyLjA4Mi0uMTQuMDU1LS4xNTEuMDI1LS4xNi0uMDA1LS4xNi0uMDI2LS4xMzItLjAyMy0uMDgyLS4wMDItLjAwNS0uMDAxLS4wMDUtLjA0Mi0uMTM5LS4wMDEtLjAwNS0uMDAyLS4wMDUtLjA0My0uMTM4LS4wMDEtLjAwNS0uMDAyLS4wMDUtLjA0NC0uMTM3LS4wMDItLjAwNS0uMDAyLS4wMDUtLjA0Ni0uMTM3LS4wMDItLjAwNS0uMDAxLS4wMDUtLjA0OC0uMTM3LS4wMDItLjAwNS0uMDAyLS4wMDUtLjA1LS4xMzUtLjAwMS0uMDA1LS4wMDItLjAwNS0uMDUxLS4xMzUtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDUzLS4xMzUtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU0LS4xMzMtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU3LS4xMzMtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU3LS4xMzItLjAwMy0uMDA1LS4wMDItLjAwNS0uMDYtLjEzMi0uMDAxLS4wMDUtLjAwMi0uMDA0LS4wNjEtLjEzMi0uMDAzLS4wMDQtLjAwMi0uMDA1LS4wNjMtLjEzLS4wMDItLjAwNS0uMDAyLS4wMDUtLjA2NC0uMTMtLjAwMy0uMDA0LS4wMDItLjAwNS0uMDY2LS4xMjktLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDY3LS4xMjgtLjAwMi0uMDA1LS4wMDMtLjAwNC0uMDY5LS4xMjgtLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDctLjEyNi0uMDAzLS4wMDUtLjAwMy0uMDA0LS4wNzItLjEyNi0uMDAyLS4wMDUtLjAwMy0uMDA0LS4wNzQtLjEyNS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wNzUtLjEyNC0uMDAzLS4wMDQtLjAwMy0uMDA1LS4wNzYtLjEyMy0uMDAzLS4wMDQtLjAwMy0uMDA1LS4wNzgtLjEyMi0uMDAzLS4wMDQtLjAwMy0uMDA1LS4wOC0uMTIxLS4wMDMtLjAwNC0uMDAzLS4wMDUtLjA4MS0uMTItLjAwMy0uMDA1LS4wMDMtLjAwNC0uMDgzLS4xMi0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wODQtLjExOC0uMDAzLS4wMDUtLjAwMy0uMDA0LS4wODYtLjExOC0uMDAzLS4wMDQtLjAwNC0uMDA0LS4wODctLjExNy0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOS0uMTE2LS4wMDItLjAwNC0uMDA0LS4wMDQtLjA5LS4xMTQtLjAwMy0uMDA1LS4wMDQtLjAwNC0uMDkxLS4xMTMtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMDk0LS4xMTMtLjAwMy0uMDA0LS4wMDMtLjAwNC0uMDk1LS4xMTEtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMDk2LS4xMS0uMDA0LS4wMDUtLjAwMy0uMDA0LS4wOTgtLjExLS4wMDQtLjAwMy0uMDAzLS4wMDQtLjEtLjEwOC0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xLS4xMDctLjAwNC0uMDA0LS4wMDQtLjAwNC0uMTAyLS4xMDYtLjAwMy0uMDAzLS4wMDQtLjAwNC0uMDkzLS4wOTUtLjEyNC0uMTAzLS4xNC0uMDgtLjE1My0uMDUtLjE2LS4wMjN6TTQuNDUgMTMuMTM1bC0uMTYxLjAwMi0uMTU4LjAzMi0uMTUuMDYtLjEzNS4wODgtLjExOC4xMS0uMDk0LjEzMS0uMDY5LjE0Ni0uMDM1LjEyOS0uMDI2LjEzMnYuMDA1bC0uMDAyLjAwNS0uMDI1LjE0My0uMDAxLjAwNS0uMDAxLjAwNi0uMDI0LjE0My0uMDAxLjAwNS0uMDAxLjAwNi0uMDIyLjE0My0uMDAxLjAwNi0uMDAxLjAwNS0uMDIuMTQ0LS4wMDEuMDA1LS4wMDEuMDA1LS4wMTkuMTQ1di4wMDVsLS4wMDEuMDA2LS4wMTcuMTQ0di4wMDZsLS4wMDEuMDA1LS4wMTYuMTQ1di4wMTFsLS4wMTQuMTQ1di4wMDVsLS4wMDEuMDA2LS4wMTIuMTQ2di4wMWwtLjAxLjE0Ni0uMDAxLjAwNnYuMDA1bC0uMDA5LjE0NnYuMDExbC0uMDA3LjE0NnYuMDExbC0uMDA0LjE0N3YuMDExbC0uMDAzLjE0N3YuMDFsLS4wMDIuMTQ4di4wMWwuMDAxLjE0OHYuMDFsLjAwMy4xNDd2LjAxMWwuMDA1LjE0N3YuMDFsLjAwNy4xNDd2LjAxMWwuMDA5LjE0NnYuMDExbC4wMS4xNDZ2LjAxbC4wMTMuMTQ2di4wMTFsLjAxNC4xNDV2LjAwNWwuMDAxLjAwNi4wMTYuMTQ1di4wMTFsLjAxOC4xNDR2LjAwNmwuMDAxLjAwNS4wMTkuMTQ0di4wMDZsLjAwMS4wMDUuMDIxLjE0NHYuMDA1bC4wMDIuMDA2LjAyMi4xNDN2LjAwNmwuMDAyLjAwNS4wMjQuMTQzdi4wMDVsLjAwMi4wMDYuMDI1LjE0My4wMDEuMDA1LjAwMS4wMDUuMDI4LjE0My4wMDEuMDA1LjAwMS4wMDUuMDMuMTQydi4wMDVsLjAwMi4wMDYuMDMuMTQxLjAwMi4wMDUuMDAxLjAwNS4wMzMuMTQydi4wMDVsLjAwMi4wMDUuMDM1LjE0di4wMDZsLjAwMi4wMDUuMDM2LjE0LjAwMi4wMDUuMDAxLjAwNS4wMzguMTQuMDAxLjAwNS4wMDIuMDA1LjA0LjE0di4wMDVsLjAwMi4wMDUuMDQyLjEzOC4wMDEuMDA2LjAwMi4wMDUuMDQyLjEzOC4wMDIuMDA1LjAwMi4wMDUuMDE3LjA1NC4wNjQuMTQ4LjA5LjEzNC4xMTQuMTE0LjEzMi4wOTIuMTQ4LjA2NS4xNTcuMDM3LjE2LjAwNy4xNi0uMDIzLjE1My0uMDUyLjE0LS4wOC4xMjMtLjEwNC4xMDItLjEyNS4wNzYtLjE0Mi4wNDktLjE1My4wMi0uMTYtLjAxMS0uMTYxLS4wMzEtLjEzLS4wMTctLjA1MS0uMDM5LS4xMjYtLjAzOC0uMTMtLjAzNy0uMTI4LS4wMzUtLjEzLS4wMzMtLjEyOC0uMDMzLS4xMzQtLjAzLS4xMy0uMDI5LS4xMzEtLjAyNi0uMTMtLjAyNi0uMTMzLS4wMjQtLjEzMy0uMDIzLS4xMzMtLjAyLS4xMzItLjAyLS4xMzYtLjAxNy0uMTMyLS4wMTYtLjEzNS0uMDE0LS4xMzUtLjAxMi0uMTMzLS4wMTItLjEzOC0uMDA5LS4xMzMtLjAwNy0uMTM2LS4wMDYtLjEzOC0uMDA0LS4xMzQtLjAwMy0uMTM2di0uMjc0bC4wMDMtLjEzNi4wMDQtLjEzNC4wMDYtLjEzOS4wMDctLjEzNi4wMS0uMTMzLjAxLS4xMzguMDEzLS4xMzIuMDE0LS4xMzUuMDE2LS4xMzUuMDE3LS4xMzIuMDItLjEzNy4wMi0uMTMuMDIzLS4xMzQuMDI0LS4xMzMuMDI0LS4xMjYuMDE2LS4xNi0uMDE0LS4xNjEtLjA0NC0uMTU1LS4wNzItLjE0NS0uMDk4LS4xMjgtLjEyLS4xMDgtLjEzNy0uMDg0LS4xNS0uMDU3LS4xNi0uMDI5em0yNi42OTggMS42MDFsLS4xNjEuMDEtLjE1Ny4wNC0uMTQ2LjA2Ny0uMTMxLjA5My0uMTEyLjExNy0uMDg4LjEzNS0uMDYxLjE0OS0uMDMzLjE1Ny0uMDA1LjEzNC4wMDYuMTQuMDA2LjE3Ni4wMDMuMTc3LjAwMS4xNzgtLjAwMS4xNzctLjAwMy4xNzgtLjAwNi4xNzctLjAwNy4xNzYtLjAxLjE3Ny0uMDEyLjE3Ni0uMDE1LjE3Ni0uMDE2LjE3My0uMDE4LjE3NS0uMDIuMTc1LS4wMjQuMTc0LS4wMjUuMTc1LS4wMjYuMTctLjAzLjE3NC0uMDMuMTczLS4wMzMuMTctLjAzNi4xNzItLjAzNy4xNy0uMDQuMTctLjA0Mi4xNzItLjA0My4xNjgtLjA0NS4xNjYtLjA0OC4xNjktLjA1LjE2Ny0uMDUyLjE2OC0uMDUzLjE2NC0uMDU2LjE2Ni0uMDU4LjE2Ni0uMDYuMTYtLjA2Mi4xNjUtLjA2Mi4xNTgtLjA2Ni4xNjUtLjA2OC4xNi0uMDcuMTYtLjA3LjE1OC0uMDc1LjE1OS0uMDc0LjE1NS0uMDc5LjE1OC0uMDguMTU4LS4wNi4xNS0uMDMuMTU4LS4wMDEuMTYxLjAyOS4xNTkuMDU4LjE1LjA4NS4xMzcuMTA4LjExOS4xMy4wOTcuMTQ0LjA3LjE1Ni4wNDQuMTYuMDEzLjE2LS4wMTcuMTU1LS4wNDYuMTQzLS4wNzQuMTI3LS4xLjEwNy0uMTIuMDctLjExNS4wODMtLjE2NC4wMDMtLjAwNS4wMDItLjAwNC4wODItLjE2Ni4wMDItLjAwNS4wMDMtLjAwNC4wOC0uMTY3LjAwMi0uMDA1LjAwMi0uMDA0LjA3OC0uMTY4LjAwMi0uMDA1LjAwMi0uMDA0LjA3Ni0uMTY5LjAwMi0uMDA0LjAwMi0uMDA1LjA3NC0uMTcuMDAyLS4wMDQuMDAyLS4wMDUuMDcyLS4xNy4wMDItLjAwNS4wMDItLjAwNS4wNy0uMTcxLjAwMS0uMDA1LjAwMi0uMDA1LjA2OC0uMTcyLjAwMi0uMDA0LjAwMi0uMDA1LjA2NS0uMTczLjAwMi0uMDA1LjAwMi0uMDA1LjA2My0uMTczLjAwMi0uMDA1LjAwMi0uMDA1LjA2LS4xNzQuMDAzLS4wMDUuMDAxLS4wMDUuMDYtLjE3NS4wMDEtLjAwNS4wMDItLjAwNS4wNTctLjE3Ni4wMDEtLjAwNS4wMDItLjAwNS4wNTUtLjE3Ny4wMDEtLjAwNS4wMDItLjAwNS4wNTItLjE3Ny4wMDItLjAwNS4wMDEtLjAwNS4wNTEtLjE3OC4wMDEtLjAwNS4wMDItLjAwNS4wNDgtLjE3OS4wMDItLjAwNXYtLjAwNWwuMDQ3LS4xNzkuMDAxLS4wMDUuMDAyLS4wMDUuMDQ0LS4xOHYtLjAwNWwuMDAyLS4wMDUuMDQyLS4xOC4wMDEtLjAwNi4wMDEtLjAwNS4wNC0uMTgxLjAwMS0uMDA1LjAwMS0uMDA1LjAzNy0uMTgyLjAwMi0uMDA1di0uMDA1bC4wMzYtLjE4MnYtLjAwNmwuMDAyLS4wMDUuMDMzLS4xODJ2LS4wMDZsLjAwMi0uMDA1LjAzLS4xODMuMDAxLS4wMDUuMDAxLS4wMDUuMDI5LS4xODR2LS4wMDVsLjAwMS0uMDA2LjAyNy0uMTg0di0uMDA1bC4wMDEtLjAwNS4wMjQtLjE4NXYtLjAwNWwuMDAxLS4wMDUuMDIyLS4xODV2LS4wMDZsLjAwMS0uMDA1LjAyLS4xODV2LS4wMDZsLjAwMS0uMDA1LjAxNy0uMTg2di0uMDA1bC4wMDEtLjAwNS4wMTUtLjE4N3YtLjAwNWwuMDAxLS4wMDUuMDEzLS4xODd2LS4wMWwuMDEtLjE4Ny4wMDEtLjAwNnYtLjAwNWwuMDA5LS4xODd2LS4wMTFsLjAwNi0uMTg3VjE2LjdsLjAwNC0uMTg4di0uMDExbC4wMDEtLjE4OHYtLjAxbC0uMDAxLS4xODh2LS4wMTFsLS4wMDQtLjE4OHYtLjAxMWwtLjAwNi0uMTg3di0uMDExbC0uMDA3LS4xNDUtLjAyMi0uMTYtLjA1LS4xNTItLjA4LS4xNDEtLjEwMy0uMTI0LS4xMjUtLjEwMi0uMTQxLS4wNzctLjE1My0uMDUtLjE2LS4wMnptLTMwLjIxLjU3MmwtLjE2MS4wMDEtLjE1OC4wMzItLjE1LjA2LS4xMzYuMDg3LS4xMTcuMTEtLjA5NS4xMzEtLjA2OC4xNDYtLjA0LjE1Ni0uMDEyLjEzMy0uMDAxLjE0di4wMWwuMDAxLjE4OHYuMDExbC4wMDQuMTg4di4wMTFsLjAwNi4xODd2LjAxMWwuMDA4LjE4N3YuMDExbC4wMTEuMTg3di4wMDVsLjAwMS4wMDUuMDEzLjE4N3YuMDFsLjAxNi4xODd2LjAxbC4wMTguMTg2di4wMTFsLjAyLjE4NS4wMDEuMDA1di4wMDZsLjAyMi4xODUuMDAxLjAwNXYuMDA1bC4wMjUuMTg1di4wMDVsLjAwMS4wMDUuMDI3LjE4NHYuMDA2bC4wMDEuMDA1LjAyOS4xODR2LjAwNWwuMDAxLjAwNS4wMzEuMTgzLjAwMS4wMDUuMDAxLjAwNi4wMzMuMTgyLjAwMS4wMDUuMDAxLjAwNi4wMzUuMTgyLjAwMS4wMDUuMDAxLjAwNS4wMzguMTgydi4wMDVsLjAwMi4wMDUuMDQuMTgxdi4wMDVsLjAwMi4wMDUuMDQyLjE4LjAwMS4wMDYuMDAxLjAwNS4wNDQuMTguMDAyLjAwNXYuMDA1bC4wNDcuMTguMDAxLjAwNC4wMDIuMDA1LjA0OC4xNzkuMDAyLjAwNS4wMDEuMDA1LjA1LjE3OC4wMDIuMDA1LjAwMS4wMDUuMDUzLjE3Ny4wMDIuMDA1LjAwMS4wMDUuMDU1LjE3Ny4wMDIuMDA1LjAwMS4wMDUuMDU3LjE3Ni4wMDIuMDA1LjAwMS4wMDUuMDYuMTc1LjAwMS4wMDUuMDAyLjAwNS4wNjEuMTc0LjAwMi4wMDUuMDAyLjAwNS4wNjMuMTczLjAwMi4wMDUuMDAyLjAwNS4wNjUuMTczLjAwMi4wMDUuMDAyLjAwNC4wNjcuMTcyLjAwMi4wMDUuMDAyLjAwNS4wNy4xNzEuMDAyLjAwNS4wMDIuMDA1LjA3Mi4xNy4wMDIuMDA1LjAwMi4wMDQuMDc0LjE3LjAwMi4wMDUuMDAyLjAwNC4wNzYuMTY5LjAwMi4wMDQuMDAyLjAwNS4wNzguMTY4LjAwMi4wMDQuMDAyLjAwNS4wOC4xNjcuMDAzLjAwNC4wMDIuMDA1LjA4Mi4xNjYuMDAyLjAwNC4wMDMuMDA1LjAyLjA0LjA4Ni4xMzYuMTEuMTE4LjEzLjA5NS4xNDYuMDcuMTU2LjA0MS4xNi4wMTIuMTYtLjAxOS4xNTUtLjA0OC4xNDItLjA3NS4xMjYtLjEuMTA1LS4xMjMuMDgtLjE0LjA1NC0uMTUyLjAyNC0uMTYtLjAwNi0uMTYtLjAzNi0uMTU4LS4wNTEtLjEyMy0uMDE4LS4wMzQtLjA3OC0uMTU4LS4wNzQtLjE1NS0uMDc0LS4xNi0uMDcxLS4xNTctLjA3LS4xNi0uMDY4LS4xNi0uMDY3LS4xNjUtLjA2Mi0uMTU4LS4wNjItLjE2NC0uMDU5LS4xNjEtLjA1OC0uMTY2LS4wNTYtLjE2Ni0uMDUzLS4xNjQtLjA1Mi0uMTY4LS4wNS0uMTY3LS4wNDgtLjE3LS4wNDUtLjE2NS0uMDQzLS4xNjgtLjA0My0uMTcyLS4wMzktLjE3LS4wMzctLjE3LS4wMzYtLjE3Mi0uMDMzLS4xNy0uMDMtLjE3My0uMDMtLjE3NC0uMDI3LS4xNy0uMDI1LS4xNzUtLjAyMi0uMTc0LS4wMjEtLjE3NS0uMDE4LS4xNzUtLjAxNy0uMTczLS4wMTQtLjE3Ni0uMDEyLS4xNzYtLjAxLS4xNzctLjAwNy0uMTc2LS4wMDYtLjE3Ny0uMDAzLS4xNzgtLjAwMS0uMTc3di0uMTM0bC0uMDEzLS4xNi0uMDQ0LS4xNTYtLjA3Mi0uMTQ0LS4wOTctLjEyOS0uMTItLjEwOC0uMTM3LS4wODUtLjE1LS4wNTctLjE1OS0uMDI4em0yNi43OTggMi4wMjRsLS4xNi4wMDctLjE1Ny4wMzgtLjE0OC4wNjYtLjEzMi4wOTItLjExMy4xMTUtLjA5LjEzNC0uMDYyLjE0OC0uMDMuMTI3LS4wMDEuMDA0LS4wMjMuMTM0LS4wMjQuMTMzLS4wMjYuMTMzLS4wMjYuMTMtLjAzLjEzMi0uMDMuMTI5LS4wMzIuMTM0LS4wMzMuMTI4LS4wMzUuMTMtLjAzNy4xMjgtLjAzOC4xMy0uMDQuMTI2LS4wNC4xMjgtLjA0NC4xMjgtLjA0NC4xMjYtLjA0Ni4xMjYtLjA0OC4xMjYtLjA1LjEyNS0uMDUuMTI1LS4wNTEuMTIyLS4wNTQuMTIzLS4wNTUuMTIyLS4wNTYuMTItLjA1OC4xMjItLjA2LjEyLS4wNjEuMTItLjA2My4xMTktLjA2Mi4xMTYtLjA2Ny4xMTktLjA2Ni4xMTYtLjA2OS4xMTUtLjA2OS4xMTUtLjA3LjExMy0uMDczLjExMy0uMDc0LjExMi0uMDc2LjExMy0uMDc3LjExMi0uMDc3LjEwNy0uMDguMTEtLjA4LjEwNy0uMDg1LjExLS4wNDQuMDU2LS4wODguMTM1LS4wNi4xNS0uMDMzLjE1OC0uMDAyLjE2LjAyNy4xNi4wNTcuMTUuMDgzLjEzOC4xMDguMTIuMTI4LjA5OC4xNDQuMDcyLjE1NS4wNDUuMTYuMDE1LjE2MS0uMDE2LjE1NS0uMDQ0LjE0NC0uMDczLjEyOC0uMDk4LjA5LS4wOTkuMDUtLjA2MS4wMDMtLjAwNC4wMDMtLjAwNS4wODktLjExNS4wMDMtLjAwNC4wMDMtLjAwNS4wODgtLjExNi4wMDMtLjAwNC4wMDMtLjAwNS4wODYtLjExNy4wMDMtLjAwNC4wMDMtLjAwNS4wODQtLjExOC4wMDMtLjAwNC4wMDMtLjAwNS4wODMtLjEyLjAwMy0uMDA0LjAwMy0uMDA0LjA4MS0uMTIuMDAzLS4wMDUuMDAzLS4wMDQuMDgtLjEyMS4wMDMtLjAwNS4wMDMtLjAwNC4wNzgtLjEyMi4wMDMtLjAwNS4wMDMtLjAwNC4wNzctLjEyMy4wMDItLjAwNS4wMDMtLjAwNC4wNzUtLjEyNC4wMDMtLjAwNS4wMDMtLjAwNC4wNzMtLjEyNS4wMDMtLjAwNS4wMDMtLjAwNC4wNzItLjEyNi4wMDItLjAwNC4wMDMtLjAwNS4wNy0uMTI2LjAwMy0uMDA1LjAwMi0uMDA1LjA3LS4xMjcuMDAyLS4wMDQuMDAyLS4wMDUuMDY4LS4xMjguMDAyLS4wMDUuMDAyLS4wMDQuMDY2LS4xMy4wMDMtLjAwNC4wMDItLjAwNS4wNjQtLjEzLjAwMi0uMDA0LjAwMy0uMDA1LjA2Mi0uMTMuMDAyLS4wMDUuMDAzLS4wMDUuMDYtLjEzLjAwMy0uMDA1LjAwMi0uMDA1LjA2LS4xMzIuMDAyLS4wMDUuMDAyLS4wMDUuMDU3LS4xMzIuMDAzLS4wMDUuMDAyLS4wMDUuMDU2LS4xMzMuMDAyLS4wMDUuMDAyLS4wMDUuMDU0LS4xMzQuMDAyLS4wMDQuMDAyLS4wMDUuMDUzLS4xMzUuMDAyLS4wMDUuMDAyLS4wMDUuMDUxLS4xMzUuMDAyLS4wMDUuMDAyLS4wMDUuMDUtLjEzNS4wMDEtLjAwNS4wMDItLjAwNS4wNDgtLjEzNy4wMDEtLjAwNS4wMDItLjAwNS4wNDYtLjEzNy4wMDItLjAwNS4wMDItLjAwNS4wNDQtLjEzNy4wMDItLjAwNS4wMDItLjAwNS4wNDItLjEzOC4wMDItLjAwNS4wMDEtLjAwNi4wNDItLjEzOC4wMDEtLjAwNS4wMDItLjAwNS4wNC0uMTR2LS4wMDVsLjAwMi0uMDA1LjAzOC0uMTQuMDAxLS4wMDUuMDAyLS4wMDUuMDM2LS4xNC4wMDEtLjAwNS4wMDEtLjAwNS4wMzUtLjE0MS4wMDEtLjAwNS4wMDEtLjAwNS4wMzMtLjE0Mi4wMDEtLjAwNS4wMDEtLjAwNS4wMzEtLjE0MS4wMDEtLjAwNi4wMDItLjAwNS4wMjktLjE0MnYtLjAwNWwuMDAyLS4wMDUuMDI4LS4xNDN2LS4wMDVsLjAwMi0uMDA1LjAyNS0uMTQzLjAwMS0uMDA2LjAwMS0uMDA1LjAyNC0uMTQzLjAwMS0uMDA1LjAwMS0uMDA2LjAwMS0uMDA2LjAxLS4xNjEtLjAyLS4xNi0uMDUtLjE1NC0uMDc3LS4xNDEtLjEwMi0uMTI1LS4xMjMtLjEwNC0uMTQxLS4wNzktLjE1My0uMDUxLS4xNi0uMDIyek02Ljg0MSAyMy4wMTlsLS4xNi4wMjQtLjE1Mi4wNTMtLjE0LjA4LS4xMjIuMTA1LS4xMDEuMTI2LS4wNzYuMTQyLS4wNDguMTU0LS4wMTguMTYuMDExLjE2MS4wNDEuMTU2LjA3LjE0Ni4wNzcuMTA5LjA0LjA0OC4wMDMuMDA0LjAwMy4wMDQuMDk1LjExMS4wMDMuMDA0LjAwNC4wMDQuMDk2LjExLjAwNC4wMDUuMDAzLjAwNC4wOTguMTA5LjAwMy4wMDQuMDA0LjAwNC4xLjEwOC4wMDMuMDA0LjAwMy4wMDQuMTAxLjEwNy4wMDQuMDA0LjAwMy4wMDQuMTAyLjEwNS4wMDQuMDA0LjAwNC4wMDQuMTAzLjEwNS4wMDQuMDA0LjAwNC4wMDMuMTA1LjEwNC4wMDMuMDA0LjAwNC4wMDMuMTA2LjEwMi4wMDQuMDA0LjAwNC4wMDQuMTA3LjEuMDA0LjAwNC4wMDQuMDA0LjEwOC4wOTkuMDA0LjAwMy4wMDQuMDA0LjExLjA5OC4wMDMuMDAzLjAwNC4wMDQuMTEuMDk2LjAwNC4wMDMuMDA1LjAwNC4xMS4wOTUuMDA1LjAwMy4wMDQuMDA0LjExMy4wOTMuMDA0LjAwMy4wMDQuMDA0LjExMy4wOTEuMDA0LjAwNC4wMDUuMDAzLjExNC4wOS4wMDQuMDA0LjAwNC4wMDMuMTE2LjA4OS4wMDQuMDAzLjAwNC4wMDMuMTE3LjA4OC4wMDQuMDAzLjAwNC4wMDMuMTE4LjA4Ni4wMDQuMDAzLjAwNS4wMDMuMTE4LjA4NC4wMDQuMDAzLjAwNS4wMDMuMTE5LjA4My4wMDQuMDAzLjAwNS4wMDMuMTIuMDgxLjAwNS4wMDMuMDA0LjAwMy4xMjEuMDguMDA1LjAwMy4wMDQuMDAzLjEyMi4wNzguMDA1LjAwMy4wMDQuMDAzLjEyMy4wNzYuMDA1LjAwMy4wMDQuMDAzLjEyNC4wNzUuMDA1LjAwMy4wMDQuMDAzLjEyNS4wNzMuMDA0LjAwMy4wMDUuMDAyLjEyNi4wNzMuMDA0LjAwMi4wMDUuMDAzLjEyNi4wNy4wMDUuMDAzLjAwNC4wMDIuMTI4LjA3LjAwNC4wMDIuMDA1LjAwMi4xMjguMDY3LjAwNS4wMDMuMDA0LjAwMi4xMy4wNjYuMDA0LjAwMi4wMDUuMDAzLjEzLjA2NC4wMDQuMDAyLjAwNS4wMDMuMTMuMDYyLjAwNS4wMDIuMDA0LjAwMy4xMzIuMDYuMDA0LjAwMy4wMDUuMDAyLjEzMi4wNi4wMDUuMDAyLjAwNS4wMDIuMTMyLjA1Ny4wMDUuMDAyLjAwNS4wMDIuMTMzLjA1Ny4wMDUuMDAyLjAwNS4wMDIuMTMzLjA1NC4wMDUuMDAyLjAwNS4wMDIuMTMuMDUuMTU0LjA0NS4xNi4wMTYuMTYtLjAxNS4xNTYtLjA0NS4xNDQtLjA3Mi4xMjgtLjA5OC4xMDgtLjEyLjA4My0uMTM4LjA1Ny0uMTUuMDI4LS4xNi0uMDAzLS4xNi0uMDMyLS4xNTktLjA2MS0uMTQ5LS4wODgtLjEzNS0uMTEtLjExNy0uMTMyLS4wOTQtLjEyLS4wNTgtLjEyNC0uMDQ5LS4xMjYtLjA1MS0uMTIyLS4wNTEtLjEyMi0uMDU0LS4xMi0uMDU0LS4xMjYtLjA1OC0uMTE5LS4wNTctLjEyLS4wNi0uMTItLjA2LS4xMTgtLjA2My0uMTE3LS4wNjQtLjExOS0uMDY2LS4xMTYtLjA2Ni0uMTE1LS4wNjgtLjExNS0uMDctLjExMy0uMDctLjExNS0uMDc0LS4xMTItLjA3NC0uMTEtLjA3NS0uMTEtLjA3Ni0uMTEyLS4wOC0uMTEtLjA4LS4xMDktLjA4MS0uMTA2LS4wODItLjEwNC0uMDgyLS4xMDYtLjA4Ni0uMTA1LS4wODctLjEwMS0uMDg2LS4xMDUtLjA5MS0uMS0uMDktLjEtLjA5MS0uMS0uMDk0LS4wOTctLjA5NC0uMS0uMDk4LS4wOTMtLjA5NS0uMDk2LS4xLS4wOTMtLjA5OC0uMDkyLS4xMDEtLjA4OS0uMS0uMDktLjEwMi0uMDg4LS4xMDQtLjAzNi0uMDQzLS4xMTQtLjExNC0uMTMzLS4wOTEtLjE0OC0uMDY1LS4xNTctLjAzNi0uMTYxLS4wMDZ6bTE1LjA2MyAyLjcwMWwtLjE2LjAxNC0uMTU2LjA0NC0uMTIuMDU3LS4wNi4wMzQtLjEyLjA2Ni0uMTE3LjA2NC0uMTE4LjA2Mi0uMTIuMDYxLS4xMi4wNi0uMTE4LjA1Ny0uMTI2LjA1OC0uMTIuMDU0LS4xMjIuMDU0LS4xMjIuMDUtLjEyNi4wNTItLjEyNS4wNS0uMTI0LjA0Ni0uMTI3LjA0Ny0uMTI1LjA0NC0uMTI5LjA0My0uMTI2LjA0LS4xMy4wNDItLjEyOC4wMzgtLjEyNy4wMzUtLjEzLjAzNi0uMTMxLjAzNC0uMTI5LjAzMS0uMTMyLjAzLS4xMy4wMy0uMTM1LjAyNy0uMTMzLjAyNi0uMTMuMDIzLS4xMy4wMjItLjEzNy4wMjEtLjEzMi4wMi0uMTM0LjAxNy0uMTMyLjAxNS0uMTM4LjAxNS0uMTM1LjAxMy0uMTMzLjAxLS4xMzguMDEtLjEzNi4wMDctLjEzNC4wMDYtLjEzNi4wMDQtLjE0LjAwMy0uMTYuMDE4LS4xNTUuMDQ3LS4xNDIuMDc2LS4xMjcuMS0uMTA1LjEyMi0uMDguMTQtLjA1NC4xNTEtLjAyNS4xNi4wMDYuMTYuMDM1LjE1OC4wNjQuMTQ4LjA5LjEzNC4xMTQuMTE0LjEzMy4wOTIuMTQ3LjA2NS4xNTcuMDM2LjEzNC4wMDguMTQ1LS4wMDJoLjAxMWwuMTQ3LS4wMDVoLjAxbC4xNDctLjAwN2guMDExbC4xNDYtLjAwOWguMDExbC4xNDYtLjAxaC4wMDVsLjAwNS0uMDAxLjE0Ni0uMDEyaC4wMTFsLjE0NS0uMDE0aC4wMDVsLjAwNi0uMDAxLjE0NS0uMDE2aC4wMTFsLjE0NC0uMDE4aC4wMDZsLjAwNS0uMDAxLjE0NC0uMDJoLjAxMWwuMTQ0LS4wMjEuMDA1LS4wMDFoLjAwNmwuMTQzLS4wMjMuMDA2LS4wMDFoLjAwNWwuMTQzLS4wMjVoLjAwNWwuMDA2LS4wMDIuMTQzLS4wMjZoLjAwNWwuMDA1LS4wMDIuMTQzLS4wMjcuMDA1LS4wMDEuMDA1LS4wMDEuMTQyLS4wM2guMDA1bC4wMDUtLjAwMi4xNDItLjAzLjAwNS0uMDAyLjAwNS0uMDAxLjE0Mi0uMDMzLjAwNS0uMDAxLjAwNS0uMDAxLjE0LS4wMzUuMDA2LS4wMDEuMDA1LS4wMDEuMTQtLjAzN2guMDA1bC4wMDUtLjAwMi4xNC0uMDM4LjAwNS0uMDAyaC4wMDVsLjE0LS4wNC4wMDUtLjAwMi4wMDUtLjAwMS4xMzgtLjA0Mi4wMDUtLjAwMS4wMDYtLjAwMi4xMzgtLjA0My4wMDUtLjAwMS4wMDUtLjAwMi4xMzctLjA0NC4wMDUtLjAwMi4wMDUtLjAwMi4xMzctLjA0Ni4wMDUtLjAwMi4wMDUtLjAwMS4xMzctLjA0OC4wMDUtLjAwMi4wMDUtLjAwMi4xMzUtLjA1LjAwNS0uMDAxLjAwNS0uMDAyLjEzNS0uMDUxLjAwNS0uMDAyLjAwNS0uMDAyLjEzNS0uMDUzLjAwNS0uMDAyLjAwNC0uMDAyLjEzNC0uMDU0LjAwNS0uMDAyLjAwNS0uMDAyLjEzMy0uMDU3LjAwNS0uMDAyLjAwNS0uMDAyLjEzMi0uMDU3LjAwNS0uMDAzLjAwNS0uMDAyLjEzMi0uMDYuMDA1LS4wMDEuMDA0LS4wMDIuMTMxLS4wNjEuMDA1LS4wMDMuMDA1LS4wMDIuMTMtLjA2Mi4wMDUtLjAwMy4wMDUtLjAwMi4xMy0uMDY0LjAwNC0uMDAzLjAwNS0uMDAyLjEyOC0uMDY2LjAwNS0uMDAyLjAwNS0uMDAzLjEyOC0uMDY3LjAwNS0uMDAyLjAwNC0uMDAzLjEyNy0uMDY5LjAwNS0uMDAyLjAwNS0uMDAzLjEyNi0uMDcuMDA1LS4wMDMuMDA0LS4wMDMuMDY1LS4wMzcuMTMyLS4wOTMuMTEyLS4xMTUuMDg5LS4xMzUuMDYyLS4xNDkuMDM0LS4xNTcuMDAzLS4xNjEtLjAyNi0uMTYtLjA1NS0uMTUtLjA4Mi0uMTQtLjEwNy0uMTItLjEyNy0uMS0uMTQ0LS4wNzMtLjE1NC0uMDQ2LS4xNi0uMDE2ek02LjMzIDI3LjEyN2wtLjE2LjAyMy0uMTUyLjA1My0uMTQuMDgtLjEyMi4xMDUtLjEwMS4xMjYtLjA3Ni4xNDItLjA0OC4xNTQtLjAyLjE2LjAxMi4xNjEuMDQxLjE1Ni4wNy4xNDYuMDk0LjEzLjA5Ni4wOTMuMDMyLjAyNi4wMDQuMDAzLjAwNC4wMDQuMTQ1LjExNy4wMDQuMDAzLjAwNC4wMDQuMTQ2LjExNS4wMDUuMDAzLjAwNC4wMDQuMTQ3LjExMy4wMDUuMDAzLjAwNC4wMDQuMTQ5LjExMS4wMDQuMDAzLjAwNC4wMDMuMTUuMTEuMDA1LjAwMy4wMDQuMDAzLjE1MS4xMDguMDA0LjAwMy4wMDUuMDAzLjE1Mi4xMDYuMDA1LjAwMy4wMDQuMDAzLjE1NC4xMDQuMDA0LjAwMy4wMDUuMDAzLjE1NC4xMDIuMDA1LjAwMi4wMDQuMDAzLjE1Ni4xLjAwNS4wMDMuMDA0LjAwMy4xNTcuMDk4LjAwNS4wMDMuMDA0LjAwMi4xNTkuMDk2LjAwNC4wMDMuMDA1LjAwMy4xNi4wOTQuMDA0LjAwMy4wMDQuMDAyLjE2LjA5Mi4wMDUuMDAzLjAwNS4wMDIuMTYxLjA5LjAwNS4wMDMuMDA1LjAwMi4xNjIuMDg4LjAwNS4wMDMuMDA0LjAwMi4xNjQuMDg2LjAwNS4wMDMuMDA0LjAwMi4xNjUuMDg0LjAwNS4wMDMuMDA0LjAwMi4xNjYuMDgyLjAwNC4wMDIuMDA1LjAwMy4xNjcuMDguMDA0LjAwMi4wMDUuMDAyLjE2OC4wNzguMDA0LjAwMi4wMDUuMDAyLjE2OC4wNzYuMDA1LjAwMi4wMDUuMDAyLjE3LjA3NC4wMDQuMDAyLjAwNS4wMDIuMTcuMDcyLjAwNS4wMDIuMDA1LjAwMi4xNy4wNy4wMDYuMDAyLjAwNS4wMDEuMTcxLjA2OC4wMDUuMDAyLjAwNS4wMDIuMTczLjA2NS4wMDUuMDAyLjAwNS4wMDIuMTczLjA2My4wMDUuMDAyLjAwNS4wMDIuMTc0LjA2LjAwNS4wMDMuMDA1LjAwMS4xNzUuMDYuMDA1LjAwMS4wMDUuMDAyLjE3Ni4wNTcuMDA1LjAwMS4wMDUuMDAyLjE3Ni4wNTUuMDA2LjAwMS4wMDUuMDAyLjE3Ny4wNTIuMDA1LjAwMi4wMDUuMDAxLjE3OC4wNS4wMDUuMDAyLjAwNS4wMDIuMTc4LjA0OC4wMDYuMDAxLjAwNS4wMDIuMTc5LjA0Ni4wMDUuMDAxLjAwNS4wMDIuMTguMDQ0aC4wMDVsLjAwNS4wMDIuMTguMDQyLjAwNi4wMDEuMDA1LjAwMS4xNTkuMDM1LjE2LjAyLjE2LS4wMS4xNTctLjA0LjE0Ni0uMDY5LjEzLS4wOTQuMTEyLS4xMTcuMDg3LS4xMzYuMDYtLjE0OS4wMzMtLjE1OC4wMDItLjE2MS0uMDI4LS4xNTktLjA1Ny0uMTUtLjA4NC0uMTM4LS4xMDgtLjEyLS4xMjgtLjA5OC0uMTQ0LS4wNzItLjEyOC0uMDM5LS4xNTQtLjAzMy0uMTY4LS4wNC0uMTcxLS4wNDEtLjE3LS4wNDQtLjE2OC0uMDQ2LS4xNjctLjA0Ny0uMTY4LS4wNS0uMTY1LS4wNTEtLjE2Ni0uMDU0LS4xNjYtLjA1Ni0uMTYzLS4wNTctLjE2NS0uMDYtLjE2MS0uMDYyLS4xNjQtLjA2NC0uMTYtLjA2NS0uMTYtLjA2OC0uMTYyLS4wNy0uMTU3LS4wNy0uMTU3LS4wNzQtLjE1Ny0uMDc1LS4xNTYtLjA3Ny0uMTUzLS4wNzktLjE1Ni0uMDgyLS4xNTMtLjA4Mi0uMTU0LS4wODYtLjE1LS4wODYtLjE1Mi0uMDktLjE0OC0uMDktLjE0Ny0uMDkyLS4xNDktLjA5NS0uMTQ1LS4wOTUtLjE0NC0uMDk4LS4xNDUtLjEtLjE0My0uMTAyLS4xNC0uMTAzLS4xNC0uMTA0LS4xNC0uMTA4LS4xMzktLjExLS4xMzYtLjExLS4wMjctLjAyMi0uMTMzLS4wOTEtLjE0OC0uMDY1LS4xNTctLjAzNi0uMTYxLS4wMDZ6bTE5LjIxNS4wODdsLS4xNi4wMS0uMTU3LjAzOS0uMTQ2LjA2Ny0uMTEuMDc2LS4wNjQuMDUxLS4xMzkuMTEtLjE0LjEwOC0uMTQuMTA0LS4xNC4xMDMtLjE0My4xMDEtLjE0NS4xMDEtLjE0NC4wOTgtLjE0NS4wOTUtLjE0OS4wOTUtLjE0OC4wOTMtLjE0Ny4wODktLjE1Mi4wOS0uMTUuMDg2LS4xNTQuMDg2LS4xNTMuMDgyLS4xNTYuMDgyLS4xNTMuMDc5LS4xNTYuMDc3LS4xNTcuMDc1LS4xNTguMDczLS4xNTcuMDcxLS4xNi4wNy0uMTYuMDY4LS4xNjEuMDY1LS4xNjQuMDY0LS4xNjEuMDYxLS4xNjUuMDYtLjE2My4wNTgtLjE2Ni4wNTYtLjE2Ni4wNTQtLjE2Ni4wNTEtLjE2Ny4wNS0uMTY3LjA0Ny0uMTcuMDQ2LS4xNjguMDQ0LS4xNzEuMDQyLS4xNjguMDM5LS4xNy4wMzctLjExLjAyMy0uMTU0LjA0Ny0uMTQzLjA3NS0uMTI2LjEtLjEwNi4xMjItLjA4MS4xMzktLjA1NC4xNTItLjAyNS4xNi4wMDYuMTYuMDM1LjE1OC4wNjMuMTQ4LjA5LjEzMy4xMTQuMTE1LjEzMi4wOTIuMTQ4LjA2NS4xNTcuMDM3LjE2LjAwNy4xMzMtLjAxNi4xMTUtLjAyNC4wMDUtLjAwMS4wMDUtLjAwMS4xODEtLjA0aC4wMDVsLjAwNS0uMDAyLjE4LS4wNDIuMDA2LS4wMDEuMDA1LS4wMDEuMTgtLjA0NC4wMDUtLjAwMi4wMDUtLjAwMS4xOC0uMDQ2LjAwNC0uMDAyaC4wMDVsLjE3OS0uMDVoLjAwNWwuMDA1LS4wMDIuMTc4LS4wNS4wMDUtLjAwMi4wMDUtLjAwMi4xNzctLjA1Mi4wMDUtLjAwMi4wMDUtLjAwMS4xNzctLjA1NS4wMDUtLjAwMi4wMDUtLjAwMS4xNzYtLjA1Ny4wMDUtLjAwMi4wMDUtLjAwMi4xNzUtLjA1OS4wMDUtLjAwMS4wMDUtLjAwMi4xNzQtLjA2MS4wMDUtLjAwMi4wMDUtLjAwMi4xNzMtLjA2My4wMDUtLjAwMi4wMDUtLjAwMi4xNzMtLjA2NS4wMDQtLjAwMi4wMDUtLjAwMi4xNzItLjA2OC4wMDUtLjAwMi4wMDUtLjAwMi4xNzEtLjA3LjAwNS0uMDAxLjAwNS0uMDAyLjE3LS4wNzIuMDA1LS4wMDIuMDA0LS4wMDIuMTctLjA3NC4wMDUtLjAwMi4wMDQtLjAwMi4xNjktLjA3Ni4wMDQtLjAwMi4wMDUtLjAwMi4xNjgtLjA3OC4wMDQtLjAwMi4wMDUtLjAwMy4xNjctLjA4LjAwNC0uMDAyLjAwNS0uMDAyLjE2Ni0uMDgyLjAwNC0uMDAyLjAwNS0uMDAzLjE2NS0uMDg0LjAwNC0uMDAyLjAwNS0uMDAzLjE2My0uMDg2LjAwNS0uMDAyLjAwNS0uMDAzLjE2Mi0uMDg4LjAwNS0uMDAyLjAwNS0uMDAzLjE2MS0uMDkuMDA1LS4wMDIuMDA0LS4wMDMuMTYtLjA5Mi4wMDUtLjAwMy4wMDUtLjAwMi4xNi0uMDk0LjAwNC0uMDAzLjAwNC0uMDAzLjE1OC0uMDk2LjAwNS0uMDAyLjAwNC0uMDAzLjE1OC0uMDk4LjAwNC0uMDAzLjAwNS0uMDAzLjE1Ni0uMS4wMDQtLjAwMy4wMDQtLjAwMy4xNTUtLjEwMS4wMDUtLjAwMy4wMDQtLjAwMy4xNTQtLjEwNC4wMDQtLjAwMy4wMDQtLjAwMy4xNTMtLjEwNi4wMDQtLjAwMy4wMDUtLjAwMy4xNTEtLjEwOC4wMDQtLjAwMy4wMDUtLjAwMy4xNS0uMTEuMDA0LS4wMDMuMDA0LS4wMDMuMTQ5LS4xMTIuMDA0LS4wMDMuMDA0LS4wMDMuMTQ4LS4xMTMuMDA0LS4wMDQuMDA0LS4wMDMuMTQ3LS4xMTUuMDA0LS4wMDQuMDA0LS4wMDMuMDY4LS4wNTUuMTE2LS4xMTMuMDkyLS4xMzIuMDY2LS4xNDcuMDM4LS4xNTcuMDA4LS4xNi0uMDIyLS4xNi0uMDUtLjE1My0uMDgtLjE0LS4xMDMtLjEyNS0uMTI0LS4xMDItLjE0Mi0uMDc3LS4xNTMtLjA1LS4xNi0uMDJ6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkTigpIHsgcmV0dXJuIF9leHRlbmRzJE4gPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkTi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE5vbkludGVycnVwdGluZ0VzY2FsYXRpb25JY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyROKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTYuMDEyIDkuMjIyYy0xLjY3MyA0LjY1Ny0yLjczNSA5LjUwOC00LjQwOSAxNC4xNjQgMS41MzYtMS41MjYgMi44NzQtMy4yMzYgNC40MS00Ljc2Mmw0LjQwOCA0Ljc2MmMtMS40OTctNC43MTItMi45MTEtOS40NTEtNC40MDktMTQuMTY0em0uMDMyIDIuOTNjLjgyMyAyLjU4OCAxLjU5OSA1LjE5IDIuNDIxIDcuNzc3bC0yLjQyLTIuNjE0Yy0uNjgzLjU5OC0yLjQ1NCAyLjg4Ni0yLjM0IDIuMzkuODcxLTIuNDg5IDEuNDQ4LTUuMDcgMi4zNC03LjU1MnpNMTYuMDEyLjMxMmMtMS40NDguMDItMi45My4xNTctNC4zMDIuNjI4LS44NTIuNDQ3LS4yNTUgMS44NjMuNjYgMS41NzQgMi4yNTUtLjYwOCA0LjY0OC0uNjA3IDYuOTIyLS4xMDguOTM0LjA3NSAxLjIyOC0xLjM3Ni4zMzgtMS42N0MxOC40NTEuNDQgMTcuMjI3LjMxNyAxNi4wMTIuMzExem05LjAxMiAyLjkzNGMtLjkxMy0uMTA0LTEuMjcyIDEuMjU4LS40NTQgMS42NDggMS44MzQgMS4zNiAzLjI5MyAzLjE4NSA0LjMxIDUuMjIuNTI2Ljc3NiAxLjg0Mi4wOTggMS41MTUtLjc4YTE1LjUyMiAxNS41MjIgMCAwMC01LjA2LTYuMDA2Yy0uMS0uMDQ0LS4yMDMtLjA3LS4zMS0uMDgyek02LjY1IDMuNTljLS43NjIuMDg5LTEuMjQuODA5LTEuODA1IDEuMjY3QzMuMzggNi4yOTUgMi4xNjMgOC4wMDcgMS4zNyA5LjkwNWMtLjI2Ni44OTggMS4wOTQgMS40ODQgMS41NjQuNjc1YTE0LjgyNSAxNC44MjUgMCAwMTQuMzI3LTUuNTZjLjQ3Ni0uNTE1LjA5LTEuNDE5LS42MTItMS40MzF6bTkuMzYyLjAwN2MtLjY5OC4wNjYtMS42ODktLjE2LTIuMDMzLjYzNS0uMjgyLjczMy41MzUgMS4zNTggMS4yMTcgMS4xMjUgMS44MDYtLjE0NyAzLjYzLjIwMyA1LjI5My45MDcuOTAyLjI1NSAxLjQ3Mi0xLjExMi42NTYtMS41NzMtMS42LS43MzUtMy4zNzQtMS4wODktNS4xMzMtMS4wOTR6bS01LjQ3OSAxLjM2NWMtLjgzNS4xNS0xLjUxNy43Ni0yLjIxIDEuMjI2LTEuMjAzLjk0LTIuMzE4IDIuMDYxLTMuMDU3IDMuNDAyLS4zMy45MDQgMS4wNjMgMS41NTIgMS41NDcuNzIzIDEuMDQ1LTEuNjU2IDIuNTk2LTIuOTI1IDQuMjg1LTMuODczLjU0NS0uNDk5LjE3MS0xLjQ2My0uNTY1LTEuNDc4em0xMy45MDMgMi4xMTVjLS44NzUtLjA3LTEuMjIgMS4xNzMtLjUwMSAxLjYyNyAxLjMyNSAxLjM0IDIuMTg4IDMuMDYyIDIuNzQ4IDQuODQuNDY4Ljg0IDEuODY5LjIxIDEuNTU3LS42OTktLjYwNC0yLjExOC0xLjc1MS00LjA5Ny0zLjM1MS01LjYxNWEuOTMuOTMgMCAwMC0uNDUzLS4xNTN6TTQuNDY3IDEzLjEzMmMtLjgyMi0uMDctLjk5Ni44MjYtMS4wNDYgMS40NTUtLjI1NiAxLjkzLS4wOTQgMy45MzMuNTYyIDUuNzY5LjQwNi44NDQgMS44MDcuMzY1IDEuNjEyLS41NTFhMTEuNDk4IDExLjQ5OCAwIDAxLS4zMzQtNS44MDguODc0Ljg3NCAwIDAwLS43OTQtLjg2NXptMjYuNjg3IDEuNmMtLjc0Ni0uMDM3LTEuMDE0Ljc4NS0uODc5IDEuMzk1LjA0MyAyLjM5My0uNTcgNC43NzEtMS42NiA2Ljg5NC0uMzEuODg0IDEuMDIgMS41MzYgMS41My43NWExNS42MzIgMTUuNjMyIDAgMDAxLjgyMS04LjM3Mi44NzYuODc2IDAgMDAtLjgxMi0uNjY3em0tMzAuMTk3LjU3MWMtLjc4Mi0uMDczLTEuMDQ0Ljc3NS0uOTMzIDEuNDA0LjA2OCAyLjQxNC42NjEgNC44MzMgMS44MDkgNi45NjIuNTM0Ljc3IDEuODQyLjA3NiAxLjUwNS0uNzk4YTE0LjgzMyAxNC44MzMgMCAwMS0xLjYwMy02Ljg2MS44NzYuODc2IDAgMDAtLjc3OC0uNzA3em0yNi43ODcgMi4wMjRjLS43NzctLjA0OC0uOTUyLjc5Ny0xLjAyMSAxLjM5Mi0uMzU0IDEuNjkyLTEuMjAyIDMuMjMxLTIuMjE2IDQuNjA4LS40MDcuODcyLjkyNSAxLjYzOCAxLjQ4Ljg1MiAxLjM2MS0xLjczMyAyLjI5Ni0zLjgyNyAyLjU4Mi02LjAxN2EuODc0Ljg3NCAwIDAwLS44MjUtLjgzNXpNNi44NTcgMjMuMDEyYy0uODA4LjAxOC0xLjA4MiAxLjEyMi0uNDcgMS41OSAxLjM5MyAxLjYwNyAzLjE4NyAyLjg4NiA1LjE5NCAzLjU5OS45MS4yMjIgMS40My0xLjE2NS41OTgtMS41OTZhMTEuNDk1IDExLjQ5NSAwIDAxLTQuNzIzLTMuMzk2Ljg5OS44OTkgMCAwMC0uNTk5LS4xOTd6bTE1LjA1NyAyLjdjLS44MS4xOTQtMS41MDQuNzYtMi4zMjUuOTcyLTEuMjAzLjQ1OC0yLjUuNTM2LTMuNzU4LjY2NC0uODY5LjMwNy0uNTczIDEuNzI4LjM0NiAxLjY2MyAyLjIwMS0uMDM0IDQuNDEyLS42MjYgNi4yOTMtMS43NzguNjA0LS40OTUuMjI3LTEuNTMyLS41NTYtMS41MjF6TTYuMzQ2IDI3LjExOGMtLjgzMy4wMDgtMS4xMSAxLjIxOC0uMzk1IDEuNjE3IDEuOTg2IDEuNjAyIDQuMzU4IDIuNzQ5IDYuODY4IDMuMjI2LjkzMy4wNzYgMS4yMjctMS4zNzYuMzM4LTEuNjdhMTQuODM4IDE0LjgzOCAwIDAxLTYuMzQ1LTMuMDY2LjkyOS45MjkgMCAwMC0uNDY2LS4xMDd6bTE5LjIwOC4wODdjLS43NjYuMDktMS4yNDEuODQxLTEuOTIyIDEuMTU4LTEuNTE2Ljk5MS0zLjI1MSAxLjU4LTQuOTk2IDIuMDA1LS44NzIuNDA1LS4zNDYgMS44NDkuNTg0IDEuNjA0IDIuNTQzLS41MjYgNC45OC0xLjY2IDYuOTYzLTMuMzQ0LjQ3LS41Mi4wNzItMS40Mi0uNjMtMS40MjN6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkTSgpIHsgcmV0dXJuIF9leHRlbmRzJE0gPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkTS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE5vbkludGVycnVwdGluZ01lc3NhZ2VJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRNKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNOC43NDIgMTAuNDY0djExLjA3MmgxNC41MTZWMTAuNDY0SDguNzQyem0zLjIyNCAxLjczaDguMDY2YTY5NTY5IDY5NTY5IDAgMDAtNC4wMzQgMy4yMmwtNC4wMzItMy4yMnptOS41NjUgMS4wMTh2Ni41OTRIMTAuNDY5di02LjU5M0wxNiAxNy42M2w1LjUzMi00LjQxOXpNMTYgMGgtLjAwNWwtLjE4OC4wMDFoLS4wMTFsLS4xODguMDA0aC0uMDExbC0uMTg3LjAwNmgtLjAxMWwtLjE4Ny4wMDhoLS4wMDVMMTUuMi4wMmwtLjE4Ny4wMWgtLjAwNWwtLjAwNS4wMDEtLjE4Ny4wMTNoLS4wMTFMMTQuNjIuMDZoLS4wMWwtLjE4Ni4wMThoLS4wMTFsLS4xODUuMDItLjAwNS4wMDFoLS4wMDZsLS4xODUuMDIyLS4wMDUuMDAxaC0uMDA1bC0uMTg1LjAyNWgtLjAwNWwtLjAwNS4wMDEtLjE4NS4wMjdoLS4wMDVsLS4wMDUuMDAxLS4xODQuMDI5aC0uMDA1bC0uMDA1LjAwMS0uMTgzLjAzMS0uMDA2LjAwMS0uMDA1LjAwMS0uMTgyLjAzMy0uMDA2LjAwMS0uMDA1LjAwMS0uMTgyLjAzNS0uMDA1LjAwMS0uMDA1LjAwMS0uMTgyLjAzOGgtLjAwNWwtLjAwNS4wMDItLjE4MS4wNGgtLjAwNWwtLjAwNS4wMDItLjE4LjA0Mi0uMDA2LjAwMS0uMDA1LjAwMS0uMTguMDQ0LS4wMDUuMDAyaC0uMDA1bC0uMTcuMDQ1LS4xNTIuMDU0LS4xMzkuMDgyLS4xMjEuMTA2LS4xLjEyNy0uMDc0LjE0My0uMDQ2LjE1NS0uMDE3LjE2LjAxMy4xNi4wNDMuMTU2LjA3LjE0NS4wOTcuMTMuMTE5LjEwOC4xMzcuMDg1LjE1LjA1OC4xNTkuMDMuMTYtLjAwMS4xMzMtLjAyMy4xNjUtLjA0My4xNjgtLjA0MS4xNzEtLjA0LjE3MS0uMDM3LjE3Mi0uMDM2LjE3LS4wMzMuMTczLS4wMy4xNy0uMDMuMTc3LS4wMjcuMTcxLS4wMjUuMTc1LS4wMjIuMTc1LS4wMi4xNzUtLjAyLjE3Ni0uMDE2LjE3NS0uMDE0LjE3Ny0uMDEyLjE3Ni0uMDEuMTc3LS4wMDcuMTc0LS4wMDYuMTc3LS4wMDNMMTYgMS43M2guMTc3bC4xNzguMDA0LjE3NC4wMDYuMTc3LjAwNy4xNzYuMDEuMTc3LjAxMi4xNzUuMDE0LjE3Ni4wMTcuMTc1LjAxOC4xNzUuMDIuMTc1LjAyMy4xNzEuMDI1LjE3Ni4wMjcuMTcuMDMuMTc0LjAzLjE3LjAzMy4xNzEuMDM2LjE1NC4wMzMuMTYuMDIuMTYxLS4wMS4xNTYtLjA0LjE0Ni0uMDY5LjEzMS0uMDk0LjExMS0uMTE3LjA4Ny0uMTM1LjA2MS0uMTUuMDMyLS4xNTguMDAyLS4xNi0uMDI3LS4xNi0uMDU3LS4xNUwyMCAuNzE0bC0uMTA4LS4xMi0uMTI4LS4wOTctLjE0NS0uMDczLS4xMjgtLjAzOC0uMTU4LS4wMzUtLjAwNS0uMDAxLS4wMDUtLjAwMUwxOS4xNC4zMWgtLjAwNWwtLjAwNS0uMDAyLS4xODItLjAzNWgtLjAwNmwtLjAwNS0uMDAyLS4xODItLjAzM2gtLjAwNmwtLjAwNS0uMDAyLS4xODMtLjAzLS4wMDUtLjAwMS0uMDA2LS4wMDEtLjE4My0uMDI5aC0uMDA1bC0uMDA2LS4wMDEtLjE4NC0uMDI3aC0uMDA1bC0uMDA1LS4wMDEtLjE4NS0uMDI0aC0uMDA1TDE3Ljk2OC4xMiAxNy43ODMuMWwtLjAwNi0uMDAxaC0uMDA1bC0uMTg1LS4wMmgtLjAwNmwtLjAwNS0uMDAxTDE3LjM5LjA2aC0uMDA1TDE3LjM4LjA2bC0uMTg3LS4wMTVoLS4wMDVsLS4wMDUtLjAwMS0uMTg3LS4wMTNoLS4wMTFMMTYuOC4wMmgtLjAxMUwxNi42LjAxaC0uMDExbC0uMTg3LS4wMDZoLS4wMTFMMTYuMjA0IDBoLS4wMTFMMTYuMDA1IDBIMTZ6bTkuMDE1IDIuOTM1bC0uMTYuMDA0LS4xNTguMDMzLS4xNS4wNjItLjEzNC4wOS0uMTE2LjExMS0uMDkzLjEzMi0uMDY3LjE0Ny0uMDM4LjE1Ni0uMDEuMTYxLjAyMi4xNi4wNS4xNTMuMDc4LjE0MS4xMDMuMTI0LjEwMi4wODcuMDQ1LjAzNC4xNDIuMTA2LjEzNy4xMDUuMTQuMTEuMTM2LjExLjEzNS4xMTIuMTM0LjExNS4xMzQuMTE3LjEzLjExNS4xMzIuMTIyLjEyOC4xMi4xMjcuMTIyLjEyNi4xMjUuMTI0LjEyNi4xMjQuMTI4LjEyMS4xMy4xMTguMTI4LjExOC4xMzIuMTE3LjEzMy4xMTMuMTM0LjExMy4xMzYuMTEuMTM2LjEwOS4xMzcuMTA5LjE0Mi4xMDQuMTQuMTAzLjE0LjEwMS4xNDIuMS4xNDQuMDk5LjE0Ni4wOTUuMTQ1LjA5NC4xNDcuMDkzLjE1LjA5Mi4xNS4wODcuMTQ5LjA4Ny4xNS4wODQuMTUyLjA4NC4xNTUuMDguMTUyLjA4LjE1NS4wNC4wODEuMDg0LjEzOC4xMS4xMTkuMTI4LjA5Ni4xNDUuMDcyLjE1NS4wNDMuMTYuMDEzLjE2LS4wMTYuMTU1LS4wNDYuMTQ0LS4wNzQuMTI3LS4wOTkuMTA2LS4xMi4wODMtLjE0LjA1NS0uMTUxLjAyNi0uMTYtLjAwNC0uMTYtLjAzNC0uMTU4LS4wNS0uMTI0LS4wNDItLjA4NS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wODQtLjE2NS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wODYtLjE2NC0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wODgtLjE2Mi0uMDAyLS4wMDUtLjAwMy0uMDA1LS4wOS0uMTYxLS4wMDItLjAwNS0uMDAzLS4wMDQtLjA5Mi0uMTYtLjAwMy0uMDA1LS4wMDItLjAwNS0uMDk0LS4xNi0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOTYtLjE1OS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wOTgtLjE1Ny0uMDAzLS4wMDQtLjAwMy0uMDA1LS4xLS4xNTYtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMTAxLS4xNTQtLjAwMy0uMDA1LS4wMDMtLjAwNC0uMTA0LS4xNTQtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMTA2LS4xNTItLjAwMy0uMDA1LS4wMDMtLjAwNC0uMTA4LS4xNTEtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMTEtLjE1LS4wMDMtLjAwNC0uMDAzLS4wMDQtLjExMS0uMTUtLjAwNC0uMDAzLS4wMDMtLjAwNS0uMTEzLS4xNDctLjAwNC0uMDA0LS4wMDMtLjAwNS0uMTE1LS4xNDYtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMTE3LS4xNDUtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMTItLjE0NC0uMDAzLS4wMDQtLjAwMy0uMDA0LS4xMjEtLjE0Mi0uMDA0LS4wMDQtLjAwMy0uMDA0LS4xMjMtLjE0MS0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xMjUtLjE0LS4wMDMtLjAwNC0uMDA0LS4wMDQtLjEyNy0uMTM4LS4wMDMtLjAwNC0uMDA0LS4wMDQtLjEyOC0uMTM2LS4wMDQtLjAwNC0uMDA0LS4wMDQtLjEzLS4xMzUtLjAwNC0uMDA0LS4wMDQtLjAwNC0uMTMyLS4xMzQtLjAwMy0uMDA0LS4wMDQtLjAwMy0uMTM0LS4xMzMtLjAwNC0uMDAzLS4wMDQtLjAwNC0uMTM1LS4xMy0uMDA0LS4wMDQtLjAwNC0uMDA0LS4xMzYtLjEyOC0uMDA0LS4wMDQtLjAwNC0uMDA0LS4xMzgtLjEyNi0uMDA0LS4wMDQtLjAwNC0uMDAzLS4xNC0uMTI1LS4wMDQtLjAwNC0uMDA0LS4wMDMtLjE0LS4xMjMtLjAwNS0uMDA0LS4wMDQtLjAwMy0uMTQyLS4xMjEtLjAwNC0uMDA0LS4wMDQtLjAwMy0uMTQ0LS4xMi0uMDA0LS4wMDMtLjAwNC0uMDAzLS4xNDUtLjExNy0uMDA0LS4wMDQtLjAwNC0uMDAzLS4xNDctLjExNS0uMDA0LS4wMDQtLjAwNC0uMDAzLS4xNDgtLjExMy0uMDA0LS4wMDMtLjAwNC0uMDA0LS4xNDktLjExMS0uMDA0LS4wMDMtLjAwNC0uMDA0LS4wNS0uMDM2LS4xNC0uMDgzLS4xNS0uMDU1LS4xNi0uMDI3ek02LjYzNCAzLjI4bC0uMTYxLjAwOC0uMTU3LjAzNy0uMTQ3LjA2Ni0uMTExLjA3NC0uMDQuMDMyLS4wMDUuMDAzLS4wMDQuMDA0LS4xNDUuMTE3LS4wMDQuMDAzLS4wMDQuMDA0LS4xNDQuMTE5LS4wMDQuMDAzLS4wMDQuMDA0LS4xNDIuMTItLjAwNC4wMDQtLjAwNC4wMDQtLjE0MS4xMjMtLjAwNC4wMDMtLjAwNC4wMDQtLjE0LjEyNS0uMDA0LjAwMy0uMDA0LjAwNC0uMTM4LjEyNi0uMDA0LjAwNC0uMDA0LjAwNC0uMTM2LjEyOC0uMDA0LjAwNC0uMDA0LjAwNC0uMTM1LjEzLS4wMDQuMDA0LS4wMDQuMDAzLS4xMzQuMTMzLS4wMDQuMDAzLS4wMDQuMDA0LS4xMzIuMTM0LS4wMDMuMDA0LS4wMDQuMDA0LS4xMy4xMzUtLjAwNC4wMDQtLjAwNC4wMDQtLjEyOC4xMzYtLjAwNC4wMDQtLjAwNC4wMDQtLjEyNi4xMzgtLjAwNC4wMDQtLjAwMy4wMDQtLjEyNS4xNC0uMDA0LjAwNC0uMDAzLjAwNC0uMTIzLjE0LS4wMDQuMDA1LS4wMDMuMDA0LS4xMjEuMTQyLS4wMDQuMDA0LS4wMDMuMDA0LS4xMi4xNDQtLjAwMy4wMDQtLjAwMy4wMDQtLjExNy4xNDUtLjAwNC4wMDQtLjAwMy4wMDQtLjExNS4xNDYtLjAwNC4wMDUtLjAwMy4wMDQtLjExMy4xNDctLjAwMy4wMDUtLjAwNC4wMDQtLjExMS4xNDktLjAwMy4wMDQtLjAwNC4wMDQtLjExLjE1LS4wMDIuMDA1LS4wMDMuMDA0LS4xMDguMTUxLS4wMDMuMDA0LS4wMDMuMDA1LS4xMDYuMTUyLS4wMDMuMDA1LS4wMDMuMDA0LS4xMDQuMTU0LS4wMDMuMDA0LS4wMDMuMDA1LS4xMDIuMTU0LS4wMDMuMDA1LS4wMDIuMDA0LS4xLjE1Ni0uMDAzLjAwNS0uMDAzLjAwNC0uMDk4LjE1Ny0uMDAzLjAwNS0uMDAzLjAwNC0uMDk2LjE1OS0uMDAyLjAwNC0uMDAzLjAwNS0uMDk0LjE2LS4wMDMuMDA0LS4wMDIuMDA0LS4wOTIuMTYtLjAwMy4wMDUtLjAwMy4wMDUtLjA5LjE2MS0uMDAyLjAwNS0uMDAzLjAwNS0uMDg4LjE2Mi0uMDAyLjAwNS0uMDAzLjAwNC0uMDg2LjE2NC0uMDAyLjAwNS0uMDAyLjAwNC0uMDg0LjE2NS0uMDAzLjAwNS0uMDAyLjAwNC0uMDgyLjE2Ni0uMDAyLjAwNC0uMDAzLjAwNS0uMDguMTY3LS4wMDIuMDA0LS4wMDIuMDA1LS4wNzguMTY4LS4wMDIuMDA0LS4wMDIuMDA1LS4wNDUuMS0uMDUzLjE1My0uMDIzLjE2LjAwNy4xNi4wMzcuMTU3LjA2NS4xNDguMDkyLjEzMi4xMTQuMTE0LjEzNC4wOS4xNDguMDY0LjE1Ny4wMzUuMTYxLjAwNi4xNi0uMDI1LjE1Mi0uMDU0LjE0LS4wOC4xMjEtLjEwNi4xLS4xMjYuMDY1LS4xMTguMDQzLS4wOTUuMDc0LS4xNi4wNzUtLjE1NS4wNzctLjE1Ny4wOC0uMTU1LjA4LS4xNTIuMDgzLS4xNTUuMDg1LS4xNTIuMDg2LS4xNS4wODgtLjE0OS4wOTEtLjE1LjA5NC0uMTUuMDk0LS4xNDcuMDk1LS4xNDUuMDk5LS4xNDYuMS0uMTQ0LjEtLjE0Mi4xMDQtLjE0LjEwNC0uMTQuMTEtLjE0Mi4xMDctLjEzNy4xMS0uMTM2LjExNC0uMTM2LjExMy0uMTM0LjExNy0uMTMzLjExOC0uMTMyLjExNy0uMTI5LjEyMi0uMTMuMTI0LS4xMjcuMTIzLS4xMjYuMTI3LS4xMjUuMTI3LS4xMjIuMTI4LS4xMi4xMzItLjEyMi4xMy0uMTE1LjEzMy0uMTE3LjEzNS0uMTE1LjEzNS0uMTExLjEzNi0uMTEuMDM3LS4wMy4xMTctLjExLjA5NC0uMTMyLjA2OC0uMTQ2LjA0LS4xNTYuMDEtLjE2MS0uMDItLjE2LS4wNS0uMTU0LS4wNzYtLjE0MS0uMTAyLS4xMjUtLjEyMy0uMTA0LS4xNC0uMDgtLjE1My0uMDUxLS4xNi0uMDIzek0xNiAzLjI4NmgtLjAwNWwtLjE0OC4wMDFoLS4wMWwtLjE0Ny4wMDNoLS4wMTFsLS4xNDcuMDA1aC0uMDExbC0uMTQ2LjAwN2gtLjAxMWwtLjE0Ni4wMDloLS4wMTFsLS4xNDYuMDFoLS4wMDVsLS4wMDUuMDAxLS4xNDYuMDEyaC0uMDExbC0uMTQ1LjAxNGgtLjAwNmwtLjAwNS4wMDEtLjA1LjAwNi0uMTU4LjAzMS0uMTUuMDYtLjEzNS4wODgtLjExNy4xMTEtLjA5NC4xMy0uMDY5LjE0Ny0uMDQuMTU2LS4wMS4xNi4wMTkuMTYuMDQ5LjE1NC4wNzYuMTQyLjEwMi4xMjUuMTIzLjEwNS4xNC4wOC4xNTIuMDUxLjE2LjAyMy4xMzQtLjAwMy4wNDUtLjAwNS4xMzUtLjAxMy4xMzMtLjAxLjEzNi0uMDEuMTM1LS4wMDcuMTM3LS4wMDYuMTM2LS4wMDQuMTM2LS4wMDNoLjI3NGwuMTM2LjAwMy4xMzYuMDA0LjEzNi4wMDYuMTM2LjAwNy4xMzYuMDEuMTMzLjAxLjEzNS4wMTMuMTM1LjAxNC4xMzUuMDE2LjEzNC4wMTguMTMyLjAxOC4xMzQuMDIxLjEzMy4wMjMuMTMzLjAyNC4xMzMuMDI1LjEzLjAyNy4xMzIuMDMuMTMyLjAzLjEyOS4wMzEuMTMuMDM0LjEyOS4wMzUuMTI5LjAzNi4xMy4wNC4xMjYuMDM4LjEyOC4wNDIuMTI2LjA0Mi4xMjguMDQ1LjEyNy4wNDcuMTI2LjA0Ny4xMi4wNDguMTI3LjA1MS4xMjMuMDUyLjAwNi4wMDIuMTQ3LjA0OC4xNi4wMjEuMTYtLjAwOS4xNTctLjAzOC4xNDctLjA2Ny4xMzEtLjA5My4xMTItLjExNi4wODktLjEzNS4wNjItLjE0OS4wMzMtLjE1OC4wMDQtLjE2LS4wMjctLjE2LS4wNTUtLjE1MS0uMDgzLS4xMzktLjEwNy0uMTItLjEyNy0uMDk5LS4xMTgtLjA2My0uMDA0LS4wMDEtLjAwNS0uMDAzLS4wMDUtLjAwMi0uMTMzLS4wNTYtLjAwNS0uMDAyLS4wMDUtLjAwMi0uMTM0LS4wNTQtLjAwNC0uMDAyLS4wMDUtLjAwMi0uMTM1LS4wNTMtLjAwNS0uMDAyLS4wMDUtLjAwMi0uMTM1LS4wNTEtLjAwNS0uMDAyLS4wMDUtLjAwMi0uMTM1LS4wNS0uMDA1LS4wMDEtLjAwNS0uMDAyLS4xMzctLjA0OC0uMDA1LS4wMDEtLjAwNS0uMDAyLS4xMzctLjA0Ni0uMDA1LS4wMDItLjAwNS0uMDAyLS4xMzctLjA0NC0uMDA1LS4wMDItLjAwNS0uMDAxLS4xMzgtLjA0My0uMDA2LS4wMDItLjAwNS0uMDAxLS4xMzgtLjA0Mi0uMDA1LS4wMDEtLjAwNS0uMDAyLS4xNC0uMDRIMTkuNGwtLjAwNS0uMDAyLS4xNC0uMDM4LS4wMDUtLjAwMS0uMDA1LS4wMDItLjE0LS4wMzYtLjAwNS0uMDAxLS4wMDUtLjAwMS0uMTQxLS4wMzUtLjAwNS0uMDAxLS4wMDUtLjAwMS0uMTQyLS4wMzMtLjAwNS0uMDAxLS4wMDUtLjAwMS0uMTQyLS4wMzEtLjAwNS0uMDAyaC0uMDA1bC0uMTQyLS4wMy0uMDA1LS4wMDEtLjAwNS0uMDAxLS4xNDMtLjAyOGgtLjAwNWwtLjAwNS0uMDAyLS4xNDMtLjAyNS0uMDA2LS4wMDEtLjAwNS0uMDAxLS4xNDMtLjAyNC0uMDA1LS4wMDEtLjAwNi0uMDAxLS4xNDMtLjAyMi0uMDA2LS4wMDFoLS4wMDVsLS4xNDQtLjAyMmgtLjAwNWwtLjAwNi0uMDAxLS4xNDQtLjAxOWgtLjAwNWwtLjAwNi0uMDAxLS4xNDQtLjAxN2gtLjAwNmwtLjAwNS0uMDAxLS4xNDUtLjAxNmgtLjAxMWwtLjE0NS0uMDE0SDE3LjFsLS4wMDUtLjAwMS0uMTQ2LS4wMTJoLS4wMWwtLjE0Ni0uMDEtLjAwNi0uMDAxaC0uMDA1bC0uMTQ2LS4wMDloLS4wMTFsLS4xNDctLjAwNmgtLjAxbC0uMTQ3LS4wMDVoLS4wMTFsLS4xNDctLjAwM2gtLjAxMWwtLjE0Ny0uMDAxSDE2em0tNS40ODIgMS4zNjZsLS4xNi4wMDgtLjE1Ny4wMzctLjEyMy4wNTMtLjA2LjAzMi0uMDA1LjAwMi0uMDA0LjAwMy0uMTI4LjA2OS0uMDA0LjAwMi0uMDA1LjAwMy0uMTI2LjA3LS4wMDUuMDAzLS4wMDQuMDAyLS4xMjYuMDcyLS4wMDUuMDAzLS4wMDQuMDAzLS4xMjUuMDczLS4wMDQuMDAzLS4wMDUuMDAzLS4xMjQuMDc1LS4wMDQuMDAzLS4wMDUuMDAyLS4xMjMuMDc3LS4wMDQuMDAzLS4wMDUuMDAzLS4xMjIuMDc4LS4wMDQuMDAzLS4wMDUuMDAzLS4xMjEuMDgtLjAwNC4wMDItLjAwNS4wMDMtLjEyLjA4Mi0uMDA1LjAwMy0uMDA0LjAwMy0uMTIuMDgzLS4wMDQuMDAzLS4wMDQuMDAzLS4xMTguMDg0LS4wMDUuMDAzLS4wMDQuMDAzLS4xMTguMDg2LS4wMDQuMDAzLS4wMDQuMDAzLS4xMTcuMDg4LS4wMDQuMDAzLS4wMDQuMDAzLS4xMTYuMDg5LS4wMDQuMDAzLS4wMDQuMDA0LS4xMTQuMDktLjAwNS4wMDMtLjAwNC4wMDMtLjExMy4wOTItLjAwNC4wMDQtLjAwNC4wMDMtLjExMy4wOTMtLjAwNC4wMDQtLjAwNC4wMDMtLjExMS4wOTUtLjAwNS4wMDMtLjAwNC4wMDQtLjExLjA5Ni0uMDA0LjAwNC0uMDA0LjAwMy0uMTEuMDk4LS4wMDMuMDAzLS4wMDQuMDA0LS4xMDguMS0uMDA0LjAwMy0uMDA0LjAwMy0uMTA3LjEwMS0uMDA0LjAwNC0uMDA0LjAwMy0uMTA2LjEwMi0uMDA0LjAwNC0uMDAzLjAwNC0uMTA1LjEwMy0uMDA0LjAwNC0uMDA0LjAwNC0uMTAzLjEwNS0uMDA0LjAwNC0uMDA0LjAwMy0uMTAyLjEwNi0uMDAzLjAwNC0uMDA0LjAwNC0uMS4xMDctLjAwNC4wMDQtLjAwNC4wMDQtLjA5OS4xMDgtLjAwNC4wMDQtLjAwMy4wMDQtLjA5OC4xMS0uMDAzLjAwMy0uMDA0LjAwNC0uMDk2LjExLS4wMDQuMDA1LS4wMDMuMDA0LS4wOTUuMTExLS4wMDMuMDA0LS4wMDQuMDA0LS4wOTMuMTEzLS4wMDMuMDA0LS4wMDQuMDA0LS4wOTIuMTEzLS4wMDMuMDA0LS4wMDMuMDA1LS4wOS4xMTQtLjAwNC4wMDQtLjAwMy4wMDQtLjA4OS4xMTYtLjAwMy4wMDQtLjAwMy4wMDQtLjA4OC4xMTctLjAwMy4wMDQtLjAwMy4wMDQtLjA4Ni4xMTgtLjAwMy4wMDQtLjAwMy4wMDUtLjA4NC4xMTgtLjAwMy4wMDQtLjAwMy4wMDUtLjA4My4xMi0uMDAzLjAwMy0uMDAzLjAwNS0uMDgyLjEyLS4wMDMuMDA1LS4wMDIuMDA0LS4wNjguMTAzLS4wNzYuMTQyLS4wNDguMTU0LS4wMTguMTYuMDExLjE2MS4wNDEuMTU2LjA3LjE0Ni4wOTUuMTMuMTE3LjExLjEzNi4wODYuMTUuMDYuMTU4LjAzLjE2Mi4wMDIuMTU4LS4wMy4xNS0uMDU3LjEzOC0uMDg1LjExOS0uMTA5LjA4Mi0uMTA1LjA2NS0uMDk5LjA3NS0uMTEuMDc3LS4xMTMuMDc3LS4xMDcuMDgtLjExLjA4LS4xMDguMDg0LS4xMDguMDgzLS4xMDUuMDg2LS4xMDYuMDg2LS4xMDQuMDg4LS4xMDQuMDg5LS4xMDEuMDktLjEwMi4wOTMtLjEwMS4wOTMtLjA5OS4wOTQtLjA5Ny4wOTUtLjA5Ni4wOTgtLjA5Ny4wOTgtLjA5NS4wOTktLjA5My4xLS4wOTIuMTAzLS4wOTEuMTAxLS4wODkuMTA0LS4wODguMTA0LS4wODYuMTA2LS4wODYuMTA2LS4wODMuMTA2LS4wODIuMTA5LS4wODIuMTA4LS4wNzkuMTEtLjA3OC4xMS0uMDc2LjExMi0uMDc2LjExMi0uMDc0LjExMy0uMDcyLjExMy0uMDcxLjExNS0uMDcuMTE1LS4wNjguMTE4LS4wNjcuMTE3LS4wNjUuMTItLjA2NS4wNTQtLjAyOS4xMzUtLjA4OC4xMTYtLjExMS4wOTQtLjEzMi4wNjgtLjE0Ni4wNC0uMTU2LjAwOS0uMTYxLS4wMi0uMTYtLjA1LS4xNTMtLjA3OC0uMTQyLS4xMDItLjEyNS0uMTIzLS4xMDMtLjE0MS0uMDc5LS4xNTMtLjA1MS0uMTYtLjAyMnptMTMuOTEgMi4xMTZsLS4xNjIuMDA4LS4xNTcuMDM3LS4xNDcuMDY2LS4xMzIuMDkyLS4xMTMuMTE2LS4wOS4xMzQtLjA2My4xNDgtLjAzNC4xNTctLjAwNS4xNjIuMDI1LjE1OS4wNTUuMTUyLjA4Mi4xMzguMDg2LjEwMy4wOS4wOS4wOTQuMDk4LjA5Mi4wOTkuMDkzLjEuMDkxLjEwMy4wODkuMTAxLjA4OC4xMDQuMDg2LjEwNC4wODYuMTA2LjA4My4xMDUuMDgzLjEwOC4wOC4xMDguMDgxLjExLjA3Ny4xMDcuMDc3LjExMi4wNzUuMTExLjA3NS4xMTQuMDcyLjExMy4wNzEuMTEzLjA3LjExNC4wNjguMTE4LjA2Ny4xMTUuMDY1LjExOC4wNjQuMTE3LjA2Mi4xMTcuMDYxLjEyMS4wNTkuMTE5LjA1OS4xMjIuMDU2LjEyMS4wNTQuMTIuMDU1LjEyNS4wNTEuMTIzLjA1MS4xMjUuMDQ4LjEyMy4wNDguMTI3LjA0Ny4xMjYuMDQ0LjEyNS4wNDMuMTI4LjA0Mi4xMjkuMDM5LjEyNi4wMzguMTMuMDIyLjA3Ni4wNTguMTUuMDg1LjEzNy4xMS4xMTkuMTI5LjA5Ni4xNDUuMDcuMTU1LjA0My4xNi4wMTMuMTYxLS4wMTcuMTU0LS4wNDYuMTQ0LS4wNzUuMTI2LS4xLjEwNi0uMTIuMDgyLS4xNC4wNTUtLjE1MS4wMjUtLjE2LS4wMDUtLjE2LS4wMjYtLjEzMi0uMDIzLS4wODItLjAwMi0uMDA1LS4wMDEtLjAwNS0uMDQyLS4xMzktLjAwMS0uMDA1LS4wMDItLjAwNS0uMDQzLS4xMzgtLjAwMS0uMDA1LS4wMDItLjAwNS0uMDQ0LS4xMzctLjAwMi0uMDA1LS4wMDItLjAwNS0uMDQ2LS4xMzctLjAwMi0uMDA1LS4wMDEtLjAwNS0uMDQ4LS4xMzctLjAwMi0uMDA1LS4wMDItLjAwNS0uMDUtLjEzNS0uMDAxLS4wMDUtLjAwMi0uMDA1LS4wNTEtLjEzNS0uMDAyLS4wMDUtLjAwMi0uMDA1LS4wNTMtLjEzNS0uMDAyLS4wMDUtLjAwMi0uMDA1LS4wNTQtLjEzMy0uMDAyLS4wMDUtLjAwMi0uMDA1LS4wNTctLjEzMy0uMDAyLS4wMDUtLjAwMi0uMDA1LS4wNTctLjEzMi0uMDAzLS4wMDUtLjAwMi0uMDA1LS4wNi0uMTMyLS4wMDEtLjAwNS0uMDAyLS4wMDQtLjA2MS0uMTMyLS4wMDMtLjAwNC0uMDAyLS4wMDUtLjA2My0uMTMtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDY0LS4xMy0uMDAzLS4wMDQtLjAwMi0uMDA1LS4wNjYtLjEyOS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wNjctLjEyOC0uMDAyLS4wMDUtLjAwMy0uMDA0LS4wNjktLjEyOC0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wNy0uMTI2LS4wMDMtLjAwNS0uMDAzLS4wMDQtLjA3Mi0uMTI2LS4wMDItLjAwNS0uMDAzLS4wMDQtLjA3NC0uMTI1LS4wMDItLjAwNC0uMDAzLS4wMDUtLjA3NS0uMTI0LS4wMDMtLjAwNC0uMDAzLS4wMDUtLjA3Ni0uMTIzLS4wMDMtLjAwNC0uMDAzLS4wMDUtLjA3OC0uMTIyLS4wMDMtLjAwNC0uMDAzLS4wMDUtLjA4LS4xMjEtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMDgxLS4xMi0uMDAzLS4wMDUtLjAwMy0uMDA0LS4wODMtLjEyLS4wMDMtLjAwNC0uMDAzLS4wMDQtLjA4NC0uMTE4LS4wMDMtLjAwNS0uMDAzLS4wMDQtLjA4Ni0uMTE4LS4wMDMtLjAwNC0uMDA0LS4wMDQtLjA4Ny0uMTE3LS4wMDMtLjAwNC0uMDAzLS4wMDQtLjA5LS4xMTYtLjAwMi0uMDA0LS4wMDQtLjAwNC0uMDktLjExNC0uMDAzLS4wMDUtLjAwNC0uMDA0LS4wOTEtLjExMy0uMDA0LS4wMDQtLjAwMy0uMDA0LS4wOTQtLjExMy0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOTUtLjExMS0uMDA0LS4wMDQtLjAwMy0uMDA0LS4wOTYtLjExLS4wMDQtLjAwNS0uMDAzLS4wMDQtLjA5OC0uMTEtLjAwNC0uMDAzLS4wMDMtLjAwNC0uMS0uMTA4LS4wMDMtLjAwNC0uMDA0LS4wMDQtLjEtLjEwNy0uMDA0LS4wMDQtLjAwNC0uMDA0LS4xMDItLjEwNi0uMDAzLS4wMDMtLjAwNC0uMDA0LS4wOTMtLjA5NS0uMTI0LS4xMDMtLjE0LS4wOC0uMTUzLS4wNS0uMTYtLjAyM3pNNC40NSAxMi44MjZsLS4xNjEuMDAyLS4xNTguMDMyLS4xNS4wNi0uMTM1LjA4OC0uMTE4LjExLS4wOTQuMTMxLS4wNjkuMTQ2LS4wMzUuMTI5LS4wMjYuMTMydi4wMDVsLS4wMDIuMDA1LS4wMjUuMTQzLS4wMDEuMDA1LS4wMDEuMDA2LS4wMjQuMTQzLS4wMDEuMDA1LS4wMDEuMDA2LS4wMjIuMTQzLS4wMDEuMDA2LS4wMDEuMDA1LS4wMi4xNDQtLjAwMS4wMDUtLjAwMS4wMDUtLjAxOS4xNDV2LjAwNWwtLjAwMS4wMDYtLjAxNy4xNDR2LjAwNmwtLjAwMS4wMDUtLjAxNi4xNDV2LjAxMWwtLjAxNC4xNDV2LjAwNWwtLjAwMS4wMDYtLjAxMi4xNDZ2LjAxbC0uMDEuMTQ2LS4wMDEuMDA2di4wMDVsLS4wMDkuMTQ2di4wMTFsLS4wMDcuMTQ2di4wMTFsLS4wMDQuMTQ3di4wMTFsLS4wMDMuMTQ3di4wMWwtLjAwMi4xNDh2LjAxbC4wMDEuMTQ4di4wMWwuMDAzLjE0N3YuMDExbC4wMDUuMTQ3di4wMWwuMDA3LjE0N3YuMDExbC4wMDkuMTQ2di4wMTFsLjAxLjE0NnYuMDFsLjAxMy4xNDZ2LjAxMWwuMDE0LjE0NXYuMDA1bC4wMDEuMDA2LjAxNi4xNDV2LjAxMWwuMDE4LjE0NHYuMDA2bC4wMDEuMDA1LjAxOS4xNDR2LjAwNmwuMDAxLjAwNS4wMjEuMTQ0di4wMDVsLjAwMi4wMDYuMDIyLjE0M3YuMDA2bC4wMDIuMDA1LjAyNC4xNDN2LjAwNWwuMDAyLjAwNi4wMjUuMTQzLjAwMS4wMDUuMDAxLjAwNS4wMjguMTQzLjAwMS4wMDUuMDAxLjAwNS4wMy4xNDJ2LjAwNWwuMDAyLjAwNi4wMy4xNDEuMDAyLjAwNS4wMDEuMDA1LjAzMy4xNDJ2LjAwNWwuMDAyLjAwNS4wMzUuMTR2LjAwNmwuMDAyLjAwNS4wMzYuMTQuMDAyLjAwNS4wMDEuMDA1LjAzOC4xNC4wMDEuMDA1LjAwMi4wMDUuMDQuMTR2LjAwNWwuMDAyLjAwNS4wNDIuMTM4LjAwMS4wMDYuMDAyLjAwNS4wNDIuMTM4LjAwMi4wMDUuMDAyLjAwNS4wMTcuMDU0LjA2NC4xNDguMDkuMTM0LjExNC4xMTQuMTMyLjA5Mi4xNDguMDY1LjE1Ny4wMzcuMTYuMDA3LjE2LS4wMjMuMTUzLS4wNTIuMTQtLjA4LjEyMy0uMTA0LjEwMi0uMTI1LjA3Ni0uMTQyLjA0OS0uMTUzLjAyLS4xNi0uMDExLS4xNjEtLjAzMS0uMTMtLjAxNy0uMDUxLS4wMzktLjEyNi0uMDM4LS4xMy0uMDM3LS4xMjgtLjAzNS0uMTMtLjAzMy0uMTI4LS4wMzMtLjEzNC0uMDMtLjEzLS4wMjktLjEzMS0uMDI2LS4xMy0uMDI2LS4xMzMtLjAyNC0uMTMzLS4wMjMtLjEzMy0uMDItLjEzMi0uMDItLjEzNi0uMDE3LS4xMzItLjAxNi0uMTM1LS4wMTQtLjEzNS0uMDEyLS4xMzMtLjAxMi0uMTM4LS4wMDktLjEzMy0uMDA3LS4xMzYtLjAwNi0uMTM4LS4wMDQtLjEzNC0uMDAzLS4xMzZ2LS4yNzRsLjAwMy0uMTM2LjAwNC0uMTM0LjAwNi0uMTM5LjAwNy0uMTM2LjAxLS4xMzMuMDEtLjEzOC4wMTMtLjEzMi4wMTQtLjEzNS4wMTYtLjEzNS4wMTctLjEzMi4wMi0uMTM3LjAyLS4xMy4wMjMtLjEzNC4wMjQtLjEzMy4wMjQtLjEyNi4wMTYtLjE2LS4wMTQtLjE2MS0uMDQ0LS4xNTUtLjA3Mi0uMTQ1LS4wOTgtLjEyOC0uMTItLjEwOC0uMTM3LS4wODQtLjE1LS4wNTctLjE2LS4wMjl6bTI2LjY5OCAxLjYwMWwtLjE2MS4wMS0uMTU3LjA0LS4xNDYuMDY3LS4xMzEuMDkzLS4xMTIuMTE3LS4wODguMTM1LS4wNjEuMTQ5LS4wMzMuMTU3LS4wMDUuMTM0LjAwNi4xNC4wMDYuMTc2LjAwMy4xNzcuMDAxLjE3OC0uMDAxLjE3Ny0uMDAzLjE3OC0uMDA2LjE3Ny0uMDA3LjE3Ni0uMDEuMTc3LS4wMTIuMTc2LS4wMTUuMTc2LS4wMTYuMTczLS4wMTguMTc1LS4wMi4xNzUtLjAyNC4xNzQtLjAyNS4xNzUtLjAyNi4xNy0uMDMuMTc0LS4wMy4xNzMtLjAzMy4xNy0uMDM2LjE3Mi0uMDM3LjE3LS4wNC4xNy0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ1LjE2Ni0uMDQ4LjE2OS0uMDUuMTY3LS4wNTIuMTY4LS4wNTMuMTY0LS4wNTYuMTY2LS4wNTguMTY2LS4wNi4xNi0uMDYyLjE2NS0uMDYyLjE1OC0uMDY2LjE2NS0uMDY4LjE2LS4wNy4xNi0uMDcuMTU4LS4wNzUuMTU5LS4wNzQuMTU1LS4wNzkuMTU4LS4wOC4xNTgtLjA2LjE1LS4wMy4xNTgtLjAwMS4xNjEuMDI5LjE1OS4wNTguMTUuMDg1LjEzNy4xMDguMTE5LjEzLjA5Ny4xNDQuMDcuMTU2LjA0NC4xNi4wMTMuMTYtLjAxNy4xNTUtLjA0Ni4xNDMtLjA3NC4xMjctLjEuMTA3LS4xMi4wNy0uMTE1LjA4My0uMTY0LjAwMy0uMDA1LjAwMi0uMDA0LjA4Mi0uMTY2LjAwMi0uMDA1LjAwMy0uMDA0LjA4LS4xNjcuMDAyLS4wMDUuMDAyLS4wMDQuMDc4LS4xNjguMDAyLS4wMDUuMDAyLS4wMDQuMDc2LS4xNjkuMDAyLS4wMDQuMDAyLS4wMDUuMDc0LS4xNy4wMDItLjAwNC4wMDItLjAwNS4wNzItLjE3LjAwMi0uMDA1LjAwMi0uMDA1LjA3LS4xNzEuMDAxLS4wMDUuMDAyLS4wMDUuMDY4LS4xNzIuMDAyLS4wMDQuMDAyLS4wMDUuMDY1LS4xNzMuMDAyLS4wMDUuMDAyLS4wMDUuMDYzLS4xNzMuMDAyLS4wMDUuMDAyLS4wMDUuMDYtLjE3NC4wMDMtLjAwNS4wMDEtLjAwNS4wNi0uMTc1LjAwMS0uMDA1LjAwMi0uMDA1LjA1Ny0uMTc2LjAwMS0uMDA1LjAwMi0uMDA1LjA1NS0uMTc3LjAwMS0uMDA1LjAwMi0uMDA1LjA1Mi0uMTc3LjAwMi0uMDA1LjAwMS0uMDA1LjA1MS0uMTc4LjAwMS0uMDA1LjAwMi0uMDA1LjA0OC0uMTc5LjAwMi0uMDA1di0uMDA1bC4wNDctLjE3OS4wMDEtLjAwNS4wMDItLjAwNS4wNDQtLjE4di0uMDA1bC4wMDItLjAwNS4wNDItLjE4LjAwMS0uMDA2LjAwMS0uMDA1LjA0LS4xODEuMDAxLS4wMDUuMDAxLS4wMDUuMDM3LS4xODIuMDAyLS4wMDV2LS4wMDVsLjAzNi0uMTgydi0uMDA2bC4wMDItLjAwNS4wMzMtLjE4MnYtLjAwNmwuMDAyLS4wMDUuMDMtLjE4My4wMDEtLjAwNS4wMDEtLjAwNS4wMjktLjE4NHYtLjAwNWwuMDAxLS4wMDYuMDI3LS4xODR2LS4wMDVsLjAwMS0uMDA1LjAyNC0uMTg1di0uMDA1bC4wMDEtLjAwNS4wMjItLjE4NXYtLjAwNmwuMDAxLS4wMDUuMDItLjE4NXYtLjAwNmwuMDAxLS4wMDUuMDE3LS4xODZ2LS4wMDVsLjAwMS0uMDA1LjAxNS0uMTg3di0uMDA1bC4wMDEtLjAwNS4wMTMtLjE4N3YtLjAxbC4wMS0uMTg3LjAwMS0uMDA2di0uMDA1bC4wMDktLjE4N3YtLjAxMWwuMDA2LS4xODd2LS4wMTFsLjAwNC0uMTg4di0uMDExbC4wMDEtLjE4OHYtLjAxbC0uMDAxLS4xODh2LS4wMTFsLS4wMDQtLjE4OHYtLjAxMWwtLjAwNi0uMTg3di0uMDExbC0uMDA3LS4xNDUtLjAyMi0uMTYtLjA1LS4xNTItLjA4LS4xNDEtLjEwMy0uMTI0LS4xMjUtLjEwMi0uMTQxLS4wNzctLjE1My0uMDUtLjE2LS4wMnpNLjkzOCAxNUwuNzc3IDE1bC0uMTU4LjAzMi0uMTUuMDYtLjEzNi4wODctLjExNy4xMS0uMDk1LjEzMS0uMDY4LjE0Ni0uMDQuMTU2LS4wMTIuMTMzLS4wMDEuMTR2LjAxbC4wMDEuMTg4di4wMTFsLjAwNC4xODh2LjAxMWwuMDA2LjE4N3YuMDExbC4wMDguMTg3di4wMTFsLjAxMS4xODd2LjAwNWwuMDAxLjAwNS4wMTMuMTg3di4wMWwuMDE2LjE4N3YuMDFsLjAxOC4xODZ2LjAxMWwuMDIuMTg1LjAwMS4wMDV2LjAwNmwuMDIyLjE4NS4wMDEuMDA1di4wMDVsLjAyNS4xODV2LjAwNWwuMDAxLjAwNS4wMjcuMTg0di4wMDZsLjAwMS4wMDUuMDI5LjE4NHYuMDA1bC4wMDEuMDA1LjAzMS4xODMuMDAxLjAwNS4wMDEuMDA2LjAzMy4xODIuMDAxLjAwNS4wMDEuMDA2LjAzNS4xODIuMDAxLjAwNS4wMDEuMDA1LjAzOC4xODJ2LjAwNWwuMDAyLjAwNS4wNC4xODF2LjAwNWwuMDAyLjAwNS4wNDIuMTguMDAxLjAwNi4wMDEuMDA1LjA0NC4xOC4wMDIuMDA1di4wMDVsLjA0Ny4xOC4wMDEuMDA0LjAwMi4wMDUuMDQ4LjE3OS4wMDIuMDA1LjAwMS4wMDUuMDUuMTc4LjAwMi4wMDUuMDAxLjAwNS4wNTMuMTc3LjAwMi4wMDUuMDAxLjAwNS4wNTUuMTc3LjAwMi4wMDUuMDAxLjAwNS4wNTcuMTc2LjAwMi4wMDUuMDAxLjAwNS4wNi4xNzUuMDAxLjAwNS4wMDIuMDA1LjA2MS4xNzQuMDAyLjAwNS4wMDIuMDA1LjA2My4xNzMuMDAyLjAwNS4wMDIuMDA1LjA2NS4xNzMuMDAyLjAwNS4wMDIuMDA0LjA2Ny4xNzIuMDAyLjAwNS4wMDIuMDA1LjA3LjE3MS4wMDIuMDA1LjAwMi4wMDUuMDcyLjE3LjAwMi4wMDUuMDAyLjAwNC4wNzQuMTcuMDAyLjAwNS4wMDIuMDA0LjA3Ni4xNjkuMDAyLjAwNC4wMDIuMDA1LjA3OC4xNjguMDAyLjAwNC4wMDIuMDA1LjA4LjE2Ny4wMDMuMDA0LjAwMi4wMDUuMDgyLjE2Ni4wMDIuMDA0LjAwMy4wMDUuMDIuMDQuMDg2LjEzNi4xMS4xMTguMTMuMDk1LjE0Ni4wNy4xNTYuMDQxLjE2LjAxMi4xNi0uMDE5LjE1NS0uMDQ4LjE0Mi0uMDc1LjEyNi0uMS4xMDUtLjEyMy4wOC0uMTQuMDU0LS4xNTIuMDI0LS4xNi0uMDA2LS4xNi0uMDM2LS4xNTgtLjA1MS0uMTIzLS4wMTgtLjAzNC0uMDc4LS4xNThMMy4xIDIyLjFsLS4wNzQtLjE2LS4wNzEtLjE1Ny0uMDctLjE2LS4wNjgtLjE2LS4wNjctLjE2NS0uMDYyLS4xNTgtLjA2Mi0uMTY0LS4wNTktLjE2MS0uMDU4LS4xNjYtLjA1Ni0uMTY2LS4wNTMtLjE2NC0uMDUyLS4xNjgtLjA1LS4xNjctLjA0OC0uMTctLjA0NS0uMTY1LS4wNDMtLjE2OC0uMDQzLS4xNzItLjAzOS0uMTctLjAzNy0uMTctLjAzNi0uMTcyLS4wMzMtLjE3LS4wMy0uMTczLS4wMy0uMTc0LS4wMjctLjE3LS4wMjUtLjE3NS0uMDIyLS4xNzQtLjAyMS0uMTc1LS4wMTgtLjE3NS0uMDE3LS4xNzMtLjAxNC0uMTc2LS4wMTItLjE3Ni0uMDEtLjE3Ny0uMDA3LS4xNzYtLjAwNi0uMTc3LS4wMDMtLjE3OEwxLjczIDE2di0uMTM0bC0uMDEzLS4xNi0uMDQ0LS4xNTYtLjA3Mi0uMTQ0LS4wOTctLjEyOS0uMTItLjEwOC0uMTM3LS4wODUtLjE1LS4wNTdMLjkzOCAxNXptMjYuNzk4IDIuMDI0bC0uMTYuMDA3LS4xNTcuMDM4LS4xNDguMDY2LS4xMzIuMDkyLS4xMTMuMTE1LS4wOS4xMzQtLjA2Mi4xNDgtLjAzLjEyNy0uMDAxLjAwNC0uMDIzLjEzNC0uMDI0LjEzMy0uMDI2LjEzMy0uMDI2LjEzLS4wMy4xMzItLjAzLjEyOS0uMDMyLjEzNC0uMDMzLjEyOC0uMDM1LjEzLS4wMzcuMTI4LS4wMzguMTMtLjA0LjEyNi0uMDQuMTI4LS4wNDQuMTI4LS4wNDQuMTI2LS4wNDYuMTI2LS4wNDguMTI2LS4wNS4xMjUtLjA1LjEyNS0uMDUxLjEyMi0uMDU0LjEyMy0uMDU1LjEyMi0uMDU2LjEyLS4wNTguMTIyLS4wNi4xMi0uMDYxLjEyLS4wNjMuMTE5LS4wNjIuMTE2LS4wNjcuMTE5LS4wNjYuMTE2LS4wNjkuMTE1LS4wNjkuMTE1LS4wNy4xMTMtLjA3My4xMTMtLjA3NC4xMTItLjA3Ni4xMTMtLjA3Ny4xMTItLjA3Ny4xMDctLjA4LjExLS4wOC4xMDctLjA4NS4xMS0uMDQ0LjA1Ni0uMDg4LjEzNS0uMDYuMTUtLjAzMy4xNTgtLjAwMi4xNi4wMjcuMTYuMDU3LjE1LjA4My4xMzguMTA4LjEyLjEyOC4wOTguMTQ0LjA3Mi4xNTUuMDQ1LjE2LjAxNS4xNjEtLjAxNi4xNTUtLjA0NC4xNDQtLjA3My4xMjgtLjA5OC4wOS0uMDk5LjA1LS4wNjEuMDAzLS4wMDQuMDAzLS4wMDUuMDg5LS4xMTUuMDAzLS4wMDQuMDAzLS4wMDUuMDg4LS4xMTYuMDAzLS4wMDQuMDAzLS4wMDUuMDg2LS4xMTcuMDAzLS4wMDQuMDAzLS4wMDUuMDg0LS4xMTguMDAzLS4wMDQuMDAzLS4wMDUuMDgzLS4xMi4wMDMtLjAwNC4wMDMtLjAwNC4wODEtLjEyLjAwMy0uMDA1LjAwMy0uMDA0LjA4LS4xMjEuMDAzLS4wMDUuMDAzLS4wMDQuMDc4LS4xMjIuMDAzLS4wMDUuMDAzLS4wMDQuMDc3LS4xMjMuMDAyLS4wMDUuMDAzLS4wMDQuMDc1LS4xMjQuMDAzLS4wMDUuMDAzLS4wMDQuMDczLS4xMjUuMDAzLS4wMDUuMDAzLS4wMDQuMDcyLS4xMjYuMDAyLS4wMDQuMDAzLS4wMDUuMDctLjEyNi4wMDMtLjAwNS4wMDItLjAwNS4wNy0uMTI3LjAwMi0uMDA0LjAwMi0uMDA1LjA2OC0uMTI4LjAwMi0uMDA1LjAwMi0uMDA0LjA2Ni0uMTMuMDAzLS4wMDQuMDAyLS4wMDUuMDY0LS4xMy4wMDItLjAwNC4wMDMtLjAwNS4wNjItLjEzLjAwMi0uMDA1LjAwMy0uMDA1LjA2LS4xMy4wMDMtLjAwNS4wMDItLjAwNS4wNi0uMTMyLjAwMi0uMDA1LjAwMi0uMDA1LjA1Ny0uMTMyLjAwMy0uMDA1LjAwMi0uMDA1LjA1Ni0uMTMzLjAwMi0uMDA1LjAwMi0uMDA1LjA1NC0uMTM0LjAwMi0uMDA0LjAwMi0uMDA1LjA1My0uMTM1LjAwMi0uMDA1LjAwMi0uMDA1LjA1MS0uMTM1LjAwMi0uMDA1LjAwMi0uMDA1LjA1LS4xMzUuMDAxLS4wMDUuMDAyLS4wMDUuMDQ4LS4xMzcuMDAxLS4wMDUuMDAyLS4wMDUuMDQ2LS4xMzcuMDAyLS4wMDUuMDAyLS4wMDUuMDQ0LS4xMzcuMDAyLS4wMDUuMDAyLS4wMDUuMDQyLS4xMzguMDAyLS4wMDUuMDAxLS4wMDYuMDQyLS4xMzguMDAxLS4wMDUuMDAyLS4wMDUuMDQtLjE0VjE5LjRsLjAwMi0uMDA1LjAzOC0uMTQuMDAxLS4wMDUuMDAyLS4wMDUuMDM2LS4xNC4wMDEtLjAwNS4wMDEtLjAwNS4wMzUtLjE0MS4wMDEtLjAwNS4wMDEtLjAwNS4wMzMtLjE0Mi4wMDEtLjAwNS4wMDEtLjAwNS4wMzEtLjE0MS4wMDEtLjAwNi4wMDItLjAwNS4wMjktLjE0MnYtLjAwNWwuMDAyLS4wMDUuMDI4LS4xNDN2LS4wMDVsLjAwMi0uMDA1LjAyNS0uMTQzLjAwMS0uMDA2LjAwMS0uMDA1LjAyNC0uMTQzLjAwMS0uMDA1LjAwMS0uMDA2LjAwMS0uMDA2LjAxLS4xNjEtLjAyLS4xNi0uMDUtLjE1NC0uMDc3LS4xNDEtLjEwMi0uMTI1LS4xMjMtLjEwNC0uMTQxLS4wNzktLjE1My0uMDUxLS4xNi0uMDIyek02Ljg0MSAyMi43MWwtLjE2LjAyNC0uMTUyLjA1My0uMTQuMDgtLjEyMi4xMDUtLjEwMS4xMjYtLjA3Ni4xNDItLjA0OC4xNTQtLjAxOC4xNi4wMTEuMTYxLjA0MS4xNTYuMDcuMTQ2LjA3Ny4xMDkuMDQuMDQ4LjAwMy4wMDQuMDAzLjAwNC4wOTUuMTExLjAwMy4wMDQuMDA0LjAwNC4wOTYuMTEuMDA0LjAwNS4wMDMuMDA0LjA5OC4xMDkuMDAzLjAwNC4wMDQuMDA0LjEuMTA4LjAwMy4wMDQuMDAzLjAwNC4xMDEuMTA3LjAwNC4wMDQuMDAzLjAwNC4xMDIuMTA1LjAwNC4wMDQuMDA0LjAwNC4xMDMuMTA1LjAwNC4wMDQuMDA0LjAwMy4xMDUuMTA0LjAwMy4wMDQuMDA0LjAwMy4xMDYuMTAyLjAwNC4wMDQuMDA0LjAwNC4xMDcuMS4wMDQuMDA0LjAwNC4wMDQuMTA4LjA5OS4wMDQuMDAzLjAwNC4wMDQuMTEuMDk4LjAwMy4wMDMuMDA0LjAwNC4xMS4wOTYuMDA0LjAwMy4wMDUuMDA0LjExLjA5NS4wMDUuMDAzLjAwNC4wMDQuMTEzLjA5My4wMDQuMDAzLjAwNC4wMDQuMTEzLjA5MS4wMDQuMDA0LjAwNS4wMDMuMTE0LjA5LjAwNC4wMDQuMDA0LjAwMy4xMTYuMDg5LjAwNC4wMDMuMDA0LjAwMy4xMTcuMDg4LjAwNC4wMDMuMDA0LjAwMy4xMTguMDg2LjAwNC4wMDMuMDA1LjAwMy4xMTguMDg0LjAwNC4wMDMuMDA1LjAwMy4xMTkuMDgzLjAwNC4wMDMuMDA1LjAwMy4xMi4wODEuMDA1LjAwMy4wMDQuMDAzLjEyMS4wOC4wMDUuMDAzLjAwNC4wMDMuMTIyLjA3OC4wMDUuMDAzLjAwNC4wMDMuMTIzLjA3Ni4wMDUuMDAzLjAwNC4wMDMuMTI0LjA3NS4wMDUuMDAzLjAwNC4wMDMuMTI1LjA3My4wMDQuMDAzLjAwNS4wMDIuMTI2LjA3My4wMDQuMDAyLjAwNS4wMDMuMTI2LjA3LjAwNS4wMDMuMDA0LjAwMi4xMjguMDcuMDA0LjAwMi4wMDUuMDAyLjEyOC4wNjcuMDA1LjAwMy4wMDQuMDAyLjEzLjA2Ni4wMDQuMDAyLjAwNS4wMDMuMTMuMDY0LjAwNC4wMDIuMDA1LjAwMy4xMy4wNjIuMDA1LjAwMi4wMDQuMDAzLjEzMi4wNi4wMDQuMDAzLjAwNS4wMDIuMTMyLjA2LjAwNS4wMDIuMDA1LjAwMi4xMzIuMDU3LjAwNS4wMDIuMDA1LjAwMi4xMzMuMDU3LjAwNS4wMDIuMDA1LjAwMi4xMzMuMDU0LjAwNS4wMDIuMDA1LjAwMi4xMy4wNS4xNTQuMDQ1LjE2LjAxNi4xNi0uMDE1LjE1Ni0uMDQ1LjE0NC0uMDcyLjEyOC0uMDk4LjEwOC0uMTIuMDgzLS4xMzguMDU3LS4xNS4wMjgtLjE2LS4wMDMtLjE2LS4wMzItLjE1OS0uMDYxLS4xNDktLjA4OC0uMTM1LS4xMS0uMTE3LS4xMzItLjA5NC0uMTItLjA1OC0uMTI0LS4wNDktLjEyNi0uMDUxLS4xMjItLjA1MS0uMTIyLS4wNTQtLjEyLS4wNTQtLjEyNi0uMDU4LS4xMTktLjA1Ny0uMTItLjA2LS4xMi0uMDYtLjExOC0uMDYzLS4xMTctLjA2NC0uMTE5LS4wNjYtLjExNi0uMDY2LS4xMTUtLjA2OC0uMTE1LS4wNy0uMTEzLS4wNy0uMTE1LS4wNzQtLjExMi0uMDc0LS4xMS0uMDc1LS4xMS0uMDc2LS4xMTItLjA4LS4xMS0uMDgtLjEwOS0uMDgxLS4xMDYtLjA4Mi0uMTA0LS4wODItLjEwNi0uMDg2LS4xMDUtLjA4Ny0uMTAxLS4wODYtLjEwNS0uMDkxLS4xLS4wOS0uMS0uMDkxLS4xLS4wOTQtLjA5Ny0uMDk0LS4xLS4wOTgtLjA5My0uMDk1LS4wOTYtLjEtLjA5My0uMDk4LS4wOTItLjEwMS0uMDg5LS4xLS4wOS0uMTAyLS4wODgtLjEwNC0uMDM2LS4wNDMtLjExNC0uMTE0LS4xMzMtLjA5MS0uMTQ4LS4wNjUtLjE1Ny0uMDM2LS4xNjEtLjAwNnptMTUuMDYzIDIuNzAxbC0uMTYuMDE0LS4xNTYuMDQ0LS4xMi4wNTctLjA2LjAzNC0uMTIuMDY2LS4xMTcuMDY0LS4xMTguMDYyLS4xMi4wNjEtLjEyLjA2LS4xMTguMDU3LS4xMjYuMDU4LS4xMi4wNTQtLjEyMi4wNTQtLjEyMi4wNS0uMTI2LjA1Mi0uMTI1LjA1LS4xMjQuMDQ2LS4xMjcuMDQ3LS4xMjUuMDQ0LS4xMjkuMDQzLS4xMjYuMDQtLjEzLjA0Mi0uMTI4LjAzOC0uMTI3LjAzNS0uMTMuMDM2LS4xMzEuMDM0LS4xMjkuMDMxLS4xMzIuMDMtLjEzLjAzLS4xMzUuMDI3LS4xMzMuMDI2LS4xMy4wMjMtLjEzLjAyMi0uMTM3LjAyMS0uMTMyLjAyLS4xMzQuMDE3LS4xMzIuMDE1LS4xMzguMDE1LS4xMzUuMDEzLS4xMzMuMDEtLjEzOC4wMS0uMTM2LjAwNy0uMTM0LjAwNi0uMTM2LjAwNC0uMTQuMDAzLS4xNi4wMTgtLjE1NS4wNDctLjE0Mi4wNzYtLjEyNy4xLS4xMDUuMTIyLS4wOC4xNC0uMDU0LjE1MS0uMDI1LjE2LjAwNi4xNi4wMzUuMTU4LjA2NC4xNDguMDkuMTM0LjExNC4xMTQuMTMzLjA5Mi4xNDcuMDY1LjE1Ny4wMzYuMTM0LjAwOC4xNDUtLjAwMmguMDExbC4xNDctLjAwNWguMDFsLjE0Ny0uMDA3aC4wMTFsLjE0Ni0uMDA5aC4wMTFsLjE0Ni0uMDFoLjAwNWwuMDA1LS4wMDEuMTQ2LS4wMTJoLjAxMWwuMTQ1LS4wMTRoLjAwNWwuMDA2LS4wMDEuMTQ1LS4wMTZoLjAxMWwuMTQ0LS4wMThoLjAwNmwuMDA1LS4wMDEuMTQ0LS4wMmguMDExbC4xNDQtLjAyMS4wMDUtLjAwMWguMDA2bC4xNDMtLjAyMy4wMDYtLjAwMWguMDA1bC4xNDMtLjAyNWguMDA1bC4wMDYtLjAwMi4xNDMtLjAyNmguMDA1bC4wMDUtLjAwMi4xNDMtLjAyNy4wMDUtLjAwMS4wMDUtLjAwMS4xNDItLjAzaC4wMDVsLjAwNS0uMDAyLjE0Mi0uMDMuMDA1LS4wMDIuMDA1LS4wMDEuMTQyLS4wMzMuMDA1LS4wMDEuMDA1LS4wMDEuMTQtLjAzNS4wMDYtLjAwMS4wMDUtLjAwMS4xNC0uMDM3aC4wMDVsLjAwNS0uMDAyLjE0LS4wMzguMDA1LS4wMDJoLjAwNWwuMTQtLjA0LjAwNS0uMDAyLjAwNS0uMDAxLjEzOC0uMDQyLjAwNS0uMDAxLjAwNi0uMDAyLjEzOC0uMDQzLjAwNS0uMDAxLjAwNS0uMDAyLjEzNy0uMDQ0LjAwNS0uMDAyLjAwNS0uMDAyLjEzNy0uMDQ2LjAwNS0uMDAyLjAwNS0uMDAxLjEzNy0uMDQ4LjAwNS0uMDAyLjAwNS0uMDAyLjEzNS0uMDUuMDA1LS4wMDEuMDA1LS4wMDIuMTM1LS4wNTEuMDA1LS4wMDIuMDA1LS4wMDIuMTM1LS4wNTMuMDA1LS4wMDIuMDA0LS4wMDIuMTM0LS4wNTQuMDA1LS4wMDIuMDA1LS4wMDIuMTMzLS4wNTcuMDA1LS4wMDIuMDA1LS4wMDIuMTMyLS4wNTcuMDA1LS4wMDMuMDA1LS4wMDIuMTMyLS4wNi4wMDUtLjAwMS4wMDQtLjAwMi4xMzEtLjA2MS4wMDUtLjAwMy4wMDUtLjAwMi4xMy0uMDYyLjAwNS0uMDAzLjAwNS0uMDAyLjEzLS4wNjQuMDA0LS4wMDMuMDA1LS4wMDIuMTI4LS4wNjYuMDA1LS4wMDIuMDA1LS4wMDMuMTI4LS4wNjcuMDA1LS4wMDIuMDA0LS4wMDMuMTI3LS4wNjkuMDA1LS4wMDIuMDA1LS4wMDMuMTI2LS4wNy4wMDUtLjAwMy4wMDQtLjAwMy4wNjUtLjAzNy4xMzItLjA5My4xMTItLjExNS4wODktLjEzNS4wNjItLjE0OS4wMzQtLjE1Ny4wMDMtLjE2MS0uMDI2LS4xNi0uMDU1LS4xNS0uMDgyLS4xNC0uMTA3LS4xMi0uMTI3LS4xLS4xNDQtLjA3My0uMTU0LS4wNDYtLjE2LS4wMTZ6TTYuMzMgMjYuODE4bC0uMTYuMDIzLS4xNTIuMDUzLS4xNC4wOC0uMTIyLjEwNS0uMTAxLjEyNi0uMDc2LjE0Mi0uMDQ4LjE1NC0uMDIuMTYuMDEyLjE2MS4wNDEuMTU2LjA3LjE0Ni4wOTQuMTMuMDk2LjA5My4wMzIuMDI2LjAwNC4wMDMuMDA0LjAwNC4xNDUuMTE3LjAwNC4wMDMuMDA0LjAwNC4xNDYuMTE1LjAwNS4wMDMuMDA0LjAwNC4xNDcuMTEzLjAwNS4wMDMuMDA0LjAwNC4xNDkuMTExLjAwNC4wMDMuMDA0LjAwMy4xNS4xMS4wMDUuMDAzLjAwNC4wMDMuMTUxLjEwOC4wMDQuMDAzLjAwNS4wMDMuMTUyLjEwNi4wMDUuMDAzLjAwNC4wMDMuMTU0LjEwNC4wMDQuMDAzLjAwNS4wMDMuMTU0LjEwMi4wMDUuMDAyLjAwNC4wMDMuMTU2LjEuMDA1LjAwMy4wMDQuMDAzLjE1Ny4wOTguMDA1LjAwMy4wMDQuMDAyLjE1OS4wOTYuMDA0LjAwMy4wMDUuMDAzLjE2LjA5NC4wMDQuMDAzLjAwNC4wMDIuMTYuMDkyLjAwNS4wMDMuMDA1LjAwMi4xNjEuMDkuMDA1LjAwMy4wMDUuMDAyLjE2Mi4wODguMDA1LjAwMy4wMDQuMDAyLjE2NC4wODYuMDA1LjAwMy4wMDQuMDAyLjE2NS4wODQuMDA1LjAwMy4wMDQuMDAyLjE2Ni4wODIuMDA0LjAwMi4wMDUuMDAzLjE2Ny4wOC4wMDQuMDAyLjAwNS4wMDIuMTY4LjA3OC4wMDQuMDAyLjAwNS4wMDIuMTY4LjA3Ni4wMDUuMDAyLjAwNS4wMDIuMTcuMDc0LjAwNC4wMDIuMDA1LjAwMi4xNy4wNzIuMDA1LjAwMi4wMDUuMDAyLjE3LjA3LjAwNi4wMDIuMDA1LjAwMS4xNzEuMDY4LjAwNS4wMDIuMDA1LjAwMi4xNzMuMDY1LjAwNS4wMDIuMDA1LjAwMi4xNzMuMDYzLjAwNS4wMDIuMDA1LjAwMi4xNzQuMDYuMDA1LjAwMy4wMDUuMDAxLjE3NS4wNi4wMDUuMDAxLjAwNS4wMDIuMTc2LjA1Ny4wMDUuMDAxLjAwNS4wMDIuMTc2LjA1NS4wMDYuMDAxLjAwNS4wMDIuMTc3LjA1Mi4wMDUuMDAyLjAwNS4wMDEuMTc4LjA1LjAwNS4wMDIuMDA1LjAwMi4xNzguMDQ4LjAwNi4wMDEuMDA1LjAwMi4xNzkuMDQ2LjAwNS4wMDEuMDA1LjAwMi4xOC4wNDRoLjAwNWwuMDA1LjAwMi4xOC4wNDIuMDA2LjAwMS4wMDUuMDAxLjE1OS4wMzUuMTYuMDIuMTYtLjAxLjE1Ny0uMDQuMTQ2LS4wNjkuMTMtLjA5NC4xMTItLjExNy4wODctLjEzNi4wNi0uMTQ5LjAzMy0uMTU4LjAwMi0uMTYxLS4wMjgtLjE1OS0uMDU3LS4xNS0uMDg0LS4xMzgtLjEwOC0uMTItLjEyOC0uMDk4LS4xNDQtLjA3Mi0uMTI4LS4wMzktLjE1NC0uMDMzLS4xNjgtLjA0LS4xNzEtLjA0MS0uMTctLjA0NC0uMTY4LS4wNDYtLjE2Ny0uMDQ3LS4xNjgtLjA1LS4xNjUtLjA1MS0uMTY2LS4wNTQtLjE2Ni0uMDU2LS4xNjMtLjA1Ny0uMTY1LS4wNi0uMTYxLS4wNjItLjE2NC0uMDY0LS4xNi0uMDY1LS4xNi0uMDY4LS4xNjItLjA3LS4xNTctLjA3LS4xNTctLjA3NC0uMTU3LS4wNzUtLjE1Ni0uMDc3LS4xNTMtLjA3OS0uMTU2LS4wODItLjE1My0uMDgyLS4xNTQtLjA4Ni0uMTUtLjA4Ni0uMTUyLS4wOS0uMTQ4LS4wOS0uMTQ3LS4wOTItLjE0OS0uMDk1LS4xNDUtLjA5NS0uMTQ0LS4wOTgtLjE0NS0uMS0uMTQzLS4xMDItLjE0LS4xMDMtLjE0LS4xMDQtLjE0LS4xMDgtLjEzOS0uMTEtLjEzNi0uMTEtLjAyNy0uMDIyLS4xMzMtLjA5MS0uMTQ4LS4wNjUtLjE1Ny0uMDM2LS4xNjEtLjAwNnptMTkuMjE1LjA4N2wtLjE2LjAxLS4xNTcuMDM5LS4xNDYuMDY3LS4xMS4wNzYtLjA2NC4wNTEtLjEzOS4xMS0uMTQuMTA4LS4xNC4xMDQtLjE0LjEwMy0uMTQzLjEwMS0uMTQ1LjEwMS0uMTQ0LjA5OC0uMTQ1LjA5NS0uMTQ5LjA5NS0uMTQ4LjA5My0uMTQ3LjA4OS0uMTUyLjA5LS4xNS4wODYtLjE1NC4wODYtLjE1My4wODItLjE1Ni4wODItLjE1My4wNzktLjE1Ni4wNzctLjE1Ny4wNzUtLjE1OC4wNzMtLjE1Ny4wNzEtLjE2LjA3LS4xNi4wNjgtLjE2MS4wNjUtLjE2NC4wNjQtLjE2MS4wNjEtLjE2NS4wNi0uMTYzLjA1OC0uMTY2LjA1Ni0uMTY2LjA1NC0uMTY2LjA1MS0uMTY3LjA1LS4xNjcuMDQ3LS4xNy4wNDYtLjE2OC4wNDQtLjE3MS4wNDItLjE2OC4wMzktLjE3LjAzNy0uMTEuMDIzLS4xNTQuMDQ3LS4xNDMuMDc1LS4xMjYuMS0uMTA2LjEyMi0uMDgxLjEzOS0uMDU0LjE1Mi0uMDI1LjE2LjAwNi4xNi4wMzUuMTU4LjA2My4xNDguMDkuMTMzLjExNC4xMTUuMTMyLjA5Mi4xNDguMDY1LjE1Ny4wMzcuMTYuMDA3LjEzMy0uMDE2LjExNS0uMDI0LjAwNS0uMDAxLjAwNS0uMDAxLjE4MS0uMDRoLjAwNWwuMDA1LS4wMDIuMTgtLjA0Mi4wMDYtLjAwMS4wMDUtLjAwMS4xOC0uMDQ0LjAwNS0uMDAyLjAwNS0uMDAxLjE4LS4wNDYuMDA0LS4wMDJoLjAwNWwuMTc5LS4wNWguMDA1bC4wMDUtLjAwMi4xNzgtLjA1LjAwNS0uMDAyLjAwNS0uMDAyLjE3Ny0uMDUyLjAwNS0uMDAyLjAwNS0uMDAxLjE3Ny0uMDU1LjAwNS0uMDAyLjAwNS0uMDAxLjE3Ni0uMDU3LjAwNS0uMDAyLjAwNS0uMDAyLjE3NS0uMDU5LjAwNS0uMDAxLjAwNS0uMDAyLjE3NC0uMDYxLjAwNS0uMDAyLjAwNS0uMDAyLjE3My0uMDYzLjAwNS0uMDAyLjAwNS0uMDAyLjE3My0uMDY1LjAwNC0uMDAyLjAwNS0uMDAyLjE3Mi0uMDY4LjAwNS0uMDAyLjAwNS0uMDAyLjE3MS0uMDcuMDA1LS4wMDEuMDA1LS4wMDIuMTctLjA3Mi4wMDUtLjAwMi4wMDQtLjAwMi4xNy0uMDc0LjAwNS0uMDAyLjAwNC0uMDAyLjE2OS0uMDc2LjAwNC0uMDAyLjAwNS0uMDAyLjE2OC0uMDc4LjAwNC0uMDAyLjAwNS0uMDAzLjE2Ny0uMDguMDA0LS4wMDIuMDA1LS4wMDIuMTY2LS4wODIuMDA0LS4wMDIuMDA1LS4wMDMuMTY1LS4wODQuMDA0LS4wMDIuMDA1LS4wMDMuMTYzLS4wODYuMDA1LS4wMDIuMDA1LS4wMDMuMTYyLS4wODguMDA1LS4wMDIuMDA1LS4wMDMuMTYxLS4wOS4wMDUtLjAwMi4wMDQtLjAwMy4xNi0uMDkyLjAwNS0uMDAzLjAwNS0uMDAyLjE2LS4wOTQuMDA0LS4wMDMuMDA0LS4wMDMuMTU4LS4wOTYuMDA1LS4wMDIuMDA0LS4wMDMuMTU4LS4wOTguMDA0LS4wMDMuMDA1LS4wMDMuMTU2LS4xLjAwNC0uMDAzLjAwNC0uMDAzLjE1NS0uMTAxLjAwNS0uMDAzLjAwNC0uMDAzLjE1NC0uMTA0LjAwNC0uMDAzLjAwNC0uMDAzLjE1My0uMTA2LjAwNC0uMDAzLjAwNS0uMDAzLjE1MS0uMTA4LjAwNC0uMDAzLjAwNS0uMDAzLjE1LS4xMS4wMDQtLjAwMy4wMDQtLjAwMy4xNDktLjExMi4wMDQtLjAwMy4wMDQtLjAwMy4xNDgtLjExMy4wMDQtLjAwNC4wMDQtLjAwMy4xNDctLjExNS4wMDQtLjAwNC4wMDQtLjAwMy4wNjgtLjA1NS4xMTYtLjExMy4wOTItLjEzMi4wNjYtLjE0Ny4wMzgtLjE1Ny4wMDgtLjE2LS4wMjItLjE2LS4wNS0uMTUzLS4wOC0uMTQtLjEwMy0uMTI1LS4xMjQtLjEwMi0uMTQyLS4wNzctLjE1My0uMDUtLjE2LS4wMnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRMKCkgeyByZXR1cm4gX2V4dGVuZHMkTCA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRMLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBJbnRlcm1lZGlhdGVFdmVudENhdGNoTm9uSW50ZXJydXB0aW5nTXVsdGlwbGVJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRMKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjMuNjM3IDEzLjkwMmwtNy42MjUtNS41MzUtNy42MjQgNS41MzUgMi45MTIgOC45NTZoOS40MjVsMi45MTItOC45NTZ6bS0xLjAxNy4zM2wtMi41MjQgNy43NjJIMTEuOTNsLTIuNTI0LTcuNzYyIDYuNjA3LTQuNzk2IDYuNjA4IDQuNzk2ek0xNi4wMTIuMzExYy0xLjQ0OC4wMi0yLjkzLjE1Ny00LjMwMi42MjgtLjg1Mi40NDctLjI1NSAxLjg2My42NiAxLjU3NCAyLjI1NS0uNjA4IDQuNjQ4LS42MDcgNi45MjItLjEwOC45MzQuMDc1IDEuMjI4LTEuMzc2LjMzOC0xLjY3QzE4LjQ1MS40NCAxNy4yMjcuMzE3IDE2LjAxMi4zMTF6bTkuMDEyIDIuOTM0Yy0uOTEzLS4xMDQtMS4yNzIgMS4yNTgtLjQ1NCAxLjY0OCAxLjgzNCAxLjM2IDMuMjkzIDMuMTg1IDQuMzEgNS4yMi41MjYuNzc2IDEuODQyLjA5OCAxLjUxNS0uNzhhMTUuNTIyIDE1LjUyMiAwIDAwLTUuMDYtNi4wMDZjLS4xLS4wNDQtLjIwMy0uMDctLjMxLS4wODJ6TTYuNjUgMy41OWMtLjc2Mi4wODktMS4yNC44MDktMS44MDUgMS4yNjdDMy4zOCA2LjI5NSAyLjE2MyA4LjAwNyAxLjM3IDkuOTA1Yy0uMjY2Ljg5OCAxLjA5NCAxLjQ4NCAxLjU2NC42NzVhMTQuODI1IDE0LjgyNSAwIDAxNC4zMjctNS41NmMuNDc2LS41MTUuMDktMS40MTktLjYxMi0xLjQzMXptOS4zNjIuMDA3Yy0uNjk4LjA2Ni0xLjY4OS0uMTYtMi4wMzMuNjM1LS4yODIuNzMzLjUzNSAxLjM1OCAxLjIxNyAxLjEyNSAxLjgwNi0uMTQ3IDMuNjMuMjAzIDUuMjkzLjkwNy45MDIuMjU1IDEuNDcyLTEuMTEyLjY1Ni0xLjU3My0xLjYtLjczNS0zLjM3NC0xLjA4OS01LjEzMy0xLjA5NHptLTUuNDc5IDEuMzY1Yy0uODM1LjE1LTEuNTE3Ljc2LTIuMjEgMS4yMjYtMS4yMDMuOTQtMi4zMTggMi4wNjEtMy4wNTcgMy40MDItLjMzLjkwNCAxLjA2MyAxLjU1MiAxLjU0Ny43MjMgMS4wNDUtMS42NTYgMi41OTYtMi45MjUgNC4yODUtMy44NzMuNTQ1LS40OTkuMTcxLTEuNDYzLS41NjUtMS40Nzh6bTEzLjkwMyAyLjExNWMtLjg3NS0uMDctMS4yMiAxLjE3My0uNTAxIDEuNjI3IDEuMzI1IDEuMzQgMi4xODggMy4wNjIgMi43NDggNC44NC40NjguODQgMS44NjkuMjEgMS41NTctLjY5OS0uNjA0LTIuMTE4LTEuNzUxLTQuMDk3LTMuMzUxLTUuNjE1YS45My45MyAwIDAwLS40NTMtLjE1M3pNNC40NjcgMTMuMTMyYy0uODIyLS4wNy0uOTk2LjgyNi0xLjA0NiAxLjQ1NS0uMjU2IDEuOTMtLjA5NCAzLjkzMy41NjIgNS43NjkuNDA2Ljg0NCAxLjgwNy4zNjUgMS42MTItLjU1MWExMS40OTggMTEuNDk4IDAgMDEtLjMzNC01LjgwOC44NzQuODc0IDAgMDAtLjc5NC0uODY1em0yNi42ODcgMS42Yy0uNzQ2LS4wMzctMS4wMTQuNzg1LS44NzkgMS4zOTUuMDQzIDIuMzkzLS41NyA0Ljc3MS0xLjY2IDYuODk0LS4zMS44ODQgMS4wMiAxLjUzNiAxLjUzLjc1YTE1LjYzMiAxNS42MzIgMCAwMDEuODIxLTguMzcyLjg3Ni44NzYgMCAwMC0uODEyLS42Njd6bS0zMC4xOTcuNTcxYy0uNzgyLS4wNzMtMS4wNDQuNzc1LS45MzMgMS40MDQuMDY4IDIuNDE0LjY2MSA0LjgzMyAxLjgwOSA2Ljk2Mi41MzQuNzcgMS44NDIuMDc2IDEuNTA1LS43OThhMTQuODMzIDE0LjgzMyAwIDAxLTEuNjAzLTYuODYxLjg3Ni44NzYgMCAwMC0uNzc4LS43MDd6bTI2Ljc4NyAyLjAyNGMtLjc3Ny0uMDQ4LS45NTIuNzk3LTEuMDIxIDEuMzkyLS4zNTQgMS42OTItMS4yMDIgMy4yMzEtMi4yMTYgNC42MDgtLjQwNy44NzIuOTI1IDEuNjM4IDEuNDguODUyIDEuMzYxLTEuNzMzIDIuMjk2LTMuODI3IDIuNTgyLTYuMDE3YS44NzQuODc0IDAgMDAtLjgyNS0uODM1ek02Ljg1NyAyMy4wMTJjLS44MDguMDE4LTEuMDgyIDEuMTIyLS40NyAxLjU5IDEuMzkzIDEuNjA3IDMuMTg3IDIuODg2IDUuMTk0IDMuNTk5LjkxLjIyMiAxLjQzLTEuMTY1LjU5OC0xLjU5NmExMS40OTUgMTEuNDk1IDAgMDEtNC43MjMtMy4zOTYuODk5Ljg5OSAwIDAwLS41OTktLjE5N3ptMTUuMDU3IDIuN2MtLjgxLjE5NC0xLjUwNC43Ni0yLjMyNS45NzItMS4yMDMuNDU4LTIuNS41MzYtMy43NTguNjY0LS44NjkuMzA3LS41NzMgMS43MjguMzQ2IDEuNjYzIDIuMjAxLS4wMzQgNC40MTItLjYyNiA2LjI5My0xLjc3OC42MDQtLjQ5NS4yMjctMS41MzItLjU1Ni0xLjUyMXpNNi4zNDYgMjcuMTE4Yy0uODMzLjAwOC0xLjExIDEuMjE4LS4zOTUgMS42MTcgMS45ODYgMS42MDIgNC4zNTggMi43NDkgNi44NjggMy4yMjYuOTMzLjA3NiAxLjIyNy0xLjM3Ni4zMzgtMS42N2ExNC44MzggMTQuODM4IDAgMDEtNi4zNDUtMy4wNjYuOTI5LjkyOSAwIDAwLS40NjYtLjEwN3ptMTkuMjA4LjA4N2MtLjc2Ni4wOS0xLjI0MS44NDEtMS45MjIgMS4xNTgtMS41MTYuOTkxLTMuMjUxIDEuNTgtNC45OTYgMi4wMDUtLjg3Mi40MDUtLjM0NiAxLjg0OS41ODQgMS42MDQgMi41NDMtLjUyNiA0Ljk4LTEuNjYgNi45NjMtMy4zNDQuNDctLjUyLjA3Mi0xLjQyLS42My0xLjQyM3pcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRLKCkgeyByZXR1cm4gX2V4dGVuZHMkSyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRLLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBJbnRlcm1lZGlhdGVFdmVudENhdGNoTm9uSW50ZXJydXB0aW5nUGFyYWxsZWxJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRLKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTMuNTEgOS4wODF2NC40MjhIOS4wOHY0Ljk4Mmg0LjQyOHY0LjQyOGg0Ljk4MlYxOC40OWg0LjQyOHYtNC45ODJIMTguNDlWOS4wODFoLTQuOTgyem0uODMuODNoMy4zMnY0LjQyOGg0LjQyOXYzLjMyMkgxNy42NnY0LjQyOGgtMy4zMnYtNC40NTRIOS45MXYtMy4yOTZoNC40MjhWOS45MTF6TTE2IDBoLS4wMDVsLS4xODguMDAxaC0uMDExbC0uMTg4LjAwNGgtLjAxMWwtLjE4Ny4wMDZoLS4wMTFsLS4xODcuMDA4aC0uMDA1TDE1LjIuMDJsLS4xODcuMDFoLS4wMDVsLS4wMDUuMDAxLS4xODcuMDEzaC0uMDExTDE0LjYyLjA2aC0uMDFsLS4xODYuMDE4aC0uMDExbC0uMTg1LjAyLS4wMDUuMDAxaC0uMDA2bC0uMTg1LjAyMi0uMDA1LjAwMWgtLjAwNWwtLjE4NS4wMjVoLS4wMDVsLS4wMDUuMDAxLS4xODUuMDI3aC0uMDA1bC0uMDA1LjAwMS0uMTg0LjAyOWgtLjAwNWwtLjAwNS4wMDEtLjE4My4wMzEtLjAwNi4wMDEtLjAwNS4wMDEtLjE4Mi4wMzMtLjAwNi4wMDEtLjAwNS4wMDEtLjE4Mi4wMzUtLjAwNS4wMDEtLjAwNS4wMDEtLjE4Mi4wMzhoLS4wMDVsLS4wMDUuMDAyLS4xODEuMDRoLS4wMDVsLS4wMDUuMDAyLS4xOC4wNDItLjAwNi4wMDEtLjAwNS4wMDEtLjE4LjA0NC0uMDA1LjAwMmgtLjAwNWwtLjE3LjA0NS0uMTUyLjA1NC0uMTM5LjA4Mi0uMTIxLjEwNi0uMS4xMjctLjA3NC4xNDMtLjA0Ni4xNTUtLjAxNy4xNi4wMTMuMTYuMDQzLjE1Ni4wNy4xNDUuMDk3LjEzLjExOS4xMDguMTM3LjA4NS4xNS4wNTguMTU5LjAzLjE2LS4wMDEuMTMzLS4wMjMuMTY1LS4wNDMuMTY4LS4wNDEuMTcxLS4wNC4xNzEtLjAzNy4xNzItLjAzNi4xNy0uMDMzLjE3My0uMDMuMTctLjAzLjE3Ny0uMDI3LjE3MS0uMDI1LjE3NS0uMDIyLjE3NS0uMDIuMTc1LS4wMi4xNzYtLjAxNi4xNzUtLjAxNC4xNzctLjAxMi4xNzYtLjAxLjE3Ny0uMDA3LjE3NC0uMDA2LjE3Ny0uMDAzTDE2IDEuNzNoLjE3N2wuMTc4LjAwNC4xNzQuMDA2LjE3Ny4wMDcuMTc2LjAxLjE3Ny4wMTIuMTc1LjAxNC4xNzYuMDE3LjE3NS4wMTguMTc1LjAyLjE3NS4wMjMuMTcxLjAyNS4xNzYuMDI3LjE3LjAzLjE3NC4wMy4xNy4wMzMuMTcxLjAzNi4xNTQuMDMzLjE2LjAyLjE2MS0uMDEuMTU2LS4wNC4xNDYtLjA2OS4xMzEtLjA5NC4xMTEtLjExNy4wODctLjEzNS4wNjEtLjE1LjAzMi0uMTU4LjAwMi0uMTYtLjAyNy0uMTYtLjA1Ny0uMTVMMjAgLjcxNGwtLjEwOC0uMTItLjEyOC0uMDk3LS4xNDUtLjA3My0uMTI4LS4wMzgtLjE1OC0uMDM1LS4wMDUtLjAwMS0uMDA1LS4wMDFMMTkuMTQuMzFoLS4wMDVsLS4wMDUtLjAwMi0uMTgyLS4wMzVoLS4wMDZsLS4wMDUtLjAwMi0uMTgyLS4wMzNoLS4wMDZsLS4wMDUtLjAwMi0uMTgzLS4wMy0uMDA1LS4wMDEtLjAwNi0uMDAxLS4xODMtLjAyOWgtLjAwNWwtLjAwNi0uMDAxLS4xODQtLjAyN2gtLjAwNWwtLjAwNS0uMDAxLS4xODUtLjAyNGgtLjAwNUwxNy45NjguMTIgMTcuNzgzLjFsLS4wMDYtLjAwMWgtLjAwNWwtLjE4NS0uMDJoLS4wMDZsLS4wMDUtLjAwMUwxNy4zOS4wNmgtLjAwNUwxNy4zOC4wNmwtLjE4Ny0uMDE1aC0uMDA1bC0uMDA1LS4wMDEtLjE4Ny0uMDEzaC0uMDExTDE2LjguMDJoLS4wMTFMMTYuNi4wMWgtLjAxMWwtLjE4Ny0uMDA2aC0uMDExTDE2LjIwNCAwaC0uMDExTDE2LjAwNSAwSDE2em05LjAxNSAyLjkzNWwtLjE2LjAwNC0uMTU4LjAzMy0uMTUuMDYyLS4xMzQuMDktLjExNi4xMTEtLjA5My4xMzItLjA2Ny4xNDctLjAzOC4xNTYtLjAxLjE2MS4wMjIuMTYuMDUuMTUzLjA3OC4xNDEuMTAzLjEyNC4xMDIuMDg3LjA0NS4wMzQuMTQyLjEwNi4xMzcuMTA1LjE0LjExLjEzNi4xMS4xMzUuMTEyLjEzNC4xMTUuMTM0LjExNy4xMy4xMTUuMTMyLjEyMi4xMjguMTIuMTI3LjEyMi4xMjYuMTI1LjEyNC4xMjYuMTI0LjEyOC4xMjEuMTMuMTE4LjEyOC4xMTguMTMyLjExNy4xMzMuMTEzLjEzNC4xMTMuMTM2LjExLjEzNi4xMDkuMTM3LjEwOS4xNDIuMTA0LjE0LjEwMy4xNC4xMDEuMTQyLjEuMTQ0LjA5OS4xNDYuMDk1LjE0NS4wOTQuMTQ3LjA5My4xNS4wOTIuMTUuMDg3LjE0OS4wODcuMTUuMDg0LjE1Mi4wODQuMTU1LjA4LjE1Mi4wOC4xNTUuMDQuMDgxLjA4NC4xMzguMTEuMTE5LjEyOC4wOTYuMTQ1LjA3Mi4xNTUuMDQzLjE2LjAxMy4xNi0uMDE2LjE1NS0uMDQ2LjE0NC0uMDc0LjEyNy0uMDk5LjEwNi0uMTIuMDgzLS4xNC4wNTUtLjE1MS4wMjYtLjE2LS4wMDQtLjE2LS4wMzQtLjE1OC0uMDUtLjEyNC0uMDQyLS4wODUtLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDg0LS4xNjUtLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDg2LS4xNjQtLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDg4LS4xNjItLjAwMi0uMDA1LS4wMDMtLjAwNS0uMDktLjE2MS0uMDAyLS4wMDUtLjAwMy0uMDA0LS4wOTItLjE2LS4wMDMtLjAwNS0uMDAyLS4wMDUtLjA5NC0uMTYtLjAwMy0uMDA0LS4wMDMtLjAwNC0uMDk2LS4xNTktLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDk4LS4xNTctLjAwMy0uMDA0LS4wMDMtLjAwNS0uMS0uMTU2LS4wMDMtLjAwNC0uMDAzLS4wMDUtLjEwMS0uMTU0LS4wMDMtLjAwNS0uMDAzLS4wMDQtLjEwNC0uMTU0LS4wMDMtLjAwNC0uMDAzLS4wMDUtLjEwNi0uMTUyLS4wMDMtLjAwNS0uMDAzLS4wMDQtLjEwOC0uMTUxLS4wMDMtLjAwNC0uMDAzLS4wMDUtLjExLS4xNS0uMDAzLS4wMDQtLjAwMy0uMDA0LS4xMTEtLjE1LS4wMDQtLjAwMy0uMDAzLS4wMDUtLjExMy0uMTQ3LS4wMDQtLjAwNC0uMDAzLS4wMDUtLjExNS0uMTQ2LS4wMDQtLjAwNC0uMDAzLS4wMDQtLjExNy0uMTQ1LS4wMDQtLjAwNC0uMDAzLS4wMDQtLjEyLS4xNDQtLjAwMy0uMDA0LS4wMDMtLjAwNC0uMTIxLS4xNDItLjAwNC0uMDA0LS4wMDMtLjAwNC0uMTIzLS4xNDEtLjAwMy0uMDA0LS4wMDQtLjAwNC0uMTI1LS4xNC0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xMjctLjEzOC0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xMjgtLjEzNi0uMDA0LS4wMDQtLjAwNC0uMDA0LS4xMy0uMTM1LS4wMDQtLjAwNC0uMDA0LS4wMDQtLjEzMi0uMTM0LS4wMDMtLjAwNC0uMDA0LS4wMDMtLjEzNC0uMTMzLS4wMDQtLjAwMy0uMDA0LS4wMDQtLjEzNS0uMTMtLjAwNC0uMDA0LS4wMDQtLjAwNC0uMTM2LS4xMjgtLjAwNC0uMDA0LS4wMDQtLjAwNC0uMTM4LS4xMjYtLjAwNC0uMDA0LS4wMDQtLjAwMy0uMTQtLjEyNS0uMDA0LS4wMDQtLjAwNC0uMDAzLS4xNC0uMTIzLS4wMDUtLjAwNC0uMDA0LS4wMDMtLjE0Mi0uMTIxLS4wMDQtLjAwNC0uMDA0LS4wMDMtLjE0NC0uMTItLjAwNC0uMDAzLS4wMDQtLjAwMy0uMTQ1LS4xMTctLjAwNC0uMDA0LS4wMDQtLjAwMy0uMTQ3LS4xMTUtLjAwNC0uMDA0LS4wMDQtLjAwMy0uMTQ4LS4xMTMtLjAwNC0uMDAzLS4wMDQtLjAwNC0uMTQ5LS4xMTEtLjAwNC0uMDAzLS4wMDQtLjAwNC0uMDUtLjAzNi0uMTQtLjA4My0uMTUtLjA1NS0uMTYtLjAyN3pNNi42MzQgMy4yOGwtLjE2MS4wMDgtLjE1Ny4wMzctLjE0Ny4wNjYtLjExMS4wNzQtLjA0LjAzMi0uMDA1LjAwMy0uMDA0LjAwNC0uMTQ1LjExNy0uMDA0LjAwMy0uMDA0LjAwNC0uMTQ0LjExOS0uMDA0LjAwMy0uMDA0LjAwNC0uMTQyLjEyLS4wMDQuMDA0LS4wMDQuMDA0LS4xNDEuMTIzLS4wMDQuMDAzLS4wMDQuMDA0LS4xNC4xMjUtLjAwNC4wMDMtLjAwNC4wMDQtLjEzOC4xMjYtLjAwNC4wMDQtLjAwNC4wMDQtLjEzNi4xMjgtLjAwNC4wMDQtLjAwNC4wMDQtLjEzNS4xMy0uMDA0LjAwNC0uMDA0LjAwMy0uMTM0LjEzMy0uMDA0LjAwMy0uMDA0LjAwNC0uMTMyLjEzNC0uMDAzLjAwNC0uMDA0LjAwNC0uMTMuMTM1LS4wMDQuMDA0LS4wMDQuMDA0LS4xMjguMTM2LS4wMDQuMDA0LS4wMDQuMDA0LS4xMjYuMTM4LS4wMDQuMDA0LS4wMDMuMDA0LS4xMjUuMTQtLjAwNC4wMDQtLjAwMy4wMDQtLjEyMy4xNC0uMDA0LjAwNS0uMDAzLjAwNC0uMTIxLjE0Mi0uMDA0LjAwNC0uMDAzLjAwNC0uMTIuMTQ0LS4wMDMuMDA0LS4wMDMuMDA0LS4xMTcuMTQ1LS4wMDQuMDA0LS4wMDMuMDA0LS4xMTUuMTQ2LS4wMDQuMDA1LS4wMDMuMDA0LS4xMTMuMTQ3LS4wMDMuMDA1LS4wMDQuMDA0LS4xMTEuMTQ5LS4wMDMuMDA0LS4wMDQuMDA0LS4xMS4xNS0uMDAyLjAwNS0uMDAzLjAwNC0uMTA4LjE1MS0uMDAzLjAwNC0uMDAzLjAwNS0uMTA2LjE1Mi0uMDAzLjAwNS0uMDAzLjAwNC0uMTA0LjE1NC0uMDAzLjAwNC0uMDAzLjAwNS0uMTAyLjE1NC0uMDAzLjAwNS0uMDAyLjAwNC0uMS4xNTYtLjAwMy4wMDUtLjAwMy4wMDQtLjA5OC4xNTctLjAwMy4wMDUtLjAwMy4wMDQtLjA5Ni4xNTktLjAwMi4wMDQtLjAwMy4wMDUtLjA5NC4xNi0uMDAzLjAwNC0uMDAyLjAwNC0uMDkyLjE2LS4wMDMuMDA1LS4wMDMuMDA1LS4wOS4xNjEtLjAwMi4wMDUtLjAwMy4wMDUtLjA4OC4xNjItLjAwMi4wMDUtLjAwMy4wMDQtLjA4Ni4xNjQtLjAwMi4wMDUtLjAwMi4wMDQtLjA4NC4xNjUtLjAwMy4wMDUtLjAwMi4wMDQtLjA4Mi4xNjYtLjAwMi4wMDQtLjAwMy4wMDUtLjA4LjE2Ny0uMDAyLjAwNC0uMDAyLjAwNS0uMDc4LjE2OC0uMDAyLjAwNC0uMDAyLjAwNS0uMDQ1LjEtLjA1My4xNTMtLjAyMy4xNi4wMDcuMTYuMDM3LjE1Ny4wNjUuMTQ4LjA5Mi4xMzIuMTE0LjExNC4xMzQuMDkuMTQ4LjA2NC4xNTcuMDM1LjE2MS4wMDYuMTYtLjAyNS4xNTItLjA1NC4xNC0uMDguMTIxLS4xMDYuMS0uMTI2LjA2NS0uMTE4LjA0My0uMDk1LjA3NC0uMTYuMDc1LS4xNTUuMDc3LS4xNTcuMDgtLjE1NS4wOC0uMTUyLjA4My0uMTU1LjA4NS0uMTUyLjA4Ni0uMTUuMDg4LS4xNDkuMDkxLS4xNS4wOTQtLjE1LjA5NC0uMTQ3LjA5NS0uMTQ1LjA5OS0uMTQ2LjEtLjE0NC4xLS4xNDIuMTA0LS4xNC4xMDQtLjE0LjExLS4xNDIuMTA3LS4xMzcuMTEtLjEzNi4xMTQtLjEzNi4xMTMtLjEzNC4xMTctLjEzMy4xMTgtLjEzMi4xMTctLjEyOS4xMjItLjEzLjEyNC0uMTI3LjEyMy0uMTI2LjEyNy0uMTI1LjEyNy0uMTIyLjEyOC0uMTIuMTMyLS4xMjIuMTMtLjExNS4xMzMtLjExNy4xMzUtLjExNS4xMzUtLjExMS4xMzYtLjExLjAzNy0uMDMuMTE3LS4xMS4wOTQtLjEzMi4wNjgtLjE0Ni4wNC0uMTU2LjAxLS4xNjEtLjAyLS4xNi0uMDUtLjE1NC0uMDc2LS4xNDEtLjEwMi0uMTI1LS4xMjMtLjEwNC0uMTQtLjA4LS4xNTMtLjA1MS0uMTYtLjAyM3pNMTYgMy4yODZoLS4wMDVsLS4xNDguMDAxaC0uMDFsLS4xNDcuMDAzaC0uMDExbC0uMTQ3LjAwNWgtLjAxMWwtLjE0Ni4wMDdoLS4wMTFsLS4xNDYuMDA5aC0uMDExbC0uMTQ2LjAxaC0uMDA1bC0uMDA1LjAwMS0uMTQ2LjAxMmgtLjAxMWwtLjE0NS4wMTRoLS4wMDZsLS4wMDUuMDAxLS4wNS4wMDYtLjE1OC4wMzEtLjE1LjA2LS4xMzUuMDg4LS4xMTcuMTExLS4wOTQuMTMtLjA2OS4xNDctLjA0LjE1Ni0uMDEuMTYuMDE5LjE2LjA0OS4xNTQuMDc2LjE0Mi4xMDIuMTI1LjEyMy4xMDUuMTQuMDguMTUyLjA1MS4xNi4wMjMuMTM0LS4wMDMuMDQ1LS4wMDUuMTM1LS4wMTMuMTMzLS4wMS4xMzYtLjAxLjEzNS0uMDA3LjEzNy0uMDA2LjEzNi0uMDA0LjEzNi0uMDAzaC4yNzRsLjEzNi4wMDMuMTM2LjAwNC4xMzYuMDA2LjEzNi4wMDcuMTM2LjAxLjEzMy4wMS4xMzUuMDEzLjEzNS4wMTQuMTM1LjAxNi4xMzQuMDE4LjEzMi4wMTguMTM0LjAyMS4xMzMuMDIzLjEzMy4wMjQuMTMzLjAyNS4xMy4wMjcuMTMyLjAzLjEzMi4wMy4xMjkuMDMxLjEzLjAzNC4xMjkuMDM1LjEyOS4wMzYuMTMuMDQuMTI2LjAzOC4xMjguMDQyLjEyNi4wNDIuMTI4LjA0NS4xMjcuMDQ3LjEyNi4wNDcuMTIuMDQ4LjEyNy4wNTEuMTIzLjA1Mi4wMDYuMDAyLjE0Ny4wNDguMTYuMDIxLjE2LS4wMDkuMTU3LS4wMzguMTQ3LS4wNjcuMTMxLS4wOTMuMTEyLS4xMTYuMDg5LS4xMzUuMDYyLS4xNDkuMDMzLS4xNTguMDA0LS4xNi0uMDI3LS4xNi0uMDU1LS4xNTEtLjA4My0uMTM5LS4xMDctLjEyLS4xMjctLjA5OS0uMTE4LS4wNjMtLjAwNC0uMDAxLS4wMDUtLjAwMy0uMDA1LS4wMDItLjEzMy0uMDU2LS4wMDUtLjAwMi0uMDA1LS4wMDItLjEzNC0uMDU0LS4wMDQtLjAwMi0uMDA1LS4wMDItLjEzNS0uMDUzLS4wMDUtLjAwMi0uMDA1LS4wMDItLjEzNS0uMDUxLS4wMDUtLjAwMi0uMDA1LS4wMDItLjEzNS0uMDUtLjAwNS0uMDAxLS4wMDUtLjAwMi0uMTM3LS4wNDgtLjAwNS0uMDAxLS4wMDUtLjAwMi0uMTM3LS4wNDYtLjAwNS0uMDAyLS4wMDUtLjAwMi0uMTM3LS4wNDQtLjAwNS0uMDAyLS4wMDUtLjAwMS0uMTM4LS4wNDMtLjAwNi0uMDAyLS4wMDUtLjAwMS0uMTM4LS4wNDItLjAwNS0uMDAxLS4wMDUtLjAwMi0uMTQtLjA0SDE5LjRsLS4wMDUtLjAwMi0uMTQtLjAzOC0uMDA1LS4wMDEtLjAwNS0uMDAyLS4xNC0uMDM2LS4wMDUtLjAwMS0uMDA1LS4wMDEtLjE0MS0uMDM1LS4wMDUtLjAwMS0uMDA1LS4wMDEtLjE0Mi0uMDMzLS4wMDUtLjAwMS0uMDA1LS4wMDEtLjE0Mi0uMDMxLS4wMDUtLjAwMmgtLjAwNWwtLjE0Mi0uMDMtLjAwNS0uMDAxLS4wMDUtLjAwMS0uMTQzLS4wMjhoLS4wMDVsLS4wMDUtLjAwMi0uMTQzLS4wMjUtLjAwNi0uMDAxLS4wMDUtLjAwMS0uMTQzLS4wMjQtLjAwNS0uMDAxLS4wMDYtLjAwMS0uMTQzLS4wMjItLjAwNi0uMDAxaC0uMDA1bC0uMTQ0LS4wMjJoLS4wMDVsLS4wMDYtLjAwMS0uMTQ0LS4wMTloLS4wMDVsLS4wMDYtLjAwMS0uMTQ0LS4wMTdoLS4wMDZsLS4wMDUtLjAwMS0uMTQ1LS4wMTZoLS4wMTFsLS4xNDUtLjAxNEgxNy4xbC0uMDA1LS4wMDEtLjE0Ni0uMDEyaC0uMDFsLS4xNDYtLjAxLS4wMDYtLjAwMWgtLjAwNWwtLjE0Ni0uMDA5aC0uMDExbC0uMTQ3LS4wMDZoLS4wMWwtLjE0Ny0uMDA1aC0uMDExbC0uMTQ3LS4wMDNoLS4wMTFsLS4xNDctLjAwMUgxNnptLTUuNDgyIDEuMzY2bC0uMTYuMDA4LS4xNTcuMDM3LS4xMjMuMDUzLS4wNi4wMzItLjAwNS4wMDItLjAwNC4wMDMtLjEyOC4wNjktLjAwNC4wMDItLjAwNS4wMDMtLjEyNi4wNy0uMDA1LjAwMy0uMDA0LjAwMi0uMTI2LjA3Mi0uMDA1LjAwMy0uMDA0LjAwMy0uMTI1LjA3My0uMDA0LjAwMy0uMDA1LjAwMy0uMTI0LjA3NS0uMDA0LjAwMy0uMDA1LjAwMi0uMTIzLjA3Ny0uMDA0LjAwMy0uMDA1LjAwMy0uMTIyLjA3OC0uMDA0LjAwMy0uMDA1LjAwMy0uMTIxLjA4LS4wMDQuMDAyLS4wMDUuMDAzLS4xMi4wODItLjAwNS4wMDMtLjAwNC4wMDMtLjEyLjA4My0uMDA0LjAwMy0uMDA0LjAwMy0uMTE4LjA4NC0uMDA1LjAwMy0uMDA0LjAwMy0uMTE4LjA4Ni0uMDA0LjAwMy0uMDA0LjAwMy0uMTE3LjA4OC0uMDA0LjAwMy0uMDA0LjAwMy0uMTE2LjA4OS0uMDA0LjAwMy0uMDA0LjAwNC0uMTE0LjA5LS4wMDUuMDAzLS4wMDQuMDAzLS4xMTMuMDkyLS4wMDQuMDA0LS4wMDQuMDAzLS4xMTMuMDkzLS4wMDQuMDA0LS4wMDQuMDAzLS4xMTEuMDk1LS4wMDUuMDAzLS4wMDQuMDA0LS4xMS4wOTYtLjAwNC4wMDQtLjAwNC4wMDMtLjExLjA5OC0uMDAzLjAwMy0uMDA0LjAwNC0uMTA4LjEtLjAwNC4wMDMtLjAwNC4wMDMtLjEwNy4xMDEtLjAwNC4wMDQtLjAwNC4wMDMtLjEwNi4xMDItLjAwNC4wMDQtLjAwMy4wMDQtLjEwNS4xMDMtLjAwNC4wMDQtLjAwNC4wMDQtLjEwMy4xMDUtLjAwNC4wMDQtLjAwNC4wMDMtLjEwMi4xMDYtLjAwMy4wMDQtLjAwNC4wMDQtLjEuMTA3LS4wMDQuMDA0LS4wMDQuMDA0LS4wOTkuMTA4LS4wMDQuMDA0LS4wMDMuMDA0LS4wOTguMTEtLjAwMy4wMDMtLjAwNC4wMDQtLjA5Ni4xMS0uMDA0LjAwNS0uMDAzLjAwNC0uMDk1LjExMS0uMDAzLjAwNC0uMDA0LjAwNC0uMDkzLjExMy0uMDAzLjAwNC0uMDA0LjAwNC0uMDkyLjExMy0uMDAzLjAwNC0uMDAzLjAwNS0uMDkuMTE0LS4wMDQuMDA0LS4wMDMuMDA0LS4wODkuMTE2LS4wMDMuMDA0LS4wMDMuMDA0LS4wODguMTE3LS4wMDMuMDA0LS4wMDMuMDA0LS4wODYuMTE4LS4wMDMuMDA0LS4wMDMuMDA1LS4wODQuMTE4LS4wMDMuMDA0LS4wMDMuMDA1LS4wODMuMTItLjAwMy4wMDMtLjAwMy4wMDUtLjA4Mi4xMi0uMDAzLjAwNS0uMDAyLjAwNC0uMDY4LjEwMy0uMDc2LjE0Mi0uMDQ4LjE1NC0uMDE4LjE2LjAxMS4xNjEuMDQxLjE1Ni4wNy4xNDYuMDk1LjEzLjExNy4xMS4xMzYuMDg2LjE1LjA2LjE1OC4wMy4xNjIuMDAyLjE1OC0uMDMuMTUtLjA1Ny4xMzgtLjA4NS4xMTktLjEwOS4wODItLjEwNS4wNjUtLjA5OS4wNzUtLjExLjA3Ny0uMTEzLjA3Ny0uMTA3LjA4LS4xMS4wOC0uMTA4LjA4NC0uMTA4LjA4My0uMTA1LjA4Ni0uMTA2LjA4Ni0uMTA0LjA4OC0uMTA0LjA4OS0uMTAxLjA5LS4xMDIuMDkzLS4xMDEuMDkzLS4wOTkuMDk0LS4wOTcuMDk1LS4wOTYuMDk4LS4wOTcuMDk4LS4wOTUuMDk5LS4wOTMuMS0uMDkyLjEwMy0uMDkxLjEwMS0uMDg5LjEwNC0uMDg4LjEwNC0uMDg2LjEwNi0uMDg2LjEwNi0uMDgzLjEwNi0uMDgyLjEwOS0uMDgyLjEwOC0uMDc5LjExLS4wNzguMTEtLjA3Ni4xMTItLjA3Ni4xMTItLjA3NC4xMTMtLjA3Mi4xMTMtLjA3MS4xMTUtLjA3LjExNS0uMDY4LjExOC0uMDY3LjExNy0uMDY1LjEyLS4wNjUuMDU0LS4wMjkuMTM1LS4wODguMTE2LS4xMTEuMDk0LS4xMzIuMDY4LS4xNDYuMDQtLjE1Ni4wMDktLjE2MS0uMDItLjE2LS4wNS0uMTUzLS4wNzgtLjE0Mi0uMTAyLS4xMjUtLjEyMy0uMTAzLS4xNDEtLjA3OS0uMTUzLS4wNTEtLjE2LS4wMjJ6bTEzLjkxIDIuMTE2bC0uMTYyLjAwOC0uMTU3LjAzNy0uMTQ3LjA2Ni0uMTMyLjA5Mi0uMTEzLjExNi0uMDkuMTM0LS4wNjMuMTQ4LS4wMzQuMTU3LS4wMDUuMTYyLjAyNS4xNTkuMDU1LjE1Mi4wODIuMTM4LjA4Ni4xMDMuMDkuMDkuMDk0LjA5OC4wOTIuMDk5LjA5My4xLjA5MS4xMDMuMDg5LjEwMS4wODguMTA0LjA4Ni4xMDQuMDg2LjEwNi4wODMuMTA1LjA4My4xMDguMDguMTA4LjA4MS4xMS4wNzcuMTA3LjA3Ny4xMTIuMDc1LjExMS4wNzUuMTE0LjA3Mi4xMTMuMDcxLjExMy4wNy4xMTQuMDY4LjExOC4wNjcuMTE1LjA2NS4xMTguMDY0LjExNy4wNjIuMTE3LjA2MS4xMjEuMDU5LjExOS4wNTkuMTIyLjA1Ni4xMjEuMDU0LjEyLjA1NS4xMjUuMDUxLjEyMy4wNTEuMTI1LjA0OC4xMjMuMDQ4LjEyNy4wNDcuMTI2LjA0NC4xMjUuMDQzLjEyOC4wNDIuMTI5LjAzOS4xMjYuMDM4LjEzLjAyMi4wNzYuMDU4LjE1LjA4NS4xMzcuMTEuMTE5LjEyOS4wOTYuMTQ1LjA3LjE1NS4wNDMuMTYuMDEzLjE2MS0uMDE3LjE1NC0uMDQ2LjE0NC0uMDc1LjEyNi0uMS4xMDYtLjEyLjA4Mi0uMTQuMDU1LS4xNTEuMDI1LS4xNi0uMDA1LS4xNi0uMDI2LS4xMzItLjAyMy0uMDgyLS4wMDItLjAwNS0uMDAxLS4wMDUtLjA0Mi0uMTM5LS4wMDEtLjAwNS0uMDAyLS4wMDUtLjA0My0uMTM4LS4wMDEtLjAwNS0uMDAyLS4wMDUtLjA0NC0uMTM3LS4wMDItLjAwNS0uMDAyLS4wMDUtLjA0Ni0uMTM3LS4wMDItLjAwNS0uMDAxLS4wMDUtLjA0OC0uMTM3LS4wMDItLjAwNS0uMDAyLS4wMDUtLjA1LS4xMzUtLjAwMS0uMDA1LS4wMDItLjAwNS0uMDUxLS4xMzUtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDUzLS4xMzUtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU0LS4xMzMtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU3LS4xMzMtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU3LS4xMzItLjAwMy0uMDA1LS4wMDItLjAwNS0uMDYtLjEzMi0uMDAxLS4wMDUtLjAwMi0uMDA0LS4wNjEtLjEzMi0uMDAzLS4wMDQtLjAwMi0uMDA1LS4wNjMtLjEzLS4wMDItLjAwNS0uMDAyLS4wMDUtLjA2NC0uMTMtLjAwMy0uMDA0LS4wMDItLjAwNS0uMDY2LS4xMjktLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDY3LS4xMjgtLjAwMi0uMDA1LS4wMDMtLjAwNC0uMDY5LS4xMjgtLjAwMi0uMDA0LS4wMDMtLjAwNS0uMDctLjEyNi0uMDAzLS4wMDUtLjAwMy0uMDA0LS4wNzItLjEyNi0uMDAyLS4wMDUtLjAwMy0uMDA0LS4wNzQtLjEyNS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wNzUtLjEyNC0uMDAzLS4wMDQtLjAwMy0uMDA1LS4wNzYtLjEyMy0uMDAzLS4wMDQtLjAwMy0uMDA1LS4wNzgtLjEyMi0uMDAzLS4wMDQtLjAwMy0uMDA1LS4wOC0uMTIxLS4wMDMtLjAwNC0uMDAzLS4wMDUtLjA4MS0uMTItLjAwMy0uMDA1LS4wMDMtLjAwNC0uMDgzLS4xMi0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wODQtLjExOC0uMDAzLS4wMDUtLjAwMy0uMDA0LS4wODYtLjExOC0uMDAzLS4wMDQtLjAwNC0uMDA0LS4wODctLjExNy0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOS0uMTE2LS4wMDItLjAwNC0uMDA0LS4wMDQtLjA5LS4xMTQtLjAwMy0uMDA1LS4wMDQtLjAwNC0uMDkxLS4xMTMtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMDk0LS4xMTMtLjAwMy0uMDA0LS4wMDMtLjAwNC0uMDk1LS4xMTEtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMDk2LS4xMS0uMDA0LS4wMDUtLjAwMy0uMDA0LS4wOTgtLjExLS4wMDQtLjAwMy0uMDAzLS4wMDQtLjEtLjEwOC0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xLS4xMDctLjAwNC0uMDA0LS4wMDQtLjAwNC0uMTAyLS4xMDYtLjAwMy0uMDAzLS4wMDQtLjAwNC0uMDkzLS4wOTUtLjEyNC0uMTAzLS4xNC0uMDgtLjE1My0uMDUtLjE2LS4wMjN6TTQuNDUgMTIuODI2bC0uMTYxLjAwMi0uMTU4LjAzMi0uMTUuMDYtLjEzNS4wODgtLjExOC4xMS0uMDk0LjEzMS0uMDY5LjE0Ni0uMDM1LjEyOS0uMDI2LjEzMnYuMDA1bC0uMDAyLjAwNS0uMDI1LjE0My0uMDAxLjAwNS0uMDAxLjAwNi0uMDI0LjE0My0uMDAxLjAwNS0uMDAxLjAwNi0uMDIyLjE0My0uMDAxLjAwNi0uMDAxLjAwNS0uMDIuMTQ0LS4wMDEuMDA1LS4wMDEuMDA1LS4wMTkuMTQ1di4wMDVsLS4wMDEuMDA2LS4wMTcuMTQ0di4wMDZsLS4wMDEuMDA1LS4wMTYuMTQ1di4wMTFsLS4wMTQuMTQ1di4wMDVsLS4wMDEuMDA2LS4wMTIuMTQ2di4wMWwtLjAxLjE0Ni0uMDAxLjAwNnYuMDA1bC0uMDA5LjE0NnYuMDExbC0uMDA3LjE0NnYuMDExbC0uMDA0LjE0N3YuMDExbC0uMDAzLjE0N3YuMDFsLS4wMDIuMTQ4di4wMWwuMDAxLjE0OHYuMDFsLjAwMy4xNDd2LjAxMWwuMDA1LjE0N3YuMDFsLjAwNy4xNDd2LjAxMWwuMDA5LjE0NnYuMDExbC4wMS4xNDZ2LjAxbC4wMTMuMTQ2di4wMTFsLjAxNC4xNDV2LjAwNWwuMDAxLjAwNi4wMTYuMTQ1di4wMTFsLjAxOC4xNDR2LjAwNmwuMDAxLjAwNS4wMTkuMTQ0di4wMDZsLjAwMS4wMDUuMDIxLjE0NHYuMDA1bC4wMDIuMDA2LjAyMi4xNDN2LjAwNmwuMDAyLjAwNS4wMjQuMTQzdi4wMDVsLjAwMi4wMDYuMDI1LjE0My4wMDEuMDA1LjAwMS4wMDUuMDI4LjE0My4wMDEuMDA1LjAwMS4wMDUuMDMuMTQydi4wMDVsLjAwMi4wMDYuMDMuMTQxLjAwMi4wMDUuMDAxLjAwNS4wMzMuMTQydi4wMDVsLjAwMi4wMDUuMDM1LjE0di4wMDZsLjAwMi4wMDUuMDM2LjE0LjAwMi4wMDUuMDAxLjAwNS4wMzguMTQuMDAxLjAwNS4wMDIuMDA1LjA0LjE0di4wMDVsLjAwMi4wMDUuMDQyLjEzOC4wMDEuMDA2LjAwMi4wMDUuMDQyLjEzOC4wMDIuMDA1LjAwMi4wMDUuMDE3LjA1NC4wNjQuMTQ4LjA5LjEzNC4xMTQuMTE0LjEzMi4wOTIuMTQ4LjA2NS4xNTcuMDM3LjE2LjAwNy4xNi0uMDIzLjE1My0uMDUyLjE0LS4wOC4xMjMtLjEwNC4xMDItLjEyNS4wNzYtLjE0Mi4wNDktLjE1My4wMi0uMTYtLjAxMS0uMTYxLS4wMzEtLjEzLS4wMTctLjA1MS0uMDM5LS4xMjYtLjAzOC0uMTMtLjAzNy0uMTI4LS4wMzUtLjEzLS4wMzMtLjEyOC0uMDMzLS4xMzQtLjAzLS4xMy0uMDI5LS4xMzEtLjAyNi0uMTMtLjAyNi0uMTMzLS4wMjQtLjEzMy0uMDIzLS4xMzMtLjAyLS4xMzItLjAyLS4xMzYtLjAxNy0uMTMyLS4wMTYtLjEzNS0uMDE0LS4xMzUtLjAxMi0uMTMzLS4wMTItLjEzOC0uMDA5LS4xMzMtLjAwNy0uMTM2LS4wMDYtLjEzOC0uMDA0LS4xMzQtLjAwMy0uMTM2di0uMjc0bC4wMDMtLjEzNi4wMDQtLjEzNC4wMDYtLjEzOS4wMDctLjEzNi4wMS0uMTMzLjAxLS4xMzguMDEzLS4xMzIuMDE0LS4xMzUuMDE2LS4xMzUuMDE3LS4xMzIuMDItLjEzNy4wMi0uMTMuMDIzLS4xMzQuMDI0LS4xMzMuMDI0LS4xMjYuMDE2LS4xNi0uMDE0LS4xNjEtLjA0NC0uMTU1LS4wNzItLjE0NS0uMDk4LS4xMjgtLjEyLS4xMDgtLjEzNy0uMDg0LS4xNS0uMDU3LS4xNi0uMDI5em0yNi42OTggMS42MDFsLS4xNjEuMDEtLjE1Ny4wNC0uMTQ2LjA2Ny0uMTMxLjA5My0uMTEyLjExNy0uMDg4LjEzNS0uMDYxLjE0OS0uMDMzLjE1Ny0uMDA1LjEzNC4wMDYuMTQuMDA2LjE3Ni4wMDMuMTc3LjAwMS4xNzgtLjAwMS4xNzctLjAwMy4xNzgtLjAwNi4xNzctLjAwNy4xNzYtLjAxLjE3Ny0uMDEyLjE3Ni0uMDE1LjE3Ni0uMDE2LjE3My0uMDE4LjE3NS0uMDIuMTc1LS4wMjQuMTc0LS4wMjUuMTc1LS4wMjYuMTctLjAzLjE3NC0uMDMuMTczLS4wMzMuMTctLjAzNi4xNzItLjAzNy4xNy0uMDQuMTctLjA0Mi4xNzItLjA0My4xNjgtLjA0NS4xNjYtLjA0OC4xNjktLjA1LjE2Ny0uMDUyLjE2OC0uMDUzLjE2NC0uMDU2LjE2Ni0uMDU4LjE2Ni0uMDYuMTYtLjA2Mi4xNjUtLjA2Mi4xNTgtLjA2Ni4xNjUtLjA2OC4xNi0uMDcuMTYtLjA3LjE1OC0uMDc1LjE1OS0uMDc0LjE1NS0uMDc5LjE1OC0uMDguMTU4LS4wNi4xNS0uMDMuMTU4LS4wMDEuMTYxLjAyOS4xNTkuMDU4LjE1LjA4NS4xMzcuMTA4LjExOS4xMy4wOTcuMTQ0LjA3LjE1Ni4wNDQuMTYuMDEzLjE2LS4wMTcuMTU1LS4wNDYuMTQzLS4wNzQuMTI3LS4xLjEwNy0uMTIuMDctLjExNS4wODMtLjE2NC4wMDMtLjAwNS4wMDItLjAwNC4wODItLjE2Ni4wMDItLjAwNS4wMDMtLjAwNC4wOC0uMTY3LjAwMi0uMDA1LjAwMi0uMDA0LjA3OC0uMTY4LjAwMi0uMDA1LjAwMi0uMDA0LjA3Ni0uMTY5LjAwMi0uMDA0LjAwMi0uMDA1LjA3NC0uMTcuMDAyLS4wMDQuMDAyLS4wMDUuMDcyLS4xNy4wMDItLjAwNS4wMDItLjAwNS4wNy0uMTcxLjAwMS0uMDA1LjAwMi0uMDA1LjA2OC0uMTcyLjAwMi0uMDA0LjAwMi0uMDA1LjA2NS0uMTczLjAwMi0uMDA1LjAwMi0uMDA1LjA2My0uMTczLjAwMi0uMDA1LjAwMi0uMDA1LjA2LS4xNzQuMDAzLS4wMDUuMDAxLS4wMDUuMDYtLjE3NS4wMDEtLjAwNS4wMDItLjAwNS4wNTctLjE3Ni4wMDEtLjAwNS4wMDItLjAwNS4wNTUtLjE3Ny4wMDEtLjAwNS4wMDItLjAwNS4wNTItLjE3Ny4wMDItLjAwNS4wMDEtLjAwNS4wNTEtLjE3OC4wMDEtLjAwNS4wMDItLjAwNS4wNDgtLjE3OS4wMDItLjAwNXYtLjAwNWwuMDQ3LS4xNzkuMDAxLS4wMDUuMDAyLS4wMDUuMDQ0LS4xOHYtLjAwNWwuMDAyLS4wMDUuMDQyLS4xOC4wMDEtLjAwNi4wMDEtLjAwNS4wNC0uMTgxLjAwMS0uMDA1LjAwMS0uMDA1LjAzNy0uMTgyLjAwMi0uMDA1di0uMDA1bC4wMzYtLjE4MnYtLjAwNmwuMDAyLS4wMDUuMDMzLS4xODJ2LS4wMDZsLjAwMi0uMDA1LjAzLS4xODMuMDAxLS4wMDUuMDAxLS4wMDUuMDI5LS4xODR2LS4wMDVsLjAwMS0uMDA2LjAyNy0uMTg0di0uMDA1bC4wMDEtLjAwNS4wMjQtLjE4NXYtLjAwNWwuMDAxLS4wMDUuMDIyLS4xODV2LS4wMDZsLjAwMS0uMDA1LjAyLS4xODV2LS4wMDZsLjAwMS0uMDA1LjAxNy0uMTg2di0uMDA1bC4wMDEtLjAwNS4wMTUtLjE4N3YtLjAwNWwuMDAxLS4wMDUuMDEzLS4xODd2LS4wMWwuMDEtLjE4Ny4wMDEtLjAwNnYtLjAwNWwuMDA5LS4xODd2LS4wMTFsLjAwNi0uMTg3di0uMDExbC4wMDQtLjE4OHYtLjAxMWwuMDAxLS4xODh2LS4wMWwtLjAwMS0uMTg4di0uMDExbC0uMDA0LS4xODh2LS4wMTFsLS4wMDYtLjE4N3YtLjAxMWwtLjAwNy0uMTQ1LS4wMjItLjE2LS4wNS0uMTUyLS4wOC0uMTQxLS4xMDMtLjEyNC0uMTI1LS4xMDItLjE0MS0uMDc3LS4xNTMtLjA1LS4xNi0uMDJ6TS45MzggMTVMLjc3NyAxNWwtLjE1OC4wMzItLjE1LjA2LS4xMzYuMDg3LS4xMTcuMTEtLjA5NS4xMzEtLjA2OC4xNDYtLjA0LjE1Ni0uMDEyLjEzMy0uMDAxLjE0di4wMWwuMDAxLjE4OHYuMDExbC4wMDQuMTg4di4wMTFsLjAwNi4xODd2LjAxMWwuMDA4LjE4N3YuMDExbC4wMTEuMTg3di4wMDVsLjAwMS4wMDUuMDEzLjE4N3YuMDFsLjAxNi4xODd2LjAxbC4wMTguMTg2di4wMTFsLjAyLjE4NS4wMDEuMDA1di4wMDZsLjAyMi4xODUuMDAxLjAwNXYuMDA1bC4wMjUuMTg1di4wMDVsLjAwMS4wMDUuMDI3LjE4NHYuMDA2bC4wMDEuMDA1LjAyOS4xODR2LjAwNWwuMDAxLjAwNS4wMzEuMTgzLjAwMS4wMDUuMDAxLjAwNi4wMzMuMTgyLjAwMS4wMDUuMDAxLjAwNi4wMzUuMTgyLjAwMS4wMDUuMDAxLjAwNS4wMzguMTgydi4wMDVsLjAwMi4wMDUuMDQuMTgxdi4wMDVsLjAwMi4wMDUuMDQyLjE4LjAwMS4wMDYuMDAxLjAwNS4wNDQuMTguMDAyLjAwNXYuMDA1bC4wNDcuMTguMDAxLjAwNC4wMDIuMDA1LjA0OC4xNzkuMDAyLjAwNS4wMDEuMDA1LjA1LjE3OC4wMDIuMDA1LjAwMS4wMDUuMDUzLjE3Ny4wMDIuMDA1LjAwMS4wMDUuMDU1LjE3Ny4wMDIuMDA1LjAwMS4wMDUuMDU3LjE3Ni4wMDIuMDA1LjAwMS4wMDUuMDYuMTc1LjAwMS4wMDUuMDAyLjAwNS4wNjEuMTc0LjAwMi4wMDUuMDAyLjAwNS4wNjMuMTczLjAwMi4wMDUuMDAyLjAwNS4wNjUuMTczLjAwMi4wMDUuMDAyLjAwNC4wNjcuMTcyLjAwMi4wMDUuMDAyLjAwNS4wNy4xNzEuMDAyLjAwNS4wMDIuMDA1LjA3Mi4xNy4wMDIuMDA1LjAwMi4wMDQuMDc0LjE3LjAwMi4wMDUuMDAyLjAwNC4wNzYuMTY5LjAwMi4wMDQuMDAyLjAwNS4wNzguMTY4LjAwMi4wMDQuMDAyLjAwNS4wOC4xNjcuMDAzLjAwNC4wMDIuMDA1LjA4Mi4xNjYuMDAyLjAwNC4wMDMuMDA1LjAyLjA0LjA4Ni4xMzYuMTEuMTE4LjEzLjA5NS4xNDYuMDcuMTU2LjA0MS4xNi4wMTIuMTYtLjAxOS4xNTUtLjA0OC4xNDItLjA3NS4xMjYtLjEuMTA1LS4xMjMuMDgtLjE0LjA1NC0uMTUyLjAyNC0uMTYtLjAwNi0uMTYtLjAzNi0uMTU4LS4wNTEtLjEyMy0uMDE4LS4wMzQtLjA3OC0uMTU4TDMuMSAyMi4xbC0uMDc0LS4xNi0uMDcxLS4xNTctLjA3LS4xNi0uMDY4LS4xNi0uMDY3LS4xNjUtLjA2Mi0uMTU4LS4wNjItLjE2NC0uMDU5LS4xNjEtLjA1OC0uMTY2LS4wNTYtLjE2Ni0uMDUzLS4xNjQtLjA1Mi0uMTY4LS4wNS0uMTY3LS4wNDgtLjE3LS4wNDUtLjE2NS0uMDQzLS4xNjgtLjA0My0uMTcyLS4wMzktLjE3LS4wMzctLjE3LS4wMzYtLjE3Mi0uMDMzLS4xNy0uMDMtLjE3My0uMDMtLjE3NC0uMDI3LS4xNy0uMDI1LS4xNzUtLjAyMi0uMTc0LS4wMjEtLjE3NS0uMDE4LS4xNzUtLjAxNy0uMTczLS4wMTQtLjE3Ni0uMDEyLS4xNzYtLjAxLS4xNzctLjAwNy0uMTc2LS4wMDYtLjE3Ny0uMDAzLS4xNzhMMS43MyAxNnYtLjEzNGwtLjAxMy0uMTYtLjA0NC0uMTU2LS4wNzItLjE0NC0uMDk3LS4xMjktLjEyLS4xMDgtLjEzNy0uMDg1LS4xNS0uMDU3TC45MzggMTV6bTI2Ljc5OCAyLjAyNGwtLjE2LjAwNy0uMTU3LjAzOC0uMTQ4LjA2Ni0uMTMyLjA5Mi0uMTEzLjExNS0uMDkuMTM0LS4wNjIuMTQ4LS4wMy4xMjctLjAwMS4wMDQtLjAyMy4xMzQtLjAyNC4xMzMtLjAyNi4xMzMtLjAyNi4xMy0uMDMuMTMyLS4wMy4xMjktLjAzMi4xMzQtLjAzMy4xMjgtLjAzNS4xMy0uMDM3LjEyOC0uMDM4LjEzLS4wNC4xMjYtLjA0LjEyOC0uMDQ0LjEyOC0uMDQ0LjEyNi0uMDQ2LjEyNi0uMDQ4LjEyNi0uMDUuMTI1LS4wNS4xMjUtLjA1MS4xMjItLjA1NC4xMjMtLjA1NS4xMjItLjA1Ni4xMi0uMDU4LjEyMi0uMDYuMTItLjA2MS4xMi0uMDYzLjExOS0uMDYyLjExNi0uMDY3LjExOS0uMDY2LjExNi0uMDY5LjExNS0uMDY5LjExNS0uMDcuMTEzLS4wNzMuMTEzLS4wNzQuMTEyLS4wNzYuMTEzLS4wNzcuMTEyLS4wNzcuMTA3LS4wOC4xMS0uMDguMTA3LS4wODUuMTEtLjA0NC4wNTYtLjA4OC4xMzUtLjA2LjE1LS4wMzMuMTU4LS4wMDIuMTYuMDI3LjE2LjA1Ny4xNS4wODMuMTM4LjEwOC4xMi4xMjguMDk4LjE0NC4wNzIuMTU1LjA0NS4xNi4wMTUuMTYxLS4wMTYuMTU1LS4wNDQuMTQ0LS4wNzMuMTI4LS4wOTguMDktLjA5OS4wNS0uMDYxLjAwMy0uMDA0LjAwMy0uMDA1LjA4OS0uMTE1LjAwMy0uMDA0LjAwMy0uMDA1LjA4OC0uMTE2LjAwMy0uMDA0LjAwMy0uMDA1LjA4Ni0uMTE3LjAwMy0uMDA0LjAwMy0uMDA1LjA4NC0uMTE4LjAwMy0uMDA0LjAwMy0uMDA1LjA4My0uMTIuMDAzLS4wMDQuMDAzLS4wMDQuMDgxLS4xMi4wMDMtLjAwNS4wMDMtLjAwNC4wOC0uMTIxLjAwMy0uMDA1LjAwMy0uMDA0LjA3OC0uMTIyLjAwMy0uMDA1LjAwMy0uMDA0LjA3Ny0uMTIzLjAwMi0uMDA1LjAwMy0uMDA0LjA3NS0uMTI0LjAwMy0uMDA1LjAwMy0uMDA0LjA3My0uMTI1LjAwMy0uMDA1LjAwMy0uMDA0LjA3Mi0uMTI2LjAwMi0uMDA0LjAwMy0uMDA1LjA3LS4xMjYuMDAzLS4wMDUuMDAyLS4wMDUuMDctLjEyNy4wMDItLjAwNC4wMDItLjAwNS4wNjgtLjEyOC4wMDItLjAwNS4wMDItLjAwNC4wNjYtLjEzLjAwMy0uMDA0LjAwMi0uMDA1LjA2NC0uMTMuMDAyLS4wMDQuMDAzLS4wMDUuMDYyLS4xMy4wMDItLjAwNS4wMDMtLjAwNS4wNi0uMTMuMDAzLS4wMDUuMDAyLS4wMDUuMDYtLjEzMi4wMDItLjAwNS4wMDItLjAwNS4wNTctLjEzMi4wMDMtLjAwNS4wMDItLjAwNS4wNTYtLjEzMy4wMDItLjAwNS4wMDItLjAwNS4wNTQtLjEzNC4wMDItLjAwNC4wMDItLjAwNS4wNTMtLjEzNS4wMDItLjAwNS4wMDItLjAwNS4wNTEtLjEzNS4wMDItLjAwNS4wMDItLjAwNS4wNS0uMTM1LjAwMS0uMDA1LjAwMi0uMDA1LjA0OC0uMTM3LjAwMS0uMDA1LjAwMi0uMDA1LjA0Ni0uMTM3LjAwMi0uMDA1LjAwMi0uMDA1LjA0NC0uMTM3LjAwMi0uMDA1LjAwMi0uMDA1LjA0Mi0uMTM4LjAwMi0uMDA1LjAwMS0uMDA2LjA0Mi0uMTM4LjAwMS0uMDA1LjAwMi0uMDA1LjA0LS4xNFYxOS40bC4wMDItLjAwNS4wMzgtLjE0LjAwMS0uMDA1LjAwMi0uMDA1LjAzNi0uMTQuMDAxLS4wMDUuMDAxLS4wMDUuMDM1LS4xNDEuMDAxLS4wMDUuMDAxLS4wMDUuMDMzLS4xNDIuMDAxLS4wMDUuMDAxLS4wMDUuMDMxLS4xNDEuMDAxLS4wMDYuMDAyLS4wMDUuMDI5LS4xNDJ2LS4wMDVsLjAwMi0uMDA1LjAyOC0uMTQzdi0uMDA1bC4wMDItLjAwNS4wMjUtLjE0My4wMDEtLjAwNi4wMDEtLjAwNS4wMjQtLjE0My4wMDEtLjAwNS4wMDEtLjAwNi4wMDEtLjAwNi4wMS0uMTYxLS4wMi0uMTYtLjA1LS4xNTQtLjA3Ny0uMTQxLS4xMDItLjEyNS0uMTIzLS4xMDQtLjE0MS0uMDc5LS4xNTMtLjA1MS0uMTYtLjAyMnpNNi44NDEgMjIuNzFsLS4xNi4wMjQtLjE1Mi4wNTMtLjE0LjA4LS4xMjIuMTA1LS4xMDEuMTI2LS4wNzYuMTQyLS4wNDguMTU0LS4wMTguMTYuMDExLjE2MS4wNDEuMTU2LjA3LjE0Ni4wNzcuMTA5LjA0LjA0OC4wMDMuMDA0LjAwMy4wMDQuMDk1LjExMS4wMDMuMDA0LjAwNC4wMDQuMDk2LjExLjAwNC4wMDUuMDAzLjAwNC4wOTguMTA5LjAwMy4wMDQuMDA0LjAwNC4xLjEwOC4wMDMuMDA0LjAwMy4wMDQuMTAxLjEwNy4wMDQuMDA0LjAwMy4wMDQuMTAyLjEwNS4wMDQuMDA0LjAwNC4wMDQuMTAzLjEwNS4wMDQuMDA0LjAwNC4wMDMuMTA1LjEwNC4wMDMuMDA0LjAwNC4wMDMuMTA2LjEwMi4wMDQuMDA0LjAwNC4wMDQuMTA3LjEuMDA0LjAwNC4wMDQuMDA0LjEwOC4wOTkuMDA0LjAwMy4wMDQuMDA0LjExLjA5OC4wMDMuMDAzLjAwNC4wMDQuMTEuMDk2LjAwNC4wMDMuMDA1LjAwNC4xMS4wOTUuMDA1LjAwMy4wMDQuMDA0LjExMy4wOTMuMDA0LjAwMy4wMDQuMDA0LjExMy4wOTEuMDA0LjAwNC4wMDUuMDAzLjExNC4wOS4wMDQuMDA0LjAwNC4wMDMuMTE2LjA4OS4wMDQuMDAzLjAwNC4wMDMuMTE3LjA4OC4wMDQuMDAzLjAwNC4wMDMuMTE4LjA4Ni4wMDQuMDAzLjAwNS4wMDMuMTE4LjA4NC4wMDQuMDAzLjAwNS4wMDMuMTE5LjA4My4wMDQuMDAzLjAwNS4wMDMuMTIuMDgxLjAwNS4wMDMuMDA0LjAwMy4xMjEuMDguMDA1LjAwMy4wMDQuMDAzLjEyMi4wNzguMDA1LjAwMy4wMDQuMDAzLjEyMy4wNzYuMDA1LjAwMy4wMDQuMDAzLjEyNC4wNzUuMDA1LjAwMy4wMDQuMDAzLjEyNS4wNzMuMDA0LjAwMy4wMDUuMDAyLjEyNi4wNzMuMDA0LjAwMi4wMDUuMDAzLjEyNi4wNy4wMDUuMDAzLjAwNC4wMDIuMTI4LjA3LjAwNC4wMDIuMDA1LjAwMi4xMjguMDY3LjAwNS4wMDMuMDA0LjAwMi4xMy4wNjYuMDA0LjAwMi4wMDUuMDAzLjEzLjA2NC4wMDQuMDAyLjAwNS4wMDMuMTMuMDYyLjAwNS4wMDIuMDA0LjAwMy4xMzIuMDYuMDA0LjAwMy4wMDUuMDAyLjEzMi4wNi4wMDUuMDAyLjAwNS4wMDIuMTMyLjA1Ny4wMDUuMDAyLjAwNS4wMDIuMTMzLjA1Ny4wMDUuMDAyLjAwNS4wMDIuMTMzLjA1NC4wMDUuMDAyLjAwNS4wMDIuMTMuMDUuMTU0LjA0NS4xNi4wMTYuMTYtLjAxNS4xNTYtLjA0NS4xNDQtLjA3Mi4xMjgtLjA5OC4xMDgtLjEyLjA4My0uMTM4LjA1Ny0uMTUuMDI4LS4xNi0uMDAzLS4xNi0uMDMyLS4xNTktLjA2MS0uMTQ5LS4wODgtLjEzNS0uMTEtLjExNy0uMTMyLS4wOTQtLjEyLS4wNTgtLjEyNC0uMDQ5LS4xMjYtLjA1MS0uMTIyLS4wNTEtLjEyMi0uMDU0LS4xMi0uMDU0LS4xMjYtLjA1OC0uMTE5LS4wNTctLjEyLS4wNi0uMTItLjA2LS4xMTgtLjA2My0uMTE3LS4wNjQtLjExOS0uMDY2LS4xMTYtLjA2Ni0uMTE1LS4wNjgtLjExNS0uMDctLjExMy0uMDctLjExNS0uMDc0LS4xMTItLjA3NC0uMTEtLjA3NS0uMTEtLjA3Ni0uMTEyLS4wOC0uMTEtLjA4LS4xMDktLjA4MS0uMTA2LS4wODItLjEwNC0uMDgyLS4xMDYtLjA4Ni0uMTA1LS4wODctLjEwMS0uMDg2LS4xMDUtLjA5MS0uMS0uMDktLjEtLjA5MS0uMS0uMDk0LS4wOTctLjA5NC0uMS0uMDk4LS4wOTMtLjA5NS0uMDk2LS4xLS4wOTMtLjA5OC0uMDkyLS4xMDEtLjA4OS0uMS0uMDktLjEwMi0uMDg4LS4xMDQtLjAzNi0uMDQzLS4xMTQtLjExNC0uMTMzLS4wOTEtLjE0OC0uMDY1LS4xNTctLjAzNi0uMTYxLS4wMDZ6bTE1LjA2MyAyLjcwMWwtLjE2LjAxNC0uMTU2LjA0NC0uMTIuMDU3LS4wNi4wMzQtLjEyLjA2Ni0uMTE3LjA2NC0uMTE4LjA2Mi0uMTIuMDYxLS4xMi4wNi0uMTE4LjA1Ny0uMTI2LjA1OC0uMTIuMDU0LS4xMjIuMDU0LS4xMjIuMDUtLjEyNi4wNTItLjEyNS4wNS0uMTI0LjA0Ni0uMTI3LjA0Ny0uMTI1LjA0NC0uMTI5LjA0My0uMTI2LjA0LS4xMy4wNDItLjEyOC4wMzgtLjEyNy4wMzUtLjEzLjAzNi0uMTMxLjAzNC0uMTI5LjAzMS0uMTMyLjAzLS4xMy4wMy0uMTM1LjAyNy0uMTMzLjAyNi0uMTMuMDIzLS4xMy4wMjItLjEzNy4wMjEtLjEzMi4wMi0uMTM0LjAxNy0uMTMyLjAxNS0uMTM4LjAxNS0uMTM1LjAxMy0uMTMzLjAxLS4xMzguMDEtLjEzNi4wMDctLjEzNC4wMDYtLjEzNi4wMDQtLjE0LjAwMy0uMTYuMDE4LS4xNTUuMDQ3LS4xNDIuMDc2LS4xMjcuMS0uMTA1LjEyMi0uMDguMTQtLjA1NC4xNTEtLjAyNS4xNi4wMDYuMTYuMDM1LjE1OC4wNjQuMTQ4LjA5LjEzNC4xMTQuMTE0LjEzMy4wOTIuMTQ3LjA2NS4xNTcuMDM2LjEzNC4wMDguMTQ1LS4wMDJoLjAxMWwuMTQ3LS4wMDVoLjAxbC4xNDctLjAwN2guMDExbC4xNDYtLjAwOWguMDExbC4xNDYtLjAxaC4wMDVsLjAwNS0uMDAxLjE0Ni0uMDEyaC4wMTFsLjE0NS0uMDE0aC4wMDVsLjAwNi0uMDAxLjE0NS0uMDE2aC4wMTFsLjE0NC0uMDE4aC4wMDZsLjAwNS0uMDAxLjE0NC0uMDJoLjAxMWwuMTQ0LS4wMjEuMDA1LS4wMDFoLjAwNmwuMTQzLS4wMjMuMDA2LS4wMDFoLjAwNWwuMTQzLS4wMjVoLjAwNWwuMDA2LS4wMDIuMTQzLS4wMjZoLjAwNWwuMDA1LS4wMDIuMTQzLS4wMjcuMDA1LS4wMDEuMDA1LS4wMDEuMTQyLS4wM2guMDA1bC4wMDUtLjAwMi4xNDItLjAzLjAwNS0uMDAyLjAwNS0uMDAxLjE0Mi0uMDMzLjAwNS0uMDAxLjAwNS0uMDAxLjE0LS4wMzUuMDA2LS4wMDEuMDA1LS4wMDEuMTQtLjAzN2guMDA1bC4wMDUtLjAwMi4xNC0uMDM4LjAwNS0uMDAyaC4wMDVsLjE0LS4wNC4wMDUtLjAwMi4wMDUtLjAwMS4xMzgtLjA0Mi4wMDUtLjAwMS4wMDYtLjAwMi4xMzgtLjA0My4wMDUtLjAwMS4wMDUtLjAwMi4xMzctLjA0NC4wMDUtLjAwMi4wMDUtLjAwMi4xMzctLjA0Ni4wMDUtLjAwMi4wMDUtLjAwMS4xMzctLjA0OC4wMDUtLjAwMi4wMDUtLjAwMi4xMzUtLjA1LjAwNS0uMDAxLjAwNS0uMDAyLjEzNS0uMDUxLjAwNS0uMDAyLjAwNS0uMDAyLjEzNS0uMDUzLjAwNS0uMDAyLjAwNC0uMDAyLjEzNC0uMDU0LjAwNS0uMDAyLjAwNS0uMDAyLjEzMy0uMDU3LjAwNS0uMDAyLjAwNS0uMDAyLjEzMi0uMDU3LjAwNS0uMDAzLjAwNS0uMDAyLjEzMi0uMDYuMDA1LS4wMDEuMDA0LS4wMDIuMTMxLS4wNjEuMDA1LS4wMDMuMDA1LS4wMDIuMTMtLjA2Mi4wMDUtLjAwMy4wMDUtLjAwMi4xMy0uMDY0LjAwNC0uMDAzLjAwNS0uMDAyLjEyOC0uMDY2LjAwNS0uMDAyLjAwNS0uMDAzLjEyOC0uMDY3LjAwNS0uMDAyLjAwNC0uMDAzLjEyNy0uMDY5LjAwNS0uMDAyLjAwNS0uMDAzLjEyNi0uMDcuMDA1LS4wMDMuMDA0LS4wMDMuMDY1LS4wMzcuMTMyLS4wOTMuMTEyLS4xMTUuMDg5LS4xMzUuMDYyLS4xNDkuMDM0LS4xNTcuMDAzLS4xNjEtLjAyNi0uMTYtLjA1NS0uMTUtLjA4Mi0uMTQtLjEwNy0uMTItLjEyNy0uMS0uMTQ0LS4wNzMtLjE1NC0uMDQ2LS4xNi0uMDE2ek02LjMzIDI2LjgxOGwtLjE2LjAyMy0uMTUyLjA1My0uMTQuMDgtLjEyMi4xMDUtLjEwMS4xMjYtLjA3Ni4xNDItLjA0OC4xNTQtLjAyLjE2LjAxMi4xNjEuMDQxLjE1Ni4wNy4xNDYuMDk0LjEzLjA5Ni4wOTMuMDMyLjAyNi4wMDQuMDAzLjAwNC4wMDQuMTQ1LjExNy4wMDQuMDAzLjAwNC4wMDQuMTQ2LjExNS4wMDUuMDAzLjAwNC4wMDQuMTQ3LjExMy4wMDUuMDAzLjAwNC4wMDQuMTQ5LjExMS4wMDQuMDAzLjAwNC4wMDMuMTUuMTEuMDA1LjAwMy4wMDQuMDAzLjE1MS4xMDguMDA0LjAwMy4wMDUuMDAzLjE1Mi4xMDYuMDA1LjAwMy4wMDQuMDAzLjE1NC4xMDQuMDA0LjAwMy4wMDUuMDAzLjE1NC4xMDIuMDA1LjAwMi4wMDQuMDAzLjE1Ni4xLjAwNS4wMDMuMDA0LjAwMy4xNTcuMDk4LjAwNS4wMDMuMDA0LjAwMi4xNTkuMDk2LjAwNC4wMDMuMDA1LjAwMy4xNi4wOTQuMDA0LjAwMy4wMDQuMDAyLjE2LjA5Mi4wMDUuMDAzLjAwNS4wMDIuMTYxLjA5LjAwNS4wMDMuMDA1LjAwMi4xNjIuMDg4LjAwNS4wMDMuMDA0LjAwMi4xNjQuMDg2LjAwNS4wMDMuMDA0LjAwMi4xNjUuMDg0LjAwNS4wMDMuMDA0LjAwMi4xNjYuMDgyLjAwNC4wMDIuMDA1LjAwMy4xNjcuMDguMDA0LjAwMi4wMDUuMDAyLjE2OC4wNzguMDA0LjAwMi4wMDUuMDAyLjE2OC4wNzYuMDA1LjAwMi4wMDUuMDAyLjE3LjA3NC4wMDQuMDAyLjAwNS4wMDIuMTcuMDcyLjAwNS4wMDIuMDA1LjAwMi4xNy4wNy4wMDYuMDAyLjAwNS4wMDEuMTcxLjA2OC4wMDUuMDAyLjAwNS4wMDIuMTczLjA2NS4wMDUuMDAyLjAwNS4wMDIuMTczLjA2My4wMDUuMDAyLjAwNS4wMDIuMTc0LjA2LjAwNS4wMDMuMDA1LjAwMS4xNzUuMDYuMDA1LjAwMS4wMDUuMDAyLjE3Ni4wNTcuMDA1LjAwMS4wMDUuMDAyLjE3Ni4wNTUuMDA2LjAwMS4wMDUuMDAyLjE3Ny4wNTIuMDA1LjAwMi4wMDUuMDAxLjE3OC4wNS4wMDUuMDAyLjAwNS4wMDIuMTc4LjA0OC4wMDYuMDAxLjAwNS4wMDIuMTc5LjA0Ni4wMDUuMDAxLjAwNS4wMDIuMTguMDQ0aC4wMDVsLjAwNS4wMDIuMTguMDQyLjAwNi4wMDEuMDA1LjAwMS4xNTkuMDM1LjE2LjAyLjE2LS4wMS4xNTctLjA0LjE0Ni0uMDY5LjEzLS4wOTQuMTEyLS4xMTcuMDg3LS4xMzYuMDYtLjE0OS4wMzMtLjE1OC4wMDItLjE2MS0uMDI4LS4xNTktLjA1Ny0uMTUtLjA4NC0uMTM4LS4xMDgtLjEyLS4xMjgtLjA5OC0uMTQ0LS4wNzItLjEyOC0uMDM5LS4xNTQtLjAzMy0uMTY4LS4wNC0uMTcxLS4wNDEtLjE3LS4wNDQtLjE2OC0uMDQ2LS4xNjctLjA0Ny0uMTY4LS4wNS0uMTY1LS4wNTEtLjE2Ni0uMDU0LS4xNjYtLjA1Ni0uMTYzLS4wNTctLjE2NS0uMDYtLjE2MS0uMDYyLS4xNjQtLjA2NC0uMTYtLjA2NS0uMTYtLjA2OC0uMTYyLS4wNy0uMTU3LS4wNy0uMTU3LS4wNzQtLjE1Ny0uMDc1LS4xNTYtLjA3Ny0uMTUzLS4wNzktLjE1Ni0uMDgyLS4xNTMtLjA4Mi0uMTU0LS4wODYtLjE1LS4wODYtLjE1Mi0uMDktLjE0OC0uMDktLjE0Ny0uMDkyLS4xNDktLjA5NS0uMTQ1LS4wOTUtLjE0NC0uMDk4LS4xNDUtLjEtLjE0My0uMTAyLS4xNC0uMTAzLS4xNC0uMTA0LS4xNC0uMTA4LS4xMzktLjExLS4xMzYtLjExLS4wMjctLjAyMi0uMTMzLS4wOTEtLjE0OC0uMDY1LS4xNTctLjAzNi0uMTYxLS4wMDZ6bTE5LjIxNS4wODdsLS4xNi4wMS0uMTU3LjAzOS0uMTQ2LjA2Ny0uMTEuMDc2LS4wNjQuMDUxLS4xMzkuMTEtLjE0LjEwOC0uMTQuMTA0LS4xNC4xMDMtLjE0My4xMDEtLjE0NS4xMDEtLjE0NC4wOTgtLjE0NS4wOTUtLjE0OS4wOTUtLjE0OC4wOTMtLjE0Ny4wODktLjE1Mi4wOS0uMTUuMDg2LS4xNTQuMDg2LS4xNTMuMDgyLS4xNTYuMDgyLS4xNTMuMDc5LS4xNTYuMDc3LS4xNTcuMDc1LS4xNTguMDczLS4xNTcuMDcxLS4xNi4wNy0uMTYuMDY4LS4xNjEuMDY1LS4xNjQuMDY0LS4xNjEuMDYxLS4xNjUuMDYtLjE2My4wNTgtLjE2Ni4wNTYtLjE2Ni4wNTQtLjE2Ni4wNTEtLjE2Ny4wNS0uMTY3LjA0Ny0uMTcuMDQ2LS4xNjguMDQ0LS4xNzEuMDQyLS4xNjguMDM5LS4xNy4wMzctLjExLjAyMy0uMTU0LjA0Ny0uMTQzLjA3NS0uMTI2LjEtLjEwNi4xMjItLjA4MS4xMzktLjA1NC4xNTItLjAyNS4xNi4wMDYuMTYuMDM1LjE1OC4wNjMuMTQ4LjA5LjEzMy4xMTQuMTE1LjEzMi4wOTIuMTQ4LjA2NS4xNTcuMDM3LjE2LjAwNy4xMzMtLjAxNi4xMTUtLjAyNC4wMDUtLjAwMS4wMDUtLjAwMS4xODEtLjA0aC4wMDVsLjAwNS0uMDAyLjE4LS4wNDIuMDA2LS4wMDEuMDA1LS4wMDEuMTgtLjA0NC4wMDUtLjAwMi4wMDUtLjAwMS4xOC0uMDQ2LjAwNC0uMDAyaC4wMDVsLjE3OS0uMDVoLjAwNWwuMDA1LS4wMDIuMTc4LS4wNS4wMDUtLjAwMi4wMDUtLjAwMi4xNzctLjA1Mi4wMDUtLjAwMi4wMDUtLjAwMS4xNzctLjA1NS4wMDUtLjAwMi4wMDUtLjAwMS4xNzYtLjA1Ny4wMDUtLjAwMi4wMDUtLjAwMi4xNzUtLjA1OS4wMDUtLjAwMS4wMDUtLjAwMi4xNzQtLjA2MS4wMDUtLjAwMi4wMDUtLjAwMi4xNzMtLjA2My4wMDUtLjAwMi4wMDUtLjAwMi4xNzMtLjA2NS4wMDQtLjAwMi4wMDUtLjAwMi4xNzItLjA2OC4wMDUtLjAwMi4wMDUtLjAwMi4xNzEtLjA3LjAwNS0uMDAxLjAwNS0uMDAyLjE3LS4wNzIuMDA1LS4wMDIuMDA0LS4wMDIuMTctLjA3NC4wMDUtLjAwMi4wMDQtLjAwMi4xNjktLjA3Ni4wMDQtLjAwMi4wMDUtLjAwMi4xNjgtLjA3OC4wMDQtLjAwMi4wMDUtLjAwMy4xNjctLjA4LjAwNC0uMDAyLjAwNS0uMDAyLjE2Ni0uMDgyLjAwNC0uMDAyLjAwNS0uMDAzLjE2NS0uMDg0LjAwNC0uMDAyLjAwNS0uMDAzLjE2My0uMDg2LjAwNS0uMDAyLjAwNS0uMDAzLjE2Mi0uMDg4LjAwNS0uMDAyLjAwNS0uMDAzLjE2MS0uMDkuMDA1LS4wMDIuMDA0LS4wMDMuMTYtLjA5Mi4wMDUtLjAwMy4wMDUtLjAwMi4xNi0uMDk0LjAwNC0uMDAzLjAwNC0uMDAzLjE1OC0uMDk2LjAwNS0uMDAyLjAwNC0uMDAzLjE1OC0uMDk4LjAwNC0uMDAzLjAwNS0uMDAzLjE1Ni0uMS4wMDQtLjAwMy4wMDQtLjAwMy4xNTUtLjEwMS4wMDUtLjAwMy4wMDQtLjAwMy4xNTQtLjEwNC4wMDQtLjAwMy4wMDQtLjAwMy4xNTMtLjEwNi4wMDQtLjAwMy4wMDUtLjAwMy4xNTEtLjEwOC4wMDQtLjAwMy4wMDUtLjAwMy4xNS0uMTEuMDA0LS4wMDMuMDA0LS4wMDMuMTQ5LS4xMTIuMDA0LS4wMDMuMDA0LS4wMDMuMTQ4LS4xMTMuMDA0LS4wMDQuMDA0LS4wMDMuMTQ3LS4xMTUuMDA0LS4wMDQuMDA0LS4wMDMuMDY4LS4wNTUuMTE2LS4xMTMuMDkyLS4xMzIuMDY2LS4xNDcuMDM4LS4xNTcuMDA4LS4xNi0uMDIyLS4xNi0uMDUtLjE1My0uMDgtLjE0LS4xMDMtLjEyNS0uMTI0LS4xMDItLjE0Mi0uMDc3LS4xNTMtLjA1LS4xNi0uMDJ6XCIsXG4gIG9wYWNpdHk6IFwiLjk4XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkSigpIHsgcmV0dXJuIF9leHRlbmRzJEogPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkSi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE5vbkludGVycnVwdGluZ1NpZ25hbEljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJEooe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNi4wMTIgOC44MTZMOS4yMSAyMS4wMjZoMTMuNjA2bC02LjgwMy0xMi4yMXptMCAxLjc3Nmw1LjMzMiA5LjU3SDEwLjY4MWw1LjMzMS05LjU3em0wLTEwLjI4MWMtMS40NDguMDItMi45My4xNTctNC4zMDIuNjI4LS44NTIuNDQ3LS4yNTUgMS44NjMuNjYgMS41NzQgMi4yNTUtLjYwOCA0LjY0OC0uNjA3IDYuOTIyLS4xMDguOTM0LjA3NSAxLjIyOC0xLjM3Ni4zMzgtMS42N0MxOC40NTEuNDQgMTcuMjI3LjMxNyAxNi4wMTIuMzExem05LjAxMiAyLjkzNGMtLjkxMy0uMTA0LTEuMjcyIDEuMjU4LS40NTQgMS42NDggMS44MzQgMS4zNiAzLjI5MyAzLjE4NSA0LjMxIDUuMjIuNTI2Ljc3NiAxLjg0Mi4wOTggMS41MTUtLjc4YTE1LjUyMiAxNS41MjIgMCAwMC01LjA2LTYuMDA2Yy0uMS0uMDQ0LS4yMDMtLjA3LS4zMS0uMDgyek02LjY1IDMuNTljLS43NjIuMDg5LTEuMjQuODA5LTEuODA1IDEuMjY3QzMuMzggNi4yOTUgMi4xNjMgOC4wMDcgMS4zNyA5LjkwNWMtLjI2Ni44OTggMS4wOTQgMS40ODQgMS41NjQuNjc1YTE0LjgyNSAxNC44MjUgMCAwMTQuMzI3LTUuNTZjLjQ3Ni0uNTE1LjA5LTEuNDE5LS42MTItMS40MzF6bTkuMzYyLjAwN2MtLjY5OC4wNjYtMS42ODktLjE2LTIuMDMzLjYzNS0uMjgyLjczMy41MzUgMS4zNTggMS4yMTcgMS4xMjUgMS44MDYtLjE0NyAzLjYzLjIwMyA1LjI5My45MDcuOTAyLjI1NSAxLjQ3Mi0xLjExMi42NTYtMS41NzMtMS42LS43MzUtMy4zNzQtMS4wODktNS4xMzMtMS4wOTR6bS01LjQ3OSAxLjM2NWMtLjgzNS4xNS0xLjUxNy43Ni0yLjIxIDEuMjI2LTEuMjAzLjk0LTIuMzE4IDIuMDYxLTMuMDU3IDMuNDAyLS4zMy45MDQgMS4wNjMgMS41NTIgMS41NDcuNzIzIDEuMDQ1LTEuNjU2IDIuNTk2LTIuOTI1IDQuMjg1LTMuODczLjU0NS0uNDk5LjE3MS0xLjQ2My0uNTY1LTEuNDc4em0xMy45MDMgMi4xMTVjLS44NzUtLjA3LTEuMjIgMS4xNzMtLjUwMSAxLjYyNyAxLjMyNSAxLjM0IDIuMTg4IDMuMDYyIDIuNzQ4IDQuODQuNDY4Ljg0IDEuODY5LjIxIDEuNTU3LS42OTktLjYwNC0yLjExOC0xLjc1MS00LjA5Ny0zLjM1MS01LjYxNWEuOTMuOTMgMCAwMC0uNDUzLS4xNTN6TTQuNDY3IDEzLjEzMmMtLjgyMi0uMDctLjk5Ni44MjYtMS4wNDYgMS40NTUtLjI1NiAxLjkzLS4wOTQgMy45MzMuNTYyIDUuNzY5LjQwNi44NDQgMS44MDcuMzY1IDEuNjEyLS41NTFhMTEuNDk4IDExLjQ5OCAwIDAxLS4zMzQtNS44MDguODc0Ljg3NCAwIDAwLS43OTQtLjg2NXptMjYuNjg3IDEuNmMtLjc0Ni0uMDM3LTEuMDE0Ljc4NS0uODc5IDEuMzk1LjA0MyAyLjM5My0uNTcgNC43NzEtMS42NiA2Ljg5NC0uMzEuODg0IDEuMDIgMS41MzYgMS41My43NWExNS42MzIgMTUuNjMyIDAgMDAxLjgyMS04LjM3Mi44NzYuODc2IDAgMDAtLjgxMi0uNjY3em0tMzAuMTk3LjU3MWMtLjc4Mi0uMDczLTEuMDQ0Ljc3NS0uOTMzIDEuNDA0LjA2OCAyLjQxNC42NjEgNC44MzMgMS44MDkgNi45NjIuNTM0Ljc3IDEuODQyLjA3NiAxLjUwNS0uNzk4YTE0LjgzMyAxNC44MzMgMCAwMS0xLjYwMy02Ljg2MS44NzYuODc2IDAgMDAtLjc3OC0uNzA3em0yNi43ODcgMi4wMjRjLS43NzctLjA0OC0uOTUyLjc5Ny0xLjAyMSAxLjM5Mi0uMzU0IDEuNjkyLTEuMjAyIDMuMjMxLTIuMjE2IDQuNjA4LS40MDcuODcyLjkyNSAxLjYzOCAxLjQ4Ljg1MiAxLjM2MS0xLjczMyAyLjI5Ni0zLjgyNyAyLjU4Mi02LjAxN2EuODc0Ljg3NCAwIDAwLS44MjUtLjgzNXpNNi44NTcgMjMuMDEyYy0uODA4LjAxOC0xLjA4MiAxLjEyMi0uNDcgMS41OSAxLjM5MyAxLjYwNyAzLjE4NyAyLjg4NiA1LjE5NCAzLjU5OS45MS4yMjIgMS40My0xLjE2NS41OTgtMS41OTZhMTEuNDk1IDExLjQ5NSAwIDAxLTQuNzIzLTMuMzk2Ljg5OS44OTkgMCAwMC0uNTk5LS4xOTd6bTE1LjA1NyAyLjdjLS44MS4xOTQtMS41MDQuNzYtMi4zMjUuOTcyLTEuMjAzLjQ1OC0yLjUuNTM2LTMuNzU4LjY2NC0uODY5LjMwNy0uNTczIDEuNzI4LjM0NiAxLjY2MyAyLjIwMS0uMDM0IDQuNDEyLS42MjYgNi4yOTMtMS43NzguNjA0LS40OTUuMjI3LTEuNTMyLS41NTYtMS41MjF6TTYuMzQ2IDI3LjExOGMtLjgzMy4wMDgtMS4xMSAxLjIxOC0uMzk1IDEuNjE3IDEuOTg2IDEuNjAyIDQuMzU4IDIuNzQ5IDYuODY4IDMuMjI2LjkzMy4wNzYgMS4yMjctMS4zNzYuMzM4LTEuNjdhMTQuODM4IDE0LjgzOCAwIDAxLTYuMzQ1LTMuMDY2LjkyOS45MjkgMCAwMC0uNDY2LS4xMDd6bTE5LjIwOC4wODdjLS43NjYuMDktMS4yNDEuODQxLTEuOTIyIDEuMTU4LTEuNTE2Ljk5MS0zLjI1MSAxLjU4LTQuOTk2IDIuMDA1LS44NzIuNDA1LS4zNDYgMS44NDkuNTg0IDEuNjA0IDIuNTQzLS41MjYgNC45OC0xLjY2IDYuOTYzLTMuMzQ0LjQ3LS41Mi4wNzItMS40Mi0uNjMtMS40MjN6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkSSgpIHsgcmV0dXJuIF9leHRlbmRzJEkgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkSS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE5vbkludGVycnVwdGluZ1RpbWVySWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkSSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk5OCA4LjQwNmMtMy4wMTgtLjA0MS01LjkyIDEuOTI2LTcuMDMxIDQuNzI3LTEuMTM4IDIuNjk1LS41MSA2LjAxMiAxLjUzNyA4LjEwMyAxLjk5IDIuMTQxIDUuMjY4IDIuOTMgOC4wMTQgMS45MjcgMi44NzgtLjk4IDQuOTkyLTMuODI3IDUuMDY4LTYuODcuMTUzLTIuOTU3LTEuNjI0LTUuODgtNC4zLTcuMTM3YTcuNTUyIDcuNTUyIDAgMDAtMy4yODgtLjc1em0wIDEuMzg0YzIuNzU5LS4wNTIgNS4zNzMgMS45NzMgNi4wMTUgNC42NTUuNzA0IDIuNTc4LS40ODIgNS41MTctMi43OTEgNi44NjctMi4zNTggMS40OC01LjY4MiAxLjA4Ni03LjYxOC0uOTE4LTIuMDQzLTEuOTcxLTIuNDA3LTUuMzgxLS44NC03Ljc0NSAxLjExLTEuNzYzIDMuMTUtMi44OCA1LjIzNC0yLjg2em0xLjk2MiAxLjc2NWwtMi4wNzQgMy43NjJjLS42NC4wNjgtLjc5MyAxLjA0LS4yMDIgMS4zLjM5LjI3LjY5Ni0uMTggMS4wNTItLjE2NWgzLjE3di0uODY1aC0zLjE4MmwxLjk5My0zLjYxNWMtLjI1Mi0uMTQtLjUwNS0uMjc4LS43NTctLjQxN3ptLTEuOTY1LTguMjY4aC0uMTU4bC0uMTQ3LjAwM2gtLjAxMWwtLjE0Ny4wMDVoLS4wMTFsLS4xNDYuMDA3aC0uMDExbC0uMTQ2LjAwOWgtLjAxMWwtLjE0Ni4wMWgtLjAwNWwtLjAwNS4wMDEtLjE0Ni4wMTJoLS4wMTFsLS4xNDUuMDE0aC0uMDA2bC0uMDA1LjAwMS0uMDUuMDA2LS4xNTguMDMxLS4xNS4wNi0uMTM1LjA4OC0uMTE3LjExMS0uMDk0LjEzLS4wNjkuMTQ3LS4wNC4xNTYtLjAxLjE2LjAxOS4xNi4wNDkuMTU0LjA3Ni4xNDIuMTAyLjEyNS4xMjMuMTA1LjE0LjA4LjE1Mi4wNTEuMTYuMDIzLjEzNC0uMDAzLjA0NS0uMDA1LjEzNS0uMDEzLjEzMy0uMDEuMTM2LS4wMS4xMzUtLjAwNy4xMzctLjAwNi4xMzYtLjAwNC4xMzYtLjAwM2guMjc0bC4xMzYuMDAzLjEzNi4wMDQuMTM2LjAwNi4xMzYuMDA3LjEzNi4wMS4xMzMuMDEuMTM1LjAxMy4xMzUuMDE0LjEzNS4wMTYuMTM0LjAxOC4xMzIuMDE4LjEzNC4wMjEuMTMzLjAyMy4xMzMuMDI0LjEzMy4wMjUuMTMuMDI3LjEzMi4wMy4xMzIuMDMuMTI5LjAzMS4xMy4wMzQuMTI5LjAzNS4xMjkuMDM2LjEzLjA0LjEyNi4wMzguMTI4LjA0Mi4xMjYuMDQyLjEyOC4wNDUuMTI3LjA0Ny4xMjYuMDQ4LjEyLjA0Ny4xMjcuMDUxLjEyMy4wNTIuMDA2LjAwMi4xNDcuMDQ4LjE2LjAyMS4xNi0uMDA5LjE1Ny0uMDM4LjE0Ny0uMDY3LjEzMS0uMDkzLjExMi0uMTE2LjA4OS0uMTM1LjA2Mi0uMTQ5LjAzMy0uMTU4LjAwNC0uMTYtLjAyNy0uMTYtLjA1NS0uMTUxLS4wODMtLjEzOC0uMTA3LS4xMjEtLjEyNy0uMDk5LS4xMTgtLjA2My0uMDA0LS4wMDEtLjAwNS0uMDAzLS4wMDUtLjAwMi0uMTMzLS4wNTYtLjAwNS0uMDAyLS4wMDUtLjAwMi0uMTM0LS4wNTQtLjAwNC0uMDAyLS4wMDUtLjAwMi0uMTM1LS4wNTMtLjAwNS0uMDAyLS4wMDUtLjAwMi0uMTM1LS4wNTEtLjAwNS0uMDAyLS4wMDUtLjAwMi0uMTM1LS4wNS0uMDA1LS4wMDEtLjAwNS0uMDAyLS4xMzctLjA0OC0uMDA1LS4wMDEtLjAwNS0uMDAyLS4xMzctLjA0Ni0uMDA1LS4wMDItLjAwNS0uMDAyLS4xMzctLjA0NC0uMDA1LS4wMDItLjAwNS0uMDAxLS4xMzgtLjA0My0uMDA1LS4wMDItLjAwNi0uMDAxLS4xMzgtLjA0Mi0uMDA1LS4wMDEtLjAwNS0uMDAyLS4xNC0uMDRIMTkuNGwtLjAwNS0uMDAyLS4xNC0uMDM4LS4wMDUtLjAwMS0uMDA1LS4wMDItLjE0LS4wMzYtLjAwNS0uMDAxLS4wMDUtLjAwMS0uMTQxLS4wMzUtLjAwNS0uMDAxLS4wMDUtLjAwMS0uMTQyLS4wMzMtLjAwNS0uMDAxLS4wMDUtLjAwMS0uMTQxLS4wMzEtLjAwNi0uMDAyaC0uMDA1bC0uMTQyLS4wMy0uMDA1LS4wMDEtLjAwNS0uMDAxLS4xNDMtLjAyOGgtLjAwNWwtLjAwNS0uMDAxLS4xNDMtLjAyNi0uMDA2LS4wMDEtLjAwNS0uMDAxLS4xNDMtLjAyNC0uMDA1LS4wMDEtLjAwNi0uMDAxLS4xNDMtLjAyMi0uMDA2LS4wMDFoLS4wMDVsLS4xNDQtLjAyMmgtLjAwNWwtLjAwNi0uMDAxLS4xNDQtLjAxOWgtLjAwNWwtLjAwNi0uMDAxLS4xNDQtLjAxN2gtLjAwNmwtLjAwNS0uMDAxLS4xNDUtLjAxNmgtLjAxMWwtLjE0NS0uMDE0SDE3LjFsLS4wMDUtLjAwMS0uMTQ2LS4wMTJoLS4wMWwtLjE0Ni0uMDEtLjAwNi0uMDAxaC0uMDA1bC0uMTQ2LS4wMDloLS4wMTFsLS4xNDctLjAwNmgtLjAxbC0uMTQ3LS4wMDVoLS4wMTFsLS4xNDctLjAwM2gtLjAxbC0uMTQ4LS4wMDFoLS4wMXpNMTAuMzU3IDQuNjZsLS4xNTYuMDM3LS4xMjMuMDUzLS4wNi4wMzItLjAwNS4wMDItLjAwNC4wMDMtLjEyOC4wNjktLjAwNC4wMDItLjAwNS4wMDMtLjEyNi4wNy0uMDA1LjAwMy0uMDA0LjAwMi0uMTI2LjA3Mi0uMDA1LjAwMy0uMDA0LjAwMy0uMTI1LjA3My0uMDA0LjAwMy0uMDA1LjAwMy0uMTI0LjA3NS0uMDA0LjAwMy0uMDA1LjAwMi0uMTIzLjA3Ny0uMDA0LjAwMy0uMDA1LjAwMy0uMTIyLjA3OC0uMDA0LjAwMy0uMDA1LjAwMy0uMTIxLjA4LS4wMDQuMDAyLS4wMDUuMDAzLS4xMi4wODItLjAwNS4wMDMtLjAwNC4wMDMtLjEyLjA4My0uMDA0LjAwMy0uMDA0LjAwMy0uMTE4LjA4NC0uMDA1LjAwMy0uMDA0LjAwMy0uMTE4LjA4Ni0uMDA0LjAwMy0uMDA0LjAwMy0uMTE3LjA4OC0uMDA0LjAwMy0uMDA0LjAwMy0uMTE2LjA4OS0uMDA0LjAwMy0uMDA0LjAwNC0uMTE0LjA5LS4wMDUuMDAzLS4wMDQuMDAzLS4xMTMuMDkyLS4wMDQuMDA0LS4wMDQuMDAzLS4xMTMuMDkzLS4wMDQuMDA0LS4wMDQuMDAzLS4xMTEuMDk1LS4wMDQuMDAzLS4wMDUuMDA0LS4xMS4wOTYtLjAwNC4wMDQtLjAwNC4wMDMtLjEwOS4wOTgtLjAwNC4wMDMtLjAwNC4wMDQtLjEwOC4xLS4wMDQuMDAzLS4wMDQuMDAzLS4xMDcuMTAxLS4wMDQuMDA0LS4wMDQuMDAzLS4xMDYuMTAyLS4wMDMuMDA0LS4wMDQuMDA0LS4xMDUuMTAzLS4wMDQuMDA0LS4wMDQuMDA0LS4xMDMuMTA1LS4wMDQuMDA0LS4wMDQuMDAzLS4xMDIuMTA2LS4wMDMuMDA0LS4wMDQuMDA0LS4xLjEwNy0uMDA0LjAwNC0uMDA0LjAwNC0uMDk5LjEwOC0uMDA0LjAwNC0uMDAzLjAwNC0uMDk4LjExLS4wMDMuMDAzLS4wMDQuMDA0LS4wOTYuMTEtLjAwNC4wMDUtLjAwMy4wMDQtLjA5NS4xMTEtLjAwMy4wMDQtLjAwNC4wMDQtLjA5My4xMTMtLjAwMy4wMDQtLjAwNC4wMDQtLjA5Mi4xMTMtLjAwMy4wMDQtLjAwMy4wMDUtLjA5LjExNC0uMDA0LjAwNC0uMDAzLjAwNC0uMDg5LjExNi0uMDAzLjAwNC0uMDAzLjAwNC0uMDg4LjExNy0uMDAzLjAwNC0uMDAzLjAwNS0uMDg2LjExNy0uMDAzLjAwNC0uMDAzLjAwNS0uMDg0LjExOC0uMDAzLjAwNC0uMDAzLjAwNS0uMDgzLjEyLS4wMDMuMDAzLS4wMDMuMDA1LS4wODIuMTItLjAwMy4wMDUtLjAwMi4wMDQtLjA2OC4xMDMtLjA3Ni4xNDItLjA0OC4xNTQtLjAxOC4xNi4wMTEuMTYxLjA0MS4xNTYuMDcuMTQ2LjA5NS4xMy4xMTcuMTEuMTM2LjA4Ni4xNS4wNi4xNTguMDMuMTYyLjAwMi4xNTgtLjAyOS4xNS0uMDU4LjEzOC0uMDg1LjExOS0uMTA4LjA4Mi0uMTA2LjA2NS0uMDk5LjA3NS0uMTEuMDc3LS4xMTMuMDc3LS4xMDcuMDgtLjExLjA4LS4xMDguMDg0LS4xMDguMDgzLS4xMDUuMDg2LS4xMDYuMDg2LS4xMDQuMDg4LS4xMDQuMDg5LS4xMDEuMDktLjEwMi4wOTMtLjEwMS4wOTMtLjA5OS4wOTQtLjA5Ny4wOTUtLjA5Ni4wOTgtLjA5Ny4wOTgtLjA5NS4wOTktLjA5My4xLS4wOTIuMTAzLS4wOTEuMTAxLS4wODkuMTA0LS4wODguMTA0LS4wODYuMTA2LS4wODYuMTA2LS4wODMuMTA2LS4wODIuMTA5LS4wODIuMTA4LS4wNzkuMTEtLjA3OC4xMS0uMDc2LjExMi0uMDc2LjExMi0uMDc0LjExMy0uMDcyLjExMy0uMDcxLjExNS0uMDcuMTE1LS4wNjguMTE4LS4wNjcuMTE3LS4wNjUuMTItLjA2NS4wNTQtLjAyOS4xMzUtLjA4OC4xMTYtLjExMS4wOTQtLjEzMi4wNjgtLjE0Ni4wNC0uMTU2LjAwOS0uMTYxLS4wMi0uMTYtLjA1LS4xNTMtLjA3OC0uMTQyLS4xMDItLjEyNS0uMTIzLS4xMDMtLjE0MS0uMDc5LS4xNTMtLjA1MS0uMTYtLjAyMi0uMTYuMDA4em0xMy45MSAyLjExNmwtLjE1OC4wMzctLjE0Ny4wNjYtLjEzMi4wOTItLjExMy4xMTYtLjA5LjEzNC0uMDYzLjE0OC0uMDM0LjE1Ny0uMDA1LjE2Mi4wMjYuMTU5LjA1NC4xNTIuMDgyLjEzOS4wODYuMTAyLjA5LjA5LjA5NC4wOTguMDkzLjA5OS4wOTIuMS4wOTEuMTAzLjA4OS4xMDEuMDg4LjEwNC4wODYuMTA0LjA4Ni4xMDYuMDgzLjEwNS4wODMuMTA4LjA4LjEwOC4wODEuMTEuMDc3LjEwNy4wNzcuMTEyLjA3NS4xMTEuMDc1LjExNC4wNzIuMTEzLjA3MS4xMTMuMDcuMTE1LjA2OC4xMTcuMDY3LjExNS4wNjUuMTE4LjA2NC4xMTcuMDYyLjExOC4wNjEuMTIuMDU5LjExOS4wNTkuMTIyLjA1Ni4xMjEuMDU0LjEyLjA1NS4xMjUuMDUxLjEyMy4wNTEuMTI1LjA0OC4xMjMuMDQ5LjEyNy4wNDYuMTI2LjA0NC4xMjUuMDQzLjEyOC4wNDIuMTI5LjAzOS4xMjYuMDM4LjEzLjAyMi4wNzYuMDU4LjE1LjA4Ni4xMzcuMTA5LjExOS4xMjkuMDk2LjE0NS4wNy4xNTUuMDQzLjE2LjAxMy4xNjEtLjAxNy4xNTUtLjA0Ni4xNDMtLjA3NC4xMjYtLjEuMTA2LS4xMjIuMDgyLS4xMzguMDU1LS4xNTIuMDI1LS4xNi0uMDA1LS4xNi0uMDI2LS4xMzItLjAyMy0uMDgyLS4wMDItLjAwNS0uMDAxLS4wMDUtLjA0Mi0uMTM5LS4wMDEtLjAwNS0uMDAyLS4wMDUtLjA0My0uMTM4LS4wMDEtLjAwNS0uMDAyLS4wMDUtLjA0NC0uMTM3LS4wMDItLjAwNS0uMDAyLS4wMDUtLjA0Ni0uMTM3LS4wMDItLjAwNS0uMDAxLS4wMDUtLjA0OC0uMTM3LS4wMDItLjAwNS0uMDAyLS4wMDUtLjA1LS4xMzUtLjAwMS0uMDA1LS4wMDItLjAwNS0uMDUxLS4xMzUtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDUzLS4xMzUtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU0LS4xMzMtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU3LS4xMzMtLjAwMi0uMDA1LS4wMDItLjAwNS0uMDU3LS4xMzItLjAwMy0uMDA1LS4wMDItLjAwNS0uMDU5LS4xMzItLjAwMi0uMDA1LS4wMDItLjAwNC0uMDYxLS4xMzItLjAwMy0uMDA0LS4wMDItLjAwNS0uMDYyLS4xMy0uMDAzLS4wMDUtLjAwMi0uMDA1LS4wNjQtLjEzLS4wMDMtLjAwNC0uMDAyLS4wMDUtLjA2Ni0uMTI5LS4wMDItLjAwNC0uMDAzLS4wMDUtLjA2Ny0uMTI4LS4wMDItLjAwNS0uMDAzLS4wMDQtLjA2OS0uMTI4LS4wMDItLjAwNC0uMDAzLS4wMDUtLjA3LS4xMjYtLjAwMy0uMDA1LS4wMDMtLjAwNC0uMDcyLS4xMjYtLjAwMi0uMDA1LS4wMDMtLjAwNC0uMDczLS4xMjUtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMDc1LS4xMjQtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMDc2LS4xMjMtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMDc4LS4xMjItLjAwMy0uMDA0LS4wMDMtLjAwNS0uMDgtLjEyMS0uMDAzLS4wMDQtLjAwMy0uMDA1LS4wOC0uMTItLjAwNC0uMDA1LS4wMDMtLjAwNC0uMDgzLS4xMi0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wODQtLjExOC0uMDAzLS4wMDUtLjAwMy0uMDA0LS4wODYtLjExNy0uMDAzLS4wMDUtLjAwMy0uMDA0LS4wODgtLjExNy0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOS0uMTE2LS4wMDItLjAwNC0uMDA0LS4wMDQtLjA5LS4xMTQtLjAwMy0uMDA1LS4wMDQtLjAwNC0uMDkxLS4xMTMtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMDkzLS4xMTMtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMDk1LS4xMTEtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMDk2LS4xMS0uMDA0LS4wMDUtLjAwMy0uMDA0LS4wOTgtLjEwOS0uMDA0LS4wMDQtLjAwMy0uMDA0LS4xLS4xMDgtLjAwMy0uMDA0LS4wMDQtLjAwNC0uMS0uMTA3LS4wMDQtLjAwNC0uMDA0LS4wMDQtLjEwMi0uMTA2LS4wMDMtLjAwMy0uMDA0LS4wMDQtLjA5My0uMDk1LS4xMjQtLjEwMy0uMTQtLjA4LS4xNTMtLjA1LS4xNi0uMDIzLS4xNi4wMDh6TTQuMjg4IDEyLjgyOGwtLjE1OC4wMzItLjE1LjA2LS4xMzUuMDg4LS4xMTcuMTEtLjA5NS4xMzEtLjA2OS4xNDYtLjAzNS4xMjktLjAyNi4xMzJ2LjAwNWwtLjAwMi4wMDUtLjAyNS4xNDMtLjAwMS4wMDUtLjAwMS4wMDYtLjAyNC4xNDMtLjAwMS4wMDUtLjAwMS4wMDYtLjAyMi4xNDMtLjAwMS4wMDYtLjAwMS4wMDUtLjAyLjE0NC0uMDAxLjAwNS0uMDAxLjAwNi0uMDE5LjE0NHYuMDA1bC0uMDAxLjAwNi0uMDE3LjE0NHYuMDA2bC0uMDAxLjAwNS0uMDE2LjE0NXYuMDExbC0uMDE0LjE0NXYuMDA2bC0uMDAxLjAwNS0uMDEyLjE0NnYuMDFsLS4wMS4xNDYtLjAwMS4wMDZ2LjAwNWwtLjAwOS4xNDZ2LjAxMWwtLjAwNy4xNDZ2LjAxMWwtLjAwNC4xNDd2LjAxMWwtLjAwMy4xNDd2LjAxbC0uMDAyLjE0OHYuMDFsLjAwMS4xNDh2LjAxbC4wMDMuMTQ3di4wMTFsLjAwNS4xNDd2LjAxbC4wMDcuMTQ3di4wMTFsLjAwOS4xNDZ2LjAxMWwuMDEuMTQ2di4wMWwuMDEzLjE0NnYuMDExbC4wMTQuMTQ1di4wMDVsLjAwMS4wMDYuMDE2LjE0NXYuMDExbC4wMTguMTQ0di4wMDZsLjAwMS4wMDUuMDE5LjE0NHYuMDA2bC4wMDEuMDA1LjAyMS4xNDR2LjAwNWwuMDAyLjAwNi4wMjIuMTQzdi4wMDZsLjAwMi4wMDUuMDI0LjE0M3YuMDA1bC4wMDIuMDA2LjAyNS4xNDMuMDAxLjAwNS4wMDEuMDA1LjAyOC4xNDMuMDAxLjAwNS4wMDEuMDA1LjAzLjE0MnYuMDA1bC4wMDIuMDA2LjAzLjE0MS4wMDIuMDA1LjAwMS4wMDYuMDMzLjE0di4wMDZsLjAwMi4wMDUuMDM1LjE0di4wMDZsLjAwMi4wMDUuMDM2LjE0LjAwMi4wMDUuMDAxLjAwNS4wMzguMTQuMDAxLjAwNS4wMDIuMDA1LjA0LjE0di4wMDVsLjAwMi4wMDUuMDQyLjEzOC4wMDEuMDA2LjAwMi4wMDUuMDQyLjEzOC4wMDIuMDA1LjAwMi4wMDUuMDE3LjA1NC4wNjQuMTQ4LjA5LjEzNC4xMTQuMTE0LjEzMi4wOTIuMTQ4LjA2NS4xNTcuMDM3LjE2LjAwNy4xNi0uMDIzLjE1My0uMDUyLjE0LS4wOC4xMjMtLjEwMy4xMDItLjEyNi4wNzYtLjE0Mi4wNDktLjE1My4wMi0uMTYtLjAxLS4xNjEtLjAzMi0uMTMtLjAxNy0uMDUxLS4wMzktLjEyNi0uMDM4LS4xMy0uMDM3LS4xMjgtLjAzNS0uMTMtLjAzMy0uMTI4LS4wMzMtLjEzNC0uMDMtLjEzLS4wMjktLjEzMS0uMDI2LS4xMy0uMDI2LS4xMzItLjAyNC0uMTM0LS4wMjMtLjEzMy0uMDItLjEzMi0uMDItLjEzNi0uMDE3LS4xMzItLjAxNi0uMTM1LS4wMTQtLjEzNS0uMDEyLS4xMzMtLjAxMi0uMTM4LS4wMDktLjEzMy0uMDA3LS4xMzYtLjAwNi0uMTM4LS4wMDQtLjEzNC0uMDAzLS4xMzZ2LS4yNzRsLjAwMy0uMTM2LjAwNC0uMTM0LjAwNi0uMTM5LjAwNy0uMTM2LjAxLS4xMzIuMDEtLjEzOS4wMTMtLjEzMi4wMTQtLjEzNS4wMTYtLjEzNS4wMTctLjEzMi4wMi0uMTM3LjAyLS4xMy4wMjMtLjEzNC4wMjQtLjEzMy4wMjQtLjEyNi4wMTYtLjE2LS4wMTQtLjE2MS0uMDQ0LS4xNTUtLjA3Mi0uMTQ1LS4wOTgtLjEyOC0uMTItLjEwOC0uMTM3LS4wODQtLjE1LS4wNTctLjE2LS4wMjktLjE2LjAwMnptMjMuMjg2IDQuMjAybC0uMTU2LjAzOC0uMTQ4LjA2Ni0uMTMyLjA5Mi0uMTEzLjExNS0uMDkuMTM0LS4wNjIuMTQ4LS4wMy4xMjctLjAwMS4wMDQtLjAyMy4xMzQtLjAyNC4xMzQtLjAyNi4xMzItLjAyNi4xMy0uMDMuMTMyLS4wMy4xMjktLjAzMi4xMzQtLjAzMy4xMjgtLjAzNS4xMy0uMDM3LjEyOC0uMDM4LjEzLS4wNC4xMjYtLjA0LjEyOC0uMDQ0LjEyOC0uMDQ0LjEyNi0uMDQ2LjEyNi0uMDQ4LjEyNi0uMDUuMTI1LS4wNS4xMjUtLjA1MS4xMjItLjA1NC4xMjMtLjA1NS4xMjItLjA1Ni4xMi0uMDU4LjEyMi0uMDYuMTItLjA2MS4xMi0uMDYyLjExOS0uMDYzLjExNi0uMDY3LjExOS0uMDY2LjExNi0uMDY4LjExNS0uMDcuMTE1LS4wNy4xMTMtLjA3My4xMTMtLjA3NC4xMTItLjA3Ni4xMTMtLjA3Ny4xMTItLjA3Ny4xMDctLjA4LjExLS4wOC4xMDgtLjA4NS4xMDktLjA0NC4wNTYtLjA4OC4xMzUtLjA2LjE1LS4wMzMuMTU4LS4wMDIuMTYuMDI3LjE2LjA1Ny4xNS4wODMuMTM4LjEwOC4xMi4xMjguMDk4LjE0NC4wNzIuMTU1LjA0NS4xNi4wMTUuMTYxLS4wMTYuMTU1LS4wNDQuMTQ0LS4wNzMuMTI4LS4wOTguMDktLjA5OS4wNS0uMDYxLjAwMy0uMDA0LjAwMy0uMDA1LjA4OS0uMTE1LjAwMy0uMDA0LjAwMy0uMDA1LjA4OC0uMTE2LjAwMy0uMDA0LjAwMy0uMDA1LjA4Ni0uMTE3LjAwMy0uMDA0LjAwMy0uMDA1LjA4NC0uMTE4LjAwMy0uMDA0LjAwMy0uMDA1LjA4My0uMTIuMDAzLS4wMDQuMDAzLS4wMDQuMDgyLS4xMi4wMDMtLjAwNS4wMDItLjAwNC4wOC0uMTIxLjAwMy0uMDA1LjAwMy0uMDA0LjA3OC0uMTIyLjAwMy0uMDA1LjAwMy0uMDA0LjA3Ny0uMTIzLjAwMi0uMDA1LjAwMy0uMDA0LjA3NS0uMTI0LjAwMy0uMDA1LjAwMy0uMDA0LjA3My0uMTI1LjAwMy0uMDA0LjAwMy0uMDA1LjA3Mi0uMTI2LjAwMi0uMDA0LjAwMy0uMDA1LjA3LS4xMjYuMDAzLS4wMDUuMDAyLS4wMDUuMDctLjEyNy4wMDItLjAwNC4wMDItLjAwNS4wNjgtLjEyOC4wMDItLjAwNS4wMDItLjAwNC4wNjYtLjEzLjAwMy0uMDA0LjAwMi0uMDA1LjA2NC0uMTMuMDAyLS4wMDQuMDAzLS4wMDUuMDYyLS4xMy4wMDMtLjAwNS4wMDItLjAwNS4wNi0uMTMuMDAzLS4wMDUuMDAyLS4wMDUuMDYtLjEzMi4wMDItLjAwNS4wMDItLjAwNS4wNTctLjEzMi4wMDMtLjAwNS4wMDItLjAwNS4wNTYtLjEzMy4wMDItLjAwNS4wMDItLjAwNS4wNTQtLjEzNC4wMDItLjAwNC4wMDItLjAwNS4wNTMtLjEzNS4wMDItLjAwNS4wMDItLjAwNS4wNTEtLjEzNS4wMDItLjAwNS4wMDItLjAwNS4wNS0uMTM1LjAwMS0uMDA1LjAwMi0uMDA1LjA0OC0uMTM3LjAwMS0uMDA1LjAwMi0uMDA1LjA0Ni0uMTM3LjAwMi0uMDA1LjAwMi0uMDA1LjA0NC0uMTM3LjAwMi0uMDA1LjAwMi0uMDA1LjA0Mi0uMTM4LjAwMi0uMDA1LjAwMi0uMDA2LjA0LS4xMzguMDAyLS4wMDUuMDAyLS4wMDUuMDQtLjE0VjE5LjRsLjAwMi0uMDA1LjAzOC0uMTQuMDAxLS4wMDUuMDAyLS4wMDUuMDM2LS4xNC4wMDEtLjAwNS4wMDEtLjAwNS4wMzUtLjE0MS4wMDEtLjAwNS4wMDEtLjAwNS4wMzMtLjE0MS4wMDEtLjAwNi4wMDEtLjAwNS4wMzEtLjE0MS4wMDItLjAwNnYtLjAwNWwuMDMtLjE0Mi4wMDEtLjAwNS4wMDEtLjAwNS4wMjgtLjE0M3YtLjAwNWwuMDAyLS4wMDUuMDI1LS4xNDMuMDAxLS4wMDYuMDAxLS4wMDUuMDI0LS4xNDMuMDAxLS4wMDUuMDAxLS4wMDYuMDAxLS4wMDYuMDEtLjE2MS0uMDItLjE2LS4wNS0uMTU0LS4wNzctLjE0MS0uMTAyLS4xMjUtLjEyMy0uMTA0LS4xNDEtLjA3OS0uMTUzLS4wNTEtLjE2LS4wMjItLjE2LjAwN3pNNi42ODEgMjIuNzM0bC0uMTUyLjA1My0uMTQuMDgtLjEyMi4xMDUtLjEwMS4xMjYtLjA3Ni4xNDItLjA0OC4xNTQtLjAxOC4xNi4wMTEuMTYxLjA0MS4xNTYuMDcuMTQ2LjA3Ny4xMS4wNC4wNDcuMDAzLjAwNC4wMDMuMDA0LjA5NS4xMTEuMDAzLjAwNC4wMDQuMDA0LjA5Ni4xMS4wMDQuMDA1LjAwMy4wMDQuMDk4LjEwOS4wMDMuMDA0LjAwNC4wMDQuMS4xMDguMDAzLjAwNC4wMDMuMDA0LjEwMS4xMDcuMDA0LjAwNC4wMDMuMDA0LjEwMi4xMDYuMDA0LjAwMy4wMDQuMDA0LjEwMy4xMDUuMDA0LjAwNC4wMDQuMDA0LjEwNS4xMDMuMDA0LjAwNC4wMDMuMDAzLjEwNi4xMDIuMDA0LjAwNC4wMDQuMDA0LjEwNy4xLjAwNC4wMDQuMDA0LjAwNC4xMDguMDk5LjAwNC4wMDMuMDA0LjAwNC4xMS4wOTguMDAzLjAwMy4wMDQuMDA0LjExLjA5Ni4wMDUuMDA0LjAwNC4wMDMuMTEuMDk1LjAwNS4wMDMuMDA0LjAwNC4xMTMuMDkzLjAwNC4wMDMuMDA0LjAwNC4xMTMuMDkxLjAwNC4wMDQuMDA1LjAwMy4xMTQuMDkuMDA0LjAwNC4wMDQuMDAzLjExNi4wODkuMDA0LjAwMy4wMDQuMDAzLjExNy4wODguMDA0LjAwMy4wMDQuMDAzLjExOC4wODYuMDA0LjAwMy4wMDUuMDAzLjExOC4wODQuMDA0LjAwMy4wMDUuMDAzLjExOS4wODMuMDA0LjAwMy4wMDUuMDAzLjEyLjA4MS4wMDUuMDAzLjAwNC4wMDMuMTIxLjA4LjAwNS4wMDMuMDA0LjAwMy4xMjIuMDc4LjAwNS4wMDMuMDA0LjAwMy4xMjMuMDc2LjAwNS4wMDMuMDA0LjAwMy4xMjQuMDc1LjAwNS4wMDMuMDA0LjAwMy4xMjUuMDczLjAwNC4wMDMuMDA1LjAwMy4xMjYuMDcyLjAwNC4wMDIuMDA1LjAwMy4xMjYuMDcuMDA1LjAwMy4wMDQuMDAyLjEyOC4wNy4wMDQuMDAyLjAwNS4wMDIuMTI4LjA2OC4wMDUuMDAyLjAwNC4wMDIuMTMuMDY2LjAwNC4wMDMuMDA1LjAwMi4xMy4wNjQuMDA0LjAwMi4wMDUuMDAzLjEzLjA2Mi4wMDUuMDAyLjAwNC4wMDMuMTMyLjA2LjAwNC4wMDMuMDA1LjAwMi4xMzIuMDYuMDA1LjAwMi4wMDUuMDAyLjEzMi4wNTcuMDA1LjAwMi4wMDUuMDAzLjEzMy4wNTYuMDA1LjAwMi4wMDUuMDAyLjEzMy4wNTQuMDA1LjAwMi4wMDUuMDAyLjEzLjA1LjE1NC4wNDUuMTYuMDE2LjE2MS0uMDE1LjE1NS0uMDQ1LjE0NC0uMDcyLjEyOC0uMDk4LjEwOC0uMTIuMDgzLS4xMzguMDU3LS4xNS4wMjgtLjE2LS4wMDMtLjE2LS4wMzItLjE1OC0uMDYxLS4xNS0uMDg4LS4xMzUtLjExLS4xMTctLjEzMi0uMDk0LS4xMi0uMDU4LS4xMjQtLjA0OS0uMTI2LS4wNTEtLjEyMi0uMDUxLS4xMjItLjA1NC0uMTItLjA1NC0uMTI2LS4wNTgtLjExOS0uMDU3LS4xMi0uMDYtLjEyLS4wNi0uMTE4LS4wNjMtLjExNy0uMDY0LS4xMTktLjA2Ni0uMTE2LS4wNjYtLjExNS0uMDY4LS4xMTUtLjA3LS4xMTMtLjA3LS4xMTUtLjA3NC0uMTEyLS4wNzQtLjExLS4wNzUtLjExLS4wNzYtLjExMi0uMDc5LS4xMS0uMDgtLjEwOS0uMDgyLS4xMDYtLjA4Mi0uMTA0LS4wODItLjEwNi0uMDg2LS4xMDUtLjA4Ny0uMTAxLS4wODYtLjEwNS0uMDkxLS4xLS4wOS0uMS0uMDkxLS4xLS4wOTQtLjA5Ny0uMDk0LS4xLS4wOTgtLjA5My0uMDk1LS4wOTYtLjEtLjA5My0uMDk4LS4wOTItLjEwMS0uMDg5LS4xLS4wOS0uMTAyLS4wODgtLjEwNC0uMDM2LS4wNDMtLjExNC0uMTE0LS4xMzMtLjA5MS0uMTQ4LS4wNjUtLjE1Ny0uMDM2LS4xNjEtLjAwNi0uMTYuMDI0em0xNS4wNjMgMi42OTFsLS4xNTYuMDQ0LS4xMi4wNTctLjA2LjAzNC0uMTIuMDY2LS4xMTYuMDY0LS4xMTkuMDYyLS4xMi4wNjEtLjEyLjA2LS4xMTguMDU3LS4xMjYuMDU4LS4xMi4wNTQtLjEyMi4wNTQtLjEyMi4wNS0uMTI2LjA1Mi0uMTI1LjA1LS4xMjQuMDQ2LS4xMjcuMDQ3LS4xMjUuMDQ0LS4xMjkuMDQzLS4xMjYuMDQtLjEzLjA0Mi0uMTI4LjAzOC0uMTI3LjAzNi0uMTMuMDM1LS4xMzEuMDM0LS4xMjkuMDMxLS4xMzIuMDMtLjEzLjAzLS4xMzUuMDI3LS4xMzMuMDI2LS4xMy4wMjMtLjEzLjAyMi0uMTM3LjAyMS0uMTMyLjAyLS4xMzQuMDE3LS4xMzIuMDE1LS4xMzguMDE1LS4xMzUuMDEzLS4xMzMuMDEtLjEzOC4wMS0uMTM2LjAwNy0uMTM0LjAwNi0uMTM2LjAwNC0uMTQuMDAzLS4xNi4wMTgtLjE1NS4wNDctLjE0Mi4wNzYtLjEyNy4xLS4xMDUuMTIyLS4wOC4xNC0uMDU0LjE1MS0uMDI1LjE2LjAwNi4xNi4wMzUuMTU4LjA2NC4xNDguMDkuMTM0LjExNC4xMTQuMTMzLjA5Mi4xNDcuMDY1LjE1Ny4wMzYuMTM0LjAwOC4xNDUtLjAwMmguMDExbC4xNDctLjAwNWguMDFsLjE0Ny0uMDA3aC4wMTFsLjE0Ni0uMDA5aC4wMTFsLjE0Ni0uMDFoLjAwNWwuMDA1LS4wMDEuMTQ2LS4wMTJoLjAxMWwuMTQ1LS4wMTRoLjAwNWwuMDA2LS4wMDEuMTQ1LS4wMTZoLjAxMWwuMTQ0LS4wMThoLjAwNmwuMDA1LS4wMDEuMTQ0LS4wMmguMDExbC4xNDQtLjAyMWguMDA1bC4wMDYtLjAwMi4xNDMtLjAyMmguMDA2bC4wMDUtLjAwMi4xNDMtLjAyNGguMDA1bC4wMDYtLjAwMi4xNDMtLjAyNmguMDA1bC4wMDUtLjAwMi4xNDMtLjAyNy4wMDUtLjAwMS4wMDUtLjAwMS4xNDItLjAzaC4wMDVsLjAwNS0uMDAyLjE0Mi0uMDMuMDA1LS4wMDIuMDA1LS4wMDEuMTQyLS4wMzMuMDA1LS4wMDEuMDA1LS4wMDEuMTQtLjAzNS4wMDYtLjAwMS4wMDUtLjAwMS4xNC0uMDM2LjAwNS0uMDAyLjAwNS0uMDAxLjE0LS4wMzguMDA1LS4wMDEuMDA1LS4wMDIuMTQtLjA0aC4wMDVsLjAwNS0uMDAyLjEzOC0uMDQyLjAwNS0uMDAxLjAwNi0uMDAyLjEzOC0uMDQzLjAwNS0uMDAxLjAwNS0uMDAyLjEzNy0uMDQ0LjAwNS0uMDAyLjAwNS0uMDAyLjEzNy0uMDQ2LjAwNS0uMDAyLjAwNS0uMDAxLjEzNy0uMDQ4LjAwNS0uMDAyLjAwNS0uMDAyLjEzNS0uMDUuMDA1LS4wMDEuMDA1LS4wMDIuMTM1LS4wNTEuMDA1LS4wMDIuMDA1LS4wMDIuMTM1LS4wNTMuMDA1LS4wMDIuMDA0LS4wMDIuMTM0LS4wNTQuMDA1LS4wMDIuMDA1LS4wMDIuMTMzLS4wNTYuMDA1LS4wMDMuMDA1LS4wMDIuMTMyLS4wNTcuMDA1LS4wMDIuMDA1LS4wMDMuMTMyLS4wNTkuMDA1LS4wMDIuMDA0LS4wMDIuMTMxLS4wNjEuMDA1LS4wMDMuMDA1LS4wMDIuMTMtLjA2Mi4wMDUtLjAwMy4wMDUtLjAwMi4xMy0uMDY0LjAwNC0uMDAyLjAwNS0uMDAzLjEyOS0uMDY2LjAwNC0uMDAyLjAwNS0uMDAzLjEyOC0uMDY3LjAwNS0uMDAyLjAwNC0uMDAzLjEyNy0uMDY5LjAwNS0uMDAyLjAwNS0uMDAzLjEyNi0uMDcuMDA1LS4wMDMuMDA0LS4wMDIuMDY1LS4wMzguMTMyLS4wOTMuMTEyLS4xMTUuMDg5LS4xMzUuMDYyLS4xNDkuMDM0LS4xNTcuMDA0LS4xNjEtLjAyNy0uMTYtLjA1NS0uMTUtLjA4Mi0uMTQtLjEwNy0uMTItLjEyNy0uMS0uMTQ0LS4wNzMtLjE1NC0uMDQ1LS4xNi0uMDE3LS4xNjEuMDE0ek0xNS45OTQgMGwtLjE4Ny4wMDFoLS4wMTFsLS4xODguMDA0aC0uMDExbC0uMTg3LjAwNmgtLjAxMWwtLjE4Ny4wMDhoLS4wMDVMMTUuMi4wMmwtLjE4Ny4wMWgtLjAwNWwtLjAwNS4wMDEtLjE4Ny4wMTNoLS4wMUwxNC42Mi4wNmgtLjAxbC0uMTg2LjAxOGgtLjAxMWwtLjE4NS4wMi0uMDA1LjAwMWgtLjAwNmwtLjE4NS4wMjItLjAwNS4wMDFoLS4wMDVsLS4xODUuMDI1aC0uMDA1bC0uMDA1LjAwMS0uMTg0LjAyN2gtLjAwNmwtLjAwNS4wMDEtLjE4NC4wMjloLS4wMDVsLS4wMDUuMDAxLS4xODMuMDMxLS4wMDUuMDAxLS4wMDYuMDAxLS4xODIuMDMzLS4wMDYuMDAxLS4wMDUuMDAxLS4xODIuMDM1LS4wMDUuMDAxLS4wMDUuMDAxLS4xODIuMDM4aC0uMDA1bC0uMDA1LjAwMi0uMTgxLjA0aC0uMDA1bC0uMDA1LjAwMi0uMTguMDQyLS4wMDYuMDAxLS4wMDUuMDAxLS4xOC4wNDQtLjAwNS4wMDJoLS4wMDVsLS4xNy4wNDUtLjE1Mi4wNTQtLjEzOS4wODItLjEyMS4xMDYtLjEuMTI3LS4wNzQuMTQzLS4wNDYuMTU1LS4wMTcuMTYuMDEzLjE2LjA0My4xNTYuMDcuMTQ1LjA5Ny4xMy4xMTkuMTA4LjEzNy4wODUuMTUuMDU4LjE1OS4wMy4xNi0uMDAxLjEzMy0uMDIzLjE2NS0uMDQzLjE2OC0uMDQxLjE3MS0uMDQuMTcxLS4wMzcuMTcyLS4wMzYuMTctLjAzMy4xNzMtLjAzLjE3LS4wMy4xNzctLjAyNy4xNzEtLjAyNS4xNzUtLjAyMi4xNzUtLjAyLjE3NS0uMDIuMTc2LS4wMTYuMTc1LS4wMTQuMTc3LS4wMTIuMTc2LS4wMS4xNzctLjAwNy4xNzQtLjAwNi4xNzctLjAwM0wxNiAxLjczaC4xNzdsLjE3OC4wMDQuMTc0LjAwNi4xNzcuMDA3LjE3Ni4wMS4xNzcuMDEyLjE3NS4wMTQuMTc2LjAxNy4xNzUuMDE4LjE3NS4wMi4xNzUuMDIzLjE3MS4wMjUuMTc3LjAyNy4xNy4wMy4xNzMuMDMuMTcuMDMzLjE3MS4wMzYuMTU0LjAzMy4xNi4wMi4xNjEtLjAxLjE1Ni0uMDQuMTQ2LS4wNjkuMTMxLS4wOTQuMTExLS4xMTcuMDg4LS4xMzUuMDYtLjE1LjAzMi0uMTU4LjAwMi0uMTYtLjAyNy0uMTYtLjA1Ny0uMTVMMjAgLjcxNGwtLjEwOC0uMTItLjEyOC0uMDk3LS4xNDQtLjA3My0uMTI5LS4wMzgtLjE1OC0uMDM1LS4wMDUtLjAwMS0uMDA1LS4wMDFMMTkuMTQuMzFoLS4wMDVsLS4wMDUtLjAwMi0uMTgyLS4wMzVoLS4wMDZsLS4wMDUtLjAwMi0uMTgyLS4wMzNoLS4wMDZsLS4wMDUtLjAwMi0uMTgzLS4wMy0uMDA1LS4wMDEtLjAwNS0uMDAxLS4xODQtLjAyOWgtLjAwNWwtLjAwNi0uMDAxLS4xODQtLjAyN2gtLjAwNWwtLjAwNS0uMDAxLS4xODUtLjAyNGgtLjAwNUwxNy45NjguMTIgMTcuNzgzLjFsLS4wMDYtLjAwMWgtLjAwNWwtLjE4NS0uMDJoLS4wMDZsLS4wMDUtLjAwMUwxNy4zOS4wNiAxNy4zODUuMDZoLS4wMDVsLS4xODctLjAxNWgtLjAwNWwtLjAwNS0uMDAxLS4xODctLjAxM2gtLjAxTDE2Ljc5OS4wMmgtLjAxMUwxNi42LjAxaC0uMDExbC0uMTg3LS4wMDZoLS4wMTFMMTYuMjA0IDBoLS4wMTFMMTYuMDA1IDBoLS4wMXptOC44NiAyLjkzOWwtLjE1Ny4wMzMtLjE1LjA2Mi0uMTM0LjA5LS4xMTYuMTExLS4wOTMuMTMyLS4wNjcuMTQ3LS4wMzguMTU2LS4wMS4xNjEuMDIyLjE2LjA1LjE1My4wNzguMTQxLjEwMy4xMjQuMTAyLjA4Ny4wNDUuMDM0LjE0Mi4xMDYuMTM3LjEwNS4xNC4xMS4xMzYuMTEuMTM1LjExMi4xMzQuMTE1LjEzNC4xMTcuMTMuMTE1LjEzMi4xMjIuMTI4LjEyLjEyNy4xMjIuMTI3LjEyNS4xMjMuMTI2LjEyNC4xMjguMTIxLjEzLjExOC4xMjguMTE4LjEzMi4xMTcuMTMzLjExMy4xMzQuMTEzLjEzNi4xMS4xMzYuMTA5LjEzNy4xMDkuMTQyLjEwNC4xNC4xMDMuMTQuMTAxLjE0Mi4xLjE0NC4wOTkuMTQ2LjA5NS4xNDUuMDk0LjE0Ny4wOTMuMTUuMDkyLjE1LjA4Ny4xNDkuMDg3LjE1LjA4NS4xNTIuMDgzLjE1NS4wOC4xNTIuMDguMTU1LjA0LjA4MS4wODQuMTM4LjExLjExOS4xMjguMDk2LjE0NS4wNzIuMTU1LjA0My4xNi4wMTMuMTYxLS4wMTYuMTU1LS4wNDYuMTQzLS4wNzQuMTI3LS4wOTkuMTA2LS4xMi4wODMtLjE0LjA1NS0uMTUxLjAyNi0uMTYtLjAwNC0uMTYtLjAzNC0uMTU4LS4wNS0uMTI0LS4wNDItLjA4NS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wODQtLjE2NS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wODYtLjE2NC0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wODgtLjE2Mi0uMDAyLS4wMDUtLjAwMy0uMDA1LS4wOS0uMTYxLS4wMDItLjAwNS0uMDAzLS4wMDQtLjA5Mi0uMTYtLjAwMi0uMDA1LS4wMDMtLjAwNS0uMDk0LS4xNi0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOTYtLjE1OS0uMDAyLS4wMDQtLjAwMy0uMDA1LS4wOTgtLjE1Ny0uMDAzLS4wMDQtLjAwMy0uMDA1LS4xLS4xNTYtLjAwMy0uMDA0LS4wMDItLjAwNS0uMTAyLS4xNTQtLjAwMy0uMDA1LS4wMDMtLjAwNC0uMTA0LS4xNTQtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMTA2LS4xNTItLjAwMy0uMDA0LS4wMDMtLjAwNS0uMTA4LS4xNTEtLjAwMy0uMDA0LS4wMDMtLjAwNS0uMTEtLjE1LS4wMDMtLjAwNC0uMDAzLS4wMDQtLjExMS0uMTUtLjAwNC0uMDAzLS4wMDMtLjAwNS0uMTEzLS4xNDctLjAwNC0uMDA0LS4wMDMtLjAwNS0uMTE1LS4xNDYtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMTE3LS4xNDUtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMTItLjE0NC0uMDAzLS4wMDQtLjAwMy0uMDA0LS4xMjEtLjE0Mi0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xMjMtLjE0MS0uMDAzLS4wMDQtLjAwNC0uMDA0LS4xMjUtLjE0LS4wMDMtLjAwNC0uMDA0LS4wMDQtLjEyNy0uMTM4LS4wMDMtLjAwNC0uMDA0LS4wMDQtLjEyOC0uMTM2LS4wMDQtLjAwNC0uMDA0LS4wMDQtLjEzLS4xMzUtLjAwNC0uMDA0LS4wMDMtLjAwNC0uMTMzLS4xMzQtLjAwMy0uMDA0LS4wMDQtLjAwMy0uMTM0LS4xMzMtLjAwNC0uMDAzLS4wMDQtLjAwNC0uMTM1LS4xMy0uMDA0LS4wMDQtLjAwNC0uMDA0LS4xMzYtLjEyOC0uMDA0LS4wMDQtLjAwNC0uMDA0LS4xMzgtLjEyNi0uMDA0LS4wMDQtLjAwNC0uMDAzLS4xNC0uMTI1LS4wMDQtLjAwNC0uMDA0LS4wMDMtLjE0LS4xMjMtLjAwNS0uMDA0LS4wMDQtLjAwMy0uMTQyLS4xMjEtLjAwNC0uMDA0LS4wMDQtLjAwMy0uMTQ0LS4xMi0uMDA0LS4wMDMtLjAwNC0uMDAzLS4xNDUtLjExNy0uMDA0LS4wMDQtLjAwNC0uMDAzLS4xNDctLjExNS0uMDA0LS4wMDQtLjAwNC0uMDAzLS4xNDgtLjExMy0uMDA0LS4wMDMtLjAwNC0uMDA0LS4xNDktLjExMS0uMDA0LS4wMDMtLjAwNC0uMDA0LS4wNS0uMDM2LS4xNC0uMDgzLS4xNS0uMDU1LS4xNi0uMDI3LS4xNi4wMDR6bS0xOC4zODEuMzQ4bC0uMTU3LjAzNy0uMTQ3LjA2Ni0uMTExLjA3NC0uMDQuMDMyLS4wMDUuMDAzLS4wMDQuMDA0LS4xNDUuMTE3LS4wMDQuMDAzLS4wMDQuMDA0LS4xNDQuMTE5LS4wMDQuMDAzLS4wMDQuMDA0LS4xNDIuMTItLjAwNC4wMDQtLjAwNC4wMDQtLjE0MS4xMjMtLjAwNC4wMDMtLjAwNC4wMDQtLjE0LjEyNS0uMDA0LjAwMy0uMDA0LjAwNC0uMTM4LjEyNi0uMDA0LjAwNC0uMDA0LjAwNC0uMTM2LjEyOC0uMDA0LjAwNC0uMDA0LjAwNC0uMTM1LjEzLS4wMDQuMDA0LS4wMDQuMDAzLS4xMzQuMTMzLS4wMDQuMDAzLS4wMDQuMDA0LS4xMzIuMTM0LS4wMDMuMDA0LS4wMDQuMDA0LS4xMy4xMzUtLjAwNC4wMDQtLjAwNC4wMDQtLjEyOC4xMzYtLjAwNC4wMDQtLjAwNC4wMDQtLjEyNi4xMzgtLjAwNC4wMDQtLjAwMy4wMDQtLjEyNS4xNC0uMDA0LjAwNC0uMDAzLjAwNC0uMTIzLjE0LS4wMDQuMDA1LS4wMDMuMDA0LS4xMjEuMTQyLS4wMDQuMDA0LS4wMDMuMDA0LS4xMi4xNDQtLjAwMy4wMDQtLjAwMy4wMDQtLjExNy4xNDUtLjAwNC4wMDQtLjAwMy4wMDQtLjExNS4xNDYtLjAwNC4wMDUtLjAwMy4wMDQtLjExMy4xNDctLjAwMy4wMDUtLjAwNC4wMDQtLjExMS4xNDktLjAwMy4wMDQtLjAwNC4wMDQtLjExLjE1LS4wMDIuMDA1LS4wMDMuMDA0LS4xMDguMTUxLS4wMDMuMDA1LS4wMDMuMDA0LS4xMDYuMTUyLS4wMDMuMDA1LS4wMDMuMDA0LS4xMDQuMTU0LS4wMDMuMDA0LS4wMDMuMDA1LS4xMDIuMTU0LS4wMDMuMDA1LS4wMDIuMDA0LS4xLjE1Ni0uMDAzLjAwNS0uMDAzLjAwNC0uMDk4LjE1Ny0uMDAzLjAwNS0uMDAzLjAwNC0uMDk2LjE1OS0uMDAyLjAwNC0uMDAzLjAwNS0uMDk0LjE2LS4wMDMuMDA0LS4wMDIuMDA0LS4wOTIuMTYtLjAwMy4wMDUtLjAwMy4wMDUtLjA5LjE2MS0uMDAyLjAwNS0uMDAzLjAwNS0uMDg4LjE2Mi0uMDAyLjAwNS0uMDAzLjAwNC0uMDg2LjE2NC0uMDAyLjAwNS0uMDAyLjAwNC0uMDg0LjE2NS0uMDAzLjAwNS0uMDAyLjAwNC0uMDgyLjE2Ni0uMDAyLjAwNS0uMDAzLjAwNC0uMDguMTY3LS4wMDIuMDA0LS4wMDIuMDA1LS4wNzguMTY4LS4wMDIuMDA0LS4wMDIuMDA1LS4wNDUuMS0uMDUzLjE1My0uMDIzLjE2LjAwNy4xNi4wMzcuMTU3LjA2NS4xNDguMDkyLjEzMi4xMTQuMTE0LjEzNC4wOS4xNDguMDY0LjE1Ny4wMzUuMTYxLjAwNi4xNi0uMDI1LjE1Mi0uMDU0LjE0LS4wOC4xMjEtLjEwNi4xLS4xMjYuMDY1LS4xMTguMDQzLS4wOTUuMDc0LS4xNi4wNzUtLjE1NS4wNzctLjE1Ny4wOC0uMTU1LjA4LS4xNTIuMDgzLS4xNTUuMDg1LS4xNTIuMDg2LS4xNS4wODgtLjE0OS4wOTEtLjE1LjA5NC0uMTUuMDk0LS4xNDcuMDk1LS4xNDUuMDk5LS4xNDYuMS0uMTQ0LjEtLjE0Mi4xMDQtLjE0LjEwNC0uMTQuMTEtLjE0Mi4xMDctLjEzNy4xMS0uMTM2LjExNC0uMTM2LjExMy0uMTM0LjExNy0uMTMzLjExOC0uMTMyLjExNy0uMTI5LjEyMi0uMTMuMTI0LS4xMjcuMTIzLS4xMjYuMTI3LS4xMjUuMTI3LS4xMjIuMTI4LS4xMi4xMzItLjEyMi4xMy0uMTE1LjEzMy0uMTE3LjEzNS0uMTE1LjEzNS0uMTExLjEzNi0uMTEuMDM3LS4wMy4xMTctLjExLjA5NC0uMTMyLjA2OC0uMTQ2LjA0LS4xNTYuMDEtLjE2MS0uMDItLjE2LS4wNS0uMTU0LS4wNzYtLjE0MS0uMTAyLS4xMjUtLjEyMy0uMTA0LS4xNC0uMDgtLjE1My0uMDUxLS4xNi0uMDIzLS4xNjEuMDA4em0yNC41MTQgMTEuMTVsLS4xNTcuMDQtLjE0Ni4wNjctLjEzMS4wOTMtLjExMi4xMTctLjA4OC4xMzUtLjA2MS4xNDktLjAzMy4xNTctLjAwNS4xMzQuMDA2LjE0LjAwNi4xNzYuMDAzLjE3Ny4wMDEuMTc4LS4wMDEuMTc3LS4wMDMuMTc4LS4wMDYuMTc3LS4wMDcuMTc2LS4wMS4xNzctLjAxMi4xNzYtLjAxNS4xNzYtLjAxNi4xNzMtLjAxOC4xNzUtLjAyLjE3NS0uMDI0LjE3NC0uMDI0LjE3NS0uMDI3LjE3LS4wMy4xNzQtLjAzLjE3My0uMDMzLjE3LS4wMzYuMTcyLS4wMzcuMTctLjA0LjE3LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDUuMTY2LS4wNDguMTY5LS4wNS4xNjctLjA1Mi4xNjgtLjA1My4xNjQtLjA1Ni4xNjYtLjA1OC4xNjYtLjA2LjE2MS0uMDYxLjE2NC0uMDYzLjE1OC0uMDY2LjE2NS0uMDY4LjE2LS4wNy4xNi0uMDcuMTU4LS4wNzUuMTU5LS4wNzQuMTU1LS4wNzguMTU4LS4wODEuMTU4LS4wNi4xNS0uMDMuMTU4LS4wMDEuMTYxLjAyOS4xNTkuMDU4LjE1LjA4NS4xMzcuMTA4LjEyLjEzLjA5Ni4xNDQuMDcuMTU2LjA0NC4xNi4wMTMuMTYtLjAxNy4xNTUtLjA0Ni4xNDMtLjA3NC4xMjctLjEuMTA3LS4xMi4wNy0uMTE1LjA4My0uMTY0LjAwMy0uMDA1LjAwMi0uMDA0LjA4Mi0uMTY2LjAwMi0uMDA1LjAwMy0uMDA0LjA4LS4xNjcuMDAyLS4wMDUuMDAyLS4wMDQuMDc4LS4xNjguMDAyLS4wMDQuMDAyLS4wMDUuMDc2LS4xNjkuMDAyLS4wMDQuMDAyLS4wMDUuMDc0LS4xNy4wMDItLjAwNC4wMDItLjAwNS4wNzItLjE3LjAwMi0uMDA1LjAwMi0uMDA1LjA3LS4xNy4wMDItLjAwNi4wMDEtLjAwNS4wNjgtLjE3Mi4wMDItLjAwNC4wMDItLjAwNS4wNjUtLjE3My4wMDItLjAwNS4wMDItLjAwNS4wNjMtLjE3My4wMDItLjAwNS4wMDItLjAwNS4wNi0uMTc0LjAwMy0uMDA1LjAwMS0uMDA1LjA2LS4xNzUuMDAxLS4wMDUuMDAyLS4wMDUuMDU3LS4xNzYuMDAxLS4wMDUuMDAyLS4wMDUuMDU1LS4xNzcuMDAxLS4wMDUuMDAyLS4wMDUuMDUyLS4xNzcuMDAyLS4wMDUuMDAxLS4wMDUuMDUxLS4xNzguMDAxLS4wMDUuMDAyLS4wMDUuMDQ4LS4xNzkuMDAyLS4wMDV2LS4wMDVsLjA0Ny0uMTc5LjAwMS0uMDA1LjAwMi0uMDA1LjA0NC0uMTh2LS4wMDVsLjAwMi0uMDA1LjA0Mi0uMTguMDAxLS4wMDYuMDAxLS4wMDUuMDQtLjE4LjAwMS0uMDA2LjAwMS0uMDA1LjAzOC0uMTgydi0uMDA1bC4wMDItLjAwNS4wMzUtLjE4MnYtLjAwNmwuMDAyLS4wMDUuMDMzLS4xODJ2LS4wMDZsLjAwMi0uMDA1LjAzLS4xODMuMDAxLS4wMDUuMDAxLS4wMDUuMDI5LS4xODR2LS4wMDVsLjAwMS0uMDA2LjAyNy0uMTg0di0uMDA1bC4wMDEtLjAwNS4wMjQtLjE4NXYtLjAwNWwuMDAxLS4wMDUuMDIyLS4xODV2LS4wMDZsLjAwMS0uMDA1LjAyLS4xODV2LS4wMDZsLjAwMS0uMDA1LjAxNy0uMTg2di0uMDA1bC4wMDEtLjAwNS4wMTUtLjE4N3YtLjAwNWwuMDAxLS4wMDUuMDEzLS4xODd2LS4wMWwuMDEtLjE4Ny4wMDEtLjAwNnYtLjAwNWwuMDA5LS4xODd2LS4wMTFsLjAwNi0uMTg3di0uMDExbC4wMDQtLjE4OHYtLjAxMWwuMDAxLS4xODh2LS4wMWwtLjAwMS0uMTg4di0uMDExbC0uMDA0LS4xODh2LS4wMTFsLS4wMDYtLjE4N3YtLjAxMWwtLjAwNy0uMTQ1LS4wMjItLjE2LS4wNS0uMTUyLS4wOC0uMTQxLS4xMDMtLjEyNC0uMTI1LS4xMDItLjE0MS0uMDc3LS4xNTMtLjA1LS4xNi0uMDItLjE2MS4wMDl6TS43NzcgMTVsLS4xNTguMDMyLS4xNS4wNi0uMTM2LjA4Ny0uMTE3LjExLS4wOTUuMTMxLS4wNjguMTQ2LS4wNC4xNTYtLjAxMi4xMzMtLjAwMS4xNHYuMDFsLjAwMS4xODh2LjAxMWwuMDA0LjE4OHYuMDExbC4wMDYuMTg3di4wMTFsLjAwOC4xODd2LjAxMWwuMDExLjE4N3YuMDA1bC4wMDEuMDA1LjAxMy4xODd2LjAxbC4wMTYuMTg3di4wMWwuMDE4LjE4NnYuMDExbC4wMi4xODUuMDAxLjAwNXYuMDA2bC4wMjIuMTg1LjAwMS4wMDV2LjAwNWwuMDI1LjE4NXYuMDA1bC4wMDEuMDA1LjAyNy4xODR2LjAwNmwuMDAxLjAwNS4wMjkuMTg0di4wMDVsLjAwMS4wMDUuMDMxLjE4My4wMDEuMDA1LjAwMS4wMDYuMDMzLjE4Mi4wMDEuMDA1LjAwMS4wMDYuMDM1LjE4Mi4wMDEuMDA1LjAwMS4wMDUuMDM4LjE4MnYuMDA1bC4wMDIuMDA1LjA0LjE4MXYuMDA1bC4wMDIuMDA1LjA0Mi4xOC4wMDEuMDA2LjAwMS4wMDUuMDQ0LjE4LjAwMi4wMDV2LjAwNWwuMDQ3LjE4LjAwMS4wMDQuMDAyLjAwNS4wNDguMTc5LjAwMi4wMDUuMDAxLjAwNS4wNS4xNzguMDAyLjAwNS4wMDEuMDA1LjA1My4xNzcuMDAyLjAwNS4wMDEuMDA1LjA1NS4xNzcuMDAyLjAwNS4wMDEuMDA1LjA1Ny4xNzYuMDAyLjAwNS4wMDEuMDA1LjA2LjE3NS4wMDEuMDA1LjAwMi4wMDUuMDYxLjE3NC4wMDIuMDA1LjAwMi4wMDUuMDYzLjE3My4wMDIuMDA1LjAwMi4wMDUuMDY1LjE3My4wMDIuMDA1LjAwMi4wMDQuMDY3LjE3Mi4wMDIuMDA1LjAwMi4wMDUuMDcuMTcxLjAwMi4wMDUuMDAyLjAwNS4wNzIuMTcuMDAyLjAwNS4wMDIuMDA1LjA3NC4xNjkuMDAyLjAwNS4wMDIuMDA0LjA3Ni4xNjkuMDAyLjAwNS4wMDIuMDA0LjA3OC4xNjguMDAyLjAwNC4wMDIuMDA1LjA4LjE2Ny4wMDMuMDA0LjAwMi4wMDUuMDgyLjE2Ni4wMDIuMDA0LjAwMy4wMDUuMDIuMDQuMDg2LjEzNi4xMS4xMTguMTMuMDk1LjE0Ni4wNy4xNTYuMDQxLjE2LjAxMi4xNi0uMDE5LjE1NS0uMDQ4LjE0Mi0uMDc1LjEyNi0uMS4xMDUtLjEyMy4wOC0uMTQuMDU0LS4xNTIuMDI0LS4xNi0uMDA2LS4xNi0uMDM2LS4xNTgtLjA1MS0uMTIzLS4wMTgtLjAzNC0uMDc4LS4xNThMMy4xIDIyLjFsLS4wNzQtLjE2LS4wNzEtLjE1Ni0uMDctLjE2Mi0uMDY4LS4xNi0uMDY3LS4xNjQtLjA2Mi0uMTU4LS4wNjItLjE2NC0uMDU5LS4xNjEtLjA1OC0uMTY2LS4wNTYtLjE2Ni0uMDUzLS4xNjQtLjA1Mi0uMTY4LS4wNS0uMTY3LS4wNDgtLjE3LS4wNDUtLjE2NS0uMDQzLS4xNjgtLjA0My0uMTcyLS4wMzktLjE3LS4wMzctLjE3LS4wMzYtLjE3Mi0uMDMzLS4xNy0uMDMtLjE3My0uMDMtLjE3NC0uMDI3LS4xNy0uMDI1LS4xNzUtLjAyMi0uMTc0LS4wMjEtLjE3NS0uMDE4LS4xNzUtLjAxNy0uMTczLS4wMTQtLjE3Ni0uMDEyLS4xNzYtLjAxLS4xNzctLjAwNy0uMTc2LS4wMDYtLjE3Ny0uMDAzLS4xNzhMMS43MyAxNnYtLjEzNGwtLjAxMy0uMTYtLjA0NC0uMTU2LS4wNzItLjE0NC0uMDk3LS4xMjktLjEyLS4xMDgtLjEzNy0uMDg1LS4xNS0uMDU3TC45MzggMTUgLjc3NyAxNXpNNi4xNyAyNi44NDJsLS4xNTIuMDUyLS4xNC4wOC0uMTIyLjEwNS0uMTAxLjEyNi0uMDc2LjE0Mi0uMDQ4LjE1NC0uMDIuMTYuMDEyLjE2MS4wNDEuMTU2LjA3LjE0Ni4wOTQuMTMuMDk2LjA5My4wMzIuMDI2LjAwNC4wMDMuMDA0LjAwNC4xNDUuMTE3LjAwNC4wMDMuMDA0LjAwNC4xNDYuMTE1LjAwNS4wMDMuMDA0LjAwNC4xNDcuMTEzLjAwNS4wMDMuMDA0LjAwNC4xNDkuMTExLjAwNC4wMDMuMDA0LjAwMy4xNS4xMS4wMDUuMDAzLjAwNC4wMDMuMTUxLjEwOC4wMDUuMDAzLjAwNC4wMDMuMTUyLjEwNi4wMDUuMDAzLjAwNC4wMDMuMTU0LjEwNC4wMDQuMDAzLjAwNS4wMDMuMTU0LjEwMi4wMDUuMDAyLjAwNC4wMDMuMTU2LjEuMDA1LjAwMy4wMDQuMDAzLjE1Ny4wOTguMDA1LjAwMy4wMDQuMDAyLjE1OS4wOTYuMDA0LjAwMy4wMDUuMDAzLjE2LjA5NC4wMDQuMDAzLjAwNC4wMDIuMTYuMDkyLjAwNS4wMDMuMDA1LjAwMi4xNjEuMDkuMDA1LjAwMy4wMDUuMDAzLjE2Mi4wODguMDA1LjAwMi4wMDQuMDAyLjE2NC4wODcuMDA1LjAwMi4wMDQuMDAyLjE2NS4wODQuMDA1LjAwMy4wMDQuMDAyLjE2Ni4wODIuMDA0LjAwMi4wMDUuMDAzLjE2Ny4wOC4wMDQuMDAyLjAwNS4wMDIuMTY4LjA3OC4wMDQuMDAyLjAwNS4wMDIuMTY5LjA3Ni4wMDQuMDAyLjAwNS4wMDIuMTcuMDc0LjAwNC4wMDIuMDA1LjAwMi4xNy4wNzIuMDA1LjAwMi4wMDUuMDAyLjE3LjA3LjAwNi4wMDIuMDA1LjAwMS4xNzEuMDY4LjAwNS4wMDIuMDA1LjAwMi4xNzMuMDY1LjAwNS4wMDIuMDA1LjAwMi4xNzMuMDYzLjAwNS4wMDIuMDA1LjAwMi4xNzQuMDYxLjAwNS4wMDIuMDA1LjAwMS4xNzUuMDYuMDA1LjAwMS4wMDUuMDAyLjE3Ni4wNTcuMDA1LjAwMS4wMDUuMDAyLjE3Ny4wNTUuMDA1LjAwMS4wMDUuMDAyLjE3Ny4wNTIuMDA1LjAwMi4wMDUuMDAxLjE3OC4wNTEuMDA1LjAwMS4wMDUuMDAyLjE3OC4wNDguMDA2LjAwMmguMDA1bC4xNzkuMDQ3LjAwNS4wMDEuMDA1LjAwMi4xOC4wNDRoLjAwNWwuMDA1LjAwMi4xOC4wNDIuMDA2LjAwMS4wMDUuMDAxLjE1OS4wMzUuMTYuMDIuMTYtLjAxLjE1Ny0uMDQuMTQ2LS4wNjkuMTMtLjA5NC4xMTItLjExNy4wODctLjEzNi4wNi0uMTQ5LjAzMy0uMTU4LjAwMi0uMTYxLS4wMjgtLjE1OS0uMDU3LS4xNS0uMDg0LS4xMzgtLjEwOC0uMTItLjEyOC0uMDk4LS4xNDQtLjA3Mi0uMTI4LS4wMzktLjE1NC0uMDMzLS4xNjgtLjA0LS4xNzEtLjA0MS0uMTY5LS4wNDQtLjE3LS4wNDUtLjE2Ni0uMDQ4LS4xNjgtLjA1LS4xNjUtLjA1MS0uMTY2LS4wNTQtLjE2Ni0uMDU2LS4xNjMtLjA1Ny0uMTY1LS4wNi0uMTYxLS4wNjItLjE2NC0uMDY0LS4xNi0uMDY1LS4xNi0uMDY4LS4xNjItLjA3LS4xNTctLjA3LS4xNTctLjA3NC0uMTU3LS4wNzUtLjE1Ni0uMDc3LS4xNTMtLjA3OS0uMTU2LS4wODItLjE1My0uMDgyLS4xNTQtLjA4Ni0uMTUtLjA4Ni0uMTUyLS4wOS0uMTQ4LS4wOS0uMTQ3LS4wOTItLjE0OS0uMDk1LS4xNDUtLjA5NS0uMTQ0LS4wOTgtLjE0NS0uMS0uMTQzLS4xMDItLjE0LS4xMDMtLjE0LS4xMDQtLjE0LS4xMDgtLjEzOS0uMTEtLjEzNi0uMTEtLjAyNy0uMDIyLS4xMzMtLjA5MS0uMTQ4LS4wNjUtLjE1Ny0uMDM2LS4xNjEtLjAwNi0uMTYuMDI0em0xOS4yMTQuMDczbC0uMTU2LjAzOS0uMTQ2LjA2Ny0uMTEuMDc2LS4wNjQuMDUxLS4xMzkuMTEtLjE0LjEwOC0uMTQuMTA0LS4xNC4xMDMtLjE0My4xMDEtLjE0NS4xMDEtLjE0NC4wOTgtLjE0NS4wOTUtLjE0OS4wOTUtLjE0OC4wOTMtLjE0Ny4wODktLjE1Mi4wOS0uMTUuMDg2LS4xNTQuMDg2LS4xNTMuMDgyLS4xNTYuMDgyLS4xNTMuMDc5LS4xNTYuMDc3LS4xNTcuMDc1LS4xNTcuMDczLS4xNTguMDcxLS4xNi4wNy0uMTYuMDY4LS4xNjEuMDY1LS4xNjQuMDY0LS4xNjEuMDYxLS4xNjUuMDYtLjE2My4wNTgtLjE2Ni4wNTYtLjE2Ni4wNTQtLjE2Ni4wNTEtLjE2Ny4wNS0uMTY3LjA0OC0uMTcuMDQ1LS4xNjguMDQ0LS4xNzEuMDQyLS4xNjguMDM5LS4xNy4wMzctLjExLjAyMy0uMTU0LjA0Ny0uMTQzLjA3NS0uMTI2LjEtLjEwNi4xMjItLjA4MS4xMzktLjA1NC4xNTItLjAyNS4xNi4wMDYuMTYuMDM1LjE1OC4wNjMuMTQ4LjA5LjEzMy4xMTQuMTE1LjEzMi4wOTIuMTQ4LjA2NS4xNTcuMDM3LjE2LjAwOC4xMzMtLjAxNy4xMTUtLjAyNGguMDA1bC4wMDUtLjAwMi4xODEtLjA0aC4wMDVsLjAwNS0uMDAyLjE4LS4wNDIuMDA2LS4wMDEuMDA1LS4wMDEuMTgtLjA0NC4wMDUtLjAwMmguMDA1bC4xOC0uMDQ3LjAwNC0uMDAxLjAwNS0uMDAyLjE3OS0uMDQ4LjAwNS0uMDAyLjAwNS0uMDAxLjE3OC0uMDUuMDA1LS4wMDIuMDA1LS4wMDIuMTc3LS4wNTIuMDA1LS4wMDIuMDA1LS4wMDEuMTc3LS4wNTUuMDA1LS4wMDIuMDA1LS4wMDEuMTc2LS4wNTcuMDA1LS4wMDIuMDA1LS4wMDIuMTc1LS4wNTkuMDA1LS4wMDEuMDA1LS4wMDIuMTc0LS4wNjEuMDA1LS4wMDIuMDA1LS4wMDIuMTczLS4wNjMuMDA1LS4wMDIuMDA1LS4wMDIuMTczLS4wNjUuMDA1LS4wMDIuMDA0LS4wMDIuMTcyLS4wNjguMDA1LS4wMDEuMDA1LS4wMDIuMTcxLS4wNy4wMDUtLjAwMi4wMDUtLjAwMi4xNy0uMDcyLjAwNS0uMDAyLjAwNS0uMDAyLjE2OS0uMDc0LjAwNS0uMDAyLjAwNC0uMDAyLjE2OS0uMDc2LjAwNC0uMDAyLjAwNS0uMDAyLjE2OC0uMDc4LjAwNC0uMDAyLjAwNS0uMDAyLjE2Ny0uMDguMDA0LS4wMDMuMDA1LS4wMDIuMTY2LS4wODIuMDA0LS4wMDIuMDA1LS4wMDMuMTY1LS4wODQuMDA0LS4wMDIuMDA1LS4wMDIuMTYzLS4wODcuMDA1LS4wMDIuMDA1LS4wMDIuMTYyLS4wODguMDA1LS4wMDMuMDA1LS4wMDMuMTYxLS4wOS4wMDUtLjAwMi4wMDQtLjAwMy4xNi0uMDkyLjAwNS0uMDAyLjAwNS0uMDAzLjE2LS4wOTQuMDA0LS4wMDMuMDA0LS4wMDMuMTU4LS4wOTYuMDA1LS4wMDIuMDA0LS4wMDMuMTU4LS4wOTguMDA0LS4wMDMuMDA1LS4wMDMuMTU2LS4xLjAwNC0uMDAzLjAwNC0uMDAyLjE1NS0uMTAyLjAwNS0uMDAzLjAwNC0uMDAzLjE1NC0uMTA0LjAwNC0uMDAzLjAwNS0uMDAzLjE1Mi0uMTA2LjAwNC0uMDAzLjAwNS0uMDAzLjE1MS0uMTA4LjAwNC0uMDAzLjAwNS0uMDAzLjE1LS4xMS4wMDQtLjAwMy4wMDQtLjAwMy4xNDktLjExMS4wMDQtLjAwNC4wMDQtLjAwMy4xNDgtLjExMy4wMDQtLjAwNC4wMDQtLjAwMy4xNDctLjExNS4wMDQtLjAwNC4wMDQtLjAwMy4wNjgtLjA1NS4xMTYtLjExMy4wOTItLjEzMi4wNjYtLjE0Ny4wMzgtLjE1Ny4wMDgtLjE2LS4wMjItLjE2LS4wNS0uMTUzLS4wOC0uMTQtLjEwMy0uMTI1LS4xMjQtLjEwMi0uMTQyLS4wNzctLjE1My0uMDUtLjE2LS4wMi0uMTYuMDA5elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJEgoKSB7IHJldHVybiBfZXh0ZW5kcyRIID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJEguYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hQYXJhbGxlbE11bHRpcGxlSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkSCh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk3NS4wMDNDOC4xOTUtLjE1Ny45MzUgNi4yNC4xMjUgMTMuOTg1Yy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuODg0IDIzLjQ0NS40MDggMTcuMjAxLjA0OWMtLjQwOC0uMDMtLjgxNy0uMDQ2LTEuMjI2LS4wNDZ6bS0uMTgxIDEuNzI0YzcuMTM0LS4yNjkgMTMuODQgNS42OCAxNC4zOTkgMTIuODA0LjY4NiA2LjI4My0zLjI2NyAxMi43OTItOS4yODMgMTQuODYyLTUuODQ3IDIuMTYyLTEzLjAyNS4wNi0xNi41NTctNS4xNDFDLjcyOCAxOS4xNzQuODcyIDExLjY3OSA0Ljk4NSA2LjkxNmMyLjYzMi0zLjE3MSA2LjY3MS01LjE3NCAxMC44MDktNS4xOXptLjI4MyAxLjU1M2MtNi42LS4yMS0xMi42NzEgNS41ODUtMTIuNzkgMTIuMTg1LS4yOTIgNS45NjQgNC4xMjkgMTEuODE3IDEwLjAzNCAxMi45NTMgNS40NyAxLjE5OCAxMS41ODQtMS42MTMgMTQuMDI1LTYuNzAyIDIuNTI1LTQuOTcgMS4zOTYtMTEuNTg1LTIuOTEyLTE1LjIxNS0yLjI4Mi0yLjAyMi01LjMtMy4yMTctOC4zNTctMy4yMnpNMTYgNC45NzVjNS44MTgtLjE1NCAxMS4xMTcgNS4wODIgMTEuMDI0IDEwLjkwNS4xMDMgNS4zODQtNC4yMyAxMC41LTkuNjM2IDExLjA0My01LjA3NS42NjctMTAuNDI2LTIuNTg3LTExLjg4NS03LjU1Mi0xLjUzLTQuNzMuNDgtMTAuNDI4IDQuODg4LTEyLjg2NEExMS4wODIgMTEuMDgyIDAgMDExNiA0Ljk3NXptLTIuMTUgMy4yODF2NS41MzRIOC4yMTN2NC4zOGg1LjYzNnY1LjUzNGg0LjMxVjE4LjE3aDUuNjM5di00LjM4aC01LjY0VjguMjU2aC00LjMxem0uODY1Ljg2NWgyLjU4M3Y1LjUzNGg1LjYzNXYyLjY1aC01LjYzNXY1LjUzM2gtMi41ODN2LTUuNTM0aC01LjY0di0yLjY0OWg1LjY0VjkuMTIxelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJEcoKSB7IHJldHVybiBfZXh0ZW5kcyRHID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJEcuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hTaWduYWxJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRHKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuOTc1LjA0OUM4LjE5NS0uMTEuOTM1IDYuMjg2LjEyNSAxNC4wM2MtLjg1NSA2LjU1IDIuNzQxIDEzLjQ2IDguNzQgMTYuMzE0IDUuNjY2IDIuODQ3IDEzLjAxMiAxLjk5IDE3LjcxLTIuMzMgNC43NDUtNC4xNjIgNi43MjctMTEuMjQzIDQuNTMyLTE3LjIwNkMyOS4wOSA0LjkzIDIzLjQ0NS40NTMgMTcuMjAxLjA5NWMtLjQwOC0uMDMtLjgxNy0uMDQ2LTEuMjI2LS4wNDZ6bS0uMTgxIDEuNzI0YzcuMTM0LS4yNjkgMTMuODQgNS42OCAxNC4zOTkgMTIuODA0LjY4NiA2LjI4My0zLjI2NyAxMi43OTItOS4yODMgMTQuODYyLTUuODQ3IDIuMTYyLTEzLjAyNS4wNi0xNi41NTctNS4xNDFDLjcyOCAxOS4yMi44NzIgMTEuNzI1IDQuOTg1IDYuOTYyYzIuNjMyLTMuMTcxIDYuNjcxLTUuMTc0IDEwLjgwOS01LjE5em0uMjgzIDEuNTUzYy02LjYtLjIxLTEyLjY3MSA1LjU4NS0xMi43OSAxMi4xODUtLjI5MiA1Ljk2NCA0LjEyOSAxMS44MTcgMTAuMDM0IDEyLjk1MyA1LjQ3IDEuMTk4IDExLjU4NC0xLjYxMyAxNC4wMjUtNi43MDIgMi41MjUtNC45NyAxLjM5Ni0xMS41ODUtMi45MTItMTUuMjE2LTIuMjgyLTIuMDIxLTUuMy0zLjIxNi04LjM1Ny0zLjIyek0xNiA1LjAyMWM1LjgxOC0uMTU0IDExLjExNyA1LjA4MiAxMS4wMjQgMTAuOTA1LjEwMyA1LjM4NC00LjIzIDEwLjUtOS42MzYgMTEuMDQzLTUuMDc1LjY2Ny0xMC40MjYtMi41ODctMTEuODg1LTcuNTUyLTEuNTMtNC43My40OC0xMC40MjggNC44ODgtMTIuODY0QTExLjA4MyAxMS4wODMgMCAwMTE2IDUuMDIxem0uMDA2IDMuNTIxTDkuMjA2IDIwLjc0NWgxMy41OThMMTYuMDA1IDguNTQyem0wIDEuNzc1bDUuMzI5IDkuNTY0SDEwLjY3N2w1LjMyOC05LjU2NHpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRGKCkgeyByZXR1cm4gX2V4dGVuZHMkRiA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRGLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBJbnRlcm1lZGlhdGVFdmVudENhdGNoVGltZXJJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRGKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuOTcuMDRoLS4xMjdDOC43MTMtLjAxOCAyLjAwMyA1LjMzNC40MzcgMTIuMjg2Yy0xLjUxIDYuMTIzLjk4IDEzLjAwNSA2LjEzNiAxNi42NjUgNS4xMjUgMy43ODggMTIuNTQ2IDQuMTA1IDE3LjkxMi42MjMgNS4yNzItMy4yNzYgOC4zMy05Ljc2NiA3LjMyNS0xNS45MTYtLjkwNC02LjI0MS01Ljc5LTExLjctMTEuOTUtMTMuMTQzQTE2LjA4MiAxNi4wODIgMCAwMDE1Ljk3LjA0em0tLjE4MSAxLjcyNGMuMTE1IDAgLjIzIDAgLjM0Ny4wMDMgNi42MjUtLjA2NiAxMi44MjMgNS4xNDkgMTMuODkgMTEuNjkgMS4xMyA1LjkxLTEuOTA4IDEyLjM0OS03LjI2MiAxNS4xMzgtNS40NzMgMy4wMTMtMTIuODY2IDEuODg0LTE3LjExNi0yLjcyNkMxLjI5MSAyMS4zNzIuNDQ0IDEzLjkxNCAzLjgwMiA4LjYwMmMyLjQ5My00LjExMiA3LjE2OS02LjgxOSAxMS45ODctNi44Mzh6bS4yODMgMS41NTRjLS4xMTcgMC0uMjM0LjAwMi0uMzUxLjAwNS02LjEgMC0xMS42OTEgNS4wNDktMTIuMzQ2IDExLjExNC0uNzggNS42ODQgMi43OTUgMTEuNjEyIDguMjE4IDEzLjUyIDUuMTM5IDEuOTQzIDExLjQxNi4xMDEgMTQuNjI0LTQuMzggMy40NjEtNC41ODMgMy4yNjItMTEuNTM4LS41OTYtMTUuODMxLTIuMzYtMi43NDctNS45MjQtNC40MjMtOS41NDktNC40Mjh6bS0uMDc4IDEuNjk1Yy4wNzggMCAuMTU2IDAgLjIzNC4wMDMgNS40IDAgMTAuMzIxIDQuNTU2IDEwLjczNCA5Ljk0Mi41NjMgNS4xMy0yLjk1OCAxMC4zNjQtNy45NzEgMTEuNjc4LTQuODMyIDEuNDEtMTAuNDU3LS45MzUtMTIuNzQ2LTUuNDQ2LTIuNDYzLTQuNTU5LTEuMi0xMC43OTUgMy4wMTQtMTMuODgzYTExLjA3MiAxMS4wNzIgMCAwMTYuNzM1LTIuMjk0em0tLjEzNyAzLjQyYy0yLjk2NS4wMi01Ljc5MiAxLjk2OC02Ljg4NCA0LjcyMi0xLjEzNyAyLjY5My0uNTA5IDYuMDA3IDEuNTM2IDguMDk2IDEuOTg4IDIuMTQgNS4yNjMgMi45MjkgOC4wMDcgMS45MjYgMi44NzUtLjk4IDQuOTg3LTMuODI0IDUuMDYzLTYuODY1LjE1NC0yLjk1NC0xLjYyMi01Ljg3NS00LjI5NS03LjEzYTcuNTQ1IDcuNTQ1IDAgMDAtMy40MjctLjc1em0uMjcgMS4zODFjMi43MDguMDEzIDUuMjQ5IDIuMDE0IDUuODggNC42NTIuNzA0IDIuNTc2LS40ODEgNS41MTItMi43ODggNi44NjItMi4zNTYgMS40NzgtNS42NzcgMS4wODQtNy42MTEtLjkxOC0yLjA0Mi0xLjk3LTIuNDA1LTUuMzc2LS44MzktNy43MzggMS4xMS0xLjc2MiAzLjE0Ni0yLjg3NyA1LjIyOS0yLjg1N2guMTN6bTEuODMxIDEuNzY0bC0yLjA3MiAzLjc2Yy0uNjQuMDY4LS43OTIgMS4wMzktLjIwMiAxLjI5OC4zOS4yNy42OTYtLjE4IDEuMDUxLS4xNjRoMy4xNjh2LS44NjRoLTMuMThsMS45OTItMy42MTItLjc1Ny0uNDE4elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJEUoKSB7IHJldHVybiBfZXh0ZW5kcyRFID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJEUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEludGVybWVkaWF0ZUV2ZW50Tm9uZUljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJEUoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS44NDguMDAxQzguMTEzLS4wOTMuOTMxIDYuMjgxLjEyNSAxMy45ODNjLS44NTUgNi41NSAyLjc0MSAxMy40NiA4Ljc0IDE2LjMxNCA1LjY2NiAyLjg0NyAxMy4wMTIgMS45OSAxNy43MS0yLjMzIDQuNzQ1LTQuMTYyIDYuNzI3LTExLjI0MyA0LjUzMi0xNy4yMDdDMjkuMTA1IDQuOTM4IDIzLjU1LjQ4IDE3LjM2Ny4wNkExNi40NDggMTYuNDQ4IDAgMDAxNS44NDggMHYuMDAxem0uMjkzIDEuNzI3YzcuMTEzLS4wOTkgMTMuNjYyIDUuOTcgMTQuMDc3IDEzLjA4LjU2IDYuMjk5LTMuNTE2IDEyLjczNS05LjU4MiAxNC42NzktNS43OTggMi4wMDQtMTIuODA2LS4xMi0xNi4yODMtNS4yMzdDLjcxNyAxOS4xNTkuODc0IDExLjYzOCA1LjAxNiA2Ljg3NiA3LjcyMiAzLjYzOCAxMS45MDIgMS42MyAxNi4xNCAxLjcyOHptLS40MTUgMS41NTVDOS4xNTcgMy4yNTggMy4yNTYgOS4xNTYgMy4yNzggMTUuNzI5Yy0uMTYgNS45NjUgNC4zNjUgMTEuNzI1IDEwLjI5MyAxMi43MzcgNS40MDkgMS4wNjUgMTEuMzctMS43NDQgMTMuNzc1LTYuNzUzIDIuNTM0LTQuOTg2IDEuMzg2LTExLjYyNy0yLjk1My0xNS4yNTEtMi4zNjQtMi4wNzctNS41MTItMy4yNy04LjY2Ny0zLjE4em0uNTA3IDEuNjkyYzUuODItLjAyNiAxMS4wMTMgNS4zMTggMTAuNzkgMTEuMTQzLS4wMjQgNS4zLTQuMzEzIDEwLjI2Ny05LjYzNiAxMC44MDMtNS4wNzUuNjY3LTEwLjQyNi0yLjU4OC0xMS44ODUtNy41NTMtMS41MzUtNC43NDQuNDk0LTEwLjQ2IDQuOTI1LTEyLjg4NWExMS4wNzIgMTEuMDcyIDAgMDE1LjgwNi0xLjUwOHpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyREKCkgeyByZXR1cm4gX2V4dGVuZHMkRCA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRELmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBJbnRlcm1lZGlhdGVFdmVudFRocm93Q29tcGVuc2F0aW9uSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkRCh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk3NS4wMDNDOC4xOTUtLjE1Ni45MzUgNi4yNC4xMjUgMTMuOTg1Yy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuODg0IDIzLjQ0NS40MDcgMTcuMjAxLjA0OWMtLjQwOC0uMDMtLjgxNy0uMDQ2LTEuMjI2LS4wNDZ6bS0uMTgxIDEuNzI0YzcuMTM0LS4yNjkgMTMuODQgNS42OCAxNC4zOTkgMTIuODA0LjY4NiA2LjI4My0zLjI2NyAxMi43OTItOS4yODMgMTQuODYyLTUuODQ3IDIuMTYyLTEzLjAyNS4wNi0xNi41NTctNS4xNDFDLjcyOCAxOS4xNzQuODcyIDExLjY3OSA0Ljk4NSA2LjkxNmMyLjYzMi0zLjE3MSA2LjY3MS01LjE3NCAxMC44MDktNS4xOXptLjI4MyAxLjU1M2MtNi42LS4yMS0xMi42NzEgNS41ODUtMTIuNzkgMTIuMTg1LS4yOTIgNS45NjQgNC4xMjkgMTEuODE3IDEwLjAzNCAxMi45NTMgNS40NyAxLjE5OCAxMS41ODQtMS42MTMgMTQuMDI1LTYuNzAyIDIuNTI1LTQuOTcgMS4zOTYtMTEuNTg1LTIuOTEyLTE1LjIxNi0yLjI4Mi0yLjAyMS01LjMtMy4yMTYtOC4zNTctMy4yMnpNMTYgNC45NzVjNS44MTgtLjE1NCAxMS4xMTcgNS4wODIgMTEuMDI0IDEwLjkwNS4xMDMgNS4zODQtNC4yMyAxMC41LTkuNjM2IDExLjA0My01LjA3NS42NjctMTAuNDI2LTIuNTg3LTExLjg4NS03LjU1Mi0xLjUzLTQuNzMuNDgtMTAuNDI4IDQuODg4LTEyLjg2NEExMS4wODMgMTEuMDgzIDAgMDExNiA0Ljk3NXptLS41NiA1Ljc3MmwtNy40MDggNS4yMzEgNy40MDkgNS4yMzR2LTUuMDU3YzIuMzg1IDEuNjg3IDQuNzcxIDMuMzcxIDcuMTU3IDUuMDU3VjEwLjc0N2wtNy4xNTcgNS4wNTV2LTUuMDU1elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJEMoKSB7IHJldHVybiBfZXh0ZW5kcyRDID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIEludGVybWVkaWF0ZUV2ZW50VGhyb3dFc2NhbGF0aW9uSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkQyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk3NS4wNDlDOC4xOTUtLjExLjkzNSA2LjI4Ni4xMjUgMTQuMDNjLS44NTUgNi41NSAyLjc0MSAxMy40NiA4Ljc0IDE2LjMxNCA1LjY2NiAyLjg0NyAxMy4wMTIgMS45OSAxNy43MS0yLjMzIDQuNzQ1LTQuMTYyIDYuNzI3LTExLjI0MyA0LjUzMi0xNy4yMDZDMjkuMDkgNC45MyAyMy40NDUuNDUzIDE3LjIwMS4wOTVjLS40MDgtLjAzLS44MTctLjA0Ni0xLjIyNi0uMDQ2em0tLjE4MSAxLjcyNGM3LjEzNC0uMjY5IDEzLjg0IDUuNjggMTQuMzk5IDEyLjgwNC42ODYgNi4yODMtMy4yNjcgMTIuNzkyLTkuMjgzIDE0Ljg2Mi01Ljg0NyAyLjE2Mi0xMy4wMjUuMDYtMTYuNTU3LTUuMTQxQy43MjggMTkuMjIuODcyIDExLjcyNSA0Ljk4NSA2Ljk2MmMyLjYzMi0zLjE3MSA2LjY3MS01LjE3NCAxMC44MDktNS4xOXptLjI4MyAxLjU1M2MtNi42LS4yMS0xMi42NzEgNS41ODUtMTIuNzkgMTIuMTg1LS4yOTIgNS45NjQgNC4xMjkgMTEuODE3IDEwLjAzNCAxMi45NTMgNS40NyAxLjE5OCAxMS41ODQtMS42MTMgMTQuMDI1LTYuNzAyIDIuNTI1LTQuOTcgMS4zOTYtMTEuNTg1LTIuOTEyLTE1LjIxNi0yLjI4Mi0yLjAyMS01LjMtMy4yMTYtOC4zNTctMy4yMnpNMTYgNS4wMjFjNS44MTgtLjE1NCAxMS4xMTcgNS4wODIgMTEuMDI0IDEwLjkwNS4xMDMgNS4zODQtNC4yMyAxMC41LTkuNjM2IDExLjA0My01LjA3NS42NjctMTAuNDI2LTIuNTg3LTExLjg4NS03LjU1Mi0xLjUzLTQuNzMuNDgtMTAuNDI4IDQuODg4LTEyLjg2NEExMS4wODMgMTEuMDgzIDAgMDExNiA1LjAyMXptLjAwNiAzLjkyN2MtMS42NzIgNC42NTQtMi43MzQgOS41MDItNC40MDYgMTQuMTU1IDEuNTM0LTEuNTI1IDIuODcyLTMuMjM0IDQuNDA2LTQuNzU5bDQuNDA2IDQuNzZjLTEuNDk2LTQuNzEtMi45MS05LjQ0Ni00LjQwNi0xNC4xNTZ6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkQigpIHsgcmV0dXJuIF9leHRlbmRzJEIgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkQi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRUaHJvd0xpbmtJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRCKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuOTc1LjA0OUM4LjE5NS0uMTEuOTM1IDYuMjg2LjEyNSAxNC4wM2MtLjg1NSA2LjU1IDIuNzQxIDEzLjQ2IDguNzQgMTYuMzE0IDUuNjY2IDIuODQ3IDEzLjAxMiAxLjk5IDE3LjcxLTIuMzMgNC43NDUtNC4xNjIgNi43MjctMTEuMjQzIDQuNTMyLTE3LjIwNkMyOS4wOSA0LjkzIDIzLjQ0NS40NTMgMTcuMjAxLjA5NWMtLjQwOC0uMDMtLjgxNy0uMDQ2LTEuMjI2LS4wNDZ6bS0uMTgxIDEuNzI0YzcuMTM0LS4yNjkgMTMuODQgNS42OCAxNC4zOTkgMTIuODA0LjY4NiA2LjI4My0zLjI2NyAxMi43OTItOS4yODMgMTQuODYyLTUuODQ3IDIuMTYyLTEzLjAyNS4wNi0xNi41NTctNS4xNDFDLjcyOCAxOS4yMi44NzIgMTEuNzI1IDQuOTg1IDYuOTYyYzIuNjMyLTMuMTcxIDYuNjcxLTUuMTc0IDEwLjgwOS01LjE5em0uMjgzIDEuNTUzYy02LjYtLjIxLTEyLjY3MSA1LjU4NS0xMi43OSAxMi4xODUtLjI5MiA1Ljk2NCA0LjEyOSAxMS44MTcgMTAuMDM0IDEyLjk1MyA1LjQ3IDEuMTk4IDExLjU4NC0xLjYxMyAxNC4wMjUtNi43MDIgMi41MjUtNC45NyAxLjM5Ni0xMS41ODUtMi45MTItMTUuMjE2LTIuMjgyLTIuMDIxLTUuMy0zLjIxNi04LjM1Ny0zLjIyek0xNiA1LjAyMWM1LjgxOC0uMTU0IDExLjExNyA1LjA4MiAxMS4wMjQgMTAuOTA1LjEwMyA1LjM4NC00LjIzIDEwLjUtOS42MzYgMTEuMDQzLTUuMDc1LjY2Ny0xMC40MjYtMi41ODctMTEuODg1LTcuNTUyLTEuNTMtNC43My40OC0xMC40MjggNC44ODgtMTIuODY0QTExLjA4MyAxMS4wODMgMCAwMTE2IDUuMDIxem0xLjc4IDQuMDkzdjMuNTU1SDkuNzg1djYuNzE0aDcuOTk0djMuNTU0bDUuODI5LTYuOTExLTUuODMtNi45MTJ6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkQSgpIHsgcmV0dXJuIF9leHRlbmRzJEEgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkQS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRUaHJvd01lc3NhZ2VJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRBKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuOTc1LjAwM0M4LjE5NS0uMTU2LjkzNSA2LjI0LjEyNSAxMy45ODVjLS44NTUgNi41NSAyLjc0MSAxMy40NiA4Ljc0IDE2LjMxNCA1LjY2NiAyLjg0NyAxMy4wMTIgMS45OSAxNy43MS0yLjMzIDQuNzQ1LTQuMTYyIDYuNzI3LTExLjI0MyA0LjUzMi0xNy4yMDZDMjkuMDkgNC44ODQgMjMuNDQ1LjQwNyAxNy4yMDEuMDQ5Yy0uNDA4LS4wMy0uODE3LS4wNDYtMS4yMjYtLjA0NnptLS4xODEgMS43MjRjNy4xMzQtLjI2OSAxMy44NCA1LjY4IDE0LjM5OSAxMi44MDQuNjg2IDYuMjgzLTMuMjY3IDEyLjc5Mi05LjI4MyAxNC44NjItNS44NDcgMi4xNjItMTMuMDI1LjA2LTE2LjU1Ny01LjE0MUMuNzI4IDE5LjE3NC44NzIgMTEuNjc5IDQuOTg1IDYuOTE2YzIuNjMyLTMuMTcxIDYuNjcxLTUuMTc0IDEwLjgwOS01LjE5em0uMjgzIDEuNTUzYy02LjYtLjIxLTEyLjY3MSA1LjU4NS0xMi43OSAxMi4xODUtLjI5MiA1Ljk2NCA0LjEyOSAxMS44MTcgMTAuMDM0IDEyLjk1MyA1LjQ3IDEuMTk4IDExLjU4NC0xLjYxMyAxNC4wMjUtNi43MDIgMi41MjUtNC45NyAxLjM5Ni0xMS41ODUtMi45MTItMTUuMjE2LTIuMjgyLTIuMDIxLTUuMy0zLjIxNi04LjM1Ny0zLjIyek0xNiA0Ljk3NWM1LjgxOC0uMTU0IDExLjExNyA1LjA4MiAxMS4wMjQgMTAuOTA1LjEwMyA1LjM4NC00LjIzIDEwLjUtOS42MzYgMTEuMDQzLTUuMDc1LjY2Ny0xMC40MjYtMi41ODctMTEuODg1LTcuNTUyLTEuNTMtNC43My40OC0xMC40MjggNC44ODgtMTIuODY0QTExLjA4MyAxMS4wODMgMCAwMTE2IDQuOTc1em0tNS45MSA1LjQ3NWw2LjA0IDQuOTAxIDYuMDQyLTQuOUgxMC4wODh6bS0xLjM0MSAxLjEzOHY5LjkyMWgxNC41MTRWMTEuNzlsLTcuMTMyIDUuNzg3LTcuMzgyLTUuOTl6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkeigpIHsgcmV0dXJuIF9leHRlbmRzJHogPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkei5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgSW50ZXJtZWRpYXRlRXZlbnRUaHJvd011bHRpcGxlSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkeih7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk3NS4wMDNDOC4xOTUtLjE1Ni45MzUgNi4yNC4xMjUgMTMuOTg1Yy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuODg0IDIzLjQ0NS40MDcgMTcuMjAxLjA0OWMtLjQwOC0uMDMtLjgxNy0uMDQ2LTEuMjI2LS4wNDZ6bS0uMTgxIDEuNzI0YzcuMTM0LS4yNjkgMTMuODQgNS42OCAxNC4zOTkgMTIuODA0LjY4NiA2LjI4My0zLjI2NyAxMi43OTItOS4yODMgMTQuODYyLTUuODQ3IDIuMTYyLTEzLjAyNS4wNi0xNi41NTctNS4xNDFDLjcyOCAxOS4xNzQuODcyIDExLjY3OSA0Ljk4NSA2LjkxNmMyLjYzMi0zLjE3MSA2LjY3MS01LjE3NCAxMC44MDktNS4xOXptLjI4MyAxLjU1M2MtNi42LS4yMS0xMi42NzEgNS41ODUtMTIuNzkgMTIuMTg1LS4yOTIgNS45NjQgNC4xMjkgMTEuODE3IDEwLjAzNCAxMi45NTMgNS40NyAxLjE5OCAxMS41ODQtMS42MTMgMTQuMDI1LTYuNzAyIDIuNTI1LTQuOTcgMS4zOTYtMTEuNTg1LTIuOTEyLTE1LjIxNi0yLjI4Mi0yLjAyMS01LjMtMy4yMTYtOC4zNTctMy4yMnpNMTYgNC45NzVjNS44MTgtLjE1NCAxMS4xMTcgNS4wODIgMTEuMDI0IDEwLjkwNS4xMDMgNS4zODQtNC4yMyAxMC41LTkuNjM2IDExLjA0My01LjA3NS42NjctMTAuNDI2LTIuNTg3LTExLjg4NS03LjU1Mi0xLjUzLTQuNzMuNDgtMTAuNDI4IDQuODg4LTEyLjg2NEExMS4wODMgMTEuMDgzIDAgMDExNiA0Ljk3NXptLjAwNiAzLjA3M2wtNy42MiA1LjUzMiAyLjkxIDguOTVoOS40MmwyLjkxLTguOTUtNy42Mi01LjUzMnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyR5KCkgeyByZXR1cm4gX2V4dGVuZHMkeSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyR5LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBJbnRlcm1lZGlhdGVFdmVudFRocm93U2lnbmFsSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkeSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk3NS4wMDNDOC4xOTUtLjE1Ni45MzUgNi4yNC4xMjUgMTMuOTg1Yy0uODU1IDYuNTUgMi43NDEgMTMuNDYgOC43NCAxNi4zMTQgNS42NjYgMi44NDcgMTMuMDEyIDEuOTkgMTcuNzEtMi4zMyA0Ljc0NS00LjE2MiA2LjcyNy0xMS4yNDMgNC41MzItMTcuMjA2QzI5LjA5IDQuODg0IDIzLjQ0NS40MDcgMTcuMjAxLjA0OWMtLjQwOC0uMDMtLjgxNy0uMDQ2LTEuMjI2LS4wNDZ6bS0uMTgxIDEuNzI0YzcuMTM0LS4yNjkgMTMuODQgNS42OCAxNC4zOTkgMTIuODA0LjY4NiA2LjI4My0zLjI2NyAxMi43OTItOS4yODMgMTQuODYyLTUuODQ3IDIuMTYyLTEzLjAyNS4wNi0xNi41NTctNS4xNDFDLjcyOCAxOS4xNzQuODcyIDExLjY3OSA0Ljk4NSA2LjkxNmMyLjYzMi0zLjE3MSA2LjY3MS01LjE3NCAxMC44MDktNS4xOXptLjI4MyAxLjU1M2MtNi42LS4yMS0xMi42NzEgNS41ODUtMTIuNzkgMTIuMTg1LS4yOTIgNS45NjQgNC4xMjkgMTEuODE3IDEwLjAzNCAxMi45NTMgNS40NyAxLjE5OCAxMS41ODQtMS42MTMgMTQuMDI1LTYuNzAyIDIuNTI1LTQuOTcgMS4zOTYtMTEuNTg1LTIuOTEyLTE1LjIxNi0yLjI4Mi0yLjAyMS01LjMtMy4yMTYtOC4zNTctMy4yMnpNMTYgNC45NzVjNS44MTgtLjE1NCAxMS4xMTcgNS4wODIgMTEuMDI0IDEwLjkwNS4xMDMgNS4zODQtNC4yMyAxMC41LTkuNjM2IDExLjA0My01LjA3NS42NjctMTAuNDI2LTIuNTg3LTExLjg4NS03LjU1Mi0xLjUzLTQuNzMuNDgtMTAuNDI4IDQuODg4LTEyLjg2NEExMS4wODMgMTEuMDgzIDAgMDExNiA0Ljk3NXptLjAwNiAzLjUyYy0yLjI2MSA0LjA3LTQuNTMzIDguMTM2LTYuNzk4IDEyLjIwNWgxMy41OTZMMTYuMDA1IDguNDk1elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJHgoKSB7IHJldHVybiBfZXh0ZW5kcyR4ID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJHguYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIExhbmVJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyR4KHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMCA3djE4LjYyaDMyVjdIMHptMS42NTUgMTcuMDU2VjguNjg0aDI4LjYydjE1LjM3MkgxLjY1NnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyR3KCkgeyByZXR1cm4gX2V4dGVuZHMkdyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyR3LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBNYW51YWxUYXNrSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkdyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYuNDk0IDNDMi45MTYgMyAwIDUuOTAzIDAgOS40NzV2MTMuMzgzYzAgMy41NzIgMi45MTYgNi40NzUgNi40OTQgNi40NzVoMTkuMDEyYzMuNTc4IDAgNi40OTQtMi45MDMgNi40OTQtNi40NzVWOS40NzVDMzIgNS45MDMgMjkuMDg0IDMgMjUuNTA2IDNINi40OTR6bTAgMmgxOS4wMTJDMjguMDE1IDUgMzAgNi45OCAzMCA5LjQ3NXYxMy4zODNjMCAyLjQ5NS0xLjk4NSA0LjQ3NS00LjQ5NCA0LjQ3NUg2LjQ5NEMzLjk4NSAyNy4zMzMgMiAyNS4zNTMgMiAyMi44NThWOS40NzVDMiA2Ljk4IDMuOTg1IDUgNi40OTQgNXptNC40MyAxLjMyOGMtLjIyMi4wMDUtLjQzLjA5LS42MDYuMjAzLS45ODUuNjM4LTQuMzU2IDIuOTc3LTUuMDk2IDMuNDg2LS42Ny40Ni0xLjEyIDEuMTUzLTEuMzggMS45NzQtLjI3Ljg1OC0uMjM1IDEuNzkzLS4yMzIgMi41NzYuMDAyLjU5LjAxNiAxLjEwNC4xNyAxLjcyNy4yMi45MDguNjM0IDEuNjMgMS4yMyAyLjExOC41OTcuNDkgMS4zNjMuNzMyIDIuMjMuNzM0IDMuMDM4LjAxMiA2LjA3OC4wMTYgOS4xMTkgMCAuMzI3LS4wMDIuNjQ1LS4xMjcuODQ4LS4zNy4yMDQtLjI0MS4yODctLjU2LjI5MS0uOTE0YTEuNzMyIDEuNzMyIDAgMDAtLjA5Ny0uNjI1aC4zMjdjLjMzNSAwIC42NDEtLjExLjg1Mi0uMzE2LjIxLS4yMDYuMzE3LS40NzUuMzc0LS43NTRhMS43ODMgMS43ODMgMCAwMC0uMTI2LTEuMTQzIDEuMTggMS4xOCAwIDAwLjg3Ny0uNTIxYy4xOTYtLjMwNi4yNTctLjY2Ni4yNTgtMS4wMjUuMDAxLS4zNzUtLjA4OC0uNzM4LS4yOTMtMS4wMzNhMS4xNzkgMS4xNzkgMCAwMC0uOTU4LS41MTJoLS40NzhjLjEwOC0uMjM3LjE1Ni0uNTA1LjE1NS0uNzgyLS4wMDMtLjM3My0uMDk4LS43MjEtLjMxNi0uOTlhMS4yMSAxLjIxIDAgMDAtLjk0My0uNDNjLTIuMjczLS4wMDQtNC4yMzYuMDE4LTYuNDEyLjAxMmwtLjE5LS4wMDFjLjEwMi0uMTA0LjIwMi0uMjA1LjMxMi0uMzE0LjMzNy0uMzM2LjY2Mi0uNjUyLjgzLS44NjkuNC0uNTE2LjQ2LTEuMjE1LjEyMy0xLjcyOS0uMTc4LS4yNzItLjQzOS0uNDU2LS43Mi0uNDk0YS45My45MyAwIDAwLS4xNDgtLjAwOHptLjAyOS43MjhsLjAyMi4wMDFjLjA1NS4wMDguMTE1LjAyNy4yMDkuMTcyLjEzMi4yMDEuMTI2LjYwNi0uMDkuODg0LS4wNzkuMTAyLS40MzEuNDY1LS43NjcuOC0uMzM3LjMzNC0uNjU3LjY0My0uODE1LjgzNi0uMTUzLjE4Ni0uMDk2LjMzOC0uMDU2LjQzNS4wNC4wOTYuMDg1LjIxMi4yOTguMjYzLjA2My4wMTQuMDY2LjAxLjA4Ni4wMTJsLjA2Ni4wMDNjMi40MjkuMDI3IDQuOTg2LS4wMDQgNy4yMjMtLjAwMy4xOTQgMCAuMjkzLjA1Ni4zNzkuMTYyLjA4Ni4xMDUuMTUxLjI4Ni4xNTMuNTMzIDAgLjI1Ny0uMDY1LjQ2Ny0uMTU1LjU5LS4wOS4xMjQtLjE4My4xODItLjM3LjE4My0xLjcwNi0uMDAxLTMuNDExLS4wMDUtNS4xMTctLjAwOXYuNzMxYzIuMjMuMDA0IDQuNDYxLjAxIDYuNjkyLjAxMi4xNyAwIC4yNjUuMDYuMzYxLjIuMDk2LjEzOC4xNjQuMzY0LjE2My42MTUgMCAuMjY4LS4wNTguNTAxLS4xNDMuNjM0LS4wODUuMTMyLS4xNjIuMTkzLS4zODUuMTk1LTIuMzItLjAwMS00LjU1NC0uMDA2LTYuNjg4LS4wMDN2LjczYzEuOTA1IDAgMy44MDkuMDAzIDUuNzEzLjAwMS4xOTQuMDA1LjMxNi4wOS40MTYuMjYuMTAyLjE3My4xNTEuNDQyLjA5My43MjgtLjA0LjE5My0uMTAyLjMxMy0uMTcuMzgtLjA2Ny4wNjUtLjE0OC4xMDgtLjM0My4xMDhoLTUuNzFsLjAwMi43MzRjMS40NDUgMCAyLjg5LS4wMSA0LjMzNC0uMDAxLjE2MiAwIC4yMzIuMDQxLjI5Ny4xMjMuMDY0LjA4MS4xMjMuMjM4LjEyLjQ4OC0uMDAzLjI0NC0uMDYxLjM4NS0uMTIuNDU1LS4wNi4wNy0uMTI3LjExLS4yOTYuMTEtMy4wMzcuMDE2LTYuMDc2LjAxMi05LjExMyAwLS43MzUtLjAwMi0xLjMxNi0uMTk2LTEuNzctLjU2OC0uNDU0LS4zNzItLjc5My0uOTM1LS45ODYtMS43MjgtLjEzNC0uNTQ2LS4xNDYtLjk3OC0uMTQ4LTEuNTU4LS4wMDMtLjc5Ni0uMDE4LTEuNjY0LjE5OS0yLjM1NC4yMjItLjcwNS41ODItMS4yNCAxLjA5Ni0xLjU5My43NS0uNTE1IDQuMTQtMi44NjYgNS4wNzktMy40NzRhLjUwNC41MDQgMCAwMS4yNDEtLjA4N3pcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyR2KCkgeyByZXR1cm4gX2V4dGVuZHMkdiA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyR2LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBNZXNzYWdlRmxvd0ljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJHYoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk00LjA3MyAyNi42MDdsMS4yOTUgMS4yOTZMMS4zMjUgMzJsLS42NjItLjYzM0wwIDMwLjczNWw0LjA3My00LjEyOHptNi45NTMtNy4wNDZsMS4yOTYgMS4yOTZMMS4zMjUgMzJsNy41NTUtNy42NTYtMS4yOTUtMS4yOTYgMS40NTUtMS40NzQgMS45ODYtMi4wMTN6TTMyIC4wNnMtMi42OTkgNS4xODktNS40MTcgMTAuNDYybC0uMzI2LjYzM2MtMS4xNCAyLjIxNC0yLjI2NSA0LjQwNy0zLjE3NiA2LjItMS4yMjgtMS4yMjItMi40NDktMi40NTItMy42NzYtMy42NzVsLTMuNTcgMy42MTgtMS4yOTctMS4yOTYgMy41NDEtMy41ODhjLS45OC0uOTY0LTEuOTMyLTEuOTU4LTIuOTIzLTIuOTFsLS43NTMtLjcwNmMyLjY4LTEuMjU4IDYuNTMzLTMuMTY1IDkuOTUtNC44NzZsLjYxNy0uMzA5QzI4LjgzOCAxLjY3MyAzMiAuMDYgMzIgLjA2em0tNC4xMjYgNC4wNmwtLjAxNS4wMDctLjExNS4wNTctLjA0OC4wMjQtLjExNS4wNTdMMTcuNyA5LjE3Mmw1LjAxNyA0Ljk0OCA1LjE1Ny0xMHpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyR1KCkgeyByZXR1cm4gX2V4dGVuZHMkdSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyR1LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBQYXJ0aWNpcGFudEljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJHUoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0wIDV2MjIuMDY5aDMyVjVIMHptMzAuMjc2IDEuNjg0djE4LjgySDYuNjJWNi42ODRoMjMuNjU1em0tMjguNjIgMGgzLjMxdjE4LjgyaC0zLjMxVjYuNjg0elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJHQoKSB7IHJldHVybiBfZXh0ZW5kcyR0ID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJHQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIFByb2Nlc3NJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyR0KHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICBkOiBcIk0xNi4xNzcgMGwuMTM3LjAwMmMuNDUyLjAwOS45LjAzNyAxLjM0Mi4wODIuMzQ2LjAzNi42Mi4zMDMuNjguNjQ2bC40MzcgMi41MzZjLjA1NS4zMTkuMjk2LjU3LjYwOC42NTUuOTg2LjI2OSAxLjkyMy42NTMgMi43OTYgMS4xNC4yOC4xNTUuNjI0LjE0NS44ODUtLjAzOWwyLjA4My0xLjQ3YS43NzUuNzc1IDAgMDEuOTM3LjAyMmMuODYuNjk5IDEuNjQ1IDEuNDg0IDIuMzQzIDIuMzQzLjIyLjI3LjIyMy42NTMuMDIzLjkzN2wtMS40MzkgMi4wMzhhLjgzMy44MzMgMCAwMC0uMDMxLjg5NmMuNTEyLjg4OS45MiAxLjg0NiAxLjIwNCAyLjg1NWEuODMzLjgzMyAwIDAwLjY1My42MDFsMi40MzUuNDJjLjM0Mi4wNTkuNjEuMzMzLjY0NS42NzlhMTUuOTI4IDE1LjkyOCAwIDAxLjA4IDIuMDY0bC0uMDAzLjExNGMtLjAxMi4zODItLjAzOC43Ni0uMDc3IDEuMTM0YS43NzUuNzc1IDAgMDEtLjY0NS42OGwtMi4zOTYuNDEyYS44MzUuODM1IDAgMDAtLjY1Ni42MSAxMi41MTEgMTIuNTExIDAgMDEtMS4yIDIuOTE3LjgzMi44MzIgMCAwMC4wMzQuODkybDEuMzk2IDEuOTc4Yy4yLjI4NC4xOTYuNjY3LS4wMjMuOTM2YTE2LjEwNCAxNi4xMDQgMCAwMS0yLjM0MyAyLjM0My43NzUuNzc1IDAgMDEtLjkzNy4wMjNsLTEuOTktMS40MDRhLjgzMy44MzMgMCAwMC0uODgtLjAyNmMtLjkwNy41MTYtMS44ODYuOTIyLTIuOTE2IDEuMmEuODMzLjgzMyAwIDAwLS42MS42NTZsLS40MTQgMi4zOTZhLjc3NS43NzUgMCAwMS0uNjc5LjY0NiAxNi4wOTYgMTYuMDk2IDAgMDEtMy4zMTIgMCAuNzc1Ljc3NSAwIDAxLS42NzktLjY0NmwtLjQyMy0yLjQ1MmEuODM0LjgzNCAwIDAwLS41OTgtLjYzNiAxMi40NzQgMTIuNDc0IDAgMDEtMS40NjgtLjUxNCAxMi40OSAxMi40OSAwIDAxLTEuNDE3LS42OC44MzMuODMzIDAgMDAtLjg3OC4wM2wtMi4wMjYgMS40M2EuNzc1Ljc3NSAwIDAxLS45MzctLjAyMyAxNi4wNjkgMTYuMDY5IDAgMDEtMi4zNDItMi4zNDIuNzc0Ljc3NCAwIDAxLS4wMjQtLjkzNmwxLjQwMi0xLjk4NmEuODMzLjgzMyAwIDAwLjAzMi0uODk2IDEyLjUwNyAxMi41MDcgMCAwMS0xLjIxNC0yLjkxMS44MzMuODMzIDAgMDAtLjY1NS0uNjA2bC0yLjM4Ni0uNDEyYS43NzUuNzc1IDAgMDEtLjY0Ni0uNjc4IDE2LjA5NyAxNi4wOTcgMCAwMTAtMy4zMTQuNzc1Ljc3NSAwIDAxLjY0Ni0uNjc4bDIuMzg2LS40MTJhLjgzMy44MzMgMCAwMC42NTUtLjYwNiAxMi41MDcgMTIuNTA3IDAgMDExLjIxNC0yLjkxMS44MzMuODMzIDAgMDAtLjAzMi0uODk2TDMuNTUyIDYuODUzYS43NzQuNzc0IDAgMDEuMDIzLS45MzYgMTYuMDkxIDE2LjA5MSAwIDAxMi4zNDMtMi4zNDMuNzc1Ljc3NSAwIDAxLjkzNy0uMDIzbDIuMDMgMS40MzNjLjI2LjE3Ny42LjE4Mi44NzQuMDI4LjkxNS0uNTEyIDEuODgtLjkgMi44Ny0xLjE2N2EuODMzLjgzMyAwIDAwLjYxMi0uNjU2bC40MjQtMi40NmEuNzc1Ljc3NSAwIDAxLjY3OS0uNjQ1QzE0Ljg0NS4wMzIgMTUuMzQ4LjAwNCAxNS44NSAwaC4zMjZ6TTE2IDYuNGMtNS4zMDIgMC05LjYgNC4yOTctOS42IDkuNTk5IDAgNS4zMDIgNC4yOTggOS42IDkuNiA5LjZzOS42LTQuMjk4IDkuNi05LjYtNC4yOTgtOS42LTkuNi05LjZ6bS0zIDQuMjgzYzAtMS40MjUgMS42MzctMi4yMDMgMi43MTUtMS4yOWw1LjY5IDQuODE1Yy43OTQuNjcyLjc5NCAxLjkxIDAgMi41ODNsLTUuNjkgNC44MTVjLTEuMDc4LjkxMy0yLjcxNS4xMzQtMi43MTUtMS4yOXpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRzKCkgeyByZXR1cm4gX2V4dGVuZHMkcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBSZWNlaXZlVGFza0ljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJHMoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk02LjQ5NCAzQzIuOTE2IDMgMCA1LjkwMyAwIDkuNDc1djEzLjM4M2MwIDMuNTcyIDIuOTE2IDYuNDc1IDYuNDk0IDYuNDc1aDE5LjAxMmMzLjU3OCAwIDYuNDk0LTIuOTAzIDYuNDk0LTYuNDc1VjkuNDc1QzMyIDUuOTAzIDI5LjA4NCAzIDI1LjUwNiAzSDYuNDk0em0wIDJoMTkuMDEyQzI4LjAxNSA1IDMwIDYuOTggMzAgOS40NzV2MTMuMzgzYzAgMi40OTUtMS45ODUgNC40NzUtNC40OTQgNC40NzVINi40OTRDMy45ODUgMjcuMzMzIDIgMjUuMzUzIDIgMjIuODU4VjkuNDc1QzIgNi45OCAzLjk4NSA1IDYuNDk0IDV6TTUuMjMgNy43NjR2MTEuNTc3aDE3LjU1VjcuNzY0SDUuMjN6bTEuODE2Ljc1OGgxMy45MTdsLTYuOTU5IDQuNTc3LTYuOTU4LTQuNTc3em0tMS4wNi4yMWw4LjAxOCA1LjI3NCA4LjAxOC01LjI3NXY5Ljg1M0g1Ljk4N1Y4LjczelwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJHIoKSB7IHJldHVybiBfZXh0ZW5kcyRyID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJHIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIFNjcmlwdFRhc2tJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRyKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNi40OTQgM0MyLjkxNiAzIDAgNS45MDMgMCA5LjQ3NXYxMy4zODNjMCAzLjU3MiAyLjkxNiA2LjQ3NSA2LjQ5NCA2LjQ3NWgxOS4wMTJjMy41NzggMCA2LjQ5NC0yLjkwMyA2LjQ5NC02LjQ3NVY5LjQ3NUMzMiA1LjkwMyAyOS4wODQgMyAyNS41MDYgM0g2LjQ5NHptMCAyaDE5LjAxMkMyOC4wMTUgNSAzMCA2Ljk4IDMwIDkuNDc1djEzLjM4M2MwIDIuNDk1LTEuOTg1IDQuNDc1LTQuNDk0IDQuNDc1SDYuNDk0QzMuOTg1IDI3LjMzMyAyIDI1LjM1MyAyIDIyLjg1OFY5LjQ3NUMyIDYuOTggMy45ODUgNSA2LjQ5NCA1em0yLjk5IDMuMDc3bC0uMDc3LjA0NS0uMDI2LjAxNWMtMS4wOS42NDYtMS44NCAxLjIzOS0yLjMzNiAxLjgxOC0uNDk2LjU3OS0uNzM1IDEuMTYyLS43NDIgMS43MjUtLjAxNCAxLjExOS44MTIgMS45NTggMS41NDQgMi43MDguNzMyLjc1IDEuMzg1IDEuNDU2IDEuNDQ2IDIuMDQxLjAzMi4yOTgtLjAzOS41OTgtLjM2NCAxLjAwOC0uMzI0LjQwOC0uOTExLjg5Ny0xLjg1IDEuNDQ1bC0xLjM4OC44MDhoOC41NmwuMTAxLS4wNTljLjk5Ni0uNTggMS42NjctMS4xMTYgMi4wOTQtMS42NTUuNDI5LS41NC42MDMtMS4xMDcuNTQ3LTEuNjM4LS4xMS0xLjA1Mi0uOTY3LTEuODE4LTEuNjg4LTIuNTU2LS43MjEtLjczOS0xLjMwNi0xLjQzNi0xLjI5OC0yLjA5Mi4wMDQtLjMzMS4xMzItLjcuNTM1LTEuMTcxLjQwMi0uNDcgMS4wOC0xLjAyIDIuMTE5LTEuNjM2bDEuMzYyLS44MDZoLTguNTR6bS4yNDEuODY3aDUuMjcxYTYuODMgNi44MyAwIDAwLTEuMTEzIDEuMDFjLS40OTYuNTgtLjczNiAxLjE2My0uNzQzIDEuNzI2LS4wMTQgMS4xMTkuODEyIDEuOTU4IDEuNTQ0IDIuNzA4LjczMi43NSAxLjM4NSAxLjQ1NiAxLjQ0NiAyLjA0MS4wMzIuMjk4LS4wMzkuNTk4LS4zNjQgMS4wMDgtLjMxMi4zOTMtLjg3Mi44NjItMS43NTMgMS4zODZIOC43MjhjLjM2Ny0uMjg2LjY1OC0uNTY2Ljg4LS44NDcuNDMtLjU0LjYwNC0xLjEwNy41NDgtMS42MzgtLjExLTEuMDUyLS45NjgtMS44MTgtMS42ODgtMi41NTYtLjcyMS0uNzM5LTEuMzA2LTEuNDM1LTEuMjk4LTIuMDkyLjAwNC0uMzMxLjEzMi0uNy41MzQtMS4xNzEuMzg5LS40NTQgMS4wNC0uOTg0IDIuMDIxLTEuNTc1em0tMS4yMzMgMS40OHYuNGg0LjEydi0uNGgtNC4xMnptLS4xNTQgMi4xNTh2LjRIMTIuNnYtLjRIOC4zNHptMS45MzEgMi4xNTh2LjRoNC4xMjZ2LS40SDEwLjI3em0uNTkgMi4xNTh2LjRoNC4yNzZ2LS40aC00LjI3NnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRxKCkgeyByZXR1cm4gX2V4dGVuZHMkcSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRxLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTZW5kVGFza0ljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJHEoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk02LjQ5NCAzQzIuOTE2IDMgMCA1LjkwMyAwIDkuNDc1djEzLjM4M2MwIDMuNTcyIDIuOTE2IDYuNDc1IDYuNDk0IDYuNDc1aDE5LjAxMmMzLjU3OCAwIDYuNDk0LTIuOTAzIDYuNDk0LTYuNDc1VjkuNDc1QzMyIDUuOTAzIDI5LjA4NCAzIDI1LjUwNiAzSDYuNDk0em0wIDJoMTkuMDEyQzI4LjAxNSA1IDMwIDYuOTggMzAgOS40NzV2MTMuMzgzYzAgMi40OTUtMS45ODUgNC40NzUtNC40OTQgNC40NzVINi40OTRDMy45ODUgMjcuMzMzIDIgMjUuMzUzIDIgMjIuODU4VjkuNDc1QzIgNi45OCAzLjk4NSA1IDYuNDk0IDV6bS0xLjM4IDMuMTZsOC4zMzIgNC43MTdMMjEuNzggOC4xNkg1LjExNHptLjAyMSAxLjc0NXY5LjMwOUgyMS44VjkuOTA1bC04LjM1MyA0LjY1NS04LjMxLTQuNjU1elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJHAoKSB7IHJldHVybiBfZXh0ZW5kcyRwID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJHAuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIFNlcnZpY2VUYXNrSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkcCh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYuNDk0IDNDMi45MTYgMyAwIDUuOTAzIDAgOS40NzV2MTMuMzgzYzAgMy41NzIgMi45MTYgNi40NzUgNi40OTQgNi40NzVoMTkuMDEyYzMuNTc4IDAgNi40OTQtMi45MDMgNi40OTQtNi40NzVWOS40NzVDMzIgNS45MDMgMjkuMDg0IDMgMjUuNTA2IDNINi40OTR6bTAgMmgxOS4wMTJDMjguMDE1IDUgMzAgNi45OCAzMCA5LjQ3NXYxMy4zODNjMCAyLjQ5NS0xLjk4NSA0LjQ3NS00LjQ5NCA0LjQ3NUg2LjQ5NEMzLjk4NSAyNy4zMzMgMiAyNS4zNTMgMiAyMi44NThWOS40NzVDMiA2Ljk4IDMuOTg1IDUgNi40OTQgNXptMS4yMiAxLjY4MVY3Ljg0Yy0uMzI5LjA5My0uNjMuMjIzLS45MTQuMzgybC0uODMtLjgyLTEuNTU0IDEuNTYxLjgzLjgyYy0uMTYuMjg4LS4yODUuNTk0LS4zNzIuOTExbC0xLjE3Ny4wMDJ2Mi4ybDEuMTg5LS4wMDRjLjEwOS40MzEuMzQ1LjgxOS41OCAxLjE2NXYtMS44OThsLTEuMDM4LjAwNHYtLjczN2wxLjAzNC0uMDAyLjA1OC0uMjk0Yy4wODQtLjQyOS4yNTItLjgzOC40OTMtMS4yMDNsLjE2NS0uMjUtLjcyNy0uNzE4LjUyMy0uNTI2LjcyOC43MTkuMjQ3LS4xNjVjLjM3OS0uMjUuNzkzLS40MTcgMS4yMDYtLjUwNWwuMjkxLS4wNi0uMDAyLTEuMDFoLjc1TDkuMTkgOC40MTdIMTEuMTZjLS4xODUtLjIyMS0uOTUxLS41MDgtMS4yMzctLjU4OEw5LjkzIDYuNjhINy43MTN6bTIuMDc4IDIuMTA1bC4wMDMgMS4xNThhNC4xOSA0LjE5IDAgMDAtLjkxNS4zODNsLS44My0uODIxLTEuNTUzIDEuNTYyLjgzLjgyYy0uMTYuMjg4LS4yODYuNTkzLS4zNzMuOTFsLTEuMTc2LjAwM3YyLjJsMS4xODgtLjAwNGMuMDk0LjMyNi4yMjQuNjI0LjM4My45MDVsLS44NS44NDcgMS41NyAxLjU0My44NDctLjg0M2MuMjkuMTYxLjU5OS4yODYuOTE5LjM3M3YxLjE5OGMuNzU2LjAwNiAxLjU2LjAwMyAyLjIwNi4wMDNWMTcuODFhNC4xOSA0LjE5IDAgMDAuOTE1LS4zODNsLjg0Ny44MzUgMS41NTQtMS41Ni0uODQ4LS44MzZjLjE2LS4yODguMjg2LS41OTQuMzczLS45MTJsMS4xNTItLjAwN1YxMi43NWwtMS4xNjUuMDA3YTQuMDkgNC4wOSAwIDAwLS4zODItLjkwNWwuODA1LS44MDctMS41Ny0xLjU0Ni0uODA0LjgwNmE0LjE2IDQuMTYgMCAwMC0uOTE1LS4zNzJsLjAwNy0xLjE0N0g5Ljc5MnptLjczMi43M2guNzUxbC0uMDA2IDEuMDA1LjI5Ny4wNThjLjQzLjA4NS44NDQuMjUyIDEuMjEuNDkybC4yNS4xNjIuNzAxLS43MDQuNTI4LjUyLS43MDIuNzA0LjE2OS4yNWMuMjQ4LjM3NC40MTIuNzc5LjUwNSAxLjE5NmwuMDYxLjI5MiAxLjAxNi0uMDA2di43MzdsLTEuMDEuMDA2LS4wNTguMjkyYy0uMDg1LjQzLS4yNTIuODM4LS40OTQgMS4yMDVsLS4xNjUuMjUuNzQ0LjczMy0uNTIzLjUyNS0uNzQzLS43MzQtLjI0OC4xNjVjLS4zNzguMjQ3LS43ODkuNDE4LTEuMjAzLjUwM2wtLjI5NC4wNTh2MS4wNjdoLS43NDV2LTEuMDU5bC0uMjk1LS4wNTdhMy4zOTUgMy4zOTUgMCAwMS0xLjIxLS40OTJsLS4yNDgtLjE2Mi0uNzQ3Ljc0My0uNTI4LS41Mi43NDctLjc0NC0uMTctLjI1YTMuNTQ2IDMuNTQ2IDAgMDEtLjUwNi0xLjE5NmwtLjA2LS4yOTEtMS4wNC4wMDR2LS43MzhsMS4wMzQtLjAwMi4wNTgtLjI5NGMuMDg1LS40MjguMjUyLS44MzcuNDkzLTEuMjAzbC4xNjUtLjI1LS43MjYtLjcxOC41MjItLjUyNi43MjguNzIuMjQ4LS4xNjZhMy41NDYgMy41NDYgMCAwMTEuMjA1LS41MDRsLjI5Mi0uMDYtLjAwMy0xLjAxem0uMzg4IDIuNjg1YTEuNjUgMS42NSAwIDAwLTEuNjQ1IDEuNjQ1YzAgLjkwNC43NCAxLjY0NSAxLjY0NSAxLjY0NWExLjY1IDEuNjUgMCAwMDEuNjQ1LTEuNjQ1IDEuNjUgMS42NSAwIDAwLTEuNjQ1LTEuNjQ1em0wIC43M2EuOTEuOTEgMCAwMS45MTUuOTE1LjkxLjkxIDAgMDEtLjkxNS45MTQuOTEuOTEgMCAwMS0uOTE1LS45MTQuOTEuOTEgMCAwMS45MTUtLjkxNXpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRvKCkgeyByZXR1cm4gX2V4dGVuZHMkbyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRvLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50Q29tcGVuc2F0aW9uSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkbyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk5NS4wMDFDOS43MDUtLjA4NCAzLjY0MyAzLjk2NCAxLjI1NyA5Ljc3NS0xLjIzNSAxNS40ODUuMDYgMjIuNTc3IDQuNDIgMjcuMDNjNC4xOTMgNC41MTMgMTEuMTAyIDYuMTcgMTYuODg3IDQuMDU4IDUuOTk2LTIuMDQyIDEwLjQyMy03LjkzIDEwLjY2NC0xNC4yNjkuNDAzLTYuMjI3LTMuMjYtMTIuNDQtOC44Ny0xNS4xNTNBMTUuOTI0IDE1LjkyNCAwIDAwMTUuOTk0IDB6bTAgMS43M2M2LjIxMy0uMTA4IDEyLjEyMiA0LjM1NSAxMy43MjYgMTAuMzU3IDEuNjc4IDUuNjUzLS41OTIgMTIuMTk4LTUuNDYzIDE1LjU0Ny01LjA2IDMuNzE5LTEyLjU2NCAzLjQ1LTE3LjM0My0uNjI2QzIuMTAxIDIzLjE3MS4zNzcgMTYuMDcgMi44NDggMTAuNDRjMi4xNC01LjIwNSA3LjUxNS04Ljc3NCAxMy4xNDctOC43MDh6bS0uNTY2IDkuMDNsLTcuNDE1IDUuMjM1IDcuNDE1IDUuMjM4di01LjA2MmMyLjM4NiAxLjY4OSA0Ljc3NSAzLjM3NSA3LjE2MyA1LjA2MlYxMC43NjFsLTcuMTYzIDUuMDU4di01LjA1OHptLS44NjYgMS42NjZ2Ny4xM0w5LjUxIDE1Ljk5M2w1LjA1Mi0zLjU2NXptNy4xNjYgMHY3LjEzN2wtNS4wNTItMy41NjggNS4wNTItMy41Njl6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkbigpIHsgcmV0dXJuIF9leHRlbmRzJG4gPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkbi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgU3RhcnRFdmVudENvbmRpdGlvbkljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJG4oe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNiAwQzcuMTc0IDAgMCA3LjE3NCAwIDE2czcuMTc0IDE2IDE2IDE2IDE2LTcuMTc0IDE2LTE2UzI0LjgyNiAwIDE2IDB6bTAgMS43M2M3Ljg5MiAwIDE0LjI3IDYuMzc4IDE0LjI3IDE0LjI3IDAgNy44OTEtNi4zNzkgMTQuMjctMTQuMjcgMTQuMjdTMS43MyAyMy44OTEgMS43MyAxNkMxLjczIDguMTA4IDguMTA4IDEuNzMgMTYgMS43M3ptLTUuMzYyIDcuNTIzdjEzLjQ5M2gxMC43MjRWOS4yNTNIMTAuNjM4em0uODYzLjg2Nmg4Ljk5NVYyMS44OEgxMS41MDFWMTAuMTJ6bS45MjggMS4zMjR2Ljg2M2g3LjEzOXYtLjg2M2gtNy4xMzl6bTAgMi42MDV2Ljg2N2g3LjEzOXYtLjg2N2gtNy4xMzl6bTAgMy4wMXYuODY0aDcuMTM5di0uODYzaC03LjEzOXptMCAyLjcydi44NjNoNy4xMzl2LS44NjNoLTcuMTM5elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJG0oKSB7IHJldHVybiBfZXh0ZW5kcyRtID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJG0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIFN0YXJ0RXZlbnRFcnJvckljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJG0oe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45OTUuMDA1QzkuNzA1LS4wOCAzLjY0MyAzLjk2OCAxLjI1NyA5Ljc4LTEuMjM1IDE1LjQ5LjA2IDIyLjU4MSA0LjQyIDI3LjAzNGM0LjE5MyA0LjUxMyAxMS4xMDIgNi4xNyAxNi44ODcgNC4wNTggNS45OTYtMi4wNDIgMTAuNDIzLTcuOTMgMTAuNjY0LTE0LjI2OS40MDMtNi4yMjctMy4yNi0xMi40NC04Ljg3LTE1LjE1M0ExNS45MjQgMTUuOTI0IDAgMDAxNS45OTQuMDA1em0wIDEuNzNjNi4yMTMtLjEwOCAxMi4xMjIgNC4zNTUgMTMuNzI2IDEwLjM1NyAxLjY3OCA1LjY1My0uNTkyIDEyLjE5OC01LjQ2MyAxNS41NDctNS4wNiAzLjcxOS0xMi41NjQgMy40NS0xNy4zNDMtLjYyNi00LjgxNC0zLjgzOC02LjUzOC0xMC45MzktNC4wNjctMTYuNTcgMi4xNC01LjIwNSA3LjUxNS04Ljc3NCAxMy4xNDctOC43MDh6bTYuMTMgNy40NWwtMy42MzUgNy4zNy00LjUyLTUuODhjLTEuMzcgNC4wNDgtMi43MzggOC4wOTUtNC4xMDYgMTIuMTQzbDQuNjAzLTUuOTE3IDQuNzQ4IDUuNDMzIDIuOTEtMTMuMTQ5em0tNy43NTQgMy44ODlsNC4yOTkgNS40NDkgMS4wNzMtMi4zOS0xLjAyOCA0LjEzNS00LjM4Ny01LjE2LTEuNzggMi43NSAxLjgyMy00Ljc4NHpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRsKCkgeyByZXR1cm4gX2V4dGVuZHMkbCA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50RXNjYWxhdGlvbkljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJGwoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45OTUuMDAxQzkuNzA1LS4wODQgMy42NDMgMy45NjQgMS4yNTcgOS43NzUtMS4yMzUgMTUuNDg1LjA2IDIyLjU3NyA0LjQyIDI3LjAzYzQuMTkzIDQuNTEzIDExLjEwMiA2LjE3IDE2Ljg4NyA0LjA1OCA1Ljk5Ni0yLjA0MiAxMC40MjMtNy45MyAxMC42NjQtMTQuMjY5LjQwMy02LjIyNy0zLjI2LTEyLjQ0LTguODctMTUuMTUzQTE1LjkyNCAxNS45MjQgMCAwMDE1Ljk5NCAwem0wIDEuNzNjNi4yMTMtLjEwOCAxMi4xMjIgNC4zNTUgMTMuNzI2IDEwLjM1NyAxLjY3OCA1LjY1My0uNTkyIDEyLjE5OC01LjQ2MyAxNS41NDctNS4wNiAzLjcxOS0xMi41NjQgMy40NS0xNy4zNDMtLjYyNkMyLjEwMSAyMy4xNzEuMzc3IDE2LjA3IDIuODQ4IDEwLjQ0YzIuMTQtNS4yMDUgNy41MTUtOC43NzQgMTMuMTQ3LTguNzA4em0wIDcuMTgzYy0xLjY3NCA0LjY1OC0yLjczNiA5LjUwOS00LjQxIDE0LjE2NiAxLjUzNS0xLjUyNiAyLjg3NC0zLjIzNiA0LjQxLTQuNzYzbDQuNDEgNC43NjNjLTEuNDk5LTQuNzEzLTIuOTEzLTkuNDUzLTQuNDEtMTQuMTY2em0uMDMyIDIuOTMxYy44MjIgMi41ODggMS41OTggNS4xOSAyLjQyIDcuNzc4bC0yLjQyLTIuNjE1Yy0uNjgzLjU5OC0yLjQ1NSAyLjg4Ny0yLjM0IDIuMzkuODcxLTIuNDg5IDEuNDQ4LTUuMDcgMi4zNC03LjU1M3pcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRrKCkgeyByZXR1cm4gX2V4dGVuZHMkayA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50TWVzc2FnZUljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJGsoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45OTUuMDAxQzkuNzA1LS4wODQgMy42NDMgMy45NjQgMS4yNTcgOS43NzUtMS4yMzUgMTUuNDg1LjA2IDIyLjU3NyA0LjQyIDI3LjAzYzQuMTkzIDQuNTEzIDExLjEwMiA2LjE3IDE2Ljg4NyA0LjA1OCA1Ljk5Ni0yLjA0MiAxMC40MjMtNy45MyAxMC42NjQtMTQuMjY5LjQwMy02LjIyNy0zLjI2LTEyLjQ0LTguODctMTUuMTUzQTE1LjkyNCAxNS45MjQgMCAwMDE1Ljk5NCAwem0wIDEuNzNjNi4yMTMtLjEwOCAxMi4xMjIgNC4zNTUgMTMuNzI2IDEwLjM1NyAxLjY3OCA1LjY1My0uNTkyIDEyLjE5OC01LjQ2MyAxNS41NDctNS4wNiAzLjcxOS0xMi41NjQgMy40NS0xNy4zNDMtLjYyNkMyLjEwMSAyMy4xNzEuMzc3IDE2LjA3IDIuODQ4IDEwLjQ0YzIuMTQtNS4yMDUgNy41MTUtOC43NzQgMTMuMTQ3LTguNzA4em0tNy4yNTcgOC43MzJ2MTEuMDY5aDE0LjUxM3YtMTEuMDdIOC43Mzh6bTMuMjI0IDEuNzNoOC4wNjRjLTEuNDI4Ljg3OC0yLjg1NyAyLjgwNy00LjI4NSAzLjAxOGwtMy43NzktMy4wMTl6bTkuNTYyIDEuMDE3djYuNTkzSDEwLjQ2NVYxMy4yMWw1LjUyOCA0LjQxNyA1LjUzLTQuNDE4elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJGooKSB7IHJldHVybiBfZXh0ZW5kcyRqID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJGouYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIFN0YXJ0RXZlbnRNdWx0aXBsZUljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJGooe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS45OTUuMDAxQzkuNzA1LS4wODQgMy42NDMgMy45NjQgMS4yNTcgOS43NzUtMS4yMzUgMTUuNDg1LjA2IDIyLjU3NyA0LjQyIDI3LjAzYzQuMTkzIDQuNTEzIDExLjEwMiA2LjE3IDE2Ljg4NyA0LjA1OCA1Ljk5Ni0yLjA0MiAxMC40MjMtNy45MyAxMC42NjQtMTQuMjY5LjQwMy02LjIyNy0zLjI2LTEyLjQ0LTguODctMTUuMTUzQTE1LjkyNCAxNS45MjQgMCAwMDE1Ljk5NCAwem0wIDEuNzNjNi4yMTMtLjEwOCAxMi4xMjIgNC4zNTUgMTMuNzI2IDEwLjM1NyAxLjY3OCA1LjY1My0uNTkyIDEyLjE5OC01LjQ2MyAxNS41NDctNS4wNiAzLjcxOS0xMi41NjQgMy40NS0xNy4zNDMtLjYyNkMyLjEwMSAyMy4xNzEuMzc3IDE2LjA3IDIuODQ4IDEwLjQ0YzIuMTQtNS4yMDUgNy41MTUtOC43NzQgMTMuMTQ3LTguNzA4em0wIDYuMzI4bC03LjYyNiA1LjUzNmMuOTcgMi45ODYgMS45NDIgNS45NzEgMi45MTMgOC45NTdoOS40MjZsMi45MTItOC45NTctNy42MjUtNS41MzZ6bTAgMS4wNjhsNi42MDkgNC43OTgtMi41MjUgNy43NjNIMTEuOTFsLTIuNTI0LTcuNzYzIDYuNjA5LTQuNzk4elwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJGkoKSB7IHJldHVybiBfZXh0ZW5kcyRpID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJGkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIFN0YXJ0RXZlbnROb25JbnRlcnJ1cHRpbmdDb25kaXRpb25JY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRpKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTAuNjMyIDkuMTg5VjIyLjY4aDEwLjcyM1Y5LjE4OUgxMC42MzJ6bS44NjIuODY1aDguOTk0djExLjc2SDExLjQ5NHYtMTEuNzZ6bS45MjggMS4zMjR2Ljg2M2g3LjEzOHYtLjg2M2gtNy4xMzh6bTAgMi42MDV2Ljg2Nmg3LjEzOHYtLjg2NmgtNy4xMzh6bTAgMy4wMXYuODYzaDcuMTM4di0uODYzaC03LjEzOHptMCAyLjcydi44NjJoNy4xMzh2LS44NjNoLTcuMTM4ek0xNi4xMiAwaC0uMjMybC0uMjIuMDA0aC0uMDEybC0uMjIxLjAwNmgtLjAxMmwtLjIyLjAxaC0uMDEybC0uMjIuMDEzaC0uMDEybC0uMjIuMDE2aC0uMDEybC0uMjIuMDE5aC0uMDA1bC0uMDA2LjAwMS0uMjIuMDIxaC0uMDA2bC0uMDA1LjAwMS0uMjIuMDI1aC0uMDExbC0uMjIuMDI4aC0uMDA1bC0uMDA2LjAwMi0uMjE5LjAzaC0uMDA1bC0uMDA2LjAwMS0uMjE4LjAzMy0uMDA2LjAwMS0uMDA2LjAwMS0uMjE3LjAzNi0uMDA2LjAwMS0uMDA2LjAwMS0uMjE3LjAzOS0uMDA2LjAwMS0uMDA2LjAwMS0uMjE2LjA0Mi0uMDA2LjAwMS0uMDA2LjAwMS0uMjE1LjA0NS0uMDA2LjAwMS0uMDA2LjAwMi0uMjE1LjA0Ny0uMDA2LjAwMi0uMDA2LjAwMS0uMjE0LjA1LS4wMDYuMDAyLS4wMDYuMDAyLS4xMTUuMDI5LS4xNTIuMDUzLS4xNC4wODEtLjEyMi4xMDYtLjEuMTI2LS4wNzUuMTQzLS4wNDcuMTU0LS4wMTguMTYuMDEyLjE2LjA0Mi4xNTYuMDcuMTQ1LjA5NS4xMy4xMTguMTEuMTM3LjA4Ni4xNS4wNTkuMTU4LjAzaC4xNjFsLjEzMi0uMDIyLjExLS4wMjguMjAyLS4wNDcuMjAzLS4wNDYuMjA4LS4wNDMuMjAyLS4wMzkuMjA2LS4wMzcuMjA2LS4wMzQuMjA1LS4wMy4yMDgtLjAzLjIwNS0uMDI1LjIwOS0uMDIzLjIwOC0uMDIuMjEtLjAxNy4yMDktLjAxNS4yMDctLjAxMS4yMS0uMDA5LjIxLS4wMDYuMjA3LS4wMDNoLjIxbC4yMS4wMDIuMjA3LjAwNS4yMDcuMDA4LjIxMi4wMTEuMjA3LjAxNC4yMDguMDE3LjIwOS4wMTkuMjA4LjAyMi4yMDUuMDI1LjIwNi4wMjguMjA3LjAzLjIwOC4wMzUuMjA1LjAzNi4yMDIuMDM5LjA1Mi4wMS4xNi4wMTguMTYtLjAxMi4xNTYtLjA0Mi4xNDYtLjA3LjEzLS4wOTYuMTA5LS4xMTkuMDg1LS4xMzYuMDYtLjE1LjAzLS4xNTl2LS4xNmwtLjAzLS4xNi0uMDU5LS4xNS0uMDg2LS4xMzYtLjEwOS0uMTE4LS4xMy0uMDk2LS4xNDUtLjA3LS4xMjgtLjAzOC0uMDU3LS4wMTEtLjAwNi0uMDAyaC0uMDA2bC0uMjE2LS4wNDItLjAwNi0uMDAxLS4wMDYtLjAwMS0uMjE3LS4wMzlIMTguOWwtLjAwNi0uMDAyLS4yMTctLjAzNS0uMDA2LS4wMDEtLjAwNi0uMDAxLS4yMTgtLjAzMi0uMDA2LS4wMDEtLjAwNi0uMDAxLS4yMTgtLjAzaC0uMDA2bC0uMDA2LS4wMDEtLjIxOS0uMDI3aC0uMDExbC0uMjItLjAyNC0uMDA1LS4wMDFoLS4wMDZsLS4yMi0uMDIxaC0uMDA2bC0uMDA2LS4wMDEtLjIyLS4wMTctLjAwNS0uMDAxaC0uMDA2TDE3LjA2LjAzaC0uMDEybC0uMjItLjAxMmgtLjAxMmwtLjIyLS4wMWgtLjAxMmwtLjIyLS4wMDVoLS4wMTJMMTYuMTMyIDBoLS4wMTJ6bTguNzE1IDIuNzgzbC0uMTU3LjAzNC0uMTQ5LjA2My0uMTM0LjA4OS0uMTE2LjExMi0uMDkyLjEzMi0uMDY3LjE0Ny0uMDM4LjE1Ny0uMDA4LjE2LjAyMS4xNi4wNTEuMTUzLjA3OS4xNDEuMTAzLjEyNC4xMDIuMDg3LjA1Mi4wMzhoLjAwMWwuMDg3LjA2NHYuMDAxbC4wODIuMDYxLjAwMi4wMDEuMDc2LjA1OWguMDAxbC4wODQuMDY1LjA4Mi4wNjYuMDAyLjAwMS4wNzkuMDYzLjAwMi4wMDIuMDc3LjA2My4wODEuMDY3LjAwMi4wMDIuMDc3LjA2NS4wNzYuMDY1LjAwMS4wMDIuMDguMDcuMDc4LjA3aC4wMDJsLjA3NS4wNjguMDc3LjA3Mi4wMDIuMDAxLjA3My4wNjkuMDc3LjA3My4wNzIuMDcuMDAyLjAwMS4wNzcuMDc2LjA3LjA3di4wMDFsLjA3NS4wNzYuMDcuMDczLjAwMi4wMDEuMDc0LjA3OS4wMDIuMDAyLjA2OS4wNzQuMDY5LjA3NS4wNzQuMDgyLjA3LjA4LjAwMi4wMDEuMDY4LjA3OWguMDAxbC4wNjcuMDc5LjA2OC4wODIuMDY1LjA3OC4wMDEuMDAyLjA2OC4wODMuMDY3LjA4NC4wNjMuMDgxLjAwMS4wMDIuMDY3LjA4Ny4wMDIuMDAyLjA2My4wODQuMDAxLjAwMS4wNjQuMDg3LjAwOC4wMS4wMDguMDEuMDk1LjEyLjA5My4xMjEuMDkuMTE5LjA4Ny4xMTkuMDg4LjEyMi4wODYuMTIzLjA4NC4xMi4wODEuMTIyLjAwMS4wMDIuMDg0LjEyNi4wOC4xMjYuMDguMTI3LjA3Ny4xMjYuMDc5LjEzMS4wNzQuMTI3LjA3NS4xMzEuMDczLjEzMS4wNy4xMy4wNy4xMzMuMDY5LjEzMy4wNDUuMDkuMDg2LjEzNy4xMDkuMTE5LjEzLjA5Ni4xNDQuMDcuMTU2LjA0Mi4xNi4wMTMuMTYtLjAxNy4xNTUtLjA0Ny4xNDMtLjA3NS4xMjYtLjEuMTA2LS4xMjEuMDgyLS4xNC4wNTQtLjE1MS4wMjUtLjE2LS4wMDUtLjE2LS4wMzUtLjE1OC0uMDUtLjEyNC0uMDQ4LS4wOTUtLjAwMi0uMDA0LS4wMDItLjAwNC0uMDczLS4xNC0uMDAyLS4wMDUtLjAwMi0uMDA0LS4wNzQtLjE0LS4wMDItLjAwNC0uMDAyLS4wMDQtLjA3Ni0uMTQtLjAwMi0uMDAzLS4wMDItLjAwNC0uMDc3LS4xMzktLjAwMy0uMDA0LS4wMDItLjAwNC0uMDc4LS4xMzgtLjAwMy0uMDA0LS4wMDItLjAwMy0uMDgtLjEzNy0uMDAyLS4wMDQtLjAwMy0uMDA0LS4wODEtLjEzNi0uMDAyLS4wMDQtLjAwMy0uMDA0LS4wODMtLjEzNi0uMDAyLS4wMDMtLjAwMi0uMDA0LS4wODUtLjEzNS0uMDAyLS4wMDQtLjAwMy0uMDAzLS4wODUtLjEzNC0uMDAzLS4wMDQtLjAwMi0uMDA0LS4wODctLjEzMi0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wODgtLjEzMi0uMDAzLS4wMDMtLjAwMi0uMDA0LS4wOS0uMTMtLjAwMy0uMDA1LS4wMDMtLjAwMy0uMDkxLS4xMy0uMDAzLS4wMDQtLjAwMi0uMDA0LS4wOTMtLjEyOS0uMDAzLS4wMDMtLjAwMy0uMDA0LS4wOTQtLjEyOC0uMDAzLS4wMDQtLjAwMy0uMDAzLS4wOTUtLjEyNy0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOTctLjEyNS0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOS0uMTE0LS4wNi0uMDgyLS4wMDMtLjAwMy0uMDAyLS4wMDMtLjA2OS0uMDkxLS4wMDItLjAwNC0uMDAyLS4wMDMtLjA3LS4wOS0uMDAzLS4wMDMtLjAwMi0uMDAzLS4wNy0uMDktLjAwMy0uMDAzLS4wMDItLjAwMy0uMDcxLS4wOS0uMDAyLS4wMDMtLjAwMy0uMDAyLS4wNzItLjA4OS0uMDAyLS4wMDMtLjAwMi0uMDAzLS4wNzMtLjA4OC0uMDAyLS4wMDMtLjAwMi0uMDAyLS4wNzQtLjA4Ny0uMDAyLS4wMDMtLjAwMi0uMDAzLS4wNzQtLjA4Ni0uMDAzLS4wMDMtLjAwMi0uMDAzLS4wNzQtLjA4Ni0uMDAzLS4wMDItLjAwMi0uMDAzLS4wNzUtLjA4NS0uMDAzLS4wMDMtLjAwMi0uMDAyLS4wNzYtLjA4NC0uMDAyLS4wMDMtLjAwMy0uMDAzLS4wNzYtLjA4My0uMDAyLS4wMDMtLjAwMy0uMDAzLS4wNzctLjA4Mi0uMDAyLS4wMDMtLjAwMy0uMDAyLS4wNzctLjA4Mi0uMDAzLS4wMDMtLjAwMy0uMDAyLS4wNzgtLjA4MS0uMDAyLS4wMDMtLjAwMy0uMDAzLS4wNzgtLjA4LS4wMDMtLjAwMi0uMDAzLS4wMDMtLjA3OS0uMDgtLjAwMi0uMDAyLS4wMDMtLjAwMi0uMDgtLjA4LS4wMDItLjAwMi0uMDAzLS4wMDItLjA4LS4wNzgtLjAwMy0uMDAzLS4wMDMtLjAwMi0uMDgtLjA3Ny0uMDAzLS4wMDMtLjAwMy0uMDAyLS4wODItLjA3Ny0uMDAyLS4wMDItLjAwMy0uMDAyLS4wODItLjA3Ni0uMDAzLS4wMDItLjAwMi0uMDAzLS4wODMtLjA3NS0uMDAzLS4wMDItLjAwMi0uMDAzLS4wODQtLjA3NC0uMDAyLS4wMDItLjAwMy0uMDAyLS4wODQtLjA3NC0uMDAzLS4wMDItLjAwMi0uMDAyLS4wODUtLjA3My0uMDAyLS4wMDItLjAwMy0uMDAzLS4wODUtLjA3MS0uMDAzLS4wMDMtLjAwMi0uMDAyLS4wODYtLjA3LS4wMDMtLjAwMy0uMDAyLS4wMDItLjA4Ni0uMDctLjAwMy0uMDAzLS4wMDMtLjAwMi0uMDg2LS4wNy0uMDAzLS4wMDItLjAwMy0uMDAyLS4wODctLjA2OS0uMDAyLS4wMDItLjAwMy0uMDAyLS4wODgtLjA2OC0uMDAyLS4wMDItLjAwMy0uMDAyLS4wODgtLjA2Ny0uMDAzLS4wMDMtLjAwMy0uMDAyLS4wODgtLjA2Ni0uMDAzLS4wMDItLjAwMy0uMDAyLS4wODktLjA2Ni0uMDAzLS4wMDItLjAwMy0uMDAyLS4wNTctLjA0Mi0uMTQtLjA4Mi0uMTUtLjA1NS0uMTYtLjAyNi0uMTYuMDA0ek02LjM3NyAzLjIxbC0uMTU3LjAzNy0uMTQ4LjA2Ni0uMTExLjA3NC0uMDA3LjAwNi0uMDAzLjAwMi0uMDAzLjAwMi0uMDg2LjA2OS0uMDAzLjAwMi0uMDAyLjAwMi0uMDg2LjA3LS4wMDMuMDAyLS4wMDIuMDAyLS4wODYuMDctLjAwMi4wMDMtLjAwMy4wMDItLjA4NS4wNzEtLjAwMi4wMDItLjAwMy4wMDMtLjA4NC4wNzEtLjAwMy4wMDMtLjAwMi4wMDItLjA4NC4wNzItLjAwMy4wMDMtLjAwMi4wMDItLjA4My4wNzMtLjAwMy4wMDMtLjAwMi4wMDItLjA4My4wNzQtLjAwMi4wMDItLjAwMy4wMDMtLjA4Mi4wNzQtLjAwMy4wMDMtLjAwMi4wMDItLjA4MS4wNzYtLjAwMy4wMDItLjAwMy4wMDItLjA4LjA3Ny0uMDAzLjAwMi0uMDAzLjAwMy0uMDguMDc2LS4wMDIuMDAzLS4wMDMuMDAyLS4wOC4wNzgtLjAwMi4wMDItLjAwMy4wMDMtLjA3OS4wNzgtLjAwMi4wMDMtLjAwMy4wMDItLjA3OC4wOC0uMDAzLjAwMi0uMDAyLjAwMi0uMDc4LjA4LS4wMDIuMDAzLS4wMDMuMDAyLS4wNzcuMDgtLjAwMy4wMDQtLjAwMi4wMDItLjA3Ny4wODEtLjAwMi4wMDMtLjAwMy4wMDMtLjA3Ni4wODItLjAwMi4wMDItLjAwMy4wMDMtLjA3NS4wODItLjAwMi4wMDMtLjAwMy4wMDMtLjA3NC4wODMtLjAwMy4wMDMtLjAwMi4wMDMtLjA3NC4wODQtLjAwMy4wMDMtLjAwMi4wMDItLjA3NC4wODUtLjAwMi4wMDMtLjAwMi4wMDMtLjA3My4wODUtLjAwMy4wMDMtLjAwMi4wMDMtLjA3Mi4wODYtLjAwMi4wMDMtLjAwMy4wMDMtLjA3MS4wODctLjAwMy4wMDMtLjAwMi4wMDItLjA3LjA4OC0uMDAzLjAwMy0uMDAyLjAwMy0uMDcuMDg4LS4wMDMuMDAzLS4wMDIuMDAzLS4wNy4wOS0uMDAyLjAwMi0uMDAyLjAwMy0uMDY5LjA5LS4wMDIuMDAzLS4wMDMuMDAzLS4wNjguMDktLjAwMi4wMDMtLjAwMi4wMDMtLjA2Ny4wOTItLjAwMy4wMDMtLjAwMi4wMDMtLjA2Ny4wOTItLjAwMi4wMDMtLjAwMi4wMDMtLjA2Ni4wOTItLjAwMi4wMDMtLjAwMi4wMDQtLjA2Ni4wOTMtLjAwMi4wMDMtLjAwMi4wMDMtLjA2NS4wOTQtLjAwMi4wMDMtLjAwMi4wMDQtLjA2NC4wOTQtLjAwMi4wMDMtLjAwMi4wMDQtLjA2My4wOTUtLjAwMi4wMDMtLjAwMi4wMDMtLjA2My4wOTctLjAwMi4wMDMtLjAwMi4wMDMtLjA0Ni4wNzMtLjA1LjA3LS4wMDMuMDAyLS4wMDIuMDAzLS4wNjcuMDkzLS4wMDMuMDAzLS4wMDIuMDAzLS4wNjYuMDk0LS4wMDIuMDAzLS4wMDIuMDAzLS4wNjYuMDk0LS4wMDIuMDAzLS4wMDIuMDAzLS4wNjQuMDk0LS4wMDIuMDA0LS4wMDIuMDAzLS4wNjQuMDk0LS4wMDIuMDA0LS4wMDIuMDAzLS4wNjIuMDk1LS4wMDIuMDAzLS4wMDIuMDAzLS4wNjIuMDk2LS4wMDIuMDAzLS4wMDIuMDAzLS4wNi4wOTYtLjAwMy4wMDMtLjAwMi4wMDMtLjA2LjA5Ni0uMDAxLjAwNC0uMDAyLjAwMy0uMDU5LjA5Ni0uMDAyLjAwNC0uMDAyLjAwMy0uMDU4LjA5Ny0uMDAyLjAwMy0uMDAxLjAwMy0uMDU3LjA5OC0uMDAyLjAwMy0uMDAyLjAwMy0uMDU2LjA5OC0uMDAyLjAwMy0uMDAyLjAwMy0uMDU1LjA5OC0uMDAyLjAwNC0uMDAxLjAwMy0uMDU1LjA5OC0uMDAxLjAwNC0uMDAyLjAwMy0uMDU0LjA5OS0uMDAxLjAwMy0uMDAyLjAwMy0uMDUyLjEtLjAwMi4wMDItLjAwMi4wMDQtLjA1MS4xLS4wMDIuMDAyLS4wMDIuMDA0LS4wNS4xLS4wMDIuMDAzLS4wMDIuMDAzLS4wNS4xdi4wMDNsLS4wMDIuMDA0LS4wNS4xdi4wMDNsLS4wMDIuMDA0LS4wNDguMS0uMDAyLjAwNC0uMDAxLjAwMy0uMDQ3LjEwMS0uMDAyLjAwMy0uMDAxLjAwNC0uMDEzLjAyNy0uMDUyLjE1Mi0uMDI0LjE2LjAwNi4xNi4wMzcuMTU3LjA2NC4xNDguMDkxLjEzMy4xMTQuMTE0LjEzNC4wOS4xNDcuMDY1LjE1Ny4wMzYuMTYyLjAwNi4xNTktLjAyNC4xNTItLjA1My4xNC0uMDguMTIyLS4xMDUuMS0uMTI2LjA2Ni0uMTE3LjAxLS4wMjMuMDQ0LS4wOTUuMDQ1LS4wOTUuMDAyLS4wMDMuMDQyLS4wODcuMDQ4LS4wOTcuMDQ4LS4wOTV2LS4wMDFsLjA0OC0uMDkyLjAwMS0uMDAxLjA0Ny0uMDkuMDUtLjA5My4wMDItLjAwMi4wNDktLjA5LjA1Mi0uMDkyLjAwMS0uMDAyLjA1MS0uMDg5LjAwMS0uMDAyLjA1MS0uMDg3LjA1My0uMDg4LjAwMS0uMDAyLjA1NS0uMDkxLjA1Ny0uMDkxLjA1Ny0uMDkuMDAxLS4wMDIuMDU3LS4wODkuMDU1LS4wODMuMDAxLS4wMDIuMDYtLjA5LjA2LS4wODguMDYyLS4wODkuMDAxLS4wMDEuMDYtLjA4NC4wNjMtLjA4OC4wNjUtLjA4OS4wMTctLjAyMy4wMTYtLjAyNS4wNi0uMDk0LjA1OS0uMDl2LS4wMDJsLjA1OC0uMDg2LjA1Ny0uMDg2LjAwMS0uMDAxLjA2Mi0uMDkuMDYyLS4wODguMDAxLS4wMDIuMDYtLjA4NS4wMDItLjAwMi4wNi0uMDgyLjA2My0uMDg3LjA2NC0uMDg0LjAwMi0uMDAyLjA2MS0uMDguMDY1LS4wODQuMDY0LS4wOHYtLjAwMWwuMDY3LS4wODMuMDY3LS4wODIuMDctLjA4My4wNjktLjA4LjA2My0uMDc0LjA3NC0uMDgzLjA2OC0uMDc3LjAwMi0uMDAyLjA3LS4wNzYuMDctLjA3NS4wNzItLjA3Ny4wMDEtLjAwMS4wNjctLjA3LjA3Ni0uMDc4LjAwMi0uMDAyLjA3LS4wNy4wNzUtLjA3NS4wMDItLjAwMi4wNzItLjA3LjA3NS0uMDcyLjAwMi0uMDAyLjA3My0uMDY5LjA3NC0uMDY4LjAwMS0uMDAxLjA4LS4wNzMuMDc2LS4wNjguMDAyLS4wMDIuMDcyLS4wNjN2LS4wMDFsLjA3OC0uMDY3LjA3OS0uMDY4LjAwMi0uMDAxLjA4LS4wNjguMDAyLS4wMDIuMDc3LS4wNjMuMDgyLS4wNjYuMDAxLS4wMDEuMDc1LS4wNi4wMDItLjAwMi4wMDYtLjAwNC4xMTctLjExMS4wOTQtLjEzMS4wNjgtLjE0Ni4wNC0uMTU2LjAxLS4xNjEtLjAxOS0uMTYtLjA0OS0uMTU0LS4wNzYtLjE0MS0uMTAyLS4xMjUtLjEyMy0uMTA1LS4xNC0uMDc5LS4xNTMtLjA1Mi0uMTYtLjAyMy0uMTYuMDA3em0yNC41OTYgMTEuMDg4bC0uMTU2LjA0LS4xNDYuMDY3LS4xMzEuMDk0LS4xMTIuMTE3LS4wODcuMTM1LS4wNjEuMTUtLjAzMy4xNTctLjAwNC4xMzQuMDA3LjE0Mi4wMDUuMTUyLjAwNC4xNS4wMDIuMTQ5di4xNTNsLjAwMS4wMTF2LjAxNWwuMDA0LjExLjAwMi4xMXYuMDAybC4wMDIuMTA2di4zMjFsLS4wMDMuMTAyLS4wMDIuMTA2LS4wMDQuMTA3LS4wMDUuMTA1LS4wMDYuMTA2LS4wMDYuMTA2LS4wMDguMTA2di4wMDJsLS4wMDguMTAzdi4wMDJsLS4wMS4xLS4wMS4xMDUtLjAxLjEwNS0uMDEzLjEwNS0uMDEyLjA5OXYuMDAybC0uMDE0LjEwOC0uMDE0LjEtLjAxNi4xMDUtLjAxNi4xMDN2LjAwMmwtLjAxNy4wOTktLjAxOC4xMDQtLjAxOS4xMDN2LjAwMmwtLjAxOS4wOTctLjAyLjEwNC0uMDIyLjEwM3YuMDAxbC0uMDIyLjA5OC0uMDIzLjEwM3YuMDAybC0uMDI0LjA5Ni0uMDI1LjEwM3YuMDAybC0uMDI0LjA5Ni0uMDI3LjEwMnYuMDAzbC0uMDI2LjA5M3YuMDAxbC0uMDI5LjEwM3YuMDAybC0uMDMuMDk5LS4wMjguMDk3di4wMDJsLS4wMy4wOTUtLjAzLjA5NnYuMDAxbC0uMDMzLjEtLjAzMS4wOTV2LjAwMmwtLjAzNS4xdi4wMDNsLS4wMzQuMDk0di4wMDNsLS4wMzUuMDk2di4wMDFsLS4wMzQuMDl2LjAwMmwtLjAzOC4wOTgtLjAzNi4wOTN2LjAwMmwtLjAzOC4wOTUtLjA3OS4xOTQtLjA4LjE4OC0uMDg1LjE4OS0uMDg3LjE5LS4wOS4xODQtLjA5Mi4xODMtLjA5NS4xODQtLjA1LjA5My0uMDY0LjE0OC0uMDM0LjE1OC0uMDA1LjE2LjAyNi4xNi4wNTQuMTUxLjA4Mi4xNC4xMDYuMTIuMTI3LjEuMTQzLjA3NS4xNTQuMDQ2LjE2LjAxNy4xNjEtLjAxMy4xNTYtLjA0Mi4xNDQtLjA3MS4xMy0uMDk2LjEwOS0uMTE5LjA3Mi0uMTEyLjA1My0uMDk5LjAwMy0uMDA1LjAwMy0uMDA2LjEwMi0uMTk1LjAwMy0uMDA2LjAwMy0uMDA2LjA5OC0uMTk2LjAwMy0uMDA2LjAwMy0uMDA2LjA5Ni0uMTk3LjAwMi0uMDA2LjAwMy0uMDA2LjA5My0uMi4wMDItLjAwNi4wMDMtLjAwNi4wOS0uMi4wMDItLjAwNi4wMDMtLjAwNy4wODYtLjIwMi4wMDMtLjAwNi4wMDItLjAwNi4wODQtLjIwMy4wMDItLjAwNS4wMDEtLjAwNS4wNC0uMTAyLjAwMi0uMDAzLjAwMS0uMDAzLjA0LS4xMDMuMDAxLS4wMDMuMDAxLS4wMDMuMDQtLjEwM3YtLjAwNGwuMDAxLS4wMDMuMDM5LS4xMDN2LS4wMDNsLjAwMi0uMDAzLjAzNy0uMTA0LjAwMS0uMDAzLjAwMS0uMDAzLjAzNy0uMTA0di0uMDA0bC4wMDItLjAwMy4wMzUtLjEwNC4wMDItLjAwM3YtLjAwNGwuMDM1LS4xMDQuMDAyLS4wMDR2LS4wMDNsLjAzNC0uMTA1LjAwMi0uMDAzdi0uMDAzbC4wMzQtLjEwNXYtLjAwNGwuMDAyLS4wMDMuMDMyLS4xMDYuMDAxLS4wMDMuMDAxLS4wMDMuMDMxLS4xMDYuMDAxLS4wMDMuMDAxLS4wMDQuMDMxLS4xMDYuMDAxLS4wMDMuMDAxLS4wMDQuMDMtLjEwNnYtLjAwM2wuMDAyLS4wMDQuMDI4LS4xMDcuMDAxLS4wMDMuMDAxLS4wMDMuMDI4LS4xMDcuMDAxLS4wMDQuMDAxLS4wMDMuMDI3LS4xMDcuMDAxLS4wMDR2LS4wMDNsLjAyNy0uMTA4LjAwMS0uMDAzdi0uMDA0bC4wMjYtLjEwOC4wMDEtLjAwM3YtLjAwNGwuMDI1LS4xMDguMDAxLS4wMDN2LS4wMDRsLjAyNS0uMTA4di0uMDA0bC4wMDEtLjAwMy4wMjMtLjEwOXYtLjAwM2wuMDAxLS4wMDQuMDIyLS4xMDl2LS4wMDNsLjAwMi0uMDA0LjAyLS4xMDkuMDAxLS4wMDR2LS4wMDNsLjAyLS4xMS4wMDItLjAwM3YtLjAwNGwuMDItLjExdi0uMDA3bC4wMTktLjExdi0uMDAzbC4wMDEtLjAwNC4wMTctLjExdi0uMDA0bC4wMDEtLjAwMy4wMTctLjExdi0uMDA4bC4wMTYtLjExdi0uMDA0bC4wMDEtLjAwNC4wMTUtLjExdi0uMDA4bC4wMTUtLjExMXYtLjAwOGwuMDEzLS4xMTF2LS4wMDdsLjAxMy0uMTEydi0uMDA3bC4wMTEtLjExMnYtLjAwNGwuMDAxLS4wMDQuMDEtLjExMnYtLjAwN2wuMDEtLjExMnYtLjAwOGwuMDA4LS4xMTJ2LS4wMDhsLjAwNy0uMTEzdi0uMDA3bC4wMDctLjExM3YtLjAwOGwuMDA1LS4xMTN2LS4wMDdsLjAwNS0uMTE0di0uMDA3bC4wMDMtLjExNHYtLjAwN2wuMDAzLS4xMTR2LS4xMjlsLjAwMS0uMTE0di0uMTNsLS4wMDMtLjExNHYtLjAwOGwtLjAwMy0uMTE1di0uMDA3bC0uMDAzLS4xMDJ2LS4xNTVsLS4wMDMtLjE1OHYtLjAxbC0uMDA0LS4xNTh2LS4wMWwtLjAwNi0uMTU4di0uMDFsLS4wMDctLjE0OC0uMDIzLS4xNi0uMDUxLS4xNTItLjA4LS4xNC0uMTAzLS4xMjQtLjEyNS0uMTAyLS4xNDItLjA3Ny0uMTUzLS4wNS0uMTYtLjAyLS4xNjEuMDF6bS0zMC4yMTMuNjZsLS4xNTcuMDM0LS4xNDkuMDYzLS4xMzQuMDktLjExNS4xMTMtLjA5Mi4xMzItLjA2Ny4xNDctLjAzNy4xNTYtLjAwOS4xMzQuMDAxLjExVjE1Ljk1bC4wMDYuMjJ2LjAxMmwuMDEuMjJ2LjAxMmwuMDEyLjIydi4wMDZsLjAwMS4wMDYuMDE1LjIydi4wMDVsLjAwMS4wMDYuMDE4LjIyLjAwMS4wMDZ2LjAwNmwuMDIyLjIxOXYuMDA2bC4wMDEuMDA2LjAyNC4yMTkuMDAxLjAwNnYuMDA2bC4wMjguMjE4LjAwMS4wMDZ2LjAwNmwuMDMxLjIxOC4wMDEuMDA2LjAwMS4wMDYuMDMzLjIxOC4wMDEuMDA2LjAwMS4wMDUuMDM3LjIxOHYuMDA2bC4wMDIuMDA1LjA0LjIxN3YuMDA2bC4wMDEuMDA2LjA0My4yMTYuMDAxLjAwNi4wMDEuMDA2LjA0Ni4yMTZ2LjAwNWwuMDAyLjAwNi4wNDguMjE1LjAwMi4wMDYuMDAxLjAwNi4wNTEuMjE0LjAwMi4wMDZ2LjAwNmwuMDU1LjIxNC4wMDIuMDA1LjAwMS4wMDYuMDU3LjIxMy4wMDIuMDA2LjAwMS4wMDUuMDYuMjEzLjAwMi4wMDUuMDAxLjAwNi4wNjMuMjEyLjAwMi4wMDUuMDAxLjAwNi4wNjYuMjEuMDAyLjAwNi4wMDIuMDA2LjA2OC4yMS4wMDIuMDA1LjAwMi4wMDUuMDcuMjEuMDAzLjAwNS4wMDIuMDA1LjA3NC4yMDguMDAyLjAwNi4wMDIuMDA1LjA3Ny4yMDcuMDAyLjAwNi4wMDIuMDA1LjA4LjIwNi4wMDIuMDA1LjAwMi4wMDYuMDgyLjIwNC4wMDIuMDA2LjAwMi4wMDUuMDg2LjIwNC4wMDIuMDA1LjAwMi4wMDYuMDg4LjIwMi4wMDIuMDA1LjAwMy4wMDYuMDkuMi4wMDMuMDA2LjAwMi4wMDUuMDk0LjIuMDAyLjAwNi4wMDMuMDA1LjA5Ni4xOTkuMDAyLjAwNS4wMDMuMDA1LjAzLjA2Mi4wODYuMTM3LjExLjExOC4xMjguMDk3LjE0NS4wNy4xNTYuMDQzLjE2LjAxMy4xNi0uMDE3LjE1NS0uMDQ3LjE0My0uMDc0LjEyNy0uMS4xMDYtLjEyMS4wODEtLjE0LjA1NS0uMTUuMDI1LS4xNi0uMDA1LS4xNjEtLjAzNC0uMTU4LS4wNS0uMTI0LS4wMjgtLjA1NS0uMDkyLS4xOS0uMDg3LS4xODgtLjA4Ny0uMTkyLS4wODMtLjE5LS4wOC0uMTkzLS4wNzgtLjE5NC0uMDc2LS4xOTYtLjA3My0uMTk1LS4wNy0uMTk3LS4wNjctLjE5OC0uMDY1LS4xOTktLjA2My0uMi0uMDU5LS4yLS4wNTYtLjItLjA1NS0uMjA0LS4wNS0uMjAxLS4wNDktLjIwMi0uMDQ2LS4yMDUtLjA0My0uMjA2LS4wNC0uMjAzLS4wMzgtLjIwNy0uMDM0LS4yMDQtLjAzMi0uMjA3LS4wMjgtLjIwNS0uMDI2LS4yMDctLjAyMy0uMjA4LS4wMi0uMjA3LS4wMTgtLjIwNy0uMDE0LS4yMDgtLjAxMS0uMjA3LS4wMDktLjIwOC0uMDA1LS4yMDctLjAwMi0uMTA0LS4wMTctLjE2LS4wNDYtLjE1NS0uMDc0LS4xNDMtLjEtLjEyNi0uMTIxLS4xMDctLjEzOS0uMDgxLS4xNTItLjA1NS0uMTU5LS4wMjUtLjE2MS4wMDR6bTI0LjU4NSAxMS44M2wtLjE1Ni4wMzktLjE0Ni4wNjgtLjExLjA3Ni0uMDE1LjAxMi0uMTYzLjEyOS0uMTY2LjEyNy0uMTY4LjEyNS0uMTcuMTI0LS4xNy4xMi0uMTcyLjExOC0uMTczLjExNS0uMTc2LjExNC0uMTc3LjExMS0uMTguMTEtLjE3OC4xMDUtLjE4Mi4xMDQtLjE4Mi4xMDEtLjE4NC4xLS4xODQuMDk1LS4xODkuMDk1LS4xODYuMDktLjE4OC4wODktLjE5LjA4Ni0uMTkuMDgyLS4xOTMuMDgxLS4xOTUuMDc4LS4xOTEuMDc0LS4xOTcuMDczLS4xOTUuMDctLjE5Ni4wNjUtLjE5OC4wNjQtLjE5OC4wNjEtLjIuMDU4LS4yLjA1NS0uMi4wNTItLjIuMDQ5LS4xNTEuMDM1LS4xNTMuMDUtLjE0MS4wNzgtLjEyNS4xMDMtLjEwMy4xMjQtLjA3OC4xNC0uMDUuMTU0LS4wMjIuMTYuMDA5LjE2LjAzOC4xNTcuMDY3LjE0Ny4wOTMuMTMyLjExNi4xMTIuMTM0LjA4OS4xNDkuMDYyLjE1OC4wMzQuMTYuMDAzLjEzMy0uMDIuMTU4LS4wMzUuMDA2LS4wMDIuMDA2LS4wMDEuMjEzLS4wNTIuMDA2LS4wMDIuMDA3LS4wMDEuMjEyLS4wNTYuMDA2LS4wMDEuMDA2LS4wMDIuMjEyLS4wNTguMDA2LS4wMDIuMDA2LS4wMDIuMjExLS4wNjEuMDA2LS4wMDIuMDA2LS4wMDIuMjEtLjA2NC4wMDYtLjAwMi4wMDYtLjAwMi4yMS0uMDY3LjAwNS0uMDAyLjAwNi0uMDAyLjIwOC0uMDcuMDA2LS4wMDIuMDA2LS4wMDMuMjA3LS4wNzMuMDA2LS4wMDIuMDA2LS4wMDIuMjA2LS4wNzcuMDA2LS4wMDIuMDA1LS4wMDIuMjA2LS4wOC4wMDUtLjAwMS4wMDYtLjAwMy4yMDQtLjA4Mi4wMDYtLjAwMi4wMDUtLjAwMi4yMDMtLjA4NS4wMDYtLjAwMy4wMDUtLjAwMi4yMDItLjA4OC4wMDYtLjAwMi4wMDUtLjAwMy4yLS4wOS4wMDYtLjAwMy4wMDYtLjAwMy4yLS4wOTMuMDA1LS4wMDMuMDA1LS4wMDIuMTk4LS4wOTYuMDA2LS4wMDMuMDA1LS4wMDMuMTk3LS4wOTkuMDA1LS4wMDIuMDA1LS4wMDMuMTk2LS4xMDIuMDA1LS4wMDIuMDA1LS4wMDMuMTk1LS4xMDUuMDA1LS4wMDIuMDA1LS4wMDMuMTkzLS4xMDcuMDA1LS4wMDMuMDA1LS4wMDMuMTkxLS4xMS4wMDUtLjAwMy4wMDUtLjAwMy4xOS0uMTEyLjAwNS0uMDAzLjAwNS0uMDAzLjE4OS0uMTE1LjAwNS0uMDAzLjAwNS0uMDAzLjE4Ny0uMTE3LjAwNS0uMDAzLjAwNC0uMDA0LjE4Ni0uMTIuMDA1LS4wMDMuMDA0LS4wMDMuMTg0LS4xMjIuMDA1LS4wMDMuMDA1LS4wMDQuMTgyLS4xMjUuMDA0LS4wMDMuMDA1LS4wMDMuMTgtLjEyOC4wMDUtLjAwMy4wMDUtLjAwMy4xNzktLjEzLjAwNC0uMDAzLjAwNS0uMDA0LjE3Ny0uMTMyLjAwNC0uMDA0LjAwNS0uMDAzLjE3NS0uMTM1LjAwNS0uMDAzLjAwNC0uMDA0LjE3My0uMTM3LjAwNS0uMDAzLjAwNC0uMDA0LjAxOS0uMDE1LjExNS0uMTEzLjA5Mi0uMTMyLjA2Ni0uMTQ3LjAzOC0uMTU3LjAwOC0uMTYtLjAyMi0uMTYtLjA1Mi0uMTUzLS4wNzktLjE0LS4xMDMtLjEyNC0uMTI1LS4xMDItLjE0Mi0uMDc4LS4xNTMtLjA1LS4xNi0uMDItLjE2LjAxem0tMTkuMTcuMDU0bC0uMTUzLjA1MS0uMTQuMDc5LS4xMjQuMTAzLS4xMDMuMTI1LS4wNzcuMTQxLS4wNS4xNTMtLjAyLjE2LjAwOS4xNjEuMDQuMTU2LjA2Ny4xNDcuMDkzLjEzMS4wOTUuMDk0LjA0Ny4wNC4wMDUuMDA0LjAwNS4wMDQuMTcuMTQuMDA1LjAwNC4wMDUuMDA0LjE3Mi4xMzcuMDA0LjAwNC4wMDUuMDAzLjA4Ni4wNjcuMDAzLjAwMi4wMDMuMDAyLjA4Ny4wNjcuMDAzLjAwMi4wMDMuMDAyLjA4OC4wNjYuMDAyLjAwMy4wMDMuMDAyLjA4OS4wNjUuMDAyLjAwMi4wMDMuMDAyLjA5LjA2NS4wMDIuMDAyLjAwMy4wMDIuMDkuMDY0LjAwMi4wMDIuMDAzLjAwMi4wOS4wNjMuMDAzLjAwMi4wMDMuMDAyLjA5LjA2My4wMDMuMDAyLjAwMy4wMDIuMDkyLjA2Mi4wMDIuMDAyLjAwMy4wMDIuMDkyLjA2MS4wMDMuMDAyLjAwMy4wMDIuMDkyLjA2LjAwMy4wMDMuMDAzLjAwMS4wOTMuMDYuMDAzLjAwMi4wMDMuMDAyLjA5My4wNi4wMDMuMDAxLjAwMy4wMDIuMDk0LjA1OC4wMDMuMDAyLjAwMy4wMDIuMDk1LjA1OC4wMDMuMDAxLjAwMy4wMDIuMDk1LjA1Ny4wMDMuMDAyLjAwMy4wMDIuMDk1LjA1Ni4wMDMuMDAyLjAwMy4wMDIuMDk2LjA1NS4wMDQuMDAyLjAwMy4wMDEuMDk2LjA1NS4wMDMuMDAyLjAwMy4wMDIuMDk4LjA1My4wMDMuMDAyLjAwMy4wMDIuMDk3LjA1My4wMDQuMDAyLjAwMy4wMDEuMDk4LjA1My4wMDMuMDAxLjAwMy4wMDIuMDk5LjA1Mi4wMDMuMDAxLjAwMy4wMDIuMS4wNS4wMDMuMDAyLjAwMy4wMDIuMS4wNS4wMDMuMDAyLjAwMy4wMDEuMS4wNWguMDAzbC4wMDQuMDAzLjEuMDQ4LjAwNC4wMDEuMDAzLjAwMi4xMDEuMDQ4LjAwMy4wMDEuMDA0LjAwMi4xMDEuMDQ2LjAwNC4wMDIuMDAzLjAwMS4xMDIuMDQ2LjAwNC4wMDIuMDAzLjAwMS4xMDMuMDQ1LjAwMy4wMDIuMDAzLjAwMS4xMDMuMDQ1LjAwNC4wMDEuMDAzLjAwMi4xMDQuMDQzLjAwMy4wMDEuMDA0LjAwMi4xMDQuMDQyLjAwMy4wMDIuMDA0LjAwMS4xMDQuMDQyLjAwNC4wMDEuMDAzLjAwMi4xMDUuMDQuMDA0LjAwMi4wMDMuMDAxLjEwNi4wNC4wMDMuMDAyaC4wMDRsLjEwNi4wNC4wMDQuMDAxLjAwMy4wMDIuMTA3LjAzOC4wMDMuMDAxLjAwNC4wMDEuMTA3LjAzOC4wMDMuMDAxLjAwNC4wMDEuMTA3LjAzNy4wMDQuMDAxLjAwNC4wMDEuMTA4LjAzNi4wMDMuMDAxLjAwNC4wMDEuMTA4LjAzNS4wMDQuMDAxLjAwMy4wMDEuMTEuMDM0LjAwMy4wMDEuMDA0LjAwMS4xMDkuMDMzLjAwNC4wMDJoLjAwM2wuMTEuMDMzaC4wMDRsLjAwMy4wMDIuMTEuMDMxLjAwNC4wMDEuMDA0LjAwMS4wODQuMDIzLjA4MS4wMjguMDA0LjAwMS4wMDMuMDAxLjEwOS4wMzcuMDAzLjAwMS4wMDQuMDAxLjEwOS4wMzYuMDAzLjAwMS4wMDQuMDAxLjEwOS4wMzVoLjAwM2wuMDA0LjAwMi4xMS4wMzMuMDAzLjAwMS4wMDMuMDAxLjExLjAzMy4wMDMuMDAxLjAwNC4wMDEuMTA5LjAzMS4wMDQuMDAyaC4wMDNsLjExLjAzMS4wMDMuMDAxLjAwNC4wMDEuMTEuMDNoLjAwM2wuMDAzLjAwMS4xMS4wMjloLjAwNGwuMDAzLjAwMi4xMS4wMjcuMDAzLjAwMS4wMDQuMDAxLjExLjAyN2guMDAzbC4wMDQuMDAxLjAwNC4wMDEuMTYuMDIyLjE2LS4wMDguMTU3LS4wMzguMTQ3LS4wNjcuMTMyLS4wOTIuMTEyLS4xMTYuMDktLjEzNC4wNjItLjE0OS4wMzQtLjE1Ny4wMDQtLjE2MS0uMDI1LS4xNi0uMDU1LS4xNTEtLjA4Mi0uMTM5LS4xMDctLjEyLS4xMjctLjEtLjE0My0uMDc0LS4xMjQtLjA0aC0uMDAzbC0uMTA0LS4wMjUtLjEwMy0uMDI2aC0uMDAybC0uMDk1LS4wMjZoLS4wMDFsLS4xMDEtLjAyN2gtLjAwMmwtLjEtLjAyOGgtLjAwMmwtLjEwMy0uMDMtLjEwNC0uMDMyLS4wOTctLjAzaC0uMDAybC0uMTAzLS4wMzMtLjEwMi0uMDMzLS4xMDEtLjAzNC0uMTA2LS4wMzYtLjAyNy0uMDEtLjAyNy0uMDA3LS4xMDctLjAzLS4xMDQtLjAyOS0uMTA0LS4wM2gtLjAwMmwtLjA5Ny0uMDMtLjEwMi0uMDMyLS4xMDItLjAzMi0uMTAyLS4wMzQtLjEwMy0uMDM1LS4wOTYtLjAzNC0uMS0uMDM2LS4xMDEtLjAzN2gtLjAwMmwtLjA5NC0uMDM2LS4wOTYtLjAzNy0uMDk3LS4wNGgtLjAwMmwtLjA5OS0uMDQtLjA5OC0uMDQyaC0uMDAybC0uMDkyLS4wNC0uMDk3LS4wNDMtLjA5NS0uMDQzLS4wOTctLjA0NGgtLjAwMmwtLjA5LS4wNDMtLjA5NC0uMDQ1LS4wOTQtLjA0Ni0uMDkzLS4wNDctLjA5LS4wNDYtLjA5Ni0uMDUtLjA4OC0uMDQ3LS4wMDItLjAwMS0uMDktLjA0OS0uMDk0LS4wNTItLjAwMi0uMDAyLS4wODctLjA0OS0uMDg3LS4wNWgtLjAwMmwtLjA4OC0uMDUzaC0uMDAxbC0uMDktLjA1NS0uMDg2LS4wNTItLjAwMi0uMDAxLS4wODktLjA1NS0uMDg0LS4wNTRoLS4wMDJsLS4wOS0uMDU5aC0uMDAxbC0uMDg1LS4wNTYtLjAwMS0uMDAxLS4wODQtLjA1Ni0uMDgyLS4wNTZoLS4wMDFsLS4wODYtLjA2LS4wODItLjA1OEg3Ljc5bC0uMDg2LS4wNjItLjAwMi0uMDAyLS4wOC0uMDU4LS4wODEtLjA2aC0uMDAxbC0uMDg1LS4wNjQtLjAwMi0uMDAyLS4wNzYtLjA1OC0uMDAyLS4wMDItLjA4Mi0uMDY0LS4xNjEtLjEyOC0uMTYyLS4xMzMtLjA0LS4wMzQtLjEzMi0uMDkyLS4xNDctLjA2Ni0uMTU3LS4wMzgtLjE2LS4wMDgtLjE2LjAyMnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRoKCkgeyByZXR1cm4gX2V4dGVuZHMkaCA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRoLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50Tm9uSW50ZXJydXB0aW5nRXNjYWxhdGlvbkljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJGgoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNiA5LjIwOWMtMS42NzQgNC42NTUtMi43MzUgOS41MDQtNC40MDggMTQuMTYgMS41MzQtMS41MjYgMi44NzMtMy4yMzUgNC40MDctNC43NjFsNC40MDggNC43NmMtMS40OTctNC43MS0yLjkxLTkuNDQ4LTQuNDA4LTE0LjE2em0uMDMxIDIuOTNjLjgyMiAyLjU4NiAxLjU5OCA1LjE4NyAyLjQyIDcuNzc0bC0yLjQyLTIuNjE0Yy0uNjgyLjU5OC0yLjQ1MyAyLjg4Ni0yLjM0IDIuMzg5Ljg3My0yLjQ4OCAxLjQ1LTUuMDY4IDIuMzQtNy41NXpNMTYuMTMyLjM2NGMtMS41MS4wMTYtMy4wNTUuMTM5LTQuNDkyLjYxNC0uODU0LjQ0Mi0uMjY2IDEuODYxLjY1MSAxLjU3OCAyLjI2Ni0uNTggNC42NTYtLjU5NiA2Ljk0NC0uMTQ0LjkzNS4wNjMgMS4yMS0xLjM5MS4zMTgtMS42NzQtMS4xMTgtLjI2LTIuMjc0LS4zNjEtMy40Mi0uMzc0em04Ljg2NSAyLjc3N2MtLjkzMS0uMS0xLjI2MiAxLjI5LS40MjUgMS42NjYgMS44NjMgMS4zNjQgMy4yMjIgMy4yOTggNC4zMjIgNS4yOTYuNjE3LjczNyAxLjg3NS0uMTQ1IDEuMzk4LS45NzktMS4xODQtMi4yNzUtMi44MDgtNC4zODQtNC45MjMtNS44NjZhLjg2My44NjMgMCAwMC0uMzcyLS4xMTd6TTYuNTUgMy41NjRjLS43MzQuMDc4LTEuMTk2Ljc2Mi0xLjczNSAxLjIwNkMzLjU1MiA2LjAyIDIuNTUgNy41MTEgMS42ODEgOS4wNTNjLS4zMS41MzMtLjcxIDEuMzMtLjAzIDEuNzY3LjYxNS40MzIgMS4yODItLjEzMiAxLjQ0Ni0uNzQyLjc5Ni0xLjQ3NSAxLjc0Ni0yLjg5IDIuOTM0LTQuMDguNDMtLjU0OCAxLjI5Mi0uODIyIDEuMzQtMS41OTVhLjg3NC44NzQgMCAwMC0uODIyLS44Mzl6bTI0LjU4MiAxMS4wNzhjLS43NzEtLjAzMy0xLjAwNC44Mi0uODczIDEuNDM3LjEzIDIuMzk1LS40NzEgNC43OTctMS42MTUgNi44OTctLjMzLjg3Ni45ODQgMS41NTkgMS41MTIuNzg1YTE0LjI3NiAxNC4yNzYgMCAwMDEuNzYxLTguNTQuODY1Ljg2NSAwIDAwLS43ODUtLjU3OXptLTMwLjE5NS42NjZjLS43NzQtLjA2LTEuMDMyLjc4NS0uOTA1IDEuNDA3LjExNyAyLjQxLjczMiA0LjgxIDEuODU4IDYuOTQ1LjUyOC43NzQgMS44NC4wOSAxLjUxLS43ODZBMTUuOTMyIDE1LjkzMiAwIDAxMS43MjggMTZhLjg3Ni44NzYgMCAwMC0uNzktLjY5MnptMjQuNTcgMTEuODE3Yy0uNzYyLjA5OS0xLjI0My44MzUtMS45MTkgMS4xNi0xLjUxNCAxLjAwMi0zLjIzNyAxLjYzMi00Ljk3OCAyLjA5Mi0uODY0LjQyMy0uMzA3IDEuODU1LjYxNiAxLjU5MSAyLjUyOC0uNTc4IDQuOTMtMS43NSA2LjkxMy0zLjQyMS40NjktLjUyMi4wNy0xLjQyLS42MzEtMS40MjJ6bS0xOS4xNi4wNDJjLS44NDUuMDAxLTEuMTIgMS4yMjgtLjM5NSAxLjYyOCAxLjY2NSAxLjQwMSAzLjY2NyAyLjM0OCA1Ljc2IDIuOTEyLjYxOC4xNzggMS40ODIuNTY1IDEuODkzLS4xNzcuMzU1LS42MjgtLjIyNi0xLjI5Ny0uODctMS4zMjYtMS45NzItLjUxNS0zLjkxMi0xLjI4NS01LjUtMi41OTQtLjI2LS4yMTMtLjUyMi0uNDcyLS44ODgtLjQ0M3pcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRnKCkgeyByZXR1cm4gX2V4dGVuZHMkZyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRnLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50Tm9uSW50ZXJydXB0aW5nTWVzc2FnZUljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJGcoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk04Ljc0NiAxMC4zOTN2MTEuMDY0aDE0LjUwNlYxMC4zOTNIOC43NDZ6bTMuMjIzIDEuNzI4aDguMDZjLTEuNDI4Ljg3OS0yLjg1NiAyLjgwNy00LjI4MyAzLjAxOGwtMy43NzctMy4wMTh6bTkuNTU3IDEuMDE4djYuNTlIMTAuNDczdi02LjU5bDUuNTI1IDQuNDE2IDUuNTI4LTQuNDE2ek0xNi4xMzIgMGMtMS41MS4wMTYtMy4wNTUuMTM5LTQuNDkyLjYxNC0uODU0LjQ0Mi0uMjY2IDEuODYxLjY1MSAxLjU3OCAyLjI2Ni0uNTggNC42NTYtLjU5NiA2Ljk0NC0uMTQ0LjkzNS4wNjMgMS4yMS0xLjM5MS4zMTgtMS42NzQtMS4xMTgtLjI2LTIuMjc0LS4zNjEtMy40Mi0uMzc0em04Ljg2NSAyLjc3N2MtLjkzMS0uMS0xLjI2MiAxLjI5LS40MjUgMS42NjYgMS44NjMgMS4zNjQgMy4yMjIgMy4yOTggNC4zMjIgNS4yOTYuNjE3LjczNyAxLjg3NS0uMTQ1IDEuMzk4LS45NzktMS4xODQtMi4yNzUtMi44MDgtNC4zODQtNC45MjMtNS44NjZhLjg2My44NjMgMCAwMC0uMzcyLS4xMTd6TTYuNTUgMy4yYy0uNzM0LjA3OC0xLjE5Ni43NjItMS43MzUgMS4yMDZDMy41NTIgNS42NTYgMi41NSA3LjE0NyAxLjY4MSA4LjY5Yy0uMzEuNTMzLS43MSAxLjMzLS4wMyAxLjc2Ny42MTUuNDMyIDEuMjgyLS4xMzIgMS40NDYtLjc0Mi43OTYtMS40NzUgMS43NDYtMi44OSAyLjkzNC00LjA4LjQzLS41NDggMS4yOTItLjgyMiAxLjM0LTEuNTk1YS44NzQuODc0IDAgMDAtLjgyMi0uODM5em0yNC41ODIgMTEuMDc4Yy0uNzcxLS4wMzMtMS4wMDQuODItLjg3MyAxLjQzNy4xMyAyLjM5NS0uNDcxIDQuNzk3LTEuNjE1IDYuODk3LS4zMy44NzYuOTg0IDEuNTU5IDEuNTEyLjc4NWExNC4yNzYgMTQuMjc2IDAgMDAxLjc2MS04LjU0Ljg2NS44NjUgMCAwMC0uNzg1LS41Nzl6bS0zMC4xOTUuNjY2Yy0uNzc0LS4wNi0xLjAzMi43ODUtLjkwNSAxLjQwNy4xMTcgMi40MS43MzIgNC44MSAxLjg1OCA2Ljk0NS41MjguNzc0IDEuODQuMDkgMS41MS0uNzg2YTE1LjkzMiAxNS45MzIgMCAwMS0xLjY3Mi02Ljg3NC44NzYuODc2IDAgMDAtLjc5LS42OTJ6bTI0LjU3IDExLjgxN2MtLjc2Mi4wOTktMS4yNDMuODM1LTEuOTE5IDEuMTYtMS41MTQgMS4wMDItMy4yMzcgMS42MzItNC45NzggMi4wOTItLjg2NC40MjMtLjMwNyAxLjg1NS42MTYgMS41OTEgMi41MjgtLjU3OCA0LjkzLTEuNzUgNi45MTMtMy40MjEuNDY5LS41MjIuMDctMS40Mi0uNjMxLTEuNDIyem0tMTkuMTYuMDQyYy0uODQ1LjAwMS0xLjEyIDEuMjI4LS4zOTUgMS42MjggMS42NjUgMS40MDEgMy42NjcgMi4zNDggNS43NiAyLjkxMi42MTguMTc4IDEuNDgyLjU2NSAxLjg5My0uMTc3LjM1NS0uNjI4LS4yMjYtMS4yOTctLjg3LTEuMzI2LTEuOTcyLS41MTUtMy45MTItMS4yODUtNS41LTIuNTk0LS4yNi0uMjEzLS41MjItLjQ3Mi0uODg4LS40NDN6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkZigpIHsgcmV0dXJuIF9leHRlbmRzJGYgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkZi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgU3RhcnRFdmVudE5vbkludGVycnVwdGluZ011bHRpcGxlSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkZih7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIzLjYyMSAxMy41MjRMMTYgNy45OWwtNy42MjIgNS41MzQgMi45MTEgOC45NTJoOS40MjJsMi45MTEtOC45NTJ6bS0xLjAxNi4zM2wtMi41MjMgNy43NTloLTguMTY1bC0yLjUyNC03Ljc2TDE2IDkuMDU5bDYuNjA2IDQuNzk2ek0xNi4xMzIgMGMtMS41MS4wMTYtMy4wNTUuMTM5LTQuNDkyLjYxNC0uODU0LjQ0Mi0uMjY2IDEuODYxLjY1MSAxLjU3OCAyLjI2Ni0uNTggNC42NTYtLjU5NiA2Ljk0NC0uMTQ0LjkzNS4wNjMgMS4yMS0xLjM5MS4zMTgtMS42NzQtMS4xMTgtLjI2LTIuMjc0LS4zNjEtMy40Mi0uMzc0em04Ljg2NSAyLjc3N2MtLjkzMS0uMS0xLjI2MiAxLjI5LS40MjUgMS42NjYgMS44NjMgMS4zNjQgMy4yMjIgMy4yOTggNC4zMjIgNS4yOTYuNjE3LjczNyAxLjg3NS0uMTQ1IDEuMzk4LS45NzktMS4xODQtMi4yNzUtMi44MDgtNC4zODQtNC45MjMtNS44NjZhLjg2My44NjMgMCAwMC0uMzcyLS4xMTd6TTYuNTUgMy4yYy0uNzM0LjA3OC0xLjE5Ni43NjItMS43MzUgMS4yMDZDMy41NTIgNS42NTYgMi41NSA3LjE0NyAxLjY4MSA4LjY5Yy0uMzEuNTMzLS43MSAxLjMzLS4wMyAxLjc2Ny42MTUuNDMyIDEuMjgyLS4xMzIgMS40NDYtLjc0Mi43OTYtMS40NzUgMS43NDYtMi44OSAyLjkzNC00LjA4LjQzLS41NDggMS4yOTItLjgyMiAxLjM0LTEuNTk1YS44NzQuODc0IDAgMDAtLjgyMi0uODM5em0yNC41ODIgMTEuMDc4Yy0uNzcxLS4wMzMtMS4wMDQuODItLjg3MyAxLjQzNy4xMyAyLjM5NS0uNDcxIDQuNzk3LTEuNjE1IDYuODk3LS4zMy44NzYuOTg0IDEuNTU5IDEuNTEyLjc4NWExNC4yNzYgMTQuMjc2IDAgMDAxLjc2MS04LjU0Ljg2NS44NjUgMCAwMC0uNzg1LS41Nzl6bS0zMC4xOTUuNjY2Yy0uNzc0LS4wNi0xLjAzMi43ODUtLjkwNSAxLjQwNy4xMTcgMi40MS43MzIgNC44MSAxLjg1OCA2Ljk0NS41MjguNzc0IDEuODQuMDkgMS41MS0uNzg2YTE1LjkzMiAxNS45MzIgMCAwMS0xLjY3Mi02Ljg3NC44NzYuODc2IDAgMDAtLjc5LS42OTJ6bTI0LjU3IDExLjgxN2MtLjc2Mi4wOTktMS4yNDMuODM1LTEuOTE5IDEuMTYtMS41MTQgMS4wMDItMy4yMzcgMS42MzItNC45NzggMi4wOTItLjg2NC40MjMtLjMwNyAxLjg1NS42MTYgMS41OTEgMi41MjgtLjU3OCA0LjkzLTEuNzUgNi45MTMtMy40MjEuNDY5LS41MjIuMDctMS40Mi0uNjMxLTEuNDIyem0tMTkuMTYuMDQyYy0uODQ1LjAwMS0xLjEyIDEuMjI4LS4zOTUgMS42MjggMS42NjUgMS40MDEgMy42NjcgMi4zNDggNS43NiAyLjkxMi42MTguMTc4IDEuNDgyLjU2NSAxLjg5My0uMTc3LjM1NS0uNjI4LS4yMjYtMS4yOTctLjg3LTEuMzI2LTEuOTcyLS41MTUtMy45MTItMS4yODUtNS41LTIuNTk0LS4yNi0uMjEzLS41MjItLjQ3Mi0uODg4LS40NDN6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkZSgpIHsgcmV0dXJuIF9leHRlbmRzJGUgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkZS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgU3RhcnRFdmVudE5vbkludGVycnVwdGluZ1BhcmFsbGVsTXVsdGlwbGVJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRlKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTMuNTAzIDkuMDE2djQuNDI4SDkuMDc1djQuOThoNC40Mjh2NC40MjhoNC45OHYtNC40MjdoNC40Mjh2LTQuOTgxaC00LjQyN1Y5LjAxNmgtNC45ODF6bS44My44M2gzLjMydjQuNDI4aDQuNDI4djMuMzJoLTQuNDI4djQuNDI4aC0zLjMydi00LjQ1NEg5LjkwNXYtMy4yOTRoNC40MjhWOS44NDZ6TTE2LjEyIDBoLS4yMzJsLS4yMi4wMDRoLS4wMTJsLS4yMjEuMDA2aC0uMDEybC0uMjIuMDFoLS4wMTJsLS4yMi4wMTNoLS4wMTJsLS4yMi4wMTZoLS4wMTJsLS4yMi4wMTloLS4wMDVsLS4wMDYuMDAxLS4yMi4wMjFoLS4wMDZsLS4wMDUuMDAxLS4yMi4wMjVoLS4wMTFsLS4yMi4wMjhoLS4wMDVsLS4wMDYuMDAyLS4yMTkuMDNoLS4wMDVsLS4wMDYuMDAxLS4yMTguMDMzLS4wMDYuMDAxLS4wMDYuMDAxLS4yMTcuMDM2LS4wMDYuMDAxLS4wMDYuMDAxLS4yMTcuMDM5LS4wMDYuMDAxLS4wMDYuMDAxLS4yMTYuMDQyLS4wMDYuMDAxLS4wMDYuMDAxLS4yMTUuMDQ1LS4wMDYuMDAxLS4wMDYuMDAyLS4yMTUuMDQ3LS4wMDYuMDAyLS4wMDYuMDAxLS4yMTQuMDUtLjAwNi4wMDItLjAwNi4wMDItLjExNS4wMjktLjE1Mi4wNTMtLjE0LjA4MS0uMTIyLjEwNi0uMS4xMjYtLjA3NS4xNDMtLjA0Ny4xNTQtLjAxOC4xNi4wMTIuMTYuMDQyLjE1Ni4wNy4xNDUuMDk1LjEzLjExOC4xMS4xMzcuMDg2LjE1LjA1OS4xNTguMDNoLjE2MWwuMTMyLS4wMjIuMTEtLjAyOC4yMDItLjA0Ny4yMDMtLjA0Ni4yMDgtLjA0My4yMDItLjAzOS4yMDYtLjAzNy4yMDYtLjAzNC4yMDUtLjAzLjIwOC0uMDMuMjA1LS4wMjUuMjA5LS4wMjMuMjA4LS4wMi4yMS0uMDE3LjIwOS0uMDE1LjIwNy0uMDExLjIxLS4wMDkuMjEtLjAwNi4yMDctLjAwM2guMjFsLjIxLjAwMi4yMDcuMDA1LjIwNy4wMDguMjEyLjAxMS4yMDcuMDE0LjIwOC4wMTcuMjA5LjAxOS4yMDguMDIyLjIwNS4wMjUuMjA2LjAyOC4yMDcuMDMuMjA4LjAzNS4yMDUuMDM2LjIwMi4wMzkuMDUyLjAxLjE2LjAxOC4xNi0uMDEyLjE1Ni0uMDQyLjE0Ni0uMDcuMTMtLjA5Ni4xMDktLjExOS4wODUtLjEzNi4wNi0uMTUuMDMtLjE1OXYtLjE2bC0uMDMtLjE2LS4wNTktLjE1LS4wODYtLjEzNi0uMTA5LS4xMTgtLjEzLS4wOTYtLjE0NS0uMDctLjEyOC0uMDM4LS4wNTctLjAxMS0uMDA2LS4wMDJoLS4wMDZsLS4yMTYtLjA0Mi0uMDA2LS4wMDEtLjAwNi0uMDAxLS4yMTctLjAzOUgxOC45bC0uMDA2LS4wMDItLjIxNy0uMDM1LS4wMDYtLjAwMS0uMDA2LS4wMDEtLjIxOC0uMDMyLS4wMDYtLjAwMS0uMDA2LS4wMDEtLjIxOC0uMDNoLS4wMDZsLS4wMDYtLjAwMS0uMjE5LS4wMjdoLS4wMTFsLS4yMi0uMDI0LS4wMDUtLjAwMWgtLjAwNmwtLjIyLS4wMjFoLS4wMDZsLS4wMDYtLjAwMS0uMjItLjAxNy0uMDA1LS4wMDFoLS4wMDZMMTcuMDYuMDNoLS4wMTJsLS4yMi0uMDEyaC0uMDEybC0uMjItLjAxaC0uMDEybC0uMjItLjAwNWgtLjAxMkwxNi4xMzIgMGgtLjAxMnptOC43MTUgMi43ODNsLS4xNTcuMDM0LS4xNDkuMDYzLS4xMzQuMDg5LS4xMTYuMTEyLS4wOTIuMTMyLS4wNjcuMTQ3LS4wMzguMTU3LS4wMDguMTYuMDIxLjE2LjA1MS4xNTMuMDc5LjE0MS4xMDMuMTI0LjEwMi4wODcuMDUyLjAzOGguMDAxbC4wODcuMDY0di4wMDFsLjA4Mi4wNjEuMDAyLjAwMS4wNzYuMDU5aC4wMDFsLjA4NC4wNjUuMDgyLjA2Ni4wMDIuMDAxLjA3OS4wNjMuMDAyLjAwMi4wNzcuMDYzLjA4MS4wNjcuMDAyLjAwMi4wNzcuMDY1LjA3Ni4wNjUuMDAxLjAwMi4wOC4wNy4wNzguMDdoLjAwMmwuMDc1LjA2OC4wNzcuMDcyLjAwMi4wMDEuMDczLjA2OS4wNzcuMDczLjA3Mi4wNy4wMDIuMDAxLjA3Ny4wNzYuMDcuMDd2LjAwMWwuMDc1LjA3Ni4wNy4wNzMuMDAyLjAwMS4wNzQuMDc5LjAwMi4wMDIuMDY5LjA3NC4wNjkuMDc1LjA3NC4wODIuMDcuMDguMDAyLjAwMS4wNjguMDc5aC4wMDFsLjA2Ny4wNzkuMDY4LjA4Mi4wNjUuMDc4LjAwMS4wMDIuMDY4LjA4My4wNjcuMDg0LjA2My4wODEuMDAxLjAwMi4wNjcuMDg3LjAwMi4wMDIuMDYzLjA4NC4wMDEuMDAxLjA2NC4wODcuMDA4LjAxLjAwOC4wMS4wOTUuMTIuMDkzLjEyMS4wOS4xMTkuMDg3LjExOS4wODguMTIyLjA4Ni4xMjMuMDg0LjEyLjA4MS4xMjIuMDAxLjAwMi4wODQuMTI2LjA4LjEyNi4wOC4xMjcuMDc3LjEyNi4wNzkuMTMxLjA3NC4xMjcuMDc1LjEzMS4wNzMuMTMxLjA3LjEzLjA3LjEzMy4wNjkuMTMzLjA0NS4wOS4wODYuMTM3LjEwOS4xMTkuMTMuMDk2LjE0NC4wNy4xNTYuMDQyLjE2LjAxMy4xNi0uMDE3LjE1NS0uMDQ3LjE0My0uMDc1LjEyNi0uMS4xMDYtLjEyMS4wODItLjE0LjA1NC0uMTUxLjAyNS0uMTYtLjAwNS0uMTYtLjAzNS0uMTU4LS4wNS0uMTI0LS4wNDgtLjA5NS0uMDAyLS4wMDQtLjAwMi0uMDA0LS4wNzMtLjE0LS4wMDItLjAwNS0uMDAyLS4wMDQtLjA3NC0uMTQtLjAwMi0uMDA0LS4wMDItLjAwNC0uMDc2LS4xNC0uMDAyLS4wMDMtLjAwMi0uMDA0LS4wNzctLjEzOS0uMDAzLS4wMDQtLjAwMi0uMDA0LS4wNzgtLjEzOC0uMDAzLS4wMDQtLjAwMi0uMDAzLS4wOC0uMTM3LS4wMDItLjAwNC0uMDAzLS4wMDQtLjA4MS0uMTM2LS4wMDItLjAwNC0uMDAzLS4wMDQtLjA4My0uMTM2LS4wMDItLjAwMy0uMDAyLS4wMDQtLjA4NS0uMTM1LS4wMDItLjAwNC0uMDAzLS4wMDMtLjA4NS0uMTM0LS4wMDMtLjAwNC0uMDAyLS4wMDQtLjA4Ny0uMTMyLS4wMDMtLjAwNC0uMDAzLS4wMDQtLjA4OC0uMTMyLS4wMDMtLjAwMy0uMDAyLS4wMDQtLjA5LS4xMy0uMDAzLS4wMDUtLjAwMy0uMDAzLS4wOTEtLjEzLS4wMDMtLjAwNC0uMDAyLS4wMDQtLjA5My0uMTI5LS4wMDMtLjAwMy0uMDAzLS4wMDQtLjA5NC0uMTI4LS4wMDMtLjAwNC0uMDAzLS4wMDMtLjA5NS0uMTI3LS4wMDMtLjAwNC0uMDAzLS4wMDQtLjA5Ny0uMTI1LS4wMDMtLjAwNC0uMDAzLS4wMDQtLjA5LS4xMTQtLjA2LS4wODItLjAwMy0uMDAzLS4wMDItLjAwMy0uMDY5LS4wOTEtLjAwMi0uMDA0LS4wMDItLjAwMy0uMDctLjA5LS4wMDMtLjAwMy0uMDAyLS4wMDMtLjA3LS4wOS0uMDAzLS4wMDMtLjAwMi0uMDAzLS4wNzEtLjA5LS4wMDItLjAwMy0uMDAzLS4wMDItLjA3Mi0uMDg5LS4wMDItLjAwMy0uMDAyLS4wMDMtLjA3My0uMDg4LS4wMDItLjAwMy0uMDAyLS4wMDItLjA3NC0uMDg3LS4wMDItLjAwMy0uMDAyLS4wMDMtLjA3NC0uMDg2LS4wMDMtLjAwMy0uMDAyLS4wMDMtLjA3NC0uMDg2LS4wMDMtLjAwMi0uMDAyLS4wMDMtLjA3NS0uMDg1LS4wMDMtLjAwMy0uMDAyLS4wMDItLjA3Ni0uMDg0LS4wMDItLjAwMy0uMDAzLS4wMDMtLjA3Ni0uMDgzLS4wMDItLjAwMy0uMDAzLS4wMDMtLjA3Ny0uMDgyLS4wMDItLjAwMy0uMDAzLS4wMDItLjA3Ny0uMDgyLS4wMDMtLjAwMy0uMDAzLS4wMDItLjA3OC0uMDgxLS4wMDItLjAwMy0uMDAzLS4wMDMtLjA3OC0uMDgtLjAwMy0uMDAyLS4wMDMtLjAwMy0uMDc5LS4wOC0uMDAyLS4wMDItLjAwMy0uMDAyLS4wOC0uMDgtLjAwMi0uMDAyLS4wMDMtLjAwMi0uMDgtLjA3OC0uMDAzLS4wMDMtLjAwMy0uMDAyLS4wOC0uMDc3LS4wMDMtLjAwMy0uMDAzLS4wMDItLjA4Mi0uMDc3LS4wMDItLjAwMi0uMDAzLS4wMDItLjA4Mi0uMDc2LS4wMDMtLjAwMi0uMDAyLS4wMDMtLjA4My0uMDc1LS4wMDMtLjAwMi0uMDAyLS4wMDMtLjA4NC0uMDc0LS4wMDItLjAwMi0uMDAzLS4wMDItLjA4NC0uMDc0LS4wMDMtLjAwMi0uMDAyLS4wMDItLjA4NS0uMDczLS4wMDItLjAwMi0uMDAzLS4wMDMtLjA4NS0uMDcxLS4wMDMtLjAwMy0uMDAyLS4wMDItLjA4Ni0uMDctLjAwMy0uMDAzLS4wMDItLjAwMi0uMDg2LS4wNy0uMDAzLS4wMDMtLjAwMy0uMDAyLS4wODYtLjA3LS4wMDMtLjAwMi0uMDAzLS4wMDItLjA4Ny0uMDY5LS4wMDItLjAwMi0uMDAzLS4wMDItLjA4OC0uMDY4LS4wMDItLjAwMi0uMDAzLS4wMDItLjA4OC0uMDY3LS4wMDMtLjAwMy0uMDAzLS4wMDItLjA4OC0uMDY2LS4wMDMtLjAwMi0uMDAzLS4wMDItLjA4OS0uMDY2LS4wMDMtLjAwMi0uMDAzLS4wMDItLjA1Ny0uMDQyLS4xNC0uMDgyLS4xNS0uMDU1LS4xNi0uMDI2LS4xNi4wMDR6TTYuMzc3IDMuMjFsLS4xNTcuMDM3LS4xNDguMDY2LS4xMTEuMDc0LS4wMDcuMDA2LS4wMDMuMDAyLS4wMDMuMDAyLS4wODYuMDY5LS4wMDMuMDAyLS4wMDIuMDAyLS4wODYuMDctLjAwMy4wMDItLjAwMi4wMDItLjA4Ni4wNy0uMDAyLjAwMy0uMDAzLjAwMi0uMDg1LjA3MS0uMDAyLjAwMi0uMDAzLjAwMy0uMDg0LjA3MS0uMDAzLjAwMy0uMDAyLjAwMi0uMDg0LjA3Mi0uMDAzLjAwMy0uMDAyLjAwMi0uMDgzLjA3My0uMDAzLjAwMy0uMDAyLjAwMi0uMDgzLjA3NC0uMDAyLjAwMi0uMDAzLjAwMy0uMDgyLjA3NC0uMDAzLjAwMy0uMDAyLjAwMi0uMDgxLjA3Ni0uMDAzLjAwMi0uMDAzLjAwMi0uMDguMDc3LS4wMDMuMDAyLS4wMDMuMDAzLS4wOC4wNzYtLjAwMi4wMDMtLjAwMy4wMDItLjA4LjA3OC0uMDAyLjAwMi0uMDAzLjAwMy0uMDc5LjA3OC0uMDAyLjAwMy0uMDAzLjAwMi0uMDc4LjA4LS4wMDMuMDAyLS4wMDIuMDAyLS4wNzguMDgtLjAwMi4wMDMtLjAwMy4wMDItLjA3Ny4wOC0uMDAzLjAwNC0uMDAyLjAwMi0uMDc3LjA4MS0uMDAyLjAwMy0uMDAzLjAwMy0uMDc2LjA4Mi0uMDAyLjAwMi0uMDAzLjAwMy0uMDc1LjA4Mi0uMDAyLjAwMy0uMDAzLjAwMy0uMDc0LjA4My0uMDAzLjAwMy0uMDAyLjAwMy0uMDc0LjA4NC0uMDAzLjAwMy0uMDAyLjAwMi0uMDc0LjA4NS0uMDAyLjAwMy0uMDAyLjAwMy0uMDczLjA4NS0uMDAzLjAwMy0uMDAyLjAwMy0uMDcyLjA4Ni0uMDAyLjAwMy0uMDAzLjAwMy0uMDcxLjA4Ny0uMDAzLjAwMy0uMDAyLjAwMi0uMDcuMDg4LS4wMDMuMDAzLS4wMDIuMDAzLS4wNy4wODgtLjAwMy4wMDMtLjAwMi4wMDMtLjA3LjA5LS4wMDIuMDAyLS4wMDIuMDAzLS4wNjkuMDktLjAwMi4wMDMtLjAwMy4wMDMtLjA2OC4wOS0uMDAyLjAwMy0uMDAyLjAwMy0uMDY3LjA5Mi0uMDAzLjAwMy0uMDAyLjAwMy0uMDY3LjA5Mi0uMDAyLjAwMy0uMDAyLjAwMy0uMDY2LjA5Mi0uMDAyLjAwMy0uMDAyLjAwNC0uMDY2LjA5My0uMDAyLjAwMy0uMDAyLjAwMy0uMDY1LjA5NC0uMDAyLjAwMy0uMDAyLjAwNC0uMDY0LjA5NC0uMDAyLjAwMy0uMDAyLjAwNC0uMDYzLjA5NS0uMDAyLjAwMy0uMDAyLjAwMy0uMDYzLjA5Ny0uMDAyLjAwMy0uMDAyLjAwMy0uMDQ2LjA3My0uMDUuMDctLjAwMy4wMDItLjAwMi4wMDMtLjA2Ny4wOTMtLjAwMy4wMDMtLjAwMi4wMDMtLjA2Ni4wOTQtLjAwMi4wMDMtLjAwMi4wMDMtLjA2Ni4wOTQtLjAwMi4wMDMtLjAwMi4wMDMtLjA2NC4wOTQtLjAwMi4wMDQtLjAwMi4wMDMtLjA2NC4wOTQtLjAwMi4wMDQtLjAwMi4wMDMtLjA2Mi4wOTUtLjAwMi4wMDMtLjAwMi4wMDMtLjA2Mi4wOTYtLjAwMi4wMDMtLjAwMi4wMDMtLjA2LjA5Ni0uMDAzLjAwMy0uMDAyLjAwMy0uMDYuMDk2LS4wMDEuMDA0LS4wMDIuMDAzLS4wNTkuMDk2LS4wMDIuMDA0LS4wMDIuMDAzLS4wNTguMDk3LS4wMDIuMDAzLS4wMDEuMDAzLS4wNTcuMDk4LS4wMDIuMDAzLS4wMDIuMDAzLS4wNTYuMDk4LS4wMDIuMDAzLS4wMDIuMDAzLS4wNTUuMDk4LS4wMDIuMDA0LS4wMDEuMDAzLS4wNTUuMDk4LS4wMDEuMDA0LS4wMDIuMDAzLS4wNTQuMDk5LS4wMDEuMDAzLS4wMDIuMDAzLS4wNTIuMS0uMDAyLjAwMi0uMDAyLjAwNC0uMDUxLjEtLjAwMi4wMDItLjAwMi4wMDQtLjA1LjEtLjAwMi4wMDMtLjAwMi4wMDMtLjA1LjF2LjAwM2wtLjAwMi4wMDQtLjA1LjF2LjAwM2wtLjAwMi4wMDQtLjA0OC4xLS4wMDIuMDA0LS4wMDEuMDAzLS4wNDcuMTAxLS4wMDIuMDAzLS4wMDEuMDA0LS4wMTMuMDI3LS4wNTIuMTUyLS4wMjQuMTYuMDA2LjE2LjAzNy4xNTcuMDY0LjE0OC4wOTEuMTMzLjExNC4xMTQuMTM0LjA5LjE0Ny4wNjUuMTU3LjAzNi4xNjIuMDA2LjE1OS0uMDI0LjE1Mi0uMDUzLjE0LS4wOC4xMjItLjEwNS4xLS4xMjYuMDY2LS4xMTcuMDEtLjAyMy4wNDQtLjA5NS4wNDUtLjA5NS4wMDItLjAwMy4wNDItLjA4Ny4wNDgtLjA5Ny4wNDgtLjA5NXYtLjAwMWwuMDQ4LS4wOTIuMDAxLS4wMDEuMDQ3LS4wOS4wNS0uMDkzLjAwMi0uMDAyLjA0OS0uMDkuMDUyLS4wOTIuMDAxLS4wMDIuMDUxLS4wODkuMDAxLS4wMDIuMDUxLS4wODcuMDUzLS4wODguMDAxLS4wMDIuMDU1LS4wOTEuMDU3LS4wOTEuMDU3LS4wOS4wMDEtLjAwMi4wNTctLjA4OS4wNTUtLjA4My4wMDEtLjAwMi4wNi0uMDkuMDYtLjA4OC4wNjItLjA4OS4wMDEtLjAwMS4wNi0uMDg0LjA2My0uMDg4LjA2NS0uMDg5LjAxNy0uMDIzLjAxNi0uMDI1LjA2LS4wOTQuMDU5LS4wOXYtLjAwMmwuMDU4LS4wODYuMDU3LS4wODYuMDAxLS4wMDEuMDYyLS4wOS4wNjItLjA4OC4wMDEtLjAwMi4wNi0uMDg1LjAwMi0uMDAyLjA2LS4wODIuMDYzLS4wODcuMDY0LS4wODQuMDAyLS4wMDIuMDYxLS4wOC4wNjUtLjA4NC4wNjQtLjA4di0uMDAxbC4wNjctLjA4My4wNjctLjA4Mi4wNy0uMDgzLjA2OS0uMDguMDYzLS4wNzQuMDc0LS4wODMuMDY4LS4wNzcuMDAyLS4wMDIuMDctLjA3Ni4wNy0uMDc1LjA3Mi0uMDc3LjAwMS0uMDAxLjA2Ny0uMDcuMDc2LS4wNzguMDAyLS4wMDIuMDctLjA3LjA3NS0uMDc1LjAwMi0uMDAyLjA3Mi0uMDcuMDc1LS4wNzIuMDAyLS4wMDIuMDczLS4wNjkuMDc0LS4wNjguMDAxLS4wMDEuMDgtLjA3My4wNzYtLjA2OC4wMDItLjAwMi4wNzItLjA2M3YtLjAwMWwuMDc4LS4wNjcuMDc5LS4wNjguMDAyLS4wMDEuMDgtLjA2OC4wMDItLjAwMi4wNzctLjA2My4wODItLjA2Ni4wMDEtLjAwMS4wNzUtLjA2LjAwMi0uMDAyLjAwNi0uMDA0LjExNy0uMTExLjA5NC0uMTMxLjA2OC0uMTQ2LjA0LS4xNTYuMDEtLjE2MS0uMDE5LS4xNi0uMDQ5LS4xNTQtLjA3Ni0uMTQxLS4xMDItLjEyNS0uMTIzLS4xMDUtLjE0LS4wNzktLjE1My0uMDUyLS4xNi0uMDIzLS4xNi4wMDd6bTI0LjU5NiAxMS4wODhsLS4xNTYuMDQtLjE0Ni4wNjctLjEzMS4wOTQtLjExMi4xMTctLjA4Ny4xMzUtLjA2MS4xNS0uMDMzLjE1Ny0uMDA0LjEzNC4wMDcuMTQyLjAwNS4xNTIuMDA0LjE1LjAwMi4xNDl2LjE1M2wuMDAxLjAxMXYuMDE1bC4wMDQuMTEuMDAyLjExdi4wMDJsLjAwMi4xMDZ2LjMyMWwtLjAwMy4xMDItLjAwMi4xMDYtLjAwNC4xMDctLjAwNS4xMDUtLjAwNi4xMDYtLjAwNi4xMDYtLjAwOC4xMDZ2LjAwMmwtLjAwOC4xMDN2LjAwMmwtLjAxLjEtLjAxLjEwNS0uMDEuMTA1LS4wMTMuMTA1LS4wMTIuMDk5di4wMDJsLS4wMTQuMTA4LS4wMTQuMS0uMDE2LjEwNS0uMDE2LjEwM3YuMDAybC0uMDE3LjA5OS0uMDE4LjEwNC0uMDE5LjEwM3YuMDAybC0uMDE5LjA5Ny0uMDIuMTA0LS4wMjIuMTAzdi4wMDFsLS4wMjIuMDk4LS4wMjMuMTAzdi4wMDJsLS4wMjQuMDk2LS4wMjUuMTAzdi4wMDJsLS4wMjQuMDk2LS4wMjcuMTAydi4wMDNsLS4wMjYuMDkzdi4wMDFsLS4wMjkuMTAzdi4wMDJsLS4wMy4wOTktLjAyOC4wOTd2LjAwMmwtLjAzLjA5NS0uMDMuMDk2di4wMDFsLS4wMzMuMS0uMDMxLjA5NXYuMDAybC0uMDM1LjF2LjAwM2wtLjAzNC4wOTR2LjAwM2wtLjAzNS4wOTZ2LjAwMWwtLjAzNC4wOXYuMDAybC0uMDM4LjA5OC0uMDM2LjA5M3YuMDAybC0uMDM4LjA5NS0uMDc5LjE5NC0uMDguMTg4LS4wODUuMTg5LS4wODcuMTktLjA5LjE4NC0uMDkyLjE4My0uMDk1LjE4NC0uMDUuMDkzLS4wNjQuMTQ4LS4wMzQuMTU4LS4wMDUuMTYuMDI2LjE2LjA1NC4xNTEuMDgyLjE0LjEwNi4xMi4xMjcuMS4xNDMuMDc1LjE1NC4wNDYuMTYuMDE3LjE2MS0uMDEzLjE1Ni0uMDQyLjE0NC0uMDcxLjEzLS4wOTYuMTA5LS4xMTkuMDcyLS4xMTIuMDUzLS4wOTkuMDAzLS4wMDUuMDAzLS4wMDYuMTAyLS4xOTUuMDAzLS4wMDYuMDAzLS4wMDYuMDk4LS4xOTYuMDAzLS4wMDYuMDAzLS4wMDYuMDk2LS4xOTcuMDAyLS4wMDYuMDAzLS4wMDYuMDkzLS4yLjAwMi0uMDA2LjAwMy0uMDA2LjA5LS4yLjAwMi0uMDA2LjAwMy0uMDA3LjA4Ni0uMjAyLjAwMy0uMDA2LjAwMi0uMDA2LjA4NC0uMjAzLjAwMi0uMDA1LjAwMS0uMDA1LjA0LS4xMDIuMDAyLS4wMDMuMDAxLS4wMDMuMDQtLjEwMy4wMDEtLjAwMy4wMDEtLjAwMy4wNC0uMTAzdi0uMDA0bC4wMDEtLjAwMy4wMzktLjEwM3YtLjAwM2wuMDAyLS4wMDMuMDM3LS4xMDQuMDAxLS4wMDMuMDAxLS4wMDMuMDM3LS4xMDR2LS4wMDRsLjAwMi0uMDAzLjAzNS0uMTA0LjAwMi0uMDAzdi0uMDA0bC4wMzUtLjEwNC4wMDItLjAwNHYtLjAwM2wuMDM0LS4xMDUuMDAyLS4wMDN2LS4wMDNsLjAzNC0uMTA1di0uMDA0bC4wMDItLjAwMy4wMzItLjEwNi4wMDEtLjAwMy4wMDEtLjAwMy4wMzEtLjEwNi4wMDEtLjAwMy4wMDEtLjAwNC4wMzEtLjEwNi4wMDEtLjAwMy4wMDEtLjAwNC4wMy0uMTA2di0uMDAzbC4wMDItLjAwNC4wMjgtLjEwNy4wMDEtLjAwMy4wMDEtLjAwMy4wMjgtLjEwNy4wMDEtLjAwNC4wMDEtLjAwMy4wMjctLjEwNy4wMDEtLjAwNHYtLjAwM2wuMDI3LS4xMDguMDAxLS4wMDN2LS4wMDRsLjAyNi0uMTA4LjAwMS0uMDAzdi0uMDA0bC4wMjUtLjEwOC4wMDEtLjAwM3YtLjAwNGwuMDI1LS4xMDh2LS4wMDRsLjAwMS0uMDAzLjAyMy0uMTA5di0uMDAzbC4wMDEtLjAwNC4wMjItLjEwOXYtLjAwM2wuMDAyLS4wMDQuMDItLjEwOS4wMDEtLjAwNHYtLjAwM2wuMDItLjExLjAwMi0uMDAzdi0uMDA0bC4wMi0uMTF2LS4wMDdsLjAxOS0uMTF2LS4wMDNsLjAwMS0uMDA0LjAxNy0uMTF2LS4wMDRsLjAwMS0uMDAzLjAxNy0uMTF2LS4wMDhsLjAxNi0uMTF2LS4wMDRsLjAwMS0uMDA0LjAxNS0uMTF2LS4wMDhsLjAxNS0uMTExdi0uMDA4bC4wMTMtLjExMXYtLjAwN2wuMDEzLS4xMTJ2LS4wMDdsLjAxMS0uMTEydi0uMDA0bC4wMDEtLjAwNC4wMS0uMTEydi0uMDA3bC4wMS0uMTEydi0uMDA4bC4wMDgtLjExMnYtLjAwOGwuMDA3LS4xMTN2LS4wMDdsLjAwNy0uMTEzdi0uMDA4bC4wMDUtLjExM3YtLjAwN2wuMDA1LS4xMTR2LS4wMDdsLjAwMy0uMTE0di0uMDA3bC4wMDMtLjExNHYtLjEyOWwuMDAxLS4xMTR2LS4xM2wtLjAwMy0uMTE0di0uMDA4bC0uMDAzLS4xMTV2LS4wMDdsLS4wMDMtLjEwMnYtLjE1NWwtLjAwMy0uMTU4di0uMDFsLS4wMDQtLjE1OHYtLjAxbC0uMDA2LS4xNTh2LS4wMWwtLjAwNy0uMTQ4LS4wMjMtLjE2LS4wNTEtLjE1Mi0uMDgtLjE0LS4xMDMtLjEyNC0uMTI1LS4xMDItLjE0Mi0uMDc3LS4xNTMtLjA1LS4xNi0uMDItLjE2MS4wMXptLTMwLjIxMy42NmwtLjE1Ny4wMzQtLjE0OS4wNjMtLjEzNC4wOS0uMTE1LjExMy0uMDkyLjEzMi0uMDY3LjE0Ny0uMDM3LjE1Ni0uMDA5LjEzNC4wMDEuMTFWMTUuOTVsLjAwNi4yMnYuMDEybC4wMS4yMnYuMDEybC4wMTIuMjJ2LjAwNmwuMDAxLjAwNi4wMTUuMjJ2LjAwNWwuMDAxLjAwNi4wMTguMjIuMDAxLjAwNnYuMDA2bC4wMjIuMjE5di4wMDZsLjAwMS4wMDYuMDI0LjIxOS4wMDEuMDA2di4wMDZsLjAyOC4yMTguMDAxLjAwNnYuMDA2bC4wMzEuMjE4LjAwMS4wMDYuMDAxLjAwNi4wMzMuMjE4LjAwMS4wMDYuMDAxLjAwNS4wMzcuMjE4di4wMDZsLjAwMi4wMDUuMDQuMjE3di4wMDZsLjAwMS4wMDYuMDQzLjIxNi4wMDEuMDA2LjAwMS4wMDYuMDQ2LjIxNnYuMDA1bC4wMDIuMDA2LjA0OC4yMTUuMDAyLjAwNi4wMDEuMDA2LjA1MS4yMTQuMDAyLjAwNnYuMDA2bC4wNTUuMjE0LjAwMi4wMDUuMDAxLjAwNi4wNTcuMjEzLjAwMi4wMDYuMDAxLjAwNS4wNi4yMTMuMDAyLjAwNS4wMDEuMDA2LjA2My4yMTIuMDAyLjAwNS4wMDEuMDA2LjA2Ni4yMS4wMDIuMDA2LjAwMi4wMDYuMDY4LjIxLjAwMi4wMDUuMDAyLjAwNS4wNy4yMS4wMDMuMDA1LjAwMi4wMDUuMDc0LjIwOC4wMDIuMDA2LjAwMi4wMDUuMDc3LjIwNy4wMDIuMDA2LjAwMi4wMDUuMDguMjA2LjAwMi4wMDUuMDAyLjAwNi4wODIuMjA0LjAwMi4wMDYuMDAyLjAwNS4wODYuMjA0LjAwMi4wMDUuMDAyLjAwNi4wODguMjAyLjAwMi4wMDUuMDAzLjAwNi4wOS4yLjAwMy4wMDYuMDAyLjAwNS4wOTQuMi4wMDIuMDA2LjAwMy4wMDUuMDk2LjE5OS4wMDIuMDA1LjAwMy4wMDUuMDMuMDYyLjA4Ni4xMzcuMTEuMTE4LjEyOC4wOTcuMTQ1LjA3LjE1Ni4wNDMuMTYuMDEzLjE2LS4wMTcuMTU1LS4wNDcuMTQzLS4wNzQuMTI3LS4xLjEwNi0uMTIxLjA4MS0uMTQuMDU1LS4xNS4wMjUtLjE2LS4wMDUtLjE2MS0uMDM0LS4xNTgtLjA1LS4xMjQtLjAyOC0uMDU1LS4wOTItLjE5LS4wODctLjE4OC0uMDg3LS4xOTItLjA4My0uMTktLjA4LS4xOTMtLjA3OC0uMTk0LS4wNzYtLjE5Ni0uMDczLS4xOTUtLjA3LS4xOTctLjA2Ny0uMTk4LS4wNjUtLjE5OS0uMDYzLS4yLS4wNTktLjItLjA1Ni0uMi0uMDU1LS4yMDQtLjA1LS4yMDEtLjA0OS0uMjAyLS4wNDYtLjIwNS0uMDQzLS4yMDYtLjA0LS4yMDMtLjAzOC0uMjA3LS4wMzQtLjIwNC0uMDMyLS4yMDctLjAyOC0uMjA1LS4wMjYtLjIwNy0uMDIzLS4yMDgtLjAyLS4yMDctLjAxOC0uMjA3LS4wMTQtLjIwOC0uMDExLS4yMDctLjAwOS0uMjA4LS4wMDUtLjIwNy0uMDAyLS4xMDQtLjAxNy0uMTYtLjA0Ni0uMTU1LS4wNzQtLjE0My0uMS0uMTI2LS4xMjEtLjEwNy0uMTM5LS4wODEtLjE1Mi0uMDU1LS4xNTktLjAyNS0uMTYxLjAwNHptMjQuNTg1IDExLjgzbC0uMTU2LjAzOS0uMTQ2LjA2OC0uMTEuMDc2LS4wMTUuMDEyLS4xNjMuMTI5LS4xNjYuMTI3LS4xNjguMTI1LS4xNy4xMjQtLjE3LjEyLS4xNzIuMTE4LS4xNzMuMTE1LS4xNzYuMTE0LS4xNzcuMTExLS4xOC4xMS0uMTc4LjEwNS0uMTgyLjEwNC0uMTgyLjEwMS0uMTg0LjEtLjE4NC4wOTUtLjE4OS4wOTUtLjE4Ni4wOS0uMTg4LjA4OS0uMTkuMDg2LS4xOS4wODItLjE5My4wODEtLjE5NS4wNzgtLjE5MS4wNzQtLjE5Ny4wNzMtLjE5NS4wNy0uMTk2LjA2NS0uMTk4LjA2NC0uMTk4LjA2MS0uMi4wNTgtLjIuMDU1LS4yLjA1Mi0uMi4wNDktLjE1MS4wMzUtLjE1My4wNS0uMTQxLjA3OC0uMTI1LjEwMy0uMTAzLjEyNC0uMDc4LjE0LS4wNS4xNTQtLjAyMi4xNi4wMDkuMTYuMDM4LjE1Ny4wNjcuMTQ3LjA5My4xMzIuMTE2LjExMi4xMzQuMDg5LjE0OS4wNjIuMTU4LjAzNC4xNi4wMDMuMTMzLS4wMi4xNTgtLjAzNS4wMDYtLjAwMi4wMDYtLjAwMS4yMTMtLjA1Mi4wMDYtLjAwMi4wMDctLjAwMS4yMTItLjA1Ni4wMDYtLjAwMS4wMDYtLjAwMi4yMTItLjA1OC4wMDYtLjAwMi4wMDYtLjAwMi4yMTEtLjA2MS4wMDYtLjAwMi4wMDYtLjAwMi4yMS0uMDY0LjAwNi0uMDAyLjAwNi0uMDAyLjIxLS4wNjcuMDA1LS4wMDIuMDA2LS4wMDIuMjA4LS4wNy4wMDYtLjAwMi4wMDYtLjAwMy4yMDctLjA3My4wMDYtLjAwMi4wMDYtLjAwMi4yMDYtLjA3Ny4wMDYtLjAwMi4wMDUtLjAwMi4yMDYtLjA4LjAwNS0uMDAxLjAwNi0uMDAzLjIwNC0uMDgyLjAwNi0uMDAyLjAwNS0uMDAyLjIwMy0uMDg1LjAwNi0uMDAzLjAwNS0uMDAyLjIwMi0uMDg4LjAwNi0uMDAyLjAwNS0uMDAzLjItLjA5LjAwNi0uMDAzLjAwNi0uMDAzLjItLjA5My4wMDUtLjAwMy4wMDUtLjAwMi4xOTgtLjA5Ni4wMDYtLjAwMy4wMDUtLjAwMy4xOTctLjA5OS4wMDUtLjAwMi4wMDUtLjAwMy4xOTYtLjEwMi4wMDUtLjAwMi4wMDUtLjAwMy4xOTUtLjEwNS4wMDUtLjAwMi4wMDUtLjAwMy4xOTMtLjEwNy4wMDUtLjAwMy4wMDUtLjAwMy4xOTEtLjExLjAwNS0uMDAzLjAwNS0uMDAzLjE5LS4xMTIuMDA1LS4wMDMuMDA1LS4wMDMuMTg5LS4xMTUuMDA1LS4wMDMuMDA1LS4wMDMuMTg3LS4xMTcuMDA1LS4wMDMuMDA0LS4wMDQuMTg2LS4xMi4wMDUtLjAwMy4wMDQtLjAwMy4xODQtLjEyMi4wMDUtLjAwMy4wMDUtLjAwNC4xODItLjEyNS4wMDQtLjAwMy4wMDUtLjAwMy4xOC0uMTI4LjAwNS0uMDAzLjAwNS0uMDAzLjE3OS0uMTMuMDA0LS4wMDMuMDA1LS4wMDQuMTc3LS4xMzIuMDA0LS4wMDQuMDA1LS4wMDMuMTc1LS4xMzUuMDA1LS4wMDMuMDA0LS4wMDQuMTczLS4xMzcuMDA1LS4wMDMuMDA0LS4wMDQuMDE5LS4wMTUuMTE1LS4xMTMuMDkyLS4xMzIuMDY2LS4xNDcuMDM4LS4xNTcuMDA4LS4xNi0uMDIyLS4xNi0uMDUyLS4xNTMtLjA3OS0uMTQtLjEwMy0uMTI0LS4xMjUtLjEwMi0uMTQyLS4wNzgtLjE1My0uMDUtLjE2LS4wMi0uMTYuMDF6bS0xOS4xNy4wNTRsLS4xNTMuMDUxLS4xNC4wNzktLjEyNC4xMDMtLjEwMy4xMjUtLjA3Ny4xNDEtLjA1LjE1My0uMDIuMTYuMDA5LjE2MS4wNC4xNTYuMDY3LjE0Ny4wOTMuMTMxLjA5NS4wOTQuMDQ3LjA0LjAwNS4wMDQuMDA1LjAwNC4xNy4xNC4wMDUuMDA0LjAwNS4wMDQuMTcyLjEzNy4wMDQuMDA0LjAwNS4wMDMuMDg2LjA2Ny4wMDMuMDAyLjAwMy4wMDIuMDg3LjA2Ny4wMDMuMDAyLjAwMy4wMDIuMDg4LjA2Ni4wMDIuMDAzLjAwMy4wMDIuMDg5LjA2NS4wMDIuMDAyLjAwMy4wMDIuMDkuMDY1LjAwMi4wMDIuMDAzLjAwMi4wOS4wNjQuMDAyLjAwMi4wMDMuMDAyLjA5LjA2My4wMDMuMDAyLjAwMy4wMDIuMDkuMDYzLjAwMy4wMDIuMDAzLjAwMi4wOTIuMDYyLjAwMi4wMDIuMDAzLjAwMi4wOTIuMDYxLjAwMy4wMDIuMDAzLjAwMi4wOTIuMDYuMDAzLjAwMy4wMDMuMDAxLjA5My4wNi4wMDMuMDAyLjAwMy4wMDIuMDkzLjA2LjAwMy4wMDEuMDAzLjAwMi4wOTQuMDU4LjAwMy4wMDIuMDAzLjAwMi4wOTUuMDU4LjAwMy4wMDEuMDAzLjAwMi4wOTUuMDU3LjAwMy4wMDIuMDAzLjAwMi4wOTUuMDU2LjAwMy4wMDIuMDAzLjAwMi4wOTYuMDU1LjAwNC4wMDIuMDAzLjAwMS4wOTYuMDU1LjAwMy4wMDIuMDAzLjAwMi4wOTguMDUzLjAwMy4wMDIuMDAzLjAwMi4wOTcuMDUzLjAwNC4wMDIuMDAzLjAwMS4wOTguMDUzLjAwMy4wMDEuMDAzLjAwMi4wOTkuMDUyLjAwMy4wMDEuMDAzLjAwMi4xLjA1LjAwMy4wMDIuMDAzLjAwMi4xLjA1LjAwMy4wMDIuMDAzLjAwMS4xLjA1aC4wMDNsLjAwNC4wMDMuMS4wNDguMDA0LjAwMS4wMDMuMDAyLjEwMS4wNDguMDAzLjAwMS4wMDQuMDAyLjEwMS4wNDYuMDA0LjAwMi4wMDMuMDAxLjEwMi4wNDYuMDA0LjAwMi4wMDMuMDAxLjEwMy4wNDUuMDAzLjAwMi4wMDMuMDAxLjEwMy4wNDUuMDA0LjAwMS4wMDMuMDAyLjEwNC4wNDMuMDAzLjAwMS4wMDQuMDAyLjEwNC4wNDIuMDAzLjAwMi4wMDQuMDAxLjEwNC4wNDIuMDA0LjAwMS4wMDMuMDAyLjEwNS4wNC4wMDQuMDAyLjAwMy4wMDEuMTA2LjA0LjAwMy4wMDJoLjAwNGwuMTA2LjA0LjAwNC4wMDEuMDAzLjAwMi4xMDcuMDM4LjAwMy4wMDEuMDA0LjAwMS4xMDcuMDM4LjAwMy4wMDEuMDA0LjAwMS4xMDcuMDM3LjAwNC4wMDEuMDA0LjAwMS4xMDguMDM2LjAwMy4wMDEuMDA0LjAwMS4xMDguMDM1LjAwNC4wMDEuMDAzLjAwMS4xMS4wMzQuMDAzLjAwMS4wMDQuMDAxLjEwOS4wMzMuMDA0LjAwMmguMDAzbC4xMS4wMzNoLjAwNGwuMDAzLjAwMi4xMS4wMzEuMDA0LjAwMS4wMDQuMDAxLjA4NC4wMjMuMDgxLjAyOC4wMDQuMDAxLjAwMy4wMDEuMTA5LjAzNy4wMDMuMDAxLjAwNC4wMDEuMTA5LjAzNi4wMDMuMDAxLjAwNC4wMDEuMTA5LjAzNWguMDAzbC4wMDQuMDAyLjExLjAzMy4wMDMuMDAxLjAwMy4wMDEuMTEuMDMzLjAwMy4wMDEuMDA0LjAwMS4xMDkuMDMxLjAwNC4wMDJoLjAwM2wuMTEuMDMxLjAwMy4wMDEuMDA0LjAwMS4xMS4wM2guMDAzbC4wMDMuMDAxLjExLjAyOWguMDA0bC4wMDMuMDAyLjExLjAyNy4wMDMuMDAxLjAwNC4wMDEuMTEuMDI3aC4wMDNsLjAwNC4wMDEuMDA0LjAwMS4xNi4wMjIuMTYtLjAwOC4xNTctLjAzOC4xNDctLjA2Ny4xMzItLjA5Mi4xMTItLjExNi4wOS0uMTM0LjA2Mi0uMTQ5LjAzNC0uMTU3LjAwNC0uMTYxLS4wMjUtLjE2LS4wNTUtLjE1MS0uMDgyLS4xMzktLjEwNy0uMTItLjEyNy0uMS0uMTQzLS4wNzQtLjEyNC0uMDRoLS4wMDNsLS4xMDQtLjAyNS0uMTAzLS4wMjZoLS4wMDJsLS4wOTUtLjAyNmgtLjAwMWwtLjEwMS0uMDI3aC0uMDAybC0uMS0uMDI4aC0uMDAybC0uMTAzLS4wMy0uMTA0LS4wMzItLjA5Ny0uMDNoLS4wMDJsLS4xMDMtLjAzMy0uMTAyLS4wMzMtLjEwMS0uMDM0LS4xMDYtLjAzNi0uMDI3LS4wMS0uMDI3LS4wMDctLjEwNy0uMDMtLjEwNC0uMDI5LS4xMDQtLjAzaC0uMDAybC0uMDk3LS4wMy0uMTAyLS4wMzItLjEwMi0uMDMyLS4xMDItLjAzNC0uMTAzLS4wMzUtLjA5Ni0uMDM0LS4xLS4wMzYtLjEwMS0uMDM3aC0uMDAybC0uMDk0LS4wMzYtLjA5Ni0uMDM3LS4wOTctLjA0aC0uMDAybC0uMDk5LS4wNC0uMDk4LS4wNDJoLS4wMDJsLS4wOTItLjA0LS4wOTctLjA0My0uMDk1LS4wNDMtLjA5Ny0uMDQ0aC0uMDAybC0uMDktLjA0My0uMDk0LS4wNDUtLjA5NC0uMDQ2LS4wOTMtLjA0Ny0uMDktLjA0Ni0uMDk2LS4wNS0uMDg4LS4wNDctLjAwMi0uMDAxLS4wOS0uMDQ5LS4wOTQtLjA1Mi0uMDAyLS4wMDItLjA4Ny0uMDQ5LS4wODctLjA1aC0uMDAybC0uMDg4LS4wNTNoLS4wMDFsLS4wOS0uMDU1LS4wODYtLjA1Mi0uMDAyLS4wMDEtLjA4OS0uMDU1LS4wODQtLjA1NGgtLjAwMmwtLjA5LS4wNTloLS4wMDFsLS4wODUtLjA1Ni0uMDAxLS4wMDEtLjA4NC0uMDU2LS4wODItLjA1NmgtLjAwMWwtLjA4Ni0uMDYtLjA4Mi0uMDU4SDcuNzlsLS4wODYtLjA2Mi0uMDAyLS4wMDItLjA4LS4wNTgtLjA4MS0uMDZoLS4wMDFsLS4wODUtLjA2NC0uMDAyLS4wMDItLjA3Ni0uMDU4LS4wMDItLjAwMi0uMDgyLS4wNjQtLjE2MS0uMTI4LS4xNjItLjEzMy0uMDQtLjAzNC0uMTMyLS4wOTItLjE0Ny0uMDY2LS4xNTctLjAzOC0uMTYtLjAwOC0uMTYuMDIyelwiLFxuICBvcGFjaXR5OiBcIi45OFwiXG59KSk7XG5cbmZ1bmN0aW9uIF9leHRlbmRzJGQoKSB7IHJldHVybiBfZXh0ZW5kcyRkID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzJGQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxudmFyIFN0YXJ0RXZlbnROb25JbnRlcnJ1cHRpbmdTaWduYWxJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRkKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTYuMDA3IDguODJMOS4yMSAyMS4wMjJoMTMuNTk2TDE2LjAwNyA4Ljgyem0wIDEuNzc1bDUuMzI4IDkuNTYzSDEwLjY4bDUuMzI3LTkuNTYzek0xNi4xNC4zODZjLTEuNTcxLjIzNi00LjE5NS0uMjg0LTQuOSAxLjM4MS42MTkgMS43MDMgMi43NDUuMDY5IDQuMDg1LjM2NSAxLjQyMS0uMTMgMi44NC4yIDQuMjM1LjI1OUMyMS4yNy43ODQgMTguMTkuMzQ0IDE3IC40MTNhMjAuNDU2IDIwLjQ1NiAwIDAwLS44Ni0uMDI3ek0yNSAzLjE2MmMtMi4xOS42OTQuNDAxIDIuMjYgMS4xODEgMy4wOTQgMS4wODMgMS4xNTIgMS45NTQgMi40ODQgMi43MTUgMy44NjQgMS40OCAxLjAwNSAxLjg0NS0xLjI2LjgxLTIuMDMtMS4xNTgtMS44OTctMi42MTMtMy43MDQtNC41MTMtNC44OWwtLjE5Mi0uMDM4em0tMTguNDM4LjQyM2MtMS43OTMuNzEyLTIuOTA5IDIuNTQ4LTQuMDEgNC4wNjEtLjc3My44MTQtMi4yMTEgMy42NTMuMDA1IDMuMjExIDEuMTIzLTEuNDY5IDEuODctMy4zMDYgMy4yNjctNC42MTQuNjY0LS43IDIuNzMtMi4wMTMuNzM4LTIuNjU4em0yNC41NyAxMS4wNzJjLTEuNjU5LjQzNS0uNDY4IDIuNjY3LS45OSAzLjg5NWExMy40MjcgMTMuNDI3IDAgMDEtMS40OTcgNC40MzVjLS4yMyAxLjY1OSAxLjk5MSAxLjE2NSAyLjAxOC0uMTk5YTE0LjI3NyAxNC4yNzcgMCAwMDEuMjU0LTcuNTUyLjg2NS44NjUgMCAwMC0uNzg1LS41Nzl6bS0zMC4xOC42NjZjLTEuNjc3LjM4Ni0uNjMzIDIuNjY3LS42MDggMy44NzYuMzcxIDEuNjIzLjc5MiAzLjM1IDEuNzkgNC42OTYgMi4zODIuMzIxLjU3MS0yLjMzOC4yOTItMy40OTJhMTUuOTIgMTUuOTIgMCAwMS0uNjg0LTQuMzkuODc3Ljg3NyAwIDAwLS43OS0uNjl6bTI0LjU1OCAxMS44MWMtMS43NTUuODY1LTMuMzAzIDIuMjY2LTUuMjc0IDIuNzY1LTEuMTYyLS4wMTYtMy4wNzQgMS4yNzEtMS4zMzEgMi4xMDIgMi42Ni0uNDQ3IDUuMTYzLTEuNzMzIDcuMjM2LTMuNDQ1LjQ3Mi0uNTA2LjA2LTEuNDMyLS42MzEtMS40MjF6bS0xOS4xNTEuMDQzYy0yLjAwNC43ODYuNDE2IDIuNDA1IDEuNDMgMi45MTMgMS42MDguOTA0IDMuMzc5IDEuNjM2IDUuMjA4IDEuODc3IDEuNzctLjgwNC0uMjI4LTIuMDk0LTEuMzU3LTIuMDczLTEuNzUtLjUzNy0zLjQwMy0xLjM5Ni00Ljc5OC0yLjU4NmwtLjIyNy0uMTA0LS4yNTYtLjAyN3pcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRjKCkgeyByZXR1cm4gX2V4dGVuZHMkYyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRjLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50Tm9uSW50ZXJydXB0aW5nVGltZXJJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyRjKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTUuOTkxIDguN2MtMy4wMTgtLjA0Mi01LjkyIDEuOTI1LTcuMDMgNC43MjUtMS4xMzggMi42OTUtLjUwOSA2LjAxMSAxLjUzNyA4LjEwMiAxLjk5IDIuMTQyIDUuMjY3IDIuOTMgOC4wMTMgMS45MjcgMi44NzctLjk4IDQuOTktMy44MjYgNS4wNjctNi44Ny4xNTMtMi45NTYtMS42MjQtNS44OC00LjI5OS03LjEzNWE3LjU1MSA3LjU1MSAwIDAwLTMuMjg4LS43NXptMCAxLjM4M2MyLjc1OC0uMDUyIDUuMzcyIDEuOTcyIDYuMDE0IDQuNjU0LjcwNCAyLjU3OC0uNDgyIDUuNTE2LTIuNzkgNi44NjctMi4zNTggMS40OC01LjY4MiAxLjA4NS03LjYxNy0uOTE5LTIuMDQzLTEuOTctMi40MDctNS4zOC0uODQtNy43NDMgMS4xMS0xLjc2NCAzLjE0OS0yLjg4IDUuMjMzLTIuODZ6bTEuOTYyIDEuNzY0bC0yLjA3NCAzLjc2MmMtLjY0LjA2OC0uNzkzIDEuMDQtLjIwMiAxLjMuMzkuMjcuNjk2LS4xOCAxLjA1Mi0uMTY1aDMuMTd2LS44NjVoLTMuMTgybDEuOTkzLTMuNjE0LS43NTctLjQxOHpNMTYuMTIuMzU4aC0uMjMybC0uMjIuMDA0aC0uMDEybC0uMjIxLjAwNmgtLjAxMmwtLjIyLjAxaC0uMDEybC0uMjIuMDEzaC0uMDEybC0uMjIuMDE2aC0uMDEybC0uMjIuMDE5aC0uMDA1bC0uMDA2LjAwMS0uMjIuMDIxaC0uMDA2bC0uMDA1LjAwMS0uMjIuMDI1aC0uMDExbC0uMjIuMDI4aC0uMDA1bC0uMDA2LjAwMi0uMjE5LjAzaC0uMDA1bC0uMDA2LjAwMS0uMjE4LjAzMy0uMDA2LjAwMS0uMDA2LjAwMS0uMjE3LjAzNi0uMDA2LjAwMS0uMDA2LjAwMS0uMjE3LjAzOS0uMDA2LjAwMS0uMDA2LjAwMS0uMjE2LjA0Mi0uMDA2LjAwMS0uMDA2LjAwMS0uMjE1LjA0NS0uMDA2LjAwMS0uMDA2LjAwMi0uMjE1LjA0Ny0uMDA2LjAwMi0uMDA2LjAwMS0uMjE0LjA1LS4wMDYuMDAyLS4wMDYuMDAyLS4xMTUuMDI5LS4xNTIuMDUzLS4xNC4wODEtLjEyMi4xMDYtLjEuMTI2LS4wNzUuMTQzLS4wNDcuMTU0LS4wMTguMTYuMDEyLjE2LjA0Mi4xNTYuMDcuMTQ1LjA5NS4xMy4xMTguMTEuMTM3LjA4Ni4xNS4wNTkuMTU4LjAzaC4xNjFsLjEzMi0uMDIyLjExLS4wMjguMjAyLS4wNDcuMjAzLS4wNDYuMjA4LS4wNDMuMjAyLS4wMzkuMjA2LS4wMzcuMjA2LS4wMzQuMjA1LS4wMy4yMDgtLjAzLjIwNS0uMDI1LjIwOS0uMDIzLjIwOC0uMDIuMjEtLjAxNy4yMDktLjAxNS4yMDctLjAxMS4yMS0uMDA5LjIxLS4wMDYuMjA3LS4wMDNoLjIxbC4yMS4wMDIuMjA3LjAwNS4yMDcuMDA4LjIxMi4wMTEuMjA3LjAxNC4yMDguMDE3LjIwOS4wMTkuMjA4LjAyMi4yMDUuMDI1LjIwNi4wMjguMjA3LjAzLjIwOC4wMzUuMjA1LjAzNi4yMDIuMDM5LjA1Mi4wMS4xNi4wMTguMTYtLjAxMi4xNTYtLjA0Mi4xNDYtLjA3LjEzLS4wOTYuMTA5LS4xMTkuMDg1LS4xMzYuMDYtLjE1LjAzLS4xNTl2LS4xNmwtLjAzLS4xNi0uMDU5LS4xNS0uMDg2LS4xMzZMMTkuODIzLjlsLS4xMy0uMDk2LS4xNDUtLjA3LS4xMjgtLjAzOC0uMDU3LS4wMTEtLjAwNi0uMDAyaC0uMDA2TDE5LjEzNS42NGwtLjAwNi0uMDAxLS4wMDYtLjAwMS0uMjE3LS4wMzlIMTguOWwtLjAwNi0uMDAyLS4yMTctLjAzNS0uMDA2LS4wMDEtLjAwNi0uMDAxLS4yMTgtLjAzMi0uMDA2LS4wMDEtLjAwNi0uMDAxLS4yMTgtLjAzaC0uMDA2bC0uMDA2LS4wMDEtLjIxOS0uMDI3aC0uMDExbC0uMjItLjAyNC0uMDA1LS4wMDFoLS4wMDZsLS4yMi0uMDIxaC0uMDA2TDE3LjUxMi40MmwtLjIyLS4wMTctLjAwNS0uMDAxaC0uMDA2bC0uMjItLjAxNWgtLjAxMmwtLjIyLS4wMTJoLS4wMTJsLS4yMi0uMDFoLS4wMTJsLS4yMi0uMDA1aC0uMDEybC0uMjIxLS4wMDNoLS4wMTJ6bTguNzE1IDIuNzgzbC0uMTU3LjAzNC0uMTQ5LjA2My0uMTM0LjA4OS0uMTE2LjExMi0uMDkyLjEzMi0uMDY3LjE0Ny0uMDM4LjE1Ny0uMDA4LjE2LjAyMS4xNi4wNTEuMTUzLjA3OS4xNDEuMTAzLjEyNC4xMDIuMDg3LjA1Mi4wMzhoLjAwMWwuMDg3LjA2NHYuMDAxbC4wODIuMDYxLjAwMi4wMDEuMDc2LjA1OWguMDAxbC4wODQuMDY1LjA4Mi4wNjYuMDAyLjAwMS4wNzkuMDYzLjAwMi4wMDIuMDc3LjA2My4wODEuMDY3LjAwMi4wMDIuMDc3LjA2NS4wNzYuMDY1LjAwMS4wMDIuMDguMDcuMDc4LjA3aC4wMDJsLjA3NS4wNjguMDc3LjA3Mi4wMDIuMDAxLjA3My4wNjkuMDc3LjA3My4wNzIuMDcuMDAyLjAwMS4wNzcuMDc2LjA3LjA3di4wMDFsLjA3NS4wNzYuMDcuMDczLjAwMi4wMDEuMDc0LjA3OS4wMDIuMDAyLjA2OS4wNzQuMDY5LjA3NS4wNzQuMDgyLjA3LjA4LjAwMi4wMDEuMDY4LjA3OWguMDAxbC4wNjcuMDc5LjA2OC4wODIuMDY1LjA3OC4wMDEuMDAyLjA2OC4wODMuMDY3LjA4NC4wNjMuMDgxLjAwMS4wMDIuMDY3LjA4Ny4wMDIuMDAyLjA2My4wODQuMDAxLjAwMS4wNjQuMDg3LjAwOC4wMS4wMDguMDEuMDk1LjEyLjA5My4xMjEuMDkuMTE5LjA4Ny4xMTkuMDg4LjEyMi4wODYuMTIzLjA4NC4xMi4wODEuMTIyLjAwMS4wMDIuMDg0LjEyNi4wOC4xMjYuMDguMTI3LjA3Ny4xMjYuMDc5LjEzMS4wNzQuMTI3LjA3NS4xMzEuMDczLjEzMS4wNy4xMy4wNy4xMzMuMDY5LjEzMy4wNDUuMDkuMDg2LjEzNy4xMDkuMTE5LjEzLjA5Ni4xNDQuMDcuMTU2LjA0Mi4xNi4wMTMuMTYtLjAxNy4xNTUtLjA0Ny4xNDMtLjA3NS4xMjYtLjEuMTA2LS4xMjEuMDgyLS4xNC4wNTQtLjE1MS4wMjUtLjE2LS4wMDUtLjE2LS4wMzUtLjE1OC0uMDUtLjEyNC0uMDQ4LS4wOTUtLjAwMi0uMDA0LS4wMDItLjAwNC0uMDczLS4xNC0uMDAyLS4wMDUtLjAwMi0uMDA0LS4wNzQtLjE0LS4wMDItLjAwNC0uMDAyLS4wMDQtLjA3Ni0uMTQtLjAwMi0uMDAzLS4wMDItLjAwNC0uMDc3LS4xMzktLjAwMy0uMDA0LS4wMDItLjAwNC0uMDc4LS4xMzgtLjAwMy0uMDA0LS4wMDItLjAwMy0uMDgtLjEzNy0uMDAyLS4wMDQtLjAwMy0uMDA0LS4wODEtLjEzNi0uMDAyLS4wMDQtLjAwMy0uMDA0LS4wODMtLjEzNi0uMDAyLS4wMDMtLjAwMi0uMDA0LS4wODUtLjEzNS0uMDAyLS4wMDQtLjAwMy0uMDAzLS4wODUtLjEzNC0uMDAzLS4wMDQtLjAwMi0uMDA0LS4wODctLjEzMi0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wODgtLjEzMi0uMDAzLS4wMDMtLjAwMi0uMDA0LS4wOS0uMTMtLjAwMy0uMDA1LS4wMDMtLjAwMy0uMDkxLS4xMy0uMDAzLS4wMDQtLjAwMi0uMDA0LS4wOTMtLjEyOS0uMDAzLS4wMDMtLjAwMy0uMDA0LS4wOTQtLjEyOC0uMDAzLS4wMDQtLjAwMy0uMDAzLS4wOTUtLjEyNy0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOTctLjEyNS0uMDAzLS4wMDQtLjAwMy0uMDA0LS4wOS0uMTE0LS4wNi0uMDgyLS4wMDMtLjAwMy0uMDAyLS4wMDMtLjA2OS0uMDkxLS4wMDItLjAwNC0uMDAyLS4wMDMtLjA3LS4wOS0uMDAzLS4wMDMtLjAwMi0uMDAzLS4wNy0uMDktLjAwMy0uMDAzLS4wMDItLjAwMy0uMDcxLS4wOS0uMDAyLS4wMDMtLjAwMy0uMDAyLS4wNzItLjA4OS0uMDAyLS4wMDMtLjAwMi0uMDAzLS4wNzMtLjA4OC0uMDAyLS4wMDMtLjAwMi0uMDAyLS4wNzQtLjA4Ny0uMDAyLS4wMDMtLjAwMi0uMDAzLS4wNzQtLjA4Ni0uMDAzLS4wMDMtLjAwMi0uMDAzLS4wNzQtLjA4Ni0uMDAzLS4wMDItLjAwMi0uMDAzLS4wNzUtLjA4NS0uMDAzLS4wMDMtLjAwMi0uMDAyLS4wNzYtLjA4NC0uMDAyLS4wMDMtLjAwMy0uMDAzLS4wNzYtLjA4My0uMDAyLS4wMDMtLjAwMy0uMDAzLS4wNzctLjA4Mi0uMDAyLS4wMDMtLjAwMy0uMDAyLS4wNzctLjA4Mi0uMDAzLS4wMDMtLjAwMy0uMDAyLS4wNzgtLjA4MS0uMDAyLS4wMDMtLjAwMy0uMDAzLS4wNzgtLjA4LS4wMDMtLjAwMi0uMDAzLS4wMDMtLjA3OS0uMDgtLjAwMi0uMDAyLS4wMDMtLjAwMi0uMDgtLjA4LS4wMDItLjAwMi0uMDAzLS4wMDItLjA4LS4wNzgtLjAwMy0uMDAzLS4wMDMtLjAwMi0uMDgtLjA3Ny0uMDAzLS4wMDMtLjAwMy0uMDAyLS4wODItLjA3Ny0uMDAyLS4wMDItLjAwMy0uMDAyLS4wODItLjA3Ni0uMDAzLS4wMDItLjAwMi0uMDAzLS4wODMtLjA3NS0uMDAzLS4wMDItLjAwMi0uMDAzLS4wODQtLjA3NC0uMDAyLS4wMDItLjAwMy0uMDAyLS4wODQtLjA3NC0uMDAzLS4wMDItLjAwMi0uMDAyLS4wODUtLjA3My0uMDAyLS4wMDItLjAwMy0uMDAzLS4wODUtLjA3MS0uMDAzLS4wMDMtLjAwMi0uMDAyLS4wODYtLjA3LS4wMDMtLjAwMy0uMDAyLS4wMDItLjA4Ni0uMDctLjAwMy0uMDAzLS4wMDMtLjAwMi0uMDg2LS4wNy0uMDAzLS4wMDItLjAwMy0uMDAyLS4wODctLjA2OS0uMDAyLS4wMDItLjAwMy0uMDAyLS4wODgtLjA2OC0uMDAyLS4wMDItLjAwMy0uMDAyLS4wODgtLjA2Ny0uMDAzLS4wMDMtLjAwMy0uMDAyLS4wODgtLjA2Ni0uMDAzLS4wMDItLjAwMy0uMDAyLS4wODktLjA2Ni0uMDAzLS4wMDItLjAwMy0uMDAyLS4wNTctLjA0Mi0uMTQtLjA4Mi0uMTUtLjA1NS0uMTYtLjAyNi0uMTYuMDA0em0tMTguNDU4LjQyNmwtLjE1Ny4wMzctLjE0OC4wNjYtLjExMS4wNzQtLjAwNy4wMDYtLjAwMy4wMDItLjAwMy4wMDItLjA4Ni4wNjktLjAwMy4wMDItLjAwMi4wMDItLjA4Ni4wNy0uMDAzLjAwMi0uMDAyLjAwMi0uMDg2LjA3LS4wMDIuMDAzLS4wMDMuMDAyLS4wODUuMDcxLS4wMDIuMDAyLS4wMDMuMDAzLS4wODQuMDcxLS4wMDMuMDAzLS4wMDIuMDAyLS4wODQuMDcyLS4wMDMuMDAzLS4wMDIuMDAyLS4wODMuMDczLS4wMDMuMDAzLS4wMDIuMDAyLS4wODMuMDc0LS4wMDIuMDAyLS4wMDMuMDAzLS4wODIuMDc0LS4wMDMuMDAzLS4wMDIuMDAyLS4wODEuMDc2LS4wMDMuMDAyLS4wMDMuMDAyLS4wOC4wNzctLjAwMy4wMDItLjAwMy4wMDMtLjA4LjA3Ni0uMDAyLjAwMy0uMDAzLjAwMi0uMDguMDc4LS4wMDIuMDAyLS4wMDMuMDAzLS4wNzkuMDc4LS4wMDIuMDAzLS4wMDMuMDAyLS4wNzguMDgtLjAwMy4wMDItLjAwMi4wMDItLjA3OC4wOC0uMDAyLjAwMy0uMDAzLjAwMi0uMDc3LjA4LS4wMDMuMDA0LS4wMDIuMDAyLS4wNzcuMDgxLS4wMDIuMDAzLS4wMDMuMDAzLS4wNzYuMDgyLS4wMDIuMDAyLS4wMDMuMDAzLS4wNzUuMDgyLS4wMDIuMDAzLS4wMDMuMDAzLS4wNzQuMDgzLS4wMDMuMDAzLS4wMDIuMDAzLS4wNzQuMDg0LS4wMDMuMDAzLS4wMDIuMDAyLS4wNzQuMDg1LS4wMDIuMDAzLS4wMDIuMDAzLS4wNzMuMDg1LS4wMDMuMDAzLS4wMDIuMDAzLS4wNzIuMDg2LS4wMDIuMDAzLS4wMDMuMDAzLS4wNzEuMDg3LS4wMDMuMDAzLS4wMDIuMDAyLS4wNy4wODgtLjAwMy4wMDMtLjAwMi4wMDMtLjA3LjA4OC0uMDAzLjAwMy0uMDAyLjAwMy0uMDcuMDktLjAwMi4wMDItLjAwMi4wMDMtLjA2OS4wOS0uMDAyLjAwMy0uMDAzLjAwMy0uMDY4LjA5LS4wMDIuMDAzLS4wMDIuMDAzLS4wNjcuMDkyLS4wMDMuMDAzLS4wMDIuMDAzLS4wNjcuMDkyLS4wMDIuMDAzLS4wMDIuMDAzLS4wNjYuMDkyLS4wMDIuMDAzLS4wMDIuMDA0LS4wNjYuMDkzLS4wMDIuMDAzLS4wMDIuMDAzLS4wNjUuMDk0LS4wMDIuMDAzLS4wMDIuMDA0LS4wNjQuMDk0LS4wMDIuMDAzLS4wMDIuMDA0LS4wNjMuMDk1LS4wMDIuMDAzLS4wMDIuMDAzLS4wNjMuMDk3LS4wMDIuMDAzLS4wMDIuMDAzLS4wNDYuMDczLS4wNS4wNy0uMDAzLjAwMi0uMDAyLjAwMy0uMDY3LjA5My0uMDAzLjAwMy0uMDAyLjAwMy0uMDY2LjA5NC0uMDAyLjAwMy0uMDAyLjAwMy0uMDY2LjA5NC0uMDAyLjAwMy0uMDAyLjAwMy0uMDY0LjA5NC0uMDAyLjAwNC0uMDAyLjAwMy0uMDY0LjA5NC0uMDAyLjAwNC0uMDAyLjAwMy0uMDYyLjA5NS0uMDAyLjAwMy0uMDAyLjAwMy0uMDYyLjA5Ni0uMDAyLjAwMy0uMDAyLjAwMy0uMDYuMDk2LS4wMDMuMDAzLS4wMDIuMDAzLS4wNi4wOTYtLjAwMS4wMDQtLjAwMi4wMDMtLjA1OS4wOTYtLjAwMi4wMDQtLjAwMi4wMDMtLjA1OC4wOTctLjAwMi4wMDMtLjAwMS4wMDMtLjA1Ny4wOTgtLjAwMi4wMDMtLjAwMi4wMDMtLjA1Ni4wOTgtLjAwMi4wMDMtLjAwMi4wMDMtLjA1NS4wOTgtLjAwMi4wMDQtLjAwMS4wMDMtLjA1NS4wOTgtLjAwMS4wMDQtLjAwMi4wMDMtLjA1NC4wOTktLjAwMS4wMDMtLjAwMi4wMDMtLjA1Mi4xLS4wMDIuMDAyLS4wMDIuMDA0LS4wNTEuMS0uMDAyLjAwMi0uMDAyLjAwNC0uMDUuMS0uMDAyLjAwMy0uMDAyLjAwMy0uMDUuMXYuMDAzbC0uMDAyLjAwNC0uMDUuMVY5LjVsLS4wMDIuMDA0LS4wNDguMS0uMDAyLjAwNC0uMDAxLjAwMy0uMDQ3LjEwMS0uMDAyLjAwMy0uMDAxLjAwNC0uMDEzLjAyNy0uMDUyLjE1Mi0uMDI0LjE2LjAwNi4xNi4wMzcuMTU3LjA2NC4xNDguMDkxLjEzMy4xMTQuMTE0LjEzNC4wOS4xNDcuMDY1LjE1Ny4wMzYuMTYyLjAwNi4xNTktLjAyNC4xNTItLjA1My4xNC0uMDguMTIyLS4xMDUuMS0uMTI2LjA2Ni0uMTE3LjAxLS4wMjMuMDQ0LS4wOTUuMDQ1LS4wOTUuMDAyLS4wMDMuMDQyLS4wODcuMDQ4LS4wOTcuMDQ4LS4wOTV2LS4wMDFsLjA0OC0uMDkyLjAwMS0uMDAxLjA0Ny0uMDkuMDUtLjA5My4wMDItLjAwMi4wNDktLjA5LjA1Mi0uMDkyLjAwMS0uMDAyLjA1MS0uMDg5LjAwMS0uMDAyLjA1MS0uMDg3LjA1My0uMDg4LjAwMS0uMDAyLjA1NS0uMDkxLjA1Ny0uMDkxLjA1Ny0uMDkuMDAxLS4wMDIuMDU3LS4wODkuMDU1LS4wODMuMDAxLS4wMDIuMDYtLjA5LjA2LS4wODguMDYyLS4wODkuMDAxLS4wMDEuMDYtLjA4NC4wNjMtLjA4OC4wNjUtLjA4OS4wMTctLjAyMy4wMTYtLjAyNS4wNi0uMDk0LjA1OS0uMDl2LS4wMDJsLjA1OC0uMDg2LjA1Ny0uMDg2LjAwMS0uMDAxLjA2Mi0uMDkuMDYyLS4wODguMDAxLS4wMDIuMDYtLjA4NS4wMDItLjAwMi4wNi0uMDgyLjA2My0uMDg3LjA2NC0uMDg0LjAwMi0uMDAyLjA2MS0uMDguMDY1LS4wODQuMDY0LS4wOHYtLjAwMWwuMDY3LS4wODMuMDY3LS4wODIuMDctLjA4My4wNjktLjA4LjA2My0uMDc0LjA3NC0uMDgzLjA2OC0uMDc3LjAwMi0uMDAyLjA3LS4wNzYuMDctLjA3NS4wNzItLjA3Ny4wMDEtLjAwMS4wNjctLjA3LjA3Ni0uMDc4LjAwMi0uMDAyLjA3LS4wNy4wNzUtLjA3NS4wMDItLjAwMi4wNzItLjA3LjA3NS0uMDcyLjAwMi0uMDAyLjA3My0uMDY5LjA3NC0uMDY4LjAwMS0uMDAxLjA4LS4wNzMuMDc2LS4wNjguMDAyLS4wMDIuMDcyLS4wNjN2LS4wMDFsLjA3OC0uMDY3LjA3OS0uMDY4LjAwMi0uMDAxLjA4LS4wNjguMDAyLS4wMDIuMDc3LS4wNjMuMDgyLS4wNjYuMDAxLS4wMDEuMDc1LS4wNi4wMDItLjAwMi4wMDYtLjAwNC4xMTctLjExMS4wOTQtLjEzMS4wNjgtLjE0Ni4wNC0uMTU2LjAxLS4xNjEtLjAxOS0uMTYtLjA0OS0uMTU0LS4wNzYtLjE0MS0uMTAyLS4xMjUtLjEyMy0uMTA1LS4xNC0uMDc5LS4xNTMtLjA1Mi0uMTYtLjAyMy0uMTYuMDA3em0yNC41OTYgMTEuMDg4bC0uMTU2LjA0LS4xNDYuMDY3LS4xMzEuMDk0LS4xMTIuMTE3LS4wODcuMTM1LS4wNjEuMTUtLjAzMy4xNTctLjAwNC4xMzQuMDA3LjE0Mi4wMDUuMTUyLjAwNC4xNS4wMDIuMTQ5di4xNTNsLjAwMS4wMTF2LjAxNWwuMDA0LjExLjAwMi4xMXYuMDAybC4wMDIuMTA2di4zMjFsLS4wMDMuMTAyLS4wMDIuMTA2LS4wMDQuMTA3LS4wMDUuMTA1LS4wMDYuMTA2LS4wMDYuMTA2LS4wMDguMTA2di4wMDJsLS4wMDguMTAzdi4wMDJsLS4wMS4xLS4wMS4xMDUtLjAxLjEwNS0uMDEzLjEwNS0uMDEyLjA5OXYuMDAybC0uMDE0LjEwOC0uMDE0LjEtLjAxNi4xMDUtLjAxNi4xMDN2LjAwMmwtLjAxNy4wOTktLjAxOC4xMDQtLjAxOS4xMDN2LjAwMmwtLjAxOS4wOTctLjAyLjEwNC0uMDIyLjEwM3YuMDAxbC0uMDIyLjA5OC0uMDIzLjEwM3YuMDAybC0uMDI0LjA5Ni0uMDI1LjEwM3YuMDAybC0uMDI0LjA5Ni0uMDI3LjEwMnYuMDAzbC0uMDI2LjA5M3YuMDAxbC0uMDI5LjEwM3YuMDAybC0uMDMuMDk5LS4wMjguMDk3di4wMDJsLS4wMy4wOTUtLjAzLjA5NnYuMDAxbC0uMDMzLjEtLjAzMS4wOTV2LjAwMmwtLjAzNS4xdi4wMDNsLS4wMzQuMDk0di4wMDNsLS4wMzUuMDk2di4wMDFsLS4wMzQuMDl2LjAwMmwtLjAzOC4wOTgtLjAzNi4wOTN2LjAwMmwtLjAzOC4wOTUtLjA3OS4xOTQtLjA4LjE4OC0uMDg1LjE4OS0uMDg3LjE5LS4wOS4xODQtLjA5Mi4xODMtLjA5NS4xODQtLjA1LjA5My0uMDY0LjE0OC0uMDM0LjE1OC0uMDA1LjE2LjAyNi4xNi4wNTQuMTUxLjA4Mi4xNC4xMDYuMTIuMTI3LjEuMTQzLjA3NS4xNTQuMDQ2LjE2LjAxNy4xNjEtLjAxMy4xNTYtLjA0Mi4xNDQtLjA3MS4xMy0uMDk2LjEwOS0uMTE5LjA3Mi0uMTEyLjA1My0uMDk5LjAwMy0uMDA1LjAwMy0uMDA2LjEwMi0uMTk1LjAwMy0uMDA2LjAwMy0uMDA2LjA5OC0uMTk2LjAwMy0uMDA2LjAwMy0uMDA2LjA5Ni0uMTk3LjAwMi0uMDA2LjAwMy0uMDA2LjA5My0uMi4wMDItLjAwNi4wMDMtLjAwNi4wOS0uMi4wMDItLjAwNi4wMDMtLjAwNy4wODYtLjIwMi4wMDMtLjAwNi4wMDItLjAwNi4wODQtLjIwMy4wMDItLjAwNS4wMDEtLjAwNS4wNC0uMTAyLjAwMi0uMDAzLjAwMS0uMDAzLjA0LS4xMDMuMDAxLS4wMDMuMDAxLS4wMDMuMDQtLjEwM3YtLjAwNGwuMDAxLS4wMDMuMDM5LS4xMDN2LS4wMDNsLjAwMi0uMDAzLjAzNy0uMTA0LjAwMS0uMDAzLjAwMS0uMDAzLjAzNy0uMTA0di0uMDA0bC4wMDItLjAwMy4wMzUtLjEwNC4wMDItLjAwM3YtLjAwNGwuMDM1LS4xMDQuMDAyLS4wMDR2LS4wMDNsLjAzNC0uMTA1LjAwMi0uMDAzdi0uMDAzbC4wMzQtLjEwNXYtLjAwNGwuMDAyLS4wMDMuMDMyLS4xMDYuMDAxLS4wMDMuMDAxLS4wMDMuMDMxLS4xMDYuMDAxLS4wMDMuMDAxLS4wMDQuMDMxLS4xMDYuMDAxLS4wMDMuMDAxLS4wMDQuMDMtLjEwNnYtLjAwM2wuMDAyLS4wMDQuMDI4LS4xMDcuMDAxLS4wMDMuMDAxLS4wMDMuMDI4LS4xMDcuMDAxLS4wMDQuMDAxLS4wMDMuMDI3LS4xMDcuMDAxLS4wMDR2LS4wMDNsLjAyNy0uMTA4LjAwMS0uMDAzdi0uMDA0bC4wMjYtLjEwOC4wMDEtLjAwM3YtLjAwNGwuMDI1LS4xMDguMDAxLS4wMDN2LS4wMDRsLjAyNS0uMTA4di0uMDA0bC4wMDEtLjAwMy4wMjMtLjEwOXYtLjAwM2wuMDAxLS4wMDQuMDIyLS4xMDl2LS4wMDNsLjAwMi0uMDA0LjAyLS4xMDkuMDAxLS4wMDR2LS4wMDNsLjAyLS4xMS4wMDItLjAwM3YtLjAwNGwuMDItLjExdi0uMDA3bC4wMTktLjExdi0uMDAzbC4wMDEtLjAwNC4wMTctLjExdi0uMDA0bC4wMDEtLjAwMy4wMTctLjExdi0uMDA4bC4wMTYtLjExdi0uMDA0bC4wMDEtLjAwNC4wMTUtLjExdi0uMDA4bC4wMTUtLjExMXYtLjAwOGwuMDEzLS4xMTF2LS4wMDdsLjAxMy0uMTEydi0uMDA3bC4wMTEtLjExMnYtLjAwNGwuMDAxLS4wMDQuMDEtLjExMnYtLjAwN2wuMDEtLjExMnYtLjAwOGwuMDA4LS4xMTJ2LS4wMDhsLjAwNy0uMTEzdi0uMDA3bC4wMDctLjExM3YtLjAwOGwuMDA1LS4xMTN2LS4wMDdsLjAwNS0uMTE0di0uMDA3bC4wMDMtLjExNHYtLjAwN2wuMDAzLS4xMTR2LS4xMjlsLjAwMS0uMTE0di0uMTNsLS4wMDMtLjExNFYxNi41bC0uMDAzLS4xMTV2LS4wMDdsLS4wMDMtLjEwMnYtLjE1NWwtLjAwMy0uMTU4di0uMDFsLS4wMDQtLjE1OHYtLjAxbC0uMDA2LS4xNTh2LS4wMWwtLjAwNy0uMTQ4LS4wMjMtLjE2LS4wNTEtLjE1Mi0uMDgtLjE0LS4xMDMtLjEyNC0uMTI1LS4xMDItLjE0Mi0uMDc3LS4xNTMtLjA1LS4xNi0uMDItLjE2MS4wMXptLTMwLjIxMy42NmwtLjE1Ny4wMzQtLjE0OS4wNjMtLjEzNC4wOS0uMTE1LjExMy0uMDkyLjEzMi0uMDY3LjE0Ny0uMDM3LjE1Ni0uMDA5LjEzNC4wMDEuMTFWMTYuMzA4bC4wMDYuMjJ2LjAxMmwuMDEuMjJ2LjAxMmwuMDEyLjIydi4wMDZsLjAwMS4wMDYuMDE1LjIydi4wMDVsLjAwMS4wMDYuMDE4LjIyLjAwMS4wMDZ2LjAwNmwuMDIyLjIxOXYuMDA2bC4wMDEuMDA2LjAyNC4yMTkuMDAxLjAwNnYuMDA2bC4wMjguMjE4LjAwMS4wMDZ2LjAwNmwuMDMxLjIxOC4wMDEuMDA2LjAwMS4wMDYuMDMzLjIxOC4wMDEuMDA2LjAwMS4wMDUuMDM3LjIxOHYuMDA2bC4wMDIuMDA1LjA0LjIxN3YuMDA2bC4wMDEuMDA2LjA0My4yMTYuMDAxLjAwNi4wMDEuMDA2LjA0Ni4yMTZ2LjAwNWwuMDAyLjAwNi4wNDguMjE1LjAwMi4wMDYuMDAxLjAwNi4wNTEuMjE0LjAwMi4wMDZ2LjAwNmwuMDU1LjIxNC4wMDIuMDA1LjAwMS4wMDYuMDU3LjIxMy4wMDIuMDA2LjAwMS4wMDUuMDYuMjEzLjAwMi4wMDUuMDAxLjAwNi4wNjMuMjEyLjAwMi4wMDUuMDAxLjAwNi4wNjYuMjEuMDAyLjAwNi4wMDIuMDA2LjA2OC4yMS4wMDIuMDA1LjAwMi4wMDUuMDcuMjEuMDAzLjAwNS4wMDIuMDA1LjA3NC4yMDguMDAyLjAwNi4wMDIuMDA1LjA3Ny4yMDcuMDAyLjAwNi4wMDIuMDA1LjA4LjIwNi4wMDIuMDA1LjAwMi4wMDYuMDgyLjIwNC4wMDIuMDA2LjAwMi4wMDUuMDg2LjIwNC4wMDIuMDA1LjAwMi4wMDYuMDg4LjIwMi4wMDIuMDA1LjAwMy4wMDYuMDkuMi4wMDMuMDA2LjAwMi4wMDUuMDk0LjIuMDAyLjAwNi4wMDMuMDA1LjA5Ni4xOTkuMDAyLjAwNS4wMDMuMDA1LjAzLjA2Mi4wODYuMTM3LjExLjExOC4xMjguMDk3LjE0NS4wNy4xNTYuMDQzLjE2LjAxMy4xNi0uMDE3LjE1NS0uMDQ3LjE0My0uMDc0LjEyNy0uMS4xMDYtLjEyMS4wODEtLjE0LjA1NS0uMTUuMDI1LS4xNi0uMDA1LS4xNjEtLjAzNC0uMTU4LS4wNS0uMTI0LS4wMjgtLjA1NS0uMDkyLS4xOS0uMDg3LS4xODgtLjA4Ny0uMTkyLS4wODMtLjE5LS4wOC0uMTkzLS4wNzgtLjE5NC0uMDc2LS4xOTYtLjA3My0uMTk1LS4wNy0uMTk3LS4wNjctLjE5OC0uMDY1LS4xOTktLjA2My0uMi0uMDU5LS4yLS4wNTYtLjItLjA1NS0uMjA0LS4wNS0uMjAxLS4wNDktLjIwMi0uMDQ2LS4yMDUtLjA0My0uMjA2LS4wNC0uMjAzLS4wMzgtLjIwNy0uMDM0LS4yMDQtLjAzMi0uMjA3LS4wMjgtLjIwNS0uMDI2LS4yMDctLjAyMy0uMjA4LS4wMi0uMjA3LS4wMTgtLjIwNy0uMDE0LS4yMDgtLjAxMS0uMjA3LS4wMDktLjIwOC0uMDA1LS4yMDctLjAwMi0uMTA0LS4wMTctLjE2LS4wNDYtLjE1NS0uMDc0LS4xNDMtLjEtLjEyNi0uMTIxLS4xMDctLjEzOS0uMDgxLS4xNTItLjA1NS0uMTU5LS4wMjUtLjE2MS4wMDR6bTI0LjU4NSAxMS44M2wtLjE1Ni4wMzktLjE0Ni4wNjgtLjExLjA3Ni0uMDE1LjAxMi0uMTYzLjEyOS0uMTY2LjEyNy0uMTY4LjEyNS0uMTcuMTI0LS4xNy4xMi0uMTcyLjExOC0uMTczLjExNS0uMTc2LjExNC0uMTc3LjExMS0uMTguMTEtLjE3OC4xMDUtLjE4Mi4xMDQtLjE4Mi4xMDEtLjE4NC4xLS4xODQuMDk1LS4xODkuMDk1LS4xODYuMDktLjE4OC4wODktLjE5LjA4Ni0uMTkuMDgyLS4xOTMuMDgxLS4xOTUuMDc4LS4xOTEuMDc0LS4xOTcuMDczLS4xOTUuMDctLjE5Ni4wNjUtLjE5OC4wNjQtLjE5OC4wNjEtLjIuMDU4LS4yLjA1NS0uMi4wNTItLjIuMDQ5LS4xNTEuMDM1LS4xNTMuMDUtLjE0MS4wNzgtLjEyNS4xMDMtLjEwMy4xMjQtLjA3OC4xNC0uMDUuMTU0LS4wMjIuMTYuMDA5LjE2LjAzOC4xNTcuMDY3LjE0Ny4wOTMuMTMyLjExNi4xMTIuMTM0LjA4OS4xNDkuMDYyLjE1OC4wMzQuMTYuMDAzLjEzMy0uMDIuMTU4LS4wMzUuMDA2LS4wMDIuMDA2LS4wMDEuMjEzLS4wNTIuMDA2LS4wMDIuMDA3LS4wMDEuMjEyLS4wNTYuMDA2LS4wMDEuMDA2LS4wMDIuMjEyLS4wNTguMDA2LS4wMDIuMDA2LS4wMDIuMjExLS4wNjEuMDA2LS4wMDIuMDA2LS4wMDIuMjEtLjA2NC4wMDYtLjAwMi4wMDYtLjAwMi4yMS0uMDY3LjAwNS0uMDAyLjAwNi0uMDAyLjIwOC0uMDcuMDA2LS4wMDIuMDA2LS4wMDMuMjA3LS4wNzMuMDA2LS4wMDIuMDA2LS4wMDIuMjA2LS4wNzcuMDA2LS4wMDIuMDA1LS4wMDIuMjA2LS4wOC4wMDUtLjAwMS4wMDYtLjAwMy4yMDQtLjA4Mi4wMDYtLjAwMi4wMDUtLjAwMi4yMDMtLjA4NS4wMDYtLjAwMy4wMDUtLjAwMi4yMDItLjA4OC4wMDYtLjAwMi4wMDUtLjAwMy4yLS4wOS4wMDYtLjAwMy4wMDYtLjAwMy4yLS4wOTMuMDA1LS4wMDMuMDA1LS4wMDIuMTk4LS4wOTYuMDA2LS4wMDMuMDA1LS4wMDMuMTk3LS4wOTkuMDA1LS4wMDIuMDA1LS4wMDMuMTk2LS4xMDIuMDA1LS4wMDIuMDA1LS4wMDMuMTk1LS4xMDUuMDA1LS4wMDIuMDA1LS4wMDMuMTkzLS4xMDcuMDA1LS4wMDMuMDA1LS4wMDMuMTkxLS4xMS4wMDUtLjAwMy4wMDUtLjAwMy4xOS0uMTEyLjAwNS0uMDAzLjAwNS0uMDAzLjE4OS0uMTE1LjAwNS0uMDAzLjAwNS0uMDAzLjE4Ny0uMTE3LjAwNS0uMDAzLjAwNC0uMDA0LjE4Ni0uMTIuMDA1LS4wMDMuMDA0LS4wMDMuMTg0LS4xMjIuMDA1LS4wMDMuMDA1LS4wMDQuMTgyLS4xMjUuMDA0LS4wMDMuMDA1LS4wMDMuMTgtLjEyOC4wMDUtLjAwMy4wMDUtLjAwMy4xNzktLjEzLjAwNC0uMDAzLjAwNS0uMDA0LjE3Ny0uMTMyLjAwNC0uMDA0LjAwNS0uMDAzLjE3NS0uMTM1LjAwNS0uMDAzLjAwNC0uMDA0LjE3My0uMTM3LjAwNS0uMDAzLjAwNC0uMDA0LjAxOS0uMDE1LjExNS0uMTEzLjA5Mi0uMTMyLjA2Ni0uMTQ3LjAzOC0uMTU3LjAwOC0uMTYtLjAyMi0uMTYtLjA1Mi0uMTUzLS4wNzktLjE0LS4xMDMtLjEyNC0uMTI1LS4xMDItLjE0Mi0uMDc4LS4xNTMtLjA1LS4xNi0uMDItLjE2LjAxem0tMTkuMTcuMDU0bC0uMTUzLjA1MS0uMTQuMDc5LS4xMjQuMTAzLS4xMDMuMTI1LS4wNzcuMTQxLS4wNS4xNTMtLjAyLjE2LjAwOS4xNjEuMDQuMTU2LjA2Ny4xNDcuMDkzLjEzMS4wOTUuMDk0LjA0Ny4wNC4wMDUuMDA0LjAwNS4wMDQuMTcuMTQuMDA1LjAwNC4wMDUuMDA0LjE3Mi4xMzcuMDA0LjAwNC4wMDUuMDAzLjA4Ni4wNjcuMDAzLjAwMi4wMDMuMDAyLjA4Ny4wNjcuMDAzLjAwMi4wMDMuMDAyLjA4OC4wNjYuMDAyLjAwMy4wMDMuMDAyLjA4OS4wNjUuMDAyLjAwMi4wMDMuMDAyLjA5LjA2NS4wMDIuMDAyLjAwMy4wMDIuMDkuMDY0LjAwMi4wMDIuMDAzLjAwMi4wOS4wNjMuMDAzLjAwMi4wMDMuMDAyLjA5LjA2My4wMDMuMDAyLjAwMy4wMDIuMDkyLjA2Mi4wMDIuMDAyLjAwMy4wMDIuMDkyLjA2MS4wMDMuMDAyLjAwMy4wMDIuMDkyLjA2LjAwMy4wMDMuMDAzLjAwMS4wOTMuMDYuMDAzLjAwMi4wMDMuMDAyLjA5My4wNi4wMDMuMDAxLjAwMy4wMDIuMDk0LjA1OC4wMDMuMDAyLjAwMy4wMDIuMDk1LjA1OC4wMDMuMDAxLjAwMy4wMDIuMDk1LjA1Ny4wMDMuMDAyLjAwMy4wMDIuMDk1LjA1Ni4wMDMuMDAyLjAwMy4wMDIuMDk2LjA1NS4wMDQuMDAyLjAwMy4wMDEuMDk2LjA1NS4wMDMuMDAyLjAwMy4wMDIuMDk4LjA1My4wMDMuMDAyLjAwMy4wMDIuMDk3LjA1My4wMDQuMDAyLjAwMy4wMDEuMDk4LjA1My4wMDMuMDAxLjAwMy4wMDIuMDk5LjA1Mi4wMDMuMDAxLjAwMy4wMDIuMS4wNS4wMDMuMDAyLjAwMy4wMDIuMS4wNS4wMDMuMDAyLjAwMy4wMDEuMS4wNWguMDAzbC4wMDQuMDAzLjEuMDQ4LjAwNC4wMDEuMDAzLjAwMi4xMDEuMDQ4LjAwMy4wMDEuMDA0LjAwMi4xMDEuMDQ2LjAwNC4wMDIuMDAzLjAwMS4xMDIuMDQ2LjAwNC4wMDIuMDAzLjAwMS4xMDMuMDQ1LjAwMy4wMDIuMDAzLjAwMS4xMDMuMDQ1LjAwNC4wMDEuMDAzLjAwMi4xMDQuMDQzLjAwMy4wMDEuMDA0LjAwMi4xMDQuMDQyLjAwMy4wMDIuMDA0LjAwMS4xMDQuMDQyLjAwNC4wMDEuMDAzLjAwMi4xMDUuMDQuMDA0LjAwMi4wMDMuMDAxLjEwNi4wNC4wMDMuMDAyaC4wMDRsLjEwNi4wNC4wMDQuMDAxLjAwMy4wMDIuMTA3LjAzOC4wMDMuMDAxLjAwNC4wMDEuMTA3LjAzOC4wMDMuMDAxLjAwNC4wMDEuMTA3LjAzNy4wMDQuMDAxLjAwNC4wMDEuMTA4LjAzNi4wMDMuMDAxLjAwNC4wMDEuMTA4LjAzNS4wMDQuMDAxLjAwMy4wMDEuMTEuMDM0LjAwMy4wMDEuMDA0LjAwMS4xMDkuMDMzLjAwNC4wMDJoLjAwM2wuMTEuMDMzaC4wMDRsLjAwMy4wMDIuMTEuMDMxLjAwNC4wMDEuMDA0LjAwMS4wODQuMDIzLjA4MS4wMjguMDA0LjAwMS4wMDMuMDAxLjEwOS4wMzcuMDAzLjAwMS4wMDQuMDAxLjEwOS4wMzYuMDAzLjAwMS4wMDQuMDAxLjEwOS4wMzVoLjAwM2wuMDA0LjAwMi4xMS4wMzMuMDAzLjAwMS4wMDMuMDAxLjExLjAzMy4wMDMuMDAxLjAwNC4wMDEuMTA5LjAzMS4wMDQuMDAyaC4wMDNsLjExLjAzMS4wMDMuMDAxLjAwNC4wMDEuMTEuMDNoLjAwM2wuMDAzLjAwMS4xMS4wMjloLjAwNGwuMDAzLjAwMi4xMS4wMjcuMDAzLjAwMS4wMDQuMDAxLjExLjAyN2guMDAzbC4wMDQuMDAxLjAwNC4wMDEuMTYuMDIyLjE2LS4wMDguMTU3LS4wMzguMTQ3LS4wNjcuMTMyLS4wOTIuMTEyLS4xMTYuMDktLjEzNC4wNjItLjE0OS4wMzQtLjE1Ny4wMDQtLjE2MS0uMDI1LS4xNi0uMDU1LS4xNTEtLjA4Mi0uMTM5LS4xMDctLjEyLS4xMjctLjEtLjE0My0uMDc0LS4xMjQtLjA0aC0uMDAzbC0uMTA0LS4wMjUtLjEwMy0uMDI2aC0uMDAybC0uMDk1LS4wMjZoLS4wMDFsLS4xMDEtLjAyN2gtLjAwMmwtLjEtLjAyOGgtLjAwMmwtLjEwMy0uMDMtLjEwNC0uMDMyLS4wOTctLjAzaC0uMDAybC0uMTAzLS4wMzMtLjEwMi0uMDMzLS4xMDEtLjAzNC0uMTA2LS4wMzYtLjAyNy0uMDEtLjAyNy0uMDA3LS4xMDctLjAzLS4xMDQtLjAyOS0uMTA0LS4wM2gtLjAwMmwtLjA5Ny0uMDMtLjEwMi0uMDMyLS4xMDItLjAzMi0uMTAyLS4wMzQtLjEwMy0uMDM1LS4wOTYtLjAzNC0uMS0uMDM2LS4xMDEtLjAzN2gtLjAwMmwtLjA5NC0uMDM2LS4wOTYtLjAzNy0uMDk3LS4wNGgtLjAwMmwtLjA5OS0uMDQtLjA5OC0uMDQyaC0uMDAybC0uMDkyLS4wNC0uMDk3LS4wNDMtLjA5NS0uMDQzLS4wOTctLjA0NGgtLjAwMmwtLjA5LS4wNDMtLjA5NC0uMDQ1LS4wOTQtLjA0Ni0uMDkzLS4wNDctLjA5LS4wNDYtLjA5Ni0uMDUtLjA4OC0uMDQ3LS4wMDItLjAwMS0uMDktLjA0OS0uMDk0LS4wNTItLjAwMi0uMDAyLS4wODctLjA0OS0uMDg3LS4wNWgtLjAwMmwtLjA4OC0uMDUzaC0uMDAxbC0uMDktLjA1NS0uMDg2LS4wNTItLjAwMi0uMDAxLS4wODktLjA1NS0uMDg0LS4wNTRoLS4wMDJsLS4wOS0uMDU5aC0uMDAxbC0uMDg1LS4wNTYtLjAwMS0uMDAxLS4wODQtLjA1Ni0uMDgyLS4wNTZoLS4wMDFsLS4wODYtLjA2LS4wODItLjA1OEg3Ljc5bC0uMDg2LS4wNjItLjAwMi0uMDAyLS4wOC0uMDU4LS4wODEtLjA2aC0uMDAxbC0uMDg1LS4wNjQtLjAwMi0uMDAyLS4wNzYtLjA1OC0uMDAyLS4wMDItLjA4Mi0uMDY0LS4xNjEtLjEyOC0uMTYyLS4xMzMtLjA0LS4wMzQtLjEzMi0uMDkyLS4xNDctLjA2Ni0uMTU3LS4wMzgtLjE2LS4wMDgtLjE2LjAyMnpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRiKCkgeyByZXR1cm4gX2V4dGVuZHMkYiA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRiLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50Tm9uZUljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJGIoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS44NDcuMDA0QzkuNjEtLjAxNiAzLjYyNCA0LjAxNCAxLjI1NyA5Ljc4LTEuMjM1IDE1LjQ5LjA2IDIyLjU4MSA0LjQyIDI3LjAzNGM0LjE5MyA0LjUxMyAxMS4xMDEgNi4xNyAxNi44ODcgNC4wNTggNS45OTYtMi4wNDIgMTAuNDIzLTcuOTMgMTAuNjY0LTE0LjI2OC40MDMtNi4yMjgtMy4yNi0xMi40NDEtOC44Ny0xNS4xNTRBMTUuOTI0IDE1LjkyNCAwIDAwMTUuODQ2LjAwNHptLjQzOSAxLjcyOWM2LjEwNS4wMzMgMTEuODU2IDQuNDUgMTMuNDM1IDEwLjM1OSAxLjY3OCA1LjY1My0uNTkyIDEyLjE5OC01LjQ2MyAxNS41NDctNS4wNiAzLjcxOS0xMi41NjQgMy40NS0xNy4zNDMtLjYyNS00LjgxNC0zLjg0LTYuNTM4LTEwLjk0LTQuMDY3LTE2LjU3IDIuMTQtNS4yMDYgNy41MTUtOC43NzUgMTMuMTQ3LTguNzEuMDk3LS4wMDEuMTk0LS4wMDIuMjktLjAwMXpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyRhKCkgeyByZXR1cm4gX2V4dGVuZHMkYSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyRhLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50UGFyYWxsZWxNdWx0aXBsZUljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJGEoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNS44NDcgMEM5LjYxLS4wMiAzLjYyNCA0LjAxIDEuMjU3IDkuNzc1LTEuMjM1IDE1LjQ4NS4wNiAyMi41NzcgNC40MiAyNy4wM2M0LjE5MyA0LjUxMyAxMS4xMDEgNi4xNyAxNi44ODcgNC4wNTggNS45OTYtMi4wNDIgMTAuNDIzLTcuOTMgMTAuNjY0LTE0LjI2OC40MDMtNi4yMjgtMy4yNi0xMi40NDEtOC44Ny0xNS4xNTRBMTUuOTI0IDE1LjkyNCAwIDAwMTUuODQ2IDB6bS40MzkgMS43MjljNi4xMDUuMDMzIDExLjg1NiA0LjQ1IDEzLjQzNSAxMC4zNTkgMS42NzggNS42NTMtLjU5MiAxMi4xOTgtNS40NjMgMTUuNTQ3LTUuMDYgMy43MTktMTIuNTY0IDMuNDUtMTcuMzQzLS42MjVDMi4xMDEgMjMuMTcuMzc3IDE2LjA3IDIuODQ4IDEwLjQ0YzIuMTM0LTUuMiA3LjUyMi04Ljc4IDEzLjE0Ny04LjcxLjA5Ny0uMDAxLjE5NC0uMDAyLjI5LS4wMDF6TTEzLjUwNCA5LjA4djQuNDI3SDkuMDc3djQuOThoNC40Mjd2NC40MjdoNC45OHYtNC40MjdoNC40Mjh2LTQuOThoLTQuNDI3VjkuMDhoLTQuOTh6bS44My44M2gzLjMydjQuNDI3aDQuNDI4djMuMzJoLTQuNDI3djQuNDI3aC0zLjMydi00LjQ1M0g5LjkwNnYtMy4yOTRoNC40MjdWOS45MXpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQ5KCkgeyByZXR1cm4gX2V4dGVuZHMkOSA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQ5LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdGFydEV2ZW50U2lnbmFsSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkOSh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ljk5NS4wMDVDOS43MDUtLjA4IDMuNjQzIDMuOTY4IDEuMjU3IDkuNzgtMS4yMzUgMTUuNDkuMDYgMjIuNTgxIDQuNDIgMjcuMDM0YzQuMTkzIDQuNTEzIDExLjEwMiA2LjE3IDE2Ljg4NyA0LjA1OCA1Ljk5Ni0yLjA0MiAxMC40MjMtNy45MyAxMC42NjQtMTQuMjY5LjQwMy02LjIyNy0zLjI2LTEyLjQ0LTguODctMTUuMTUzQTE1LjkyNCAxNS45MjQgMCAwMDE1Ljk5NC4wMDV6bTAgMS43M2M2LjIxMy0uMTA4IDEyLjEyMiA0LjM1NSAxMy43MjYgMTAuMzU3IDEuNjc4IDUuNjUzLS41OTIgMTIuMTk4LTUuNDYzIDE1LjU0Ny01LjA2IDMuNzE5LTEyLjU2NCAzLjQ1LTE3LjM0My0uNjI2LTQuODE0LTMuODM4LTYuNTM4LTEwLjkzOS00LjA2Ny0xNi41NyAyLjE0LTUuMjA1IDcuNTE1LTguNzc0IDEzLjE0Ny04LjcwOHptMCA2Ljc3Nkw5LjE5IDIwLjcyNEgyMi44TDE1Ljk5NSA4LjUxMXptMCAxLjc3N2w1LjMzMiA5LjU3MkgxMC42NjJsNS4zMzMtOS41NzJ6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkOCgpIHsgcmV0dXJuIF9leHRlbmRzJDggPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkOC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgU3RhcnRFdmVudFRpbWVySWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkOCh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2IDBDNy4xNzQgMCAwIDcuMTc0IDAgMTZzNy4xNzQgMTYgMTYgMTYgMTYtNy4xNzQgMTYtMTZTMjQuODI2IDAgMTYgMHptMCAxLjczYzcuODkyIDAgMTQuMjcgNi4zNzggMTQuMjcgMTQuMjcgMCA3Ljg5MS02LjM3OSAxNC4yNy0xNC4yNyAxNC4yN1MxLjczIDIzLjg5MSAxLjczIDE2QzEuNzMgOC4xMDggOC4xMDggMS43MyAxNiAxLjczem0tLjE0MyA2LjY3NmMtMi45NjcuMDItNS43OTcgMS45Ny02Ljg5IDQuNzI3LTEuMTM4IDIuNjk1LS41MSA2LjAxMiAxLjUzNyA4LjEwMiAxLjk5IDIuMTQyIDUuMjY4IDIuOTMyIDguMDE0IDEuOTI4IDIuODc4LS45OCA0Ljk5Mi0zLjgyNyA1LjA2OC02Ljg3LjE1My0yLjk1Ny0xLjYyNC01Ljg4MS00LjMtNy4xMzdhNy41NTIgNy41NTIgMCAwMC0zLjQzLS43NXptLjI3IDEuMzgzYzIuNzEuMDEyIDUuMjU0IDIuMDE1IDUuODg2IDQuNjU2LjcwNCAyLjU3Ny0uNDgyIDUuNTE3LTIuNzkxIDYuODY3LTIuMzU4IDEuNDgtNS42ODIgMS4wODUtNy42MTgtLjkxOC0yLjA0My0xLjk3MS0yLjQwNy01LjM4MS0uODQtNy43NDUgMS4xMS0xLjc2MyAzLjE1LTIuODggNS4yMzQtMi44NmguMTN6bTEuODMzIDEuNzY1bC0yLjA3NCAzLjc2M2MtLjY0LjA2OC0uNzkzIDEuMDQtLjIwMiAxLjMuMzkuMjcuNjk2LS4xOCAxLjA1Mi0uMTY1aDMuMTd2LS44NjVoLTMuMTgxbDEuOTkyLTMuNjE1LS43NTctLjQxOHpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQ3KCkgeyByZXR1cm4gX2V4dGVuZHMkNyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQ3LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBTdWJwcm9jZXNzQ29sbGFwc2VkSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkNyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTUuNjM3IDNBNS42NDQgNS42NDQgMCAwMDAgOC42Mzd2MTUuNDE3YTUuNjQ0IDUuNjQ0IDAgMDA1LjYzNyA1LjYzN2gyMC43MjZBNS42NDQgNS42NDQgMCAwMDMyIDI0LjA1NFY4LjYzN0E1LjY0NCA1LjY0NCAwIDAwMjYuMzYzIDNINS42Mzd6bTAgMS43NzhoMjAuNzI2YTMuODMgMy44MyAwIDAxMy44NTkgMy44NTl2MTUuNDE3YTMuODMgMy44MyAwIDAxLTMuODU5IDMuODU4aC00LjIwMVYxNi42OTVIOS44Mzh2MTEuMjE3SDUuNjM3YTMuODMgMy44MyAwIDAxLTMuODU5LTMuODU4VjguNjM3YTMuODMgMy44MyAwIDAxMy44NTktMy44NTl6bTUuMzMgMTMuMDQ2aDEwLjA2NnYxMC4wNjVIMTAuOTY3VjE3LjgyNHptNC4xODkgMS40MzFWMjIuMDZIMTIuMzV2MS42ODloMi44MDRWMjYuNTU0aDEuNjlWMjMuNzQ5aDIuODA0VjIyLjA2aC0yLjgwNFYxOS4yNTVoLTEuNjl6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkNigpIHsgcmV0dXJuIF9leHRlbmRzJDYgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkNi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgU3VicHJvY2Vzc0V4cGFuZGVkSWNvbiA9ICh7XG4gIHN0eWxlcyA9IHt9LFxuICAuLi5wcm9wc1xufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMkNih7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjMyXCIsXG4gIGhlaWdodDogXCIzMlwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTUuNjM2IDNBNS42NDIgNS42NDIgMCAwMDAgOC42MzZ2MTUuNDE4YTUuNjQzIDUuNjQzIDAgMDA1LjYzNiA1LjYzNmgyMC43MjhBNS42NDMgNS42NDMgMCAwMDMyIDI0LjA1NFY4LjYzNkE1LjY0MiA1LjY0MiAwIDAwMjYuMzY0IDNINS42MzZ6bTAgMS43NzhoMjAuNzI4YTMuODMgMy44MyAwIDAxMy44NTggMy44NTh2MTUuNDE4YTMuODMgMy44MyAwIDAxLTMuODU4IDMuODU4aC00LjIwM1YxNi43MjNIOS44NHYxMS4xODlINS42MzZhMy44MyAzLjgzIDAgMDEtMy44NTgtMy44NThWOC42MzZhMy44MyAzLjgzIDAgMDEzLjg1OC0zLjg1OHptNS4zMzEgMTMuMDc0aDEwLjA2NnYxMC4wNkgxMC45Njd2LTEwLjA2em0xLjMzNiAzLjk5NnYxLjcxMWg3LjM5NHYtMS43MWgtNy4zOTR6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkNSgpIHsgcmV0dXJuIF9leHRlbmRzJDUgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkNS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgVGFza05vbmVJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQ1KHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNi40OTQgMi42NjdDMi45MTYgMi42NjcgMCA1LjU3IDAgOS4xNDJ2MTMuMzgzQzAgMjYuMDk3IDIuOTE2IDI5IDYuNDk0IDI5aDE5LjAxMkMyOS4wODQgMjkgMzIgMjYuMDk3IDMyIDIyLjUyNVY5LjE0MmMwLTMuNTcyLTIuOTE2LTYuNDc1LTYuNDk0LTYuNDc1SDYuNDk0em0wIDJoMTkuMDEyYzIuNTA5IDAgNC40OTQgMS45OCA0LjQ5NCA0LjQ3NXYxMy4zODNDMzAgMjUuMDIgMjguMDE1IDI3IDI1LjUwNiAyN0g2LjQ5NEMzLjk4NSAyNyAyIDI1LjAyIDIgMjIuNTI1VjkuMTQyYzAtMi40OTUgMS45ODUtNC40NzUgNC40OTQtNC40NzV6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkNCgpIHsgcmV0dXJuIF9leHRlbmRzJDQgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkNC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgVGV4dEFubm90YXRpb25pY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQ0KHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjIuMDg3IDB2MzEuNjQ3SDMydi0xLjc4OGgtOC4xMjVWMS43ODhIMzJWMGgtOS45MTN6bS0yLjkyNCAxMy45OTlsLTIuNzM3IDIuMTY3IDIuMTY3IDIuNzM4IDIuNzM4LTIuMTY3LTIuMTY4LTIuNzM4em0tNS40NzUgNC4zMzVMMTAuOTUgMjAuNWwyLjE2OCAyLjczOCAyLjczNy0yLjE2OC0yLjE2Ny0yLjczN3ptLTUuNDc1IDQuMzM1bC0yLjczOCAyLjE2NyAyLjE2OCAyLjczOCAyLjczNy0yLjE2OC0yLjE2Ny0yLjczN3ptLTUuNDc2IDQuMzM1TDAgMjkuMTdsMi4xNjcgMi43MzggMi43MzgtMi4xNjgtMi4xNjgtMi43Mzd6XCJcbn0pKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMkMygpIHsgcmV0dXJuIF9leHRlbmRzJDMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgVHJhbnNhY3Rpb25JY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQzKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMzJcIixcbiAgaGVpZ2h0OiBcIjMyXCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNS40MjIgM0E1LjQyNCA1LjQyNCAwIDAwMCA4LjQyMnYxNS44MjJhNS40MjQgNS40MjQgMCAwMDUuNDIyIDUuNDIzaDIxLjE1NkE1LjQyNCA1LjQyNCAwIDAwMzIgMjQuMjQ0VjguNDIyQTUuNDI0IDUuNDI0IDAgMDAyNi41NzggM0g1LjQyMnptMCAxLjI0NGgyMS4xNTZhNC4xNTUgNC4xNTUgMCAwMTQuMTc4IDQuMTc4djE1LjgyMmE0LjE1NSA0LjE1NSAwIDAxLTQuMTc4IDQuMTc4SDUuNDIyYTQuMTU1IDQuMTU1IDAgMDEtNC4xNzgtNC4xNzhWOC40MjJhNC4xNTUgNC4xNTUgMCAwMTQuMTc4LTQuMTc4em0xLjA1NiAxLjc3OGEzLjM3MyAzLjM3MyAwIDAwLTMuMzY3IDMuMzY2djEzLjg5YTMuMzczIDMuMzczIDAgMDAzLjM2NyAzLjM2NmgxOS4wNDRhMy4zNzMgMy4zNzMgMCAwMDMuMzY3LTMuMzY2VjkuMzg4YTMuMzczIDMuMzczIDAgMDAtMy4zNjctMy4zNjZINi40Nzh6bTAgMS4yNDVoMTkuMDQ0YzEuMTg3IDAgMi4xMjIuOTM1IDIuMTIyIDIuMTIxdjEzLjg5YTIuMTA0IDIuMTA0IDAgMDEtMi4xMjIgMi4xMjJINi40NzhhMi4xMDQgMi4xMDQgMCAwMS0yLjEyMi0yLjEyMlY5LjM4OGMwLTEuMTg2LjkzNS0yLjEyMSAyLjEyMi0yLjEyMXpcIlxufSkpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcyQyKCkgeyByZXR1cm4gX2V4dGVuZHMkMiA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcyQyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbnZhciBVc2VyVGFza0ljb24gPSAoe1xuICBzdHlsZXMgPSB7fSxcbiAgLi4ucHJvcHNcbn0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzJDIoe1xuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB3aWR0aDogXCIzMlwiLFxuICBoZWlnaHQ6IFwiMzJcIlxufSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gIGQ6IFwiTTEwLjI2MyA3LjQ2OGMtMS42OTggMC0yLjkxMiAxLjMwNS0yLjkxNSAyLjc5MXYuMDAxYzAgLjQ1LjEyMS45MjQuMzExIDEuMzUyLjEzOC4zMDkuMzA4LjU5My41MTYuODItMS4yMzUuNDIzLTIuNjgzIDEuMTE5LTMuNDE0IDIuNDlsLS4wNC4wNzV2NC40NGgxMS4wODN2LTQuNDRsLS4wNC0uMDc0Yy0uNzItMS4zNTItMi4xMzYtMi4wNDctMy4zNi0yLjQ3MS41OTctLjYwOC43NzQtMS4zOTIuNzc0LTIuMTkyLS4wMDQtMS40ODctMS4yMTgtMi43OTItMi45MTUtMi43OTJ6bS0xLjE2IDEuNTgzYy4wOCAwIC4xNjUuMDAzLjI2LjAwOC43NTcuMDQ1IDEuMDEyLjE4MSAxLjIwNy4zMS4xOTYuMTMuMzM0LjI1Mi44NTEuMjY4LjQwNC0uMDE2LjU5OC0uMDg3LjczNy0uMTY5LjA1Ni0uMDMzLjEwMy0uMDY3LjE1Mi0uMS4xMjguMjc1LjE5Ny41NzguMTk4Ljg5MyAwIC44OTQtLjE1NCAxLjUyLS45NzUgMi4wMzRsLjA4LjYwNGMuMTcxLjA1Mi4zNDguMTEuNTI3LjE3MS4wMjUuMTA1LjA1NC4yNDIuMDczLjM4Ny4wMi4xNTMuMDI5LjMxMS4wMTYuNDNhLjQyMi40MjIgMCAwMS0uMDU2LjE5Yy0uNDE3LjQxNy0xLjE1Ny42Ni0xLjkwOC42Ni0uNzUgMC0xLjQ5LS4yNDMtMS45MDgtLjY2YS40MjIuNDIyIDAgMDEtLjA1Ni0uMTkgMS45NDkgMS45NDkgMCAwMS4wMTYtLjQzYy4wMi0uMTQ2LjA0OS0uMjg0LjA3NC0uMzg4LjE3Ny0uMDYyLjM1Mi0uMTE4LjUyMS0uMTdsLjA0OC0uNjQ4YS42MTYuNjE2IDAgMDAtLjEyNi0uMTE4Yy0uMTgzLS4xMzgtLjQwNS0uNDQtLjU2Mi0uNzkzLS4xNTctLjM1My0uMjU0LS43NTctLjI1NC0xLjA4IDAtLjM4Ny4xMDUtLjc1OC4yOTctMS4wNzlsLjExLS4wNGMuMTQzLS4wNDYuMzM5LS4wOS42NzktLjA5em0tMS40NDggNC4zMDRsLS4wMDIuMDE0Yy0uMDI1LjE4NS0uMDQuMzg3LS4wMTguNTg5LjAyMS4yMDIuMDc0LjQyLjI0OC41OTMuNTk1LjU5NCAxLjQ5NC44NTcgMi4zODIuODU3Ljg4OSAwIDEuNzg4LS4yNjMgMi4zODItLjg1Ny4xNzQtLjE3NC4yMjctLjM5MS4yNDktLjU5M2EyLjQ5NiAyLjQ5NiAwIDAwLS4wMTgtLjU5bC0uMDAyLS4wMWMuOTAzLjM5NiAxLjc3Ni45NjMgMi4yNTggMS44MXYzLjU5OUgxMy41M3YtMi41MzhoLS42N3YyLjUzOEg3LjY1MXYtMi41MzhoLS42N3YyLjUzOEg1LjM5di0zLjU5OWMuNDgzLS44NDkgMS4zNTktMS40MTYgMi4yNjQtMS44MTN6TTYuNDk1IDNDMi45MTQgMyAwIDUuOTAzIDAgOS40NzV2MTMuMzgzYzAgMy41NzIgMi45MTYgNi40NzUgNi40OTQgNi40NzVoMTkuMDEyYzMuNTc4IDAgNi40OTQtMi45MDMgNi40OTQtNi40NzVWOS40NzVDMzIgNS45MDMgMjkuMDg0IDMgMjUuNTA2IDNINi40OTR6bTAgMmgxOS4wMUMyOC4wMTYgNSAzMCA2Ljk4IDMwIDkuNDc1djEzLjM4M2MwIDIuNDk1LTEuOTg1IDQuNDc1LTQuNDk0IDQuNDc1SDYuNDk0QzMuOTg1IDI3LjMzMyAyIDI1LjM1MyAyIDIyLjg1OFY5LjQ3NUMyIDYuOTggMy45ODUgNSA2LjQ5NCA1elwiXG59KSk7XG5cbnZhciBpY29uc0J5VHlwZSA9IHtcbiAgJ0Fzc29jaWF0aW9uJzogQXNzb2NpYXRpb25JY29uLFxuICAnQnVzaW5lc3NSdWxlVGFzayc6IEJ1c2luZXNzUnVsZVRhc2tJY29uLFxuICAnQ2FsbEFjdGl2aXR5JzogQ2FsbEFjdGl2aXR5SWNvbixcbiAgJ0NvbGxhYm9yYXRpb24nOiBDb2xsYWJvcmF0aW9uSWNvbixcbiAgJ0NvbmRpdGlvbmFsRmxvdyc6IENvbmRpdGlvbmFsRmxvd0ljb24sXG4gICdTZXF1ZW5jZUZsb3cnOiBDb25uZWN0aW9uSWNvbixcbiAgJ0RhdGFJbnB1dCc6IERhdGFJbnB1dEljb24sXG4gICdEYXRhSW5wdXRBc3NvY2lhdGlvbic6IERhdGFJbnB1dE91dHB1dEFzc29jaWF0aW9uSWNvbixcbiAgJ0RhdGFPdXRwdXQnOiBEYXRhT3V0cHV0SWNvbixcbiAgJ0RhdGFPdXRwdXRBc3NvY2lhdGlvbic6IERhdGFJbnB1dE91dHB1dEFzc29jaWF0aW9uSWNvbixcbiAgJ0RhdGFPYmplY3RSZWZlcmVuY2UnOiBEYXRhT2JqZWN0SWNvbixcbiAgJ0RhdGFTdG9yZVJlZmVyZW5jZSc6IERhdGFTdG9yZUljb24sXG4gICdEZWZhdWx0Rmxvdyc6IERlZmF1bHRGbG93SWNvbixcbiAgJ0NhbmNlbEVuZEV2ZW50JzogRW5kRXZlbnRDYW5jZWxJY29uLFxuICAnQ29tcGVuc2F0ZUVuZEV2ZW50JzogRW5kRXZlbnRDb21wZW5zYXRpb25JY29uLFxuICAnRXJyb3JFbmRFdmVudCc6IEVuZEV2ZW50RXJyb3JJY29uLFxuICAnRXNjYWxhdGlvbkVuZEV2ZW50JzogRW5kRXZlbnRFc2NhbGF0aW9uSWNvbixcbiAgJ0xpbmtFbmRFdmVudCc6IEVuZEV2ZW50TGlua0ljb24sXG4gICdNZXNzYWdlRW5kRXZlbnQnOiBFbmRFdmVudE1lc3NhZ2VJY29uLFxuICAnTXVsdGlwbGVFbmRFdmVudCc6IEVuZEV2ZW50TXVsdGlwbGVJY29uLFxuICAnRW5kRXZlbnQnOiBFbmRFdmVudE5vbmVJY29uLFxuICAnU2lnbmFsRW5kRXZlbnQnOiBFbmRFdmVudFNpZ25hbEljb24sXG4gICdUZXJtaW5hdGVFbmRFdmVudCc6IEVuZEV2ZW50VGVybWluYXRlSWNvbixcbiAgJ0V2ZW50U3ViUHJvY2Vzcyc6IEV2ZW50U3ViUHJvY2Vzc0V4cGFuZGVkSWNvbixcbiAgJ0NvbXBsZXhHYXRld2F5JzogR2F0ZXdheUNvbXBsZXhJY29uLFxuICAnRXZlbnRCYXNlZEdhdGV3YXknOiBHYXRld2F5RXZlbnRCYXNlZEljb24sXG4gICdFeGNsdXNpdmVHYXRld2F5JzogR2F0ZXdheVhvckljb24sXG4gICdHYXRld2F5JzogR2F0ZXdheU5vbmVJY29uLFxuICAnSW5jbHVzaXZlR2F0ZXdheSc6IEdhdGV3YXlPckljb24sXG4gICdQYXJhbGxlbEdhdGV3YXknOiBHYXRld2F5UGFyYWxsZWxJY29uLFxuICAnR3JvdXAnOiBHcm91cEljb24sXG4gICdDYW5jZWxJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaENhbmNlbEljb24sXG4gICdDb21wZW5zYXRlSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hDb21wZW5zYXRpb25JY29uLFxuICAnQ29uZGl0aW9uYWxJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaENvbmRpdGlvbkljb24sXG4gICdFcnJvckludGVybWVkaWF0ZUNhdGNoRXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoRXJyb3JJY29uLFxuICAnRXNjYWxhdGlvbkludGVybWVkaWF0ZUNhdGNoRXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoRXNjYWxhdGlvbkljb24sXG4gICdMaW5rSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hMaW5rSWNvbixcbiAgJ01lc3NhZ2VJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE1lc3NhZ2VJY29uLFxuICAnTXVsdGlwbGVJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE11bHRpcGxlSWNvbixcbiAgJ0NvbmRpdGlvbmFsSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudE5vbkludGVycnVwdGluZyc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hOb25JbnRlcnJ1cHRpbmdDb25kaXRpb25JY29uLFxuICAnRXNjYWxhdGlvbkludGVybWVkaWF0ZUNhdGNoRXZlbnROb25JbnRlcnJ1cHRpbmcnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoTm9uSW50ZXJydXB0aW5nRXNjYWxhdGlvbkljb24sXG4gICdNZXNzYWdlSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudE5vbkludGVycnVwdGluZyc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hOb25JbnRlcnJ1cHRpbmdNZXNzYWdlSWNvbixcbiAgJ011bHRpcGxlSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudE5vbkludGVycnVwdGluZyc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hOb25JbnRlcnJ1cHRpbmdNdWx0aXBsZUljb24sXG4gICdQYXJhbGxlbEludGVybWVkaWF0ZUNhdGNoRXZlbnROb25JbnRlcnJ1cHRpbmcnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoTm9uSW50ZXJydXB0aW5nUGFyYWxsZWxJY29uLFxuICAnU2lnbmFsSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudE5vbkludGVycnVwdGluZyc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hOb25JbnRlcnJ1cHRpbmdTaWduYWxJY29uLFxuICAnVGltZXJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50Tm9uSW50ZXJydXB0aW5nJzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE5vbkludGVycnVwdGluZ1RpbWVySWNvbixcbiAgJ1BhcmFsbGVsTXVsdGlwbGVJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaFBhcmFsbGVsTXVsdGlwbGVJY29uLFxuICAnU2lnbmFsSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hTaWduYWxJY29uLFxuICAnVGltZXJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaFRpbWVySWNvbixcbiAgJ0ludGVybWVkaWF0ZVRocm93RXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudE5vbmVJY29uLFxuICAnQ29tcGVuc2F0ZUludGVybWVkaWF0ZVRocm93RXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudFRocm93Q29tcGVuc2F0aW9uSWNvbixcbiAgJ0VzY2FsYXRpb25JbnRlcm1lZGlhdGVUaHJvd0V2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRUaHJvd0VzY2FsYXRpb25JY29uLFxuICAnTGlua0ludGVybWVkaWF0ZVRocm93RXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudFRocm93TGlua0ljb24sXG4gICdNZXNzYWdlSW50ZXJtZWRpYXRlVGhyb3dFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50VGhyb3dNZXNzYWdlSWNvbixcbiAgJ011bHRpcGxlSW50ZXJtZWRpYXRlVGhyb3dFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50VGhyb3dNdWx0aXBsZUljb24sXG4gICdTaWduYWxJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRUaHJvd1NpZ25hbEljb24sXG4gICdMYW5lJzogTGFuZUljb24sXG4gICdNYW51YWxUYXNrJzogTWFudWFsVGFza0ljb24sXG4gICdNZXNzYWdlRmxvdyc6IE1lc3NhZ2VGbG93SWNvbixcbiAgJ1BhcnRpY2lwYW50JzogUGFydGljaXBhbnRJY29uLFxuICAnUHJvY2Vzcyc6IFByb2Nlc3NJY29uLFxuICAnUmVjZWl2ZVRhc2snOiBSZWNlaXZlVGFza0ljb24sXG4gICdTY3JpcHRUYXNrJzogU2NyaXB0VGFza0ljb24sXG4gICdTZW5kVGFzayc6IFNlbmRUYXNrSWNvbixcbiAgJ1NlcnZpY2VUYXNrJzogU2VydmljZVRhc2tJY29uLFxuICAnQ29tcGVuc2F0ZVN0YXJ0RXZlbnQnOiBTdGFydEV2ZW50Q29tcGVuc2F0aW9uSWNvbixcbiAgJ0NvbmRpdGlvbmFsU3RhcnRFdmVudCc6IFN0YXJ0RXZlbnRDb25kaXRpb25JY29uLFxuICAnRXJyb3JTdGFydEV2ZW50JzogU3RhcnRFdmVudEVycm9ySWNvbixcbiAgJ0VzY2FsYXRpb25TdGFydEV2ZW50JzogU3RhcnRFdmVudEVzY2FsYXRpb25JY29uLFxuICAnTWVzc2FnZVN0YXJ0RXZlbnQnOiBTdGFydEV2ZW50TWVzc2FnZUljb24sXG4gICdNdWx0aXBsZVN0YXJ0RXZlbnQnOiBTdGFydEV2ZW50TXVsdGlwbGVJY29uLFxuICAnQ29uZGl0aW9uYWxTdGFydEV2ZW50Tm9uSW50ZXJydXB0aW5nJzogU3RhcnRFdmVudE5vbkludGVycnVwdGluZ0NvbmRpdGlvbkljb24sXG4gICdFc2NhbGF0aW9uU3RhcnRFdmVudE5vbkludGVycnVwdGluZyc6IFN0YXJ0RXZlbnROb25JbnRlcnJ1cHRpbmdFc2NhbGF0aW9uSWNvbixcbiAgJ01lc3NhZ2VTdGFydEV2ZW50Tm9uSW50ZXJydXB0aW5nJzogU3RhcnRFdmVudE5vbkludGVycnVwdGluZ01lc3NhZ2VJY29uLFxuICAnTXVsdGlwbGVTdGFydEV2ZW50Tm9uSW50ZXJydXB0aW5nJzogU3RhcnRFdmVudE5vbkludGVycnVwdGluZ011bHRpcGxlSWNvbixcbiAgJ1BhcmFsbGVsTXVsdGlwbGVTdGFydEV2ZW50Tm9uSW50ZXJydXB0aW5nJzogU3RhcnRFdmVudE5vbkludGVycnVwdGluZ1BhcmFsbGVsTXVsdGlwbGVJY29uLFxuICAnU2lnbmFsU3RhcnRFdmVudE5vbkludGVycnVwdGluZyc6IFN0YXJ0RXZlbnROb25JbnRlcnJ1cHRpbmdTaWduYWxJY29uLFxuICAnVGltZXJTdGFydEV2ZW50Tm9uSW50ZXJydXB0aW5nJzogU3RhcnRFdmVudE5vbkludGVycnVwdGluZ1RpbWVySWNvbixcbiAgJ0NhbmNlbEJvdW5kYXJ5RXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoQ2FuY2VsSWNvbixcbiAgJ0NvbXBlbnNhdGVCb3VuZGFyeUV2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaENvbXBlbnNhdGlvbkljb24sXG4gICdDb25kaXRpb25hbEJvdW5kYXJ5RXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoQ29uZGl0aW9uSWNvbixcbiAgJ0Vycm9yQm91bmRhcnlFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hFcnJvckljb24sXG4gICdFc2NhbGF0aW9uQm91bmRhcnlFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hFc2NhbGF0aW9uSWNvbixcbiAgJ0xpbmtCb3VuZGFyeUV2ZW50JzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaExpbmtJY29uLFxuICAnTWVzc2FnZUJvdW5kYXJ5RXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoTWVzc2FnZUljb24sXG4gICdNdWx0aXBsZUJvdW5kYXJ5RXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoTXVsdGlwbGVJY29uLFxuICAnQm91bmRhcnlFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50Tm9uZUljb24sXG4gICdDb25kaXRpb25hbEJvdW5kYXJ5RXZlbnROb25JbnRlcnJ1cHRpbmcnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoTm9uSW50ZXJydXB0aW5nQ29uZGl0aW9uSWNvbixcbiAgJ0VzY2FsYXRpb25Cb3VuZGFyeUV2ZW50Tm9uSW50ZXJydXB0aW5nJzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE5vbkludGVycnVwdGluZ0VzY2FsYXRpb25JY29uLFxuICAnTWVzc2FnZUJvdW5kYXJ5RXZlbnROb25JbnRlcnJ1cHRpbmcnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoTm9uSW50ZXJydXB0aW5nTWVzc2FnZUljb24sXG4gICdNdWx0aXBsZUJvdW5kYXJ5RXZlbnROb25JbnRlcnJ1cHRpbmcnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoTm9uSW50ZXJydXB0aW5nTXVsdGlwbGVJY29uLFxuICAnUGFyYWxsZWxCb3VuZGFyeUV2ZW50Tm9uSW50ZXJydXB0aW5nJzogSW50ZXJtZWRpYXRlRXZlbnRDYXRjaE5vbkludGVycnVwdGluZ1BhcmFsbGVsSWNvbixcbiAgJ1NpZ25hbEJvdW5kYXJ5RXZlbnROb25JbnRlcnJ1cHRpbmcnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoTm9uSW50ZXJydXB0aW5nU2lnbmFsSWNvbixcbiAgJ1RpbWVyQm91bmRhcnlFdmVudE5vbkludGVycnVwdGluZyc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hOb25JbnRlcnJ1cHRpbmdUaW1lckljb24sXG4gICdQYXJhbGxlbE11bHRpcGxlQm91bmRhcnlFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hQYXJhbGxlbE11bHRpcGxlSWNvbixcbiAgJ1NpZ25hbEJvdW5kYXJ5RXZlbnQnOiBJbnRlcm1lZGlhdGVFdmVudENhdGNoU2lnbmFsSWNvbixcbiAgJ1RpbWVyQm91bmRhcnlFdmVudCc6IEludGVybWVkaWF0ZUV2ZW50Q2F0Y2hUaW1lckljb24sXG4gICdTdGFydEV2ZW50JzogU3RhcnRFdmVudE5vbmVJY29uLFxuICAnUGFyYWxsZWxNdWx0aXBsZVN0YXJ0RXZlbnQnOiBTdGFydEV2ZW50UGFyYWxsZWxNdWx0aXBsZUljb24sXG4gICdTaWduYWxTdGFydEV2ZW50JzogU3RhcnRFdmVudFNpZ25hbEljb24sXG4gICdUaW1lclN0YXJ0RXZlbnQnOiBTdGFydEV2ZW50VGltZXJJY29uLFxuICAnQ29sbGFwc2VkU3ViUHJvY2Vzcyc6IFN1YnByb2Nlc3NDb2xsYXBzZWRJY29uLFxuICAnQ29sbGFwc2VkQWRIb2NTdWJQcm9jZXNzJzogU3VicHJvY2Vzc0NvbGxhcHNlZEljb24sXG4gICdFeHBhbmRlZFN1YlByb2Nlc3MnOiBTdWJwcm9jZXNzRXhwYW5kZWRJY29uLFxuICAnRXhwYW5kZWRBZEhvY1N1YlByb2Nlc3MnOiBTdWJwcm9jZXNzRXhwYW5kZWRJY29uLFxuICAnVGFzayc6IFRhc2tOb25lSWNvbixcbiAgJ1RleHRBbm5vdGF0aW9uJzogVGV4dEFubm90YXRpb25pY29uLFxuICAnVHJhbnNhY3Rpb24nOiBUcmFuc2FjdGlvbkljb24sXG4gICdVc2VyVGFzayc6IFVzZXJUYXNrSWNvblxufTtcblxuZnVuY3Rpb24gZ2V0Q29uY3JldGVUeXBlKGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIHR5cGU6IGVsZW1lbnRUeXBlXG4gIH0gPSBlbGVtZW50O1xuICBsZXQgdHlwZSA9IGdldFJhd1R5cGUoZWxlbWVudFR5cGUpO1xuXG4gIC8vICgxKSBldmVudCBkZWZpbml0aW9uIHR5cGVzXG4gIGNvbnN0IGV2ZW50RGVmaW5pdGlvbiA9IGdldEV2ZW50RGVmaW5pdGlvbiQyKGVsZW1lbnQpO1xuICBpZiAoZXZlbnREZWZpbml0aW9uKSB7XG4gICAgdHlwZSA9IGAke2dldEV2ZW50RGVmaW5pdGlvblByZWZpeChldmVudERlZmluaXRpb24pfSR7dHlwZX1gO1xuXG4gICAgLy8gKDEuMSkgaW50ZXJydXB0aW5nIC8gbm9uIGludGVycnVwdGluZ1xuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdGFydEV2ZW50JykgJiYgIWlzSW50ZXJydXB0aW5nJDEoZWxlbWVudCkgfHwgaXMoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmICFpc0NhbmNlbEFjdGl2aXR5KGVsZW1lbnQpKSB7XG4gICAgICB0eXBlID0gYCR7dHlwZX1Ob25JbnRlcnJ1cHRpbmdgO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIC8vICgyKSBzdWIgcHJvY2VzcyB0eXBlc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmICFpcyhlbGVtZW50LCAnYnBtbjpUcmFuc2FjdGlvbicpKSB7XG4gICAgaWYgKGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgICB0eXBlID0gYEV2ZW50JHt0eXBlfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gaXNFeHBhbmRlZChlbGVtZW50KSAmJiAhaXNQbGFuZShlbGVtZW50KTtcbiAgICAgIHR5cGUgPSBgJHtleHBhbmRlZCA/ICdFeHBhbmRlZCcgOiAnQ29sbGFwc2VkJ30ke3R5cGV9YDtcbiAgICB9XG4gIH1cblxuICAvLyAoMykgY29uZGl0aW9uYWwgKyBkZWZhdWx0IGZsb3dzXG4gIGlmIChpc0RlZmF1bHRGbG93KGVsZW1lbnQpKSB7XG4gICAgdHlwZSA9ICdEZWZhdWx0Rmxvdyc7XG4gIH1cbiAgaWYgKGlzQ29uZGl0aW9uYWxGbG93KGVsZW1lbnQpKSB7XG4gICAgdHlwZSA9ICdDb25kaXRpb25hbEZsb3cnO1xuICB9XG4gIHJldHVybiB0eXBlO1xufVxuY29uc3QgUGFuZWxIZWFkZXJQcm92aWRlciA9IHRyYW5zbGF0ZSA9PiB7XG4gIGlmICghdHJhbnNsYXRlKSB0cmFuc2xhdGUgPSB0ZXh0ID0+IHRleHQ7XG4gIHJldHVybiB7XG4gICAgZ2V0RG9jdW1lbnRhdGlvblJlZjogZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50VGVtcGxhdGVzID0gZ2V0VGVtcGxhdGVzU2VydmljZSgpO1xuICAgICAgaWYgKGVsZW1lbnRUZW1wbGF0ZXMpIHtcbiAgICAgICAgcmV0dXJuIGdldFRlbXBsYXRlRG9jdW1lbnRhdGlvbihlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldEVsZW1lbnRMYWJlbDogZWxlbWVudCA9PiB7XG4gICAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5uYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldExhYmVsKGVsZW1lbnQpO1xuICAgIH0sXG4gICAgZ2V0RWxlbWVudEljb246IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgY29uY3JldGVUeXBlID0gZ2V0Q29uY3JldGVUeXBlKGVsZW1lbnQpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHVzZVNlcnZpY2UoJ2NvbmZpZy5lbGVtZW50VGVtcGxhdGVJY29uUmVuZGVyZXInLCBmYWxzZSk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGljb25Qcm9wZXJ0eSA9ICd6ZWViZTptb2RlbGVyVGVtcGxhdGVJY29uJ1xuICAgICAgfSA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlSWNvbiA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmdldChpY29uUHJvcGVydHkpO1xuICAgICAgaWYgKHRlbXBsYXRlSWNvbikge1xuICAgICAgICByZXR1cm4gKCkgPT4ganN4KFwiaW1nXCIsIHtcbiAgICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1oZWFkZXItdGVtcGxhdGUtaWNvblwiLFxuICAgICAgICAgIHdpZHRoOiBcIjMyXCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMyXCIsXG4gICAgICAgICAgc3JjOiB0ZW1wbGF0ZUljb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWNvbnNCeVR5cGVbY29uY3JldGVUeXBlXTtcbiAgICB9LFxuICAgIGdldFR5cGVMYWJlbDogZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50VGVtcGxhdGVzID0gZ2V0VGVtcGxhdGVzU2VydmljZSgpO1xuICAgICAgaWYgKGVsZW1lbnRUZW1wbGF0ZXMpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzKTtcbiAgICAgICAgaWYgKHRlbXBsYXRlICYmIHRlbXBsYXRlLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlKHRlbXBsYXRlLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBjb25jcmV0ZVR5cGUgPSBnZXRDb25jcmV0ZVR5cGUoZWxlbWVudCk7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKGNvbmNyZXRlVHlwZS5yZXBsYWNlKC8oXFxCW0EtWl0pL2csICcgJDEnKS5yZXBsYWNlKC8oXFxiTm9uIEludGVycnVwdGluZykvZywgJygkMSknKSk7XG4gICAgfVxuICB9O1xufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0NhbmNlbEFjdGl2aXR5KGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0ICYmIGJ1c2luZXNzT2JqZWN0LmNhbmNlbEFjdGl2aXR5ICE9PSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldEV2ZW50RGVmaW5pdGlvbiQyKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucztcbiAgcmV0dXJuIGV2ZW50RGVmaW5pdGlvbnMgJiYgZXZlbnREZWZpbml0aW9uc1swXTtcbn1cbmZ1bmN0aW9uIGdldFJhd1R5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZS5zcGxpdCgnOicpWzFdO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnREZWZpbml0aW9uUHJlZml4KGV2ZW50RGVmaW5pdGlvbikge1xuICBjb25zdCByYXdUeXBlID0gZ2V0UmF3VHlwZShldmVudERlZmluaXRpb24uJHR5cGUpO1xuICByZXR1cm4gcmF3VHlwZS5yZXBsYWNlKCdFdmVudERlZmluaXRpb24nLCAnJyk7XG59XG5mdW5jdGlvbiBpc0RlZmF1bHRGbG93KGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3Qgc291cmNlQnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50LnNvdXJjZSk7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgIXNvdXJjZUJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBzb3VyY2VCdXNpbmVzc09iamVjdC5kZWZhdWx0ICYmIHNvdXJjZUJ1c2luZXNzT2JqZWN0LmRlZmF1bHQgPT09IGJ1c2luZXNzT2JqZWN0ICYmIChpcyhzb3VyY2VCdXNpbmVzc09iamVjdCwgJ2JwbW46R2F0ZXdheScpIHx8IGlzKHNvdXJjZUJ1c2luZXNzT2JqZWN0LCAnYnBtbjpBY3Rpdml0eScpKTtcbn1cbmZ1bmN0aW9uIGlzQ29uZGl0aW9uYWxGbG93KGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3Qgc291cmNlQnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50LnNvdXJjZSk7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgIXNvdXJjZUJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBidXNpbmVzc09iamVjdC5jb25kaXRpb25FeHByZXNzaW9uICYmIGlzKHNvdXJjZUJ1c2luZXNzT2JqZWN0LCAnYnBtbjpBY3Rpdml0eScpO1xufVxuZnVuY3Rpb24gaXNQbGFuZShlbGVtZW50KSB7XG4gIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBicG1uLWpzPDhcbiAgY29uc3QgZGkgPSBlbGVtZW50ICYmIChlbGVtZW50LmRpIHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmRpKTtcbiAgcmV0dXJuIGlzKGRpLCAnYnBtbmRpOkJQTU5QbGFuZScpO1xufVxuZnVuY3Rpb24gZ2V0VGVtcGxhdGVzU2VydmljZSgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gIHJldHVybiB1c2VTZXJ2aWNlKCdlbGVtZW50VGVtcGxhdGVzJywgZmFsc2UpO1xufVxuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xuICByZXR1cm4gZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXRUZW1wbGF0ZURvY3VtZW50YXRpb24oZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcykge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGdldFRlbXBsYXRlKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZXMpO1xuICByZXR1cm4gdGVtcGxhdGUgJiYgdGVtcGxhdGUuZG9jdW1lbnRhdGlvblJlZjtcbn1cblxuZnVuY3Rpb24gX2V4dGVuZHMkMSgpIHsgcmV0dXJuIF9leHRlbmRzJDEgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMkMS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgRW1wdHlJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyQxKHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHdpZHRoOiBcIjY0XCIsXG4gIGhlaWdodDogXCI2NFwiXG59LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICBpZDogXCJhXCIsXG4gIHdpZHRoOiBcIjU3XCIsXG4gIGhlaWdodDogXCI0N1wiLFxuICB4OiBcIjNcIixcbiAgeTogXCI4XCIsXG4gIHJ4OiBcIjdcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibWFza1wiLCB7XG4gIGlkOiBcImJcIixcbiAgd2lkdGg6IFwiNTdcIixcbiAgaGVpZ2h0OiBcIjQ3XCIsXG4gIHg6IFwiMFwiLFxuICB5OiBcIjBcIixcbiAgZmlsbDogXCIjZmZmXCIsXG4gIG1hc2tDb250ZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgbWFza1VuaXRzOiBcIm9iamVjdEJvdW5kaW5nQm94XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgeGxpbmtIcmVmOiBcIiNhXCJcbn0pKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzgxODc5OFwiLFxuICBkOiBcIk01MiAxMWE1IDUgMCAwMTUgNXYzMWE1IDUgMCAwMS01IDVIMTFhNSA1IDAgMDEtNS01VjE2YTUgNSAwIDAxNS01aDQxem0wIDJIMTFhMyAzIDAgMDAtMi45OTUgMi44MjRMOCAxNnYzMWEzIDMgMCAwMDIuODI0IDIuOTk1TDExIDUwaDQxYTMgMyAwIDAwMi45OTUtMi44MjRMNTUgNDdWMTZhMyAzIDAgMDAtMi44MjQtMi45OTVMNTIgMTN6XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiNENUQ3RERcIixcbiAgZDogXCJNMTYgMjRoMzF2NkgxNnpNMjEgMzNoMjF2NkgyMXpcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgc3Ryb2tlOiBcIiNCOUJDQzZcIixcbiAgc3Ryb2tlRGFzaGFycmF5OiBcIjUgMlwiLFxuICBzdHJva2VXaWR0aDogXCIyXCIsXG4gIG1hc2s6IFwidXJsKCNiKVwiLFxuICB4bGlua0hyZWY6IFwiI2FcIlxufSkpKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG52YXIgTXVsdGlwbGVJY29uID0gKHtcbiAgc3R5bGVzID0ge30sXG4gIC4uLnByb3BzXG59KSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB3aWR0aDogXCIxMjhcIixcbiAgaGVpZ2h0OiBcIjY0XCJcbn0sIHByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGlkOiBcImFcIixcbiAgZDogXCJNOSA5aDExMHY0N0g5elwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYXNrXCIsIHtcbiAgaWQ6IFwiYlwiLFxuICB3aWR0aDogXCIxMTBcIixcbiAgaGVpZ2h0OiBcIjQ3XCIsXG4gIHg6IFwiMFwiLFxuICB5OiBcIjBcIixcbiAgZmlsbDogXCIjZmZmXCIsXG4gIG1hc2tDb250ZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgbWFza1VuaXRzOiBcIm9iamVjdEJvdW5kaW5nQm94XCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgeGxpbmtIcmVmOiBcIiNhXCJcbn0pKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGZpbGw6IFwibm9uZVwiLFxuICBmaWxsUnVsZTogXCJldmVub2RkXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzgxODc5OFwiLFxuICBkOiBcIk0yNSAyMC4yNzJMMzcuNzI4IDMzIDI1IDQ1LjcyOCAxMi4yNzIgMzMgMjUgMjAuMjcyem0wIDIuODI5TDE1LjEgMzNsOS45IDkuOSA5LjktOS45LTkuOS05Ljl6XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBmaWxsOiBcIiNENUQ3RERcIixcbiAgZDogXCJNMTcgNDdoMTZ2NkgxN3pcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiIzgxODc5OFwiLFxuICBkOiBcIk0zNSAzMmgyN3YySDM1elwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjODE4Nzk4XCIsXG4gIGQ6IFwiTTYwIDMwdjZsNi0zelwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjRDVEN0REXCIsXG4gIGQ6IFwiTTgwIDM0aDIxdjZIODB6XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCIjODE4Nzk4XCIsXG4gIGQ6IFwiTTExMSAxMmE1IDUgMCAwMTUgNXYzMWE1IDUgMCAwMS01IDVINzBhNSA1IDAgMDEtNS01VjE3YTUgNSAwIDAxNS01aDQxem0wIDJINzBhMyAzIDAgMDAtMyAzdjMxYTMgMyAwIDAwMyAzaDQxYTMgMyAwIDAwMy0zVjE3YTMgMyAwIDAwLTMtM3pcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiI0Q1RDdERFwiLFxuICBkOiBcIk03NSAyNWgzMXY2SDc1elwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwidXNlXCIsIHtcbiAgc3Ryb2tlOiBcIiNCOUJDQzZcIixcbiAgc3Ryb2tlRGFzaGFycmF5OiBcIjUgMlwiLFxuICBzdHJva2VXaWR0aDogXCIyXCIsXG4gIG1hc2s6IFwidXJsKCNiKVwiLFxuICB4bGlua0hyZWY6IFwiI2FcIlxufSkpKTtcblxuY29uc3QgUGFuZWxQbGFjZWhvbGRlclByb3ZpZGVyID0gdHJhbnNsYXRlID0+IHtcbiAgaWYgKCF0cmFuc2xhdGUpIHRyYW5zbGF0ZSA9IHRleHQgPT4gdGV4dDtcbiAgcmV0dXJuIHtcbiAgICBnZXRFbXB0eTogKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogdHJhbnNsYXRlKCdTZWxlY3QgYW4gZWxlbWVudCB0byBlZGl0IGl0cyBwcm9wZXJ0aWVzLicpLFxuICAgICAgICBpY29uOiBFbXB0eUljb25cbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRNdWx0aXBsZTogKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogdHJhbnNsYXRlKCdNdWx0aXBsZSBlbGVtZW50cyBhcmUgc2VsZWN0ZWQuIFNlbGVjdCBhIHNpbmdsZSBlbGVtZW50IHRvIGVkaXQgaXRzIHByb3BlcnRpZXMuJyksXG4gICAgICAgIGljb246IE11bHRpcGxlSWNvblxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBCcG1uUHJvcGVydGllc1BhbmVsKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGluamVjdG9yLFxuICAgIGdldFByb3ZpZGVycyxcbiAgICBsYXlvdXRDb25maWc6IGluaXRpYWxMYXlvdXRDb25maWcsXG4gICAgZGVzY3JpcHRpb25Db25maWcsXG4gICAgdG9vbHRpcENvbmZpZyxcbiAgICBmZWVsUG9wdXBDb250YWluZXIsXG4gICAgZ2V0RmVlbFBvcHVwTGlua3NcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjYW52YXMgPSBpbmplY3Rvci5nZXQoJ2NhbnZhcycpO1xuICBjb25zdCBlbGVtZW50UmVnaXN0cnkgPSBpbmplY3Rvci5nZXQoJ2VsZW1lbnRSZWdpc3RyeScpO1xuICBjb25zdCBldmVudEJ1cyA9IGluamVjdG9yLmdldCgnZXZlbnRCdXMnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgc2VsZWN0ZWRFbGVtZW50OiBlbGVtZW50XG4gIH0pO1xuICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBzdGF0ZS5zZWxlY3RlZEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2UgfCBBcnJheTxkanMubW9kZWwuQmFzZT59IGVsZW1lbnRcbiAgICovXG4gIGNvbnN0IF91cGRhdGUgPSBlbGVtZW50ID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG5ld1NlbGVjdGVkRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvLyBoYW5kbGUgbGFiZWxzXG4gICAgaWYgKG5ld1NlbGVjdGVkRWxlbWVudCAmJiBuZXdTZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ2xhYmVsJykge1xuICAgICAgbmV3U2VsZWN0ZWRFbGVtZW50ID0gbmV3U2VsZWN0ZWRFbGVtZW50LmxhYmVsVGFyZ2V0O1xuICAgIH1cbiAgICBzZXRTdGF0ZSh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGVkRWxlbWVudDogbmV3U2VsZWN0ZWRFbGVtZW50XG4gICAgfSk7XG5cbiAgICAvLyBub3RpZnkgaW50ZXJlc3RlZCBwYXJ0aWVzIG9uIHByb3BlcnR5IHBhbmVsIHVwZGF0ZXNcbiAgICBldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwudXBkYXRlZCcsIHtcbiAgICAgIGVsZW1lbnQ6IG5ld1NlbGVjdGVkRWxlbWVudFxuICAgIH0pO1xuICB9O1xuXG4gIC8vICgyKSByZWFjdCBvbiBlbGVtZW50IGNoYW5nZXNcblxuICAvLyAoMmEpIHNlbGVjdGlvbiBjaGFuZ2VkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TZWxlY3Rpb25DaGFuZ2VkID0gZSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG5ld1NlbGVjdGlvbiA9IFtdXG4gICAgICB9ID0gZTtcbiAgICAgIGlmIChuZXdTZWxlY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZShuZXdTZWxlY3Rpb24pO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3RWxlbWVudCA9IG5ld1NlbGVjdGlvblswXTtcbiAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG4gICAgICBpZiAoaXNJbXBsaWNpdFJvb3QkMShyb290RWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3VwZGF0ZShuZXdFbGVtZW50IHx8IHJvb3RFbGVtZW50KTtcbiAgICB9O1xuICAgIGV2ZW50QnVzLm9uKCdzZWxlY3Rpb24uY2hhbmdlZCcsIG9uU2VsZWN0aW9uQ2hhbmdlZCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGV2ZW50QnVzLm9mZignc2VsZWN0aW9uLmNoYW5nZWQnLCBvblNlbGVjdGlvbkNoYW5nZWQpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyAoMmIpIHNlbGVjdGVkIGVsZW1lbnQgY2hhbmdlZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uRWxlbWVudHNDaGFuZ2VkID0gZSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IGUuZWxlbWVudHM7XG4gICAgICBjb25zdCB1cGRhdGVkRWxlbWVudCA9IGZpbmRFbGVtZW50KGVsZW1lbnRzLCBzZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgaWYgKHVwZGF0ZWRFbGVtZW50ICYmIGVsZW1lbnRFeGlzdHModXBkYXRlZEVsZW1lbnQsIGVsZW1lbnRSZWdpc3RyeSkpIHtcbiAgICAgICAgX3VwZGF0ZSh1cGRhdGVkRWxlbWVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBldmVudEJ1cy5vbignZWxlbWVudHMuY2hhbmdlZCcsIG9uRWxlbWVudHNDaGFuZ2VkKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZXZlbnRCdXMub2ZmKCdlbGVtZW50cy5jaGFuZ2VkJywgb25FbGVtZW50c0NoYW5nZWQpO1xuICAgIH07XG4gIH0sIFtzZWxlY3RlZEVsZW1lbnRdKTtcblxuICAvLyAoMmMpIHJvb3QgZWxlbWVudCBjaGFuZ2VkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25Sb290QWRkZWQgPSBlID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlLmVsZW1lbnQ7XG4gICAgICBfdXBkYXRlKGVsZW1lbnQpO1xuICAgIH07XG4gICAgZXZlbnRCdXMub24oJ3Jvb3QuYWRkZWQnLCBvblJvb3RBZGRlZCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGV2ZW50QnVzLm9mZigncm9vdC5hZGRlZCcsIG9uUm9vdEFkZGVkKTtcbiAgICB9O1xuICB9LCBbc2VsZWN0ZWRFbGVtZW50XSk7XG5cbiAgLy8gKDJkKSBwcm92aWRlZCBlbnRyaWVzIGNoYW5nZWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblByb3ZpZGVyc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICBfdXBkYXRlKHNlbGVjdGVkRWxlbWVudCk7XG4gICAgfTtcbiAgICBldmVudEJ1cy5vbigncHJvcGVydGllc1BhbmVsLnByb3ZpZGVyc0NoYW5nZWQnLCBvblByb3ZpZGVyc0NoYW5nZWQpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBldmVudEJ1cy5vZmYoJ3Byb3BlcnRpZXNQYW5lbC5wcm92aWRlcnNDaGFuZ2VkJywgb25Qcm92aWRlcnNDaGFuZ2VkKTtcbiAgICB9O1xuICB9LCBbc2VsZWN0ZWRFbGVtZW50XSk7XG5cbiAgLy8gKDJlKSBlbGVtZW50IHRlbXBsYXRlcyBjaGFuZ2VkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25UZW1wbGF0ZXNDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgX3VwZGF0ZShzZWxlY3RlZEVsZW1lbnQpO1xuICAgIH07XG4gICAgZXZlbnRCdXMub24oJ2VsZW1lbnRUZW1wbGF0ZXMuY2hhbmdlZCcsIG9uVGVtcGxhdGVzQ2hhbmdlZCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudFRlbXBsYXRlcy5jaGFuZ2VkJywgb25UZW1wbGF0ZXNDaGFuZ2VkKTtcbiAgICB9O1xuICB9LCBbc2VsZWN0ZWRFbGVtZW50XSk7XG5cbiAgLy8gKDMpIGNyZWF0ZSBwcm9wZXJ0aWVzIHBhbmVsIGNvbnRleHRcbiAgY29uc3QgYnBtblByb3BlcnRpZXNQYW5lbENvbnRleHQgPSB7XG4gICAgc2VsZWN0ZWRFbGVtZW50LFxuICAgIGluamVjdG9yLFxuICAgIGdldFNlcnZpY2UodHlwZSwgc3RyaWN0KSB7XG4gICAgICByZXR1cm4gaW5qZWN0b3IuZ2V0KHR5cGUsIHN0cmljdCk7XG4gICAgfVxuICB9O1xuXG4gIC8vICg0KSByZXRyaWV2ZSBncm91cHMgZm9yIHNlbGVjdGVkIGVsZW1lbnRcbiAgY29uc3QgcHJvdmlkZXJzID0gZ2V0UHJvdmlkZXJzKHNlbGVjdGVkRWxlbWVudCk7XG4gIGNvbnN0IGdyb3VwcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiByZWR1Y2UocHJvdmlkZXJzLCBmdW5jdGlvbiAoZ3JvdXBzLCBwcm92aWRlcikge1xuICAgICAgLy8gZG8gbm90IGNvbGxlY3QgZ3JvdXBzIGZvciBtdWx0aSBlbGVtZW50IHN0YXRlXG4gICAgICBpZiAoaXNBcnJheShzZWxlY3RlZEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZXIgPSBwcm92aWRlci5nZXRHcm91cHMoc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgIHJldHVybiB1cGRhdGVyKGdyb3Vwcyk7XG4gICAgfSwgW10pO1xuICB9LCBbcHJvdmlkZXJzLCBzZWxlY3RlZEVsZW1lbnRdKTtcblxuICAvLyAoNSkgbm90aWZ5IGxheW91dCBjaGFuZ2VzXG4gIGNvbnN0IFtsYXlvdXRDb25maWcsIHNldExheW91dENvbmZpZ10gPSB1c2VTdGF0ZShpbml0aWFsTGF5b3V0Q29uZmlnIHx8IHt9KTtcbiAgY29uc3Qgb25MYXlvdXRDaGFuZ2VkID0gdXNlQ2FsbGJhY2sobmV3TGF5b3V0ID0+IHtcbiAgICBldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwubGF5b3V0Q2hhbmdlZCcsIHtcbiAgICAgIGxheW91dDogbmV3TGF5b3V0XG4gICAgfSk7XG4gIH0sIFtldmVudEJ1c10pO1xuXG4gIC8vIFJlYWN0IHRvIGV4dGVybmFsIGxheW91dCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2IgPSBlID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGF5b3V0XG4gICAgICB9ID0gZTtcbiAgICAgIHNldExheW91dENvbmZpZyhsYXlvdXQpO1xuICAgIH07XG4gICAgZXZlbnRCdXMub24oJ3Byb3BlcnRpZXNQYW5lbC5zZXRMYXlvdXQnLCBjYik7XG4gICAgcmV0dXJuICgpID0+IGV2ZW50QnVzLm9mZigncHJvcGVydGllc1BhbmVsLnNldExheW91dCcsIGNiKTtcbiAgfSwgW2V2ZW50QnVzLCBzZXRMYXlvdXRDb25maWddKTtcblxuICAvLyAoNikgbm90aWZ5IGRlc2NyaXB0aW9uIGNoYW5nZXNcbiAgY29uc3Qgb25EZXNjcmlwdGlvbkxvYWRlZCA9IGRlc2NyaXB0aW9uID0+IHtcbiAgICBldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwuZGVzY3JpcHRpb25Mb2FkZWQnLCB7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pO1xuICB9O1xuXG4gIC8vICg3KSBub3RpZnkgdG9vbHRpcCBjaGFuZ2VzXG4gIGNvbnN0IG9uVG9vbHRpcExvYWRlZCA9IHRvb2x0aXAgPT4ge1xuICAgIGV2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC50b29sdGlwTG9hZGVkJywge1xuICAgICAgdG9vbHRpcFxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ganN4KEJwbW5Qcm9wZXJ0aWVzUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGJwbW5Qcm9wZXJ0aWVzUGFuZWxDb250ZXh0LFxuICAgIGNoaWxkcmVuOiBqc3goUHJvcGVydGllc1BhbmVsLCB7XG4gICAgICBlbGVtZW50OiBzZWxlY3RlZEVsZW1lbnQsXG4gICAgICBoZWFkZXJQcm92aWRlcjogUGFuZWxIZWFkZXJQcm92aWRlcih0cmFuc2xhdGUpLFxuICAgICAgcGxhY2Vob2xkZXJQcm92aWRlcjogUGFuZWxQbGFjZWhvbGRlclByb3ZpZGVyKHRyYW5zbGF0ZSksXG4gICAgICBncm91cHM6IGdyb3VwcyxcbiAgICAgIGxheW91dENvbmZpZzogbGF5b3V0Q29uZmlnLFxuICAgICAgbGF5b3V0Q2hhbmdlZDogb25MYXlvdXRDaGFuZ2VkLFxuICAgICAgZGVzY3JpcHRpb25Db25maWc6IGRlc2NyaXB0aW9uQ29uZmlnLFxuICAgICAgZGVzY3JpcHRpb25Mb2FkZWQ6IG9uRGVzY3JpcHRpb25Mb2FkZWQsXG4gICAgICB0b29sdGlwQ29uZmlnOiB0b29sdGlwQ29uZmlnLFxuICAgICAgdG9vbHRpcExvYWRlZDogb25Ub29sdGlwTG9hZGVkLFxuICAgICAgZmVlbFBvcHVwQ29udGFpbmVyOiBmZWVsUG9wdXBDb250YWluZXIsXG4gICAgICBnZXRGZWVsUG9wdXBMaW5rczogZ2V0RmVlbFBvcHVwTGlua3MsXG4gICAgICBldmVudEJ1czogZXZlbnRCdXNcbiAgICB9KVxuICB9KTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0ltcGxpY2l0Um9vdCQxKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5pc0ltcGxpY2l0O1xufVxuZnVuY3Rpb24gZmluZEVsZW1lbnQoZWxlbWVudHMsIGVsZW1lbnQpIHtcbiAgcmV0dXJuIGZpbmQoZWxlbWVudHMsIGUgPT4gZSA9PT0gZWxlbWVudCk7XG59XG5mdW5jdGlvbiBlbGVtZW50RXhpc3RzKGVsZW1lbnQsIGVsZW1lbnRSZWdpc3RyeSkge1xuICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50UmVnaXN0cnkuZ2V0KGVsZW1lbnQuaWQpO1xufVxuXG5jb25zdCBERUZBVUxUX1BSSU9SSVRZID0gMTAwMDtcblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbCcpLkdyb3VwRGVmaW5pdGlvbiB9IEdyb3VwRGVmaW5pdGlvblxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5MaXN0R3JvdXBEZWZpbml0aW9uIH0gTGlzdEdyb3VwRGVmaW5pdGlvblxuICogQHR5cGVkZWYgeyB7IGdldEdyb3VwczogKE1vZGRsZUVsZW1lbnQpID0+IChBcnJheXtHcm91cERlZmluaXRpb258TGlzdEdyb3VwRGVmaW5pdGlvbn0pID0+IEFycmF5e0dyb3VwRGVmaW5pdGlvbnxMaXN0R3JvdXBEZWZpbml0aW9ufSkgfSBQcm9wZXJ0aWVzUHJvdmlkZXJcbiAqL1xuXG5jbGFzcyBCcG1uUHJvcGVydGllc1BhbmVsUmVuZGVyZXIge1xuICBjb25zdHJ1Y3Rvcihjb25maWcsIGluamVjdG9yLCBldmVudEJ1cykge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmVudCxcbiAgICAgIGxheW91dDogbGF5b3V0Q29uZmlnLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogdG9vbHRpcENvbmZpZyxcbiAgICAgIGZlZWxQb3B1cENvbnRhaW5lcixcbiAgICAgIGdldEZlZWxQb3B1cExpbmtzXG4gICAgfSA9IGNvbmZpZyB8fCB7fTtcbiAgICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgdGhpcy5fbGF5b3V0Q29uZmlnID0gbGF5b3V0Q29uZmlnO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uQ29uZmlnID0gZGVzY3JpcHRpb25Db25maWc7XG4gICAgdGhpcy5fdG9vbHRpcENvbmZpZyA9IHRvb2x0aXBDb25maWc7XG4gICAgdGhpcy5fZmVlbFBvcHVwQ29udGFpbmVyID0gZmVlbFBvcHVwQ29udGFpbmVyO1xuICAgIHRoaXMuX2dldEZlZWxQb3B1cExpbmtzID0gZ2V0RmVlbFBvcHVwTGlua3M7XG4gICAgdGhpcy5fY29udGFpbmVyID0gZG9taWZ5KCc8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwiYmlvLXByb3BlcnRpZXMtcGFuZWwtY29udGFpbmVyXCI+PC9kaXY+Jyk7XG4gICAgdmFyIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJywgZmFsc2UpO1xuICAgIGNvbW1hbmRTdGFjayAmJiBzZXR1cEtleWJvYXJkKHRoaXMuX2NvbnRhaW5lciwgZXZlbnRCdXMsIGNvbW1hbmRTdGFjayk7XG4gICAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsICgpID0+IHtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hUbyhwYXJlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGV2ZW50QnVzLm9uKCdkaWFncmFtLmRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICB0aGlzLmRldGFjaCgpO1xuICAgIH0pO1xuICAgIGV2ZW50QnVzLm9uKCdyb290LmFkZGVkJywgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBlbGVtZW50XG4gICAgICB9ID0gZXZlbnQ7XG4gICAgICB0aGlzLl9yZW5kZXIoZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoIHRoZSBwcm9wZXJ0aWVzIHBhbmVsIHRvIGEgcGFyZW50IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICAgKi9cbiAgYXR0YWNoVG8oY29udGFpbmVyKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29udGFpbmVyIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gdW53cmFwIGpRdWVyeSBpZiBwcm92aWRlZFxuICAgIGlmIChjb250YWluZXIuZ2V0ICYmIGNvbnRhaW5lci5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuanF1ZXJ5KSB7XG4gICAgICBjb250YWluZXIgPSBjb250YWluZXIuZ2V0KDApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbnRhaW5lciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnRhaW5lciA9IHF1ZXJ5KGNvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgLy8gKDEpIGRldGFjaCBmcm9tIG9sZCBwYXJlbnRcbiAgICB0aGlzLmRldGFjaCgpO1xuXG4gICAgLy8gKDIpIGFwcGVuZCB0byBwYXJlbnQgY29udGFpbmVyXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgICAvLyAoMykgbm90aWZ5IGludGVyZXN0ZWQgcGFydGllc1xuICAgIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC5hdHRhY2gnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRhY2ggdGhlIHByb3BlcnRpZXMgcGFuZWwgZnJvbSBpdHMgcGFyZW50IG5vZGUuXG4gICAqL1xuICBkZXRhY2goKSB7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwuZGV0YWNoJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbmV3IHByb3BlcnRpZXMgcHJvdmlkZXIgdG8gdGhlIHByb3BlcnRpZXMgcGFuZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbcHJpb3JpdHldXG4gICAqIEBwYXJhbSB7UHJvcGVydGllc1Byb3ZpZGVyfSBwcm92aWRlclxuICAgKi9cbiAgcmVnaXN0ZXJQcm92aWRlcihwcmlvcml0eSwgcHJvdmlkZXIpIHtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICBwcm92aWRlciA9IHByaW9yaXR5O1xuICAgICAgcHJpb3JpdHkgPSBERUZBVUxUX1BSSU9SSVRZO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3ZpZGVyLmdldEdyb3VwcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcignUHJvcGVydGllcyBwcm92aWRlciBkb2VzIG5vdCBpbXBsZW1lbnQgI2dldEdyb3VwcyhlbGVtZW50KSBBUEknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZXZlbnRCdXMub24oJ3Byb3BlcnRpZXNQYW5lbC5nZXRQcm92aWRlcnMnLCBwcmlvcml0eSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBldmVudC5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gICAgfSk7XG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZSgncHJvcGVydGllc1BhbmVsLnByb3ZpZGVyc0NoYW5nZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsYXlvdXQgb2YgdGhlIHByb3BlcnRpZXMgcGFuZWwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXlvdXRcbiAgICovXG4gIHNldExheW91dChsYXlvdXQpIHtcbiAgICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwuc2V0TGF5b3V0Jywge1xuICAgICAgbGF5b3V0XG4gICAgfSk7XG4gIH1cbiAgX2dldFByb3ZpZGVycygpIHtcbiAgICBjb25zdCBldmVudCA9IHRoaXMuX2V2ZW50QnVzLmNyZWF0ZUV2ZW50KHtcbiAgICAgIHR5cGU6ICdwcm9wZXJ0aWVzUGFuZWwuZ2V0UHJvdmlkZXJzJyxcbiAgICAgIHByb3ZpZGVyczogW11cbiAgICB9KTtcbiAgICB0aGlzLl9ldmVudEJ1cy5maXJlKGV2ZW50KTtcbiAgICByZXR1cm4gZXZlbnQucHJvdmlkZXJzO1xuICB9XG4gIF9yZW5kZXIoZWxlbWVudCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuX2luamVjdG9yLmdldCgnY2FudmFzJyk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG4gICAgfVxuICAgIGlmIChpc0ltcGxpY2l0Um9vdChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZW5kZXIoanN4KEJwbW5Qcm9wZXJ0aWVzUGFuZWwsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBpbmplY3RvcjogdGhpcy5faW5qZWN0b3IsXG4gICAgICBnZXRQcm92aWRlcnM6IHRoaXMuX2dldFByb3ZpZGVycy5iaW5kKHRoaXMpLFxuICAgICAgbGF5b3V0Q29uZmlnOiB0aGlzLl9sYXlvdXRDb25maWcsXG4gICAgICBkZXNjcmlwdGlvbkNvbmZpZzogdGhpcy5fZGVzY3JpcHRpb25Db25maWcsXG4gICAgICB0b29sdGlwQ29uZmlnOiB0aGlzLl90b29sdGlwQ29uZmlnLFxuICAgICAgZmVlbFBvcHVwQ29udGFpbmVyOiB0aGlzLl9mZWVsUG9wdXBDb250YWluZXIsXG4gICAgICBnZXRGZWVsUG9wdXBMaW5rczogdGhpcy5fZ2V0RmVlbFBvcHVwTGlua3NcbiAgICB9KSwgdGhpcy5fY29udGFpbmVyKTtcbiAgICB0aGlzLl9ldmVudEJ1cy5maXJlKCdwcm9wZXJ0aWVzUGFuZWwucmVuZGVyZWQnKTtcbiAgfVxuICBfZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICByZW5kZXIobnVsbCwgdGhpcy5fY29udGFpbmVyKTtcbiAgICAgIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ3Byb3BlcnRpZXNQYW5lbC5kZXN0cm95ZWQnKTtcbiAgICB9XG4gIH1cbn1cbkJwbW5Qcm9wZXJ0aWVzUGFuZWxSZW5kZXJlci4kaW5qZWN0ID0gWydjb25maWcucHJvcGVydGllc1BhbmVsJywgJ2luamVjdG9yJywgJ2V2ZW50QnVzJ107XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNJbXBsaWNpdFJvb3QoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LmlzSW1wbGljaXQ7XG59XG5cbi8qKlxuICogU2V0dXAga2V5Ym9hcmQgYmluZGluZ3MgKHVuZG8sIHJlZG8pIG9uIHRoZSBnaXZlbiBjb250YWluZXIuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHNldHVwS2V5Ym9hcmQoY29udGFpbmVyLCBldmVudEJ1cywgY29tbWFuZFN0YWNrKSB7XG4gIGZ1bmN0aW9uIGNhbmNlbChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlS2V5cyhldmVudCkge1xuICAgIGlmIChpc1VuZG8oZXZlbnQpKSB7XG4gICAgICBjb21tYW5kU3RhY2sudW5kbygpO1xuICAgICAgcmV0dXJuIGNhbmNlbChldmVudCk7XG4gICAgfVxuICAgIGlmIChpc1JlZG8oZXZlbnQpKSB7XG4gICAgICBjb21tYW5kU3RhY2sucmVkbygpO1xuICAgICAgcmV0dXJuIGNhbmNlbChldmVudCk7XG4gICAgfVxuICB9XG4gIGV2ZW50QnVzLm9uKCdrZXlib2FyZC5iaW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGV2ZW50LmJpbmQoY29udGFpbmVyLCAna2V5ZG93bicsIGhhbmRsZUtleXMpO1xuICB9KTtcbiAgZXZlbnRCdXMub24oJ2tleWJvYXJkLnVuYmluZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBldmVudC51bmJpbmQoY29udGFpbmVyLCAna2V5ZG93bicsIGhhbmRsZUtleXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCBjb21iaW5lcyBhbmQgZXhlY3V0ZXMgbXVsdGlwbGUgY29tbWFuZHMuXG4gKlxuICogQWxsIHVwZGF0ZXMgYXJlIGJ1bmRsZWQgb24gdGhlIGNvbW1hbmQgc3RhY2sgYW5kIGV4ZWN1dGVkIGluIG9uZSBzdGVwLlxuICogVGhpcyBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJldmVydCB0aGUgY2hhbmdlcyBpbiBvbmUgc3RlcC5cbiAqXG4gKiBFeGFtcGxlIHVzZSBjYXNlOiByZW1vdmUgdGhlIGNhbXVuZGE6Zm9ybUtleSBhdHRyaWJ1dGUgYW5kIGluIGFkZGl0aW9uXG4gKiBhZGQgYWxsIGZvcm0gZmllbGRzIG5lZWRlZCBmb3IgdGhlIGNhbXVuZGE6Zm9ybURhdGEgcHJvcGVydHkuXG4gKi9cbmNsYXNzIE11bHRpQ29tbWFuZEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihjb21tYW5kU3RhY2spIHtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2sgPSBjb21tYW5kU3RhY2s7XG4gIH1cbiAgcHJlRXhlY3V0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGZvckVhY2goY29udGV4dCwgZnVuY3Rpb24gKGNvbW1hbmQpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKGNvbW1hbmQuY21kLCBjb21tYW5kLmNvbnRleHQpO1xuICAgIH0pO1xuICB9XG59XG5NdWx0aUNvbW1hbmRIYW5kbGVyLiRpbmplY3QgPSBbJ2NvbW1hbmRTdGFjayddO1xuXG5jb25zdCBIQU5ETEVSUyA9IHtcbiAgJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcic6IE11bHRpQ29tbWFuZEhhbmRsZXJcbn07XG5mdW5jdGlvbiBDb21tYW5kSW5pdGlhbGl6ZXIoZXZlbnRCdXMsIGNvbW1hbmRTdGFjaykge1xuICBldmVudEJ1cy5vbignZGlhZ3JhbS5pbml0JywgZnVuY3Rpb24gKCkge1xuICAgIGZvckVhY2goSEFORExFUlMsIGZ1bmN0aW9uIChoYW5kbGVyLCBpZCkge1xuICAgICAgY29tbWFuZFN0YWNrLnJlZ2lzdGVySGFuZGxlcihpZCwgaGFuZGxlcik7XG4gICAgfSk7XG4gIH0pO1xufVxuQ29tbWFuZEluaXRpYWxpemVyLiRpbmplY3QgPSBbJ2V2ZW50QnVzJywgJ2NvbW1hbmRTdGFjayddO1xudmFyIENvbW1hbmRzID0ge1xuICBfX2luaXRfXzogW0NvbW1hbmRJbml0aWFsaXplcl1cbn07XG5cbnZhciBpbmRleCQzID0ge1xuICBfX2RlcGVuZHNfXzogW0NvbW1hbmRzLCBEZWJvdW5jZUlucHV0TW9kdWxlLCBGZWVsUG9wdXBNb2R1bGVdLFxuICBfX2luaXRfXzogWydwcm9wZXJ0aWVzUGFuZWwnXSxcbiAgcHJvcGVydGllc1BhbmVsOiBbJ3R5cGUnLCBCcG1uUHJvcGVydGllc1BhbmVsUmVuZGVyZXJdXG59O1xuXG5mdW5jdGlvbiBSZWZlcmVuY2VTZWxlY3RFbnRyeShwcm9wcykge1xuICBjb25zdCB7XG4gICAgYXV0b0ZvY3VzRW50cnksXG4gICAgZWxlbWVudCxcbiAgICBnZXRPcHRpb25zXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnMoZWxlbWVudCk7XG4gIGNvbnN0IHByZXZPcHRpb25zID0gdXNlUHJldmlvdXMob3B0aW9ucyk7XG5cbiAgLy8gYXV0byBmb2N1cyBzcGVjaWZjIG90aGVyIGVudHJ5IHdoZW4gb3B0aW9ucyBjaGFuZ2VkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1c0VudHJ5ICYmIHByZXZPcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gcHJldk9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHF1ZXJ5KGBbZGF0YS1lbnRyeS1pZD1cIiR7YXV0b0ZvY3VzRW50cnl9XCJdYCk7XG4gICAgICBjb25zdCBmb2N1c2FibGVJbnB1dCA9IHF1ZXJ5KCcuYmlvLXByb3BlcnRpZXMtcGFuZWwtaW5wdXQnLCBlbnRyeSk7XG4gICAgICBpZiAoZm9jdXNhYmxlSW5wdXQpIHtcbiAgICAgICAgZm9jdXNhYmxlSW5wdXQuc2VsZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbb3B0aW9uc10pO1xuICByZXR1cm4ganN4KFNlbGVjdEVudHJ5LCB7XG4gICAgLi4ucHJvcHNcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JTdXBwb3J0ZWQoZWxlbWVudCkge1xuICByZXR1cm4gaXNBbnkoZWxlbWVudCwgWydicG1uOlN0YXJ0RXZlbnQnLCAnYnBtbjpCb3VuZGFyeUV2ZW50JywgJ2JwbW46RW5kRXZlbnQnXSkgJiYgISFnZXRFcnJvckV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0RXJyb3JFdmVudERlZmluaXRpb24kMShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRFdmVudERlZmluaXRpb24kMShlbGVtZW50LCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpO1xufVxuZnVuY3Rpb24gZ2V0VGltZXJFdmVudERlZmluaXRpb24kMShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRFdmVudERlZmluaXRpb24kMShlbGVtZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpO1xufVxuZnVuY3Rpb24gZ2V0RXJyb3IoZWxlbWVudCkge1xuICBjb25zdCBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGdldEVycm9yRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCk7XG4gIHJldHVybiBlcnJvckV2ZW50RGVmaW5pdGlvbiAmJiBlcnJvckV2ZW50RGVmaW5pdGlvbi5nZXQoJ2Vycm9yUmVmJyk7XG59XG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24kMShlbGVtZW50LCBldmVudFR5cGUpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpIHx8IFtdO1xuICByZXR1cm4gZmluZChldmVudERlZmluaXRpb25zLCBmdW5jdGlvbiAoZGVmaW5pdGlvbikge1xuICAgIHJldHVybiBpcyhkZWZpbml0aW9uLCBldmVudFR5cGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGlzTWVzc2FnZVN1cHBvcnRlZChlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpSZWNlaXZlVGFzaycpIHx8IGlzQW55KGVsZW1lbnQsIFsnYnBtbjpTdGFydEV2ZW50JywgJ2JwbW46RW5kRXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JywgJ2JwbW46Qm91bmRhcnlFdmVudCcsICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnXSkgJiYgISFnZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpSZWNlaXZlVGFzaycpKSB7XG4gICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICB9XG4gIHJldHVybiBnZXRFdmVudERlZmluaXRpb24kMShlbGVtZW50LCAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyk7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKGVsZW1lbnQpIHtcbiAgY29uc3QgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiA9IGdldE1lc3NhZ2VFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG4gIHJldHVybiBtZXNzYWdlRXZlbnREZWZpbml0aW9uICYmIG1lc3NhZ2VFdmVudERlZmluaXRpb24uZ2V0KCdtZXNzYWdlUmVmJyk7XG59XG5mdW5jdGlvbiBnZXRMaW5rRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKTtcbn1cbmZ1bmN0aW9uIGdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpO1xufVxuZnVuY3Rpb24gaXNMaW5rU3VwcG9ydGVkKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JywgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCddKSAmJiAhIWdldExpbmtFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG59XG5mdW5jdGlvbiBpc1NpZ25hbFN1cHBvcnRlZCQxKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykgJiYgISFnZXRTaWduYWxFdmVudERlZmluaXRpb24kMShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldFNpZ25hbCQxKGVsZW1lbnQpIHtcbiAgY29uc3Qgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZ2V0U2lnbmFsRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCk7XG4gIHJldHVybiBzaWduYWxFdmVudERlZmluaXRpb24gJiYgc2lnbmFsRXZlbnREZWZpbml0aW9uLmdldCgnc2lnbmFsUmVmJyk7XG59XG5mdW5jdGlvbiBnZXRFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQsICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nKTtcbn1cbmZ1bmN0aW9uIGlzRXNjYWxhdGlvblN1cHBvcnRlZChlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpICYmICEhZ2V0RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldEVzY2FsYXRpb24oZWxlbWVudCkge1xuICBjb25zdCBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uID0gZ2V0RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgcmV0dXJuIGVzY2FsYXRpb25FdmVudERlZmluaXRpb24gJiYgZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbi5nZXQoJ2VzY2FsYXRpb25SZWYnKTtcbn1cbmZ1bmN0aW9uIGlzQ29tcGVuc2F0aW9uU3VwcG9ydGVkKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsnYnBtbjpFbmRFdmVudCcsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXSkgJiYgISFnZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0RXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCwgJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbicpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcGVuc2F0ZUFjdGl2aXR5KGVsZW1lbnQpIHtcbiAgY29uc3QgY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbiA9IGdldENvbXBlbnNhdGVFdmVudERlZmluaXRpb24kMShlbGVtZW50KTtcbiAgcmV0dXJuIGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24gJiYgY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbi5nZXQoJ2FjdGl2aXR5UmVmJyk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBDb21wZW5zYXRpb25Qcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXNDb21wZW5zYXRpb25TdXBwb3J0ZWQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICd3YWl0Rm9yQ29tcGxldGlvbicsXG4gICAgY29tcG9uZW50OiBXYWl0Rm9yQ29tcGxldGlvbixcbiAgICBpc0VkaXRlZDogaXNDaGVja2JveEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ2FjdGl2aXR5UmVmJyxcbiAgICBjb21wb25lbnQ6IEFjdGl2aXR5UmVmLFxuICAgIGlzRWRpdGVkOiBpc1NlbGVjdEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gV2FpdEZvckNvbXBsZXRpb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGNvbXBlbnNhdGVFdmVudERlZmluaXRpb24gPSBnZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLmdldCgnd2FpdEZvckNvbXBsZXRpb24nKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB3YWl0Rm9yQ29tcGxldGlvbjogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIENoZWNrYm94RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICd3YWl0Rm9yQ29tcGxldGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnV2FpdCBmb3IgY29tcGxldGlvbicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0pO1xufVxuZnVuY3Rpb24gQWN0aXZpdHlSZWYocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgZWxlbWVudFJlZ2lzdHJ5ID0gdXNlU2VydmljZSgnZWxlbWVudFJlZ2lzdHJ5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uID0gZ2V0Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICBjb25zdCBhY3Rpdml0eVJlZiA9IGdldENvbXBlbnNhdGVBY3Rpdml0eShlbGVtZW50KTtcbiAgICByZXR1cm4gYWN0aXZpdHlSZWYgJiYgYWN0aXZpdHlSZWYuZ2V0KCdpZCcpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAvLyB1cGRhdGUgKG9yIHJlbW92ZSkgYWN0aXZpdHlSZWZcbiAgICBjb25zdCBhY3Rpdml0eVJlZiA9IHZhbHVlID8gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudFJlZ2lzdHJ5LmdldCh2YWx1ZSkpIDogdW5kZWZpbmVkO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWN0aXZpdHlSZWZcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IFt7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICAgIH1dO1xuICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBmaW5kQWN0aXZpdHlSZWZzKGVsZW1lbnQpO1xuICAgIHNvcnRCeU5hbWUkNihhY3Rpdml0aWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhY3Rpdml0eSkge1xuICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGFjdGl2aXR5LmlkLFxuICAgICAgICBsYWJlbDogY3JlYXRlT3B0aW9uTGFiZWwoYWN0aXZpdHkpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcbiAgcmV0dXJuIFJlZmVyZW5jZVNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnYWN0aXZpdHlSZWYnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0FjdGl2aXR5IHJlZmVyZW5jZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEZsb3dFbGVtZW50cyhlbGVtZW50LCB0eXBlKSB7XG4gIGNvbnN0IHtcbiAgICBmbG93RWxlbWVudHNcbiAgfSA9IGVsZW1lbnQ7XG4gIHJldHVybiBmbG93RWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChmbG93RWxlbWVudCkge1xuICAgIHJldHVybiBpcyhmbG93RWxlbWVudCwgdHlwZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmVkQWN0aXZpdGllcyhlbGVtZW50KSB7XG4gIHJldHVybiBnZXRGbG93RWxlbWVudHMoZWxlbWVudCwgJ2JwbW46QWN0aXZpdHknKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lZEJvdW5kYXJ5RXZlbnRzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEZsb3dFbGVtZW50cyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50Jyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gQWN0aXZpdHkgaXMgYXR0YWNoaW5nIGEgQ29tcGVuc2F0ZUV2ZW50IG9mIHRoZSBwYXJlbnQgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYWN0aXZpdHlcbiAqIEBwYXJhbSB7QXJyYXk8TW9kZGxlRWxlbWVudD59IGJvdW5kYXJ5RXZlbnRzXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzQ29tcGVuc2F0aW9uRXZlbnRBdHRhY2hlZChhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpIHtcbiAgY29uc3Qge1xuICAgIGlkOiBhY3Rpdml0eUlkXG4gIH0gPSBhY3Rpdml0eTtcbiAgcmV0dXJuICEhZmluZChib3VuZGFyeUV2ZW50cywgZnVuY3Rpb24gKGJvdW5kYXJ5RXZlbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICBhdHRhY2hlZFRvUmVmXG4gICAgfSA9IGJvdW5kYXJ5RXZlbnQ7XG4gICAgY29uc3QgY29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbiA9IGdldENvbXBlbnNhdGVFdmVudERlZmluaXRpb24kMShib3VuZGFyeUV2ZW50KTtcbiAgICByZXR1cm4gYXR0YWNoZWRUb1JlZiAmJiBjb21wZW5zYXRlRXZlbnREZWZpbml0aW9uICYmIGF0dGFjaGVkVG9SZWYuaWQgPT09IGFjdGl2aXR5SWQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIEFjdGl2aXR5IGNhbiBiZSBjb21wZW5zYXRlZC4gVGhhdCdzIHRoZSBjYXNlIHdoZW4gaXQgaXNcbiAqIGEpIGEgQ2FsbEFjdGl2aXR5XG4gKiBiKSBhIFN1YlByb2Nlc3MsIHdoZW4gaXQgaXMgbm90IGV2ZW50IGJhc2VkIGFuZCBub3QgYSBjb21wZW5zYXRpb25cbiAqIGMpIGFueSBvdGhlciBBY3Rpdml0eSwgd2hlbiBpdCBpcyBhdHRhY2hpbmcgYSBDb21wZW5zYXRlRXZlbnQgb2YgdGhlIHBhcmVudCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGFjdGl2aXR5XG4gKiBAcGFyYW0ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBib3VuZGFyeUV2ZW50c1xuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNhbkJlQ29tcGVuc2F0ZWQoYWN0aXZpdHksIGJvdW5kYXJ5RXZlbnRzKSB7XG4gIHJldHVybiBpcyhhY3Rpdml0eSwgJ2JwbW46Q2FsbEFjdGl2aXR5JykgfHwgaXMoYWN0aXZpdHksICdicG1uOlN1YlByb2Nlc3MnKSAmJiAhYWN0aXZpdHkudHJpZ2dlcmVkQnlFdmVudCAmJiAhYWN0aXZpdHkuaXNGb3JDb21wZW5zYXRpb24gfHwgaGFzQ29tcGVuc2F0aW9uRXZlbnRBdHRhY2hlZChhY3Rpdml0eSwgYm91bmRhcnlFdmVudHMpO1xufVxuZnVuY3Rpb24gZ2V0QWN0aXZpdGllc0ZvckNvbXBlbnNhdGlvbihlbGVtZW50KSB7XG4gIGNvbnN0IGFjdGl2aXRpZXMgPSBnZXRDb250YWluZWRBY3Rpdml0aWVzKGVsZW1lbnQpO1xuICBjb25zdCBib3VuZGFyeUV2ZW50cyA9IGdldENvbnRhaW5lZEJvdW5kYXJ5RXZlbnRzKGVsZW1lbnQpO1xuICByZXR1cm4gYWN0aXZpdGllcy5maWx0ZXIoZnVuY3Rpb24gKGFjdGl2aXR5KSB7XG4gICAgcmV0dXJuIGNhbkJlQ29tcGVuc2F0ZWQoYWN0aXZpdHksIGJvdW5kYXJ5RXZlbnRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBwb3NzaWJsZSBhY3Rpdml0aWVzIHRvIHJlZmVyZW5jZSBmb3IgYSBDb21wZW5zYXRpb24uXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHJldHVybnMge0FycmF5PE1vZGRsZUVsZW1lbnQ+fVxuICovXG5mdW5jdGlvbiBmaW5kQWN0aXZpdHlSZWZzKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgbGV0IHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0LiRwYXJlbnQ7XG5cbiAgLy8gKDEpIGdldCBhbGwgYWN0aXZpdGllcyBpbiBwYXJlbnQgY29udGFpbmVyXG4gIGxldCBhY3Rpdml0aWVzID0gZ2V0QWN0aXZpdGllc0ZvckNvbXBlbnNhdGlvbihwYXJlbnQpO1xuXG4gIC8vICgyKSBpZiB0aHJvd2luZyBjb21wZW5zYXRpb24gZXZlbnQgaXMgaW5zaWRlIGFuIEV2ZW50U3ViUHJvY2VzcyxcbiAgLy8gYWxzbyBnZXQgYWxsIGFjdGl2aXRpZXMgb3V0c2lkZSBvZiB0aGUgZXZlbnQgc3ViIHByb2Nlc3NcbiAgaWYgKGlzKHBhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmIHBhcmVudC50cmlnZ2VyZWRCeUV2ZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgYWN0aXZpdGllcyA9IFsuLi5hY3Rpdml0aWVzLCAuLi5nZXRBY3Rpdml0aWVzRm9yQ29tcGVuc2F0aW9uKHBhcmVudCldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWN0aXZpdGllcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gb3B0aW9uIGxhYmVsIGluIHRoZSBmb3JtXG4gKiBhKSB3aXRoIG5hbWU6IFwibXkgVGFzayAoaWQ9VGFza18xKVwiXG4gKiBiKSB3aXRob3V0IG5hbWU6IFwiKGlkPVRhc2tfMSlcIlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYWN0aXZpdHlcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbkxhYmVsKGFjdGl2aXR5KSB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBuYW1lXG4gIH0gPSBhY3Rpdml0eTtcbiAgcmV0dXJuIGAke25hbWUgPyBuYW1lICsgJyAnIDogJyd9KGlkPSR7aWR9KWA7XG59XG5mdW5jdGlvbiBzb3J0QnlOYW1lJDYoZWxlbWVudHMpIHtcbiAgcmV0dXJuIHNvcnRCeShlbGVtZW50cywgZSA9PiAoZS5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuY29uc3QgRE9DVU1FTlRBVElPTl9URVhUX0ZPUk1BVCA9ICd0ZXh0L3BsYWluJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbCcpLkVudHJ5RGVmaW5pdGlvbiB9IEVudHJ5XG4gKi9cblxuLyoqXG4gKiBAcmV0dXJucyB7QXJyYXk8RW50cnk+fSBlbnRyaWVzXG4gKi9cbmZ1bmN0aW9uIERvY3VtZW50YXRpb25Qcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiAnZG9jdW1lbnRhdGlvbicsXG4gICAgY29tcG9uZW50OiBFbGVtZW50RG9jdW1lbnRhdGlvblByb3BlcnR5LFxuICAgIGlzRWRpdGVkOiBpc1RleHRBcmVhRW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChoYXNQcm9jZXNzUmVmJDMoZWxlbWVudCkpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdwcm9jZXNzRG9jdW1lbnRhdGlvbicsXG4gICAgICBjb21wb25lbnQ6IFByb2Nlc3NEb2N1bWVudGF0aW9uUHJvcGVydHksXG4gICAgICBpc0VkaXRlZDogaXNUZXh0QXJlYUVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBFbGVtZW50RG9jdW1lbnRhdGlvblByb3BlcnR5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9IGdldERvY3VtZW50YXRpb24oZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHNldERvY3VtZW50YXRpb24oZWxlbWVudCwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2spO1xuICByZXR1cm4gVGV4dEFyZWFFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2RvY3VtZW50YXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0VsZW1lbnQgZG9jdW1lbnRhdGlvbicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gUHJvY2Vzc0RvY3VtZW50YXRpb25Qcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgcHJvY2Vzc1JlZiA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLnByb2Nlc3NSZWY7XG4gIGNvbnN0IGdldFZhbHVlID0gZ2V0RG9jdW1lbnRhdGlvbihwcm9jZXNzUmVmKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSBzZXREb2N1bWVudGF0aW9uKGVsZW1lbnQsIHByb2Nlc3NSZWYsIGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2spO1xuICByZXR1cm4gVGV4dEFyZWFFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ3Byb2Nlc3NEb2N1bWVudGF0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9jZXNzIGRvY3VtZW50YXRpb24nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaGFzUHJvY2Vzc1JlZiQzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgZWxlbWVudC5idXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKTtcbn1cbmZ1bmN0aW9uIGZpbmREb2N1bWVudGF0aW9uKGRvY3MpIHtcbiAgcmV0dXJuIGRvY3MuZmluZChmdW5jdGlvbiAoZCkge1xuICAgIHJldHVybiAoZC50ZXh0Rm9ybWF0IHx8IERPQ1VNRU5UQVRJT05fVEVYVF9GT1JNQVQpID09PSBET0NVTUVOVEFUSU9OX1RFWFRfRk9STUFUO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBkb2N1bWVudGF0aW9uIGVsZW1lbnQgZnJvbSBhIGdpdmVuIG1vZGRsZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYnVzaW5lc3NPYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7TW9kZGxlRWxlbWVudH0gZG9jdW1lbnRhdGlvbiBlbGVtZW50IGluc2lkZSB0aGUgZ2l2ZW4gbW9kZGxlIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50YXRpb24oYnVzaW5lc3NPYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkb2N1bWVudGF0aW9uID0gZmluZERvY3VtZW50YXRpb24oYnVzaW5lc3NPYmplY3QgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdkb2N1bWVudGF0aW9uJykpO1xuICAgIHJldHVybiBkb2N1bWVudGF0aW9uICYmIGRvY3VtZW50YXRpb24udGV4dDtcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXRzIGEgZG9jdW1lbnRhdGlvbiBlbGVtZW50IGZvciBhIGdpdmVuIG1vZGRsZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYnVzaW5lc3NPYmplY3RcbiAqL1xuZnVuY3Rpb24gc2V0RG9jdW1lbnRhdGlvbihlbGVtZW50LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgbGV0IGRvY3VtZW50YXRpb24gPSBmaW5kRG9jdW1lbnRhdGlvbihidXNpbmVzc09iamVjdCAmJiBidXNpbmVzc09iamVjdC5nZXQoJ2RvY3VtZW50YXRpb24nKSk7XG5cbiAgICAvLyAoMSkgdXBkYXRlIG9yIHJlbW92aW5nIGV4aXN0aW5nIGRvY3VtZW50YXRpb25cbiAgICBpZiAoZG9jdW1lbnRhdGlvbikge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZG9jdW1lbnRhdGlvbixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0ZXh0OiB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGRvY3VtZW50YXRpb246IHdpdGhvdXQoYnVzaW5lc3NPYmplY3QuZ2V0KCdkb2N1bWVudGF0aW9uJyksIGRvY3VtZW50YXRpb24pXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAoMikgY3JlYXRlIG5ldyBkb2N1bWVudGF0aW9uIGVudHJ5XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBkb2N1bWVudGF0aW9uID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkRvY3VtZW50YXRpb24nLCB7XG4gICAgICAgIHRleHQ6IHZhbHVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGRvY3VtZW50YXRpb246IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ2RvY3VtZW50YXRpb24nKSwgZG9jdW1lbnRhdGlvbl1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBlbGVtZW50IGFuZCAob3B0aW9uYWxseSkgc2V0IGl0cyBwYXJlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnBtbi1qcy9saWIvbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fSBwYXJlbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCdicG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uRmFjdG9yeScpLmRlZmF1bHR9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybnMge2ltcG9ydCgnYnBtbi1qcy9saWIvbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BlcnRpZXMsIHBhcmVudCwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3QgZWxlbWVudCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSh0eXBlLCBwcm9wZXJ0aWVzKTtcbiAgaWYgKHBhcmVudCkge1xuICAgIGVsZW1lbnQuJHBhcmVudCA9IHBhcmVudDtcbiAgfVxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBnZW5lcmF0ZSBhIHNlbWFudGljIGlkIHdpdGggZ2l2ZW4gcHJlZml4XG4gKi9cbmZ1bmN0aW9uIG5leHRJZChwcmVmaXgpIHtcbiAgY29uc3QgaWRzID0gbmV3IElkcyhbMzIsIDMyLCAxXSk7XG4gIHJldHVybiBpZHMubmV4dFByZWZpeGVkKHByZWZpeCk7XG59XG5mdW5jdGlvbiBnZXRSb290KGJ1c2luZXNzT2JqZWN0KSB7XG4gIGxldCBwYXJlbnQgPSBidXNpbmVzc09iamVjdDtcbiAgd2hpbGUgKHBhcmVudC4kcGFyZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHBhcmVudDtcbn1cbmZ1bmN0aW9uIGZpbHRlckVsZW1lbnRzQnlUeXBlKG9iamVjdExpc3QsIHR5cGUpIHtcbiAgY29uc3QgbGlzdCA9IG9iamVjdExpc3QgfHwgW107XG4gIHJldHVybiBsaXN0LmZpbHRlcihlbGVtZW50ID0+IGlzKGVsZW1lbnQsIHR5cGUpKTtcbn1cbmZ1bmN0aW9uIGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRUeXBlKSB7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KTtcbiAgcmV0dXJuIGZpbHRlckVsZW1lbnRzQnlUeXBlKHJvb3QuZ2V0KCdyb290RWxlbWVudHMnKSwgcmVmZXJlbmNlZFR5cGUpO1xufVxuZnVuY3Rpb24gZmluZFJvb3RFbGVtZW50QnlJZChidXNpbmVzc09iamVjdCwgdHlwZSwgaWQpIHtcbiAgY29uc3QgZWxlbWVudHMgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlKGJ1c2luZXNzT2JqZWN0LCB0eXBlKTtcbiAgcmV0dXJuIGVsZW1lbnRzLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmlkID09PSBpZCk7XG59XG5cbmNvbnN0IEVNUFRZX09QVElPTiQ0ID0gJyc7XG5jb25zdCBDUkVBVEVfTkVXX09QVElPTiQ0ID0gJ2NyZWF0ZS1uZXcnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCdAYnBtbi1pby9wcm9wZXJ0aWVzLXBhbmVsJykuRW50cnlEZWZpbml0aW9uIH0gRW50cnlcbiAqL1xuXG4vKipcbiAqIEByZXR1cm5zIHtBcnJheTxFbnRyeT59IGVudHJpZXNcbiAqL1xuZnVuY3Rpb24gRXJyb3JQcm9wcyQyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgaWYgKCFpc0Vycm9yU3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGVycm9yID0gZ2V0RXJyb3IoZWxlbWVudCk7XG4gIGxldCBlbnRyaWVzID0gW3tcbiAgICBpZDogJ2Vycm9yUmVmJyxcbiAgICBjb21wb25lbnQ6IEVycm9yUmVmJDEsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChlcnJvcikge1xuICAgIGVudHJpZXMgPSBbLi4uZW50cmllcywge1xuICAgICAgaWQ6ICdlcnJvck5hbWUnLFxuICAgICAgY29tcG9uZW50OiBFcnJvck5hbWUkMSxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSwge1xuICAgICAgaWQ6ICdlcnJvckNvZGUnLFxuICAgICAgY29tcG9uZW50OiBFcnJvckNvZGUkMixcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfV07XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBFcnJvclJlZiQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGVycm9yRXZlbnREZWZpbml0aW9uID0gZ2V0RXJyb3JFdmVudERlZmluaXRpb24kMShlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBnZXRFcnJvcihlbGVtZW50KTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBlcnJvci5nZXQoJ2lkJyk7XG4gICAgfVxuICAgIHJldHVybiBFTVBUWV9PUFRJT04kNDtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldFJvb3QoZXJyb3JFdmVudERlZmluaXRpb24pO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgbGV0IGVycm9yO1xuXG4gICAgLy8gKDEpIGNyZWF0ZSBuZXcgZXJyb3JcbiAgICBpZiAodmFsdWUgPT09IENSRUFURV9ORVdfT1BUSU9OJDQpIHtcbiAgICAgIGVycm9yID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFcnJvcicsIHtcbiAgICAgICAgbmFtZTogbmV4dElkKCdFcnJvcl8nKVxuICAgICAgfSwgcm9vdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgdmFsdWUgPSBlcnJvci5nZXQoJ2lkJyk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogcm9vdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICByb290RWxlbWVudHM6IFsuLi5yb290LmdldCgncm9vdEVsZW1lbnRzJyksIGVycm9yXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIHVwZGF0ZSAob3IgcmVtb3ZlKSBlcnJvclJlZlxuICAgIGVycm9yID0gZXJyb3IgfHwgZmluZFJvb3RFbGVtZW50QnlJZChlcnJvckV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46RXJyb3InLCB2YWx1ZSk7XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGVycm9yUmVmOiBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoMykgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgcmV0dXJuIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgbGV0IG9wdGlvbnMgPSBbe1xuICAgICAgdmFsdWU6IEVNUFRZX09QVElPTiQ0LFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnPG5vbmU+JylcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogQ1JFQVRFX05FV19PUFRJT04kNCxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NyZWF0ZSBuZXcgLi4uJylcbiAgICB9XTtcbiAgICBjb25zdCBlcnJvcnMgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlKGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCAnYnBtbjpFcnJvcicpO1xuICAgIHNvcnRCeU5hbWUkNShlcnJvcnMpLmZvckVhY2goZXJyb3IgPT4ge1xuICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGVycm9yLmdldCgnaWQnKSxcbiAgICAgICAgbGFiZWw6IGVycm9yLmdldCgnbmFtZScpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcbiAgcmV0dXJuIFJlZmVyZW5jZVNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZXJyb3JSZWYnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dsb2JhbCBlcnJvciByZWZlcmVuY2UnKSxcbiAgICBhdXRvRm9jdXNFbnRyeTogJ2Vycm9yTmFtZScsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIEVycm9yTmFtZSQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZXJyb3IgPSBnZXRFcnJvcihlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGVycm9yLmdldCgnbmFtZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBlcnJvcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZXJyb3JOYW1lJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdOYW1lJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBFcnJvckNvZGUkMihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGVycm9yID0gZ2V0RXJyb3IoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBlcnJvci5nZXQoJ2Vycm9yQ29kZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBlcnJvcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZXJyb3JDb2RlOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdlcnJvckNvZGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvZGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gc29ydEJ5TmFtZSQ1KGVsZW1lbnRzKSB7XG4gIHJldHVybiBzb3J0QnkoZWxlbWVudHMsIGUgPT4gKGUubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSk7XG59XG5cbmNvbnN0IENSRUFURV9ORVdfT1BUSU9OJDMgPSAnY3JlYXRlLW5ldyc7XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBFc2NhbGF0aW9uUHJvcHMkMihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXNFc2NhbGF0aW9uU3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGVzY2FsYXRpb24gPSBnZXRFc2NhbGF0aW9uKGVsZW1lbnQpO1xuICBsZXQgZW50cmllcyA9IFt7XG4gICAgaWQ6ICdlc2NhbGF0aW9uUmVmJyxcbiAgICBjb21wb25lbnQ6IEVzY2FsYXRpb25SZWYsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChlc2NhbGF0aW9uKSB7XG4gICAgZW50cmllcyA9IFsuLi5lbnRyaWVzLCB7XG4gICAgICBpZDogJ2VzY2FsYXRpb25OYW1lJyxcbiAgICAgIGNvbXBvbmVudDogRXNjYWxhdGlvbk5hbWUsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0sIHtcbiAgICAgIGlkOiAnZXNjYWxhdGlvbkNvZGUnLFxuICAgICAgY29tcG9uZW50OiBFc2NhbGF0aW9uQ29kZSQxLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgICB9XTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIEVzY2FsYXRpb25SZWYocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbiA9IGdldEVzY2FsYXRpb25FdmVudERlZmluaXRpb24oZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIGNvbnN0IGVzY2FsYXRpb24gPSBnZXRFc2NhbGF0aW9uKGVsZW1lbnQpO1xuICAgIHJldHVybiBlc2NhbGF0aW9uICYmIGVzY2FsYXRpb24uZ2V0KCdpZCcpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb25zdCByb290ID0gZ2V0Um9vdChlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKTtcbiAgICBjb25zdCBjb21tYW5kcyA9IFtdO1xuICAgIGxldCBlc2NhbGF0aW9uO1xuXG4gICAgLy8gKDEpIGNyZWF0ZSBuZXcgZXNjYWxhdGlvblxuICAgIGlmICh2YWx1ZSA9PT0gQ1JFQVRFX05FV19PUFRJT04kMykge1xuICAgICAgY29uc3QgaWQgPSBuZXh0SWQoJ0VzY2FsYXRpb25fJyk7XG4gICAgICBlc2NhbGF0aW9uID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFc2NhbGF0aW9uJywge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZTogaWRcbiAgICAgIH0sIHJvb3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIHZhbHVlID0gZXNjYWxhdGlvbi5nZXQoJ2lkJyk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogcm9vdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICByb290RWxlbWVudHM6IFsuLi5yb290LmdldCgncm9vdEVsZW1lbnRzJyksIGVzY2FsYXRpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgdXBkYXRlIChvciByZW1vdmUpIGVzY2FsYXRpb25SZWZcbiAgICBlc2NhbGF0aW9uID0gZXNjYWxhdGlvbiB8fCBmaW5kUm9vdEVsZW1lbnRCeUlkKGVzY2FsYXRpb25FdmVudERlZmluaXRpb24sICdicG1uOkVzY2FsYXRpb24nLCB2YWx1ZSk7XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZXNjYWxhdGlvblJlZjogZXNjYWxhdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoMykgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgcmV0dXJuIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgbGV0IG9wdGlvbnMgPSBbe1xuICAgICAgdmFsdWU6ICcnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnPG5vbmU+JylcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogQ1JFQVRFX05FV19PUFRJT04kMyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NyZWF0ZSBuZXcgLi4uJylcbiAgICB9XTtcbiAgICBjb25zdCBlc2NhbGF0aW9ucyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksICdicG1uOkVzY2FsYXRpb24nKTtcbiAgICBzb3J0QnlOYW1lJDQoZXNjYWxhdGlvbnMpLmZvckVhY2goZXNjYWxhdGlvbiA9PiB7XG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICB2YWx1ZTogZXNjYWxhdGlvbi5nZXQoJ2lkJyksXG4gICAgICAgIGxhYmVsOiBlc2NhbGF0aW9uLmdldCgnbmFtZScpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcbiAgcmV0dXJuIFJlZmVyZW5jZVNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZXNjYWxhdGlvblJlZicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnR2xvYmFsIGVzY2FsYXRpb24gcmVmZXJlbmNlJyksXG4gICAgYXV0b0ZvY3VzRW50cnk6ICdlc2NhbGF0aW9uTmFtZScsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIEVzY2FsYXRpb25OYW1lKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZXNjYWxhdGlvbiA9IGdldEVzY2FsYXRpb24oZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBlc2NhbGF0aW9uLmdldCgnbmFtZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBlc2NhbGF0aW9uLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBuYW1lOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdlc2NhbGF0aW9uTmFtZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTmFtZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gRXNjYWxhdGlvbkNvZGUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGVzY2FsYXRpb24gPSBnZXRFc2NhbGF0aW9uKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZXNjYWxhdGlvbi5nZXQoJ2VzY2FsYXRpb25Db2RlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGVzY2FsYXRpb24sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGVzY2FsYXRpb25Db2RlOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdlc2NhbGF0aW9uQ29kZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29kZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBzb3J0QnlOYW1lJDQoZWxlbWVudHMpIHtcbiAgcmV0dXJuIHNvcnRCeShlbGVtZW50cywgZSA9PiAoZS5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbCcpLkVudHJ5RGVmaW5pdGlvbiB9IEVudHJ5XG4gKi9cblxuLyoqXG4gKiBAcmV0dXJucyB7QXJyYXk8RW50cnk+fSBlbnRyaWVzXG4gKi9cbmZ1bmN0aW9uIEV4ZWN1dGFibGVQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpICYmICFoYXNQcm9jZXNzUmVmJDIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICdpc0V4ZWN1dGFibGUnLFxuICAgIGNvbXBvbmVudDogRXhlY3V0YWJsZSxcbiAgICBpc0VkaXRlZDogaXNDaGVja2JveEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gRXhlY3V0YWJsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBsZXQgZ2V0VmFsdWUsIHNldFZhbHVlO1xuICBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgIGlzRXhlY3V0YWJsZTogdmFsdWVcbiAgICB9KTtcbiAgfTtcbiAgZ2V0VmFsdWUgPSBlbGVtZW50ID0+IHtcbiAgICByZXR1cm4gZWxlbWVudC5idXNpbmVzc09iamVjdC5pc0V4ZWN1dGFibGU7XG4gIH07XG5cbiAgLy8gaGFuZGxlIHByb3BlcnRpZXMgb24gcHJvY2Vzc1JlZiBsZXZlbCBmb3IgcGFydGljaXBhbnRzXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgY29uc3QgcHJvY2VzcyA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJyk7XG4gICAgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBwcm9jZXNzLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaXNFeGVjdXRhYmxlOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGdldFZhbHVlID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCdpc0V4ZWN1dGFibGUnKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBDaGVja2JveEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnaXNFeGVjdXRhYmxlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFeGVjdXRhYmxlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWVcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaGFzUHJvY2Vzc1JlZiQyKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgZWxlbWVudC5idXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKTtcbn1cblxuY29uc3QgU1BBQ0VfUkVHRVggPSAvXFxzLztcblxuLy8gZm9yIFFOYW1lIHZhbGlkYXRpb24gYXMgcGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVDaGFyXG5jb25zdCBRTkFNRV9SRUdFWCA9IC9eKFthLXpdW1xcdy0uXSo6KT9bYS16X11bXFx3LS5dKiQvaTtcblxuLy8gZm9yIElEIHZhbGlkYXRpb24gYXMgcGVyIEJQTU4gU2NoZW1hIChRTmFtZSAtIE5hbWVzcGFjZSlcbmNvbnN0IElEX1JFR0VYID0gL15bYS16X11bXFx3LS5dKiQvaTtcblxuLyoqXG4gKiBjaGVja3Mgd2hldGhlciB0aGUgaWQgdmFsdWUgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2xhdGVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gaXNJZFZhbGlkKGVsZW1lbnQsIGlkVmFsdWUsIHRyYW5zbGF0ZSkge1xuICBjb25zdCBhc3NpZ25lZCA9IGVsZW1lbnQuJG1vZGVsLmlkcy5hc3NpZ25lZChpZFZhbHVlKTtcbiAgY29uc3QgaWRBbHJlYWR5RXhpc3RzID0gYXNzaWduZWQgJiYgYXNzaWduZWQgIT09IGVsZW1lbnQ7XG4gIGlmICghaWRWYWx1ZSkge1xuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lEIG11c3Qgbm90IGJlIGVtcHR5LicpO1xuICB9XG4gIGlmIChpZEFscmVhZHlFeGlzdHMpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdJRCBtdXN0IGJlIHVuaXF1ZS4nKTtcbiAgfVxuICByZXR1cm4gdmFsaWRhdGVJZChpZFZhbHVlLCB0cmFuc2xhdGUpO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVJZChpZFZhbHVlLCB0cmFuc2xhdGUpIHtcbiAgaWYgKGNvbnRhaW5zU3BhY2UoaWRWYWx1ZSkpIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKCdJRCBtdXN0IG5vdCBjb250YWluIHNwYWNlcy4nKTtcbiAgfVxuICBpZiAoIUlEX1JFR0VYLnRlc3QoaWRWYWx1ZSkpIHtcbiAgICBpZiAoUU5BTUVfUkVHRVgudGVzdChpZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnSUQgbXVzdCBub3QgY29udGFpbiBwcmVmaXguJyk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2xhdGUoJ0lEIG11c3QgYmUgYSB2YWxpZCBRTmFtZS4nKTtcbiAgfVxufVxuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xuICByZXR1cm4gU1BBQ0VfUkVHRVgudGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBJZFByb3BzJDEoKSB7XG4gIHJldHVybiBbe1xuICAgIGlkOiAnaWQnLFxuICAgIGNvbXBvbmVudDogSWQkNCxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIElkJDQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBtb2RlbGluZyA9IHVzZVNlcnZpY2UoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSAodmFsdWUsIGVycm9yKSA9PiB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgaWQ6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gdXNlQ2FsbGJhY2soZWxlbWVudCA9PiB7XG4gICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlkO1xuICB9LCBbZWxlbWVudF0pO1xuICBjb25zdCB2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKHZhbHVlID0+IHtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIHJldHVybiBpc0lkVmFsaWQoYnVzaW5lc3NPYmplY3QsIHZhbHVlLCB0cmFuc2xhdGUpO1xuICB9LCBbZWxlbWVudCwgdHJhbnNsYXRlXSk7XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2lkJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgPyAnUGFydGljaXBhbnQgSUQnIDogJ0lEJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2UsXG4gICAgdmFsaWRhdGVcbiAgfSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBMaW5rUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzTGlua1N1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW3tcbiAgICBpZDogJ2xpbmtOYW1lJyxcbiAgICBjb21wb25lbnQ6IExpbmtOYW1lLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gTGlua05hbWUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBsaW5rRXZlbnREZWZpbml0aW9uID0gZ2V0TGlua0V2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxpbmtFdmVudERlZmluaXRpb24uZ2V0KCduYW1lJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogbGlua0V2ZW50RGVmaW5pdGlvbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbGlua05hbWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ05hbWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuY29uc3QgRU1QVFlfT1BUSU9OJDMgPSAnJztcbmNvbnN0IENSRUFURV9ORVdfT1BUSU9OJDIgPSAnY3JlYXRlLW5ldyc7XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBNZXNzYWdlUHJvcHMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXNNZXNzYWdlU3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRNZXNzYWdlKGVsZW1lbnQpO1xuICBsZXQgZW50cmllcyA9IFt7XG4gICAgaWQ6ICdtZXNzYWdlUmVmJyxcbiAgICBjb21wb25lbnQ6IE1lc3NhZ2VSZWYsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChtZXNzYWdlKSB7XG4gICAgZW50cmllcyA9IFsuLi5lbnRyaWVzLCB7XG4gICAgICBpZDogJ21lc3NhZ2VOYW1lJyxcbiAgICAgIGNvbXBvbmVudDogTWVzc2FnZU5hbWUkMSxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfV07XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBNZXNzYWdlUmVmKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IG1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBnZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gZ2V0TWVzc2FnZShlbGVtZW50KTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UuZ2V0KCdpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFlfT1BUSU9OJDM7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KG1lc3NhZ2VFdmVudERlZmluaXRpb24pO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgbGV0IG1lc3NhZ2U7XG5cbiAgICAvLyAoMSkgY3JlYXRlIG5ldyBtZXNzYWdlXG4gICAgaWYgKHZhbHVlID09PSBDUkVBVEVfTkVXX09QVElPTiQyKSB7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZCgnTWVzc2FnZV8nKTtcbiAgICAgIG1lc3NhZ2UgPSBjcmVhdGVFbGVtZW50KCdicG1uOk1lc3NhZ2UnLCB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lOiBpZFxuICAgICAgfSwgcm9vdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgdmFsdWUgPSBtZXNzYWdlLmdldCgnaWQnKTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiByb290LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHJvb3RFbGVtZW50czogWy4uLnJvb3QuZ2V0KCdyb290RWxlbWVudHMnKSwgbWVzc2FnZV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSB1cGRhdGUgKG9yIHJlbW92ZSkgbWVzc2FnZVJlZlxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IGZpbmRSb290RWxlbWVudEJ5SWQobWVzc2FnZUV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46TWVzc2FnZScsIHZhbHVlKTtcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IG1lc3NhZ2VFdmVudERlZmluaXRpb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBtZXNzYWdlUmVmOiBtZXNzYWdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICgzKSBjb21taXQgYWxsIHVwZGF0ZXNcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IFt7XG4gICAgICB2YWx1ZTogRU1QVFlfT1BUSU9OJDMsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBDUkVBVEVfTkVXX09QVElPTiQyLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ3JlYXRlIG5ldyAuLi4nKVxuICAgIH1dO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gZmluZFJvb3RFbGVtZW50c0J5VHlwZShnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgJ2JwbW46TWVzc2FnZScpO1xuICAgIHNvcnRCeU5hbWUkMyhtZXNzYWdlcykuZm9yRWFjaChtZXNzYWdlID0+IHtcbiAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgIHZhbHVlOiBtZXNzYWdlLmdldCgnaWQnKSxcbiAgICAgICAgbGFiZWw6IG1lc3NhZ2UuZ2V0KCduYW1lJylcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuICByZXR1cm4gUmVmZXJlbmNlU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdtZXNzYWdlUmVmJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdHbG9iYWwgbWVzc2FnZSByZWZlcmVuY2UnKSxcbiAgICBhdXRvRm9jdXNFbnRyeTogJ21lc3NhZ2VOYW1lJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gTWVzc2FnZU5hbWUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRNZXNzYWdlKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gbWVzc2FnZS5nZXQoJ25hbWUnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogbWVzc2FnZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbWVzc2FnZU5hbWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ05hbWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gc29ydEJ5TmFtZSQzKGVsZW1lbnRzKSB7XG4gIHJldHVybiBzb3J0QnkoZWxlbWVudHMsIGUgPT4gKGUubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBNdWx0aUluc3RhbmNlUHJvcHMkMihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXNNdWx0aUluc3RhbmNlU3VwcG9ydGVkJDEoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgZW50cmllcyA9IFt7XG4gICAgaWQ6ICdsb29wQ2FyZGluYWxpdHknLFxuICAgIGNvbXBvbmVudDogTG9vcENhcmRpbmFsaXR5LFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ2NvbXBsZXRpb25Db25kaXRpb24nLFxuICAgIGNvbXBvbmVudDogQ29tcGxldGlvbkNvbmRpdGlvbiQxLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH1dO1xuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIExvb3BDYXJkaW5hbGl0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldExvb3BDYXJkaW5hbGl0eVZhbHVlKGVsZW1lbnQpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHVwZGF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwgJ2xvb3BDYXJkaW5hbGl0eScsIHZhbHVlLCBicG1uRmFjdG9yeSkpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdsb29wQ2FyZGluYWxpdHknLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xvb3AgY2FyZGluYWxpdHknKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIENvbXBsZXRpb25Db25kaXRpb24kMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldENvbXBsZXRpb25Db25kaXRpb25WYWx1ZShlbGVtZW50KTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB1cGRhdGVGb3JtYWxFeHByZXNzaW9uKGVsZW1lbnQsICdjb21wbGV0aW9uQ29uZGl0aW9uJywgdmFsdWUsIGJwbW5GYWN0b3J5KSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2NvbXBsZXRpb25Db25kaXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvbXBsZXRpb24gY29uZGl0aW9uJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIGdlbmVyaWMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogaXNNdWx0aUluc3RhbmNlU3VwcG9ydGVkIC0gY2hlY2sgd2hldGhlciBnaXZlbiBlbGVtZW50IHN1cHBvcnRzIE11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTXVsdGlJbnN0YW5jZVN1cHBvcnRlZCQxKGVsZW1lbnQpIHtcbiAgY29uc3QgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MkMihlbGVtZW50KTtcbiAgcmV0dXJuICEhbG9vcENoYXJhY3RlcmlzdGljcyAmJiBpcyhsb29wQ2hhcmFjdGVyaXN0aWNzLCAnYnBtbjpNdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcycpO1xufVxuXG4vKipcbiAqIGdldEJvZHkgLSBnZXQgdGhlIGJvZHkgb2YgYSBnaXZlbiBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBleHByZXNzaW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBib2R5ICh2YWx1ZSkgb2YgdGhlIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0Qm9keShleHByZXNzaW9uKSB7XG4gIHJldHVybiBleHByZXNzaW9uICYmIGV4cHJlc3Npb24uZ2V0KCdib2R5Jyk7XG59XG5cbi8qKlxuICogZ2V0UHJvcGVydHkgLSBnZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxuICpcbiAqIEByZXR1cm4ge2FueX0gdGhlIHByb3BlcnR5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5JDIoZWxlbWVudCwgcHJvcGVydHlOYW1lKSB7XG4gIGNvbnN0IGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzJDIoZWxlbWVudCk7XG4gIHJldHVybiBsb29wQ2hhcmFjdGVyaXN0aWNzICYmIGxvb3BDaGFyYWN0ZXJpc3RpY3MuZ2V0KHByb3BlcnR5TmFtZSk7XG59XG5cbi8qKlxuICogZ2V0TG9vcENoYXJhY3RlcmlzdGljcyAtIGdldCBsb29wQ2hhcmFjdGVyaXN0aWNzIG9mIGEgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50PGJwbW46TXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3M+IHwgdW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzJDIoZWxlbWVudCkge1xuICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gYm8ubG9vcENoYXJhY3RlcmlzdGljcztcbn1cblxuLyoqXG4gKiBjcmVhdGVGb3JtYWxFeHByZXNzaW9uIC0gY3JlYXRlcyBhICdicG1uOkZvcm1hbEV4cHJlc3Npb24nIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBib2R5XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXN1bHQge01vZGRsZUVsZW1lbnQ8YnBtbjpGb3JtYWxFeHByZXNzaW9uPn0gYSBmb3JtYWwgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBjcmVhdGVGb3JtYWxFeHByZXNzaW9uJDEocGFyZW50LCBib2R5LCBicG1uRmFjdG9yeSkge1xuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnYnBtbjpGb3JtYWxFeHByZXNzaW9uJywge1xuICAgIGJvZHk6IGJvZHlcbiAgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XG59XG5cbi8qKlxuICogdXBkYXRlRm9ybWFsRXhwcmVzc2lvbiAtIHVwZGF0ZXMgYSBzcGVjaWZpYyBmb3JtYWwgZXhwcmVzc2lvbiBvZiB0aGUgbG9vcCBjaGFyYWN0ZXJpc3RpY3MuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICovXG5mdW5jdGlvbiB1cGRhdGVGb3JtYWxFeHByZXNzaW9uKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgbmV3VmFsdWUsIGJwbW5GYWN0b3J5KSB7XG4gIGNvbnN0IGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzJDIoZWxlbWVudCk7XG4gIGNvbnN0IGV4cHJlc3Npb25Qcm9wcyA9IHt9O1xuICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgLy8gcmVtb3ZlIGZvcm1hbCBleHByZXNzaW9uXG4gICAgZXhwcmVzc2lvblByb3BzW3Byb3BlcnR5TmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBsb29wQ2hhcmFjdGVyaXN0aWNzLFxuICAgICAgcHJvcGVydGllczogZXhwcmVzc2lvblByb3BzXG4gICAgfTtcbiAgfVxuICBjb25zdCBleGlzdGluZ0V4cHJlc3Npb24gPSBsb29wQ2hhcmFjdGVyaXN0aWNzLmdldChwcm9wZXJ0eU5hbWUpO1xuICBpZiAoIWV4aXN0aW5nRXhwcmVzc2lvbikge1xuICAgIC8vIGFkZCBmb3JtYWwgZXhwcmVzc2lvblxuICAgIGV4cHJlc3Npb25Qcm9wc1twcm9wZXJ0eU5hbWVdID0gY3JlYXRlRm9ybWFsRXhwcmVzc2lvbiQxKGxvb3BDaGFyYWN0ZXJpc3RpY3MsIG5ld1ZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBsb29wQ2hhcmFjdGVyaXN0aWNzLFxuICAgICAgcHJvcGVydGllczogZXhwcmVzc2lvblByb3BzXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVkaXQgZXhpc3RpbmcgZm9ybWFsIGV4cHJlc3Npb25cbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50LFxuICAgIG1vZGRsZUVsZW1lbnQ6IGV4aXN0aW5nRXhwcmVzc2lvbixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBib2R5OiBuZXdWYWx1ZVxuICAgIH1cbiAgfTtcbn1cblxuLy8gbG9vcENhcmRpbmFsaXR5XG5cbi8qKlxuICogZ2V0TG9vcENhcmRpbmFsaXR5IC0gZ2V0IHRoZSBsb29wIGNhcmRpbmFsaXR5IG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBhbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbG9vcCBjYXJkaW5hbGl0eVxuICovXG5mdW5jdGlvbiBnZXRMb29wQ2FyZGluYWxpdHkoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0UHJvcGVydHkkMihlbGVtZW50LCAnbG9vcENhcmRpbmFsaXR5Jyk7XG59XG5cbi8qKlxuICogZ2V0TG9vcENhcmRpbmFsaXR5VmFsdWUgLSBnZXQgdGhlIGxvb3AgY2FyZGluYWxpdHkgdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBsb29wIGNhcmRpbmFsaXR5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldExvb3BDYXJkaW5hbGl0eVZhbHVlKGVsZW1lbnQpIHtcbiAgY29uc3QgbG9vcENhcmRpbmFsaXR5ID0gZ2V0TG9vcENhcmRpbmFsaXR5KGVsZW1lbnQpO1xuICByZXR1cm4gZ2V0Qm9keShsb29wQ2FyZGluYWxpdHkpO1xufVxuXG4vLyBjb21wbGV0aW9uQ29uZGl0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIGdldENvbXBsZXRpb25Db25kaXRpb24gLSBnZXQgdGhlIGNvbXBsZXRpb24gY29uZGl0aW9uIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxicG1uOkZvcm1hbEV4cHJlc3Npb24+fSBhbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGxldGlvbiBjb25kaXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxldGlvbkNvbmRpdGlvbiQxKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFByb3BlcnR5JDIoZWxlbWVudCwgJ2NvbXBsZXRpb25Db25kaXRpb24nKTtcbn1cblxuLyoqXG4gKiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uVmFsdWUgLSBnZXQgdGhlIGNvbXBsZXRpb24gY29uZGl0aW9uIHZhbHVlIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgY29tcGxldGlvbiBjb25kaXRpb24gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxldGlvbkNvbmRpdGlvblZhbHVlKGVsZW1lbnQpIHtcbiAgY29uc3QgY29tcGxldGlvbkNvbmRpdGlvbiA9IGdldENvbXBsZXRpb25Db25kaXRpb24kMShlbGVtZW50KTtcbiAgcmV0dXJuIGdldEJvZHkoY29tcGxldGlvbkNvbmRpdGlvbik7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBOYW1lUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoaXNBbnkoZWxlbWVudCwgWydicG1uOkNvbGxhYm9yYXRpb24nLCAnYnBtbjpEYXRhQXNzb2NpYXRpb24nLCAnYnBtbjpBc3NvY2lhdGlvbiddKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW3tcbiAgICBpZDogJ25hbWUnLFxuICAgIGNvbXBvbmVudDogTmFtZSQzLFxuICAgIGlzRWRpdGVkOiBpc1RleHRBcmVhRW50cnlFZGl0ZWRcbiAgfV07XG59XG5mdW5jdGlvbiBOYW1lJDMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBtb2RlbGluZyA9IHVzZVNlcnZpY2UoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBjYW52YXMgPSB1c2VTZXJ2aWNlKCdjYW52YXMnKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcblxuICAvLyAoMSkgZGVmYXVsdDogbmFtZVxuICBsZXQgb3B0aW9ucyA9IHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbmFtZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTmFtZScpLFxuICAgIGRlYm91bmNlLFxuICAgIHNldFZhbHVlOiB2YWx1ZSA9PiB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgbmFtZTogdmFsdWVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0VmFsdWU6IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuYnVzaW5lc3NPYmplY3QubmFtZTtcbiAgICB9LFxuICAgIGF1dG9SZXNpemU6IHRydWVcbiAgfTtcblxuICAvLyAoMikgdGV4dCBhbm5vdGF0aW9uc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc2V0VmFsdWU6IHZhbHVlID0+IHtcbiAgICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgICAgdGV4dDogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZ2V0VmFsdWU6IGVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5idXNpbmVzc09iamVjdC50ZXh0O1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyAoMykgZ3JvdXBzXG4gIGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHNldFZhbHVlOiB2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICAgICAgY2F0ZWdvcnlWYWx1ZVJlZiA9IGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWY7XG4gICAgICAgIGlmICghY2F0ZWdvcnlWYWx1ZVJlZikge1xuICAgICAgICAgIGluaXRpYWxpemVDYXRlZ29yeShidXNpbmVzc09iamVjdCwgY2FudmFzLmdldFJvb3RFbGVtZW50KCksIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICBtb2RlbGluZy51cGRhdGVMYWJlbChlbGVtZW50LCB2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgZ2V0VmFsdWU6IGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgICAgIGNhdGVnb3J5VmFsdWVSZWYgPSBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmO1xuICAgICAgICByZXR1cm4gY2F0ZWdvcnlWYWx1ZVJlZiAmJiBjYXRlZ29yeVZhbHVlUmVmLnZhbHVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyAoNCkgcGFydGljaXBhbnRzIChvbmx5IHVwZGF0ZSBsYWJlbClcbiAgZWxzZSBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIG9wdGlvbnMubGFiZWwgPSB0cmFuc2xhdGUoJ1BhcnRpY2lwYW50IE5hbWUnKTtcbiAgfVxuICByZXR1cm4gVGV4dEFyZWFFbnRyeShvcHRpb25zKTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZUNhdGVnb3J5KGJ1c2luZXNzT2JqZWN0LCByb290RWxlbWVudCwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3QgZGVmaW5pdGlvbnMgPSBnZXRCdXNpbmVzc09iamVjdChyb290RWxlbWVudCkuJHBhcmVudDtcbiAgY29uc3QgY2F0ZWdvcnlWYWx1ZSA9IGNyZWF0ZUNhdGVnb3J5VmFsdWUoZGVmaW5pdGlvbnMsIGJwbW5GYWN0b3J5KTtcbiAgYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZiA9IGNhdGVnb3J5VmFsdWU7XG59XG5mdW5jdGlvbiBjcmVhdGVDYXRlZ29yeVZhbHVlKGRlZmluaXRpb25zLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCBjYXRlZ29yeVZhbHVlID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5VmFsdWUnKTtcbiAgY29uc3QgY2F0ZWdvcnkgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46Q2F0ZWdvcnknLCB7XG4gICAgY2F0ZWdvcnlWYWx1ZTogW2NhdGVnb3J5VmFsdWVdXG4gIH0pO1xuXG4gIC8vIGFkZCB0byBjb3JyZWN0IHBsYWNlXG4gIGFkZChkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBjYXRlZ29yeSk7XG4gIGdldEJ1c2luZXNzT2JqZWN0KGNhdGVnb3J5KS4kcGFyZW50ID0gZGVmaW5pdGlvbnM7XG4gIGdldEJ1c2luZXNzT2JqZWN0KGNhdGVnb3J5VmFsdWUpLiRwYXJlbnQgPSBjYXRlZ29yeTtcbiAgcmV0dXJuIGNhdGVnb3J5VmFsdWU7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBQcm9jZXNzUHJvcHMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaGFzUHJvY2Vzc1JlZiQxKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAncHJvY2Vzc0lkJyxcbiAgICBjb21wb25lbnQ6IFByb2Nlc3NJZCQxLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ3Byb2Nlc3NOYW1lJyxcbiAgICBjb21wb25lbnQ6IFByb2Nlc3NOYW1lLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gUHJvY2Vzc05hbWUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBwcm9jZXNzID0gZWxlbWVudC5idXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCduYW1lJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogcHJvY2VzcyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAncHJvY2Vzc05hbWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb2Nlc3MgbmFtZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gUHJvY2Vzc0lkJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBwcm9jZXNzID0gZWxlbWVudC5idXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCdpZCcpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9ICh2YWx1ZSwgZXJyb3IpID0+IHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBwcm9jZXNzLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgdmFsaWRhdGUgPSB1c2VDYWxsYmFjayh2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIGlzSWRWYWxpZChwcm9jZXNzLCB2YWx1ZSwgdHJhbnNsYXRlKTtcbiAgfSwgW3Byb2Nlc3MsIHRyYW5zbGF0ZV0pO1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdwcm9jZXNzSWQnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb2Nlc3MgSUQnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZSxcbiAgICB2YWxpZGF0ZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaGFzUHJvY2Vzc1JlZiQxKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgZWxlbWVudC5idXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbCcpLkVudHJ5RGVmaW5pdGlvbiB9IEVudHJ5XG4gKi9cblxuY29uc3QgRU1QVFlfT1BUSU9OJDIgPSAnJztcbmNvbnN0IENSRUFURV9ORVdfT1BUSU9OJDEgPSAnY3JlYXRlLW5ldyc7XG5cbi8qKlxuICogQHJldHVybnMge0VudHJ5W119XG4gKi9cbmZ1bmN0aW9uIFNpZ25hbFByb3BzJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzU2lnbmFsU3VwcG9ydGVkJDEoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3Qgc2lnbmFsID0gZ2V0U2lnbmFsJDEoZWxlbWVudCk7XG4gIGxldCBlbnRyaWVzID0gW3tcbiAgICBpZDogJ3NpZ25hbFJlZicsXG4gICAgY29tcG9uZW50OiBTaWduYWxSZWYsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChzaWduYWwpIHtcbiAgICBlbnRyaWVzID0gWy4uLmVudHJpZXMsIHtcbiAgICAgIGlkOiAnc2lnbmFsTmFtZScsXG4gICAgICBjb21wb25lbnQ6IFNpZ25hbE5hbWUkMSxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfV07XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBTaWduYWxSZWYocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZ2V0U2lnbmFsRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIGNvbnN0IHNpZ25hbCA9IGdldFNpZ25hbCQxKGVsZW1lbnQpO1xuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIHJldHVybiBzaWduYWwuZ2V0KCdpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFlfT1BUSU9OJDI7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRSb290KHNpZ25hbEV2ZW50RGVmaW5pdGlvbik7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBsZXQgc2lnbmFsO1xuXG4gICAgLy8gKDEpIGNyZWF0ZSBuZXcgc2lnbmFsXG4gICAgaWYgKHZhbHVlID09PSBDUkVBVEVfTkVXX09QVElPTiQxKSB7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZCgnU2lnbmFsXycpO1xuICAgICAgc2lnbmFsID0gY3JlYXRlRWxlbWVudCgnYnBtbjpTaWduYWwnLCB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lOiBpZFxuICAgICAgfSwgcm9vdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgdmFsdWUgPSBzaWduYWwuZ2V0KCdpZCcpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHJvb3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcm9vdEVsZW1lbnRzOiBbLi4ucm9vdC5nZXQoJ3Jvb3RFbGVtZW50cycpLCBzaWduYWxdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgdXBkYXRlIChvciByZW1vdmUpIHNpZ25hbFJlZlxuICAgIHNpZ25hbCA9IHNpZ25hbCB8fCBmaW5kUm9vdEVsZW1lbnRCeUlkKHNpZ25hbEV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46U2lnbmFsJywgdmFsdWUpO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogc2lnbmFsRXZlbnREZWZpbml0aW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgc2lnbmFsUmVmOiBzaWduYWxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDMpIGNvbW1pdCBhbGwgdXBkYXRlc1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gW3tcbiAgICAgIHZhbHVlOiBFTVBUWV9PUFRJT04kMixcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJzxub25lPicpXG4gICAgfSwge1xuICAgICAgdmFsdWU6IENSRUFURV9ORVdfT1BUSU9OJDEsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdDcmVhdGUgbmV3IC4uLicpXG4gICAgfV07XG4gICAgY29uc3Qgc2lnbmFscyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksICdicG1uOlNpZ25hbCcpO1xuICAgIHNvcnRCeU5hbWUkMihzaWduYWxzKS5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICB2YWx1ZTogc2lnbmFsLmdldCgnaWQnKSxcbiAgICAgICAgbGFiZWw6IHNpZ25hbC5nZXQoJ25hbWUnKVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBSZWZlcmVuY2VTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ3NpZ25hbFJlZicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnR2xvYmFsIHNpZ25hbCByZWZlcmVuY2UnKSxcbiAgICBhdXRvRm9jdXNFbnRyeTogJ3NpZ25hbE5hbWUnLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5mdW5jdGlvbiBTaWduYWxOYW1lJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzaWduYWwgPSBnZXRTaWduYWwkMShlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHNpZ25hbC5nZXQoJ25hbWUnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogc2lnbmFsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBuYW1lOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdzaWduYWxOYW1lJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdOYW1lJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHNvcnRCeU5hbWUkMihlbGVtZW50cykge1xuICByZXR1cm4gc29ydEJ5KGVsZW1lbnRzLCBlID0+IChlLm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nKTtcbn1cbmZ1bmN0aW9uIGlzVGltZXJTdXBwb3J0ZWQoZWxlbWVudCkge1xuICByZXR1cm4gaXNBbnkoZWxlbWVudCwgWydicG1uOlN0YXJ0RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JywgJ2JwbW46Qm91bmRhcnlFdmVudCddKSAmJiAhIWdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdGltZXIgZGVmaW5pdGlvbiB0eXBlIGZvciBhIGdpdmVuIHRpbWVyIGV2ZW50IGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50PGJwbW46VGltZXJFdmVudERlZmluaXRpb24+fSB0aW1lclxuICpcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9IHRoZSB0aW1lciBkZWZpbml0aW9uIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lcikge1xuICBpZiAoIXRpbWVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHRpbWVEYXRlID0gdGltZXIuZ2V0KCd0aW1lRGF0ZScpO1xuICBpZiAodHlwZW9mIHRpbWVEYXRlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAndGltZURhdGUnO1xuICB9XG4gIGNvbnN0IHRpbWVDeWNsZSA9IHRpbWVyLmdldCgndGltZUN5Y2xlJyk7XG4gIGlmICh0eXBlb2YgdGltZUN5Y2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAndGltZUN5Y2xlJztcbiAgfVxuICBjb25zdCB0aW1lRHVyYXRpb24gPSB0aW1lci5nZXQoJ3RpbWVEdXJhdGlvbicpO1xuICBpZiAodHlwZW9mIHRpbWVEdXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ3RpbWVEdXJhdGlvbic7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRpbWVyRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIGV2ZW50VHlwZSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdldmVudERlZmluaXRpb25zJykgfHwgW107XG4gIHJldHVybiBmaW5kKGV2ZW50RGVmaW5pdGlvbnMsIGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIGlzKGRlZmluaXRpb24sIGV2ZW50VHlwZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0U2lnbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nKTtcbn1cbmZ1bmN0aW9uIGlzU2lnbmFsU3VwcG9ydGVkKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykgJiYgISFnZXRTaWduYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXRTaWduYWwoZWxlbWVudCkge1xuICBjb25zdCBzaWduYWxFdmVudERlZmluaXRpb24gPSBnZXRTaWduYWxFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG4gIHJldHVybiBzaWduYWxFdmVudERlZmluaXRpb24gJiYgc2lnbmFsRXZlbnREZWZpbml0aW9uLmdldCgnc2lnbmFsUmVmJyk7XG59XG5mdW5jdGlvbiBnZXRDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIFRpbWVyUHJvcHMkMihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZFByZWZpeFxuICB9ID0gcHJvcHM7XG4gIGxldCB7XG4gICAgdGltZXJFdmVudERlZmluaXRpb25cbiAgfSA9IHByb3BzO1xuICBpZiAoIXRpbWVyRXZlbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvbiA9IGdldFRpbWVyRXZlbnREZWZpbml0aW9uKGJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuICBjb25zdCB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUgPSBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKTtcblxuICAvLyAoMSkgT25seSBzaG93IGZvciBzdXBwb3J0ZWQgZWxlbWVudHNcbiAgaWYgKCFpc1RpbWVyU3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gKDIpIFByb3ZpZGUgZW50cmllcywgaGF2ZSBhIHZhbHVlIG9ubHkgaWYgc2VsZWN0aW9uIHdhcyBtYWRlXG4gIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogZ2V0SWQkMShpZFByZWZpeCwgJ3RpbWVyRXZlbnREZWZpbml0aW9uVHlwZScpLFxuICAgIGNvbXBvbmVudDogVGltZXJFdmVudERlZmluaXRpb25UeXBlJDIsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWQsXG4gICAgdGltZXJFdmVudERlZmluaXRpb24sXG4gICAgdGltZXJFdmVudERlZmluaXRpb25UeXBlXG4gIH0pO1xuICBpZiAodGltZXJFdmVudERlZmluaXRpb25UeXBlKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiBnZXRJZCQxKGlkUHJlZml4LCAndGltZXJFdmVudERlZmluaXRpb25WYWx1ZScpLFxuICAgICAgY29tcG9uZW50OiBUaW1lckV2ZW50RGVmaW5pdGlvblZhbHVlJDIsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZCxcbiAgICAgIHRpbWVyRXZlbnREZWZpbml0aW9uLFxuICAgICAgdGltZXJFdmVudERlZmluaXRpb25UeXBlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5cbi8qKlxuICogVGltZXJFdmVudERlZmluaXRpb25UeXBlIC0gR2VuZXJpYyBzZWxlY3QgZW50cnkgYWxsb3dpbmcgdG8gc2VsZWN0IGEgc3BlY2lmaWNcbiAqIHRpbWVyRXZlbnREZWZpbnRpb25UeXBlLiBUbyBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGltZXJFdmVudERlZmluaXRpb25WYWx1ZS5cbiAqXG4gKiBAcGFyYW0gIHt0eXBlfSBwcm9wc1xuICogQHJldHVybiB7U2VsZWN0RW50cnl9XG4gKi9cbmZ1bmN0aW9uIFRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSQyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIHRpbWVyRXZlbnREZWZpbml0aW9uLFxuICAgIHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSB8fCAnJztcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgLy8gKDEpIENoZWNrIGlmIHZhbHVlIGlzIGRpZmZlcmVudCB0byBjdXJyZW50IHR5cGVcbiAgICBpZiAodmFsdWUgPT09IHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vICgyKSBDcmVhdGUgZW1wdHkgZm9ybWFsRXhwcmVzc2lvbiBlbGVtZW50XG4gICAgY29uc3QgZm9ybWFsRXhwcmVzc2lvbiA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpGb3JtYWxFeHByZXNzaW9uJywge1xuICAgICAgYm9keTogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgZm9ybWFsRXhwcmVzc2lvbi4kcGFyZW50ID0gdGltZXJFdmVudERlZmluaXRpb247XG5cbiAgICAvLyAoMykgU2V0IHRoZSB2YWx1ZSBmb3Igc2VsZWN0ZWQgdGltZXJFdmVudERlZmluaXRpb25UeXBlXG4gICAgY29uc3QgbmV3UHJvcHMgPSB7XG4gICAgICB0aW1lRHVyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVEYXRlOiB1bmRlZmluZWQsXG4gICAgICB0aW1lQ3ljbGU6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgaWYgKHZhbHVlICE9PSAnJykge1xuICAgICAgbmV3UHJvcHNbdmFsdWVdID0gZm9ybWFsRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICAvLyAoNCkgRXhlY3V0ZSBidXNpbmVzc09iamVjdCB1cGRhdGVcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHRpbWVyRXZlbnREZWZpbml0aW9uLFxuICAgICAgcHJvcGVydGllczogbmV3UHJvcHNcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9IGVsZW1lbnQgPT4ge1xuICAgIHJldHVybiBbe1xuICAgICAgdmFsdWU6ICcnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnPG5vbmU+JylcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogJ3RpbWVEYXRlJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RhdGUnKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiAndGltZUR1cmF0aW9uJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0R1cmF0aW9uJylcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogJ3RpbWVDeWNsZScsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdDeWNsZScpXG4gICAgfV07XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ3RpbWVyRXZlbnREZWZpbml0aW9uVHlwZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5cbi8qKlxuICogVGltZXJFdmVudERlZmluaXRpb25WYWx1ZSAtIEdlbmVyaWMgdGV4dEZpZWxkIGVudHJ5IGFsbG93aW5nIHRvIHNwZWNpZnkgdGhlXG4gKiB0aW1lckV2ZW50RGVmaW50aW9uVmFsdWUgYmFzZWQgb24gdGhlIHNldCB0aW1lckV2ZW50RGVmaW50aW9uVHlwZS4gVG8gYmUgdXNlZFxuICogdG9nZXRoZXIgd2l0aCB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUuXG4gKlxuICogQHBhcmFtICB7dHlwZX0gcHJvcHNcbiAqIEByZXR1cm4ge1RleHRGaWVsZEVudHJ5fVxuICovXG5mdW5jdGlvbiBUaW1lckV2ZW50RGVmaW5pdGlvblZhbHVlJDIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgdGltZXJFdmVudERlZmluaXRpb24sXG4gICAgdGltZXJFdmVudERlZmluaXRpb25UeXBlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IHRpbWVyRXZlbnRGb3JtYWxFeHByZXNzaW9uID0gdGltZXJFdmVudERlZmluaXRpb24uZ2V0KHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aW1lckV2ZW50Rm9ybWFsRXhwcmVzc2lvbiAmJiB0aW1lckV2ZW50Rm9ybWFsRXhwcmVzc2lvbi5nZXQoJ2JvZHknKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiB0aW1lckV2ZW50Rm9ybWFsRXhwcmVzc2lvbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYm9keTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAndGltZXJFdmVudERlZmluaXRpb25WYWx1ZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFsdWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZSxcbiAgICB0b29sdGlwOiBnZXRUaW1lckV2ZW50RGVmaW5pdGlvblZhbHVlRGVzY3JpcHRpb24kMih0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUsIHRyYW5zbGF0ZSlcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRUaW1lckV2ZW50RGVmaW5pdGlvblZhbHVlRGVzY3JpcHRpb24kMih0aW1lckRlZmluaXRpb25UeXBlLCB0cmFuc2xhdGUpIHtcbiAgc3dpdGNoICh0aW1lckRlZmluaXRpb25UeXBlKSB7XG4gICAgY2FzZSAndGltZURhdGUnOlxuICAgICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgICBjaGlsZHJlbjogW2pzeChcInBcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0Egc3BlY2lmaWMgcG9pbnQgaW4gdGltZSBkZWZpbmVkIGFzIElTTyA4NjAxIGNvbWJpbmVkIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24uJylcbiAgICAgICAgfSksIGpzeHMoXCJ1bFwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFtqc3hzKFwibGlcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFwiMjAxOS0xMC0wMVQxMjowMDowMFpcIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnVVRDIHRpbWUnKV1cbiAgICAgICAgICB9KSwganN4cyhcImxpXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIjIwMTktMTAtMDJUMDg6MDk6NDArMDI6MDBcIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnVVRDIHBsdXMgMiBob3VycyB6b25lIG9mZnNldCcpXVxuICAgICAgICAgIH0pXVxuICAgICAgICB9KSwganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5vcmcvbWFudWFsL2xhdGVzdC9yZWZlcmVuY2UvYnBtbjIwL2V2ZW50cy90aW1lci1ldmVudHMvI3RpbWUtZGF0ZVwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0RvY3VtZW50YXRpb246IFRpbWVyIGV2ZW50cycpXG4gICAgICAgIH0pXVxuICAgICAgfSk7XG4gICAgY2FzZSAndGltZUN5Y2xlJzpcbiAgICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFtqc3goXCJwXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdBIGN5Y2xlIGRlZmluZWQgYXMgSVNPIDg2MDEgcmVwZWF0aW5nIGludGVydmFscyBmb3JtYXQuJylcbiAgICAgICAgfSksIGpzeHMoXCJ1bFwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFtqc3hzKFwibGlcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFwiUjUvUFQxMFNcIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnZXZlcnkgMTAgc2Vjb25kcywgdXAgdG8gNSB0aW1lcycpXVxuICAgICAgICAgIH0pLCBqc3hzKFwibGlcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFwiUi9QMURcIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnZXZlcnkgZGF5LCBpbmZpbml0ZWx5JyldXG4gICAgICAgICAgfSldXG4gICAgICAgIH0pLCBqc3goXCJhXCIsIHtcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZG9jcy5jYW11bmRhLm9yZy9tYW51YWwvbGF0ZXN0L3JlZmVyZW5jZS9icG1uMjAvZXZlbnRzL3RpbWVyLWV2ZW50cy8jdGltZS1jeWNsZVwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0RvY3VtZW50YXRpb246IFRpbWVyIGV2ZW50cycpXG4gICAgICAgIH0pXVxuICAgICAgfSk7XG4gICAgY2FzZSAndGltZUR1cmF0aW9uJzpcbiAgICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFtqc3goXCJwXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdBIHRpbWUgZHVyYXRpb24gZGVmaW5lZCBhcyBJU08gODYwMSBkdXJhdGlvbnMgZm9ybWF0LicpXG4gICAgICAgIH0pLCBqc3hzKFwidWxcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiBbanN4cyhcImxpXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIlBUMTVTXCJcbiAgICAgICAgICAgIH0pLCBcIiAtIFwiLCB0cmFuc2xhdGUoJzE1IHNlY29uZHMnKV1cbiAgICAgICAgICB9KSwganN4cyhcImxpXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIlBUMUgzME1cIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnMSBob3VyIGFuZCAzMCBtaW51dGVzJyldXG4gICAgICAgICAgfSksIGpzeHMoXCJsaVwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2pzeChcImNvZGVcIiwge1xuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJQMTREXCJcbiAgICAgICAgICAgIH0pLCBcIiAtIFwiLCB0cmFuc2xhdGUoJzE0IGRheXMnKV1cbiAgICAgICAgICB9KV1cbiAgICAgICAgfSksIGpzeChcImFcIiwge1xuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEub3JnL21hbnVhbC9sYXRlc3QvcmVmZXJlbmNlL2JwbW4yMC9ldmVudHMvdGltZXItZXZlbnRzLyN0aW1lLWR1cmF0aW9uXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnRG9jdW1lbnRhdGlvbjogVGltZXIgZXZlbnRzJylcbiAgICAgICAgfSldXG4gICAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SWQkMShpZFByZWZpeCwgaWQpIHtcbiAgcmV0dXJuIGlkUHJlZml4ID8gaWRQcmVmaXggKyBpZCA6IGlkO1xufVxuXG5mdW5jdGlvbiBHZW5lcmFsR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZW50cmllcyA9IFsuLi5OYW1lUHJvcHMoe1xuICAgIGVsZW1lbnRcbiAgfSksIC4uLklkUHJvcHMkMSgpLCAuLi5Qcm9jZXNzUHJvcHMkMSh7XG4gICAgZWxlbWVudFxuICB9KSwgLi4uRXhlY3V0YWJsZVByb3BzKHtcbiAgICBlbGVtZW50XG4gIH0pXTtcbiAgcmV0dXJuIHtcbiAgICBpZDogJ2dlbmVyYWwnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0dlbmVyYWwnKSxcbiAgICBlbnRyaWVzLFxuICAgIGNvbXBvbmVudDogR3JvdXBcbiAgfTtcbn1cbmZ1bmN0aW9uIENvbXBlbnNhdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvbXBlbnNhdGlvbicpLFxuICAgIGlkOiAnY29tcGVuc2F0aW9uJyxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFsuLi5Db21wZW5zYXRpb25Qcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSldXG4gIH07XG4gIGlmIChncm91cC5lbnRyaWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIERvY3VtZW50YXRpb25Hcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBlbnRyaWVzID0gWy4uLkRvY3VtZW50YXRpb25Qcm9wcyh7XG4gICAgZWxlbWVudFxuICB9KV07XG4gIHJldHVybiB7XG4gICAgaWQ6ICdkb2N1bWVudGF0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEb2N1bWVudGF0aW9uJyksXG4gICAgZW50cmllcyxcbiAgICBjb21wb25lbnQ6IEdyb3VwXG4gIH07XG59XG5mdW5jdGlvbiBFcnJvckdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnZXJyb3InLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Vycm9yJyksXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uRXJyb3JQcm9wcyQyKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gTWVzc2FnZUdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnbWVzc2FnZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWVzc2FnZScpLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogWy4uLk1lc3NhZ2VQcm9wcyQxKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gU2lnbmFsR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgaWQ6ICdzaWduYWwnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1NpZ25hbCcpLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogWy4uLlNpZ25hbFByb3BzJDEoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBMaW5rR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTGluaycpLFxuICAgIGlkOiAnbGluaycsXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uTGlua1Byb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gRXNjYWxhdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnZXNjYWxhdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXNjYWxhdGlvbicpLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogWy4uLkVzY2FsYXRpb25Qcm9wcyQyKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gVGltZXJHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUaW1lcicpLFxuICAgIGlkOiAndGltZXInLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogWy4uLlRpbWVyUHJvcHMkMih7XG4gICAgICBlbGVtZW50XG4gICAgfSldXG4gIH07XG4gIGlmIChncm91cC5lbnRyaWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIE11bHRpSW5zdGFuY2VHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdNdWx0aS1pbnN0YW5jZScpLFxuICAgIGlkOiAnbXVsdGlJbnN0YW5jZScsXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uTXVsdGlJbnN0YW5jZVByb3BzJDIoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRHcm91cHMoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgZ3JvdXBzID0gW0dlbmVyYWxHcm91cChlbGVtZW50LCBpbmplY3RvciksIERvY3VtZW50YXRpb25Hcm91cChlbGVtZW50LCBpbmplY3RvciksIENvbXBlbnNhdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSwgRXJyb3JHcm91cChlbGVtZW50LCBpbmplY3RvciksIExpbmtHcm91cChlbGVtZW50LCBpbmplY3RvciksIE1lc3NhZ2VHcm91cChlbGVtZW50LCBpbmplY3RvciksIE11bHRpSW5zdGFuY2VHcm91cChlbGVtZW50LCBpbmplY3RvciksIFNpZ25hbEdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSwgRXNjYWxhdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSwgVGltZXJHcm91cChlbGVtZW50LCBpbmplY3RvcildO1xuXG4gIC8vIGNvbnRyYWN0OiBpZiBhIGdyb3VwIHJldHVybnMgbnVsbCwgaXQgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQgYXQgYWxsXG4gIHJldHVybiBncm91cHMuZmlsdGVyKGdyb3VwID0+IGdyb3VwICE9PSBudWxsKTtcbn1cbmNsYXNzIEJwbW5Qcm9wZXJ0aWVzUHJvdmlkZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzUGFuZWwsIGluamVjdG9yKSB7XG4gICAgcHJvcGVydGllc1BhbmVsLnJlZ2lzdGVyUHJvdmlkZXIodGhpcyk7XG4gICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgfVxuICBnZXRHcm91cHMoZWxlbWVudCkge1xuICAgIHJldHVybiBncm91cHMgPT4ge1xuICAgICAgZ3JvdXBzID0gZ3JvdXBzLmNvbmNhdChnZXRHcm91cHMoZWxlbWVudCwgdGhpcy5faW5qZWN0b3IpKTtcbiAgICAgIHJldHVybiBncm91cHM7XG4gICAgfTtcbiAgfVxufVxuQnBtblByb3BlcnRpZXNQcm92aWRlci4kaW5qZWN0ID0gWydwcm9wZXJ0aWVzUGFuZWwnLCAnaW5qZWN0b3InXTtcblxudmFyIGluZGV4JDIgPSB7XG4gIF9faW5pdF9fOiBbJ2JwbW5Qcm9wZXJ0aWVzUHJvdmlkZXInXSxcbiAgYnBtblByb3BlcnRpZXNQcm92aWRlcjogWyd0eXBlJywgQnBtblByb3BlcnRpZXNQcm92aWRlcl1cbn07XG5cbi8qKlxuICogR2V0IGV4dGVuc2lvbiBlbGVtZW50cyBvZiBidXNpbmVzcyBvYmplY3QuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IHR5cGUuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBidXNpbmVzc09iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPXVuZGVmaW5lZF1cbiAqIEByZXR1cm5zIHtBcnJheTxNb2RkbGVFbGVtZW50Pn1cbiAqL1xuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCB0eXBlID0gdW5kZWZpbmVkKSB7XG4gIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHZhbHVlcyA9IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyk7XG4gIGlmICghdmFsdWVzIHx8ICF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmICh0eXBlKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIodmFsdWUgPT4gaXModmFsdWUsIHR5cGUpKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vKipcbiAqIEFkZCBvbmUgb3IgbW9yZSBleHRlbnNpb24gZWxlbWVudHMuIENyZWF0ZSBicG1uOkV4dGVuc2lvbkVsZW1lbnRzIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJ1c2luZXNzT2JqZWN0XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR8QXJyYXk8TW9kZGxlRWxlbWVudD59IGV4dGVuc2lvbkVsZW1lbnRzVG9BZGRcbiAqIEBwYXJhbSB7Q29tbWFuZFN0YWNrfSBjb21tYW5kU3RhY2tcbiAqL1xuZnVuY3Rpb24gYWRkRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGV4dGVuc2lvbkVsZW1lbnRUb0FkZCwgYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjaykge1xuICBjb25zdCBjb21tYW5kcyA9IFtdO1xuICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgLy8gKDEpIGNyZWF0ZSBicG1uOkV4dGVuc2lvbkVsZW1lbnRzIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgIHZhbHVlczogW11cbiAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZXh0ZW5zaW9uRWxlbWVudFRvQWRkLiRwYXJlbnQgPSBleHRlbnNpb25FbGVtZW50cztcblxuICAvLyAoMikgYWRkIGV4dGVuc2lvbiBlbGVtZW50IHRvIGxpc3RcbiAgY29tbWFuZHMucHVzaCh7XG4gICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGV4dGVuc2lvbkVsZW1lbnRUb0FkZF1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xufVxuXG4vKipcbiAqIFJlbW92ZSBvbmUgb3IgbW9yZSBleHRlbnNpb24gZWxlbWVudHMuIFJlbW92ZSBicG1uOkV4dGVuc2lvbkVsZW1lbnRzIGFmdGVyd2FyZHMgaWYgaXQncyBlbXB0eS5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYnVzaW5lc3NPYmplY3RcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxBcnJheTxNb2RkbGVFbGVtZW50Pn0gZXh0ZW5zaW9uRWxlbWVudHNUb1JlbW92ZVxuICogQHBhcmFtIHtDb21tYW5kU3RhY2t9IGNvbW1hbmRTdGFja1xuICovXG5mdW5jdGlvbiByZW1vdmVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwgZXh0ZW5zaW9uRWxlbWVudHNUb1JlbW92ZSwgY29tbWFuZFN0YWNrKSB7XG4gIGlmICghaXNBcnJheShleHRlbnNpb25FbGVtZW50c1RvUmVtb3ZlKSkge1xuICAgIGV4dGVuc2lvbkVsZW1lbnRzVG9SZW1vdmUgPSBbZXh0ZW5zaW9uRWxlbWVudHNUb1JlbW92ZV07XG4gIH1cbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyksXG4gICAgdmFsdWVzID0gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maWx0ZXIodmFsdWUgPT4gIWV4dGVuc2lvbkVsZW1lbnRzVG9SZW1vdmUuaW5jbHVkZXModmFsdWUpKTtcbiAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICBlbGVtZW50LFxuICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHZhbHVlc1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdpdGhQcm9wcyhDb21wb25lbnQsIG90aGVyUHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICByZXR1cm4ganN4KENvbXBvbmVudCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfSk7XG4gIH07XG59XG5cbmNvbnN0IGZhbGxiYWNrUmVzb2x2ZXIgPSB7XG4gIGdldFZhcmlhYmxlc0ZvckVsZW1lbnQ6IGJvID0+IGdldFZhcmlhYmxlc0ZvckVsZW1lbnQoYm8pXG59O1xuZnVuY3Rpb24gd2l0aFZhcmlhYmxlQ29udGV4dChDb21wb25lbnQpIHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBicG1uRWxlbWVudCxcbiAgICAgIGVsZW1lbnRcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgYm8gPSAoYnBtbkVsZW1lbnQgfHwgZWxlbWVudCkuYnVzaW5lc3NPYmplY3Q7XG4gICAgY29uc3QgW3ZhcmlhYmxlcywgc2V0VmFyaWFibGVzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBldmVudEJ1cyA9IHVzZVNlcnZpY2UoJ2V2ZW50QnVzJyk7XG4gICAgY29uc3QgdmFyaWFibGVSZXNvbHZlciA9IHVzZVNlcnZpY2VJZkF2YWlsYWJsZSgndmFyaWFibGVSZXNvbHZlcicsIGZhbGxiYWNrUmVzb2x2ZXIpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBleHRyYWN0VmFyaWFibGVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBhd2FpdCB2YXJpYWJsZVJlc29sdmVyLmdldFZhcmlhYmxlc0ZvckVsZW1lbnQoYm8sIGVsZW1lbnQpO1xuICAgICAgICBzZXRWYXJpYWJsZXModmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnZhcmlhYmxlLFxuICAgICAgICAgICAgaW5mbzogdmFyaWFibGUuaW5mbyB8fCB2YXJpYWJsZS5vcmlnaW4gJiYgJ1dyaXR0ZW4gaW4gJyArIHZhcmlhYmxlLm9yaWdpbi5tYXAob3JpZ2luID0+IG9yaWdpbi5uYW1lIHx8IG9yaWdpbi5pZCkuam9pbignLCAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiB1bmRlZmluZWQsIHNvIHRoZSBldmVudCBwcm9wYWdhdGlvbiBpcyBub3QgY2FuY2VsZWQuXG4gICAgICAvLyBDZi4gaHR0cHM6Ly9naXRodWIuY29tL2NhbXVuZGEvY2FtdW5kYS1tb2RlbGVyL2lzc3Vlcy8zMzkyXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgZXh0cmFjdFZhcmlhYmxlcygpO1xuICAgICAgfTtcbiAgICAgIGV2ZW50QnVzLm9uKCdjb21tYW5kU3RhY2suY2hhbmdlZCcsIGNhbGxiYWNrKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBldmVudEJ1cy5vZmYoJ2NvbW1hbmRTdGFjay5jaGFuZ2VkJywgY2FsbGJhY2spO1xuICAgICAgfTtcbiAgICB9LCBbYm9dKTtcbiAgICByZXR1cm4ganN4KENvbXBvbmVudCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlc1xuICAgIH0pO1xuICB9O1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gdXNlU2VydmljZUlmQXZhaWxhYmxlKHNlcnZpY2UsIGZhbGxiYWNrKSB7XG4gIGNvbnN0IHJlc29sdmVkID0gdXNlU2VydmljZShzZXJ2aWNlLCBmYWxzZSk7XG4gIGlmICghcmVzb2x2ZWQpIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5mdW5jdGlvbiB3aXRoVG9vbHRpcENvbnRhaW5lcihDb21wb25lbnQpIHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB0b29sdGlwQ29udGFpbmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSB1c2VTZXJ2aWNlKCdjb25maWcnKTtcbiAgICAgIHJldHVybiBjb25maWcgJiYgY29uZmlnLnByb3BlcnRpZXNQYW5lbCAmJiBjb25maWcucHJvcGVydGllc1BhbmVsLmZlZWxUb29sdGlwQ29udGFpbmVyO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4ganN4KENvbXBvbmVudCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB0b29sdGlwQ29udGFpbmVyOiB0b29sdGlwQ29udGFpbmVyXG4gICAgfSk7XG4gIH07XG59XG5cbmNvbnN0IEZlZWxFbnRyeSA9IHdpdGhUb29sdGlwQ29udGFpbmVyKEZlZWxFbnRyeSQxKTtcbmNvbnN0IEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQgPSB3aXRoVmFyaWFibGVDb250ZXh0KEZlZWxFbnRyeSk7XG5cbmZ1bmN0aW9uIEFzc2lnbm1lbnREZWZpbml0aW9uUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlVzZXJUYXNrJykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICdhc3NpZ25tZW50RGVmaW5pdGlvbkFzc2lnbmVlJyxcbiAgICBjb21wb25lbnQ6IEFzc2lnbmVlJDEsXG4gICAgaXNFZGl0ZWQ6IGlzRmVlbEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ2Fzc2lnbm1lbnREZWZpbml0aW9uQ2FuZGlkYXRlR3JvdXBzJyxcbiAgICBjb21wb25lbnQ6IENhbmRpZGF0ZUdyb3VwcyQxLFxuICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZFxuICB9LCB7XG4gICAgaWQ6ICdhc3NpZ25tZW50RGVmaW5pdGlvbkNhbmRpZGF0ZVVzZXJzJyxcbiAgICBjb21wb25lbnQ6IENhbmRpZGF0ZVVzZXJzJDEsXG4gICAgaXNFZGl0ZWQ6IGlzRmVlbEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gQXNzaWduZWUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChnZXRBc3NpZ25tZW50RGVmaW5pdGlvbihlbGVtZW50KSB8fCB7fSkuYXNzaWduZWU7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSBBc3NpZ25tZW50RGVmaW5pdGlvblxuICAgIGxldCBhc3NpZ25tZW50RGVmaW5pdGlvbiA9IGdldEFzc2lnbm1lbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuICAgIGlmICghYXNzaWdubWVudERlZmluaXRpb24pIHtcbiAgICAgIGFzc2lnbm1lbnREZWZpbml0aW9uID0gY3JlYXRlRWxlbWVudCgnemVlYmU6QXNzaWdubWVudERlZmluaXRpb24nLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBhc3NpZ25tZW50RGVmaW5pdGlvbl1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgzKSB1cGRhdGUgYXNzaWduZWUgZGVmaW5pdGlvbiB0eXBlXG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBhc3NpZ25tZW50RGVmaW5pdGlvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFzc2lnbmVlOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdhc3NpZ25tZW50RGVmaW5pdGlvbkFzc2lnbmVlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdBc3NpZ25lZScpLFxuICAgIGZlZWw6ICdvcHRpb25hbCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBDYW5kaWRhdGVHcm91cHMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChnZXRBc3NpZ25tZW50RGVmaW5pdGlvbihlbGVtZW50KSB8fCB7fSkuY2FuZGlkYXRlR3JvdXBzO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGxldCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcblxuICAgIC8vICgxKSBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgZW5zdXJlIGFzc2lnbm1lbnREZWZpbml0aW9uXG4gICAgbGV0IGFzc2lnbm1lbnREZWZpbml0aW9uID0gZ2V0QXNzaWdubWVudERlZmluaXRpb24oZWxlbWVudCk7XG4gICAgaWYgKCFhc3NpZ25tZW50RGVmaW5pdGlvbikge1xuICAgICAgYXNzaWdubWVudERlZmluaXRpb24gPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpBc3NpZ25tZW50RGVmaW5pdGlvbicsIHt9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGFzc2lnbm1lbnREZWZpbml0aW9uXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIHVwZGF0ZSBjYW5kaWRhdGVHcm91cHNcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGFzc2lnbm1lbnREZWZpbml0aW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY2FuZGlkYXRlR3JvdXBzOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdhc3NpZ25tZW50RGVmaW5pdGlvbkNhbmRpZGF0ZUdyb3VwcycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIGdyb3VwcycpLFxuICAgIGZlZWw6ICdvcHRpb25hbCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBDYW5kaWRhdGVVc2VycyQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gKGdldEFzc2lnbm1lbnREZWZpbml0aW9uKGVsZW1lbnQpIHx8IHt9KS5jYW5kaWRhdGVVc2VycztcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSBhc3NpZ25tZW50RGVmaW5pdGlvblxuICAgIGxldCBhc3NpZ25tZW50RGVmaW5pdGlvbiA9IGdldEFzc2lnbm1lbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuICAgIGlmICghYXNzaWdubWVudERlZmluaXRpb24pIHtcbiAgICAgIGFzc2lnbm1lbnREZWZpbml0aW9uID0gY3JlYXRlRWxlbWVudCgnemVlYmU6QXNzaWdubWVudERlZmluaXRpb24nLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBhc3NpZ25tZW50RGVmaW5pdGlvbl1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgzKSB1cGRhdGUgY2FuZGlkYXRlVXNlcnNcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGFzc2lnbm1lbnREZWZpbml0aW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY2FuZGlkYXRlVXNlcnM6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2Fzc2lnbm1lbnREZWZpbml0aW9uQ2FuZGlkYXRlVXNlcnMnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSB1c2VycycpLFxuICAgIGZlZWw6ICdvcHRpb25hbCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRBc3NpZ25tZW50RGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpBc3NpZ25tZW50RGVmaW5pdGlvbicpWzBdO1xufVxuXG5mdW5jdGlvbiBpc1plZWJlU2VydmljZVRhc2soZWxlbWVudCkge1xuICBpZiAoIWlzKGVsZW1lbnQsICd6ZWViZTpaZWViZVNlcnZpY2VUYXNrJykpIHJldHVybiBmYWxzZTtcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkVuZEV2ZW50JykgfHwgaXMoZWxlbWVudCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcpKSB7XG4gICAgcmV0dXJuICEhZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgfVxuXG4gIC8vIEJ1c2luZXNzUnVsZVRhc2sgYW5kIFNjcmlwdFRhc2sgYXJlIFNlcnZpY2VUYXNrcyBvbmx5IGlmIHRoZXkgaGF2ZSBhIFRhc2tEZWZpbml0aW9uXG4gIC8vIChpZS4gaWYgdGhlIGltcGxlbWVudGF0aW9uIGlzIHNldCB0byA9PUpvYldvcmtlcilcbiAgaWYgKGlzQW55JDEoZWxlbWVudCwgWydicG1uOkJ1c2luZXNzUnVsZVRhc2snLCAnYnBtbjpTY3JpcHRUYXNrJ10pICYmICFnZXRUYXNrRGVmaW5pdGlvbiQzKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaXNNZXNzYWdlRW5kRXZlbnQoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46RW5kRXZlbnQnKSAmJiAhIWdldE1lc3NhZ2VFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG59XG5mdW5jdGlvbiBpc01lc3NhZ2VUaHJvd0V2ZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKSAmJiAhIWdldE1lc3NhZ2VFdmVudERlZmluaXRpb24oZWxlbWVudCk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFRhc2tEZWZpbml0aW9uJDMoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6VGFza0RlZmluaXRpb24nKVswXTtcbn1cblxuZnVuY3Rpb24gYXJlSGVhZGVyc1N1cHBvcnRlZChlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpIHx8IGlzWmVlYmVTZXJ2aWNlVGFzayhlbGVtZW50KTtcbn1cblxuLyoqXG4gKiBHZXQgZmlyc3QgemVlYmU6VGFza0hlYWRlcnMgZWxlbWVudCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSBhIHplZWJlOlRhc2tIZWFkZXIgZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRUYXNrSGVhZGVycyQxKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ3plZWJlOlRhc2tIZWFkZXJzJylbMF07XG59XG5cbi8qKlxuICogUmV0cmlldmUgYWxsIHplZWJlOkhlYWRlciBlbGVtZW50cyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gYSBsaXN0IG9mIHplZWJlOkhlYWRlciBlbGVtZW50c1xuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJzKGVsZW1lbnQpIHtcbiAgY29uc3QgdGFza0hlYWRlcnMgPSBnZXRUYXNrSGVhZGVycyQxKGVsZW1lbnQpO1xuICByZXR1cm4gdGFza0hlYWRlcnMgPyB0YXNrSGVhZGVycy5nZXQoJ3ZhbHVlcycpIDogW107XG59XG5cbmNvbnN0IERNTl9JTVBMRU1FTlRBVElPTl9PUFRJT04gPSAnZG1uJyxcbiAgSk9CX1dPUktFUl9JTVBMRU1FTlRBVElPTl9PUFRJT04kMiA9ICdqb2JXb3JrZXInLFxuICBERUZBVUxUX0lNUExFTUVOVEFUSU9OX09QVElPTiQxID0gJyc7XG5mdW5jdGlvbiBCdXNpbmVzc1J1bGVJbXBsZW1lbnRhdGlvblByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpCdXNpbmVzc1J1bGVUYXNrJykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICdidXNpbmVzc1J1bGVJbXBsZW1lbnRhdGlvbicsXG4gICAgY29tcG9uZW50OiBCdXNpbmVzc1J1bGVJbXBsZW1lbnRhdGlvbixcbiAgICBpc0VkaXRlZDogKCkgPT4gaXNCdXNpbmVzc1J1bGVJbXBsZW1lbnRhdGlvbkVkaXRlZChlbGVtZW50KVxuICB9XTtcbn1cbmZ1bmN0aW9uIEJ1c2luZXNzUnVsZUltcGxlbWVudGF0aW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIGlmIChnZXRDYWxsZWREZWNpc2lvbiQxKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gRE1OX0lNUExFTUVOVEFUSU9OX09QVElPTjtcbiAgICB9XG4gICAgaWYgKGdldFRhc2tEZWZpbml0aW9uJDIoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBKT0JfV09SS0VSX0lNUExFTUVOVEFUSU9OX09QVElPTiQyO1xuICAgIH1cbiAgICByZXR1cm4gREVGQVVMVF9JTVBMRU1FTlRBVElPTl9PUFRJT04kMTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHZhbHVlIGJ5IGVpdGhlciBjcmVhdGluZyBhIHplZWJlOmNhbGxlZERlY2lzaW9uIG9yIGEgemVlYmU6dGFza0RlZmludGlvblxuICAgKiBleHRlbnNpb24gZWxlbWVudC4gTm90ZSB0aGF0IHRoZXkgbXVzdCBub3QgZXhpc3QgYm90aCBhdCB0aGUgc2FtZSB0aW1lLCBob3dldmVyXG4gICAqIHRoaXMgd2lsbCBiZSBlbnN1cmVkIGJ5IGEgYnBtbi1qcyBiZWhhdmlvciAoYW5kIG5vdCBieSB0aGUgcHJvcFBhbmVsKS5cbiAgICovXG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGxldCBleHRlbnNpb25FbGVtZW50LCBleHRlbnNpb25FbGVtZW50VHlwZTtcbiAgICBpZiAodmFsdWUgPT09IERNTl9JTVBMRU1FTlRBVElPTl9PUFRJT04pIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnQgPSBnZXRDYWxsZWREZWNpc2lvbiQxKGVsZW1lbnQpO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudFR5cGUgPSAnemVlYmU6Q2FsbGVkRGVjaXNpb24nO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IEpPQl9XT1JLRVJfSU1QTEVNRU5UQVRJT05fT1BUSU9OJDIpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnQgPSBnZXRUYXNrRGVmaW5pdGlvbiQyKGVsZW1lbnQpO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudFR5cGUgPSAnemVlYmU6VGFza0RlZmluaXRpb24nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNldEVsZW1lbnQkMShlbGVtZW50LCBjb21tYW5kU3RhY2spO1xuICAgIH1cbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnQgJiYgZXh0ZW5zaW9uRWxlbWVudFR5cGUpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KGV4dGVuc2lvbkVsZW1lbnRUeXBlLCB7fSwgbnVsbCwgYnBtbkZhY3RvcnkpO1xuICAgICAgdXBkYXRlRXh0ZW5zaW9uRWxlbWVudHMkMShlbGVtZW50LCBleHRlbnNpb25FbGVtZW50LCBicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgICB2YWx1ZTogREVGQVVMVF9JTVBMRU1FTlRBVElPTl9PUFRJT04kMSxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJzxub25lPicpXG4gICAgfSwge1xuICAgICAgdmFsdWU6IERNTl9JTVBMRU1FTlRBVElPTl9PUFRJT04sXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdETU4gZGVjaXNpb24nKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBKT0JfV09SS0VSX0lNUExFTUVOVEFUSU9OX09QVElPTiQyLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnSm9iIHdvcmtlcicpXG4gICAgfV07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbXBsZW1lbnRhdGlvbicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRUYXNrRGVmaW5pdGlvbiQyKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ3plZWJlOlRhc2tEZWZpbml0aW9uJylbMF07XG59XG5mdW5jdGlvbiBnZXRDYWxsZWREZWNpc2lvbiQxKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ3plZWJlOkNhbGxlZERlY2lzaW9uJylbMF07XG59XG5mdW5jdGlvbiBpc0J1c2luZXNzUnVsZUltcGxlbWVudGF0aW9uRWRpdGVkKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFRhc2tEZWZpbml0aW9uJDIoZWxlbWVudCkgfHwgZ2V0Q2FsbGVkRGVjaXNpb24kMShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIHJlc2V0RWxlbWVudCQxKGVsZW1lbnQsIGNvbW1hbmRTdGFjaykge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCB0b1JlbW92ZSA9IFtnZXRUYXNrRGVmaW5pdGlvbiQyKGVsZW1lbnQpLCBnZXRUYXNrSGVhZGVycyQxKGVsZW1lbnQpLCBnZXRDYWxsZWREZWNpc2lvbiQxKGVsZW1lbnQpXS5maWx0ZXIoQm9vbGVhbik7XG4gIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCB0b1JlbW92ZSwgY29tbWFuZFN0YWNrKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUV4dGVuc2lvbkVsZW1lbnRzJDEoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudFRvQWRkLCBicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGNvbW1hbmRzID0gW107XG4gIGxldCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgbGV0IGV4dGVuc2lvbkVsZW1lbnRWYWx1ZXM7XG5cbiAgLy8gKDEpIGNyZWF0ZSBicG1uOkV4dGVuc2lvbkVsZW1lbnRzIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgIHZhbHVlczogW11cbiAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZXh0ZW5zaW9uRWxlbWVudFRvQWRkLiRwYXJlbnQgPSBleHRlbnNpb25FbGVtZW50cztcblxuICAvLyAoMikgcmVtb3ZlIG9sZCBleGVuc2lvbiBlbGVtZW50IGZyb20gZXh0ZW5zaW9uRWxlbWVudHNcbiAgaWYgKGlzKGV4dGVuc2lvbkVsZW1lbnRUb0FkZCwgJ3plZWJlOlRhc2tEZWZpbml0aW9uJykpIHtcbiAgICBleHRlbnNpb25FbGVtZW50VmFsdWVzID0gd2l0aG91dChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBnZXRDYWxsZWREZWNpc2lvbiQxKGVsZW1lbnQpKTtcbiAgfSBlbHNlIGlmIChpcyhleHRlbnNpb25FbGVtZW50VG9BZGQsICd6ZWViZTpDYWxsZWREZWNpc2lvbicpKSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudFZhbHVlcyA9IHdpdGhvdXQoZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgZ2V0VGFza0RlZmluaXRpb24kMihlbGVtZW50KSk7XG4gIH1cblxuICAvLyAoMykgYWRkIGV4dGVuc2lvbiBlbGVtZW50IHRvIGxpc3RcbiAgY29tbWFuZHMucHVzaCh7XG4gICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRWYWx1ZXMsIGV4dGVuc2lvbkVsZW1lbnRUb0FkZF1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xufVxuXG5mdW5jdGlvbiBCaW5kaW5nJDIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgdHlwZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiBnZXRCaW5kaW5nVHlwZShlbGVtZW50LCB0eXBlKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnQgPSBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsIHR5cGUpWzBdO1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudCkge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodHlwZSwge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgZXh0ZW5zaW9uRWxlbWVudF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgzKSBVcGRhdGUgYmluZGluZ1R5cGUgYXR0cmlidXRlXG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYmluZGluZ1R5cGU6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSBFeGVjdXRlIHRoZSBjb21tYW5kc1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiBbe1xuICAgIHZhbHVlOiAnbGF0ZXN0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdsYXRlc3QnKVxuICB9LCB7XG4gICAgdmFsdWU6ICdkZXBsb3ltZW50JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdkZXBsb3ltZW50JylcbiAgfSwge1xuICAgIHZhbHVlOiAndmVyc2lvblRhZycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgndmVyc2lvbiB0YWcnKVxuICB9XTtcbiAgcmV0dXJuIGpzeChTZWxlY3RFbnRyeSwge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaWQ6IFwiYmluZGluZ1R5cGVcIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdCaW5kaW5nJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zOiBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0QmluZGluZ1R5cGUoZWxlbWVudCwgdHlwZSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50ID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCB0eXBlKVswXTtcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50KSB7XG4gICAgcmV0dXJuICdsYXRlc3QnO1xuICB9XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50LmdldCgnYmluZGluZ1R5cGUnKTtcbn1cblxuZnVuY3Rpb24gVmVyc2lvblRhZyQzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIHR5cGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0JyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4gZ2V0VmVyc2lvblRhZyQxKGVsZW1lbnQsIHR5cGUpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb25zdCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGxldCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudCA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgdHlwZSlbMF07XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50KSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBleHRlbnNpb25FbGVtZW50XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIFVwZGF0ZSB2ZXJzaW9uVGFnIGF0dHJpYnV0ZVxuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZlcnNpb25UYWc6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSBFeGVjdXRlIHRoZSBjb21tYW5kc1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ3ZlcnNpb25UYWcnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZlcnNpb24gdGFnJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRWZXJzaW9uVGFnJDEoZWxlbWVudCwgdHlwZSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50ID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCB0eXBlKVswXTtcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50LmdldCgndmVyc2lvblRhZycpIHx8ICcnO1xufVxuXG5jb25zdCBDYWxsZWREZWNpc2lvbkJpbmRpbmcgPSB3aXRoUHJvcHMoQmluZGluZyQyLCB7XG4gICAgdHlwZTogJ3plZWJlOkNhbGxlZERlY2lzaW9uJ1xuICB9KSxcbiAgQ2FsbGVkRGVjaXNpb25WZXJzaW9uVGFnID0gd2l0aFByb3BzKFZlcnNpb25UYWckMywge1xuICAgIHR5cGU6ICd6ZWViZTpDYWxsZWREZWNpc2lvbidcbiAgfSk7XG5mdW5jdGlvbiBDYWxsZWREZWNpc2lvblByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpCdXNpbmVzc1J1bGVUYXNrJykgfHwgIWdldENhbGxlZERlY2lzaW9uKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiAnZGVjaXNpb25JZCcsXG4gICAgY29tcG9uZW50OiBEZWNpc2lvbklELFxuICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZFxuICB9LCB7XG4gICAgaWQ6ICdiaW5kaW5nVHlwZScsXG4gICAgY29tcG9uZW50OiBDYWxsZWREZWNpc2lvbkJpbmRpbmcsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChnZXRCaW5kaW5nVHlwZShlbGVtZW50LCAnemVlYmU6Q2FsbGVkRGVjaXNpb24nKSA9PT0gJ3ZlcnNpb25UYWcnKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAndmVyc2lvblRhZycsXG4gICAgICBjb21wb25lbnQ6IENhbGxlZERlY2lzaW9uVmVyc2lvblRhZyxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH1cbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogJ3Jlc3VsdFZhcmlhYmxlJyxcbiAgICBjb21wb25lbnQ6IFJlc3VsdFZhcmlhYmxlJDQsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfSk7XG4gIHJldHVybiBlbnRyaWVzO1xufVxuZnVuY3Rpb24gRGVjaXNpb25JRChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChnZXRDYWxsZWREZWNpc2lvbihlbGVtZW50KSB8fCB7fSkuZGVjaXNpb25JZDtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGxldCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcblxuICAgIC8vICgxKSBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgZW5zdXJlIGNhbGxlZERlY2lzaW9uXG4gICAgbGV0IGNhbGxlZERlY2lzaW9uID0gZ2V0Q2FsbGVkRGVjaXNpb24oZWxlbWVudCk7XG4gICAgaWYgKCFjYWxsZWREZWNpc2lvbikge1xuICAgICAgY2FsbGVkRGVjaXNpb24gPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpDYWxsZWREZWNpc2lvbicsIHt9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGNhbGxlZERlY2lzaW9uXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIHVwZGF0ZSBjYWxlZERlY2lzaW9uLmRlY2lzaW9uSWRcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGNhbGxlZERlY2lzaW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZGVjaXNpb25JZDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIGNvbW1pdCBhbGwgdXBkYXRlc1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIHJldHVybiBGZWVsRW50cnlXaXRoVmFyaWFibGVDb250ZXh0KHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RlY2lzaW9uIElEJyksXG4gICAgZmVlbDogJ29wdGlvbmFsJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFJlc3VsdFZhcmlhYmxlJDQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiAoZ2V0Q2FsbGVkRGVjaXNpb24oZWxlbWVudCkgfHwge30pLnJlc3VsdFZhcmlhYmxlO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb25zdCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgY2FsbGVkRGVjaXNpb25cbiAgICBsZXQgY2FsbGVkRGVjaXNpb24gPSBnZXRDYWxsZWREZWNpc2lvbihlbGVtZW50KTtcbiAgICBpZiAoIWNhbGxlZERlY2lzaW9uKSB7XG4gICAgICBjYWxsZWREZWNpc2lvbiA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOkNhbGxlZERlY2lzaW9uJywge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgY2FsbGVkRGVjaXNpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMykgdXBkYXRlIGNhbGVkRGVjaXNpb24uZGVjaXNpb25JZFxuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogY2FsbGVkRGVjaXNpb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICByZXN1bHRWYXJpYWJsZTogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIGNvbW1pdCBhbGwgdXBkYXRlc1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdSZXN1bHQgdmFyaWFibGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldENhbGxlZERlY2lzaW9uKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ3plZWJlOkNhbGxlZERlY2lzaW9uJylbMF07XG59XG5cbmZ1bmN0aW9uIENvbmRpdGlvblByb3BzJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGNvbmRpdGlvblByb3BzID0gW107XG4gIGlmIChpc0NvbmRpdGlvbmFsU291cmNlJDEoZWxlbWVudC5zb3VyY2UpKSB7XG4gICAgY29uZGl0aW9uUHJvcHMucHVzaCh7XG4gICAgICBpZDogJ2NvbmRpdGlvbkV4cHJlc3Npb24nLFxuICAgICAgY29tcG9uZW50OiBDb25kaXRpb25FeHByZXNzaW9uJDEsXG4gICAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29uZGl0aW9uUHJvcHM7XG59XG5mdW5jdGlvbiBDb25kaXRpb25FeHByZXNzaW9uJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRDb25kaXRpb25FeHByZXNzaW9uJDEoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgIC8vICgxKSBJZiB3ZSBzZXQgdmFsdWUgdG8gYSBkZWZhdWx0IGZsb3csIG1ha2UgaXQgYSBub24tZGVmYXVsdCBmbG93XG4gICAgLy8gYnkgdXBkYXRpbmcgdGhlIGVsZW1lbnQgc291cmNlXG4gICAgY29uc3Qgc291cmNlID0gZWxlbWVudC5zb3VyY2U7XG4gICAgaWYgKHNvdXJjZS5idXNpbmVzc09iamVjdC5kZWZhdWx0ID09PSBidXNpbmVzc09iamVjdCkge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50OiBzb3VyY2UsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgJ2RlZmF1bHQnOiB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBDcmVhdGUgYW5kIHNldCBmb3JtYWxFeHByZXNzaW9uIGVsZW1lbnQgY29udGFpbmluZyB0aGUgY29uZGl0aW9uRXhwcmVzc2lvbixcbiAgICAvLyB1bmxlc3MgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGVtcHR5XG4gICAgY29uc3QgZm9ybWFsRXhwcmVzc2lvbkVsZW1lbnQgPSB2YWx1ZSAmJiB2YWx1ZSAhPSAnJyA/IGNyZWF0ZUVsZW1lbnQoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHtcbiAgICAgIGJvZHk6IHZhbHVlXG4gICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KSA6IHVuZGVmaW5lZDtcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb25kaXRpb25FeHByZXNzaW9uOiBmb3JtYWxFeHByZXNzaW9uRWxlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoMykgRXhlY3V0ZSB0aGUgY29tbWFuZHNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2NvbmRpdGlvbkV4cHJlc3Npb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvbmRpdGlvbiBleHByZXNzaW9uJyksXG4gICAgZmVlbDogJ3JlcXVpcmVkJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmNvbnN0IENPTkRJVElPTkFMX1NPVVJDRVMkMSA9IFsnYnBtbjpBY3Rpdml0eScsICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknLCAnYnBtbjpJbmNsdXNpdmVHYXRld2F5J107XG5mdW5jdGlvbiBpc0NvbmRpdGlvbmFsU291cmNlJDEoZWxlbWVudCkge1xuICByZXR1cm4gaXNBbnkoZWxlbWVudCwgQ09ORElUSU9OQUxfU09VUkNFUyQxKTtcbn1cblxuLyoqXG4gKiBnZXRDb25kaXRpb25FeHByZXNzaW9uIC0gZ2V0IHRoZSBib2R5IHZhbHVlIG9mIGEgY29uZGl0aW9uIGV4cHJlc3Npb24gZm9yIGEgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBnZXRDb25kaXRpb25FeHByZXNzaW9uJDEoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBjb25kaXRpb25FeHByZXNzaW9uID0gYnVzaW5lc3NPYmplY3QuY29uZGl0aW9uRXhwcmVzc2lvbjtcbiAgaWYgKGNvbmRpdGlvbkV4cHJlc3Npb24pIHtcbiAgICByZXR1cm4gY29uZGl0aW9uRXhwcmVzc2lvbi5nZXQoJ2JvZHknKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBFcnJvclByb3BzJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlcnJvciA9IGdldEVycm9yKGVsZW1lbnQpO1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIGlmIChlcnJvciAmJiBpcyhlbGVtZW50LCAnYnBtbjpUaHJvd0V2ZW50JykpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdlcnJvckNvZGUnLFxuICAgICAgY29tcG9uZW50OiBFcnJvckNvZGUkMSxcbiAgICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBlbnRyaWVzO1xufVxuZnVuY3Rpb24gRXJyb3JDb2RlJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBlcnJvciA9IGdldEVycm9yKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZXJyb3IuZ2V0KCdlcnJvckNvZGUnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZXJyb3IsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGVycm9yQ29kZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdlcnJvckNvZGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvZGUnKSxcbiAgICBmZWVsOiAnb3B0aW9uYWwnLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCdAYnBtbi1pby9wcm9wZXJ0aWVzLXBhbmVsJykuRW50cnlEZWZpbml0aW9uIH0gRW50cnlcbiAqL1xuXG4vKipcbiAqIEByZXR1cm5zIHtBcnJheTxFbnRyeT59IGVudHJpZXNcbiAqL1xuZnVuY3Rpb24gRXNjYWxhdGlvblByb3BzJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuXG4gIC8vIHVwZGF0ZSB0aHJvdyBldmVudHMgb25seVxuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlRocm93RXZlbnQnKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBlc2NhbGF0aW9uID0gZ2V0RXNjYWxhdGlvbihlbGVtZW50KTtcbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBpZiAoZXNjYWxhdGlvbikge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2VzY2FsYXRpb25Db2RlJyxcbiAgICAgIGNvbXBvbmVudDogRXNjYWxhdGlvbkNvZGUsXG4gICAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIEVzY2FsYXRpb25Db2RlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZXNjYWxhdGlvbiA9IGdldEVzY2FsYXRpb24oZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBlc2NhbGF0aW9uLmdldCgnZXNjYWxhdGlvbkNvZGUnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZXNjYWxhdGlvbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZXNjYWxhdGlvbkNvZGU6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBGZWVsRW50cnlXaXRoVmFyaWFibGVDb250ZXh0KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZXNjYWxhdGlvbkNvZGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvZGUnKSxcbiAgICBmZWVsOiAnb3B0aW9uYWwnLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBMaXN0ZW5lclR5cGUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBsaXN0ZW5lclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGxpc3RlbmVyLCB7XG4gICAgICB0eXBlOiB2YWx1ZVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gbGlzdGVuZXIuZ2V0KCd0eXBlJyk7XG4gIH07XG4gIHJldHVybiBGZWVsRW50cnlXaXRoVmFyaWFibGVDb250ZXh0KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiBpZFByZWZpeCArICctbGlzdGVuZXJUeXBlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMaXN0ZW5lciB0eXBlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2UsXG4gICAgZmVlbDogJ29wdGlvbmFsJ1xuICB9KTtcbn1cbmZ1bmN0aW9uIFJldHJpZXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgbGlzdGVuZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBtb2RlbGluZyA9IHVzZVNlcnZpY2UoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBsaXN0ZW5lciwge1xuICAgICAgcmV0cmllczogdmFsdWVcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmdldCgncmV0cmllcycpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogaWRQcmVmaXggKyAnLXJldHJpZXMnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1JldHJpZXMnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZSxcbiAgICBmZWVsOiAnb3B0aW9uYWwnXG4gIH0pO1xufVxuXG5jb25zdCBFVkVOVF9UT19MQUJFTCQyID0ge1xuICAnc3RhcnQnOiAnU3RhcnQnLFxuICAnZW5kJzogJ0VuZCdcbn07XG5mdW5jdGlvbiBFeGVjdXRpb25MaXN0ZW5lckVudHJpZXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWRQcmVmaXgsXG4gICAgbGlzdGVuZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBldmVudFR5cGVzID0gZ2V0RXZlbnRUeXBlcyhlbGVtZW50KTtcbiAgY29uc3QgZW50cmllcyA9IGV2ZW50VHlwZXMubGVuZ3RoID4gMSA/IFt7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy1ldmVudFR5cGUnLFxuICAgIGNvbXBvbmVudDogRXZlbnRUeXBlJDIsXG4gICAgaWRQcmVmaXgsXG4gICAgbGlzdGVuZXIsXG4gICAgZXZlbnRUeXBlc1xuICB9XSA6IFtdO1xuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiBpZFByZWZpeCArICctbGlzdGVuZXJUeXBlJyxcbiAgICBjb21wb25lbnQ6IExpc3RlbmVyVHlwZSQxLFxuICAgIGlkUHJlZml4LFxuICAgIGxpc3RlbmVyXG4gIH0sIHtcbiAgICBpZDogaWRQcmVmaXggKyAnLXJldHJpZXMnLFxuICAgIGNvbXBvbmVudDogUmV0cmllcyxcbiAgICBpZFByZWZpeCxcbiAgICBsaXN0ZW5lclxuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBFdmVudFR5cGUkMihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBsaXN0ZW5lcixcbiAgICBldmVudFR5cGVzXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gZXZlbnRUeXBlcy5tYXAoZXZlbnRUeXBlID0+ICh7XG4gICAgICB2YWx1ZTogZXZlbnRUeXBlLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZShFVkVOVF9UT19MQUJFTCQyW2V2ZW50VHlwZV0pXG4gICAgfSkpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGxpc3RlbmVyLCB7XG4gICAgICBldmVudFR5cGU6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBsaXN0ZW5lci5nZXQoJ2V2ZW50VHlwZScpO1xuICB9O1xuICByZXR1cm4gU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1ldmVudFR5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V2ZW50IHR5cGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRUeXBlcyhlbGVtZW50KSB7XG4gIGlmIChpc0FueSQxKGVsZW1lbnQsIFsnYnBtbjpCb3VuZGFyeUV2ZW50JywgJ2JwbW46U3RhcnRFdmVudCddKSkge1xuICAgIHJldHVybiBbJ2VuZCddO1xuICB9XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFbmRFdmVudCcpICYmIGdldEVycm9yRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFsnc3RhcnQnXTtcbiAgfVxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46R2F0ZXdheScpKSB7XG4gICAgcmV0dXJuIFsnc3RhcnQnXTtcbiAgfVxuICByZXR1cm4gWydzdGFydCcsICdlbmQnXTtcbn1cblxuZnVuY3Rpb24gRXhlY3V0aW9uTGlzdGVuZXJzUHJvcHMoe1xuICBlbGVtZW50LFxuICBpbmplY3RvclxufSkge1xuICBsZXQgYnVzaW5lc3NPYmplY3QgPSBnZXRSZWxldmFudEJ1c2luZXNzT2JqZWN0JDIoZWxlbWVudCk7XG5cbiAgLy8gbm90IGFsbG93ZWQgaW4gZW1wdHkgcG9vbHNcbiAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtb2RkbGUgPSBpbmplY3Rvci5nZXQoJ21vZGRsZScpO1xuICBpZiAoIWNhbkhhdmVFeGVjdXRpb25MaXN0ZW5lcnMoYnVzaW5lc3NPYmplY3QsIG1vZGRsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzTGlzdCQxKGJ1c2luZXNzT2JqZWN0KSB8fCBbXTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSBpbmplY3Rvci5nZXQoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snKSxcbiAgICBtb2RlbGluZyA9IGluamVjdG9yLmdldCgnbW9kZWxpbmcnKSxcbiAgICB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBpdGVtcyA9IGxpc3RlbmVycy5tYXAoKGxpc3RlbmVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZCArICctZXhlY3V0aW9uTGlzdGVuZXItJyArIGluZGV4O1xuICAgIGNvbnN0IHR5cGUgPSBsaXN0ZW5lci5nZXQoJ3R5cGUnKSB8fCAnPG5vIHR5cGU+JztcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKGAke0VWRU5UX1RPX0xBQkVMJDJbbGlzdGVuZXIuZ2V0KCdldmVudFR5cGUnKV19OiB7dHlwZX1gLCB7XG4gICAgICAgIHR5cGVcbiAgICAgIH0pLFxuICAgICAgZW50cmllczogRXhlY3V0aW9uTGlzdGVuZXJFbnRyaWVzKHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBsaXN0ZW5lclxuICAgICAgfSksXG4gICAgICBhdXRvRm9jdXNFbnRyeTogaWQgKyAnLWV2ZW50VHlwZScsXG4gICAgICByZW1vdmU6IHJlbW92ZUZhY3RvcnkkZSh7XG4gICAgICAgIG1vZGVsaW5nLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBsaXN0ZW5lclxuICAgICAgfSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpdGVtcyxcbiAgICBhZGQ6IGFkZEZhY3RvcnkkYih7XG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgIGVsZW1lbnRcbiAgICB9KVxuICB9O1xufVxuZnVuY3Rpb24gcmVtb3ZlRmFjdG9yeSRlKHtcbiAgbW9kZWxpbmcsXG4gIGVsZW1lbnQsXG4gIGxpc3RlbmVyXG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFJlbGV2YW50QnVzaW5lc3NPYmplY3QkMihlbGVtZW50KTtcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRFeGVjdXRpb25MaXN0ZW5lcnNDb250YWluZXIoYnVzaW5lc3NPYmplY3QpO1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpc3RlbmVycyA9IHdpdGhvdXQoY29udGFpbmVyLmdldCgnbGlzdGVuZXJzJyksIGxpc3RlbmVyKTtcbiAgICBtb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGNvbnRhaW5lciwge1xuICAgICAgbGlzdGVuZXJzXG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBhZGRGYWN0b3J5JGIoe1xuICBicG1uRmFjdG9yeSxcbiAgY29tbWFuZFN0YWNrLFxuICBlbGVtZW50XG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFJlbGV2YW50QnVzaW5lc3NPYmplY3QkMihlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSB6ZWViZTpFeGVjdXRpb25MaXN0ZW5lcnNcbiAgICBsZXQgZXhlY3V0aW9uTGlzdGVuZXJzID0gZ2V0RXhlY3V0aW9uTGlzdGVuZXJzQ29udGFpbmVyKGJ1c2luZXNzT2JqZWN0KTtcbiAgICBpZiAoIWV4ZWN1dGlvbkxpc3RlbmVycykge1xuICAgICAgY29uc3QgcGFyZW50ID0gZXh0ZW5zaW9uRWxlbWVudHM7XG4gICAgICBleGVjdXRpb25MaXN0ZW5lcnMgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpFeGVjdXRpb25MaXN0ZW5lcnMnLCB7XG4gICAgICAgIGxpc3RlbmVyczogW11cbiAgICAgIH0sIHBhcmVudCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGV4ZWN1dGlvbkxpc3RlbmVyc11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgzKSBjcmVhdGUgemVlYmU6RXhlY3V0aW9uTGlzdGVuZXJcbiAgICBjb25zdCBleGVjdXRpb25MaXN0ZW5lciA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOkV4ZWN1dGlvbkxpc3RlbmVyJywgZ2V0RGVmYXVsdExpc3RlbmVyUHJvcHMkMShlbGVtZW50KSwgZXhlY3V0aW9uTGlzdGVuZXJzLCBicG1uRmFjdG9yeSk7XG5cbiAgICAvLyAoNCkgYWRkIGV4ZWN1dGlvbkxpc3RlbmVyIHRvIGxpc3RcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4ZWN1dGlvbkxpc3RlbmVycyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxpc3RlbmVyczogWy4uLmV4ZWN1dGlvbkxpc3RlbmVycy5nZXQoJ2xpc3RlbmVycycpLCBleGVjdXRpb25MaXN0ZW5lcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDUpIGNvbW1pdCBhbGwgdXBkYXRlc1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0UmVsZXZhbnRCdXNpbmVzc09iamVjdCQyKGVsZW1lbnQpIHtcbiAgbGV0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpO1xuICB9XG4gIHJldHVybiBidXNpbmVzc09iamVjdDtcbn1cbmZ1bmN0aW9uIGdldEV4ZWN1dGlvbkxpc3RlbmVyc0NvbnRhaW5lcihlbGVtZW50KSB7XG4gIGNvbnN0IGV4ZWN1dGlvbkxpc3RlbmVycyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChlbGVtZW50LCAnemVlYmU6RXhlY3V0aW9uTGlzdGVuZXJzJyk7XG4gIHJldHVybiBleGVjdXRpb25MaXN0ZW5lcnMgJiYgZXhlY3V0aW9uTGlzdGVuZXJzWzBdO1xufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJzTGlzdCQxKGVsZW1lbnQpIHtcbiAgY29uc3QgZXhlY3V0aW9uTGlzdGVuZXJzID0gZ2V0RXhlY3V0aW9uTGlzdGVuZXJzQ29udGFpbmVyKGVsZW1lbnQpO1xuICByZXR1cm4gZXhlY3V0aW9uTGlzdGVuZXJzICYmIGV4ZWN1dGlvbkxpc3RlbmVycy5nZXQoJ2xpc3RlbmVycycpO1xufVxuZnVuY3Rpb24gY2FuSGF2ZUV4ZWN1dGlvbkxpc3RlbmVycyhibywgbW9kZGxlKSB7XG4gIGNvbnN0IGV4ZWN1dGlvbkxpc3RlbmVyc0Rlc2NyaXB0b3IgPSBtb2RkbGUuZ2V0VHlwZURlc2NyaXB0b3IoJ3plZWJlOkV4ZWN1dGlvbkxpc3RlbmVycycpO1xuICBpZiAoIWlzQW55JDEoYm8sIGV4ZWN1dGlvbkxpc3RlbmVyc0Rlc2NyaXB0b3IubWV0YS5hbGxvd2VkSW4pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5RXZlbnQoYm8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25Cb3VuZGFyeUV2ZW50KGJvKSB7XG4gIHJldHVybiBpcyhibywgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmIGdldENvbXBlbnNhdGVFdmVudERlZmluaXRpb24oYm8pO1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdExpc3RlbmVyUHJvcHMkMShlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZXMgPSBnZXRFdmVudFR5cGVzKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIGV2ZW50VHlwZTogZXZlbnRUeXBlc1swXVxuICB9O1xufVxuXG5jb25zdCBGT1JNX0tFWV9QUkVGSVggPSAnY2FtdW5kYS1mb3JtczpicG1uOicsXG4gIFVTRVJfVEFTS19GT1JNX0lEX1BSRUZJWCA9ICdVc2VyVGFza0Zvcm1fJztcbmNvbnN0IEZPUk1fVFlQRVMgPSB7XG4gIENBTVVOREFfRk9STV9FTUJFRERFRDogJ2NhbXVuZGEtZm9ybS1lbWJlZGRlZCcsXG4gIENBTVVOREFfRk9STV9MSU5LRUQ6ICdjYW11bmRhLWZvcm0tbGlua2VkJyxcbiAgQ1VTVE9NX0ZPUk06ICdjdXN0b20tZm9ybScsXG4gIEVYVEVSTkFMX1JFRkVSRU5DRTogJ2V4dGVybmFsLXJlZmVyZW5jZSdcbn07XG5mdW5jdGlvbiBnZXRGb3JtRGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGZvcm1EZWZpbml0aW9ucyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ3plZWJlOkZvcm1EZWZpbml0aW9uJyk7XG4gIHJldHVybiBmb3JtRGVmaW5pdGlvbnNbMF07XG59XG5mdW5jdGlvbiBnZXRVc2VyVGFza0Zvcm0oZWxlbWVudCwgcm9vdEVsZW1lbnQpIHtcbiAgcm9vdEVsZW1lbnQgPSByb290RWxlbWVudCB8fCBnZXRSb290RWxlbWVudCQxKGVsZW1lbnQpO1xuICBjb25zdCBmb3JtRGVmaW5pdGlvbiA9IGdldEZvcm1EZWZpbml0aW9uKGVsZW1lbnQpO1xuICBpZiAoIWZvcm1EZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGZvcm1LZXkgPSBmb3JtRGVmaW5pdGlvbi5nZXQoJ2Zvcm1LZXknKTtcbiAgY29uc3QgdXNlclRhc2tGb3JtcyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChyb290RWxlbWVudCwgJ3plZWJlOlVzZXJUYXNrRm9ybScpO1xuICByZXR1cm4gdXNlclRhc2tGb3Jtcy5maW5kKHVzZXJUYXNrRm9ybSA9PiB7XG4gICAgcmV0dXJuIHVzZXJUYXNrRm9ybUlkVG9Gb3JtS2V5KHVzZXJUYXNrRm9ybS5nZXQoJ2lkJykpID09PSBmb3JtS2V5O1xuICB9KTtcbn1cbmZ1bmN0aW9uIHVzZXJUYXNrRm9ybUlkVG9Gb3JtS2V5KHVzZXJUYXNrRm9ybUlkKSB7XG4gIHJldHVybiBgJHtGT1JNX0tFWV9QUkVGSVh9JHt1c2VyVGFza0Zvcm1JZH1gO1xufVxuZnVuY3Rpb24gY3JlYXRlVXNlclRhc2tGb3JtSWQoKSB7XG4gIHJldHVybiBuZXh0SWQoVVNFUl9UQVNLX0ZPUk1fSURfUFJFRklYKTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RFbGVtZW50JDEoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBsZXQgcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCAmJiAhaXMocGFyZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuZnVuY3Rpb24gZ2V0Rm9ybVR5cGUkMShlbGVtZW50KSB7XG4gIGNvbnN0IGZvcm1EZWZpbml0aW9uID0gZ2V0Rm9ybURlZmluaXRpb24oZWxlbWVudCk7XG4gIGlmICghZm9ybURlZmluaXRpb24pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZm9ybUlkID0gZm9ybURlZmluaXRpb24uZ2V0KCdmb3JtSWQnKSxcbiAgICBmb3JtS2V5ID0gZm9ybURlZmluaXRpb24uZ2V0KCdmb3JtS2V5JyksXG4gICAgZXh0ZXJuYWxSZWZlcmVuY2UgPSBmb3JtRGVmaW5pdGlvbi5nZXQoJ2V4dGVybmFsUmVmZXJlbmNlJyk7XG4gIGlmIChpc0RlZmluZWQoZm9ybUlkKSkge1xuICAgIHJldHVybiBGT1JNX1RZUEVTLkNBTVVOREFfRk9STV9MSU5LRUQ7XG4gIH1cbiAgaWYgKGlzRGVmaW5lZChleHRlcm5hbFJlZmVyZW5jZSkpIHtcbiAgICByZXR1cm4gRk9STV9UWVBFUy5FWFRFUk5BTF9SRUZFUkVOQ0U7XG4gIH1cbiAgaWYgKGlzRGVmaW5lZChmb3JtS2V5KSkge1xuICAgIGlmIChnZXRVc2VyVGFza0Zvcm0oZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBGT1JNX1RZUEVTLkNBTVVOREFfRk9STV9FTUJFRERFRDtcbiAgICB9XG4gICAgcmV0dXJuIEZPUk1fVFlQRVMuQ1VTVE9NX0ZPUk07XG4gIH1cbn1cbmZ1bmN0aW9uIGlzWmVlYmVVc2VyVGFzayQxKGVsZW1lbnQpIHtcbiAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChibywgJ3plZWJlOlVzZXJUYXNrJykubGVuZ3RoID4gMDtcbn1cblxuY29uc3QgRm9ybURlZmluaXRpb25CaW5kaW5nID0gd2l0aFByb3BzKEJpbmRpbmckMiwge1xuICAgIHR5cGU6ICd6ZWViZTpGb3JtRGVmaW5pdGlvbidcbiAgfSksXG4gIEZvcm1EZWZpbml0aW9uVmVyc2lvblRhZyA9IHdpdGhQcm9wcyhWZXJzaW9uVGFnJDMsIHtcbiAgICB0eXBlOiAnemVlYmU6Rm9ybURlZmluaXRpb24nXG4gIH0pO1xuY29uc3QgTk9ORV9WQUxVRSA9ICdub25lJztcbmZ1bmN0aW9uIEZvcm1Qcm9wcyQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiAnZm9ybVR5cGUnLFxuICAgIGNvbXBvbmVudDogRm9ybVR5cGUkMSxcbiAgICBpc0VkaXRlZDogbm9kZSA9PiBub2RlLnZhbHVlICE9PSBOT05FX1ZBTFVFXG4gIH1dO1xuICBjb25zdCBmb3JtVHlwZSA9IGdldEZvcm1UeXBlJDEoZWxlbWVudCk7XG4gIGlmIChmb3JtVHlwZSA9PT0gRk9STV9UWVBFUy5DQU1VTkRBX0ZPUk1fRU1CRURERUQpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdmb3JtQ29uZmlndXJhdGlvbicsXG4gICAgICBjb21wb25lbnQ6IEZvcm1Db25maWd1cmF0aW9uLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEFyZWFFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGZvcm1UeXBlID09PSBGT1JNX1RZUEVTLkNBTVVOREFfRk9STV9MSU5LRUQpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdmb3JtSWQnLFxuICAgICAgY29tcG9uZW50OiBGb3JtSWQsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGZvcm1UeXBlID09PSBGT1JNX1RZUEVTLkNVU1RPTV9GT1JNKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnY3VzdG9tRm9ybUtleScsXG4gICAgICBjb21wb25lbnQ6IEN1c3RvbUZvcm0sXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGZvcm1UeXBlID09PSBGT1JNX1RZUEVTLkVYVEVSTkFMX1JFRkVSRU5DRSkge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2V4dGVybmFsUmVmZXJlbmNlJyxcbiAgICAgIGNvbXBvbmVudDogRXh0ZXJuYWxSZWZlcmVuY2UsXG4gICAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICBpZiAoZm9ybVR5cGUgPT09IEZPUk1fVFlQRVMuQ0FNVU5EQV9GT1JNX0xJTktFRCkge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2JpbmRpbmdUeXBlJyxcbiAgICAgIGNvbXBvbmVudDogRm9ybURlZmluaXRpb25CaW5kaW5nLFxuICAgICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgICBpZiAoZ2V0QmluZGluZ1R5cGUoZWxlbWVudCwgJ3plZWJlOkZvcm1EZWZpbml0aW9uJykgPT09ICd2ZXJzaW9uVGFnJykge1xuICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgaWQ6ICd2ZXJzaW9uVGFnJyxcbiAgICAgICAgY29tcG9uZW50OiBGb3JtRGVmaW5pdGlvblZlcnNpb25UYWcsXG4gICAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBGb3JtVHlwZSQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaW5qZWN0b3IgPSB1c2VTZXJ2aWNlKCdpbmplY3RvcicpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0Rm9ybVR5cGUkMShlbGVtZW50KSB8fCBOT05FX1ZBTFVFO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBzZXRGb3JtVHlwZShpbmplY3RvciwgZWxlbWVudCwgdmFsdWUpO1xuICB9O1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRGb3JtVHlwZU9wdGlvbnModHJhbnNsYXRlLCBlbGVtZW50KTtcbiAgfTtcbiAgcmV0dXJuIFNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZm9ybVR5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1R5cGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gc2V0Rm9ybVR5cGUoaW5qZWN0b3IsIGVsZW1lbnQsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gRk9STV9UWVBFUy5DQU1VTkRBX0ZPUk1fRU1CRURERUQpIHtcbiAgICBzZXRVc2VyVGFza0Zvcm0oaW5qZWN0b3IsIGVsZW1lbnQsICcnKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gRk9STV9UWVBFUy5DQU1VTkRBX0ZPUk1fTElOS0VEKSB7XG4gICAgc2V0Rm9ybUlkKGluamVjdG9yLCBlbGVtZW50LCAnJyk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IEZPUk1fVFlQRVMuQ1VTVE9NX0ZPUk0pIHtcbiAgICBzZXRDdXN0b21Gb3JtS2V5KGluamVjdG9yLCBlbGVtZW50LCAnJyk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IEZPUk1fVFlQRVMuRVhURVJOQUxfUkVGRVJFTkNFKSB7XG4gICAgc2V0RXh0ZXJuYWxSZWZlcmVuY2UoaW5qZWN0b3IsIGVsZW1lbnQsICcnKTtcbiAgfSBlbHNlIHtcbiAgICByZW1vdmVGb3JtRGVmaW5pdGlvbihpbmplY3RvciwgZWxlbWVudCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZvcm1UeXBlT3B0aW9ucyh0cmFuc2xhdGUsIGVsZW1lbnQpIHtcbiAgaWYgKGlzWmVlYmVVc2VyVGFzayQxKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFt7XG4gICAgICB2YWx1ZTogTk9ORV9WQUxVRSxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJzxub25lPicpXG4gICAgfSwge1xuICAgICAgdmFsdWU6IEZPUk1fVFlQRVMuQ0FNVU5EQV9GT1JNX0xJTktFRCxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhbXVuZGEgRm9ybScpXG4gICAgfSwge1xuICAgICAgdmFsdWU6IEZPUk1fVFlQRVMuRVhURVJOQUxfUkVGRVJFTkNFLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXh0ZXJuYWwgZm9ybSByZWZlcmVuY2UnKVxuICAgIH1dO1xuICB9XG4gIHJldHVybiBbe1xuICAgIHZhbHVlOiBOT05FX1ZBTFVFLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJzxub25lPicpXG4gIH0sIHtcbiAgICB2YWx1ZTogRk9STV9UWVBFUy5DQU1VTkRBX0ZPUk1fTElOS0VELFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhbXVuZGEgRm9ybSAobGlua2VkKScpXG4gIH0sIHtcbiAgICB2YWx1ZTogRk9STV9UWVBFUy5DQU1VTkRBX0ZPUk1fRU1CRURERUQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FtdW5kYSBGb3JtIChlbWJlZGRlZCknKVxuICB9LCB7XG4gICAgdmFsdWU6IEZPUk1fVFlQRVMuQ1VTVE9NX0ZPUk0sXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ3VzdG9tIGZvcm0ga2V5JylcbiAgfV07XG59XG5mdW5jdGlvbiBGb3JtQ29uZmlndXJhdGlvbihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpLFxuICAgIGluamVjdG9yID0gdXNlU2VydmljZSgnaW5qZWN0b3InKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFVzZXJUYXNrRm9ybShlbGVtZW50KS5nZXQoJ2JvZHknKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgc2V0VXNlclRhc2tGb3JtKGluamVjdG9yLCBlbGVtZW50LCBpc1VuZGVmaW5lZCh2YWx1ZSkgPyAnJyA6IHZhbHVlKTtcbiAgfTtcbiAgcmV0dXJuIFRleHRBcmVhRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdmb3JtQ29uZmlndXJhdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRm9ybSBKU09OIGNvbmZpZ3VyYXRpb24nKSxcbiAgICByb3dzOiA0LFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gRm9ybUlkKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0JyksXG4gICAgaW5qZWN0b3IgPSB1c2VTZXJ2aWNlKCdpbmplY3RvcicpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0Rm9ybURlZmluaXRpb24oZWxlbWVudCkuZ2V0KCdmb3JtSWQnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgc2V0Rm9ybUlkKGluamVjdG9yLCBlbGVtZW50LCBpc1VuZGVmaW5lZCh2YWx1ZSkgPyAnJyA6IHZhbHVlKTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZm9ybUlkJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGb3JtIElEJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0JyksXG4gICAgaW5qZWN0b3IgPSB1c2VTZXJ2aWNlKCdpbmplY3RvcicpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICBjb25zdCBmb3JtRGVmaW5pdGlvbiA9IGdldEZvcm1EZWZpbml0aW9uKGVsZW1lbnQpO1xuICAgIHJldHVybiBmb3JtRGVmaW5pdGlvbi5nZXQoJ2Zvcm1LZXknKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgc2V0Q3VzdG9tRm9ybUtleShpbmplY3RvciwgZWxlbWVudCwgaXNVbmRlZmluZWQodmFsdWUpID8gJycgOiB2YWx1ZSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2N1c3RvbUZvcm1LZXknLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0N1c3RvbSBmb3JtIGtleScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gRXh0ZXJuYWxSZWZlcmVuY2UocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICBpbmplY3RvciA9IHVzZVNlcnZpY2UoJ2luamVjdG9yJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1EZWZpbml0aW9uID0gZ2V0Rm9ybURlZmluaXRpb24oZWxlbWVudCk7XG4gICAgcmV0dXJuIGZvcm1EZWZpbml0aW9uLmdldCgnZXh0ZXJuYWxSZWZlcmVuY2UnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgc2V0RXh0ZXJuYWxSZWZlcmVuY2UoaW5qZWN0b3IsIGVsZW1lbnQsIGlzVW5kZWZpbmVkKHZhbHVlKSA/ICcnIDogdmFsdWUpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2V4dGVybmFsUmVmZXJlbmNlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFeHRlcm5hbCBmb3JtIHJlZmVyZW5jZScpLFxuICAgIGZlZWw6ICdvcHRpb25hbCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsgeyBjbWQ6IHN0cmluZywgY29udGV4dDogT2JqZWN0IH0gfSBDb21tYW5kXG4gKiBAdHlwZWRlZiB7Q29tbWFuZFtdfSBDb21tYW5kc1xuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL21vZGVsL1R5cGVzJykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnYnBtbi1qcy9saWIvbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fSBNb2RkbGVFbGVtZW50XG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJ2RpZGknKS5JbmplY3Rvcn0gSW5qZWN0b3JcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7IHtcbiAqICAgY29tbWFuZHM6IENvbW1hbmRzLFxuICogICBleHRlbnNpb25FbGVtZW50czogTW9kZGxlRWxlbWVudFxuICogfSB9XG4gKi9cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoaW5qZWN0b3IsIGVsZW1lbnQsIG1vZGRsZUVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBtb2RkbGVFbGVtZW50IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gIGlmIChleHRlbnNpb25FbGVtZW50cykge1xuICAgIHJldHVybiB7XG4gICAgICBjb21tYW5kczogW10sXG4gICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgIH07XG4gIH1cbiAgY29uc3QgYnBtbkZhY3RvcnkgPSBpbmplY3Rvci5nZXQoJ2JwbW5GYWN0b3J5Jyk7XG4gIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICB2YWx1ZXM6IFtdXG4gIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gIHJldHVybiB7XG4gICAgY29tbWFuZHM6IFtjcmVhdGVVcGRhdGVNb2RkbGVQcm9wZXJ0aWVzQ29tbWFuZChlbGVtZW50LCBidXNpbmVzc09iamVjdCwge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICB9KV0sXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybnMgeyB7XG4qICAgY29tbWFuZHM6IENvbW1hbmRzLFxuKiAgIGZvcm1EZWZpbml0aW9uOiBNb2RkbGVFbGVtZW50XG4qIH0gfVxuKi9cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlRm9ybURlZmludGl0aW9uKGluamVjdG9yLCBlbGVtZW50KSB7XG4gIGxldCBmb3JtRGVmaW5pdGlvbiA9IGdldEZvcm1EZWZpbml0aW9uKGVsZW1lbnQpO1xuICBpZiAoZm9ybURlZmluaXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZHM6IFtdLFxuICAgICAgZm9ybURlZmluaXRpb25cbiAgICB9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBleHRlbnNpb25FbGVtZW50cyxcbiAgICBjb21tYW5kc1xuICB9ID0gZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhpbmplY3RvciwgZWxlbWVudCk7XG4gIGZvcm1EZWZpbml0aW9uID0gY3JlYXRlRm9ybURlZmluaXRpb24oaW5qZWN0b3IsIHt9LCBleHRlbnNpb25FbGVtZW50cyk7XG4gIHJldHVybiB7XG4gICAgY29tbWFuZHM6IFsuLi5jb21tYW5kcywgY3JlYXRlVXBkYXRlTW9kZGxlUHJvcGVydGllc0NvbW1hbmQoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudHMsIHtcbiAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGZvcm1EZWZpbml0aW9uXVxuICAgIH0pXSxcbiAgICBmb3JtRGVmaW5pdGlvblxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7IHtcbiAqICAgY29tbWFuZHM6IENvbW1hbmRzLFxuICogICBmb3JtRGVmaW5pdGlvbjogTW9kZGxlRWxlbWVudCxcbiAqICAgdXNlclRhc2tGb3JtOiBNb2RkbGVFbGVtZW50XG4gKiB9IH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3JDcmVhdGVVc2VyVGFza0Zvcm0oaW5qZWN0b3IsIGVsZW1lbnQpIHtcbiAgbGV0IHVzZXJUYXNrRm9ybSA9IGdldFVzZXJUYXNrRm9ybShlbGVtZW50KTtcbiAgaWYgKHVzZXJUYXNrRm9ybSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb21tYW5kczogW10sXG4gICAgICBmb3JtRGVmaW5pdGlvbjogZ2V0Rm9ybURlZmluaXRpb24oZWxlbWVudCksXG4gICAgICB1c2VyVGFza0Zvcm1cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50ID0gZ2V0Um9vdEVsZW1lbnQkMShlbGVtZW50KTtcbiAgY29uc3Qge1xuICAgIGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgIGNvbW1hbmRzOiBleHRlbnNpb25FbGVtZW50c0NvbW1hbmRzXG4gIH0gPSBnZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGluamVjdG9yLCBlbGVtZW50LCByb290RWxlbWVudCk7XG4gIGNvbnN0IHtcbiAgICBmb3JtRGVmaW5pdGlvbixcbiAgICBjb21tYW5kczogZm9ybURlZmluaXRpb25Db21tYW5kc1xuICB9ID0gZ2V0T3JDcmVhdGVGb3JtRGVmaW50aXRpb24oaW5qZWN0b3IsIGVsZW1lbnQpO1xuICBjb25zdCBmb3JtSWQgPSBjcmVhdGVVc2VyVGFza0Zvcm1JZCgpO1xuICB1c2VyVGFza0Zvcm0gPSBjcmVhdGVVc2VyVGFza0Zvcm0oaW5qZWN0b3IsIHtcbiAgICBpZDogZm9ybUlkXG4gIH0sIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzQ29tbWFuZHMsIC4uLmZvcm1EZWZpbml0aW9uQ29tbWFuZHMsIGNyZWF0ZVVwZGF0ZU1vZGRsZVByb3BlcnRpZXNDb21tYW5kKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRzLCB7XG4gICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB1c2VyVGFza0Zvcm1dXG4gICAgfSksIGNyZWF0ZVVwZGF0ZU1vZGRsZVByb3BlcnRpZXNDb21tYW5kKGVsZW1lbnQsIGZvcm1EZWZpbml0aW9uLCB7XG4gICAgICBmb3JtS2V5OiB1c2VyVGFza0Zvcm1JZFRvRm9ybUtleShmb3JtSWQpXG4gICAgfSldLFxuICAgIGZvcm1EZWZpbml0aW9uLFxuICAgIHVzZXJUYXNrRm9ybVxuICB9O1xufVxuZnVuY3Rpb24gc2V0Rm9ybUlkKGluamVjdG9yLCBlbGVtZW50LCBmb3JtSWQpIHtcbiAgbGV0IHtcbiAgICBjb21tYW5kcyxcbiAgICBmb3JtRGVmaW5pdGlvblxuICB9ID0gZ2V0T3JDcmVhdGVGb3JtRGVmaW50aXRpb24oaW5qZWN0b3IsIGVsZW1lbnQpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSBpbmplY3Rvci5nZXQoJ2NvbW1hbmRTdGFjaycpO1xuICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgWy4uLmNvbW1hbmRzLCBjcmVhdGVVcGRhdGVNb2RkbGVQcm9wZXJ0aWVzQ29tbWFuZChlbGVtZW50LCBmb3JtRGVmaW5pdGlvbiwge1xuICAgIGZvcm1JZFxuICB9KV0pO1xufVxuZnVuY3Rpb24gc2V0Q3VzdG9tRm9ybUtleShpbmplY3RvciwgZWxlbWVudCwgZm9ybUtleSkge1xuICBsZXQge1xuICAgIGNvbW1hbmRzLFxuICAgIGZvcm1EZWZpbml0aW9uXG4gIH0gPSBnZXRPckNyZWF0ZUZvcm1EZWZpbnRpdGlvbihpbmplY3RvciwgZWxlbWVudCk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBbLi4uY29tbWFuZHMsIGNyZWF0ZVVwZGF0ZU1vZGRsZVByb3BlcnRpZXNDb21tYW5kKGVsZW1lbnQsIGZvcm1EZWZpbml0aW9uLCB7XG4gICAgZm9ybUtleVxuICB9KV0pO1xufVxuZnVuY3Rpb24gc2V0RXh0ZXJuYWxSZWZlcmVuY2UoaW5qZWN0b3IsIGVsZW1lbnQsIGV4dGVybmFsUmVmZXJlbmNlKSB7XG4gIGxldCB7XG4gICAgY29tbWFuZHMsXG4gICAgZm9ybURlZmluaXRpb25cbiAgfSA9IGdldE9yQ3JlYXRlRm9ybURlZmludGl0aW9uKGluamVjdG9yLCBlbGVtZW50KTtcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snKTtcbiAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIFsuLi5jb21tYW5kcywgY3JlYXRlVXBkYXRlTW9kZGxlUHJvcGVydGllc0NvbW1hbmQoZWxlbWVudCwgZm9ybURlZmluaXRpb24sIHtcbiAgICBleHRlcm5hbFJlZmVyZW5jZVxuICB9KV0pO1xufVxuZnVuY3Rpb24gc2V0VXNlclRhc2tGb3JtKGluamVjdG9yLCBlbGVtZW50LCBib2R5KSB7XG4gIGxldCB7XG4gICAgY29tbWFuZHMsXG4gICAgdXNlclRhc2tGb3JtXG4gIH0gPSBnZXRPckNyZWF0ZVVzZXJUYXNrRm9ybShpbmplY3RvciwgZWxlbWVudCk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBbLi4uY29tbWFuZHMsIGNyZWF0ZVVwZGF0ZU1vZGRsZVByb3BlcnRpZXNDb21tYW5kKGVsZW1lbnQsIHVzZXJUYXNrRm9ybSwge1xuICAgIGJvZHlcbiAgfSldKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUZvcm1EZWZpbml0aW9uKGluamVjdG9yLCBlbGVtZW50KSB7XG4gIGNvbnN0IGZvcm1EZWZpbml0aW9uID0gZ2V0Rm9ybURlZmluaXRpb24oZWxlbWVudCk7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtpbXBvcnQoJ2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nJykuZGVmYXVsdH1cbiAgICovXG4gIGNvbnN0IG1vZGVsaW5nID0gaW5qZWN0b3IuZ2V0KCdtb2RlbGluZycpO1xuICBpZiAoZm9ybURlZmluaXRpb24pIHtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBleHRlbnNpb25FbGVtZW50cywge1xuICAgICAgdmFsdWVzOiB3aXRob3V0KGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGZvcm1EZWZpbml0aW9uKVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHBhcmVudFxuICpcbiAqIEByZXR1cm5zIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVGb3JtRGVmaW5pdGlvbihpbmplY3RvciwgcHJvcGVydGllcywgcGFyZW50KSB7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnemVlYmU6Rm9ybURlZmluaXRpb24nLCBwcm9wZXJ0aWVzLCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKlxuICogQHJldHVybnMge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVVzZXJUYXNrRm9ybShpbmplY3RvciwgcHJvcGVydGllcywgcGFyZW50KSB7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnemVlYmU6VXNlclRhc2tGb3JtJywgcHJvcGVydGllcywgcGFyZW50LCBicG1uRmFjdG9yeSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IG1vZGRsZUVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzXG4gKlxuICogQHJldHVybnMge0NvbW1hbmR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZU1vZGRsZVByb3BlcnRpZXNDb21tYW5kKGVsZW1lbnQsIG1vZGRsZUVsZW1lbnQsIHByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50LFxuICAgICAgcHJvcGVydGllc1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBoZWFkZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW3tcbiAgICBpZDogaWRQcmVmaXggKyAnLWtleScsXG4gICAgY29tcG9uZW50OiBLZXlQcm9wZXJ0eSxcbiAgICBoZWFkZXIsXG4gICAgaWRQcmVmaXhcbiAgfSwge1xuICAgIGlkOiBpZFByZWZpeCArICctdmFsdWUnLFxuICAgIGNvbXBvbmVudDogVmFsdWVQcm9wZXJ0eSQyLFxuICAgIGhlYWRlcixcbiAgICBpZFByZWZpeFxuICB9XTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBLZXlQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBoZWFkZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGhlYWRlcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAga2V5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9IGhlYWRlciA9PiB7XG4gICAgcmV0dXJuIGhlYWRlci5rZXk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogaGVhZGVyLFxuICAgIGlkOiBpZFByZWZpeCArICcta2V5JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdLZXknKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFZhbHVlUHJvcGVydHkkMihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBoZWFkZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGhlYWRlcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0VmFsdWUgPSBoZWFkZXIgPT4ge1xuICAgIHJldHVybiBoZWFkZXIudmFsdWU7XG4gIH07XG4gIHJldHVybiBUZXh0QXJlYUVudHJ5KHtcbiAgICBlbGVtZW50OiBoZWFkZXIsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy12YWx1ZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFsdWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZSxcbiAgICBhdXRvUmVzaXplOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBIZWFkZXJQcm9wcyh7XG4gIGVsZW1lbnQsXG4gIGluamVjdG9yXG59KSB7XG4gIGlmICghYXJlSGVhZGVyc1N1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGhlYWRlcnMgPSBnZXRIZWFkZXJzKGVsZW1lbnQpIHx8IFtdO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IGluamVjdG9yLmdldCgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSBpbmplY3Rvci5nZXQoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBpdGVtcyA9IGhlYWRlcnMubWFwKChoZWFkZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBlbGVtZW50LmlkICsgJy1oZWFkZXItJyArIGluZGV4O1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiBoZWFkZXIuZ2V0KCdrZXknKSB8fCAnJyxcbiAgICAgIGVudHJpZXM6IEhlYWRlcih7XG4gICAgICAgIGlkUHJlZml4OiBpZCxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaGVhZGVyXG4gICAgICB9KSxcbiAgICAgIGF1dG9Gb2N1c0VudHJ5OiBpZCArICcta2V5JyxcbiAgICAgIHJlbW92ZTogcmVtb3ZlRmFjdG9yeSRkKHtcbiAgICAgICAgY29tbWFuZFN0YWNrLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBoZWFkZXJcbiAgICAgIH0pXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgYWRkOiBhZGRGYWN0b3J5JGEoe1xuICAgICAgYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2ssXG4gICAgICBlbGVtZW50XG4gICAgfSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUZhY3RvcnkkZCh7XG4gIGNvbW1hbmRTdGFjayxcbiAgZWxlbWVudCxcbiAgaGVhZGVyXG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCB0YXNrSGVhZGVycyA9IGdldFRhc2tIZWFkZXJzJDEoZWxlbWVudCk7XG4gICAgaWYgKCF0YXNrSGVhZGVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdUYXNrSGVhZGVycyA9IHdpdGhvdXQodGFza0hlYWRlcnMuZ2V0KCd2YWx1ZXMnKSwgaGVhZGVyKTtcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IHRhc2tIZWFkZXJzLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsdWVzOiBuZXdUYXNrSGVhZGVyc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgemVlYmU6VGFza0hlYWRlcnMgaWYgdGhlcmUgYXJlIG5vIGhlYWRlcnMgYW55bW9yZVxuICAgIGlmICghbmV3VGFza0hlYWRlcnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQoZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgdGFza0hlYWRlcnMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGFkZEZhY3RvcnkkYSh7XG4gIGJwbW5GYWN0b3J5LFxuICBjb21tYW5kU3RhY2ssXG4gIGVsZW1lbnRcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgemVlYmU6VGFza0hlYWRlcnNcbiAgICBsZXQgdGFza0hlYWRlcnMgPSBnZXRUYXNrSGVhZGVycyQxKGVsZW1lbnQpO1xuICAgIGlmICghdGFza0hlYWRlcnMpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGV4dGVuc2lvbkVsZW1lbnRzO1xuICAgICAgdGFza0hlYWRlcnMgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpUYXNrSGVhZGVycycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgdGFza0hlYWRlcnNdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMykgY3JlYXRlIGhlYWRlclxuICAgIGNvbnN0IGhlYWRlciA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOkhlYWRlcicsIHt9LCB0YXNrSGVhZGVycywgYnBtbkZhY3RvcnkpO1xuXG4gICAgLy8gKDQpIGFkZCBoZWFkZXIgdG8gbGlzdFxuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogdGFza0hlYWRlcnMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IFsuLi50YXNrSGVhZGVycy5nZXQoJ3ZhbHVlcycpLCBoZWFkZXJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRQcm9jZXNzSWQoZWxlbWVudCkge1xuICBjb25zdCBjYWxsZWRFbGVtZW50ID0gZ2V0Q2FsbGVkRWxlbWVudChlbGVtZW50KTtcbiAgcmV0dXJuIGNhbGxlZEVsZW1lbnQgPyBjYWxsZWRFbGVtZW50LmdldCgncHJvY2Vzc0lkJykgOiAnJztcbn1cbmZ1bmN0aW9uIGdldENhbGxlZEVsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCBjYWxsZWRFbGVtZW50cyA9IGdldENhbGxlZEVsZW1lbnRzKGVsZW1lbnQpO1xuICByZXR1cm4gY2FsbGVkRWxlbWVudHNbMF07XG59XG5mdW5jdGlvbiBnZXRDYWxsZWRFbGVtZW50cyhlbGVtZW50KSB7XG4gIGNvbnN0IGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGV4dEVsZW1lbnRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJvLCAnemVlYmU6Q2FsbGVkRWxlbWVudCcpO1xuICByZXR1cm4gZXh0RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIElucHV0UHJvcGFnYXRpb25Qcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5JykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICdwcm9wYWdhdGVBbGxQYXJlbnRWYXJpYWJsZXMnLFxuICAgIGNvbXBvbmVudDogUHJvcGFnYXRlQWxsUGFyZW50VmFyaWFibGVzLFxuICAgIGlzRWRpdGVkOiBpc1RvZ2dsZVN3aXRjaEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gUHJvcGFnYXRlQWxsUGFyZW50VmFyaWFibGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBwcm9wYWdhdGVBbGxQYXJlbnRWYXJpYWJsZXMgPSBpc1Byb3BhZ2F0ZUFsbFBhcmVudFZhcmlhYmxlcyhlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHByb3BhZ2F0ZUFsbFBhcmVudFZhcmlhYmxlcztcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgZW5zdXJlIHplZWJlOmNhbGxlZEVsZW1lbnRcbiAgICBsZXQgY2FsbGVkRWxlbWVudCA9IGdldENhbGxlZEVsZW1lbnQoYnVzaW5lc3NPYmplY3QpO1xuICAgIGlmICghY2FsbGVkRWxlbWVudCkge1xuICAgICAgY2FsbGVkRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOkNhbGxlZEVsZW1lbnQnLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBjYWxsZWRFbGVtZW50XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIFVwZGF0ZSBwcm9wYWdhdGVBbGxQYXJlbnRWYXJpYWJsZXMgYXR0cmlidXRlXG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBjYWxsZWRFbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcHJvcGFnYXRlQWxsUGFyZW50VmFyaWFibGVzOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgRXhlY3V0ZSB0aGUgY29tbWFuZHNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICByZXR1cm4gVG9nZ2xlU3dpdGNoRW50cnkoe1xuICAgIGlkOiAncHJvcGFnYXRlQWxsUGFyZW50VmFyaWFibGVzJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9wYWdhdGUgYWxsIHBhcmVudCBwcm9jZXNzIHZhcmlhYmxlcycpLFxuICAgIHN3aXRjaGVyTGFiZWw6IHByb3BhZ2F0ZUFsbFBhcmVudFZhcmlhYmxlcyA/IHRyYW5zbGF0ZSgnT24nKSA6IHRyYW5zbGF0ZSgnT2ZmJyksXG4gICAgdG9vbHRpcDoganN4cyhcImRpdlwiLCB7XG4gICAgICBjaGlsZHJlbjogW2pzeChcInBcIiwge1xuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdJZiB0dXJuZWQgb24sIGFsbCB2YXJpYWJsZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MgaW5zdGFuY2Ugd2lsbCBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjaGlsZCBwcm9jZXNzIGluc3RhbmNlLicpXG4gICAgICB9KSwganN4KFwicFwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ090aGVyd2lzZSwgb25seSB2YXJpYWJsZXMgZGVmaW5lZCB2aWEgaW5wdXQgbWFwcGluZ3Mgd2lsbCBiZSBwcm9wYWdhdGVkLicpXG4gICAgICB9KV1cbiAgICB9KSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BhZ2F0ZUFsbFBhcmVudFZhcmlhYmxlcyBhdHRyaWJ1dGUgaXMgc2V0IG9uIGFuIGVsZW1lbnQuXG4gICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcbiAgKlxuICAqIEByZXR1cm5zIHtib29sZWFufVxuICAqL1xuZnVuY3Rpb24gaXNQcm9wYWdhdGVBbGxQYXJlbnRWYXJpYWJsZXMoZWxlbWVudCkge1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOkNhbGxBY3Rpdml0eScpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgIGNhbGxlZEVsZW1lbnQgPSBnZXRDYWxsZWRFbGVtZW50KGJvKTtcbiAgcmV0dXJuIGNhbGxlZEVsZW1lbnQgJiYgaGFzKGNhbGxlZEVsZW1lbnQsICdwcm9wYWdhdGVBbGxQYXJlbnRWYXJpYWJsZXMnKSA/IGNhbGxlZEVsZW1lbnQuZ2V0KCdwcm9wYWdhdGVBbGxQYXJlbnRWYXJpYWJsZXMnKSA6IC8qIGRlZmF1bHQgdmFsdWUgKi90cnVlO1xufVxuXG5mdW5jdGlvbiBJbnB1dE91dHB1dFBhcmFtZXRlciQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBwYXJhbWV0ZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW3tcbiAgICBpZDogaWRQcmVmaXggKyAnLXRhcmdldCcsXG4gICAgY29tcG9uZW50OiBUYXJnZXRQcm9wZXJ0eSxcbiAgICBpZFByZWZpeCxcbiAgICBwYXJhbWV0ZXJcbiAgfSwge1xuICAgIGlkOiBpZFByZWZpeCArICctc291cmNlJyxcbiAgICBjb21wb25lbnQ6IFNvdXJjZVByb3BlcnR5LFxuICAgIGlkUHJlZml4LFxuICAgIHBhcmFtZXRlclxuICB9XTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBUYXJnZXRQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBwYXJhbWV0ZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHBhcmFtZXRlcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdGFyZ2V0OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9IHBhcmFtZXRlciA9PiB7XG4gICAgcmV0dXJuIHBhcmFtZXRlci50YXJnZXQ7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogcGFyYW1ldGVyLFxuICAgIGlkOiBpZFByZWZpeCArICctdGFyZ2V0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKGlzKHBhcmFtZXRlciwgJ3plZWJlOklucHV0JykgPyAnTG9jYWwgdmFyaWFibGUgbmFtZScgOiAnUHJvY2VzcyB2YXJpYWJsZSBuYW1lJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBTb3VyY2VQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBwYXJhbWV0ZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHBhcmFtZXRlcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc291cmNlOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9IHBhcmFtZXRlciA9PiB7XG4gICAgcmV0dXJuIHBhcmFtZXRlci5zb3VyY2U7XG4gIH07XG4gIHJldHVybiBGZWVsRW50cnlXaXRoVmFyaWFibGVDb250ZXh0KHtcbiAgICBicG1uRWxlbWVudDogZWxlbWVudCxcbiAgICBlbGVtZW50OiBwYXJhbWV0ZXIsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1zb3VyY2UnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhcmlhYmxlIGFzc2lnbm1lbnQgdmFsdWUnKSxcbiAgICBmZWVsOiAncmVxdWlyZWQnLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50cyQxKGJvLCB0eXBlLCBwcm9wKSB7XG4gIGNvbnN0IGVsZW1zID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJvLCB0eXBlKTtcbiAgcmV0dXJuICFwcm9wID8gZWxlbXMgOiAoZWxlbXNbMF0gfHwge30pW3Byb3BdIHx8IFtdO1xufVxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVycyQxKGVsZW1lbnQsIHByb3ApIHtcbiAgY29uc3QgaW9NYXBwaW5nID0gZ2V0SW9NYXBwaW5nKGVsZW1lbnQpO1xuICByZXR1cm4gaW9NYXBwaW5nICYmIGlvTWFwcGluZy5nZXQocHJvcCkgfHwgW107XG59XG5cbi8qKlxuICogR2V0IGEgaW9NYXBwaW5nIGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgaW9NYXBwaW5nIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRJb01hcHBpbmcoZWxlbWVudCkge1xuICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gKGdldEVsZW1lbnRzJDEoYm8sICd6ZWViZTpJb01hcHBpbmcnKSB8fCBbXSlbMF07XG59XG5cbi8qKlxuICogUmV0dXJuIGFsbCBpbnB1dCBwYXJhbWV0ZXJzIGV4aXN0aW5nIGluIHRoZSBidXNpbmVzcyBvYmplY3QsIGFuZFxuICogYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBleGlzdC5cbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5fSBhIGxpc3Qgb2YgaW5wdXQgcGFyYW1ldGVyIG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gZ2V0SW5wdXRQYXJhbWV0ZXJzJDEoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0UGFyYW1ldGVycyQxLmFwcGx5KHRoaXMsIFtlbGVtZW50LCAnaW5wdXRQYXJhbWV0ZXJzJ10pO1xufVxuXG4vKipcbiAqIFJldHVybiBhbGwgb3V0cHV0IHBhcmFtZXRlcnMgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdCwgYW5kXG4gKiBhbiBlbXB0eSBhcnJheSBpZiBub25lIGV4aXN0LlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXl9IGEgbGlzdCBvZiBvdXRwdXQgcGFyYW1ldGVyIG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gZ2V0T3V0cHV0UGFyYW1ldGVycyQxKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFBhcmFtZXRlcnMkMS5hcHBseSh0aGlzLCBbZWxlbWVudCwgJ291dHB1dFBhcmFtZXRlcnMnXSk7XG59XG5mdW5jdGlvbiBhcmVJbnB1dFBhcmFtZXRlcnNTdXBwb3J0ZWQkMShlbGVtZW50KSB7XG4gIHJldHVybiBpc0FueShlbGVtZW50LCBbJ2JwbW46VXNlclRhc2snLCAnYnBtbjpTdWJQcm9jZXNzJywgJ2JwbW46Q2FsbEFjdGl2aXR5JywgJ2JwbW46QnVzaW5lc3NSdWxlVGFzaycsICdicG1uOlNjcmlwdFRhc2snXSkgfHwgaXNaZWViZVNlcnZpY2VUYXNrKGVsZW1lbnQpIHx8IGlzU2lnbmFsVGhyb3dFdmVudChlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGFyZU91dHB1dFBhcmFtZXRlcnNTdXBwb3J0ZWQkMShlbGVtZW50KSB7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFbmRFdmVudCcpICYmIChnZXRFcnJvckV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQpIHx8IGdldFRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFsnemVlYmU6WmVlYmVTZXJ2aWNlVGFzaycsICdicG1uOlVzZXJUYXNrJywgJ2JwbW46U3ViUHJvY2VzcycsICdicG1uOlJlY2VpdmVUYXNrJywgJ2JwbW46Q2FsbEFjdGl2aXR5JywgJ2JwbW46RXZlbnQnLCAnYnBtbjpCdXNpbmVzc1J1bGVUYXNrJ10pO1xufVxuZnVuY3Rpb24gZ2V0VGVybWluYXRlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQsICdicG1uOlRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbicpO1xufVxuZnVuY3Rpb24gY3JlYXRlSU9NYXBwaW5nKHByb3BlcnRpZXMsIHBhcmVudCwgYnBtbkZhY3RvcnkpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ3plZWJlOklvTWFwcGluZycsIHByb3BlcnRpZXMsIHBhcmVudCwgYnBtbkZhY3RvcnkpO1xufVxuZnVuY3Rpb24gaXNTaWduYWxUaHJvd0V2ZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0FueShlbGVtZW50LCBbJ2JwbW46RW5kRXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J10pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhIWdldEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpO1xufVxuXG5mdW5jdGlvbiBJbnB1dFByb3BzJDEoe1xuICBlbGVtZW50LFxuICBpbmplY3RvclxufSkge1xuICBpZiAoIWFyZUlucHV0UGFyYW1ldGVyc1N1cHBvcnRlZCQxKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgaW5wdXRQYXJhbWV0ZXJzID0gZ2V0SW5wdXRQYXJhbWV0ZXJzJDEoZWxlbWVudCkgfHwgW107XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGl0ZW1zID0gaW5wdXRQYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZCArICctaW5wdXQtJyArIGluZGV4O1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiBwYXJhbWV0ZXIuZ2V0KCd0YXJnZXQnKSB8fCAnJyxcbiAgICAgIGVudHJpZXM6IElucHV0T3V0cHV0UGFyYW1ldGVyJDEoe1xuICAgICAgICBpZFByZWZpeDogaWQsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHBhcmFtZXRlclxuICAgICAgfSksXG4gICAgICBhdXRvRm9jdXNFbnRyeTogaWQgKyAnLXRhcmdldCcsXG4gICAgICByZW1vdmU6IHJlbW92ZUZhY3RvcnkkYyh7XG4gICAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcGFyYW1ldGVyXG4gICAgICB9KVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGl0ZW1zLFxuICAgIGFkZDogYWRkRmFjdG9yeSQ5KHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFja1xuICAgIH0pXG4gIH07XG59XG5mdW5jdGlvbiByZW1vdmVGYWN0b3J5JGMoe1xuICBjb21tYW5kU3RhY2ssXG4gIGVsZW1lbnQsXG4gIHBhcmFtZXRlclxufSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBpb01hcHBpbmcgPSBnZXRJb01hcHBpbmcoZWxlbWVudCk7XG4gICAgaWYgKCFpb01hcHBpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRQYXJhbWV0ZXJzID0gd2l0aG91dChpb01hcHBpbmcuZ2V0KCdpbnB1dFBhcmFtZXRlcnMnKSwgcGFyYW1ldGVyKTtcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlvTWFwcGluZyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGlucHV0UGFyYW1ldGVyc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpLFxuICAgICAgdmFsdWVzID0gd2l0aG91dChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBpb01hcHBpbmcpO1xuXG4gICAgLy8gcmVtb3ZlIGlvTWFwcGluZyBpZiB0aGVyZSBhcmUgbm8gaW5wdXQvb3V0cHV0IHBhcmFtZXRlcnMgYW55bW9yZVxuICAgIGlmICghaW5wdXRQYXJhbWV0ZXJzLmxlbmd0aCAmJiAhaW9NYXBwaW5nLmdldCgnb3V0cHV0UGFyYW1ldGVycycpLmxlbmd0aCkge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG59XG5mdW5jdGlvbiBhZGRGYWN0b3J5JDkoe1xuICBlbGVtZW50LFxuICBicG1uRmFjdG9yeSxcbiAgY29tbWFuZFN0YWNrXG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgSW9NYXBwaW5nXG4gICAgbGV0IGlvTWFwcGluZyA9IGdldElvTWFwcGluZyhlbGVtZW50KTtcbiAgICBpZiAoIWlvTWFwcGluZykge1xuICAgICAgaW9NYXBwaW5nID0gY3JlYXRlSU9NYXBwaW5nKHtcbiAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiBbXSxcbiAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogW11cbiAgICAgIH0sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgaW9NYXBwaW5nXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIGNyZWF0ZSBwYXJhbWV0ZXJcbiAgICBjb25zdCBuZXdQYXJhbWV0ZXIgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpJbnB1dCcsIHtcbiAgICAgIHRhcmdldDogbmV4dElkKCdJbnB1dFZhcmlhYmxlXycpXG4gICAgfSwgaW9NYXBwaW5nLCBicG1uRmFjdG9yeSk7XG5cbiAgICAvLyAoNCkgYWRkIHBhcmFtZXRlciB0byBsaXN0XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBpb01hcHBpbmcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBpbnB1dFBhcmFtZXRlcnM6IFsuLi5pb01hcHBpbmcuZ2V0KCdpbnB1dFBhcmFtZXRlcnMnKSwgbmV3UGFyYW1ldGVyXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gTWVzc2FnZVByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbWVzc2FnZSA9IGdldE1lc3NhZ2UoZWxlbWVudCk7XG4gIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgaWYgKG1lc3NhZ2UpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdtZXNzYWdlTmFtZScsXG4gICAgICBjb21wb25lbnQ6IE1lc3NhZ2VOYW1lLFxuICAgICAgaXNFZGl0ZWQ6IGlzRmVlbEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgJiYgY2FuSGF2ZVN1YnNjcmlwdGlvbkNvcnJlbGF0aW9uS2V5KGVsZW1lbnQpKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnbWVzc2FnZVN1YnNjcmlwdGlvbkNvcnJlbGF0aW9uS2V5JyxcbiAgICAgIGNvbXBvbmVudDogU3Vic2NyaXB0aW9uQ29ycmVsYXRpb25LZXksXG4gICAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIE1lc3NhZ2VOYW1lKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgbWVzc2FnZSA9IGdldE1lc3NhZ2UoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBtZXNzYWdlLmdldCgnbmFtZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBtZXNzYWdlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBuYW1lOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ21lc3NhZ2VOYW1lJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdOYW1lJyksXG4gICAgZmVlbDogJ29wdGlvbmFsJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFN1YnNjcmlwdGlvbkNvcnJlbGF0aW9uS2V5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0Q29ycmVsYXRpb25LZXkoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIGNvcnJlbGF0aW9uS2V5OiB2YWx1ZVxuICAgIH07XG4gICAgY29uc3QgbWVzc2FnZSA9IGdldE1lc3NhZ2UoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gbWVzc2FnZS5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgbWVzc2FnZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG1lc3NhZ2UsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgc3Vic2NyaXB0aW9uID0gZ2V0U3Vic2NyaXB0aW9uKGVsZW1lbnQpO1xuXG4gICAgLy8gKDJhKSBhZGQgc3Vic2NyaXB0aW9uIHdpdGggY29ycmVsYXRpb24ga2V5XG4gICAgaWYgKCFzdWJzY3JpcHRpb24pIHtcbiAgICAgIHN1YnNjcmlwdGlvbiA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOlN1YnNjcmlwdGlvbicsIHByb3BlcnRpZXMsIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgc3Vic2NyaXB0aW9uXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICgyYikgdXBkYXRlIGV4aXN0aW5nIHN1YnNjcmlwdGlvbidzIGNvcnJlbGF0aW9uIGtleVxuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogc3Vic2NyaXB0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgzKSBjb21taXQgYWxsIHVwZGF0ZXNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ21lc3NhZ2VTdWJzY3JpcHRpb25Db3JyZWxhdGlvbktleScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU3Vic2NyaXB0aW9uIGNvcnJlbGF0aW9uIGtleScpLFxuICAgIGZlZWw6ICdyZXF1aXJlZCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjYW5IYXZlU3Vic2NyaXB0aW9uQ29ycmVsYXRpb25LZXkoZWxlbWVudCkge1xuICAvLyAoMSkgYWxsb3cgZm9yIHJlY2VpdmUgdGFza1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gKDIpIGFsbG93IGZvciBub24gc3RhcnQgZXZlbnRzXG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyAoMykgYWxsb3cgZm9yIHN0YXJ0IGV2ZW50cyBpbnNpZGUgZXZlbnQgc3ViIHByb2Nlc3Nlc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmIGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQucGFyZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldENvcnJlbGF0aW9uS2V5KGVsZW1lbnQpIHtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZ2V0U3Vic2NyaXB0aW9uKGVsZW1lbnQpO1xuICByZXR1cm4gc3Vic2NyaXB0aW9uID8gc3Vic2NyaXB0aW9uLmdldCgnY29ycmVsYXRpb25LZXknKSA6ICcnO1xufVxuZnVuY3Rpb24gZ2V0U3Vic2NyaXB0aW9uKGVsZW1lbnQpIHtcbiAgY29uc3QgbWVzc2FnZSA9IGdldE1lc3NhZ2UoZWxlbWVudCk7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBnZXRTdWJzY3JpcHRpb25zKG1lc3NhZ2UpO1xuICByZXR1cm4gc3Vic2NyaXB0aW9uc1swXTtcbn1cbmZ1bmN0aW9uIGdldFN1YnNjcmlwdGlvbnMobWVzc2FnZSkge1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChtZXNzYWdlLCAnemVlYmU6U3Vic2NyaXB0aW9uJyk7XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50cztcbn1cblxuZnVuY3Rpb24gTXVsdGlJbnN0YW5jZVByb3BzJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIXN1cHBvcnRzTXVsdGlJbnN0YW5jZXMoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWlucHV0Q29sbGVjdGlvbicsXG4gICAgY29tcG9uZW50OiBJbnB1dENvbGxlY3Rpb24sXG4gICAgaXNFZGl0ZWQ6IGlzRmVlbEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtaW5wdXRFbGVtZW50JyxcbiAgICBjb21wb25lbnQ6IElucHV0RWxlbWVudCxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9LCB7XG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLW91dHB1dENvbGxlY3Rpb24nLFxuICAgIGNvbXBvbmVudDogT3V0cHV0Q29sbGVjdGlvbixcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9LCB7XG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLW91dHB1dEVsZW1lbnQnLFxuICAgIGNvbXBvbmVudDogT3V0cHV0RWxlbWVudCxcbiAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAnbXVsdGlJbnN0YW5jZS1jb21wbGV0aW9uQ29uZGl0aW9uJyxcbiAgICBjb21wb25lbnQ6IENvbXBsZXRpb25Db25kaXRpb24sXG4gICAgaXNFZGl0ZWQ6IGlzRmVlbEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gSW5wdXRDb2xsZWN0aW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0UHJvcGVydHkkMShlbGVtZW50LCAnaW5wdXRDb2xsZWN0aW9uJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBzZXRQcm9wZXJ0eShlbGVtZW50LCAnaW5wdXRDb2xsZWN0aW9uJywgdmFsdWUsIGNvbW1hbmRTdGFjaywgYnBtbkZhY3RvcnkpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ211bHRpSW5zdGFuY2UtaW5wdXRDb2xsZWN0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dCBjb2xsZWN0aW9uJyksXG4gICAgZmVlbDogJ3JlcXVpcmVkJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIElucHV0RWxlbWVudChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFByb3BlcnR5JDEoZWxlbWVudCwgJ2lucHV0RWxlbWVudCcpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gc2V0UHJvcGVydHkoZWxlbWVudCwgJ2lucHV0RWxlbWVudCcsIHZhbHVlLCBjb21tYW5kU3RhY2ssIGJwbW5GYWN0b3J5KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbXVsdGlJbnN0YW5jZS1pbnB1dEVsZW1lbnQnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0lucHV0IGVsZW1lbnQnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIE91dHB1dENvbGxlY3Rpb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRQcm9wZXJ0eSQxKGVsZW1lbnQsICdvdXRwdXRDb2xsZWN0aW9uJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBzZXRQcm9wZXJ0eShlbGVtZW50LCAnb3V0cHV0Q29sbGVjdGlvbicsIHZhbHVlLCBjb21tYW5kU3RhY2ssIGJwbW5GYWN0b3J5KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbXVsdGlJbnN0YW5jZS1vdXRwdXRDb2xsZWN0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdPdXRwdXQgY29sbGVjdGlvbicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gT3V0cHV0RWxlbWVudChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFByb3BlcnR5JDEoZWxlbWVudCwgJ291dHB1dEVsZW1lbnQnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIHNldFByb3BlcnR5KGVsZW1lbnQsICdvdXRwdXRFbGVtZW50JywgdmFsdWUsIGNvbW1hbmRTdGFjaywgYnBtbkZhY3RvcnkpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ211bHRpSW5zdGFuY2Utb3V0cHV0RWxlbWVudCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnT3V0cHV0IGVsZW1lbnQnKSxcbiAgICBmZWVsOiAncmVxdWlyZWQnLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gQ29tcGxldGlvbkNvbmRpdGlvbihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgY29uc3QgY29tcGxldGlvbkNvbmRpdGlvbiA9IGdldENvbXBsZXRpb25Db25kaXRpb24oZWxlbWVudCk7XG4gICAgcmV0dXJuIGNvbXBsZXRpb25Db25kaXRpb24gJiYgY29tcGxldGlvbkNvbmRpdGlvbi5nZXQoJ2JvZHknKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3QgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MkMShlbGVtZW50KTtcbiAgICAgIGNvbnN0IGNvbXBsZXRpb25Db25kaXRpb24gPSBjcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XG4gICAgICAgIGJvZHk6IHZhbHVlXG4gICAgICB9LCBsb29wQ2hhcmFjdGVyaXN0aWNzLCBicG1uRmFjdG9yeSk7XG4gICAgICBzZXRDb21wbGV0aW9uQ29uZGl0aW9uKGVsZW1lbnQsIGNvbW1hbmRTdGFjaywgY29tcGxldGlvbkNvbmRpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldENvbXBsZXRpb25Db25kaXRpb24oZWxlbWVudCwgY29tbWFuZFN0YWNrLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdtdWx0aUluc3RhbmNlLWNvbXBsZXRpb25Db25kaXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvbXBsZXRpb24gY29uZGl0aW9uJyksXG4gICAgZmVlbDogJ3JlcXVpcmVkJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldExvb3BDaGFyYWN0ZXJpc3RpY3MkMShlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2xvb3BDaGFyYWN0ZXJpc3RpY3MnKTtcbn1cbmZ1bmN0aW9uIGdldFplZWJlTG9vcENoYXJhY3RlcmlzdGljcyhsb29wQ2hhcmFjdGVyaXN0aWNzKSB7XG4gIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGxvb3BDaGFyYWN0ZXJpc3RpY3MsICd6ZWViZTpMb29wQ2hhcmFjdGVyaXN0aWNzJyk7XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50cyAmJiBleHRlbnNpb25FbGVtZW50c1swXTtcbn1cbmZ1bmN0aW9uIHN1cHBvcnRzTXVsdGlJbnN0YW5jZXMoZWxlbWVudCkge1xuICByZXR1cm4gISFnZXRMb29wQ2hhcmFjdGVyaXN0aWNzJDEoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXRDb21wbGV0aW9uQ29uZGl0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldExvb3BDaGFyYWN0ZXJpc3RpY3MkMShlbGVtZW50KS5nZXQoJ2NvbXBsZXRpb25Db25kaXRpb24nKTtcbn1cbmZ1bmN0aW9uIHNldENvbXBsZXRpb25Db25kaXRpb24oZWxlbWVudCwgY29tbWFuZFN0YWNrLCBjb21wbGV0aW9uQ29uZGl0aW9uID0gdW5kZWZpbmVkKSB7XG4gIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgZWxlbWVudCxcbiAgICBtb2RkbGVFbGVtZW50OiBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzJDEoZWxlbWVudCksXG4gICAgcHJvcGVydGllczoge1xuICAgICAgY29tcGxldGlvbkNvbmRpdGlvblxuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eSQxKGVsZW1lbnQsIHByb3BlcnR5TmFtZSkge1xuICBjb25zdCBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyQxKGVsZW1lbnQpLFxuICAgIHplZWJlTG9vcENoYXJhY3RlcmlzdGljcyA9IGdldFplZWJlTG9vcENoYXJhY3RlcmlzdGljcyhsb29wQ2hhcmFjdGVyaXN0aWNzKTtcbiAgcmV0dXJuIHplZWJlTG9vcENoYXJhY3RlcmlzdGljcyAmJiB6ZWViZUxvb3BDaGFyYWN0ZXJpc3RpY3MuZ2V0KHByb3BlcnR5TmFtZSk7XG59XG5mdW5jdGlvbiBzZXRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBjb21tYW5kU3RhY2ssIGJwbW5GYWN0b3J5KSB7XG4gIGNvbnN0IGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzJDEoZWxlbWVudCk7XG4gIGNvbnN0IGNvbW1hbmRzID0gW107XG5cbiAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gbG9vcENoYXJhY3RlcmlzdGljcy5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICB2YWx1ZXM6IFtdXG4gICAgfSwgbG9vcENoYXJhY3RlcmlzdGljcywgYnBtbkZhY3RvcnkpO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogbG9vcENoYXJhY3RlcmlzdGljcyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vICgyKSBlbnN1cmUgemVlYmUgbG9vcCBjaGFyYWN0ZXJpc3RpY3NcbiAgbGV0IHplZWJlTG9vcENoYXJhY3RlcmlzdGljcyA9IGdldFplZWJlTG9vcENoYXJhY3RlcmlzdGljcyhsb29wQ2hhcmFjdGVyaXN0aWNzKTtcbiAgaWYgKCF6ZWViZUxvb3BDaGFyYWN0ZXJpc3RpY3MpIHtcbiAgICB6ZWViZUxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpMb29wQ2hhcmFjdGVyaXN0aWNzJywge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIHplZWJlTG9vcENoYXJhY3RlcmlzdGljc11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDMpIHVwZGF0ZSBkZWZpbmVkIHByb3BlcnR5XG4gIGNvbW1hbmRzLnB1c2goe1xuICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgY29udGV4dDoge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHplZWJlTG9vcENoYXJhY3RlcmlzdGljcyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgW3Byb3BlcnR5TmFtZV06IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyAoNCkgY29tbWl0IGFsbCB1cGRhdGVzXG4gIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG59XG5cbmZ1bmN0aW9uIE91dHB1dFByb3BhZ2F0aW9uUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOkNhbGxBY3Rpdml0eScpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAncHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXMnLFxuICAgIGNvbXBvbmVudDogUHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXMsXG4gICAgaXNFZGl0ZWQ6IGlzVG9nZ2xlU3dpdGNoRW50cnlFZGl0ZWRcbiAgfV07XG59XG5mdW5jdGlvbiBQcm9wYWdhdGVBbGxDaGlsZFZhcmlhYmxlcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgcHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXMgPSBpc1Byb3BhZ2F0ZUFsbENoaWxkVmFyaWFibGVzKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gcHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXM7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgIC8vICgxKSBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSB6ZWViZTpjYWxsZWRFbGVtZW50XG4gICAgbGV0IGNhbGxlZEVsZW1lbnQgPSBnZXRDYWxsZWRFbGVtZW50KGJ1c2luZXNzT2JqZWN0KTtcbiAgICBpZiAoIWNhbGxlZEVsZW1lbnQpIHtcbiAgICAgIGNhbGxlZEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpDYWxsZWRFbGVtZW50Jywge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgY2FsbGVkRWxlbWVudF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgzKSBVcGRhdGUgcHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXMgYXR0cmlidXRlXG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBjYWxsZWRFbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXM6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSBFeGVjdXRlIHRoZSBjb21tYW5kc1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIHJldHVybiBUb2dnbGVTd2l0Y2hFbnRyeSh7XG4gICAgaWQ6ICdwcm9wYWdhdGVBbGxDaGlsZFZhcmlhYmxlcycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJvcGFnYXRlIGFsbCBjaGlsZCBwcm9jZXNzIHZhcmlhYmxlcycpLFxuICAgIHN3aXRjaGVyTGFiZWw6IHByb3BhZ2F0ZUFsbENoaWxkVmFyaWFibGVzID8gdHJhbnNsYXRlKCdPbicpIDogdHJhbnNsYXRlKCdPZmYnKSxcbiAgICB0b29sdGlwOiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgIGNoaWxkcmVuOiBbanN4KFwicFwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0lmIHR1cm5lZCBvbiwgYWxsIHZhcmlhYmxlcyBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIGluc3RhbmNlIHdpbGwgYmUgcHJvcGFnYXRlZCB0byB0aGUgcGFyZW50IHByb2Nlc3MgaW5zdGFuY2UuJylcbiAgICAgIH0pLCBqc3goXCJwXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnT3RoZXJ3aXNlLCBvbmx5IHZhcmlhYmxlcyBkZWZpbmVkIHZpYSBvdXRwdXQgbWFwcGluZ3Mgd2lsbCBiZSBwcm9wYWdhdGVkLicpXG4gICAgICB9KV1cbiAgICB9KSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICAqIERldGVybWluZSBkZWZhdWx0IHZhbHVlIGZvciBwcm9wYWdhdGVBbGxDaGlsZFZhcmlhYmxlcyBhdHRyaWJ1dGVcbiAgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCByZXByZXNlbnRpbmcgYSBicG1uOkNhbGxBY3Rpdml0eVxuICAqXG4gICogQHJldHVybnMge2Jvb2xlYW59XG4gICovXG5mdW5jdGlvbiBkZXRlcm1pbmVQcm9wQWxsQ2hpbGRWYXJpYWJsZXNEZWZhdWx0KGVsZW1lbnQpIHtcbiAgY29uc3Qgb3V0cHV0UGFyYW1ldGVycyA9IGdldE91dHB1dFBhcmFtZXRlcnMkMShlbGVtZW50KTtcbiAgaWYgKG91dHB1dFBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gb3V0cHV0UGFyYW1ldGVycy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BhZ2F0ZUFsbENoaWxkVmFyaWFibGVzIGF0dHJpYnV0ZSBpcyBzZXQgb24gYW4gZWxlbWVudC5cbiAgKiBOb3RlIHRoYXQgYSBkZWZhdWx0IGxvZ2ljIHdpbGwgYmUgZGV0ZXJtaW5lIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNldC5cbiAgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICAqXG4gICogQHJldHVybnMge2Jvb2xlYW59XG4gICovXG5mdW5jdGlvbiBpc1Byb3BhZ2F0ZUFsbENoaWxkVmFyaWFibGVzKGVsZW1lbnQpIHtcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpDYWxsQWN0aXZpdHknKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICBjYWxsZWRFbGVtZW50ID0gZ2V0Q2FsbGVkRWxlbWVudChibyk7XG4gIHJldHVybiBjYWxsZWRFbGVtZW50ICYmIGhhcyhjYWxsZWRFbGVtZW50LCAncHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXMnKSA/IGNhbGxlZEVsZW1lbnQuZ2V0KCdwcm9wYWdhdGVBbGxDaGlsZFZhcmlhYmxlcycpIDogZGV0ZXJtaW5lUHJvcEFsbENoaWxkVmFyaWFibGVzRGVmYXVsdChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gT3V0cHV0UHJvcHMkMSh7XG4gIGVsZW1lbnQsXG4gIGluamVjdG9yXG59KSB7XG4gIGlmICghYXJlT3V0cHV0UGFyYW1ldGVyc1N1cHBvcnRlZCQxKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgb3V0cHV0UGFyYW1ldGVycyA9IGdldE91dHB1dFBhcmFtZXRlcnMkMShlbGVtZW50KSB8fCBbXTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSBpbmplY3Rvci5nZXQoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgaXRlbXMgPSBvdXRwdXRQYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZCArICctb3V0cHV0LScgKyBpbmRleDtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBsYWJlbDogcGFyYW1ldGVyLmdldCgndGFyZ2V0JykgfHwgJycsXG4gICAgICBlbnRyaWVzOiBJbnB1dE91dHB1dFBhcmFtZXRlciQxKHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBwYXJhbWV0ZXJcbiAgICAgIH0pLFxuICAgICAgYXV0b0ZvY3VzRW50cnk6IGlkICsgJy10YXJnZXQnLFxuICAgICAgcmVtb3ZlOiByZW1vdmVGYWN0b3J5JGIoe1xuICAgICAgICBjb21tYW5kU3RhY2ssXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHBhcmFtZXRlclxuICAgICAgfSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpdGVtcyxcbiAgICBhZGQ6IGFkZEZhY3RvcnkkOCh7XG4gICAgICBlbGVtZW50LFxuICAgICAgYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2tcbiAgICB9KVxuICB9O1xufVxuZnVuY3Rpb24gcmVtb3ZlRmFjdG9yeSRiKHtcbiAgY29tbWFuZFN0YWNrLFxuICBlbGVtZW50LFxuICBwYXJhbWV0ZXJcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGlvTWFwcGluZyA9IGdldElvTWFwcGluZyhlbGVtZW50KTtcbiAgICBpZiAoIWlvTWFwcGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRQYXJhbWV0ZXJzID0gd2l0aG91dChpb01hcHBpbmcuZ2V0KCdvdXRwdXRQYXJhbWV0ZXJzJyksIHBhcmFtZXRlcik7XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBpb01hcHBpbmcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBvdXRwdXRQYXJhbWV0ZXJzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHJlbW92ZSBpb01hcHBpbmcgaWYgdGhlcmUgYXJlIG5vIGlucHV0L291dHB1dCBwYXJhbWV0ZXJzIGFueW1vcmVcbiAgICBpZiAoIWlvTWFwcGluZy5nZXQoJ2lucHV0UGFyYW1ldGVycycpLmxlbmd0aCAmJiAhb3V0cHV0UGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpLFxuICAgICAgICB2YWx1ZXMgPSB3aXRob3V0KGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGlvTWFwcGluZyk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGFkZEZhY3RvcnkkOCh7XG4gIGVsZW1lbnQsXG4gIGJwbW5GYWN0b3J5LFxuICBjb21tYW5kU3RhY2tcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgSW9NYXBwaW5nXG4gICAgbGV0IGlvTWFwcGluZyA9IGdldElvTWFwcGluZyhlbGVtZW50KTtcbiAgICBpZiAoIWlvTWFwcGluZykge1xuICAgICAgY29uc3QgcGFyZW50ID0gZXh0ZW5zaW9uRWxlbWVudHM7XG4gICAgICBpb01hcHBpbmcgPSBjcmVhdGVJT01hcHBpbmcoe1xuICAgICAgICBpbnB1dFBhcmFtZXRlcnM6IFtdLFxuICAgICAgICBvdXRwdXRQYXJhbWV0ZXJzOiBbXVxuICAgICAgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgaW9NYXBwaW5nXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIGNyZWF0ZSBwYXJhbWV0ZXJcbiAgICBjb25zdCBuZXdQYXJhbWV0ZXIgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpPdXRwdXQnLCB7XG4gICAgICB0YXJnZXQ6IG5leHRJZCgnT3V0cHV0VmFyaWFibGVfJylcbiAgICB9LCBpb01hcHBpbmcsIGJwbW5GYWN0b3J5KTtcblxuICAgIC8vICg0KSBhZGQgcGFyYW1ldGVyIHRvIGxpc3RcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlvTWFwcGluZyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG91dHB1dFBhcmFtZXRlcnM6IFsuLi5pb01hcHBpbmcuZ2V0KCdvdXRwdXRQYXJhbWV0ZXJzJyksIG5ld1BhcmFtZXRlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByaW9yaXR5RGVmaW5pdGlvblByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgaWYgKCFpc1plZWJlVXNlclRhc2soZWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICdwcmlvcml0eURlZmluaXRpb25Qcmlvcml0eScsXG4gICAgY29tcG9uZW50OiBQcmlvcml0eSQxLFxuICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIFByaW9yaXR5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiAoZ2V0UHJpb3JpdHlEZWZpbml0aW9uKGVsZW1lbnQpIHx8IHt9KS5wcmlvcml0eTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGxldCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcblxuICAgIC8vICgxKSBlbnN1cmUgUHJpb3JpdHlEZWZpbml0aW9uXG4gICAgbGV0IHByaW9yaXR5RGVmaW5pdGlvbiA9IGdldFByaW9yaXR5RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgICBjb25zdCBpc051bGxWYWx1ZSA9IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIGlmIChwcmlvcml0eURlZmluaXRpb24gJiYgaXNOdWxsVmFsdWUpIHtcbiAgICAgIC8vICgyYSkgcmVtb3ZlIHByaW9yaXR5IGRlZmluaXRpb24gaWYgaXQgZXhpc3RzIGFuZCBwcmlvcml0eSBpcyBzZXQgdG8gbnVsbFxuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maWx0ZXIodiA9PiB2ICE9PSBwcmlvcml0eURlZmluaXRpb24pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHByaW9yaXR5RGVmaW5pdGlvbiAmJiAhaXNOdWxsVmFsdWUpIHtcbiAgICAgIC8vICgyYikgdXBkYXRlIHByaW9yaXR5IGRlZmluaXRpb24gaWYgaXQgYWxyZWFkeSBleGlzdHNcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBwcmlvcml0eURlZmluaXRpb24sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcHJpb3JpdHk6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFwcmlvcml0eURlZmluaXRpb24gJiYgIWlzTnVsbFZhbHVlKSB7XG4gICAgICAvLyAoMmMpIGNyZWF0ZSBwcmlvcml0eSBkZWZpbml0aW9uIGlmIGl0IGRvZXMgbm90IGV4aXN0XG4gICAgICBwcmlvcml0eURlZmluaXRpb24gPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpQcmlvcml0eURlZmluaXRpb24nLCB7XG4gICAgICAgIHByaW9yaXR5OiB2YWx1ZVxuICAgICAgfSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBwcmlvcml0eURlZmluaXRpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMykgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdwcmlvcml0eURlZmluaXRpb25Qcmlvcml0eScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJpb3JpdHknKSxcbiAgICBmZWVsOiAnb3B0aW9uYWwnLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0UHJpb3JpdHlEZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ3plZWJlOlByaW9yaXR5RGVmaW5pdGlvbicpWzBdO1xufVxuZnVuY3Rpb24gaXNaZWViZVVzZXJUYXNrKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlVzZXJUYXNrJykgJiYgISFnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpVc2VyVGFzaycpWzBdO1xufVxuXG5jb25zdCBTQ1JJUFRfSU1QTEVNRU5UQVRJT05fT1BUSU9OID0gJ3NjcmlwdCcsXG4gIEpPQl9XT1JLRVJfSU1QTEVNRU5UQVRJT05fT1BUSU9OJDEgPSAnam9iV29ya2VyJyxcbiAgREVGQVVMVF9JTVBMRU1FTlRBVElPTl9PUFRJT04gPSAnJztcbmZ1bmN0aW9uIFNjcmlwdEltcGxlbWVudGF0aW9uUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlNjcmlwdFRhc2snKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW3tcbiAgICBpZDogJ3NjcmlwdEltcGxlbWVudGF0aW9uJyxcbiAgICBjb21wb25lbnQ6IFNjcmlwdEltcGxlbWVudGF0aW9uLFxuICAgIGlzRWRpdGVkOiAoKSA9PiBpc1NjcmlwdEltcGxlbWVudGF0aW9uRWRpdGVkKGVsZW1lbnQpXG4gIH1dO1xufVxuZnVuY3Rpb24gU2NyaXB0SW1wbGVtZW50YXRpb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgaWYgKGdldFNjcmlwdCQxKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gU0NSSVBUX0lNUExFTUVOVEFUSU9OX09QVElPTjtcbiAgICB9XG4gICAgaWYgKGdldFRhc2tEZWZpbml0aW9uJDEoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBKT0JfV09SS0VSX0lNUExFTUVOVEFUSU9OX09QVElPTiQxO1xuICAgIH1cbiAgICByZXR1cm4gREVGQVVMVF9JTVBMRU1FTlRBVElPTl9PUFRJT047XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB2YWx1ZSBieSBlaXRoZXIgY3JlYXRpbmcgYSB6ZWViZTpzY3JpcHQgb3IgYSB6ZWViZTp0YXNrRGVmaW50aW9uXG4gICAqIGV4dGVuc2lvbiBlbGVtZW50LiBOb3RlIHRoYXQgdGhleSBtdXN0IG5vdCBleGlzdCBib3RoIGF0IHRoZSBzYW1lIHRpbWUsIGhvd2V2ZXJcbiAgICogdGhpcyB3aWxsIGJlIGVuc3VyZWQgYnkgYSBicG1uLWpzIGJlaGF2aW9yIChhbmQgbm90IGJ5IHRoZSBwcm9wUGFuZWwpLlxuICAgKi9cbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRUeXBlO1xuICAgIGlmICh2YWx1ZSA9PT0gU0NSSVBUX0lNUExFTUVOVEFUSU9OX09QVElPTikge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudCA9IGdldFNjcmlwdCQxKGVsZW1lbnQpO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudFR5cGUgPSAnemVlYmU6U2NyaXB0JztcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBKT0JfV09SS0VSX0lNUExFTUVOVEFUSU9OX09QVElPTiQxKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50ID0gZ2V0VGFza0RlZmluaXRpb24kMShlbGVtZW50KTtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRUeXBlID0gJ3plZWJlOlRhc2tEZWZpbml0aW9uJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXRFbGVtZW50KGVsZW1lbnQsIGNvbW1hbmRTdGFjayk7XG4gICAgfVxuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudCAmJiBleHRlbnNpb25FbGVtZW50VHlwZSkge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoZXh0ZW5zaW9uRWxlbWVudFR5cGUsIHt9LCBudWxsLCBicG1uRmFjdG9yeSk7XG4gICAgICB1cGRhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBleHRlbnNpb25FbGVtZW50LCBicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgICB2YWx1ZTogREVGQVVMVF9JTVBMRU1FTlRBVElPTl9PUFRJT04sXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBTQ1JJUFRfSU1QTEVNRU5UQVRJT05fT1BUSU9OLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRkVFTCBleHByZXNzaW9uJylcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogSk9CX1dPUktFUl9JTVBMRU1FTlRBVElPTl9PUFRJT04kMSxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0pvYiB3b3JrZXInKVxuICAgIH1dO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuICByZXR1cm4gU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW1wbGVtZW50YXRpb24nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0VGFza0RlZmluaXRpb24kMShlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpWzBdO1xufVxuZnVuY3Rpb24gZ2V0U2NyaXB0JDEoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6U2NyaXB0JylbMF07XG59XG5mdW5jdGlvbiBnZXRUYXNrSGVhZGVycyhlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrSGVhZGVycycpO1xufVxuZnVuY3Rpb24gaXNTY3JpcHRJbXBsZW1lbnRhdGlvbkVkaXRlZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRUYXNrRGVmaW5pdGlvbiQxKGVsZW1lbnQpIHx8IGdldFNjcmlwdCQxKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gcmVzZXRFbGVtZW50KGVsZW1lbnQsIGNvbW1hbmRTdGFjaykge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCB0YXNrRGVmaW5pdGlvbiA9IGdldFRhc2tEZWZpbml0aW9uJDEoZWxlbWVudCk7XG4gIGNvbnN0IHRhc2tIZWFkZXJzID0gZ2V0VGFza0hlYWRlcnMoZWxlbWVudCk7XG4gIGNvbnN0IHNjcmlwdCA9IGdldFNjcmlwdCQxKGVsZW1lbnQpO1xuICBpZiAodGFza0RlZmluaXRpb24pIHtcbiAgICBjb25zdCByZW1vdmVkID0gW3Rhc2tEZWZpbml0aW9uLCB0YXNrSGVhZGVyc10uZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCByZW1vdmVkLCBjb21tYW5kU3RhY2spO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoc2NyaXB0KSB7XG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIHNjcmlwdCwgY29tbWFuZFN0YWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgZXh0ZW5zaW9uRWxlbWVudFRvQWRkLCBicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGNvbW1hbmRzID0gW107XG4gIGxldCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgbGV0IGV4dGVuc2lvbkVsZW1lbnRWYWx1ZXM7XG5cbiAgLy8gKDEpIGNyZWF0ZSBicG1uOkV4dGVuc2lvbkVsZW1lbnRzIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgIHZhbHVlczogW11cbiAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZXh0ZW5zaW9uRWxlbWVudFRvQWRkLiRwYXJlbnQgPSBleHRlbnNpb25FbGVtZW50cztcblxuICAvLyAoMikgcmVtb3ZlIG9sZCBleGVuc2lvbiBlbGVtZW50IGZyb20gZXh0ZW5zaW9uRWxlbWVudHNcbiAgaWYgKGlzKGV4dGVuc2lvbkVsZW1lbnRUb0FkZCwgJ3plZWJlOlRhc2tEZWZpbml0aW9uJykpIHtcbiAgICBleHRlbnNpb25FbGVtZW50VmFsdWVzID0gd2l0aG91dChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBnZXRTY3JpcHQkMShlbGVtZW50KSk7XG4gIH0gZWxzZSBpZiAoaXMoZXh0ZW5zaW9uRWxlbWVudFRvQWRkLCAnemVlYmU6U2NyaXB0JykpIHtcbiAgICBjb25zdCBtYXRjaGVyID0gZXh0ZW5zaW9uID0+IGlzQW55JDEoZXh0ZW5zaW9uLCBbJ3plZWJlOlRhc2tEZWZpbml0aW9uJywgJ3plZWJlOlRhc2tIZWFkZXJzJ10pO1xuICAgIGV4dGVuc2lvbkVsZW1lbnRWYWx1ZXMgPSB3aXRob3V0KGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIG1hdGNoZXIpO1xuICB9XG5cbiAgLy8gKDMpIGFkZCBleHRlbnNpb24gZWxlbWVudCB0byBsaXN0XG4gIGNvbW1hbmRzLnB1c2goe1xuICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgY29udGV4dDoge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50VmFsdWVzLCBleHRlbnNpb25FbGVtZW50VG9BZGRdXG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbn1cblxuZnVuY3Rpb24gU2NyaXB0UHJvcHMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46U2NyaXB0VGFzaycpIHx8ICFnZXRTY3JpcHQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICdyZXN1bHRWYXJpYWJsZScsXG4gICAgY29tcG9uZW50OiBSZXN1bHRWYXJpYWJsZSQzLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ3NjcmlwdEV4cHJlc3Npb24nLFxuICAgIGNvbXBvbmVudDogRXhwcmVzc2lvbiQyLFxuICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIEV4cHJlc3Npb24kMihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChnZXRTY3JpcHQoZWxlbWVudCkgfHwge30pLmdldCgnZXhwcmVzc2lvbicpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb25zdCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgc2NyaXB0XG4gICAgbGV0IHNjcmlwdCA9IGdldFNjcmlwdChlbGVtZW50KTtcbiAgICBpZiAoIXNjcmlwdCkge1xuICAgICAgc2NyaXB0ID0gY3JlYXRlRWxlbWVudCgnemVlYmU6U2NyaXB0Jywge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgc2NyaXB0XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIHVwZGF0ZSBzY3JpcHQuZXhwcmVzc2lvblxuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogc2NyaXB0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZXhwcmVzc2lvbjogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIGNvbW1pdCBhbGwgdXBkYXRlc1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIHJldHVybiBGZWVsRW50cnlXaXRoVmFyaWFibGVDb250ZXh0KHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ZFRUwgZXhwcmVzc2lvbicpLFxuICAgIGZlZWw6ICdyZXF1aXJlZCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBSZXN1bHRWYXJpYWJsZSQzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gKGdldFNjcmlwdChlbGVtZW50KSB8fCB7fSkucmVzdWx0VmFyaWFibGU7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSBzY3JpcHRcbiAgICBsZXQgc2NyaXB0ID0gZ2V0U2NyaXB0KGVsZW1lbnQpO1xuICAgIGlmICghc2NyaXB0KSB7XG4gICAgICBzY3JpcHQgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpTY3JpcHQnLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBzY3JpcHRdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMykgdXBkYXRlIHNjcmlwdC5yZXN1bHRWYXJpYWJsZVxuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogc2NyaXB0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcmVzdWx0VmFyaWFibGU6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSBjb21taXQgYWxsIHVwZGF0ZXNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUmVzdWx0IHZhcmlhYmxlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRTY3JpcHQoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6U2NyaXB0JylbMF07XG59XG5cbi8qKlxuICogQHJldHVybnMge0VudHJ5W119XG4gKi9cbmZ1bmN0aW9uIFNpZ25hbFByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgaWYgKCFpc1NpZ25hbFN1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBzaWduYWwgPSBnZXRTaWduYWwoZWxlbWVudCk7XG4gIGxldCBlbnRyaWVzID0gW107XG4gIGlmIChzaWduYWwpIHtcbiAgICBlbnRyaWVzID0gWy4uLmVudHJpZXMsIHtcbiAgICAgIGlkOiAnc2lnbmFsTmFtZScsXG4gICAgICBjb21wb25lbnQ6IFNpZ25hbE5hbWUsXG4gICAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgICB9XTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIFNpZ25hbE5hbWUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzaWduYWwgPSBnZXRTaWduYWwoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBzaWduYWwuZ2V0KCduYW1lJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHNpZ25hbCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdzaWduYWxOYW1lJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdOYW1lJyksXG4gICAgZmVlbDogJ29wdGlvbmFsJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuY29uc3QgQ2FsbGVkRWxlbWVudEJpbmRpbmckMSA9IHdpdGhQcm9wcyhCaW5kaW5nJDIsIHtcbiAgICB0eXBlOiAnemVlYmU6Q2FsbGVkRWxlbWVudCdcbiAgfSksXG4gIENhbGxlZEVsZW1lbnRWZXJzaW9uVGFnJDEgPSB3aXRoUHJvcHMoVmVyc2lvblRhZyQzLCB7XG4gICAgdHlwZTogJ3plZWJlOkNhbGxlZEVsZW1lbnQnXG4gIH0pO1xuZnVuY3Rpb24gVGFyZ2V0UHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOkNhbGxBY3Rpdml0eScpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiAndGFyZ2V0UHJvY2Vzc0lkJyxcbiAgICBjb21wb25lbnQ6IFRhcmdldFByb2Nlc3NJZCxcbiAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAnYmluZGluZ1R5cGUnLFxuICAgIGNvbXBvbmVudDogQ2FsbGVkRWxlbWVudEJpbmRpbmckMSxcbiAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZFxuICB9XTtcbiAgaWYgKGdldEJpbmRpbmdUeXBlKGVsZW1lbnQsICd6ZWViZTpDYWxsZWRFbGVtZW50JykgPT09ICd2ZXJzaW9uVGFnJykge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ3ZlcnNpb25UYWcnLFxuICAgICAgY29tcG9uZW50OiBDYWxsZWRFbGVtZW50VmVyc2lvblRhZyQxLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIFRhcmdldFByb2Nlc3NJZChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFByb2Nlc3NJZChlbGVtZW50KTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgZW5zdXJlIHplZWJlOmNhbGxlZEVsZW1lbnRcbiAgICBsZXQgY2FsbGVkRWxlbWVudCA9IGdldENhbGxlZEVsZW1lbnQoYnVzaW5lc3NPYmplY3QpO1xuICAgIGlmICghY2FsbGVkRWxlbWVudCkge1xuICAgICAgY2FsbGVkRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOkNhbGxlZEVsZW1lbnQnLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBjYWxsZWRFbGVtZW50XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIFVwZGF0ZSBwcm9jZXNzSWQgYXR0cmlidXRlXG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBjYWxsZWRFbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcHJvY2Vzc0lkOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgRXhlY3V0ZSB0aGUgY29tbWFuZHNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9jZXNzIElEJyksXG4gICAgZmVlbDogJ29wdGlvbmFsJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gVGFza0RlZmluaXRpb25Qcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXNaZWViZVNlcnZpY2VUYXNrKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAndGFza0RlZmluaXRpb25UeXBlJyxcbiAgICBjb21wb25lbnQ6IFRhc2tEZWZpbml0aW9uVHlwZSxcbiAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAndGFza0RlZmluaXRpb25SZXRyaWVzJyxcbiAgICBjb21wb25lbnQ6IFRhc2tEZWZpbml0aW9uUmV0cmllcyxcbiAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgfV07XG59XG5mdW5jdGlvbiBUYXNrRGVmaW5pdGlvblR5cGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiAoZ2V0VGFza0RlZmluaXRpb24oZWxlbWVudCkgfHwge30pLnR5cGU7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSB0YXNrIGRlZmluaXRpb25cbiAgICBsZXQgdGFza0RlZmluaXRpb24gPSBnZXRUYXNrRGVmaW5pdGlvbihlbGVtZW50KTtcbiAgICBpZiAoIXRhc2tEZWZpbml0aW9uKSB7XG4gICAgICB0YXNrRGVmaW5pdGlvbiA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOlRhc2tEZWZpbml0aW9uJywge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgdGFza0RlZmluaXRpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMykgdXBkYXRlIHRhc2sgZGVmaW5pdGlvbiB0eXBlXG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrRGVmaW5pdGlvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHR5cGU6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSBjb21taXQgYWxsIHVwZGF0ZXNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICByZXR1cm4gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCh7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdKb2IgdHlwZScpLFxuICAgIGZlZWw6ICdvcHRpb25hbCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBUYXNrRGVmaW5pdGlvblJldHJpZXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiAoZ2V0VGFza0RlZmluaXRpb24oZWxlbWVudCkgfHwge30pLnJldHJpZXM7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgdGFzayBkZWZpbml0aW9uXG4gICAgbGV0IHRhc2tEZWZpbml0aW9uID0gZ2V0VGFza0RlZmluaXRpb24oZWxlbWVudCk7XG4gICAgaWYgKCF0YXNrRGVmaW5pdGlvbikge1xuICAgICAgdGFza0RlZmluaXRpb24gPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpUYXNrRGVmaW5pdGlvbicsIHt9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIHRhc2tEZWZpbml0aW9uXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIHVwZGF0ZSB0YXNrIGRlZmluaXRpb24gcmV0cmllc1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogdGFza0RlZmluaXRpb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICByZXRyaWVzOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUmV0cmllcycpLFxuICAgIGZlZWw6ICdvcHRpb25hbCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRUYXNrRGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpWzBdO1xufVxuXG5jb25zdCBFVkVOVF9UWVBFID0gWydjb21wbGV0ZScsICdhc3NpZ25tZW50J107XG5jb25zdCBFVkVOVF9UT19MQUJFTCQxID0ge1xuICBjb21wbGV0ZTogJ0NvbXBsZXRlJyxcbiAgYXNzaWdubWVudDogJ0Fzc2lnbm1lbnQnXG59O1xuZnVuY3Rpb24gVGFza0xpc3RlbmVyRW50cmllcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgbGlzdGVuZXJcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3tcbiAgICBpZDogaWRQcmVmaXggKyAnLWV2ZW50VHlwZScsXG4gICAgY29tcG9uZW50OiBFdmVudFR5cGUkMSxcbiAgICBpZFByZWZpeCxcbiAgICBsaXN0ZW5lcixcbiAgICBldmVudFR5cGVzOiBFVkVOVF9UWVBFXG4gIH0sIHtcbiAgICBpZDogaWRQcmVmaXggKyAnLWxpc3RlbmVyVHlwZScsXG4gICAgY29tcG9uZW50OiBMaXN0ZW5lclR5cGUkMSxcbiAgICBpZFByZWZpeCxcbiAgICBsaXN0ZW5lclxuICB9LCB7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy1yZXRyaWVzJyxcbiAgICBjb21wb25lbnQ6IFJldHJpZXMsXG4gICAgaWRQcmVmaXgsXG4gICAgbGlzdGVuZXJcbiAgfV07XG59XG5mdW5jdGlvbiBFdmVudFR5cGUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBsaXN0ZW5lcixcbiAgICBldmVudFR5cGVzXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gZXZlbnRUeXBlcy5tYXAoZXZlbnRUeXBlID0+ICh7XG4gICAgICB2YWx1ZTogZXZlbnRUeXBlLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZShFVkVOVF9UT19MQUJFTCQxW2V2ZW50VHlwZV0pXG4gICAgfSkpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGxpc3RlbmVyLCB7XG4gICAgICBldmVudFR5cGU6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBsaXN0ZW5lci5nZXQoJ2V2ZW50VHlwZScpO1xuICB9O1xuICByZXR1cm4gU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1ldmVudFR5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V2ZW50IHR5cGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBUYXNrTGlzdGVuZXJzUHJvcHMoe1xuICBlbGVtZW50LFxuICBpbmplY3RvclxufSkge1xuICBsZXQgYnVzaW5lc3NPYmplY3QgPSBnZXRSZWxldmFudEJ1c2luZXNzT2JqZWN0JDEoZWxlbWVudCk7XG5cbiAgLy8gbm90IGFsbG93ZWQgaW4gZW1wdHkgcG9vbHNcbiAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWlzWmVlYmVVc2VyVGFzayQxKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG1vZGRsZSA9IGluamVjdG9yLmdldCgnbW9kZGxlJyk7XG4gIGlmICghY2FuSGF2ZVRhc2tMaXN0ZW5lcnMoYnVzaW5lc3NPYmplY3QsIG1vZGRsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzTGlzdChidXNpbmVzc09iamVjdCkgfHwgW107XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyksXG4gICAgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJyksXG4gICAgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgaXRlbXMgPSBsaXN0ZW5lcnMubWFwKChsaXN0ZW5lciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGVsZW1lbnQuaWQgKyAnLXRhc2tMaXN0ZW5lci0nICsgaW5kZXg7XG4gICAgY29uc3QgdHlwZSA9IGxpc3RlbmVyLmdldCgndHlwZScpIHx8ICc8bm8gdHlwZT4nO1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoYCR7RVZFTlRfVE9fTEFCRUwkMVtsaXN0ZW5lci5nZXQoJ2V2ZW50VHlwZScpXX06IHt0eXBlfWAsIHtcbiAgICAgICAgdHlwZVxuICAgICAgfSksXG4gICAgICBlbnRyaWVzOiBUYXNrTGlzdGVuZXJFbnRyaWVzKHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBsaXN0ZW5lclxuICAgICAgfSksXG4gICAgICBhdXRvRm9jdXNFbnRyeTogaWQgKyAnLWV2ZW50VHlwZScsXG4gICAgICByZW1vdmU6IHJlbW92ZUZhY3RvcnkkYSh7XG4gICAgICAgIG1vZGVsaW5nLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBsaXN0ZW5lclxuICAgICAgfSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpdGVtcyxcbiAgICBhZGQ6IGFkZEZhY3RvcnkkNyh7XG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgIGVsZW1lbnRcbiAgICB9KVxuICB9O1xufVxuZnVuY3Rpb24gcmVtb3ZlRmFjdG9yeSRhKHtcbiAgbW9kZWxpbmcsXG4gIGVsZW1lbnQsXG4gIGxpc3RlbmVyXG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFJlbGV2YW50QnVzaW5lc3NPYmplY3QkMShlbGVtZW50KTtcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRUYXNrTGlzdGVuZXJzQ29udGFpbmVyKGJ1c2luZXNzT2JqZWN0KTtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ZW5lcnMgPSB3aXRob3V0KGNvbnRhaW5lci5nZXQoJ2xpc3RlbmVycycpLCBsaXN0ZW5lcik7XG4gICAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBjb250YWluZXIsIHtcbiAgICAgIGxpc3RlbmVyc1xuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gYWRkRmFjdG9yeSQ3KHtcbiAgYnBtbkZhY3RvcnksXG4gIGNvbW1hbmRTdGFjayxcbiAgZWxlbWVudFxufSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgbGV0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRSZWxldmFudEJ1c2luZXNzT2JqZWN0JDEoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgemVlYmU6VGFza0xpc3RlbmVyc1xuICAgIGxldCB0YXNrTGlzdGVuZXJzID0gZ2V0VGFza0xpc3RlbmVyc0NvbnRhaW5lcihidXNpbmVzc09iamVjdCk7XG4gICAgaWYgKCF0YXNrTGlzdGVuZXJzKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBleHRlbnNpb25FbGVtZW50cztcbiAgICAgIHRhc2tMaXN0ZW5lcnMgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpUYXNrTGlzdGVuZXJzJywge1xuICAgICAgICBsaXN0ZW5lcnM6IFtdXG4gICAgICB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB0YXNrTGlzdGVuZXJzXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIGNyZWF0ZSB6ZWViZTpUYXNrTGlzdGVuZXJcbiAgICBjb25zdCBUYXNrTGlzdGVuZXIgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpUYXNrTGlzdGVuZXInLCBnZXREZWZhdWx0TGlzdGVuZXJQcm9wcygpLCB0YXNrTGlzdGVuZXJzLCBicG1uRmFjdG9yeSk7XG5cbiAgICAvLyAoNCkgYWRkIFRhc2tMaXN0ZW5lciB0byBsaXN0XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrTGlzdGVuZXJzLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGlzdGVuZXJzOiBbLi4udGFza0xpc3RlbmVycy5nZXQoJ2xpc3RlbmVycycpLCBUYXNrTGlzdGVuZXJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg1KSBjb21taXQgYWxsIHVwZGF0ZXNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFJlbGV2YW50QnVzaW5lc3NPYmplY3QkMShlbGVtZW50KSB7XG4gIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKTtcbiAgfVxuICByZXR1cm4gYnVzaW5lc3NPYmplY3Q7XG59XG5mdW5jdGlvbiBnZXRUYXNrTGlzdGVuZXJzQ29udGFpbmVyKGVsZW1lbnQpIHtcbiAgY29uc3QgVGFza0xpc3RlbmVycyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChlbGVtZW50LCAnemVlYmU6VGFza0xpc3RlbmVycycpO1xuICByZXR1cm4gVGFza0xpc3RlbmVycyAmJiBUYXNrTGlzdGVuZXJzWzBdO1xufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJzTGlzdChlbGVtZW50KSB7XG4gIGNvbnN0IFRhc2tMaXN0ZW5lcnMgPSBnZXRUYXNrTGlzdGVuZXJzQ29udGFpbmVyKGVsZW1lbnQpO1xuICByZXR1cm4gVGFza0xpc3RlbmVycyAmJiBUYXNrTGlzdGVuZXJzLmdldCgnbGlzdGVuZXJzJyk7XG59XG5mdW5jdGlvbiBjYW5IYXZlVGFza0xpc3RlbmVycyhibywgbW9kZGxlKSB7XG4gIGNvbnN0IFRhc2tMaXN0ZW5lcnNEZXNjcmlwdG9yID0gbW9kZGxlLmdldFR5cGVEZXNjcmlwdG9yKCd6ZWViZTpUYXNrTGlzdGVuZXJzJyk7XG4gIHJldHVybiBpc0FueSQxKGJvLCBUYXNrTGlzdGVuZXJzRGVzY3JpcHRvci5tZXRhLmFsbG93ZWRJbik7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0TGlzdGVuZXJQcm9wcygpIHtcbiAgcmV0dXJuIHtcbiAgICBldmVudFR5cGU6IEVWRU5UX1RZUEVbMF1cbiAgfTtcbn1cblxuZnVuY3Rpb24gVGFza1NjaGVkdWxlUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlVzZXJUYXNrJykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICd0YXNrU2NoZWR1bGVEdWVEYXRlJyxcbiAgICBjb21wb25lbnQ6IER1ZURhdGUkMSxcbiAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAndGFza1NjaGVkdWxlRm9sbG93VXBEYXRlJyxcbiAgICBjb21wb25lbnQ6IEZvbGxvd1VwRGF0ZSQxLFxuICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIER1ZURhdGUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFza1NjaGVkdWxlID0gZ2V0VGFza1NjaGVkdWxlKGVsZW1lbnQpO1xuICAgIGlmICghdGFza1NjaGVkdWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB0YXNrU2NoZWR1bGUuZ2V0KCdkdWVEYXRlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBlbnN1cmUgemVlYmU6VGFza1NjaGVkdWxlXG4gICAgbGV0IHRhc2tTY2hlZHVsZSA9IGdldFRhc2tTY2hlZHVsZShlbGVtZW50KTtcbiAgICBpZiAoIXRhc2tTY2hlZHVsZSkge1xuICAgICAgdGFza1NjaGVkdWxlID0gY3JlYXRlRWxlbWVudCgnemVlYmU6VGFza1NjaGVkdWxlJywge30sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgdGFza1NjaGVkdWxlXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIHVwZGF0ZSB6ZWViZTpkdWVEYXRlXG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrU2NoZWR1bGUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBkdWVEYXRlOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICd0YXNrU2NoZWR1bGVEdWVEYXRlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEdWUgZGF0ZScpLFxuICAgIGZlZWw6ICdvcHRpb25hbCcsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBGb2xsb3dVcERhdGUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFza1NjaGVkdWxlID0gZ2V0VGFza1NjaGVkdWxlKGVsZW1lbnQpO1xuICAgIGlmICghdGFza1NjaGVkdWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB0YXNrU2NoZWR1bGUuZ2V0KCdmb2xsb3dVcERhdGUnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSB6ZWViZTpUYXNrU2NoZWR1bGVcbiAgICBsZXQgdGFza1NjaGVkdWxlID0gZ2V0VGFza1NjaGVkdWxlKGVsZW1lbnQpO1xuICAgIGlmICghdGFza1NjaGVkdWxlKSB7XG4gICAgICB0YXNrU2NoZWR1bGUgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpUYXNrU2NoZWR1bGUnLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB0YXNrU2NoZWR1bGVdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMykgdXBkYXRlIHplZWJlOmZvbGxvd1VwRGF0ZVxuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogdGFza1NjaGVkdWxlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZm9sbG93VXBEYXRlOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbiAgcmV0dXJuIEZlZWxFbnRyeVdpdGhWYXJpYWJsZUNvbnRleHQoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICd0YXNrU2NoZWR1bGVGb2xsb3dVcERhdGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ZvbGxvdyB1cCBkYXRlJyksXG4gICAgZmVlbDogJ29wdGlvbmFsJyxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFRhc2tTY2hlZHVsZShlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrU2NoZWR1bGUnKVswXTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gdGltZXIgZXhwcmVzc2lvbiB0eXBlIGlzIHN1cHBvcnRlZCBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0VsZW1lbnR8TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVGltZXJFeHByZXNzaW9uVHlwZVN1cHBvcnRlZCh0eXBlLCBlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3RpbWVEYXRlJzpcbiAgICAgIHJldHVybiBpc0FueSQxKGVsZW1lbnQsIFsnYnBtbjpCb3VuZGFyeUV2ZW50JywgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsICdicG1uOlN0YXJ0RXZlbnQnXSk7XG4gICAgY2FzZSAndGltZUN5Y2xlJzpcbiAgICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdGFydEV2ZW50JykgJiYgIWhhc1BhcmVudEV2ZW50U3ViUHJvY2VzcyhidXNpbmVzc09iamVjdCkgfHwgIWlzSW50ZXJydXB0aW5nKGJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiYgIWlzSW50ZXJydXB0aW5nKGJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlICd0aW1lRHVyYXRpb24nOlxuICAgICAgaWYgKGlzQW55JDEoZWxlbWVudCwgWydicG1uOkJvdW5kYXJ5RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50J10pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSAmJiBoYXNQYXJlbnRFdmVudFN1YlByb2Nlc3MoYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW50ZXJydXB0aW5nKGJ1c2luZXNzT2JqZWN0KSB7XG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FuY2VsQWN0aXZpdHknKSAhPT0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnaXNJbnRlcnJ1cHRpbmcnKSAhPT0gZmFsc2U7XG59XG5mdW5jdGlvbiBoYXNQYXJlbnRFdmVudFN1YlByb2Nlc3MoYnVzaW5lc3NPYmplY3QpIHtcbiAgY29uc3QgcGFyZW50ID0gYnVzaW5lc3NPYmplY3QuJHBhcmVudDtcbiAgcmV0dXJuIHBhcmVudCAmJiBpcyhwYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBwYXJlbnQuZ2V0KCd0cmlnZ2VyZWRCeUV2ZW50Jyk7XG59XG5cbmZ1bmN0aW9uIFRpbWVyUHJvcHMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpbmplY3RvclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgdGltZXJFdmVudERlZmluaXRpb24gPSBnZXRUaW1lckV2ZW50RGVmaW5pdGlvbihidXNpbmVzc09iamVjdCksXG4gICAgdGltZXJFdmVudERlZmluaXRpb25UeXBlID0gZ2V0VGltZXJEZWZpbml0aW9uVHlwZSh0aW1lckV2ZW50RGVmaW5pdGlvbik7XG5cbiAgLy8gKDEpIE9ubHkgc2hvdyBmb3Igc3VwcG9ydGVkIGVsZW1lbnRzXG4gIGlmICghaXNUaW1lclN1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCB0aW1lck9wdGlvbnMgPSBnZXRUaW1lck9wdGlvbnMoZWxlbWVudCwgdHJhbnNsYXRlKTtcbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiAndGltZXJFdmVudERlZmluaXRpb25UeXBlJyxcbiAgICBjb21wb25lbnQ6IFRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSQxLFxuICAgIGlzRWRpdGVkOiBpc1NlbGVjdEVudHJ5RWRpdGVkLFxuICAgIG9wdGlvbnM6IHRpbWVyT3B0aW9uc1xuICB9KTtcbiAgaWYgKHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSkge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ3RpbWVyRXZlbnREZWZpbml0aW9uVmFsdWUnLFxuICAgICAgY29tcG9uZW50OiBUaW1lckV2ZW50RGVmaW5pdGlvblZhbHVlJDEsXG4gICAgICBpc0VkaXRlZDogaXNGZWVsRW50cnlFZGl0ZWQsXG4gICAgICB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGU6IHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSB8fCB0aW1lck9wdGlvbnNbMF0udmFsdWVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIGdldFRpbWVyT3B0aW9ucyhlbGVtZW50LCB0cmFuc2xhdGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IFtdO1xuICBpZiAoaXNUaW1lckV4cHJlc3Npb25UeXBlU3VwcG9ydGVkKCd0aW1lRGF0ZScsIGVsZW1lbnQpKSB7XG4gICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgIHZhbHVlOiAndGltZURhdGUnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRGF0ZScpXG4gICAgfSk7XG4gIH1cbiAgaWYgKGlzVGltZXJFeHByZXNzaW9uVHlwZVN1cHBvcnRlZCgndGltZUR1cmF0aW9uJywgZWxlbWVudCkpIHtcbiAgICBvcHRpb25zLnB1c2goe1xuICAgICAgdmFsdWU6ICd0aW1lRHVyYXRpb24nLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRHVyYXRpb24nKVxuICAgIH0pO1xuICB9XG4gIGlmIChpc1RpbWVyRXhwcmVzc2lvblR5cGVTdXBwb3J0ZWQoJ3RpbWVDeWNsZScsIGVsZW1lbnQpKSB7XG4gICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgIHZhbHVlOiAndGltZUN5Y2xlJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0N5Y2xlJylcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBUaW1lckV2ZW50RGVmaW5pdGlvblR5cGUgLSBHZW5lcmljIHNlbGVjdCBlbnRyeSBhbGxvd2luZyB0byBzZWxlY3QgYSBzcGVjaWZpY1xuICogdGltZXJFdmVudERlZmludGlvblR5cGUuIFRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aW1lckV2ZW50RGVmaW5pdGlvblZhbHVlLlxuICpcbiAqIEBwYXJhbSAge3R5cGV9IHByb3BzXG4gKiBAcmV0dXJuIHtTZWxlY3RFbnRyeX1cbiAqL1xuZnVuY3Rpb24gVGltZXJFdmVudERlZmluaXRpb25UeXBlJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgb3B0aW9uc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvbiA9IGdldFRpbWVyRXZlbnREZWZpbml0aW9uKGJ1c2luZXNzT2JqZWN0KSxcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUgPSBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSB8fCAnJztcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgLy8gKDEpIENoZWNrIGlmIHZhbHVlIGlzIGRpZmZlcmVudCB0byBjdXJyZW50IHR5cGVcbiAgICBpZiAodmFsdWUgPT09IHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vICgyKSBDcmVhdGUgZW1wdHkgZm9ybWFsRXhwcmVzc2lvbiBlbGVtZW50XG4gICAgY29uc3QgZm9ybWFsRXhwcmVzc2lvbiA9IGNyZWF0ZVRpbWVyRm9ybWFsRXhwcmVzc2lvbihicG1uRmFjdG9yeSwgdGltZXJFdmVudERlZmluaXRpb24pO1xuXG4gICAgLy8gKDMpIFNldCB0aGUgdmFsdWUgZm9yIHNlbGVjdGVkIHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZVxuICAgIGNvbnN0IG5ld1Byb3BzID0ge1xuICAgICAgdGltZUR1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgICB0aW1lRGF0ZTogdW5kZWZpbmVkLFxuICAgICAgdGltZUN5Y2xlOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIGlmICh2YWx1ZSAhPT0gJycpIHtcbiAgICAgIG5ld1Byb3BzW3ZhbHVlXSA9IGZvcm1hbEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgLy8gKDQpIEV4ZWN1dGUgYnVzaW5lc3NPYmplY3QgdXBkYXRlXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiB0aW1lckV2ZW50RGVmaW5pdGlvbixcbiAgICAgIHByb3BlcnRpZXM6IG5ld1Byb3BzXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSBlbGVtZW50ID0+IHtcbiAgICByZXR1cm4gW3tcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJzxub25lPicpXG4gICAgfSwgLi4ub3B0aW9uc107XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ3RpbWVyRXZlbnREZWZpbml0aW9uVHlwZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5cbi8qKlxuICogVGltZXJFdmVudERlZmluaXRpb25WYWx1ZSAtIEdlbmVyaWMgdGV4dEZpZWxkIGVudHJ5IGFsbG93aW5nIHRvIHNwZWNpZnkgdGhlXG4gKiB0aW1lckV2ZW50RGVmaW50aW9uVmFsdWUgYmFzZWQgb24gdGhlIHNldCB0aW1lckV2ZW50RGVmaW50aW9uVHlwZS4gVG8gYmUgdXNlZFxuICogdG9nZXRoZXIgd2l0aCB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHByb3BzLmVsZW1lbnRcbiAqIEBwYXJhbSB7J3RpbWVDeWNsZSd8J3RpbWVEYXRlJ3wndGltZUR1cmF0aW9uJ30gcHJvcHMudGltZXJFdmVudERlZmluaXRpb25UeXBlP1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLmxhYmVsP1xuICogQHJldHVybiB7VGV4dEZpZWxkRW50cnl9XG4gKi9cbmZ1bmN0aW9uIFRpbWVyRXZlbnREZWZpbml0aW9uVmFsdWUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBsYWJlbCxcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgdGltZXJFdmVudERlZmluaXRpb24gPSBnZXRUaW1lckV2ZW50RGVmaW5pdGlvbihidXNpbmVzc09iamVjdCksXG4gICAgdGltZXJFdmVudEZvcm1hbEV4cHJlc3Npb24gPSB0aW1lckV2ZW50RGVmaW5pdGlvbi5nZXQodGltZXJFdmVudERlZmluaXRpb25UeXBlKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRpbWVyRXZlbnRGb3JtYWxFeHByZXNzaW9uICYmIHRpbWVyRXZlbnRGb3JtYWxFeHByZXNzaW9uLmdldCgnYm9keScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBpZiAoIXRpbWVyRXZlbnRGb3JtYWxFeHByZXNzaW9uKSB7XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gY3JlYXRlVGltZXJGb3JtYWxFeHByZXNzaW9uKGJwbW5GYWN0b3J5LCB0aW1lckV2ZW50RGVmaW5pdGlvbik7XG4gICAgICBleHByZXNzaW9uLnNldCgnYm9keScsIHZhbHVlKTtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IHRpbWVyRXZlbnREZWZpbml0aW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgW3RpbWVyRXZlbnREZWZpbml0aW9uVHlwZV06IGV4cHJlc3Npb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogdGltZXJFdmVudEZvcm1hbEV4cHJlc3Npb24sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGJvZHk6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBGZWVsRW50cnlXaXRoVmFyaWFibGVDb250ZXh0KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAndGltZXJFdmVudERlZmluaXRpb25WYWx1ZScsXG4gICAgbGFiZWw6IGxhYmVsIHx8IHRyYW5zbGF0ZSgnVmFsdWUnKSxcbiAgICBmZWVsOiAnb3B0aW9uYWwnLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlLFxuICAgIHRvb2x0aXA6IGdldFRpbWVyRXZlbnREZWZpbml0aW9uVmFsdWVEZXNjcmlwdGlvbiQxKHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSwgdHJhbnNsYXRlKVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNyZWF0ZVRpbWVyRm9ybWFsRXhwcmVzc2lvbihicG1uRmFjdG9yeSwgZXZlbnREZWZpbml0aW9uKSB7XG4gIGNvbnN0IGZvcm1hbEV4cHJlc3Npb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHtcbiAgICBib2R5OiB1bmRlZmluZWRcbiAgfSk7XG4gIGZvcm1hbEV4cHJlc3Npb24uJHBhcmVudCA9IGV2ZW50RGVmaW5pdGlvbjtcbiAgcmV0dXJuIGZvcm1hbEV4cHJlc3Npb247XG59XG5mdW5jdGlvbiBnZXRUaW1lckV2ZW50RGVmaW5pdGlvblZhbHVlRGVzY3JpcHRpb24kMSh0aW1lckRlZmluaXRpb25UeXBlLCB0cmFuc2xhdGUpIHtcbiAgc3dpdGNoICh0aW1lckRlZmluaXRpb25UeXBlKSB7XG4gICAgY2FzZSAndGltZURhdGUnOlxuICAgICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgICBjaGlsZHJlbjogW2pzeChcInBcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0Egc3BlY2lmaWMgcG9pbnQgaW4gdGltZSBkZWZpbmVkIGFzIElTTyA4NjAxIGNvbWJpbmVkIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24uJylcbiAgICAgICAgfSksIGpzeHMoXCJ1bFwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFtqc3hzKFwibGlcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFwiMjAxOS0xMC0wMVQxMjowMDowMFpcIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnVVRDIHRpbWUnKV1cbiAgICAgICAgICB9KSwganN4cyhcImxpXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIjIwMTktMTAtMDJUMDg6MDk6NDArMDI6MDBcIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnVVRDIHBsdXMgMiBob3VycyB6b25lIG9mZnNldCcpXVxuICAgICAgICAgIH0pXVxuICAgICAgICB9KSwganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL3JlZmVyZW5jZS9icG1uLXByb2Nlc3Nlcy90aW1lci1ldmVudHMvdGltZXItZXZlbnRzI3RpbWUtZGF0ZVwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ1RpbWVyIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdIb3cgdG8gY29uZmlndXJlIGEgdGltZXInKVxuICAgICAgICB9KV1cbiAgICAgIH0pO1xuICAgIGNhc2UgJ3RpbWVDeWNsZSc6XG4gICAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbanN4KFwicFwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnQSBjeWNsZSBkZWZpbmVkIGFzIElTTyA4NjAxIHJlcGVhdGluZyBpbnRlcnZhbHMgZm9ybWF0LCBvciBhIGNyb24gZXhwcmVzc2lvbi4nKVxuICAgICAgICB9KSwganN4cyhcInVsXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogW2pzeHMoXCJsaVwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2pzeChcImNvZGVcIiwge1xuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJSNS9QVDEwU1wiXG4gICAgICAgICAgICB9KSwgXCIgLSBcIiwgdHJhbnNsYXRlKCdldmVyeSAxMCBzZWNvbmRzLCB1cCB0byA1IHRpbWVzJyldXG4gICAgICAgICAgfSksIGpzeHMoXCJsaVwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2pzeChcImNvZGVcIiwge1xuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJSL1AxRFwiXG4gICAgICAgICAgICB9KSwgXCIgLSBcIiwgdHJhbnNsYXRlKCdldmVyeSBkYXksIGluZmluaXRlbHknKV1cbiAgICAgICAgICB9KSwganN4cyhcImxpXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIjAgMCA5LTE3ICogKiBNT04tRlJJXCJcbiAgICAgICAgICAgIH0pLCBcIiAtIFwiLCB0cmFuc2xhdGUoJ2V2ZXJ5IGhvdXIgb24gdGhlIGhvdXIgZnJvbSA5LTUgcC5tLiBVVEMgTW9uZGF5LUZyaWRheScpXVxuICAgICAgICAgIH0pXVxuICAgICAgICB9KSwganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL3JlZmVyZW5jZS9icG1uLXByb2Nlc3Nlcy90aW1lci1ldmVudHMvdGltZXItZXZlbnRzI3RpbWUtY3ljbGVcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdUaW1lciBkb2N1bWVudGF0aW9uJyksXG4gICAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnSG93IHRvIGNvbmZpZ3VyZSBhIHRpbWVyJylcbiAgICAgICAgfSldXG4gICAgICB9KTtcbiAgICBjYXNlICd0aW1lRHVyYXRpb24nOlxuICAgICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgICBjaGlsZHJlbjogW2pzeChcInBcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0EgdGltZSBkdXJhdGlvbiBkZWZpbmVkIGFzIElTTyA4NjAxIGR1cmF0aW9ucyBmb3JtYXQuJylcbiAgICAgICAgfSksIGpzeHMoXCJ1bFwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFtqc3hzKFwibGlcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFwiUFQxNVNcIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnMTUgc2Vjb25kcycpXVxuICAgICAgICAgIH0pLCBqc3hzKFwibGlcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFwiUFQxSDMwTVwiXG4gICAgICAgICAgICB9KSwgXCIgLSBcIiwgdHJhbnNsYXRlKCcxIGhvdXIgYW5kIDMwIG1pbnV0ZXMnKV1cbiAgICAgICAgICB9KSwganN4cyhcImxpXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIlAxNERcIlxuICAgICAgICAgICAgfSksIFwiIC0gXCIsIHRyYW5zbGF0ZSgnMTQgZGF5cycpXVxuICAgICAgICAgIH0pXVxuICAgICAgICB9KSwganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL3JlZmVyZW5jZS9icG1uLXByb2Nlc3Nlcy90aW1lci1ldmVudHMvdGltZXItZXZlbnRzI3RpbWUtZHVyYXRpb25cIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdUaW1lciBkb2N1bWVudGF0aW9uJyksXG4gICAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnSG93IHRvIGNvbmZpZ3VyZSBhIHRpbWVyJylcbiAgICAgICAgfSldXG4gICAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBaRUVCRV9VU0VSX1RBU0tfSU1QTEVNRU5UQVRJT05fT1BUSU9OID0gJ3plZWJlVXNlclRhc2snLFxuICBKT0JfV09SS0VSX0lNUExFTUVOVEFUSU9OX09QVElPTiA9ICdqb2JXb3JrZXInO1xuZnVuY3Rpb24gVXNlclRhc2tJbXBsZW1lbnRhdGlvblByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAndXNlclRhc2tJbXBsZW1lbnRhdGlvbicsXG4gICAgY29tcG9uZW50OiBVc2VyVGFza0ltcGxlbWVudGF0aW9uLFxuICAgIGlzRWRpdGVkOiAoKSA9PiBpc1VzZXJUYXNrSW1wbGVtZW50YXRpb25FZGl0ZWQoZWxlbWVudClcbiAgfV07XG59XG5mdW5jdGlvbiBVc2VyVGFza0ltcGxlbWVudGF0aW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIGlmIChnZXRaZWViZVVzZXJUYXNrKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWkVFQkVfVVNFUl9UQVNLX0lNUExFTUVOVEFUSU9OX09QVElPTjtcbiAgICB9XG4gICAgcmV0dXJuIEpPQl9XT1JLRVJfSU1QTEVNRU5UQVRJT05fT1BUSU9OO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdmFsdWUgYnkgZWl0aGVyIGNyZWF0aW5nIG9yIHJlbW92aW5nIHplZWJlOnVzZXJUYXNrIGV4dGVuc2lvbiBlbGVtZW50LlxuICAgKiBOb3RlIHRoYXQgdGhleSBtdXN0IG5vdCBleGlzdCBib3RoIGF0IHRoZSBzYW1lIHRpbWUsIGhvd2V2ZXIgdGhpc1xuICAgKiB3aWxsIGJlIGVuc3VyZWQgYnkgYSBjYW11bmRhLWJwbW4tanMgYmVoYXZpb3IgKGFuZCBub3QgYnkgdGhlIHByb3BQYW5lbCkuXG4gICAqL1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBpZiAodmFsdWUgPT09IFpFRUJFX1VTRVJfVEFTS19JTVBMRU1FTlRBVElPTl9PUFRJT04pIHtcbiAgICAgIGNyZWF0ZVplZWJlVXNlclRhc2soZWxlbWVudCwgYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjayk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gSk9CX1dPUktFUl9JTVBMRU1FTlRBVElPTl9PUFRJT04pIHtcbiAgICAgIHJlbW92ZVplZWJlVXNlclRhc2soZWxlbWVudCwgY29tbWFuZFN0YWNrKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgICB2YWx1ZTogWkVFQkVfVVNFUl9UQVNLX0lNUExFTUVOVEFUSU9OX09QVElPTixcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1plZWJlIHVzZXIgdGFzaycpXG4gICAgfSwge1xuICAgICAgdmFsdWU6IEpPQl9XT1JLRVJfSU1QTEVNRU5UQVRJT05fT1BUSU9OLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnSm9iIHdvcmtlcicpXG4gICAgfV07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uc1xuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5mdW5jdGlvbiBjcmVhdGVaZWViZVVzZXJUYXNrKGVsZW1lbnQsIGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2spIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgemVlYmVVc2VyVGFzayA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOlVzZXJUYXNrJywge30sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gIGFkZEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCB6ZWViZVVzZXJUYXNrLCBicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVplZWJlVXNlclRhc2soZWxlbWVudCwgY29tbWFuZFN0YWNrKSB7XG4gIGNvbnN0IHplZWJlVXNlclRhc2sgPSBnZXRaZWViZVVzZXJUYXNrKGVsZW1lbnQpO1xuICByZW1vdmVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSwgemVlYmVVc2VyVGFzaywgY29tbWFuZFN0YWNrKTtcbn1cbmZ1bmN0aW9uIGlzVXNlclRhc2tJbXBsZW1lbnRhdGlvbkVkaXRlZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRaZWViZVVzZXJUYXNrKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0WmVlYmVVc2VyVGFzayhlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpVc2VyVGFzaycpWzBdO1xufVxuXG5mdW5jdGlvbiBWZXJzaW9uVGFnUHJvcHMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpICYmICEoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICd2ZXJzaW9uVGFnJyxcbiAgICBjb21wb25lbnQ6IFZlcnNpb25UYWckMixcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIFZlcnNpb25UYWckMihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgY29uc3QgdmVyc2lvblRhZyA9IGdldFZlcnNpb25UYWcoZWxlbWVudCk7XG4gICAgaWYgKHZlcnNpb25UYWcpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uVGFnLmdldCgndmFsdWUnKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0UHJvY2VzcyQ0KGVsZW1lbnQpO1xuICAgIGxldCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcblxuICAgIC8vICgxKSBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgZW5zdXJlIHZlcnNpb24gdGFnXG4gICAgbGV0IHZlcnNpb25UYWcgPSBnZXRWZXJzaW9uVGFnKGVsZW1lbnQpO1xuICAgIGlmICghdmVyc2lvblRhZykge1xuICAgICAgdmVyc2lvblRhZyA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOlZlcnNpb25UYWcnLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB2ZXJzaW9uVGFnXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIHVwZGF0ZSB2ZXJzaW9uIHRhZyB2YWx1ZVxuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogdmVyc2lvblRhZyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICd2ZXJzaW9uVGFnJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWZXJzaW9uIHRhZycpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFByb2Nlc3MkNChlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgPyBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSA6IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmdldCgncHJvY2Vzc1JlZicpO1xufVxuZnVuY3Rpb24gZ2V0VmVyc2lvblRhZyhlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0UHJvY2VzcyQ0KGVsZW1lbnQpO1xuICByZXR1cm4gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6VmVyc2lvblRhZycpWzBdO1xufVxuXG5mdW5jdGlvbiBFeHRlbnNpb25Qcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW3tcbiAgICBpZDogaWRQcmVmaXggKyAnLW5hbWUnLFxuICAgIGNvbXBvbmVudDogTmFtZVByb3BlcnR5JDEsXG4gICAgaWRQcmVmaXgsXG4gICAgcHJvcGVydHlcbiAgfSwge1xuICAgIGlkOiBpZFByZWZpeCArICctdmFsdWUnLFxuICAgIGNvbXBvbmVudDogVmFsdWVQcm9wZXJ0eSQxLFxuICAgIGlkUHJlZml4LFxuICAgIHByb3BlcnR5XG4gIH1dO1xuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIE5hbWVQcm9wZXJ0eSQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIHByb3BlcnR5XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBwcm9wZXJ0eSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHByb3BlcnR5Lm5hbWU7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogcHJvcGVydHksXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1uYW1lJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdOYW1lJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBWYWx1ZVByb3BlcnR5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHByb3BlcnR5LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gcHJvcGVydHkudmFsdWU7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogcHJvcGVydHksXG4gICAgaWQ6IGlkUHJlZml4ICsgJy12YWx1ZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFsdWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gRXh0ZW5zaW9uUHJvcGVydGllc1Byb3BzKHtcbiAgZWxlbWVudCxcbiAgaW5qZWN0b3IsXG4gIG5hbWVzcGFjZSA9ICdjYW11bmRhJ1xufSkge1xuICBsZXQgYnVzaW5lc3NPYmplY3QgPSBnZXRSZWxldmFudEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIC8vIGRvIG5vdCBvZmZlciBmb3IgZW1wdHkgcG9vbHNcbiAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc0xpc3QoYnVzaW5lc3NPYmplY3QsIG5hbWVzcGFjZSkgfHwgW107XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGl0ZW1zID0gcHJvcGVydGllcy5tYXAoKHByb3BlcnR5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZCArICctZXh0ZW5zaW9uUHJvcGVydHktJyArIGluZGV4O1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiBwcm9wZXJ0eS5nZXQoJ25hbWUnKSB8fCAnJyxcbiAgICAgIGVudHJpZXM6IEV4dGVuc2lvblByb3BlcnR5KHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBwcm9wZXJ0eVxuICAgICAgfSksXG4gICAgICBhdXRvRm9jdXNFbnRyeTogaWQgKyAnLW5hbWUnLFxuICAgICAgcmVtb3ZlOiByZW1vdmVGYWN0b3J5JDkoe1xuICAgICAgICBjb21tYW5kU3RhY2ssXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICBuYW1lc3BhY2VcbiAgICAgIH0pXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgYWRkOiBhZGRGYWN0b3J5JDYoe1xuICAgICAgYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2ssXG4gICAgICBlbGVtZW50LFxuICAgICAgbmFtZXNwYWNlXG4gICAgfSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUZhY3RvcnkkOSh7XG4gIGNvbW1hbmRTdGFjayxcbiAgZWxlbWVudCxcbiAgcHJvcGVydHksXG4gIG5hbWVzcGFjZVxufSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFJlbGV2YW50QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXMoYnVzaW5lc3NPYmplY3QsIG5hbWVzcGFjZSk7XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFtZShuYW1lc3BhY2UpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHdpdGhvdXQocHJvcGVydGllcy5nZXQocHJvcGVydHlOYW1lKSwgcHJvcGVydHkpO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogcHJvcGVydGllcyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIFtwcm9wZXJ0eU5hbWVdOiB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gcmVtb3ZlIGNhbXVuZGE6UHJvcGVydGllcyBpZiB0aGVyZSBhcmUgbm8gcHJvcGVydGllcyBhbnltb3JlXG4gICAgaWYgKCF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiB3aXRob3V0KGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIHByb3BlcnRpZXMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGFkZEZhY3RvcnkkNih7XG4gIGJwbW5GYWN0b3J5LFxuICBjb21tYW5kU3RhY2ssXG4gIGVsZW1lbnQsXG4gIG5hbWVzcGFjZVxufSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgbGV0IGNvbW1hbmRzID0gW107XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRSZWxldmFudEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGxldCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcblxuICAgIC8vICgxKSBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lKG5hbWVzcGFjZSk7XG5cbiAgICAvLyAoMikgZW5zdXJlIGNhbXVuZGE6UHJvcGVydGllc1xuICAgIGxldCBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllcyhidXNpbmVzc09iamVjdCwgbmFtZXNwYWNlKTtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGV4dGVuc2lvbkVsZW1lbnRzO1xuICAgICAgcHJvcGVydGllcyA9IGNyZWF0ZUVsZW1lbnQoYCR7bmFtZXNwYWNlfTpQcm9wZXJ0aWVzYCwge1xuICAgICAgICBbcHJvcGVydHlOYW1lXTogW11cbiAgICAgIH0sIHBhcmVudCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIHByb3BlcnRpZXNdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMykgY3JlYXRlIGNhbXVuZGE6UHJvcGVydHlcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGNyZWF0ZUVsZW1lbnQoYCR7bmFtZXNwYWNlfTpQcm9wZXJ0eWAsIHt9LCBwcm9wZXJ0aWVzLCBicG1uRmFjdG9yeSk7XG5cbiAgICAvLyAoNCkgYWRkIHByb3BlcnR5IHRvIGxpc3RcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IHByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBbcHJvcGVydHlOYW1lXTogWy4uLnByb3BlcnRpZXMuZ2V0KHByb3BlcnR5TmFtZSksIHByb3BlcnR5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNSkgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRSZWxldmFudEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgbGV0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpO1xuICB9XG4gIHJldHVybiBidXNpbmVzc09iamVjdDtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZShuYW1lc3BhY2UgPSAnY2FtdW5kYScpIHtcbiAgaWYgKG5hbWVzcGFjZSA9PT0gJ3plZWJlJykge1xuICAgIHJldHVybiAncHJvcGVydGllcyc7XG4gIH1cbiAgcmV0dXJuICd2YWx1ZXMnO1xufVxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhlbGVtZW50LCBuYW1lc3BhY2UgPSAnY2FtdW5kYScpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRSZWxldmFudEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCBgJHtuYW1lc3BhY2V9OlByb3BlcnRpZXNgKVswXTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXNMaXN0KGVsZW1lbnQsIG5hbWVzcGFjZSA9ICdjYW11bmRhJykge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFJlbGV2YW50QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0LCBuYW1lc3BhY2UpO1xuICByZXR1cm4gcHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzLmdldChnZXRQcm9wZXJ0eU5hbWUobmFtZXNwYWNlKSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbmNvbnN0IExPV19QUklPUklUWSQxID0gNTAwO1xuY29uc3QgWkVFQkVfR1JPVVBTID0gW0J1c2luZXNzUnVsZUltcGxlbWVudGF0aW9uR3JvdXAsIENhbGxlZERlY2lzaW9uR3JvdXAsIFNjcmlwdEltcGxlbWVudGF0aW9uR3JvdXAsIFNjcmlwdEdyb3VwJDEsIFVzZXJUYXNrSW1wbGVtZW50YXRpb25Hcm91cCwgVGFza0RlZmluaXRpb25Hcm91cCwgQXNzaWdubWVudERlZmluaXRpb25Hcm91cCwgRm9ybUdyb3VwJDEsIENvbmRpdGlvbkdyb3VwJDEsIFRhcmdldEdyb3VwLCBJbnB1dFByb3BhZ2F0aW9uR3JvdXAsIElucHV0R3JvdXAkMSwgT3V0cHV0UHJvcGFnYXRpb25Hcm91cCwgT3V0cHV0R3JvdXAkMSwgSGVhZGVyR3JvdXAsIFRhc2tMaXN0ZW5lcnNHcm91cCwgRXhlY3V0aW9uTGlzdGVuZXJzR3JvdXAsIEV4dGVuc2lvblByb3BlcnRpZXNHcm91cCQxXTtcbmNsYXNzIFplZWJlUHJvcGVydGllc1Byb3ZpZGVyIHtcbiAgY29uc3RydWN0b3IocHJvcGVydGllc1BhbmVsLCBpbmplY3Rvcikge1xuICAgIHByb3BlcnRpZXNQYW5lbC5yZWdpc3RlclByb3ZpZGVyKExPV19QUklPUklUWSQxLCB0aGlzKTtcbiAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xuICB9XG4gIGdldEdyb3VwcyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdyb3VwcyA9PiB7XG4gICAgICAvLyAoMSkgYWRkIHplZWJlIHNwZWNpZmljIGdyb3Vwc1xuICAgICAgZ3JvdXBzID0gZ3JvdXBzLmNvbmNhdCh0aGlzLl9nZXRHcm91cHMoZWxlbWVudCkpO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIGV4aXN0aW5nIGdyb3VwcyB3aXRoIHplZWJlIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICAgIHVwZGF0ZUdlbmVyYWxHcm91cCQxKGdyb3VwcywgZWxlbWVudCk7XG4gICAgICB1cGRhdGVFcnJvckdyb3VwJDEoZ3JvdXBzLCBlbGVtZW50KTtcbiAgICAgIHVwZGF0ZUVzY2FsYXRpb25Hcm91cCQxKGdyb3VwcywgZWxlbWVudCk7XG4gICAgICB1cGRhdGVNZXNzYWdlR3JvdXAoZ3JvdXBzLCBlbGVtZW50KTtcbiAgICAgIHVwZGF0ZVNpZ25hbEdyb3VwKGdyb3VwcywgZWxlbWVudCk7XG4gICAgICB1cGRhdGVUaW1lckdyb3VwJDEoZ3JvdXBzLCBlbGVtZW50LCB0aGlzLl9pbmplY3Rvcik7XG4gICAgICB1cGRhdGVNdWx0aUluc3RhbmNlR3JvdXAkMShncm91cHMsIGVsZW1lbnQpO1xuXG4gICAgICAvLyAoMykgcmVtb3ZlIG1lc3NhZ2UgZ3JvdXAgd2hlbiBub3QgYXBwbGljYWJsZVxuICAgICAgZ3JvdXBzID0gcmVtb3ZlTWVzc2FnZUdyb3VwKGdyb3VwcywgZWxlbWVudCk7XG4gICAgICByZXR1cm4gZ3JvdXBzO1xuICAgIH07XG4gIH1cbiAgX2dldEdyb3VwcyhlbGVtZW50KSB7XG4gICAgY29uc3QgZ3JvdXBzID0gWkVFQkVfR1JPVVBTLm1hcChjcmVhdGVHcm91cCA9PiBjcmVhdGVHcm91cChlbGVtZW50LCB0aGlzLl9pbmplY3RvcikpO1xuICAgIHJldHVybiBncm91cHMuZmlsdGVyKGdyb3VwID0+IGdyb3VwICE9PSBudWxsKTtcbiAgfVxufVxuWmVlYmVQcm9wZXJ0aWVzUHJvdmlkZXIuJGluamVjdCA9IFsncHJvcGVydGllc1BhbmVsJywgJ2luamVjdG9yJ107XG5mdW5jdGlvbiBDYWxsZWREZWNpc2lvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnY2FsbGVkRGVjaXNpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhbGxlZCBkZWNpc2lvbicpLFxuICAgIGVudHJpZXM6IFsuLi5DYWxsZWREZWNpc2lvblByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV0sXG4gICAgY29tcG9uZW50OiBHcm91cFxuICB9O1xuICByZXR1cm4gZ3JvdXAuZW50cmllcy5sZW5ndGggPyBncm91cCA6IG51bGw7XG59XG5mdW5jdGlvbiBTY3JpcHRHcm91cCQxKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnc2NyaXB0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTY3JpcHQnKSxcbiAgICBlbnRyaWVzOiBbLi4uU2NyaXB0UHJvcHMkMSh7XG4gICAgICBlbGVtZW50XG4gICAgfSldLFxuICAgIGNvbXBvbmVudDogR3JvdXBcbiAgfTtcbiAgcmV0dXJuIGdyb3VwLmVudHJpZXMubGVuZ3RoID8gZ3JvdXAgOiBudWxsO1xufVxuZnVuY3Rpb24gVGFza0RlZmluaXRpb25Hcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBpZDogJ3Rhc2tEZWZpbml0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUYXNrIGRlZmluaXRpb24nKSxcbiAgICBlbnRyaWVzOiBbLi4uVGFza0RlZmluaXRpb25Qcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSldLFxuICAgIGNvbXBvbmVudDogR3JvdXBcbiAgfTtcbiAgcmV0dXJuIGdyb3VwLmVudHJpZXMubGVuZ3RoID8gZ3JvdXAgOiBudWxsO1xufVxuZnVuY3Rpb24gSW5wdXRHcm91cCQxKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnaW5wdXRzJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dHMnKSxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICAuLi5JbnB1dFByb3BzJDEoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgcmV0dXJuIGdyb3VwLml0ZW1zID8gZ3JvdXAgOiBudWxsO1xufVxuZnVuY3Rpb24gT3V0cHV0R3JvdXAkMShlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBpZDogJ291dHB1dHMnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dHB1dHMnKSxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICAuLi5PdXRwdXRQcm9wcyQxKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpbmplY3RvclxuICAgIH0pXG4gIH07XG4gIHJldHVybiBncm91cC5pdGVtcyA/IGdyb3VwIDogbnVsbDtcbn1cbmZ1bmN0aW9uIENvbmRpdGlvbkdyb3VwJDEoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgaWQ6ICdjb25kaXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvbmRpdGlvbicpLFxuICAgIGVudHJpZXM6IFsuLi5Db25kaXRpb25Qcm9wcyQxKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV0sXG4gICAgY29tcG9uZW50OiBHcm91cFxuICB9O1xuICByZXR1cm4gZ3JvdXAuZW50cmllcy5sZW5ndGggPyBncm91cCA6IG51bGw7XG59XG5mdW5jdGlvbiBGb3JtR3JvdXAkMShlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBpZDogJ2Zvcm0nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Zvcm0nKSxcbiAgICBlbnRyaWVzOiBbLi4uRm9ybVByb3BzJDEoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSldLFxuICAgIGNvbXBvbmVudDogR3JvdXBcbiAgfTtcbiAgcmV0dXJuIGdyb3VwLmVudHJpZXMubGVuZ3RoID8gZ3JvdXAgOiBudWxsO1xufVxuZnVuY3Rpb24gVGFyZ2V0R3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgaWQ6ICdjYWxsZWRFbGVtZW50JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDYWxsZWQgZWxlbWVudCcpLFxuICAgIGVudHJpZXM6IFsuLi5UYXJnZXRQcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSldLFxuICAgIGNvbXBvbmVudDogR3JvdXBcbiAgfTtcbiAgcmV0dXJuIGdyb3VwLmVudHJpZXMubGVuZ3RoID8gZ3JvdXAgOiBudWxsO1xufVxuZnVuY3Rpb24gSGVhZGVyR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgaWQ6ICdoZWFkZXJzJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdIZWFkZXJzJyksXG4gICAgY29tcG9uZW50OiBMaXN0R3JvdXAsXG4gICAgLi4uSGVhZGVyUHJvcHMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgcmV0dXJuIGdyb3VwLml0ZW1zID8gZ3JvdXAgOiBudWxsO1xufVxuZnVuY3Rpb24gT3V0cHV0UHJvcGFnYXRpb25Hcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBpZDogJ291dHB1dFByb3BhZ2F0aW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdPdXRwdXQgcHJvcGFnYXRpb24nKSxcbiAgICBlbnRyaWVzOiBbLi4uT3V0cHV0UHJvcGFnYXRpb25Qcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSldLFxuICAgIGNvbXBvbmVudDogR3JvdXBcbiAgfTtcbiAgcmV0dXJuIGdyb3VwLmVudHJpZXMubGVuZ3RoID8gZ3JvdXAgOiBudWxsO1xufVxuZnVuY3Rpb24gSW5wdXRQcm9wYWdhdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnaW5wdXRQcm9wYWdhdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW5wdXQgcHJvcGFnYXRpb24nKSxcbiAgICBlbnRyaWVzOiBbLi4uSW5wdXRQcm9wYWdhdGlvblByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV0sXG4gICAgY29tcG9uZW50OiBHcm91cFxuICB9O1xuICByZXR1cm4gZ3JvdXAuZW50cmllcy5sZW5ndGggPyBncm91cCA6IG51bGw7XG59XG5mdW5jdGlvbiBCdXNpbmVzc1J1bGVJbXBsZW1lbnRhdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnYnVzaW5lc3NSdWxlSW1wbGVtZW50YXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ltcGxlbWVudGF0aW9uJyksXG4gICAgZW50cmllczogWy4uLkJ1c2luZXNzUnVsZUltcGxlbWVudGF0aW9uUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXSxcbiAgICBjb21wb25lbnQ6IEdyb3VwXG4gIH07XG4gIHJldHVybiBncm91cC5lbnRyaWVzLmxlbmd0aCA/IGdyb3VwIDogbnVsbDtcbn1cbmZ1bmN0aW9uIFNjcmlwdEltcGxlbWVudGF0aW9uR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgaWQ6ICdzY3JpcHRJbXBsZW1lbnRhdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW1wbGVtZW50YXRpb24nKSxcbiAgICBlbnRyaWVzOiBbLi4uU2NyaXB0SW1wbGVtZW50YXRpb25Qcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSldLFxuICAgIGNvbXBvbmVudDogR3JvdXBcbiAgfTtcbiAgcmV0dXJuIGdyb3VwLmVudHJpZXMubGVuZ3RoID8gZ3JvdXAgOiBudWxsO1xufVxuZnVuY3Rpb24gVXNlclRhc2tJbXBsZW1lbnRhdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAndXNlclRhc2tJbXBsZW1lbnRhdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW1wbGVtZW50YXRpb24nKSxcbiAgICBlbnRyaWVzOiBbLi4uVXNlclRhc2tJbXBsZW1lbnRhdGlvblByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV0sXG4gICAgY29tcG9uZW50OiBHcm91cFxuICB9O1xuICByZXR1cm4gZ3JvdXAuZW50cmllcy5sZW5ndGggPyBncm91cCA6IG51bGw7XG59XG5mdW5jdGlvbiBBc3NpZ25tZW50RGVmaW5pdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGlkOiAnYXNzaWdubWVudERlZmluaXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Fzc2lnbm1lbnQnKSxcbiAgICBlbnRyaWVzOiBbLi4uQXNzaWdubWVudERlZmluaXRpb25Qcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSksIC4uLlRhc2tTY2hlZHVsZVByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KSwgLi4uUHJpb3JpdHlEZWZpbml0aW9uUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXSxcbiAgICBjb21wb25lbnQ6IEdyb3VwXG4gIH07XG4gIHJldHVybiBncm91cC5lbnRyaWVzLmxlbmd0aCA/IGdyb3VwIDogbnVsbDtcbn1cbmZ1bmN0aW9uIEV4ZWN1dGlvbkxpc3RlbmVyc0dyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V4ZWN1dGlvbiBsaXN0ZW5lcnMnKSxcbiAgICBpZDogJ1plZWJlX19FeGVjdXRpb25MaXN0ZW5lcnMnLFxuICAgIGNvbXBvbmVudDogTGlzdEdyb3VwLFxuICAgIC4uLkV4ZWN1dGlvbkxpc3RlbmVyc1Byb3BzKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpbmplY3RvclxuICAgIH0pXG4gIH07XG4gIGlmIChncm91cC5pdGVtcykge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIFRhc2tMaXN0ZW5lcnNHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUYXNrIGxpc3RlbmVycycpLFxuICAgIGlkOiAnWmVlYmVfX1Rhc2tMaXN0ZW5lcnMnLFxuICAgIGNvbXBvbmVudDogTGlzdEdyb3VwLFxuICAgIC4uLlRhc2tMaXN0ZW5lcnNQcm9wcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5qZWN0b3JcbiAgICB9KVxuICB9O1xuICBpZiAoZ3JvdXAuaXRlbXMpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBFeHRlbnNpb25Qcm9wZXJ0aWVzR3JvdXAkMShlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFeHRlbnNpb24gcHJvcGVydGllcycpLFxuICAgIGlkOiAnWmVlYmVfX0V4dGVuc2lvblByb3BlcnRpZXMnLFxuICAgIGNvbXBvbmVudDogTGlzdEdyb3VwLFxuICAgIC4uLkV4dGVuc2lvblByb3BlcnRpZXNQcm9wcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5qZWN0b3IsXG4gICAgICBuYW1lc3BhY2U6ICd6ZWViZSdcbiAgICB9KVxuICB9O1xuICBpZiAoZ3JvdXAuaXRlbXMpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiB1cGRhdGVHZW5lcmFsR3JvdXAkMShncm91cHMsIGVsZW1lbnQpIHtcbiAgY29uc3QgZ2VuZXJhbEdyb3VwID0gZmluZEdyb3VwJDEoZ3JvdXBzLCAnZ2VuZXJhbCcpO1xuICBpZiAoIWdlbmVyYWxHcm91cCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7XG4gICAgZW50cmllc1xuICB9ID0gZ2VuZXJhbEdyb3VwO1xuICBjb25zdCBleGVjdXRhYmxlRW50cnkgPSBmaW5kSW5kZXgoZW50cmllcywgZW50cnkgPT4gZW50cnkuaWQgPT09ICdpc0V4ZWN1dGFibGUnKTtcbiAgY29uc3QgaW5zZXJ0SW5kZXggPSBleGVjdXRhYmxlRW50cnkgPj0gMCA/IGV4ZWN1dGFibGVFbnRyeSA6IGVudHJpZXMubGVuZ3RoO1xuICBlbnRyaWVzLnNwbGljZShpbnNlcnRJbmRleCwgMCwgLi4uVmVyc2lvblRhZ1Byb3BzJDEoe1xuICAgIGVsZW1lbnRcbiAgfSkpO1xufVxuZnVuY3Rpb24gdXBkYXRlRXJyb3JHcm91cCQxKGdyb3VwcywgZWxlbWVudCkge1xuICBjb25zdCBlcnJvckdyb3VwID0gZmluZEdyb3VwJDEoZ3JvdXBzLCAnZXJyb3InKTtcbiAgaWYgKCFlcnJvckdyb3VwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVycm9yR3JvdXAuZW50cmllcyA9IHJlcGxhY2VFbnRyaWVzKGVycm9yR3JvdXAuZW50cmllcywgRXJyb3JQcm9wcyQxKHtcbiAgICBlbGVtZW50XG4gIH0pKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUVzY2FsYXRpb25Hcm91cCQxKGdyb3VwcywgZWxlbWVudCkge1xuICBjb25zdCBlc2NhbGF0aW9uR3JvdXAgPSBmaW5kR3JvdXAkMShncm91cHMsICdlc2NhbGF0aW9uJyk7XG4gIGlmICghZXNjYWxhdGlvbkdyb3VwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVzY2FsYXRpb25Hcm91cC5lbnRyaWVzID0gcmVwbGFjZUVudHJpZXMoZXNjYWxhdGlvbkdyb3VwLmVudHJpZXMsIEVzY2FsYXRpb25Qcm9wcyQxKHtcbiAgICBlbGVtZW50XG4gIH0pKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVNpZ25hbEdyb3VwKGdyb3VwcywgZWxlbWVudCkge1xuICBjb25zdCBzaWduYWxHcm91cCA9IGZpbmRHcm91cCQxKGdyb3VwcywgJ3NpZ25hbCcpO1xuICBpZiAoIXNpZ25hbEdyb3VwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNpZ25hbEdyb3VwLmVudHJpZXMgPSByZXBsYWNlRW50cmllcyhzaWduYWxHcm91cC5lbnRyaWVzLCBTaWduYWxQcm9wcyh7XG4gICAgZWxlbWVudFxuICB9KSk7XG59XG5mdW5jdGlvbiB1cGRhdGVNZXNzYWdlR3JvdXAoZ3JvdXBzLCBlbGVtZW50KSB7XG4gIGNvbnN0IG1lc3NhZ2VHcm91cCA9IGZpbmRHcm91cCQxKGdyb3VwcywgJ21lc3NhZ2UnKTtcbiAgaWYgKCFtZXNzYWdlR3JvdXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbWVzc2FnZUdyb3VwLmVudHJpZXMgPSByZXBsYWNlRW50cmllcyhtZXNzYWdlR3JvdXAuZW50cmllcywgTWVzc2FnZVByb3BzKHtcbiAgICBlbGVtZW50XG4gIH0pKTtcbn1cblxuLy8gb3ZlcndyaXRlIGJwbW4gZ2VuZXJpYyB0aW1lckV2ZW50RGVmaW5pdGlvbiBncm91cCB3aXRoIHplZWJlLXNwZWNpZmljIG9uZVxuZnVuY3Rpb24gdXBkYXRlVGltZXJHcm91cCQxKGdyb3VwcywgZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdGltZXJFdmVudEdyb3VwID0gZmluZEdyb3VwJDEoZ3JvdXBzLCAndGltZXInKTtcbiAgaWYgKCF0aW1lckV2ZW50R3JvdXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGltZXJFdmVudEdyb3VwLmVudHJpZXMgPSBbLi4uVGltZXJQcm9wcyQxKHtcbiAgICBlbGVtZW50LFxuICAgIGluamVjdG9yXG4gIH0pXTtcbn1cblxuLy8gb3ZlcndyaXRlIGJwbW4gZ2VuZXJpYyBtdWx0aUluc3RhbmNlIGdyb3VwIHdpdGggemVlYmUtc3BlY2lmaWMgb25lXG5mdW5jdGlvbiB1cGRhdGVNdWx0aUluc3RhbmNlR3JvdXAkMShncm91cHMsIGVsZW1lbnQpIHtcbiAgY29uc3QgbXVsdGlJbnN0YW5jZUdyb3VwID0gZmluZEdyb3VwJDEoZ3JvdXBzLCAnbXVsdGlJbnN0YW5jZScpO1xuICBpZiAoIW11bHRpSW5zdGFuY2VHcm91cCkge1xuICAgIHJldHVybjtcbiAgfVxuICBtdWx0aUluc3RhbmNlR3JvdXAuZW50cmllcyA9IFsuLi5NdWx0aUluc3RhbmNlUHJvcHMkMSh7XG4gICAgZWxlbWVudFxuICB9KV07XG59XG5cbi8vIHJlbW92ZSBtZXNzYWdlIGdyb3VwIGZyb20gTWVzc2FnZSBFbmQgRXZlbnQgJiBNZXNzYWdlIFRocm93IEV2ZW50XG5mdW5jdGlvbiByZW1vdmVNZXNzYWdlR3JvdXAoZ3JvdXBzLCBlbGVtZW50KSB7XG4gIGNvbnN0IG1lc3NhZ2VHcm91cCA9IGZpbmRHcm91cCQxKGdyb3VwcywgJ21lc3NhZ2UnKTtcbiAgaWYgKGlzTWVzc2FnZUVuZEV2ZW50KGVsZW1lbnQpIHx8IGlzTWVzc2FnZVRocm93RXZlbnQoZWxlbWVudCkpIHtcbiAgICBncm91cHMgPSBncm91cHMuZmlsdGVyKGcgPT4gZyAhPSBtZXNzYWdlR3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cHM7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZmluZEdyb3VwJDEoZ3JvdXBzLCBpZCkge1xuICByZXR1cm4gZ3JvdXBzLmZpbmQoZyA9PiBnLmlkID09PSBpZCk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgSUQuXG4gKnNcbiAqIEBwYXJhbSB7RW50cnlbXX0gb2xkRW50cmllc1xuICogQHBhcmFtIHtFbnRyeVtdfSBuZXdFbnRyaWVzXG4gKlxuICogQHJldHVybnMge0VudHJ5W119IGNvbWJpbmVkIGVudHJpZXNcbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUVudHJpZXMob2xkRW50cmllcywgbmV3RW50cmllcykge1xuICBjb25zdCBmaWx0ZXJlZEVudHJpZXMgPSBvbGRFbnRyaWVzLmZpbHRlcihvbGRFbnRyeSA9PiAhbmV3RW50cmllcy5maW5kKG5ld0VudHJ5ID0+IG5ld0VudHJ5LmlkID09PSBvbGRFbnRyeS5pZCkpO1xuICByZXR1cm4gWy4uLmZpbHRlcmVkRW50cmllcywgLi4ubmV3RW50cmllc107XG59XG5cbnZhciBpbmRleCQxID0ge1xuICBfX2luaXRfXzogWyd6ZWViZVByb3BlcnRpZXNQcm92aWRlciddLFxuICB6ZWViZVByb3BlcnRpZXNQcm92aWRlcjogWyd0eXBlJywgWmVlYmVQcm9wZXJ0aWVzUHJvdmlkZXJdXG59O1xuXG5mdW5jdGlvbiBBc3luY2hyb25vdXNDb250aW51YXRpb25zUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjaGVja2JveElzRWRpdGVkSW52ZXJ0ZWQgPSBub2RlID0+IHtcbiAgICByZXR1cm4gbm9kZSAmJiAhbm9kZS5jaGVja2VkO1xuICB9O1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIGlmIChpcyhlbGVtZW50LCAnY2FtdW5kYTpBc3luY0NhcGFibGUnKSkge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2FzeW5jaHJvbm91c0NvbnRpbnVhdGlvbkJlZm9yZScsXG4gICAgICBjb21wb25lbnQ6IEFzeW5jaHJvbm91c0NvbnRpbnVhdGlvbkJlZm9yZSxcbiAgICAgIGlzRWRpdGVkOiBpc0NoZWNrYm94RW50cnlFZGl0ZWRcbiAgICB9LCB7XG4gICAgICBpZDogJ2FzeW5jaHJvbm91c0NvbnRpbnVhdGlvbkFmdGVyJyxcbiAgICAgIGNvbXBvbmVudDogQXN5bmNocm9ub3VzQ29udGludWF0aW9uQWZ0ZXIsXG4gICAgICBpc0VkaXRlZDogaXNDaGVja2JveEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gICAgaWYgKGlzQXN5bmNCZWZvcmUkMihidXNpbmVzc09iamVjdCkgfHwgaXNBc3luY0FmdGVyJDIoYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICBpZDogJ2V4Y2x1c2l2ZScsXG4gICAgICAgIGNvbXBvbmVudDogRXhjbHVzaXZlLFxuICAgICAgICBpc0VkaXRlZDogY2hlY2tib3hJc0VkaXRlZEludmVydGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBBc3luY2hyb25vdXNDb250aW51YXRpb25CZWZvcmUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGlzQXN5bmNCZWZvcmUkMihidXNpbmVzc09iamVjdCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIC8vIG92ZXJ3cml0ZSB0aGUgbGVnYWN5IGBhc3luY2AgcHJvcGVydHksIHdlIHdpbGwgdXNlIHRoZSBtb3JlIGV4cGxpY2l0IGBhc3luY0JlZm9yZWBcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICdjYW11bmRhOmFzeW5jQmVmb3JlJzogdmFsdWUsXG4gICAgICAnY2FtdW5kYTphc3luYyc6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBDaGVja2JveEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnYXN5bmNocm9ub3VzQ29udGludWF0aW9uQmVmb3JlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdCZWZvcmUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIEFzeW5jaHJvbm91c0NvbnRpbnVhdGlvbkFmdGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0FzeW5jQWZ0ZXIkMihidXNpbmVzc09iamVjdCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmFzeW5jQWZ0ZXInOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gQ2hlY2tib3hFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2FzeW5jaHJvbm91c0NvbnRpbnVhdGlvbkFmdGVyJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdBZnRlcicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0pO1xufVxuZnVuY3Rpb24gRXhjbHVzaXZlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0V4Y2x1c2l2ZSQxKGJ1c2luZXNzT2JqZWN0KTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6ZXhjbHVzaXZlJzogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIENoZWNrYm94RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdleGNsdXNpdmUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V4Y2x1c2l2ZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgJ2NhbXVuZGE6YXN5bmNCZWZvcmUnIGlzIHNldFxuICogdG8gdHJ1ZS5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBib1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlJDIoYm8pIHtcbiAgcmV0dXJuICEhKGJvLmdldCgnY2FtdW5kYTphc3luY0JlZm9yZScpIHx8IGJvLmdldCgnY2FtdW5kYTphc3luYycpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnY2FtdW5kYTphc3luY0FmdGVyJyBpcyBzZXRcbiAqIHRvIHRydWUuXG4gKlxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNBc3luY0FmdGVyJDIoYm8pIHtcbiAgcmV0dXJuICEhYm8uZ2V0KCdjYW11bmRhOmFzeW5jQWZ0ZXInKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnY2FtdW5kYTpleGNsdXNpdmUnIGlzIHNldFxuICogdG8gdHJ1ZS5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBib1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc0V4Y2x1c2l2ZSQxKGJvKSB7XG4gIHJldHVybiAhIWJvLmdldCgnY2FtdW5kYTpleGNsdXNpdmUnKTtcbn1cblxuY29uc3QgRU1QVFlfT1BUSU9OJDEgPSAnJztcbmZ1bmN0aW9uIEJ1c2luZXNzS2V5UHJvcHMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpIHx8ICFoYXNGb3JtRmllbGRzKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAnYnVzaW5lc3NLZXknLFxuICAgIGNvbXBvbmVudDogQnVzaW5lc3NLZXkkMSxcbiAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIEJ1c2luZXNzS2V5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGZvcm1EYXRhID0gZ2V0Rm9ybURhdGEkMihlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGZvcm1EYXRhLmdldCgnY2FtdW5kYTpidXNpbmVzc0tleScpIHx8ICcnO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1EYXRhLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpidXNpbmVzc0tleSc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgICB2YWx1ZTogRU1QVFlfT1BUSU9OJDEsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICAgIH1dO1xuICAgIGNvbnN0IGZpZWxkcyA9IGZvcm1EYXRhLmdldCgnZmllbGRzJyk7XG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgY29uc3QgaWQgPSBmaWVsZC5nZXQoJ2NhbXVuZGE6aWQnKTtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICAgIHZhbHVlOiBpZCxcbiAgICAgICAgICBsYWJlbDogaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2J1c2luZXNzS2V5JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdLZXknKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRGb3JtRGF0YSQyKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6Rm9ybURhdGEnKVswXTtcbn1cbmZ1bmN0aW9uIGhhc0Zvcm1GaWVsZHMoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBmb3JtRGF0YSA9IGdldEZvcm1EYXRhJDIoYnVzaW5lc3NPYmplY3QpO1xuICByZXR1cm4gZm9ybURhdGEgJiYgZm9ybURhdGEuZ2V0KCdjYW11bmRhOmZpZWxkcycpLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gQ2FsbGVkQnBtblByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZW50cmllcyA9IFt7XG4gICAgaWQ6ICdjYWxsZWRFbGVtZW50JyxcbiAgICBjb21wb25lbnQ6IENhbGxlZEVsZW1lbnQsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAnY2FsbGVkRWxlbWVudEJpbmRpbmcnLFxuICAgIGNvbXBvbmVudDogQ2FsbGVkRWxlbWVudEJpbmRpbmcsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAnY2FsbGVkRWxlbWVudFRlbmFudElkJyxcbiAgICBjb21wb25lbnQ6IENhbGxlZEVsZW1lbnRUZW5hbnRJZCxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9XTtcbiAgY29uc3QgYmluZGluZyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmdldCgnY2FtdW5kYTpjYWxsZWRFbGVtZW50QmluZGluZycpO1xuICBpZiAoYmluZGluZyA9PT0gJ3ZlcnNpb24nKSB7XG4gICAgZW50cmllcy5zcGxpY2UoLTEsIDAsIHtcbiAgICAgIGlkOiAnY2FsbGVkRWxlbWVudFZlcnNpb24nLFxuICAgICAgY29tcG9uZW50OiBDYWxsZWRFbGVtZW50VmVyc2lvbixcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoYmluZGluZyA9PT0gJ3ZlcnNpb25UYWcnKSB7XG4gICAgZW50cmllcy5zcGxpY2UoLTEsIDAsIHtcbiAgICAgIGlkOiAnY2FsbGVkRWxlbWVudFZlcnNpb25UYWcnLFxuICAgICAgY29tcG9uZW50OiBDYWxsZWRFbGVtZW50VmVyc2lvblRhZyxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBDYWxsZWRFbGVtZW50KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ2NhbGxlZEVsZW1lbnQnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICBjYWxsZWRFbGVtZW50OiB2YWx1ZSB8fCAnJ1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4ganN4KFRleHRGaWVsZEVudHJ5LCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBpZDogXCJjYWxsZWRFbGVtZW50XCIsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FsbGVkIGVsZW1lbnQnKSxcbiAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgIGRlYm91bmNlOiBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIENhbGxlZEVsZW1lbnRCaW5kaW5nKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmdldCgnY2FtdW5kYTpjYWxsZWRFbGVtZW50QmluZGluZycpIHx8ICdsYXRlc3QnO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgIGNhbGxlZEVsZW1lbnRCaW5kaW5nOiB2YWx1ZSA9PT0gJ2xhdGVzdCcgPyB1bmRlZmluZWQgOiB2YWx1ZSxcbiAgICAgIGNhbGxlZEVsZW1lbnRWZXJzaW9uOiB1bmRlZmluZWQsXG4gICAgICBjYWxsZWRFbGVtZW50VmVyc2lvblRhZzogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiBbe1xuICAgIHZhbHVlOiAnbGF0ZXN0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdsYXRlc3QnKVxuICB9LCB7XG4gICAgdmFsdWU6ICdkZXBsb3ltZW50JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdkZXBsb3ltZW50JylcbiAgfSwge1xuICAgIHZhbHVlOiAndmVyc2lvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgndmVyc2lvbicpXG4gIH0sIHtcbiAgICB2YWx1ZTogJ3ZlcnNpb25UYWcnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ3ZlcnNpb24gdGFnJylcbiAgfV07XG4gIHJldHVybiBqc3goU2VsZWN0RW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGlkOiBcImNhbGxlZEVsZW1lbnRCaW5kaW5nXCIsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQmluZGluZycpLFxuICAgIGdldFZhbHVlOiBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZTogc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uczogZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIENhbGxlZEVsZW1lbnRWZXJzaW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ2NhbXVuZGE6Y2FsbGVkRWxlbWVudFZlcnNpb24nKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICBjYWxsZWRFbGVtZW50VmVyc2lvbjogdmFsdWVcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIGpzeChUZXh0RmllbGRFbnRyeSwge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaWQ6IFwiY2FsbGVkRWxlbWVudFZlcnNpb25cIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWZXJzaW9uJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBDYWxsZWRFbGVtZW50VmVyc2lvblRhZyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuZ2V0KCdjYW11bmRhOmNhbGxlZEVsZW1lbnRWZXJzaW9uVGFnJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgY2FsbGVkRWxlbWVudFZlcnNpb25UYWc6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBqc3goVGV4dEZpZWxkRW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGlkOiBcImNhbGxlZEVsZW1lbnRWZXJzaW9uVGFnXCIsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmVyc2lvbiB0YWcnKSxcbiAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgIGRlYm91bmNlOiBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIENhbGxlZEVsZW1lbnRUZW5hbnRJZChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuZ2V0KCdjYW11bmRhOmNhbGxlZEVsZW1lbnRUZW5hbnRJZCcpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgIGNhbGxlZEVsZW1lbnRUZW5hbnRJZDogdmFsdWVcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIGpzeChUZXh0RmllbGRFbnRyeSwge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaWQ6IFwiY2FsbGVkRWxlbWVudFRlbmFudElkXCIsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGVuYW50IElEJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2VcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIENhbGxlZENtbW5Qcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiAnY2FsbGVkRWxlbWVudENhc2VSZWYnLFxuICAgIGNvbXBvbmVudDogQ2FzZVJlZixcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9LCB7XG4gICAgaWQ6ICdjYWxsZWRFbGVtZW50Q2FzZUJpbmRpbmcnLFxuICAgIGNvbXBvbmVudDogQ2FzZUJpbmRpbmcsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAnY2FsbGVkRWxlbWVudENhc2VUZW5hbnRJZCcsXG4gICAgY29tcG9uZW50OiBDYXNlVGVuYW50SWQsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ2NhbXVuZGE6Y2FzZUJpbmRpbmcnKSA9PT0gJ3ZlcnNpb24nKSB7XG4gICAgZW50cmllcy5zcGxpY2UoLTEsIDAsIHtcbiAgICAgIGlkOiAnY2FsbGVkRWxlbWVudENhc2VWZXJzaW9uJyxcbiAgICAgIGNvbXBvbmVudDogQ2FzZVZlcnNpb24sXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBlbnRyaWVzO1xufVxuZnVuY3Rpb24gQ2FzZVJlZihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuZ2V0KCdjYW11bmRhOmNhc2VSZWYnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICBjYXNlUmVmOiB2YWx1ZSB8fCAnJ1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4ganN4KFRleHRGaWVsZEVudHJ5LCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBpZDogXCJjYWxsZWRFbGVtZW50Q2FzZVJlZlwiLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Nhc2UgcmVmJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBDYXNlQmluZGluZyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ2NhbXVuZGE6Y2FzZUJpbmRpbmcnKSB8fCAnbGF0ZXN0JztcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICBjYXNlQmluZGluZzogdmFsdWUgPT09ICdsYXRlc3QnID8gdW5kZWZpbmVkIDogdmFsdWUsXG4gICAgICBjYXNlVmVyc2lvbjogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiBbe1xuICAgIHZhbHVlOiAnbGF0ZXN0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdsYXRlc3QnKVxuICB9LCB7XG4gICAgdmFsdWU6ICdkZXBsb3ltZW50JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdkZXBsb3ltZW50JylcbiAgfSwge1xuICAgIHZhbHVlOiAndmVyc2lvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgndmVyc2lvbicpXG4gIH1dO1xuICByZXR1cm4ganN4KFNlbGVjdEVudHJ5LCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBpZDogXCJjYWxsZWRFbGVtZW50Q2FzZUJpbmRpbmdcIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdCaW5kaW5nJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zOiBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gQ2FzZVZlcnNpb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBtb2RlbGluZyA9IHVzZVNlcnZpY2UoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmdldCgnY2FtdW5kYTpjYXNlVmVyc2lvbicpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgIGNhc2VWZXJzaW9uOiB2YWx1ZVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ganN4KFRleHRGaWVsZEVudHJ5LCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBpZDogXCJjYWxsZWRFbGVtZW50Q2FzZVZlcnNpb25cIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWZXJzaW9uJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBDYXNlVGVuYW50SWQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBtb2RlbGluZyA9IHVzZVNlcnZpY2UoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmdldCgnY2FtdW5kYTpjYXNlVGVuYW50SWQnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICBjYXNlVGVuYW50SWQ6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBqc3goVGV4dEZpZWxkRW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGlkOiBcImNhbGxlZEVsZW1lbnRDYXNlVGVuYW50SWRcIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUZW5hbnQgSUQnKSxcbiAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgIGRlYm91bmNlOiBkZWJvdW5jZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gRGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiAnY2FsbGVkRWxlbWVudERlbGVnYXRlVmFyaWFibGVNYXBwaW5nVHlwZScsXG4gICAgY29tcG9uZW50OiBEZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfV07XG4gIGNvbnN0IHR5cGUgPSBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCk7XG4gIGlmICh0eXBlID09PSAnY2xhc3MnKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnY2FsbGVkRWxlbWVudFZhcmlhYmxlTWFwcGluZ0NsYXNzJyxcbiAgICAgIGNvbXBvbmVudDogVmFyaWFibGVNYXBwaW5nQ2xhc3MsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkZWxlZ2F0ZUV4cHJlc3Npb24nKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnY2FsbGVkRWxlbWVudFZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbicsXG4gICAgICBjb21wb25lbnQ6IFZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbixcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5jb25zdCBERUZBVUxUX1BST1BTJDUgPSB7XG4gICdjYW11bmRhOnZhcmlhYmxlTWFwcGluZ0NsYXNzJzogdW5kZWZpbmVkLFxuICAnY2FtdW5kYTp2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb24nOiB1bmRlZmluZWRcbn07XG5mdW5jdGlvbiBEZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGUoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAuLi5ERUZBVUxUX1BST1BTJDVcbiAgICB9O1xuICAgIGlmICh2YWx1ZSA9PT0gJ2NsYXNzJykge1xuICAgICAgcHJvcGVydGllc1snY2FtdW5kYTp2YXJpYWJsZU1hcHBpbmdDbGFzcyddID0gJyc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2RlbGVnYXRlRXhwcmVzc2lvbicpIHtcbiAgICAgIHByb3BlcnRpZXNbJ2NhbXVuZGE6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJ10gPSAnJztcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiBbe1xuICAgIHZhbHVlOiAnbm9uZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnPG5vbmU+JylcbiAgfSwge1xuICAgIHZhbHVlOiAnY2xhc3MnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NsYXNzJylcbiAgfSwge1xuICAgIHZhbHVlOiAnZGVsZWdhdGVFeHByZXNzaW9uJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBleHByZXNzaW9uJylcbiAgfV07XG4gIHJldHVybiBqc3goU2VsZWN0RW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGlkOiBcImNhbGxlZEVsZW1lbnREZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1R5cGVcIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBWYXJpYWJsZSBNYXBwaW5nJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zOiBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gVmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ2NhbXVuZGE6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgdmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uOiB2YWx1ZSB8fCAnJyxcbiAgICAgIHZhcmlhYmxlTWFwcGluZ0NsYXNzOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIGpzeChUZXh0RmllbGRFbnRyeSwge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaWQ6IFwiY2FsbGVkRWxlbWVudFZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvblwiLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0RlbGVnYXRlIEV4cHJlc3Npb24nKSxcbiAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgIGRlYm91bmNlOiBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFZhcmlhYmxlTWFwcGluZ0NsYXNzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ2NhbXVuZGE6dmFyaWFibGVNYXBwaW5nQ2xhc3MnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICB2YXJpYWJsZU1hcHBpbmdEZWxlZ2F0ZUV4cHJlc3Npb246IHVuZGVmaW5lZCxcbiAgICAgIHZhcmlhYmxlTWFwcGluZ0NsYXNzOiB2YWx1ZSB8fCAnJ1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4ganN4KFRleHRGaWVsZEVudHJ5LCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBpZDogXCJjYWxsZWRFbGVtZW50VmFyaWFibGVNYXBwaW5nQ2xhc3NcIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBDbGFzcycpLFxuICAgIGdldFZhbHVlOiBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZTogc2V0VmFsdWUsXG4gICAgZGVib3VuY2U6IGRlYm91bmNlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy9cblxuZnVuY3Rpb24gZ2V0RGVsZWdhdGVWYXJpYWJsZU1hcHBpbmdUeXBlKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTp2YXJpYWJsZU1hcHBpbmdDbGFzcycpICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ2NsYXNzJztcbiAgfSBlbHNlIGlmIChidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6dmFyaWFibGVNYXBwaW5nRGVsZWdhdGVFeHByZXNzaW9uJykgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnZGVsZWdhdGVFeHByZXNzaW9uJztcbiAgfVxuICByZXR1cm4gJ25vbmUnO1xufVxuXG5mdW5jdGlvbiBDYWxsQWN0aXZpdHlQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5JykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiAnY2FsbGVkRWxlbWVudFR5cGUnLFxuICAgIGNvbXBvbmVudDogQ2FsbGVkRWxlbWVudFR5cGUsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfSk7XG4gIGNvbnN0IGNhbGxlZEVsZW1lbnRUeXBlID0gZ2V0Q2FsbGVkRWxlbWVudFR5cGUoZWxlbWVudCk7XG4gIGlmIChjYWxsZWRFbGVtZW50VHlwZSA9PT0gJ2JwbW4nKSB7XG4gICAgZW50cmllcy5wdXNoKC4uLkNhbGxlZEJwbW5Qcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSksIC4uLkJ1c2luZXNzS2V5UHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pLCAuLi5EZWxlZ2F0ZVZhcmlhYmxlTWFwcGluZ1Byb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KSk7XG4gIH0gZWxzZSBpZiAoY2FsbGVkRWxlbWVudFR5cGUgPT09ICdjbW1uJykge1xuICAgIGVudHJpZXMucHVzaCguLi5DYWxsZWRDbW1uUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pLCAuLi5CdXNpbmVzc0tleVByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgZW50cmllcy5wdXNoKC4uLkJ1c2luZXNzS2V5UHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmNvbnN0IERFRkFVTFRfUFJPUFMkNCA9IHtcbiAgY2FsbGVkRWxlbWVudDogdW5kZWZpbmVkLFxuICAnY2FtdW5kYTpjYWxsZWRFbGVtZW50QmluZGluZyc6IHVuZGVmaW5lZCxcbiAgJ2NhbXVuZGE6Y2FsbGVkRWxlbWVudFZlcnNpb24nOiB1bmRlZmluZWQsXG4gICdjYW11bmRhOmNhbGxlZEVsZW1lbnRUZW5hbnRJZCc6IHVuZGVmaW5lZCxcbiAgJ2NhbXVuZGE6dmFyaWFibGVNYXBwaW5nQ2xhc3MnOiB1bmRlZmluZWQsXG4gICdjYW11bmRhOnZhcmlhYmxlTWFwcGluZ0RlbGVnYXRlRXhwcmVzc2lvbic6IHVuZGVmaW5lZCxcbiAgJ2NhbXVuZGE6Y2FzZVJlZic6IHVuZGVmaW5lZCxcbiAgJ2NhbXVuZGE6Y2FzZUJpbmRpbmcnOiB1bmRlZmluZWQsXG4gICdjYW11bmRhOmNhc2VWZXJzaW9uJzogdW5kZWZpbmVkLFxuICAnY2FtdW5kYTpjYXNlVGVuYW50SWQnOiB1bmRlZmluZWRcbn07XG5jb25zdCBERUZBVUxUX0JVU0lORVNTX0tFWSA9ICcje2V4ZWN1dGlvbi5wcm9jZXNzQnVzaW5lc3NLZXl9JztcbmZ1bmN0aW9uIENhbGxlZEVsZW1lbnRUeXBlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0Q2FsbGVkRWxlbWVudFR5cGUoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAuLi5ERUZBVUxUX1BST1BTJDRcbiAgICB9O1xuICAgIGlmICh2YWx1ZSA9PT0gJ2JwbW4nKSB7XG4gICAgICBwcm9wZXJ0aWVzWydjYWxsZWRFbGVtZW50J10gPSAnJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnY21tbicpIHtcbiAgICAgIHByb3BlcnRpZXNbJ2NhbXVuZGE6Y2FzZVJlZiddID0gJyc7XG4gICAgfVxuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcGVydGllc1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4gW3tcbiAgICB2YWx1ZTogJycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnPG5vbmU+JylcbiAgfSwge1xuICAgIHZhbHVlOiAnYnBtbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQlBNTicpXG4gIH0sIHtcbiAgICB2YWx1ZTogJ2NtbW4nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NNTU4nKVxuICB9XTtcbiAgcmV0dXJuIGpzeChTZWxlY3RFbnRyeSwge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaWQ6IFwiY2FsbGVkRWxlbWVudFR5cGVcIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zOiBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gQnVzaW5lc3NLZXlQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiAnY2FsbGVkRWxlbWVudEJ1c2luZXNzS2V5JyxcbiAgICBjb21wb25lbnQ6IEJ1c2luZXNzS2V5LFxuICAgIGlzRWRpdGVkOiBpc0NoZWNrYm94RW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChoYXNCdXNpbmVzc0tleShlbGVtZW50KSkge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2NhbGxlZEVsZW1lbnRCdXNpbmVzc0tleUV4cHJlc3Npb24nLFxuICAgICAgY29tcG9uZW50OiBCdXNpbmVzc0tleUV4cHJlc3Npb24sXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBlbnRyaWVzO1xufVxuZnVuY3Rpb24gQnVzaW5lc3NLZXkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFzQnVzaW5lc3NLZXkoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYWRkQnVzaW5lc3NLZXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlQnVzaW5lc3NLZXkoKTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIGFkZEJ1c2luZXNzS2V5KCkge1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIElmIHRoZXJlIGFyZSBubyBleHRlbnNpb24gZWxlbWVudHMsIGNyZWF0ZSBjYW11bmRhOkluIGFuZCB1cGRhdGUgZWxlbWVudCdzIHByb3BlcnRpZXNcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7fSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbnN0IGJ1c2luZXNzS2V5SXRlbSA9IGNyZWF0ZUJ1c2luZXNzS2V5KGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzLnNldCgndmFsdWVzJywgW2J1c2luZXNzS2V5SXRlbV0pO1xuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gKDIpIE90aGVyd2lzZSwgYWRkIGNhbXVuZGE6SW4gdG8gdGhlIGV4aXN0aW5nIHZhbHVlc1xuICAgICAgY29uc3QgYnVzaW5lc3NLZXlJdGVtID0gY3JlYXRlQnVzaW5lc3NLZXkoZXh0ZW5zaW9uRWxlbWVudHMpO1xuICAgICAgYWRkRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGJ1c2luZXNzS2V5SXRlbSwgYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjayk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUJ1c2luZXNzS2V5KHBhcmVudCkge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdjYW11bmRhOkluJywge1xuICAgICAgYnVzaW5lc3NLZXk6IERFRkFVTFRfQlVTSU5FU1NfS0VZXG4gICAgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlQnVzaW5lc3NLZXkoKSB7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCBjYW11bmRhSW5MaXN0ID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbicpO1xuICAgIGNvbnN0IGJ1c2luZXNzS2V5SXRlbXMgPSBjYW11bmRhSW5MaXN0LmZpbHRlcihjYW11bmRhSW4gPT4gY2FtdW5kYUluLmdldCgnYnVzaW5lc3NLZXknKSAhPT0gdW5kZWZpbmVkKTtcbiAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwgYnVzaW5lc3NLZXlJdGVtcywgY29tbWFuZFN0YWNrKTtcbiAgfVxuICByZXR1cm4ganN4KENoZWNrYm94RW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGlkOiBcImNhbGxlZEVsZW1lbnRCdXNpbmVzc0tleVwiLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0J1c2luZXNzIGtleScpLFxuICAgIGdldFZhbHVlOiBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZTogc2V0VmFsdWVcbiAgfSk7XG59XG5mdW5jdGlvbiBCdXNpbmVzc0tleUV4cHJlc3Npb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IGdldEJ1c2luZXNzS2V5KGVsZW1lbnQpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb25zdCBjYW11bmRhSW4gPSBmaW5kQ2FtdW5kYUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogY2FtdW5kYUluLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBidXNpbmVzc0tleTogdmFsdWUgfHwgJydcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIGpzeChUZXh0RmllbGRFbnRyeSwge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaWQ6IFwiY2FsbGVkRWxlbWVudEJ1c2luZXNzS2V5RXhwcmVzc2lvblwiLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0J1c2luZXNzIGtleSBleHByZXNzaW9uJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy9cblxuZnVuY3Rpb24gZ2V0Q2FsbGVkRWxlbWVudFR5cGUoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBpZiAoYnVzaW5lc3NPYmplY3QuZ2V0KCdjYWxsZWRFbGVtZW50JykgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnYnBtbic7XG4gIH0gZWxzZSBpZiAoYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmNhc2VSZWYnKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdjbW1uJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBoYXNCdXNpbmVzc0tleShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRCdXNpbmVzc0tleShlbGVtZW50KSAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0QnVzaW5lc3NLZXkoZWxlbWVudCkge1xuICBjb25zdCBjYW11bmRhSW4gPSBmaW5kQ2FtdW5kYUluV2l0aEJ1c2luZXNzS2V5KGVsZW1lbnQpO1xuICBpZiAoY2FtdW5kYUluKSB7XG4gICAgcmV0dXJuIGNhbXVuZGFJbi5nZXQoJ2J1c2luZXNzS2V5Jyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRDYW11bmRhSW5XaXRoQnVzaW5lc3NLZXkoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBjYW11bmRhSW5MaXN0ID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbicpO1xuICBmb3IgKGNvbnN0IGNhbXVuZGFJbiBvZiBjYW11bmRhSW5MaXN0KSB7XG4gICAgY29uc3QgYnVzaW5lc3NLZXkgPSBjYW11bmRhSW4uZ2V0KCdidXNpbmVzc0tleScpO1xuICAgIGlmIChidXNpbmVzc0tleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FtdW5kYUluO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBDYW5kaWRhdGVTdGFydGVyUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSAmJiAhKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAnY2FuZGlkYXRlU3RhcnRlckdyb3VwcycsXG4gICAgY29tcG9uZW50OiBDYW5kaWRhdGVTdGFydGVyR3JvdXBzLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ2NhbmRpZGF0ZVN0YXJ0ZXJVc2VycycsXG4gICAgY29tcG9uZW50OiBDYW5kaWRhdGVTdGFydGVyVXNlcnMsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfV07XG59XG5mdW5jdGlvbiBDYW5kaWRhdGVTdGFydGVyR3JvdXBzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IHByb2Nlc3MgPSBnZXRQcm9jZXNzJDMoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBwcm9jZXNzLmdldCgnY2FtdW5kYTpjYW5kaWRhdGVTdGFydGVyR3JvdXBzJykgfHwgJyc7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogcHJvY2VzcyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6Y2FuZGlkYXRlU3RhcnRlckdyb3Vwcyc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2NhbmRpZGF0ZVN0YXJ0ZXJHcm91cHMnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSBzdGFydGVyIGdyb3VwcycpLFxuICAgIGRlc2NyaXB0aW9uOiB0cmFuc2xhdGUoJ1NwZWNpZnkgbW9yZSB0aGFuIG9uZSBncm91cCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gQ2FuZGlkYXRlU3RhcnRlclVzZXJzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IHByb2Nlc3MgPSBnZXRQcm9jZXNzJDMoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBwcm9jZXNzLmdldCgnY2FtdW5kYTpjYW5kaWRhdGVTdGFydGVyVXNlcnMnKSB8fCAnJztcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBwcm9jZXNzLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpjYW5kaWRhdGVTdGFydGVyVXNlcnMnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdjYW5kaWRhdGVTdGFydGVyVXNlcnMnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NhbmRpZGF0ZSBzdGFydGVyIHVzZXJzJyksXG4gICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnU3BlY2lmeSBtb3JlIHRoYW4gb25lIHVzZXIgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIGdldFByb2Nlc3MgLSBnZXQgdGhlIGJ1c2luZXNzT2JqZWN0IG9mIHRoZSBwcm9jZXNzIHJlZmVycmVkIHRvIGJ5IGEgYnBtbjpQcm9jZXNzXG4gKiBvciBieSBhIGJwbW46UGFydGljaXBhbnRcbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50IGVpdGhlciBhIGJwbW46UHJvY2VzcyBvciBhIGJwbW46UGFydGljaXBhbnRcbiAqIEByZXR1cm4ge0J1c2luZXNzT2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRQcm9jZXNzJDMoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpID8gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkgOiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ3Byb2Nlc3NSZWYnKTtcbn1cblxuZnVuY3Rpb24gQ29uZGl0aW9uUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIShpcyhlbGVtZW50LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSAmJiBpc0NvbmRpdGlvbmFsU291cmNlKGVsZW1lbnQuc291cmNlKSkgJiYgIWdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgaWYgKGdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpKSB7XG4gICAgZW50cmllcy5wdXNoKC4uLlZhcmlhYmxlRXZlbnRQcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSkpO1xuICB9XG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6ICdjb25kaXRpb25UeXBlJyxcbiAgICBjb21wb25lbnQ6IENvbmRpdGlvblR5cGUsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfSk7XG4gIGNvbnN0IGNvbmRpdGlvblR5cGUgPSBnZXRDb25kaXRpb25UeXBlKGVsZW1lbnQpO1xuICBpZiAoY29uZGl0aW9uVHlwZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICBlbnRyaWVzLnB1c2goLi4uQ29uZGl0aW9uU2NyaXB0UHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pKTtcbiAgfSBlbHNlIGlmIChjb25kaXRpb25UeXBlID09PSAnZXhwcmVzc2lvbicpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdjb25kaXRpb25FeHByZXNzaW9uJyxcbiAgICAgIGNvbXBvbmVudDogQ29uZGl0aW9uRXhwcmVzc2lvbixcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBDb25kaXRpb25UeXBlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRDb25kaXRpb25UeXBlKGVsZW1lbnQpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAvLyAoMSkgUmVtb3ZlIGZvcm1hbEV4cHJlc3Npb24gaWYgPG5vbmU+IGlzIHNlbGVjdGVkXG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdXBkYXRlQ29uZGl0aW9uKGVsZW1lbnQsIGNvbW1hbmRTdGFjaywgdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gKDIpIENyZWF0ZSBhbmQgc2V0IGZvcm1hbEV4cHJlc3Npb24gZWxlbWVudCBjb250YWluaW5nIHRoZSBjb25kaXRpb25FeHByZXNzaW9uXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBib2R5OiAnJyxcbiAgICAgICAgbGFuZ3VhZ2U6IHZhbHVlID09PSAnc2NyaXB0JyA/ICcnIDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWFsRXhwcmVzc2lvbkVsZW1lbnQgPSBjcmVhdGVGb3JtYWxFeHByZXNzaW9uKGVsZW1lbnQsIGF0dHJpYnV0ZXMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIHVwZGF0ZUNvbmRpdGlvbihlbGVtZW50LCBjb21tYW5kU3RhY2ssIGZvcm1hbEV4cHJlc3Npb25FbGVtZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiBbe1xuICAgIHZhbHVlOiAnJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICB9LCB7XG4gICAgdmFsdWU6ICdzY3JpcHQnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1NjcmlwdCcpXG4gIH0sIHtcbiAgICB2YWx1ZTogJ2V4cHJlc3Npb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKVxuICB9XTtcbiAgcmV0dXJuIGpzeChTZWxlY3RFbnRyeSwge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaWQ6IFwiY29uZGl0aW9uVHlwZVwiLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1R5cGUnKSxcbiAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnM6IGdldE9wdGlvbnNcbiAgfSk7XG59XG5mdW5jdGlvbiBDb25kaXRpb25FeHByZXNzaW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0Q29uZGl0aW9uRXhwcmVzc2lvbihlbGVtZW50KS5nZXQoJ2JvZHknKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgY29uZGl0aW9uRXhwcmVzc2lvbiA9IGNyZWF0ZUZvcm1hbEV4cHJlc3Npb24oZWxlbWVudCwge1xuICAgICAgYm9keTogdmFsdWVcbiAgICB9LCBicG1uRmFjdG9yeSk7XG4gICAgdXBkYXRlQ29uZGl0aW9uKGVsZW1lbnQsIGNvbW1hbmRTdGFjaywgY29uZGl0aW9uRXhwcmVzc2lvbik7XG4gIH07XG4gIHJldHVybiBqc3goVGV4dEZpZWxkRW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGlkOiBcImNvbmRpdGlvbkV4cHJlc3Npb25cIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb25kaXRpb24gRXhwcmVzc2lvbicpLFxuICAgIGdldFZhbHVlOiBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZTogc2V0VmFsdWUsXG4gICAgZGVib3VuY2U6IGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gQ29uZGl0aW9uU2NyaXB0UHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBnZXRTY3JpcHRUeXBlJDEoZWxlbWVudCk7XG5cbiAgLy8gKDEpIGxhbmd1YWdlXG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6ICdjb25kaXRpb25TY3JpcHRMYW5ndWFnZScsXG4gICAgY29tcG9uZW50OiBMYW5ndWFnZSxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9KTtcblxuICAvLyAoMikgdHlwZVxuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiAnY29uZGl0aW9uU2NyaXB0VHlwZScsXG4gICAgY29tcG9uZW50OiBTY3JpcHRUeXBlLFxuICAgIGlzRWRpdGVkOiBpc1NlbGVjdEVudHJ5RWRpdGVkXG4gIH0pO1xuXG4gIC8vICgzKSBzY3JpcHRcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnY29uZGl0aW9uU2NyaXB0VmFsdWUnLFxuICAgICAgY29tcG9uZW50OiBTY3JpcHQkMSxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRBcmVhRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChzY3JpcHRUeXBlID09PSAncmVzb3VyY2UnKSB7XG4gICAgLy8gKDQpIHJlc291cmNlXG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnY29uZGl0aW9uU2NyaXB0UmVzb3VyY2UnLFxuICAgICAgY29tcG9uZW50OiBSZXNvdXJjZSQxLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIExhbmd1YWdlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldENvbmRpdGlvbkV4cHJlc3Npb24oZWxlbWVudCkuZ2V0KCdsYW5ndWFnZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGdldENvbmRpdGlvbkV4cHJlc3Npb24oZWxlbWVudCksXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGxhbmd1YWdlOiB2YWx1ZSB8fCAnJ1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ganN4KFRleHRGaWVsZEVudHJ5LCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBpZDogXCJjb25kaXRpb25TY3JpcHRMYW5ndWFnZVwiLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Zvcm1hdCcpLFxuICAgIGdldFZhbHVlOiBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZTogc2V0VmFsdWUsXG4gICAgZGVib3VuY2U6IGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gU2NyaXB0VHlwZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFNjcmlwdFR5cGUkMShlbGVtZW50KTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgLy8gcmVzZXQgc2NyaXB0IHByb3BlcnRpZXMgb24gdHlwZSBjaGFuZ2VcbiAgICBjb25zdCB1cGRhdGVkUHJvcGVydGllcyA9IHtcbiAgICAgICdib2R5JzogdmFsdWUgPT09ICdzY3JpcHQnID8gJycgOiB1bmRlZmluZWQsXG4gICAgICAnY2FtdW5kYTpyZXNvdXJjZSc6IHZhbHVlID09PSAncmVzb3VyY2UnID8gJycgOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZ2V0Q29uZGl0aW9uRXhwcmVzc2lvbihlbGVtZW50KSxcbiAgICAgIHByb3BlcnRpZXM6IHVwZGF0ZWRQcm9wZXJ0aWVzXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgICB2YWx1ZTogJ3Jlc291cmNlJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V4dGVybmFsIHJlc291cmNlJylcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogJ3NjcmlwdCcsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdJbmxpbmUgc2NyaXB0JylcbiAgICB9XTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcbiAgcmV0dXJuIFNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnY29uZGl0aW9uU2NyaXB0VHlwZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU2NyaXB0IHR5cGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gU2NyaXB0JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0Q29uZGl0aW9uRXhwcmVzc2lvbihlbGVtZW50KS5nZXQoJ2JvZHknKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBnZXRDb25kaXRpb25FeHByZXNzaW9uKGVsZW1lbnQpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnYm9keSc6IHZhbHVlIHx8ICcnXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBqc3goVGV4dEFyZWFFbnRyeSwge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgaWQ6IFwiY29uZGl0aW9uU2NyaXB0VmFsdWVcIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTY3JpcHQnKSxcbiAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgIGRlYm91bmNlOiBkZWJvdW5jZSxcbiAgICBtb25vc3BhY2U6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBSZXNvdXJjZSQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldENvbmRpdGlvbkV4cHJlc3Npb24oZWxlbWVudCkuZ2V0KCdjYW11bmRhOnJlc291cmNlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZ2V0Q29uZGl0aW9uRXhwcmVzc2lvbihlbGVtZW50KSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6cmVzb3VyY2UnOiB2YWx1ZSB8fCAnJ1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ganN4KFRleHRGaWVsZEVudHJ5LCB7XG4gICAgZWxlbWVudDogdHJ1ZSxcbiAgICBpZDogXCJjb25kaXRpb25TY3JpcHRSZXNvdXJjZVwiLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Jlc291cmNlJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBWYXJpYWJsZUV2ZW50UHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6ICdjb25kaXRpb25WYXJpYWJsZU5hbWUnLFxuICAgIGNvbXBvbmVudDogVmFyaWFibGVOYW1lLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0pO1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlN0YXJ0RXZlbnQnKSB8fCBpc0luRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnY29uZGl0aW9uVmFyaWFibGVFdmVudHMnLFxuICAgICAgY29tcG9uZW50OiBWYXJpYWJsZUV2ZW50cyxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBWYXJpYWJsZU5hbWUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oZWxlbWVudCkuZ2V0KCd2YXJpYWJsZU5hbWUnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBnZXRDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmFyaWFibGVOYW1lOiB2YWx1ZSB8fCAnJ1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ganN4KFRleHRGaWVsZEVudHJ5LCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBpZDogXCJjb25kaXRpb25WYXJpYWJsZU5hbWVcIixcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWYXJpYWJsZSBuYW1lJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBWYXJpYWJsZUV2ZW50cyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KS5nZXQoJ3ZhcmlhYmxlRXZlbnRzJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oZWxlbWVudCksXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhcmlhYmxlRXZlbnRzOiB2YWx1ZSB8fCAnJ1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0b29sdGlwID0ganN4cyhcImRpdlwiLCB7XG4gICAgY2hpbGRyZW46IFtqc3goXCJwXCIsIHtcbiAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ1NwZWNpZnkgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZSBjaGFuZ2UgZXZlbnQgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4gVmFyaWFibGUgY2hhbmdlIGV2ZW50cyBhcmU6JylcbiAgICB9KSwganN4cyhcInVsXCIsIHtcbiAgICAgIGNoaWxkcmVuOiBbanN4KFwibGlcIiwge1xuICAgICAgICBjaGlsZHJlbjoganN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFwiY3JlYXRlXCJcbiAgICAgICAgfSlcbiAgICAgIH0pLCBqc3goXCJsaVwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogXCJ1cGRhdGVcIlxuICAgICAgICB9KVxuICAgICAgfSksIGpzeChcImxpXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IGpzeChcImNvZGVcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiBcImRlbGV0ZVwiXG4gICAgICAgIH0pXG4gICAgICB9KV1cbiAgICB9KSwganN4KFwiYVwiLCB7XG4gICAgICBocmVmOiBcImh0dHBzOi8vZG9jcy5jYW11bmRhLm9yZy9tYW51YWwvbGF0ZXN0L3JlZmVyZW5jZS9icG1uMjAvY3VzdG9tLWV4dGVuc2lvbnMvZXh0ZW5zaW9uLWF0dHJpYnV0ZXMvI3ZhcmlhYmxlZXZlbnRzXCIsXG4gICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnRG9jdW1lbnRhdGlvbjogVmFyaWFibGUgZXZlbnRzJylcbiAgICB9KV1cbiAgfSk7XG4gIHJldHVybiBqc3goVGV4dEZpZWxkRW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGlkOiBcImNvbmRpdGlvblZhcmlhYmxlRXZlbnRzXCIsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFyaWFibGUgZXZlbnRzJyksXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZTogZGVib3VuY2UsXG4gICAgdG9vbHRpcDogdG9vbHRpcFxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmNvbnN0IENPTkRJVElPTkFMX1NPVVJDRVMgPSBbJ2JwbW46QWN0aXZpdHknLCAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JywgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheScsICdicG1uOkNvbXBsZXhHYXRld2F5J107XG5mdW5jdGlvbiBpc0NvbmRpdGlvbmFsU291cmNlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIENPTkRJVElPTkFMX1NPVVJDRVMpO1xufVxuZnVuY3Rpb24gZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyk7XG59XG5mdW5jdGlvbiBnZXRDb25kaXRpb25UeXBlKGVsZW1lbnQpIHtcbiAgY29uc3QgY29uZGl0aW9uRXhwcmVzc2lvbiA9IGdldENvbmRpdGlvbkV4cHJlc3Npb24oZWxlbWVudCk7XG4gIGlmICghY29uZGl0aW9uRXhwcmVzc2lvbikge1xuICAgIHJldHVybiAnJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29uZGl0aW9uRXhwcmVzc2lvbi5nZXQoJ2xhbmd1YWdlJykgPT09IHVuZGVmaW5lZCA/ICdleHByZXNzaW9uJyA6ICdzY3JpcHQnO1xuICB9XG59XG5cbi8qKlxuICogZ2V0Q29uZGl0aW9uRXhwcmVzc2lvbiAtIGdldCB0aGUgYm9keSB2YWx1ZSBvZiBhIGNvbmRpdGlvbiBleHByZXNzaW9uIGZvciBhIGdpdmVuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGl0aW9uRXhwcmVzc2lvbihlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjb25kaXRpb25FeHByZXNzaW9uJyk7XG4gIH0gZWxzZSBpZiAoZ2V0Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24oYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgcmV0dXJuIGdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGJ1c2luZXNzT2JqZWN0KS5nZXQoJ2NvbmRpdGlvbicpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRTY3JpcHRUeXBlJDEoZWxlbWVudCkge1xuICBjb25zdCBjb25kaXRpb25FeHByZXNzaW9uID0gZ2V0Q29uZGl0aW9uRXhwcmVzc2lvbihlbGVtZW50KTtcbiAgY29uc3QgcmVzb3VyY2UgPSBjb25kaXRpb25FeHByZXNzaW9uLmdldCgnY2FtdW5kYTpyZXNvdXJjZScpO1xuICBpZiAodHlwZW9mIHJlc291cmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAncmVzb3VyY2UnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnc2NyaXB0JztcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQ29uZGl0aW9uKGVsZW1lbnQsIGNvbW1hbmRTdGFjaywgY29uZGl0aW9uID0gdW5kZWZpbmVkKSB7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBjb25kaXRpb25FeHByZXNzaW9uOiBjb25kaXRpb25cbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBjb25kaXRpb25cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRm9ybWFsRXhwcmVzc2lvbihwYXJlbnQsIGF0dHJpYnV0ZXMsIGJwbW5GYWN0b3J5KSB7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCBhdHRyaWJ1dGVzLCBpcyhwYXJlbnQsICdicG1uOlNlcXVlbmNlRmxvdycpID8gZ2V0QnVzaW5lc3NPYmplY3QocGFyZW50KSA6IGdldENvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uKHBhcmVudCksIGJwbW5GYWN0b3J5KTtcbn1cbmZ1bmN0aW9uIGlzSW5FdmVudFN1YlByb2Nlc3MoZWxlbWVudCkge1xuICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgIHBhcmVudCA9IGJvLiRwYXJlbnQ7XG4gIHJldHVybiBpcyhwYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBwYXJlbnQudHJpZ2dlcmVkQnlFdmVudDtcbn1cblxuLyoqXG4gKiBDZi4gaHR0cHM6Ly9kb2NzLmNhbXVuZGEub3JnL21hbnVhbC9sYXRlc3QvdXNlci1ndWlkZS9wcm9jZXNzLWVuZ2luZS9zY3JpcHRpbmcvXG4gKi9cbmZ1bmN0aW9uIFNjcmlwdFByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIHNjcmlwdCxcbiAgICBwcmVmaXhcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBnZXRTY3JpcHRUeXBlKHNjcmlwdCB8fCBlbGVtZW50KTtcbiAgY29uc3QgaWRQcmVmaXggPSBwcmVmaXggfHwgJyc7XG5cbiAgLy8gKDEpIHNjcmlwdEZvcm1hdFxuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiBpZFByZWZpeCArICdzY3JpcHRGb3JtYXQnLFxuICAgIGNvbXBvbmVudDogRm9ybWF0LFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkLFxuICAgIGlkUHJlZml4LFxuICAgIHNjcmlwdFxuICB9KTtcblxuICAvLyAoMikgdHlwZVxuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiBpZFByZWZpeCArICdzY3JpcHRUeXBlJyxcbiAgICBjb21wb25lbnQ6IFR5cGUkMyxcbiAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZCxcbiAgICBpZFByZWZpeCxcbiAgICBzY3JpcHRcbiAgfSk7XG5cbiAgLy8gKDMpIHNjcmlwdFxuICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6IGlkUHJlZml4ICsgJ3NjcmlwdFZhbHVlJyxcbiAgICAgIGNvbXBvbmVudDogU2NyaXB0LFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEFyZWFFbnRyeUVkaXRlZCxcbiAgICAgIGlkUHJlZml4LFxuICAgICAgc2NyaXB0XG4gICAgfSk7XG4gIH1cblxuICAvLyAoNCkgcmVzb3VyY2VcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdyZXNvdXJjZScpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6IGlkUHJlZml4ICsgJ3NjcmlwdFJlc291cmNlJyxcbiAgICAgIGNvbXBvbmVudDogUmVzb3VyY2UsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZCxcbiAgICAgIGlkUHJlZml4LFxuICAgICAgc2NyaXB0XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBGb3JtYXQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWRQcmVmaXgsXG4gICAgc2NyaXB0XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBzY3JpcHQgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ3NjcmlwdEZvcm1hdCcpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBzY3JpcHRGb3JtYXQ6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogaWRQcmVmaXggKyAnc2NyaXB0Rm9ybWF0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGb3JtYXQnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFR5cGUkMyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZFByZWZpeCxcbiAgICBzY3JpcHRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gc2NyaXB0IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBzY3JpcHRQcm9wZXJ0eSA9IGdldFNjcmlwdFByb3BlcnR5KGJ1c2luZXNzT2JqZWN0KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFNjcmlwdFR5cGUoYnVzaW5lc3NPYmplY3QpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAvLyByZXNldCBzY3JpcHQgcHJvcGVydGllcyBvbiB0eXBlIGNoYW5nZVxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICBbc2NyaXB0UHJvcGVydHldOiB2YWx1ZSA9PT0gJ3NjcmlwdCcgPyAnJyA6IHVuZGVmaW5lZCxcbiAgICAgICdjYW11bmRhOnJlc291cmNlJzogdmFsdWUgPT09ICdyZXNvdXJjZScgPyAnJyA6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXNcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gW3tcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJzxub25lPicpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICdyZXNvdXJjZScsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdFeHRlcm5hbCByZXNvdXJjZScpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICdzY3JpcHQnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW5saW5lIHNjcmlwdCcpXG4gICAgfV07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogaWRQcmVmaXggKyAnc2NyaXB0VHlwZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5mdW5jdGlvbiBTY3JpcHQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWRQcmVmaXgsXG4gICAgc2NyaXB0XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBzY3JpcHQgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IHNjcmlwdFByb3BlcnR5ID0gZ2V0U2NyaXB0UHJvcGVydHkoYnVzaW5lc3NPYmplY3QpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0U2NyaXB0VmFsdWUoYnVzaW5lc3NPYmplY3QpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBbc2NyaXB0UHJvcGVydHldOiB2YWx1ZSB8fCAnJ1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEFyZWFFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogaWRQcmVmaXggKyAnc2NyaXB0VmFsdWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1NjcmlwdCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlLFxuICAgIG1vbm9zcGFjZTogdHJ1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFJlc291cmNlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkUHJlZml4LFxuICAgIHNjcmlwdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gc2NyaXB0IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnJlc291cmNlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOnJlc291cmNlJzogdmFsdWUgfHwgJydcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiBpZFByZWZpeCArICdzY3JpcHRSZXNvdXJjZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUmVzb3VyY2UnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFNjcmlwdFR5cGUoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBzY3JpcHRWYWx1ZSA9IGdldFNjcmlwdFZhbHVlKGJ1c2luZXNzT2JqZWN0KTtcbiAgaWYgKHR5cGVvZiBzY3JpcHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ3NjcmlwdCc7XG4gIH1cbiAgY29uc3QgcmVzb3VyY2UgPSBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6cmVzb3VyY2UnKTtcbiAgaWYgKHR5cGVvZiByZXNvdXJjZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ3Jlc291cmNlJztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0U2NyaXB0VmFsdWUoYnVzaW5lc3NPYmplY3QpIHtcbiAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChnZXRTY3JpcHRQcm9wZXJ0eShidXNpbmVzc09iamVjdCkpO1xufVxuZnVuY3Rpb24gaXNTY3JpcHQkMihlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnY2FtdW5kYTpTY3JpcHQnKTtcbn1cbmZ1bmN0aW9uIGdldFNjcmlwdFByb3BlcnR5KGJ1c2luZXNzT2JqZWN0KSB7XG4gIHJldHVybiBpc1NjcmlwdCQyKGJ1c2luZXNzT2JqZWN0KSA/ICd2YWx1ZScgOiAnc2NyaXB0Jztcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudHMoYnVzaW5lc3NPYmplY3QsIHR5cGUsIHByb3BlcnR5KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCB0eXBlKTtcbiAgcmV0dXJuICFwcm9wZXJ0eSA/IGVsZW1lbnRzIDogKGVsZW1lbnRzWzBdIHx8IHt9KVtwcm9wZXJ0eV0gfHwgW107XG59XG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJzKGVsZW1lbnQsIHByb3ApIHtcbiAgY29uc3QgaW5wdXRPdXRwdXQgPSBnZXRJbnB1dE91dHB1dChlbGVtZW50KTtcbiAgcmV0dXJuIGlucHV0T3V0cHV0ICYmIGlucHV0T3V0cHV0LmdldChwcm9wKSB8fCBbXTtcbn1cblxuLyoqXG4gKiBHZXQgYSBjYW11bmRhOmlucHV0T3V0cHV0IGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2UgfCBNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGlucHV0T3V0cHV0IG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRJbnB1dE91dHB1dChlbGVtZW50KSB7XG4gIGlmIChpcyhlbGVtZW50LCAnY2FtdW5kYTpDb25uZWN0b3InKSkge1xuICAgIHJldHVybiBlbGVtZW50LmdldCgnaW5wdXRPdXRwdXQnKTtcbiAgfVxuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gKGdldEVsZW1lbnRzKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpIHx8IFtdKVswXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGlucHV0IHBhcmFtZXRlcnMgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdCwgYW5kXG4gKiBhbiBlbXB0eSBhcnJheSBpZiBub25lIGV4aXN0LlxuICpcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7QXJyYXl9IGEgbGlzdCBvZiBpbnB1dCBwYXJhbWV0ZXIgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBnZXRJbnB1dFBhcmFtZXRlcnMoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0UGFyYW1ldGVycyhlbGVtZW50LCAnaW5wdXRQYXJhbWV0ZXJzJyk7XG59XG5cbi8qKlxuICogUmV0dXJuIGFsbCBvdXRwdXQgcGFyYW1ldGVycyBleGlzdGluZyBpbiB0aGUgYnVzaW5lc3Mgb2JqZWN0LCBhbmRcbiAqIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgZXhpc3QuXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheX0gYSBsaXN0IG9mIG91dHB1dCBwYXJhbWV0ZXIgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBnZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFBhcmFtZXRlcnMoZWxlbWVudCwgJ291dHB1dFBhcmFtZXRlcnMnKTtcbn1cbmZ1bmN0aW9uIGlzSW5wdXRPdXRwdXRTdXBwb3J0ZWQoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dOb2RlJykgJiYgIShpc0FueShidXNpbmVzc09iamVjdCwgWydicG1uOlN0YXJ0RXZlbnQnLCAnYnBtbjpCb3VuZGFyeUV2ZW50JywgJ2JwbW46R2F0ZXdheSddKSB8fCBpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgndHJpZ2dlcmVkQnlFdmVudCcpKTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0UGFyYW1ldGVyc1N1cHBvcnRlZChlbGVtZW50KSB7XG4gIHJldHVybiBpc0lucHV0T3V0cHV0U3VwcG9ydGVkKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gYXJlT3V0cHV0UGFyYW1ldGVyc1N1cHBvcnRlZChlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBpc0lucHV0T3V0cHV0U3VwcG9ydGVkKGVsZW1lbnQpICYmICFpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RW5kRXZlbnQnKSAmJiAhYnVzaW5lc3NPYmplY3QubG9vcENoYXJhY3RlcmlzdGljcztcbn1cbmZ1bmN0aW9uIGdldElucHV0T3V0cHV0VHlwZShwYXJhbWV0ZXIpIHtcbiAgY29uc3QgZGVmaW5pdGlvblR5cGVzID0ge1xuICAgICdjYW11bmRhOk1hcCc6ICdtYXAnLFxuICAgICdjYW11bmRhOkxpc3QnOiAnbGlzdCcsXG4gICAgJ2NhbXVuZGE6U2NyaXB0JzogJ3NjcmlwdCdcbiAgfTtcbiAgbGV0IHR5cGUgPSAnc3RyaW5nT3JFeHByZXNzaW9uJztcbiAgY29uc3QgZGVmaW5pdGlvbiA9IHBhcmFtZXRlci5nZXQoJ2RlZmluaXRpb24nKTtcbiAgaWYgKHR5cGVvZiBkZWZpbml0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgIHR5cGUgPSBkZWZpbml0aW9uVHlwZXNbZGVmaW5pdGlvbi4kdHlwZV07XG4gIH1cbiAgcmV0dXJuIHR5cGU7XG59XG5mdW5jdGlvbiBDcmVhdGVQYXJhbWV0ZXJDbWQoZWxlbWVudCwgdHlwZSwgcGFyZW50LCBicG1uRmFjdG9yeSkge1xuICBjb25zdCBpc0lucHV0ID0gdHlwZSA9PT0gJ2NhbXVuZGE6SW5wdXRQYXJhbWV0ZXInO1xuICBjb25zdCBuZXdQYXJhbWV0ZXIgPSBjcmVhdGVFbGVtZW50KHR5cGUsIHtcbiAgICBuYW1lOiBuZXh0SWQoaXNJbnB1dCA/ICdJbnB1dF8nIDogJ091dHB1dF8nKVxuICB9LCBwYXJlbnQsIGJwbW5GYWN0b3J5KTtcbiAgY29uc3QgcHJvcGVydHlOYW1lID0gaXNJbnB1dCA/ICdpbnB1dFBhcmFtZXRlcnMnIDogJ291dHB1dFBhcmFtZXRlcnMnO1xuICByZXR1cm4ge1xuICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgY29udGV4dDoge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHBhcmVudCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgW3Byb3BlcnR5TmFtZV06IFsuLi5wYXJlbnQuZ2V0KHByb3BlcnR5TmFtZSksIG5ld1BhcmFtZXRlcl1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBBZGRQYXJhbWV0ZXJDbWQoZWxlbWVudCwgdHlwZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gIC8vICgxKSBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICB2YWx1ZXM6IFtdXG4gICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDIpIGVuc3VyZSBpbnB1dE91dHB1dFxuICBsZXQgaW5wdXRPdXRwdXQgPSBnZXRJbnB1dE91dHB1dChlbGVtZW50KTtcbiAgaWYgKCFpbnB1dE91dHB1dCkge1xuICAgIGNvbnN0IHBhcmVudCA9IGV4dGVuc2lvbkVsZW1lbnRzO1xuICAgIGlucHV0T3V0cHV0ID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpJbnB1dE91dHB1dCcsIHtcbiAgICAgIGlucHV0UGFyYW1ldGVyczogW10sXG4gICAgICBvdXRwdXRQYXJhbWV0ZXJzOiBbXVxuICAgIH0sIHBhcmVudCwgYnBtbkZhY3RvcnkpO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBpbnB1dE91dHB1dF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDMpIGNyZWF0ZSArIGFkZCBwYXJhbWV0ZXJcbiAgY29tbWFuZHMucHVzaChDcmVhdGVQYXJhbWV0ZXJDbWQoZWxlbWVudCwgdHlwZSwgaW5wdXRPdXRwdXQsIGJwbW5GYWN0b3J5KSk7XG4gIHJldHVybiBjb21tYW5kcztcbn1cblxuZnVuY3Rpb24gTGlzdFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4LFxuICAgIGluZGV4LFxuICAgIGl0ZW1cbiAgfSA9IHByb3BzO1xuICBjb25zdCBpZCA9IGAke2lkUHJlZml4fS1saXN0SXRlbS0ke2luZGV4fWA7XG4gIHJldHVybiBqc3goTGlzdEl0ZW0sIHtcbiAgICBpZFByZWZpeDogaWQsXG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBpdGVtOiBpdGVtXG4gIH0pO1xufVxuZnVuY3Rpb24gTGlzdFByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIHBhcmFtZXRlclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBsaXN0ID0gcGFyYW1ldGVyLmdldCgnZGVmaW5pdGlvbicpO1xuICBjb25zdCBpdGVtcyA9IGxpc3QuZ2V0KCdpdGVtcycpO1xuICBmdW5jdGlvbiBhZGRJdGVtKCkge1xuICAgIGNvbnN0IHZhbHVlID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpWYWx1ZScsIHt9LCBwYXJhbWV0ZXIsIGJwbW5GYWN0b3J5KTtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGxpc3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGl0ZW1zOiBbLi4ubGlzdC5nZXQoJ2l0ZW1zJyksIHZhbHVlXVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogbGlzdCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaXRlbXM6IHdpdGhvdXQobGlzdC5nZXQoJ2l0ZW1zJyksIGl0ZW0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIExpc3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBhdXRvRm9jdXNFbnRyeTogdHJ1ZSxcbiAgICBpZDogaWRQcmVmaXggKyAnLWxpc3QnLFxuICAgIGl0ZW1zLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpc3QgdmFsdWVzJyksXG4gICAgb25BZGQ6IGFkZEl0ZW0sXG4gICAgb25SZW1vdmU6IHJlbW92ZUl0ZW0sXG4gICAgY29tcG9uZW50OiBMaXN0UHJvcFxuICB9KTtcbn1cbmZ1bmN0aW9uIExpc3RJdGVtKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIGl0ZW1cbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlZmluaXRpb25MYWJlbHMgPSB7XG4gICAgJ2NhbXVuZGE6TWFwJzogdHJhbnNsYXRlKCdNYXAnKSxcbiAgICAnY2FtdW5kYTpMaXN0JzogdHJhbnNsYXRlKCdMaXN0JyksXG4gICAgJ2NhbXVuZGE6U2NyaXB0JzogdHJhbnNsYXRlKCdTY3JpcHQnKVxuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICBpZiAoaXNEZWZpbml0aW9uVHlwZSQxKGl0ZW0pKSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbkxhYmVsc1tpdGVtLiR0eXBlXTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW0uZ2V0KCd2YWx1ZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGl0ZW0sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBMaXN0VmFsdWUoe1xuICAgIGlkOiBpZFByZWZpeCArICctdmFsdWUnLFxuICAgIGRpc2FibGVkOiBpc0RlZmluaXRpb25UeXBlJDEoaXRlbSksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWVcbiAgfSk7XG59XG5mdW5jdGlvbiBMaXN0VmFsdWUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGRpc2FibGVkLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0JywgdHJ1ZSk7XG4gIHJldHVybiBqc3goU2ltcGxlRW50cnksIHtcbiAgICBpZDogaWQsXG4gICAgZ2V0VmFsdWU6IGdldFZhbHVlLFxuICAgIHNldFZhbHVlOiBzZXRWYWx1ZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgZGVib3VuY2U6IGRlYm91bmNlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1NjcmlwdCQxKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdjYW11bmRhOlNjcmlwdCcpO1xufVxuZnVuY3Rpb24gaXNMaXN0JDEoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2NhbXVuZGE6TGlzdCcpO1xufVxuZnVuY3Rpb24gaXNNYXAkMShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnY2FtdW5kYTpNYXAnKTtcbn1cbmZ1bmN0aW9uIGlzRGVmaW5pdGlvblR5cGUkMShlbGVtZW50KSB7XG4gIHJldHVybiBpc1NjcmlwdCQxKGVsZW1lbnQpIHx8IGlzTGlzdCQxKGVsZW1lbnQpIHx8IGlzTWFwJDEoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIE1hcFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4LFxuICAgIGluZGV4LFxuICAgIGl0ZW06IGVudHJ5LFxuICAgIG9wZW5cbiAgfSA9IHByb3BzO1xuICBjb25zdCBpZCA9IGAke2lkUHJlZml4fS1tYXBFbnRyeS0ke2luZGV4fWA7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4ganN4KENvbGxhcHNpYmxlRW50cnksIHtcbiAgICBpZDogaWQsXG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBlbnRyaWVzOiBNYXBFbnRyeSh7XG4gICAgICBlbGVtZW50LFxuICAgICAgZW50cnksXG4gICAgICBpZFByZWZpeDogaWRcbiAgICB9KSxcbiAgICBsYWJlbDogZW50cnkuZ2V0KCdrZXknKSB8fCB0cmFuc2xhdGUoJzxlbXB0eT4nKSxcbiAgICBvcGVuOiBvcGVuXG4gIH0pO1xufVxuZnVuY3Rpb24gTWFwUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgcGFyYW1ldGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGlkID0gaWRQcmVmaXggKyAnLW1hcCc7XG4gIGNvbnN0IG1hcCA9IHBhcmFtZXRlci5nZXQoJ2RlZmluaXRpb24nKTtcbiAgY29uc3QgZW50cmllcyA9IG1hcC5nZXQoJ2VudHJpZXMnKTtcbiAgZnVuY3Rpb24gYWRkRW50cnkoKSB7XG4gICAgY29uc3QgZW50cnkgPSBjcmVhdGVFbGVtZW50KCdjYW11bmRhOkVudHJ5Jywge30sIHBhcmFtZXRlciwgYnBtbkZhY3RvcnkpO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogbWFwLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBlbnRyaWVzOiBbLi4ubWFwLmdldCgnZW50cmllcycpLCBlbnRyeV1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVFbnRyeShlbnRyeSkge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogbWFwLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBlbnRyaWVzOiB3aXRob3V0KG1hcC5nZXQoJ2VudHJpZXMnKSwgZW50cnkpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIExpc3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBhdXRvRm9jdXNFbnRyeTogYFtkYXRhLWVudHJ5LWlkPVwiJHtpZH0tbWFwRW50cnktJHtlbnRyaWVzLmxlbmd0aCAtIDF9XCJdIGlucHV0YCxcbiAgICBpZDogaWRQcmVmaXggKyAnLW1hcCcsXG4gICAgaXRlbXM6IGVudHJpZXMsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWFwIGVudHJpZXMnKSxcbiAgICBvbkFkZDogYWRkRW50cnksXG4gICAgb25SZW1vdmU6IHJlbW92ZUVudHJ5LFxuICAgIGNvbXBvbmVudDogTWFwUHJvcFxuICB9KTtcbn1cbmZ1bmN0aW9uIE1hcEVudHJ5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGVudHJ5LFxuICAgIGlkUHJlZml4XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZW50cmllcyA9IFt7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy1rZXknLFxuICAgIGNvbXBvbmVudDogTWFwS2V5LFxuICAgIGVudHJ5LFxuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnRcbiAgfSwge1xuICAgIGlkOiBpZFByZWZpeCArICctdmFsdWUnLFxuICAgIGNvbXBvbmVudDogTWFwVmFsdWUsXG4gICAgZW50cnksXG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudFxuICB9XTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBNYXBLZXkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgZW50cnksXG4gICAgaWRQcmVmaXhcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGVudHJ5LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBrZXk6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBlbnRyeS5nZXQoJ2tleScpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQ6IGVudHJ5LFxuICAgIGlkOiBpZFByZWZpeCArICcta2V5JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdLZXknKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIE1hcFZhbHVlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGVudHJ5LFxuICAgIGlkUHJlZml4XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGVudHJ5LmdldCgnZGVmaW5pdGlvbicpO1xuICBjb25zdCBkZWZpbml0aW9uTGFiZWxzID0ge1xuICAgICdjYW11bmRhOk1hcCc6IHRyYW5zbGF0ZSgnTWFwJyksXG4gICAgJ2NhbXVuZGE6TGlzdCc6IHRyYW5zbGF0ZSgnTGlzdCcpLFxuICAgICdjYW11bmRhOlNjcmlwdCc6IHRyYW5zbGF0ZSgnU2NyaXB0JylcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBlbnRyeSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgaWYgKGlzRGVmaW5pdGlvblR5cGUoZGVmaW5pdGlvbikpIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uTGFiZWxzW2RlZmluaXRpb24uJHR5cGVdO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkuZ2V0KCd2YWx1ZScpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQ6IGVudHJ5LFxuICAgIGlkOiBpZFByZWZpeCArICctdmFsdWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhbHVlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGlzYWJsZWQ6IGlzRGVmaW5pdGlvblR5cGUoZGVmaW5pdGlvbiksXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzU2NyaXB0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdjYW11bmRhOlNjcmlwdCcpO1xufVxuZnVuY3Rpb24gaXNMaXN0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdjYW11bmRhOkxpc3QnKTtcbn1cbmZ1bmN0aW9uIGlzTWFwKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdjYW11bmRhOk1hcCcpO1xufVxuZnVuY3Rpb24gaXNEZWZpbml0aW9uVHlwZShlbGVtZW50KSB7XG4gIHJldHVybiBpc1NjcmlwdChlbGVtZW50KSB8fCBpc0xpc3QoZWxlbWVudCkgfHwgaXNNYXAoZWxlbWVudCk7XG59XG5cbmNvbnN0IERFRkFVTFRfUFJPUFMkMyA9IHtcbiAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgZGVmaW5pdGlvbjogdW5kZWZpbmVkXG59O1xuZnVuY3Rpb24gSW5wdXRPdXRwdXRQYXJhbWV0ZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgcGFyYW1ldGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaW5wdXRPdXRwdXRUeXBlID0gZ2V0SW5wdXRPdXRwdXRUeXBlKHBhcmFtZXRlcik7XG4gIGxldCBlbnRyaWVzID0gW3tcbiAgICBpZDogaWRQcmVmaXggKyAnLW5hbWUnLFxuICAgIGNvbXBvbmVudDogTmFtZSQyLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkLFxuICAgIGlkUHJlZml4LFxuICAgIHBhcmFtZXRlclxuICB9LCB7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy10eXBlJyxcbiAgICBjb21wb25lbnQ6IFR5cGUkMixcbiAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZCxcbiAgICBpZFByZWZpeCxcbiAgICBwYXJhbWV0ZXJcbiAgfV07XG5cbiAgLy8gKDEpIFN0cmluZyBvciBleHByZXNzaW9uXG4gIGlmIChpbnB1dE91dHB1dFR5cGUgPT09ICdzdHJpbmdPckV4cHJlc3Npb24nKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiBpZFByZWZpeCArICctc3RyaW5nT3JFeHByZXNzaW9uJyxcbiAgICAgIGNvbXBvbmVudDogU3RyaW5nT3JFeHByZXNzaW9uLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEFyZWFFbnRyeUVkaXRlZCxcbiAgICAgIGlkUHJlZml4LFxuICAgICAgcGFyYW1ldGVyXG4gICAgfSk7XG5cbiAgICAvLyAoMikgU2NyaXB0XG4gIH0gZWxzZSBpZiAoaW5wdXRPdXRwdXRUeXBlID09PSAnc2NyaXB0Jykge1xuICAgIGNvbnN0IHNjcmlwdCA9IHBhcmFtZXRlci5nZXQoJ2RlZmluaXRpb24nKTtcbiAgICBlbnRyaWVzID0gWy4uLmVudHJpZXMsIC4uLlNjcmlwdFByb3BzKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcmVmaXg6IGlkUHJlZml4ICsgJy0nLFxuICAgICAgc2NyaXB0XG4gICAgfSldO1xuXG4gICAgLy8gKDMpIExpc3RcbiAgfSBlbHNlIGlmIChpbnB1dE91dHB1dFR5cGUgPT09ICdsaXN0Jykge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogYCR7aWRQcmVmaXh9LWxpc3RgLFxuICAgICAgY29tcG9uZW50OiBMaXN0UHJvcHMsXG4gICAgICBpZFByZWZpeCxcbiAgICAgIHBhcmFtZXRlclxuICAgIH0pO1xuXG4gICAgLy8gKDQpIE1hcFxuICB9IGVsc2UgaWYgKGlucHV0T3V0cHV0VHlwZSA9PT0gJ21hcCcpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6IGAke2lkUHJlZml4fS1tYXBgLFxuICAgICAgY29tcG9uZW50OiBNYXBQcm9wcyxcbiAgICAgIGlkUHJlZml4LFxuICAgICAgcGFyYW1ldGVyXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBOYW1lJDIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgcGFyYW1ldGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBwYXJhbWV0ZXIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5hbWU6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gcGFyYW1ldGVyID0+IHtcbiAgICByZXR1cm4gcGFyYW1ldGVyLmdldCgnbmFtZScpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQ6IHBhcmFtZXRlcixcbiAgICBpZDogaWRQcmVmaXggKyAnLW5hbWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoaXNJbnB1dChwYXJhbWV0ZXIpID8gJ0xvY2FsIHZhcmlhYmxlIG5hbWUnIDogJ1Byb2Nlc3MgdmFyaWFibGUgbmFtZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gVHlwZSQyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIHBhcmFtZXRlclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBjcmVhdGVEZWZpbml0aW9uRWxlbWVudCA9IHR5cGUgPT4ge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHR5cGUsIHt9LCBwYXJhbWV0ZXIsIGJwbW5GYWN0b3J5KTtcbiAgfTtcbiAgY29uc3QgZ2V0VmFsdWUgPSBtYXBwaW5nID0+IHtcbiAgICByZXR1cm4gZ2V0SW5wdXRPdXRwdXRUeXBlKG1hcHBpbmcpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBsZXQgcHJvcGVydGllcyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfUFJPUFMkM1xuICAgIH07XG4gICAgaWYgKHZhbHVlID09PSAnc2NyaXB0Jykge1xuICAgICAgcHJvcGVydGllcy5kZWZpbml0aW9uID0gY3JlYXRlRGVmaW5pdGlvbkVsZW1lbnQoJ2NhbXVuZGE6U2NyaXB0Jyk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2xpc3QnKSB7XG4gICAgICBwcm9wZXJ0aWVzLmRlZmluaXRpb24gPSBjcmVhdGVEZWZpbml0aW9uRWxlbWVudCgnY2FtdW5kYTpMaXN0Jyk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ21hcCcpIHtcbiAgICAgIHByb3BlcnRpZXMuZGVmaW5pdGlvbiA9IGNyZWF0ZURlZmluaXRpb25FbGVtZW50KCdjYW11bmRhOk1hcCcpO1xuICAgIH1cbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHBhcmFtZXRlcixcbiAgICAgIHByb3BlcnRpZXNcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gW3tcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpc3QnKSxcbiAgICAgIHZhbHVlOiAnbGlzdCdcbiAgICB9LCB7XG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdNYXAnKSxcbiAgICAgIHZhbHVlOiAnbWFwJ1xuICAgIH0sIHtcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1NjcmlwdCcpLFxuICAgICAgdmFsdWU6ICdzY3JpcHQnXG4gICAgfSwge1xuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnU3RyaW5nIG9yIGV4cHJlc3Npb24nKSxcbiAgICAgIHZhbHVlOiAnc3RyaW5nT3JFeHByZXNzaW9uJ1xuICAgIH1dO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuICByZXR1cm4gU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQ6IHBhcmFtZXRlcixcbiAgICBpZDogaWRQcmVmaXggKyAnLXR5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Fzc2lnbm1lbnQgdHlwZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5mdW5jdGlvbiBTdHJpbmdPckV4cHJlc3Npb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgcGFyYW1ldGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBwYXJhbWV0ZXIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gcGFyYW1ldGVyID0+IHtcbiAgICByZXR1cm4gcGFyYW1ldGVyLmdldCgndmFsdWUnKTtcbiAgfTtcbiAgcmV0dXJuIFRleHRBcmVhRW50cnkoe1xuICAgIGVsZW1lbnQ6IHBhcmFtZXRlcixcbiAgICBpZDogaWRQcmVmaXggKyAnLXN0cmluZ09yRXhwcmVzc2lvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFsdWUnKSxcbiAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKCdTdGFydCB0eXBpbmcgXCIke31cIiB0byBjcmVhdGUgYW4gZXhwcmVzc2lvbi4nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICByb3dzOiAxLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzSW5wdXQocGFyYW1ldGVyKSB7XG4gIHJldHVybiBpcyhwYXJhbWV0ZXIsICdjYW11bmRhOklucHV0UGFyYW1ldGVyJyk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBlbGVtZW50IGlzIGNhbXVuZGE6U2VydmljZVRhc2tMaWtlXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc1NlcnZpY2VUYXNrTGlrZShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnY2FtdW5kYTpTZXJ2aWNlVGFza0xpa2UnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnY2FtdW5kYTpEbW5DYXBhYmxlJ1xuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNEbW5DYXBhYmxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdjYW11bmRhOkRtbkNhcGFibGUnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyAnY2FtdW5kYTpFeHRlcm5hbENhcGFibGUnXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc0V4dGVybmFsQ2FwYWJsZShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnY2FtdW5kYTpFeHRlcm5hbENhcGFibGUnKTtcbn1cblxuLyoqXG4gKiBnZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdCAtIEdldCBhICdjYW11bmRhOlNlcnZpY2VUYXNrTGlrZScgYnVzaW5lc3Mgb2JqZWN0LlxuICpcbiAqIElmIHRoZSBnaXZlbiBlbGVtZW50IGlzIG5vdCBhICdjYW11bmRhOlNlcnZpY2VUYXNrTGlrZScsIHRoZW4gJ2ZhbHNlJ1xuICogaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlICdjYW11bmRhOlNlcnZpY2VUYXNrTGlrZScgYnVzaW5lc3Mgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpFbmRFdmVudCcpKSB7XG4gICAgLy8gY2hhbmdlIGJ1c2luZXNzIG9iamVjdCB0byAnbWVzc2FnZUV2ZW50RGVmaW5pdGlvbicgd2hlblxuICAgIC8vIHRoZSBlbGVtZW50IGlzIGEgbWVzc2FnZSBpbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQgb3IgbWVzc2FnZSBlbmQgZXZlbnRcbiAgICAvLyBiZWNhdXNlIHRoZSBjYW11bmRhIGV4dGVuc2lvbnMgKGUuZy4gY2FtdW5kYTpjbGFzcykgYXJlIGluIHRoZSBtZXNzYWdlXG4gICAgLy8gZXZlbnQgZGVmaW5pdGlvbiB0YWcgYW5kIG5vdCBpbiB0aGUgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50IG9yIGVuZCBldmVudCB0YWdcbiAgICBjb25zdCBtZXNzYWdlRXZlbnREZWZpbml0aW9uID0gZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgICBpZiAobWVzc2FnZUV2ZW50RGVmaW5pdGlvbikge1xuICAgICAgZWxlbWVudCA9IG1lc3NhZ2VFdmVudERlZmluaXRpb247XG4gICAgfVxuICB9XG4gIHJldHVybiBpc1NlcnZpY2VUYXNrTGlrZShlbGVtZW50KSAmJiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIFBvc3NpYmxlIGltcGxlbWVudGF0aW9uIHR5cGVzIGFyZTpcbiAqIC0gZG1uXG4gKiAtIGNvbm5lY3RvclxuICogLSBleHRlcm5hbFxuICogLSBjbGFzc1xuICogLSBleHByZXNzaW9uXG4gKiAtIGRlbGVnYXRlRXhwcmVzc2lvblxuICogLSBzY3JpcHRcbiAqIC0gb3IgdW5kZWZpbmVkLCB3aGVuIG5vIG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIHR5cGUgaXMgZm91bmRcbiAqXG4gKiBAcGFyYW0gIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGltcGxlbWVudGF0aW9uIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0SW1wbGVtZW50YXRpb25UeXBlKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRMaXN0ZW5lckJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHx8IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBpZiAoIWJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpc0RtbkNhcGFibGUoYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgY29uc3QgZGVjaXNpb25SZWYgPSBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6ZGVjaXNpb25SZWYnKTtcbiAgICBpZiAodHlwZW9mIGRlY2lzaW9uUmVmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICdkbW4nO1xuICAgIH1cbiAgfVxuICBpZiAoaXNTZXJ2aWNlVGFza0xpa2UoYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgY29uc3QgY29ubmVjdG9ycyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6Q29ubmVjdG9yJyk7XG4gICAgaWYgKGNvbm5lY3RvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJ2Nvbm5lY3Rvcic7XG4gICAgfVxuICB9XG4gIGlmIChpc0V4dGVybmFsQ2FwYWJsZShidXNpbmVzc09iamVjdCkpIHtcbiAgICBjb25zdCB0eXBlID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnR5cGUnKTtcbiAgICBpZiAodHlwZSA9PT0gJ2V4dGVybmFsJykge1xuICAgICAgcmV0dXJuICdleHRlcm5hbCc7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNscyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpjbGFzcycpO1xuICBpZiAodHlwZW9mIGNscyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ2NsYXNzJztcbiAgfVxuICBjb25zdCBleHByZXNzaW9uID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmV4cHJlc3Npb24nKTtcbiAgaWYgKHR5cGVvZiBleHByZXNzaW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAnZXhwcmVzc2lvbic7XG4gIH1cbiAgY29uc3QgZGVsZWdhdGVFeHByZXNzaW9uID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmRlbGVnYXRlRXhwcmVzc2lvbicpO1xuICBpZiAodHlwZW9mIGRlbGVnYXRlRXhwcmVzc2lvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ2RlbGVnYXRlRXhwcmVzc2lvbic7XG4gIH1cbiAgY29uc3Qgc2NyaXB0ID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdzY3JpcHQnKTtcbiAgaWYgKHR5cGVvZiBzY3JpcHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICdzY3JpcHQnO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lckJ1c2luZXNzT2JqZWN0KGJ1c2luZXNzT2JqZWN0KSB7XG4gIGlmIChpc0FueShidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyJywgJ2NhbXVuZGE6VGFza0xpc3RlbmVyJ10pKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFyZUNvbm5lY3RvcnNTdXBwb3J0ZWQoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gYnVzaW5lc3NPYmplY3QgJiYgZ2V0SW1wbGVtZW50YXRpb25UeXBlKGJ1c2luZXNzT2JqZWN0KSA9PT0gJ2Nvbm5lY3Rvcic7XG59XG5mdW5jdGlvbiBnZXRDb25uZWN0b3JzJDIoYnVzaW5lc3NPYmplY3QpIHtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6Q29ubmVjdG9yJyk7XG59XG5mdW5jdGlvbiBnZXRDb25uZWN0b3IkMShlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGNvbm5lY3RvcnMgPSBnZXRDb25uZWN0b3JzJDIoYnVzaW5lc3NPYmplY3QpO1xuICByZXR1cm4gY29ubmVjdG9yc1swXTtcbn1cblxuZnVuY3Rpb24gQ29ubmVjdG9ySW5wdXRQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpbmplY3RvclxuICB9ID0gcHJvcHM7XG4gIGlmICghYXJlQ29ubmVjdG9yc1N1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGNvbm5lY3RvciA9IGdldENvbm5lY3RvciQxKGVsZW1lbnQpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSBpbmplY3Rvci5nZXQoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBpbnB1dFBhcmFtZXRlcnMgPSBnZXRJbnB1dFBhcmFtZXRlcnMoY29ubmVjdG9yKSB8fCBbXTtcbiAgY29uc3QgaXRlbXMgPSBpbnB1dFBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBlbGVtZW50LmlkICsgJy1jb25uZWN0b3ItaW5wdXRQYXJhbWV0ZXItJyArIGluZGV4O1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiBwYXJhbWV0ZXIuZ2V0KCduYW1lJykgfHwgJycsXG4gICAgICBlbnRyaWVzOiBJbnB1dE91dHB1dFBhcmFtZXRlcih7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlkUHJlZml4OiBpZCxcbiAgICAgICAgcGFyYW1ldGVyXG4gICAgICB9KSxcbiAgICAgIGF1dG9Gb2N1c0VudHJ5OiBpZCArICctbmFtZScsXG4gICAgICByZW1vdmU6IHJlbW92ZUZhY3RvcnkkOCh7XG4gICAgICAgIGNvbm5lY3RvcixcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICBjb21tYW5kU3RhY2tcbiAgICAgIH0pXG4gICAgfTtcbiAgfSk7XG4gIGZ1bmN0aW9uIGFkZChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG5cbiAgICAvLyAoMSkgZW5zdXJlIGlucHV0T3V0cHV0XG4gICAgbGV0IGlucHV0T3V0cHV0ID0gZ2V0SW5wdXRPdXRwdXQoY29ubmVjdG9yKTtcbiAgICBpZiAoIWlucHV0T3V0cHV0KSB7XG4gICAgICBpbnB1dE91dHB1dCA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6SW5wdXRPdXRwdXQnLCB7XG4gICAgICAgIGlucHV0UGFyYW1ldGVyczogW10sXG4gICAgICAgIG91dHB1dFBhcmFtZXRlcnM6IFtdXG4gICAgICB9LCBjb25uZWN0b3IsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBjb25uZWN0b3IsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaW5wdXRPdXRwdXRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSBjcmVhdGUgKyBhZGQgcGFyYW1ldGVyXG4gICAgY29tbWFuZHMucHVzaChDcmVhdGVQYXJhbWV0ZXJDbWQoZWxlbWVudCwgJ2NhbXVuZGE6SW5wdXRQYXJhbWV0ZXInLCBpbnB1dE91dHB1dCwgYnBtbkZhY3RvcnkpKTtcblxuICAgIC8vICgzKSBjb21taXQgYWxsIHVwZGF0ZXNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgYWRkXG4gIH07XG59XG5mdW5jdGlvbiByZW1vdmVGYWN0b3J5JDgocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNvbW1hbmRTdGFjayxcbiAgICBjb25uZWN0b3IsXG4gICAgZWxlbWVudCxcbiAgICBwYXJhbWV0ZXJcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgaW5wdXRPdXRwdXQgPSBnZXRJbnB1dE91dHB1dChjb25uZWN0b3IpO1xuICAgIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBpbnB1dE91dHB1dCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiB3aXRob3V0KGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyksIHBhcmFtZXRlcilcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gQ29ubmVjdG9yT3V0cHV0UHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaW5qZWN0b3JcbiAgfSA9IHByb3BzO1xuICBpZiAoIWFyZUNvbm5lY3RvcnNTdXBwb3J0ZWQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjb25uZWN0b3IgPSBnZXRDb25uZWN0b3IkMShlbGVtZW50KTtcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snKSxcbiAgICBicG1uRmFjdG9yeSA9IGluamVjdG9yLmdldCgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3Qgb3V0cHV0UGFyYW1ldGVycyA9IGdldE91dHB1dFBhcmFtZXRlcnMoY29ubmVjdG9yKSB8fCBbXTtcbiAgY29uc3QgaXRlbXMgPSBvdXRwdXRQYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZCArICctY29ubmVjdG9yLW91dHB1dFBhcmFtZXRlci0nICsgaW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWw6IHBhcmFtZXRlci5nZXQoJ25hbWUnKSB8fCAnJyxcbiAgICAgIGVudHJpZXM6IElucHV0T3V0cHV0UGFyYW1ldGVyKHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBwYXJhbWV0ZXJcbiAgICAgIH0pLFxuICAgICAgYXV0b0ZvY3VzRW50cnk6IGlkICsgJy1uYW1lJyxcbiAgICAgIHJlbW92ZTogcmVtb3ZlRmFjdG9yeSQ3KHtcbiAgICAgICAgY29ubmVjdG9yLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBjb21tYW5kU3RhY2ssXG4gICAgICAgIHBhcmFtZXRlclxuICAgICAgfSlcbiAgICB9O1xuICB9KTtcbiAgZnVuY3Rpb24gYWRkKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcblxuICAgIC8vICgxKSBlbnN1cmUgaW5wdXRPdXRwdXRcbiAgICBsZXQgaW5wdXRPdXRwdXQgPSBnZXRJbnB1dE91dHB1dChjb25uZWN0b3IpO1xuICAgIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICAgIGlucHV0T3V0cHV0ID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpJbnB1dE91dHB1dCcsIHtcbiAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiBbXSxcbiAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogW11cbiAgICAgIH0sIGNvbm5lY3RvciwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGNvbm5lY3RvcixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpbnB1dE91dHB1dFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGNyZWF0ZSArIGFkZCBwYXJhbWV0ZXJcbiAgICBjb21tYW5kcy5wdXNoKENyZWF0ZVBhcmFtZXRlckNtZChlbGVtZW50LCAnY2FtdW5kYTpPdXRwdXRQYXJhbWV0ZXInLCBpbnB1dE91dHB1dCwgYnBtbkZhY3RvcnkpKTtcblxuICAgIC8vICgzKSBjb21taXQgYWxsIHVwZGF0ZXNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgYWRkXG4gIH07XG59XG5mdW5jdGlvbiByZW1vdmVGYWN0b3J5JDcocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNvbW1hbmRTdGFjayxcbiAgICBjb25uZWN0b3IsXG4gICAgZWxlbWVudCxcbiAgICBwYXJhbWV0ZXJcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgaW5wdXRPdXRwdXQgPSBnZXRJbnB1dE91dHB1dChjb25uZWN0b3IpO1xuICAgIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBpbnB1dE91dHB1dCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogd2l0aG91dChpbnB1dE91dHB1dC5nZXQoJ291dHB1dFBhcmFtZXRlcnMnKSwgcGFyYW1ldGVyKVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBFcnJvclByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGVudHJpZXNcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzRXJyb3JTdXBwb3J0ZWQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuICBjb25zdCBlcnJvciA9IGdldEVycm9yKGVsZW1lbnQpO1xuXG4gIC8vICgxKSBlcnJvck1lc3NhZ2UgKGVycm9yKVxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCBpZHggPSBmaW5kUGxhY2VUb0luc2VydChlbnRyaWVzLCAnZXJyb3JDb2RlJyk7XG5cbiAgICAvLyBwbGFjZSBiZWxvdyBlcnJvckNvZGVcbiAgICBlbnRyaWVzLnNwbGljZShpZHgsIDAsIHtcbiAgICAgIGlkOiAnZXJyb3JNZXNzYWdlJyxcbiAgICAgIGNvbXBvbmVudDogRXJyb3JNZXNzYWdlJDEsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9XG4gIGlmICghY2FuSGF2ZUVycm9yVmFyaWFibGVzKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICAvLyAoMikgZXJyb3JDb2RlVmFyaWFibGUgKyBlcnJvck1lc3NhZ2VWYXJpYWJsZSAoZXJyb3JFdmVudERlZmluaXRpb24pXG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6ICdlcnJvckNvZGVWYXJpYWJsZScsXG4gICAgY29tcG9uZW50OiBFcnJvckNvZGVWYXJpYWJsZSxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9LCB7XG4gICAgaWQ6ICdlcnJvck1lc3NhZ2VWYXJpYWJsZScsXG4gICAgY29tcG9uZW50OiBFcnJvck1lc3NhZ2VWYXJpYWJsZSxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBFcnJvck1lc3NhZ2UkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGVycm9yID0gZ2V0RXJyb3IoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBlcnJvci5nZXQoJ2NhbXVuZGE6ZXJyb3JNZXNzYWdlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGVycm9yLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTplcnJvck1lc3NhZ2UnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdlcnJvck1lc3NhZ2UnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ01lc3NhZ2UnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIEVycm9yQ29kZVZhcmlhYmxlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb24gPSBnZXRFcnJvckV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdjYW11bmRhOmVycm9yQ29kZVZhcmlhYmxlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTplcnJvckNvZGVWYXJpYWJsZSc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2Vycm9yQ29kZVZhcmlhYmxlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb2RlIHZhcmlhYmxlJyksXG4gICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgZXJyb3IgY29kZS4nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIEVycm9yTWVzc2FnZVZhcmlhYmxlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb24gPSBnZXRFcnJvckV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdjYW11bmRhOmVycm9yTWVzc2FnZVZhcmlhYmxlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTplcnJvck1lc3NhZ2VWYXJpYWJsZSc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2Vycm9yTWVzc2FnZVZhcmlhYmxlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdNZXNzYWdlIHZhcmlhYmxlJyksXG4gICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgZXJyb3IgbWVzc2FnZS4nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGNhbkhhdmVFcnJvclZhcmlhYmxlcyhlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdGFydEV2ZW50JykgfHwgaXMoZWxlbWVudCwgJ2JwbW46Qm91bmRhcnlFdmVudCcpO1xufVxuZnVuY3Rpb24gZmluZFBsYWNlVG9JbnNlcnQoZW50cmllcywgaWR4KSB7XG4gIGNvbnN0IGVudHJ5SW5kZXggPSBmaW5kSW5kZXgoZW50cmllcywgZW50cnkgPT4gZW50cnkuaWQgPT09IGlkeCk7XG4gIHJldHVybiBlbnRyeUluZGV4ID49IDAgPyBlbnRyeUluZGV4ICsgMSA6IGVudHJpZXMubGVuZ3RoO1xufVxuXG5jb25zdCBFTVBUWV9PUFRJT04gPSAnJztcbmNvbnN0IENSRUFURV9ORVdfT1BUSU9OID0gJ2NyZWF0ZS1uZXcnO1xuZnVuY3Rpb24gRXJyb3IkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZXJyb3JFdmVudERlZmluaXRpb25cbiAgfSA9IHByb3BzO1xuICBsZXQgZW50cmllcyA9IFt7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy1lcnJvclJlZicsXG4gICAgY29tcG9uZW50OiBFcnJvclJlZixcbiAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZCxcbiAgICBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICBpZFByZWZpeFxuICB9XTtcbiAgY29uc3QgZXJyb3IgPSBlcnJvckV2ZW50RGVmaW5pdGlvbi5nZXQoJ2Vycm9yUmVmJyk7XG4gIGlmIChlcnJvcikge1xuICAgIGVudHJpZXMgPSBbLi4uZW50cmllcywge1xuICAgICAgaWQ6IGlkUHJlZml4ICsgJy1lcnJvck5hbWUnLFxuICAgICAgY29tcG9uZW50OiBFcnJvck5hbWUsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZCxcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3JFdmVudERlZmluaXRpb24sXG4gICAgICBpZFByZWZpeFxuICAgIH0sIHtcbiAgICAgIGlkOiBpZFByZWZpeCArICctZXJyb3JDb2RlJyxcbiAgICAgIGNvbXBvbmVudDogRXJyb3JDb2RlLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWQsXG4gICAgICBlcnJvcixcbiAgICAgIGVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgICAgaWRQcmVmaXhcbiAgICB9LCB7XG4gICAgICBpZDogaWRQcmVmaXggKyAnLWVycm9yTWVzc2FnZScsXG4gICAgICBjb21wb25lbnQ6IEVycm9yTWVzc2FnZSxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICAgIGlkUHJlZml4XG4gICAgfV07XG4gIH1cbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogaWRQcmVmaXggKyAnLWV4cHJlc3Npb24nLFxuICAgIGNvbXBvbmVudDogRXhwcmVzc2lvbiQxLFxuICAgIGVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgIGlkUHJlZml4XG4gIH0pO1xuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIEVycm9yUmVmKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgIGlkUHJlZml4XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdlcnJvclJlZicpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yLmdldCgnaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZX09QVElPTjtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldFJvb3QoYnVzaW5lc3NPYmplY3QpO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgbGV0IGVycm9yO1xuXG4gICAgLy8gKDEpIGNyZWF0ZSBuZXcgZXJyb3JcbiAgICBpZiAodmFsdWUgPT09IENSRUFURV9ORVdfT1BUSU9OKSB7XG4gICAgICBlcnJvciA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXJyb3InLCB7XG4gICAgICAgIG5hbWU6IG5leHRJZCgnRXJyb3JfJylcbiAgICAgIH0sIHJvb3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIHZhbHVlID0gZXJyb3IuZ2V0KCdpZCcpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHJvb3QsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcm9vdEVsZW1lbnRzOiBbLi4ucm9vdC5nZXQoJ3Jvb3RFbGVtZW50cycpLCBlcnJvcl1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgyKSB1cGRhdGUgKG9yIHJlbW92ZSkgZXJyb3JSZWZcbiAgICBlcnJvciA9IGVycm9yIHx8IGZpbmRSb290RWxlbWVudEJ5SWQoYnVzaW5lc3NPYmplY3QsICdicG1uOkVycm9yJywgdmFsdWUpO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogZXJyb3JFdmVudERlZmluaXRpb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBlcnJvclJlZjogZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDMpIGNvbW1pdCBhbGwgdXBkYXRlc1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gW3tcbiAgICAgIHZhbHVlOiBFTVBUWV9PUFRJT04sXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBDUkVBVEVfTkVXX09QVElPTixcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NyZWF0ZSBuZXcgLi4uJylcbiAgICB9XTtcbiAgICBjb25zdCBlcnJvcnMgPSBmaW5kUm9vdEVsZW1lbnRzQnlUeXBlKGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLCAnYnBtbjpFcnJvcicpO1xuICAgIHNvcnRCeU5hbWUkMShlcnJvcnMpLmZvckVhY2goZXJyb3IgPT4ge1xuICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGVycm9yLmdldCgnaWQnKSxcbiAgICAgICAgbGFiZWw6IGVycm9yLmdldCgnbmFtZScpIHx8IGVycm9yLmdldCgnaWQnKVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBSZWZlcmVuY2VTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogaWRQcmVmaXggKyAnLWVycm9yUmVmJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdHbG9iYWwgZXJyb3IgcmVmZXJlbmNlJyksXG4gICAgYXV0b0ZvY3VzRW50cnk6IGlkUHJlZml4ICsgJy1lcnJvck5hbWUnLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5mdW5jdGlvbiBFcnJvck5hbWUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgZXJyb3IsXG4gICAgaWRQcmVmaXhcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZXJyb3IuZ2V0KCduYW1lJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGVycm9yLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBuYW1lOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1lcnJvck5hbWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ05hbWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIEVycm9yQ29kZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBlcnJvcixcbiAgICBpZFByZWZpeFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBlcnJvci5nZXQoJ2Vycm9yQ29kZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBlcnJvcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZXJyb3JDb2RlOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1lcnJvckNvZGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NvZGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIEVycm9yTWVzc2FnZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBlcnJvcixcbiAgICBpZFByZWZpeFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBlcnJvci5nZXQoJ2Vycm9yTWVzc2FnZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBlcnJvcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZXJyb3JNZXNzYWdlOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1lcnJvck1lc3NhZ2UnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ01lc3NhZ2UnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIEV4cHJlc3Npb24kMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICBpZFByZWZpeFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZXJyb3JFdmVudERlZmluaXRpb24sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmV4cHJlc3Npb24nOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdjYW11bmRhOmV4cHJlc3Npb24nKTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50OiBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICBpZDogaWRQcmVmaXggKyAnLWV4cHJlc3Npb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Rocm93IGV4cHJlc3Npb24nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHNvcnRCeU5hbWUkMShlbGVtZW50cykge1xuICByZXR1cm4gc29ydEJ5KGVsZW1lbnRzLCBlID0+IChlLm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5mdW5jdGlvbiBFcnJvcnNQcm9wcyh7XG4gIGVsZW1lbnQsXG4gIGluamVjdG9yXG59KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46U2VydmljZVRhc2snKSB8fCBnZXRJbXBsZW1lbnRhdGlvblR5cGUoZWxlbWVudCkgIT09ICdleHRlcm5hbCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBlcnJvckV2ZW50RGVmaW5pdGlvbnMgPSBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOkVycm9yRXZlbnREZWZpbml0aW9uJyk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGl0ZW1zID0gZXJyb3JFdmVudERlZmluaXRpb25zLm1hcCgoZXJyb3JFdmVudERlZmluaXRpb24sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBlbGVtZW50LmlkICsgJy1lcnJvci0nICsgaW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWw6IGdldEVycm9yTGFiZWwoZXJyb3JFdmVudERlZmluaXRpb24pLFxuICAgICAgZW50cmllczogRXJyb3IkMSh7XG4gICAgICAgIGlkUHJlZml4OiBpZCxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgZXJyb3JFdmVudERlZmluaXRpb25cbiAgICAgIH0pLFxuICAgICAgYXV0b0ZvY3VzRW50cnk6IGlkICsgJy1lcnJvclJlZicsXG4gICAgICByZW1vdmU6IHJlbW92ZUZhY3RvcnkkNih7XG4gICAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgZXJyb3JFdmVudERlZmluaXRpb25cbiAgICAgIH0pXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgYWRkOiBhZGRGYWN0b3J5JDUoe1xuICAgICAgYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2ssXG4gICAgICBlbGVtZW50XG4gICAgfSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUZhY3RvcnkkNih7XG4gIGNvbW1hbmRTdGFjayxcbiAgZWxlbWVudCxcbiAgZXJyb3JFdmVudERlZmluaXRpb25cbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGVycm9yRXZlbnREZWZpbml0aW9uLCBjb21tYW5kU3RhY2spO1xuICB9O1xufVxuZnVuY3Rpb24gYWRkRmFjdG9yeSQ1KHtcbiAgYnBtbkZhY3RvcnksXG4gIGNvbW1hbmRTdGFjayxcbiAgZWxlbWVudFxufSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCBlcnJvciA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6RXJyb3JFdmVudERlZmluaXRpb24nLCB7fSwgdW5kZWZpbmVkLCBicG1uRmFjdG9yeSk7XG4gICAgYWRkRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGVycm9yLCBicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrKTtcbiAgfTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEVycm9yTGFiZWwoZXJyb3JFdmVudERlZmluaXRpb24pIHtcbiAgY29uc3QgZXJyb3IgPSBlcnJvckV2ZW50RGVmaW5pdGlvbi5nZXQoJ2Vycm9yUmVmJyk7XG4gIGlmICghZXJyb3IpIHtcbiAgICByZXR1cm4gJzxubyByZWZlcmVuY2U+JztcbiAgfVxuICBjb25zdCBlcnJvckNvZGUgPSBlcnJvci5nZXQoJ2Vycm9yQ29kZScpLFxuICAgIG5hbWUgPSBlcnJvci5nZXQoJ25hbWUnKSB8fCAnPHVubmFtZWQ+JztcbiAgaWYgKGVycm9yQ29kZSkge1xuICAgIHJldHVybiBgJHtuYW1lfSAoY29kZSA9ICR7ZXJyb3JDb2RlfSlgO1xuICB9XG4gIHJldHVybiBuYW1lO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCdAYnBtbi1pby9wcm9wZXJ0aWVzLXBhbmVsJykuRW50cnlEZWZpbml0aW9uIH0gRW50cnlcbiAqL1xuXG4vKipcbiAqIEByZXR1cm5zIHtBcnJheTxFbnRyeT59IGVudHJpZXNcbiAqL1xuZnVuY3Rpb24gRXNjYWxhdGlvblByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGVudHJpZXNcbiAgfSA9IHByb3BzO1xuICBpZiAoIShpc0VzY2FsYXRpb25TdXBwb3J0ZWQoZWxlbWVudCkgJiYgY2FuSGF2ZUVzY2FsYXRpb25WYXJpYWJsZXMoZWxlbWVudCkpKSB7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogJ2VzY2FsYXRpb25Db2RlVmFyaWFibGUnLFxuICAgIGNvbXBvbmVudDogRXNjYWxhdGlvbkNvZGVWYXJpYWJsZSxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBFc2NhbGF0aW9uQ29kZVZhcmlhYmxlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbiA9IGdldEVzY2FsYXRpb25FdmVudERlZmluaXRpb24oZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBlc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uLmdldCgnY2FtdW5kYTplc2NhbGF0aW9uQ29kZVZhcmlhYmxlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGVzY2FsYXRpb25FdmVudERlZmluaXRpb24sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmVzY2FsYXRpb25Db2RlVmFyaWFibGUnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdlc2NhbGF0aW9uQ29kZVZhcmlhYmxlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb2RlIHZhcmlhYmxlJyksXG4gICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgZXNjYWxhdGlvbiBjb2RlLicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gY2FuSGF2ZUVzY2FsYXRpb25WYXJpYWJsZXMoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpIHx8IGlzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKTtcbn1cblxuZnVuY3Rpb24gRXh0ZXJuYWxUYXNrUHJpb3JpdHlQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpICYmICEoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkgJiYgIWlzRXh0ZXJuYWxUYXNrTGlrZShlbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW3tcbiAgICBpZDogJ2V4dGVybmFsVGFza1ByaW9yaXR5JyxcbiAgICBjb21wb25lbnQ6IEV4dGVybmFsVGFza1ByaW9yaXR5LFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gRXh0ZXJuYWxUYXNrUHJpb3JpdHkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgbGV0IGJ1c2luZXNzT2JqZWN0O1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuZ2V0KCdwcm9jZXNzUmVmJyk7XG4gIH0gZWxzZSBpZiAoaXNFeHRlcm5hbFRhc2tMaWtlKGVsZW1lbnQpKSB7XG4gICAgYnVzaW5lc3NPYmplY3QgPSBnZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICB9XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6dGFza1ByaW9yaXR5Jyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOnRhc2tQcmlvcml0eSc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2V4dGVybmFsVGFza1ByaW9yaXR5JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcmlvcml0eScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzRXh0ZXJuYWxUYXNrTGlrZShlbGVtZW50KSB7XG4gIGNvbnN0IGJvID0gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgdHlwZSA9IGJvICYmIGJvLmdldCgnY2FtdW5kYTp0eXBlJyk7XG4gIHJldHVybiBpcyhibywgJ2NhbXVuZGE6U2VydmljZVRhc2tMaWtlJykgJiYgdHlwZSAmJiB0eXBlID09PSAnZXh0ZXJuYWwnO1xufVxuXG5jb25zdCBERUZBVUxUX1BST1BTJDIgPSB7XG4gICdzdHJpbmdWYWx1ZSc6IHVuZGVmaW5lZCxcbiAgJ3N0cmluZyc6IHVuZGVmaW5lZCxcbiAgJ2V4cHJlc3Npb24nOiB1bmRlZmluZWRcbn07XG5mdW5jdGlvbiBGaWVsZEluamVjdGlvbihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZFByZWZpeCxcbiAgICBmaWVsZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiBpZFByZWZpeCArICctbmFtZScsXG4gICAgY29tcG9uZW50OiBOYW1lUHJvcGVydHksXG4gICAgZmllbGQsXG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudFxuICB9LCB7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy10eXBlJyxcbiAgICBjb21wb25lbnQ6IFR5cGVQcm9wZXJ0eSxcbiAgICBmaWVsZCxcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50XG4gIH0sIHtcbiAgICBpZDogaWRQcmVmaXggKyAnLXZhbHVlJyxcbiAgICBjb21wb25lbnQ6IFZhbHVlUHJvcGVydHksXG4gICAgZmllbGQsXG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudFxuICB9XTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBOYW1lUHJvcGVydHkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgZmllbGRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBmaWVsZCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0VmFsdWUgPSBmaWVsZCA9PiB7XG4gICAgcmV0dXJuIGZpZWxkLm5hbWU7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogZmllbGQsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1uYW1lJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdOYW1lJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBUeXBlUHJvcGVydHkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgZmllbGRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSBmaWVsZCA9PiB7XG4gICAgcmV0dXJuIGRldGVybWluZVR5cGUoZmllbGQpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9QUk9QUyQyKTtcbiAgICBwcm9wZXJ0aWVzW3ZhbHVlXSA9ICcnO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZmllbGQsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSBlbGVtZW50ID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gW3tcbiAgICAgIHZhbHVlOiAnc3RyaW5nJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1N0cmluZycpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICdleHByZXNzaW9uJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V4cHJlc3Npb24nKVxuICAgIH1dO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuICByZXR1cm4gU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQ6IGZpZWxkLFxuICAgIGlkOiBpZFByZWZpeCArICctdHlwZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5mdW5jdGlvbiBWYWx1ZVByb3BlcnR5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIGZpZWxkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgLy8gKDEpIGRldGVybWluZSB3aGljaCB0eXBlIHdlIGhhdmUgc2V0XG4gICAgY29uc3QgdHlwZSA9IGRldGVybWluZVR5cGUoZmllbGQpO1xuXG4gICAgLy8gKDIpIHNldCBwcm9wZXJ0eSBhY2NvcmRpbmdseVxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1BST1BTJDIpO1xuICAgIHByb3BlcnRpZXNbdHlwZV0gPSB2YWx1ZSB8fCAnJztcblxuICAgIC8vICgzKSBleGVjdXRlIHRoZSB1cGRhdGUgY29tbWFuZFxuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZmllbGQsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gZmllbGQgPT4ge1xuICAgIHJldHVybiBmaWVsZC5zdHJpbmcgfHwgZmllbGQuc3RyaW5nVmFsdWUgfHwgZmllbGQuZXhwcmVzc2lvbjtcbiAgfTtcbiAgcmV0dXJuIFRleHRBcmVhRW50cnkoe1xuICAgIGVsZW1lbnQ6IGZpZWxkLFxuICAgIGlkOiBpZFByZWZpeCArICctdmFsdWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhbHVlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2UsXG4gICAgYXV0b1Jlc2l6ZTogdHJ1ZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBkZXRlcm1pbmVUeXBlIC0gZ2V0IHRoZSB0eXBlIG9mIGEgZmllbGRJbmplY3Rpb24gYmFzZWQgb24gdGhlIGF0dHJpYnV0ZXNcbiAqIHNldCBvbiBpdFxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGZpZWxkXG4gKiBAcmV0dXJuIHsoJ3N0cmluZyd8J2V4cHJlc3Npb24nKX1cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lVHlwZShmaWVsZCkge1xuICAvLyBzdHJpbmcgaXMgdGhlIGRlZmF1bHQgdHlwZVxuICByZXR1cm4gJ3N0cmluZycgaW4gZmllbGQgJiYgJ3N0cmluZycgfHwgJ2V4cHJlc3Npb24nIGluIGZpZWxkICYmICdleHByZXNzaW9uJyB8fCAnc3RyaW5nVmFsdWUnIGluIGZpZWxkICYmICdzdHJpbmcnIHx8ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBGaWVsZEluamVjdGlvblByb3BzKHtcbiAgZWxlbWVudCxcbiAgaW5qZWN0b3Jcbn0pIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGZpZWxkSW5qZWN0aW9ucyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6RmllbGQnKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSBpbmplY3Rvci5nZXQoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgaXRlbXMgPSBmaWVsZEluamVjdGlvbnMubWFwKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGVsZW1lbnQuaWQgKyAnLWZpZWxkSW5qZWN0aW9uLScgKyBpbmRleDtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBsYWJlbDogZ2V0RmllbGRMYWJlbChmaWVsZCksXG4gICAgICBlbnRyaWVzOiBGaWVsZEluamVjdGlvbih7XG4gICAgICAgIGlkUHJlZml4OiBpZCxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgZmllbGRcbiAgICAgIH0pLFxuICAgICAgYXV0b0ZvY3VzRW50cnk6IGlkICsgJy1uYW1lJyxcbiAgICAgIHJlbW92ZTogcmVtb3ZlRmFjdG9yeSQ1KHtcbiAgICAgICAgY29tbWFuZFN0YWNrLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBmaWVsZFxuICAgICAgfSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpdGVtcyxcbiAgICBhZGQ6IGFkZEZhY3RvcnkkNCh7XG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgIGVsZW1lbnRcbiAgICB9KVxuICB9O1xufVxuZnVuY3Rpb24gcmVtb3ZlRmFjdG9yeSQ1KHtcbiAgY29tbWFuZFN0YWNrLFxuICBlbGVtZW50LFxuICBmaWVsZFxufSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICByZW1vdmVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwgZmllbGQsIGNvbW1hbmRTdGFjayk7XG4gIH07XG59XG5mdW5jdGlvbiBhZGRGYWN0b3J5JDQoe1xuICBicG1uRmFjdG9yeSxcbiAgY29tbWFuZFN0YWNrLFxuICBlbGVtZW50XG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGZpZWxkSW5qZWN0aW9uID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpGaWVsZCcsIHtcbiAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmluZzogJycsXG4gICAgICAvLyBzdHJpbmcgaXMgdGhlIGRlZmF1bHQgdHlwZVxuICAgICAgc3RyaW5nVmFsdWU6IHVuZGVmaW5lZFxuICAgIH0sIG51bGwsIGJwbW5GYWN0b3J5KTtcbiAgICBhZGRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwgZmllbGRJbmplY3Rpb24sIGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2spO1xuICB9O1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEZpZWxkTGFiZWwoZmllbGQpIHtcbiAgcmV0dXJuIGZpZWxkLm5hbWUgfHwgJzxlbXB0eT4nO1xufVxuXG5mdW5jdGlvbiBGb3JtRmllbGRDb25zdHJhaW50KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjb25zdHJhaW50LFxuICAgIGVsZW1lbnQsXG4gICAgaWRQcmVmaXhcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW3tcbiAgICBpZDogaWRQcmVmaXggKyAnLW5hbWUnLFxuICAgIGNvbXBvbmVudDogTmFtZSQxLFxuICAgIGNvbnN0cmFpbnQsXG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudFxuICB9LCB7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy1jb25maWcnLFxuICAgIGNvbXBvbmVudDogQ29uZmlnLFxuICAgIGNvbnN0cmFpbnQsXG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudFxuICB9XTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBOYW1lJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgY29uc3RyYWludFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGNvbnN0cmFpbnQsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5hbWU6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBjb25zdHJhaW50Lm5hbWU7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogY29uc3RyYWludCxcbiAgICBpZDogaWRQcmVmaXggKyAnLW5hbWUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ05hbWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIENvbmZpZyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBjb25zdHJhaW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogY29uc3RyYWludCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgY29uZmlnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gY29uc3RyYWludC5jb25maWc7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogY29uc3RyYWludCxcbiAgICBpZDogaWRQcmVmaXggKyAnLWNvbmZpZycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29uZmlnJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEZvcm1GaWVsZFByb3BlcnR5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkUHJlZml4LFxuICAgIHByb3BlcnR5XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZW50cmllcyA9IFt7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy1pZCcsXG4gICAgY29tcG9uZW50OiBJZCQzLFxuICAgIGlkUHJlZml4LFxuICAgIHByb3BlcnR5LFxuICAgIGVsZW1lbnRcbiAgfSwge1xuICAgIGlkOiBpZFByZWZpeCArICctdmFsdWUnLFxuICAgIGNvbXBvbmVudDogVmFsdWUkMSxcbiAgICBpZFByZWZpeCxcbiAgICBwcm9wZXJ0eSxcbiAgICBlbGVtZW50XG4gIH1dO1xuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIElkJDMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBwcm9wZXJ0eSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBwcm9wZXJ0eS5pZDtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50OiBwcm9wZXJ0eSxcbiAgICBpZDogaWRQcmVmaXggKyAnLWlkJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJRCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gVmFsdWUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBwcm9wZXJ0eVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHByb3BlcnR5LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gcHJvcGVydHkudmFsdWU7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogcHJvcGVydHksXG4gICAgaWQ6IGlkUHJlZml4ICsgJy12YWx1ZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmFsdWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gRm9ybUZpZWxkVmFsdWUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWRQcmVmaXgsXG4gICAgdmFsdWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW3tcbiAgICBpZDogaWRQcmVmaXggKyAnLWlkJyxcbiAgICBjb21wb25lbnQ6IElkJDIsXG4gICAgaWRQcmVmaXgsXG4gICAgdmFsdWUsXG4gICAgZWxlbWVudFxuICB9LCB7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy1uYW1lJyxcbiAgICBjb21wb25lbnQ6IE5hbWUsXG4gICAgaWRQcmVmaXgsXG4gICAgdmFsdWUsXG4gICAgZWxlbWVudFxuICB9XTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBJZCQyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIHZhbHVlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHZhbHVlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogdmFsXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiB2YWx1ZS5pZDtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50OiB2YWx1ZSxcbiAgICBpZDogaWRQcmVmaXggKyAnLWlkJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJRCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gTmFtZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICB2YWx1ZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbCA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiB2YWx1ZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogdmFsXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiB2YWx1ZS5uYW1lO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQ6IHZhbHVlLFxuICAgIGlkOiBpZFByZWZpeCArICctbmFtZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTmFtZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG5jb25zdCBDVVNUT01fVFlQRV9WQUxVRSA9ICcnLFxuICBERUZJTkVEX1RZUEVfVkFMVUVTID0gWydib29sZWFuJywgJ2RhdGUnLCAnZW51bScsICdsb25nJywgJ3N0cmluZycsIHVuZGVmaW5lZF07XG5mdW5jdGlvbiBGb3JtRmllbGQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGZvcm1GaWVsZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiBpZFByZWZpeCArICctZm9ybUZpZWxkSUQnLFxuICAgIGNvbXBvbmVudDogSWQkMSxcbiAgICBpZFByZWZpeCxcbiAgICBmb3JtRmllbGRcbiAgfSwge1xuICAgIGlkOiBpZFByZWZpeCArICctZm9ybUZpZWxkTGFiZWwnLFxuICAgIGNvbXBvbmVudDogTGFiZWwsXG4gICAgaWRQcmVmaXgsXG4gICAgZm9ybUZpZWxkXG4gIH0sIHtcbiAgICBpZDogaWRQcmVmaXggKyAnLWZvcm1GaWVsZFR5cGUnLFxuICAgIGNvbXBvbmVudDogVHlwZSQxLFxuICAgIGlkUHJlZml4LFxuICAgIGZvcm1GaWVsZFxuICB9XTtcbiAgaWYgKCFERUZJTkVEX1RZUEVfVkFMVUVTLmluY2x1ZGVzKGZvcm1GaWVsZC5nZXQoJ3R5cGUnKSkpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6IGlkUHJlZml4ICsgJy1mb3JtRmllbGRDdXN0b21UeXBlJyxcbiAgICAgIGNvbXBvbmVudDogQ3VzdG9tVHlwZSxcbiAgICAgIGlkUHJlZml4LFxuICAgICAgZm9ybUZpZWxkXG4gICAgfSk7XG4gIH1cbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogaWRQcmVmaXggKyAnLWZvcm1GaWVsZERlZmF1bHRWYWx1ZScsXG4gICAgY29tcG9uZW50OiBEZWZhdWx0VmFsdWUsXG4gICAgaWRQcmVmaXgsXG4gICAgZm9ybUZpZWxkXG4gIH0pO1xuICBpZiAoZm9ybUZpZWxkLmdldCgndHlwZScpID09PSAnZW51bScpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6IGlkUHJlZml4ICsgJy1mb3JtRmllbGRWYWx1ZXMnLFxuICAgICAgY29tcG9uZW50OiBWYWx1ZUxpc3QsXG4gICAgICBmb3JtRmllbGQsXG4gICAgICBpZFByZWZpeFxuICAgIH0pO1xuICB9XG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6IGlkUHJlZml4ICsgJy1mb3JtRmllbGRDb25zdHJhaW50cycsXG4gICAgY29tcG9uZW50OiBDb25zdHJhaW50TGlzdCxcbiAgICBmb3JtRmllbGQsXG4gICAgaWRQcmVmaXhcbiAgfSwge1xuICAgIGlkOiBpZFByZWZpeCArICctZm9ybUZpZWxkUHJvcGVydGllcycsXG4gICAgY29tcG9uZW50OiBQcm9wZXJ0aWVzTGlzdCxcbiAgICBmb3JtRmllbGQsXG4gICAgaWRQcmVmaXhcbiAgfSk7XG4gIHJldHVybiBlbnRyaWVzO1xufVxuZnVuY3Rpb24gSWQkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBmb3JtRmllbGRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1GaWVsZCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBmb3JtRmllbGQuZ2V0KCdpZCcpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQ6IGZvcm1GaWVsZCxcbiAgICBpZDogaWRQcmVmaXggKyAnLWZvcm1GaWVsZElEJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJRCcpLFxuICAgIGRlc2NyaXB0aW9uOiB0cmFuc2xhdGUoJ1JlZmVycyB0byB0aGUgcHJvY2VzcyB2YXJpYWJsZSBuYW1lJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBMYWJlbChwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBmb3JtRmllbGRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1GaWVsZCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbGFiZWw6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBmb3JtRmllbGQuZ2V0KCdsYWJlbCcpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQ6IGZvcm1GaWVsZCxcbiAgICBpZDogaWRQcmVmaXggKyAnLWZvcm1GaWVsZExhYmVsJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMYWJlbCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gVHlwZSQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIGZvcm1GaWVsZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBmb3JtRmllbGQsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBmb3JtRmllbGQuZ2V0KCd0eXBlJyk7XG4gICAgcmV0dXJuIERFRklORURfVFlQRV9WQUxVRVMuaW5jbHVkZXModHlwZSkgPyB0eXBlIDogQ1VTVE9NX1RZUEVfVkFMVUU7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdib29sZWFuJyksXG4gICAgICB2YWx1ZTogJ2Jvb2xlYW4nXG4gICAgfSwge1xuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnZGF0ZScpLFxuICAgICAgdmFsdWU6ICdkYXRlJ1xuICAgIH0sIHtcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ2VudW0nKSxcbiAgICAgIHZhbHVlOiAnZW51bSdcbiAgICB9LCB7XG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdsb25nJyksXG4gICAgICB2YWx1ZTogJ2xvbmcnXG4gICAgfSwge1xuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnc3RyaW5nJyksXG4gICAgICB2YWx1ZTogJ3N0cmluZydcbiAgICB9LCB7XG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8Y3VzdG9tIHR5cGU+JyksXG4gICAgICB2YWx1ZTogQ1VTVE9NX1RZUEVfVkFMVUVcbiAgICB9XTtcblxuICAgIC8vIGZvciB0aGUgaW5pdGlhbCBzdGF0ZSBvbmx5LCB3ZSB3YW50IHRvIHNob3cgYW4gZW1wdHkgc3RhdGVcbiAgICBpZiAoZm9ybUZpZWxkLmdldCgndHlwZScpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMudW5zaGlmdCh7XG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJzxub25lPicpLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcbiAgcmV0dXJuIFNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50OiBmb3JtRmllbGQsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1mb3JtRmllbGRUeXBlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIEN1c3RvbVR5cGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgZm9ybUZpZWxkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHZhbHVlIHx8ICcnO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZm9ybUZpZWxkLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB0eXBlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBmb3JtRmllbGQuZ2V0KCd0eXBlJyk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogZm9ybUZpZWxkLFxuICAgIGlkOiBpZFByZWZpeCArICctZm9ybUZpZWxkQ3VzdG9tVHlwZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ3VzdG9tIHR5cGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIERlZmF1bHRWYWx1ZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBmb3JtRmllbGRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1GaWVsZCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZm9ybUZpZWxkLmdldCgnZGVmYXVsdFZhbHVlJyk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogZm9ybUZpZWxkLFxuICAgIGlkOiBpZFByZWZpeCArICctZm9ybUZpZWxkRGVmYXVsdFZhbHVlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEZWZhdWx0IHZhbHVlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBWYWx1ZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZDogaWRQcmVmaXgsXG4gICAgaW5kZXgsXG4gICAgaXRlbTogdmFsdWUsXG4gICAgb3BlblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBpZCA9IGAke2lkUHJlZml4fS12YWx1ZS0ke2luZGV4fWA7XG4gIHJldHVybiBqc3goQ29sbGFwc2libGVFbnRyeSwge1xuICAgIGlkOiBpZCxcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGVudHJpZXM6IEZvcm1GaWVsZFZhbHVlKHtcbiAgICAgIGlkUHJlZml4OiBpZCxcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZVxuICAgIH0pLFxuICAgIGxhYmVsOiB2YWx1ZS5nZXQoJ2lkJykgfHwgdHJhbnNsYXRlKCc8ZW1wdHk+JyksXG4gICAgb3Blbjogb3BlblxuICB9KTtcbn1cbmZ1bmN0aW9uIFZhbHVlTGlzdChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBmb3JtRmllbGQsXG4gICAgaWRQcmVmaXhcbiAgfSA9IHByb3BzO1xuICBjb25zdCBpZCA9IGAke2lkUHJlZml4fS1mb3JtRmllbGRWYWx1ZXNgO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgdmFsdWVzID0gZm9ybUZpZWxkLmdldCgndmFsdWVzJykgfHwgW107XG4gIGZ1bmN0aW9uIGFkZFZhbHVlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpWYWx1ZScsIHtcbiAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICBuYW1lOiB1bmRlZmluZWRcbiAgICB9LCBmb3JtRmllbGQsIGJwbW5GYWN0b3J5KTtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1GaWVsZCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmFsdWVzOiBbLi4uZm9ybUZpZWxkLmdldCgndmFsdWVzJyksIHZhbHVlXVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHJlbW92ZVZhbHVlKHZhbHVlKSB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBmb3JtRmllbGQsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlczogd2l0aG91dChmb3JtRmllbGQuZ2V0KCd2YWx1ZXMnKSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGpzeChMaXN0RW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGF1dG9Gb2N1c0VudHJ5OiBgW2RhdGEtZW50cnktaWQ9XCIke2lkfS12YWx1ZS0ke3ZhbHVlcy5sZW5ndGggLSAxfVwiXSBpbnB1dGAsXG4gICAgaWQ6IGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZhbHVlcycpLFxuICAgIGl0ZW1zOiB2YWx1ZXMsXG4gICAgY29tcG9uZW50OiBWYWx1ZSxcbiAgICBvbkFkZDogYWRkVmFsdWUsXG4gICAgb25SZW1vdmU6IHJlbW92ZVZhbHVlXG4gIH0pO1xufVxuZnVuY3Rpb24gQ29uc3RyYWludChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZDogaWRQcmVmaXgsXG4gICAgaW5kZXgsXG4gICAgaXRlbTogY29uc3RyYWludCxcbiAgICBvcGVuXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGlkID0gYCR7aWRQcmVmaXh9LWNvbnN0cmFpbnQtJHtpbmRleH1gO1xuICByZXR1cm4ganN4KENvbGxhcHNpYmxlRW50cnksIHtcbiAgICBpZDogaWQsXG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBlbnRyaWVzOiBGb3JtRmllbGRDb25zdHJhaW50KHtcbiAgICAgIGNvbnN0cmFpbnQsXG4gICAgICBlbGVtZW50LFxuICAgICAgaWRQcmVmaXg6IGlkXG4gICAgfSksXG4gICAgbGFiZWw6IGNvbnN0cmFpbnQuZ2V0KCduYW1lJykgfHwgdHJhbnNsYXRlKCc8ZW1wdHk+JyksXG4gICAgb3Blbjogb3BlblxuICB9KTtcbn1cbmZ1bmN0aW9uIENvbnN0cmFpbnRMaXN0KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGZvcm1GaWVsZCxcbiAgICBpZFByZWZpeFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlkID0gYCR7aWRQcmVmaXh9LWZvcm1GaWVsZENvbnN0cmFpbnRzYDtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGxldCB2YWxpZGF0aW9uID0gZm9ybUZpZWxkLmdldCgndmFsaWRhdGlvbicpO1xuICBjb25zdCBjb25zdHJhaW50cyA9IHZhbGlkYXRpb24gJiYgdmFsaWRhdGlvbi5nZXQoJ2NvbnN0cmFpbnRzJykgfHwgW107XG4gIGZ1bmN0aW9uIGFkZENvbnN0cmFpbnQoKSB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcblxuICAgIC8vICgxKSBlbnN1cmUgdmFsaWRhdGlvblxuICAgIGlmICghdmFsaWRhdGlvbikge1xuICAgICAgdmFsaWRhdGlvbiA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6VmFsaWRhdGlvbicsIHt9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1GaWVsZCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgYWRkIGNvbnN0cmFpbnRcbiAgICBjb25zdCBjb25zdHJhaW50ID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpDb25zdHJhaW50Jywge1xuICAgICAgbmFtZTogdW5kZWZpbmVkLFxuICAgICAgY29uZmlnOiB1bmRlZmluZWRcbiAgICB9LCB2YWxpZGF0aW9uLCBicG1uRmFjdG9yeSk7XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiB2YWxpZGF0aW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29uc3RyYWludHM6IFsuLi52YWxpZGF0aW9uLmdldCgnY29uc3RyYWludHMnKSwgY29uc3RyYWludF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDMpIGNvbW1pdCB1cGRhdGVzXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVDb25zdHJhaW50KGNvbnN0cmFpbnQpIHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHZhbGlkYXRpb24sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGNvbnN0cmFpbnRzOiB3aXRob3V0KHZhbGlkYXRpb24uZ2V0KCdjb25zdHJhaW50cycpLCBjb25zdHJhaW50KVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBqc3goTGlzdEVudHJ5LCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBhdXRvRm9jdXNFbnRyeTogYFtkYXRhLWVudHJ5LWlkPVwiJHtpZH0tY29uc3RyYWludC0ke2NvbnN0cmFpbnRzLmxlbmd0aCAtIDF9XCJdIGlucHV0YCxcbiAgICBpZDogaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29uc3RyYWludHMnKSxcbiAgICBpdGVtczogY29uc3RyYWludHMsXG4gICAgY29tcG9uZW50OiBDb25zdHJhaW50LFxuICAgIG9uQWRkOiBhZGRDb25zdHJhaW50LFxuICAgIG9uUmVtb3ZlOiByZW1vdmVDb25zdHJhaW50XG4gIH0pO1xufVxuZnVuY3Rpb24gUHJvcGVydHkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4LFxuICAgIGluZGV4LFxuICAgIGl0ZW06IHByb3BlcnR5LFxuICAgIG9wZW5cbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgaWQgPSBgJHtpZFByZWZpeH0tcHJvcGVydHktJHtpbmRleH1gO1xuICByZXR1cm4ganN4KENvbGxhcHNpYmxlRW50cnksIHtcbiAgICBpZDogaWQsXG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBlbnRyaWVzOiBGb3JtRmllbGRQcm9wZXJ0eSh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgcHJvcGVydHlcbiAgICB9KSxcbiAgICBsYWJlbDogcHJvcGVydHkuZ2V0KCdpZCcpIHx8IHRyYW5zbGF0ZSgnPGVtcHR5PicpLFxuICAgIG9wZW46IG9wZW5cbiAgfSk7XG59XG5mdW5jdGlvbiBQcm9wZXJ0aWVzTGlzdChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBmb3JtRmllbGQsXG4gICAgaWRQcmVmaXhcbiAgfSA9IHByb3BzO1xuICBjb25zdCBpZCA9IGAke2lkUHJlZml4fS1mb3JtRmllbGRQcm9wZXJ0aWVzYDtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGxldCBwcm9wZXJ0aWVzID0gZm9ybUZpZWxkLmdldCgncHJvcGVydGllcycpO1xuICBjb25zdCBwcm9wZXJ0eUVudHJpZXMgPSBwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMuZ2V0KCd2YWx1ZXMnKSB8fCBbXTtcbiAgZnVuY3Rpb24gYWRkUHJvcGVydHkoKSB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcblxuICAgIC8vICgxKSBlbnN1cmUgcHJvcGVydGllc1xuICAgIGlmICghcHJvcGVydGllcykge1xuICAgICAgcHJvcGVydGllcyA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6UHJvcGVydGllcycsIHt9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1GaWVsZCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAoMikgYWRkIHByb3BlcnR5XG4gICAgY29uc3QgcHJvcGVydHkgPSBjcmVhdGVFbGVtZW50KCdjYW11bmRhOlByb3BlcnR5Jywge1xuICAgICAgaWQ6IHVuZGVmaW5lZCxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9LCBwcm9wZXJ0aWVzLCBicG1uRmFjdG9yeSk7XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBwcm9wZXJ0aWVzLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsdWVzOiBbLi4ucHJvcGVydGllcy5nZXQoJ3ZhbHVlcycpLCBwcm9wZXJ0eV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDMpIGNvbW1pdCB1cGRhdGVzXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSkge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogcHJvcGVydGllcyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdmFsdWVzOiB3aXRob3V0KHByb3BlcnRpZXMuZ2V0KCd2YWx1ZXMnKSwgcHJvcGVydHkpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGpzeChMaXN0RW50cnksIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIGF1dG9Gb2N1c0VudHJ5OiBgW2RhdGEtZW50cnktaWQ9XCIke2lkfS1wcm9wZXJ0eS0ke3Byb3BlcnR5RW50cmllcy5sZW5ndGggLSAxfVwiXSBpbnB1dGAsXG4gICAgaWQ6IGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb3BlcnRpZXMnKSxcbiAgICBpdGVtczogcHJvcGVydHlFbnRyaWVzLFxuICAgIGNvbXBvbmVudDogUHJvcGVydHksXG4gICAgb25BZGQ6IGFkZFByb3BlcnR5LFxuICAgIG9uUmVtb3ZlOiByZW1vdmVQcm9wZXJ0eVxuICB9KTtcbn1cblxuZnVuY3Rpb24gRm9ybURhdGFQcm9wcyh7XG4gIGVsZW1lbnQsXG4gIGluamVjdG9yXG59KSB7XG4gIGlmICghaXNGb3JtRGF0YVN1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmb3JtRmllbGRzID0gZ2V0Rm9ybUZpZWxkc0xpc3QoZWxlbWVudCkgfHwgW107XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGl0ZW1zID0gZm9ybUZpZWxkcy5tYXAoKGZvcm1GaWVsZCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGVsZW1lbnQuaWQgKyAnLWZvcm1GaWVsZC0nICsgaW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWw6IGZvcm1GaWVsZC5nZXQoJ2lkJykgfHwgJycsXG4gICAgICBlbnRyaWVzOiBGb3JtRmllbGQoe1xuICAgICAgICBpZFByZWZpeDogaWQsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGZvcm1GaWVsZFxuICAgICAgfSksXG4gICAgICBhdXRvRm9jdXNFbnRyeTogaWQgKyAnLWZvcm1GaWVsZElEJyxcbiAgICAgIHJlbW92ZTogcmVtb3ZlRmFjdG9yeSQ0KHtcbiAgICAgICAgY29tbWFuZFN0YWNrLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBmb3JtRmllbGRcbiAgICAgIH0pXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgYWRkOiBhZGRGYWN0b3J5JDMoe1xuICAgICAgYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2ssXG4gICAgICBlbGVtZW50XG4gICAgfSlcbiAgfTtcbn1cbmZ1bmN0aW9uIGFkZEZhY3RvcnkkMyh7XG4gIGJwbW5GYWN0b3J5LFxuICBjb21tYW5kU3RhY2ssXG4gIGVsZW1lbnRcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG5cbiAgICAvLyAoMSkgZ2V0IGNhbXVuZGE6Rm9ybURhdGFcbiAgICBjb25zdCBmb3JtRGF0YSA9IGdldEZvcm1EYXRhJDEoZWxlbWVudCk7XG5cbiAgICAvLyAoMikgY3JlYXRlIGNhbXVuZGE6Rm9ybUZpZWxkXG4gICAgY29uc3QgZm9ybUZpZWxkID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpGb3JtRmllbGQnLCB7fSwgZm9ybURhdGEsIGJwbW5GYWN0b3J5KTtcblxuICAgIC8vICgzKSBhZGQgZm9ybUZpZWxkIHRvIGxpc3RcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1EYXRhLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZmllbGRzOiBbLi4uZm9ybURhdGEuZ2V0KCdmaWVsZHMnKSwgZm9ybUZpZWxkXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUZhY3RvcnkkNCh7XG4gIGNvbW1hbmRTdGFjayxcbiAgZWxlbWVudCxcbiAgZm9ybUZpZWxkXG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IGdldEZvcm1EYXRhJDEoZWxlbWVudCksXG4gICAgICBmb3JtRmllbGRzID0gZ2V0Rm9ybUZpZWxkc0xpc3QoZWxlbWVudCk7XG4gICAgaWYgKCFmb3JtRmllbGRzIHx8ICFmb3JtRmllbGRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSB3aXRob3V0KGZvcm1EYXRhLmdldCgnZmllbGRzJyksIGZvcm1GaWVsZCk7XG5cbiAgICAvLyB1cGRhdGUgZm9ybURhdGFcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGZvcm1EYXRhLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZHNcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNGb3JtRGF0YVN1cHBvcnRlZChlbGVtZW50KSB7XG4gIGNvbnN0IGZvcm1EYXRhID0gZ2V0Rm9ybURhdGEkMShlbGVtZW50KTtcbiAgcmV0dXJuIChpcyhlbGVtZW50LCAnYnBtbjpTdGFydEV2ZW50JykgJiYgIWlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46VXNlclRhc2snKSkgJiYgZm9ybURhdGE7XG59XG5mdW5jdGlvbiBnZXRGb3JtRGF0YSQxKGVsZW1lbnQpIHtcbiAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChibywgJ2NhbXVuZGE6Rm9ybURhdGEnKVswXTtcbn1cbmZ1bmN0aW9uIGdldEZvcm1GaWVsZHNMaXN0KGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgZm9ybURhdGEgPSBnZXRGb3JtRGF0YSQxKGJ1c2luZXNzT2JqZWN0KTtcbiAgcmV0dXJuIGZvcm1EYXRhICYmIGZvcm1EYXRhLmZpZWxkcztcbn1cblxuY29uc3QgRk9STV9LRVlfUFJPUFMgPSB7XG4gICdjYW11bmRhOmZvcm1SZWYnOiB1bmRlZmluZWQsXG4gICdjYW11bmRhOmZvcm1SZWZCaW5kaW5nJzogdW5kZWZpbmVkLFxuICAnY2FtdW5kYTpmb3JtUmVmVmVyc2lvbic6IHVuZGVmaW5lZFxufTtcbmNvbnN0IEZPUk1fUkVGX1BST1BTID0ge1xuICAnY2FtdW5kYTpmb3JtS2V5JzogdW5kZWZpbmVkXG59O1xuZnVuY3Rpb24gRm9ybVR5cGVQcm9wcyhwcm9wcykge1xuICByZXR1cm4gW3tcbiAgICBpZDogJ2Zvcm1UeXBlJyxcbiAgICBjb21wb25lbnQ6IEZvcm1UeXBlLFxuICAgIGlzRWRpdGVkOiBpc1NlbGVjdEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gRm9ybVR5cGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICBpZiAoaXNEZWZpbmVkKGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpmb3JtS2V5JykpKSB7XG4gICAgICByZXR1cm4gJ2Zvcm1LZXknO1xuICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkKGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpmb3JtUmVmJykpKSB7XG4gICAgICByZXR1cm4gJ2Zvcm1SZWYnO1xuICAgIH0gZWxzZSBpZiAoZ2V0Rm9ybURhdGEoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiAnZm9ybURhdGEnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gcmVtb3ZlUHJvcGVydGllc0NvbW1hbmRzKGVsZW1lbnQpO1xuICAgIGlmICh2YWx1ZSA9PT0gJ2Zvcm1EYXRhJykge1xuICAgICAgLy8gKDEpIGVuc3VyZSBleHRlbnNpb24gZWxlbWVudHNcbiAgICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICAgIHZhbHVlczogW11cbiAgICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gKDIpIGNyZWF0ZSBjYW11bmRhOkZvcm1EYXRhXG4gICAgICBjb25zdCBwYXJlbnQgPSBleHRlbnNpb25FbGVtZW50cztcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpGb3JtRGF0YScsIHtcbiAgICAgICAgZmllbGRzOiBbXVxuICAgICAgfSwgcGFyZW50LCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgZm9ybURhdGFdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZm9ybUtleScpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAnY2FtdW5kYTpmb3JtS2V5JzogJydcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmb3JtUmVmJykge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICdjYW11bmRhOmZvcm1SZWYnOiAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFt7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiAnZm9ybVJlZicsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdDYW11bmRhIEZvcm1zJylcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogJ2Zvcm1LZXknLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnRW1iZWRkZWQgb3IgRXh0ZXJuYWwgVGFzayBGb3JtcycpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICdmb3JtRGF0YScsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdHZW5lcmF0ZWQgVGFzayBGb3JtcycpXG4gICAgfV07XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2Zvcm1UeXBlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUeXBlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdldEZvcm1EYXRhKGVsZW1lbnQpIHtcbiAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChibywgJ2NhbXVuZGE6Rm9ybURhdGEnKVswXTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVByb3BlcnRpZXNDb21tYW5kcyhlbGVtZW50LCBjb21tYW5kU3RhY2spIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gIGNvbnN0IGNvbW1hbmRzID0gW107XG5cbiAgLy8gKDEpIHJlc2V0IGZvcm1LZXkgYW5kIGZvcm1SZWZcbiAgY29tbWFuZHMucHVzaCh7XG4gICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLkZPUk1fS0VZX1BST1BTLFxuICAgICAgICAuLi5GT1JNX1JFRl9QUk9QU1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gKDIpIHJlbW92ZSBmb3JtRGF0YSBpZiBkZWZpbmVkXG4gIGlmIChleHRlbnNpb25FbGVtZW50cyAmJiBnZXRGb3JtRGF0YShlbGVtZW50KSkge1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQoZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgZ2V0Rm9ybURhdGEoZWxlbWVudCkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbWFuZHM7XG59XG5cbmZ1bmN0aW9uIGdldEZvcm1SZWZCaW5kaW5nKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpmb3JtUmVmQmluZGluZycpIHx8ICdsYXRlc3QnO1xufVxuZnVuY3Rpb24gZ2V0Rm9ybVR5cGUoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBpZiAoaXNEZWZpbmVkKGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpmb3JtS2V5JykpKSB7XG4gICAgcmV0dXJuICdmb3JtS2V5JztcbiAgfSBlbHNlIGlmIChpc0RlZmluZWQoYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmZvcm1SZWYnKSkpIHtcbiAgICByZXR1cm4gJ2Zvcm1SZWYnO1xuICB9XG59XG5mdW5jdGlvbiBpc0Zvcm1TdXBwb3J0ZWQoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpIHx8IGlzKGVsZW1lbnQsICdicG1uOlVzZXJUYXNrJyk7XG59XG5cbmZ1bmN0aW9uIEZvcm1Qcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXNGb3JtU3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGZvcm1UeXBlID0gZ2V0Rm9ybVR5cGUoZWxlbWVudCksXG4gICAgYmluZGluZ1R5cGUgPSBnZXRGb3JtUmVmQmluZGluZyhlbGVtZW50KTtcblxuICAvLyAoMSkgZGlzcGxheSBmb3JtIHR5cGUgc2VsZWN0XG4gIGNvbnN0IGVudHJpZXMgPSBbLi4uRm9ybVR5cGVQcm9wcygpXTtcblxuICAvLyAoMikgZGlzcGxheSBmb3JtIHByb3BlcnRpZXMgYmFzZWQgb24gdHlwZVxuICBpZiAoZm9ybVR5cGUgPT09ICdmb3JtS2V5Jykge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2Zvcm1LZXknLFxuICAgICAgY29tcG9uZW50OiBGb3JtS2V5LFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChmb3JtVHlwZSA9PT0gJ2Zvcm1SZWYnKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnZm9ybVJlZicsXG4gICAgICBjb21wb25lbnQ6IEZvcm1SZWYsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0sIHtcbiAgICAgIGlkOiAnZm9ybVJlZkJpbmRpbmcnLFxuICAgICAgY29tcG9uZW50OiBCaW5kaW5nJDEsXG4gICAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZFxuICAgIH0pO1xuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3ZlcnNpb24nKSB7XG4gICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICBpZDogJ2Zvcm1SZWZWZXJzaW9uJyxcbiAgICAgICAgY29tcG9uZW50OiBWZXJzaW9uJDEsXG4gICAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBGb3JtS2V5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6Zm9ybUtleScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICdjYW11bmRhOmZvcm1LZXknOiBpc1VuZGVmaW5lZCh2YWx1ZSkgPyAnJyA6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2Zvcm1LZXknLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Zvcm0ga2V5JyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBGb3JtUmVmKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6Zm9ybVJlZicpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICdjYW11bmRhOmZvcm1SZWYnOiBpc1VuZGVmaW5lZCh2YWx1ZSkgPyAnJyA6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2Zvcm1SZWYnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Zvcm0gcmVmZXJlbmNlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBCaW5kaW5nJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBtb2RlbGluZyA9IHVzZVNlcnZpY2UoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0Rm9ybVJlZkJpbmRpbmcoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgJ2NhbXVuZGE6Zm9ybVJlZkJpbmRpbmcnOiB2YWx1ZVxuICAgIH0pO1xuICB9O1xuXG4gIC8vIE5vdGU6IGRlZmF1bHQgaXMgXCJsYXRlc3RcIixcbiAgLy8gY2YuIGh0dHBzOi8vZG9jcy5jYW11bmRhLm9yZy9tYW51YWwvZGV2ZWxvcC9yZWZlcmVuY2UvYnBtbjIwL2N1c3RvbS1leHRlbnNpb25zL2V4dGVuc2lvbi1hdHRyaWJ1dGVzLyNmb3JtcmVmYmluZGluZ1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbe1xuICAgICAgdmFsdWU6ICdkZXBsb3ltZW50JyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ2RlcGxveW1lbnQnKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiAnbGF0ZXN0JyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ2xhdGVzdCcpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICd2ZXJzaW9uJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ3ZlcnNpb24nKVxuICAgIH1dO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuICByZXR1cm4gU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdmb3JtUmVmQmluZGluZycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQmluZGluZycpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5mdW5jdGlvbiBWZXJzaW9uJDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpmb3JtUmVmVmVyc2lvbicpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICdjYW11bmRhOmZvcm1SZWZWZXJzaW9uJzogdmFsdWVcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZm9ybVJlZlZlcnNpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZlcnNpb24nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gSGlzdG9yeUNsZWFudXBQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpICYmICEoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICdoaXN0b3J5VGltZVRvTGl2ZScsXG4gICAgY29tcG9uZW50OiBIaXN0b3J5VGltZVRvTGl2ZSxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIEhpc3RvcnlUaW1lVG9MaXZlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgcHJvY2VzcyA9IGdldFByb2Nlc3MkMihlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCdjYW11bmRhOmhpc3RvcnlUaW1lVG9MaXZlJykgfHwgJyc7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogcHJvY2VzcyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6aGlzdG9yeVRpbWVUb0xpdmUnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdoaXN0b3J5VGltZVRvTGl2ZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGltZSB0byBsaXZlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0UHJvY2VzcyQyKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSA/IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIDogZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuZ2V0KCdwcm9jZXNzUmVmJyk7XG59XG5cbmZ1bmN0aW9uIERtbkltcGxlbWVudGF0aW9uUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIGNvbnN0IGltcGxlbWVudGF0aW9uVHlwZSA9IGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcbiAgY29uc3QgYmluZGluZ1R5cGUgPSBnZXREZWNpc2lvblJlZkJpbmRpbmcoZWxlbWVudCk7XG4gIGlmIChpbXBsZW1lbnRhdGlvblR5cGUgIT09ICdkbW4nKSB7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICAvLyAoMSkgZGVjaXNpb25SZWZcbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogJ2RlY2lzaW9uUmVmJyxcbiAgICBjb21wb25lbnQ6IERlY2lzaW9uUmVmLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0pO1xuXG4gIC8vICgyKSBiaW5kaW5nXG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6ICdkZWNpc2lvblJlZkJpbmRpbmcnLFxuICAgIGNvbXBvbmVudDogQmluZGluZyxcbiAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZFxuICB9KTtcblxuICAvLyAoMykgdmVyc2lvblxuICBpZiAoYmluZGluZ1R5cGUgPT09ICd2ZXJzaW9uJykge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2RlY2lzaW9uUmVmVmVyc2lvbicsXG4gICAgICBjb21wb25lbnQ6IFZlcnNpb24sXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDQpIHZlcnNpb25UYWdcbiAgaWYgKGJpbmRpbmdUeXBlID09PSAndmVyc2lvblRhZycpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdkZWNpc2lvblJlZlZlcnNpb25UYWcnLFxuICAgICAgY29tcG9uZW50OiBWZXJzaW9uVGFnJDEsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDUpIHRlbmFudElkXG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6ICdkZWNpc2lvblJlZlRlbmFudElkJyxcbiAgICBjb21wb25lbnQ6IFRlbmFudElkLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0pO1xuXG4gIC8vICg2KSByZXN1bHRWYXJpYWJsZVxuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiAnZGVjaXNpb25SZWZSZXN1bHRWYXJpYWJsZScsXG4gICAgY29tcG9uZW50OiBSZXN1bHRWYXJpYWJsZSQyLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0pO1xuXG4gIC8vICg3KSBtYXBEZWNpc2lvblJlc3VsdFxuICBpZiAoZ2V0UmVzdWx0VmFyaWFibGUoZWxlbWVudCkpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdtYXBEZWNpc2lvblJlc3VsdCcsXG4gICAgICBjb21wb25lbnQ6IE1hcERlY2lzaW9uUmVzdWx0LFxuICAgICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIERlY2lzaW9uUmVmKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpkZWNpc2lvblJlZicpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpkZWNpc2lvblJlZic6IHZhbHVlIHx8ICcnXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2RlY2lzaW9uUmVmJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEZWNpc2lvbiByZWZlcmVuY2UnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIEJpbmRpbmcocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXREZWNpc2lvblJlZkJpbmRpbmcoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICAvLyByZXNldCB2ZXJzaW9uIHByb3BlcnRpZXMgb24gYmluZGluZyB0eXBlIGNoYW5nZVxuICAgIGNvbnN0IHVwZGF0ZWRQcm9wZXJ0aWVzID0ge1xuICAgICAgJ2NhbXVuZGE6ZGVjaXNpb25SZWZWZXJzaW9uJzogdW5kZWZpbmVkLFxuICAgICAgJ2NhbXVuZGE6ZGVjaXNpb25SZWZWZXJzaW9uVGFnJzogdW5kZWZpbmVkLFxuICAgICAgJ2NhbXVuZGE6ZGVjaXNpb25SZWZCaW5kaW5nJzogdmFsdWVcbiAgICB9O1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB1cGRhdGVkUHJvcGVydGllc1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIE5vdGU6IGRlZmF1bHQgaXMgXCJsYXRlc3RcIixcbiAgLy8gY2YuIGh0dHBzOi8vZG9jcy5jYW11bmRhLm9yZy9tYW51YWwvbGF0ZXN0L3JlZmVyZW5jZS9icG1uMjAvY3VzdG9tLWV4dGVuc2lvbnMvZXh0ZW5zaW9uLWF0dHJpYnV0ZXMvI2RlY2lzaW9ucmVmYmluZGluZ1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbe1xuICAgICAgdmFsdWU6ICdkZXBsb3ltZW50JyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ2RlcGxveW1lbnQnKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiAnbGF0ZXN0JyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ2xhdGVzdCcpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICd2ZXJzaW9uJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ3ZlcnNpb24nKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiAndmVyc2lvblRhZycsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCd2ZXJzaW9uVGFnJylcbiAgICB9XTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcbiAgcmV0dXJuIFNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZGVjaXNpb25SZWZCaW5kaW5nJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdCaW5kaW5nJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIFZlcnNpb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmRlY2lzaW9uUmVmVmVyc2lvbicpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpkZWNpc2lvblJlZlZlcnNpb24nOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdkZWNpc2lvblJlZlZlcnNpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1ZlcnNpb24nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFZlcnNpb25UYWckMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6ZGVjaXNpb25SZWZWZXJzaW9uVGFnJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmRlY2lzaW9uUmVmVmVyc2lvblRhZyc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2RlY2lzaW9uUmVmVmVyc2lvblRhZycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmVyc2lvbiB0YWcnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFRlbmFudElkKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpkZWNpc2lvblJlZlRlbmFudElkJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmRlY2lzaW9uUmVmVGVuYW50SWQnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdkZWNpc2lvblJlZlRlbmFudElkJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUZW5hbnQgSUQnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFJlc3VsdFZhcmlhYmxlJDIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZ2V0UmVzdWx0VmFyaWFibGUoYnVzaW5lc3NPYmplY3QpO1xuICB9O1xuXG4gIC8vIE5vdGU6IGNhbXVuZGE6bWFwRGVjaXNpb25SZXN1bHQgZ290IGNsZWFuZWQgdXAgaW4gbW9kZWxpbmcgYmVoYXZpb3JcbiAgLy8gY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW11bmRhL2NhbXVuZGEtYnBtbi1qcy9ibG9iL21haW4vbGliL2NhbXVuZGEtcGxhdGZvcm0vZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVXBkYXRlUmVzdWx0VmFyaWFibGVCZWhhdmlvci5qc1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpyZXN1bHRWYXJpYWJsZSc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2RlY2lzaW9uUmVmUmVzdWx0VmFyaWFibGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Jlc3VsdCB2YXJpYWJsZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gTWFwRGVjaXNpb25SZXN1bHQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6bWFwRGVjaXNpb25SZXN1bHQnKSB8fCAncmVzdWx0TGlzdCc7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOm1hcERlY2lzaW9uUmVzdWx0JzogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvLyBOb3RlOiBkZWZhdWx0IGlzIFwicmVzdWx0TGlzdFwiLFxuICAvLyBjZi4gaHR0cHM6Ly9kb2NzLmNhbXVuZGEub3JnL21hbnVhbC9sYXRlc3QvcmVmZXJlbmNlL2JwbW4yMC9jdXN0b20tZXh0ZW5zaW9ucy9leHRlbnNpb24tYXR0cmlidXRlcy8jbWFwZGVjaXNpb25yZXN1bHRcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gW3tcbiAgICAgIHZhbHVlOiAnY29sbGVjdEVudHJpZXMnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnY29sbGVjdEVudHJpZXMgKExpc3Q8T2JqZWN0PiknKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiAncmVzdWx0TGlzdCcsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdyZXN1bHRMaXN0IChMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+KScpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICdzaW5nbGVFbnRyeScsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdzaW5nbGVFbnRyeSAoVHlwZWRWYWx1ZSknKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiAnc2luZ2xlUmVzdWx0JyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ3NpbmdsZVJlc3VsdCAoTWFwPFN0cmluZywgT2JqZWN0PiknKVxuICAgIH1dO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9O1xuICByZXR1cm4gU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdtYXBEZWNpc2lvblJlc3VsdCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTWFwIGRlY2lzaW9uIHJlc3VsdCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREZWNpc2lvblJlZkJpbmRpbmcoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmRlY2lzaW9uUmVmQmluZGluZycpIHx8ICdsYXRlc3QnO1xufVxuZnVuY3Rpb24gZ2V0UmVzdWx0VmFyaWFibGUoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnJlc3VsdFZhcmlhYmxlJyk7XG59XG5cbmNvbnN0IERFTEVHQVRFX1BST1BTID0ge1xuICAnY2FtdW5kYTpjbGFzcyc6IHVuZGVmaW5lZCxcbiAgJ2NhbXVuZGE6ZXhwcmVzc2lvbic6IHVuZGVmaW5lZCxcbiAgJ2NhbXVuZGE6ZGVsZWdhdGVFeHByZXNzaW9uJzogdW5kZWZpbmVkLFxuICAnY2FtdW5kYTpyZXN1bHRWYXJpYWJsZSc6IHVuZGVmaW5lZFxufTtcbmNvbnN0IERNTl9DQVBBQkxFX1BST1BTID0ge1xuICAnY2FtdW5kYTpkZWNpc2lvblJlZic6IHVuZGVmaW5lZCxcbiAgJ2NhbXVuZGE6ZGVjaXNpb25SZWZCaW5kaW5nJzogJ2xhdGVzdCcsXG4gICdjYW11bmRhOmRlY2lzaW9uUmVmVmVyc2lvbic6IHVuZGVmaW5lZCxcbiAgJ2NhbXVuZGE6bWFwRGVjaXNpb25SZXN1bHQnOiAncmVzdWx0TGlzdCcsXG4gICdjYW11bmRhOmRlY2lzaW9uUmVmVGVuYW50SWQnOiB1bmRlZmluZWRcbn07XG5jb25zdCBFWFRFUk5BTF9DQVBBQkxFX1BST1BTID0ge1xuICAnY2FtdW5kYTp0eXBlJzogdW5kZWZpbmVkLFxuICAnY2FtdW5kYTp0b3BpYyc6IHVuZGVmaW5lZFxufTtcbmNvbnN0IElNUExFTUVOVEFUSU9OX1RZUEVfTk9ORV9MQUJFTCA9ICc8bm9uZT4nLFxuICBJTVBMRU1FTlRBVElPTl9UWVBFX0pBVkFfTEFCRUwgPSAnSmF2YSBjbGFzcycsXG4gIElNUExFTUVOVEFUSU9OX1RZUEVfRVhQUkVTU0lPTl9MQUJFTCA9ICdFeHByZXNzaW9uJyxcbiAgSU1QTEVNRU5UQVRJT05fVFlQRV9ERUxFR0FURV9MQUJFTCA9ICdEZWxlZ2F0ZSBleHByZXNzaW9uJyxcbiAgSU1QTEVNRU5UQVRJT05fVFlQRV9ETU5fTEFCRUwgPSAnRE1OJyxcbiAgSU1QTEVNRU5UQVRJT05fVFlQRV9FWFRFUk5BTF9MQUJFTCA9ICdFeHRlcm5hbCcsXG4gIElNUExFTUVOVEFUSU9OX1RZUEVfQ09OTkVDVE9SX0xBQkVMID0gJ0Nvbm5lY3Rvcic7XG5mdW5jdGlvbiBJbXBsZW1lbnRhdGlvblR5cGVQcm9wcyhwcm9wcykge1xuICByZXR1cm4gW3tcbiAgICBpZDogJ2ltcGxlbWVudGF0aW9uVHlwZScsXG4gICAgY29tcG9uZW50OiBJbXBsZW1lbnRhdGlvblR5cGUsXG4gICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWRcbiAgfV07XG59XG5mdW5jdGlvbiBJbXBsZW1lbnRhdGlvblR5cGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KSB8fCAnJztcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3Qgb2xkVHlwZSA9IGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gW107XG4gICAgbGV0IHVwZGF0ZWRQcm9wZXJ0aWVzID0gREVMRUdBVEVfUFJPUFM7XG4gICAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gICAgLy8gKDEpIGNsYXNzLCBleHByZXNzaW9uLCBkZWxlZ2F0ZUV4cHJlc3Npb25cbiAgICBpZiAoaXNEZWxlZ2F0ZVR5cGUodmFsdWUpKSB7XG4gICAgICB1cGRhdGVkUHJvcGVydGllcyA9IHtcbiAgICAgICAgLi4udXBkYXRlZFByb3BlcnRpZXMsXG4gICAgICAgIFt2YWx1ZV06IGlzRGVsZWdhdGVUeXBlKG9sZFR5cGUpID8gYnVzaW5lc3NPYmplY3QuZ2V0KGBjYW11bmRhOiR7b2xkVHlwZX1gKSA6ICcnXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vICgyKSBkbW5cbiAgICBpZiAoaXNEbW5DYXBhYmxlKGJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgdXBkYXRlZFByb3BlcnRpZXMgPSB7XG4gICAgICAgIC4uLnVwZGF0ZWRQcm9wZXJ0aWVzLFxuICAgICAgICAuLi5ETU5fQ0FQQUJMRV9QUk9QU1xuICAgICAgfTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ2RtbicpIHtcbiAgICAgICAgdXBkYXRlZFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgLi4udXBkYXRlZFByb3BlcnRpZXMsXG4gICAgICAgICAgJ2NhbXVuZGE6ZGVjaXNpb25SZWYnOiAnJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vICgzKSBleHRlcm5hbFxuICAgIC8vIE5vdGU6IGVycm9yIGV2ZW50IGRlZmluaXRpb24gZWxlbWVudHMgZ290IGNsZWFuZWQgdXAgaW4gbW9kZWxpbmcgYmVoYXZpb3JcbiAgICAvLyBjZi4gaHR0cHM6Ly9naXRodWIuY29tL2NhbXVuZGEvY2FtdW5kYS1icG1uLWpzL2Jsb2IvbWFpbi9saWIvY2FtdW5kYS1wbGF0Zm9ybS9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9EZWxldGVFcnJvckV2ZW50RGVmaW5pdGlvbkJlaGF2aW9yLmpzXG4gICAgaWYgKGlzRXh0ZXJuYWxDYXBhYmxlKGJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgdXBkYXRlZFByb3BlcnRpZXMgPSB7XG4gICAgICAgIC4uLnVwZGF0ZWRQcm9wZXJ0aWVzLFxuICAgICAgICAuLi5FWFRFUk5BTF9DQVBBQkxFX1BST1BTXG4gICAgICB9O1xuICAgICAgaWYgKHZhbHVlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICAgIHVwZGF0ZWRQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIC4uLnVwZGF0ZWRQcm9wZXJ0aWVzLFxuICAgICAgICAgICdjYW11bmRhOnR5cGUnOiAnZXh0ZXJuYWwnLFxuICAgICAgICAgICdjYW11bmRhOnRvcGljJzogJydcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAoNCkgY29ubmVjdG9yXG4gICAgaWYgKGlzU2VydmljZVRhc2tMaWtlKGJ1c2luZXNzT2JqZWN0KSkge1xuICAgICAgLy8gKDQuMSkgcmVtb3ZlIGFsbCBjb25uZWN0b3JzIG9uIHR5cGUgY2hhbmdlXG4gICAgICBjb25zdCBjb25uZWN0b3JzID0gZ2V0Q29ubmVjdG9ycyQxKGJ1c2luZXNzT2JqZWN0KTtcbiAgICAgIGlmIChjb25uZWN0b3JzLmxlbmd0aCkge1xuICAgICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgdmFsdWVzOiB3aXRob3V0KGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIHZhbHVlID0+IGNvbm5lY3RvcnMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vICg0LjIpIGNyZWF0ZSBjb25uZWN0b3JcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ2Nvbm5lY3RvcicpIHtcbiAgICAgICAgLy8gZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgICAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgICAgIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICAgICAgY29tbWFuZHMucHVzaChVcGRhdGVNb2RkbGVQcm9wZXJ0aWVzQ29tbWFuZChlbGVtZW50LCBidXNpbmVzc09iamVjdCwge1xuICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpDb25uZWN0b3InLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGNvbm5lY3Rvcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vICg1KSBjb2xsZWN0IGFsbCBwcm9wZXJ0eSB1cGRhdGVzXG4gICAgY29tbWFuZHMucHVzaChVcGRhdGVNb2RkbGVQcm9wZXJ0aWVzQ29tbWFuZChlbGVtZW50LCBidXNpbmVzc09iamVjdCwgdXBkYXRlZFByb3BlcnRpZXMpKTtcblxuICAgIC8vICg2KSBjb21taXQgYWxsIHVwZGF0ZXNcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllcy1wYW5lbC5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgY29tbWFuZHMpO1xuICB9O1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKElNUExFTUVOVEFUSU9OX1RZUEVfTk9ORV9MQUJFTClcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogJ2NsYXNzJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoSU1QTEVNRU5UQVRJT05fVFlQRV9KQVZBX0xBQkVMKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiAnZXhwcmVzc2lvbicsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKElNUExFTUVOVEFUSU9OX1RZUEVfRVhQUkVTU0lPTl9MQUJFTClcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogJ2RlbGVnYXRlRXhwcmVzc2lvbicsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKElNUExFTUVOVEFUSU9OX1RZUEVfREVMRUdBVEVfTEFCRUwpXG4gICAgfV07XG4gICAgaWYgKGlzRG1uQ2FwYWJsZShidXNpbmVzc09iamVjdCkpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgIHZhbHVlOiAnZG1uJyxcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZShJTVBMRU1FTlRBVElPTl9UWVBFX0RNTl9MQUJFTClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaXNFeHRlcm5hbENhcGFibGUoYnVzaW5lc3NPYmplY3QpKSB7XG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICB2YWx1ZTogJ2V4dGVybmFsJyxcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZShJTVBMRU1FTlRBVElPTl9UWVBFX0VYVEVSTkFMX0xBQkVMKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpc1NlcnZpY2VUYXNrTGlrZShidXNpbmVzc09iamVjdCkpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgIHZhbHVlOiAnY29ubmVjdG9yJyxcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZShJTVBMRU1FTlRBVElPTl9UWVBFX0NPTk5FQ1RPUl9MQUJFTClcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc29ydEJ5UHJpb3JpdHkob3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2ltcGxlbWVudGF0aW9uVHlwZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVHlwZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnNcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0RlbGVnYXRlVHlwZSh0eXBlKSB7XG4gIHJldHVybiBbJ2NsYXNzJywgJ2V4cHJlc3Npb24nLCAnZGVsZWdhdGVFeHByZXNzaW9uJ10uaW5jbHVkZXModHlwZSk7XG59XG5mdW5jdGlvbiBnZXRDb25uZWN0b3JzJDEoYnVzaW5lc3NPYmplY3QpIHtcbiAgcmV0dXJuIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6Q29ubmVjdG9yJyk7XG59XG5mdW5jdGlvbiBVcGRhdGVNb2RkbGVQcm9wZXJ0aWVzQ29tbWFuZChlbGVtZW50LCBidXNpbmVzc09iamVjdCwgbmV3UHJvcGVydGllcykge1xuICByZXR1cm4ge1xuICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgY29udGV4dDoge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczogbmV3UHJvcGVydGllc1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIHNvcnRCeVByaW9yaXR5KG9wdGlvbnMpIHtcbiAgY29uc3QgcHJpb3JpdGllcyA9IHtcbiAgICBbSU1QTEVNRU5UQVRJT05fVFlQRV9OT05FX0xBQkVMXTogMCxcbiAgICBbSU1QTEVNRU5UQVRJT05fVFlQRV9KQVZBX0xBQkVMXTogMyxcbiAgICBbSU1QTEVNRU5UQVRJT05fVFlQRV9FWFBSRVNTSU9OX0xBQkVMXTogNCxcbiAgICBbSU1QTEVNRU5UQVRJT05fVFlQRV9ERUxFR0FURV9MQUJFTF06IDUsXG4gICAgW0lNUExFTUVOVEFUSU9OX1RZUEVfRE1OX0xBQkVMXTogMSxcbiAgICBbSU1QTEVNRU5UQVRJT05fVFlQRV9FWFRFUk5BTF9MQUJFTF06IDIsXG4gICAgW0lNUExFTUVOVEFUSU9OX1RZUEVfQ09OTkVDVE9SX0xBQkVMXTogNlxuICB9O1xuICByZXR1cm4gc29ydEJ5KG9wdGlvbnMsIG8gPT4gcHJpb3JpdGllc1tvLmxhYmVsXSk7XG59XG5cbmZ1bmN0aW9uIEltcGxlbWVudGF0aW9uUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGltcGxlbWVudGF0aW9uVHlwZSA9IGdldEltcGxlbWVudGF0aW9uVHlwZShlbGVtZW50KTtcblxuICAvLyAoMSkgZGlzcGxheSBpbXBsZW1lbnRhdGlvbiB0eXBlIHNlbGVjdFxuICBjb25zdCBlbnRyaWVzID0gWy4uLkltcGxlbWVudGF0aW9uVHlwZVByb3BzKCldO1xuXG4gIC8vICgyKSBkaXNwbGF5IGltcGxlbWVudGF0aW9uIHByb3BlcnRpZXMgYmFzZWQgb24gdHlwZVxuICBpZiAoaW1wbGVtZW50YXRpb25UeXBlID09PSAnY2xhc3MnKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnamF2YUNsYXNzJyxcbiAgICAgIGNvbXBvbmVudDogSmF2YUNsYXNzLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpbXBsZW1lbnRhdGlvblR5cGUgPT09ICdleHByZXNzaW9uJykge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2V4cHJlc3Npb24nLFxuICAgICAgY29tcG9uZW50OiBFeHByZXNzaW9uLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgICB9LCB7XG4gICAgICBpZDogJ2V4cHJlc3Npb25SZXN1bHRWYXJpYWJsZScsXG4gICAgICBjb21wb25lbnQ6IFJlc3VsdFZhcmlhYmxlJDEsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGltcGxlbWVudGF0aW9uVHlwZSA9PT0gJ2RlbGVnYXRlRXhwcmVzc2lvbicpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdkZWxlZ2F0ZUV4cHJlc3Npb24nLFxuICAgICAgY29tcG9uZW50OiBEZWxlZ2F0ZUV4cHJlc3Npb24sXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGltcGxlbWVudGF0aW9uVHlwZSA9PT0gJ2RtbicpIHtcbiAgICBlbnRyaWVzLnB1c2goLi4uRG1uSW1wbGVtZW50YXRpb25Qcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSkpO1xuICB9IGVsc2UgaWYgKGltcGxlbWVudGF0aW9uVHlwZSA9PT0gJ2V4dGVybmFsJykge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2V4dGVybmFsVG9waWMnLFxuICAgICAgY29tcG9uZW50OiBUb3BpYyxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaW1wbGVtZW50YXRpb25UeXBlID09PSAnY29ubmVjdG9yJykge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ2Nvbm5lY3RvcklkJyxcbiAgICAgIGNvbXBvbmVudDogQ29ubmVjdG9ySWQsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBlbnRyaWVzO1xufVxuZnVuY3Rpb24gSmF2YUNsYXNzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgaWQgPSAnamF2YUNsYXNzJ1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6Y2xhc3MnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6Y2xhc3MnOiB2YWx1ZSB8fCAnJ1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSmF2YSBjbGFzcycpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gRXhwcmVzc2lvbihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBidXNpbmVzc09iamVjdCA9IGdldFNlcnZpY2VUYXNrTGlrZUJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgIGlkID0gJ2V4cHJlc3Npb24nXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpleHByZXNzaW9uJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmV4cHJlc3Npb24nOiB2YWx1ZSB8fCAnJ1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXhwcmVzc2lvbicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gUmVzdWx0VmFyaWFibGUkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6cmVzdWx0VmFyaWFibGUnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6cmVzdWx0VmFyaWFibGUnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdleHByZXNzaW9uUmVzdWx0VmFyaWFibGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Jlc3VsdCB2YXJpYWJsZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gRGVsZWdhdGVFeHByZXNzaW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgaWQgPSAnZGVsZWdhdGVFeHByZXNzaW9uJ1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6ZGVsZWdhdGVFeHByZXNzaW9uJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmRlbGVnYXRlRXhwcmVzc2lvbic6IHZhbHVlIHx8ICcnXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdEZWxlZ2F0ZSBleHByZXNzaW9uJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBUb3BpYyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2VydmljZVRhc2tMaWtlQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6dG9waWMnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6dG9waWMnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdleHRlcm5hbFRvcGljJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUb3BpYycpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gQ29ubmVjdG9ySWQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBjb25uZWN0b3IgPSBnZXRDb25uZWN0b3IoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBjb25uZWN0b3IuZ2V0KCdjYW11bmRhOmNvbm5lY3RvcklkJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogY29ubmVjdG9yLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpjb25uZWN0b3JJZCc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2Nvbm5lY3RvcklkJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb25uZWN0b3IgSUQnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRDb25uZWN0b3JzKGJ1c2luZXNzT2JqZWN0KSB7XG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOkNvbm5lY3RvcicpO1xufVxuZnVuY3Rpb24gZ2V0Q29ubmVjdG9yKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRTZXJ2aWNlVGFza0xpa2VCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgY29ubmVjdG9ycyA9IGdldENvbm5lY3RvcnMoYnVzaW5lc3NPYmplY3QpO1xuICByZXR1cm4gY29ubmVjdG9yc1swXTtcbn1cblxuZnVuY3Rpb24gSW5pdGlhdG9yUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzSW5pdGlhdG9yKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAnaW5pdGlhdG9yJyxcbiAgICBjb21wb25lbnQ6IEluaXRpYXRvcixcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIEluaXRpYXRvcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6aW5pdGlhdG9yJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmluaXRpYXRvcic6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2luaXRpYXRvcicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSW5pdGlhdG9yJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzSW5pdGlhdG9yKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdjYW11bmRhOkluaXRpYXRvcicpICYmICFpcyhlbGVtZW50LnBhcmVudCwgJ2JwbW46U3ViUHJvY2VzcycpO1xufVxuXG4vKipcbiAqIENmLiBodHRwczovL2RvY3MuY2FtdW5kYS5vcmcvbWFudWFsLzcuMTUvcmVmZXJlbmNlL2JwbW4yMC9zdWJwcm9jZXNzZXMvY2FsbC1hY3Rpdml0eS8jcGFzc2luZy12YXJpYWJsZXNcbiAqL1xuZnVuY3Rpb24gSW5NYXBwaW5nUHJvcGFnYXRpb25Qcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghYXJlSW5NYXBwaW5nc1N1cHBvcnRlZCQxKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGVudHJpZXMgPSBbe1xuICAgIGlkOiAnaW5NYXBwaW5nLXByb3BhZ2F0aW9uJyxcbiAgICBjb21wb25lbnQ6IFByb3BhZ2F0ZUFsbCQxLFxuICAgIGlzRWRpdGVkOiBpc0NoZWNrYm94RW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChpc1Byb3BhZ2F0ZUFsbCQxKGVsZW1lbnQpKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiAnaW5NYXBwaW5nLXByb3BhZ2F0aW9uLWxvY2FsJyxcbiAgICAgIGNvbXBvbmVudDogTG9jYWwkMixcbiAgICAgIGlzRWRpdGVkOiBpc0NoZWNrYm94RW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIFByb3BhZ2F0ZUFsbCQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBpc1Byb3BhZ2F0ZUFsbCQxKGVsZW1lbnQpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGFkZEluTWFwcGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVJbk1hcHBpbmcoKTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIGFkZEluTWFwcGluZygpIHtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQpIHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IG1hcHBpbmcgPSBjcmVhdGVFbGVtZW50KCdjYW11bmRhOkluJywge1xuICAgICAgdmFyaWFibGVzOiAnYWxsJ1xuICAgIH0sIG51bGwsIGJwbW5GYWN0b3J5KTtcbiAgICBhZGRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwgbWFwcGluZywgYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjayk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlSW5NYXBwaW5nKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2lnbmFsRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCkgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgY29uc3QgbWFwcGluZ3MgPSBmaW5kUmVsZXZhbnRJbk1hcHBpbmdzKGVsZW1lbnQpO1xuICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCBtYXBwaW5ncywgY29tbWFuZFN0YWNrKTtcbiAgfVxuICByZXR1cm4gQ2hlY2tib3hFbnRyeSh7XG4gICAgaWQ6ICdpbk1hcHBpbmctcHJvcGFnYXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb3BhZ2F0ZSBhbGwgdmFyaWFibGVzJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWVcbiAgfSk7XG59XG5mdW5jdGlvbiBMb2NhbCQyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBtYXBwaW5nID0gZmluZFJlbGV2YW50SW5NYXBwaW5ncyhlbGVtZW50KVswXTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG1hcHBpbmcuZ2V0KCdjYW11bmRhOmxvY2FsJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogbWFwcGluZyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbG9jYWw6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBDaGVja2JveEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnaW5NYXBwaW5nLXByb3BhZ2F0aW9uLWxvY2FsJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMb2NhbCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gYXJlSW5NYXBwaW5nc1N1cHBvcnRlZCQxKGVsZW1lbnQpIHtcbiAgY29uc3Qgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZ2V0U2lnbmFsRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCk7XG4gIGlmIChzaWduYWxFdmVudERlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXNBbnkoZWxlbWVudCwgWydicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpFbmRFdmVudCddKTtcbiAgfVxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5Jyk7XG59XG5mdW5jdGlvbiBnZXRJbk1hcHBpbmdzJDEoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBzaWduYWxFdmVudERlZmluaXRpb24gPSBnZXRTaWduYWxFdmVudERlZmluaXRpb24kMShidXNpbmVzc09iamVjdCk7XG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3Qoc2lnbmFsRXZlbnREZWZpbml0aW9uIHx8IGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbicpO1xufVxuZnVuY3Rpb24gZmluZFJlbGV2YW50SW5NYXBwaW5ncyhlbGVtZW50KSB7XG4gIGNvbnN0IGluTWFwcGluZ3MgPSBnZXRJbk1hcHBpbmdzJDEoZWxlbWVudCk7XG4gIHJldHVybiBmaWx0ZXIoaW5NYXBwaW5ncywgZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSBtYXBwaW5nLmdldCgndmFyaWFibGVzJyk7XG4gICAgcmV0dXJuIHZhcmlhYmxlcyAmJiB2YXJpYWJsZXMgPT09ICdhbGwnO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGlzUHJvcGFnYXRlQWxsJDEoZWxlbWVudCkge1xuICBjb25zdCBtYXBwaW5ncyA9IGZpbmRSZWxldmFudEluTWFwcGluZ3MoZWxlbWVudCk7XG4gIHJldHVybiAhIW1hcHBpbmdzLmxlbmd0aDtcbn1cblxuY29uc3QgREVGQVVMVF9QUk9QUyQxID0ge1xuICAnc291cmNlJzogdW5kZWZpbmVkLFxuICAnc291cmNlRXhwcmVzc2lvbic6IHVuZGVmaW5lZFxufTtcbmZ1bmN0aW9uIEluT3V0TWFwcGluZyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgbWFwcGluZ1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHR5cGUgPSBnZXRJbk91dFR5cGUobWFwcGluZyk7XG4gIGNvbnN0IGVudHJpZXMgPSBbXTtcblxuICAvLyAoMSkgVHlwZVxuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiBpZFByZWZpeCArICctdHlwZScsXG4gICAgY29tcG9uZW50OiBUeXBlLFxuICAgIGlkUHJlZml4LFxuICAgIG1hcHBpbmdcbiAgfSk7XG5cbiAgLy8gKDIpIFNvdXJjZVxuICBpZiAodHlwZSA9PT0gJ3NvdXJjZScpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6IGlkUHJlZml4ICsgJy1zb3VyY2UnLFxuICAgICAgY29tcG9uZW50OiBTb3VyY2UsXG4gICAgICBpZFByZWZpeCxcbiAgICAgIG1hcHBpbmdcbiAgICB9KTtcbiAgfVxuXG4gIC8vICgzKSBTb3VyY2UgZXhwcmVzc2lvblxuICBpZiAodHlwZSA9PT0gJ3NvdXJjZUV4cHJlc3Npb24nKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiBpZFByZWZpeCArICctc291cmNlRXhwcmVzc2lvbicsXG4gICAgICBjb21wb25lbnQ6IFNvdXJjZUV4cHJlc3Npb24sXG4gICAgICBpZFByZWZpeCxcbiAgICAgIG1hcHBpbmdcbiAgICB9KTtcbiAgfVxuXG4gIC8vICg0KSBUYXJnZXRcbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogaWRQcmVmaXggKyAnLXRhcmdldCcsXG4gICAgY29tcG9uZW50OiBUYXJnZXQsXG4gICAgaWRQcmVmaXgsXG4gICAgbWFwcGluZ1xuICB9KTtcblxuICAvLyAoNSkgTG9jYWxcbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogaWRQcmVmaXggKyAnLWxvY2FsJyxcbiAgICBjb21wb25lbnQ6IExvY2FsJDEsXG4gICAgaWRQcmVmaXgsXG4gICAgbWFwcGluZ1xuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBUeXBlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIG1hcHBpbmdcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gbWFwcGluZyA9PiB7XG4gICAgcmV0dXJuIGdldEluT3V0VHlwZShtYXBwaW5nKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfUFJPUFMkMSxcbiAgICAgIFt2YWx1ZV06ICcnXG4gICAgfTtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IG1hcHBpbmcsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdTb3VyY2UnKSxcbiAgICAgIHZhbHVlOiAnc291cmNlJ1xuICAgIH0sIHtcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1NvdXJjZSBleHByZXNzaW9uJyksXG4gICAgICB2YWx1ZTogJ3NvdXJjZUV4cHJlc3Npb24nXG4gICAgfV07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudDogbWFwcGluZyxcbiAgICBpZDogaWRQcmVmaXggKyAnLXR5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1R5cGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuZnVuY3Rpb24gU291cmNlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIG1hcHBpbmdcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IG1hcHBpbmcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHNvdXJjZTogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0VmFsdWUgPSBtYXBwaW5nID0+IHtcbiAgICByZXR1cm4gbWFwcGluZy5nZXQoJ2NhbXVuZGE6c291cmNlJyk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudDogbWFwcGluZyxcbiAgICBpZDogaWRQcmVmaXggKyAnLXNvdXJjZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU291cmNlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBTb3VyY2VFeHByZXNzaW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIG1hcHBpbmdcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IG1hcHBpbmcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHNvdXJjZUV4cHJlc3Npb246IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gbWFwcGluZyA9PiB7XG4gICAgcmV0dXJuIG1hcHBpbmcuZ2V0KCdjYW11bmRhOnNvdXJjZUV4cHJlc3Npb24nKTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50OiBtYXBwaW5nLFxuICAgIGlkOiBpZFByZWZpeCArICctc291cmNlRXhwcmVzc2lvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnU291cmNlIGV4cHJlc3Npb24nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFRhcmdldChwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBtYXBwaW5nXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBtYXBwaW5nLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB0YXJnZXQ6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gbWFwcGluZyA9PiB7XG4gICAgcmV0dXJuIG1hcHBpbmcuZ2V0KCdjYW11bmRhOnRhcmdldCcpO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQ6IG1hcHBpbmcsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy10YXJnZXQnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RhcmdldCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gTG9jYWwkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBtYXBwaW5nXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gbWFwcGluZy5nZXQoJ2NhbXVuZGE6bG9jYWwnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBtYXBwaW5nLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsb2NhbDogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIENoZWNrYm94RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkUHJlZml4ICsgJy1sb2NhbCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTG9jYWwnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0SW5PdXRUeXBlKG1hcHBpbmcpIHtcbiAgbGV0IGluT3V0VHlwZSA9ICcnO1xuICBpZiAodHlwZW9mIG1hcHBpbmcuc291cmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGluT3V0VHlwZSA9ICdzb3VyY2UnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtYXBwaW5nLnNvdXJjZUV4cHJlc3Npb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaW5PdXRUeXBlID0gJ3NvdXJjZUV4cHJlc3Npb24nO1xuICB9XG4gIHJldHVybiBpbk91dFR5cGU7XG59XG5cbi8qKlxuICogQ2YuIGh0dHBzOi8vZG9jcy5jYW11bmRhLm9yZy9tYW51YWwvbGF0ZXN0L3JlZmVyZW5jZS9icG1uMjAvY3VzdG9tLWV4dGVuc2lvbnMvZXh0ZW5zaW9uLWVsZW1lbnRzLyNpblxuICovXG5mdW5jdGlvbiBJbk1hcHBpbmdQcm9wcyh7XG4gIGVsZW1lbnQsXG4gIGluamVjdG9yXG59KSB7XG4gIGlmICghYXJlSW5NYXBwaW5nc1N1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHZhcmlhYmxlTWFwcGluZ3MgPSBnZXRJbk1hcHBpbmdzKGVsZW1lbnQpIHx8IFtdO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IGluamVjdG9yLmdldCgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSBpbmplY3Rvci5nZXQoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBpdGVtcyA9IHZhcmlhYmxlTWFwcGluZ3MubWFwKChtYXBwaW5nLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZCArICctaW5NYXBwaW5nLScgKyBpbmRleDtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBsYWJlbDogbWFwcGluZy5nZXQoJ3RhcmdldCcpIHx8ICcnLFxuICAgICAgZW50cmllczogSW5PdXRNYXBwaW5nKHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtYXBwaW5nXG4gICAgICB9KSxcbiAgICAgIGF1dG9Gb2N1c0VudHJ5OiBpZCArICctdGFyZ2V0JyxcbiAgICAgIHJlbW92ZTogcmVtb3ZlRmFjdG9yeSQzKHtcbiAgICAgICAgY29tbWFuZFN0YWNrLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtYXBwaW5nXG4gICAgICB9KVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGl0ZW1zLFxuICAgIGFkZDogYWRkRmFjdG9yeSQyKHtcbiAgICAgIGJwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrLFxuICAgICAgZWxlbWVudFxuICAgIH0pXG4gIH07XG59XG5mdW5jdGlvbiByZW1vdmVGYWN0b3J5JDMoe1xuICBjb21tYW5kU3RhY2ssXG4gIGVsZW1lbnQsXG4gIG1hcHBpbmdcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2lnbmFsRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCkgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIG1hcHBpbmcsIGNvbW1hbmRTdGFjayk7XG4gIH07XG59XG5mdW5jdGlvbiBhZGRGYWN0b3J5JDIoe1xuICBicG1uRmFjdG9yeSxcbiAgY29tbWFuZFN0YWNrLFxuICBlbGVtZW50XG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbiQxKGVsZW1lbnQpIHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IG5ld01hcHBpbmcgPSBjcmVhdGVFbGVtZW50KCdjYW11bmRhOkluJywge1xuICAgICAgc291cmNlOiAnJyAvLyBzb3VyY2UgaXMgdGhlIGRlZmF1bHQgdHlwZVxuICAgIH0sIG51bGwsIGJwbW5GYWN0b3J5KTtcbiAgICBhZGRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwgbmV3TWFwcGluZywgYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjayk7XG4gIH07XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0SW5NYXBwaW5ncyhlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IHNpZ25hbEV2ZW50RGVmaW5pdGlvbiA9IGdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbiQxKGJ1c2luZXNzT2JqZWN0KTtcbiAgY29uc3QgbWFwcGluZ3MgPSBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3Qoc2lnbmFsRXZlbnREZWZpbml0aW9uIHx8IGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbicpO1xuXG4gIC8vIG9ubHkgcmV0cmlldmUgcmVsZXZhbnQgbWFwcGluZ3MgaGVyZSwgb3RoZXJzIGFyZSBoYW5kbGVkIGluIG90aGVyIGdyb3Vwc1xuICAvLyBtYXBwaW5nLmJ1c2luZXNzS2V5ID0+IGNhbXVuZGEtcGxhdGZvcm0vQ2FsbEF2dGl2aXR5UHJvcHNcbiAgLy8gbWFwcGluZy52YXJpYWJsZXMgPT4gY2FtdW5kYS1wbGF0Zm9ybS9Jbk1hcHBpbmdQcm9wYWdhdGlvblByb3BzXG4gIHJldHVybiBmaWx0ZXIobWFwcGluZ3MsIGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgcmV0dXJuICFtYXBwaW5nLmJ1c2luZXNzS2V5ICYmICEobWFwcGluZy52YXJpYWJsZXMgJiYgbWFwcGluZy52YXJpYWJsZXMgPT09ICdhbGwnKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBhcmVJbk1hcHBpbmdzU3VwcG9ydGVkKGVsZW1lbnQpIHtcbiAgY29uc3Qgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZ2V0U2lnbmFsRXZlbnREZWZpbml0aW9uJDEoZWxlbWVudCk7XG4gIGlmIChzaWduYWxFdmVudERlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXNBbnkoZWxlbWVudCwgWydicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpFbmRFdmVudCddKTtcbiAgfVxuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5Jyk7XG59XG5cbmZ1bmN0aW9uIElucHV0UHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaW5qZWN0b3JcbiAgfSA9IHByb3BzO1xuICBpZiAoIWFyZUlucHV0UGFyYW1ldGVyc1N1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGlucHV0UGFyYW1ldGVycyA9IGdldElucHV0UGFyYW1ldGVycyhlbGVtZW50KSB8fCBbXTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSBpbmplY3Rvci5nZXQoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gaW5qZWN0b3IuZ2V0KCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgaXRlbXMgPSBpbnB1dFBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBlbGVtZW50LmlkICsgJy1pbnB1dFBhcmFtZXRlci0nICsgaW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWw6IHBhcmFtZXRlci5nZXQoJ25hbWUnKSB8fCAnJyxcbiAgICAgIGVudHJpZXM6IElucHV0T3V0cHV0UGFyYW1ldGVyKHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBwYXJhbWV0ZXJcbiAgICAgIH0pLFxuICAgICAgYXV0b0ZvY3VzRW50cnk6IGlkICsgJy1uYW1lJyxcbiAgICAgIHJlbW92ZTogcmVtb3ZlRmFjdG9yeSQyKHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgY29tbWFuZFN0YWNrLFxuICAgICAgICBwYXJhbWV0ZXJcbiAgICAgIH0pXG4gICAgfTtcbiAgfSk7XG4gIGZ1bmN0aW9uIGFkZChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBBZGRQYXJhbWV0ZXJDbWQoZWxlbWVudCwgJ2NhbXVuZGE6SW5wdXRQYXJhbWV0ZXInLCBicG1uRmFjdG9yeSkpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgYWRkXG4gIH07XG59XG5mdW5jdGlvbiByZW1vdmVGYWN0b3J5JDIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNvbW1hbmRTdGFjayxcbiAgICBlbGVtZW50LFxuICAgIHBhcmFtZXRlclxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBpbnB1dE91dHB1dCA9IGdldElucHV0T3V0cHV0KGVsZW1lbnQpO1xuICAgIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBpbnB1dE91dHB1dCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiB3aXRob3V0KGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyksIHBhcmFtZXRlcilcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gSm9iRXhlY3V0aW9uUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBlbnRyaWVzID0gW107XG5cbiAgLy8gKDEpIGFkZCByZXRyeVRpbWVDeWNsZSBmaWVsZCBmb3IgY2FtdW5kYTphc3luY0NhcGFibGUgZW5hYmxlZCBFbGVtZW50c1xuICAvLyBvciBUaW1lckV2ZW50c1xuICBpZiAoaXMoZWxlbWVudCwgJ2NhbXVuZGE6QXN5bmNDYXBhYmxlJykgJiYgaXNBc3luYyQxKGJ1c2luZXNzT2JqZWN0KSB8fCBpc1RpbWVyRXZlbnQoZWxlbWVudCkpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdyZXRyeVRpbWVDeWNsZScsXG4gICAgICBjb21wb25lbnQ6IFJldHJ5VGltZUN5Y2xlLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIC8vICgyKSBhZGQgam9iUHJpb3JpdHkgZmllbGQgZm9yIGNhbXVuZGE6am9iUHJpb3JpemVkIHdpdGggYXN5bmMgZW5hYmxlZFxuICAvLyAgb3IgUHJvY2Vzc2VzXG4gIC8vICBvciBQcm9jZXNzZXMgcmVmZXJyZWQgdG8gYnkgcGFydGljaXBhbnRzXG4gIC8vICBvciBUaW1lckV2ZW50c1xuICBpZiAoaXMoZWxlbWVudCwgJ2NhbXVuZGE6Sm9iUHJpb3JpemVkJykgJiYgaXNBc3luYyQxKGJ1c2luZXNzT2JqZWN0KSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKSB8fCBpc1RpbWVyRXZlbnQoZWxlbWVudCkpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdqb2JQcmlvcml0eScsXG4gICAgICBjb21wb25lbnQ6IEpvYlByaW9yaXR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIEpvYlByaW9yaXR5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSA/IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmdldCgncHJvY2Vzc1JlZicpIDogZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6am9iUHJpb3JpdHknKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6am9iUHJpb3JpdHknOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdqb2JQcmlvcml0eScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJpb3JpdHknKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFJldHJ5VGltZUN5Y2xlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICBjb25zdCBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUnKVswXTtcbiAgICByZXR1cm4gZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUgJiYgZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUuYm9keTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgICAvLyAoMSkgZW5zdXJlIGV4dGVuc2lvbiBlbGVtZW50c1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICAgICAgdmFsdWVzOiBbXVxuICAgICAgfSwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZVxuICAgIGxldCBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUnKVswXTtcbiAgICBpZiAoIWZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlKSB7XG4gICAgICBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUnLCB7fSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vICgzKSB1cGRhdGUgZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUgdmFsdWVcbiAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYm9keTogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIGNvbW1pdCBhbGwgdXBkYXRlc1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kcyk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ3JldHJ5VGltZUN5Y2xlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdSZXRyeSB0aW1lIGN5Y2xlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBib1xuICogQHJldHVybiB7Ym9vbGVhbn0gYSBib29sZWFuIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzQXN5bmNCZWZvcmUkMShibykge1xuICByZXR1cm4gISEoYm8uZ2V0KCdjYW11bmRhOmFzeW5jQmVmb3JlJykgfHwgYm8uZ2V0KCdjYW11bmRhOmFzeW5jJykpO1xufVxuXG4vKipcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0FzeW5jQWZ0ZXIkMShibykge1xuICByZXR1cm4gISFiby5nZXQoJ2NhbXVuZGE6YXN5bmNBZnRlcicpO1xufVxuXG4vKipcbiAqIGlzQXN5bmMgLSByZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnY2FtdW5kYTphc3luY0FmdGVyJyBvciAnY2FtdW5kYTphc3luY0JlZm9yZSdcbiAqIGlzIHNldCB0byB0cnVlLlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGJvXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0FzeW5jJDEoYm8pIHtcbiAgcmV0dXJuIGlzQXN5bmNBZnRlciQxKGJvKSB8fCBpc0FzeW5jQmVmb3JlJDEoYm8pO1xufVxuXG4vKipcbiAqIGlzVGltZXJFdmVudCAtIHJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhIGJwbW46RXZlbnQgd2l0aCBhIHRpbWVyRXZlbnREZWZpbml0aW9uXG4gKlxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUaW1lckV2ZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOkV2ZW50JykgJiYgZ2V0VGltZXJFdmVudERlZmluaXRpb24kMShlbGVtZW50KTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbCcpLkVudHJ5RGVmaW5pdGlvbiB9IEVudHJ5XG4gKi9cblxuLyoqXG4gKiBAcmV0dXJucyB7QXJyYXk8RW50cnk+fSBlbnRyaWVzXG4gKi9cbmZ1bmN0aW9uIE11bHRpSW5zdGFuY2VQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xuICBsZXQgZW50cmllcyA9IHByb3BzLmVudHJpZXMgfHwgW107XG4gIGlmICghaXNNdWx0aUluc3RhbmNlU3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogJ2NvbGxlY3Rpb24nLFxuICAgIGNvbXBvbmVudDogQ29sbGVjdGlvbixcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9LCB7XG4gICAgaWQ6ICdlbGVtZW50VmFyaWFibGUnLFxuICAgIGNvbXBvbmVudDogRWxlbWVudFZhcmlhYmxlLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ211bHRpSW5zdGFuY2VBc3luY2hyb25vdXNCZWZvcmUnLFxuICAgIGNvbXBvbmVudDogTXVsdGlJbnN0YW5jZUFzeW5jaHJvbm91c0JlZm9yZSxcbiAgICBpc0VkaXRlZDogaXNDaGVja2JveEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ211bHRpSW5zdGFuY2VBc3luY2hyb25vdXNBZnRlcicsXG4gICAgY29tcG9uZW50OiBNdWx0aUluc3RhbmNlQXN5bmNocm9ub3VzQWZ0ZXIsXG4gICAgaXNFZGl0ZWQ6IGlzQ2hlY2tib3hFbnRyeUVkaXRlZFxuICB9KTtcbiAgaWYgKGlzQXN5bmMobG9vcENoYXJhY3RlcmlzdGljcykpIHtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgaWQ6ICdtdWx0aUluc3RhbmNlRXhjbHVzaXZlJyxcbiAgICAgIGNvbXBvbmVudDogTXVsdGlJbnN0YW5jZUV4Y2x1c2l2ZSxcbiAgICAgIGlzRWRpdGVkOiBjaGVja2JveElzRWRpdGVkSW52ZXJ0ZWRcbiAgICB9LCB7XG4gICAgICBpZDogJ211bHRpSW5zdGFuY2VSZXRyeVRpbWVDeWNsZScsXG4gICAgICBjb21wb25lbnQ6IE11bHRpSW5zdGFuY2VSZXRyeVRpbWVDeWNsZSxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBDb2xsZWN0aW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRDb2xsZWN0aW9uKGVsZW1lbnQpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICByZXR1cm4gY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBsb29wQ2hhcmFjdGVyaXN0aWNzLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpjb2xsZWN0aW9uJzogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnY29sbGVjdGlvbicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29sbGVjdGlvbicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gRWxlbWVudFZhcmlhYmxlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBnZXRFbGVtZW50VmFyaWFibGUoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHJldHVybiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGxvb3BDaGFyYWN0ZXJpc3RpY3MsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmVsZW1lbnRWYXJpYWJsZSc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2VsZW1lbnRWYXJpYWJsZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRWxlbWVudCB2YXJpYWJsZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gTXVsdGlJbnN0YW5jZUFzeW5jaHJvbm91c0JlZm9yZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0FzeW5jQmVmb3JlKGxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAvLyBvdmVyd3JpdGUgdGhlIGxlZ2FjeSBgYXN5bmNgIHByb3BlcnR5LCB3ZSB3aWxsIHVzZSB0aGUgbW9yZSBleHBsaWNpdCBgYXN5bmNCZWZvcmVgXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICdjYW11bmRhOmFzeW5jQmVmb3JlJzogdmFsdWUsXG4gICAgICAnY2FtdW5kYTphc3luYyc6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBsb29wQ2hhcmFjdGVyaXN0aWNzLFxuICAgICAgcHJvcGVydGllc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gQ2hlY2tib3hFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ211bHRpSW5zdGFuY2VBc3luY2hyb25vdXNCZWZvcmUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0FzeW5jaHJvbm91cyBiZWZvcmUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIE11bHRpSW5zdGFuY2VBc3luY2hyb25vdXNBZnRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0FzeW5jQWZ0ZXIobG9vcENoYXJhY3RlcmlzdGljcyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogbG9vcENoYXJhY3RlcmlzdGljcyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6YXN5bmNBZnRlcic6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBDaGVja2JveEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbXVsdGlJbnN0YW5jZUFzeW5jaHJvbm91c0FmdGVyJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdBc3luY2hyb25vdXMgYWZ0ZXInKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIE11bHRpSW5zdGFuY2VFeGNsdXNpdmUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgbG9vcENoYXJhY3RlcmlzdGljcyA9IGdldExvb3BDaGFyYWN0ZXJpc3RpY3MoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0V4Y2x1c2l2ZShsb29wQ2hhcmFjdGVyaXN0aWNzKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBsb29wQ2hhcmFjdGVyaXN0aWNzLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpleGNsdXNpdmUnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gQ2hlY2tib3hFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ211bHRpSW5zdGFuY2VFeGNsdXNpdmUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V4Y2x1c2l2ZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0pO1xufVxuZnVuY3Rpb24gTXVsdGlJbnN0YW5jZVJldHJ5VGltZUN5Y2xlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgY29uc3QgZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUgPSBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QobG9vcENoYXJhY3RlcmlzdGljcywgJ2NhbXVuZGE6RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUnKVswXTtcbiAgICByZXR1cm4gZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUgJiYgZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUuYm9keTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBsb29wQ2hhcmFjdGVyaXN0aWNzLmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcblxuICAgIC8vICgxKSBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge1xuICAgICAgICB2YWx1ZXM6IFtdXG4gICAgICB9LCBsb29wQ2hhcmFjdGVyaXN0aWNzLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogbG9vcENoYXJhY3RlcmlzdGljcyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIGVuc3VyZSBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZVxuICAgIGxldCBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChsb29wQ2hhcmFjdGVyaXN0aWNzLCAnY2FtdW5kYTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScpWzBdO1xuICAgIGlmICghZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUpIHtcbiAgICAgIGZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlID0gY3JlYXRlRWxlbWVudCgnY2FtdW5kYTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZScsIHt9LCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50OiBsb29wQ2hhcmFjdGVyaXN0aWNzLFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGZhaWxlZEpvYlJldHJ5VGltZUN5Y2xlXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gKDMpIHVwZGF0ZSBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSB2YWx1ZVxuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBib2R5OiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXMtcGFuZWwubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbXVsdGlJbnN0YW5jZVJldHJ5VGltZUN5Y2xlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdSZXRyeSB0aW1lIGN5Y2xlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIGdlbmVyaWMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogaXNNdWx0aUluc3RhbmNlU3VwcG9ydGVkIC0gY2hlY2sgd2hldGhlciBnaXZlbiBlbGVtZW50IHN1cHBvcnRzIGNhbXVuZGEgc3BlY2lmaWMgcHJvcHNcbiAqIGZvciBtdWx0aUluc3RhbmNlIChyZWYuIDxjYW11bmRhOkNsbGVjdGFibGU+KS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc011bHRpSW5zdGFuY2VTdXBwb3J0ZWQoZWxlbWVudCkge1xuICBjb25zdCBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KTtcbiAgcmV0dXJuICEhbG9vcENoYXJhY3RlcmlzdGljcyAmJiBpcyhsb29wQ2hhcmFjdGVyaXN0aWNzLCAnY2FtdW5kYTpDb2xsZWN0YWJsZScpO1xufVxuXG4vKipcbiAqIGdldFByb3BlcnR5IC0gZ2V0IGEgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcbiAqXG4gKiBAcmV0dXJuIHthbnl9IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBnZXRMb29wQ2hhcmFjdGVyaXN0aWNzKGVsZW1lbnQpO1xuICByZXR1cm4gbG9vcENoYXJhY3RlcmlzdGljcyAmJiBsb29wQ2hhcmFjdGVyaXN0aWNzLmdldChwcm9wZXJ0eU5hbWUpO1xufVxuXG4vKipcbiAqIGdldExvb3BDaGFyYWN0ZXJpc3RpY3MgLSBnZXQgbG9vcENoYXJhY3RlcmlzdGljcyBvZiBhIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxicG1uOk11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzPiB8IHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0TG9vcENoYXJhY3RlcmlzdGljcyhlbGVtZW50KSB7XG4gIGNvbnN0IGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBiby5sb29wQ2hhcmFjdGVyaXN0aWNzO1xufVxuXG4vLyBjb2xsZWN0aW9uXG5cbi8qKlxuICogZ2V0Q29sbGVjdGlvbiAtIGdldCB0aGUgJ2NhbXVuZGE6Y29sbGVjdGlvbicgYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBsb29wIGNoYXJhY3RlcmlzdGljcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgJ2NhbXVuZGE6Y29sbGVjdGlvbicgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBnZXRQcm9wZXJ0eShlbGVtZW50LCAnY2FtdW5kYTpjb2xsZWN0aW9uJyk7XG59XG5cbi8vIGVsZW1lbnRWYXJpYWJsZVxuXG4vKipcbiAqIGdldEVsZW1lbnRWYXJpYWJsZSAtIGdldCB0aGUgJ2NhbXVuZGE6ZWxlbWVudFZhcmlhYmxlJyBhdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIGxvb3AgY2hhcmFjdGVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSAnY2FtdW5kYTplbGVtZW50VmFyaWFibGUnIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldEVsZW1lbnRWYXJpYWJsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRQcm9wZXJ0eShlbGVtZW50LCAnY2FtdW5kYTplbGVtZW50VmFyaWFibGUnKTtcbn1cblxuLy8gYXN5bmNCZWZvcmUgYXN5bmNBZnRlclxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlICdjYW11bmRhOmFzeW5jQmVmb3JlJyBpcyBzZXRcbiAqIHRvIHRydWUuXG4gKlxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBhIGJvb2xlYW4gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNBc3luY0JlZm9yZShibykge1xuICByZXR1cm4gISEoYm8uZ2V0KCdjYW11bmRhOmFzeW5jQmVmb3JlJykgfHwgYm8uZ2V0KCdjYW11bmRhOmFzeW5jJykpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlICdjYW11bmRhOmFzeW5jQWZ0ZXInIGlzIHNldFxuICogdG8gdHJ1ZS5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBib1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc0FzeW5jQWZ0ZXIoYm8pIHtcbiAgcmV0dXJuICEhYm8uZ2V0KCdjYW11bmRhOmFzeW5jQWZ0ZXInKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSAnY2FtdW5kYTpleGNsdXNpdmUnIGlzIHNldFxuICogdG8gdHJ1ZS5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fSBib1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGEgYm9vbGVhbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc0V4Y2x1c2l2ZShibykge1xuICByZXR1cm4gISFiby5nZXQoJ2NhbXVuZGE6ZXhjbHVzaXZlJyk7XG59XG5cbi8qKlxuICogaXNBc3luYyAtIHJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlICdjYW11bmRhOmFzeW5jQWZ0ZXInIG9yICdjYW11bmRhOmFzeW5jQmVmb3JlJ1xuICogaXMgc2V0IHRvIHRydWUuXG4gKlxuICogQHBhcmFtICB7TW9kZGxlRWxlbWVudH0gYm9cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQXN5bmMoYm8pIHtcbiAgcmV0dXJuIGlzQXN5bmNBZnRlcihibykgfHwgaXNBc3luY0JlZm9yZShibyk7XG59XG5cbi8vIENoZWNrYm94XG5cbmZ1bmN0aW9uIGNoZWNrYm94SXNFZGl0ZWRJbnZlcnRlZChub2RlKSB7XG4gIHJldHVybiBub2RlICYmICFub2RlLmNoZWNrZWQ7XG59XG5cbi8qKlxuICogQ2YuIGh0dHBzOi8vZG9jcy5jYW11bmRhLm9yZy9tYW51YWwvNy4xNS9yZWZlcmVuY2UvYnBtbjIwL3N1YnByb2Nlc3Nlcy9jYWxsLWFjdGl2aXR5LyNwYXNzaW5nLXZhcmlhYmxlc1xuICovXG5mdW5jdGlvbiBPdXRNYXBwaW5nUHJvcGFnYXRpb25Qcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghYXJlT3V0TWFwcGluZ3NTdXBwb3J0ZWQkMShlbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBlbnRyaWVzID0gW3tcbiAgICBpZDogJ291dE1hcHBpbmctcHJvcGFnYXRpb24nLFxuICAgIGNvbXBvbmVudDogUHJvcGFnYXRlQWxsLFxuICAgIGlzRWRpdGVkOiBpc0NoZWNrYm94RW50cnlFZGl0ZWRcbiAgfV07XG4gIGlmIChpc1Byb3BhZ2F0ZUFsbChlbGVtZW50KSkge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogJ291dE1hcHBpbmctcHJvcGFnYXRpb24tbG9jYWwnLFxuICAgICAgY29tcG9uZW50OiBMb2NhbCxcbiAgICAgIGlzRWRpdGVkOiBpc0NoZWNrYm94RW50cnlFZGl0ZWRcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbmZ1bmN0aW9uIFByb3BhZ2F0ZUFsbChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gaXNQcm9wYWdhdGVBbGwoZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYWRkT3V0TWFwcGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVPdXRNYXBwaW5nKCk7XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBhZGRPdXRNYXBwaW5nKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgY29uc3QgbWFwcGluZyA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6T3V0Jywge1xuICAgICAgdmFyaWFibGVzOiAnYWxsJ1xuICAgIH0sIG51bGwsIGJwbW5GYWN0b3J5KTtcbiAgICBhZGRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwgbWFwcGluZywgYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjayk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlT3V0TWFwcGluZygpIHtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IG1hcHBpbmdzID0gZmluZFJlbGV2YW50T3V0TWFwcGluZ3MoZWxlbWVudCk7XG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIG1hcHBpbmdzLCBjb21tYW5kU3RhY2spO1xuICB9XG4gIHJldHVybiBDaGVja2JveEVudHJ5KHtcbiAgICBpZDogJ291dE1hcHBpbmctcHJvcGFnYXRpb24nLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Byb3BhZ2F0ZSBhbGwgdmFyaWFibGVzJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWVcbiAgfSk7XG59XG5mdW5jdGlvbiBMb2NhbChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgbWFwcGluZyA9IGZpbmRSZWxldmFudE91dE1hcHBpbmdzKGVsZW1lbnQpWzBdO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gbWFwcGluZy5nZXQoJ2NhbXVuZGE6bG9jYWwnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBtYXBwaW5nLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsb2NhbDogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIENoZWNrYm94RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdvdXRNYXBwaW5nLXByb3BhZ2F0aW9uLWxvY2FsJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdMb2NhbCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gYXJlT3V0TWFwcGluZ3NTdXBwb3J0ZWQkMShlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpDYWxsQWN0aXZpdHknKTtcbn1cbmZ1bmN0aW9uIGdldE91dE1hcHBpbmdzJDEoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpPdXQnKTtcbn1cbmZ1bmN0aW9uIGZpbmRSZWxldmFudE91dE1hcHBpbmdzKGVsZW1lbnQpIHtcbiAgY29uc3QgaW5NYXBwaW5ncyA9IGdldE91dE1hcHBpbmdzJDEoZWxlbWVudCk7XG4gIHJldHVybiBmaWx0ZXIoaW5NYXBwaW5ncywgZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSBtYXBwaW5nLmdldCgndmFyaWFibGVzJyk7XG4gICAgcmV0dXJuIHZhcmlhYmxlcyAmJiB2YXJpYWJsZXMgPT09ICdhbGwnO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGlzUHJvcGFnYXRlQWxsKGVsZW1lbnQpIHtcbiAgY29uc3QgbWFwcGluZ3MgPSBmaW5kUmVsZXZhbnRPdXRNYXBwaW5ncyhlbGVtZW50KTtcbiAgcmV0dXJuICEhbWFwcGluZ3MubGVuZ3RoO1xufVxuXG4vKipcbiAqIENmLiBodHRwczovL2RvY3MuY2FtdW5kYS5vcmcvbWFudWFsL2xhdGVzdC9yZWZlcmVuY2UvYnBtbjIwL2N1c3RvbS1leHRlbnNpb25zL2V4dGVuc2lvbi1lbGVtZW50cy8jb3V0XG4gKi9cbmZ1bmN0aW9uIE91dE1hcHBpbmdQcm9wcyh7XG4gIGVsZW1lbnQsXG4gIGluamVjdG9yXG59KSB7XG4gIGlmICghYXJlT3V0TWFwcGluZ3NTdXBwb3J0ZWQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB2YXJpYWJsZU1hcHBpbmdzID0gZ2V0T3V0TWFwcGluZ3MoZWxlbWVudCkgfHwgW107XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGl0ZW1zID0gdmFyaWFibGVNYXBwaW5ncy5tYXAoKG1hcHBpbmcsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWQgPSBlbGVtZW50LmlkICsgJy1vdXRNYXBwaW5nLScgKyBpbmRleDtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBsYWJlbDogbWFwcGluZy5nZXQoJ3RhcmdldCcpIHx8ICcnLFxuICAgICAgZW50cmllczogSW5PdXRNYXBwaW5nKHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtYXBwaW5nXG4gICAgICB9KSxcbiAgICAgIGF1dG9Gb2N1c0VudHJ5OiBpZCArICctdGFyZ2V0JyxcbiAgICAgIHJlbW92ZTogcmVtb3ZlRmFjdG9yeSQxKHtcbiAgICAgICAgY29tbWFuZFN0YWNrLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtYXBwaW5nXG4gICAgICB9KVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGl0ZW1zLFxuICAgIGFkZDogYWRkRmFjdG9yeSQxKHtcbiAgICAgIGJwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrLFxuICAgICAgZWxlbWVudFxuICAgIH0pXG4gIH07XG59XG5mdW5jdGlvbiByZW1vdmVGYWN0b3J5JDEoe1xuICBjb21tYW5kU3RhY2ssXG4gIGVsZW1lbnQsXG4gIG1hcHBpbmdcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIG1hcHBpbmcsIGNvbW1hbmRTdGFjayk7XG4gIH07XG59XG5mdW5jdGlvbiBhZGRGYWN0b3J5JDEoe1xuICBicG1uRmFjdG9yeSxcbiAgY29tbWFuZFN0YWNrLFxuICBlbGVtZW50XG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IG5ld01hcHBpbmcgPSBjcmVhdGVFbGVtZW50KCdjYW11bmRhOk91dCcsIHtcbiAgICAgIHNvdXJjZTogJycgLy8gc291cmNlIGlzIHRoZSBkZWZhdWx0IHR5cGVcbiAgICB9LCBudWxsLCBicG1uRmFjdG9yeSk7XG4gICAgYWRkRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIG5ld01hcHBpbmcsIGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2spO1xuICB9O1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldE91dE1hcHBpbmdzKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgbWFwcGluZ3MgPSBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOk91dCcpO1xuXG4gIC8vIG9ubHkgcmV0cmlldmUgcmVsZXZhbnQgbWFwcGluZ3MgaGVyZSwgb3RoZXJzIGFyZSBoYW5kbGVkIGluIG90aGVyIGdyb3Vwc1xuICAvLyBtYXBwaW5nLmJ1c2luZXNzS2V5ID0+IGNhbXVuZGEtcGxhdGZvcm0vQ2FsbEF2dGl2aXR5UHJvcHNcbiAgLy8gbWFwcGluZy52YXJpYWJsZXMgPT4gY2FtdW5kYS1wbGF0Zm9ybS9PdXRNYXBwaW5nUHJvcGFnYXRpb25Qcm9wc1xuICByZXR1cm4gZmlsdGVyKG1hcHBpbmdzLCBmdW5jdGlvbiAobWFwcGluZykge1xuICAgIHJldHVybiAhbWFwcGluZy5idXNpbmVzc0tleSAmJiAhKG1hcHBpbmcudmFyaWFibGVzICYmIG1hcHBpbmcudmFyaWFibGVzID09PSAnYWxsJyk7XG4gIH0pO1xufVxuZnVuY3Rpb24gYXJlT3V0TWFwcGluZ3NTdXBwb3J0ZWQoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5Jyk7XG59XG5cbmZ1bmN0aW9uIE91dHB1dFByb3BzKHtcbiAgZWxlbWVudCxcbiAgaW5qZWN0b3Jcbn0pIHtcbiAgaWYgKCFhcmVPdXRwdXRQYXJhbWV0ZXJzU3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgb3V0cHV0UGFyYW1ldGVycyA9IGdldE91dHB1dFBhcmFtZXRlcnMoZWxlbWVudCkgfHwgW107XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gaW5qZWN0b3IuZ2V0KCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IGluamVjdG9yLmdldCgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IGl0ZW1zID0gb3V0cHV0UGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlciwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGVsZW1lbnQuaWQgKyAnLW91dHB1dFBhcmFtZXRlci0nICsgaW5kZXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWw6IHBhcmFtZXRlci5nZXQoJ25hbWUnKSB8fCAnJyxcbiAgICAgIGVudHJpZXM6IElucHV0T3V0cHV0UGFyYW1ldGVyKHtcbiAgICAgICAgaWRQcmVmaXg6IGlkLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBwYXJhbWV0ZXJcbiAgICAgIH0pLFxuICAgICAgYXV0b0ZvY3VzRW50cnk6IGlkICsgJy1uYW1lJyxcbiAgICAgIHJlbW92ZTogcmVtb3ZlRmFjdG9yeSh7XG4gICAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcGFyYW1ldGVyXG4gICAgICB9KVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGl0ZW1zLFxuICAgIGFkZDogYWRkRmFjdG9yeSh7XG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgIGVsZW1lbnRcbiAgICB9KVxuICB9O1xufVxuZnVuY3Rpb24gcmVtb3ZlRmFjdG9yeSh7XG4gIGNvbW1hbmRTdGFjayxcbiAgZWxlbWVudCxcbiAgcGFyYW1ldGVyXG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBpbnB1dE91dHB1dCA9IGdldElucHV0T3V0cHV0KGVsZW1lbnQpO1xuICAgIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBpbnB1dE91dHB1dCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogd2l0aG91dChpbnB1dE91dHB1dC5nZXQoJ291dHB1dFBhcmFtZXRlcnMnKSwgcGFyYW1ldGVyKVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gYWRkRmFjdG9yeSh7XG4gIGJwbW5GYWN0b3J5LFxuICBjb21tYW5kU3RhY2ssXG4gIGVsZW1lbnRcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdwcm9wZXJ0aWVzLXBhbmVsLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBBZGRQYXJhbWV0ZXJDbWQoZWxlbWVudCwgJ2NhbXVuZGE6T3V0cHV0UGFyYW1ldGVyJywgYnBtbkZhY3RvcnkpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gVGltZXJQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBsaXN0ZW5lcixcbiAgICBpZFByZWZpeFxuICB9ID0gcHJvcHM7XG4gIGxldCB7XG4gICAgdGltZXJFdmVudERlZmluaXRpb25cbiAgfSA9IHByb3BzO1xuICBpZiAoIXRpbWVyRXZlbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvbiA9IGdldFRpbWVyRXZlbnREZWZpbml0aW9uKGJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuICBjb25zdCB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUgPSBnZXRUaW1lckRlZmluaXRpb25UeXBlKHRpbWVyRXZlbnREZWZpbml0aW9uKTtcblxuICAvLyAoMSkgT25seSBzaG93IGZvciBzdXBwb3J0ZWQgZWxlbWVudHNcbiAgaWYgKCFpc1RpbWVyU3VwcG9ydGVkKGVsZW1lbnQpICYmICFpc1RpbWVyU3VwcG9ydGVkT25MaXN0ZW5lcihsaXN0ZW5lcikpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyAoMikgUHJvdmlkZSBlbnRyaWVzLCBoYXZlIGEgdmFsdWUgb25seSBpZiBzZWxlY3Rpb24gd2FzIG1hZGVcbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiBnZXRJZChpZFByZWZpeCwgJ3RpbWVyRXZlbnREZWZpbml0aW9uVHlwZScpLFxuICAgIGNvbXBvbmVudDogVGltZXJFdmVudERlZmluaXRpb25UeXBlLFxuICAgIGlzRWRpdGVkOiBpc1NlbGVjdEVudHJ5RWRpdGVkLFxuICAgIHRpbWVyRXZlbnREZWZpbml0aW9uLFxuICAgIHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZVxuICB9KTtcbiAgaWYgKHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZSkge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogZ2V0SWQoaWRQcmVmaXgsICd0aW1lckV2ZW50RGVmaW5pdGlvblZhbHVlJyksXG4gICAgICBjb21wb25lbnQ6IFRpbWVyRXZlbnREZWZpbml0aW9uVmFsdWUsXG4gICAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZCxcbiAgICAgIHRpbWVyRXZlbnREZWZpbml0aW9uLFxuICAgICAgdGltZXJFdmVudERlZmluaXRpb25UeXBlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5cbi8qKlxuICogVGltZXJFdmVudERlZmluaXRpb25UeXBlIC0gR2VuZXJpYyBzZWxlY3QgZW50cnkgYWxsb3dpbmcgdG8gc2VsZWN0IGEgc3BlY2lmaWNcbiAqIHRpbWVyRXZlbnREZWZpbnRpb25UeXBlLiBUbyBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGltZXJFdmVudERlZmluaXRpb25WYWx1ZS5cbiAqXG4gKiBAcGFyYW0gIHt0eXBlfSBwcm9wc1xuICogQHJldHVybiB7U2VsZWN0RW50cnl9XG4gKi9cbmZ1bmN0aW9uIFRpbWVyRXZlbnREZWZpbml0aW9uVHlwZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvbixcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUgfHwgJyc7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIC8vICgxKSBDaGVjayBpZiB2YWx1ZSBpcyBkaWZmZXJlbnQgdG8gY3VycmVudCB0eXBlXG4gICAgaWYgKHZhbHVlID09PSB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAoMikgQ3JlYXRlIGVtcHR5IGZvcm1hbEV4cHJlc3Npb24gZWxlbWVudFxuICAgIGNvbnN0IGZvcm1hbEV4cHJlc3Npb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46Rm9ybWFsRXhwcmVzc2lvbicsIHtcbiAgICAgIGJvZHk6IHVuZGVmaW5lZFxuICAgIH0pO1xuICAgIGZvcm1hbEV4cHJlc3Npb24uJHBhcmVudCA9IHRpbWVyRXZlbnREZWZpbml0aW9uO1xuXG4gICAgLy8gKDMpIFNldCB0aGUgdmFsdWUgZm9yIHNlbGVjdGVkIHRpbWVyRXZlbnREZWZpbml0aW9uVHlwZVxuICAgIGNvbnN0IG5ld1Byb3BzID0ge1xuICAgICAgdGltZUR1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgICB0aW1lRGF0ZTogdW5kZWZpbmVkLFxuICAgICAgdGltZUN5Y2xlOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIGlmICh2YWx1ZSAhPT0gJycpIHtcbiAgICAgIG5ld1Byb3BzW3ZhbHVlXSA9IGZvcm1hbEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgLy8gKDQpIEV4ZWN1dGUgYnVzaW5lc3NPYmplY3QgdXBkYXRlXG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiB0aW1lckV2ZW50RGVmaW5pdGlvbixcbiAgICAgIHByb3BlcnRpZXM6IG5ld1Byb3BzXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldE9wdGlvbnMgPSBlbGVtZW50ID0+IHtcbiAgICByZXR1cm4gW3tcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJzxub25lPicpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICd0aW1lRGF0ZScsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdEYXRlJylcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogJ3RpbWVEdXJhdGlvbicsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdEdXJhdGlvbicpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICd0aW1lQ3ljbGUnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ3ljbGUnKVxuICAgIH1dO1xuICB9O1xuICByZXR1cm4gU2VsZWN0RW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICd0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1R5cGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBnZXRPcHRpb25zXG4gIH0pO1xufVxuXG4vKipcbiAqIFRpbWVyRXZlbnREZWZpbml0aW9uVmFsdWUgLSBHZW5lcmljIHRleHRGaWVsZCBlbnRyeSBhbGxvd2luZyB0byBzcGVjaWZ5IHRoZVxuICogdGltZXJFdmVudERlZmludGlvblZhbHVlIGJhc2VkIG9uIHRoZSBzZXQgdGltZXJFdmVudERlZmludGlvblR5cGUuIFRvIGJlIHVzZWRcbiAqIHRvZ2V0aGVyIHdpdGggdGltZXJFdmVudERlZmluaXRpb25UeXBlLlxuICpcbiAqIEBwYXJhbSAge3R5cGV9IHByb3BzXG4gKiBAcmV0dXJuIHtUZXh0RmllbGRFbnRyeX1cbiAqL1xuZnVuY3Rpb24gVGltZXJFdmVudERlZmluaXRpb25WYWx1ZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvbixcbiAgICB0aW1lckV2ZW50RGVmaW5pdGlvblR5cGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgdGltZXJFdmVudEZvcm1hbEV4cHJlc3Npb24gPSB0aW1lckV2ZW50RGVmaW5pdGlvbi5nZXQodGltZXJFdmVudERlZmluaXRpb25UeXBlKTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRpbWVyRXZlbnRGb3JtYWxFeHByZXNzaW9uICYmIHRpbWVyRXZlbnRGb3JtYWxFeHByZXNzaW9uLmdldCgnYm9keScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHRpbWVyRXZlbnRGb3JtYWxFeHByZXNzaW9uLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBib2R5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICd0aW1lckV2ZW50RGVmaW5pdGlvblZhbHVlJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWYWx1ZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlLFxuICAgIHRvb2x0aXA6IGdldFRpbWVyRXZlbnREZWZpbml0aW9uVmFsdWVEZXNjcmlwdGlvbih0aW1lckV2ZW50RGVmaW5pdGlvblR5cGUsIHRyYW5zbGF0ZSlcbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRUaW1lckV2ZW50RGVmaW5pdGlvblZhbHVlRGVzY3JpcHRpb24odGltZXJEZWZpbml0aW9uVHlwZSwgdHJhbnNsYXRlKSB7XG4gIHN3aXRjaCAodGltZXJEZWZpbml0aW9uVHlwZSkge1xuICAgIGNhc2UgJ3RpbWVEYXRlJzpcbiAgICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFtqc3goXCJwXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdBIHNwZWNpZmljIHBvaW50IGluIHRpbWUgZGVmaW5lZCBhcyBJU08gODYwMSBjb21iaW5lZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uLicpXG4gICAgICAgIH0pLCBqc3hzKFwidWxcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiBbanN4cyhcImxpXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIjIwMTktMTAtMDFUMTI6MDA6MDBaXCJcbiAgICAgICAgICAgIH0pLCBcIiAtIFwiLCB0cmFuc2xhdGUoJ1VUQyB0aW1lJyldXG4gICAgICAgICAgfSksIGpzeHMoXCJsaVwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2pzeChcImNvZGVcIiwge1xuICAgICAgICAgICAgICBjaGlsZHJlbjogXCIyMDE5LTEwLTAyVDA4OjA5OjQwKzAyOjAwXCJcbiAgICAgICAgICAgIH0pLCBcIiAtIFwiLCB0cmFuc2xhdGUoJ1VUQyBwbHVzIDIgaG91cnMgem9uZSBvZmZzZXQnKV1cbiAgICAgICAgICB9KV1cbiAgICAgICAgfSksIGpzeChcImFcIiwge1xuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEub3JnL21hbnVhbC9sYXRlc3QvcmVmZXJlbmNlL2JwbW4yMC9ldmVudHMvdGltZXItZXZlbnRzLyN0aW1lLWRhdGVcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdEb2N1bWVudGF0aW9uOiBUaW1lciBldmVudHMnKVxuICAgICAgICB9KV1cbiAgICAgIH0pO1xuICAgIGNhc2UgJ3RpbWVDeWNsZSc6XG4gICAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbanN4KFwicFwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnQSBjeWNsZSBkZWZpbmVkIGFzIElTTyA4NjAxIHJlcGVhdGluZyBpbnRlcnZhbHMgZm9ybWF0LCBvciBhIGNyb24gZXhwcmVzc2lvbi4nKVxuICAgICAgICB9KSwganN4cyhcInVsXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogW2pzeHMoXCJsaVwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2pzeChcImNvZGVcIiwge1xuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJSNS9QVDEwU1wiXG4gICAgICAgICAgICB9KSwgXCIgLSBcIiwgdHJhbnNsYXRlKCdldmVyeSAxMCBzZWNvbmRzLCB1cCB0byA1IHRpbWVzJyldXG4gICAgICAgICAgfSksIGpzeHMoXCJsaVwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2pzeChcImNvZGVcIiwge1xuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJSL1AxRFwiXG4gICAgICAgICAgICB9KSwgXCIgLSBcIiwgdHJhbnNsYXRlKCdldmVyeSBkYXksIGluZmluaXRlbHknKV1cbiAgICAgICAgICB9KSwganN4cyhcImxpXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIjAgMCA5LTE3ICogKiBNT04tRlJJXCJcbiAgICAgICAgICAgIH0pLCBcIiAtIFwiLCB0cmFuc2xhdGUoJ2V2ZXJ5IGhvdXIgb24gdGhlIGhvdXIgZnJvbSA5LTUgcC5tLiBVVEMgTW9uZGF5LUZyaWRheScpXVxuICAgICAgICAgIH0pXVxuICAgICAgICB9KSwganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5vcmcvbWFudWFsL2xhdGVzdC9yZWZlcmVuY2UvYnBtbjIwL2V2ZW50cy90aW1lci1ldmVudHMvI3RpbWUtY3ljbGVcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdEb2N1bWVudGF0aW9uOiBUaW1lciBldmVudHMnKVxuICAgICAgICB9KV1cbiAgICAgIH0pO1xuICAgIGNhc2UgJ3RpbWVEdXJhdGlvbic6XG4gICAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbanN4KFwicFwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnQSB0aW1lIGR1cmF0aW9uIGRlZmluZWQgYXMgSVNPIDg2MDEgZHVyYXRpb25zIGZvcm1hdC4nKVxuICAgICAgICB9KSwganN4cyhcInVsXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogW2pzeHMoXCJsaVwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2pzeChcImNvZGVcIiwge1xuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJQVDE1U1wiXG4gICAgICAgICAgICB9KSwgXCIgLSBcIiwgdHJhbnNsYXRlKCcxNSBzZWNvbmRzJyldXG4gICAgICAgICAgfSksIGpzeHMoXCJsaVwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2pzeChcImNvZGVcIiwge1xuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJQVDFIMzBNXCJcbiAgICAgICAgICAgIH0pLCBcIiAtIFwiLCB0cmFuc2xhdGUoJzEgaG91ciBhbmQgMzAgbWludXRlcycpXVxuICAgICAgICAgIH0pLCBqc3hzKFwibGlcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFwiUDE0RFwiXG4gICAgICAgICAgICB9KSwgXCIgLSBcIiwgdHJhbnNsYXRlKCcxNCBkYXlzJyldXG4gICAgICAgICAgfSldXG4gICAgICAgIH0pLCBqc3goXCJhXCIsIHtcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZG9jcy5jYW11bmRhLm9yZy9tYW51YWwvbGF0ZXN0L3JlZmVyZW5jZS9icG1uMjAvZXZlbnRzL3RpbWVyLWV2ZW50cy8jdGltZS1kdXJhdGlvblwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0RvY3VtZW50YXRpb246IFRpbWVyIGV2ZW50cycpXG4gICAgICAgIH0pXVxuICAgICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzVGltZXJTdXBwb3J0ZWRPbkxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIHJldHVybiBsaXN0ZW5lciAmJiBpcyhsaXN0ZW5lciwgJ2NhbXVuZGE6VGFza0xpc3RlbmVyJykgJiYgZ2V0VGltZXJFdmVudERlZmluaXRpb24obGlzdGVuZXIpO1xufVxuZnVuY3Rpb24gZ2V0SWQoaWRQcmVmaXgsIGlkKSB7XG4gIHJldHVybiBpZFByZWZpeCA/IGlkUHJlZml4ICsgaWQgOiBpZDtcbn1cblxuY29uc3QgTElTVEVORVJfQUxMT1dFRF9UWVBFUyA9IFsnYnBtbjpBY3Rpdml0eScsICdicG1uOkV2ZW50JywgJ2JwbW46R2F0ZXdheScsICdicG1uOlNlcXVlbmNlRmxvdycsICdicG1uOlByb2Nlc3MnLCAnYnBtbjpQYXJ0aWNpcGFudCddO1xuY29uc3QgU0NSSVBUX1BST1BTID0ge1xuICAnc2NyaXB0JzogdW5kZWZpbmVkLFxuICAncmVzb3VyY2UnOiB1bmRlZmluZWQsXG4gICdzY3JpcHRGb3JtYXQnOiB1bmRlZmluZWRcbn07XG5jb25zdCBDTEFTU19QUk9QUyA9IHtcbiAgJ2NsYXNzJzogdW5kZWZpbmVkXG59O1xuY29uc3QgRVhQUkVTU0lPTl9QUk9QUyA9IHtcbiAgJ2V4cHJlc3Npb24nOiB1bmRlZmluZWRcbn07XG5jb25zdCBERUxFR0FURV9FWFBSRVNTSU9OX1BST1BTID0ge1xuICAnZGVsZWdhdGVFeHByZXNzaW9uJzogdW5kZWZpbmVkXG59O1xuY29uc3QgREVGQVVMVF9QUk9QUyA9IHtcbiAgLi4uU0NSSVBUX1BST1BTLFxuICAuLi5DTEFTU19QUk9QUyxcbiAgLi4uRVhQUkVTU0lPTl9QUk9QUyxcbiAgLi4uREVMRUdBVEVfRVhQUkVTU0lPTl9QUk9QU1xufTtcbmNvbnN0IERFRkFVTFRfRVZFTlRfUFJPUFMgPSB7XG4gICdldmVudERlZmluaXRpb25zJzogdW5kZWZpbmVkLFxuICAnZXZlbnQnOiB1bmRlZmluZWRcbn07XG5jb25zdCBJTVBMRU1FTlRBVElPTl9UWVBFX1RPX0xBQkVMID0ge1xuICBjbGFzczogJ0phdmEgY2xhc3MnLFxuICBleHByZXNzaW9uOiAnRXhwcmVzc2lvbicsXG4gIGRlbGVnYXRlRXhwcmVzc2lvbjogJ0RlbGVnYXRlIGV4cHJlc3Npb24nLFxuICBzY3JpcHQ6ICdTY3JpcHQnXG59O1xuY29uc3QgRVZFTlRfVE9fTEFCRUwgPSB7XG4gIHN0YXJ0OiAnU3RhcnQnLFxuICBlbmQ6ICdFbmQnLFxuICB0YWtlOiAnVGFrZScsXG4gIGNyZWF0ZTogJ0NyZWF0ZScsXG4gIGFzc2lnbm1lbnQ6ICdBc3NpZ25tZW50JyxcbiAgY29tcGxldGU6ICdDb21wbGV0ZScsXG4gIGRlbGV0ZTogJ0RlbGV0ZScsXG4gIHVwZGF0ZTogJ1VwZGF0ZScsXG4gIHRpbWVvdXQ6ICdUaW1lb3V0J1xufTtcblxuLyoqXG4gKiBDZi4gaHR0cHM6Ly9kb2NzLmNhbXVuZGEub3JnL21hbnVhbC9sYXRlc3QvdXNlci1ndWlkZS9wcm9jZXNzLWVuZ2luZS9kZWxlZ2F0aW9uLWNvZGUvI2V4ZWN1dGlvbi1saXN0ZW5lclxuICovXG5mdW5jdGlvbiBFeGVjdXRpb25MaXN0ZW5lclByb3BzKHtcbiAgZWxlbWVudCxcbiAgaW5qZWN0b3Jcbn0pIHtcbiAgaWYgKCFpc0FueShlbGVtZW50LCBMSVNURU5FUl9BTExPV0VEX1RZUEVTKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBicG1uRmFjdG9yeSA9IGluamVjdG9yLmdldCgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSBpbmplY3Rvci5nZXQoJ2NvbW1hbmRTdGFjaycpO1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiAhZWxlbWVudC5idXNpbmVzc09iamVjdC5wcm9jZXNzUmVmKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0TGlzdGVuZXJzQ29udGFpbmVyKGVsZW1lbnQpO1xuICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyJyk7XG4gIHJldHVybiB7XG4gICAgaXRlbXM6IGxpc3RlbmVycy5tYXAoKGxpc3RlbmVyLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBgJHtlbGVtZW50LmlkfS1leGVjdXRpb25MaXN0ZW5lci0ke2luZGV4fWA7XG5cbiAgICAgIC8vIEBUT0RPKGJhcm1hYyk6IEZpbmQgYSB3YXkgdG8gcGFzcyB0cmFuc2xhdGUgZm9yIGludGVybmF0aW9uYWxpemVkIGxhYmVsLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGxhYmVsOiBnZXRMaXN0ZW5lckxhYmVsKGxpc3RlbmVyKSxcbiAgICAgICAgZW50cmllczogRXhlY3V0aW9uTGlzdGVuZXIoe1xuICAgICAgICAgIGlkUHJlZml4OiBpZCxcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIGxpc3RlbmVyXG4gICAgICAgIH0pLFxuICAgICAgICBhdXRvRm9jdXNFbnRyeTogaWQgKyAnLWphdmFDbGFzcycsXG4gICAgICAgIHJlbW92ZTogcmVtb3ZlTGlzdGVuZXJGYWN0b3J5KHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIGxpc3RlbmVyLFxuICAgICAgICAgIGNvbW1hbmRTdGFja1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9KSxcbiAgICBhZGQ6IGFkZEV4ZWN1dGlvbkxpc3RlbmVyRmFjdG9yeSh7XG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgIGVsZW1lbnRcbiAgICB9KVxuICB9O1xufVxuZnVuY3Rpb24gRXhlY3V0aW9uTGlzdGVuZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgbGlzdGVuZXJcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3tcbiAgICBpZDogYCR7aWRQcmVmaXh9LWV2ZW50VHlwZWAsXG4gICAgY29tcG9uZW50OiBFdmVudFR5cGUsXG4gICAgbGlzdGVuZXJcbiAgfSwge1xuICAgIGlkOiBgJHtpZFByZWZpeH0tbGlzdGVuZXJUeXBlYCxcbiAgICBjb21wb25lbnQ6IExpc3RlbmVyVHlwZSxcbiAgICBsaXN0ZW5lclxuICB9LCAuLi5JbXBsZW1lbnRhdGlvbkRldGFpbHMoe1xuICAgIGlkUHJlZml4LFxuICAgIGVsZW1lbnQsXG4gICAgbGlzdGVuZXJcbiAgfSksIHtcbiAgICBpZDogYCR7aWRQcmVmaXh9LWZpZWxkc2AsXG4gICAgY29tcG9uZW50OiBGaWVsZHMsXG4gICAgbGlzdGVuZXJcbiAgfV07XG59XG5mdW5jdGlvbiBUYXNrTGlzdGVuZXJQcm9wcyh7XG4gIGVsZW1lbnQsXG4gIGluamVjdG9yXG59KSB7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46VXNlclRhc2snKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBicG1uRmFjdG9yeSA9IGluamVjdG9yLmdldCgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSBpbmplY3Rvci5nZXQoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldExpc3RlbmVyc0NvbnRhaW5lcihlbGVtZW50KTtcbiAgY29uc3QgbGlzdGVuZXJzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpUYXNrTGlzdGVuZXInKTtcbiAgcmV0dXJuIHtcbiAgICBpdGVtczogbGlzdGVuZXJzLm1hcCgobGlzdGVuZXIsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGAke2VsZW1lbnQuaWR9LXRhc2tMaXN0ZW5lci0ke2luZGV4fWA7XG5cbiAgICAgIC8vIEBUT0RPKGJhcm1hYyk6IEZpbmQgYSB3YXkgdG8gcGFzcyB0cmFuc2xhdGUgZm9yIGludGVybmF0aW9uYWxpemVkIGxhYmVsLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGxhYmVsOiBnZXRMaXN0ZW5lckxhYmVsKGxpc3RlbmVyKSxcbiAgICAgICAgZW50cmllczogVGFza0xpc3RlbmVyKHtcbiAgICAgICAgICBpZFByZWZpeDogaWQsXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICB9KSxcbiAgICAgICAgYXV0b0ZvY3VzRW50cnk6IGlkICsgJy1saXN0ZW5lcklkJyxcbiAgICAgICAgcmVtb3ZlOiByZW1vdmVMaXN0ZW5lckZhY3Rvcnkoe1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgY29tbWFuZFN0YWNrXG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH0pLFxuICAgIGFkZDogYWRkVGFza0xpc3RlbmVyRmFjdG9yeSh7XG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayxcbiAgICAgIGVsZW1lbnRcbiAgICB9KVxuICB9O1xufVxuZnVuY3Rpb24gVGFza0xpc3RlbmVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIGxpc3RlbmVyXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFt7XG4gICAgaWQ6IGAke2lkUHJlZml4fS1ldmVudFR5cGVgLFxuICAgIGNvbXBvbmVudDogRXZlbnRUeXBlLFxuICAgIGxpc3RlbmVyXG4gIH0sIHtcbiAgICBpZDogYCR7aWRQcmVmaXh9LWxpc3RlbmVySWRgLFxuICAgIGNvbXBvbmVudDogTGlzdGVuZXJJZCxcbiAgICBsaXN0ZW5lclxuICB9LCB7XG4gICAgaWQ6IGAke2lkUHJlZml4fS1saXN0ZW5lclR5cGVgLFxuICAgIGNvbXBvbmVudDogTGlzdGVuZXJUeXBlLFxuICAgIGxpc3RlbmVyXG4gIH0sIC4uLkltcGxlbWVudGF0aW9uRGV0YWlscyh7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBsaXN0ZW5lclxuICB9KSwgLi4uRXZlbnRUeXBlRGV0YWlscyh7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBsaXN0ZW5lclxuICB9KSwge1xuICAgIGlkOiBgJHtpZFByZWZpeH0tZmllbGRzYCxcbiAgICBjb21wb25lbnQ6IEZpZWxkcyxcbiAgICBsaXN0ZW5lclxuICB9XTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyRmFjdG9yeSh7XG4gIGVsZW1lbnQsXG4gIGxpc3RlbmVyLFxuICBjb21tYW5kU3RhY2tcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgZ2V0TGlzdGVuZXJzQ29udGFpbmVyKGVsZW1lbnQpLCBsaXN0ZW5lciwgY29tbWFuZFN0YWNrKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIEV2ZW50VHlwZSh7XG4gIGlkLFxuICBlbGVtZW50LFxuICBsaXN0ZW5lclxufSkge1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmdldCgnZXZlbnQnKTtcbiAgfVxuICBmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBnZXREZWZhdWx0RXZlbnRUeXBlUHJvcGVydGllcyh2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogbGlzdGVuZXIsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0T3B0aW9ucygpIHtcbiAgICBpZiAoaXMobGlzdGVuZXIsICdjYW11bmRhOlRhc2tMaXN0ZW5lcicpKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgdmFsdWU6ICdjcmVhdGUnLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdjcmVhdGUnKVxuICAgICAgfSwge1xuICAgICAgICB2YWx1ZTogJ2Fzc2lnbm1lbnQnLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdhc3NpZ25tZW50JylcbiAgICAgIH0sIHtcbiAgICAgICAgdmFsdWU6ICdjb21wbGV0ZScsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ2NvbXBsZXRlJylcbiAgICAgIH0sIHtcbiAgICAgICAgdmFsdWU6ICdkZWxldGUnLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKCdkZWxldGUnKVxuICAgICAgfSwge1xuICAgICAgICB2YWx1ZTogJ3VwZGF0ZScsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ3VwZGF0ZScpXG4gICAgICB9LCB7XG4gICAgICAgIHZhbHVlOiAndGltZW91dCcsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ3RpbWVvdXQnKVxuICAgICAgfV07XG4gICAgfVxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIHZhbHVlOiAndGFrZScsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ3Rha2UnKVxuICAgICAgfV07XG4gICAgfVxuICAgIHJldHVybiBbe1xuICAgICAgdmFsdWU6ICdzdGFydCcsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdzdGFydCcpXG4gICAgfSwge1xuICAgICAgdmFsdWU6ICdlbmQnLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZSgnZW5kJylcbiAgICB9XTtcbiAgfVxuICByZXR1cm4ganN4KFNlbGVjdEVudHJ5LCB7XG4gICAgaWQ6IGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V2ZW50IHR5cGUnKSxcbiAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgIGdldE9wdGlvbnM6IGdldE9wdGlvbnNcbiAgfSk7XG59XG5mdW5jdGlvbiBMaXN0ZW5lcklkKHtcbiAgaWQsXG4gIGVsZW1lbnQsXG4gIGxpc3RlbmVyXG59KSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGxldCBvcHRpb25zID0ge1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6IGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0xpc3RlbmVyIElEJyksXG4gICAgZGVib3VuY2UsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWQsXG4gICAgc2V0VmFsdWU6IHZhbHVlID0+IHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGxpc3RlbmVyLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgJ2NhbXVuZGE6aWQnOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldFZhbHVlOiAoKSA9PiB7XG4gICAgICByZXR1cm4gbGlzdGVuZXIuZ2V0KCdjYW11bmRhOmlkJyk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkob3B0aW9ucyk7XG59XG5mdW5jdGlvbiBMaXN0ZW5lclR5cGUoe1xuICBpZCxcbiAgZWxlbWVudCxcbiAgbGlzdGVuZXJcbn0pIHtcbiAgY29uc3QgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpO1xuICBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TGlzdGVuZXJUeXBlKGxpc3RlbmVyKTtcbiAgfVxuICBmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBnZXREZWZhdWx0SW1wbGVtZW50YXRpb25Qcm9wZXJ0aWVzKHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBsaXN0ZW5lciwgcHJvcGVydGllcyk7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0TGlzdGVuZXJUeXBlT3B0aW9ucyh0cmFuc2xhdGUpO1xuICB9XG4gIHJldHVybiBqc3goU2VsZWN0RW50cnksIHtcbiAgICBpZDogaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTGlzdGVuZXIgdHlwZScpLFxuICAgIGdldFZhbHVlOiBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZTogc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uczogZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIEltcGxlbWVudGF0aW9uRGV0YWlscyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgZWxlbWVudCxcbiAgICBsaXN0ZW5lclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHR5cGUgPSBnZXRMaXN0ZW5lclR5cGUobGlzdGVuZXIpO1xuICBpZiAodHlwZSA9PT0gJ2NsYXNzJykge1xuICAgIHJldHVybiBbe1xuICAgICAgaWQ6IGdldFByZWZpeGVkSWQoaWRQcmVmaXgsICdqYXZhQ2xhc3MnKSxcbiAgICAgIGNvbXBvbmVudDogSmF2YUNsYXNzLFxuICAgICAgYnVzaW5lc3NPYmplY3Q6IGxpc3RlbmVyXG4gICAgfV07XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIFt7XG4gICAgICBpZDogZ2V0UHJlZml4ZWRJZChpZFByZWZpeCwgJ2V4cHJlc3Npb24nKSxcbiAgICAgIGNvbXBvbmVudDogRXhwcmVzc2lvbixcbiAgICAgIGJ1c2luZXNzT2JqZWN0OiBsaXN0ZW5lclxuICAgIH1dO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkZWxlZ2F0ZUV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIFt7XG4gICAgICBpZDogZ2V0UHJlZml4ZWRJZChpZFByZWZpeCwgJ2RlbGVnYXRlRXhwcmVzc2lvbicpLFxuICAgICAgY29tcG9uZW50OiBEZWxlZ2F0ZUV4cHJlc3Npb24sXG4gICAgICBidXNpbmVzc09iamVjdDogbGlzdGVuZXJcbiAgICB9XTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgIHJldHVybiBTY3JpcHRQcm9wcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgc2NyaXB0OiBsaXN0ZW5lci5nZXQoJ3NjcmlwdCcpLFxuICAgICAgcHJlZml4OiBpZFByZWZpeFxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlblxuICByZXR1cm4gW107XG59XG5mdW5jdGlvbiBFdmVudFR5cGVEZXRhaWxzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpZFByZWZpeCxcbiAgICBlbGVtZW50LFxuICAgIGxpc3RlbmVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdHlwZSA9IGxpc3RlbmVyLmdldCgnZXZlbnQnKTtcbiAgaWYgKHR5cGUgPT09ICd0aW1lb3V0Jykge1xuICAgIHJldHVybiBUaW1lclByb3BzKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIHRpbWVyRXZlbnREZWZpbml0aW9uOiBnZXRUaW1lckV2ZW50RGVmaW5pdGlvbiQxKGxpc3RlbmVyKSxcbiAgICAgIGlkUHJlZml4OiBpZFByZWZpeFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBbXTtcbn1cbmZ1bmN0aW9uIEZpZWxkKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiBpZFByZWZpeCxcbiAgICBpbmRleCxcbiAgICBpdGVtOiBmaWVsZCxcbiAgICBvcGVuXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZmllbGRJZCA9IGAke2lkUHJlZml4fS1maWVsZC0ke2luZGV4fWA7XG4gIHJldHVybiBqc3goQ29sbGFwc2libGVFbnRyeSwge1xuICAgIGlkOiBmaWVsZElkLFxuICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgZW50cmllczogRmllbGRJbmplY3Rpb24oe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGZpZWxkLFxuICAgICAgaWRQcmVmaXg6IGZpZWxkSWRcbiAgICB9KSxcbiAgICBsYWJlbDogZmllbGQuZ2V0KCduYW1lJykgfHwgJzxlbXB0eT4nLFxuICAgIG9wZW46IG9wZW5cbiAgfSk7XG59XG5mdW5jdGlvbiBGaWVsZHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGVsZW1lbnQsXG4gICAgbGlzdGVuZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZmllbGRzID0gbGlzdGVuZXIuZ2V0KCdmaWVsZHMnKTtcbiAgZnVuY3Rpb24gYWRkRmllbGQoKSB7XG4gICAgY29uc3QgZmllbGQgPSBjcmVhdGVFbGVtZW50KCdjYW11bmRhOkZpZWxkJywge30sIGxpc3RlbmVyLCBicG1uRmFjdG9yeSk7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBsaXN0ZW5lcixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZmllbGRzOiBbLi4ubGlzdGVuZXIuZ2V0KCdmaWVsZHMnKSwgZmllbGRdXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlRmllbGQoZmllbGQpIHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGxpc3RlbmVyLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBmaWVsZHM6IHdpdGhvdXQobGlzdGVuZXIuZ2V0KCdmaWVsZHMnKSwgZmllbGQpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGpzeChMaXN0RW50cnksIHtcbiAgICBpZDogaWQsXG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGaWVsZCBpbmplY3Rpb24nKSxcbiAgICBpdGVtczogZmllbGRzLFxuICAgIGNvbXBvbmVudDogRmllbGQsXG4gICAgb25BZGQ6IGFkZEZpZWxkLFxuICAgIG9uUmVtb3ZlOiByZW1vdmVGaWVsZCxcbiAgICBhdXRvRm9jdXNFbnRyeTogYFtkYXRhLWVudHJ5LWlkPVwiJHtpZH0tZmllbGQtJHtmaWVsZHMubGVuZ3RoIC0gMX1cIl0gaW5wdXRgXG4gIH0pO1xufVxuZnVuY3Rpb24gYWRkTGlzdGVuZXJGYWN0b3J5KHtcbiAgYnBtbkZhY3RvcnksXG4gIGNvbW1hbmRTdGFjayxcbiAgZWxlbWVudCxcbiAgbGlzdGVuZXJHcm91cFxufSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgbGlzdGVuZXIgPSBicG1uRmFjdG9yeS5jcmVhdGUobGlzdGVuZXJHcm91cCwge1xuICAgICAgZXZlbnQ6IGdldERlZmF1bHRFdmVudChlbGVtZW50LCBsaXN0ZW5lckdyb3VwKSxcbiAgICAgIGNsYXNzOiAnJ1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0TGlzdGVuZXJzQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgIGFkZEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCBsaXN0ZW5lciwgYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjayk7XG4gIH07XG59XG5mdW5jdGlvbiBhZGRUYXNrTGlzdGVuZXJGYWN0b3J5KHByb3BzKSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lckZhY3Rvcnkoe1xuICAgIC4uLnByb3BzLFxuICAgIGxpc3RlbmVyR3JvdXA6ICdjYW11bmRhOlRhc2tMaXN0ZW5lcidcbiAgfSk7XG59XG5mdW5jdGlvbiBhZGRFeGVjdXRpb25MaXN0ZW5lckZhY3RvcnkocHJvcHMpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyRmFjdG9yeSh7XG4gICAgLi4ucHJvcHMsXG4gICAgbGlzdGVuZXJHcm91cDogJ2NhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXInXG4gIH0pO1xufVxuXG4vLyBoZWxwZXJcblxuLyoqXG4gKiBHZXQgYSByZWFkYWJsZSBsYWJlbCBmb3IgYSBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGxpc3RlbmVyXG4gKiBAcGFyYW0ge3N0cmluZyA9PiBzdHJpbmd9IFt0cmFuc2xhdGVdXG4gKi9cbmZ1bmN0aW9uIGdldExpc3RlbmVyTGFiZWwobGlzdGVuZXIsIHRyYW5zbGF0ZSA9IHZhbHVlID0+IHZhbHVlKSB7XG4gIGNvbnN0IGV2ZW50ID0gbGlzdGVuZXIuZ2V0KCdldmVudCcpO1xuICBjb25zdCBpbXBsZW1lbnRhdGlvblR5cGUgPSBnZXRMaXN0ZW5lclR5cGUobGlzdGVuZXIpO1xuICByZXR1cm4gYCR7dHJhbnNsYXRlKEVWRU5UX1RPX0xBQkVMW2V2ZW50XSl9OiAke3RyYW5zbGF0ZShJTVBMRU1FTlRBVElPTl9UWVBFX1RPX0xBQkVMW2ltcGxlbWVudGF0aW9uVHlwZV0pfWA7XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lclR5cGVPcHRpb25zKHRyYW5zbGF0ZSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoSU1QTEVNRU5UQVRJT05fVFlQRV9UT19MQUJFTCkubWFwKChbdmFsdWUsIGxhYmVsXSkgPT4gKHtcbiAgICB2YWx1ZSxcbiAgICBsYWJlbDogdHJhbnNsYXRlKGxhYmVsKVxuICB9KSk7XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lclR5cGUobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGdldEltcGxlbWVudGF0aW9uVHlwZShsaXN0ZW5lcik7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0RXZlbnQoZWxlbWVudCwgbGlzdGVuZXJHcm91cCkge1xuICBpZiAobGlzdGVuZXJHcm91cCA9PT0gJ2NhbXVuZGE6VGFza0xpc3RlbmVyJykgcmV0dXJuICdjcmVhdGUnO1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46U2VxdWVuY2VGbG93JykgPyAndGFrZScgOiAnc3RhcnQnO1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEltcGxlbWVudGF0aW9uUHJvcGVydGllcyh0eXBlLCBicG1uRmFjdG9yeSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdjbGFzcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ERUZBVUxUX1BST1BTLFxuICAgICAgICAnY2xhc3MnOiAnJ1xuICAgICAgfTtcbiAgICBjYXNlICdleHByZXNzaW9uJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLkRFRkFVTFRfUFJPUFMsXG4gICAgICAgICdleHByZXNzaW9uJzogJydcbiAgICAgIH07XG4gICAgY2FzZSAnZGVsZWdhdGVFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLkRFRkFVTFRfUFJPUFMsXG4gICAgICAgICdkZWxlZ2F0ZUV4cHJlc3Npb24nOiAnJ1xuICAgICAgfTtcbiAgICBjYXNlICdzY3JpcHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uREVGQVVMVF9QUk9QUyxcbiAgICAgICAgJ3NjcmlwdCc6IGJwbW5GYWN0b3J5LmNyZWF0ZSgnY2FtdW5kYTpTY3JpcHQnKVxuICAgICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEV2ZW50VHlwZVByb3BlcnRpZXModHlwZSwgYnBtbkZhY3RvcnkpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAndGltZW91dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ERUZBVUxUX0VWRU5UX1BST1BTLFxuICAgICAgICBldmVudERlZmluaXRpb25zOiBbYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyldLFxuICAgICAgICBldmVudDogdHlwZVxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uREVGQVVMVF9FVkVOVF9QUk9QUyxcbiAgICAgICAgZXZlbnQ6IHR5cGVcbiAgICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFByZWZpeGVkSWQocHJlZml4LCBpZCkge1xuICByZXR1cm4gYCR7cHJlZml4fS0ke2lkfWA7XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lcnNDb250YWluZXIoZWxlbWVudCkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykgfHwgYnVzaW5lc3NPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NWYXJpYWJsZXNFbnRyeShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFt2YXJpYWJsZXMsIHNldFZhcmlhYmxlc10gPSB1c2VTdGF0ZShbXSk7XG4gIHVzZUVmZmVjdChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCByb290RWxlbWVudCA9IGdldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0KTtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKGVsZW1lbnQpO1xuICAgIGNvbnN0IHJhd1ZhcmlhYmxlcyA9IGF3YWl0IGdldFZhcmlhYmxlc0ZvclNjb3BlKHNjb3BlLCByb290RWxlbWVudCk7XG4gICAgY29uc3Qgd2l0aE5hbWUgPSBwb3B1bGF0ZUVsZW1lbnROYW1lcyhzb3J0QnlOYW1lKHJhd1ZhcmlhYmxlcykpO1xuICAgIHNldFZhcmlhYmxlcyh3aXRoTmFtZSk7XG4gIH0sIFtlbGVtZW50XSk7XG4gIGlmICghdmFyaWFibGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGJ5U2NvcGUgPSBncm91cEJ5U2NvcGUodmFyaWFibGVzKTtcbiAgY29uc3QgbXVsdGlTY29wZSA9IGlzTXVsdGlTY29wZShieVNjb3BlKTtcbiAgbGV0IHZhcmlhYmxlSXRlbXMgPSBbXTtcblxuICAvLyAoMikgZ2V0IHZhcmlhYmxlcyB0byBkaXNwbGF5XG4gIGlmIChtdWx0aVNjb3BlKSB7XG4gICAgLy8gKDJhKSBtdWx0aXBsZSBzY29wZXMsIHN1YiBzY29wZXMgZmlyc3RcbiAgICAvLyBhc3N1bXB0aW9uOiB2YXJpYWJsZXMgZXh0cmFjdG9yIGZldGNoZXMgcGFyZW50IHZhcmlhYmxlcyBmaXJzdFxuICAgIGNvbnN0IHJldmVyc2VkID0gbWFwKHJldmVyc2Uoa2V5cyhieVNjb3BlKSksIHNjb3BlS2V5ID0+IGJ5U2NvcGVbc2NvcGVLZXldKTtcbiAgICB2YXJpYWJsZUl0ZW1zID0gZmxhdHRlbihyZXZlcnNlZCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gKDJiKSBzaW5nbGUgc2NvcGVcbiAgICB2YXJpYWJsZUl0ZW1zID0gdmFyaWFibGVzO1xuICB9XG4gIGNvbnN0IGl0ZW1zID0gdmFyaWFibGVJdGVtcy5tYXAoKHZhcmlhYmxlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudC5pZCArICctdmFyaWFibGUtJyArIGluZGV4O1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiB2YXJpYWJsZS5uYW1lLFxuICAgICAgZW50cmllczogWy4uLlByb2Nlc3NWYXJpYWJsZUl0ZW0oe1xuICAgICAgICBpZFByZWZpeDogaWQsXG4gICAgICAgIG11bHRpU2NvcGUsXG4gICAgICAgIHZhcmlhYmxlXG4gICAgICB9KV1cbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGpzeChMaXN0R3JvdXAsIHtcbiAgICAuLi5wcm9wcyxcbiAgICBpdGVtczogaXRlbXNcbiAgfSk7XG59XG5mdW5jdGlvbiBQcm9jZXNzVmFyaWFibGVzUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWNhbkhhdmVQcm9jZXNzVmFyaWFibGVzKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjb21wb25lbnQ6IFByb2Nlc3NWYXJpYWJsZXNFbnRyeVxuICB9O1xufVxuZnVuY3Rpb24gUHJvY2Vzc1ZhcmlhYmxlSXRlbShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgbXVsdGlTY29wZSxcbiAgICB2YXJpYWJsZVxuICB9ID0gcHJvcHM7XG4gIGxldCBlbnRyaWVzID0gW107XG4gIGlmIChtdWx0aVNjb3BlKSB7XG4gICAgZW50cmllcy5wdXNoKHtcbiAgICAgIGlkOiBpZFByZWZpeCArICctc2NvcGUnLFxuICAgICAgY29tcG9uZW50OiBTY29wZSxcbiAgICAgIGlkUHJlZml4LFxuICAgICAgdmFyaWFibGVcbiAgICB9KTtcbiAgfVxuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiBpZFByZWZpeCArICctY3JlYXRlZEluJyxcbiAgICBjb21wb25lbnQ6IENyZWF0ZWRJbixcbiAgICBpZFByZWZpeCxcbiAgICB2YXJpYWJsZVxuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5mdW5jdGlvbiBTY29wZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgdmFyaWFibGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgaWQgPSBpZFByZWZpeCArICctc2NvcGUnO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgXCJkYXRhLWVudHJ5LWlkXCI6IGlkLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWVudHJ5XCIsXG4gICAgY2hpbGRyZW46IFtqc3goXCJiXCIsIHtcbiAgICAgIHN0eWxlOiBcImZvbnQtd2VpZ2h0OiBib2xkXCIsXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1sYWJlbFwiLFxuICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnU2NvcGUnKVxuICAgIH0pLCBqc3goXCJsYWJlbFwiLCB7XG4gICAgICBpZDogcHJlZml4SWQoaWQpLFxuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtbGFiZWxcIixcbiAgICAgIGNoaWxkcmVuOiB2YXJpYWJsZS5zY29wZVxuICAgIH0pXVxuICB9KTtcbn1cbmZ1bmN0aW9uIENyZWF0ZWRJbihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWRQcmVmaXgsXG4gICAgdmFyaWFibGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgaWQgPSBpZFByZWZpeCArICctY3JlYXRlZEluJztcbiAgY29uc3Qgb3JpZ2luID0gdmFyaWFibGUub3JpZ2luLmpvaW4oJywgJyk7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBcImRhdGEtZW50cnktaWRcIjogaWQsXG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZW50cnlcIixcbiAgICBjaGlsZHJlbjogW2pzeChcImJcIiwge1xuICAgICAgc3R5bGU6IFwiZm9udC13ZWlnaHQ6IGJvbGRcIixcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWxhYmVsXCIsXG4gICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdDcmVhdGVkIGluJylcbiAgICB9KSwganN4KFwibGFiZWxcIiwge1xuICAgICAgaWQ6IHByZWZpeElkKGlkKSxcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWxhYmVsXCIsXG4gICAgICBjaGlsZHJlbjogb3JpZ2luXG4gICAgfSldXG4gIH0pO1xufVxuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjYW5IYXZlUHJvY2Vzc1ZhcmlhYmxlcyhlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBpc0FueShlbGVtZW50LCBbJ2JwbW46UHJvY2VzcycsICdicG1uOlN1YlByb2Nlc3MnXSkgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBidXNpbmVzc09iamVjdC5nZXQoJ3Byb2Nlc3NSZWYnKTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LnByb2Nlc3NSZWY7XG4gIH1cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3Q7XG4gIH1cbiAgbGV0IHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICB3aGlsZSAocGFyZW50LiRwYXJlbnQgJiYgIWlzKHBhcmVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHBhcmVudDtcbn1cbmZ1bmN0aW9uIGdldFNjb3BlKGVsZW1lbnQpIHtcbiAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gYm8ucHJvY2Vzc1JlZi5pZDtcbiAgfVxuICByZXR1cm4gYm8uaWQ7XG59XG5mdW5jdGlvbiBzb3J0QnlOYW1lKHZhcmlhYmxlcykge1xuICByZXR1cm4gc29ydEJ5KHZhcmlhYmxlcywgZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gICAgcmV0dXJuIHZhcmlhYmxlLm5hbWU7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ3JvdXBCeVNjb3BlKHZhcmlhYmxlcykge1xuICByZXR1cm4gZ3JvdXBCeSh2YXJpYWJsZXMsICdzY29wZScpO1xufVxuZnVuY3Rpb24gcG9wdWxhdGVFbGVtZW50TmFtZXModmFyaWFibGVzKSB7XG4gIGZvckVhY2godmFyaWFibGVzLCBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgICBjb25zdCBuYW1lcyA9IG1hcCh2YXJpYWJsZS5vcmlnaW4sIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5uYW1lIHx8IGVsZW1lbnQuaWQ7XG4gICAgfSk7XG4gICAgdmFyaWFibGUub3JpZ2luID0gbmFtZXM7XG4gICAgdmFyaWFibGUuc2NvcGUgPSB2YXJpYWJsZS5zY29wZS5uYW1lIHx8IHZhcmlhYmxlLnNjb3BlLmlkO1xuICB9KTtcbiAgcmV0dXJuIHZhcmlhYmxlcztcbn1cbmZ1bmN0aW9uIGlzTXVsdGlTY29wZShzY29wZWRWYXJpYWJsZXMpIHtcbiAgcmV0dXJuIGtleXMoc2NvcGVkVmFyaWFibGVzKS5sZW5ndGggPiAxO1xufVxuZnVuY3Rpb24gcmV2ZXJzZShhcnJheSkge1xuICByZXR1cm4gbWFwKGFycmF5LCBmdW5jdGlvbiAoYSwgaSkge1xuICAgIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxIC0gaV07XG4gIH0pO1xufVxuZnVuY3Rpb24gcHJlZml4SWQoaWQpIHtcbiAgcmV0dXJuIGBiaW8tcHJvcGVydGllcy1wYW5lbC0ke2lkfWA7XG59XG5cbmZ1bmN0aW9uIFNjcmlwdFRhc2tQcm9wcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGlmICghaXMoZWxlbWVudCwgJ2JwbW46U2NyaXB0VGFzaycpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGVudHJpZXMgPSBbLi4uU2NyaXB0UHJvcHMoe1xuICAgIGVsZW1lbnRcbiAgfSldO1xuICBlbnRyaWVzLnB1c2goe1xuICAgIGlkOiAnc2NyaXB0UmVzdWx0VmFyaWFibGUnLFxuICAgIGNvbXBvbmVudDogUmVzdWx0VmFyaWFibGUsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfSk7XG4gIHJldHVybiBlbnRyaWVzO1xufVxuZnVuY3Rpb24gUmVzdWx0VmFyaWFibGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnJlc3VsdFZhcmlhYmxlJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOnJlc3VsdFZhcmlhYmxlJzogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnc2NyaXB0UmVzdWx0VmFyaWFibGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1Jlc3VsdCB2YXJpYWJsZScpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBUYXNrbGlzdFByb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgaXNFZGl0ZWQgPSBub2RlID0+IHtcbiAgICByZXR1cm4gbm9kZSAmJiAhbm9kZS5jaGVja2VkO1xuICB9O1xuICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSAmJiAhKGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAnaXNTdGFydGFibGVJblRhc2tsaXN0JyxcbiAgICBjb21wb25lbnQ6IFN0YXJ0YWJsZSxcbiAgICBpc0VkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIFN0YXJ0YWJsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgcHJvY2VzcyA9IGdldFByb2Nlc3MkMShlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCdjYW11bmRhOmlzU3RhcnRhYmxlSW5UYXNrbGlzdCcpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHByb2Nlc3MsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmlzU3RhcnRhYmxlSW5UYXNrbGlzdCc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBDaGVja2JveEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnaXNTdGFydGFibGVJblRhc2tsaXN0JyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTdGFydGFibGUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRQcm9jZXNzJDEoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpID8gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkgOiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5nZXQoJ3Byb2Nlc3NSZWYnKTtcbn1cblxuLyoqXG4gKiBDZi4gaHR0cHM6Ly9kb2NzLmNhbXVuZGEub3JnL21hbnVhbC9sYXRlc3QvcmVmZXJlbmNlL2JwbW4yMC90YXNrcy91c2VyLXRhc2svXG4gKi9cbmZ1bmN0aW9uIFVzZXJBc3NpZ25tZW50UHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzKGVsZW1lbnQsICdjYW11bmRhOkFzc2lnbmFibGUnKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW3tcbiAgICBpZDogJ2Fzc2lnbmVlJyxcbiAgICBjb21wb25lbnQ6IEFzc2lnbmVlLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ2NhbmRpZGF0ZUdyb3VwcycsXG4gICAgY29tcG9uZW50OiBDYW5kaWRhdGVHcm91cHMsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAnY2FuZGlkYXRlVXNlcnMnLFxuICAgIGNvbXBvbmVudDogQ2FuZGlkYXRlVXNlcnMsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAnZHVlRGF0ZScsXG4gICAgY29tcG9uZW50OiBEdWVEYXRlLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH0sIHtcbiAgICBpZDogJ2ZvbGxvd1VwRGF0ZScsXG4gICAgY29tcG9uZW50OiBGb2xsb3dVcERhdGUsXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfSwge1xuICAgIGlkOiAncHJpb3JpdHknLFxuICAgIGNvbXBvbmVudDogUHJpb3JpdHksXG4gICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWRcbiAgfV07XG59XG5mdW5jdGlvbiBBc3NpZ25lZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6YXNzaWduZWUnKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6YXNzaWduZWUnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdhc3NpZ25lZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQXNzaWduZWUnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIENhbmRpZGF0ZVVzZXJzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKTtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpjYW5kaWRhdGVVc2VycycpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpjYW5kaWRhdGVVc2Vycyc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2NhbmRpZGF0ZVVzZXJzJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDYW5kaWRhdGUgdXNlcnMnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cbmZ1bmN0aW9uIENhbmRpZGF0ZUdyb3Vwcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6Y2FuZGlkYXRlR3JvdXBzJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdjYW11bmRhOmNhbmRpZGF0ZUdyb3Vwcyc6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZDogJ2NhbmRpZGF0ZUdyb3VwcycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIGdyb3VwcycpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlXG4gIH0pO1xufVxuZnVuY3Rpb24gRHVlRGF0ZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6ZHVlRGF0ZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpkdWVEYXRlJzogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnZHVlRGF0ZScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRHVlIGRhdGUnKSxcbiAgICBkZXNjcmlwdGlvbjogdHJhbnNsYXRlKCdUaGUgZHVlIGRhdGUgYXMgYW4gRUwgZXhwcmVzc2lvbiAoZS5nLiAke3NvbWVEYXRlfSkgb3IgYW4gSVNPIGRhdGUgKGUuZy4gMjAxNS0wNi0yNlQwOTo1NDowMCkuJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBGb2xsb3dVcERhdGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmZvbGxvd1VwRGF0ZScpO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTpmb2xsb3dVcERhdGUnOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdmb2xsb3dVcERhdGUnLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ZvbGxvdyB1cCBkYXRlJyksXG4gICAgZGVzY3JpcHRpb246IHRyYW5zbGF0ZSgnVGhlIGZvbGxvdyB1cCBkYXRlIGFzIGFuIEVMIGV4cHJlc3Npb24gKGUuZy4gJHtzb21lRGF0ZX0pIG9yIGFuICcgKyAnSVNPIGRhdGUgKGUuZy4gMjAxNS0wNi0yNlQwOTo1NDowMCkuJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2VcbiAgfSk7XG59XG5mdW5jdGlvbiBQcmlvcml0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6cHJpb3JpdHknKTtcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NhbXVuZGE6cHJpb3JpdHknOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdwcmlvcml0eScsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJpb3JpdHknKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gVmVyc2lvblRhZ1Byb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgJiYgIShpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW3tcbiAgICBpZDogJ3ZlcnNpb25UYWcnLFxuICAgIGNvbXBvbmVudDogVmVyc2lvblRhZyxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIFZlcnNpb25UYWcocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBwcm9jZXNzID0gZ2V0UHJvY2VzcyhlbGVtZW50KTtcbiAgY29uc3QgZ2V0VmFsdWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCdjYW11bmRhOnZlcnNpb25UYWcnKSB8fCAnJztcbiAgfTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBwcm9jZXNzLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnY2FtdW5kYTp2ZXJzaW9uVGFnJzogdmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAndmVyc2lvblRhZycsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVmVyc2lvbiB0YWcnKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICBkZWJvdW5jZVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSA/IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIDogZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuZ2V0KCdwcm9jZXNzUmVmJyk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBJZFByb3BzKCkge1xuICByZXR1cm4gW3tcbiAgICBpZDogJ2lkJyxcbiAgICBjb21wb25lbnQ6IElkLFxuICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkXG4gIH1dO1xufVxuZnVuY3Rpb24gSWQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBtb2RlbGluZyA9IHVzZVNlcnZpY2UoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSAodmFsdWUsIGVycm9yKSA9PiB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgaWQ6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gdXNlQ2FsbGJhY2soZWxlbWVudCA9PiB7XG4gICAgcmV0dXJuIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmlkO1xuICB9LCBbZWxlbWVudF0pO1xuICBjb25zdCB2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKHZhbHVlID0+IHtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIHJldHVybiBpc0lkVmFsaWQoYnVzaW5lc3NPYmplY3QsIHZhbHVlLCB0cmFuc2xhdGUpO1xuICB9LCBbZWxlbWVudCwgdHJhbnNsYXRlXSk7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gaXMoZWxlbWVudCwgJ2JwbW46UHJvY2VzcycpID8gdHJhbnNsYXRlKCdUaGlzIG1hcHMgdG8gdGhlIHByb2Nlc3MgZGVmaW5pdGlvbiBrZXkuJykgOiBudWxsO1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGVsZW1lbnQsXG4gICAgaWQ6ICdpZCcsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZShpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpID8gJ1BhcnRpY2lwYW50IElEJyA6ICdJRCcpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlLFxuICAgIGRlYm91bmNlLFxuICAgIHZhbGlkYXRlLFxuICAgIGRlc2NyaXB0aW9uXG4gIH0pO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCdAYnBtbi1pby9wcm9wZXJ0aWVzLXBhbmVsJykuRW50cnlEZWZpbml0aW9uIH0gRW50cnlcbiAqL1xuXG4vKipcbiAqIEByZXR1cm5zIHtBcnJheTxFbnRyeT59IGVudHJpZXNcbiAqL1xuZnVuY3Rpb24gUHJvY2Vzc1Byb3BzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50XG4gIH0gPSBwcm9wcztcbiAgaWYgKCFoYXNQcm9jZXNzUmVmKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbe1xuICAgIGlkOiAncHJvY2Vzc0lkJyxcbiAgICBjb21wb25lbnQ6IFByb2Nlc3NJZCxcbiAgICBpc0VkaXRlZDogaXNUZXh0RmllbGRFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIFByb2Nlc3NJZChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0Jyk7XG4gIGNvbnN0IHByb2Nlc3MgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gcHJvY2Vzcy5nZXQoJ2lkJyk7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gKHZhbHVlLCBlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IHByb2Nlc3MsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlkOiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKHZhbHVlID0+IHtcbiAgICByZXR1cm4gaXNJZFZhbGlkKHByb2Nlc3MsIHZhbHVlLCB0cmFuc2xhdGUpO1xuICB9LCBbcHJvY2VzcywgdHJhbnNsYXRlXSk7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSA/IHRyYW5zbGF0ZSgnVGhpcyBtYXBzIHRvIHRoZSBwcm9jZXNzIGRlZmluaXRpb24ga2V5LicpIDogbnVsbDtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAncHJvY2Vzc0lkJyxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9jZXNzIElEJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2UsXG4gICAgdmFsaWRhdGUsXG4gICAgZGVzY3JpcHRpb25cbiAgfSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGhhc1Byb2Nlc3NSZWYoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LmdldCgncHJvY2Vzc1JlZicpO1xufVxuXG5jb25zdCBMT1dfUFJJT1JJVFkgPSA1MDA7XG5jb25zdCBDQU1VTkRBX1BMQVRGT1JNX0dST1VQUyA9IFtIaXN0b3J5Q2xlYW51cEdyb3VwLCBUYXNrbGlzdEdyb3VwLCBDYW5kaWRhdGVTdGFydGVyR3JvdXAsIEltcGxlbWVudGF0aW9uR3JvdXAsIEV4dGVybmFsVGFza0dyb3VwLCBQcm9jZXNzVmFyaWFibGVzR3JvdXAsIEVycm9yc0dyb3VwLCBVc2VyQXNzaWdubWVudEdyb3VwLCBGb3JtR3JvdXAsIEZvcm1EYXRhR3JvdXAsIFRhc2tMaXN0ZW5lckdyb3VwLCBTdGFydEluaXRpYXRvckdyb3VwLCBTY3JpcHRHcm91cCwgQ29uZGl0aW9uR3JvdXAsIENhbGxBY3Rpdml0eUdyb3VwLCBBc3luY2hyb25vdXNDb250aW51YXRpb25zR3JvdXAsIEpvYkV4ZWN1dGlvbkdyb3VwLCBJbk1hcHBpbmdQcm9wYWdhdGlvbkdyb3VwLCBJbk1hcHBpbmdHcm91cCwgSW5wdXRHcm91cCwgQ29ubmVjdG9ySW5wdXRHcm91cCwgT3V0TWFwcGluZ1Byb3BhZ2F0aW9uR3JvdXAsIE91dE1hcHBpbmdHcm91cCwgT3V0cHV0R3JvdXAsIENvbm5lY3Rvck91dHB1dEdyb3VwLCBFeGVjdXRpb25MaXN0ZW5lckdyb3VwLCBFeHRlbnNpb25Qcm9wZXJ0aWVzR3JvdXAsIEZpZWxkSW5qZWN0aW9uR3JvdXAsIEJ1c2luZXNzS2V5R3JvdXBdO1xuXG4vKipcbiAqIFByb3ZpZGVzIGBjYW11bmRhYCBuYW1lc3BhY2UgcHJvcGVydGllcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IEJwbW5Nb2RlbGVyIGZyb20gJ2JwbW4tanMvbGliL01vZGVsZXInO1xuICogaW1wb3J0IHtcbiAqICAgQnBtblByb3BlcnRpZXNQYW5lbE1vZHVsZSxcbiAqICAgQnBtblByb3BlcnRpZXNQcm92aWRlck1vZHVsZSxcbiAqICAgQ2FtdW5kYVBsYXRmb3JtUHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlXG4gKiB9IGZyb20gJ2JwbW4tanMtcHJvcGVydGllcy1wYW5lbCc7XG4gKlxuICogY29uc3QgbW9kZWxlciA9IG5ldyBCcG1uTW9kZWxlcih7XG4gKiAgIGNvbnRhaW5lcjogJyNjYW52YXMnLFxuICogICBwcm9wZXJ0aWVzUGFuZWw6IHtcbiAqICAgICBwYXJlbnQ6ICcjcHJvcGVydGllcydcbiAqICAgfSxcbiAqICAgYWRkaXRpb25hbE1vZHVsZXM6IFtcbiAqICAgICBCcG1uUHJvcGVydGllc1BhbmVsTW9kdWxlLFxuICogICAgIEJwbW5Qcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUsXG4gKiAgICAgQ2FtdW5kYVBsYXRmb3JtUHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlXG4gKiAgIF1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmNsYXNzIENhbXVuZGFQbGF0Zm9ybVByb3BlcnRpZXNQcm92aWRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXNQYW5lbCwgaW5qZWN0b3IpIHtcbiAgICBwcm9wZXJ0aWVzUGFuZWwucmVnaXN0ZXJQcm92aWRlcihMT1dfUFJJT1JJVFksIHRoaXMpO1xuICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gIH1cbiAgZ2V0R3JvdXBzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ3JvdXBzID0+IHtcbiAgICAgIC8vICgxKSBhZGQgQ2FtdW5kYSBQbGF0Zm9ybSBzcGVjaWZpYyBncm91cHNcbiAgICAgIGdyb3VwcyA9IGdyb3Vwcy5jb25jYXQodGhpcy5fZ2V0R3JvdXBzKGVsZW1lbnQpKTtcblxuICAgICAgLy8gKDIpIHVwZGF0ZSBleGlzdGluZyBncm91cHMgd2l0aCBDYW11bmRhIFBsYXRmb3JtIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICAgIHVwZGF0ZUdlbmVyYWxHcm91cChncm91cHMsIGVsZW1lbnQpO1xuICAgICAgdXBkYXRlRXJyb3JHcm91cChncm91cHMsIGVsZW1lbnQpO1xuICAgICAgdXBkYXRlRXNjYWxhdGlvbkdyb3VwKGdyb3VwcywgZWxlbWVudCk7XG4gICAgICB1cGRhdGVNdWx0aUluc3RhbmNlR3JvdXAoZ3JvdXBzLCBlbGVtZW50KTtcbiAgICAgIHVwZGF0ZVRpbWVyR3JvdXAoZ3JvdXBzLCBlbGVtZW50KTtcblxuICAgICAgLy8gKDMpIG1vdmUgZ3JvdXBzIGdpdmVuIHNwZWNpZmljIHByaW9yaXRpZXNcbiAgICAgIG1vdmVJbXBsZW1lbnRhdGlvbkdyb3VwKGdyb3Vwcyk7XG4gICAgICByZXR1cm4gZ3JvdXBzO1xuICAgIH07XG4gIH1cbiAgX2dldEdyb3VwcyhlbGVtZW50KSB7XG4gICAgY29uc3QgZ3JvdXBzID0gQ0FNVU5EQV9QTEFURk9STV9HUk9VUFMubWFwKGNyZWF0ZUdyb3VwID0+IGNyZWF0ZUdyb3VwKGVsZW1lbnQsIHRoaXMuX2luamVjdG9yKSk7XG5cbiAgICAvLyBjb250cmFjdDogaWYgYSBncm91cCByZXR1cm5zIG51bGwsIGl0IHNob3VsZCBub3QgYmUgZGlzcGxheWVkIGF0IGFsbFxuICAgIHJldHVybiBncm91cHMuZmlsdGVyKGdyb3VwID0+IGdyb3VwICE9PSBudWxsKTtcbiAgfVxufVxuQ2FtdW5kYVBsYXRmb3JtUHJvcGVydGllc1Byb3ZpZGVyLiRpbmplY3QgPSBbJ3Byb3BlcnRpZXNQYW5lbCcsICdpbmplY3RvciddO1xuXG4vKipcbiAqIFRoaXMgZW5zdXJlcyB0aGUgPEltcGxlbWVudGF0aW9uPiBncm91cCBhbHdheXMgbG9jYXRlcyBhZnRlciA8RG9jdW1lbnRhdGlvbj5cbiAqL1xuZnVuY3Rpb24gbW92ZUltcGxlbWVudGF0aW9uR3JvdXAoZ3JvdXBzKSB7XG4gIGNvbnN0IGRvY3VtZW50YXRpb25Hcm91cElkeCA9IGZpbmRHcm91cEluZGV4KGdyb3VwcywgJ2RvY3VtZW50YXRpb24nKTtcbiAgaWYgKGRvY3VtZW50YXRpb25Hcm91cElkeCA8IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIG1vdmVHcm91cChncm91cHMsICdDYW11bmRhUGxhdGZvcm1fX0ltcGxlbWVudGF0aW9uJywgZG9jdW1lbnRhdGlvbkdyb3VwSWR4ICsgMSk7XG59XG5mdW5jdGlvbiB1cGRhdGVHZW5lcmFsR3JvdXAoZ3JvdXBzLCBlbGVtZW50KSB7XG4gIGNvbnN0IGdlbmVyYWxHcm91cCA9IGZpbmRHcm91cChncm91cHMsICdnZW5lcmFsJyk7XG4gIGlmICghZ2VuZXJhbEdyb3VwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtcbiAgICBlbnRyaWVzXG4gIH0gPSBnZW5lcmFsR3JvdXA7XG5cbiAgLy8gKDEpIHJlcGxhY2UgaWQgd2l0aCBjYW11bmRhIGlkXG4gIGNvbnN0IGlkSW5kZXggPSBmaW5kSW5kZXgoZW50cmllcywgZW50cnkgPT4gZW50cnkuaWQgPT09ICdpZCcpO1xuICBlbnRyaWVzLnNwbGljZShpZEluZGV4LCAxLCAuLi5JZFByb3BzKCkpO1xuXG4gIC8vICgyKSByZXBsYWNlIHByb2Nlc3NJZCB3aXRoIGNhbXVuZGEgcHJvY2Vzc0lkIChpZiBleGlzdGluZylcbiAgY29uc3QgcHJvY2Vzc0lkSW5kZXggPSBmaW5kSW5kZXgoZW50cmllcywgZW50cnkgPT4gZW50cnkuaWQgPT09ICdwcm9jZXNzSWQnKTtcbiAgaWYgKHByb2Nlc3NJZEluZGV4ICYmIHByb2Nlc3NJZEluZGV4ID49IDApIHtcbiAgICBlbnRyaWVzLnNwbGljZShwcm9jZXNzSWRJbmRleCwgMSwgLi4uUHJvY2Vzc1Byb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KSk7XG4gIH1cblxuICAvLyAoMykgYWRkIHZlcnNpb24gdGFnIGJlZm9yZSBleGVjdXRhYmxlIChpZiBleGlzdGluZylcbiAgY29uc3QgZXhlY3V0YWJsZUVudHJ5ID0gZmluZEluZGV4KGVudHJpZXMsIGVudHJ5ID0+IGVudHJ5LmlkID09PSAnaXNFeGVjdXRhYmxlJyk7XG4gIGNvbnN0IGluc2VydEluZGV4ID0gZXhlY3V0YWJsZUVudHJ5ID49IDAgPyBleGVjdXRhYmxlRW50cnkgOiBlbnRyaWVzLmxlbmd0aDtcbiAgZW50cmllcy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIC4uLlZlcnNpb25UYWdQcm9wcyh7XG4gICAgZWxlbWVudFxuICB9KSk7XG59XG5mdW5jdGlvbiB1cGRhdGVFcnJvckdyb3VwKGdyb3VwcywgZWxlbWVudCkge1xuICBjb25zdCBlcnJvckdyb3VwID0gZmluZEdyb3VwKGdyb3VwcywgJ2Vycm9yJyk7XG4gIGlmICghZXJyb3JHcm91cCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7XG4gICAgZW50cmllc1xuICB9ID0gZXJyb3JHcm91cDtcbiAgRXJyb3JQcm9wcyh7XG4gICAgZWxlbWVudCxcbiAgICBlbnRyaWVzXG4gIH0pO1xufVxuZnVuY3Rpb24gdXBkYXRlTXVsdGlJbnN0YW5jZUdyb3VwKGdyb3VwcywgZWxlbWVudCkge1xuICBjb25zdCBtdWx0aUluc3RhbmNlR3JvdXAgPSBmaW5kR3JvdXAoZ3JvdXBzLCAnbXVsdGlJbnN0YW5jZScpO1xuICBpZiAoIW11bHRpSW5zdGFuY2VHcm91cCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7XG4gICAgZW50cmllc1xuICB9ID0gbXVsdGlJbnN0YW5jZUdyb3VwO1xuICBNdWx0aUluc3RhbmNlUHJvcHMoe1xuICAgIGVsZW1lbnQsXG4gICAgZW50cmllc1xuICB9KTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUVzY2FsYXRpb25Hcm91cChncm91cHMsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXNjYWxhdGlvbkdyb3VwID0gZmluZEdyb3VwKGdyb3VwcywgJ2VzY2FsYXRpb24nKTtcbiAgaWYgKCFlc2NhbGF0aW9uR3JvdXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge1xuICAgIGVudHJpZXNcbiAgfSA9IGVzY2FsYXRpb25Hcm91cDtcbiAgRXNjYWxhdGlvblByb3BzKHtcbiAgICBlbGVtZW50LFxuICAgIGVudHJpZXNcbiAgfSk7XG59XG5mdW5jdGlvbiB1cGRhdGVUaW1lckdyb3VwKGdyb3VwcywgZWxlbWVudCkge1xuICBjb25zdCB0aW1lckV2ZW50R3JvdXAgPSBmaW5kR3JvdXAoZ3JvdXBzLCAndGltZXInKTtcbiAgaWYgKCF0aW1lckV2ZW50R3JvdXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGltZXJFdmVudEdyb3VwLmVudHJpZXMgPSBbLi4uVGltZXJQcm9wcyh7XG4gICAgZWxlbWVudFxuICB9KV07XG59XG5mdW5jdGlvbiBJbXBsZW1lbnRhdGlvbkdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0ltcGxlbWVudGF0aW9uJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0ltcGxlbWVudGF0aW9uJyxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFsuLi5JbXBsZW1lbnRhdGlvblByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gRXJyb3JzR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRXJyb3JzJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0Vycm9ycycsXG4gICAgY29tcG9uZW50OiBMaXN0R3JvdXAsXG4gICAgLi4uRXJyb3JzUHJvcHMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgaWYgKGdyb3VwLml0ZW1zKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gVXNlckFzc2lnbm1lbnRHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdVc2VyIGFzc2lnbm1lbnQnKSxcbiAgICBpZDogJ0NhbXVuZGFQbGF0Zm9ybV9fVXNlckFzc2lnbm1lbnQnLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogWy4uLlVzZXJBc3NpZ25tZW50UHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBTY3JpcHRHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdTY3JpcHQnKSxcbiAgICBpZDogJ0NhbXVuZGFQbGF0Zm9ybV9fU2NyaXB0JyxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFsuLi5TY3JpcHRUYXNrUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBDYWxsQWN0aXZpdHlHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDYWxsZWQgZWxlbWVudCcpLFxuICAgIGlkOiAnQ2FtdW5kYVBsYXRmb3JtX19DYWxsQWN0aXZpdHknLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogWy4uLkNhbGxBY3Rpdml0eVByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gQ29uZGl0aW9uR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ29uZGl0aW9uJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0NvbmRpdGlvbicsXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uQ29uZGl0aW9uUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBTdGFydEluaXRpYXRvckdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1N0YXJ0IGluaXRpYXRvcicpLFxuICAgIGlkOiAnQ2FtdW5kYVBsYXRmb3JtX19TdGFydEluaXRpYXRvcicsXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uSW5pdGlhdG9yUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBFeHRlcm5hbFRhc2tHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFeHRlcm5hbCB0YXNrJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0V4dGVybmFsVGFzaycsXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uRXh0ZXJuYWxUYXNrUHJpb3JpdHlQcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSldXG4gIH07XG4gIGlmIChncm91cC5lbnRyaWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIEFzeW5jaHJvbm91c0NvbnRpbnVhdGlvbnNHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdBc3luY2hyb25vdXMgY29udGludWF0aW9ucycpLFxuICAgIGlkOiAnQ2FtdW5kYVBsYXRmb3JtX19Bc3luY2hyb25vdXNDb250aW51YXRpb25zJyxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFsuLi5Bc3luY2hyb25vdXNDb250aW51YXRpb25zUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBKb2JFeGVjdXRpb25Hcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdKb2IgZXhlY3V0aW9uJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0pvYkV4ZWN1dGlvbicsXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uSm9iRXhlY3V0aW9uUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBDYW5kaWRhdGVTdGFydGVyR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnQ2FuZGlkYXRlIHN0YXJ0ZXInKSxcbiAgICBpZDogJ0NhbXVuZGFQbGF0Zm9ybV9fQ2FuZGlkYXRlU3RhcnRlcicsXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uQ2FuZGlkYXRlU3RhcnRlclByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gRmllbGRJbmplY3Rpb25Hcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGaWVsZCBpbmplY3Rpb25zJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0ZpZWxkSW5qZWN0aW9uJyxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICAuLi5GaWVsZEluamVjdGlvblByb3BzKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpbmplY3RvclxuICAgIH0pXG4gIH07XG4gIGlmIChncm91cC5pdGVtcykge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIEhpc3RvcnlDbGVhbnVwR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnSGlzdG9yeSBjbGVhbnVwJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0hpc3RvcnlDbGVhbnVwJyxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFsuLi5IaXN0b3J5Q2xlYW51cFByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gVGFza2xpc3RHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUYXNrbGlzdCcpLFxuICAgIGlkOiAnQ2FtdW5kYVBsYXRmb3JtX19UYXNrbGlzdCcsXG4gICAgY29tcG9uZW50OiBHcm91cCxcbiAgICBlbnRyaWVzOiBbLi4uVGFza2xpc3RQcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSldXG4gIH07XG4gIGlmIChncm91cC5lbnRyaWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIEluTWFwcGluZ0dyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0luIG1hcHBpbmdzJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0luTWFwcGluZycsXG4gICAgY29tcG9uZW50OiBMaXN0R3JvdXAsXG4gICAgLi4uSW5NYXBwaW5nUHJvcHMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgaWYgKGdyb3VwLml0ZW1zKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gSW5NYXBwaW5nUHJvcGFnYXRpb25Hcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbiBtYXBwaW5nIHByb3BhZ2F0aW9uJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0luTWFwcGluZ1Byb3BhZ2F0aW9uJyxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFsuLi5Jbk1hcHBpbmdQcm9wYWdhdGlvblByb3BzKHtcbiAgICAgIGVsZW1lbnRcbiAgICB9KV1cbiAgfTtcbiAgaWYgKGdyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gT3V0TWFwcGluZ0dyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dCBtYXBwaW5ncycpLFxuICAgIGlkOiAnQ2FtdW5kYVBsYXRmb3JtX19PdXRNYXBwaW5nJyxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICAuLi5PdXRNYXBwaW5nUHJvcHMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgaWYgKGdyb3VwLml0ZW1zKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gT3V0TWFwcGluZ1Byb3BhZ2F0aW9uR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnT3V0IG1hcHBpbmcgcHJvcGFnYXRpb24nKSxcbiAgICBpZDogJ0NhbXVuZGFQbGF0Zm9ybV9fT3V0TWFwcGluZ1Byb3BhZ2F0aW9uJyxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFsuLi5PdXRNYXBwaW5nUHJvcGFnYXRpb25Qcm9wcyh7XG4gICAgICBlbGVtZW50XG4gICAgfSldXG4gIH07XG4gIGlmIChncm91cC5lbnRyaWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIFByb2Nlc3NWYXJpYWJsZXNHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCB2YXJpYWJsZVByb3BzID0gUHJvY2Vzc1ZhcmlhYmxlc1Byb3BzKHtcbiAgICBlbGVtZW50LFxuICAgIGluamVjdG9yXG4gIH0pO1xuICBpZiAoIXZhcmlhYmxlUHJvcHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdQcm9jZXNzIHZhcmlhYmxlcycpLFxuICAgIGlkOiAnQ2FtdW5kYVBsYXRmb3JtX19Qcm9jZXNzVmFyaWFibGVzJyxcbiAgICAuLi52YXJpYWJsZVByb3BzXG4gIH07XG4gIHJldHVybiBncm91cDtcbn1cbmZ1bmN0aW9uIEZvcm1EYXRhR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnRm9ybSBmaWVsZHMnKSxcbiAgICBpZDogJ0NhbXVuZGFQbGF0Zm9ybV9fRm9ybURhdGEnLFxuICAgIGNvbXBvbmVudDogTGlzdEdyb3VwLFxuICAgIC4uLkZvcm1EYXRhUHJvcHMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgaWYgKGdyb3VwLml0ZW1zKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gQnVzaW5lc3NLZXlHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdCdXNpbmVzcyBrZXknKSxcbiAgICBpZDogJ0NhbXVuZGFQbGF0Zm9ybV9fQnVzaW5lc3NLZXknLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogWy4uLkJ1c2luZXNzS2V5UHJvcHMkMSh7XG4gICAgICBlbGVtZW50XG4gICAgfSldXG4gIH07XG4gIGlmIChncm91cC5lbnRyaWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIEZvcm1Hcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdGb3JtcycpLFxuICAgIGlkOiAnQ2FtdW5kYVBsYXRmb3JtX19Gb3JtJyxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFsuLi5Gb3JtUHJvcHMoe1xuICAgICAgZWxlbWVudFxuICAgIH0pXVxuICB9O1xuICBpZiAoZ3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBFeGVjdXRpb25MaXN0ZW5lckdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V4ZWN1dGlvbiBsaXN0ZW5lcnMnKSxcbiAgICBpZDogJ0NhbXVuZGFQbGF0Zm9ybV9fRXhlY3V0aW9uTGlzdGVuZXInLFxuICAgIGNvbXBvbmVudDogTGlzdEdyb3VwLFxuICAgIC4uLkV4ZWN1dGlvbkxpc3RlbmVyUHJvcHMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgaWYgKGdyb3VwLml0ZW1zKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gVGFza0xpc3RlbmVyR3JvdXAoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ3JvdXAgPSB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnVGFzayBsaXN0ZW5lcnMnKSxcbiAgICBpZDogJ0NhbXVuZGFQbGF0Zm9ybV9fVGFza0xpc3RlbmVyJyxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICAuLi5UYXNrTGlzdGVuZXJQcm9wcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5qZWN0b3JcbiAgICB9KVxuICB9O1xuICBpZiAoZ3JvdXAuaXRlbXMpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBJbnB1dEdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0lucHV0cycpLFxuICAgIGlkOiAnQ2FtdW5kYVBsYXRmb3JtX19JbnB1dCcsXG4gICAgY29tcG9uZW50OiBMaXN0R3JvdXAsXG4gICAgLi4uSW5wdXRQcm9wcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5qZWN0b3JcbiAgICB9KVxuICB9O1xuICBpZiAoZ3JvdXAuaXRlbXMpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBPdXRwdXRHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdPdXRwdXRzJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX091dHB1dCcsXG4gICAgY29tcG9uZW50OiBMaXN0R3JvdXAsXG4gICAgLi4uT3V0cHV0UHJvcHMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgaWYgKGdyb3VwLml0ZW1zKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gQ29ubmVjdG9ySW5wdXRHcm91cChlbGVtZW50LCBpbmplY3Rvcikge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdDb25uZWN0b3IgaW5wdXRzJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0Nvbm5lY3RvcklucHV0JyxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICAuLi5Db25uZWN0b3JJbnB1dFByb3BzKHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpbmplY3RvclxuICAgIH0pXG4gIH07XG4gIGlmIChncm91cC5pdGVtcykge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIENvbm5lY3Rvck91dHB1dEdyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Nvbm5lY3RvciBvdXRwdXRzJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0Nvbm5lY3Rvck91dHB1dCcsXG4gICAgY29tcG9uZW50OiBMaXN0R3JvdXAsXG4gICAgLi4uQ29ubmVjdG9yT3V0cHV0UHJvcHMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluamVjdG9yXG4gICAgfSlcbiAgfTtcbiAgaWYgKGdyb3VwLml0ZW1zKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gRXh0ZW5zaW9uUHJvcGVydGllc0dyb3VwKGVsZW1lbnQsIGluamVjdG9yKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0V4dGVuc2lvbiBwcm9wZXJ0aWVzJyksXG4gICAgaWQ6ICdDYW11bmRhUGxhdGZvcm1fX0V4dGVuc2lvblByb3BlcnRpZXMnLFxuICAgIGNvbXBvbmVudDogTGlzdEdyb3VwLFxuICAgIC4uLkV4dGVuc2lvblByb3BlcnRpZXNQcm9wcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5qZWN0b3JcbiAgICB9KVxuICB9O1xuICBpZiAoZ3JvdXAuaXRlbXMpIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZmluZEdyb3VwKGdyb3VwcywgaWQpIHtcbiAgcmV0dXJuIGdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gaWQpO1xufVxuZnVuY3Rpb24gZmluZEdyb3VwSW5kZXgoZ3JvdXBzLCBpZCkge1xuICByZXR1cm4gZmluZEluZGV4KGdyb3VwcywgZyA9PiBnLmlkID09PSBpZCk7XG59XG5mdW5jdGlvbiBtb3ZlR3JvdXAoZ3JvdXBzLCBpZCwgcG9zaXRpb24pIHtcbiAgY29uc3QgZ3JvdXBJbmRleCA9IGZpbmRHcm91cEluZGV4KGdyb3VwcywgaWQpO1xuICBpZiAocG9zaXRpb24gPCAwIHx8IGdyb3VwSW5kZXggPCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBhcnJheU1vdmVNdXRhYmxlKGdyb3VwcywgZ3JvdXBJbmRleCwgcG9zaXRpb24pO1xufVxuXG52YXIgaW5kZXggPSB7XG4gIF9faW5pdF9fOiBbJ2NhbXVuZGFQbGF0Zm9ybVByb3BlcnRpZXNQcm92aWRlciddLFxuICBjYW11bmRhUGxhdGZvcm1Qcm9wZXJ0aWVzUHJvdmlkZXI6IFsndHlwZScsIENhbXVuZGFQbGF0Zm9ybVByb3BlcnRpZXNQcm92aWRlcl1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzICovXG5jb25zdCBUb29sdGlwUHJvdmlkZXIkMSA9IHtcbiAgJ2dyb3VwLWFzc2lnbm1lbnREZWZpbml0aW9uJzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgY2hpbGRyZW46IFt0cmFuc2xhdGUoJ0RlZmluZSB3aG8gdGhlIHRhc2sgaXMgYXNzaWduZWQgdG8uIE9uZSBvciBhbGwgb2YgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGNhbiBiZSBzcGVjaWZpZWQgc2ltdWx0YW5lb3VzbHkuICcpLCBqc3goXCJhXCIsIHtcbiAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2NvbXBvbmVudHMvbW9kZWxlci9icG1uL3VzZXItdGFza3MvI2Fzc2lnbm1lbnRzXCIsXG4gICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnVXNlciB0YXNrIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTGVhcm4gbW9yZS4nKVxuICAgICAgfSldXG4gICAgfSk7XG4gIH0sXG4gICdncm91cC1jb25kaXRpb24nOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICBjaGlsZHJlbjogW3RyYW5zbGF0ZSgnRGVmaW5lIGEgYm9vbGVhbiBjb25kaXRpb24gZXhwcmVzc2lvbiB0aGF0IGRlZmluZXMgd2hlbiB0aGlzIGZsb3cgaXMgdGFrZW4uICcpLCBqc3goXCJhXCIsIHtcbiAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2NvbXBvbmVudHMvbW9kZWxlci9icG1uL2V4Y2x1c2l2ZS1nYXRld2F5cy8jY29uZGl0aW9uc1wiLFxuICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NvbmRpdGlvbnMgZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBob3cgdG8gZGVmaW5lIGNvbmRpdGlvbnMuJylcbiAgICAgIH0pXVxuICAgIH0pO1xuICB9LFxuICAnZ3JvdXAtYnVzaW5lc3NSdWxlSW1wbGVtZW50YXRpb24nOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICBjaGlsZHJlbjogW3RyYW5zbGF0ZSgnRXZhbHVhdGUgYSBidXNpbmVzcyBydWxlLCBmb3IgZXhhbXBsZSBhIERNTiBkZWNpc2lvbi4gVG8gYWRkIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLCB1c2UgYSBqb2Igd29ya2VyLiAnKSwganN4KFwiYVwiLCB7XG4gICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEuaW8vZG9jcy9jb21wb25lbnRzL21vZGVsZXIvYnBtbi9idXNpbmVzcy1ydWxlLXRhc2tzLyNkZWZpbmluZy1hLXRhc2tcIixcbiAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdCdXNpbmVzcyBydWxlIHRhc2sgZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBtb3JlLicpXG4gICAgICB9KV1cbiAgICB9KTtcbiAgfSxcbiAgJ2dyb3VwLXNjcmlwdEltcGxlbWVudGF0aW9uJzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgY2hpbGRyZW46IFt0cmFuc2xhdGUoJ0ltcGxlbWVudCBhIHNjcmlwdCB0YXNrIHVzaW5nIGFuIGlubGluZSBGRUVMIGV4cHJlc3Npb24uIFRvIGFkZCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiwgdXNlIGEgam9iIHdvcmtlci4gJyksIGpzeChcImFcIiwge1xuICAgICAgICBocmVmOiBcImh0dHBzOi8vZG9jcy5jYW11bmRhLmlvL2RvY3MvY29tcG9uZW50cy9tb2RlbGVyL2JwbW4vc2NyaXB0LXRhc2tzLyNkZWZpbmluZy1hLXNjcmlwdC10YXNrXCIsXG4gICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnU2NyaXB0IHRhc2sgZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBtb3JlLicpXG4gICAgICB9KV1cbiAgICB9KTtcbiAgfSxcbiAgJ2dyb3VwLXVzZXJUYXNrSW1wbGVtZW50YXRpb24nOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICBjaGlsZHJlbjogW3RyYW5zbGF0ZSgnSW1wbGVtZW50IGEgdXNlciB0YXNrIG1hbmFnZWQgYnkgWmVlYmUuIFRvIGFkZCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiwgdXNlIGEgam9iIHdvcmtlci4gJyksIGpzeChcImFcIiwge1xuICAgICAgICBocmVmOiBcImh0dHBzOi8vZG9jcy5jYW11bmRhLmlvL2RvY3MvY29tcG9uZW50cy9tb2RlbGVyL2JwbW4vdXNlci10YXNrcy8jZGVmaW5lLWEtdXNlci10YXNrXCIsXG4gICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnVXNlciB0YXNrIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTGVhcm4gbW9yZS4nKVxuICAgICAgfSldXG4gICAgfSk7XG4gIH0sXG4gICdncm91cC1mb3JtJzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgaWYgKGlzWmVlYmVVc2VyVGFzayQxKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbdHJhbnNsYXRlKCdMaW5rIGEgZm9ybSBjcmVhdGVkIHdpdGggdGhlIENhbXVuZGEgRm9ybXMgZWRpdG9yLiBUbyBhc3NvY2lhdGUgYSBjdXN0b20gZm9ybSwgYXBwbGljYXRpb24sIG9yIFVSTCB0byB0aGUgdXNlciB0YXNrLCBzcGVjaWZ5IGFuIGV4dGVybmFsIHJlZmVyZW5jZS4gJyksIGpzeChcImFcIiwge1xuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEuaW8vZG9jcy9ndWlkZXMvdXRpbGl6aW5nLWZvcm1zLyNsaW5rLXlvdXItZm9ybS10by1hLWJwbW4tZGlhZ3JhbVwiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ1VzZXIgdGFzayBmb3JtIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBtb3JlLicpXG4gICAgICAgIH0pXVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgIGNoaWxkcmVuOiBbdHJhbnNsYXRlKCdMaW5rIG9yIGVtYmVkIGEgZm9ybSBjcmVhdGVkIHdpdGggdGhlIENhbXVuZGEgRm9ybXMgZWRpdG9yLiBUbyBhc3NvY2lhdGUgYSBjdXN0b20gZm9ybSwgYXBwbGljYXRpb24sIG9yIFVSTCB0byB0aGUgdXNlciB0YXNrLCBzcGVjaWZ5IGEgZm9ybSBrZXkuICcpLCBqc3goXCJhXCIsIHtcbiAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2d1aWRlcy91dGlsaXppbmctZm9ybXMvI2xpbmsteW91ci1mb3JtLXRvLWEtYnBtbi1kaWFncmFtXCIsXG4gICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnVXNlciB0YXNrIGZvcm0gZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBtb3JlLicpXG4gICAgICB9KV1cbiAgICB9KTtcbiAgfSxcbiAgJ2dyb3VwLWNhbGxlZERlY2lzaW9uJzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgY2hpbGRyZW46IFt0cmFuc2xhdGUoJ0RlZmluZSB0aGUgZGVjaXNpb24gdG8gZXZhbHVhdGUgYW5kIGhvdyB0byBtYXAgYmFjayB0aGUgZXZhbHVhdGlvbiByZXN1bHQuICcpLCBqc3goXCJhXCIsIHtcbiAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2NvbXBvbmVudHMvbW9kZWxlci9icG1uL2J1c2luZXNzLXJ1bGUtdGFza3MvI2RlZmluaW5nLWEtY2FsbGVkLWRlY2lzaW9uXCIsXG4gICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnU2VuZCB0YXNrIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTGVhcm4gbW9yZS4nKVxuICAgICAgfSldXG4gICAgfSk7XG4gIH0sXG4gICdncm91cC1tZXNzYWdlJzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlJlY2VpdmVUYXNrJykpIHtcbiAgICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFt0cmFuc2xhdGUoJ0RlZmluZSB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSAoZS5nLiAnKSwganN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFwiTW9uZXkgY29sbGVjdGVkXCJcbiAgICAgICAgfSksIHRyYW5zbGF0ZSgnKSBhbmQgdGhlICcpLCBqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogXCJjb3JyZWxhdGlvbktleVwiXG4gICAgICAgIH0pLCB0cmFuc2xhdGUoJyBleHByZXNzaW9uIChlLmcuICcpLCBqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogXCI9IG9yZGVySWRcIlxuICAgICAgICB9KSwgdHJhbnNsYXRlKCcpJyksIHRyYW5zbGF0ZSgnIHRvIHN1YnNjcmliZSB0by4gJyksIHRyYW5zbGF0ZSgnTGVhcm4gbW9yZSBob3cgdG8gJyksIGpzeChcImFcIiwge1xuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEuaW8vZG9jcy9jb21wb25lbnRzL21vZGVsZXIvYnBtbi9zZW5kLXRhc2tzXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnU2VuZCB0YXNrIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdzZW5kICcpXG4gICAgICAgIH0pLCB0cmFuc2xhdGUoJ2FuZCAnKSwganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2NvbXBvbmVudHMvbW9kZWxlci9icG1uL3JlY2VpdmUtdGFza3NcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdSZWNlaXZlIHRhc2sgZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ3JlY2VpdmUgbWVzc2FnZXMuICcpXG4gICAgICAgIH0pXVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgIGNoaWxkcmVuOiBbdHJhbnNsYXRlKCdEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2UgKGUuZy4gJyksIGpzeChcImNvZGVcIiwge1xuICAgICAgICBjaGlsZHJlbjogXCJNb25leSBjb2xsZWN0ZWRcIlxuICAgICAgfSksIHRyYW5zbGF0ZSgnKSBhbmQgdGhlICcpLCBqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFwiY29ycmVsYXRpb25LZXlcIlxuICAgICAgfSksIHRyYW5zbGF0ZSgnIGV4cHJlc3Npb24gKGUuZy4gJyksIGpzeChcImNvZGVcIiwge1xuICAgICAgICBjaGlsZHJlbjogXCI9IG9yZGVySWRcIlxuICAgICAgfSksIHRyYW5zbGF0ZSgnKScpLCB0cmFuc2xhdGUoJyB0byBzdWJzY3JpYmUgdG8uICcpLCBqc3goXCJhXCIsIHtcbiAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2NvbXBvbmVudHMvbW9kZWxlci9icG1uL21lc3NhZ2UtZXZlbnRzLyNtZXNzYWdlc1wiLFxuICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ01lc3NhZ2UgZXZlbnQgZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBtb3JlLicpXG4gICAgICB9KV1cbiAgICB9KTtcbiAgfSxcbiAgJ2dyb3VwLWNhbGxlZEVsZW1lbnQnOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICBjaGlsZHJlbjogW3RyYW5zbGF0ZSgnRGVmaW5lIHRoZSBJRCBvZiB0aGUgcHJvY2VzcyB0byBjYWxsIChlLmcuICcpLCBcIiBcIiwganN4KFwiY29kZVwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBcInNoaXBwaW5nLXByb2Nlc3NcIlxuICAgICAgfSksIHRyYW5zbGF0ZSgnIG9yICcpLCBqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFwiPSBcXFwic2hpcHBpbmctXFxcIiArIHRlbmFudElkXCJcbiAgICAgIH0pLCBcIiBcIiwgdHJhbnNsYXRlKCcpLiAnKSwganN4KFwiYVwiLCB7XG4gICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEuaW8vZG9jcy9jb21wb25lbnRzL21vZGVsZXIvYnBtbi9jYWxsLWFjdGl2aXRpZXMvXCIsXG4gICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQ2FsbCBhY3Rpdml0eSBkb2N1bWVudGF0aW9uJyksXG4gICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0xlYXJuIG1vcmUuJylcbiAgICAgIH0pXVxuICAgIH0pO1xuICB9LFxuICAnZ3JvdXAtdGFza0RlZmluaXRpb24nOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U2VydmljZVRhc2snKSkge1xuICAgICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgICBjaGlsZHJlbjogW3RyYW5zbGF0ZSgnU3BlY2lmeSB3aGljaCBqb2Igd29ya2VycyBoYW5kbGUgdGhlIHRhc2sgd29yayB0byBleGVjdXRlIGEgc2VydmljZSAoZS5nLiAnKSwganN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFwib3JkZXItaXRlbXNcIlxuICAgICAgICB9KSwgdHJhbnNsYXRlKCcpLiAnKSwganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2NvbXBvbmVudHMvbW9kZWxlci9icG1uL3NlcnZpY2UtdGFza3NcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdTZXJ2aWNlIHRhc2sgZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0xlYXJuIG1vcmUuJylcbiAgICAgICAgfSldXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkJ1c2luZXNzUnVsZVRhc2snKSkge1xuICAgICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgICBjaGlsZHJlbjogW3RyYW5zbGF0ZSgnU3BlY2lmeSB3aGljaCBqb2Igd29ya2VycyBoYW5kbGUgdGhlIHRhc2sgd29yayB0byBldmFsdWF0ZSBidXNpbmVzcyBydWxlcy4gJyksIGpzeChcImFcIiwge1xuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEuaW8vZG9jcy9jb21wb25lbnRzL21vZGVsZXIvYnBtbi9idXNpbmVzcy1ydWxlLXRhc2tzLyNqb2Itd29ya2VyLWltcGxlbWVudGF0aW9uXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQnVzaW5lc3MgcnVsZSB0YXNrIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBtb3JlLicpXG4gICAgICAgIH0pXVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTY3JpcHRUYXNrJykpIHtcbiAgICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFt0cmFuc2xhdGUoJ1NwZWNpZnkgd2hpY2ggam9iIHdvcmtlcnMgaGFuZGxlIHRoZSB0YXNrIHdvcmsgdG8gZXhlY3V0ZSBhIHNjcmlwdC4gJyksIGpzeChcImFcIiwge1xuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEuaW8vZG9jcy9jb21wb25lbnRzL21vZGVsZXIvYnBtbi9zY3JpcHQtdGFza3MvI2RlZmluaW5nLWEtdGFza1wiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ1NjcmlwdCB0YXNrIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBtb3JlLicpXG4gICAgICAgIH0pXVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTZW5kVGFzaycpKSB7XG4gICAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbdHJhbnNsYXRlKCdTcGVjaWZ5IHdoaWNoIGpvYiB3b3JrZXJzIGhhbmRsZSB0aGUgdGFzayB3b3JrIHRvIHNlbmQgYSBtZXNzYWdlIChlLmcuICcpLCBqc3goXCJjb2RlXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogXCJrYWZrYVwiXG4gICAgICAgIH0pLCB0cmFuc2xhdGUoJyBvciAnKSwganN4KFwiY29kZVwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFwibWFpbFwiXG4gICAgICAgIH0pLCB0cmFuc2xhdGUoJykuICcpLCBqc3goXCJhXCIsIHtcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZG9jcy5jYW11bmRhLmlvL2RvY3MvY29tcG9uZW50cy9tb2RlbGVyL2JwbW4vc2VuZC10YXNrcy8jZGVmaW5pbmctYS10YXNrXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnU2VuZCB0YXNrIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdMZWFybiBtb3JlLicpXG4gICAgICAgIH0pXVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUaHJvd0V2ZW50JykpIHtcbiAgICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFt0cmFuc2xhdGUoJ1NwZWNpZnkgd2hpY2ggam9iIHdvcmtlcnMgaGFuZGxlIHRoZSBldmVudCB3b3JrLiAnKSwganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2NvbXBvbmVudHMvbW9kZWxlci9icG1uL21lc3NhZ2UtZXZlbnRzLyNtZXNzYWdlLXRocm93LWV2ZW50c1wiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ01lc3NhZ2UgdGhyb3cgZXZlbnQgZG9jdW1lbnRhdGlvbicpLFxuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0xlYXJuIG1vcmUuJylcbiAgICAgICAgfSldXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gICdncm91cC1tdWx0aUluc3RhbmNlJzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgY2hpbGRyZW46IFt0cmFuc2xhdGUoJ0V4ZWN1dGUgdGhpcyB0YXNrIGZvciBlYWNoIGVsZW1lbnQgb2YgYSBnaXZlbiBjb2xsZWN0aW9uLiAnKSwganN4KFwiYnJcIiwge30pLCB0cmFuc2xhdGUoJ0RlZmluZSBhbiBpbnB1dCBjb2xsZWN0aW9uIGV4cHJlc3Npb24gdGhhdCBkZWZpbmVzIHRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3ZlciAoZS5nLiAnKSwganN4KFwiY29kZVwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBcIj0gaXRlbXNcIlxuICAgICAgfSksIHRyYW5zbGF0ZSgnKS4gJyksIHRyYW5zbGF0ZSgnVG8gY29sbGVjdCB0aGUgb3V0cHV0IGRlZmluZSB0aGUgb3V0cHV0IGNvbGxlY3Rpb24gYW5kIHRoZSBvdXRwdXQgZWxlbWVudCBleHByZXNzaW9ucy4gJyksIGpzeChcImFcIiwge1xuICAgICAgICBocmVmOiBcImh0dHBzOi8vZG9jcy5jYW11bmRhLmlvL2RvY3MvY29tcG9uZW50cy9tb2RlbGVyL2JwbW4vbXVsdGktaW5zdGFuY2UvI2RlZmluaW5nLXRoZS1jb2xsZWN0aW9uLXRvLWl0ZXJhdGUtb3ZlclwiLFxuICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ011bHRpIGluc3RhbmNlIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTGVhcm4gbW9yZS4nKVxuICAgICAgfSldXG4gICAgfSk7XG4gIH0sXG4gICdncm91cC1lcnJvcic6IGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICAgIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICAgIGNoaWxkcmVuOiBbdHJhbnNsYXRlKCdEZWZpbmUgYW4gZXJyb3IgY29kZSAoZS5nLiAnKSwganN4KFwiY29kZVwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBcIm9yZGVyLW5vdC1mb3VuZFwiXG4gICAgICB9KSwgdHJhbnNsYXRlKCcpLiAnKSwganN4KFwiYVwiLCB7XG4gICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9kb2NzLmNhbXVuZGEuaW8vZG9jcy9jb21wb25lbnRzL21vZGVsZXIvYnBtbi9lcnJvci1ldmVudHMvI2RlZmluaW5nLXRoZS1lcnJvclwiLFxuICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0Vycm9yIGV2ZW50IGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTGVhcm4gbW9yZS4nKVxuICAgICAgfSldXG4gICAgfSk7XG4gIH0sXG4gICdncm91cC1pbnB1dHMnOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICBjaGlsZHJlbjogW3RyYW5zbGF0ZSgnQ3JlYXRlIGEgbmV3IGxvY2FsIHZhcmlhYmxlIGluIHRoZSBzY29wZSBvZiB0aGlzIHRhc2suICcpLCBqc3goXCJhXCIsIHtcbiAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL2NvbXBvbmVudHMvY29uY2VwdHMvdmFyaWFibGVzLyNpbnB1dC1tYXBwaW5nc1wiLFxuICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0lucHV0IG1hcHBpbmdzIGRvY3VtZW50YXRpb24nKSxcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTGVhcm4gbW9yZS4nKVxuICAgICAgfSldXG4gICAgfSk7XG4gIH0sXG4gICdncm91cC1vdXRwdXRzJzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgY2hpbGRyZW46IFt0cmFuc2xhdGUoJ0N1c3RvbWl6ZSBob3cgcmVzdWx0IHZhcmlhYmxlcyBhcmUgbWVyZ2VkIGludG8gdGhlIGdsb2JhbCBzY29wZSBvZiB0aGUgcHJvY2VzcyBpbnN0YW5jZS4gJyksIGpzeChcImFcIiwge1xuICAgICAgICBocmVmOiBcImh0dHBzOi8vZG9jcy5jYW11bmRhLmlvL2RvY3MvY29tcG9uZW50cy9jb25jZXB0cy92YXJpYWJsZXMvI291dHB1dC1tYXBwaW5nc1wiLFxuICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ091dHB1dCBtYXBwaW5ncyBkb2N1bWVudGF0aW9uJyksXG4gICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0xlYXJuIG1vcmUuJylcbiAgICAgIH0pXVxuICAgIH0pO1xuICB9LFxuICAndGFza0RlZmluaXRpb25SZXRyaWVzJzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgICBjaGlsZHJlbjoganN4cyhcInBcIiwge1xuICAgICAgICBjaGlsZHJlbjogW3RyYW5zbGF0ZSgnVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgZW5naW5lIHRyaWVzIGV4ZWN1dGluZyB0aGlzIGFjdGl2aXR5IGlmIGEgd29ya2VyIHNpZ25hbHMgYSBmYWlsdXJlLiBUaGUgZGVmYXVsdCBpcyB0aHJlZS4nKSwgXCIgXCIsICcgJywganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5pby9kb2NzL25leHQvY29tcG9uZW50cy9iZXN0LXByYWN0aWNlcy9kZXZlbG9wbWVudC9kZWFsaW5nLXdpdGgtcHJvYmxlbXMtYW5kLWV4Y2VwdGlvbnMvI2xldmVyYWdpbmctcmV0cmllc1wiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICByZWw6IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiLFxuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0xlYXJuIG1vcmUuJylcbiAgICAgICAgfSldXG4gICAgICB9KVxuICAgIH0pO1xuICB9LFxuICAnYmluZGluZ1R5cGUnOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICBjaGlsZHJlbjogW2pzeHMoXCJwXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IFtqc3goXCJoMVwiLCB7XG4gICAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTGF0ZXN0IGJpbmRpbmcnKVxuICAgICAgICB9KSwgdHJhbnNsYXRlKCdVc2VzIHRoZSBtb3N0IHJlY2VudCBkZXBsb3llZCByZXNvdXJjZS4nKV1cbiAgICAgIH0pLCBqc3hzKFwicFwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbanN4KFwiaDFcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ0RlcGxveW1lbnQgYmluZGluZycpXG4gICAgICAgIH0pLCB0cmFuc2xhdGUoJ1VzZXMgdGhlIHJlc291cmNlIGZvdW5kIGluIHRoZSBzYW1lIGRlcGxveW1lbnQuJyldXG4gICAgICB9KSwganN4cyhcInBcIiwge1xuICAgICAgICBjaGlsZHJlbjogW2pzeChcImgxXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdWZXJzaW9uIHRhZyBiaW5kaW5nJylcbiAgICAgICAgfSksIHRyYW5zbGF0ZSgnVXNlcyB0aGUgbW9zdCByZWNlbnQgZGVwbG95ZWQgcmVzb3VyY2Ugd2l0aCB0aGUgZ2l2ZW4gdmVyc2lvbiB0YWcuJyldXG4gICAgICB9KV1cbiAgICB9KTtcbiAgfSxcbiAgJ3ZlcnNpb25UYWcnOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICBpZiAoaXNBbnkkMShlbGVtZW50LCBbJ2JwbW46UHJvY2VzcycsICdicG1uOlBhcnRpY2lwYW50J10pKSB7XG4gICAgICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IGpzeChcInBcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ1ZlcnNpb24gdGFnIGJ5IHdoaWNoIHRoaXMgcHJvY2VzcyBjYW4gYmUgcmVmZXJlbmNlZC4nKVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpDYWxsQWN0aXZpdHknKSkge1xuICAgICAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBqc3goXCJwXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdWZXJzaW9uIHRhZyBieSB3aGljaCB0aGUgY2FsbGVkIHByb2Nlc3Mgd2lsbCBiZSByZWZlcmVuY2VkLicpXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOkJ1c2luZXNzUnVsZVRhc2snKSkge1xuICAgICAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBqc3goXCJwXCIsIHtcbiAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdWZXJzaW9uIHRhZyBieSB3aGljaCB0aGUgY2FsbGVkIGRlY2lzaW9uIHdpbGwgYmUgcmVmZXJlbmNlZC4nKVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpVc2VyVGFzaycpKSB7XG4gICAgICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IGpzeChcInBcIiwge1xuICAgICAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ1ZlcnNpb24gdGFnIGJ5IHdoaWNoIHRoZSBsaW5rZWQgZm9ybSB3aWxsIGJlIHJlZmVyZW5jZWQuJylcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgJ3ByaW9yaXR5RGVmaW5pdGlvblByaW9yaXR5JzogZWxlbWVudCA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgY2hpbGRyZW46IFtqc3goXCJwXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGNhbiByYW5nZSBmcm9tIDAgdG8gMTAwLCB3aGVyZSBhIGhpZ2hlciB2YWx1ZSBpbmRpY2F0ZXMgYSBoaWdoZXIgcHJpb3JpdHkuJylcbiAgICAgIH0pLCBqc3goXCJwXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnSWYgdW5zZXQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDUwLicpXG4gICAgICB9KV1cbiAgICB9KTtcbiAgfVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MgKi9cblxuY29uc3QgVG9vbHRpcFByb3ZpZGVyID0ge1xuICAnaGlzdG9yeVRpbWVUb0xpdmUnOiBlbGVtZW50ID0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICAgIGNoaWxkcmVuOiBqc3hzKFwicFwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbdHJhbnNsYXRlKCdOdW1iZXIgb2YgZGF5cyBiZWZvcmUgdGhpcyByZXNvdXJjZSBpcyBiZWluZyBjbGVhbmVkIHVwLiBJZiBzcGVjaWZpZWQsIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgZW5naW5lIGNvbmZpZ3VyYXRpb24uJyksICcgJywganN4KFwiYVwiLCB7XG4gICAgICAgICAgaHJlZjogXCJodHRwczovL2RvY3MuY2FtdW5kYS5vcmcvbWFudWFsL2xhdGVzdC91c2VyLWd1aWRlL3Byb2Nlc3MtZW5naW5lL2hpc3RvcnkvXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICAgICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIsXG4gICAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTGVhcm4gbW9yZS4nKVxuICAgICAgICB9KV1cbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGluZGV4JDMgYXMgQnBtblByb3BlcnRpZXNQYW5lbE1vZHVsZSwgaW5kZXgkMiBhcyBCcG1uUHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlLCBpbmRleCBhcyBDYW11bmRhUGxhdGZvcm1Qcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUsIFRvb2x0aXBQcm92aWRlciBhcyBDYW11bmRhUGxhdGZvcm1Ub29sdGlwUHJvdmlkZXIsIGluZGV4JDEgYXMgWmVlYmVQcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUsIFRvb2x0aXBQcm92aWRlciQxIGFzIFplZWJlVG9vbHRpcFByb3ZpZGVyLCB1c2VTZXJ2aWNlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-properties-panel/dist/index.esm.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js/lib/util/DiUtil.js":
/*!*************************************************!*\
!*** ./node_modules/bpmn-js/lib/util/DiUtil.js ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ hasCompensateEventDefinition: () => (/* binding */ hasCompensateEventDefinition),\n/* harmony export */ hasErrorEventDefinition: () => (/* binding */ hasErrorEventDefinition),\n/* harmony export */ hasEscalationEventDefinition: () => (/* binding */ hasEscalationEventDefinition),\n/* harmony export */ hasEventDefinition: () => (/* binding */ hasEventDefinition),\n/* harmony export */ isEventSubProcess: () => (/* binding */ isEventSubProcess),\n/* harmony export */ isExpanded: () => (/* binding */ isExpanded),\n/* harmony export */ isInterrupting: () => (/* binding */ isInterrupting)\n/* harmony export */ });\n/* harmony import */ var _ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n\n\n/**\n * @typedef {import('../model/Types').Element} Element\n * @typedef {import('../model/Types').ModdleElement} ModdleElement\n */\n\n/**\n * @param {Element} element\n * @param {ModdleElement} [di]\n *\n * @return {boolean}\n */\nfunction isExpanded(element, di) {\n\n if ((0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:CallActivity')) {\n return false;\n }\n\n if ((0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:SubProcess')) {\n di = di || (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi)(element);\n\n if (di && (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(di, 'bpmndi:BPMNPlane')) {\n return true;\n }\n\n return di && !!di.isExpanded;\n }\n\n if ((0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Participant')) {\n return !!(0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element).processRef;\n }\n\n return true;\n}\n\n/**\n * @param {Element} element\n *\n * @return {boolean}\n */\nfunction isInterrupting(element) {\n return element && (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element).isInterrupting !== false;\n}\n\n/**\n * @param {Element} element\n *\n * @return {boolean}\n */\nfunction isEventSubProcess(element) {\n return element && !!(0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element).triggeredByEvent;\n}\n\n/**\n * @param {Element} element\n * @param {string} eventType\n *\n * @return {boolean}\n */\nfunction hasEventDefinition(element, eventType) {\n var eventDefinitions = (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element).eventDefinitions;\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.some)(eventDefinitions, function(event) {\n return (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(event, eventType);\n });\n}\n\n/**\n * @param {Element} element\n *\n * @return {boolean}\n */\nfunction hasErrorEventDefinition(element) {\n return hasEventDefinition(element, 'bpmn:ErrorEventDefinition');\n}\n\n/**\n * @param {Element} element\n *\n * @return {boolean}\n */\nfunction hasEscalationEventDefinition(element) {\n return hasEventDefinition(element, 'bpmn:EscalationEventDefinition');\n}\n\n/**\n * @param {Element} element\n *\n * @return {boolean}\n */\nfunction hasCompensateEventDefinition(element) {\n return hasEventDefinition(element, 'bpmn:CompensateEventDefinition');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBSXFCOztBQUlIOztBQUVsQjtBQUNBLGFBQWEsa0NBQWtDO0FBQy9DLGFBQWEsd0NBQXdDO0FBQ3JEOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsZUFBZTtBQUMxQjtBQUNBLFlBQVk7QUFDWjtBQUNPOztBQUVQLE1BQU0sOENBQUU7QUFDUjtBQUNBOztBQUVBLE1BQU0sOENBQUU7QUFDUixlQUFlLGlEQUFLOztBQUVwQixjQUFjLDhDQUFFO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxNQUFNLDhDQUFFO0FBQ1IsYUFBYSw2REFBaUI7QUFDOUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1Asb0JBQW9CLDZEQUFpQjtBQUNyQzs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1Asc0JBQXNCLDZEQUFpQjtBQUN2Qzs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLHlCQUF5Qiw2REFBaUI7O0FBRTFDLFNBQVMsOENBQUk7QUFDYixXQUFXLDhDQUFFO0FBQ2IsR0FBRztBQUNIOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL3V0aWwvRGlVdGlsLmpzPzdmZTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaXMsXG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBnZXREaVxufSBmcm9tICcuL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIHNvbWVcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL21vZGVsL1R5cGVzJykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fSBNb2RkbGVFbGVtZW50XG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gW2RpXVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cGFuZGVkKGVsZW1lbnQsIGRpKSB7XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkNhbGxBY3Rpdml0eScpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgIGRpID0gZGkgfHwgZ2V0RGkoZWxlbWVudCk7XG5cbiAgICBpZiAoZGkgJiYgaXMoZGksICdicG1uZGk6QlBNTlBsYW5lJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBkaSAmJiAhIWRpLmlzRXhwYW5kZWQ7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgIHJldHVybiAhIWdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLnByb2Nlc3NSZWY7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcnJ1cHRpbmcoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCAmJiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS5pc0ludGVycnVwdGluZyAhPT0gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgISFnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KS50cmlnZ2VyZWRCeUV2ZW50O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgZXZlbnRUeXBlKSB7XG4gIHZhciBldmVudERlZmluaXRpb25zID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkuZXZlbnREZWZpbml0aW9ucztcblxuICByZXR1cm4gc29tZShldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiBpcyhldmVudCwgZXZlbnRUeXBlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0Vycm9yRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0NvbXBlbnNhdGVFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICByZXR1cm4gaGFzRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js/lib/util/DiUtil.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js/lib/util/DrilldownUtil.js":
/*!********************************************************!*\
!*** ./node_modules/bpmn-js/lib/util/DrilldownUtil.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getPlaneIdFromShape: () => (/* binding */ getPlaneIdFromShape),\n/* harmony export */ getShapeIdFromPlane: () => (/* binding */ getShapeIdFromPlane),\n/* harmony export */ isPlane: () => (/* binding */ isPlane),\n/* harmony export */ planeSuffix: () => (/* binding */ planeSuffix),\n/* harmony export */ toPlaneId: () => (/* binding */ toPlaneId)\n/* harmony export */ });\n/* harmony import */ var _ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n/**\n * @typedef {import('../model/Types').Element} Element\n * @typedef {import('../model/Types').ModdleElement} ModdleElement\n */\n\nvar planeSuffix = '_plane';\n\n/**\n * Get primary shape ID for a plane.\n *\n * @param {Element|ModdleElement} element\n *\n * @return {string}\n */\nfunction getShapeIdFromPlane(element) {\n var id = element.id;\n\n return removePlaneSuffix(id);\n}\n\n/**\n * Get plane ID for a primary shape.\n *\n * @param {Element|ModdleElement} element\n *\n * @return {string}\n */\nfunction getPlaneIdFromShape(element) {\n var id = element.id;\n\n if ((0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:SubProcess')) {\n return addPlaneSuffix(id);\n }\n\n return id;\n}\n\n/**\n * Get plane ID for primary shape ID.\n *\n * @param {string} id\n *\n * @return {string}\n */\nfunction toPlaneId(id) {\n return addPlaneSuffix(id);\n}\n\n/**\n * Check wether element is plane.\n *\n * @param {Element|ModdleElement} element\n *\n * @return {boolean}\n */\nfunction isPlane(element) {\n var di = (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi)(element);\n\n return (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(di, 'bpmndi:BPMNPlane');\n}\n\nfunction addPlaneSuffix(id) {\n return id + planeSuffix;\n}\n\nfunction removePlaneSuffix(id) {\n return id.replace(new RegExp(planeSuffix + '$'), '');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9EcmlsbGRvd25VdGlsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF3Qzs7QUFFeEM7QUFDQSxhQUFhLGtDQUFrQztBQUMvQyxhQUFhLHdDQUF3QztBQUNyRDs7QUFFTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1A7O0FBRUEsTUFBTSw4Q0FBRTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1QkFBdUI7QUFDbkM7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLFdBQVcsaURBQUs7O0FBRWhCLFNBQVMsOENBQUU7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL3V0aWwvRHJpbGxkb3duVXRpbC5qcz85NDJlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldERpLCBpcyB9IGZyb20gJy4vTW9kZWxVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9tb2RlbC9UeXBlcycpLkVsZW1lbnR9IEVsZW1lbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL21vZGVsL1R5cGVzJykuTW9kZGxlRWxlbWVudH0gTW9kZGxlRWxlbWVudFxuICovXG5cbmV4cG9ydCB2YXIgcGxhbmVTdWZmaXggPSAnX3BsYW5lJztcblxuLyoqXG4gKiBHZXQgcHJpbWFyeSBzaGFwZSBJRCBmb3IgYSBwbGFuZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFwZUlkRnJvbVBsYW5lKGVsZW1lbnQpIHtcbiAgdmFyIGlkID0gZWxlbWVudC5pZDtcblxuICByZXR1cm4gcmVtb3ZlUGxhbmVTdWZmaXgoaWQpO1xufVxuXG4vKipcbiAqIEdldCBwbGFuZSBJRCBmb3IgYSBwcmltYXJ5IHNoYXBlLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR8TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBsYW5lSWRGcm9tU2hhcGUoZWxlbWVudCkge1xuICB2YXIgaWQgPSBlbGVtZW50LmlkO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICByZXR1cm4gYWRkUGxhbmVTdWZmaXgoaWQpO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufVxuXG4vKipcbiAqIEdldCBwbGFuZSBJRCBmb3IgcHJpbWFyeSBzaGFwZSBJRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1BsYW5lSWQoaWQpIHtcbiAgcmV0dXJuIGFkZFBsYW5lU3VmZml4KGlkKTtcbn1cblxuLyoqXG4gKiBDaGVjayB3ZXRoZXIgZWxlbWVudCBpcyBwbGFuZS5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFuZShlbGVtZW50KSB7XG4gIHZhciBkaSA9IGdldERpKGVsZW1lbnQpO1xuXG4gIHJldHVybiBpcyhkaSwgJ2JwbW5kaTpCUE1OUGxhbmUnKTtcbn1cblxuZnVuY3Rpb24gYWRkUGxhbmVTdWZmaXgoaWQpIHtcbiAgcmV0dXJuIGlkICsgcGxhbmVTdWZmaXg7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVBsYW5lU3VmZml4KGlkKSB7XG4gIHJldHVybiBpZC5yZXBsYWNlKG5ldyBSZWdFeHAocGxhbmVTdWZmaXggKyAnJCcpLCAnJyk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js/lib/util/DrilldownUtil.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js/lib/util/LabelUtil.js":
/*!****************************************************!*\
!*** ./node_modules/bpmn-js/lib/util/LabelUtil.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DEFAULT_LABEL_SIZE: () => (/* binding */ DEFAULT_LABEL_SIZE),\n/* harmony export */ FLOW_LABEL_INDENT: () => (/* binding */ FLOW_LABEL_INDENT),\n/* harmony export */ getExternalLabelBounds: () => (/* binding */ getExternalLabelBounds),\n/* harmony export */ getExternalLabelMid: () => (/* binding */ getExternalLabelMid),\n/* harmony export */ getFlowLabelPosition: () => (/* binding */ getFlowLabelPosition),\n/* harmony export */ getLabel: () => (/* binding */ getLabel),\n/* harmony export */ getWaypointsMid: () => (/* binding */ getWaypointsMid),\n/* harmony export */ hasExternalLabel: () => (/* binding */ hasExternalLabel),\n/* harmony export */ isLabel: () => (/* reexport safe */ diagram_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.isLabel),\n/* harmony export */ isLabelExternal: () => (/* binding */ isLabelExternal),\n/* harmony export */ setLabel: () => (/* binding */ setLabel)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n * @typedef {import('diagram-js/lib/util/Types').Rect} Rect\n *\n * @typedef {import('../model/Types').Element} Element\n * @typedef {import('../model/Types').ModdleElement} ModdleElement\n */\n\nvar DEFAULT_LABEL_SIZE = {\n width: 90,\n height: 20\n};\n\nvar FLOW_LABEL_INDENT = 15;\n\n\n/**\n * Return true if the given semantic has an external label.\n *\n * @param {Element} semantic\n *\n * @return {boolean}\n */\nfunction isLabelExternal(semantic) {\n return (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:Event') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:Gateway') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:DataStoreReference') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:DataObjectReference') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:DataInput') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:DataOutput') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:SequenceFlow') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:MessageFlow') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:Group');\n}\n\n/**\n * Return true if the given element has an external label.\n *\n * @param {Element} element\n *\n * @return {boolean}\n */\nfunction hasExternalLabel(element) {\n return (0,diagram_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.isLabel)(element.label);\n}\n\n/**\n * Get the position of a sequence flow label.\n *\n * @param {Point[]} waypoints\n *\n * @return {Point}\n */\nfunction getFlowLabelPosition(waypoints) {\n\n // get the waypoints mid\n var mid = waypoints.length / 2 - 1;\n\n var first = waypoints[Math.floor(mid)];\n var second = waypoints[Math.ceil(mid + 0.01)];\n\n // get position\n var position = getWaypointsMid(waypoints);\n\n // calculate angle\n var angle = Math.atan((second.y - first.y) / (second.x - first.x));\n\n var x = position.x,\n y = position.y;\n\n if (Math.abs(angle) < Math.PI / 2) {\n y -= FLOW_LABEL_INDENT;\n } else {\n x += FLOW_LABEL_INDENT;\n }\n\n return { x: x, y: y };\n}\n\n\n/**\n * Get the middle of a number of waypoints.\n *\n * @param {Point[]} waypoints\n *\n * @return {Point}\n */\nfunction getWaypointsMid(waypoints) {\n\n var mid = waypoints.length / 2 - 1;\n\n var first = waypoints[Math.floor(mid)];\n var second = waypoints[Math.ceil(mid + 0.01)];\n\n return {\n x: first.x + (second.x - first.x) / 2,\n y: first.y + (second.y - first.y) / 2\n };\n}\n\n/**\n * Get the middle of the external label of an element.\n *\n * @param {Element} element\n *\n * @return {Point}\n */\nfunction getExternalLabelMid(element) {\n\n if (element.waypoints) {\n return getFlowLabelPosition(element.waypoints);\n } else if ((0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:Group')) {\n return {\n x: element.x + element.width / 2,\n y: element.y + DEFAULT_LABEL_SIZE.height / 2\n };\n } else {\n return {\n x: element.x + element.width / 2,\n y: element.y + element.height + DEFAULT_LABEL_SIZE.height / 2\n };\n }\n}\n\n\n/**\n * Return the bounds of an elements label, parsed from the elements DI or\n * generated from its bounds.\n *\n * @param {ModdleElement} di\n * @param {Element} element\n *\n * @return {Rect}\n */\nfunction getExternalLabelBounds(di, element) {\n\n var mid,\n size,\n bounds,\n label = di.label;\n\n if (label && label.bounds) {\n bounds = label.bounds;\n\n size = {\n width: Math.max(DEFAULT_LABEL_SIZE.width, bounds.width),\n height: bounds.height\n };\n\n mid = {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height / 2\n };\n } else {\n\n mid = getExternalLabelMid(element);\n\n size = DEFAULT_LABEL_SIZE;\n }\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)({\n x: mid.x - size.width / 2,\n y: mid.y - size.height / 2\n }, size);\n}\n\n/**\n * @param {ModdleElement} semantic\n *\n * @returns {string}\n */\nfunction getLabelAttr(semantic) {\n if (\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:FlowElement') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:Participant') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:Lane') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:SequenceFlow') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:MessageFlow') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:DataInput') ||\n (0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:DataOutput')\n ) {\n return 'name';\n }\n\n if ((0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:TextAnnotation')) {\n return 'text';\n }\n\n if ((0,_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(semantic, 'bpmn:Group')) {\n return 'categoryValueRef';\n }\n}\n\n/**\n * @param {ModdleElement} semantic\n *\n * @returns {string}\n */\nfunction getCategoryValue(semantic) {\n var categoryValueRef = semantic['categoryValueRef'];\n\n if (!categoryValueRef) {\n return '';\n }\n\n\n return categoryValueRef.value || '';\n}\n\n/**\n * @param {Element} element\n *\n * @return {string}\n */\nfunction getLabel(element) {\n var semantic = element.businessObject,\n attr = getLabelAttr(semantic);\n\n if (attr) {\n\n if (attr === 'categoryValueRef') {\n\n return getCategoryValue(semantic);\n }\n\n return semantic[attr] || '';\n }\n}\n\n\n/**\n * @param {Element} element\n * @param {string} text\n *\n * @return {Element}\n */\nfunction setLabel(element, text) {\n var semantic = element.businessObject,\n attr = getLabelAttr(semantic);\n\n if (attr) {\n\n if (attr === 'categoryValueRef') {\n semantic['categoryValueRef'].value = text;\n } else {\n semantic[attr] = text;\n }\n\n }\n\n return element;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9MYWJlbFV0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFa0I7O0FBRWU7O0FBRXVCOztBQUVBOztBQUV4RDtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hELGFBQWEsMENBQTBDO0FBQ3ZEO0FBQ0EsYUFBYSxrQ0FBa0M7QUFDL0MsYUFBYSx3Q0FBd0M7QUFDckQ7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1AsU0FBUyw4Q0FBRTtBQUNYLFNBQVMsOENBQUU7QUFDWCxTQUFTLDhDQUFFO0FBQ1gsU0FBUyw4Q0FBRTtBQUNYLFNBQVMsOENBQUU7QUFDWCxTQUFTLDhDQUFFO0FBQ1gsU0FBUyw4Q0FBRTtBQUNYLFNBQVMsOENBQUU7QUFDWCxTQUFTLDhDQUFFO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCxTQUFTLHNFQUFPO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBLFlBQVk7QUFDWjtBQUNPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsV0FBVztBQUNYOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQSxZQUFZO0FBQ1o7QUFDTzs7QUFFUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ087O0FBRVA7QUFDQTtBQUNBLElBQUksU0FBUyw4Q0FBRTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ087O0FBRVA7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTs7QUFFQSxTQUFTLGdEQUFNO0FBQ2Y7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxJQUFJLDhDQUFFO0FBQ04sSUFBSSw4Q0FBRTtBQUNOLElBQUksOENBQUU7QUFDTixJQUFJLDhDQUFFO0FBQ04sSUFBSSw4Q0FBRTtBQUNOLElBQUksOENBQUU7QUFDTixJQUFJLDhDQUFFO0FBQ047QUFDQTtBQUNBOztBQUVBLE1BQU0sOENBQUU7QUFDUjtBQUNBOztBQUVBLE1BQU0sOENBQUU7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGVBQWU7QUFDMUI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL3V0aWwvTGFiZWxVdGlsLmpzP2M0MmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzTGFiZWwgfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XG5cbmV4cG9ydCB7IGlzTGFiZWwgfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlJlY3R9IFJlY3RcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9tb2RlbC9UeXBlcycpLkVsZW1lbnR9IEVsZW1lbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL21vZGVsL1R5cGVzJykuTW9kZGxlRWxlbWVudH0gTW9kZGxlRWxlbWVudFxuICovXG5cbmV4cG9ydCB2YXIgREVGQVVMVF9MQUJFTF9TSVpFID0ge1xuICB3aWR0aDogOTAsXG4gIGhlaWdodDogMjBcbn07XG5cbmV4cG9ydCB2YXIgRkxPV19MQUJFTF9JTkRFTlQgPSAxNTtcblxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBzZW1hbnRpYyBoYXMgYW4gZXh0ZXJuYWwgbGFiZWwuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBzZW1hbnRpY1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xhYmVsRXh0ZXJuYWwoc2VtYW50aWMpIHtcbiAgcmV0dXJuIGlzKHNlbWFudGljLCAnYnBtbjpFdmVudCcpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46R2F0ZXdheScpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJykgfHxcbiAgICAgICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhSW5wdXQnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkRhdGFPdXRwdXQnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOlNlcXVlbmNlRmxvdycpIHx8XG4gICAgICAgICBpcyhzZW1hbnRpYywgJ2JwbW46TWVzc2FnZUZsb3cnKSB8fFxuICAgICAgICAgaXMoc2VtYW50aWMsICdicG1uOkdyb3VwJyk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaGFzIGFuIGV4dGVybmFsIGxhYmVsLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNFeHRlcm5hbExhYmVsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzTGFiZWwoZWxlbWVudC5sYWJlbCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwb3NpdGlvbiBvZiBhIHNlcXVlbmNlIGZsb3cgbGFiZWwuXG4gKlxuICogQHBhcmFtICB7UG9pbnRbXX0gd2F5cG9pbnRzXG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93TGFiZWxQb3NpdGlvbih3YXlwb2ludHMpIHtcblxuICAvLyBnZXQgdGhlIHdheXBvaW50cyBtaWRcbiAgdmFyIG1pZCA9IHdheXBvaW50cy5sZW5ndGggLyAyIC0gMTtcblxuICB2YXIgZmlyc3QgPSB3YXlwb2ludHNbTWF0aC5mbG9vcihtaWQpXTtcbiAgdmFyIHNlY29uZCA9IHdheXBvaW50c1tNYXRoLmNlaWwobWlkICsgMC4wMSldO1xuXG4gIC8vIGdldCBwb3NpdGlvblxuICB2YXIgcG9zaXRpb24gPSBnZXRXYXlwb2ludHNNaWQod2F5cG9pbnRzKTtcblxuICAvLyBjYWxjdWxhdGUgYW5nbGVcbiAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuKChzZWNvbmQueSAtIGZpcnN0LnkpIC8gKHNlY29uZC54IC0gZmlyc3QueCkpO1xuXG4gIHZhciB4ID0gcG9zaXRpb24ueCxcbiAgICAgIHkgPSBwb3NpdGlvbi55O1xuXG4gIGlmIChNYXRoLmFicyhhbmdsZSkgPCBNYXRoLlBJIC8gMikge1xuICAgIHkgLT0gRkxPV19MQUJFTF9JTkRFTlQ7XG4gIH0gZWxzZSB7XG4gICAgeCArPSBGTE9XX0xBQkVMX0lOREVOVDtcbiAgfVxuXG4gIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbn1cblxuXG4vKipcbiAqIEdldCB0aGUgbWlkZGxlIG9mIGEgbnVtYmVyIG9mIHdheXBvaW50cy5cbiAqXG4gKiBAcGFyYW0gIHtQb2ludFtdfSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdheXBvaW50c01pZCh3YXlwb2ludHMpIHtcblxuICB2YXIgbWlkID0gd2F5cG9pbnRzLmxlbmd0aCAvIDIgLSAxO1xuXG4gIHZhciBmaXJzdCA9IHdheXBvaW50c1tNYXRoLmZsb29yKG1pZCldO1xuICB2YXIgc2Vjb25kID0gd2F5cG9pbnRzW01hdGguY2VpbChtaWQgKyAwLjAxKV07XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBmaXJzdC54ICsgKHNlY29uZC54IC0gZmlyc3QueCkgLyAyLFxuICAgIHk6IGZpcnN0LnkgKyAoc2Vjb25kLnkgLSBmaXJzdC55KSAvIDJcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1pZGRsZSBvZiB0aGUgZXh0ZXJuYWwgbGFiZWwgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVybmFsTGFiZWxNaWQoZWxlbWVudCkge1xuXG4gIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgIHJldHVybiBnZXRGbG93TGFiZWxQb3NpdGlvbihlbGVtZW50LndheXBvaW50cyk7XG4gIH0gZWxzZSBpZiAoaXMoZWxlbWVudCwgJ2JwbW46R3JvdXAnKSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICAgIHk6IGVsZW1lbnQueSArIERFRkFVTFRfTEFCRUxfU0laRS5oZWlnaHQgLyAyXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCAvIDIsXG4gICAgICB5OiBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodCArIERFRkFVTFRfTEFCRUxfU0laRS5oZWlnaHQgLyAyXG4gICAgfTtcbiAgfVxufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudHMgbGFiZWwsIHBhcnNlZCBmcm9tIHRoZSBlbGVtZW50cyBESSBvclxuICogZ2VuZXJhdGVkIGZyb20gaXRzIGJvdW5kcy5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRpXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtSZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxMYWJlbEJvdW5kcyhkaSwgZWxlbWVudCkge1xuXG4gIHZhciBtaWQsXG4gICAgICBzaXplLFxuICAgICAgYm91bmRzLFxuICAgICAgbGFiZWwgPSBkaS5sYWJlbDtcblxuICBpZiAobGFiZWwgJiYgbGFiZWwuYm91bmRzKSB7XG4gICAgYm91bmRzID0gbGFiZWwuYm91bmRzO1xuXG4gICAgc2l6ZSA9IHtcbiAgICAgIHdpZHRoOiBNYXRoLm1heChERUZBVUxUX0xBQkVMX1NJWkUud2lkdGgsIGJvdW5kcy53aWR0aCksXG4gICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHRcbiAgICB9O1xuXG4gICAgbWlkID0ge1xuICAgICAgeDogYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyLFxuICAgICAgeTogYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC8gMlxuICAgIH07XG4gIH0gZWxzZSB7XG5cbiAgICBtaWQgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgc2l6ZSA9IERFRkFVTFRfTEFCRUxfU0laRTtcbiAgfVxuXG4gIHJldHVybiBhc3NpZ24oe1xuICAgIHg6IG1pZC54IC0gc2l6ZS53aWR0aCAvIDIsXG4gICAgeTogbWlkLnkgLSBzaXplLmhlaWdodCAvIDJcbiAgfSwgc2l6ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBzZW1hbnRpY1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldExhYmVsQXR0cihzZW1hbnRpYykge1xuICBpZiAoXG4gICAgaXMoc2VtYW50aWMsICdicG1uOkZsb3dFbGVtZW50JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46UGFydGljaXBhbnQnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46U2VxdWVuY2VGbG93JykgfHxcbiAgICBpcyhzZW1hbnRpYywgJ2JwbW46TWVzc2FnZUZsb3cnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhSW5wdXQnKSB8fFxuICAgIGlzKHNlbWFudGljLCAnYnBtbjpEYXRhT3V0cHV0JylcbiAgKSB7XG4gICAgcmV0dXJuICduYW1lJztcbiAgfVxuXG4gIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIHJldHVybiAndGV4dCc7XG4gIH1cblxuICBpZiAoaXMoc2VtYW50aWMsICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4gJ2NhdGVnb3J5VmFsdWVSZWYnO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBzZW1hbnRpY1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldENhdGVnb3J5VmFsdWUoc2VtYW50aWMpIHtcbiAgdmFyIGNhdGVnb3J5VmFsdWVSZWYgPSBzZW1hbnRpY1snY2F0ZWdvcnlWYWx1ZVJlZiddO1xuXG4gIGlmICghY2F0ZWdvcnlWYWx1ZVJlZikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG5cbiAgcmV0dXJuIGNhdGVnb3J5VmFsdWVSZWYudmFsdWUgfHwgJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWwoZWxlbWVudCkge1xuICB2YXIgc2VtYW50aWMgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgYXR0ciA9IGdldExhYmVsQXR0cihzZW1hbnRpYyk7XG5cbiAgaWYgKGF0dHIpIHtcblxuICAgIGlmIChhdHRyID09PSAnY2F0ZWdvcnlWYWx1ZVJlZicpIHtcblxuICAgICAgcmV0dXJuIGdldENhdGVnb3J5VmFsdWUoc2VtYW50aWMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZW1hbnRpY1thdHRyXSB8fCAnJztcbiAgfVxufVxuXG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYWJlbChlbGVtZW50LCB0ZXh0KSB7XG4gIHZhciBzZW1hbnRpYyA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3QsXG4gICAgICBhdHRyID0gZ2V0TGFiZWxBdHRyKHNlbWFudGljKTtcblxuICBpZiAoYXR0cikge1xuXG4gICAgaWYgKGF0dHIgPT09ICdjYXRlZ29yeVZhbHVlUmVmJykge1xuICAgICAgc2VtYW50aWNbJ2NhdGVnb3J5VmFsdWVSZWYnXS52YWx1ZSA9IHRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbWFudGljW2F0dHJdID0gdGV4dDtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js/lib/util/LabelUtil.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js/lib/util/ModelUtil.js":
/*!****************************************************!*\
!*** ./node_modules/bpmn-js/lib/util/ModelUtil.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getBusinessObject: () => (/* binding */ getBusinessObject),\n/* harmony export */ getDi: () => (/* binding */ getDi),\n/* harmony export */ is: () => (/* binding */ is),\n/* harmony export */ isAny: () => (/* binding */ isAny)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n/**\n * @typedef { import('../model/Types').Element } Element\n * @typedef { import('../model/Types').ModdleElement } ModdleElement\n */\n\n/**\n * Is an element of the given BPMN type?\n *\n * @param {Element|ModdleElement} element\n * @param {string} type\n *\n * @return {boolean}\n */\nfunction is(element, type) {\n var bo = getBusinessObject(element);\n\n return bo && (typeof bo.$instanceOf === 'function') && bo.$instanceOf(type);\n}\n\n\n/**\n * Return true if element has any of the given types.\n *\n * @param {Element|ModdleElement} element\n * @param {string[]} types\n *\n * @return {boolean}\n */\nfunction isAny(element, types) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.some)(types, function(t) {\n return is(element, t);\n });\n}\n\n/**\n * Return the business object for a given element.\n *\n * @param {Element|ModdleElement} element\n *\n * @return {ModdleElement}\n */\nfunction getBusinessObject(element) {\n return (element && element.businessObject) || element;\n}\n\n/**\n * Return the di object for a given element.\n *\n * @param {Element} element\n *\n * @return {ModdleElement}\n */\nfunction getDi(element) {\n return element && element.di;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFa0I7O0FBRWxCO0FBQ0EsY0FBYyxtQ0FBbUM7QUFDakQsY0FBYyx5Q0FBeUM7QUFDdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1QkFBdUI7QUFDbkMsWUFBWSxRQUFRO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLFVBQVU7QUFDckI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLFNBQVMsOENBQUk7QUFDYjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQztBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwuanM/MjZlNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBzb21lXG59IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50IH0gRWxlbWVudFxuICogQHR5cGVkZWYgeyBpbXBvcnQoJy4uL21vZGVsL1R5cGVzJykuTW9kZGxlRWxlbWVudCB9IE1vZGRsZUVsZW1lbnRcbiAqL1xuXG4vKipcbiAqIElzIGFuIGVsZW1lbnQgb2YgdGhlIGdpdmVuIEJQTU4gdHlwZT9cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gdHlwZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyhlbGVtZW50LCB0eXBlKSB7XG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHJldHVybiBibyAmJiAodHlwZW9mIGJvLiRpbnN0YW5jZU9mID09PSAnZnVuY3Rpb24nKSAmJiBiby4kaW5zdGFuY2VPZih0eXBlKTtcbn1cblxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIGVsZW1lbnQgaGFzIGFueSBvZiB0aGUgZ2l2ZW4gdHlwZXMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHR5cGVzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55KGVsZW1lbnQsIHR5cGVzKSB7XG4gIHJldHVybiBzb21lKHR5cGVzLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGlzKGVsZW1lbnQsIHQpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGJ1c2luZXNzIG9iamVjdCBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudHxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChlbGVtZW50ICYmIGVsZW1lbnQuYnVzaW5lc3NPYmplY3QpIHx8IGVsZW1lbnQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkaSBvYmplY3QgZm9yIGEgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGkoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LmRpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js/lib/util/ModelUtil.js\n");
/***/ }),
/***/ "./node_modules/bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js":
/*!****************************************************************************!*\
!*** ./node_modules/bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js ***!
\****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isConnection: () => (/* binding */ isConnection),\n/* harmony export */ isLabel: () => (/* binding */ isLabel),\n/* harmony export */ isRoot: () => (/* binding */ isRoot)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n/**\n * Checks whether a value is an instance of Connection.\n *\n * @param {any} value\n *\n * @return {boolean}\n */\nfunction isConnection(value) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isObject)(value) && (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.has)(value, 'waypoints');\n}\n\n/**\n * Checks whether a value is an instance of Label.\n *\n * @param {any} value\n *\n * @return {boolean}\n */\nfunction isLabel(value) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isObject)(value) && (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.has)(value, 'labelTarget');\n}\n\n/**\n * Checks whether a value is an instance of Root.\n *\n * @param {any} value\n *\n * @return {boolean}\n */\nfunction isRoot(value) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isObject)(value) && (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isNil)(value.parent);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Nb2RlbFV0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCxTQUFTLGtEQUFRLFdBQVcsNkNBQUc7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCxTQUFTLGtEQUFRLFdBQVcsNkNBQUc7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCxTQUFTLGtEQUFRLFdBQVcsK0NBQUs7QUFDakMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy9ub2RlX21vZHVsZXMvZGlhZ3JhbS1qcy9saWIvdXRpbC9Nb2RlbFV0aWwuanM/YzQ4YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBoYXMsXG4gIGlzTmlsLFxuICBpc09iamVjdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBDb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Nvbm5lY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiBoYXModmFsdWUsICd3YXlwb2ludHMnKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIExhYmVsLlxuICpcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xhYmVsKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgaGFzKHZhbHVlLCAnbGFiZWxUYXJnZXQnKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIFJvb3QuXG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUm9vdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3QodmFsdWUpICYmIGlzTmlsKHZhbHVlLnBhcmVudCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\n");
/***/ }),
/***/ "./node_modules/bpmnlint/lib/resolver/static-resolver.js":
/*!***************************************************************!*\
!*** ./node_modules/bpmnlint/lib/resolver/static-resolver.js ***!
\***************************************************************/
/***/ ((module) => {
eval("function StaticResolver(cache) {\n this.cache = cache;\n}\n\nmodule.exports = StaticResolver;\n\n\nStaticResolver.prototype.resolveRule = function(pkg, ruleName) {\n return this.resolve('rule', pkg, ruleName);\n};\n\nStaticResolver.prototype.resolveConfig = function(pkg, configName) {\n return this.resolve('config', pkg, configName);\n};\n\nStaticResolver.prototype.resolve = function(type, pkg, name) {\n const id = `${pkg}/${name}`;\n\n const resolved = this.cache[`${type}:${id}`];\n\n if (!resolved) {\n throw new Error(`unknown ${type} <${id}>`);\n }\n\n return resolved;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbmxpbnQvbGliL3Jlc29sdmVyL3N0YXRpYy1yZXNvbHZlci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsSUFBSSxHQUFHLEtBQUs7O0FBRTVCLGlDQUFpQyxLQUFLLEdBQUcsR0FBRzs7QUFFNUM7QUFDQSwrQkFBK0IsTUFBTSxHQUFHLEdBQUc7QUFDM0M7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9icG1ubGludC9saWIvcmVzb2x2ZXIvc3RhdGljLXJlc29sdmVyLmpzP2M2MGQiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gU3RhdGljUmVzb2x2ZXIoY2FjaGUpIHtcbiAgdGhpcy5jYWNoZSA9IGNhY2hlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRpY1Jlc29sdmVyO1xuXG5cblN0YXRpY1Jlc29sdmVyLnByb3RvdHlwZS5yZXNvbHZlUnVsZSA9IGZ1bmN0aW9uKHBrZywgcnVsZU5hbWUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZSgncnVsZScsIHBrZywgcnVsZU5hbWUpO1xufTtcblxuU3RhdGljUmVzb2x2ZXIucHJvdG90eXBlLnJlc29sdmVDb25maWcgPSBmdW5jdGlvbihwa2csIGNvbmZpZ05hbWUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZSgnY29uZmlnJywgcGtnLCBjb25maWdOYW1lKTtcbn07XG5cblN0YXRpY1Jlc29sdmVyLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24odHlwZSwgcGtnLCBuYW1lKSB7XG4gIGNvbnN0IGlkID0gYCR7cGtnfS8ke25hbWV9YDtcblxuICBjb25zdCByZXNvbHZlZCA9IHRoaXMuY2FjaGVbYCR7dHlwZX06JHtpZH1gXTtcblxuICBpZiAoIXJlc29sdmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duICR7dHlwZX0gPCR7aWR9PmApO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bpmnlint/lib/resolver/static-resolver.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/CopyPasteBehavior.js":
/*!******************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/CopyPasteBehavior.js ***!
\******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CopyPasteBehavior)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\r\n\r\n\r\n\r\nconst WILDCARD = '*';\r\n\r\n\r\nclass CopyPasteBehavior {\r\n constructor(eventBus) {\r\n eventBus.on('moddleCopy.canCopyProperty', (context) => {\r\n const {\r\n parent,\r\n property\r\n } = context;\r\n\r\n return this.canCopyProperty(property, parent);\r\n });\r\n }\r\n\r\n /**\r\n * Check wether to disallow copying property.\r\n */\r\n canCopyProperty(property, parent) {\r\n\r\n // (1) check wether property is allowed in parent\r\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isObject)(property) && !isAllowedInParent(property, parent)) {\r\n\r\n return false;\r\n }\r\n\r\n // (2) check more complex scenarios\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(property, 'camunda:InputOutput') && !this.canHostInputOutput(parent)) {\r\n return false;\r\n }\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.isAny)(property, [ 'camunda:Connector', 'camunda:Field' ]) && !this.canHostConnector(parent)) {\r\n return false;\r\n }\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(property, 'camunda:In') && !this.canHostIn(parent)) {\r\n return false;\r\n }\r\n }\r\n\r\n canHostInputOutput(parent) {\r\n\r\n // allowed in camunda:Connector\r\n const connector = getParent(parent, 'camunda:Connector');\r\n\r\n if (connector) {\r\n return true;\r\n }\r\n\r\n // special rules inside bpmn:FlowNode\r\n const flowNode = getParent(parent, 'bpmn:FlowNode');\r\n\r\n if (!flowNode) {\r\n return false;\r\n }\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.isAny)(flowNode, [ 'bpmn:StartEvent', 'bpmn:Gateway', 'bpmn:BoundaryEvent' ])) {\r\n return false;\r\n }\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(flowNode, 'bpmn:SubProcess') && flowNode.get('triggeredByEvent')) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n canHostConnector(parent) {\r\n const serviceTaskLike = getParent(parent, 'camunda:ServiceTaskLike');\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(serviceTaskLike, 'bpmn:MessageEventDefinition')) {\r\n\r\n // only allow on throw and end events\r\n return (\r\n getParent(parent, 'bpmn:IntermediateThrowEvent')\r\n || getParent(parent, 'bpmn:EndEvent')\r\n );\r\n }\r\n\r\n return true;\r\n }\r\n\r\n canHostIn(parent) {\r\n const callActivity = getParent(parent, 'bpmn:CallActivity');\r\n\r\n if (callActivity) {\r\n return true;\r\n }\r\n\r\n const signalEventDefinition = getParent(parent, 'bpmn:SignalEventDefinition');\r\n\r\n if (signalEventDefinition) {\r\n\r\n // only allow on throw and end events\r\n return (\r\n getParent(parent, 'bpmn:IntermediateThrowEvent')\r\n || getParent(parent, 'bpmn:EndEvent')\r\n );\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nCopyPasteBehavior.$inject = [ 'eventBus' ];\r\n\r\n\r\n// helpers //////////\r\n\r\nfunction getParent(element, type) {\r\n if (!type) {\r\n return element.$parent;\r\n }\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, type)) {\r\n return element;\r\n }\r\n\r\n if (!element.$parent) {\r\n return;\r\n }\r\n\r\n return getParent(element.$parent, type);\r\n}\r\n\r\nfunction isAllowedInParent(property, parent) {\r\n\r\n // (1) find property descriptor\r\n var descriptor = property.$type && property.$model.getTypeDescriptor(property.$type);\r\n\r\n var allowedIn = descriptor && descriptor.meta && descriptor.meta.allowedIn;\r\n\r\n if (!allowedIn || isWildcard(allowedIn)) {\r\n return true;\r\n }\r\n\r\n // (2) check wether property has parent of allowed type\r\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.some)(allowedIn, function(type) {\r\n return getParent(parent, type);\r\n });\r\n}\r\n\r\nfunction isWildcard(allowedIn) {\r\n return allowedIn.includes(WILDCARD);\r\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9Db3B5UGFzdGVCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFHb0M7QUFDcEM7QUFJa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxrREFBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4REFBRTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUVBQUs7QUFDYjtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhEQUFFO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUVBQUs7QUFDYjtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhEQUFFO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4REFBRTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSw4REFBRTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyw4Q0FBSTtBQUNiO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9Db3B5UGFzdGVCZWhhdmlvci5qcz9lNzcyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgaXMsXHJcbiAgaXNBbnlcclxufSBmcm9tICdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGlzT2JqZWN0LFxyXG4gIHNvbWVcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5jb25zdCBXSUxEQ0FSRCA9ICcqJztcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3B5UGFzdGVCZWhhdmlvciB7XHJcbiAgY29uc3RydWN0b3IoZXZlbnRCdXMpIHtcclxuICAgIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0eScsIChjb250ZXh0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgcHJvcGVydHlcclxuICAgICAgfSA9IGNvbnRleHQ7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5jYW5Db3B5UHJvcGVydHkocHJvcGVydHksIHBhcmVudCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdldGhlciB0byBkaXNhbGxvdyBjb3B5aW5nIHByb3BlcnR5LlxyXG4gICAqL1xyXG4gIGNhbkNvcHlQcm9wZXJ0eShwcm9wZXJ0eSwgcGFyZW50KSB7XHJcblxyXG4gICAgLy8gKDEpIGNoZWNrIHdldGhlciBwcm9wZXJ0eSBpcyBhbGxvd2VkIGluIHBhcmVudFxyXG4gICAgaWYgKGlzT2JqZWN0KHByb3BlcnR5KSAmJiAhaXNBbGxvd2VkSW5QYXJlbnQocHJvcGVydHksIHBhcmVudCkpIHtcclxuXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAoMikgY2hlY2sgbW9yZSBjb21wbGV4IHNjZW5hcmlvc1xyXG4gICAgaWYgKGlzKHByb3BlcnR5LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpICYmICF0aGlzLmNhbkhvc3RJbnB1dE91dHB1dChwYXJlbnQpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNBbnkocHJvcGVydHksIFsgJ2NhbXVuZGE6Q29ubmVjdG9yJywgJ2NhbXVuZGE6RmllbGQnIF0pICYmICF0aGlzLmNhbkhvc3RDb25uZWN0b3IocGFyZW50KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzKHByb3BlcnR5LCAnY2FtdW5kYTpJbicpICYmICF0aGlzLmNhbkhvc3RJbihwYXJlbnQpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbkhvc3RJbnB1dE91dHB1dChwYXJlbnQpIHtcclxuXHJcbiAgICAvLyBhbGxvd2VkIGluIGNhbXVuZGE6Q29ubmVjdG9yXHJcbiAgICBjb25zdCBjb25uZWN0b3IgPSBnZXRQYXJlbnQocGFyZW50LCAnY2FtdW5kYTpDb25uZWN0b3InKTtcclxuXHJcbiAgICBpZiAoY29ubmVjdG9yKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNwZWNpYWwgcnVsZXMgaW5zaWRlIGJwbW46Rmxvd05vZGVcclxuICAgIGNvbnN0IGZsb3dOb2RlID0gZ2V0UGFyZW50KHBhcmVudCwgJ2JwbW46Rmxvd05vZGUnKTtcclxuXHJcbiAgICBpZiAoIWZsb3dOb2RlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNBbnkoZmxvd05vZGUsIFsgJ2JwbW46U3RhcnRFdmVudCcsICdicG1uOkdhdGV3YXknLCAnYnBtbjpCb3VuZGFyeUV2ZW50JyBdKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzKGZsb3dOb2RlLCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgZmxvd05vZGUuZ2V0KCd0cmlnZ2VyZWRCeUV2ZW50JykpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2FuSG9zdENvbm5lY3RvcihwYXJlbnQpIHtcclxuICAgIGNvbnN0IHNlcnZpY2VUYXNrTGlrZSA9IGdldFBhcmVudChwYXJlbnQsICdjYW11bmRhOlNlcnZpY2VUYXNrTGlrZScpO1xyXG5cclxuICAgIGlmIChpcyhzZXJ2aWNlVGFza0xpa2UsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKSkge1xyXG5cclxuICAgICAgLy8gb25seSBhbGxvdyBvbiB0aHJvdyBhbmQgZW5kIGV2ZW50c1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGdldFBhcmVudChwYXJlbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKVxyXG4gICAgICAgIHx8IGdldFBhcmVudChwYXJlbnQsICdicG1uOkVuZEV2ZW50JylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNhbkhvc3RJbihwYXJlbnQpIHtcclxuICAgIGNvbnN0IGNhbGxBY3Rpdml0eSA9IGdldFBhcmVudChwYXJlbnQsICdicG1uOkNhbGxBY3Rpdml0eScpO1xyXG5cclxuICAgIGlmIChjYWxsQWN0aXZpdHkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2lnbmFsRXZlbnREZWZpbml0aW9uID0gZ2V0UGFyZW50KHBhcmVudCwgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyk7XHJcblxyXG4gICAgaWYgKHNpZ25hbEV2ZW50RGVmaW5pdGlvbikge1xyXG5cclxuICAgICAgLy8gb25seSBhbGxvdyBvbiB0aHJvdyBhbmQgZW5kIGV2ZW50c1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGdldFBhcmVudChwYXJlbnQsICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnKVxyXG4gICAgICAgIHx8IGdldFBhcmVudChwYXJlbnQsICdicG1uOkVuZEV2ZW50JylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbkNvcHlQYXN0ZUJlaGF2aW9yLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGdldFBhcmVudChlbGVtZW50LCB0eXBlKSB7XHJcbiAgaWYgKCF0eXBlKSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC4kcGFyZW50O1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzKGVsZW1lbnQsIHR5cGUpKSB7XHJcbiAgICByZXR1cm4gZWxlbWVudDtcclxuICB9XHJcblxyXG4gIGlmICghZWxlbWVudC4kcGFyZW50KSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZ2V0UGFyZW50KGVsZW1lbnQuJHBhcmVudCwgdHlwZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQWxsb3dlZEluUGFyZW50KHByb3BlcnR5LCBwYXJlbnQpIHtcclxuXHJcbiAgLy8gKDEpIGZpbmQgcHJvcGVydHkgZGVzY3JpcHRvclxyXG4gIHZhciBkZXNjcmlwdG9yID0gcHJvcGVydHkuJHR5cGUgJiYgcHJvcGVydHkuJG1vZGVsLmdldFR5cGVEZXNjcmlwdG9yKHByb3BlcnR5LiR0eXBlKTtcclxuXHJcbiAgdmFyIGFsbG93ZWRJbiA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5tZXRhICYmIGRlc2NyaXB0b3IubWV0YS5hbGxvd2VkSW47XHJcblxyXG4gIGlmICghYWxsb3dlZEluIHx8IGlzV2lsZGNhcmQoYWxsb3dlZEluKSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyAoMikgY2hlY2sgd2V0aGVyIHByb3BlcnR5IGhhcyBwYXJlbnQgb2YgYWxsb3dlZCB0eXBlXHJcbiAgcmV0dXJuIHNvbWUoYWxsb3dlZEluLCBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICByZXR1cm4gZ2V0UGFyZW50KHBhcmVudCwgdHlwZSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2lsZGNhcmQoYWxsb3dlZEluKSB7XHJcbiAgcmV0dXJuIGFsbG93ZWRJbi5pbmNsdWRlcyhXSUxEQ0FSRCk7XHJcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/CopyPasteBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/CopyPasteRootElementBehavior.js":
/*!*****************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/CopyPasteRootElementBehavior.js ***!
\*****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CopyPasteRootElementBehavior)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/diagram-js/lib/util/Collections.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst LOW_PRIORITY = 500;\r\n\r\n\r\n/**\r\n * Add referenced root elements (bpmn:Error) if they don't exist.\r\n * Copy referenced root elements on copy & paste.\r\n */\r\nclass CopyPasteRootElementBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(bpmnFactory, bpmnjs, eventBus, moddleCopy) {\r\n super(eventBus);\r\n\r\n function hasRootElement(rootElement) {\r\n const definitions = bpmnjs.getDefinitions(),\r\n rootElements = definitions.get('rootElements');\r\n\r\n return !!(0,min_dash__WEBPACK_IMPORTED_MODULE_1__.find)(rootElements, (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.matchPattern)({ id: rootElement.get('id') }));\r\n }\r\n\r\n // create shape\r\n this.executed('shape.create', (context) => {\r\n const { shape } = context;\r\n\r\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(shape);\r\n\r\n if (!canHaveNestedRootElementReference(businessObject)) {\r\n return;\r\n }\r\n\r\n const referencedRootElements = getRootElements(businessObject, getReferencingElement(shape)),\r\n rootElements = bpmnjs.getDefinitions().get('rootElements');\r\n\r\n context.addedRootElements = [];\r\n\r\n referencedRootElements.forEach((reference) => {\r\n const { referencedElement } = reference;\r\n\r\n if (referencedElement && !hasRootElement(referencedElement)) {\r\n\r\n // add root element\r\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.add)(rootElements, referencedElement);\r\n\r\n context.addedRootElements.push(referencedElement);\r\n }\r\n });\r\n }, true);\r\n\r\n this.reverted('shape.create', (context) => {\r\n const { addedRootElements } = context;\r\n\r\n if (!addedRootElements) {\r\n return;\r\n }\r\n\r\n const rootElements = bpmnjs.getDefinitions().get('rootElements');\r\n\r\n // remove root elements\r\n addedRootElements.forEach((addedRootElement) => {\r\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.remove)(rootElements, addedRootElement);\r\n });\r\n }, true);\r\n\r\n eventBus.on('copyPaste.copyElement', function(context) {\r\n const {\r\n descriptor,\r\n element\r\n } = context;\r\n\r\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element);\r\n\r\n if (element.labelTarget || !canHaveNestedRootElementReference(businessObject)) {\r\n return;\r\n }\r\n\r\n const rootElements = getRootElements(businessObject, getReferencingElement(element));\r\n\r\n if (rootElements) {\r\n descriptor.referencedRootElements = rootElements;\r\n }\r\n });\r\n\r\n eventBus.on('copyPaste.pasteElement', LOW_PRIORITY, (context) => {\r\n const { descriptor } = context;\r\n\r\n const {\r\n businessObject,\r\n referencedRootElements\r\n } = descriptor;\r\n\r\n if (!referencedRootElements) {\r\n return;\r\n }\r\n\r\n referencedRootElements.forEach((reference) => {\r\n let {\r\n idx,\r\n referencedElement\r\n } = reference;\r\n\r\n if (!referencedElement) {\r\n return;\r\n }\r\n\r\n if (!hasRootElement(referencedElement)) {\r\n referencedElement = moddleCopy.copyElement(\r\n referencedElement,\r\n bpmnFactory.create(referencedElement.$type)\r\n );\r\n }\r\n\r\n setRootElement(businessObject, referencedElement, idx);\r\n });\r\n\r\n delete descriptor.referencedRootElements;\r\n });\r\n }\r\n}\r\n\r\nCopyPasteRootElementBehavior.$inject = [\r\n 'bpmnFactory',\r\n 'bpmnjs',\r\n 'eventBus',\r\n 'moddleCopy'\r\n];\r\n\r\n\r\n// helpers //////////\r\n\r\nfunction getReferencingElement(element) {\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:ServiceTask')) {\r\n return 'camunda:ErrorEventDefinition';\r\n }\r\n}\r\n\r\nfunction getRootElementReferencePropertyName(bo) {\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(bo, 'camunda:ErrorEventDefinition')) {\r\n return 'errorRef';\r\n }\r\n}\r\n\r\nfunction canHaveNestedRootElementReference(businessObject) {\r\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:ServiceTask') && businessObject.get('type') === 'external';\r\n}\r\n\r\n/**\r\n * Retrieves a list of to-be copied references for the extension elements\r\n * of a given element in the following form.\r\n *\r\n * [\r\n * {\r\n * idx: 0, // position of extension in the list of extension elements\r\n * referencedElement: {ModdleElement} // reference to root element\r\n * }\r\n * ]\r\n *\r\n *\r\n * @param {ModdleElement} businessObject\r\n * @param {String} extensionElementType\r\n *\r\n * @returns {Array}\r\n */\r\nfunction getRootElements(businessObject, extensionElementType) {\r\n const extensionElements = businessObject.get('extensionElements');\r\n\r\n if (!extensionElements) {\r\n return [];\r\n }\r\n\r\n return extensionElements\r\n .get('values')\r\n .filter((element) => (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, extensionElementType))\r\n .reduce((result, element) => {\r\n const referencedElement = element.get(getRootElementReferencePropertyName(element));\r\n\r\n if (referencedElement) {\r\n result.push({\r\n idx: getExtensionElementId(businessObject, element),\r\n referencedElement\r\n });\r\n }\r\n\r\n return result;\r\n }, []);\r\n}\r\n\r\nfunction setRootElement(businessObject, rootElement, index) {\r\n const extensionElement = businessObject.get('extensionElements').get('values')[ index ];\r\n\r\n extensionElement.set(getRootElementReferencePropertyName(extensionElement), rootElement);\r\n}\r\n\r\nfunction getExtensionElementId(businessObject, extensionElement) {\r\n const extensionElements = businessObject.get('extensionElements');\r\n\r\n if (!extensionElements) {\r\n return -1;\r\n }\r\n\r\n return extensionElements.get('values').indexOf(extensionElement);\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9Db3B5UGFzdGVSb290RWxlbWVudEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR2tCO0FBQ2xCO0FBQzJFO0FBQzNFO0FBSXlDO0FBQ3pDO0FBSW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLDJDQUEyQyxpRkFBa0I7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDhDQUFJLGVBQWUsc0RBQVksR0FBRywyQkFBMkI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEI7QUFDQSw2QkFBNkIsNkVBQWlCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxvRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxjQUFjLG9CQUFvQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVFQUFnQjtBQUN4QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSw2QkFBNkIsNkVBQWlCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxjQUFjLGFBQWE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sOERBQUU7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSw4REFBRTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDhEQUFFO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGVBQWU7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDhEQUFFO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy1iZWhhdmlvcnMvbGliL2NhbXVuZGEtcGxhdGZvcm0vQ29weVBhc3RlUm9vdEVsZW1lbnRCZWhhdmlvci5qcz85YzViIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgZmluZCxcclxuICBtYXRjaFBhdHRlcm5cclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXHJcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgaXNcclxufSBmcm9tICdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5cclxuY29uc3QgTE9XX1BSSU9SSVRZID0gNTAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBZGQgcmVmZXJlbmNlZCByb290IGVsZW1lbnRzIChicG1uOkVycm9yKSBpZiB0aGV5IGRvbid0IGV4aXN0LlxyXG4gKiBDb3B5IHJlZmVyZW5jZWQgcm9vdCBlbGVtZW50cyBvbiBjb3B5ICYgcGFzdGUuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3B5UGFzdGVSb290RWxlbWVudEJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihicG1uRmFjdG9yeSwgYnBtbmpzLCBldmVudEJ1cywgbW9kZGxlQ29weSkge1xyXG4gICAgc3VwZXIoZXZlbnRCdXMpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGhhc1Jvb3RFbGVtZW50KHJvb3RFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gYnBtbmpzLmdldERlZmluaXRpb25zKCksXHJcbiAgICAgICAgICAgIHJvb3RFbGVtZW50cyA9IGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyk7XHJcblxyXG4gICAgICByZXR1cm4gISFmaW5kKHJvb3RFbGVtZW50cywgbWF0Y2hQYXR0ZXJuKHsgaWQ6IHJvb3RFbGVtZW50LmdldCgnaWQnKSB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY3JlYXRlIHNoYXBlXHJcbiAgICB0aGlzLmV4ZWN1dGVkKCdzaGFwZS5jcmVhdGUnLCAoY29udGV4dCkgPT4ge1xyXG4gICAgICBjb25zdCB7IHNoYXBlIH0gPSBjb250ZXh0O1xyXG5cclxuICAgICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XHJcblxyXG4gICAgICBpZiAoIWNhbkhhdmVOZXN0ZWRSb290RWxlbWVudFJlZmVyZW5jZShidXNpbmVzc09iamVjdCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJlZmVyZW5jZWRSb290RWxlbWVudHMgPSBnZXRSb290RWxlbWVudHMoYnVzaW5lc3NPYmplY3QsIGdldFJlZmVyZW5jaW5nRWxlbWVudChzaGFwZSkpLFxyXG4gICAgICAgICAgICByb290RWxlbWVudHMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKS5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgICAgY29udGV4dC5hZGRlZFJvb3RFbGVtZW50cyA9IFtdO1xyXG5cclxuICAgICAgcmVmZXJlbmNlZFJvb3RFbGVtZW50cy5mb3JFYWNoKChyZWZlcmVuY2UpID0+IHtcclxuICAgICAgICBjb25zdCB7IHJlZmVyZW5jZWRFbGVtZW50IH0gPSByZWZlcmVuY2U7XHJcblxyXG4gICAgICAgIGlmIChyZWZlcmVuY2VkRWxlbWVudCAmJiAhaGFzUm9vdEVsZW1lbnQocmVmZXJlbmNlZEVsZW1lbnQpKSB7XHJcblxyXG4gICAgICAgICAgLy8gYWRkIHJvb3QgZWxlbWVudFxyXG4gICAgICAgICAgY29sbGVjdGlvbkFkZChyb290RWxlbWVudHMsIHJlZmVyZW5jZWRFbGVtZW50KTtcclxuXHJcbiAgICAgICAgICBjb250ZXh0LmFkZGVkUm9vdEVsZW1lbnRzLnB1c2gocmVmZXJlbmNlZEVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9LCB0cnVlKTtcclxuXHJcbiAgICB0aGlzLnJldmVydGVkKCdzaGFwZS5jcmVhdGUnLCAoY29udGV4dCkgPT4ge1xyXG4gICAgICBjb25zdCB7IGFkZGVkUm9vdEVsZW1lbnRzIH0gPSBjb250ZXh0O1xyXG5cclxuICAgICAgaWYgKCFhZGRlZFJvb3RFbGVtZW50cykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gYnBtbmpzLmdldERlZmluaXRpb25zKCkuZ2V0KCdyb290RWxlbWVudHMnKTtcclxuXHJcbiAgICAgIC8vIHJlbW92ZSByb290IGVsZW1lbnRzXHJcbiAgICAgIGFkZGVkUm9vdEVsZW1lbnRzLmZvckVhY2goKGFkZGVkUm9vdEVsZW1lbnQpID0+IHtcclxuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKHJvb3RFbGVtZW50cywgYWRkZWRSb290RWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgdHJ1ZSk7XHJcblxyXG4gICAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGRlc2NyaXB0b3IsXHJcbiAgICAgICAgZWxlbWVudFxyXG4gICAgICB9ID0gY29udGV4dDtcclxuXHJcbiAgICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC5sYWJlbFRhcmdldCB8fCAhY2FuSGF2ZU5lc3RlZFJvb3RFbGVtZW50UmVmZXJlbmNlKGJ1c2luZXNzT2JqZWN0KSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gZ2V0Um9vdEVsZW1lbnRzKGJ1c2luZXNzT2JqZWN0LCBnZXRSZWZlcmVuY2luZ0VsZW1lbnQoZWxlbWVudCkpO1xyXG5cclxuICAgICAgaWYgKHJvb3RFbGVtZW50cykge1xyXG4gICAgICAgIGRlc2NyaXB0b3IucmVmZXJlbmNlZFJvb3RFbGVtZW50cyA9IHJvb3RFbGVtZW50cztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnQnLCBMT1dfUFJJT1JJVFksIChjb250ZXh0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgZGVzY3JpcHRvciB9ID0gY29udGV4dDtcclxuXHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBidXNpbmVzc09iamVjdCxcclxuICAgICAgICByZWZlcmVuY2VkUm9vdEVsZW1lbnRzXHJcbiAgICAgIH0gPSBkZXNjcmlwdG9yO1xyXG5cclxuICAgICAgaWYgKCFyZWZlcmVuY2VkUm9vdEVsZW1lbnRzKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZWZlcmVuY2VkUm9vdEVsZW1lbnRzLmZvckVhY2goKHJlZmVyZW5jZSkgPT4ge1xyXG4gICAgICAgIGxldCB7XHJcbiAgICAgICAgICBpZHgsXHJcbiAgICAgICAgICByZWZlcmVuY2VkRWxlbWVudFxyXG4gICAgICAgIH0gPSByZWZlcmVuY2U7XHJcblxyXG4gICAgICAgIGlmICghcmVmZXJlbmNlZEVsZW1lbnQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaGFzUm9vdEVsZW1lbnQocmVmZXJlbmNlZEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICByZWZlcmVuY2VkRWxlbWVudCA9IG1vZGRsZUNvcHkuY29weUVsZW1lbnQoXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZWRFbGVtZW50LFxyXG4gICAgICAgICAgICBicG1uRmFjdG9yeS5jcmVhdGUocmVmZXJlbmNlZEVsZW1lbnQuJHR5cGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QsIHJlZmVyZW5jZWRFbGVtZW50LCBpZHgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yLnJlZmVyZW5jZWRSb290RWxlbWVudHM7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbkNvcHlQYXN0ZVJvb3RFbGVtZW50QmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnYnBtbkZhY3RvcnknLFxyXG4gICdicG1uanMnLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ21vZGRsZUNvcHknXHJcbl07XHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2luZ0VsZW1lbnQoZWxlbWVudCkge1xyXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpTZXJ2aWNlVGFzaycpKSB7XHJcbiAgICByZXR1cm4gJ2NhbXVuZGE6RXJyb3JFdmVudERlZmluaXRpb24nO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Um9vdEVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eU5hbWUoYm8pIHtcclxuICBpZiAoaXMoYm8sICdjYW11bmRhOkVycm9yRXZlbnREZWZpbml0aW9uJykpIHtcclxuICAgIHJldHVybiAnZXJyb3JSZWYnO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2FuSGF2ZU5lc3RlZFJvb3RFbGVtZW50UmVmZXJlbmNlKGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgcmV0dXJuIGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTZXJ2aWNlVGFzaycpICYmIGJ1c2luZXNzT2JqZWN0LmdldCgndHlwZScpID09PSAnZXh0ZXJuYWwnO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0cmlldmVzIGEgbGlzdCBvZiB0by1iZSBjb3BpZWQgcmVmZXJlbmNlcyBmb3IgdGhlIGV4dGVuc2lvbiBlbGVtZW50c1xyXG4gKiBvZiBhIGdpdmVuIGVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBmb3JtLlxyXG4gKlxyXG4gKiBbXHJcbiAqICB7XHJcbiAqICAgIGlkeDogMCwgLy8gcG9zaXRpb24gb2YgZXh0ZW5zaW9uIGluIHRoZSBsaXN0IG9mIGV4dGVuc2lvbiBlbGVtZW50c1xyXG4gKiAgICByZWZlcmVuY2VkRWxlbWVudDoge01vZGRsZUVsZW1lbnR9IC8vIHJlZmVyZW5jZSB0byByb290IGVsZW1lbnRcclxuICogIH1cclxuICogXVxyXG4gKlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJ1c2luZXNzT2JqZWN0XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBleHRlbnNpb25FbGVtZW50VHlwZVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7QXJyYXl9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRSb290RWxlbWVudHMoYnVzaW5lc3NPYmplY3QsIGV4dGVuc2lvbkVsZW1lbnRUeXBlKSB7XHJcbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XHJcblxyXG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50c1xyXG4gICAgLmdldCgndmFsdWVzJylcclxuICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+IGlzKGVsZW1lbnQsIGV4dGVuc2lvbkVsZW1lbnRUeXBlKSlcclxuICAgIC5yZWR1Y2UoKHJlc3VsdCwgZWxlbWVudCkgPT4ge1xyXG4gICAgICBjb25zdCByZWZlcmVuY2VkRWxlbWVudCA9IGVsZW1lbnQuZ2V0KGdldFJvb3RFbGVtZW50UmVmZXJlbmNlUHJvcGVydHlOYW1lKGVsZW1lbnQpKTtcclxuXHJcbiAgICAgIGlmIChyZWZlcmVuY2VkRWxlbWVudCkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICAgIGlkeDogZ2V0RXh0ZW5zaW9uRWxlbWVudElkKGJ1c2luZXNzT2JqZWN0LCBlbGVtZW50KSxcclxuICAgICAgICAgIHJlZmVyZW5jZWRFbGVtZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LCBbXSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFJvb3RFbGVtZW50KGJ1c2luZXNzT2JqZWN0LCByb290RWxlbWVudCwgaW5kZXgpIHtcclxuICBjb25zdCBleHRlbnNpb25FbGVtZW50ID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpLmdldCgndmFsdWVzJylbIGluZGV4IF07XHJcblxyXG4gIGV4dGVuc2lvbkVsZW1lbnQuc2V0KGdldFJvb3RFbGVtZW50UmVmZXJlbmNlUHJvcGVydHlOYW1lKGV4dGVuc2lvbkVsZW1lbnQpLCByb290RWxlbWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkVsZW1lbnRJZChidXNpbmVzc09iamVjdCwgZXh0ZW5zaW9uRWxlbWVudCkge1xyXG4gIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5pbmRleE9mKGV4dGVuc2lvbkVsZW1lbnQpO1xyXG59XHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/CopyPasteRootElementBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/DeleteErrorEventDefinitionBehavior.js":
/*!***********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/DeleteErrorEventDefinitionBehavior.js ***!
\***********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DeleteErrorEventDefinitionBehavior)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/ExtensionElementsUtil */ \"./node_modules/camunda-bpmn-js-behaviors/lib/util/ExtensionElementsUtil.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nconst HIGH_PRIORITY = 5000;\r\n\r\n\r\n/**\r\n * Camunda BPMN specific behavior ensuring camunda:ErrorEventDefinition extension elements are removed\r\n * if type of e.g. bpmn:ServiceTask is set to something other than external.\r\n */\r\nclass DeleteErrorEventDefinitionBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\r\n constructor(commandStack, eventBus) {\r\n super(eventBus);\r\n\r\n this.postExecute([\r\n 'element.updateProperties',\r\n 'element.updateModdleProperties'\r\n ], HIGH_PRIORITY, function(context) {\r\n const {\r\n element,\r\n moddleElement,\r\n properties\r\n } = context;\r\n\r\n const businessObject = moddleElement || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element);\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'camunda:ExternalCapable')\r\n && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'camunda:ExternalCapable')\r\n && properties[ 'camunda:type' ] !== 'external'\r\n ) {\r\n const errorEventDefinitions = (0,_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__.getExtensionElementsList)(businessObject, 'camunda:ErrorEventDefinition');\r\n\r\n if (errorEventDefinitions.length) {\r\n (0,_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__.removeExtensionElements)(element, businessObject, errorEventDefinitions, commandStack);\r\n }\r\n }\r\n }, true);\r\n\r\n }\r\n}\r\n\r\nDeleteErrorEventDefinitionBehavior.$inject = [\r\n 'commandStack',\r\n 'eventBus'\r\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9EZWxldGVFcnJvckV2ZW50RGVmaW5pdGlvbkJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBMkU7QUFDM0U7QUFJb0M7QUFDcEM7QUFJdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLGlEQUFpRCxpRkFBa0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLDhDQUE4Qyw2RUFBaUI7QUFDL0Q7QUFDQSxVQUFVLDhEQUFFO0FBQ1osV0FBVyw4REFBRTtBQUNiO0FBQ0E7QUFDQSxzQ0FBc0MscUZBQXdCO0FBQzlEO0FBQ0E7QUFDQSxVQUFVLG9GQUF1QjtBQUNqQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9EZWxldGVFcnJvckV2ZW50RGVmaW5pdGlvbkJlaGF2aW9yLmpzP2I5MzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gIGlzXHJcbn0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QsXHJcbiAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHNcclxufSBmcm9tICcuLi91dGlsL0V4dGVuc2lvbkVsZW1lbnRzVXRpbCc7XHJcblxyXG5jb25zdCBISUdIX1BSSU9SSVRZID0gNTAwMDtcclxuXHJcblxyXG4vKipcclxuICogQ2FtdW5kYSBCUE1OIHNwZWNpZmljIGJlaGF2aW9yIGVuc3VyaW5nIGNhbXVuZGE6RXJyb3JFdmVudERlZmluaXRpb24gZXh0ZW5zaW9uIGVsZW1lbnRzIGFyZSByZW1vdmVkXHJcbiAqIGlmIHR5cGUgb2YgZS5nLiBicG1uOlNlcnZpY2VUYXNrIGlzIHNldCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBleHRlcm5hbC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbGV0ZUVycm9yRXZlbnREZWZpbml0aW9uQmVoYXZpb3IgZXh0ZW5kcyBDb21tYW5kSW50ZXJjZXB0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKGNvbW1hbmRTdGFjaywgZXZlbnRCdXMpIHtcclxuICAgIHN1cGVyKGV2ZW50QnVzKTtcclxuXHJcbiAgICB0aGlzLnBvc3RFeGVjdXRlKFtcclxuICAgICAgJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsXHJcbiAgICAgICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnXHJcbiAgICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgIG1vZGRsZUVsZW1lbnQsXHJcbiAgICAgICAgcHJvcGVydGllc1xyXG4gICAgICB9ID0gY29udGV4dDtcclxuXHJcbiAgICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gbW9kZGxlRWxlbWVudCB8fCBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChpcyhlbGVtZW50LCAnY2FtdW5kYTpFeHRlcm5hbENhcGFibGUnKVxyXG4gICAgICAgICYmIGlzKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpFeHRlcm5hbENhcGFibGUnKVxyXG4gICAgICAgICYmIHByb3BlcnRpZXNbICdjYW11bmRhOnR5cGUnIF0gIT09ICdleHRlcm5hbCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb25zID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvbicpO1xyXG5cclxuICAgICAgICBpZiAoZXJyb3JFdmVudERlZmluaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGVycm9yRXZlbnREZWZpbml0aW9ucywgY29tbWFuZFN0YWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIHRydWUpO1xyXG5cclxuICB9XHJcbn1cclxuXHJcbkRlbGV0ZUVycm9yRXZlbnREZWZpbml0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnY29tbWFuZFN0YWNrJyxcclxuICAnZXZlbnRCdXMnXHJcbl07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/DeleteErrorEventDefinitionBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/DeleteRetryTimeCycleBehavior.js":
/*!*****************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/DeleteRetryTimeCycleBehavior.js ***!
\*****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DeleteRetryTimeCycleBehavior)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/ExtensionElementsUtil */ \"./node_modules/camunda-bpmn-js-behaviors/lib/util/ExtensionElementsUtil.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nconst HIGH_PRIORITY = 5000;\r\n\r\n\r\n/**\r\n * Camunda BPMN specific behavior ensuring camunda:FailedJobRetryTimeCycle is\r\n * removed when both camunda:asyncAfter and camunda:asyncBefore set to false.\r\n * Doesn't apply if element has bpmn:TimerEventDefinition.\r\n */\r\nclass DeleteRetryTimeCycleBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\r\n constructor(commandStack, eventBus) {\r\n super(eventBus);\r\n\r\n this.postExecute([\r\n 'element.updateProperties',\r\n 'element.updateModdleProperties'\r\n ], HIGH_PRIORITY, function(context) {\r\n const {\r\n element,\r\n moddleElement,\r\n properties = {}\r\n } = context;\r\n\r\n const asyncAfter = properties[ 'camunda:asyncAfter' ],\r\n asyncBefore = properties[ 'camunda:asyncBefore' ];\r\n\r\n const businessObject = moddleElement || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element);\r\n\r\n const failedJobRetryTimeCycle = getFailedJobRetryTimeCycle(element);\r\n\r\n if (\r\n !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'camunda:AsyncCapable')\r\n || !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'camunda:AsyncCapable')\r\n || (asyncAfter !== false && asyncBefore !== false)\r\n || !failedJobRetryTimeCycle\r\n || getTimerEventDefinition(element)\r\n || isAsyncBefore(businessObject)\r\n || isAsyncAfter(businessObject)\r\n ) {\r\n return;\r\n }\r\n\r\n (0,_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__.removeExtensionElements)(element, businessObject, failedJobRetryTimeCycle, commandStack);\r\n }, true);\r\n\r\n }\r\n}\r\n\r\nDeleteRetryTimeCycleBehavior.$inject = [\r\n 'commandStack',\r\n 'eventBus'\r\n];\r\n\r\n\r\n// helpers //////////\r\n\r\nfunction isAsyncBefore(businessObject) {\r\n return !!(businessObject.get('camunda:asyncBefore') || businessObject.get('camunda:async'));\r\n}\r\n\r\nfunction isAsyncAfter(businessObject) {\r\n return !!businessObject.get('camunda:asyncAfter');\r\n}\r\n\r\nfunction getFailedJobRetryTimeCycle(element) {\r\n return (0,_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__.getExtensionElementsList)(element, 'camunda:FailedJobRetryTimeCycle')[ 0 ];\r\n}\r\n\r\nfunction getTimerEventDefinition(element) {\r\n return getEventDefinition(element, 'bpmn:TimerEventDefinition');\r\n}\r\n\r\nfunction getEventDefinition(element, type) {\r\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element);\r\n\r\n const eventDefinitions = businessObject.get('eventDefinitions');\r\n\r\n if (!eventDefinitions || !eventDefinitions.length) {\r\n return;\r\n }\r\n\r\n return eventDefinitions.find((eventDefinition) => {\r\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(eventDefinition, type);\r\n });\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9EZWxldGVSZXRyeVRpbWVDeWNsZUJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHb0M7QUFDcEM7QUFDMkU7QUFDM0U7QUFJdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsMkNBQTJDLGlGQUFrQjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLDZFQUFpQjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsOERBQUU7QUFDWCxZQUFZLDhEQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvRkFBdUI7QUFDN0IsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMscUZBQXdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDZFQUFpQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4REFBRTtBQUNiLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMtYmVoYXZpb3JzL2xpYi9jYW11bmRhLXBsYXRmb3JtL0RlbGV0ZVJldHJ5VGltZUN5Y2xlQmVoYXZpb3IuanM/NzI4MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gIGlzXHJcbn0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdCxcclxuICByZW1vdmVFeHRlbnNpb25FbGVtZW50c1xyXG59IGZyb20gJy4uL3V0aWwvRXh0ZW5zaW9uRWxlbWVudHNVdGlsJztcclxuXHJcbmNvbnN0IEhJR0hfUFJJT1JJVFkgPSA1MDAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDYW11bmRhIEJQTU4gc3BlY2lmaWMgYmVoYXZpb3IgZW5zdXJpbmcgY2FtdW5kYTpGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSBpc1xyXG4gKiByZW1vdmVkIHdoZW4gYm90aCBjYW11bmRhOmFzeW5jQWZ0ZXIgYW5kIGNhbXVuZGE6YXN5bmNCZWZvcmUgc2V0IHRvIGZhbHNlLlxyXG4gKiBEb2Vzbid0IGFwcGx5IGlmIGVsZW1lbnQgaGFzIGJwbW46VGltZXJFdmVudERlZmluaXRpb24uXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWxldGVSZXRyeVRpbWVDeWNsZUJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3Rvcihjb21tYW5kU3RhY2ssIGV2ZW50QnVzKSB7XHJcbiAgICBzdXBlcihldmVudEJ1cyk7XHJcblxyXG4gICAgdGhpcy5wb3N0RXhlY3V0ZShbXHJcbiAgICAgICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxyXG4gICAgICAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJ1xyXG4gICAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICBtb2RkbGVFbGVtZW50LFxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB7fVxyXG4gICAgICB9ID0gY29udGV4dDtcclxuXHJcbiAgICAgIGNvbnN0IGFzeW5jQWZ0ZXIgPSBwcm9wZXJ0aWVzWyAnY2FtdW5kYTphc3luY0FmdGVyJyBdLFxyXG4gICAgICAgICAgICBhc3luY0JlZm9yZSA9IHByb3BlcnRpZXNbICdjYW11bmRhOmFzeW5jQmVmb3JlJyBdO1xyXG5cclxuICAgICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBtb2RkbGVFbGVtZW50IHx8IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgY29uc3QgZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUgPSBnZXRGYWlsZWRKb2JSZXRyeVRpbWVDeWNsZShlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhaXMoZWxlbWVudCwgJ2NhbXVuZGE6QXN5bmNDYXBhYmxlJylcclxuICAgICAgICB8fCAhaXMoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOkFzeW5jQ2FwYWJsZScpXHJcbiAgICAgICAgfHwgKGFzeW5jQWZ0ZXIgIT09IGZhbHNlICYmIGFzeW5jQmVmb3JlICE9PSBmYWxzZSlcclxuICAgICAgICB8fCAhZmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGVcclxuICAgICAgICB8fCBnZXRUaW1lckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KVxyXG4gICAgICAgIHx8IGlzQXN5bmNCZWZvcmUoYnVzaW5lc3NPYmplY3QpXHJcbiAgICAgICAgfHwgaXNBc3luY0FmdGVyKGJ1c2luZXNzT2JqZWN0KVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0LCBmYWlsZWRKb2JSZXRyeVRpbWVDeWNsZSwgY29tbWFuZFN0YWNrKTtcclxuICAgIH0sIHRydWUpO1xyXG5cclxuICB9XHJcbn1cclxuXHJcbkRlbGV0ZVJldHJ5VGltZUN5Y2xlQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnY29tbWFuZFN0YWNrJyxcclxuICAnZXZlbnRCdXMnXHJcbl07XHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlKGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgcmV0dXJuICEhKGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTphc3luY0JlZm9yZScpIHx8IGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTphc3luYycpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc3luY0FmdGVyKGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgcmV0dXJuICEhYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmFzeW5jQWZ0ZXInKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUoZWxlbWVudCkge1xyXG4gIHJldHVybiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoZWxlbWVudCwgJ2NhbXVuZGE6RmFpbGVkSm9iUmV0cnlUaW1lQ3ljbGUnKVsgMCBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUaW1lckV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIGdldEV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgdHlwZSkge1xyXG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gIGNvbnN0IGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKTtcclxuXHJcbiAgaWYgKCFldmVudERlZmluaXRpb25zIHx8ICFldmVudERlZmluaXRpb25zLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV2ZW50RGVmaW5pdGlvbnMuZmluZCgoZXZlbnREZWZpbml0aW9uKSA9PiB7XHJcbiAgICByZXR1cm4gaXMoZXZlbnREZWZpbml0aW9uLCB0eXBlKTtcclxuICB9KTtcclxufVxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/DeleteRetryTimeCycleBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/RemoveInitiatorBehaviour.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/RemoveInitiatorBehaviour.js ***!
\*************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RemoveInitiatorBehaviour)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Camunda BPMN specific behavior ensuring camunda:initiator property is removed\r\n * when start event is created in or moved to sub process.\r\n */\r\nclass RemoveInitiatorBehaviour extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(eventBus, modeling) {\r\n super(eventBus);\r\n\r\n this.postExecuted([ 'shape.create','shape.move' ], (context) => {\r\n const {\r\n shape,\r\n parent,\r\n newParent = parent\r\n } = context;\r\n\r\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape);\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:StartEvent') && (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.isDefined)(businessObject.get('camunda:initiator'))) {\r\n if (((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(newParent || parent, 'bpmn:SubProcess'))) {\r\n modeling.updateProperties(shape, { 'camunda:initiator': undefined });\r\n }\r\n }\r\n }, true);\r\n }\r\n}\r\n\r\nRemoveInitiatorBehaviour.$inject = [\r\n 'eventBus',\r\n 'modeling'\r\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9SZW1vdmVJbml0aWF0b3JCZWhhdmlvdXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxQztBQUNyQztBQUMyRTtBQUMzRTtBQUlvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSx1Q0FBdUMsaUZBQWtCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSw2QkFBNkIsNkVBQWlCO0FBQzlDO0FBQ0EsVUFBVSw4REFBRSw4QkFBOEIsbURBQVM7QUFDbkQsYUFBYSw4REFBRTtBQUNmLDZDQUE2QyxnQ0FBZ0M7QUFDN0U7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMtYmVoYXZpb3JzL2xpYi9jYW11bmRhLXBsYXRmb3JtL1JlbW92ZUluaXRpYXRvckJlaGF2aW91ci5qcz81Y2E2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRCdXNpbmVzc09iamVjdCxcclxuICBpc1xyXG59IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcblxyXG4vKipcclxuICogQ2FtdW5kYSBCUE1OIHNwZWNpZmljIGJlaGF2aW9yIGVuc3VyaW5nIGNhbXVuZGE6aW5pdGlhdG9yIHByb3BlcnR5IGlzIHJlbW92ZWRcclxuICogd2hlbiBzdGFydCBldmVudCBpcyBjcmVhdGVkIGluIG9yIG1vdmVkIHRvIHN1YiBwcm9jZXNzLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVtb3ZlSW5pdGlhdG9yQmVoYXZpb3VyIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcclxuICAgIHN1cGVyKGV2ZW50QnVzKTtcclxuXHJcbiAgICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS5jcmVhdGUnLCdzaGFwZS5tb3ZlJyBdLCAoY29udGV4dCkgPT4ge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgc2hhcGUsXHJcbiAgICAgICAgcGFyZW50LFxyXG4gICAgICAgIG5ld1BhcmVudCA9IHBhcmVudFxyXG4gICAgICB9ID0gY29udGV4dDtcclxuXHJcbiAgICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpO1xyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpTdGFydEV2ZW50JykgJiYgaXNEZWZpbmVkKGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTppbml0aWF0b3InKSkpIHtcclxuICAgICAgICBpZiAoKGlzKG5ld1BhcmVudCB8fCBwYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKSkpIHtcclxuICAgICAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoc2hhcGUsIHsgJ2NhbXVuZGE6aW5pdGlhdG9yJzogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgdHJ1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5SZW1vdmVJbml0aWF0b3JCZWhhdmlvdXIuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdtb2RlbGluZydcclxuXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/RemoveInitiatorBehaviour.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/RemoveVariableEventBehaviour.js":
/*!*****************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/RemoveVariableEventBehaviour.js ***!
\*****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RemoveVariableEventBehaviour)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Camunda BPMN specific behavior ensuring camunda:variableEvents property is\r\n * removed when start event is moved out of event sub process.\r\n */\r\nclass RemoveVariableEventBehaviour extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(bpmnFactory, eventBus, moddleCopy, modeling) {\r\n super(eventBus);\r\n\r\n this.postExecuted([ 'shape.create', 'shape.move' ], (context) => {\r\n const {\r\n parent,\r\n newParent = parent,\r\n shape\r\n } = context;\r\n\r\n const newParentBusinessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(newParent),\r\n shapeBusinessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape);\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:StartEvent')) {\r\n\r\n if (!((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(newParent, 'bpmn:SubProcess') && newParentBusinessObject.get('triggeredByEvent'))) {\r\n const eventDefinitions = shapeBusinessObject.get('eventDefinitions').slice();\r\n\r\n const update = eventDefinitions.reduce((update, eventDefinition, index) => {\r\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(eventDefinition, 'bpmn:ConditionalEventDefinition')) {\r\n return;\r\n }\r\n\r\n if (eventDefinition.get('camunda:variableEvents')) {\r\n const conditionalEventDefinition = bpmnFactory.create('bpmn:ConditionalEventDefinition');\r\n\r\n moddleCopy.copyElement(eventDefinition, conditionalEventDefinition);\r\n\r\n conditionalEventDefinition.$parent = eventDefinition.$parent;\r\n\r\n // remove camunda:variableEvents property\r\n conditionalEventDefinition.variableEvents = undefined;\r\n\r\n eventDefinitions[ index ] = conditionalEventDefinition;\r\n\r\n return true;\r\n }\r\n\r\n return update;\r\n }, false);\r\n\r\n if (update) {\r\n modeling.updateProperties(shape, {\r\n eventDefinitions: eventDefinitions\r\n });\r\n }\r\n }\r\n }\r\n }, true);\r\n }\r\n}\r\n\r\nRemoveVariableEventBehaviour.$inject = [\r\n 'bpmnFactory',\r\n 'eventBus',\r\n 'moddleCopy',\r\n 'modeling'\r\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9SZW1vdmVWYXJpYWJsZUV2ZW50QmVoYXZpb3VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEyRTtBQUMzRTtBQUlvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSwyQ0FBMkMsaUZBQWtCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxzQ0FBc0MsNkVBQWlCO0FBQ3ZELGtDQUFrQyw2RUFBaUI7QUFDbkQ7QUFDQSxVQUFVLDhEQUFFO0FBQ1o7QUFDQSxjQUFjLDhEQUFFO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw4REFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy1iZWhhdmlvcnMvbGliL2NhbXVuZGEtcGxhdGZvcm0vUmVtb3ZlVmFyaWFibGVFdmVudEJlaGF2aW91ci5qcz8yNTU0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRCdXNpbmVzc09iamVjdCxcclxuICBpc1xyXG59IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcblxyXG4vKipcclxuICogQ2FtdW5kYSBCUE1OIHNwZWNpZmljIGJlaGF2aW9yIGVuc3VyaW5nIGNhbXVuZGE6dmFyaWFibGVFdmVudHMgcHJvcGVydHkgaXNcclxuICogcmVtb3ZlZCB3aGVuIHN0YXJ0IGV2ZW50IGlzIG1vdmVkIG91dCBvZiBldmVudCBzdWIgcHJvY2Vzcy5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbW92ZVZhcmlhYmxlRXZlbnRCZWhhdmlvdXIgZXh0ZW5kcyBDb21tYW5kSW50ZXJjZXB0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKGJwbW5GYWN0b3J5LCBldmVudEJ1cywgbW9kZGxlQ29weSwgbW9kZWxpbmcpIHtcclxuICAgIHN1cGVyKGV2ZW50QnVzKTtcclxuXHJcbiAgICB0aGlzLnBvc3RFeGVjdXRlZChbICdzaGFwZS5jcmVhdGUnLCAnc2hhcGUubW92ZScgXSwgKGNvbnRleHQpID0+IHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIHBhcmVudCxcclxuICAgICAgICBuZXdQYXJlbnQgPSBwYXJlbnQsXHJcbiAgICAgICAgc2hhcGVcclxuICAgICAgfSA9IGNvbnRleHQ7XHJcblxyXG4gICAgICBjb25zdCBuZXdQYXJlbnRCdXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1BhcmVudCksXHJcbiAgICAgICAgICAgIHNoYXBlQnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XHJcblxyXG4gICAgICBpZiAoaXMoc2hhcGUsICdicG1uOlN0YXJ0RXZlbnQnKSkge1xyXG5cclxuICAgICAgICBpZiAoIShpcyhuZXdQYXJlbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBuZXdQYXJlbnRCdXNpbmVzc09iamVjdC5nZXQoJ3RyaWdnZXJlZEJ5RXZlbnQnKSkpIHtcclxuICAgICAgICAgIGNvbnN0IGV2ZW50RGVmaW5pdGlvbnMgPSBzaGFwZUJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpLnNsaWNlKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgdXBkYXRlID0gZXZlbnREZWZpbml0aW9ucy5yZWR1Y2UoKHVwZGF0ZSwgZXZlbnREZWZpbml0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWlzKGV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50RGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6dmFyaWFibGVFdmVudHMnKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyk7XHJcblxyXG4gICAgICAgICAgICAgIG1vZGRsZUNvcHkuY29weUVsZW1lbnQoZXZlbnREZWZpbml0aW9uLCBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgIGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uLiRwYXJlbnQgPSBldmVudERlZmluaXRpb24uJHBhcmVudDtcclxuXHJcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIGNhbXVuZGE6dmFyaWFibGVFdmVudHMgcHJvcGVydHlcclxuICAgICAgICAgICAgICBjb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbi52YXJpYWJsZUV2ZW50cyA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgICAgZXZlbnREZWZpbml0aW9uc1sgaW5kZXggXSA9IGNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZTtcclxuICAgICAgICAgIH0sIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgICAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoc2hhcGUsIHtcclxuICAgICAgICAgICAgICBldmVudERlZmluaXRpb25zOiBldmVudERlZmluaXRpb25zXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgdHJ1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5SZW1vdmVWYXJpYWJsZUV2ZW50QmVoYXZpb3VyLiRpbmplY3QgPSBbXHJcbiAgJ2JwbW5GYWN0b3J5JyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdtb2RkbGVDb3B5JyxcclxuICAnbW9kZWxpbmcnXHJcbl07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/RemoveVariableEventBehaviour.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateCamundaExclusiveBehavior.js":
/*!*******************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateCamundaExclusiveBehavior.js ***!
\*******************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdateCamundaExclusiveBehavior)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n\r\n\r\n\r\n\r\nconst HIGH_PRIORITY = 5000;\r\n\r\n\r\n/**\r\n * Camunda BPMN specific behavior ensuring camunda:exclusive is set to true if\r\n * camunda:asyncBefore or camunda:asyncAfter is set to false.\r\n */\r\nclass UpdateCamundaExclusiveBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(eventBus) {\r\n super(eventBus);\r\n\r\n this.preExecute([\r\n 'element.updateProperties',\r\n 'element.updateModdleProperties',\r\n ], HIGH_PRIORITY, function(context) {\r\n const {\r\n element,\r\n moddleElement,\r\n properties = {}\r\n } = context;\r\n\r\n const businessObject = moddleElement || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\r\n\r\n const asyncAfter = properties[ 'camunda:asyncAfter' ],\r\n asyncBefore = properties[ 'camunda:asyncBefore' ];\r\n\r\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'camunda:AsyncCapable')\r\n || !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(businessObject, 'camunda:AsyncCapable')\r\n || (asyncAfter !== false && asyncBefore !== false)\r\n || isExclusive(businessObject)\r\n || (isAsyncAfter(businessObject) && asyncAfter !== false)\r\n || (isAsyncBefore(businessObject) && asyncBefore !== false)\r\n || (asyncAfter === true || asyncBefore === true)\r\n ) {\r\n return;\r\n }\r\n\r\n properties[ 'camunda:exclusive' ] = true;\r\n }, true);\r\n\r\n }\r\n}\r\n\r\nUpdateCamundaExclusiveBehavior.$inject = [\r\n 'eventBus'\r\n];\r\n\r\n\r\n// helpers //////////\r\n\r\nfunction isAsyncBefore(businessObject) {\r\n return !!(businessObject.get('camunda:asyncBefore') || businessObject.get('camunda:async'));\r\n}\r\n\r\nfunction isAsyncAfter(businessObject) {\r\n return !!businessObject.get('camunda:asyncAfter');\r\n}\r\n\r\nfunction isExclusive(businessObject) {\r\n return !!businessObject.get('camunda:exclusive');\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9VcGRhdGVDYW11bmRhRXhjbHVzaXZlQmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR29DO0FBQ3BDO0FBQzJFO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSw2Q0FBNkMsaUZBQWtCO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSw4Q0FBOEMsNkVBQWlCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4REFBRTtBQUNiLFlBQVksOERBQUU7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMtYmVoYXZpb3JzL2xpYi9jYW11bmRhLXBsYXRmb3JtL1VwZGF0ZUNhbXVuZGFFeGNsdXNpdmVCZWhhdmlvci5qcz9kNGM2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgaXNcclxufSBmcm9tICdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcclxuXHJcbmNvbnN0IEhJR0hfUFJJT1JJVFkgPSA1MDAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDYW11bmRhIEJQTU4gc3BlY2lmaWMgYmVoYXZpb3IgZW5zdXJpbmcgY2FtdW5kYTpleGNsdXNpdmUgaXMgc2V0IHRvIHRydWUgaWZcclxuICogY2FtdW5kYTphc3luY0JlZm9yZSBvciBjYW11bmRhOmFzeW5jQWZ0ZXIgaXMgc2V0IHRvIGZhbHNlLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBkYXRlQ2FtdW5kYUV4Y2x1c2l2ZUJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihldmVudEJ1cykge1xyXG4gICAgc3VwZXIoZXZlbnRCdXMpO1xyXG5cclxuICAgIHRoaXMucHJlRXhlY3V0ZShbXHJcbiAgICAgICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxyXG4gICAgICAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcclxuICAgIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgbW9kZGxlRWxlbWVudCxcclxuICAgICAgICBwcm9wZXJ0aWVzID0ge31cclxuICAgICAgfSA9IGNvbnRleHQ7XHJcblxyXG4gICAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IG1vZGRsZUVsZW1lbnQgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICBjb25zdCBhc3luY0FmdGVyID0gcHJvcGVydGllc1sgJ2NhbXVuZGE6YXN5bmNBZnRlcicgXSxcclxuICAgICAgICAgICAgYXN5bmNCZWZvcmUgPSBwcm9wZXJ0aWVzWyAnY2FtdW5kYTphc3luY0JlZm9yZScgXTtcclxuXHJcbiAgICAgIGlmICghaXMoZWxlbWVudCwgJ2NhbXVuZGE6QXN5bmNDYXBhYmxlJylcclxuICAgICAgICB8fCAhaXMoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOkFzeW5jQ2FwYWJsZScpXHJcbiAgICAgICAgfHwgKGFzeW5jQWZ0ZXIgIT09IGZhbHNlICYmIGFzeW5jQmVmb3JlICE9PSBmYWxzZSlcclxuICAgICAgICB8fCBpc0V4Y2x1c2l2ZShidXNpbmVzc09iamVjdClcclxuICAgICAgICB8fCAoaXNBc3luY0FmdGVyKGJ1c2luZXNzT2JqZWN0KSAmJiBhc3luY0FmdGVyICE9PSBmYWxzZSlcclxuICAgICAgICB8fCAoaXNBc3luY0JlZm9yZShidXNpbmVzc09iamVjdCkgJiYgYXN5bmNCZWZvcmUgIT09IGZhbHNlKVxyXG4gICAgICAgIHx8IChhc3luY0FmdGVyID09PSB0cnVlIHx8IGFzeW5jQmVmb3JlID09PSB0cnVlKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHByb3BlcnRpZXNbICdjYW11bmRhOmV4Y2x1c2l2ZScgXSA9IHRydWU7XHJcbiAgICB9LCB0cnVlKTtcclxuXHJcbiAgfVxyXG59XHJcblxyXG5VcGRhdGVDYW11bmRhRXhjbHVzaXZlQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnXHJcbl07XHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBpc0FzeW5jQmVmb3JlKGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgcmV0dXJuICEhKGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTphc3luY0JlZm9yZScpIHx8IGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTphc3luYycpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc3luY0FmdGVyKGJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgcmV0dXJuICEhYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmFzeW5jQWZ0ZXInKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFeGNsdXNpdmUoYnVzaW5lc3NPYmplY3QpIHtcclxuICByZXR1cm4gISFidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6ZXhjbHVzaXZlJyk7XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateCamundaExclusiveBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateInputOutputBehavior.js":
/*!**************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateInputOutputBehavior.js ***!
\**************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdateInputOutputBehavior)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_InputOutputUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/InputOutputUtil */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/util/InputOutputUtil.js\");\n/* harmony import */ var _util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/ExtensionElementsUtil */ \"./node_modules/camunda-bpmn-js-behaviors/lib/util/ExtensionElementsUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst LOW_PRIORITY = 250;\r\n\r\n\r\n/**\r\n * Camunda BPMN specific behavior ensuring empty camunda:InputOutput is removed.\r\n */\r\nclass UpdateInputOutputBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\r\n constructor(commandStack, eventBus) {\r\n super(eventBus);\r\n\r\n this.postExecuted('element.updateModdleProperties', LOW_PRIORITY, function(context) {\r\n const {\r\n element,\r\n moddleElement\r\n } = context;\r\n\r\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(moddleElement, 'camunda:InputOutput')) {\r\n return;\r\n }\r\n\r\n if ((0,_util_InputOutputUtil__WEBPACK_IMPORTED_MODULE_0__.isInputOutputEmpty)(moddleElement)) {\r\n (0,_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_1__.removeExtensionElements)(element, (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.getBusinessObject)(element), moddleElement, commandStack);\r\n }\r\n }, true);\r\n }\r\n}\r\n\r\nUpdateInputOutputBehavior.$inject = [\r\n 'commandStack',\r\n 'eventBus'\r\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9VcGRhdGVJbnB1dE91dHB1dEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR29DO0FBQ3BDO0FBQzREO0FBQzVEO0FBR3VDO0FBQ3ZDO0FBQzJFO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2Usd0NBQXdDLGlGQUFrQjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFdBQVcsOERBQUU7QUFDYjtBQUNBO0FBQ0E7QUFDQSxVQUFVLHlFQUFrQjtBQUM1QixRQUFRLG9GQUF1QixVQUFVLDZFQUFpQjtBQUMxRDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMtYmVoYXZpb3JzL2xpYi9jYW11bmRhLXBsYXRmb3JtL1VwZGF0ZUlucHV0T3V0cHV0QmVoYXZpb3IuanM/YTRjMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gIGlzXHJcbn0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNJbnB1dE91dHB1dEVtcHR5IH0gZnJvbSAnLi91dGlsL0lucHV0T3V0cHV0VXRpbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIHJlbW92ZUV4dGVuc2lvbkVsZW1lbnRzXHJcbn0gZnJvbSAnLi4vdXRpbC9FeHRlbnNpb25FbGVtZW50c1V0aWwnO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5jb25zdCBMT1dfUFJJT1JJVFkgPSAyNTA7XHJcblxyXG5cclxuLyoqXHJcbiAqIENhbXVuZGEgQlBNTiBzcGVjaWZpYyBiZWhhdmlvciBlbnN1cmluZyBlbXB0eSBjYW11bmRhOklucHV0T3V0cHV0IGlzIHJlbW92ZWQuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGRhdGVJbnB1dE91dHB1dEJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3Rvcihjb21tYW5kU3RhY2ssIGV2ZW50QnVzKSB7XHJcbiAgICBzdXBlcihldmVudEJ1cyk7XHJcblxyXG4gICAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIExPV19QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICBtb2RkbGVFbGVtZW50XHJcbiAgICAgIH0gPSBjb250ZXh0O1xyXG5cclxuICAgICAgaWYgKCFpcyhtb2RkbGVFbGVtZW50LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNJbnB1dE91dHB1dEVtcHR5KG1vZGRsZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksIG1vZGRsZUVsZW1lbnQsIGNvbW1hbmRTdGFjayk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRydWUpO1xyXG4gIH1cclxufVxyXG5cclxuVXBkYXRlSW5wdXRPdXRwdXRCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdjb21tYW5kU3RhY2snLFxyXG4gICdldmVudEJ1cydcclxuXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateInputOutputBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateResultVariableBehavior.js":
/*!*****************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateResultVariableBehavior.js ***!
\*****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdateResultVariableBehavior)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nconst HIGH_PRIORITY = 5000;\r\n\r\n\r\n/**\r\n * Camunda BPMN specific camunda:resultVariable behavior ensuring\r\n * camunda:mapDecisionResult is removed when camunda:resultVariable is removed.\r\n */\r\nclass UpdateResultVariableBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(eventBus) {\r\n super(eventBus);\r\n\r\n this.preExecute([\r\n 'element.updateProperties',\r\n 'element.updateModdleProperties'\r\n ], HIGH_PRIORITY, function(context) {\r\n const {\r\n element,\r\n moddleElement,\r\n properties\r\n } = context;\r\n\r\n const businessObject = moddleElement || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\r\n\r\n if (\r\n (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'camunda:DmnCapable')\r\n && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(businessObject, 'camunda:DmnCapable')\r\n && (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'camunda:resultVariable')\r\n && isEmpty(properties[ 'camunda:resultVariable' ])\r\n ) {\r\n properties[ 'camunda:mapDecisionResult' ] = undefined;\r\n }\r\n }, true);\r\n\r\n }\r\n}\r\n\r\nUpdateResultVariableBehavior.$inject = [\r\n 'eventBus'\r\n];\r\n\r\n// helpers //////////\r\n\r\nfunction isEmpty(value) {\r\n return value == undefined || value === '';\r\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9VcGRhdGVSZXN1bHRWYXJpYWJsZUJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHb0M7QUFDcEM7QUFDMkU7QUFDM0U7QUFDK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLDJDQUEyQyxpRkFBa0I7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLDhDQUE4Qyw2RUFBaUI7QUFDL0Q7QUFDQTtBQUNBLFFBQVEsOERBQUU7QUFDVixXQUFXLDhEQUFFO0FBQ2IsV0FBVyw2Q0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy1iZWhhdmlvcnMvbGliL2NhbXVuZGEtcGxhdGZvcm0vVXBkYXRlUmVzdWx0VmFyaWFibGVCZWhhdmlvci5qcz8xNTBkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgaXNcclxufSBmcm9tICdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcclxuXHJcbmltcG9ydCB7IGhhcyB9IGZyb20gJ21pbi1kYXNoJztcclxuXHJcbmNvbnN0IEhJR0hfUFJJT1JJVFkgPSA1MDAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDYW11bmRhIEJQTU4gc3BlY2lmaWMgY2FtdW5kYTpyZXN1bHRWYXJpYWJsZSBiZWhhdmlvciBlbnN1cmluZ1xyXG4gKiBjYW11bmRhOm1hcERlY2lzaW9uUmVzdWx0IGlzIHJlbW92ZWQgd2hlbiBjYW11bmRhOnJlc3VsdFZhcmlhYmxlIGlzIHJlbW92ZWQuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGRhdGVSZXN1bHRWYXJpYWJsZUJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihldmVudEJ1cykge1xyXG4gICAgc3VwZXIoZXZlbnRCdXMpO1xyXG5cclxuICAgIHRoaXMucHJlRXhlY3V0ZShbXHJcbiAgICAgICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxyXG4gICAgICAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJ1xyXG4gICAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICBtb2RkbGVFbGVtZW50LFxyXG4gICAgICAgIHByb3BlcnRpZXNcclxuICAgICAgfSA9IGNvbnRleHQ7XHJcblxyXG4gICAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IG1vZGRsZUVsZW1lbnQgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaXMoZWxlbWVudCwgJ2NhbXVuZGE6RG1uQ2FwYWJsZScpXHJcbiAgICAgICAgJiYgaXMoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOkRtbkNhcGFibGUnKVxyXG4gICAgICAgICYmIGhhcyhwcm9wZXJ0aWVzLCAnY2FtdW5kYTpyZXN1bHRWYXJpYWJsZScpXHJcbiAgICAgICAgJiYgaXNFbXB0eShwcm9wZXJ0aWVzWyAnY2FtdW5kYTpyZXN1bHRWYXJpYWJsZScgXSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgcHJvcGVydGllc1sgJ2NhbXVuZGE6bWFwRGVjaXNpb25SZXN1bHQnIF0gPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH0sIHRydWUpO1xyXG5cclxuICB9XHJcbn1cclxuXHJcblVwZGF0ZVJlc3VsdFZhcmlhYmxlQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnXHJcbl07XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcclxuICByZXR1cm4gdmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcclxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateResultVariableBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UserTaskFormsBehavior.js":
/*!**********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UserTaskFormsBehavior.js ***!
\**********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UserTaskFormsBehavior)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Camunda BPMN specific user task forms behavior.\r\n */\r\nclass UserTaskFormsBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(eventBus) {\r\n super(eventBus);\r\n\r\n /**\r\n * Ensure that only one of the following options is configured:\r\n *\r\n * 1. embedded, external or Camunda forms using camunda:formKey\r\n * 2. Camunda forms using camunda:formRef\r\n */\r\n this.preExecute([\r\n 'element.updateProperties',\r\n 'element.updateModdleProperties'\r\n ], function(context) {\r\n const {\r\n element,\r\n moddleElement,\r\n properties\r\n } = context;\r\n\r\n const businessObject = moddleElement || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\r\n\r\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'camunda:formKey')) {\r\n Object.assign(properties, {\r\n 'camunda:formRef': undefined,\r\n 'camunda:formRefBinding': undefined,\r\n 'camunda:formRefVersion': undefined\r\n });\r\n } else if ((0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'camunda:formRef')) {\r\n Object.assign(properties, {\r\n 'camunda:formKey': undefined\r\n });\r\n\r\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_2__.isUndefined)(properties[ 'camunda:formRef' ])) {\r\n Object.assign(properties, {\r\n 'camunda:formRefBinding': undefined,\r\n 'camunda:formRefVersion': undefined\r\n });\r\n }\r\n\r\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'camunda:formRefBinding') && (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.isUndefined)(businessObject.get('camunda:formRefBinding'))) {\r\n Object.assign(properties, {\r\n 'camunda:formRefBinding': 'latest'\r\n });\r\n }\r\n }\r\n\r\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'camunda:formRefBinding') && properties[ 'camunda:formRefBinding' ] !== 'version') {\r\n Object.assign(properties, {\r\n 'camunda:formRefVersion': undefined\r\n });\r\n }\r\n }, true);\r\n\r\n }\r\n}\r\n\r\nUserTaskFormsBehavior.$inject = [ 'eventBus' ];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9Vc2VyVGFza0Zvcm1zQmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUErRDtBQUMvRDtBQUMyRTtBQUMzRTtBQUlrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2Usb0NBQW9DLGlGQUFrQjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsOENBQThDLDZFQUFpQjtBQUMvRDtBQUNBLFVBQVUsNkNBQUc7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRLFNBQVMsNkNBQUc7QUFDcEI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFlBQVkscURBQVc7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxhQUFhLDZDQUFHLDBDQUEwQyxxREFBVztBQUNyRTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFVBQVUsNkNBQUc7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9Vc2VyVGFza0Zvcm1zQmVoYXZpb3IuanM/YjU2YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCB9IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xyXG5cclxuaW1wb3J0IHtcclxuICBoYXMsXHJcbiAgaXNVbmRlZmluZWRcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5cclxuLyoqXHJcbiAqIENhbXVuZGEgQlBNTiBzcGVjaWZpYyB1c2VyIHRhc2sgZm9ybXMgYmVoYXZpb3IuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VyVGFza0Zvcm1zQmVoYXZpb3IgZXh0ZW5kcyBDb21tYW5kSW50ZXJjZXB0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKGV2ZW50QnVzKSB7XHJcbiAgICBzdXBlcihldmVudEJ1cyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbnN1cmUgdGhhdCBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgaXMgY29uZmlndXJlZDpcclxuICAgICAqXHJcbiAgICAgKiAxLiBlbWJlZGRlZCwgZXh0ZXJuYWwgb3IgQ2FtdW5kYSBmb3JtcyB1c2luZyBjYW11bmRhOmZvcm1LZXlcclxuICAgICAqIDIuIENhbXVuZGEgZm9ybXMgdXNpbmcgY2FtdW5kYTpmb3JtUmVmXHJcbiAgICAgKi9cclxuICAgIHRoaXMucHJlRXhlY3V0ZShbXHJcbiAgICAgICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxyXG4gICAgICAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJ1xyXG4gICAgXSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICBtb2RkbGVFbGVtZW50LFxyXG4gICAgICAgIHByb3BlcnRpZXNcclxuICAgICAgfSA9IGNvbnRleHQ7XHJcblxyXG4gICAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IG1vZGRsZUVsZW1lbnQgfHwgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XHJcblxyXG4gICAgICBpZiAoaGFzKHByb3BlcnRpZXMsICdjYW11bmRhOmZvcm1LZXknKSkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocHJvcGVydGllcywge1xyXG4gICAgICAgICAgJ2NhbXVuZGE6Zm9ybVJlZic6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICdjYW11bmRhOmZvcm1SZWZCaW5kaW5nJzogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgJ2NhbXVuZGE6Zm9ybVJlZlZlcnNpb24nOiB1bmRlZmluZWRcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChoYXMocHJvcGVydGllcywgJ2NhbXVuZGE6Zm9ybVJlZicpKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCB7XHJcbiAgICAgICAgICAnY2FtdW5kYTpmb3JtS2V5JzogdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChwcm9wZXJ0aWVzWyAnY2FtdW5kYTpmb3JtUmVmJyBdKSkge1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCB7XHJcbiAgICAgICAgICAgICdjYW11bmRhOmZvcm1SZWZCaW5kaW5nJzogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAnY2FtdW5kYTpmb3JtUmVmVmVyc2lvbic6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWhhcyhwcm9wZXJ0aWVzLCAnY2FtdW5kYTpmb3JtUmVmQmluZGluZycpICYmIGlzVW5kZWZpbmVkKGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpmb3JtUmVmQmluZGluZycpKSkge1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCB7XHJcbiAgICAgICAgICAgICdjYW11bmRhOmZvcm1SZWZCaW5kaW5nJzogJ2xhdGVzdCdcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhhcyhwcm9wZXJ0aWVzLCAnY2FtdW5kYTpmb3JtUmVmQmluZGluZycpICYmIHByb3BlcnRpZXNbICdjYW11bmRhOmZvcm1SZWZCaW5kaW5nJyBdICE9PSAndmVyc2lvbicpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHByb3BlcnRpZXMsIHtcclxuICAgICAgICAgICdjYW11bmRhOmZvcm1SZWZWZXJzaW9uJzogdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRydWUpO1xyXG5cclxuICB9XHJcbn1cclxuXHJcblVzZXJUYXNrRm9ybXNCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UserTaskFormsBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UserTaskGeneratedFormsBehavior.js":
/*!*******************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UserTaskGeneratedFormsBehavior.js ***!
\*******************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UserTaskFormsBehavior)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Camunda BPMN specific user task generated forms behavior.\r\n *\r\n * 1. Removes camunda:FormField#values if camunda:FormField#type is changed to something other than enum.\r\n * 2. Updates camunda:FormData#businessKey if camunda:FormField#id is changed.\r\n * 3. Removes camunda:FormData#businessKey if camunda:FormField is removed.\r\n */\r\nclass UserTaskFormsBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(eventBus, modeling) {\r\n super(eventBus);\r\n\r\n /**\r\n * Remove camunda:FormField#values if camunda:FormField#type is changed to\r\n * something other than enum.\r\n */\r\n this.preExecute('element.updateModdleProperties', function(context) {\r\n const {\r\n moddleElement,\r\n properties\r\n } = context;\r\n\r\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(moddleElement, 'camunda:FormField')) {\r\n return;\r\n }\r\n\r\n if (\r\n ('type' in properties && properties[ 'type' ] !== 'enum')\r\n || 'camunda:type' in properties && properties[ 'camunda:type' ] !== 'enum'\r\n ) {\r\n properties[ 'camunda:values' ] = undefined;\r\n }\r\n }, true);\r\n\r\n /**\r\n * Update camunda:FormData#businessKey if camunda:FormField#id is changed.\r\n */\r\n this.preExecute('element.updateModdleProperties', function(context) {\r\n const {\r\n element,\r\n moddleElement,\r\n properties\r\n } = context;\r\n\r\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(moddleElement, 'camunda:FormField')\r\n || (!(0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'id') && !(0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'camunda:id'))\r\n ) {\r\n return;\r\n }\r\n\r\n const formData = getFormData(element);\r\n\r\n const businessKey = formData.get('camunda:businessKey');\r\n\r\n if (!businessKey) {\r\n return;\r\n }\r\n\r\n if (isBusinessKey(moddleElement, formData)) {\r\n modeling.updateModdleProperties(element, formData, {\r\n 'camunda:businessKey': (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'id') ? properties.id : properties[ 'camunda:id' ]\r\n });\r\n }\r\n }, true);\r\n\r\n /**\r\n * Remove camunda:FormData#businessKey if camunda:FormField is removed.\r\n */\r\n this.postExecute('element.updateModdleProperties', function(context) {\r\n const {\r\n element,\r\n moddleElement,\r\n properties\r\n } = context;\r\n\r\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(moddleElement, 'camunda:FormData') || !(0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(properties, 'fields')) {\r\n return;\r\n }\r\n\r\n const businessKey = moddleElement.get('camunda:businessKey');\r\n\r\n if (!businessKey) {\r\n return;\r\n }\r\n\r\n const fieldWithBusinessKey = moddleElement.get('fields').find(field => {\r\n return field.get('camunda:id') === businessKey;\r\n });\r\n\r\n if (!fieldWithBusinessKey) {\r\n modeling.updateModdleProperties(element, moddleElement, {\r\n 'camunda:businessKey': undefined\r\n });\r\n }\r\n }, true);\r\n }\r\n}\r\n\r\n\r\nUserTaskFormsBehavior.$inject = [ 'eventBus', 'modeling' ];\r\n\r\n// helpers //////////\r\n\r\nfunction isBusinessKey(formField, formData) {\r\n return formField.get('camunda:id') === formData.get('camunda:businessKey');\r\n}\r\n\r\nfunction getFormData(element) {\r\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element),\r\n extensionElements = businessObject.get('extensionElements');\r\n\r\n if (!extensionElements) {\r\n return;\r\n }\r\n\r\n const values = extensionElements.get('values');\r\n\r\n return values.find((value) => {\r\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(value, 'camunda:FormData');\r\n });\r\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9Vc2VyVGFza0dlbmVyYXRlZEZvcm1zQmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEyRTtBQUMzRTtBQUNtRTtBQUNuRTtBQUMrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSxvQ0FBb0MsaUZBQWtCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxXQUFXLDhEQUFFO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFdBQVcsOERBQUU7QUFDYixhQUFhLDZDQUFHLHVCQUF1Qiw2Q0FBRztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLDZDQUFHO0FBQ3BDLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxXQUFXLDhEQUFFLHdDQUF3Qyw2Q0FBRztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDZFQUFpQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhEQUFFO0FBQ2IsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy1iZWhhdmlvcnMvbGliL2NhbXVuZGEtcGxhdGZvcm0vVXNlclRhc2tHZW5lcmF0ZWRGb3Jtc0JlaGF2aW9yLmpzPzYyNzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCwgaXMgfSBmcm9tICdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBoYXMgfSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5cclxuLyoqXHJcbiAqIENhbXVuZGEgQlBNTiBzcGVjaWZpYyB1c2VyIHRhc2sgZ2VuZXJhdGVkIGZvcm1zIGJlaGF2aW9yLlxyXG4gKlxyXG4gKiAxLiBSZW1vdmVzIGNhbXVuZGE6Rm9ybUZpZWxkI3ZhbHVlcyBpZiBjYW11bmRhOkZvcm1GaWVsZCN0eXBlIGlzIGNoYW5nZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gZW51bS5cclxuICogMi4gVXBkYXRlcyBjYW11bmRhOkZvcm1EYXRhI2J1c2luZXNzS2V5IGlmIGNhbXVuZGE6Rm9ybUZpZWxkI2lkIGlzIGNoYW5nZWQuXHJcbiAqIDMuIFJlbW92ZXMgY2FtdW5kYTpGb3JtRGF0YSNidXNpbmVzc0tleSBpZiBjYW11bmRhOkZvcm1GaWVsZCBpcyByZW1vdmVkLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlclRhc2tGb3Jtc0JlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcclxuICAgIHN1cGVyKGV2ZW50QnVzKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBjYW11bmRhOkZvcm1GaWVsZCN2YWx1ZXMgaWYgY2FtdW5kYTpGb3JtRmllbGQjdHlwZSBpcyBjaGFuZ2VkIHRvXHJcbiAgICAgKiBzb21ldGhpbmcgb3RoZXIgdGhhbiBlbnVtLlxyXG4gICAgICovXHJcbiAgICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIG1vZGRsZUVsZW1lbnQsXHJcbiAgICAgICAgcHJvcGVydGllc1xyXG4gICAgICB9ID0gY29udGV4dDtcclxuXHJcbiAgICAgIGlmICghaXMobW9kZGxlRWxlbWVudCwgJ2NhbXVuZGE6Rm9ybUZpZWxkJykpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAoJ3R5cGUnIGluIHByb3BlcnRpZXMgJiYgcHJvcGVydGllc1sgJ3R5cGUnIF0gIT09ICdlbnVtJylcclxuICAgICAgICB8fCAnY2FtdW5kYTp0eXBlJyBpbiBwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXNbICdjYW11bmRhOnR5cGUnIF0gIT09ICdlbnVtJ1xyXG4gICAgICApIHtcclxuICAgICAgICBwcm9wZXJ0aWVzWyAnY2FtdW5kYTp2YWx1ZXMnIF0gPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH0sIHRydWUpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGNhbXVuZGE6Rm9ybURhdGEjYnVzaW5lc3NLZXkgaWYgY2FtdW5kYTpGb3JtRmllbGQjaWQgaXMgY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICAgIGNvbnN0IHtcclxuICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgIG1vZGRsZUVsZW1lbnQsXHJcbiAgICAgICAgcHJvcGVydGllc1xyXG4gICAgICB9ID0gY29udGV4dDtcclxuXHJcbiAgICAgIGlmICghaXMobW9kZGxlRWxlbWVudCwgJ2NhbXVuZGE6Rm9ybUZpZWxkJylcclxuICAgICAgICB8fCAoIWhhcyhwcm9wZXJ0aWVzLCAnaWQnKSAmJiAhaGFzKHByb3BlcnRpZXMsICdjYW11bmRhOmlkJykpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZm9ybURhdGEgPSBnZXRGb3JtRGF0YShlbGVtZW50KTtcclxuXHJcbiAgICAgIGNvbnN0IGJ1c2luZXNzS2V5ID0gZm9ybURhdGEuZ2V0KCdjYW11bmRhOmJ1c2luZXNzS2V5Jyk7XHJcblxyXG4gICAgICBpZiAoIWJ1c2luZXNzS2V5KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNCdXNpbmVzc0tleShtb2RkbGVFbGVtZW50LCBmb3JtRGF0YSkpIHtcclxuICAgICAgICBtb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGZvcm1EYXRhLCB7XHJcbiAgICAgICAgICAnY2FtdW5kYTpidXNpbmVzc0tleSc6IGhhcyhwcm9wZXJ0aWVzLCAnaWQnKSA/IHByb3BlcnRpZXMuaWQgOiBwcm9wZXJ0aWVzWyAnY2FtdW5kYTppZCcgXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCB0cnVlKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBjYW11bmRhOkZvcm1EYXRhI2J1c2luZXNzS2V5IGlmIGNhbXVuZGE6Rm9ybUZpZWxkIGlzIHJlbW92ZWQuXHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9zdEV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgbW9kZGxlRWxlbWVudCxcclxuICAgICAgICBwcm9wZXJ0aWVzXHJcbiAgICAgIH0gPSBjb250ZXh0O1xyXG5cclxuICAgICAgaWYgKCFpcyhtb2RkbGVFbGVtZW50LCAnY2FtdW5kYTpGb3JtRGF0YScpIHx8ICFoYXMocHJvcGVydGllcywgJ2ZpZWxkcycpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBidXNpbmVzc0tleSA9IG1vZGRsZUVsZW1lbnQuZ2V0KCdjYW11bmRhOmJ1c2luZXNzS2V5Jyk7XHJcblxyXG4gICAgICBpZiAoIWJ1c2luZXNzS2V5KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmaWVsZFdpdGhCdXNpbmVzc0tleSA9IG1vZGRsZUVsZW1lbnQuZ2V0KCdmaWVsZHMnKS5maW5kKGZpZWxkID0+IHtcclxuICAgICAgICByZXR1cm4gZmllbGQuZ2V0KCdjYW11bmRhOmlkJykgPT09IGJ1c2luZXNzS2V5O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghZmllbGRXaXRoQnVzaW5lc3NLZXkpIHtcclxuICAgICAgICBtb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIG1vZGRsZUVsZW1lbnQsIHtcclxuICAgICAgICAgICdjYW11bmRhOmJ1c2luZXNzS2V5JzogdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIHRydWUpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcblVzZXJUYXNrRm9ybXNCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnbW9kZWxpbmcnIF07XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzQnVzaW5lc3NLZXkoZm9ybUZpZWxkLCBmb3JtRGF0YSkge1xyXG4gIHJldHVybiBmb3JtRmllbGQuZ2V0KCdjYW11bmRhOmlkJykgPT09IGZvcm1EYXRhLmdldCgnY2FtdW5kYTpidXNpbmVzc0tleScpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRGb3JtRGF0YShlbGVtZW50KSB7XHJcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcclxuICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcclxuXHJcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdmFsdWVzID0gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKTtcclxuXHJcbiAgcmV0dXJuIHZhbHVlcy5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgcmV0dXJuIGlzKHZhbHVlLCAnY2FtdW5kYTpGb3JtRGF0YScpO1xyXG4gIH0pO1xyXG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UserTaskGeneratedFormsBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/index.js":
/*!******************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/index.js ***!
\******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _CopyPasteBehavior__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CopyPasteBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/CopyPasteBehavior.js\");\n/* harmony import */ var _CopyPasteRootElementBehavior__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CopyPasteRootElementBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/CopyPasteRootElementBehavior.js\");\n/* harmony import */ var _DeleteErrorEventDefinitionBehavior__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DeleteErrorEventDefinitionBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/DeleteErrorEventDefinitionBehavior.js\");\n/* harmony import */ var _shared_DeleteParticipantBehaviour__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/DeleteParticipantBehaviour */ \"./node_modules/camunda-bpmn-js-behaviors/lib/shared/DeleteParticipantBehaviour.js\");\n/* harmony import */ var _DeleteRetryTimeCycleBehavior__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DeleteRetryTimeCycleBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/DeleteRetryTimeCycleBehavior.js\");\n/* harmony import */ var _RemoveInitiatorBehaviour__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./RemoveInitiatorBehaviour */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/RemoveInitiatorBehaviour.js\");\n/* harmony import */ var _RemoveVariableEventBehaviour__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./RemoveVariableEventBehaviour */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/RemoveVariableEventBehaviour.js\");\n/* harmony import */ var _UpdateCamundaExclusiveBehavior__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./UpdateCamundaExclusiveBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateCamundaExclusiveBehavior.js\");\n/* harmony import */ var _UpdateInputOutputBehavior__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./UpdateInputOutputBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateInputOutputBehavior.js\");\n/* harmony import */ var _UpdateResultVariableBehavior__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./UpdateResultVariableBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UpdateResultVariableBehavior.js\");\n/* harmony import */ var _UserTaskFormsBehavior__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./UserTaskFormsBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UserTaskFormsBehavior.js\");\n/* harmony import */ var _UserTaskGeneratedFormsBehavior__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./UserTaskGeneratedFormsBehavior */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/UserTaskGeneratedFormsBehavior.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\r\n __init__: [\r\n 'copyPasteBehavior',\r\n 'copyPasteRootElementBehavior',\r\n 'deleteErrorEventDefinitionBehavior',\r\n 'deleteParticipantBehaviour',\r\n 'deleteRetryTimeCycleBehavior',\r\n 'removeInitiatorBehaviour',\r\n 'removeVariableEventBehaviour',\r\n 'updateCamundaExclusiveBehavior',\r\n 'updateResultVariableBehavior',\r\n 'updateInputOutputBehavior',\r\n 'userTaskFormsBehavior',\r\n 'userTaskGeneratedFormsBehavior'\r\n ],\r\n copyPasteBehavior: [ 'type', _CopyPasteBehavior__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ],\r\n copyPasteRootElementBehavior: [ 'type', _CopyPasteRootElementBehavior__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ],\r\n deleteErrorEventDefinitionBehavior: [ 'type', _DeleteErrorEventDefinitionBehavior__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ],\r\n deleteParticipantBehaviour: [ 'type', _shared_DeleteParticipantBehaviour__WEBPACK_IMPORTED_MODULE_3__[\"default\"] ],\r\n deleteRetryTimeCycleBehavior: [ 'type', _DeleteRetryTimeCycleBehavior__WEBPACK_IMPORTED_MODULE_4__[\"default\"] ],\r\n removeInitiatorBehaviour: [ 'type', _RemoveInitiatorBehaviour__WEBPACK_IMPORTED_MODULE_5__[\"default\"] ],\r\n removeVariableEventBehaviour: [ 'type', _RemoveVariableEventBehaviour__WEBPACK_IMPORTED_MODULE_6__[\"default\"] ],\r\n updateCamundaExclusiveBehavior: [ 'type', _UpdateCamundaExclusiveBehavior__WEBPACK_IMPORTED_MODULE_7__[\"default\"] ],\r\n updateResultVariableBehavior: [ 'type', _UpdateResultVariableBehavior__WEBPACK_IMPORTED_MODULE_9__[\"default\"] ],\r\n updateInputOutputBehavior: [ 'type', _UpdateInputOutputBehavior__WEBPACK_IMPORTED_MODULE_8__[\"default\"] ],\r\n userTaskFormsBehavior: [ 'type', _UserTaskFormsBehavior__WEBPACK_IMPORTED_MODULE_10__[\"default\"] ],\r\n userTaskGeneratedFormsBehavior: [ 'type', _UserTaskGeneratedFormsBehavior__WEBPACK_IMPORTED_MODULE_11__[\"default\"] ]\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQW9EO0FBQ3NCO0FBQ1k7QUFDUjtBQUNKO0FBQ1I7QUFDUTtBQUNJO0FBQ1Y7QUFDTTtBQUNkO0FBQ2tCO0FBQzlFO0FBQ0EsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDBEQUFpQjtBQUNoRCwwQ0FBMEMscUVBQTRCO0FBQ3RFLGdEQUFnRCwyRUFBa0M7QUFDbEYsd0NBQXdDLDBFQUEwQjtBQUNsRSwwQ0FBMEMscUVBQTRCO0FBQ3RFLHNDQUFzQyxpRUFBd0I7QUFDOUQsMENBQTBDLHFFQUE0QjtBQUN0RSw0Q0FBNEMsdUVBQThCO0FBQzFFLDBDQUEwQyxxRUFBNEI7QUFDdEUsdUNBQXVDLGtFQUF5QjtBQUNoRSxtQ0FBbUMsK0RBQXFCO0FBQ3hELDRDQUE0Qyx3RUFBOEI7QUFDMUUsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy1iZWhhdmlvcnMvbGliL2NhbXVuZGEtcGxhdGZvcm0vaW5kZXguanM/Y2ZkMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29weVBhc3RlQmVoYXZpb3IgZnJvbSAnLi9Db3B5UGFzdGVCZWhhdmlvcic7XHJcbmltcG9ydCBDb3B5UGFzdGVSb290RWxlbWVudEJlaGF2aW9yIGZyb20gJy4vQ29weVBhc3RlUm9vdEVsZW1lbnRCZWhhdmlvcic7XHJcbmltcG9ydCBEZWxldGVFcnJvckV2ZW50RGVmaW5pdGlvbkJlaGF2aW9yIGZyb20gJy4vRGVsZXRlRXJyb3JFdmVudERlZmluaXRpb25CZWhhdmlvcic7XHJcbmltcG9ydCBEZWxldGVQYXJ0aWNpcGFudEJlaGF2aW91ciBmcm9tICcuLi9zaGFyZWQvRGVsZXRlUGFydGljaXBhbnRCZWhhdmlvdXInO1xyXG5pbXBvcnQgRGVsZXRlUmV0cnlUaW1lQ3ljbGVCZWhhdmlvciBmcm9tICcuL0RlbGV0ZVJldHJ5VGltZUN5Y2xlQmVoYXZpb3InO1xyXG5pbXBvcnQgUmVtb3ZlSW5pdGlhdG9yQmVoYXZpb3VyIGZyb20gJy4vUmVtb3ZlSW5pdGlhdG9yQmVoYXZpb3VyJztcclxuaW1wb3J0IFJlbW92ZVZhcmlhYmxlRXZlbnRCZWhhdmlvdXIgZnJvbSAnLi9SZW1vdmVWYXJpYWJsZUV2ZW50QmVoYXZpb3VyJztcclxuaW1wb3J0IFVwZGF0ZUNhbXVuZGFFeGNsdXNpdmVCZWhhdmlvciBmcm9tICcuL1VwZGF0ZUNhbXVuZGFFeGNsdXNpdmVCZWhhdmlvcic7XHJcbmltcG9ydCBVcGRhdGVJbnB1dE91dHB1dEJlaGF2aW9yIGZyb20gJy4vVXBkYXRlSW5wdXRPdXRwdXRCZWhhdmlvcic7XHJcbmltcG9ydCBVcGRhdGVSZXN1bHRWYXJpYWJsZUJlaGF2aW9yIGZyb20gJy4vVXBkYXRlUmVzdWx0VmFyaWFibGVCZWhhdmlvcic7XHJcbmltcG9ydCBVc2VyVGFza0Zvcm1zQmVoYXZpb3IgZnJvbSAnLi9Vc2VyVGFza0Zvcm1zQmVoYXZpb3InO1xyXG5pbXBvcnQgVXNlclRhc2tHZW5lcmF0ZWRGb3Jtc0JlaGF2aW9yIGZyb20gJy4vVXNlclRhc2tHZW5lcmF0ZWRGb3Jtc0JlaGF2aW9yJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBfX2luaXRfXzogW1xyXG4gICAgJ2NvcHlQYXN0ZUJlaGF2aW9yJyxcclxuICAgICdjb3B5UGFzdGVSb290RWxlbWVudEJlaGF2aW9yJyxcclxuICAgICdkZWxldGVFcnJvckV2ZW50RGVmaW5pdGlvbkJlaGF2aW9yJyxcclxuICAgICdkZWxldGVQYXJ0aWNpcGFudEJlaGF2aW91cicsXHJcbiAgICAnZGVsZXRlUmV0cnlUaW1lQ3ljbGVCZWhhdmlvcicsXHJcbiAgICAncmVtb3ZlSW5pdGlhdG9yQmVoYXZpb3VyJyxcclxuICAgICdyZW1vdmVWYXJpYWJsZUV2ZW50QmVoYXZpb3VyJyxcclxuICAgICd1cGRhdGVDYW11bmRhRXhjbHVzaXZlQmVoYXZpb3InLFxyXG4gICAgJ3VwZGF0ZVJlc3VsdFZhcmlhYmxlQmVoYXZpb3InLFxyXG4gICAgJ3VwZGF0ZUlucHV0T3V0cHV0QmVoYXZpb3InLFxyXG4gICAgJ3VzZXJUYXNrRm9ybXNCZWhhdmlvcicsXHJcbiAgICAndXNlclRhc2tHZW5lcmF0ZWRGb3Jtc0JlaGF2aW9yJ1xyXG4gIF0sXHJcbiAgY29weVBhc3RlQmVoYXZpb3I6IFsgJ3R5cGUnLCBDb3B5UGFzdGVCZWhhdmlvciBdLFxyXG4gIGNvcHlQYXN0ZVJvb3RFbGVtZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBDb3B5UGFzdGVSb290RWxlbWVudEJlaGF2aW9yIF0sXHJcbiAgZGVsZXRlRXJyb3JFdmVudERlZmluaXRpb25CZWhhdmlvcjogWyAndHlwZScsIERlbGV0ZUVycm9yRXZlbnREZWZpbml0aW9uQmVoYXZpb3IgXSxcclxuICBkZWxldGVQYXJ0aWNpcGFudEJlaGF2aW91cjogWyAndHlwZScsIERlbGV0ZVBhcnRpY2lwYW50QmVoYXZpb3VyIF0sXHJcbiAgZGVsZXRlUmV0cnlUaW1lQ3ljbGVCZWhhdmlvcjogWyAndHlwZScsIERlbGV0ZVJldHJ5VGltZUN5Y2xlQmVoYXZpb3IgXSxcclxuICByZW1vdmVJbml0aWF0b3JCZWhhdmlvdXI6IFsgJ3R5cGUnLCBSZW1vdmVJbml0aWF0b3JCZWhhdmlvdXIgXSxcclxuICByZW1vdmVWYXJpYWJsZUV2ZW50QmVoYXZpb3VyOiBbICd0eXBlJywgUmVtb3ZlVmFyaWFibGVFdmVudEJlaGF2aW91ciBdLFxyXG4gIHVwZGF0ZUNhbXVuZGFFeGNsdXNpdmVCZWhhdmlvcjogWyAndHlwZScsIFVwZGF0ZUNhbXVuZGFFeGNsdXNpdmVCZWhhdmlvciBdLFxyXG4gIHVwZGF0ZVJlc3VsdFZhcmlhYmxlQmVoYXZpb3I6IFsgJ3R5cGUnLCBVcGRhdGVSZXN1bHRWYXJpYWJsZUJlaGF2aW9yIF0sXHJcbiAgdXBkYXRlSW5wdXRPdXRwdXRCZWhhdmlvcjogWyAndHlwZScsIFVwZGF0ZUlucHV0T3V0cHV0QmVoYXZpb3IgXSxcclxuICB1c2VyVGFza0Zvcm1zQmVoYXZpb3I6IFsgJ3R5cGUnLCBVc2VyVGFza0Zvcm1zQmVoYXZpb3IgXSxcclxuICB1c2VyVGFza0dlbmVyYXRlZEZvcm1zQmVoYXZpb3I6IFsgJ3R5cGUnLCBVc2VyVGFza0dlbmVyYXRlZEZvcm1zQmVoYXZpb3IgXVxyXG59O1xyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/util/InputOutputUtil.js":
/*!*********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/util/InputOutputUtil.js ***!
\*********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getInputOutput: () => (/* binding */ getInputOutput),\n/* harmony export */ getInputParameters: () => (/* binding */ getInputParameters),\n/* harmony export */ getOutputParameters: () => (/* binding */ getOutputParameters),\n/* harmony export */ isInputOutputEmpty: () => (/* binding */ isInputOutputEmpty)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n\r\nfunction getInputOutput(businessObject) {\r\n const extensionElements = businessObject.get('extensionElements');\r\n\r\n if (!extensionElements) {\r\n return;\r\n }\r\n\r\n return extensionElements.get('values').find((value) => {\r\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(value, 'camunda:InputOutput');\r\n });\r\n}\r\n\r\nfunction getInputParameters(inputOutput) {\r\n return inputOutput.get('inputParameters');\r\n}\r\n\r\nfunction getOutputParameters(inputOutput) {\r\n return inputOutput.get('outputParameters');\r\n}\r\n\r\nfunction isInputOutputEmpty(inputOutput) {\r\n const inputParameters = getInputParameters(inputOutput);\r\n const outputParameters = getOutputParameters(inputOutput);\r\n\r\n return !inputParameters.length && !outputParameters.length;\r\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS91dGlsL0lucHV0T3V0cHV0VXRpbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFnRDtBQUNoRDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsOERBQUU7QUFDYixHQUFHO0FBQ0g7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvY2FtdW5kYS1wbGF0Zm9ybS91dGlsL0lucHV0T3V0cHV0VXRpbC5qcz8yMGM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzIH0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dE91dHB1dChidXNpbmVzc09iamVjdCkge1xyXG4gIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xyXG5cclxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maW5kKCh2YWx1ZSkgPT4ge1xyXG4gICAgcmV0dXJuIGlzKHZhbHVlLCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRQYXJhbWV0ZXJzKGlucHV0T3V0cHV0KSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRwdXRQYXJhbWV0ZXJzKGlucHV0T3V0cHV0KSB7XHJcbiAgcmV0dXJuIGlucHV0T3V0cHV0LmdldCgnb3V0cHV0UGFyYW1ldGVycycpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNJbnB1dE91dHB1dEVtcHR5KGlucHV0T3V0cHV0KSB7XHJcbiAgY29uc3QgaW5wdXRQYXJhbWV0ZXJzID0gZ2V0SW5wdXRQYXJhbWV0ZXJzKGlucHV0T3V0cHV0KTtcclxuICBjb25zdCBvdXRwdXRQYXJhbWV0ZXJzID0gZ2V0T3V0cHV0UGFyYW1ldGVycyhpbnB1dE91dHB1dCk7XHJcblxyXG4gIHJldHVybiAhaW5wdXRQYXJhbWV0ZXJzLmxlbmd0aCAmJiAhb3V0cHV0UGFyYW1ldGVycy5sZW5ndGg7XHJcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/util/InputOutputUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/shared/DeleteParticipantBehaviour.js":
/*!*****************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/shared/DeleteParticipantBehaviour.js ***!
\*****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DeleteParticipantBehaviour)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n\r\n\r\nconst LOW_PRIORITY = 250;\r\n\r\n/**\r\n * Camunda-specific behavior ensuring `isExecutable` is kept after deleting\r\n * the last participant.\r\n */\r\nclass DeleteParticipantBehaviour extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n constructor(eventBus, canvas, modeling) {\r\n super(eventBus);\r\n\r\n this.postExecuted('shape.delete', LOW_PRIORITY, function(context) {\r\n const {\r\n collaborationRoot,\r\n shape\r\n } = context;\r\n\r\n const newRoot = canvas.getRootElement();\r\n\r\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Participant') &&\r\n collaborationRoot &&\r\n !collaborationRoot.businessObject.get('participants').length &&\r\n (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(newRoot, 'bpmn:Process')) {\r\n\r\n const oldProcessBusinessObject = shape.businessObject.get('processRef');\r\n\r\n if (!oldProcessBusinessObject) {\r\n return;\r\n }\r\n\r\n modeling.updateProperties(newRoot, { isExecutable: oldProcessBusinessObject.get('isExecutable') });\r\n }\r\n\r\n }, true);\r\n }\r\n}\r\n\r\nDeleteParticipantBehaviour.$inject = [\r\n 'eventBus',\r\n 'canvas',\r\n 'modeling'\r\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvc2hhcmVkL0RlbGV0ZVBhcnRpY2lwYW50QmVoYXZpb3VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEyRTtBQUMzRTtBQUNnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLHlDQUF5QyxpRkFBa0I7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVSw4REFBRTtBQUNaO0FBQ0E7QUFDQSxVQUFVLDhEQUFFO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsNERBQTREO0FBQ3pHO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMtYmVoYXZpb3JzL2xpYi9zaGFyZWQvRGVsZXRlUGFydGljaXBhbnRCZWhhdmlvdXIuanM/OWQxZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuY29uc3QgTE9XX1BSSU9SSVRZID0gMjUwO1xyXG5cclxuLyoqXHJcbiAqIENhbXVuZGEtc3BlY2lmaWMgYmVoYXZpb3IgZW5zdXJpbmcgYGlzRXhlY3V0YWJsZWAgaXMga2VwdCBhZnRlciBkZWxldGluZ1xyXG4gKiB0aGUgbGFzdCBwYXJ0aWNpcGFudC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbGV0ZVBhcnRpY2lwYW50QmVoYXZpb3VyIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihldmVudEJ1cywgY2FudmFzLCBtb2RlbGluZykge1xyXG4gICAgc3VwZXIoZXZlbnRCdXMpO1xyXG5cclxuICAgIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5kZWxldGUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGNvbGxhYm9yYXRpb25Sb290LFxyXG4gICAgICAgIHNoYXBlXHJcbiAgICAgIH0gPSBjb250ZXh0O1xyXG5cclxuICAgICAgY29uc3QgbmV3Um9vdCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xyXG5cclxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmXHJcbiAgICAgICAgICBjb2xsYWJvcmF0aW9uUm9vdCAmJlxyXG4gICAgICAgICAgIWNvbGxhYm9yYXRpb25Sb290LmJ1c2luZXNzT2JqZWN0LmdldCgncGFydGljaXBhbnRzJykubGVuZ3RoICYmXHJcbiAgICAgICAgICBpcyhuZXdSb290LCAnYnBtbjpQcm9jZXNzJykpIHtcclxuXHJcbiAgICAgICAgY29uc3Qgb2xkUHJvY2Vzc0J1c2luZXNzT2JqZWN0ID0gc2hhcGUuYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJyk7XHJcblxyXG4gICAgICAgIGlmICghb2xkUHJvY2Vzc0J1c2luZXNzT2JqZWN0KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKG5ld1Jvb3QsIHsgaXNFeGVjdXRhYmxlOiBvbGRQcm9jZXNzQnVzaW5lc3NPYmplY3QuZ2V0KCdpc0V4ZWN1dGFibGUnKSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sIHRydWUpO1xyXG4gIH1cclxufVxyXG5cclxuRGVsZXRlUGFydGljaXBhbnRCZWhhdmlvdXIuJGluamVjdCA9IFtcclxuICAnZXZlbnRCdXMnLFxyXG4gICdjYW52YXMnLFxyXG4gICdtb2RlbGluZydcclxuXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/shared/DeleteParticipantBehaviour.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js-behaviors/lib/util/ExtensionElementsUtil.js":
/*!**********************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js-behaviors/lib/util/ExtensionElementsUtil.js ***!
\**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getExtensionElementsList: () => (/* binding */ getExtensionElementsList),\n/* harmony export */ removeExtensionElements: () => (/* binding */ removeExtensionElements)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\r\n\r\n\r\n\r\n/**\r\n * Get extension elements of business object. Optionally filter by type.\r\n *\r\n * @param {djs.model.Base|ModdleElement} element\r\n * @param {String} [type=undefined]\r\n * @returns {Array}\r\n */\r\nfunction getExtensionElementsList(element, type = undefined) {\r\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element),\r\n extensionElements = businessObject.get('extensionElements');\r\n\r\n if (!extensionElements) {\r\n return [];\r\n }\r\n\r\n const values = extensionElements.get('values');\r\n\r\n if (!values || !values.length) {\r\n return [];\r\n }\r\n\r\n if (type) {\r\n return values.filter(value => (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(value, type));\r\n }\r\n\r\n return values;\r\n}\r\n\r\n/**\r\n * Remove one or more extension elements. Remove bpmn:ExtensionElements afterwards if it's empty.\r\n *\r\n * @param {ModdleElement} element\r\n * @param {ModdleElement} businessObject\r\n * @param {ModdleElement|Array} extensionElementsToRemove\r\n * @param {CommandStack} commandStack\r\n */\r\nfunction removeExtensionElements(element, businessObject, extensionElementsToRemove, commandStack) {\r\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_1__.isArray)(extensionElementsToRemove)) {\r\n extensionElementsToRemove = [ extensionElementsToRemove ];\r\n }\r\n\r\n const extensionElements = businessObject.get('extensionElements'),\r\n values = extensionElements.get('values').filter(value => !extensionElementsToRemove.includes(value));\r\n\r\n commandStack.execute('element.updateModdleProperties', {\r\n element,\r\n moddleElement: extensionElements,\r\n properties: {\r\n values\r\n }\r\n });\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzLWJlaGF2aW9ycy9saWIvdXRpbC9FeHRlbnNpb25FbGVtZW50c1V0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdvQztBQUNwQztBQUNtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksOEJBQThCO0FBQzFDLFlBQVksUUFBUTtBQUNwQixhQUFhO0FBQ2I7QUFDTztBQUNQLHlCQUF5Qiw2RUFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsOERBQUU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLGVBQWU7QUFDMUIsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyxjQUFjO0FBQ3pCO0FBQ087QUFDUCxPQUFPLGlEQUFPO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy1iZWhhdmlvcnMvbGliL3V0aWwvRXh0ZW5zaW9uRWxlbWVudHNVdGlsLmpzP2IyZGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBnZXRCdXNpbmVzc09iamVjdCxcclxuICBpc1xyXG59IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJztcclxuXHJcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG4vKipcclxuICogR2V0IGV4dGVuc2lvbiBlbGVtZW50cyBvZiBidXNpbmVzcyBvYmplY3QuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IHR5cGUuXHJcbiAqXHJcbiAqIEBwYXJhbSAge2Rqcy5tb2RlbC5CYXNlfE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcclxuICogQHBhcmFtICB7U3RyaW5nfSBbdHlwZT11bmRlZmluZWRdXHJcbiAqIEByZXR1cm5zIHtBcnJheTxNb2RkbGVFbGVtZW50Pn1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoZWxlbWVudCwgdHlwZSA9IHVuZGVmaW5lZCkge1xyXG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XHJcblxyXG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHZhbHVlcyA9IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyk7XHJcblxyXG4gIGlmICghdmFsdWVzIHx8ICF2YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIodmFsdWUgPT4gaXModmFsdWUsIHR5cGUpKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB2YWx1ZXM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgb25lIG9yIG1vcmUgZXh0ZW5zaW9uIGVsZW1lbnRzLiBSZW1vdmUgYnBtbjpFeHRlbnNpb25FbGVtZW50cyBhZnRlcndhcmRzIGlmIGl0J3MgZW1wdHkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJ1c2luZXNzT2JqZWN0XHJcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxBcnJheTxNb2RkbGVFbGVtZW50Pn0gZXh0ZW5zaW9uRWxlbWVudHNUb1JlbW92ZVxyXG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgYnVzaW5lc3NPYmplY3QsIGV4dGVuc2lvbkVsZW1lbnRzVG9SZW1vdmUsIGNvbW1hbmRTdGFjaykge1xyXG4gIGlmICghaXNBcnJheShleHRlbnNpb25FbGVtZW50c1RvUmVtb3ZlKSkge1xyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHNUb1JlbW92ZSA9IFsgZXh0ZW5zaW9uRWxlbWVudHNUb1JlbW92ZSBdO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyksXHJcbiAgICAgICAgdmFsdWVzID0gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maWx0ZXIodmFsdWUgPT4gIWV4dGVuc2lvbkVsZW1lbnRzVG9SZW1vdmUuaW5jbHVkZXModmFsdWUpKTtcclxuXHJcbiAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcclxuICAgIGVsZW1lbnQsXHJcbiAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcclxuICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgdmFsdWVzXHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js-behaviors/lib/util/ExtensionElementsUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/lib/base/Modeler.js":
/*!**********************************************************!*\
!*** ./node_modules/camunda-bpmn-js/lib/base/Modeler.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Modeler)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var bpmn_js_lib_Modeler__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! bpmn-js/lib/Modeler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Modeler.js\");\n/* harmony import */ var diagram_js_minimap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js-minimap */ \"./node_modules/diagram-js-minimap/dist/index.esm.js\");\n/* harmony import */ var diagram_js_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js-grid */ \"./node_modules/diagram-js-grid/dist/index.esm.js\");\n/* harmony import */ var diagram_js_origin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js-origin */ \"./node_modules/diagram-js-origin/index.js\");\n/* harmony import */ var _bpmn_io_align_to_origin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @bpmn-io/align-to-origin */ \"./node_modules/@bpmn-io/align-to-origin/lib/index.js\");\n/* harmony import */ var bpmn_js_executable_fix__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! bpmn-js-executable-fix */ \"./node_modules/bpmn-js-executable-fix/index.js\");\n/* harmony import */ var bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! bpmn-js-properties-panel */ \"./node_modules/bpmn-js-properties-panel/dist/index.esm.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('bpmn-js/lib/BaseViewer').BaseViewerOptions} BaseViewerOptions\n *\n * @typedef {import('didi').ModuleDeclaration} ModuleDeclaration\n */\n\n/**\n *\n * @param {BaseViewerOptions} options\n */\nfunction Modeler(options = {}) {\n bpmn_js_lib_Modeler__WEBPACK_IMPORTED_MODULE_6__[\"default\"].call(this, options);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(Modeler, bpmn_js_lib_Modeler__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n\n/**\n * @param { {\n * disableAdjustOrigin?: boolean;\n * disableGrid?: boolean;\n * } } [options]\n *\n * @returns {ModuleDeclaration[]}\n */\nModeler.prototype.getModules = function(options = {}) {\n const modules = bpmn_js_lib_Modeler__WEBPACK_IMPORTED_MODULE_6__[\"default\"].prototype.getModules.call(this, options);\n\n return [\n ...modules,\n options.disableAdjustOrigin\n ? diagram_js_origin__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n : _bpmn_io_align_to_origin__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n options.disableGrid\n ? {}\n : diagram_js_grid__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n ];\n};\n\nModeler.prototype._extensionModules = [\n diagram_js_minimap__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n bpmn_js_executable_fix__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.BpmnPropertiesPanelModule,\n bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.BpmnPropertiesProviderModule\n];\n\nModeler.prototype._modules = [].concat(\n bpmn_js_lib_Modeler__WEBPACK_IMPORTED_MODULE_6__[\"default\"].prototype._modules,\n Modeler.prototype._extensionModules\n);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL2xpYi9iYXNlL01vZGVsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQXdDOztBQUVNOztBQUVDOztBQUVOO0FBQ1c7QUFDTzs7QUFFRjs7QUFLdkI7O0FBRWxDO0FBQ0EsYUFBYSxvREFBb0Q7QUFDakU7QUFDQSxhQUFhLGtDQUFrQztBQUMvQzs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDZSw2QkFBNkI7QUFDNUMsRUFBRSwyREFBVztBQUNiOztBQUVBLDREQUFRLFVBQVUsMkRBQVc7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsYUFBYTtBQUNiO0FBQ0Esb0RBQW9EO0FBQ3BELGtCQUFrQiwyREFBVzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0EsUUFBUSx5REFBbUI7QUFDM0IsUUFBUSxnRUFBbUI7QUFDM0I7QUFDQTtBQUNBLFFBQVEsdURBQVU7QUFDbEI7QUFDQTs7QUFFQTtBQUNBLEVBQUUsMERBQWE7QUFDZixFQUFFLDhEQUFtQjtBQUNyQixFQUFFLCtFQUFxQjtBQUN2QixFQUFFLGtGQUE0QjtBQUM5Qjs7QUFFQTtBQUNBLEVBQUUsMkRBQVc7QUFDYjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9saWIvYmFzZS9Nb2RlbGVyLmpzPzM2ZTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgQnBtbk1vZGVsZXIgZnJvbSAnYnBtbi1qcy9saWIvTW9kZWxlcic7XG5cbmltcG9ydCBtaW5pbWFwTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMtbWluaW1hcCc7XG5cbmltcG9ydCBncmlkTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMtZ3JpZCc7XG5pbXBvcnQgZGlhZ3JhbU9yaWdpbk1vZHVsZSBmcm9tICdkaWFncmFtLWpzLW9yaWdpbic7XG5pbXBvcnQgYWxpZ25Ub09yaWdpbk1vZHVsZSBmcm9tICdAYnBtbi1pby9hbGlnbi10by1vcmlnaW4nO1xuXG5pbXBvcnQgZXhlY3V0YWJsZUZpeE1vZHVsZSBmcm9tICdicG1uLWpzLWV4ZWN1dGFibGUtZml4JztcblxuaW1wb3J0IHtcbiAgQnBtblByb3BlcnRpZXNQYW5lbE1vZHVsZSBhcyBwcm9wZXJ0aWVzUGFuZWxNb2R1bGUsXG4gIEJwbW5Qcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUgYXMgYnBtblByb3BlcnRpZXNQcm92aWRlck1vZHVsZVxufSBmcm9tICdicG1uLWpzLXByb3BlcnRpZXMtcGFuZWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2JwbW4tanMvbGliL0Jhc2VWaWV3ZXInKS5CYXNlVmlld2VyT3B0aW9uc30gQmFzZVZpZXdlck9wdGlvbnNcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWRpJykuTW9kdWxlRGVjbGFyYXRpb259IE1vZHVsZURlY2xhcmF0aW9uXG4gKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIHtCYXNlVmlld2VyT3B0aW9uc30gb3B0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RlbGVyKG9wdGlvbnMgPSB7fSkge1xuICBCcG1uTW9kZWxlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhNb2RlbGVyLCBCcG1uTW9kZWxlcik7XG5cbi8qKlxuICogQHBhcmFtIHsge1xuICogIGRpc2FibGVBZGp1c3RPcmlnaW4/OiBib29sZWFuO1xuICogIGRpc2FibGVHcmlkPzogYm9vbGVhbjtcbiAqIH0gfSBbb3B0aW9uc11cbiAqXG4gKiBAcmV0dXJucyB7TW9kdWxlRGVjbGFyYXRpb25bXX1cbiAqL1xuTW9kZWxlci5wcm90b3R5cGUuZ2V0TW9kdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBtb2R1bGVzID0gQnBtbk1vZGVsZXIucHJvdG90eXBlLmdldE1vZHVsZXMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICByZXR1cm4gW1xuICAgIC4uLm1vZHVsZXMsXG4gICAgb3B0aW9ucy5kaXNhYmxlQWRqdXN0T3JpZ2luXG4gICAgICA/IGRpYWdyYW1PcmlnaW5Nb2R1bGVcbiAgICAgIDogYWxpZ25Ub09yaWdpbk1vZHVsZSxcbiAgICBvcHRpb25zLmRpc2FibGVHcmlkXG4gICAgICA/IHt9XG4gICAgICA6IGdyaWRNb2R1bGVcbiAgXTtcbn07XG5cbk1vZGVsZXIucHJvdG90eXBlLl9leHRlbnNpb25Nb2R1bGVzID0gW1xuICBtaW5pbWFwTW9kdWxlLFxuICBleGVjdXRhYmxlRml4TW9kdWxlLFxuICBwcm9wZXJ0aWVzUGFuZWxNb2R1bGUsXG4gIGJwbW5Qcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGVcbl07XG5cbk1vZGVsZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW10uY29uY2F0KFxuICBCcG1uTW9kZWxlci5wcm90b3R5cGUuX21vZHVsZXMsXG4gIE1vZGVsZXIucHJvdG90eXBlLl9leHRlbnNpb25Nb2R1bGVzXG4pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/lib/base/Modeler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/lib/camunda-platform/Modeler.js":
/*!**********************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/lib/camunda-platform/Modeler.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Modeler)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _base_Modeler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../base/Modeler */ \"./node_modules/camunda-bpmn-js/lib/base/Modeler.js\");\n/* harmony import */ var camunda_bpmn_js_behaviors_lib_camunda_platform__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! camunda-bpmn-js-behaviors/lib/camunda-platform */ \"./node_modules/camunda-bpmn-js-behaviors/lib/camunda-platform/index.js\");\n/* harmony import */ var bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bpmn-js-properties-panel */ \"./node_modules/bpmn-js-properties-panel/dist/index.esm.js\");\n/* harmony import */ var bpmn_js_element_templates__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! bpmn-js-element-templates */ \"./node_modules/bpmn-js-element-templates/dist/index.esm.js\");\n/* harmony import */ var _bpmn_io_variable_resolver__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @bpmn-io/variable-resolver */ \"./node_modules/@bpmn-io/variable-resolver/lib/index.js\");\n/* harmony import */ var _util_commonModules__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/commonModules */ \"./node_modules/camunda-bpmn-js/lib/camunda-platform/util/commonModules.js\");\n/* harmony import */ var bpmn_js_color_picker__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! bpmn-js-color-picker */ \"./node_modules/bpmn-js-color-picker/colors/index.js\");\n/* harmony import */ var bpmn_js_create_append_anything__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! bpmn-js-create-append-anything */ \"./node_modules/bpmn-js-create-append-anything/dist/index.es.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('bpmn-js/lib/BaseViewer').BaseViewerOptions} BaseViewerOptions\n */\n\n/**\n * @param {BaseViewerOptions} options\n */\nfunction Modeler(options = {}) {\n\n options = {\n ...options,\n moddleExtensions: {\n ..._util_commonModules__WEBPACK_IMPORTED_MODULE_5__.commonModdleExtensions,\n ...options.moddleExtensions\n }\n };\n\n _base_Modeler__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, options);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(Modeler, _base_Modeler__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nModeler.prototype._camundaPlatformModules = [\n camunda_bpmn_js_behaviors_lib_camunda_platform__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_2__.CamundaPlatformPropertiesProviderModule,\n bpmn_js_element_templates__WEBPACK_IMPORTED_MODULE_3__.ElementTemplatesPropertiesProviderModule,\n bpmn_js_color_picker__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n bpmn_js_create_append_anything__WEBPACK_IMPORTED_MODULE_7__.CreateAppendAnythingModule,\n _bpmn_io_variable_resolver__WEBPACK_IMPORTED_MODULE_4__.CamundaVariableResolverModule,\n bpmn_js_create_append_anything__WEBPACK_IMPORTED_MODULE_7__.RemoveTemplatesModule\n];\n\nModeler.prototype._modules = [].concat(\n _base_Modeler__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype._modules,\n Modeler.prototype._camundaPlatformModules\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL2xpYi9jYW11bmRhLXBsYXRmb3JtL01vZGVsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUF3Qzs7QUFFRTs7QUFFbUM7O0FBSTNDOztBQUlDOztBQUlDOztBQUUwQjs7QUFFVDs7QUFLYjs7QUFFeEM7QUFDQSxhQUFhLG9EQUFvRDtBQUNqRTs7QUFFQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ2UsNkJBQTZCOztBQUU1QztBQUNBO0FBQ0E7QUFDQSxTQUFTLHVFQUFzQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxxREFBVztBQUNiOztBQUVBLDREQUFRLFVBQVUscURBQVc7O0FBRTdCO0FBQ0EsRUFBRSxzRkFBZTtBQUNqQixFQUFFLDZGQUF1QztBQUN6QyxFQUFFLCtGQUF3QztBQUMxQyxFQUFFLDREQUFpQjtBQUNuQixFQUFFLHNGQUEwQjtBQUM1QixFQUFFLHFGQUFzQjtBQUN4QixFQUFFLGlGQUFxQjtBQUN2Qjs7QUFFQTtBQUNBLEVBQUUscURBQVc7QUFDYjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9saWIvY2FtdW5kYS1wbGF0Zm9ybS9Nb2RlbGVyLmpzP2JlNDQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgQmFzZU1vZGVsZXIgZnJvbSAnLi4vYmFzZS9Nb2RlbGVyJztcblxuaW1wb3J0IGJlaGF2aW9yc01vZHVsZSBmcm9tICdjYW11bmRhLWJwbW4tanMtYmVoYXZpb3JzL2xpYi9jYW11bmRhLXBsYXRmb3JtJztcblxuaW1wb3J0IHtcbiAgQ2FtdW5kYVBsYXRmb3JtUHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlXG59IGZyb20gJ2JwbW4tanMtcHJvcGVydGllcy1wYW5lbCc7XG5cbmltcG9ydCB7XG4gIEVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGVcbn0gZnJvbSAnYnBtbi1qcy1lbGVtZW50LXRlbXBsYXRlcyc7XG5cbmltcG9ydCB7XG4gIENhbXVuZGFWYXJpYWJsZVJlc29sdmVyTW9kdWxlIGFzIHZhcmlhYmxlUmVzb2x2ZXJNb2R1bGVcbn0gZnJvbSAnQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXInO1xuXG5pbXBvcnQgeyBjb21tb25Nb2RkbGVFeHRlbnNpb25zIH0gZnJvbSAnLi91dGlsL2NvbW1vbk1vZHVsZXMnO1xuXG5pbXBvcnQgY29sb3JQaWNrZXJNb2R1bGUgZnJvbSAnYnBtbi1qcy1jb2xvci1waWNrZXInO1xuXG5pbXBvcnQge1xuICBDcmVhdGVBcHBlbmRBbnl0aGluZ01vZHVsZSBhcyBjcmVhdGVBcHBlbmRBbnl0aGluZ01vZHVsZSxcbiAgUmVtb3ZlVGVtcGxhdGVzTW9kdWxlIGFzIHJlbW92ZVRlbXBsYXRlc01vZHVsZVxufSBmcm9tICdicG1uLWpzLWNyZWF0ZS1hcHBlbmQtYW55dGhpbmcnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2JwbW4tanMvbGliL0Jhc2VWaWV3ZXInKS5CYXNlVmlld2VyT3B0aW9uc30gQmFzZVZpZXdlck9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7QmFzZVZpZXdlck9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxlcihvcHRpb25zID0ge30pIHtcblxuICBvcHRpb25zID0ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbW9kZGxlRXh0ZW5zaW9uczoge1xuICAgICAgLi4uY29tbW9uTW9kZGxlRXh0ZW5zaW9ucyxcbiAgICAgIC4uLm9wdGlvbnMubW9kZGxlRXh0ZW5zaW9uc1xuICAgIH1cbiAgfTtcblxuICBCYXNlTW9kZWxlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhNb2RlbGVyLCBCYXNlTW9kZWxlcik7XG5cbk1vZGVsZXIucHJvdG90eXBlLl9jYW11bmRhUGxhdGZvcm1Nb2R1bGVzID0gW1xuICBiZWhhdmlvcnNNb2R1bGUsXG4gIENhbXVuZGFQbGF0Zm9ybVByb3BlcnRpZXNQcm92aWRlck1vZHVsZSxcbiAgRWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlck1vZHVsZSxcbiAgY29sb3JQaWNrZXJNb2R1bGUsXG4gIGNyZWF0ZUFwcGVuZEFueXRoaW5nTW9kdWxlLFxuICB2YXJpYWJsZVJlc29sdmVyTW9kdWxlLFxuICByZW1vdmVUZW1wbGF0ZXNNb2R1bGVcbl07XG5cbk1vZGVsZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW10uY29uY2F0KFxuICBCYXNlTW9kZWxlci5wcm90b3R5cGUuX21vZHVsZXMsXG4gIE1vZGVsZXIucHJvdG90eXBlLl9jYW11bmRhUGxhdGZvcm1Nb2R1bGVzXG4pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/lib/camunda-platform/Modeler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/lib/camunda-platform/util/commonModules.js":
/*!*********************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/lib/camunda-platform/util/commonModules.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ commonModdleExtensions: () => (/* binding */ commonModdleExtensions),\n/* harmony export */ commonModules: () => (/* binding */ commonModules)\n/* harmony export */ });\n/* harmony import */ var camunda_bpmn_moddle_resources_camunda_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! camunda-bpmn-moddle/resources/camunda.json */ \"./node_modules/camunda-bpmn-moddle/resources/camunda.json\");\n\n\nconst commonModules = [];\n\n/**\n * @type { {\n * camunda: any\n * } }\n */\nconst commonModdleExtensions = {\n camunda: camunda_bpmn_moddle_resources_camunda_json__WEBPACK_IMPORTED_MODULE_0__\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL2xpYi9jYW11bmRhLXBsYXRmb3JtL3V0aWwvY29tbW9uTW9kdWxlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBdUU7O0FBRWhFOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLFdBQVcsdUVBQWE7QUFDeEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL2xpYi9jYW11bmRhLXBsYXRmb3JtL3V0aWwvY29tbW9uTW9kdWxlcy5qcz84NTBmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjYW11bmRhTW9kZGxlIGZyb20gJ2NhbXVuZGEtYnBtbi1tb2RkbGUvcmVzb3VyY2VzL2NhbXVuZGEuanNvbic7XG5cbmV4cG9ydCBjb25zdCBjb21tb25Nb2R1bGVzID0gW107XG5cbi8qKlxuICogQHR5cGUgeyB7XG4gKiAgIGNhbXVuZGE6IGFueVxuICogfSB9XG4gKi9cbmV4cG9ydCBjb25zdCBjb21tb25Nb2RkbGVFeHRlbnNpb25zID0ge1xuICBjYW11bmRhOiBjYW11bmRhTW9kZGxlXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/lib/camunda-platform/util/commonModules.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseModeler.js":
/*!******************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseModeler.js ***!
\******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BaseModeler)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var ids__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ids */ \"./node_modules/ids/dist/index.esm.js\");\n/* harmony import */ var _BaseViewer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BaseViewer */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseViewer.js\");\n\n\n\n\n\n\n\n/**\n * @typedef {import('./BaseViewer').BaseViewerOptions} BaseViewerOptions\n * @typedef {import('./BaseViewer').ModdleElementsById} ModdleElementsById\n *\n * @typedef {import('./model/Types').ModdleElement} ModdleElement\n */\n\n/**\n * A base modeler for BPMN 2.0 diagrams.\n *\n * See {@link Modeler} for a fully-featured modeler.\n *\n * @param {BaseViewerOptions} [options] The options to configure the modeler.\n */\nfunction BaseModeler(options) {\n _BaseViewer__WEBPACK_IMPORTED_MODULE_1__[\"default\"].call(this, options);\n\n // hook ID collection into the modeler\n this.on('import.parse.complete', function(event) {\n if (!event.error) {\n this._collectIds(event.definitions, event.elementsById);\n }\n }, this);\n\n this.on('diagram.destroy', function() {\n this.get('moddle').ids.clear();\n }, this);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(BaseModeler, _BaseViewer__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n\n/**\n * Create a moddle instance, attaching IDs to it.\n *\n * @param {BaseViewerOptions} options\n *\n * @return {Moddle}\n */\nBaseModeler.prototype._createModdle = function(options) {\n var moddle = _BaseViewer__WEBPACK_IMPORTED_MODULE_1__[\"default\"].prototype._createModdle.call(this, options);\n\n // attach ids to moddle to be able to track and validated ids in the BPMN 2.0\n // XML document tree\n moddle.ids = new ids__WEBPACK_IMPORTED_MODULE_0__[\"default\"]([ 32, 36, 1 ]);\n\n return moddle;\n};\n\n/**\n * Collect IDs processed during parsing of the definitions object.\n *\n * @param {ModdleElement} definitions\n * @param {ModdleElementsById} elementsById\n */\nBaseModeler.prototype._collectIds = function(definitions, elementsById) {\n\n var moddle = definitions.$model,\n ids = moddle.ids,\n id;\n\n // remove references from previous import\n ids.clear();\n\n for (id in elementsById) {\n ids.claim(id, elementsById[ id ]);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9CYXNlTW9kZWxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdDOztBQUVsQjs7QUFFZ0I7OztBQUd0QztBQUNBLGFBQWEsMENBQTBDO0FBQ3ZELGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0EsYUFBYSx1Q0FBdUM7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxlQUFlO0FBQ3ZCO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDZTtBQUNmLEVBQUUsbURBQVU7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSw0REFBUSxjQUFjLG1EQUFVOzs7QUFHaEM7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGVBQWUsbURBQVU7O0FBRXpCO0FBQ0E7QUFDQSxtQkFBbUIsMkNBQUc7O0FBRXRCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9CYXNlTW9kZWxlci5qcz9jYjIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IElkcyBmcm9tICdpZHMnO1xuXG5pbXBvcnQgQmFzZVZpZXdlciBmcm9tICcuL0Jhc2VWaWV3ZXInO1xuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9CYXNlVmlld2VyJykuQmFzZVZpZXdlck9wdGlvbnN9IEJhc2VWaWV3ZXJPcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL0Jhc2VWaWV3ZXInKS5Nb2RkbGVFbGVtZW50c0J5SWR9IE1vZGRsZUVsZW1lbnRzQnlJZFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fSBNb2RkbGVFbGVtZW50XG4gKi9cblxuLyoqXG4gKiBBIGJhc2UgbW9kZWxlciBmb3IgQlBNTiAyLjAgZGlhZ3JhbXMuXG4gKlxuICogU2VlIHtAbGluayBNb2RlbGVyfSBmb3IgYSBmdWxseS1mZWF0dXJlZCBtb2RlbGVyLlxuICpcbiAqIEBwYXJhbSB7QmFzZVZpZXdlck9wdGlvbnN9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIG1vZGVsZXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhc2VNb2RlbGVyKG9wdGlvbnMpIHtcbiAgQmFzZVZpZXdlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIC8vIGhvb2sgSUQgY29sbGVjdGlvbiBpbnRvIHRoZSBtb2RlbGVyXG4gIHRoaXMub24oJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5lcnJvcikge1xuICAgICAgdGhpcy5fY29sbGVjdElkcyhldmVudC5kZWZpbml0aW9ucywgZXZlbnQuZWxlbWVudHNCeUlkKTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIHRoaXMub24oJ2RpYWdyYW0uZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZ2V0KCdtb2RkbGUnKS5pZHMuY2xlYXIoKTtcbiAgfSwgdGhpcyk7XG59XG5cbmluaGVyaXRzKEJhc2VNb2RlbGVyLCBCYXNlVmlld2VyKTtcblxuXG4vKipcbiAqIENyZWF0ZSBhIG1vZGRsZSBpbnN0YW5jZSwgYXR0YWNoaW5nIElEcyB0byBpdC5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VWaWV3ZXJPcHRpb25zfSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7TW9kZGxlfVxuICovXG5CYXNlTW9kZWxlci5wcm90b3R5cGUuX2NyZWF0ZU1vZGRsZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIG1vZGRsZSA9IEJhc2VWaWV3ZXIucHJvdG90eXBlLl9jcmVhdGVNb2RkbGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICAvLyBhdHRhY2ggaWRzIHRvIG1vZGRsZSB0byBiZSBhYmxlIHRvIHRyYWNrIGFuZCB2YWxpZGF0ZWQgaWRzIGluIHRoZSBCUE1OIDIuMFxuICAvLyBYTUwgZG9jdW1lbnQgdHJlZVxuICBtb2RkbGUuaWRzID0gbmV3IElkcyhbIDMyLCAzNiwgMSBdKTtcblxuICByZXR1cm4gbW9kZGxlO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0IElEcyBwcm9jZXNzZWQgZHVyaW5nIHBhcnNpbmcgb2YgdGhlIGRlZmluaXRpb25zIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnRzQnlJZH0gZWxlbWVudHNCeUlkXG4gKi9cbkJhc2VNb2RlbGVyLnByb3RvdHlwZS5fY29sbGVjdElkcyA9IGZ1bmN0aW9uKGRlZmluaXRpb25zLCBlbGVtZW50c0J5SWQpIHtcblxuICB2YXIgbW9kZGxlID0gZGVmaW5pdGlvbnMuJG1vZGVsLFxuICAgICAgaWRzID0gbW9kZGxlLmlkcyxcbiAgICAgIGlkO1xuXG4gIC8vIHJlbW92ZSByZWZlcmVuY2VzIGZyb20gcHJldmlvdXMgaW1wb3J0XG4gIGlkcy5jbGVhcigpO1xuXG4gIGZvciAoaWQgaW4gZWxlbWVudHNCeUlkKSB7XG4gICAgaWRzLmNsYWltKGlkLCBlbGVtZW50c0J5SWRbIGlkIF0pO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseModeler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseViewer.js":
/*!*****************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseViewer.js ***!
\*****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BaseViewer)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var min_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! min-dom */ \"./node_modules/min-dom/dist/index.esm.js\");\n/* harmony import */ var tiny_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tiny-svg */ \"./node_modules/tiny-svg/dist/index.esm.js\");\n/* harmony import */ var diagram_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/Diagram.js\");\n/* harmony import */ var bpmn_moddle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! bpmn-moddle */ \"./node_modules/bpmn-moddle/dist/index.esm.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _import_Importer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./import/Importer */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/import/Importer.js\");\n/* harmony import */ var _util_PoweredByUtil__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util/PoweredByUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/PoweredByUtil.js\");\n/**\n * The code in the area\n * must not be changed.\n *\n * @see http://bpmn.io/license for more information.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @template T\n *\n * @typedef {import('diagram-js/lib/core/EventBus').EventBusEventCallback} EventBusEventCallback\n */\n\n/**\n * @typedef {import('didi').ModuleDeclaration} ModuleDeclaration\n *\n * @typedef {import('./model/Types').Moddle} Moddle\n * @typedef {import('./model/Types').ModdleElement} ModdleElement\n * @typedef {import('./model/Types').ModdleExtension} ModdleExtension\n *\n * @typedef { {\n * width?: number|string;\n * height?: number|string;\n * position?: string;\n * container?: string|HTMLElement;\n * moddleExtensions?: ModdleExtensions;\n * additionalModules?: ModuleDeclaration[];\n * } & Record } BaseViewerOptions\n *\n * @typedef {Record} ModdleElementsById\n *\n * @typedef { {\n * [key: string]: ModdleExtension;\n * } } ModdleExtensions\n *\n * @typedef { {\n * warnings: string[];\n * } } ImportXMLResult\n *\n * @typedef {ImportXMLResult & Error} ImportXMLError\n *\n * @typedef {ImportXMLResult} ImportDefinitionsResult\n *\n * @typedef {ImportXMLError} ImportDefinitionsError\n *\n * @typedef {ImportXMLResult} OpenResult\n *\n * @typedef {ImportXMLError} OpenError\n *\n * @typedef { {\n * format?: boolean;\n * preamble?: boolean;\n * } } SaveXMLOptions\n *\n * @typedef { {\n * xml?: string;\n * error?: Error;\n * } } SaveXMLResult\n *\n * @typedef { {\n * svg: string;\n * } } SaveSVGResult\n *\n * @typedef { {\n * xml: string;\n * } } ImportParseStartEvent\n *\n * @typedef { {\n * error?: ImportXMLError;\n * definitions?: ModdleElement;\n * elementsById?: ModdleElementsById;\n * references?: ModdleElement[];\n * warnings: string[];\n * } } ImportParseCompleteEvent\n *\n * @typedef { {\n * error?: ImportXMLError;\n * warnings: string[];\n * } } ImportDoneEvent\n *\n * @typedef { {\n * definitions: ModdleElement;\n * } } SaveXMLStartEvent\n *\n * @typedef {SaveXMLResult} SaveXMLDoneEvent\n *\n * @typedef { {\n * error?: Error;\n * svg: string;\n * } } SaveSVGDoneEvent\n */\n\n/**\n * A base viewer for BPMN 2.0 diagrams.\n *\n * Have a look at {@link Viewer}, {@link NavigatedViewer} or {@link Modeler} for\n * bundles that include actual features.\n *\n * @param {BaseViewerOptions} [options] The options to configure the viewer.\n */\nfunction BaseViewer(options) {\n\n /**\n * @type {BaseViewerOptions}\n */\n options = (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)({}, DEFAULT_OPTIONS, options);\n\n /**\n * @type {Moddle}\n */\n this._moddle = this._createModdle(options);\n\n /**\n * @type {HTMLElement}\n */\n this._container = this._createContainer(options);\n\n /* */\n\n addProjectLogo(this._container);\n\n /* */\n\n this._init(this._container, this._moddle, options);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BaseViewer, diagram_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n\n/**\n * Parse and render a BPMN 2.0 diagram.\n *\n * Once finished the viewer reports back the result to the\n * provided callback function with (err, warnings).\n *\n * ## Life-Cycle Events\n *\n * During import the viewer will fire life-cycle events:\n *\n * * import.parse.start (about to read model from XML)\n * * import.parse.complete (model read; may have worked or not)\n * * import.render.start (graphical import start)\n * * import.render.complete (graphical import finished)\n * * import.done (everything done)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @throws {ImportXMLError} An error thrown during the import of the XML.\n *\n * @fires BaseViewer#ImportParseStartEvent\n * @fires BaseViewer#ImportParseCompleteEvent\n * @fires Importer#ImportRenderStartEvent\n * @fires Importer#ImportRenderCompleteEvent\n * @fires BaseViewer#ImportDoneEvent\n *\n * @param {string} xml The BPMN 2.0 XML to be imported.\n * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or Id of the BPMN diagram to open.\n *\n * @return {Promise} A promise resolving with warnings that were produced during the import.\n */\nBaseViewer.prototype.importXML = async function importXML(xml, bpmnDiagram) {\n\n const self = this;\n\n function ParseCompleteEvent(data) {\n return self.get('eventBus').createEvent(data);\n }\n\n let aggregatedWarnings = [];\n try {\n\n // hook in pre-parse listeners +\n // allow xml manipulation\n\n /**\n * A `import.parse.start` event.\n *\n * @event BaseViewer#ImportParseStartEvent\n * @type {ImportParseStartEvent}\n */\n xml = this._emit('import.parse.start', { xml: xml }) || xml;\n\n let parseResult;\n try {\n parseResult = await this._moddle.fromXML(xml, 'bpmn:Definitions');\n } catch (error) {\n this._emit('import.parse.complete', {\n error\n });\n\n throw error;\n }\n\n let definitions = parseResult.rootElement;\n const references = parseResult.references;\n const parseWarnings = parseResult.warnings;\n const elementsById = parseResult.elementsById;\n\n aggregatedWarnings = aggregatedWarnings.concat(parseWarnings);\n\n // hook in post parse listeners +\n // allow definitions manipulation\n\n /**\n * A `import.parse.complete` event.\n *\n * @event BaseViewer#ImportParseCompleteEvent\n * @type {ImportParseCompleteEvent}\n */\n definitions = this._emit('import.parse.complete', ParseCompleteEvent({\n error: null,\n definitions: definitions,\n elementsById: elementsById,\n references: references,\n warnings: aggregatedWarnings\n })) || definitions;\n\n const importResult = await this.importDefinitions(definitions, bpmnDiagram);\n\n aggregatedWarnings = aggregatedWarnings.concat(importResult.warnings);\n\n /**\n * A `import.parse.complete` event.\n *\n * @event BaseViewer#ImportDoneEvent\n * @type {ImportDoneEvent}\n */\n this._emit('import.done', { error: null, warnings: aggregatedWarnings });\n\n return { warnings: aggregatedWarnings };\n } catch (err) {\n let error = err;\n aggregatedWarnings = aggregatedWarnings.concat(error.warnings || []);\n addWarningsToError(error, aggregatedWarnings);\n\n error = checkValidationError(error);\n\n this._emit('import.done', { error, warnings: error.warnings });\n\n throw error;\n }\n};\n\n\n/**\n * Import parsed definitions and render a BPMN 2.0 diagram.\n *\n * Once finished the viewer reports back the result to the\n * provided callback function with (err, warnings).\n *\n * ## Life-Cycle Events\n *\n * During import the viewer will fire life-cycle events:\n *\n * * import.render.start (graphical import start)\n * * import.render.complete (graphical import finished)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @throws {ImportDefinitionsError} An error thrown during the import of the definitions.\n *\n * @param {ModdleElement} definitions The definitions.\n * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or ID of the BPMN diagram to open.\n *\n * @return {Promise} A promise resolving with warnings that were produced during the import.\n */\nBaseViewer.prototype.importDefinitions = async function importDefinitions(definitions, bpmnDiagram) {\n this._setDefinitions(definitions);\n const result = await this.open(bpmnDiagram);\n\n return { warnings: result.warnings };\n};\n\n\n/**\n * Open diagram of previously imported XML.\n *\n * Once finished the viewer reports back the result to the\n * provided callback function with (err, warnings).\n *\n * ## Life-Cycle Events\n *\n * During switch the viewer will fire life-cycle events:\n *\n * * import.render.start (graphical import start)\n * * import.render.complete (graphical import finished)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @throws {OpenError} An error thrown during opening.\n *\n * @param {ModdleElement|string} bpmnDiagramOrId The diagram or Id of the BPMN diagram to open.\n *\n * @return {Promise} A promise resolving with warnings that were produced during opening.\n */\nBaseViewer.prototype.open = async function open(bpmnDiagramOrId) {\n\n const definitions = this._definitions;\n let bpmnDiagram = bpmnDiagramOrId;\n\n if (!definitions) {\n const error = new Error('no XML imported');\n addWarningsToError(error, []);\n\n throw error;\n }\n\n if (typeof bpmnDiagramOrId === 'string') {\n bpmnDiagram = findBPMNDiagram(definitions, bpmnDiagramOrId);\n\n if (!bpmnDiagram) {\n const error = new Error('BPMNDiagram <' + bpmnDiagramOrId + '> not found');\n addWarningsToError(error, []);\n\n throw error;\n }\n }\n\n // clear existing rendered diagram\n // catch synchronous exceptions during #clear()\n try {\n this.clear();\n } catch (error) {\n addWarningsToError(error, []);\n\n throw error;\n }\n\n // perform graphical import\n const { warnings } = await (0,_import_Importer__WEBPACK_IMPORTED_MODULE_3__.importBpmnDiagram)(this, definitions, bpmnDiagram);\n\n return { warnings };\n};\n\n/**\n * Export the currently displayed BPMN 2.0 diagram as\n * a BPMN 2.0 XML document.\n *\n * ## Life-Cycle Events\n *\n * During XML saving the viewer will fire life-cycle events:\n *\n * * saveXML.start (before serialization)\n * * saveXML.serialized (after xml generation)\n * * saveXML.done (everything done)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @throws {Error} An error thrown during export.\n *\n * @fires BaseViewer#SaveXMLStart\n * @fires BaseViewer#SaveXMLDone\n *\n * @param {SaveXMLOptions} [options] The options.\n *\n * @return {Promise} A promise resolving with the XML.\n */\nBaseViewer.prototype.saveXML = async function saveXML(options) {\n\n options = options || {};\n\n let definitions = this._definitions,\n error, xml;\n\n try {\n if (!definitions) {\n throw new Error('no definitions loaded');\n }\n\n // allow to fiddle around with definitions\n\n /**\n * A `saveXML.start` event.\n *\n * @event BaseViewer#SaveXMLStartEvent\n * @type {SaveXMLStartEvent}\n */\n definitions = this._emit('saveXML.start', {\n definitions\n }) || definitions;\n\n const result = await this._moddle.toXML(definitions, options);\n xml = result.xml;\n\n xml = this._emit('saveXML.serialized', {\n xml\n }) || xml;\n } catch (err) {\n error = err;\n }\n\n const result = error ? { error } : { xml };\n\n /**\n * A `saveXML.done` event.\n *\n * @event BaseViewer#SaveXMLDoneEvent\n * @type {SaveXMLDoneEvent}\n */\n this._emit('saveXML.done', result);\n\n if (error) {\n throw error;\n }\n\n return result;\n};\n\n\n/**\n * Export the currently displayed BPMN 2.0 diagram as\n * an SVG image.\n *\n * ## Life-Cycle Events\n *\n * During SVG saving the viewer will fire life-cycle events:\n *\n * * saveSVG.start (before serialization)\n * * saveSVG.done (everything done)\n *\n * You can use these events to hook into the life-cycle.\n *\n * @throws {Error} An error thrown during export.\n *\n * @fires BaseViewer#SaveSVGDone\n *\n * @return {Promise} A promise resolving with the SVG.\n */\nBaseViewer.prototype.saveSVG = async function saveSVG() {\n this._emit('saveSVG.start');\n\n let svg, err;\n\n try {\n const canvas = this.get('canvas');\n\n const contentNode = canvas.getActiveLayer(),\n defsNode = (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.query)('defs', canvas._svg);\n\n const contents = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_5__.innerSVG)(contentNode),\n defs = defsNode ? '' + (0,tiny_svg__WEBPACK_IMPORTED_MODULE_5__.innerSVG)(defsNode) + ' ' : '';\n\n const bbox = contentNode.getBBox();\n\n svg =\n '\\n' +\n '\\n' +\n '\\n' +\n '' +\n defs + contents +\n ' ';\n } catch (e) {\n err = e;\n }\n\n /**\n * A `saveSVG.done` event.\n *\n * @event BaseViewer#SaveSVGDoneEvent\n * @type {SaveSVGDoneEvent}\n */\n this._emit('saveSVG.done', {\n error: err,\n svg: svg\n });\n\n if (err) {\n throw err;\n }\n\n return { svg };\n};\n\nBaseViewer.prototype._setDefinitions = function(definitions) {\n this._definitions = definitions;\n};\n\n/**\n * Return modules to instantiate with.\n *\n * @return {ModuleDeclaration[]} The modules.\n */\nBaseViewer.prototype.getModules = function() {\n return this._modules;\n};\n\n/**\n * Remove all drawn elements from the viewer.\n *\n * After calling this method the viewer can still be reused for opening another\n * diagram.\n */\nBaseViewer.prototype.clear = function() {\n if (!this.getDefinitions()) {\n\n // no diagram to clear\n return;\n }\n\n // remove drawn elements\n diagram_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].prototype.clear.call(this);\n};\n\n/**\n * Destroy the viewer instance and remove all its remainders from the document\n * tree.\n */\nBaseViewer.prototype.destroy = function() {\n\n // diagram destroy\n diagram_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].prototype.destroy.call(this);\n\n // dom detach\n (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.remove)(this._container);\n};\n\n/**\n * Register an event listener.\n *\n * Remove an event listener via {@link BaseViewer#off}.\n *\n * @template T\n *\n * @param {string|string[]} events The event(s) to listen to.\n * @param {number} [priority] The priority with which to listen.\n * @param {EventBusEventCallback} callback The callback.\n * @param {any} [that] Value of `this` the callback will be called with.\n */\nBaseViewer.prototype.on = function(events, priority, callback, that) {\n return this.get('eventBus').on(events, priority, callback, that);\n};\n\n/**\n * Remove an event listener.\n *\n * @param {string|string[]} events The event(s).\n * @param {Function} [callback] The callback.\n */\nBaseViewer.prototype.off = function(events, callback) {\n this.get('eventBus').off(events, callback);\n};\n\n/**\n * Attach the viewer to an HTML element.\n *\n * @param {HTMLElement} parentNode The parent node to attach to.\n */\nBaseViewer.prototype.attachTo = function(parentNode) {\n\n if (!parentNode) {\n throw new Error('parentNode required');\n }\n\n // ensure we detach from the\n // previous, old parent\n this.detach();\n\n // unwrap jQuery if provided\n if (parentNode.get && parentNode.constructor.prototype.jquery) {\n parentNode = parentNode.get(0);\n }\n\n if (typeof parentNode === 'string') {\n parentNode = (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.query)(parentNode);\n }\n\n parentNode.appendChild(this._container);\n\n this._emit('attach', {});\n\n this.get('canvas').resized();\n};\n\n/**\n * Get the definitions model element.\n *\n * @return {ModdleElement} The definitions model element.\n */\nBaseViewer.prototype.getDefinitions = function() {\n return this._definitions;\n};\n\n/**\n * Detach the viewer.\n *\n * @fires BaseViewer#DetachEvent\n */\nBaseViewer.prototype.detach = function() {\n\n const container = this._container,\n parentNode = container.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n /**\n * A `detach` event.\n *\n * @event BaseViewer#DetachEvent\n * @type {Object}\n */\n this._emit('detach', {});\n\n parentNode.removeChild(container);\n};\n\nBaseViewer.prototype._init = function(container, moddle, options) {\n\n const baseModules = options.modules || this.getModules(options),\n additionalModules = options.additionalModules || [],\n staticModules = [\n {\n bpmnjs: [ 'value', this ],\n moddle: [ 'value', moddle ]\n }\n ];\n\n const diagramModules = [].concat(staticModules, baseModules, additionalModules);\n\n const diagramOptions = (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.omit)(options, [ 'additionalModules' ]), {\n canvas: (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)({}, options.canvas, { container: container }),\n modules: diagramModules\n });\n\n // invoke diagram constructor\n diagram_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].call(this, diagramOptions);\n\n if (options && options.container) {\n this.attachTo(options.container);\n }\n};\n\n/**\n * Emit an event on the underlying {@link EventBus}\n *\n * @param {string} type\n * @param {Object} event\n *\n * @return {Object} The return value after calling all event listeners.\n */\nBaseViewer.prototype._emit = function(type, event) {\n return this.get('eventBus').fire(type, event);\n};\n\n/**\n * @param {BaseViewerOptions} options\n *\n * @return {HTMLElement}\n */\nBaseViewer.prototype._createContainer = function(options) {\n\n const container = (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.domify)('
');\n\n (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.assignStyle)(container, {\n width: ensureUnit(options.width),\n height: ensureUnit(options.height),\n position: options.position\n });\n\n return container;\n};\n\n/**\n * @param {BaseViewerOptions} options\n *\n * @return {Moddle}\n */\nBaseViewer.prototype._createModdle = function(options) {\n const moddleOptions = (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)({}, this._moddleExtensions, options.moddleExtensions);\n\n return new bpmn_moddle__WEBPACK_IMPORTED_MODULE_6__[\"default\"](moddleOptions);\n};\n\nBaseViewer.prototype._modules = [];\n\n// helpers ///////////////\n\nfunction addWarningsToError(err, warningsAry) {\n err.warnings = warningsAry;\n return err;\n}\n\nfunction checkValidationError(err) {\n\n // check if we can help the user by indicating wrong BPMN 2.0 xml\n // (in case he or the exporting tool did not get that right)\n\n const pattern = /unparsable content <([^>]+)> detected([\\s\\S]*)$/;\n const match = pattern.exec(err.message);\n\n if (match) {\n err.message =\n 'unparsable content <' + match[1] + '> detected; ' +\n 'this may indicate an invalid BPMN 2.0 diagram file' + match[2];\n }\n\n return err;\n}\n\nconst DEFAULT_OPTIONS = {\n width: '100%',\n height: '100%',\n position: 'relative'\n};\n\n\n/**\n * Ensure the passed argument is a proper unit (defaulting to px)\n */\nfunction ensureUnit(val) {\n return val + ((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isNumber)(val) ? 'px' : '');\n}\n\n\n/**\n * Find BPMNDiagram in definitions by ID\n *\n * @param {ModdleElement} definitions\n * @param {string} diagramId\n *\n * @return {ModdleElement|null}\n */\nfunction findBPMNDiagram(definitions, diagramId) {\n if (!diagramId) {\n return null;\n }\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.find)(definitions.diagrams, function(element) {\n return element.id === diagramId;\n }) || null;\n}\n\n\n/* */\n\n\n\n\n\n/**\n * Adds the project logo to the diagram container as\n * required by the bpmn.io license.\n *\n * @see http://bpmn.io/license\n *\n * @param {Element} container\n */\nfunction addProjectLogo(container) {\n const img = _util_PoweredByUtil__WEBPACK_IMPORTED_MODULE_7__.BPMNIO_IMG;\n\n const linkMarkup =\n '' +\n img +\n ' ';\n\n const linkElement = (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.domify)(linkMarkup);\n\n (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.assignStyle)((0,min_dom__WEBPACK_IMPORTED_MODULE_4__.query)('svg', linkElement), _util_PoweredByUtil__WEBPACK_IMPORTED_MODULE_7__.LOGO_STYLES);\n (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.assignStyle)(linkElement, _util_PoweredByUtil__WEBPACK_IMPORTED_MODULE_7__.LINK_STYLES, {\n position: 'absolute',\n bottom: '15px',\n right: '15px',\n zIndex: '100'\n });\n\n container.appendChild(linkElement);\n\n min_dom__WEBPACK_IMPORTED_MODULE_4__.event.bind(linkElement, 'click', function(event) {\n (0,_util_PoweredByUtil__WEBPACK_IMPORTED_MODULE_7__.open)();\n\n event.preventDefault();\n });\n}\n\n/* */\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9CYXNlVmlld2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1rQjs7QUFPRDs7QUFJQzs7QUFFZTtBQUNJOztBQUVHOztBQUliOztBQUUzQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlFQUFpRTtBQUM5RTs7QUFFQTtBQUNBLGFBQWEsa0NBQWtDO0FBQy9DO0FBQ0EsYUFBYSxnQ0FBZ0M7QUFDN0MsYUFBYSx1Q0FBdUM7QUFDcEQsYUFBYSx5Q0FBeUM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssd0JBQXdCO0FBQzdCO0FBQ0EsYUFBYSwrQkFBK0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQSxhQUFhLGdCQUFnQjtBQUM3QjtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxhQUFhLGVBQWU7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGFBQWEsR0FBRyx1QkFBdUIsSUFBSSxlQUFlO0FBQzdFO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QjtBQUNlOztBQUVmO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWSxnREFBTSxHQUFHOztBQUVyQjtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSw0REFBUSxhQUFhLGtEQUFPOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsc0JBQXNCO0FBQ2pDO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsNkNBQTZDLFVBQVU7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsZ0NBQWdDLDJDQUEyQzs7QUFFM0UsYUFBYTtBQUNiLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZ0NBQWdDLGlDQUFpQzs7QUFFakU7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLHNCQUFzQjtBQUNqQztBQUNBLFlBQVksa0NBQWtDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0EsV0FBVyxzQkFBc0I7QUFDakM7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLFdBQVcsUUFBUSxtRUFBaUI7O0FBRTlDLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsMkJBQTJCLFFBQVEsSUFBSTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsOENBQVE7O0FBRTdCLHFCQUFxQixrREFBUTtBQUM3Qix1Q0FBdUMsa0RBQVE7O0FBRS9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUUsa0RBQU87QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxrREFBTzs7QUFFVDtBQUNBLEVBQUUsK0NBQVM7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMscUJBQXFCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsUUFBUTtBQUNuQixXQUFXLDBCQUEwQjtBQUNyQyxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsOENBQVE7QUFDekI7O0FBRUE7O0FBRUEseUJBQXlCOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZUFBZTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx5QkFBeUIsZ0RBQU0sQ0FBQyw4Q0FBSTtBQUNwQyxZQUFZLGdEQUFNLEdBQUcsb0JBQW9CLHNCQUFzQjtBQUMvRDtBQUNBLEdBQUc7O0FBRUg7QUFDQSxFQUFFLGtEQUFPOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLFlBQVksUUFBUTtBQUNwQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUEsb0JBQW9CLCtDQUFNOztBQUUxQixFQUFFLG9EQUFXO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLHdCQUF3QixnREFBTSxHQUFHOztBQUVqQyxhQUFhLG1EQUFVO0FBQ3ZCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrREFBUTtBQUN4Qjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0QkFBNEI7QUFDdkMsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyw4Q0FBSTtBQUNiO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFPOEI7O0FBSWI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0EsY0FBYywyREFBVTs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsK0NBQU07O0FBRTVCLEVBQUUsb0RBQVcsQ0FBQyw4Q0FBUSxzQkFBc0IsNERBQVc7QUFDdkQsRUFBRSxvREFBVyxjQUFjLDREQUFXO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQSxFQUFFLDBDQUFRO0FBQ1YsSUFBSSx5REFBYTs7QUFFakI7QUFDQSxHQUFHO0FBQ0g7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9CYXNlVmlld2VyLmpzPzlmN2IiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgY29kZSBpbiB0aGUgPHByb2plY3QtbG9nbz48L3Byb2plY3QtbG9nbz4gYXJlYVxuICogbXVzdCBub3QgYmUgY2hhbmdlZC5cbiAqXG4gKiBAc2VlIGh0dHA6Ly9icG1uLmlvL2xpY2Vuc2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZmluZCxcbiAgaXNOdW1iZXIsXG4gIG9taXRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBkb21pZnksXG4gIGFzc2lnblN0eWxlLFxuICBxdWVyeSBhcyBkb21RdWVyeSxcbiAgcmVtb3ZlIGFzIGRvbVJlbW92ZVxufSBmcm9tICdtaW4tZG9tJztcblxuaW1wb3J0IHtcbiAgaW5uZXJTVkdcbn0gZnJvbSAndGlueS1zdmcnO1xuXG5pbXBvcnQgRGlhZ3JhbSBmcm9tICdkaWFncmFtLWpzJztcbmltcG9ydCBCcG1uTW9kZGxlIGZyb20gJ2JwbW4tbW9kZGxlJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQge1xuICBpbXBvcnRCcG1uRGlhZ3JhbVxufSBmcm9tICcuL2ltcG9ydC9JbXBvcnRlcic7XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuRXZlbnRCdXNFdmVudENhbGxiYWNrPFQ+fSBFdmVudEJ1c0V2ZW50Q2FsbGJhY2tcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpZGknKS5Nb2R1bGVEZWNsYXJhdGlvbn0gTW9kdWxlRGVjbGFyYXRpb25cbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL21vZGVsL1R5cGVzJykuTW9kZGxlfSBNb2RkbGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fSBNb2RkbGVFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL21vZGVsL1R5cGVzJykuTW9kZGxlRXh0ZW5zaW9ufSBNb2RkbGVFeHRlbnNpb25cbiAqXG4gKiBAdHlwZWRlZiB7IHtcbiAqICAgd2lkdGg/OiBudW1iZXJ8c3RyaW5nO1xuICogICBoZWlnaHQ/OiBudW1iZXJ8c3RyaW5nO1xuICogICBwb3NpdGlvbj86IHN0cmluZztcbiAqICAgY29udGFpbmVyPzogc3RyaW5nfEhUTUxFbGVtZW50O1xuICogICBtb2RkbGVFeHRlbnNpb25zPzogTW9kZGxlRXh0ZW5zaW9ucztcbiAqICAgYWRkaXRpb25hbE1vZHVsZXM/OiBNb2R1bGVEZWNsYXJhdGlvbltdO1xuICogfSAmIFJlY29yZDxzdHJpbmcsIGFueT4gfSBCYXNlVmlld2VyT3B0aW9uc1xuICpcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBNb2RkbGVFbGVtZW50Pn0gTW9kZGxlRWxlbWVudHNCeUlkXG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIFtrZXk6IHN0cmluZ106IE1vZGRsZUV4dGVuc2lvbjtcbiAqIH0gfSBNb2RkbGVFeHRlbnNpb25zXG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIHdhcm5pbmdzOiBzdHJpbmdbXTtcbiAqIH0gfSBJbXBvcnRYTUxSZXN1bHRcbiAqXG4gKiBAdHlwZWRlZiB7SW1wb3J0WE1MUmVzdWx0ICYgRXJyb3J9IEltcG9ydFhNTEVycm9yXG4gKlxuICogQHR5cGVkZWYge0ltcG9ydFhNTFJlc3VsdH0gSW1wb3J0RGVmaW5pdGlvbnNSZXN1bHRcbiAqXG4gKiBAdHlwZWRlZiB7SW1wb3J0WE1MRXJyb3J9IEltcG9ydERlZmluaXRpb25zRXJyb3JcbiAqXG4gKiBAdHlwZWRlZiB7SW1wb3J0WE1MUmVzdWx0fSBPcGVuUmVzdWx0XG4gKlxuICogQHR5cGVkZWYge0ltcG9ydFhNTEVycm9yfSBPcGVuRXJyb3JcbiAqXG4gKiBAdHlwZWRlZiB7IHtcbiAqICAgZm9ybWF0PzogYm9vbGVhbjtcbiAqICAgcHJlYW1ibGU/OiBib29sZWFuO1xuICogfSB9IFNhdmVYTUxPcHRpb25zXG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIHhtbD86IHN0cmluZztcbiAqICAgZXJyb3I/OiBFcnJvcjtcbiAqIH0gfSBTYXZlWE1MUmVzdWx0XG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIHN2Zzogc3RyaW5nO1xuICogfSB9IFNhdmVTVkdSZXN1bHRcbiAqXG4gKiBAdHlwZWRlZiB7IHtcbiAqICAgeG1sOiBzdHJpbmc7XG4gKiB9IH0gSW1wb3J0UGFyc2VTdGFydEV2ZW50XG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIGVycm9yPzogSW1wb3J0WE1MRXJyb3I7XG4gKiAgIGRlZmluaXRpb25zPzogTW9kZGxlRWxlbWVudDtcbiAqICAgZWxlbWVudHNCeUlkPzogTW9kZGxlRWxlbWVudHNCeUlkO1xuICogICByZWZlcmVuY2VzPzogTW9kZGxlRWxlbWVudFtdO1xuICogICB3YXJuaW5nczogc3RyaW5nW107XG4gKiB9IH0gSW1wb3J0UGFyc2VDb21wbGV0ZUV2ZW50XG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIGVycm9yPzogSW1wb3J0WE1MRXJyb3I7XG4gKiAgIHdhcm5pbmdzOiBzdHJpbmdbXTtcbiAqIH0gfSBJbXBvcnREb25lRXZlbnRcbiAqXG4gKiBAdHlwZWRlZiB7IHtcbiAqICAgZGVmaW5pdGlvbnM6IE1vZGRsZUVsZW1lbnQ7XG4gKiB9IH0gU2F2ZVhNTFN0YXJ0RXZlbnRcbiAqXG4gKiBAdHlwZWRlZiB7U2F2ZVhNTFJlc3VsdH0gU2F2ZVhNTERvbmVFdmVudFxuICpcbiAqIEB0eXBlZGVmIHsge1xuICogICBlcnJvcj86IEVycm9yO1xuICogICBzdmc6IHN0cmluZztcbiAqIH0gfSBTYXZlU1ZHRG9uZUV2ZW50XG4gKi9cblxuLyoqXG4gKiBBIGJhc2Ugdmlld2VyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKiBIYXZlIGEgbG9vayBhdCB7QGxpbmsgVmlld2VyfSwge0BsaW5rIE5hdmlnYXRlZFZpZXdlcn0gb3Ige0BsaW5rIE1vZGVsZXJ9IGZvclxuICogYnVuZGxlcyB0aGF0IGluY2x1ZGUgYWN0dWFsIGZlYXR1cmVzLlxuICpcbiAqIEBwYXJhbSB7QmFzZVZpZXdlck9wdGlvbnN9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHZpZXdlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzZVZpZXdlcihvcHRpb25zKSB7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtCYXNlVmlld2VyT3B0aW9uc31cbiAgICovXG4gIG9wdGlvbnMgPSBhc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtNb2RkbGV9XG4gICAqL1xuICB0aGlzLl9tb2RkbGUgPSB0aGlzLl9jcmVhdGVNb2RkbGUob3B0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIHRoaXMuX2NvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUNvbnRhaW5lcihvcHRpb25zKTtcblxuICAvKiA8cHJvamVjdC1sb2dvPiAqL1xuXG4gIGFkZFByb2plY3RMb2dvKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgLyogPC9wcm9qZWN0LWxvZ28+ICovXG5cbiAgdGhpcy5faW5pdCh0aGlzLl9jb250YWluZXIsIHRoaXMuX21vZGRsZSwgb3B0aW9ucyk7XG59XG5cbmluaGVyaXRzKEJhc2VWaWV3ZXIsIERpYWdyYW0pO1xuXG4vKipcbiAqIFBhcnNlIGFuZCByZW5kZXIgYSBCUE1OIDIuMCBkaWFncmFtLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIGltcG9ydCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnBhcnNlLnN0YXJ0IChhYm91dCB0byByZWFkIG1vZGVsIGZyb20gWE1MKVxuICogICAqIGltcG9ydC5wYXJzZS5jb21wbGV0ZSAobW9kZWwgcmVhZDsgbWF5IGhhdmUgd29ya2VkIG9yIG5vdClcbiAqICAgKiBpbXBvcnQucmVuZGVyLnN0YXJ0IChncmFwaGljYWwgaW1wb3J0IHN0YXJ0KVxuICogICAqIGltcG9ydC5yZW5kZXIuY29tcGxldGUgKGdyYXBoaWNhbCBpbXBvcnQgZmluaXNoZWQpXG4gKiAgICogaW1wb3J0LmRvbmUgKGV2ZXJ5dGhpbmcgZG9uZSlcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEB0aHJvd3Mge0ltcG9ydFhNTEVycm9yfSBBbiBlcnJvciB0aHJvd24gZHVyaW5nIHRoZSBpbXBvcnQgb2YgdGhlIFhNTC5cbiAqXG4gKiBAZmlyZXMgQmFzZVZpZXdlciNJbXBvcnRQYXJzZVN0YXJ0RXZlbnRcbiAqIEBmaXJlcyBCYXNlVmlld2VyI0ltcG9ydFBhcnNlQ29tcGxldGVFdmVudFxuICogQGZpcmVzIEltcG9ydGVyI0ltcG9ydFJlbmRlclN0YXJ0RXZlbnRcbiAqIEBmaXJlcyBJbXBvcnRlciNJbXBvcnRSZW5kZXJDb21wbGV0ZUV2ZW50XG4gKiBAZmlyZXMgQmFzZVZpZXdlciNJbXBvcnREb25lRXZlbnRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30geG1sIFRoZSBCUE1OIDIuMCBYTUwgdG8gYmUgaW1wb3J0ZWQuXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR8c3RyaW5nfSBbYnBtbkRpYWdyYW1dIFRoZSBvcHRpb25hbCBkaWFncmFtIG9yIElkIG9mIHRoZSBCUE1OIGRpYWdyYW0gdG8gb3Blbi5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPEltcG9ydFhNTFJlc3VsdD59IEEgcHJvbWlzZSByZXNvbHZpbmcgd2l0aCB3YXJuaW5ncyB0aGF0IHdlcmUgcHJvZHVjZWQgZHVyaW5nIHRoZSBpbXBvcnQuXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmltcG9ydFhNTCA9IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFhNTCh4bWwsIGJwbW5EaWFncmFtKSB7XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gUGFyc2VDb21wbGV0ZUV2ZW50KGRhdGEpIHtcbiAgICByZXR1cm4gc2VsZi5nZXQoJ2V2ZW50QnVzJykuY3JlYXRlRXZlbnQoZGF0YSk7XG4gIH1cblxuICBsZXQgYWdncmVnYXRlZFdhcm5pbmdzID0gW107XG4gIHRyeSB7XG5cbiAgICAvLyBob29rIGluIHByZS1wYXJzZSBsaXN0ZW5lcnMgK1xuICAgIC8vIGFsbG93IHhtbCBtYW5pcHVsYXRpb25cblxuICAgIC8qKlxuICAgICAqIEEgYGltcG9ydC5wYXJzZS5zdGFydGAgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgQmFzZVZpZXdlciNJbXBvcnRQYXJzZVN0YXJ0RXZlbnRcbiAgICAgKiBAdHlwZSB7SW1wb3J0UGFyc2VTdGFydEV2ZW50fVxuICAgICAqL1xuICAgIHhtbCA9IHRoaXMuX2VtaXQoJ2ltcG9ydC5wYXJzZS5zdGFydCcsIHsgeG1sOiB4bWwgfSkgfHwgeG1sO1xuXG4gICAgbGV0IHBhcnNlUmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICBwYXJzZVJlc3VsdCA9IGF3YWl0IHRoaXMuX21vZGRsZS5mcm9tWE1MKHhtbCwgJ2JwbW46RGVmaW5pdGlvbnMnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5fZW1pdCgnaW1wb3J0LnBhcnNlLmNvbXBsZXRlJywge1xuICAgICAgICBlcnJvclxuICAgICAgfSk7XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIGxldCBkZWZpbml0aW9ucyA9IHBhcnNlUmVzdWx0LnJvb3RFbGVtZW50O1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBwYXJzZVJlc3VsdC5yZWZlcmVuY2VzO1xuICAgIGNvbnN0IHBhcnNlV2FybmluZ3MgPSBwYXJzZVJlc3VsdC53YXJuaW5ncztcbiAgICBjb25zdCBlbGVtZW50c0J5SWQgPSBwYXJzZVJlc3VsdC5lbGVtZW50c0J5SWQ7XG5cbiAgICBhZ2dyZWdhdGVkV2FybmluZ3MgPSBhZ2dyZWdhdGVkV2FybmluZ3MuY29uY2F0KHBhcnNlV2FybmluZ3MpO1xuXG4gICAgLy8gaG9vayBpbiBwb3N0IHBhcnNlIGxpc3RlbmVycyArXG4gICAgLy8gYWxsb3cgZGVmaW5pdGlvbnMgbWFuaXB1bGF0aW9uXG5cbiAgICAvKipcbiAgICAgKiBBIGBpbXBvcnQucGFyc2UuY29tcGxldGVgIGV2ZW50LlxuICAgICAqXG4gICAgICogQGV2ZW50IEJhc2VWaWV3ZXIjSW1wb3J0UGFyc2VDb21wbGV0ZUV2ZW50XG4gICAgICogQHR5cGUge0ltcG9ydFBhcnNlQ29tcGxldGVFdmVudH1cbiAgICAgKi9cbiAgICBkZWZpbml0aW9ucyA9IHRoaXMuX2VtaXQoJ2ltcG9ydC5wYXJzZS5jb21wbGV0ZScsIFBhcnNlQ29tcGxldGVFdmVudCh7XG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGRlZmluaXRpb25zOiBkZWZpbml0aW9ucyxcbiAgICAgIGVsZW1lbnRzQnlJZDogZWxlbWVudHNCeUlkLFxuICAgICAgcmVmZXJlbmNlczogcmVmZXJlbmNlcyxcbiAgICAgIHdhcm5pbmdzOiBhZ2dyZWdhdGVkV2FybmluZ3NcbiAgICB9KSkgfHwgZGVmaW5pdGlvbnM7XG5cbiAgICBjb25zdCBpbXBvcnRSZXN1bHQgPSBhd2FpdCB0aGlzLmltcG9ydERlZmluaXRpb25zKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSk7XG5cbiAgICBhZ2dyZWdhdGVkV2FybmluZ3MgPSBhZ2dyZWdhdGVkV2FybmluZ3MuY29uY2F0KGltcG9ydFJlc3VsdC53YXJuaW5ncyk7XG5cbiAgICAvKipcbiAgICAgKiBBIGBpbXBvcnQucGFyc2UuY29tcGxldGVgIGV2ZW50LlxuICAgICAqXG4gICAgICogQGV2ZW50IEJhc2VWaWV3ZXIjSW1wb3J0RG9uZUV2ZW50XG4gICAgICogQHR5cGUge0ltcG9ydERvbmVFdmVudH1cbiAgICAgKi9cbiAgICB0aGlzLl9lbWl0KCdpbXBvcnQuZG9uZScsIHsgZXJyb3I6IG51bGwsIHdhcm5pbmdzOiBhZ2dyZWdhdGVkV2FybmluZ3MgfSk7XG5cbiAgICByZXR1cm4geyB3YXJuaW5nczogYWdncmVnYXRlZFdhcm5pbmdzIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxldCBlcnJvciA9IGVycjtcbiAgICBhZ2dyZWdhdGVkV2FybmluZ3MgPSBhZ2dyZWdhdGVkV2FybmluZ3MuY29uY2F0KGVycm9yLndhcm5pbmdzIHx8IFtdKTtcbiAgICBhZGRXYXJuaW5nc1RvRXJyb3IoZXJyb3IsIGFnZ3JlZ2F0ZWRXYXJuaW5ncyk7XG5cbiAgICBlcnJvciA9IGNoZWNrVmFsaWRhdGlvbkVycm9yKGVycm9yKTtcblxuICAgIHRoaXMuX2VtaXQoJ2ltcG9ydC5kb25lJywgeyBlcnJvciwgd2FybmluZ3M6IGVycm9yLndhcm5pbmdzIH0pO1xuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBJbXBvcnQgcGFyc2VkIGRlZmluaXRpb25zIGFuZCByZW5kZXIgYSBCUE1OIDIuMCBkaWFncmFtLlxuICpcbiAqIE9uY2UgZmluaXNoZWQgdGhlIHZpZXdlciByZXBvcnRzIGJhY2sgdGhlIHJlc3VsdCB0byB0aGVcbiAqIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggKGVyciwgd2FybmluZ3MpLlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIGltcG9ydCB0aGUgdmlld2VyIHdpbGwgZmlyZSBsaWZlLWN5Y2xlIGV2ZW50czpcbiAqXG4gKiAgICogaW1wb3J0LnJlbmRlci5zdGFydCAoZ3JhcGhpY2FsIGltcG9ydCBzdGFydClcbiAqICAgKiBpbXBvcnQucmVuZGVyLmNvbXBsZXRlIChncmFwaGljYWwgaW1wb3J0IGZpbmlzaGVkKVxuICpcbiAqIFlvdSBjYW4gdXNlIHRoZXNlIGV2ZW50cyB0byBob29rIGludG8gdGhlIGxpZmUtY3ljbGUuXG4gKlxuICogQHRocm93cyB7SW1wb3J0RGVmaW5pdGlvbnNFcnJvcn0gQW4gZXJyb3IgdGhyb3duIGR1cmluZyB0aGUgaW1wb3J0IG9mIHRoZSBkZWZpbml0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmluaXRpb25zIFRoZSBkZWZpbml0aW9ucy5cbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxzdHJpbmd9IFticG1uRGlhZ3JhbV0gVGhlIG9wdGlvbmFsIGRpYWdyYW0gb3IgSUQgb2YgdGhlIEJQTU4gZGlhZ3JhbSB0byBvcGVuLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8SW1wb3J0RGVmaW5pdGlvbnNSZXN1bHQ+fSBBIHByb21pc2UgcmVzb2x2aW5nIHdpdGggd2FybmluZ3MgdGhhdCB3ZXJlIHByb2R1Y2VkIGR1cmluZyB0aGUgaW1wb3J0LlxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5pbXBvcnREZWZpbml0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGltcG9ydERlZmluaXRpb25zKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSkge1xuICB0aGlzLl9zZXREZWZpbml0aW9ucyhkZWZpbml0aW9ucyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMub3BlbihicG1uRGlhZ3JhbSk7XG5cbiAgcmV0dXJuIHsgd2FybmluZ3M6IHJlc3VsdC53YXJuaW5ncyB9O1xufTtcblxuXG4vKipcbiAqIE9wZW4gZGlhZ3JhbSBvZiBwcmV2aW91c2x5IGltcG9ydGVkIFhNTC5cbiAqXG4gKiBPbmNlIGZpbmlzaGVkIHRoZSB2aWV3ZXIgcmVwb3J0cyBiYWNrIHRoZSByZXN1bHQgdG8gdGhlXG4gKiBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIChlcnIsIHdhcm5pbmdzKS5cbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIEV2ZW50c1xuICpcbiAqIER1cmluZyBzd2l0Y2ggdGhlIHZpZXdlciB3aWxsIGZpcmUgbGlmZS1jeWNsZSBldmVudHM6XG4gKlxuICogICAqIGltcG9ydC5yZW5kZXIuc3RhcnQgKGdyYXBoaWNhbCBpbXBvcnQgc3RhcnQpXG4gKiAgICogaW1wb3J0LnJlbmRlci5jb21wbGV0ZSAoZ3JhcGhpY2FsIGltcG9ydCBmaW5pc2hlZClcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEB0aHJvd3Mge09wZW5FcnJvcn0gQW4gZXJyb3IgdGhyb3duIGR1cmluZyBvcGVuaW5nLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxzdHJpbmd9IGJwbW5EaWFncmFtT3JJZCBUaGUgZGlhZ3JhbSBvciBJZCBvZiB0aGUgQlBNTiBkaWFncmFtIHRvIG9wZW4uXG4gKlxuICogQHJldHVybiB7UHJvbWlzZTxPcGVuUmVzdWx0Pn0gQSBwcm9taXNlIHJlc29sdmluZyB3aXRoIHdhcm5pbmdzIHRoYXQgd2VyZSBwcm9kdWNlZCBkdXJpbmcgb3BlbmluZy5cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUub3BlbiA9IGFzeW5jIGZ1bmN0aW9uIG9wZW4oYnBtbkRpYWdyYW1PcklkKSB7XG5cbiAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLl9kZWZpbml0aW9ucztcbiAgbGV0IGJwbW5EaWFncmFtID0gYnBtbkRpYWdyYW1PcklkO1xuXG4gIGlmICghZGVmaW5pdGlvbnMpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignbm8gWE1MIGltcG9ydGVkJyk7XG4gICAgYWRkV2FybmluZ3NUb0Vycm9yKGVycm9yLCBbXSk7XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnBtbkRpYWdyYW1PcklkID09PSAnc3RyaW5nJykge1xuICAgIGJwbW5EaWFncmFtID0gZmluZEJQTU5EaWFncmFtKGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbU9ySWQpO1xuXG4gICAgaWYgKCFicG1uRGlhZ3JhbSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0JQTU5EaWFncmFtIDwnICsgYnBtbkRpYWdyYW1PcklkICsgJz4gbm90IGZvdW5kJyk7XG4gICAgICBhZGRXYXJuaW5nc1RvRXJyb3IoZXJyb3IsIFtdKTtcblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLy8gY2xlYXIgZXhpc3RpbmcgcmVuZGVyZWQgZGlhZ3JhbVxuICAvLyBjYXRjaCBzeW5jaHJvbm91cyBleGNlcHRpb25zIGR1cmluZyAjY2xlYXIoKVxuICB0cnkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhZGRXYXJuaW5nc1RvRXJyb3IoZXJyb3IsIFtdKTtcblxuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgLy8gcGVyZm9ybSBncmFwaGljYWwgaW1wb3J0XG4gIGNvbnN0IHsgd2FybmluZ3MgfSA9IGF3YWl0IGltcG9ydEJwbW5EaWFncmFtKHRoaXMsIGRlZmluaXRpb25zLCBicG1uRGlhZ3JhbSk7XG5cbiAgcmV0dXJuIHsgd2FybmluZ3MgfTtcbn07XG5cbi8qKlxuICogRXhwb3J0IHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIEJQTU4gMi4wIGRpYWdyYW0gYXNcbiAqIGEgQlBNTiAyLjAgWE1MIGRvY3VtZW50LlxuICpcbiAqICMjIExpZmUtQ3ljbGUgRXZlbnRzXG4gKlxuICogRHVyaW5nIFhNTCBzYXZpbmcgdGhlIHZpZXdlciB3aWxsIGZpcmUgbGlmZS1jeWNsZSBldmVudHM6XG4gKlxuICogICAqIHNhdmVYTUwuc3RhcnQgKGJlZm9yZSBzZXJpYWxpemF0aW9uKVxuICogICAqIHNhdmVYTUwuc2VyaWFsaXplZCAoYWZ0ZXIgeG1sIGdlbmVyYXRpb24pXG4gKiAgICogc2F2ZVhNTC5kb25lIChldmVyeXRoaW5nIGRvbmUpXG4gKlxuICogWW91IGNhbiB1c2UgdGhlc2UgZXZlbnRzIHRvIGhvb2sgaW50byB0aGUgbGlmZS1jeWNsZS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gQW4gZXJyb3IgdGhyb3duIGR1cmluZyBleHBvcnQuXG4gKlxuICogQGZpcmVzIEJhc2VWaWV3ZXIjU2F2ZVhNTFN0YXJ0XG4gKiBAZmlyZXMgQmFzZVZpZXdlciNTYXZlWE1MRG9uZVxuICpcbiAqIEBwYXJhbSB7U2F2ZVhNTE9wdGlvbnN9IFtvcHRpb25zXSBUaGUgb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPFNhdmVYTUxSZXN1bHQ+fSBBIHByb21pc2UgcmVzb2x2aW5nIHdpdGggdGhlIFhNTC5cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuc2F2ZVhNTCA9IGFzeW5jIGZ1bmN0aW9uIHNhdmVYTUwob3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBkZWZpbml0aW9ucyA9IHRoaXMuX2RlZmluaXRpb25zLFxuICAgICAgZXJyb3IsIHhtbDtcblxuICB0cnkge1xuICAgIGlmICghZGVmaW5pdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZGVmaW5pdGlvbnMgbG9hZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgdG8gZmlkZGxlIGFyb3VuZCB3aXRoIGRlZmluaXRpb25zXG5cbiAgICAvKipcbiAgICAgKiBBIGBzYXZlWE1MLnN0YXJ0YCBldmVudC5cbiAgICAgKlxuICAgICAqIEBldmVudCBCYXNlVmlld2VyI1NhdmVYTUxTdGFydEV2ZW50XG4gICAgICogQHR5cGUge1NhdmVYTUxTdGFydEV2ZW50fVxuICAgICAqL1xuICAgIGRlZmluaXRpb25zID0gdGhpcy5fZW1pdCgnc2F2ZVhNTC5zdGFydCcsIHtcbiAgICAgIGRlZmluaXRpb25zXG4gICAgfSkgfHwgZGVmaW5pdGlvbnM7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9tb2RkbGUudG9YTUwoZGVmaW5pdGlvbnMsIG9wdGlvbnMpO1xuICAgIHhtbCA9IHJlc3VsdC54bWw7XG5cbiAgICB4bWwgPSB0aGlzLl9lbWl0KCdzYXZlWE1MLnNlcmlhbGl6ZWQnLCB7XG4gICAgICB4bWxcbiAgICB9KSB8fCB4bWw7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yID0gZXJyO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gZXJyb3IgPyB7IGVycm9yIH0gOiB7IHhtbCB9O1xuXG4gIC8qKlxuICAgKiBBIGBzYXZlWE1MLmRvbmVgIGV2ZW50LlxuICAgKlxuICAgKiBAZXZlbnQgQmFzZVZpZXdlciNTYXZlWE1MRG9uZUV2ZW50XG4gICAqIEB0eXBlIHtTYXZlWE1MRG9uZUV2ZW50fVxuICAgKi9cbiAgdGhpcy5fZW1pdCgnc2F2ZVhNTC5kb25lJywgcmVzdWx0KTtcblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKlxuICogRXhwb3J0IHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIEJQTU4gMi4wIGRpYWdyYW0gYXNcbiAqIGFuIFNWRyBpbWFnZS5cbiAqXG4gKiAjIyBMaWZlLUN5Y2xlIEV2ZW50c1xuICpcbiAqIER1cmluZyBTVkcgc2F2aW5nIHRoZSB2aWV3ZXIgd2lsbCBmaXJlIGxpZmUtY3ljbGUgZXZlbnRzOlxuICpcbiAqICAgKiBzYXZlU1ZHLnN0YXJ0IChiZWZvcmUgc2VyaWFsaXphdGlvbilcbiAqICAgKiBzYXZlU1ZHLmRvbmUgKGV2ZXJ5dGhpbmcgZG9uZSlcbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGVzZSBldmVudHMgdG8gaG9vayBpbnRvIHRoZSBsaWZlLWN5Y2xlLlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBBbiBlcnJvciB0aHJvd24gZHVyaW5nIGV4cG9ydC5cbiAqXG4gKiBAZmlyZXMgQmFzZVZpZXdlciNTYXZlU1ZHRG9uZVxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8U2F2ZVNWR1Jlc3VsdD59IEEgcHJvbWlzZSByZXNvbHZpbmcgd2l0aCB0aGUgU1ZHLlxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5zYXZlU1ZHID0gYXN5bmMgZnVuY3Rpb24gc2F2ZVNWRygpIHtcbiAgdGhpcy5fZW1pdCgnc2F2ZVNWRy5zdGFydCcpO1xuXG4gIGxldCBzdmcsIGVycjtcblxuICB0cnkge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuZ2V0KCdjYW52YXMnKTtcblxuICAgIGNvbnN0IGNvbnRlbnROb2RlID0gY2FudmFzLmdldEFjdGl2ZUxheWVyKCksXG4gICAgICAgICAgZGVmc05vZGUgPSBkb21RdWVyeSgnZGVmcycsIGNhbnZhcy5fc3ZnKTtcblxuICAgIGNvbnN0IGNvbnRlbnRzID0gaW5uZXJTVkcoY29udGVudE5vZGUpLFxuICAgICAgICAgIGRlZnMgPSBkZWZzTm9kZSA/ICc8ZGVmcz4nICsgaW5uZXJTVkcoZGVmc05vZGUpICsgJzwvZGVmcz4nIDogJyc7XG5cbiAgICBjb25zdCBiYm94ID0gY29udGVudE5vZGUuZ2V0QkJveCgpO1xuXG4gICAgc3ZnID1cbiAgICAgICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiPz5cXG4nICtcbiAgICAgICc8IS0tIGNyZWF0ZWQgd2l0aCBicG1uLWpzIC8gaHR0cDovL2JwbW4uaW8gLS0+XFxuJyArXG4gICAgICAnPCFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCI+XFxuJyArXG4gICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgJyArXG4gICAgICAnd2lkdGg9XCInICsgYmJveC53aWR0aCArICdcIiBoZWlnaHQ9XCInICsgYmJveC5oZWlnaHQgKyAnXCIgJyArXG4gICAgICAndmlld0JveD1cIicgKyBiYm94LnggKyAnICcgKyBiYm94LnkgKyAnICcgKyBiYm94LndpZHRoICsgJyAnICsgYmJveC5oZWlnaHQgKyAnXCIgdmVyc2lvbj1cIjEuMVwiPicgK1xuICAgICAgZGVmcyArIGNvbnRlbnRzICtcbiAgICAgICc8L3N2Zz4nO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyID0gZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGBzYXZlU1ZHLmRvbmVgIGV2ZW50LlxuICAgKlxuICAgKiBAZXZlbnQgQmFzZVZpZXdlciNTYXZlU1ZHRG9uZUV2ZW50XG4gICAqIEB0eXBlIHtTYXZlU1ZHRG9uZUV2ZW50fVxuICAgKi9cbiAgdGhpcy5fZW1pdCgnc2F2ZVNWRy5kb25lJywge1xuICAgIGVycm9yOiBlcnIsXG4gICAgc3ZnOiBzdmdcbiAgfSk7XG5cbiAgaWYgKGVycikge1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIHJldHVybiB7IHN2ZyB9O1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX3NldERlZmluaXRpb25zID0gZnVuY3Rpb24oZGVmaW5pdGlvbnMpIHtcbiAgdGhpcy5fZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbn07XG5cbi8qKlxuICogUmV0dXJuIG1vZHVsZXMgdG8gaW5zdGFudGlhdGUgd2l0aC5cbiAqXG4gKiBAcmV0dXJuIHtNb2R1bGVEZWNsYXJhdGlvbltdfSBUaGUgbW9kdWxlcy5cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuZ2V0TW9kdWxlcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fbW9kdWxlcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBkcmF3biBlbGVtZW50cyBmcm9tIHRoZSB2aWV3ZXIuXG4gKlxuICogQWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCB0aGUgdmlld2VyIGNhbiBzdGlsbCBiZSByZXVzZWQgZm9yIG9wZW5pbmcgYW5vdGhlclxuICogZGlhZ3JhbS5cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmdldERlZmluaXRpb25zKCkpIHtcblxuICAgIC8vIG5vIGRpYWdyYW0gdG8gY2xlYXJcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyByZW1vdmUgZHJhd24gZWxlbWVudHNcbiAgRGlhZ3JhbS5wcm90b3R5cGUuY2xlYXIuY2FsbCh0aGlzKTtcbn07XG5cbi8qKlxuICogRGVzdHJveSB0aGUgdmlld2VyIGluc3RhbmNlIGFuZCByZW1vdmUgYWxsIGl0cyByZW1haW5kZXJzIGZyb20gdGhlIGRvY3VtZW50XG4gKiB0cmVlLlxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG5cbiAgLy8gZGlhZ3JhbSBkZXN0cm95XG4gIERpYWdyYW0ucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtcblxuICAvLyBkb20gZGV0YWNoXG4gIGRvbVJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlciBhbiBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIgdmlhIHtAbGluayBCYXNlVmlld2VyI29mZn0uXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gZXZlbnRzIFRoZSBldmVudChzKSB0byBsaXN0ZW4gdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XSBUaGUgcHJpb3JpdHkgd2l0aCB3aGljaCB0byBsaXN0ZW4uXG4gKiBAcGFyYW0ge0V2ZW50QnVzRXZlbnRDYWxsYmFjazxUPn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrLlxuICogQHBhcmFtIHthbnl9IFt0aGF0XSBWYWx1ZSBvZiBgdGhpc2AgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdpdGguXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oZXZlbnRzLCBwcmlvcml0eSwgY2FsbGJhY2ssIHRoYXQpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0KCdldmVudEJ1cycpLm9uKGV2ZW50cywgcHJpb3JpdHksIGNhbGxiYWNrLCB0aGF0KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBldmVudHMgVGhlIGV2ZW50KHMpLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2suXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKGV2ZW50cywgY2FsbGJhY2spIHtcbiAgdGhpcy5nZXQoJ2V2ZW50QnVzJykub2ZmKGV2ZW50cywgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBBdHRhY2ggdGhlIHZpZXdlciB0byBhbiBIVE1MIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50Tm9kZSBUaGUgcGFyZW50IG5vZGUgdG8gYXR0YWNoIHRvLlxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKHBhcmVudE5vZGUpIHtcblxuICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudE5vZGUgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB3ZSBkZXRhY2ggZnJvbSB0aGVcbiAgLy8gcHJldmlvdXMsIG9sZCBwYXJlbnRcbiAgdGhpcy5kZXRhY2goKTtcblxuICAvLyB1bndyYXAgalF1ZXJ5IGlmIHByb3ZpZGVkXG4gIGlmIChwYXJlbnROb2RlLmdldCAmJiBwYXJlbnROb2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5qcXVlcnkpIHtcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXQoMCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmVudE5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyZW50Tm9kZSA9IGRvbVF1ZXJ5KHBhcmVudE5vZGUpO1xuICB9XG5cbiAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuXG4gIHRoaXMuX2VtaXQoJ2F0dGFjaCcsIHt9KTtcblxuICB0aGlzLmdldCgnY2FudmFzJykucmVzaXplZCgpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmluaXRpb25zIG1vZGVsIGVsZW1lbnQuXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gVGhlIGRlZmluaXRpb25zIG1vZGVsIGVsZW1lbnQuXG4gKi9cbkJhc2VWaWV3ZXIucHJvdG90eXBlLmdldERlZmluaXRpb25zID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9kZWZpbml0aW9ucztcbn07XG5cbi8qKlxuICogRGV0YWNoIHRoZSB2aWV3ZXIuXG4gKlxuICogQGZpcmVzIEJhc2VWaWV3ZXIjRGV0YWNoRXZlbnRcbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24oKSB7XG5cbiAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLFxuICAgICAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgYGRldGFjaGAgZXZlbnQuXG4gICAqXG4gICAqIEBldmVudCBCYXNlVmlld2VyI0RldGFjaEV2ZW50XG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9lbWl0KCdkZXRhY2gnLCB7fSk7XG5cbiAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xufTtcblxuQmFzZVZpZXdlci5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbihjb250YWluZXIsIG1vZGRsZSwgb3B0aW9ucykge1xuXG4gIGNvbnN0IGJhc2VNb2R1bGVzID0gb3B0aW9ucy5tb2R1bGVzIHx8IHRoaXMuZ2V0TW9kdWxlcyhvcHRpb25zKSxcbiAgICAgICAgYWRkaXRpb25hbE1vZHVsZXMgPSBvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzIHx8IFtdLFxuICAgICAgICBzdGF0aWNNb2R1bGVzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJwbW5qczogWyAndmFsdWUnLCB0aGlzIF0sXG4gICAgICAgICAgICBtb2RkbGU6IFsgJ3ZhbHVlJywgbW9kZGxlIF1cbiAgICAgICAgICB9XG4gICAgICAgIF07XG5cbiAgY29uc3QgZGlhZ3JhbU1vZHVsZXMgPSBbXS5jb25jYXQoc3RhdGljTW9kdWxlcywgYmFzZU1vZHVsZXMsIGFkZGl0aW9uYWxNb2R1bGVzKTtcblxuICBjb25zdCBkaWFncmFtT3B0aW9ucyA9IGFzc2lnbihvbWl0KG9wdGlvbnMsIFsgJ2FkZGl0aW9uYWxNb2R1bGVzJyBdKSwge1xuICAgIGNhbnZhczogYXNzaWduKHt9LCBvcHRpb25zLmNhbnZhcywgeyBjb250YWluZXI6IGNvbnRhaW5lciB9KSxcbiAgICBtb2R1bGVzOiBkaWFncmFtTW9kdWxlc1xuICB9KTtcblxuICAvLyBpbnZva2UgZGlhZ3JhbSBjb25zdHJ1Y3RvclxuICBEaWFncmFtLmNhbGwodGhpcywgZGlhZ3JhbU9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29udGFpbmVyKSB7XG4gICAgdGhpcy5hdHRhY2hUbyhvcHRpb25zLmNvbnRhaW5lcik7XG4gIH1cbn07XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCBvbiB0aGUgdW5kZXJseWluZyB7QGxpbmsgRXZlbnRCdXN9XG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0gIHtPYmplY3R9IGV2ZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmV0dXJuIHZhbHVlIGFmdGVyIGNhbGxpbmcgYWxsIGV2ZW50IGxpc3RlbmVycy5cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbih0eXBlLCBldmVudCkge1xuICByZXR1cm4gdGhpcy5nZXQoJ2V2ZW50QnVzJykuZmlyZSh0eXBlLCBldmVudCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7QmFzZVZpZXdlck9wdGlvbnN9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuQmFzZVZpZXdlci5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblxuICBjb25zdCBjb250YWluZXIgPSBkb21pZnkoJzxkaXYgY2xhc3M9XCJianMtY29udGFpbmVyXCI+PC9kaXY+Jyk7XG5cbiAgYXNzaWduU3R5bGUoY29udGFpbmVyLCB7XG4gICAgd2lkdGg6IGVuc3VyZVVuaXQob3B0aW9ucy53aWR0aCksXG4gICAgaGVpZ2h0OiBlbnN1cmVVbml0KG9wdGlvbnMuaGVpZ2h0KSxcbiAgICBwb3NpdGlvbjogb3B0aW9ucy5wb3NpdGlvblxuICB9KTtcblxuICByZXR1cm4gY29udGFpbmVyO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0Jhc2VWaWV3ZXJPcHRpb25zfSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7TW9kZGxlfVxuICovXG5CYXNlVmlld2VyLnByb3RvdHlwZS5fY3JlYXRlTW9kZGxlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICBjb25zdCBtb2RkbGVPcHRpb25zID0gYXNzaWduKHt9LCB0aGlzLl9tb2RkbGVFeHRlbnNpb25zLCBvcHRpb25zLm1vZGRsZUV4dGVuc2lvbnMpO1xuXG4gIHJldHVybiBuZXcgQnBtbk1vZGRsZShtb2RkbGVPcHRpb25zKTtcbn07XG5cbkJhc2VWaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW107XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGFkZFdhcm5pbmdzVG9FcnJvcihlcnIsIHdhcm5pbmdzQXJ5KSB7XG4gIGVyci53YXJuaW5ncyA9IHdhcm5pbmdzQXJ5O1xuICByZXR1cm4gZXJyO1xufVxuXG5mdW5jdGlvbiBjaGVja1ZhbGlkYXRpb25FcnJvcihlcnIpIHtcblxuICAvLyBjaGVjayBpZiB3ZSBjYW4gaGVscCB0aGUgdXNlciBieSBpbmRpY2F0aW5nIHdyb25nIEJQTU4gMi4wIHhtbFxuICAvLyAoaW4gY2FzZSBoZSBvciB0aGUgZXhwb3J0aW5nIHRvb2wgZGlkIG5vdCBnZXQgdGhhdCByaWdodClcblxuICBjb25zdCBwYXR0ZXJuID0gL3VucGFyc2FibGUgY29udGVudCA8KFtePl0rKT4gZGV0ZWN0ZWQoW1xcc1xcU10qKSQvO1xuICBjb25zdCBtYXRjaCA9IHBhdHRlcm4uZXhlYyhlcnIubWVzc2FnZSk7XG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgZXJyLm1lc3NhZ2UgPVxuICAgICAgJ3VucGFyc2FibGUgY29udGVudCA8JyArIG1hdGNoWzFdICsgJz4gZGV0ZWN0ZWQ7ICcgK1xuICAgICAgJ3RoaXMgbWF5IGluZGljYXRlIGFuIGludmFsaWQgQlBNTiAyLjAgZGlhZ3JhbSBmaWxlJyArIG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn1cblxuY29uc3QgREVGQVVMVF9PUFRJT05TID0ge1xuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbn07XG5cblxuLyoqXG4gKiBFbnN1cmUgdGhlIHBhc3NlZCBhcmd1bWVudCBpcyBhIHByb3BlciB1bml0IChkZWZhdWx0aW5nIHRvIHB4KVxuICovXG5mdW5jdGlvbiBlbnN1cmVVbml0KHZhbCkge1xuICByZXR1cm4gdmFsICsgKGlzTnVtYmVyKHZhbCkgPyAncHgnIDogJycpO1xufVxuXG5cbi8qKlxuICogRmluZCBCUE1ORGlhZ3JhbSBpbiBkZWZpbml0aW9ucyBieSBJRFxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudDxEZWZpbml0aW9ucz59IGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlhZ3JhbUlkXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudDxCUE1ORGlhZ3JhbT58bnVsbH1cbiAqL1xuZnVuY3Rpb24gZmluZEJQTU5EaWFncmFtKGRlZmluaXRpb25zLCBkaWFncmFtSWQpIHtcbiAgaWYgKCFkaWFncmFtSWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBmaW5kKGRlZmluaXRpb25zLmRpYWdyYW1zLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuaWQgPT09IGRpYWdyYW1JZDtcbiAgfSkgfHwgbnVsbDtcbn1cblxuXG4vKiA8cHJvamVjdC1sb2dvPiAqL1xuXG5pbXBvcnQge1xuICBvcGVuIGFzIG9wZW5Qb3dlcmVkQnksXG4gIEJQTU5JT19JTUcsXG4gIExPR09fU1RZTEVTLFxuICBMSU5LX1NUWUxFU1xufSBmcm9tICcuL3V0aWwvUG93ZXJlZEJ5VXRpbCc7XG5cbmltcG9ydCB7XG4gIGV2ZW50IGFzIGRvbUV2ZW50XG59IGZyb20gJ21pbi1kb20nO1xuXG4vKipcbiAqIEFkZHMgdGhlIHByb2plY3QgbG9nbyB0byB0aGUgZGlhZ3JhbSBjb250YWluZXIgYXNcbiAqIHJlcXVpcmVkIGJ5IHRoZSBicG1uLmlvIGxpY2Vuc2UuXG4gKlxuICogQHNlZSBodHRwOi8vYnBtbi5pby9saWNlbnNlXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAqL1xuZnVuY3Rpb24gYWRkUHJvamVjdExvZ28oY29udGFpbmVyKSB7XG4gIGNvbnN0IGltZyA9IEJQTU5JT19JTUc7XG5cbiAgY29uc3QgbGlua01hcmt1cCA9XG4gICAgJzxhIGhyZWY9XCJodHRwOi8vYnBtbi5pb1wiICcgK1xuICAgICd0YXJnZXQ9XCJfYmxhbmtcIiAnICtcbiAgICAnY2xhc3M9XCJianMtcG93ZXJlZC1ieVwiICcgK1xuICAgICd0aXRsZT1cIlBvd2VyZWQgYnkgYnBtbi5pb1wiICcgK1xuICAgICc+JyArXG4gICAgaW1nICtcbiAgICAnPC9hPic7XG5cbiAgY29uc3QgbGlua0VsZW1lbnQgPSBkb21pZnkobGlua01hcmt1cCk7XG5cbiAgYXNzaWduU3R5bGUoZG9tUXVlcnkoJ3N2ZycsIGxpbmtFbGVtZW50KSwgTE9HT19TVFlMRVMpO1xuICBhc3NpZ25TdHlsZShsaW5rRWxlbWVudCwgTElOS19TVFlMRVMsIHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBib3R0b206ICcxNXB4JyxcbiAgICByaWdodDogJzE1cHgnLFxuICAgIHpJbmRleDogJzEwMCdcbiAgfSk7XG5cbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKGxpbmtFbGVtZW50KTtcblxuICBkb21FdmVudC5iaW5kKGxpbmtFbGVtZW50LCAnY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgIG9wZW5Qb3dlcmVkQnkoKTtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH0pO1xufVxuXG4vKiA8L3Byb2plY3QtbG9nbz4gKi9cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseViewer.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Modeler.js":
/*!**************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Modeler.js ***!
\**************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Modeler)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _BaseModeler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BaseModeler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseModeler.js\");\n/* harmony import */ var _Viewer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Viewer */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Viewer.js\");\n/* harmony import */ var _NavigatedViewer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./NavigatedViewer */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/NavigatedViewer.js\");\n/* harmony import */ var diagram_js_lib_navigation_keyboard_move__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! diagram-js/lib/navigation/keyboard-move */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/navigation/keyboard-move/index.js\");\n/* harmony import */ var diagram_js_lib_navigation_movecanvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! diagram-js/lib/navigation/movecanvas */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/navigation/movecanvas/index.js\");\n/* harmony import */ var diagram_js_lib_navigation_touch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! diagram-js/lib/navigation/touch */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/navigation/touch/index.js\");\n/* harmony import */ var diagram_js_lib_navigation_zoomscroll__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! diagram-js/lib/navigation/zoomscroll */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/navigation/zoomscroll/index.js\");\n/* harmony import */ var _features_align_elements__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./features/align-elements */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/index.js\");\n/* harmony import */ var _features_auto_place__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./features/auto-place */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/index.js\");\n/* harmony import */ var _features_auto_resize__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./features/auto-resize */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/index.js\");\n/* harmony import */ var diagram_js_lib_features_auto_scroll__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! diagram-js/lib/features/auto-scroll */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/auto-scroll/index.js\");\n/* harmony import */ var diagram_js_lib_features_bendpoints__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! diagram-js/lib/features/bendpoints */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/bendpoints/index.js\");\n/* harmony import */ var diagram_js_lib_features_connect__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! diagram-js/lib/features/connect */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/connect/index.js\");\n/* harmony import */ var diagram_js_lib_features_connection_preview__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! diagram-js/lib/features/connection-preview */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/connection-preview/index.js\");\n/* harmony import */ var _features_context_pad__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./features/context-pad */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/context-pad/index.js\");\n/* harmony import */ var _features_copy_paste__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./features/copy-paste */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/index.js\");\n/* harmony import */ var diagram_js_lib_features_create__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! diagram-js/lib/features/create */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/create/index.js\");\n/* harmony import */ var _features_distribute_elements__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./features/distribute-elements */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/index.js\");\n/* harmony import */ var _features_editor_actions__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./features/editor-actions */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/editor-actions/index.js\");\n/* harmony import */ var _features_grid_snapping__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./features/grid-snapping */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/index.js\");\n/* harmony import */ var _features_interaction_events__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./features/interaction-events */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/interaction-events/index.js\");\n/* harmony import */ var _features_keyboard__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./features/keyboard */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/keyboard/index.js\");\n/* harmony import */ var diagram_js_lib_features_keyboard_move_selection__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! diagram-js/lib/features/keyboard-move-selection */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/keyboard-move-selection/index.js\");\n/* harmony import */ var _features_label_editing__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./features/label-editing */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/index.js\");\n/* harmony import */ var _features_modeling__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./features/modeling */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/index.js\");\n/* harmony import */ var _features_modeling_feedback__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./features/modeling-feedback */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling-feedback/index.js\");\n/* harmony import */ var diagram_js_lib_features_move__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! diagram-js/lib/features/move */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/move/index.js\");\n/* harmony import */ var _features_outline__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./features/outline */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/outline/index.js\");\n/* harmony import */ var _features_palette__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./features/palette */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/palette/index.js\");\n/* harmony import */ var _features_replace_preview__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./features/replace-preview */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/replace-preview/index.js\");\n/* harmony import */ var diagram_js_lib_features_resize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! diagram-js/lib/features/resize */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/resize/index.js\");\n/* harmony import */ var _features_snapping__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./features/snapping */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/snapping/index.js\");\n/* harmony import */ var _features_search__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./features/search */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/search/index.js\");\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar initialDiagram =\n '' +\n '' +\n '' +\n '' +\n ' ' +\n '' +\n '' +\n '' +\n '' +\n ' ' +\n ' ' +\n ' ' +\n ' ';\n\n\n/**\n * @typedef {import('./BaseViewer').BaseViewerOptions} BaseViewerOptions\n * @typedef {import('./BaseViewer').ImportXMLResult} ImportXMLResult\n */\n\n/**\n * A modeler for BPMN 2.0 diagrams.\n *\n *\n * ## Extending the Modeler\n *\n * In order to extend the viewer pass extension modules to bootstrap via the\n * `additionalModules` option. An extension module is an object that exposes\n * named services.\n *\n * The following example depicts the integration of a simple\n * logging component that integrates with interaction events:\n *\n *\n * ```javascript\n *\n * // logging component\n * function InteractionLogger(eventBus) {\n * eventBus.on('element.hover', function(event) {\n * console.log()\n * })\n * }\n *\n * InteractionLogger.$inject = [ 'eventBus' ]; // minification save\n *\n * // extension module\n * var extensionModule = {\n * __init__: [ 'interactionLogger' ],\n * interactionLogger: [ 'type', InteractionLogger ]\n * };\n *\n * // extend the viewer\n * var bpmnModeler = new Modeler({ additionalModules: [ extensionModule ] });\n * bpmnModeler.importXML(...);\n * ```\n *\n *\n * ## Customizing / Replacing Components\n *\n * You can replace individual diagram components by redefining them in override modules.\n * This works for all components, including those defined in the core.\n *\n * Pass in override modules via the `options.additionalModules` flag like this:\n *\n * ```javascript\n * function CustomContextPadProvider(contextPad) {\n *\n * contextPad.registerProvider(this);\n *\n * this.getContextPadEntries = function(element) {\n * // no entries, effectively disable the context pad\n * return {};\n * };\n * }\n *\n * CustomContextPadProvider.$inject = [ 'contextPad' ];\n *\n * var overrideModule = {\n * contextPadProvider: [ 'type', CustomContextPadProvider ]\n * };\n *\n * var bpmnModeler = new Modeler({ additionalModules: [ overrideModule ]});\n * ```\n *\n * @param {BaseViewerOptions} [options] The options to configure the modeler.\n */\nfunction Modeler(options) {\n _BaseModeler__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, options);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Modeler, _BaseModeler__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n\nModeler.Viewer = _Viewer__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\nModeler.NavigatedViewer = _NavigatedViewer__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n\n/**\n * Create a new diagram to start modeling.\n *\n * @throws {ImportXMLError} An error thrown during the import of the XML.\n *\n * @return {Promise} A promise resolving with warnings that were produced during the import.\n */\nModeler.prototype.createDiagram = function createDiagram() {\n return this.importXML(initialDiagram);\n};\n\n\nModeler.prototype._interactionModules = [\n\n // non-modeling components\n diagram_js_lib_navigation_keyboard_move__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n diagram_js_lib_navigation_movecanvas__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n diagram_js_lib_navigation_touch__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n diagram_js_lib_navigation_zoomscroll__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n];\n\nModeler.prototype._modelingModules = [\n\n // modeling components\n _features_align_elements__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n _features_auto_place__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n diagram_js_lib_features_auto_scroll__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n _features_auto_resize__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n diagram_js_lib_features_bendpoints__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n diagram_js_lib_features_connect__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n diagram_js_lib_features_connection_preview__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n _features_context_pad__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n _features_copy_paste__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n diagram_js_lib_features_create__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n _features_distribute_elements__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n _features_editor_actions__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n _features_grid_snapping__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n _features_interaction_events__WEBPACK_IMPORTED_MODULE_21__[\"default\"],\n _features_keyboard__WEBPACK_IMPORTED_MODULE_22__[\"default\"],\n diagram_js_lib_features_keyboard_move_selection__WEBPACK_IMPORTED_MODULE_23__[\"default\"],\n _features_label_editing__WEBPACK_IMPORTED_MODULE_24__[\"default\"],\n _features_modeling__WEBPACK_IMPORTED_MODULE_25__[\"default\"],\n _features_modeling_feedback__WEBPACK_IMPORTED_MODULE_26__[\"default\"],\n diagram_js_lib_features_move__WEBPACK_IMPORTED_MODULE_27__[\"default\"],\n _features_outline__WEBPACK_IMPORTED_MODULE_28__[\"default\"],\n _features_palette__WEBPACK_IMPORTED_MODULE_29__[\"default\"],\n _features_replace_preview__WEBPACK_IMPORTED_MODULE_30__[\"default\"],\n diagram_js_lib_features_resize__WEBPACK_IMPORTED_MODULE_31__[\"default\"],\n _features_snapping__WEBPACK_IMPORTED_MODULE_32__[\"default\"],\n _features_search__WEBPACK_IMPORTED_MODULE_33__[\"default\"]\n];\n\n\n// modules the modeler is composed of\n//\n// - viewer modules\n// - interaction modules\n// - modeling modules\n\nModeler.prototype._modules = [].concat(\n _Viewer__WEBPACK_IMPORTED_MODULE_2__[\"default\"].prototype._modules,\n Modeler.prototype._interactionModules,\n Modeler.prototype._modelingModules\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9Nb2RlbGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXdDOztBQUVBOztBQUVWO0FBQ2tCOztBQUV5QjtBQUNMO0FBQ1Y7QUFDVTs7QUFFUjtBQUNSO0FBQ0U7QUFDYTtBQUNEO0FBQ047QUFDcUI7QUFDM0I7QUFDRjtBQUNNO0FBQ1k7QUFDVjtBQUNGO0FBQ1U7QUFDbkI7QUFDeUM7QUFDaEM7QUFDVDtBQUNpQjtBQUNaO0FBQ1A7QUFDQTtBQUNlO0FBQ0o7QUFDVDtBQUNKOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxhQUFhLDBDQUEwQztBQUN2RCxhQUFhLHdDQUF3QztBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx3Q0FBd0M7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsc0NBQXNDO0FBQ3pFO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QjtBQUNlO0FBQ2YsRUFBRSxvREFBVztBQUNiOztBQUVBLDREQUFRLFVBQVUsb0RBQVc7OztBQUc3QixpQkFBaUIsK0NBQU07QUFDdkIsMEJBQTBCLHdEQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQSxZQUFZLGdCQUFnQjtBQUM1QjtBQUNBLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLEVBQUUsK0VBQWtCO0FBQ3BCLEVBQUUsNEVBQWdCO0FBQ2xCLEVBQUUsdUVBQVc7QUFDYixFQUFFLDRFQUFnQjtBQUNsQjs7QUFFQTs7QUFFQTtBQUNBLEVBQUUsZ0VBQW1CO0FBQ3JCLEVBQUUsNERBQWU7QUFDakIsRUFBRSw0RUFBZ0I7QUFDbEIsRUFBRSw4REFBZ0I7QUFDbEIsRUFBRSwyRUFBZ0I7QUFDbEIsRUFBRSx3RUFBYTtBQUNmLEVBQUUsbUZBQXVCO0FBQ3pCLEVBQUUsOERBQWdCO0FBQ2xCLEVBQUUsNkRBQWU7QUFDakIsRUFBRSx1RUFBWTtBQUNkLEVBQUUsc0VBQXdCO0FBQzFCLEVBQUUsaUVBQW1CO0FBQ3JCLEVBQUUsZ0VBQWtCO0FBQ3BCLEVBQUUscUVBQXVCO0FBQ3pCLEVBQUUsMkRBQWM7QUFDaEIsRUFBRSx3RkFBMkI7QUFDN0IsRUFBRSxnRUFBa0I7QUFDcEIsRUFBRSwyREFBYztBQUNoQixFQUFFLG9FQUFzQjtBQUN4QixFQUFFLHFFQUFVO0FBQ1osRUFBRSwwREFBYTtBQUNmLEVBQUUsMERBQWE7QUFDZixFQUFFLGtFQUFvQjtBQUN0QixFQUFFLHVFQUFZO0FBQ2QsRUFBRSwyREFBYztBQUNoQixFQUFFLHlEQUFZO0FBQ2Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLCtDQUFNO0FBQ1I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvTW9kZWxlci5qcz9jMGM3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IEJhc2VNb2RlbGVyIGZyb20gJy4vQmFzZU1vZGVsZXInO1xuXG5pbXBvcnQgVmlld2VyIGZyb20gJy4vVmlld2VyJztcbmltcG9ydCBOYXZpZ2F0ZWRWaWV3ZXIgZnJvbSAnLi9OYXZpZ2F0ZWRWaWV3ZXInO1xuXG5pbXBvcnQgS2V5Ym9hcmRNb3ZlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24va2V5Ym9hcmQtbW92ZSc7XG5pbXBvcnQgTW92ZUNhbnZhc01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMnO1xuaW1wb3J0IFRvdWNoTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24vdG91Y2gnO1xuaW1wb3J0IFpvb21TY3JvbGxNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi96b29tc2Nyb2xsJztcblxuaW1wb3J0IEFsaWduRWxlbWVudHNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cyc7XG5pbXBvcnQgQXV0b1BsYWNlTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvYXV0by1wbGFjZSc7XG5pbXBvcnQgQXV0b1Jlc2l6ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2F1dG8tcmVzaXplJztcbmltcG9ydCBBdXRvU2Nyb2xsTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tc2Nyb2xsJztcbmltcG9ydCBCZW5kcG9pbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2JlbmRwb2ludHMnO1xuaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdCc7XG5pbXBvcnQgQ29ubmVjdGlvblByZXZpZXdNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdGlvbi1wcmV2aWV3JztcbmltcG9ydCBDb250ZXh0UGFkTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvY29udGV4dC1wYWQnO1xuaW1wb3J0IENvcHlQYXN0ZU1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2NvcHktcGFzdGUnO1xuaW1wb3J0IENyZWF0ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUnO1xuaW1wb3J0IERpc3RyaWJ1dGVFbGVtZW50c01vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2Rpc3RyaWJ1dGUtZWxlbWVudHMnO1xuaW1wb3J0IEVkaXRvckFjdGlvbnNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucyc7XG5pbXBvcnQgR3JpZFNuYXBwaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvZ3JpZC1zbmFwcGluZyc7XG5pbXBvcnQgSW50ZXJhY3Rpb25FdmVudHNNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMnO1xuaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMva2V5Ym9hcmQnO1xuaW1wb3J0IEtleWJvYXJkTW92ZVNlbGVjdGlvbk1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC1tb3ZlLXNlbGVjdGlvbic7XG5pbXBvcnQgTGFiZWxFZGl0aW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvbGFiZWwtZWRpdGluZyc7XG5pbXBvcnQgTW9kZWxpbmdNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9tb2RlbGluZyc7XG5pbXBvcnQgTW9kZWxpbmdGZWVkYmFja01vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL21vZGVsaW5nLWZlZWRiYWNrJztcbmltcG9ydCBNb3ZlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vdmUnO1xuaW1wb3J0IE91dGxpbmVNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9vdXRsaW5lJztcbmltcG9ydCBQYWxldHRlTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvcGFsZXR0ZSc7XG5pbXBvcnQgUmVwbGFjZVByZXZpZXdNb2R1bGUgZnJvbSAnLi9mZWF0dXJlcy9yZXBsYWNlLXByZXZpZXcnO1xuaW1wb3J0IFJlc2l6ZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUnO1xuaW1wb3J0IFNuYXBwaW5nTW9kdWxlIGZyb20gJy4vZmVhdHVyZXMvc25hcHBpbmcnO1xuaW1wb3J0IFNlYXJjaE1vZHVsZSBmcm9tICcuL2ZlYXR1cmVzL3NlYXJjaCc7XG5cbnZhciBpbml0aWFsRGlhZ3JhbSA9XG4gICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4nICtcbiAgJzxicG1uOmRlZmluaXRpb25zIHhtbG5zOnhzaT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICd4bWxuczpicG1uPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTFwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6YnBtbmRpPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVwiICcgK1xuICAgICAgICAgICAgICAgICAgICAneG1sbnM6ZGM9XCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiICcgK1xuICAgICAgICAgICAgICAgICAgICAndGFyZ2V0TmFtZXNwYWNlPVwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW5cIiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2lkPVwiRGVmaW5pdGlvbnNfMVwiPicgK1xuICAgICc8YnBtbjpwcm9jZXNzIGlkPVwiUHJvY2Vzc18xXCIgaXNFeGVjdXRhYmxlPVwiZmFsc2VcIj4nICtcbiAgICAgICc8YnBtbjpzdGFydEV2ZW50IGlkPVwiU3RhcnRFdmVudF8xXCIvPicgK1xuICAgICc8L2JwbW46cHJvY2Vzcz4nICtcbiAgICAnPGJwbW5kaTpCUE1ORGlhZ3JhbSBpZD1cIkJQTU5EaWFncmFtXzFcIj4nICtcbiAgICAgICc8YnBtbmRpOkJQTU5QbGFuZSBpZD1cIkJQTU5QbGFuZV8xXCIgYnBtbkVsZW1lbnQ9XCJQcm9jZXNzXzFcIj4nICtcbiAgICAgICAgJzxicG1uZGk6QlBNTlNoYXBlIGlkPVwiX0JQTU5TaGFwZV9TdGFydEV2ZW50XzJcIiBicG1uRWxlbWVudD1cIlN0YXJ0RXZlbnRfMVwiPicgK1xuICAgICAgICAgICc8ZGM6Qm91bmRzIGhlaWdodD1cIjM2LjBcIiB3aWR0aD1cIjM2LjBcIiB4PVwiMTczLjBcIiB5PVwiMTAyLjBcIi8+JyArXG4gICAgICAgICc8L2JwbW5kaTpCUE1OU2hhcGU+JyArXG4gICAgICAnPC9icG1uZGk6QlBNTlBsYW5lPicgK1xuICAgICc8L2JwbW5kaTpCUE1ORGlhZ3JhbT4nICtcbiAgJzwvYnBtbjpkZWZpbml0aW9ucz4nO1xuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9CYXNlVmlld2VyJykuQmFzZVZpZXdlck9wdGlvbnN9IEJhc2VWaWV3ZXJPcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL0Jhc2VWaWV3ZXInKS5JbXBvcnRYTUxSZXN1bHR9IEltcG9ydFhNTFJlc3VsdFxuICovXG5cbi8qKlxuICogQSBtb2RlbGVyIGZvciBCUE1OIDIuMCBkaWFncmFtcy5cbiAqXG4gKlxuICogIyMgRXh0ZW5kaW5nIHRoZSBNb2RlbGVyXG4gKlxuICogSW4gb3JkZXIgdG8gZXh0ZW5kIHRoZSB2aWV3ZXIgcGFzcyBleHRlbnNpb24gbW9kdWxlcyB0byBib290c3RyYXAgdmlhIHRoZVxuICogYGFkZGl0aW9uYWxNb2R1bGVzYCBvcHRpb24uIEFuIGV4dGVuc2lvbiBtb2R1bGUgaXMgYW4gb2JqZWN0IHRoYXQgZXhwb3Nlc1xuICogbmFtZWQgc2VydmljZXMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlcGljdHMgdGhlIGludGVncmF0aW9uIG9mIGEgc2ltcGxlXG4gKiBsb2dnaW5nIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCBpbnRlcmFjdGlvbiBldmVudHM6XG4gKlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsb2dnaW5nIGNvbXBvbmVudFxuICogZnVuY3Rpb24gSW50ZXJhY3Rpb25Mb2dnZXIoZXZlbnRCdXMpIHtcbiAqICAgZXZlbnRCdXMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKClcbiAqICAgfSlcbiAqIH1cbiAqXG4gKiBJbnRlcmFjdGlvbkxvZ2dlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IC8vIG1pbmlmaWNhdGlvbiBzYXZlXG4gKlxuICogLy8gZXh0ZW5zaW9uIG1vZHVsZVxuICogdmFyIGV4dGVuc2lvbk1vZHVsZSA9IHtcbiAqICAgX19pbml0X186IFsgJ2ludGVyYWN0aW9uTG9nZ2VyJyBdLFxuICogICBpbnRlcmFjdGlvbkxvZ2dlcjogWyAndHlwZScsIEludGVyYWN0aW9uTG9nZ2VyIF1cbiAqIH07XG4gKlxuICogLy8gZXh0ZW5kIHRoZSB2aWV3ZXJcbiAqIHZhciBicG1uTW9kZWxlciA9IG5ldyBNb2RlbGVyKHsgYWRkaXRpb25hbE1vZHVsZXM6IFsgZXh0ZW5zaW9uTW9kdWxlIF0gfSk7XG4gKiBicG1uTW9kZWxlci5pbXBvcnRYTUwoLi4uKTtcbiAqIGBgYFxuICpcbiAqXG4gKiAjIyBDdXN0b21pemluZyAvIFJlcGxhY2luZyBDb21wb25lbnRzXG4gKlxuICogWW91IGNhbiByZXBsYWNlIGluZGl2aWR1YWwgZGlhZ3JhbSBjb21wb25lbnRzIGJ5IHJlZGVmaW5pbmcgdGhlbSBpbiBvdmVycmlkZSBtb2R1bGVzLlxuICogVGhpcyB3b3JrcyBmb3IgYWxsIGNvbXBvbmVudHMsIGluY2x1ZGluZyB0aG9zZSBkZWZpbmVkIGluIHRoZSBjb3JlLlxuICpcbiAqIFBhc3MgaW4gb3ZlcnJpZGUgbW9kdWxlcyB2aWEgdGhlIGBvcHRpb25zLmFkZGl0aW9uYWxNb2R1bGVzYCBmbGFnIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbiBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIoY29udGV4dFBhZCkge1xuICpcbiAqICAgY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xuICpcbiAqICAgdGhpcy5nZXRDb250ZXh0UGFkRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAqICAgICAvLyBubyBlbnRyaWVzLCBlZmZlY3RpdmVseSBkaXNhYmxlIHRoZSBjb250ZXh0IHBhZFxuICogICAgIHJldHVybiB7fTtcbiAqICAgfTtcbiAqIH1cbiAqXG4gKiBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIuJGluamVjdCA9IFsgJ2NvbnRleHRQYWQnIF07XG4gKlxuICogdmFyIG92ZXJyaWRlTW9kdWxlID0ge1xuICogICBjb250ZXh0UGFkUHJvdmlkZXI6IFsgJ3R5cGUnLCBDdXN0b21Db250ZXh0UGFkUHJvdmlkZXIgXVxuICogfTtcbiAqXG4gKiB2YXIgYnBtbk1vZGVsZXIgPSBuZXcgTW9kZWxlcih7IGFkZGl0aW9uYWxNb2R1bGVzOiBbIG92ZXJyaWRlTW9kdWxlIF19KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7QmFzZVZpZXdlck9wdGlvbnN9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIG1vZGVsZXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsZXIob3B0aW9ucykge1xuICBCYXNlTW9kZWxlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhNb2RlbGVyLCBCYXNlTW9kZWxlcik7XG5cblxuTW9kZWxlci5WaWV3ZXIgPSBWaWV3ZXI7XG5Nb2RlbGVyLk5hdmlnYXRlZFZpZXdlciA9IE5hdmlnYXRlZFZpZXdlcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgZGlhZ3JhbSB0byBzdGFydCBtb2RlbGluZy5cbiAqXG4gKiBAdGhyb3dzIHtJbXBvcnRYTUxFcnJvcn0gQW4gZXJyb3IgdGhyb3duIGR1cmluZyB0aGUgaW1wb3J0IG9mIHRoZSBYTUwuXG4gKlxuICogQHJldHVybiB7UHJvbWlzZTxJbXBvcnRYTUxSZXN1bHQ+fSBBIHByb21pc2UgcmVzb2x2aW5nIHdpdGggd2FybmluZ3MgdGhhdCB3ZXJlIHByb2R1Y2VkIGR1cmluZyB0aGUgaW1wb3J0LlxuICovXG5Nb2RlbGVyLnByb3RvdHlwZS5jcmVhdGVEaWFncmFtID0gZnVuY3Rpb24gY3JlYXRlRGlhZ3JhbSgpIHtcbiAgcmV0dXJuIHRoaXMuaW1wb3J0WE1MKGluaXRpYWxEaWFncmFtKTtcbn07XG5cblxuTW9kZWxlci5wcm90b3R5cGUuX2ludGVyYWN0aW9uTW9kdWxlcyA9IFtcblxuICAvLyBub24tbW9kZWxpbmcgY29tcG9uZW50c1xuICBLZXlib2FyZE1vdmVNb2R1bGUsXG4gIE1vdmVDYW52YXNNb2R1bGUsXG4gIFRvdWNoTW9kdWxlLFxuICBab29tU2Nyb2xsTW9kdWxlXG5dO1xuXG5Nb2RlbGVyLnByb3RvdHlwZS5fbW9kZWxpbmdNb2R1bGVzID0gW1xuXG4gIC8vIG1vZGVsaW5nIGNvbXBvbmVudHNcbiAgQWxpZ25FbGVtZW50c01vZHVsZSxcbiAgQXV0b1BsYWNlTW9kdWxlLFxuICBBdXRvU2Nyb2xsTW9kdWxlLFxuICBBdXRvUmVzaXplTW9kdWxlLFxuICBCZW5kcG9pbnRzTW9kdWxlLFxuICBDb25uZWN0TW9kdWxlLFxuICBDb25uZWN0aW9uUHJldmlld01vZHVsZSxcbiAgQ29udGV4dFBhZE1vZHVsZSxcbiAgQ29weVBhc3RlTW9kdWxlLFxuICBDcmVhdGVNb2R1bGUsXG4gIERpc3RyaWJ1dGVFbGVtZW50c01vZHVsZSxcbiAgRWRpdG9yQWN0aW9uc01vZHVsZSxcbiAgR3JpZFNuYXBwaW5nTW9kdWxlLFxuICBJbnRlcmFjdGlvbkV2ZW50c01vZHVsZSxcbiAgS2V5Ym9hcmRNb2R1bGUsXG4gIEtleWJvYXJkTW92ZVNlbGVjdGlvbk1vZHVsZSxcbiAgTGFiZWxFZGl0aW5nTW9kdWxlLFxuICBNb2RlbGluZ01vZHVsZSxcbiAgTW9kZWxpbmdGZWVkYmFja01vZHVsZSxcbiAgTW92ZU1vZHVsZSxcbiAgT3V0bGluZU1vZHVsZSxcbiAgUGFsZXR0ZU1vZHVsZSxcbiAgUmVwbGFjZVByZXZpZXdNb2R1bGUsXG4gIFJlc2l6ZU1vZHVsZSxcbiAgU25hcHBpbmdNb2R1bGUsXG4gIFNlYXJjaE1vZHVsZVxuXTtcblxuXG4vLyBtb2R1bGVzIHRoZSBtb2RlbGVyIGlzIGNvbXBvc2VkIG9mXG4vL1xuLy8gLSB2aWV3ZXIgbW9kdWxlc1xuLy8gLSBpbnRlcmFjdGlvbiBtb2R1bGVzXG4vLyAtIG1vZGVsaW5nIG1vZHVsZXNcblxuTW9kZWxlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXS5jb25jYXQoXG4gIFZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMsXG4gIE1vZGVsZXIucHJvdG90eXBlLl9pbnRlcmFjdGlvbk1vZHVsZXMsXG4gIE1vZGVsZXIucHJvdG90eXBlLl9tb2RlbGluZ01vZHVsZXNcbik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Modeler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/NavigatedViewer.js":
/*!**********************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/NavigatedViewer.js ***!
\**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ NavigatedViewer)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _Viewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Viewer */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Viewer.js\");\n/* harmony import */ var diagram_js_lib_navigation_keyboard_move__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/navigation/keyboard-move */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/navigation/keyboard-move/index.js\");\n/* harmony import */ var diagram_js_lib_navigation_movecanvas__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/navigation/movecanvas */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/navigation/movecanvas/index.js\");\n/* harmony import */ var diagram_js_lib_navigation_zoomscroll__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! diagram-js/lib/navigation/zoomscroll */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/navigation/zoomscroll/index.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef { import('./BaseViewer').BaseViewerOptions } BaseViewerOptions\n */\n\n/**\n * A viewer with mouse and keyboard navigation features.\n *\n * @param {BaseViewerOptions} [options]\n */\nfunction NavigatedViewer(options) {\n _Viewer__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, options);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(NavigatedViewer, _Viewer__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n\nNavigatedViewer.prototype._navigationModules = [\n diagram_js_lib_navigation_keyboard_move__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n diagram_js_lib_navigation_movecanvas__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n diagram_js_lib_navigation_zoomscroll__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n];\n\nNavigatedViewer.prototype._modules = [].concat(\n _Viewer__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype._modules,\n NavigatedViewer.prototype._navigationModules\n);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9OYXZpZ2F0ZWRWaWV3ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXdDOztBQUVWOztBQUUyQztBQUNMO0FBQ0E7O0FBRXBFO0FBQ0EsY0FBYywyQ0FBMkM7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDZTtBQUNmLEVBQUUsK0NBQU07QUFDUjs7QUFFQSw0REFBUSxrQkFBa0IsK0NBQU07OztBQUdoQztBQUNBLEVBQUUsK0VBQWtCO0FBQ3BCLEVBQUUsNEVBQWdCO0FBQ2xCLEVBQUUsNEVBQWdCO0FBQ2xCOztBQUVBO0FBQ0EsRUFBRSwrQ0FBTTtBQUNSO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9OYXZpZ2F0ZWRWaWV3ZXIuanM/NmYwOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBWaWV3ZXIgZnJvbSAnLi9WaWV3ZXInO1xuXG5pbXBvcnQgS2V5Ym9hcmRNb3ZlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL25hdmlnYXRpb24va2V5Ym9hcmQtbW92ZSc7XG5pbXBvcnQgTW92ZUNhbnZhc01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9uYXZpZ2F0aW9uL21vdmVjYW52YXMnO1xuaW1wb3J0IFpvb21TY3JvbGxNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbmF2aWdhdGlvbi96b29tc2Nyb2xsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnLi9CYXNlVmlld2VyJykuQmFzZVZpZXdlck9wdGlvbnMgfSBCYXNlVmlld2VyT3B0aW9uc1xuICovXG5cbi8qKlxuICogQSB2aWV3ZXIgd2l0aCBtb3VzZSBhbmQga2V5Ym9hcmQgbmF2aWdhdGlvbiBmZWF0dXJlcy5cbiAqXG4gKiBAcGFyYW0ge0Jhc2VWaWV3ZXJPcHRpb25zfSBbb3B0aW9uc11cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTmF2aWdhdGVkVmlld2VyKG9wdGlvbnMpIHtcbiAgVmlld2VyLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cbmluaGVyaXRzKE5hdmlnYXRlZFZpZXdlciwgVmlld2VyKTtcblxuXG5OYXZpZ2F0ZWRWaWV3ZXIucHJvdG90eXBlLl9uYXZpZ2F0aW9uTW9kdWxlcyA9IFtcbiAgS2V5Ym9hcmRNb3ZlTW9kdWxlLFxuICBNb3ZlQ2FudmFzTW9kdWxlLFxuICBab29tU2Nyb2xsTW9kdWxlXG5dO1xuXG5OYXZpZ2F0ZWRWaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzID0gW10uY29uY2F0KFxuICBWaWV3ZXIucHJvdG90eXBlLl9tb2R1bGVzLFxuICBOYXZpZ2F0ZWRWaWV3ZXIucHJvdG90eXBlLl9uYXZpZ2F0aW9uTW9kdWxlc1xuKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/NavigatedViewer.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Viewer.js":
/*!*************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Viewer.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Viewer)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./core */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/core/index.js\");\n/* harmony import */ var diagram_js_lib_i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/i18n/translate */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/i18n/translate/index.js\");\n/* harmony import */ var diagram_js_lib_features_selection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! diagram-js/lib/features/selection */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/selection/index.js\");\n/* harmony import */ var diagram_js_lib_features_overlays__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! diagram-js/lib/features/overlays */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/overlays/index.js\");\n/* harmony import */ var _features_drilldown__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./features/drilldown */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/index.js\");\n/* harmony import */ var _BaseViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BaseViewer */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/BaseViewer.js\");\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef { import('./BaseViewer').BaseViewerOptions } BaseViewerOptions\n */\n\n/**\n * A viewer for BPMN 2.0 diagrams.\n *\n * Have a look at {@link NavigatedViewer} or {@link Modeler} for bundles that include\n * additional features.\n *\n *\n * ## Extending the Viewer\n *\n * In order to extend the viewer pass extension modules to bootstrap via the\n * `additionalModules` option. An extension module is an object that exposes\n * named services.\n *\n * The following example depicts the integration of a simple\n * logging component that integrates with interaction events:\n *\n *\n * ```javascript\n *\n * // logging component\n * function InteractionLogger(eventBus) {\n * eventBus.on('element.hover', function(event) {\n * console.log()\n * })\n * }\n *\n * InteractionLogger.$inject = [ 'eventBus' ]; // minification save\n *\n * // extension module\n * var extensionModule = {\n * __init__: [ 'interactionLogger' ],\n * interactionLogger: [ 'type', InteractionLogger ]\n * };\n *\n * // extend the viewer\n * var bpmnViewer = new Viewer({ additionalModules: [ extensionModule ] });\n * bpmnViewer.importXML(...);\n * ```\n *\n * @param {BaseViewerOptions} [options] The options to configure the viewer.\n */\nfunction Viewer(options) {\n _BaseViewer__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, options);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Viewer, _BaseViewer__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n// modules the viewer is composed of\nViewer.prototype._modules = [\n _core__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n diagram_js_lib_i18n_translate__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n diagram_js_lib_features_selection__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n diagram_js_lib_features_overlays__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n _features_drilldown__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n];\n\n// default moddle extensions the viewer is composed of\nViewer.prototype._moddleExtensions = {};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9WaWV3ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBd0M7O0FBRVI7QUFDNEI7QUFDSTtBQUNGO0FBQ1Y7O0FBRWQ7OztBQUd0QztBQUNBLGNBQWMsMkNBQTJDO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix1QkFBdUIsSUFBSSxlQUFlO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx3Q0FBd0M7QUFDekU7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUI7QUFDZTtBQUNmLEVBQUUsbURBQVU7QUFDWjs7QUFFQSw0REFBUSxTQUFTLG1EQUFVOztBQUUzQjtBQUNBO0FBQ0EsRUFBRSw2Q0FBVTtBQUNaLEVBQUUscUVBQWU7QUFDakIsRUFBRSx5RUFBZTtBQUNqQixFQUFFLHdFQUFjO0FBQ2hCLEVBQUUsMkRBQWdCO0FBQ2xCOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9WaWV3ZXIuanM/MmJlYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb3JlTW9kdWxlIGZyb20gJy4vY29yZSc7XG5pbXBvcnQgVHJhbnNsYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcbmltcG9ydCBTZWxlY3Rpb25Nb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvc2VsZWN0aW9uJztcbmltcG9ydCBPdmVybGF5c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cyc7XG5pbXBvcnQgRHJpbGxkb3duTW9kZHVsZSBmcm9tICcuL2ZlYXR1cmVzL2RyaWxsZG93bic7XG5cbmltcG9ydCBCYXNlVmlld2VyIGZyb20gJy4vQmFzZVZpZXdlcic7XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnLi9CYXNlVmlld2VyJykuQmFzZVZpZXdlck9wdGlvbnMgfSBCYXNlVmlld2VyT3B0aW9uc1xuICovXG5cbi8qKlxuICogQSB2aWV3ZXIgZm9yIEJQTU4gMi4wIGRpYWdyYW1zLlxuICpcbiAqIEhhdmUgYSBsb29rIGF0IHtAbGluayBOYXZpZ2F0ZWRWaWV3ZXJ9IG9yIHtAbGluayBNb2RlbGVyfSBmb3IgYnVuZGxlcyB0aGF0IGluY2x1ZGVcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMuXG4gKlxuICpcbiAqICMjIEV4dGVuZGluZyB0aGUgVmlld2VyXG4gKlxuICogSW4gb3JkZXIgdG8gZXh0ZW5kIHRoZSB2aWV3ZXIgcGFzcyBleHRlbnNpb24gbW9kdWxlcyB0byBib290c3RyYXAgdmlhIHRoZVxuICogYGFkZGl0aW9uYWxNb2R1bGVzYCBvcHRpb24uIEFuIGV4dGVuc2lvbiBtb2R1bGUgaXMgYW4gb2JqZWN0IHRoYXQgZXhwb3Nlc1xuICogbmFtZWQgc2VydmljZXMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlcGljdHMgdGhlIGludGVncmF0aW9uIG9mIGEgc2ltcGxlXG4gKiBsb2dnaW5nIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCBpbnRlcmFjdGlvbiBldmVudHM6XG4gKlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqXG4gKiAvLyBsb2dnaW5nIGNvbXBvbmVudFxuICogZnVuY3Rpb24gSW50ZXJhY3Rpb25Mb2dnZXIoZXZlbnRCdXMpIHtcbiAqICAgZXZlbnRCdXMub24oJ2VsZW1lbnQuaG92ZXInLCBmdW5jdGlvbihldmVudCkge1xuICogICAgIGNvbnNvbGUubG9nKClcbiAqICAgfSlcbiAqIH1cbiAqXG4gKiBJbnRlcmFjdGlvbkxvZ2dlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07IC8vIG1pbmlmaWNhdGlvbiBzYXZlXG4gKlxuICogLy8gZXh0ZW5zaW9uIG1vZHVsZVxuICogdmFyIGV4dGVuc2lvbk1vZHVsZSA9IHtcbiAqICAgX19pbml0X186IFsgJ2ludGVyYWN0aW9uTG9nZ2VyJyBdLFxuICogICBpbnRlcmFjdGlvbkxvZ2dlcjogWyAndHlwZScsIEludGVyYWN0aW9uTG9nZ2VyIF1cbiAqIH07XG4gKlxuICogLy8gZXh0ZW5kIHRoZSB2aWV3ZXJcbiAqIHZhciBicG1uVmlld2VyID0gbmV3IFZpZXdlcih7IGFkZGl0aW9uYWxNb2R1bGVzOiBbIGV4dGVuc2lvbk1vZHVsZSBdIH0pO1xuICogYnBtblZpZXdlci5pbXBvcnRYTUwoLi4uKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7QmFzZVZpZXdlck9wdGlvbnN9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIHZpZXdlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVmlld2VyKG9wdGlvbnMpIHtcbiAgQmFzZVZpZXdlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5pbmhlcml0cyhWaWV3ZXIsIEJhc2VWaWV3ZXIpO1xuXG4vLyBtb2R1bGVzIHRoZSB2aWV3ZXIgaXMgY29tcG9zZWQgb2ZcblZpZXdlci5wcm90b3R5cGUuX21vZHVsZXMgPSBbXG4gIENvcmVNb2R1bGUsXG4gIFRyYW5zbGF0ZU1vZHVsZSxcbiAgU2VsZWN0aW9uTW9kdWxlLFxuICBPdmVybGF5c01vZHVsZSxcbiAgRHJpbGxkb3duTW9kZHVsZVxuXTtcblxuLy8gZGVmYXVsdCBtb2RkbGUgZXh0ZW5zaW9ucyB0aGUgdmlld2VyIGlzIGNvbXBvc2VkIG9mXG5WaWV3ZXIucHJvdG90eXBlLl9tb2RkbGVFeHRlbnNpb25zID0ge307Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/Viewer.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/core/index.js":
/*!*****************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/core/index.js ***!
\*****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _draw__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../draw */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/index.js\");\n/* harmony import */ var _import__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../import */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/import/index.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n _draw__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n _import__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n ]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9jb3JlL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFpQztBQUNJOztBQUVyQyxpRUFBZTtBQUNmO0FBQ0EsSUFBSSw2Q0FBVTtBQUNkLElBQUksK0NBQVk7QUFDaEI7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvY29yZS9pbmRleC5qcz84YzQ5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEcmF3TW9kdWxlIGZyb20gJy4uL2RyYXcnO1xuaW1wb3J0IEltcG9ydE1vZHVsZSBmcm9tICcuLi9pbXBvcnQnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgRHJhd01vZHVsZSxcbiAgICBJbXBvcnRNb2R1bGVcbiAgXVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/core/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/BpmnRenderUtil.js":
/*!**************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/BpmnRenderUtil.js ***!
\**************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ black: () => (/* binding */ black),\n/* harmony export */ getBounds: () => (/* binding */ getBounds),\n/* harmony export */ getCirclePath: () => (/* binding */ getCirclePath),\n/* harmony export */ getDi: () => (/* reexport safe */ _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi),\n/* harmony export */ getDiamondPath: () => (/* binding */ getDiamondPath),\n/* harmony export */ getFillColor: () => (/* binding */ getFillColor),\n/* harmony export */ getHeight: () => (/* binding */ getHeight),\n/* harmony export */ getLabelColor: () => (/* binding */ getLabelColor),\n/* harmony export */ getRectPath: () => (/* binding */ getRectPath),\n/* harmony export */ getRoundRectPath: () => (/* binding */ getRoundRectPath),\n/* harmony export */ getSemantic: () => (/* reexport safe */ _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject),\n/* harmony export */ getStrokeColor: () => (/* binding */ getStrokeColor),\n/* harmony export */ getWidth: () => (/* binding */ getWidth),\n/* harmony export */ isCollection: () => (/* binding */ isCollection),\n/* harmony export */ isThrowEvent: () => (/* binding */ isThrowEvent),\n/* harmony export */ isTypedEvent: () => (/* binding */ isTypedEvent),\n/* harmony export */ white: () => (/* binding */ white)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_util_RenderUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/util/RenderUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/RenderUtil.js\");\n\n\n\n\n\n\n\n/**\n * @typedef {import('../model').ModdleElement} ModdleElement\n * @typedef {import('../model').Element} Element\n *\n * @typedef {import('../model').ShapeLike} ShapeLike\n *\n * @typedef {import('diagram-js/lib/util/Types').Dimensions} Dimensions\n * @typedef {import('diagram-js/lib/util/Types').Rect} Rect\n */\n\n// re-export for compatibility\n\n\n\nvar black = 'hsl(225, 10%, 15%)';\nvar white = 'white';\n\n// element utils //////////////////////\n\n/**\n * Checks if eventDefinition of the given element matches with semantic type.\n *\n * @param {ModdleElement} event\n * @param {string} eventDefinitionType\n *\n * @return {boolean}\n */\nfunction isTypedEvent(event, eventDefinitionType) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.some)(event.eventDefinitions, function(definition) {\n return definition.$type === eventDefinitionType;\n });\n}\n\n/**\n * Check if element is a throw event.\n *\n * @param {ModdleElement} event\n *\n * @return {boolean}\n */\nfunction isThrowEvent(event) {\n return (event.$type === 'bpmn:IntermediateThrowEvent') || (event.$type === 'bpmn:EndEvent');\n}\n\n/**\n * Check if element is a throw event.\n *\n * @param {ModdleElement} element\n *\n * @return {boolean}\n */\nfunction isCollection(element) {\n var dataObject = element.dataObjectRef;\n\n return element.isCollection || (dataObject && dataObject.isCollection);\n}\n\n\n// color access //////////////////////\n\n/**\n * @param {Element} element\n * @param {string} [defaultColor]\n * @param {string} [overrideColor]\n *\n * @return {string}\n */\nfunction getFillColor(element, defaultColor, overrideColor) {\n var di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi)(element);\n\n return overrideColor || di.get('color:background-color') || di.get('bioc:fill') || defaultColor || white;\n}\n\n/**\n * @param {Element} element\n * @param {string} [defaultColor]\n * @param {string} [overrideColor]\n *\n * @return {string}\n */\nfunction getStrokeColor(element, defaultColor, overrideColor) {\n var di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi)(element);\n\n return overrideColor || di.get('color:border-color') || di.get('bioc:stroke') || defaultColor || black;\n}\n\n/**\n * @param {Element} element\n * @param {string} [defaultColor]\n * @param {string} [defaultStrokeColor]\n * @param {string} [overrideColor]\n *\n * @return {string}\n */\nfunction getLabelColor(element, defaultColor, defaultStrokeColor, overrideColor) {\n var di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi)(element),\n label = di.get('label');\n\n return overrideColor || (label && label.get('color:color')) || defaultColor ||\n getStrokeColor(element, defaultStrokeColor);\n}\n\n// cropping path customizations //////////////////////\n\n/**\n * @param {ShapeLike} shape\n *\n * @return {string} path\n */\nfunction getCirclePath(shape) {\n\n var cx = shape.x + shape.width / 2,\n cy = shape.y + shape.height / 2,\n radius = shape.width / 2;\n\n var circlePath = [\n [ 'M', cx, cy ],\n [ 'm', 0, -radius ],\n [ 'a', radius, radius, 0, 1, 1, 0, 2 * radius ],\n [ 'a', radius, radius, 0, 1, 1, 0, -2 * radius ],\n [ 'z' ]\n ];\n\n return (0,diagram_js_lib_util_RenderUtil__WEBPACK_IMPORTED_MODULE_2__.componentsToPath)(circlePath);\n}\n\n/**\n * @param {ShapeLike} shape\n * @param {number} [borderRadius]\n *\n * @return {string} path\n */\nfunction getRoundRectPath(shape, borderRadius) {\n\n var x = shape.x,\n y = shape.y,\n width = shape.width,\n height = shape.height;\n\n var roundRectPath = [\n [ 'M', x + borderRadius, y ],\n [ 'l', width - borderRadius * 2, 0 ],\n [ 'a', borderRadius, borderRadius, 0, 0, 1, borderRadius, borderRadius ],\n [ 'l', 0, height - borderRadius * 2 ],\n [ 'a', borderRadius, borderRadius, 0, 0, 1, -borderRadius, borderRadius ],\n [ 'l', borderRadius * 2 - width, 0 ],\n [ 'a', borderRadius, borderRadius, 0, 0, 1, -borderRadius, -borderRadius ],\n [ 'l', 0, borderRadius * 2 - height ],\n [ 'a', borderRadius, borderRadius, 0, 0, 1, borderRadius, -borderRadius ],\n [ 'z' ]\n ];\n\n return (0,diagram_js_lib_util_RenderUtil__WEBPACK_IMPORTED_MODULE_2__.componentsToPath)(roundRectPath);\n}\n\n/**\n * @param {ShapeLike} shape\n *\n * @return {string} path\n */\nfunction getDiamondPath(shape) {\n\n var width = shape.width,\n height = shape.height,\n x = shape.x,\n y = shape.y,\n halfWidth = width / 2,\n halfHeight = height / 2;\n\n var diamondPath = [\n [ 'M', x + halfWidth, y ],\n [ 'l', halfWidth, halfHeight ],\n [ 'l', -halfWidth, halfHeight ],\n [ 'l', -halfWidth, -halfHeight ],\n [ 'z' ]\n ];\n\n return (0,diagram_js_lib_util_RenderUtil__WEBPACK_IMPORTED_MODULE_2__.componentsToPath)(diamondPath);\n}\n\n/**\n * @param {ShapeLike} shape\n *\n * @return {string} path\n */\nfunction getRectPath(shape) {\n var x = shape.x,\n y = shape.y,\n width = shape.width,\n height = shape.height;\n\n var rectPath = [\n [ 'M', x, y ],\n [ 'l', width, 0 ],\n [ 'l', 0, height ],\n [ 'l', -width, 0 ],\n [ 'z' ]\n ];\n\n return (0,diagram_js_lib_util_RenderUtil__WEBPACK_IMPORTED_MODULE_2__.componentsToPath)(rectPath);\n}\n\n/**\n * Get width and height from element or overrides.\n *\n * @param {Dimensions|Rect|ShapeLike} bounds\n * @param {Object} overrides\n *\n * @returns {Dimensions}\n */\nfunction getBounds(bounds, overrides = {}) {\n return {\n width: getWidth(bounds, overrides),\n height: getHeight(bounds, overrides)\n };\n}\n\n/**\n * Get width from element or overrides.\n *\n * @param {Dimensions|Rect|ShapeLike} bounds\n * @param {Object} overrides\n *\n * @returns {number}\n */\nfunction getWidth(bounds, overrides = {}) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.has)(overrides, 'width') ? overrides.width : bounds.width;\n}\n\n/**\n * Get height from element or overrides.\n *\n * @param {Dimensions|Rect|ShapeLike} bounds\n * @param {Object} overrides\n *\n * @returns {number}\n */\nfunction getHeight(bounds, overrides = {}) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.has)(overrides, 'height') ? overrides.height : bounds.height;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L0JwbW5SZW5kZXJVdGlsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR2tCOztBQUlTOztBQUlhOzs7QUFHeEM7QUFDQSxhQUFhLGtDQUFrQztBQUMvQyxhQUFhLDRCQUE0QjtBQUN6QztBQUNBLGFBQWEsOEJBQThCO0FBQzNDO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRUE7QUFJMkI7OztBQUdwQjtBQUNBOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLFNBQVMsOENBQUk7QUFDYjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCxXQUFXLHNEQUFLOztBQUVoQjtBQUNBOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLFdBQVcsc0RBQUs7O0FBRWhCO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLFdBQVcsc0RBQUs7QUFDaEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ087O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsZ0ZBQWdCO0FBQ3pCOztBQUVBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLGdGQUFnQjtBQUN6Qjs7QUFFQTtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLGdGQUFnQjtBQUN6Qjs7QUFFQTtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxnRkFBZ0I7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYTtBQUNiO0FBQ08seUNBQXlDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQkFBMkI7QUFDdEMsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYTtBQUNiO0FBQ08sd0NBQXdDO0FBQy9DLFNBQVMsNkNBQUc7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJCQUEyQjtBQUN0QyxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhO0FBQ2I7QUFDTyx5Q0FBeUM7QUFDaEQsU0FBUyw2Q0FBRztBQUNaIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9CcG1uUmVuZGVyVXRpbC5qcz9iMGYzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGhhcyxcbiAgc29tZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGdldERpXG59IGZyb20gJy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgY29tcG9uZW50c1RvUGF0aFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1JlbmRlclV0aWwnO1xuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vbW9kZWwnKS5Nb2RkbGVFbGVtZW50fSBNb2RkbGVFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9tb2RlbCcpLkVsZW1lbnR9IEVsZW1lbnRcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9tb2RlbCcpLlNoYXBlTGlrZX0gU2hhcGVMaWtlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLkRpbWVuc2lvbnN9IERpbWVuc2lvbnNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL3V0aWwvVHlwZXMnKS5SZWN0fSBSZWN0XG4gKi9cblxuLy8gcmUtZXhwb3J0IGZvciBjb21wYXRpYmlsaXR5XG5leHBvcnQge1xuICBnZXREaSxcbiAgZ2V0QnVzaW5lc3NPYmplY3QgYXMgZ2V0U2VtYW50aWNcbn0gZnJvbSAnLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5cbmV4cG9ydCB2YXIgYmxhY2sgPSAnaHNsKDIyNSwgMTAlLCAxNSUpJztcbmV4cG9ydCB2YXIgd2hpdGUgPSAnd2hpdGUnO1xuXG4vLyBlbGVtZW50IHV0aWxzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDaGVja3MgaWYgZXZlbnREZWZpbml0aW9uIG9mIHRoZSBnaXZlbiBlbGVtZW50IG1hdGNoZXMgd2l0aCBzZW1hbnRpYyB0eXBlLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudERlZmluaXRpb25UeXBlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZWRFdmVudChldmVudCwgZXZlbnREZWZpbml0aW9uVHlwZSkge1xuICByZXR1cm4gc29tZShldmVudC5ldmVudERlZmluaXRpb25zLCBmdW5jdGlvbihkZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIGRlZmluaXRpb24uJHR5cGUgPT09IGV2ZW50RGVmaW5pdGlvblR5cGU7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGVsZW1lbnQgaXMgYSB0aHJvdyBldmVudC5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGV2ZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGhyb3dFdmVudChldmVudCkge1xuICByZXR1cm4gKGV2ZW50LiR0eXBlID09PSAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykgfHwgKGV2ZW50LiR0eXBlID09PSAnYnBtbjpFbmRFdmVudCcpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGVsZW1lbnQgaXMgYSB0aHJvdyBldmVudC5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGRhdGFPYmplY3QgPSBlbGVtZW50LmRhdGFPYmplY3RSZWY7XG5cbiAgcmV0dXJuIGVsZW1lbnQuaXNDb2xsZWN0aW9uIHx8IChkYXRhT2JqZWN0ICYmIGRhdGFPYmplY3QuaXNDb2xsZWN0aW9uKTtcbn1cblxuXG4vLyBjb2xvciBhY2Nlc3MgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IFtkZWZhdWx0Q29sb3JdXG4gKiBAcGFyYW0ge3N0cmluZ30gW292ZXJyaWRlQ29sb3JdXG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRDb2xvciwgb3ZlcnJpZGVDb2xvcikge1xuICB2YXIgZGkgPSBnZXREaShlbGVtZW50KTtcblxuICByZXR1cm4gb3ZlcnJpZGVDb2xvciB8fCBkaS5nZXQoJ2NvbG9yOmJhY2tncm91bmQtY29sb3InKSB8fCBkaS5nZXQoJ2Jpb2M6ZmlsbCcpIHx8IGRlZmF1bHRDb2xvciB8fCB3aGl0ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdENvbG9yXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvdmVycmlkZUNvbG9yXVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRDb2xvciwgb3ZlcnJpZGVDb2xvcikge1xuICB2YXIgZGkgPSBnZXREaShlbGVtZW50KTtcblxuICByZXR1cm4gb3ZlcnJpZGVDb2xvciB8fCBkaS5nZXQoJ2NvbG9yOmJvcmRlci1jb2xvcicpIHx8IGRpLmdldCgnYmlvYzpzdHJva2UnKSB8fCBkZWZhdWx0Q29sb3IgfHwgYmxhY2s7XG59XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gW2RlZmF1bHRDb2xvcl1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFN0cm9rZUNvbG9yXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvdmVycmlkZUNvbG9yXVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsQ29sb3IoZWxlbWVudCwgZGVmYXVsdENvbG9yLCBkZWZhdWx0U3Ryb2tlQ29sb3IsIG92ZXJyaWRlQ29sb3IpIHtcbiAgdmFyIGRpID0gZ2V0RGkoZWxlbWVudCksXG4gICAgICBsYWJlbCA9IGRpLmdldCgnbGFiZWwnKTtcblxuICByZXR1cm4gb3ZlcnJpZGVDb2xvciB8fCAobGFiZWwgJiYgbGFiZWwuZ2V0KCdjb2xvcjpjb2xvcicpKSB8fCBkZWZhdWx0Q29sb3IgfHxcbiAgICBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IpO1xufVxuXG4vLyBjcm9wcGluZyBwYXRoIGN1c3RvbWl6YXRpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBAcGFyYW0ge1NoYXBlTGlrZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmNsZVBhdGgoc2hhcGUpIHtcblxuICB2YXIgY3ggPSBzaGFwZS54ICsgc2hhcGUud2lkdGggLyAyLFxuICAgICAgY3kgPSBzaGFwZS55ICsgc2hhcGUuaGVpZ2h0IC8gMixcbiAgICAgIHJhZGl1cyA9IHNoYXBlLndpZHRoIC8gMjtcblxuICB2YXIgY2lyY2xlUGF0aCA9IFtcbiAgICBbICdNJywgY3gsIGN5IF0sXG4gICAgWyAnbScsIDAsIC1yYWRpdXMgXSxcbiAgICBbICdhJywgcmFkaXVzLCByYWRpdXMsIDAsIDEsIDEsIDAsIDIgKiByYWRpdXMgXSxcbiAgICBbICdhJywgcmFkaXVzLCByYWRpdXMsIDAsIDEsIDEsIDAsIC0yICogcmFkaXVzIF0sXG4gICAgWyAneicgXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKGNpcmNsZVBhdGgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U2hhcGVMaWtlfSBzaGFwZVxuICogQHBhcmFtIHtudW1iZXJ9IFtib3JkZXJSYWRpdXNdXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZFJlY3RQYXRoKHNoYXBlLCBib3JkZXJSYWRpdXMpIHtcblxuICB2YXIgeCA9IHNoYXBlLngsXG4gICAgICB5ID0gc2hhcGUueSxcbiAgICAgIHdpZHRoID0gc2hhcGUud2lkdGgsXG4gICAgICBoZWlnaHQgPSBzaGFwZS5oZWlnaHQ7XG5cbiAgdmFyIHJvdW5kUmVjdFBhdGggPSBbXG4gICAgWyAnTScsIHggKyBib3JkZXJSYWRpdXMsIHkgXSxcbiAgICBbICdsJywgd2lkdGggLSBib3JkZXJSYWRpdXMgKiAyLCAwIF0sXG4gICAgWyAnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCBib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1cyBdLFxuICAgIFsgJ2wnLCAwLCBoZWlnaHQgLSBib3JkZXJSYWRpdXMgKiAyIF0sXG4gICAgWyAnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCAtYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXMgXSxcbiAgICBbICdsJywgYm9yZGVyUmFkaXVzICogMiAtIHdpZHRoLCAwIF0sXG4gICAgWyAnYScsIGJvcmRlclJhZGl1cywgYm9yZGVyUmFkaXVzLCAwLCAwLCAxLCAtYm9yZGVyUmFkaXVzLCAtYm9yZGVyUmFkaXVzIF0sXG4gICAgWyAnbCcsIDAsIGJvcmRlclJhZGl1cyAqIDIgLSBoZWlnaHQgXSxcbiAgICBbICdhJywgYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXMsIDAsIDAsIDEsIGJvcmRlclJhZGl1cywgLWJvcmRlclJhZGl1cyBdLFxuICAgIFsgJ3onIF1cbiAgXTtcblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChyb3VuZFJlY3RQYXRoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1NoYXBlTGlrZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpYW1vbmRQYXRoKHNoYXBlKSB7XG5cbiAgdmFyIHdpZHRoID0gc2hhcGUud2lkdGgsXG4gICAgICBoZWlnaHQgPSBzaGFwZS5oZWlnaHQsXG4gICAgICB4ID0gc2hhcGUueCxcbiAgICAgIHkgPSBzaGFwZS55LFxuICAgICAgaGFsZldpZHRoID0gd2lkdGggLyAyLFxuICAgICAgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG5cbiAgdmFyIGRpYW1vbmRQYXRoID0gW1xuICAgIFsgJ00nLCB4ICsgaGFsZldpZHRoLCB5IF0sXG4gICAgWyAnbCcsIGhhbGZXaWR0aCwgaGFsZkhlaWdodCBdLFxuICAgIFsgJ2wnLCAtaGFsZldpZHRoLCBoYWxmSGVpZ2h0IF0sXG4gICAgWyAnbCcsIC1oYWxmV2lkdGgsIC1oYWxmSGVpZ2h0IF0sXG4gICAgWyAneicgXVxuICBdO1xuXG4gIHJldHVybiBjb21wb25lbnRzVG9QYXRoKGRpYW1vbmRQYXRoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1NoYXBlTGlrZX0gc2hhcGVcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY3RQYXRoKHNoYXBlKSB7XG4gIHZhciB4ID0gc2hhcGUueCxcbiAgICAgIHkgPSBzaGFwZS55LFxuICAgICAgd2lkdGggPSBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodCA9IHNoYXBlLmhlaWdodDtcblxuICB2YXIgcmVjdFBhdGggPSBbXG4gICAgWyAnTScsIHgsIHkgXSxcbiAgICBbICdsJywgd2lkdGgsIDAgXSxcbiAgICBbICdsJywgMCwgaGVpZ2h0IF0sXG4gICAgWyAnbCcsIC13aWR0aCwgMCBdLFxuICAgIFsgJ3onIF1cbiAgXTtcblxuICByZXR1cm4gY29tcG9uZW50c1RvUGF0aChyZWN0UGF0aCk7XG59XG5cbi8qKlxuICogR2V0IHdpZHRoIGFuZCBoZWlnaHQgZnJvbSBlbGVtZW50IG9yIG92ZXJyaWRlcy5cbiAqXG4gKiBAcGFyYW0ge0RpbWVuc2lvbnN8UmVjdHxTaGFwZUxpa2V9IGJvdW5kc1xuICogQHBhcmFtIHtPYmplY3R9IG92ZXJyaWRlc1xuICpcbiAqIEByZXR1cm5zIHtEaW1lbnNpb25zfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm91bmRzKGJvdW5kcywgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogZ2V0V2lkdGgoYm91bmRzLCBvdmVycmlkZXMpLFxuICAgIGhlaWdodDogZ2V0SGVpZ2h0KGJvdW5kcywgb3ZlcnJpZGVzKVxuICB9O1xufVxuXG4vKipcbiAqIEdldCB3aWR0aCBmcm9tIGVsZW1lbnQgb3Igb3ZlcnJpZGVzLlxuICpcbiAqIEBwYXJhbSB7RGltZW5zaW9uc3xSZWN0fFNoYXBlTGlrZX0gYm91bmRzXG4gKiBAcGFyYW0ge09iamVjdH0gb3ZlcnJpZGVzXG4gKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdpZHRoKGJvdW5kcywgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIGhhcyhvdmVycmlkZXMsICd3aWR0aCcpID8gb3ZlcnJpZGVzLndpZHRoIDogYm91bmRzLndpZHRoO1xufVxuXG4vKipcbiAqIEdldCBoZWlnaHQgZnJvbSBlbGVtZW50IG9yIG92ZXJyaWRlcy5cbiAqXG4gKiBAcGFyYW0ge0RpbWVuc2lvbnN8UmVjdHxTaGFwZUxpa2V9IGJvdW5kc1xuICogQHBhcmFtIHtPYmplY3R9IG92ZXJyaWRlc1xuICpcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWlnaHQoYm91bmRzLCBvdmVycmlkZXMgPSB7fSkge1xuICByZXR1cm4gaGFzKG92ZXJyaWRlcywgJ2hlaWdodCcpID8gb3ZlcnJpZGVzLmhlaWdodCA6IGJvdW5kcy5oZWlnaHQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/BpmnRenderUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/BpmnRenderer.js":
/*!************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/BpmnRenderer.js ***!
\************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnRenderer)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_draw_BaseRenderer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/draw/BaseRenderer */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/draw/BaseRenderer.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var _BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./BpmnRenderUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_util_RenderUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! diagram-js/lib/util/RenderUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/RenderUtil.js\");\n/* harmony import */ var _BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BpmnRenderUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/BpmnRenderUtil.js\");\n/* harmony import */ var min_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! min-dom */ \"./node_modules/min-dom/dist/index.esm.js\");\n/* harmony import */ var tiny_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tiny-svg */ \"./node_modules/tiny-svg/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_util_SvgTransformUtil__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! diagram-js/lib/util/SvgTransformUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/SvgTransformUtil.js\");\n/* harmony import */ var ids__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ids */ \"./node_modules/ids/dist/index.esm.js\");\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\n\nvar rendererIds = new ids__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n\nvar ELEMENT_LABEL_DISTANCE = 10,\n INNER_OUTER_DIST = 3,\n PARTICIPANT_STROKE_WIDTH = 1.5,\n TASK_BORDER_RADIUS = 10;\n\nvar DEFAULT_OPACITY = 0.95,\n FULL_OPACITY = 1,\n LOW_OPACITY = 0.25;\n\n/**\n * @typedef { Partial<{\n * defaultFillColor: string,\n * defaultStrokeColor: string,\n * defaultLabelColor: string\n * }> } BpmnRendererConfig\n *\n * @typedef { Partial<{\n * fill: string,\n * stroke: string,\n * width: string,\n * height: string\n * }> } Attrs\n */\n\n/**\n * @typedef { import('../model/Types').Element } Element\n */\n\n/**\n * A renderer for BPMN elements\n *\n * @param {BpmnRendererConfig} config\n * @param {import('diagram-js/lib/core/EventBus').default} eventBus\n * @param {import('diagram-js/lib/draw/Styles').default} styles\n * @param {import('./PathMap').default} pathMap\n * @param {import('diagram-js/lib/core/Canvas').default} canvas\n * @param {import('./TextRenderer').default} textRenderer\n * @param {number} [priority]\n */\nfunction BpmnRenderer(\n config, eventBus, styles, pathMap,\n canvas, textRenderer, priority) {\n\n diagram_js_lib_draw_BaseRenderer__WEBPACK_IMPORTED_MODULE_1__[\"default\"].call(this, eventBus, priority);\n\n var defaultFillColor = config && config.defaultFillColor,\n defaultStrokeColor = config && config.defaultStrokeColor,\n defaultLabelColor = config && config.defaultLabelColor;\n\n var rendererId = rendererIds.next();\n\n var markers = {};\n\n function shapeStyle(attrs) {\n return styles.computeStyle(attrs, {\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n stroke: _BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.black,\n strokeWidth: 2,\n fill: 'white'\n });\n }\n\n function lineStyle(attrs) {\n return styles.computeStyle(attrs, [ 'no-fill' ], {\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n stroke: _BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.black,\n strokeWidth: 2\n });\n }\n\n function addMarker(id, options) {\n var {\n ref = { x: 0, y: 0 },\n scale = 1,\n element\n } = options;\n\n var marker = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('marker', {\n id: id,\n viewBox: '0 0 20 20',\n refX: ref.x,\n refY: ref.y,\n markerWidth: 20 * scale,\n markerHeight: 20 * scale,\n orient: 'auto'\n });\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(marker, element);\n\n var defs = (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.query)('defs', canvas._svg);\n\n if (!defs) {\n defs = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('defs');\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(canvas._svg, defs);\n }\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(defs, marker);\n\n markers[id] = marker;\n }\n\n function colorEscape(str) {\n\n // only allow characters and numbers\n return str.replace(/[^0-9a-zA-Z]+/g, '_');\n }\n\n function marker(type, fill, stroke) {\n var id = type + '-' + colorEscape(fill) + '-' + colorEscape(stroke) + '-' + rendererId;\n\n if (!markers[id]) {\n createMarker(id, type, fill, stroke);\n }\n\n return 'url(#' + id + ')';\n }\n\n function createMarker(id, type, fill, stroke) {\n\n if (type === 'sequenceflow-end') {\n var sequenceflowEnd = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('path', {\n d: 'M 1 5 L 11 10 L 1 15 Z',\n ...shapeStyle({\n fill: stroke,\n stroke: stroke,\n strokeWidth: 1\n })\n });\n\n addMarker(id, {\n element: sequenceflowEnd,\n ref: { x: 11, y: 10 },\n scale: 0.5\n });\n }\n\n if (type === 'messageflow-start') {\n var messageflowStart = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('circle', {\n cx: 6,\n cy: 6,\n r: 3.5,\n ...shapeStyle({\n fill,\n stroke: stroke,\n strokeWidth: 1,\n\n // fix for safari / chrome / firefox bug not correctly\n // resetting stroke dash array\n strokeDasharray: [ 10000, 1 ]\n })\n });\n\n addMarker(id, {\n element: messageflowStart,\n ref: { x: 6, y: 6 }\n });\n }\n\n if (type === 'messageflow-end') {\n var messageflowEnd = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('path', {\n d: 'm 1 5 l 0 -3 l 7 3 l -7 3 z',\n ...shapeStyle({\n fill,\n stroke: stroke,\n strokeWidth: 1,\n\n // fix for safari / chrome / firefox bug not correctly\n // resetting stroke dash array\n strokeDasharray: [ 10000, 1 ]\n })\n });\n\n addMarker(id, {\n element: messageflowEnd,\n ref: { x: 8.5, y: 5 }\n });\n }\n\n if (type === 'association-start') {\n var associationStart = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('path', {\n d: 'M 11 5 L 1 10 L 11 15',\n ...lineStyle({\n fill: 'none',\n stroke,\n strokeWidth: 1.5,\n\n // fix for safari / chrome / firefox bug not correctly\n // resetting stroke dash array\n strokeDasharray: [ 10000, 1 ]\n })\n });\n\n addMarker(id, {\n element: associationStart,\n ref: { x: 1, y: 10 },\n scale: 0.5\n });\n }\n\n if (type === 'association-end') {\n var associationEnd = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('path', {\n d: 'M 1 5 L 11 10 L 1 15',\n ...lineStyle({\n fill: 'none',\n stroke,\n strokeWidth: 1.5,\n\n // fix for safari / chrome / firefox bug not correctly\n // resetting stroke dash array\n strokeDasharray: [ 10000, 1 ]\n })\n });\n\n addMarker(id, {\n element: associationEnd,\n ref: { x: 11, y: 10 },\n scale: 0.5\n });\n }\n\n if (type === 'conditional-flow-marker') {\n var conditionalFlowMarker = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('path', {\n d: 'M 0 10 L 8 6 L 16 10 L 8 14 Z',\n ...shapeStyle({\n fill,\n stroke: stroke\n })\n });\n\n addMarker(id, {\n element: conditionalFlowMarker,\n ref: { x: -1, y: 10 },\n scale: 0.5\n });\n }\n\n if (type === 'conditional-default-flow-marker') {\n var defaultFlowMarker = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('path', {\n d: 'M 6 4 L 10 16',\n ...shapeStyle({\n stroke: stroke\n })\n });\n\n addMarker(id, {\n element: defaultFlowMarker,\n ref: { x: 0, y: 10 },\n scale: 0.5\n });\n }\n }\n\n function drawCircle(parentGfx, width, height, offset, attrs = {}) {\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_5__.isObject)(offset)) {\n attrs = offset;\n offset = 0;\n }\n\n offset = offset || 0;\n\n attrs = shapeStyle(attrs);\n\n var cx = width / 2,\n cy = height / 2;\n\n var circle = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('circle', {\n cx: cx,\n cy: cy,\n r: Math.round((width + height) / 4 - offset),\n ...attrs\n });\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(parentGfx, circle);\n\n return circle;\n }\n\n function drawRect(parentGfx, width, height, r, offset, attrs) {\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_5__.isObject)(offset)) {\n attrs = offset;\n offset = 0;\n }\n\n offset = offset || 0;\n\n attrs = shapeStyle(attrs);\n\n var rect = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('rect', {\n x: offset,\n y: offset,\n width: width - offset * 2,\n height: height - offset * 2,\n rx: r,\n ry: r,\n ...attrs\n });\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(parentGfx, rect);\n\n return rect;\n }\n\n function drawDiamond(parentGfx, width, height, attrs) {\n\n var x_2 = width / 2;\n var y_2 = height / 2;\n\n var points = [\n { x: x_2, y: 0 },\n { x: width, y: y_2 },\n { x: x_2, y: height },\n { x: 0, y: y_2 }\n ];\n\n var pointsString = points.map(function(point) {\n return point.x + ',' + point.y;\n }).join(' ');\n\n attrs = shapeStyle(attrs);\n\n var polygon = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('polygon', {\n ...attrs,\n points: pointsString\n });\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(parentGfx, polygon);\n\n return polygon;\n }\n\n /**\n * @param {SVGElement} parentGfx\n * @param {Point[]} waypoints\n * @param {any} attrs\n * @param {number} [radius]\n *\n * @return {SVGElement}\n */\n function drawLine(parentGfx, waypoints, attrs, radius) {\n attrs = lineStyle(attrs);\n\n var line = (0,diagram_js_lib_util_RenderUtil__WEBPACK_IMPORTED_MODULE_6__.createLine)(waypoints, attrs, radius);\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(parentGfx, line);\n\n return line;\n }\n\n /**\n * @param {SVGElement} parentGfx\n * @param {Point[]} waypoints\n * @param {any} attrs\n *\n * @return {SVGElement}\n */\n function drawConnectionSegments(parentGfx, waypoints, attrs) {\n return drawLine(parentGfx, waypoints, attrs, 5);\n }\n\n function drawPath(parentGfx, d, attrs) {\n attrs = lineStyle(attrs);\n\n var path = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.create)('path', {\n ...attrs,\n d\n });\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(parentGfx, path);\n\n return path;\n }\n\n function drawMarker(type, parentGfx, path, attrs) {\n return drawPath(parentGfx, path, (0,min_dash__WEBPACK_IMPORTED_MODULE_5__.assign)({ 'data-marker': type }, attrs));\n }\n\n function renderer(type) {\n return handlers[type];\n }\n\n function as(type) {\n return function(parentGfx, element, attrs) {\n return renderer(type)(parentGfx, element, attrs);\n };\n }\n\n var eventIconRenderers = {\n 'bpmn:MessageEventDefinition': function(parentGfx, element, attrs = {}, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_MESSAGE', {\n xScaleFactor: 0.9,\n yScaleFactor: 0.9,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.235,\n my: 0.315\n }\n });\n\n var fill = isThrowing\n ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill);\n\n var stroke = isThrowing\n ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill)\n : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke);\n\n var messagePath = drawPath(parentGfx, pathData, {\n fill,\n stroke,\n strokeWidth: 1\n });\n\n return messagePath;\n },\n 'bpmn:TimerEventDefinition': function(parentGfx, element, attrs = {}) {\n var circle = drawCircle(parentGfx, element.width, element.height, 0.2 * element.height, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 2\n });\n\n var pathData = pathMap.getScaledPath('EVENT_TIMER_WH', {\n xScaleFactor: 0.75,\n yScaleFactor: 0.75,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.5,\n my: 0.5\n }\n });\n\n drawPath(parentGfx, pathData, {\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 2\n });\n\n for (var i = 0; i < 12; i++) {\n var linePathData = pathMap.getScaledPath('EVENT_TIMER_LINE', {\n xScaleFactor: 0.75,\n yScaleFactor: 0.75,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.5,\n my: 0.5\n }\n });\n\n var width = element.width / 2,\n height = element.height / 2;\n\n drawPath(parentGfx, linePathData, {\n strokeWidth: 1,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n transform: 'rotate(' + (i * 30) + ',' + height + ',' + width + ')'\n });\n }\n\n return circle;\n },\n 'bpmn:EscalationEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_ESCALATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.5,\n my: 0.2\n }\n });\n\n var fill = isThrowing\n ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke)\n : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(event, defaultFillColor, attrs.fill);\n\n return drawPath(parentGfx, pathData, {\n fill,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n },\n 'bpmn:ConditionalEventDefinition': function(parentGfx, event, attrs = {}) {\n var pathData = pathMap.getScaledPath('EVENT_CONDITIONAL', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.5,\n my: 0.222\n }\n });\n\n return drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(event, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n },\n 'bpmn:LinkEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_LINK', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.57,\n my: 0.263\n }\n });\n\n var fill = isThrowing\n ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke)\n : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(event, defaultFillColor, attrs.fill);\n\n return drawPath(parentGfx, pathData, {\n fill,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n },\n 'bpmn:ErrorEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_ERROR', {\n xScaleFactor: 1.1,\n yScaleFactor: 1.1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.2,\n my: 0.722\n }\n });\n\n var fill = isThrowing\n ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke)\n : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(event, defaultFillColor, attrs.fill);\n\n return drawPath(parentGfx, pathData, {\n fill,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n },\n 'bpmn:CancelEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_CANCEL_45', {\n xScaleFactor: 1.0,\n yScaleFactor: 1.0,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.638,\n my: -0.055\n }\n });\n\n var fill = isThrowing ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke) : 'none';\n\n var path = drawPath(parentGfx, pathData, {\n fill,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n (0,diagram_js_lib_util_SvgTransformUtil__WEBPACK_IMPORTED_MODULE_7__.rotate)(path, 45);\n\n return path;\n },\n 'bpmn:CompensateEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_COMPENSATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.22,\n my: 0.5\n }\n });\n\n var fill = isThrowing\n ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke)\n : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(event, defaultFillColor, attrs.fill);\n\n return drawPath(parentGfx, pathData, {\n fill,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n },\n 'bpmn:SignalEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_SIGNAL', {\n xScaleFactor: 0.9,\n yScaleFactor: 0.9,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.5,\n my: 0.2\n }\n });\n\n var fill = isThrowing\n ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke)\n : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(event, defaultFillColor, attrs.fill);\n\n return drawPath(parentGfx, pathData, {\n strokeWidth: 1,\n fill,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke)\n });\n },\n 'bpmn:MultipleEventDefinition': function(parentGfx, event, attrs = {}, isThrowing) {\n var pathData = pathMap.getScaledPath('EVENT_MULTIPLE', {\n xScaleFactor: 1.1,\n yScaleFactor: 1.1,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.222,\n my: 0.36\n }\n });\n\n var fill = isThrowing\n ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke)\n : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(event, defaultFillColor, attrs.fill);\n\n return drawPath(parentGfx, pathData, {\n fill,\n strokeWidth: 1\n });\n },\n 'bpmn:ParallelMultipleEventDefinition': function(parentGfx, event, attrs = {}) {\n var pathData = pathMap.getScaledPath('EVENT_PARALLEL_MULTIPLE', {\n xScaleFactor: 1.2,\n yScaleFactor: 1.2,\n containerWidth: event.width,\n containerHeight: event.height,\n position: {\n mx: 0.458,\n my: 0.194\n }\n });\n\n return drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(event, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(event, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n },\n 'bpmn:TerminateEventDefinition': function(parentGfx, element, attrs = {}) {\n var circle = drawCircle(parentGfx, element.width, element.height, 8, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 4\n });\n\n return circle;\n }\n };\n\n function renderEventIcon(element, parentGfx, attrs = {}) {\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element),\n isThrowing = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isThrowEvent)(semantic);\n\n if (semantic.get('eventDefinitions') && semantic.get('eventDefinitions').length > 1) {\n if (semantic.get('parallelMultiple')) {\n return eventIconRenderers[ 'bpmn:ParallelMultipleEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n else {\n return eventIconRenderers[ 'bpmn:MultipleEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:MessageEventDefinition')) {\n return eventIconRenderers[ 'bpmn:MessageEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:TimerEventDefinition')) {\n return eventIconRenderers[ 'bpmn:TimerEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:ConditionalEventDefinition')) {\n return eventIconRenderers[ 'bpmn:ConditionalEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:SignalEventDefinition')) {\n return eventIconRenderers[ 'bpmn:SignalEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:EscalationEventDefinition')) {\n return eventIconRenderers[ 'bpmn:EscalationEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:LinkEventDefinition')) {\n return eventIconRenderers[ 'bpmn:LinkEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:ErrorEventDefinition')) {\n return eventIconRenderers[ 'bpmn:ErrorEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:CancelEventDefinition')) {\n return eventIconRenderers[ 'bpmn:CancelEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:CompensateEventDefinition')) {\n return eventIconRenderers[ 'bpmn:CompensateEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isTypedEvent)(semantic, 'bpmn:TerminateEventDefinition')) {\n return eventIconRenderers[ 'bpmn:TerminateEventDefinition' ](parentGfx, element, attrs, isThrowing);\n }\n\n return null;\n }\n\n var taskMarkerRenderers = {\n 'ParticipantMultiplicityMarker': function(parentGfx, element, attrs = {}) {\n var width = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n height = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs);\n\n var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: width,\n containerHeight: height,\n position: {\n mx: ((width / 2 - 6) / width),\n my: (height - 15) / height\n }\n });\n\n drawMarker('participant-multiplicity', parentGfx, markerPath, {\n strokeWidth: 2,\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n },\n 'SubProcessMarker': function(parentGfx, element, attrs = {}) {\n var markerRect = drawRect(parentGfx, 14, 14, 0, {\n strokeWidth: 1,\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n\n (0,diagram_js_lib_util_SvgTransformUtil__WEBPACK_IMPORTED_MODULE_7__.translate)(markerRect, element.width / 2 - 7.5, element.height - 20);\n\n var markerPath = pathMap.getScaledPath('MARKER_SUB_PROCESS', {\n xScaleFactor: 1.5,\n yScaleFactor: 1.5,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: (element.width / 2 - 7.5) / element.width,\n my: (element.height - 20) / element.height\n }\n });\n\n drawMarker('sub-process', parentGfx, markerPath, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n },\n 'ParallelMarker': function(parentGfx, element, attrs) {\n var width = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n height = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs);\n\n var markerPath = pathMap.getScaledPath('MARKER_PARALLEL', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: width,\n containerHeight: height,\n position: {\n mx: ((width / 2 + attrs.parallel) / width),\n my: (height - 20) / height\n }\n });\n\n drawMarker('parallel', parentGfx, markerPath, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n },\n 'SequentialMarker': function(parentGfx, element, attrs) {\n var markerPath = pathMap.getScaledPath('MARKER_SEQUENTIAL', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: ((element.width / 2 + attrs.seq) / element.width),\n my: (element.height - 19) / element.height\n }\n });\n\n drawMarker('sequential', parentGfx, markerPath, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n },\n 'CompensationMarker': function(parentGfx, element, attrs) {\n var markerMath = pathMap.getScaledPath('MARKER_COMPENSATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: ((element.width / 2 + attrs.compensation) / element.width),\n my: (element.height - 13) / element.height\n }\n });\n\n drawMarker('compensation', parentGfx, markerMath, {\n strokeWidth: 1,\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n },\n 'LoopMarker': function(parentGfx, element, attrs) {\n var width = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n height = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs);\n\n var markerPath = pathMap.getScaledPath('MARKER_LOOP', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: width,\n containerHeight: height,\n position: {\n mx: ((width / 2 + attrs.loop) / width),\n my: (height - 7) / height\n }\n });\n\n drawMarker('loop', parentGfx, markerPath, {\n strokeWidth: 1.5,\n fill: 'none',\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeMiterlimit: 0.5\n });\n },\n 'AdhocMarker': function(parentGfx, element, attrs) {\n var width = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n height = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs);\n\n var markerPath = pathMap.getScaledPath('MARKER_ADHOC', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: width,\n containerHeight: height,\n position: {\n mx: ((width / 2 + attrs.adhoc) / width),\n my: (height - 15) / height\n }\n });\n\n drawMarker('adhoc', parentGfx, markerPath, {\n strokeWidth: 1,\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n }\n };\n\n function renderTaskMarker(type, parentGfx, element, attrs) {\n taskMarkerRenderers[ type ](parentGfx, element, attrs);\n }\n\n function renderTaskMarkers(parentGfx, element, taskMarkers, attrs = {}) {\n attrs = {\n fill: attrs.fill,\n stroke: attrs.stroke,\n width: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n height: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs)\n };\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n var subprocess = taskMarkers && taskMarkers.includes('SubProcessMarker');\n\n if (subprocess) {\n attrs = {\n ...attrs,\n seq: -21,\n parallel: -22,\n compensation: -42,\n loop: -18,\n adhoc: 10\n };\n } else {\n attrs = {\n ...attrs,\n seq: -5,\n parallel: -6,\n compensation: -27,\n loop: 0,\n adhoc: 10\n };\n }\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_5__.forEach)(taskMarkers, function(marker) {\n renderTaskMarker(marker, parentGfx, element, attrs);\n });\n\n if (semantic.get('isForCompensation')) {\n renderTaskMarker('CompensationMarker', parentGfx, element, attrs);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(semantic, 'bpmn:AdHocSubProcess')) {\n renderTaskMarker('AdhocMarker', parentGfx, element, attrs);\n }\n\n var loopCharacteristics = semantic.get('loopCharacteristics'),\n isSequential = loopCharacteristics && loopCharacteristics.get('isSequential');\n\n if (loopCharacteristics) {\n\n if (isSequential === undefined) {\n renderTaskMarker('LoopMarker', parentGfx, element, attrs);\n }\n\n if (isSequential === false) {\n renderTaskMarker('ParallelMarker', parentGfx, element, attrs);\n }\n\n if (isSequential === true) {\n renderTaskMarker('SequentialMarker', parentGfx, element, attrs);\n }\n }\n }\n\n function renderLabel(parentGfx, label, attrs = {}) {\n attrs = (0,min_dash__WEBPACK_IMPORTED_MODULE_5__.assign)({\n size: {\n width: 100\n }\n }, attrs);\n\n var text = textRenderer.createText(label || '', attrs);\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.classes)(text).add('djs-label');\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.append)(parentGfx, text);\n\n return text;\n }\n\n function renderEmbeddedLabel(parentGfx, element, align, attrs = {}) {\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n var box = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getBounds)({\n x: element.x,\n y: element.y,\n width: element.width,\n height: element.height\n }, attrs);\n\n return renderLabel(parentGfx, semantic.name, {\n align,\n box,\n padding: 7,\n style: {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getLabelColor)(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)\n }\n });\n }\n\n function renderExternalLabel(parentGfx, element, attrs = {}) {\n var box = {\n width: 90,\n height: 30,\n x: element.width / 2 + element.x,\n y: element.height / 2 + element.y\n };\n\n return renderLabel(parentGfx, (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_9__.getLabel)(element), {\n box: box,\n fitBox: true,\n style: (0,min_dash__WEBPACK_IMPORTED_MODULE_5__.assign)(\n {},\n textRenderer.getExternalStyle(),\n {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getLabelColor)(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)\n }\n )\n });\n }\n\n function renderLaneLabel(parentGfx, text, element, attrs = {}) {\n var isHorizontalLane = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isHorizontal)(element);\n\n var textBox = renderLabel(parentGfx, text, {\n box: {\n height: 30,\n width: isHorizontalLane ? (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs) : (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n },\n align: 'center-middle',\n style: {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getLabelColor)(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)\n }\n });\n\n if (isHorizontalLane) {\n var top = -1 * (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs);\n (0,diagram_js_lib_util_SvgTransformUtil__WEBPACK_IMPORTED_MODULE_7__.transform)(textBox, 0, -top, 270);\n }\n }\n\n function renderActivity(parentGfx, element, attrs = {}) {\n var {\n width,\n height\n } = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getBounds)(element, attrs);\n\n return drawRect(parentGfx, width, height, TASK_BORDER_RADIUS, {\n ...attrs,\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n fillOpacity: DEFAULT_OPACITY,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n }\n\n function renderAssociation(parentGfx, element, attrs = {}) {\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n var fill = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke);\n\n if (semantic.get('associationDirection') === 'One' ||\n semantic.get('associationDirection') === 'Both') {\n attrs.markerEnd = marker('association-end', fill, stroke);\n }\n\n if (semantic.get('associationDirection') === 'Both') {\n attrs.markerStart = marker('association-start', fill, stroke);\n }\n\n attrs = pickAttrs(attrs, [\n 'markerStart',\n 'markerEnd'\n ]);\n\n return drawConnectionSegments(parentGfx, element.waypoints, {\n ...attrs,\n stroke,\n strokeDasharray: '0, 5'\n });\n }\n\n function renderDataObject(parentGfx, element, attrs = {}) {\n var fill = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke);\n\n var pathData = pathMap.getScaledPath('DATA_OBJECT_PATH', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.474,\n my: 0.296\n }\n });\n\n var dataObject = drawPath(parentGfx, pathData, {\n fill,\n fillOpacity: DEFAULT_OPACITY,\n stroke\n });\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.isCollection)(semantic)) {\n var collectionPathData = pathMap.getScaledPath('DATA_OBJECT_COLLECTION_PATH', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.33,\n my: (element.height - 18) / element.height\n }\n });\n\n drawPath(parentGfx, collectionPathData, {\n strokeWidth: 2,\n fill,\n stroke\n });\n }\n\n return dataObject;\n }\n\n function renderEvent(parentGfx, element, attrs = {}) {\n return drawCircle(parentGfx, element.width, element.height, {\n fillOpacity: DEFAULT_OPACITY,\n ...attrs,\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n }\n\n function renderGateway(parentGfx, element, attrs = {}) {\n return drawDiamond(parentGfx, element.width, element.height, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n fillOpacity: DEFAULT_OPACITY,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n }\n\n function renderLane(parentGfx, element, attrs = {}) {\n var lane = drawRect(parentGfx, (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs), (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs), 0, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n fillOpacity: attrs.fillOpacity || DEFAULT_OPACITY,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1.5\n });\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(semantic, 'bpmn:Lane')) {\n var text = semantic.get('name');\n\n renderLaneLabel(parentGfx, text, element, attrs);\n }\n\n return lane;\n }\n\n function renderSubProcess(parentGfx, element, attrs = {}) {\n var activity = renderActivity(parentGfx, element, attrs);\n\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isEventSubProcess)(element)) {\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.attr)(activity, {\n strokeDasharray: '0, 5.5',\n strokeWidth: 2.5\n });\n }\n\n var expanded = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isExpanded)(element);\n\n renderEmbeddedLabel(parentGfx, element, expanded ? 'center-top' : 'center-middle', attrs);\n\n if (expanded) {\n renderTaskMarkers(parentGfx, element, undefined, attrs);\n } else {\n renderTaskMarkers(parentGfx, element, [ 'SubProcessMarker' ], attrs);\n }\n\n return activity;\n }\n\n function renderTask(parentGfx, element, attrs = {}) {\n var activity = renderActivity(parentGfx, element, attrs);\n\n renderEmbeddedLabel(parentGfx, element, 'center-middle', attrs);\n\n renderTaskMarkers(parentGfx, element, undefined, attrs);\n\n return activity;\n }\n\n var handlers = this.handlers = {\n 'bpmn:AdHocSubProcess': function(parentGfx, element, attrs = {}) {\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isExpanded)(element)) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke',\n 'width',\n 'height'\n ]);\n } else {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n }\n\n return renderSubProcess(parentGfx, element, attrs);\n },\n 'bpmn:Association': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n return renderAssociation(parentGfx, element, attrs);\n },\n 'bpmn:BoundaryEvent': function(parentGfx, element, attrs = {}) {\n var { renderIcon = true } = attrs;\n\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element),\n cancelActivity = semantic.get('cancelActivity');\n\n attrs = {\n strokeWidth: 1.5,\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n fillOpacity: FULL_OPACITY,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n };\n\n if (!cancelActivity) {\n attrs.strokeDasharray = '6';\n }\n\n var event = renderEvent(parentGfx, element, attrs);\n\n drawCircle(parentGfx, element.width, element.height, INNER_OUTER_DIST, {\n ...attrs,\n fill: 'none'\n });\n\n if (renderIcon) {\n renderEventIcon(element, parentGfx, attrs);\n }\n\n return event;\n },\n 'bpmn:BusinessRuleTask': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var task = renderTask(parentGfx, element, attrs);\n\n var headerData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_MAIN', {\n abspos: {\n x: 8,\n y: 8\n }\n });\n\n var businessPath = drawPath(parentGfx, headerData);\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.attr)(businessPath, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n var headerPathData = pathMap.getScaledPath('TASK_TYPE_BUSINESS_RULE_HEADER', {\n abspos: {\n x: 8,\n y: 8\n }\n });\n\n var businessHeaderPath = drawPath(parentGfx, headerPathData);\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.attr)(businessHeaderPath, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n return task;\n },\n 'bpmn:CallActivity': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n return renderSubProcess(parentGfx, element, {\n strokeWidth: 5,\n ...attrs\n });\n },\n 'bpmn:ComplexGateway': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var gateway = renderGateway(parentGfx, element, attrs);\n\n var pathData = pathMap.getScaledPath('GATEWAY_COMPLEX', {\n xScaleFactor: 0.5,\n yScaleFactor:0.5,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.46,\n my: 0.26\n }\n });\n\n drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n return gateway;\n },\n 'bpmn:DataInput': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var arrowPathData = pathMap.getRawPath('DATA_ARROW');\n\n var dataObject = renderDataObject(parentGfx, element, attrs);\n\n drawPath(parentGfx, arrowPathData, {\n fill: 'none',\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n return dataObject;\n },\n 'bpmn:DataInputAssociation': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n return renderAssociation(parentGfx, element, {\n ...attrs,\n markerEnd: marker('association-end', (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill), (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke))\n });\n },\n 'bpmn:DataObject': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n return renderDataObject(parentGfx, element, attrs);\n },\n 'bpmn:DataObjectReference': as('bpmn:DataObject'),\n 'bpmn:DataOutput': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var arrowPathData = pathMap.getRawPath('DATA_ARROW');\n\n var dataObject = renderDataObject(parentGfx, element, attrs);\n\n drawPath(parentGfx, arrowPathData, {\n strokeWidth: 1,\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n\n return dataObject;\n },\n 'bpmn:DataOutputAssociation': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n return renderAssociation(parentGfx, element, {\n ...attrs,\n markerEnd: marker('association-end', (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill), (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke))\n });\n },\n 'bpmn:DataStoreReference': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var dataStorePath = pathMap.getScaledPath('DATA_STORE', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0,\n my: 0.133\n }\n });\n\n return drawPath(parentGfx, dataStorePath, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n fillOpacity: DEFAULT_OPACITY,\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 2\n });\n },\n 'bpmn:EndEvent': function(parentGfx, element, attrs = {}) {\n var { renderIcon = true } = attrs;\n\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var event = renderEvent(parentGfx, element, {\n ...attrs,\n strokeWidth: 4\n });\n\n if (renderIcon) {\n renderEventIcon(element, parentGfx, attrs);\n }\n\n return event;\n },\n 'bpmn:EventBasedGateway': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n var diamond = renderGateway(parentGfx, element, attrs);\n\n drawCircle(parentGfx, element.width, element.height, element.height * 0.20, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, 'none', attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n var type = semantic.get('eventGatewayType'),\n instantiate = !!semantic.get('instantiate');\n\n function drawEvent() {\n\n var pathData = pathMap.getScaledPath('GATEWAY_EVENT_BASED', {\n xScaleFactor: 0.18,\n yScaleFactor: 0.18,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.36,\n my: 0.44\n }\n });\n\n drawPath(parentGfx, pathData, {\n fill: 'none',\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 2\n });\n }\n\n if (type === 'Parallel') {\n var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {\n xScaleFactor: 0.4,\n yScaleFactor: 0.4,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.474,\n my: 0.296\n }\n });\n\n drawPath(parentGfx, pathData, {\n fill: 'none',\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n } else if (type === 'Exclusive') {\n if (!instantiate) {\n drawCircle(parentGfx, element.width, element.height, element.height * 0.26, {\n fill: 'none',\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n }\n\n drawEvent();\n }\n\n\n return diamond;\n },\n 'bpmn:ExclusiveGateway': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var gateway = renderGateway(parentGfx, element, attrs);\n\n var pathData = pathMap.getScaledPath('GATEWAY_EXCLUSIVE', {\n xScaleFactor: 0.4,\n yScaleFactor: 0.4,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.32,\n my: 0.3\n }\n });\n\n var di = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getDi)(element);\n\n if (di.get('isMarkerVisible')) {\n drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n }\n\n return gateway;\n },\n 'bpmn:Gateway': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n return renderGateway(parentGfx, element, attrs);\n },\n 'bpmn:Group': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke',\n 'width',\n 'height'\n ]);\n\n return drawRect(parentGfx, element.width, element.height, TASK_BORDER_RADIUS, {\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1.5,\n strokeDasharray: '10, 6, 0, 6',\n fill: 'none',\n pointerEvents: 'none',\n width: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n height: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs)\n });\n },\n 'bpmn:InclusiveGateway': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var gateway = renderGateway(parentGfx, element, attrs);\n\n drawCircle(parentGfx, element.width, element.height, element.height * 0.24, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 2.5\n });\n\n return gateway;\n },\n 'bpmn:IntermediateEvent': function(parentGfx, element, attrs = {}) {\n var { renderIcon = true } = attrs;\n\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var outer = renderEvent(parentGfx, element, {\n ...attrs,\n strokeWidth: 1.5\n });\n\n drawCircle(parentGfx, element.width, element.height, INNER_OUTER_DIST, {\n fill: 'none',\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1.5\n });\n\n if (renderIcon) {\n renderEventIcon(element, parentGfx, attrs);\n }\n\n return outer;\n },\n 'bpmn:IntermediateCatchEvent': as('bpmn:IntermediateEvent'),\n 'bpmn:IntermediateThrowEvent': as('bpmn:IntermediateEvent'),\n 'bpmn:Lane': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke',\n 'width',\n 'height'\n ]);\n\n return renderLane(parentGfx, element, {\n ...attrs,\n fillOpacity: LOW_OPACITY\n });\n },\n 'bpmn:ManualTask': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var task = renderTask(parentGfx, element, attrs);\n\n var pathData = pathMap.getScaledPath('TASK_TYPE_MANUAL', {\n abspos: {\n x: 17,\n y: 15\n }\n });\n\n drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 0.5\n });\n\n return task;\n },\n 'bpmn:MessageFlow': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element),\n di = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getDi)(element);\n\n var fill = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke);\n\n var path = drawConnectionSegments(parentGfx, element.waypoints, {\n markerEnd: marker('messageflow-end', fill, stroke),\n markerStart: marker('messageflow-start', fill, stroke),\n stroke,\n strokeDasharray: '10, 11',\n strokeWidth: 1.5\n });\n\n if (semantic.get('messageRef')) {\n var midPoint = path.getPointAtLength(path.getTotalLength() / 2);\n\n var markerPathData = pathMap.getScaledPath('MESSAGE_FLOW_MARKER', {\n abspos: {\n x: midPoint.x,\n y: midPoint.y\n }\n });\n\n var messageAttrs = {\n strokeWidth: 1\n };\n\n if (di.get('messageVisibleKind') === 'initiating') {\n messageAttrs.fill = fill;\n messageAttrs.stroke = stroke;\n } else {\n messageAttrs.fill = stroke;\n messageAttrs.stroke = fill;\n }\n\n var message = drawPath(parentGfx, markerPathData, messageAttrs);\n\n var messageRef = semantic.get('messageRef'),\n name = messageRef.get('name');\n\n var label = renderLabel(parentGfx, name, {\n align: 'center-top',\n fitBox: true,\n style: {\n fill: stroke\n }\n });\n\n var messageBounds = message.getBBox(),\n labelBounds = label.getBBox();\n\n var translateX = midPoint.x - labelBounds.width / 2,\n translateY = midPoint.y + messageBounds.height / 2 + ELEMENT_LABEL_DISTANCE;\n\n (0,diagram_js_lib_util_SvgTransformUtil__WEBPACK_IMPORTED_MODULE_7__.transform)(label, translateX, translateY, 0);\n }\n\n return path;\n },\n 'bpmn:ParallelGateway': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var diamond = renderGateway(parentGfx, element, attrs);\n\n var pathData = pathMap.getScaledPath('GATEWAY_PARALLEL', {\n xScaleFactor: 0.6,\n yScaleFactor: 0.6,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.46,\n my: 0.2\n }\n });\n\n drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n return diamond;\n },\n 'bpmn:Participant': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke',\n 'width',\n 'height'\n ]);\n\n var participant = renderLane(parentGfx, element, attrs);\n\n var expandedParticipant = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isExpanded)(element);\n var horizontalParticipant = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isHorizontal)(element);\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element),\n name = semantic.get('name');\n\n if (expandedParticipant) {\n var waypoints = horizontalParticipant ? [\n {\n x: 30,\n y: 0\n },\n {\n x: 30,\n y: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs)\n }\n ] : [\n {\n x: 0,\n y: 30\n },\n {\n x: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n y: 30\n }\n ];\n\n drawLine(parentGfx, waypoints, {\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: PARTICIPANT_STROKE_WIDTH\n });\n\n renderLaneLabel(parentGfx, name, element, attrs);\n } else {\n var bounds = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getBounds)(element, attrs);\n\n if (!horizontalParticipant) {\n bounds.height = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs);\n bounds.width = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs);\n }\n\n var textBox = renderLabel(parentGfx, name, {\n box: bounds,\n align: 'center-middle',\n style: {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getLabelColor)(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)\n }\n });\n\n if (!horizontalParticipant) {\n var top = -1 * (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs);\n (0,diagram_js_lib_util_SvgTransformUtil__WEBPACK_IMPORTED_MODULE_7__.transform)(textBox, 0, -top, 270);\n }\n }\n\n if (semantic.get('participantMultiplicity')) {\n renderTaskMarker('ParticipantMultiplicityMarker', parentGfx, element, attrs);\n }\n\n return participant;\n },\n 'bpmn:ReceiveTask' : function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n var task = renderTask(parentGfx, element, attrs);\n\n var pathData;\n\n if (semantic.get('instantiate')) {\n drawCircle(parentGfx, 28, 28, 20 * 0.22, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n pathData = pathMap.getScaledPath('TASK_TYPE_INSTANTIATING_SEND', {\n abspos: {\n x: 7.77,\n y: 9.52\n }\n });\n } else {\n pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {\n xScaleFactor: 0.9,\n yScaleFactor: 0.9,\n containerWidth: 21,\n containerHeight: 14,\n position: {\n mx: 0.3,\n my: 0.4\n }\n });\n }\n\n drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n return task;\n },\n 'bpmn:ScriptTask': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var task = renderTask(parentGfx, element, attrs);\n\n var pathData = pathMap.getScaledPath('TASK_TYPE_SCRIPT', {\n abspos: {\n x: 15,\n y: 20\n }\n });\n\n drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n return task;\n },\n 'bpmn:SendTask': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var task = renderTask(parentGfx, element, attrs);\n\n var pathData = pathMap.getScaledPath('TASK_TYPE_SEND', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: 21,\n containerHeight: 14,\n position: {\n mx: 0.285,\n my: 0.357\n }\n });\n\n drawPath(parentGfx, pathData, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n strokeWidth: 1\n });\n\n return task;\n },\n 'bpmn:SequenceFlow': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var fill = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke);\n\n var connection = drawConnectionSegments(parentGfx, element.waypoints, {\n markerEnd: marker('sequenceflow-end', fill, stroke),\n stroke\n });\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n var { source } = element;\n\n if (source) {\n var sourceSemantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(source);\n\n // conditional flow marker\n if (semantic.get('conditionExpression') && (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(sourceSemantic, 'bpmn:Activity')) {\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.attr)(connection, {\n markerStart: marker('conditional-flow-marker', fill, stroke)\n });\n }\n\n // default marker\n if (sourceSemantic.get('default') && ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(sourceSemantic, 'bpmn:Gateway') || (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(sourceSemantic, 'bpmn:Activity')) &&\n sourceSemantic.get('default') === semantic) {\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_3__.attr)(connection, {\n markerStart: marker('conditional-default-flow-marker', fill, stroke)\n });\n }\n }\n\n return connection;\n },\n 'bpmn:ServiceTask': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var task = renderTask(parentGfx, element, attrs);\n\n drawCircle(parentGfx, 10, 10, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: 'none',\n transform: 'translate(6, 6)'\n });\n\n var pathDataService1 = pathMap.getScaledPath('TASK_TYPE_SERVICE', {\n abspos: {\n x: 12,\n y: 18\n }\n });\n\n drawPath(parentGfx, pathDataService1, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n drawCircle(parentGfx, 10, 10, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: 'none',\n transform: 'translate(11, 10)'\n });\n\n var pathDataService2 = pathMap.getScaledPath('TASK_TYPE_SERVICE', {\n abspos: {\n x: 17,\n y: 22\n }\n });\n\n drawPath(parentGfx, pathDataService2, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1\n });\n\n return task;\n },\n 'bpmn:StartEvent': function(parentGfx, element, attrs = {}) {\n var { renderIcon = true } = attrs;\n\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element);\n\n if (!semantic.get('isInterrupting')) {\n attrs = {\n ...attrs,\n strokeDasharray: '6'\n };\n }\n\n var event = renderEvent(parentGfx, element, attrs);\n\n if (renderIcon) {\n renderEventIcon(element, parentGfx, attrs);\n }\n\n return event;\n },\n 'bpmn:SubProcess': function(parentGfx, element, attrs = {}) {\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isExpanded)(element)) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke',\n 'width',\n 'height'\n ]);\n } else {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n }\n\n return renderSubProcess(parentGfx, element, attrs);\n },\n 'bpmn:Task': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n return renderTask(parentGfx, element, attrs);\n },\n 'bpmn:TextAnnotation': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke',\n 'width',\n 'height'\n ]);\n\n var {\n width,\n height\n } = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getBounds)(element, attrs);\n\n var textElement = drawRect(parentGfx, width, height, 0, 0, {\n fill: 'none',\n stroke: 'none'\n });\n\n var textPathData = pathMap.getScaledPath('TEXT_ANNOTATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: width,\n containerHeight: height,\n position: {\n mx: 0.0,\n my: 0.0\n }\n });\n\n drawPath(parentGfx, textPathData, {\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke)\n });\n\n var semantic = (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.getBusinessObject)(element),\n text = semantic.get('text') || '';\n\n renderLabel(parentGfx, text, {\n align: 'left-top',\n box: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getBounds)(element, attrs),\n padding: 7,\n style: {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getLabelColor)(element, defaultLabelColor, defaultStrokeColor, attrs.stroke)\n }\n });\n\n return textElement;\n },\n 'bpmn:Transaction': function(parentGfx, element, attrs = {}) {\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isExpanded)(element)) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke',\n 'width',\n 'height'\n ]);\n } else {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n }\n\n var outer = renderSubProcess(parentGfx, element, {\n strokeWidth: 1.5,\n ...attrs\n });\n\n var innerAttrs = styles.style([ 'no-fill', 'no-events' ], {\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 1.5\n });\n\n var expanded = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isExpanded)(element);\n\n if (!expanded) {\n attrs = {};\n }\n\n drawRect(\n parentGfx,\n (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getWidth)(element, attrs),\n (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getHeight)(element, attrs),\n TASK_BORDER_RADIUS - INNER_OUTER_DIST,\n INNER_OUTER_DIST,\n innerAttrs\n );\n\n return outer;\n },\n 'bpmn:UserTask': function(parentGfx, element, attrs = {}) {\n attrs = pickAttrs(attrs, [\n 'fill',\n 'stroke'\n ]);\n\n var task = renderTask(parentGfx, element, attrs);\n\n var x = 15;\n var y = 12;\n\n var pathDataUser1 = pathMap.getScaledPath('TASK_TYPE_USER_1', {\n abspos: {\n x: x,\n y: y\n }\n });\n\n drawPath(parentGfx, pathDataUser1, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 0.5\n });\n\n var pathDataUser2 = pathMap.getScaledPath('TASK_TYPE_USER_2', {\n abspos: {\n x: x,\n y: y\n }\n });\n\n drawPath(parentGfx, pathDataUser2, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getFillColor)(element, defaultFillColor, attrs.fill),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 0.5\n });\n\n var pathDataUser3 = pathMap.getScaledPath('TASK_TYPE_USER_3', {\n abspos: {\n x: x,\n y: y\n }\n });\n\n drawPath(parentGfx, pathDataUser3, {\n fill: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n stroke: (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getStrokeColor)(element, defaultStrokeColor, attrs.stroke),\n strokeWidth: 0.5\n });\n\n return task;\n },\n 'label': function(parentGfx, element, attrs = {}) {\n return renderExternalLabel(parentGfx, element, attrs);\n }\n };\n\n // extension API, use at your own risk\n this._drawPath = drawPath;\n\n this._renderer = renderer;\n}\n\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(BpmnRenderer, diagram_js_lib_draw_BaseRenderer__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\nBpmnRenderer.$inject = [\n 'config.bpmnRenderer',\n 'eventBus',\n 'styles',\n 'pathMap',\n 'canvas',\n 'textRenderer'\n];\n\n\n/**\n * @param {Element} element\n *\n * @return {boolean}\n */\nBpmnRenderer.prototype.canRender = function(element) {\n return (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(element, 'bpmn:BaseElement');\n};\n\n/**\n * Draw shape into parentGfx.\n *\n * @param {SVGElement} parentGfx\n * @param {Element} element\n * @param {Attrs} [attrs]\n *\n * @return {SVGElement} mainGfx\n */\nBpmnRenderer.prototype.drawShape = function(parentGfx, element, attrs = {}) {\n var { type } = element;\n\n var handler = this._renderer(type);\n\n return handler(parentGfx, element, attrs);\n};\n\n/**\n * Draw connection into parentGfx.\n *\n * @param {SVGElement} parentGfx\n * @param {Element} element\n * @param {Attrs} [attrs]\n *\n * @return {SVGElement} mainGfx\n */\nBpmnRenderer.prototype.drawConnection = function(parentGfx, element, attrs = {}) {\n var { type } = element;\n\n var handler = this._renderer(type);\n\n return handler(parentGfx, element, attrs);\n};\n\n/**\n * Get shape path.\n *\n * @param {Element} element\n *\n * @return {string} path\n */\nBpmnRenderer.prototype.getShapePath = function(element) {\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(element, 'bpmn:Event')) {\n return (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getCirclePath)(element);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(element, 'bpmn:Activity')) {\n return (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getRoundRectPath)(element, TASK_BORDER_RADIUS);\n }\n\n if ((0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_8__.is)(element, 'bpmn:Gateway')) {\n return (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getDiamondPath)(element);\n }\n\n return (0,_BpmnRenderUtil__WEBPACK_IMPORTED_MODULE_2__.getRectPath)(element);\n};\n\n/**\n * Pick attributes if they exist.\n *\n * @param {Object} attrs\n * @param {string[]} keys\n *\n * @returns {Object}\n */\nfunction pickAttrs(attrs, keys = []) {\n return keys.reduce((pickedAttrs, key) => {\n if (attrs[ key ]) {\n pickedAttrs[ key ] = attrs[ key ];\n }\n\n return pickedAttrs;\n }, {});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L0JwbW5SZW5kZXJlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQXdDOztBQU10Qjs7QUFFMEM7O0FBTXBDOztBQUlHOztBQUlBOztBQUlhOztBQWtCZDs7QUFJVDs7QUFPQzs7QUFNNEI7O0FBRXhCOztBQUVtQjs7QUFFekMsc0JBQXNCLDJDQUFHOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJO0FBQ1I7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUk7QUFDUjs7QUFFQTtBQUNBLGNBQWMsbUNBQW1DO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CLFdBQVcsZ0RBQWdEO0FBQzNELFdBQVcsOENBQThDO0FBQ3pELFdBQVcsNkJBQTZCO0FBQ3hDLFdBQVcsOENBQThDO0FBQ3pELFdBQVcsa0NBQWtDO0FBQzdDLFdBQVcsUUFBUTtBQUNuQjtBQUNlO0FBQ2Y7QUFDQTs7QUFFQSxFQUFFLHdFQUFZOztBQUVkO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsa0RBQUs7QUFDbkI7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsa0RBQUs7QUFDbkI7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLGNBQWMsWUFBWTtBQUMxQjtBQUNBO0FBQ0EsTUFBTTs7QUFFTixpQkFBaUIsZ0RBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLElBQUksZ0RBQVM7O0FBRWIsZUFBZSw4Q0FBUTs7QUFFdkI7QUFDQSxhQUFhLGdEQUFTOztBQUV0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QUFDQSxNQUFNLG1EQUFFO0FBQ1IsV0FBVyw4REFBYTtBQUN4Qjs7QUFFQSxNQUFNLG1EQUFFO0FBQ1IsV0FBVyxpRUFBZ0I7QUFDM0I7O0FBRUEsTUFBTSxtREFBRTtBQUNSLFdBQVcsK0RBQWM7QUFDekI7O0FBRUEsU0FBUyw0REFBVztBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUcsSUFBSTtBQUNQIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9CcG1uUmVuZGVyZXIuanM/Mjc0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgZm9yRWFjaCxcbiAgaXNPYmplY3Rcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQmFzZVJlbmRlcmVyIGZyb20gJ2RpYWdyYW0tanMvbGliL2RyYXcvQmFzZVJlbmRlcmVyJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZCxcbiAgaXNIb3Jpem9udGFsLFxuICBpc0V2ZW50U3ViUHJvY2Vzc1xufSBmcm9tICcuLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldExhYmVsXG59IGZyb20gJy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNcbn0gZnJvbSAnLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVMaW5lXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvUmVuZGVyVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzVHlwZWRFdmVudCxcbiAgaXNUaHJvd0V2ZW50LFxuICBpc0NvbGxlY3Rpb24sXG4gIGdldEJvdW5kcyxcbiAgZ2V0RGksXG4gIGdldFNlbWFudGljLFxuICBnZXRDaXJjbGVQYXRoLFxuICBnZXRSb3VuZFJlY3RQYXRoLFxuICBnZXREaWFtb25kUGF0aCxcbiAgZ2V0UmVjdFBhdGgsXG4gIGdldEZpbGxDb2xvcixcbiAgZ2V0U3Ryb2tlQ29sb3IsXG4gIGdldExhYmVsQ29sb3IsXG4gIGdldEhlaWdodCxcbiAgZ2V0V2lkdGhcbn0gZnJvbSAnLi9CcG1uUmVuZGVyVXRpbCc7XG5cbmltcG9ydCB7XG4gIHF1ZXJ5IGFzIGRvbVF1ZXJ5XG59IGZyb20gJ21pbi1kb20nO1xuXG5pbXBvcnQge1xuICBhcHBlbmQgYXMgc3ZnQXBwZW5kLFxuICBhdHRyIGFzIHN2Z0F0dHIsXG4gIGNyZWF0ZSBhcyBzdmdDcmVhdGUsXG4gIGNsYXNzZXMgYXMgc3ZnQ2xhc3Nlc1xufSBmcm9tICd0aW55LXN2Zyc7XG5cbmltcG9ydCB7XG4gIHJvdGF0ZSxcbiAgdHJhbnNmb3JtLFxuICB0cmFuc2xhdGVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9TdmdUcmFuc2Zvcm1VdGlsJztcblxuaW1wb3J0IElkcyBmcm9tICdpZHMnO1xuXG5pbXBvcnQgeyBibGFjayB9IGZyb20gJy4vQnBtblJlbmRlclV0aWwnO1xuXG52YXIgcmVuZGVyZXJJZHMgPSBuZXcgSWRzKCk7XG5cbnZhciBFTEVNRU5UX0xBQkVMX0RJU1RBTkNFID0gMTAsXG4gICAgSU5ORVJfT1VURVJfRElTVCA9IDMsXG4gICAgUEFSVElDSVBBTlRfU1RST0tFX1dJRFRIID0gMS41LFxuICAgIFRBU0tfQk9SREVSX1JBRElVUyA9IDEwO1xuXG52YXIgREVGQVVMVF9PUEFDSVRZID0gMC45NSxcbiAgICBGVUxMX09QQUNJVFkgPSAxLFxuICAgIExPV19PUEFDSVRZID0gMC4yNTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7IFBhcnRpYWw8e1xuICogICBkZWZhdWx0RmlsbENvbG9yOiBzdHJpbmcsXG4gKiAgIGRlZmF1bHRTdHJva2VDb2xvcjogc3RyaW5nLFxuICogICBkZWZhdWx0TGFiZWxDb2xvcjogc3RyaW5nXG4gKiB9PiB9IEJwbW5SZW5kZXJlckNvbmZpZ1xuICpcbiAqIEB0eXBlZGVmIHsgUGFydGlhbDx7XG4gKiAgIGZpbGw6IHN0cmluZyxcbiAqICAgc3Ryb2tlOiBzdHJpbmcsXG4gKiAgIHdpZHRoOiBzdHJpbmcsXG4gKiAgIGhlaWdodDogc3RyaW5nXG4gKiB9PiB9IEF0dHJzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50IH0gRWxlbWVudFxuICovXG5cbi8qKlxuICogQSByZW5kZXJlciBmb3IgQlBNTiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSB7QnBtblJlbmRlcmVyQ29uZmlnfSBjb25maWdcbiAqIEBwYXJhbSB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gZXZlbnRCdXNcbiAqIEBwYXJhbSB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9kcmF3L1N0eWxlcycpLmRlZmF1bHR9IHN0eWxlc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vUGF0aE1hcCcpLmRlZmF1bHR9IHBhdGhNYXBcbiAqIEBwYXJhbSB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0NhbnZhcycpLmRlZmF1bHR9IGNhbnZhc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vVGV4dFJlbmRlcmVyJykuZGVmYXVsdH0gdGV4dFJlbmRlcmVyXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uUmVuZGVyZXIoXG4gICAgY29uZmlnLCBldmVudEJ1cywgc3R5bGVzLCBwYXRoTWFwLFxuICAgIGNhbnZhcywgdGV4dFJlbmRlcmVyLCBwcmlvcml0eSkge1xuXG4gIEJhc2VSZW5kZXJlci5jYWxsKHRoaXMsIGV2ZW50QnVzLCBwcmlvcml0eSk7XG5cbiAgdmFyIGRlZmF1bHRGaWxsQ29sb3IgPSBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRGaWxsQ29sb3IsXG4gICAgICBkZWZhdWx0U3Ryb2tlQ29sb3IgPSBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRTdHJva2VDb2xvcixcbiAgICAgIGRlZmF1bHRMYWJlbENvbG9yID0gY29uZmlnICYmIGNvbmZpZy5kZWZhdWx0TGFiZWxDb2xvcjtcblxuICB2YXIgcmVuZGVyZXJJZCA9IHJlbmRlcmVySWRzLm5leHQoKTtcblxuICB2YXIgbWFya2VycyA9IHt9O1xuXG4gIGZ1bmN0aW9uIHNoYXBlU3R5bGUoYXR0cnMpIHtcbiAgICByZXR1cm4gc3R5bGVzLmNvbXB1dGVTdHlsZShhdHRycywge1xuICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgIHN0cm9rZUxpbmVqb2luOiAncm91bmQnLFxuICAgICAgc3Ryb2tlOiBibGFjayxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgZmlsbDogJ3doaXRlJ1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbGluZVN0eWxlKGF0dHJzKSB7XG4gICAgcmV0dXJuIHN0eWxlcy5jb21wdXRlU3R5bGUoYXR0cnMsIFsgJ25vLWZpbGwnIF0sIHtcbiAgICAgIHN0cm9rZUxpbmVjYXA6ICdyb3VuZCcsXG4gICAgICBzdHJva2VMaW5lam9pbjogJ3JvdW5kJyxcbiAgICAgIHN0cm9rZTogYmxhY2ssXG4gICAgICBzdHJva2VXaWR0aDogMlxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkTWFya2VyKGlkLCBvcHRpb25zKSB7XG4gICAgdmFyIHtcbiAgICAgIHJlZiA9IHsgeDogMCwgeTogMCB9LFxuICAgICAgc2NhbGUgPSAxLFxuICAgICAgZWxlbWVudFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgdmFyIG1hcmtlciA9IHN2Z0NyZWF0ZSgnbWFya2VyJywge1xuICAgICAgaWQ6IGlkLFxuICAgICAgdmlld0JveDogJzAgMCAyMCAyMCcsXG4gICAgICByZWZYOiByZWYueCxcbiAgICAgIHJlZlk6IHJlZi55LFxuICAgICAgbWFya2VyV2lkdGg6IDIwICogc2NhbGUsXG4gICAgICBtYXJrZXJIZWlnaHQ6IDIwICogc2NhbGUsXG4gICAgICBvcmllbnQ6ICdhdXRvJ1xuICAgIH0pO1xuXG4gICAgc3ZnQXBwZW5kKG1hcmtlciwgZWxlbWVudCk7XG5cbiAgICB2YXIgZGVmcyA9IGRvbVF1ZXJ5KCdkZWZzJywgY2FudmFzLl9zdmcpO1xuXG4gICAgaWYgKCFkZWZzKSB7XG4gICAgICBkZWZzID0gc3ZnQ3JlYXRlKCdkZWZzJyk7XG5cbiAgICAgIHN2Z0FwcGVuZChjYW52YXMuX3N2ZywgZGVmcyk7XG4gICAgfVxuXG4gICAgc3ZnQXBwZW5kKGRlZnMsIG1hcmtlcik7XG5cbiAgICBtYXJrZXJzW2lkXSA9IG1hcmtlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbG9yRXNjYXBlKHN0cikge1xuXG4gICAgLy8gb25seSBhbGxvdyBjaGFyYWN0ZXJzIGFuZCBudW1iZXJzXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXjAtOWEtekEtWl0rL2csICdfJyk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrZXIodHlwZSwgZmlsbCwgc3Ryb2tlKSB7XG4gICAgdmFyIGlkID0gdHlwZSArICctJyArIGNvbG9yRXNjYXBlKGZpbGwpICsgJy0nICsgY29sb3JFc2NhcGUoc3Ryb2tlKSArICctJyArIHJlbmRlcmVySWQ7XG5cbiAgICBpZiAoIW1hcmtlcnNbaWRdKSB7XG4gICAgICBjcmVhdGVNYXJrZXIoaWQsIHR5cGUsIGZpbGwsIHN0cm9rZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICd1cmwoIycgKyBpZCArICcpJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1hcmtlcihpZCwgdHlwZSwgZmlsbCwgc3Ryb2tlKSB7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NlcXVlbmNlZmxvdy1lbmQnKSB7XG4gICAgICB2YXIgc2VxdWVuY2VmbG93RW5kID0gc3ZnQ3JlYXRlKCdwYXRoJywge1xuICAgICAgICBkOiAnTSAxIDUgTCAxMSAxMCBMIDEgMTUgWicsXG4gICAgICAgIC4uLnNoYXBlU3R5bGUoe1xuICAgICAgICAgIGZpbGw6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZSxcbiAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBzZXF1ZW5jZWZsb3dFbmQsXG4gICAgICAgIHJlZjogeyB4OiAxMSwgeTogMTAgfSxcbiAgICAgICAgc2NhbGU6IDAuNVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdtZXNzYWdlZmxvdy1zdGFydCcpIHtcbiAgICAgIHZhciBtZXNzYWdlZmxvd1N0YXJ0ID0gc3ZnQ3JlYXRlKCdjaXJjbGUnLCB7XG4gICAgICAgIGN4OiA2LFxuICAgICAgICBjeTogNixcbiAgICAgICAgcjogMy41LFxuICAgICAgICAuLi5zaGFwZVN0eWxlKHtcbiAgICAgICAgICBmaWxsLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuXG4gICAgICAgICAgLy8gZml4IGZvciBzYWZhcmkgLyBjaHJvbWUgLyBmaXJlZm94IGJ1ZyBub3QgY29ycmVjdGx5XG4gICAgICAgICAgLy8gcmVzZXR0aW5nIHN0cm9rZSBkYXNoIGFycmF5XG4gICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBbIDEwMDAwLCAxIF1cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogbWVzc2FnZWZsb3dTdGFydCxcbiAgICAgICAgcmVmOiB7IHg6IDYsIHk6IDYgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdtZXNzYWdlZmxvdy1lbmQnKSB7XG4gICAgICB2YXIgbWVzc2FnZWZsb3dFbmQgPSBzdmdDcmVhdGUoJ3BhdGgnLCB7XG4gICAgICAgIGQ6ICdtIDEgNSBsIDAgLTMgbCA3IDMgbCAtNyAzIHonLFxuICAgICAgICAuLi5zaGFwZVN0eWxlKHtcbiAgICAgICAgICBmaWxsLFxuICAgICAgICAgIHN0cm9rZTogc3Ryb2tlLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuXG4gICAgICAgICAgLy8gZml4IGZvciBzYWZhcmkgLyBjaHJvbWUgLyBmaXJlZm94IGJ1ZyBub3QgY29ycmVjdGx5XG4gICAgICAgICAgLy8gcmVzZXR0aW5nIHN0cm9rZSBkYXNoIGFycmF5XG4gICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBbIDEwMDAwLCAxIF1cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogbWVzc2FnZWZsb3dFbmQsXG4gICAgICAgIHJlZjogeyB4OiA4LjUsIHk6IDUgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdhc3NvY2lhdGlvbi1zdGFydCcpIHtcbiAgICAgIHZhciBhc3NvY2lhdGlvblN0YXJ0ID0gc3ZnQ3JlYXRlKCdwYXRoJywge1xuICAgICAgICBkOiAnTSAxMSA1IEwgMSAxMCBMIDExIDE1JyxcbiAgICAgICAgLi4ubGluZVN0eWxlKHtcbiAgICAgICAgICBmaWxsOiAnbm9uZScsXG4gICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLjUsXG5cbiAgICAgICAgICAvLyBmaXggZm9yIHNhZmFyaSAvIGNocm9tZSAvIGZpcmVmb3ggYnVnIG5vdCBjb3JyZWN0bHlcbiAgICAgICAgICAvLyByZXNldHRpbmcgc3Ryb2tlIGRhc2ggYXJyYXlcbiAgICAgICAgICBzdHJva2VEYXNoYXJyYXk6IFsgMTAwMDAsIDEgXVxuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBhc3NvY2lhdGlvblN0YXJ0LFxuICAgICAgICByZWY6IHsgeDogMSwgeTogMTAgfSxcbiAgICAgICAgc2NhbGU6IDAuNVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdhc3NvY2lhdGlvbi1lbmQnKSB7XG4gICAgICB2YXIgYXNzb2NpYXRpb25FbmQgPSBzdmdDcmVhdGUoJ3BhdGgnLCB7XG4gICAgICAgIGQ6ICdNIDEgNSBMIDExIDEwIEwgMSAxNScsXG4gICAgICAgIC4uLmxpbmVTdHlsZSh7XG4gICAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICBzdHJva2VXaWR0aDogMS41LFxuXG4gICAgICAgICAgLy8gZml4IGZvciBzYWZhcmkgLyBjaHJvbWUgLyBmaXJlZm94IGJ1ZyBub3QgY29ycmVjdGx5XG4gICAgICAgICAgLy8gcmVzZXR0aW5nIHN0cm9rZSBkYXNoIGFycmF5XG4gICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBbIDEwMDAwLCAxIF1cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogYXNzb2NpYXRpb25FbmQsXG4gICAgICAgIHJlZjogeyB4OiAxMSwgeTogMTAgfSxcbiAgICAgICAgc2NhbGU6IDAuNVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdjb25kaXRpb25hbC1mbG93LW1hcmtlcicpIHtcbiAgICAgIHZhciBjb25kaXRpb25hbEZsb3dNYXJrZXIgPSBzdmdDcmVhdGUoJ3BhdGgnLCB7XG4gICAgICAgIGQ6ICdNIDAgMTAgTCA4IDYgTCAxNiAxMCBMIDggMTQgWicsXG4gICAgICAgIC4uLnNoYXBlU3R5bGUoe1xuICAgICAgICAgIGZpbGwsXG4gICAgICAgICAgc3Ryb2tlOiBzdHJva2VcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuXG4gICAgICBhZGRNYXJrZXIoaWQsIHtcbiAgICAgICAgZWxlbWVudDogY29uZGl0aW9uYWxGbG93TWFya2VyLFxuICAgICAgICByZWY6IHsgeDogLTEsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnY29uZGl0aW9uYWwtZGVmYXVsdC1mbG93LW1hcmtlcicpIHtcbiAgICAgIHZhciBkZWZhdWx0Rmxvd01hcmtlciA9IHN2Z0NyZWF0ZSgncGF0aCcsIHtcbiAgICAgICAgZDogJ00gNiA0IEwgMTAgMTYnLFxuICAgICAgICAuLi5zaGFwZVN0eWxlKHtcbiAgICAgICAgICBzdHJva2U6IHN0cm9rZVxuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICAgIGFkZE1hcmtlcihpZCwge1xuICAgICAgICBlbGVtZW50OiBkZWZhdWx0Rmxvd01hcmtlcixcbiAgICAgICAgcmVmOiB7IHg6IDAsIHk6IDEwIH0sXG4gICAgICAgIHNjYWxlOiAwLjVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdDaXJjbGUocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCBvZmZzZXQsIGF0dHJzID0ge30pIHtcblxuICAgIGlmIChpc09iamVjdChvZmZzZXQpKSB7XG4gICAgICBhdHRycyA9IG9mZnNldDtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBhdHRycyA9IHNoYXBlU3R5bGUoYXR0cnMpO1xuXG4gICAgdmFyIGN4ID0gd2lkdGggLyAyLFxuICAgICAgICBjeSA9IGhlaWdodCAvIDI7XG5cbiAgICB2YXIgY2lyY2xlID0gc3ZnQ3JlYXRlKCdjaXJjbGUnLCB7XG4gICAgICBjeDogY3gsXG4gICAgICBjeTogY3ksXG4gICAgICByOiBNYXRoLnJvdW5kKCh3aWR0aCArIGhlaWdodCkgLyA0IC0gb2Zmc2V0KSxcbiAgICAgIC4uLmF0dHJzXG4gICAgfSk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCBjaXJjbGUpO1xuXG4gICAgcmV0dXJuIGNpcmNsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdSZWN0KHBhcmVudEdmeCwgd2lkdGgsIGhlaWdodCwgciwgb2Zmc2V0LCBhdHRycykge1xuXG4gICAgaWYgKGlzT2JqZWN0KG9mZnNldCkpIHtcbiAgICAgIGF0dHJzID0gb2Zmc2V0O1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGF0dHJzID0gc2hhcGVTdHlsZShhdHRycyk7XG5cbiAgICB2YXIgcmVjdCA9IHN2Z0NyZWF0ZSgncmVjdCcsIHtcbiAgICAgIHg6IG9mZnNldCxcbiAgICAgIHk6IG9mZnNldCxcbiAgICAgIHdpZHRoOiB3aWR0aCAtIG9mZnNldCAqIDIsXG4gICAgICBoZWlnaHQ6IGhlaWdodCAtIG9mZnNldCAqIDIsXG4gICAgICByeDogcixcbiAgICAgIHJ5OiByLFxuICAgICAgLi4uYXR0cnNcbiAgICB9KTtcblxuICAgIHN2Z0FwcGVuZChwYXJlbnRHZngsIHJlY3QpO1xuXG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3RGlhbW9uZChwYXJlbnRHZngsIHdpZHRoLCBoZWlnaHQsIGF0dHJzKSB7XG5cbiAgICB2YXIgeF8yID0gd2lkdGggLyAyO1xuICAgIHZhciB5XzIgPSBoZWlnaHQgLyAyO1xuXG4gICAgdmFyIHBvaW50cyA9IFtcbiAgICAgIHsgeDogeF8yLCB5OiAwIH0sXG4gICAgICB7IHg6IHdpZHRoLCB5OiB5XzIgfSxcbiAgICAgIHsgeDogeF8yLCB5OiBoZWlnaHQgfSxcbiAgICAgIHsgeDogMCwgeTogeV8yIH1cbiAgICBdO1xuXG4gICAgdmFyIHBvaW50c1N0cmluZyA9IHBvaW50cy5tYXAoZnVuY3Rpb24ocG9pbnQpIHtcbiAgICAgIHJldHVybiBwb2ludC54ICsgJywnICsgcG9pbnQueTtcbiAgICB9KS5qb2luKCcgJyk7XG5cbiAgICBhdHRycyA9IHNoYXBlU3R5bGUoYXR0cnMpO1xuXG4gICAgdmFyIHBvbHlnb24gPSBzdmdDcmVhdGUoJ3BvbHlnb24nLCB7XG4gICAgICAuLi5hdHRycyxcbiAgICAgIHBvaW50czogcG9pbnRzU3RyaW5nXG4gICAgfSk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCBwb2x5Z29uKTtcblxuICAgIHJldHVybiBwb2x5Z29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gcGFyZW50R2Z4XG4gICAqIEBwYXJhbSB7UG9pbnRbXX0gd2F5cG9pbnRzXG4gICAqIEBwYXJhbSB7YW55fSBhdHRyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1c11cbiAgICpcbiAgICogQHJldHVybiB7U1ZHRWxlbWVudH1cbiAgICovXG4gIGZ1bmN0aW9uIGRyYXdMaW5lKHBhcmVudEdmeCwgd2F5cG9pbnRzLCBhdHRycywgcmFkaXVzKSB7XG4gICAgYXR0cnMgPSBsaW5lU3R5bGUoYXR0cnMpO1xuXG4gICAgdmFyIGxpbmUgPSBjcmVhdGVMaW5lKHdheXBvaW50cywgYXR0cnMsIHJhZGl1cyk7XG5cbiAgICBzdmdBcHBlbmQocGFyZW50R2Z4LCBsaW5lKTtcblxuICAgIHJldHVybiBsaW5lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gcGFyZW50R2Z4XG4gICAqIEBwYXJhbSB7UG9pbnRbXX0gd2F5cG9pbnRzXG4gICAqIEBwYXJhbSB7YW55fSBhdHRyc1xuICAgKlxuICAgKiBAcmV0dXJuIHtTVkdFbGVtZW50fVxuICAgKi9cbiAgZnVuY3Rpb24gZHJhd0Nvbm5lY3Rpb25TZWdtZW50cyhwYXJlbnRHZngsIHdheXBvaW50cywgYXR0cnMpIHtcbiAgICByZXR1cm4gZHJhd0xpbmUocGFyZW50R2Z4LCB3YXlwb2ludHMsIGF0dHJzLCA1KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdQYXRoKHBhcmVudEdmeCwgZCwgYXR0cnMpIHtcbiAgICBhdHRycyA9IGxpbmVTdHlsZShhdHRycyk7XG5cbiAgICB2YXIgcGF0aCA9IHN2Z0NyZWF0ZSgncGF0aCcsIHtcbiAgICAgIC4uLmF0dHJzLFxuICAgICAgZFxuICAgIH0pO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgcGF0aCk7XG5cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdNYXJrZXIodHlwZSwgcGFyZW50R2Z4LCBwYXRoLCBhdHRycykge1xuICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGgsIGFzc2lnbih7ICdkYXRhLW1hcmtlcic6IHR5cGUgfSwgYXR0cnMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcmVyKHR5cGUpIHtcbiAgICByZXR1cm4gaGFuZGxlcnNbdHlwZV07XG4gIH1cblxuICBmdW5jdGlvbiBhcyh0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIHJldHVybiByZW5kZXJlcih0eXBlKShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGV2ZW50SWNvblJlbmRlcmVycyA9IHtcbiAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX01FU1NBR0UnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDAuOSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMjM1LFxuICAgICAgICAgIG15OiAwLjMxNVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nXG4gICAgICAgID8gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpXG4gICAgICAgIDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpO1xuXG4gICAgICB2YXIgc3Ryb2tlID0gaXNUaHJvd2luZ1xuICAgICAgICA/IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKVxuICAgICAgICA6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKTtcblxuICAgICAgdmFyIG1lc3NhZ2VQYXRoID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBmaWxsLFxuICAgICAgICBzdHJva2UsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG1lc3NhZ2VQYXRoO1xuICAgIH0sXG4gICAgJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIHZhciBjaXJjbGUgPSBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIDAuMiAqIGVsZW1lbnQuaGVpZ2h0LCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9USU1FUl9XSCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjc1LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgbXk6IDAuNVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDJcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgdmFyIGxpbmVQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfVElNRVJfTElORScsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNzUsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjc1LFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgICBteTogMC41XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgd2lkdGggPSBlbGVtZW50LndpZHRoIC8gMixcbiAgICAgICAgICAgIGhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0IC8gMjtcblxuICAgICAgICBkcmF3UGF0aChwYXJlbnRHZngsIGxpbmVQYXRoRGF0YSwge1xuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSgnICsgKGkgKiAzMCkgKyAnLCcgKyBoZWlnaHQgKyAnLCcgKyB3aWR0aCArICcpJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNpcmNsZTtcbiAgICB9LFxuICAgICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBhdHRycyA9IHt9LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0VTQ0FMQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgbXk6IDAuMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nXG4gICAgICAgID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgICAgICA6IGdldEZpbGxDb2xvcihldmVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIGZpbGwsXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0NPTkRJVElPTkFMJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC41LFxuICAgICAgICAgIG15OiAwLjIyMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGV2ZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpMaW5rRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgYXR0cnMgPSB7fSwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9MSU5LJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC41NyxcbiAgICAgICAgICBteTogMC4yNjNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBmaWxsID0gaXNUaHJvd2luZ1xuICAgICAgICA/IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSlcbiAgICAgICAgOiBnZXRGaWxsQ29sb3IoZXZlbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBldmVudCwgYXR0cnMgPSB7fSwgaXNUaHJvd2luZykge1xuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdFVkVOVF9FUlJPUicsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLjEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMS4xLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjIsXG4gICAgICAgICAgbXk6IDAuNzIyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmdcbiAgICAgICAgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpXG4gICAgICAgIDogZ2V0RmlsbENvbG9yKGV2ZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKTtcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBhdHRycyA9IHt9LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX0NBTkNFTF80NScsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLjAsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMS4wLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjYzOCxcbiAgICAgICAgICBteTogLTAuMDU1XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmcgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpIDogJ25vbmUnO1xuXG4gICAgICB2YXIgcGF0aCA9IGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgfSk7XG5cbiAgICAgIHJvdGF0ZShwYXRoLCA0NSk7XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG4gICAgJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGF0dHJzID0ge30sIGlzVGhyb3dpbmcpIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfQ09NUEVOU0FUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4yMixcbiAgICAgICAgICBteTogMC41XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmdcbiAgICAgICAgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpXG4gICAgICAgIDogZ2V0RmlsbENvbG9yKGV2ZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKTtcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbCxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBhdHRycyA9IHt9LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX1NJR05BTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAwLjksXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICBjb250YWluZXJXaWR0aDogZXZlbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZXZlbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjUsXG4gICAgICAgICAgbXk6IDAuMlxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGwgPSBpc1Rocm93aW5nXG4gICAgICAgID8gZ2V0U3Ryb2tlQ29sb3IoZXZlbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgICAgICA6IGdldEZpbGxDb2xvcihldmVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICBmaWxsLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46TXVsdGlwbGVFdmVudERlZmluaXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGV2ZW50LCBhdHRycyA9IHt9LCBpc1Rocm93aW5nKSB7XG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0VWRU5UX01VTFRJUExFJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEuMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLjEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBldmVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBldmVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMjIyLFxuICAgICAgICAgIG15OiAwLjM2XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZmlsbCA9IGlzVGhyb3dpbmdcbiAgICAgICAgPyBnZXRTdHJva2VDb2xvcihldmVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpXG4gICAgICAgIDogZ2V0RmlsbENvbG9yKGV2ZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKTtcblxuICAgICAgcmV0dXJuIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbCxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46UGFyYWxsZWxNdWx0aXBsZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZXZlbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnRVZFTlRfUEFSQUxMRUxfTVVMVElQTEUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS4yLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuMixcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGV2ZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGV2ZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC40NTgsXG4gICAgICAgICAgbXk6IDAuMTk0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZXZlbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGV2ZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdicG1uOlRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgdmFyIGNpcmNsZSA9IGRyYXdDaXJjbGUocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgOCwge1xuICAgICAgICBmaWxsOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogNFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjaXJjbGU7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlbmRlckV2ZW50SWNvbihlbGVtZW50LCBwYXJlbnRHZngsIGF0dHJzID0ge30pIHtcbiAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KSxcbiAgICAgICAgaXNUaHJvd2luZyA9IGlzVGhyb3dFdmVudChzZW1hbnRpYyk7XG5cbiAgICBpZiAoc2VtYW50aWMuZ2V0KCdldmVudERlZmluaXRpb25zJykgJiYgc2VtYW50aWMuZ2V0KCdldmVudERlZmluaXRpb25zJykubGVuZ3RoID4gMSkge1xuICAgICAgaWYgKHNlbWFudGljLmdldCgncGFyYWxsZWxNdWx0aXBsZScpKSB7XG4gICAgICAgIHJldHVybiBldmVudEljb25SZW5kZXJlcnNbICdicG1uOlBhcmFsbGVsTXVsdGlwbGVFdmVudERlZmluaXRpb24nIF0ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycywgaXNUaHJvd2luZyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50SWNvblJlbmRlcmVyc1sgJ2JwbW46TXVsdGlwbGVFdmVudERlZmluaXRpb24nIF0ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycywgaXNUaHJvd2luZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChzZW1hbnRpYywgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gZXZlbnRJY29uUmVuZGVyZXJzWyAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyBdKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoc2VtYW50aWMsICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiBldmVudEljb25SZW5kZXJlcnNbICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyBdKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoc2VtYW50aWMsICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJykpIHtcbiAgICAgIHJldHVybiBldmVudEljb25SZW5kZXJlcnNbICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyBdKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoc2VtYW50aWMsICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gZXZlbnRJY29uUmVuZGVyZXJzWyAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nIF0ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycywgaXNUaHJvd2luZyk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRFdmVudChzZW1hbnRpYywgJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gZXZlbnRJY29uUmVuZGVyZXJzWyAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyBdKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoc2VtYW50aWMsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIGV2ZW50SWNvblJlbmRlcmVyc1sgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicgXShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzLCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KHNlbWFudGljLCAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gZXZlbnRJY29uUmVuZGVyZXJzWyAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicgXShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzLCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KHNlbWFudGljLCAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIGV2ZW50SWNvblJlbmRlcmVyc1sgJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJyBdKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGVkRXZlbnQoc2VtYW50aWMsICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIGV2ZW50SWNvblJlbmRlcmVyc1sgJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbicgXShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzLCBpc1Rocm93aW5nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEV2ZW50KHNlbWFudGljLCAnYnBtbjpUZXJtaW5hdGVFdmVudERlZmluaXRpb24nKSkge1xuICAgICAgcmV0dXJuIGV2ZW50SWNvblJlbmRlcmVyc1sgJ2JwbW46VGVybWluYXRlRXZlbnREZWZpbml0aW9uJyBdKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMsIGlzVGhyb3dpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHRhc2tNYXJrZXJSZW5kZXJlcnMgPSB7XG4gICAgJ1BhcnRpY2lwYW50TXVsdGlwbGljaXR5TWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICB2YXIgd2lkdGggPSBnZXRXaWR0aChlbGVtZW50LCBhdHRycyksXG4gICAgICAgICAgaGVpZ2h0ID0gZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiB3aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6ICgod2lkdGggLyAyIC0gNikgLyB3aWR0aCksXG4gICAgICAgICAgbXk6IChoZWlnaHQgLSAxNSkgLyBoZWlnaHRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdNYXJrZXIoJ3BhcnRpY2lwYW50LW11bHRpcGxpY2l0eScsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnU3ViUHJvY2Vzc01hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgdmFyIG1hcmtlclJlY3QgPSBkcmF3UmVjdChwYXJlbnRHZngsIDE0LCAxNCwgMCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgICAgfSk7XG5cbiAgICAgIHRyYW5zbGF0ZShtYXJrZXJSZWN0LCBlbGVtZW50LndpZHRoIC8gMiAtIDcuNSwgZWxlbWVudC5oZWlnaHQgLSAyMCk7XG5cbiAgICAgIHZhciBtYXJrZXJQYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfU1VCX1BST0NFU1MnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMS41LFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEuNSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IChlbGVtZW50LndpZHRoIC8gMiAtIDcuNSkgLyBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAyMCkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd01hcmtlcignc3ViLXByb2Nlc3MnLCBwYXJlbnRHZngsIG1hcmtlclBhdGgsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnUGFyYWxsZWxNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICB2YXIgd2lkdGggPSBnZXRXaWR0aChlbGVtZW50LCBhdHRycyksXG4gICAgICAgICAgaGVpZ2h0ID0gZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9QQVJBTExFTCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiB3aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6ICgod2lkdGggLyAyICsgYXR0cnMucGFyYWxsZWwpIC8gd2lkdGgpLFxuICAgICAgICAgIG15OiAoaGVpZ2h0IC0gMjApIC8gaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdwYXJhbGxlbCcsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpXG4gICAgICB9KTtcbiAgICB9LFxuICAgICdTZXF1ZW50aWFsTWFya2VyJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9TRVFVRU5USUFMJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6ICgoZWxlbWVudC53aWR0aCAvIDIgKyBhdHRycy5zZXEpIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDE5KSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdzZXF1ZW50aWFsJywgcGFyZW50R2Z4LCBtYXJrZXJQYXRoLCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0NvbXBlbnNhdGlvbk1hcmtlcic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIHZhciBtYXJrZXJNYXRoID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdNQVJLRVJfQ09NUEVOU0FUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6ICgoZWxlbWVudC53aWR0aCAvIDIgKyBhdHRycy5jb21wZW5zYXRpb24pIC8gZWxlbWVudC53aWR0aCksXG4gICAgICAgICAgbXk6IChlbGVtZW50LmhlaWdodCAtIDEzKSAvIGVsZW1lbnQuaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdjb21wZW5zYXRpb24nLCBwYXJlbnRHZngsIG1hcmtlck1hdGgsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0xvb3BNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICB2YXIgd2lkdGggPSBnZXRXaWR0aChlbGVtZW50LCBhdHRycyksXG4gICAgICAgICAgaGVpZ2h0ID0gZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9MT09QJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IHdpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogKCh3aWR0aCAvIDIgKyBhdHRycy5sb29wKSAvIHdpZHRoKSxcbiAgICAgICAgICBteTogKGhlaWdodCAtIDcpIC8gaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdsb29wJywgcGFyZW50R2Z4LCBtYXJrZXJQYXRoLCB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjUsXG4gICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZU1pdGVybGltaXQ6IDAuNVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnQWRob2NNYXJrZXInOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICB2YXIgd2lkdGggPSBnZXRXaWR0aChlbGVtZW50LCBhdHRycyksXG4gICAgICAgICAgaGVpZ2h0ID0gZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIG1hcmtlclBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01BUktFUl9BREhPQycsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiB3aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6ICgod2lkdGggLyAyICsgYXR0cnMuYWRob2MpIC8gd2lkdGgpLFxuICAgICAgICAgIG15OiAoaGVpZ2h0IC0gMTUpIC8gaGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3TWFya2VyKCdhZGhvYycsIHBhcmVudEdmeCwgbWFya2VyUGF0aCwge1xuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlbmRlclRhc2tNYXJrZXIodHlwZSwgcGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycykge1xuICAgIHRhc2tNYXJrZXJSZW5kZXJlcnNbIHR5cGUgXShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlclRhc2tNYXJrZXJzKHBhcmVudEdmeCwgZWxlbWVudCwgdGFza01hcmtlcnMsIGF0dHJzID0ge30pIHtcbiAgICBhdHRycyA9IHtcbiAgICAgIGZpbGw6IGF0dHJzLmZpbGwsXG4gICAgICBzdHJva2U6IGF0dHJzLnN0cm9rZSxcbiAgICAgIHdpZHRoOiBnZXRXaWR0aChlbGVtZW50LCBhdHRycyksXG4gICAgICBoZWlnaHQ6IGdldEhlaWdodChlbGVtZW50LCBhdHRycylcbiAgICB9O1xuXG4gICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICB2YXIgc3VicHJvY2VzcyA9IHRhc2tNYXJrZXJzICYmIHRhc2tNYXJrZXJzLmluY2x1ZGVzKCdTdWJQcm9jZXNzTWFya2VyJyk7XG5cbiAgICBpZiAoc3VicHJvY2Vzcykge1xuICAgICAgYXR0cnMgPSB7XG4gICAgICAgIC4uLmF0dHJzLFxuICAgICAgICBzZXE6IC0yMSxcbiAgICAgICAgcGFyYWxsZWw6IC0yMixcbiAgICAgICAgY29tcGVuc2F0aW9uOiAtNDIsXG4gICAgICAgIGxvb3A6IC0xOCxcbiAgICAgICAgYWRob2M6IDEwXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRycyA9IHtcbiAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgIHNlcTogLTUsXG4gICAgICAgIHBhcmFsbGVsOiAtNixcbiAgICAgICAgY29tcGVuc2F0aW9uOiAtMjcsXG4gICAgICAgIGxvb3A6IDAsXG4gICAgICAgIGFkaG9jOiAxMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKHRhc2tNYXJrZXJzLCBmdW5jdGlvbihtYXJrZXIpIHtcbiAgICAgIHJlbmRlclRhc2tNYXJrZXIobWFya2VyLCBwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcbiAgICB9KTtcblxuICAgIGlmIChzZW1hbnRpYy5nZXQoJ2lzRm9yQ29tcGVuc2F0aW9uJykpIHtcbiAgICAgIHJlbmRlclRhc2tNYXJrZXIoJ0NvbXBlbnNhdGlvbk1hcmtlcicsIHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuICAgIH1cblxuICAgIGlmIChpcyhzZW1hbnRpYywgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJykpIHtcbiAgICAgIHJlbmRlclRhc2tNYXJrZXIoJ0FkaG9jTWFya2VyJywgcGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG4gICAgfVxuXG4gICAgdmFyIGxvb3BDaGFyYWN0ZXJpc3RpY3MgPSBzZW1hbnRpYy5nZXQoJ2xvb3BDaGFyYWN0ZXJpc3RpY3MnKSxcbiAgICAgICAgaXNTZXF1ZW50aWFsID0gbG9vcENoYXJhY3RlcmlzdGljcyAmJiBsb29wQ2hhcmFjdGVyaXN0aWNzLmdldCgnaXNTZXF1ZW50aWFsJyk7XG5cbiAgICBpZiAobG9vcENoYXJhY3RlcmlzdGljcykge1xuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVuZGVyVGFza01hcmtlcignTG9vcE1hcmtlcicsIHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsID09PSBmYWxzZSkge1xuICAgICAgICByZW5kZXJUYXNrTWFya2VyKCdQYXJhbGxlbE1hcmtlcicsIHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsID09PSB0cnVlKSB7XG4gICAgICAgIHJlbmRlclRhc2tNYXJrZXIoJ1NlcXVlbnRpYWxNYXJrZXInLCBwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJMYWJlbChwYXJlbnRHZngsIGxhYmVsLCBhdHRycyA9IHt9KSB7XG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgc2l6ZToge1xuICAgICAgICB3aWR0aDogMTAwXG4gICAgICB9XG4gICAgfSwgYXR0cnMpO1xuXG4gICAgdmFyIHRleHQgPSB0ZXh0UmVuZGVyZXIuY3JlYXRlVGV4dChsYWJlbCB8fCAnJywgYXR0cnMpO1xuXG4gICAgc3ZnQ2xhc3Nlcyh0ZXh0KS5hZGQoJ2Rqcy1sYWJlbCcpO1xuXG4gICAgc3ZnQXBwZW5kKHBhcmVudEdmeCwgdGV4dCk7XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckVtYmVkZGVkTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCBhbGlnbiwgYXR0cnMgPSB7fSkge1xuICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpO1xuXG4gICAgdmFyIGJveCA9IGdldEJvdW5kcyh7XG4gICAgICB4OiBlbGVtZW50LngsXG4gICAgICB5OiBlbGVtZW50LnksXG4gICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHRcbiAgICB9LCBhdHRycyk7XG5cbiAgICByZXR1cm4gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCBzZW1hbnRpYy5uYW1lLCB7XG4gICAgICBhbGlnbixcbiAgICAgIGJveCxcbiAgICAgIHBhZGRpbmc6IDcsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmaWxsOiBnZXRMYWJlbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRMYWJlbENvbG9yLCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckV4dGVybmFsTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgdmFyIGJveCA9IHtcbiAgICAgIHdpZHRoOiA5MCxcbiAgICAgIGhlaWdodDogMzAsXG4gICAgICB4OiBlbGVtZW50LndpZHRoIC8gMiArIGVsZW1lbnQueCxcbiAgICAgIHk6IGVsZW1lbnQuaGVpZ2h0IC8gMiArIGVsZW1lbnQueVxuICAgIH07XG5cbiAgICByZXR1cm4gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCBnZXRMYWJlbChlbGVtZW50KSwge1xuICAgICAgYm94OiBib3gsXG4gICAgICBmaXRCb3g6IHRydWUsXG4gICAgICBzdHlsZTogYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsU3R5bGUoKSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGw6IGdldExhYmVsQ29sb3IoZWxlbWVudCwgZGVmYXVsdExhYmVsQ29sb3IsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJMYW5lTGFiZWwocGFyZW50R2Z4LCB0ZXh0LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgdmFyIGlzSG9yaXpvbnRhbExhbmUgPSBpc0hvcml6b250YWwoZWxlbWVudCk7XG5cbiAgICB2YXIgdGV4dEJveCA9IHJlbmRlckxhYmVsKHBhcmVudEdmeCwgdGV4dCwge1xuICAgICAgYm94OiB7XG4gICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgIHdpZHRoOiBpc0hvcml6b250YWxMYW5lID8gZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKSA6IGdldFdpZHRoKGVsZW1lbnQsIGF0dHJzKSxcbiAgICAgIH0sXG4gICAgICBhbGlnbjogJ2NlbnRlci1taWRkbGUnLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZmlsbDogZ2V0TGFiZWxDb2xvcihlbGVtZW50LCBkZWZhdWx0TGFiZWxDb2xvciwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsTGFuZSkge1xuICAgICAgdmFyIHRvcCA9IC0xICogZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKTtcbiAgICAgIHRyYW5zZm9ybSh0ZXh0Qm94LCAwLCAtdG9wLCAyNzApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckFjdGl2aXR5KHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgIHZhciB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSBnZXRCb3VuZHMoZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgcmV0dXJuIGRyYXdSZWN0KHBhcmVudEdmeCwgd2lkdGgsIGhlaWdodCwgVEFTS19CT1JERVJfUkFESVVTLCB7XG4gICAgICAuLi5hdHRycyxcbiAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgIGZpbGxPcGFjaXR5OiBERUZBVUxUX09QQUNJVFksXG4gICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyQXNzb2NpYXRpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICB2YXIgZmlsbCA9IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpO1xuXG4gICAgaWYgKHNlbWFudGljLmdldCgnYXNzb2NpYXRpb25EaXJlY3Rpb24nKSA9PT0gJ09uZScgfHxcbiAgICAgICAgc2VtYW50aWMuZ2V0KCdhc3NvY2lhdGlvbkRpcmVjdGlvbicpID09PSAnQm90aCcpIHtcbiAgICAgIGF0dHJzLm1hcmtlckVuZCA9IG1hcmtlcignYXNzb2NpYXRpb24tZW5kJywgZmlsbCwgc3Ryb2tlKTtcbiAgICB9XG5cbiAgICBpZiAoc2VtYW50aWMuZ2V0KCdhc3NvY2lhdGlvbkRpcmVjdGlvbicpID09PSAnQm90aCcpIHtcbiAgICAgIGF0dHJzLm1hcmtlclN0YXJ0ID0gbWFya2VyKCdhc3NvY2lhdGlvbi1zdGFydCcsIGZpbGwsIHN0cm9rZSk7XG4gICAgfVxuXG4gICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICdtYXJrZXJTdGFydCcsXG4gICAgICAnbWFya2VyRW5kJ1xuICAgIF0pO1xuXG4gICAgcmV0dXJuIGRyYXdDb25uZWN0aW9uU2VnbWVudHMocGFyZW50R2Z4LCBlbGVtZW50LndheXBvaW50cywge1xuICAgICAgLi4uYXR0cnMsXG4gICAgICBzdHJva2UsXG4gICAgICBzdHJva2VEYXNoYXJyYXk6ICcwLCA1J1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyRGF0YU9iamVjdChwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICB2YXIgZmlsbCA9IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlID0gZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpO1xuXG4gICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdEQVRBX09CSkVDVF9QQVRIJywge1xuICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgbXg6IDAuNDc0LFxuICAgICAgICBteTogMC4yOTZcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBkYXRhT2JqZWN0ID0gZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgZmlsbCxcbiAgICAgIGZpbGxPcGFjaXR5OiBERUZBVUxUX09QQUNJVFksXG4gICAgICBzdHJva2VcbiAgICB9KTtcblxuICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpO1xuXG4gICAgaWYgKGlzQ29sbGVjdGlvbihzZW1hbnRpYykpIHtcbiAgICAgIHZhciBjb2xsZWN0aW9uUGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0RBVEFfT0JKRUNUX0NPTExFQ1RJT05fUEFUSCcsIHtcbiAgICAgICAgeFNjYWxlRmFjdG9yOiAxLFxuICAgICAgICB5U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjMzLFxuICAgICAgICAgIG15OiAoZWxlbWVudC5oZWlnaHQgLSAxOCkgLyBlbGVtZW50LmhlaWdodFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBjb2xsZWN0aW9uUGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgIGZpbGwsXG4gICAgICAgIHN0cm9rZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFPYmplY3Q7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJFdmVudChwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICByZXR1cm4gZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCB7XG4gICAgICBmaWxsT3BhY2l0eTogREVGQVVMVF9PUEFDSVRZLFxuICAgICAgLi4uYXR0cnMsXG4gICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksXG4gICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyR2F0ZXdheShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICByZXR1cm4gZHJhd0RpYW1vbmQocGFyZW50R2Z4LCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwge1xuICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgZmlsbE9wYWNpdHk6IERFRkFVTFRfT1BBQ0lUWSxcbiAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJMYW5lKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgIHZhciBsYW5lID0gZHJhd1JlY3QocGFyZW50R2Z4LCBnZXRXaWR0aChlbGVtZW50LCBhdHRycyksIGdldEhlaWdodChlbGVtZW50LCBhdHRycyksIDAsIHtcbiAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgIGZpbGxPcGFjaXR5OiBhdHRycy5maWxsT3BhY2l0eSB8fCBERUZBVUxUX09QQUNJVFksXG4gICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgIHN0cm9rZVdpZHRoOiAxLjVcbiAgICB9KTtcblxuICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpO1xuXG4gICAgaWYgKGlzKHNlbWFudGljLCAnYnBtbjpMYW5lJykpIHtcbiAgICAgIHZhciB0ZXh0ID0gc2VtYW50aWMuZ2V0KCduYW1lJyk7XG5cbiAgICAgIHJlbmRlckxhbmVMYWJlbChwYXJlbnRHZngsIHRleHQsIGVsZW1lbnQsIGF0dHJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFuZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlclN1YlByb2Nlc3MocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgdmFyIGFjdGl2aXR5ID0gcmVuZGVyQWN0aXZpdHkocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICBpZiAoaXNFdmVudFN1YlByb2Nlc3MoZWxlbWVudCkpIHtcbiAgICAgIHN2Z0F0dHIoYWN0aXZpdHksIHtcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnMCwgNS41JyxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIuNVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIGV4cGFuZGVkID0gaXNFeHBhbmRlZChlbGVtZW50KTtcblxuICAgIHJlbmRlckVtYmVkZGVkTGFiZWwocGFyZW50R2Z4LCBlbGVtZW50LCBleHBhbmRlZCA/ICdjZW50ZXItdG9wJyA6ICdjZW50ZXItbWlkZGxlJywgYXR0cnMpO1xuXG4gICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICByZW5kZXJUYXNrTWFya2VycyhwYXJlbnRHZngsIGVsZW1lbnQsIHVuZGVmaW5lZCwgYXR0cnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXJUYXNrTWFya2VycyhwYXJlbnRHZngsIGVsZW1lbnQsIFsgJ1N1YlByb2Nlc3NNYXJrZXInIF0sIGF0dHJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aXZpdHk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJUYXNrKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgIHZhciBhY3Rpdml0eSA9IHJlbmRlckFjdGl2aXR5KHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgcmVuZGVyRW1iZWRkZWRMYWJlbChwYXJlbnRHZngsIGVsZW1lbnQsICdjZW50ZXItbWlkZGxlJywgYXR0cnMpO1xuXG4gICAgcmVuZGVyVGFza01hcmtlcnMocGFyZW50R2Z4LCBlbGVtZW50LCB1bmRlZmluZWQsIGF0dHJzKTtcblxuICAgIHJldHVybiBhY3Rpdml0eTtcbiAgfVxuXG4gIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgJ2JwbW46QWRIb2NTdWJQcm9jZXNzJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBpZiAoaXNFeHBhbmRlZChlbGVtZW50KSkge1xuICAgICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAgICdmaWxsJyxcbiAgICAgICAgICAnc3Ryb2tlJyxcbiAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICdoZWlnaHQnXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgICAnZmlsbCcsXG4gICAgICAgICAgJ3N0cm9rZSdcbiAgICAgICAgXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZW5kZXJTdWJQcm9jZXNzKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuICAgIH0sXG4gICAgJ2JwbW46QXNzb2NpYXRpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ3N0cm9rZSdcbiAgICAgIF0pO1xuXG4gICAgICByZXR1cm4gcmVuZGVyQXNzb2NpYXRpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG4gICAgfSxcbiAgICAnYnBtbjpCb3VuZGFyeUV2ZW50JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICB2YXIgeyByZW5kZXJJY29uID0gdHJ1ZSB9ID0gYXR0cnM7XG5cbiAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ3N0cm9rZSdcbiAgICAgIF0pO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KSxcbiAgICAgICAgICBjYW5jZWxBY3Rpdml0eSA9IHNlbWFudGljLmdldCgnY2FuY2VsQWN0aXZpdHknKTtcblxuICAgICAgYXR0cnMgPSB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjUsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgZmlsbE9wYWNpdHk6IEZVTExfT1BBQ0lUWSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSlcbiAgICAgIH07XG5cbiAgICAgIGlmICghY2FuY2VsQWN0aXZpdHkpIHtcbiAgICAgICAgYXR0cnMuc3Ryb2tlRGFzaGFycmF5ID0gJzYnO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXZlbnQgPSByZW5kZXJFdmVudChwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBJTk5FUl9PVVRFUl9ESVNULCB7XG4gICAgICAgIC4uLmF0dHJzLFxuICAgICAgICBmaWxsOiAnbm9uZSdcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVuZGVySWNvbikge1xuICAgICAgICByZW5kZXJFdmVudEljb24oZWxlbWVudCwgcGFyZW50R2Z4LCBhdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuICAgICdicG1uOkJ1c2luZXNzUnVsZVRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ3N0cm9rZSdcbiAgICAgIF0pO1xuXG4gICAgICB2YXIgdGFzayA9IHJlbmRlclRhc2socGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHZhciBoZWFkZXJEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfQlVTSU5FU1NfUlVMRV9NQUlOJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiA4LFxuICAgICAgICAgIHk6IDhcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBidXNpbmVzc1BhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIGhlYWRlckRhdGEpO1xuXG4gICAgICBzdmdBdHRyKGJ1c2luZXNzUGF0aCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBoZWFkZXJQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfSEVBREVSJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiA4LFxuICAgICAgICAgIHk6IDhcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBidXNpbmVzc0hlYWRlclBhdGggPSBkcmF3UGF0aChwYXJlbnRHZngsIGhlYWRlclBhdGhEYXRhKTtcblxuICAgICAgc3ZnQXR0cihidXNpbmVzc0hlYWRlclBhdGgsIHtcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOkNhbGxBY3Rpdml0eSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiByZW5kZXJTdWJQcm9jZXNzKHBhcmVudEdmeCwgZWxlbWVudCwge1xuICAgICAgICBzdHJva2VXaWR0aDogNSxcbiAgICAgICAgLi4uYXR0cnNcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46Q29tcGxleEdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ3N0cm9rZSdcbiAgICAgIF0pO1xuXG4gICAgICB2YXIgZ2F0ZXdheSA9IHJlbmRlckdhdGV3YXkocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9DT01QTEVYJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOjAuNSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuNDYsXG4gICAgICAgICAgbXk6IDAuMjZcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZ2F0ZXdheTtcbiAgICB9LFxuICAgICdicG1uOkRhdGFJbnB1dCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHZhciBhcnJvd1BhdGhEYXRhID0gcGF0aE1hcC5nZXRSYXdQYXRoKCdEQVRBX0FSUk9XJyk7XG5cbiAgICAgIHZhciBkYXRhT2JqZWN0ID0gcmVuZGVyRGF0YU9iamVjdChwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBhcnJvd1BhdGhEYXRhLCB7XG4gICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGFPYmplY3Q7XG4gICAgfSxcbiAgICAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiByZW5kZXJBc3NvY2lhdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgIG1hcmtlckVuZDogbWFya2VyKCdhc3NvY2lhdGlvbi1lbmQnLCBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksIGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU9iamVjdCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiByZW5kZXJEYXRhT2JqZWN0KHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZSc6IGFzKCdicG1uOkRhdGFPYmplY3QnKSxcbiAgICAnYnBtbjpEYXRhT3V0cHV0JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIGFycm93UGF0aERhdGEgPSBwYXRoTWFwLmdldFJhd1BhdGgoJ0RBVEFfQVJST1cnKTtcblxuICAgICAgdmFyIGRhdGFPYmplY3QgPSByZW5kZXJEYXRhT2JqZWN0KHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICBkcmF3UGF0aChwYXJlbnRHZngsIGFycm93UGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSlcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YU9iamVjdDtcbiAgICB9LFxuICAgICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiByZW5kZXJBc3NvY2lhdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgIG1hcmtlckVuZDogbWFya2VyKCdhc3NvY2lhdGlvbi1lbmQnLCBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksIGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIGRhdGFTdG9yZVBhdGggPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0RBVEFfU1RPUkUnLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgY29udGFpbmVySGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMCxcbiAgICAgICAgICBteTogMC4xMzNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkcmF3UGF0aChwYXJlbnRHZngsIGRhdGFTdG9yZVBhdGgsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICBmaWxsT3BhY2l0eTogREVGQVVMVF9PUEFDSVRZLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDJcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46RW5kRXZlbnQnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIHZhciB7IHJlbmRlckljb24gPSB0cnVlIH0gPSBhdHRycztcblxuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHZhciBldmVudCA9IHJlbmRlckV2ZW50KHBhcmVudEdmeCwgZWxlbWVudCwge1xuICAgICAgICAuLi5hdHRycyxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDRcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVuZGVySWNvbikge1xuICAgICAgICByZW5kZXJFdmVudEljb24oZWxlbWVudCwgcGFyZW50R2Z4LCBhdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuICAgICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyR2F0ZXdheShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBlbGVtZW50LmhlaWdodCAqIDAuMjAsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsICdub25lJywgYXR0cnMuZmlsbCksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgfSk7XG5cbiAgICAgIHZhciB0eXBlID0gc2VtYW50aWMuZ2V0KCdldmVudEdhdGV3YXlUeXBlJyksXG4gICAgICAgICAgaW5zdGFudGlhdGUgPSAhIXNlbWFudGljLmdldCgnaW5zdGFudGlhdGUnKTtcblxuICAgICAgZnVuY3Rpb24gZHJhd0V2ZW50KCkge1xuXG4gICAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9FVkVOVF9CQVNFRCcsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuMTgsXG4gICAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjE4LFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG14OiAwLjM2LFxuICAgICAgICAgICAgbXk6IDAuNDRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgICBmaWxsOiAnbm9uZScsXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSAnUGFyYWxsZWwnKSB7XG4gICAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnR0FURVdBWV9QQVJBTExFTCcsIHtcbiAgICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNCxcbiAgICAgICAgICB5U2NhbGVGYWN0b3I6IDAuNCxcbiAgICAgICAgICBjb250YWluZXJXaWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICBteDogMC40NzQsXG4gICAgICAgICAgICBteTogMC4yOTZcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgICBmaWxsOiAnbm9uZScsXG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdFeGNsdXNpdmUnKSB7XG4gICAgICAgIGlmICghaW5zdGFudGlhdGUpIHtcbiAgICAgICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIGVsZW1lbnQuaGVpZ2h0ICogMC4yNiwge1xuICAgICAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZHJhd0V2ZW50KCk7XG4gICAgICB9XG5cblxuICAgICAgcmV0dXJuIGRpYW1vbmQ7XG4gICAgfSxcbiAgICAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIGdhdGV3YXkgPSByZW5kZXJHYXRld2F5KHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ0dBVEVXQVlfRVhDTFVTSVZFJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNCxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjQsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjMyLFxuICAgICAgICAgIG15OiAwLjNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBkaSA9IGdldERpKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoZGkuZ2V0KCdpc01hcmtlclZpc2libGUnKSkge1xuICAgICAgICBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhLCB7XG4gICAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ2F0ZXdheTtcbiAgICB9LFxuICAgICdicG1uOkdhdGV3YXknOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ3N0cm9rZSdcbiAgICAgIF0pO1xuXG4gICAgICByZXR1cm4gcmVuZGVyR2F0ZXdheShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcbiAgICB9LFxuICAgICdicG1uOkdyb3VwJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAnaGVpZ2h0J1xuICAgICAgXSk7XG5cbiAgICAgIHJldHVybiBkcmF3UmVjdChwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBUQVNLX0JPUkRFUl9SQURJVVMsIHtcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjUsXG4gICAgICAgIHN0cm9rZURhc2hhcnJheTogJzEwLCA2LCAwLCA2JyxcbiAgICAgICAgZmlsbDogJ25vbmUnLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgIHdpZHRoOiBnZXRXaWR0aChlbGVtZW50LCBhdHRycyksXG4gICAgICAgIGhlaWdodDogZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnYnBtbjpJbmNsdXNpdmVHYXRld2F5JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIGdhdGV3YXkgPSByZW5kZXJHYXRld2F5KHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIGVsZW1lbnQuaGVpZ2h0ICogMC4yNCwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMi41XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGdhdGV3YXk7XG4gICAgfSxcbiAgICAnYnBtbjpJbnRlcm1lZGlhdGVFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgdmFyIHsgcmVuZGVySWNvbiA9IHRydWUgfSA9IGF0dHJzO1xuXG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIG91dGVyID0gcmVuZGVyRXZlbnQocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIC4uLmF0dHJzLFxuICAgICAgICBzdHJva2VXaWR0aDogMS41XG4gICAgICB9KTtcblxuICAgICAgZHJhd0NpcmNsZShwYXJlbnRHZngsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCBJTk5FUl9PVVRFUl9ESVNULCB7XG4gICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVuZGVySWNvbikge1xuICAgICAgICByZW5kZXJFdmVudEljb24oZWxlbWVudCwgcGFyZW50R2Z4LCBhdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRlcjtcbiAgICB9LFxuICAgICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnOiBhcygnYnBtbjpJbnRlcm1lZGlhdGVFdmVudCcpLFxuICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnOiBhcygnYnBtbjpJbnRlcm1lZGlhdGVFdmVudCcpLFxuICAgICdicG1uOkxhbmUnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ3N0cm9rZScsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICdoZWlnaHQnXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuIHJlbmRlckxhbmUocGFyZW50R2Z4LCBlbGVtZW50LCB7XG4gICAgICAgIC4uLmF0dHJzLFxuICAgICAgICBmaWxsT3BhY2l0eTogTE9XX09QQUNJVFlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ2JwbW46TWFudWFsVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHZhciB0YXNrID0gcmVuZGVyVGFzayhwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfTUFOVUFMJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiAxNyxcbiAgICAgICAgICB5OiAxNVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YSwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMC41XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRhc2s7XG4gICAgfSxcbiAgICAnYnBtbjpNZXNzYWdlRmxvdyc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpLFxuICAgICAgICAgIGRpID0gZ2V0RGkoZWxlbWVudCk7XG5cbiAgICAgIHZhciBmaWxsID0gZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICAgIHN0cm9rZSA9IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKTtcblxuICAgICAgdmFyIHBhdGggPSBkcmF3Q29ubmVjdGlvblNlZ21lbnRzKHBhcmVudEdmeCwgZWxlbWVudC53YXlwb2ludHMsIHtcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ21lc3NhZ2VmbG93LWVuZCcsIGZpbGwsIHN0cm9rZSksXG4gICAgICAgIG1hcmtlclN0YXJ0OiBtYXJrZXIoJ21lc3NhZ2VmbG93LXN0YXJ0JywgZmlsbCwgc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlLFxuICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICcxMCwgMTEnLFxuICAgICAgICBzdHJva2VXaWR0aDogMS41XG4gICAgICB9KTtcblxuICAgICAgaWYgKHNlbWFudGljLmdldCgnbWVzc2FnZVJlZicpKSB7XG4gICAgICAgIHZhciBtaWRQb2ludCA9IHBhdGguZ2V0UG9pbnRBdExlbmd0aChwYXRoLmdldFRvdGFsTGVuZ3RoKCkgLyAyKTtcblxuICAgICAgICB2YXIgbWFya2VyUGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ01FU1NBR0VfRkxPV19NQVJLRVInLCB7XG4gICAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgICB4OiBtaWRQb2ludC54LFxuICAgICAgICAgICAgeTogbWlkUG9pbnQueVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIG1lc3NhZ2VBdHRycyA9IHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChkaS5nZXQoJ21lc3NhZ2VWaXNpYmxlS2luZCcpID09PSAnaW5pdGlhdGluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuZmlsbCA9IGZpbGw7XG4gICAgICAgICAgbWVzc2FnZUF0dHJzLnN0cm9rZSA9IHN0cm9rZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuZmlsbCA9IHN0cm9rZTtcbiAgICAgICAgICBtZXNzYWdlQXR0cnMuc3Ryb2tlID0gZmlsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtZXNzYWdlID0gZHJhd1BhdGgocGFyZW50R2Z4LCBtYXJrZXJQYXRoRGF0YSwgbWVzc2FnZUF0dHJzKTtcblxuICAgICAgICB2YXIgbWVzc2FnZVJlZiA9IHNlbWFudGljLmdldCgnbWVzc2FnZVJlZicpLFxuICAgICAgICAgICAgbmFtZSA9IG1lc3NhZ2VSZWYuZ2V0KCduYW1lJyk7XG5cbiAgICAgICAgdmFyIGxhYmVsID0gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCBuYW1lLCB7XG4gICAgICAgICAgYWxpZ246ICdjZW50ZXItdG9wJyxcbiAgICAgICAgICBmaXRCb3g6IHRydWUsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGZpbGw6IHN0cm9rZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIG1lc3NhZ2VCb3VuZHMgPSBtZXNzYWdlLmdldEJCb3goKSxcbiAgICAgICAgICAgIGxhYmVsQm91bmRzID0gbGFiZWwuZ2V0QkJveCgpO1xuXG4gICAgICAgIHZhciB0cmFuc2xhdGVYID0gbWlkUG9pbnQueCAtIGxhYmVsQm91bmRzLndpZHRoIC8gMixcbiAgICAgICAgICAgIHRyYW5zbGF0ZVkgPSBtaWRQb2ludC55ICsgbWVzc2FnZUJvdW5kcy5oZWlnaHQgLyAyICsgRUxFTUVOVF9MQUJFTF9ESVNUQU5DRTtcblxuICAgICAgICB0cmFuc2Zvcm0obGFiZWwsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVksIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9LFxuICAgICdicG1uOlBhcmFsbGVsR2F0ZXdheSc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHZhciBkaWFtb25kID0gcmVuZGVyR2F0ZXdheShwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdHQVRFV0FZX1BBUkFMTEVMJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDAuNixcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAwLjYsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjQ2LFxuICAgICAgICAgIG15OiAwLjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGlhbW9uZDtcbiAgICB9LFxuICAgICdicG1uOlBhcnRpY2lwYW50JzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAnaGVpZ2h0J1xuICAgICAgXSk7XG5cbiAgICAgIHZhciBwYXJ0aWNpcGFudCA9IHJlbmRlckxhbmUocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHZhciBleHBhbmRlZFBhcnRpY2lwYW50ID0gaXNFeHBhbmRlZChlbGVtZW50KTtcbiAgICAgIHZhciBob3Jpem9udGFsUGFydGljaXBhbnQgPSBpc0hvcml6b250YWwoZWxlbWVudCk7XG5cbiAgICAgIHZhciBzZW1hbnRpYyA9IGdldFNlbWFudGljKGVsZW1lbnQpLFxuICAgICAgICAgIG5hbWUgPSBzZW1hbnRpYy5nZXQoJ25hbWUnKTtcblxuICAgICAgaWYgKGV4cGFuZGVkUGFydGljaXBhbnQpIHtcbiAgICAgICAgdmFyIHdheXBvaW50cyA9IGhvcml6b250YWxQYXJ0aWNpcGFudCA/IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAzMCxcbiAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IDMwLFxuICAgICAgICAgICAgeTogZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKVxuICAgICAgICAgIH1cbiAgICAgICAgXSA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgeTogMzBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHg6IGdldFdpZHRoKGVsZW1lbnQsIGF0dHJzKSxcbiAgICAgICAgICAgIHk6IDMwXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuXG4gICAgICAgIGRyYXdMaW5lKHBhcmVudEdmeCwgd2F5cG9pbnRzLCB7XG4gICAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IFBBUlRJQ0lQQU5UX1NUUk9LRV9XSURUSFxuICAgICAgICB9KTtcblxuICAgICAgICByZW5kZXJMYW5lTGFiZWwocGFyZW50R2Z4LCBuYW1lLCBlbGVtZW50LCBhdHRycyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYm91bmRzID0gZ2V0Qm91bmRzKGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgICBpZiAoIWhvcml6b250YWxQYXJ0aWNpcGFudCkge1xuICAgICAgICAgIGJvdW5kcy5oZWlnaHQgPSBnZXRXaWR0aChlbGVtZW50LCBhdHRycyk7XG4gICAgICAgICAgYm91bmRzLndpZHRoID0gZ2V0SGVpZ2h0KGVsZW1lbnQsIGF0dHJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0Qm94ID0gcmVuZGVyTGFiZWwocGFyZW50R2Z4LCBuYW1lLCB7XG4gICAgICAgICAgYm94OiBib3VuZHMsXG4gICAgICAgICAgYWxpZ246ICdjZW50ZXItbWlkZGxlJyxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZmlsbDogZ2V0TGFiZWxDb2xvcihlbGVtZW50LCBkZWZhdWx0TGFiZWxDb2xvciwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWhvcml6b250YWxQYXJ0aWNpcGFudCkge1xuICAgICAgICAgIHZhciB0b3AgPSAtMSAqIGdldEhlaWdodChlbGVtZW50LCBhdHRycyk7XG4gICAgICAgICAgdHJhbnNmb3JtKHRleHRCb3gsIDAsIC10b3AsIDI3MCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNlbWFudGljLmdldCgncGFydGljaXBhbnRNdWx0aXBsaWNpdHknKSkge1xuICAgICAgICByZW5kZXJUYXNrTWFya2VyKCdQYXJ0aWNpcGFudE11bHRpcGxpY2l0eU1hcmtlcicsIHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydGljaXBhbnQ7XG4gICAgfSxcbiAgICAnYnBtbjpSZWNlaXZlVGFzaycgOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ3N0cm9rZSdcbiAgICAgIF0pO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgdmFyIHRhc2sgPSByZW5kZXJUYXNrKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICB2YXIgcGF0aERhdGE7XG5cbiAgICAgIGlmIChzZW1hbnRpYy5nZXQoJ2luc3RhbnRpYXRlJykpIHtcbiAgICAgICAgZHJhd0NpcmNsZShwYXJlbnRHZngsIDI4LCAyOCwgMjAgKiAwLjIyLCB7XG4gICAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfSU5TVEFOVElBVElOR19TRU5EJywge1xuICAgICAgICAgIGFic3Bvczoge1xuICAgICAgICAgICAgeDogNy43NyxcbiAgICAgICAgICAgIHk6IDkuNTJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRU5EJywge1xuICAgICAgICAgIHhTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICAgIHlTY2FsZUZhY3RvcjogMC45LFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiAyMSxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQ6IDE0LFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICBteDogMC4zLFxuICAgICAgICAgICAgbXk6IDAuNFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlNjcmlwdFRhc2snOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ3N0cm9rZSdcbiAgICAgIF0pO1xuXG4gICAgICB2YXIgdGFzayA9IHJlbmRlclRhc2socGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG5cbiAgICAgIHZhciBwYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NDUklQVCcsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTUsXG4gICAgICAgICAgeTogMjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlNlbmRUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIHRhc2sgPSByZW5kZXJUYXNrKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICB2YXIgcGF0aERhdGEgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9TRU5EJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IDIxLFxuICAgICAgICBjb250YWluZXJIZWlnaHQ6IDE0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjI4NSxcbiAgICAgICAgICBteTogMC4zNTdcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGEsIHtcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGFzaztcbiAgICB9LFxuICAgICdicG1uOlNlcXVlbmNlRmxvdyc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHZhciBmaWxsID0gZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICAgIHN0cm9rZSA9IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKTtcblxuICAgICAgdmFyIGNvbm5lY3Rpb24gPSBkcmF3Q29ubmVjdGlvblNlZ21lbnRzKHBhcmVudEdmeCwgZWxlbWVudC53YXlwb2ludHMsIHtcbiAgICAgICAgbWFya2VyRW5kOiBtYXJrZXIoJ3NlcXVlbmNlZmxvdy1lbmQnLCBmaWxsLCBzdHJva2UpLFxuICAgICAgICBzdHJva2VcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KTtcblxuICAgICAgdmFyIHsgc291cmNlIH0gPSBlbGVtZW50O1xuXG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIHZhciBzb3VyY2VTZW1hbnRpYyA9IGdldFNlbWFudGljKHNvdXJjZSk7XG5cbiAgICAgICAgLy8gY29uZGl0aW9uYWwgZmxvdyBtYXJrZXJcbiAgICAgICAgaWYgKHNlbWFudGljLmdldCgnY29uZGl0aW9uRXhwcmVzc2lvbicpICYmIGlzKHNvdXJjZVNlbWFudGljLCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgICAgICAgc3ZnQXR0cihjb25uZWN0aW9uLCB7XG4gICAgICAgICAgICBtYXJrZXJTdGFydDogbWFya2VyKCdjb25kaXRpb25hbC1mbG93LW1hcmtlcicsIGZpbGwsIHN0cm9rZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlZmF1bHQgbWFya2VyXG4gICAgICAgIGlmIChzb3VyY2VTZW1hbnRpYy5nZXQoJ2RlZmF1bHQnKSAmJiAoaXMoc291cmNlU2VtYW50aWMsICdicG1uOkdhdGV3YXknKSB8fCBpcyhzb3VyY2VTZW1hbnRpYywgJ2JwbW46QWN0aXZpdHknKSkgJiZcbiAgICAgICAgICAgIHNvdXJjZVNlbWFudGljLmdldCgnZGVmYXVsdCcpID09PSBzZW1hbnRpYykge1xuICAgICAgICAgIHN2Z0F0dHIoY29ubmVjdGlvbiwge1xuICAgICAgICAgICAgbWFya2VyU3RhcnQ6IG1hcmtlcignY29uZGl0aW9uYWwtZGVmYXVsdC1mbG93LW1hcmtlcicsIGZpbGwsIHN0cm9rZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgICB9LFxuICAgICdicG1uOlNlcnZpY2VUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIHRhc2sgPSByZW5kZXJUYXNrKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgMTAsIDEwLCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlOiAnbm9uZScsXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSg2LCA2KSdcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGFTZXJ2aWNlMSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1NFUlZJQ0UnLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IDEyLFxuICAgICAgICAgIHk6IDE4XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhU2VydmljZTEsIHtcbiAgICAgICAgZmlsbDogZ2V0RmlsbENvbG9yKGVsZW1lbnQsIGRlZmF1bHRGaWxsQ29sb3IsIGF0dHJzLmZpbGwpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgIH0pO1xuXG4gICAgICBkcmF3Q2lyY2xlKHBhcmVudEdmeCwgMTAsIDEwLCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlOiAnbm9uZScsXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMSwgMTApJ1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBwYXRoRGF0YVNlcnZpY2UyID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfU0VSVklDRScsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogMTcsXG4gICAgICAgICAgeTogMjJcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGFTZXJ2aWNlMiwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2JwbW46U3RhcnRFdmVudCc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgdmFyIHsgcmVuZGVySWNvbiA9IHRydWUgfSA9IGF0dHJzO1xuXG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgdmFyIHNlbWFudGljID0gZ2V0U2VtYW50aWMoZWxlbWVudCk7XG5cbiAgICAgIGlmICghc2VtYW50aWMuZ2V0KCdpc0ludGVycnVwdGluZycpKSB7XG4gICAgICAgIGF0dHJzID0ge1xuICAgICAgICAgIC4uLmF0dHJzLFxuICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzYnXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBldmVudCA9IHJlbmRlckV2ZW50KHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xuXG4gICAgICBpZiAocmVuZGVySWNvbikge1xuICAgICAgICByZW5kZXJFdmVudEljb24oZWxlbWVudCwgcGFyZW50R2Z4LCBhdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuICAgICdicG1uOlN1YlByb2Nlc3MnOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGlmIChpc0V4cGFuZGVkKGVsZW1lbnQpKSB7XG4gICAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAgICdzdHJva2UnLFxuICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgJ2hlaWdodCdcbiAgICAgICAgXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAgICdmaWxsJyxcbiAgICAgICAgICAnc3Ryb2tlJ1xuICAgICAgICBdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlbmRlclN1YlByb2Nlc3MocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG4gICAgfSxcbiAgICAnYnBtbjpUYXNrJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdzdHJva2UnXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuIHJlbmRlclRhc2socGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyk7XG4gICAgfSxcbiAgICAnYnBtbjpUZXh0QW5ub3RhdGlvbic6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ2hlaWdodCdcbiAgICAgIF0pO1xuXG4gICAgICB2YXIge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICB9ID0gZ2V0Qm91bmRzKGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIHRleHRFbGVtZW50ID0gZHJhd1JlY3QocGFyZW50R2Z4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCB7XG4gICAgICAgIGZpbGw6ICdub25lJyxcbiAgICAgICAgc3Ryb2tlOiAnbm9uZSdcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgdGV4dFBhdGhEYXRhID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdURVhUX0FOTk9UQVRJT04nLCB7XG4gICAgICAgIHhTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgeVNjYWxlRmFjdG9yOiAxLFxuICAgICAgICBjb250YWluZXJXaWR0aDogd2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogaGVpZ2h0LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIG14OiAwLjAsXG4gICAgICAgICAgbXk6IDAuMFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCB0ZXh0UGF0aERhdGEsIHtcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSlcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2VtYW50aWMgPSBnZXRTZW1hbnRpYyhlbGVtZW50KSxcbiAgICAgICAgICB0ZXh0ID0gc2VtYW50aWMuZ2V0KCd0ZXh0JykgfHwgJyc7XG5cbiAgICAgIHJlbmRlckxhYmVsKHBhcmVudEdmeCwgdGV4dCwge1xuICAgICAgICBhbGlnbjogJ2xlZnQtdG9wJyxcbiAgICAgICAgYm94OiBnZXRCb3VuZHMoZWxlbWVudCwgYXR0cnMpLFxuICAgICAgICBwYWRkaW5nOiA3LFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGZpbGw6IGdldExhYmVsQ29sb3IoZWxlbWVudCwgZGVmYXVsdExhYmVsQ29sb3IsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRleHRFbGVtZW50O1xuICAgIH0sXG4gICAgJ2JwbW46VHJhbnNhY3Rpb24nOiBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgICAgIGlmIChpc0V4cGFuZGVkKGVsZW1lbnQpKSB7XG4gICAgICAgIGF0dHJzID0gcGlja0F0dHJzKGF0dHJzLCBbXG4gICAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAgICdzdHJva2UnLFxuICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgJ2hlaWdodCdcbiAgICAgICAgXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRycyA9IHBpY2tBdHRycyhhdHRycywgW1xuICAgICAgICAgICdmaWxsJyxcbiAgICAgICAgICAnc3Ryb2tlJ1xuICAgICAgICBdKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG91dGVyID0gcmVuZGVyU3ViUHJvY2VzcyhwYXJlbnRHZngsIGVsZW1lbnQsIHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgLi4uYXR0cnNcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgaW5uZXJBdHRycyA9IHN0eWxlcy5zdHlsZShbICduby1maWxsJywgJ25vLWV2ZW50cycgXSwge1xuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEuNVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBleHBhbmRlZCA9IGlzRXhwYW5kZWQoZWxlbWVudCk7XG5cbiAgICAgIGlmICghZXhwYW5kZWQpIHtcbiAgICAgICAgYXR0cnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgZHJhd1JlY3QoXG4gICAgICAgIHBhcmVudEdmeCxcbiAgICAgICAgZ2V0V2lkdGgoZWxlbWVudCwgYXR0cnMpLFxuICAgICAgICBnZXRIZWlnaHQoZWxlbWVudCwgYXR0cnMpLFxuICAgICAgICBUQVNLX0JPUkRFUl9SQURJVVMgLSBJTk5FUl9PVVRFUl9ESVNULFxuICAgICAgICBJTk5FUl9PVVRFUl9ESVNULFxuICAgICAgICBpbm5lckF0dHJzXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gb3V0ZXI7XG4gICAgfSxcbiAgICAnYnBtbjpVc2VyVGFzayc6IGZ1bmN0aW9uKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMgPSB7fSkge1xuICAgICAgYXR0cnMgPSBwaWNrQXR0cnMoYXR0cnMsIFtcbiAgICAgICAgJ2ZpbGwnLFxuICAgICAgICAnc3Ryb2tlJ1xuICAgICAgXSk7XG5cbiAgICAgIHZhciB0YXNrID0gcmVuZGVyVGFzayhwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcblxuICAgICAgdmFyIHggPSAxNTtcbiAgICAgIHZhciB5ID0gMTI7XG5cbiAgICAgIHZhciBwYXRoRGF0YVVzZXIxID0gcGF0aE1hcC5nZXRTY2FsZWRQYXRoKCdUQVNLX1RZUEVfVVNFUl8xJywge1xuICAgICAgICBhYnNwb3M6IHtcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IHlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRyYXdQYXRoKHBhcmVudEdmeCwgcGF0aERhdGFVc2VyMSwge1xuICAgICAgICBmaWxsOiBnZXRGaWxsQ29sb3IoZWxlbWVudCwgZGVmYXVsdEZpbGxDb2xvciwgYXR0cnMuZmlsbCksXG4gICAgICAgIHN0cm9rZTogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2VXaWR0aDogMC41XG4gICAgICB9KTtcblxuICAgICAgdmFyIHBhdGhEYXRhVXNlcjIgPSBwYXRoTWFwLmdldFNjYWxlZFBhdGgoJ1RBU0tfVFlQRV9VU0VSXzInLCB7XG4gICAgICAgIGFic3Bvczoge1xuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogeVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZHJhd1BhdGgocGFyZW50R2Z4LCBwYXRoRGF0YVVzZXIyLCB7XG4gICAgICAgIGZpbGw6IGdldEZpbGxDb2xvcihlbGVtZW50LCBkZWZhdWx0RmlsbENvbG9yLCBhdHRycy5maWxsKSxcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50LCBkZWZhdWx0U3Ryb2tlQ29sb3IsIGF0dHJzLnN0cm9rZSksXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aERhdGFVc2VyMyA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEFTS19UWVBFX1VTRVJfMycsIHtcbiAgICAgICAgYWJzcG9zOiB7XG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiB5XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkcmF3UGF0aChwYXJlbnRHZngsIHBhdGhEYXRhVXNlcjMsIHtcbiAgICAgICAgZmlsbDogZ2V0U3Ryb2tlQ29sb3IoZWxlbWVudCwgZGVmYXVsdFN0cm9rZUNvbG9yLCBhdHRycy5zdHJva2UpLFxuICAgICAgICBzdHJva2U6IGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRTdHJva2VDb2xvciwgYXR0cnMuc3Ryb2tlKSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH0sXG4gICAgJ2xhYmVsJzogZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gICAgICByZXR1cm4gcmVuZGVyRXh0ZXJuYWxMYWJlbChwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gZXh0ZW5zaW9uIEFQSSwgdXNlIGF0IHlvdXIgb3duIHJpc2tcbiAgdGhpcy5fZHJhd1BhdGggPSBkcmF3UGF0aDtcblxuICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xufVxuXG5cbmluaGVyaXRzKEJwbW5SZW5kZXJlciwgQmFzZVJlbmRlcmVyKTtcblxuQnBtblJlbmRlcmVyLiRpbmplY3QgPSBbXG4gICdjb25maWcuYnBtblJlbmRlcmVyJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ3N0eWxlcycsXG4gICdwYXRoTWFwJyxcbiAgJ2NhbnZhcycsXG4gICd0ZXh0UmVuZGVyZXInXG5dO1xuXG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5jYW5SZW5kZXIgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpCYXNlRWxlbWVudCcpO1xufTtcblxuLyoqXG4gKiBEcmF3IHNoYXBlIGludG8gcGFyZW50R2Z4LlxuICpcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gcGFyZW50R2Z4XG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7QXR0cnN9IFthdHRyc11cbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fSBtYWluR2Z4XG4gKi9cbkJwbW5SZW5kZXJlci5wcm90b3R5cGUuZHJhd1NoYXBlID0gZnVuY3Rpb24ocGFyZW50R2Z4LCBlbGVtZW50LCBhdHRycyA9IHt9KSB7XG4gIHZhciB7IHR5cGUgfSA9IGVsZW1lbnQ7XG5cbiAgdmFyIGhhbmRsZXIgPSB0aGlzLl9yZW5kZXJlcih0eXBlKTtcblxuICByZXR1cm4gaGFuZGxlcihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzKTtcbn07XG5cbi8qKlxuICogRHJhdyBjb25uZWN0aW9uIGludG8gcGFyZW50R2Z4LlxuICpcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gcGFyZW50R2Z4XG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7QXR0cnN9IFthdHRyc11cbiAqXG4gKiBAcmV0dXJuIHtTVkdFbGVtZW50fSBtYWluR2Z4XG4gKi9cbkJwbW5SZW5kZXJlci5wcm90b3R5cGUuZHJhd0Nvbm5lY3Rpb24gPSBmdW5jdGlvbihwYXJlbnRHZngsIGVsZW1lbnQsIGF0dHJzID0ge30pIHtcbiAgdmFyIHsgdHlwZSB9ID0gZWxlbWVudDtcblxuICB2YXIgaGFuZGxlciA9IHRoaXMuX3JlbmRlcmVyKHR5cGUpO1xuXG4gIHJldHVybiBoYW5kbGVyKHBhcmVudEdmeCwgZWxlbWVudCwgYXR0cnMpO1xufTtcblxuLyoqXG4gKiBHZXQgc2hhcGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHBhdGhcbiAqL1xuQnBtblJlbmRlcmVyLnByb3RvdHlwZS5nZXRTaGFwZVBhdGggPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgcmV0dXJuIGdldENpcmNsZVBhdGgoZWxlbWVudCk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46QWN0aXZpdHknKSkge1xuICAgIHJldHVybiBnZXRSb3VuZFJlY3RQYXRoKGVsZW1lbnQsIFRBU0tfQk9SREVSX1JBRElVUyk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46R2F0ZXdheScpKSB7XG4gICAgcmV0dXJuIGdldERpYW1vbmRQYXRoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGdldFJlY3RQYXRoKGVsZW1lbnQpO1xufTtcblxuLyoqXG4gKiBQaWNrIGF0dHJpYnV0ZXMgaWYgdGhleSBleGlzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cnNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGtleXNcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBwaWNrQXR0cnMoYXR0cnMsIGtleXMgPSBbXSkge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKHBpY2tlZEF0dHJzLCBrZXkpID0+IHtcbiAgICBpZiAoYXR0cnNbIGtleSBdKSB7XG4gICAgICBwaWNrZWRBdHRyc1sga2V5IF0gPSBhdHRyc1sga2V5IF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHBpY2tlZEF0dHJzO1xuICB9LCB7fSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/BpmnRenderer.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/PathMap.js":
/*!*******************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/PathMap.js ***!
\*******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PathMap)\n/* harmony export */ });\n/**\n * Map containing SVG paths needed by BpmnRenderer\n */\nfunction PathMap() {\n\n /**\n * Contains a map of path elements\n *\n * Path definition \n * A parameterized path is defined like this:\n * \n * 'GATEWAY_PARALLEL': {\n * d: 'm {mx},{my} {e.x0},0 0,{e.x1} {e.x1},0 0,{e.y0} -{e.x1},0 0,{e.y1} ' +\n '-{e.x0},0 0,-{e.y1} -{e.x1},0 0,-{e.y0} {e.x1},0 z',\n * height: 17.5,\n * width: 17.5,\n * heightElements: [2.5, 7.5],\n * widthElements: [2.5, 7.5]\n * }\n * \n * It's important to specify a correct height and width for the path as the scaling\n * is based on the ratio between the specified height and width in this object and the\n * height and width that is set as scale target (Note x,y coordinates will be scaled with\n * individual ratios).
\n * The 'heightElements ' and 'widthElements ' array must contain the values that will be scaled.\n * The scaling is based on the computed ratios.\n * Coordinates on the y axis should be in the heightElement 's array, they will be scaled using\n * the computed ratio coefficient.\n * In the parameterized path the scaled values can be accessed through the 'e' object in {} brackets.\n *
\n * The values for the y axis can be accessed in the path string using {e.y0}, {e.y1}, .... \n * The values for the x axis can be accessed in the path string using {e.x0}, {e.x1}, .... \n * \n * The numbers x0, x1 respectively y0, y1, ... map to the corresponding array index.\n * \n */\n this.pathMap = {\n 'EVENT_MESSAGE': {\n d: 'm {mx},{my} l 0,{e.y1} l {e.x1},0 l 0,-{e.y1} z l {e.x0},{e.y0} l {e.x0},-{e.y0}',\n height: 36,\n width: 36,\n heightElements: [ 6, 14 ],\n widthElements: [ 10.5, 21 ]\n },\n 'EVENT_SIGNAL': {\n d: 'M {mx},{my} l {e.x0},{e.y0} l -{e.x1},0 Z',\n height: 36,\n width: 36,\n heightElements: [ 18 ],\n widthElements: [ 10, 20 ]\n },\n 'EVENT_ESCALATION': {\n d: 'M {mx},{my} l {e.x0},{e.y0} l -{e.x0},-{e.y1} l -{e.x0},{e.y1} Z',\n height: 36,\n width: 36,\n heightElements: [ 20, 7 ],\n widthElements: [ 8 ]\n },\n 'EVENT_CONDITIONAL': {\n d: 'M {e.x0},{e.y0} l {e.x1},0 l 0,{e.y2} l -{e.x1},0 Z ' +\n 'M {e.x2},{e.y3} l {e.x0},0 ' +\n 'M {e.x2},{e.y4} l {e.x0},0 ' +\n 'M {e.x2},{e.y5} l {e.x0},0 ' +\n 'M {e.x2},{e.y6} l {e.x0},0 ' +\n 'M {e.x2},{e.y7} l {e.x0},0 ' +\n 'M {e.x2},{e.y8} l {e.x0},0 ',\n height: 36,\n width: 36,\n heightElements: [ 8.5, 14.5, 18, 11.5, 14.5, 17.5, 20.5, 23.5, 26.5 ],\n widthElements: [ 10.5, 14.5, 12.5 ]\n },\n 'EVENT_LINK': {\n d: 'm {mx},{my} 0,{e.y0} -{e.x1},0 0,{e.y1} {e.x1},0 0,{e.y0} {e.x0},-{e.y2} -{e.x0},-{e.y2} z',\n height: 36,\n width: 36,\n heightElements: [ 4.4375, 6.75, 7.8125 ],\n widthElements: [ 9.84375, 13.5 ]\n },\n 'EVENT_ERROR': {\n d: 'm {mx},{my} {e.x0},-{e.y0} {e.x1},-{e.y1} {e.x2},{e.y2} {e.x3},-{e.y3} -{e.x4},{e.y4} -{e.x5},-{e.y5} z',\n height: 36,\n width: 36,\n heightElements: [ 0.023, 8.737, 8.151, 16.564, 10.591, 8.714 ],\n widthElements: [ 0.085, 6.672, 6.97, 4.273, 5.337, 6.636 ]\n },\n 'EVENT_CANCEL_45': {\n d: 'm {mx},{my} -{e.x1},0 0,{e.x0} {e.x1},0 0,{e.y1} {e.x0},0 ' +\n '0,-{e.y1} {e.x1},0 0,-{e.y0} -{e.x1},0 0,-{e.y1} -{e.x0},0 z',\n height: 36,\n width: 36,\n heightElements: [ 4.75, 8.5 ],\n widthElements: [ 4.75, 8.5 ]\n },\n 'EVENT_COMPENSATION': {\n d: 'm {mx},{my} {e.x0},-{e.y0} 0,{e.y1} z m {e.x1},-{e.y2} {e.x2},-{e.y3} 0,{e.y1} -{e.x2},-{e.y3} z',\n height: 36,\n width: 36,\n heightElements: [ 6.5, 13, 0.4, 6.1 ],\n widthElements: [ 9, 9.3, 8.7 ]\n },\n 'EVENT_TIMER_WH': {\n d: 'M {mx},{my} l {e.x0},-{e.y0} m -{e.x0},{e.y0} l {e.x1},{e.y1} ',\n height: 36,\n width: 36,\n heightElements: [ 10, 2 ],\n widthElements: [ 3, 7 ]\n },\n 'EVENT_TIMER_LINE': {\n d: 'M {mx},{my} ' +\n 'm {e.x0},{e.y0} l -{e.x1},{e.y1} ',\n height: 36,\n width: 36,\n heightElements: [ 10, 3 ],\n widthElements: [ 0, 0 ]\n },\n 'EVENT_MULTIPLE': {\n d:'m {mx},{my} {e.x1},-{e.y0} {e.x1},{e.y0} -{e.x0},{e.y1} -{e.x2},0 z',\n height: 36,\n width: 36,\n heightElements: [ 6.28099, 12.56199 ],\n widthElements: [ 3.1405, 9.42149, 12.56198 ]\n },\n 'EVENT_PARALLEL_MULTIPLE': {\n d:'m {mx},{my} {e.x0},0 0,{e.y1} {e.x1},0 0,{e.y0} -{e.x1},0 0,{e.y1} ' +\n '-{e.x0},0 0,-{e.y1} -{e.x1},0 0,-{e.y0} {e.x1},0 z',\n height: 36,\n width: 36,\n heightElements: [ 2.56228, 7.68683 ],\n widthElements: [ 2.56228, 7.68683 ]\n },\n 'GATEWAY_EXCLUSIVE': {\n d:'m {mx},{my} {e.x0},{e.y0} {e.x1},{e.y0} {e.x2},0 {e.x4},{e.y2} ' +\n '{e.x4},{e.y1} {e.x2},0 {e.x1},{e.y3} {e.x0},{e.y3} ' +\n '{e.x3},0 {e.x5},{e.y1} {e.x5},{e.y2} {e.x3},0 z',\n height: 17.5,\n width: 17.5,\n heightElements: [ 8.5, 6.5312, -6.5312, -8.5 ],\n widthElements: [ 6.5, -6.5, 3, -3, 5, -5 ]\n },\n 'GATEWAY_PARALLEL': {\n d:'m {mx},{my} 0,{e.y1} -{e.x1},0 0,{e.y0} {e.x1},0 0,{e.y1} {e.x0},0 ' +\n '0,-{e.y1} {e.x1},0 0,-{e.y0} -{e.x1},0 0,-{e.y1} -{e.x0},0 z',\n height: 30,\n width: 30,\n heightElements: [ 5, 12.5 ],\n widthElements: [ 5, 12.5 ]\n },\n 'GATEWAY_EVENT_BASED': {\n d:'m {mx},{my} {e.x0},{e.y0} {e.x0},{e.y1} {e.x1},{e.y2} {e.x2},0 z',\n height: 11,\n width: 11,\n heightElements: [ -6, 6, 12, -12 ],\n widthElements: [ 9, -3, -12 ]\n },\n 'GATEWAY_COMPLEX': {\n d:'m {mx},{my} 0,{e.y0} -{e.x0},-{e.y1} -{e.x1},{e.y2} {e.x0},{e.y1} -{e.x2},0 0,{e.y3} ' +\n '{e.x2},0 -{e.x0},{e.y1} l {e.x1},{e.y2} {e.x0},-{e.y1} 0,{e.y0} {e.x3},0 0,-{e.y0} {e.x0},{e.y1} ' +\n '{e.x1},-{e.y2} -{e.x0},-{e.y1} {e.x2},0 0,-{e.y3} -{e.x2},0 {e.x0},-{e.y1} -{e.x1},-{e.y2} ' +\n '-{e.x0},{e.y1} 0,-{e.y0} -{e.x3},0 z',\n height: 17.125,\n width: 17.125,\n heightElements: [ 4.875, 3.4375, 2.125, 3 ],\n widthElements: [ 3.4375, 2.125, 4.875, 3 ]\n },\n 'DATA_OBJECT_PATH': {\n d:'m 0,0 {e.x1},0 {e.x0},{e.y0} 0,{e.y1} -{e.x2},0 0,-{e.y2} {e.x1},0 0,{e.y0} {e.x0},0',\n height: 61,\n width: 51,\n heightElements: [ 10, 50, 60 ],\n widthElements: [ 10, 40, 50, 60 ]\n },\n 'DATA_OBJECT_COLLECTION_PATH': {\n d: 'm{mx},{my} m 3,2 l 0,10 m 3,-10 l 0,10 m 3,-10 l 0,10',\n height: 10,\n width: 10,\n heightElements: [],\n widthElements: []\n },\n 'DATA_ARROW': {\n d:'m 5,9 9,0 0,-3 5,5 -5,5 0,-3 -9,0 z',\n height: 61,\n width: 51,\n heightElements: [],\n widthElements: []\n },\n 'DATA_STORE': {\n d:'m {mx},{my} ' +\n 'l 0,{e.y2} ' +\n 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0 ' +\n 'l 0,-{e.y2} ' +\n 'c -{e.x0},-{e.y1} -{e.x1},-{e.y1} -{e.x2},0' +\n 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0 ' +\n 'm -{e.x2},{e.y0}' +\n 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0' +\n 'm -{e.x2},{e.y0}' +\n 'c {e.x0},{e.y1} {e.x1},{e.y1} {e.x2},0',\n height: 61,\n width: 61,\n heightElements: [ 7, 10, 45 ],\n widthElements: [ 2, 58, 60 ]\n },\n 'TEXT_ANNOTATION': {\n d: 'm {mx}, {my} m 10,0 l -10,0 l 0,{e.y0} l 10,0',\n height: 30,\n width: 10,\n heightElements: [ 30 ],\n widthElements: [ 10 ]\n },\n 'MARKER_SUB_PROCESS': {\n d: 'm{mx},{my} m 7,2 l 0,10 m -5,-5 l 10,0',\n height: 10,\n width: 10,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_PARALLEL': {\n d: 'm{mx},{my} m 3,2 l 0,10 m 3,-10 l 0,10 m 3,-10 l 0,10',\n height: 10,\n width: 10,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_SEQUENTIAL': {\n d: 'm{mx},{my} m 0,3 l 10,0 m -10,3 l 10,0 m -10,3 l 10,0',\n height: 10,\n width: 10,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_COMPENSATION': {\n d: 'm {mx},{my} 7,-5 0,10 z m 7.1,-0.3 6.9,-4.7 0,10 -6.9,-4.7 z',\n height: 10,\n width: 21,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_LOOP': {\n d: 'm {mx},{my} c 3.526979,0 6.386161,-2.829858 6.386161,-6.320661 0,-3.490806 -2.859182,-6.320661 ' +\n '-6.386161,-6.320661 -3.526978,0 -6.38616,2.829855 -6.38616,6.320661 0,1.745402 ' +\n '0.714797,3.325567 1.870463,4.469381 0.577834,0.571908 1.265885,1.034728 2.029916,1.35457 ' +\n 'l -0.718163,-3.909793 m 0.718163,3.909793 -3.885211,0.802902',\n height: 13.9,\n width: 13.7,\n heightElements: [],\n widthElements: []\n },\n 'MARKER_ADHOC': {\n d: 'm {mx},{my} m 0.84461,2.64411 c 1.05533,-1.23780996 2.64337,-2.07882 4.29653,-1.97997996 2.05163,0.0805 ' +\n '3.85579,1.15803 5.76082,1.79107 1.06385,0.34139996 2.24454,0.1438 3.18759,-0.43767 0.61743,-0.33642 ' +\n '1.2775,-0.64078 1.7542,-1.17511 0,0.56023 0,1.12046 0,1.6807 -0.98706,0.96237996 -2.29792,1.62393996 ' +\n '-3.6918,1.66181996 -1.24459,0.0927 -2.46671,-0.2491 -3.59505,-0.74812 -1.35789,-0.55965 ' +\n '-2.75133,-1.33436996 -4.27027,-1.18121996 -1.37741,0.14601 -2.41842,1.13685996 -3.44288,1.96782996 z',\n height: 4,\n width: 15,\n heightElements: [],\n widthElements: []\n },\n 'TASK_TYPE_SEND': {\n d: 'm {mx},{my} l 0,{e.y1} l {e.x1},0 l 0,-{e.y1} z l {e.x0},{e.y0} l {e.x0},-{e.y0}',\n height: 14,\n width: 21,\n heightElements: [ 6, 14 ],\n widthElements: [ 10.5, 21 ]\n },\n 'TASK_TYPE_SCRIPT': {\n d: 'm {mx},{my} c 9.966553,-6.27276 -8.000926,-7.91932 2.968968,-14.938 l -8.802728,0 ' +\n 'c -10.969894,7.01868 6.997585,8.66524 -2.968967,14.938 z ' +\n 'm -7,-12 l 5,0 ' +\n 'm -4.5,3 l 4.5,0 ' +\n 'm -3,3 l 5,0' +\n 'm -4,3 l 5,0',\n height: 15,\n width: 12.6,\n heightElements: [ 6, 14 ],\n widthElements: [ 10.5, 21 ]\n },\n 'TASK_TYPE_USER_1': {\n d: 'm {mx},{my} c 0.909,-0.845 1.594,-2.049 1.594,-3.385 0,-2.554 -1.805,-4.62199999 ' +\n '-4.357,-4.62199999 -2.55199998,0 -4.28799998,2.06799999 -4.28799998,4.62199999 0,1.348 ' +\n '0.974,2.562 1.89599998,3.405 -0.52899998,0.187 -5.669,2.097 -5.794,4.7560005 v 6.718 ' +\n 'h 17 v -6.718 c 0,-2.2980005 -5.5279996,-4.5950005 -6.0509996,-4.7760005 z' +\n 'm -8,6 l 0,5.5 m 11,0 l 0,-5'\n },\n 'TASK_TYPE_USER_2': {\n d: 'm {mx},{my} m 2.162,1.009 c 0,2.4470005 -2.158,4.4310005 -4.821,4.4310005 ' +\n '-2.66499998,0 -4.822,-1.981 -4.822,-4.4310005 '\n },\n 'TASK_TYPE_USER_3': {\n d: 'm {mx},{my} m -6.9,-3.80 c 0,0 2.25099998,-2.358 4.27399998,-1.177 2.024,1.181 4.221,1.537 ' +\n '4.124,0.965 -0.098,-0.57 -0.117,-3.79099999 -4.191,-4.13599999 -3.57499998,0.001 ' +\n '-4.20799998,3.36699999 -4.20699998,4.34799999 z'\n },\n 'TASK_TYPE_MANUAL': {\n d: 'm {mx},{my} c 0.234,-0.01 5.604,0.008 8.029,0.004 0.808,0 1.271,-0.172 1.417,-0.752 0.227,-0.898 ' +\n '-0.334,-1.314 -1.338,-1.316 -2.467,-0.01 -7.886,-0.004 -8.108,-0.004 -0.014,-0.079 0.016,-0.533 0,-0.61 ' +\n '0.195,-0.042 8.507,0.006 9.616,0.002 0.877,-0.007 1.35,-0.438 1.353,-1.208 0.003,-0.768 -0.479,-1.09 ' +\n '-1.35,-1.091 -2.968,-0.002 -9.619,-0.013 -9.619,-0.013 v -0.591 c 0,0 5.052,-0.016 7.225,-0.016 ' +\n '0.888,-0.002 1.354,-0.416 1.351,-1.193 -0.006,-0.761 -0.492,-1.196 -1.361,-1.196 -3.473,-0.005 ' +\n '-10.86,-0.003 -11.0829995,-0.003 -0.022,-0.047 -0.045,-0.094 -0.069,-0.139 0.3939995,-0.319 ' +\n '2.0409995,-1.626 2.4149995,-2.017 0.469,-0.4870005 0.519,-1.1650005 0.162,-1.6040005 -0.414,-0.511 ' +\n '-0.973,-0.5 -1.48,-0.236 -1.4609995,0.764 -6.5999995,3.6430005 -7.7329995,4.2710005 -0.9,0.499 ' +\n '-1.516,1.253 -1.882,2.19 -0.37000002,0.95 -0.17,2.01 -0.166,2.979 0.004,0.718 -0.27300002,1.345 ' +\n '-0.055,2.063 0.629,2.087 2.425,3.312 4.859,3.318 4.6179995,0.014 9.2379995,-0.139 13.8569995,-0.158 ' +\n '0.755,-0.004 1.171,-0.301 1.182,-1.033 0.012,-0.754 -0.423,-0.969 -1.183,-0.973 -1.778,-0.01 ' +\n '-5.824,-0.004 -6.04,-0.004 10e-4,-0.084 0.003,-0.586 10e-4,-0.67 z'\n },\n 'TASK_TYPE_INSTANTIATING_SEND': {\n d: 'm {mx},{my} l 0,8.4 l 12.6,0 l 0,-8.4 z l 6.3,3.6 l 6.3,-3.6'\n },\n 'TASK_TYPE_SERVICE': {\n d: 'm {mx},{my} v -1.71335 c 0.352326,-0.0705 0.703932,-0.17838 1.047628,-0.32133 ' +\n '0.344416,-0.14465 0.665822,-0.32133 0.966377,-0.52145 l 1.19431,1.18005 1.567487,-1.57688 ' +\n '-1.195028,-1.18014 c 0.403376,-0.61394 0.683079,-1.29908 0.825447,-2.01824 l 1.622133,-0.01 ' +\n 'v -2.2196 l -1.636514,0.01 c -0.07333,-0.35153 -0.178319,-0.70024 -0.323564,-1.04372 ' +\n '-0.145244,-0.34406 -0.321407,-0.6644 -0.522735,-0.96217 l 1.131035,-1.13631 -1.583305,-1.56293 ' +\n '-1.129598,1.13589 c -0.614052,-0.40108 -1.302883,-0.68093 -2.022633,-0.82247 l 0.0093,-1.61852 ' +\n 'h -2.241173 l 0.0042,1.63124 c -0.353763,0.0736 -0.705369,0.17977 -1.049785,0.32371 -0.344415,0.14437 ' +\n '-0.665102,0.32092 -0.9635006,0.52046 l -1.1698628,-1.15823 -1.5667691,1.5792 1.1684265,1.15669 ' +\n 'c -0.4026573,0.61283 -0.68308,1.29797 -0.8247287,2.01713 l -1.6588041,0.003 v 2.22174 ' +\n 'l 1.6724648,-0.006 c 0.073327,0.35077 0.1797598,0.70243 0.3242851,1.04472 0.1452428,0.34448 ' +\n '0.3214064,0.6644 0.5227339,0.96066 l -1.1993431,1.19723 1.5840256,1.56011 1.1964668,-1.19348 ' +\n 'c 0.6140517,0.40346 1.3028827,0.68232 2.0233517,0.82331 l 7.19e-4,1.69892 h 2.226848 z ' +\n 'm 0.221462,-3.9957 c -1.788948,0.7502 -3.8576,-0.0928 -4.6097055,-1.87438 -0.7521065,-1.78321 ' +\n '0.090598,-3.84627 1.8802645,-4.59604 1.78823,-0.74936 3.856881,0.0929 4.608987,1.87437 ' +\n '0.752106,1.78165 -0.0906,3.84612 -1.879546,4.59605 z'\n },\n 'TASK_TYPE_SERVICE_FILL': {\n d: 'm {mx},{my} c -1.788948,0.7502 -3.8576,-0.0928 -4.6097055,-1.87438 -0.7521065,-1.78321 ' +\n '0.090598,-3.84627 1.8802645,-4.59604 1.78823,-0.74936 3.856881,0.0929 4.608987,1.87437 ' +\n '0.752106,1.78165 -0.0906,3.84612 -1.879546,4.59605 z'\n },\n 'TASK_TYPE_BUSINESS_RULE_HEADER': {\n d: 'm {mx},{my} 0,4 20,0 0,-4 z'\n },\n 'TASK_TYPE_BUSINESS_RULE_MAIN': {\n d: 'm {mx},{my} 0,12 20,0 0,-12 z' +\n 'm 0,8 l 20,0 ' +\n 'm -13,-4 l 0,8'\n },\n 'MESSAGE_FLOW_MARKER': {\n d: 'm {mx},{my} m -10.5 ,-7 l 0,14 l 21,0 l 0,-14 z l 10.5,6 l 10.5,-6'\n }\n };\n\n /**\n * Return raw path for the given ID.\n *\n * @param {string} pathId\n *\n * @return {string} raw path\n */\n this.getRawPath = function getRawPath(pathId) {\n return this.pathMap[pathId].d;\n };\n\n /**\n * Scales the path to the given height and width.\n * Use case \n * Use case is to scale the content of elements (event, gateways) based\n * on the element bounding box's size.\n *
\n * Why not transform \n * Scaling a path with transform() will also scale the stroke and IE does not support\n * the option 'non-scaling-stroke' to prevent this.\n * Also there are use cases where only some parts of a path should be\n * scaled.
\n *\n * @param {string} pathId The ID of the path.\n * @param {Object} param \n * Example param object scales the path to 60% size of the container (data.width, data.height).\n *
\n * {\n * xScaleFactor: 0.6,\n * yScaleFactor:0.6,\n * containerWidth: data.width,\n * containerHeight: data.height,\n * position: {\n * mx: 0.46,\n * my: 0.2,\n * }\n * }\n * \n * \n * targetpathwidth = xScaleFactor * containerWidth \n * targetpathheight = yScaleFactor * containerHeight \n * Position is used to set the starting coordinate of the path. M is computed:\n * \n * position.x * containerWidth \n * position.y * containerHeight \n * \n * Center of the container position: {\n * mx: 0.5,\n * my: 0.5,\n * } \n * Upper left corner of the container\n * position: {\n * mx: 0.0,\n * my: 0.0,\n * } \n * \n * \n * \n *\n * @return {string} scaled path\n */\n this.getScaledPath = function getScaledPath(pathId, param) {\n var rawPath = this.pathMap[pathId];\n\n // positioning\n // compute the start point of the path\n var mx, my;\n\n if (param.abspos) {\n mx = param.abspos.x;\n my = param.abspos.y;\n } else {\n mx = param.containerWidth * param.position.mx;\n my = param.containerHeight * param.position.my;\n }\n\n var coordinates = {}; // map for the scaled coordinates\n if (param.position) {\n\n // path\n var heightRatio = (param.containerHeight / rawPath.height) * param.yScaleFactor;\n var widthRatio = (param.containerWidth / rawPath.width) * param.xScaleFactor;\n\n\n // Apply height ratio\n for (var heightIndex = 0; heightIndex < rawPath.heightElements.length; heightIndex++) {\n coordinates['y' + heightIndex] = rawPath.heightElements[heightIndex] * heightRatio;\n }\n\n // Apply width ratio\n for (var widthIndex = 0; widthIndex < rawPath.widthElements.length; widthIndex++) {\n coordinates['x' + widthIndex] = rawPath.widthElements[widthIndex] * widthRatio;\n }\n }\n\n // Apply value to raw path\n var path = format(\n rawPath.d, {\n mx: mx,\n my: my,\n e: coordinates\n }\n );\n return path;\n };\n}\n\n// helpers //////////////////////\n\n// copied and adjusted from https://github.com/adobe-webplatform/Snap.svg/blob/master/src/svg.js\nvar tokenRegex = /\\{([^{}]+)\\}/g,\n objNotationRegex = /(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g; // matches .xxxxx or [\"xxxxx\"] to run over object properties\n\nfunction replacer(all, key, obj) {\n var res = obj;\n key.replace(objNotationRegex, function(all, name, quote, quotedName, isFunc) {\n name = name || quotedName;\n if (res) {\n if (name in res) {\n res = res[name];\n }\n typeof res == 'function' && isFunc && (res = res());\n }\n });\n res = (res == null || res == obj ? all : res) + '';\n\n return res;\n}\n\nfunction format(str, obj) {\n return String(str).replace(tokenRegex, function(all, key) {\n return replacer(all, key, obj);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L1BhdGhNYXAuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNlOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxHQUFHLEVBQUUsS0FBSyxLQUFLLE1BQU0sT0FBTyxLQUFLLE1BQU0sTUFBTSxFQUFFLEtBQUssTUFBTSxNQUFNO0FBQzlFLGFBQWEsS0FBSyxPQUFPLE1BQU0sRUFBRSxLQUFLLE9BQU8sT0FBTyxLQUFLO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RkFBOEY7QUFDOUY7QUFDQSxnRkFBZ0YsS0FBSyxHQUFHLEtBQUs7QUFDN0YsZ0ZBQWdGLEtBQUssR0FBRyxLQUFLO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsR0FBRyxFQUFFLElBQUksS0FBSyxNQUFNLEdBQUcsS0FBSyxTQUFTLE1BQU0sS0FBSyxLQUFLLEVBQUUsTUFBTSxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsYUFBYSxHQUFHLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxNQUFNLElBQUksS0FBSztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGFBQWEsR0FBRyxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksS0FBSyxFQUFFLE1BQU07QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxhQUFhLEtBQUssRUFBRSxNQUFNLEdBQUcsS0FBSyxRQUFRLE1BQU0sSUFBSSxLQUFLO0FBQ3pELGFBQWEsS0FBSyxFQUFFLE1BQU0sR0FBRyxLQUFL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QUFFLElBQUk7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxhQUFhLEdBQUcsRUFBRSxJQUFJO0FBQ3RCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsYUFBYSxHQUFHLEVBQUUsSUFBSTtBQUN0QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsYUFBYSxHQUFHLEVBQUUsSUFBSTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsYUFBYSxHQUFHLEVBQUUsSUFBSTtBQUN0QixLQUFLO0FBQ0w7QUFDQSxhQUFhLEdBQUcsRUFBRSxJQUFJO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxhQUFhLEdBQUcsRUFBRSxJQUFJO0FBQ3RCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxhQUFhLEdBQUcsRUFBRSxJQUFJO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLGFBQWEsR0FBRyxFQUFFLElBQUk7QUFDdEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGFBQWEsR0FBRyxFQUFFLElBQUk7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQSxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsZ0NBQWdDLDZDQUE2QztBQUM3RTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCLDJDQUEyQztBQUMxRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG9CQUFvQixLQUFLLEtBQUs7QUFDOUIsbUZBQW1GOztBQUVuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2RyYXcvUGF0aE1hcC5qcz8yYzJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFwIGNvbnRhaW5pbmcgU1ZHIHBhdGhzIG5lZWRlZCBieSBCcG1uUmVuZGVyZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGF0aE1hcCgpIHtcblxuICAvKipcbiAgICogQ29udGFpbnMgYSBtYXAgb2YgcGF0aCBlbGVtZW50c1xuICAgKlxuICAgKiA8aDE+UGF0aCBkZWZpbml0aW9uPC9oMT5cbiAgICogQSBwYXJhbWV0ZXJpemVkIHBhdGggaXMgZGVmaW5lZCBsaWtlIHRoaXM6XG4gICAqIDxwcmU+XG4gICAqICdHQVRFV0FZX1BBUkFMTEVMJzoge1xuICAgKiAgIGQ6ICdtIHtteH0se215fSB7ZS54MH0sMCAwLHtlLngxfSB7ZS54MX0sMCAwLHtlLnkwfSAte2UueDF9LDAgMCx7ZS55MX0gJyArXG4gICAgICAgICAgJy17ZS54MH0sMCAwLC17ZS55MX0gLXtlLngxfSwwIDAsLXtlLnkwfSB7ZS54MX0sMCB6JyxcbiAgICogICBoZWlnaHQ6IDE3LjUsXG4gICAqICAgd2lkdGg6ICAxNy41LFxuICAgKiAgIGhlaWdodEVsZW1lbnRzOiBbMi41LCA3LjVdLFxuICAgKiAgIHdpZHRoRWxlbWVudHM6IFsyLjUsIDcuNV1cbiAgICogfVxuICAgKiA8L3ByZT5cbiAgICogPHA+SXQncyBpbXBvcnRhbnQgdG8gc3BlY2lmeSBhIGNvcnJlY3QgPGI+aGVpZ2h0IGFuZCB3aWR0aDwvYj4gZm9yIHRoZSBwYXRoIGFzIHRoZSBzY2FsaW5nXG4gICAqIGlzIGJhc2VkIG9uIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgaGVpZ2h0IGFuZCB3aWR0aCBpbiB0aGlzIG9iamVjdCBhbmQgdGhlXG4gICAqIGhlaWdodCBhbmQgd2lkdGggdGhhdCBpcyBzZXQgYXMgc2NhbGUgdGFyZ2V0IChOb3RlIHgseSBjb29yZGluYXRlcyB3aWxsIGJlIHNjYWxlZCB3aXRoXG4gICAqIGluZGl2aWR1YWwgcmF0aW9zKS48L3A+XG4gICAqIDxwPlRoZSAnPGI+aGVpZ2h0RWxlbWVudHM8L2I+JyBhbmQgJzxiPndpZHRoRWxlbWVudHM8L2I+JyBhcnJheSBtdXN0IGNvbnRhaW4gdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUgc2NhbGVkLlxuICAgKiBUaGUgc2NhbGluZyBpcyBiYXNlZCBvbiB0aGUgY29tcHV0ZWQgcmF0aW9zLlxuICAgKiBDb29yZGluYXRlcyBvbiB0aGUgeSBheGlzIHNob3VsZCBiZSBpbiB0aGUgPGI+aGVpZ2h0RWxlbWVudDwvYj4ncyBhcnJheSwgdGhleSB3aWxsIGJlIHNjYWxlZCB1c2luZ1xuICAgKiB0aGUgY29tcHV0ZWQgcmF0aW8gY29lZmZpY2llbnQuXG4gICAqIEluIHRoZSBwYXJhbWV0ZXJpemVkIHBhdGggdGhlIHNjYWxlZCB2YWx1ZXMgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlICdlJyBvYmplY3QgaW4ge30gYnJhY2tldHMuXG4gICAqICAgPHVsPlxuICAgKiAgICA8bGk+VGhlIHZhbHVlcyBmb3IgdGhlIHkgYXhpcyBjYW4gYmUgYWNjZXNzZWQgaW4gdGhlIHBhdGggc3RyaW5nIHVzaW5nIHtlLnkwfSwge2UueTF9LCAuLi4uPC9saT5cbiAgICogICAgPGxpPlRoZSB2YWx1ZXMgZm9yIHRoZSB4IGF4aXMgY2FuIGJlIGFjY2Vzc2VkIGluIHRoZSBwYXRoIHN0cmluZyB1c2luZyB7ZS54MH0sIHtlLngxfSwgLi4uLjwvbGk+XG4gICAqICAgPC91bD5cbiAgICogICBUaGUgbnVtYmVycyB4MCwgeDEgcmVzcGVjdGl2ZWx5IHkwLCB5MSwgLi4uIG1hcCB0byB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC5cbiAgICogPC9wPlxuICAgKi9cbiAgdGhpcy5wYXRoTWFwID0ge1xuICAgICdFVkVOVF9NRVNTQUdFJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGwgMCx7ZS55MX0gbCB7ZS54MX0sMCBsIDAsLXtlLnkxfSB6IGwge2UueDB9LHtlLnkwfSBsIHtlLngwfSwte2UueTB9JyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsgNiwgMTQgXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsgMTAuNSwgMjEgXVxuICAgIH0sXG4gICAgJ0VWRU5UX1NJR05BTCc6IHtcbiAgICAgIGQ6ICdNIHtteH0se215fSBsIHtlLngwfSx7ZS55MH0gbCAte2UueDF9LDAgWicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsgMTggXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsgMTAsIDIwIF1cbiAgICB9LFxuICAgICdFVkVOVF9FU0NBTEFUSU9OJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LHtlLnkwfSBsIC17ZS54MH0sLXtlLnkxfSBsIC17ZS54MH0se2UueTF9IFonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbIDIwLCA3IF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbIDggXVxuICAgIH0sXG4gICAgJ0VWRU5UX0NPTkRJVElPTkFMJzoge1xuICAgICAgZDogJ00ge2UueDB9LHtlLnkwfSBsIHtlLngxfSwwIGwgMCx7ZS55Mn0gbCAte2UueDF9LDAgWiAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55M30gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55NH0gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55NX0gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55Nn0gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55N30gbCB7ZS54MH0sMCAnICtcbiAgICAgICAgICdNIHtlLngyfSx7ZS55OH0gbCB7ZS54MH0sMCAnLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWyA4LjUsIDE0LjUsIDE4LCAxMS41LCAxNC41LCAxNy41LCAyMC41LCAyMy41LCAyNi41IF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiAgWyAxMC41LCAxNC41LCAxMi41IF1cbiAgICB9LFxuICAgICdFVkVOVF9MSU5LJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IDAse2UueTB9IC17ZS54MX0sMCAwLHtlLnkxfSB7ZS54MX0sMCAwLHtlLnkwfSB7ZS54MH0sLXtlLnkyfSAte2UueDB9LC17ZS55Mn0geicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsgNC40Mzc1LCA2Ljc1LCA3LjgxMjUgXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsgOS44NDM3NSwgMTMuNSBdXG4gICAgfSxcbiAgICAnRVZFTlRfRVJST1InOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0ge2UueDB9LC17ZS55MH0ge2UueDF9LC17ZS55MX0ge2UueDJ9LHtlLnkyfSB7ZS54M30sLXtlLnkzfSAte2UueDR9LHtlLnk0fSAte2UueDV9LC17ZS55NX0geicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsgMC4wMjMsIDguNzM3LCA4LjE1MSwgMTYuNTY0LCAxMC41OTEsIDguNzE0IF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbIDAuMDg1LCA2LjY3MiwgNi45NywgNC4yNzMsIDUuMzM3LCA2LjYzNiBdXG4gICAgfSxcbiAgICAnRVZFTlRfQ0FOQ0VMXzQ1Jzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IC17ZS54MX0sMCAwLHtlLngwfSB7ZS54MX0sMCAwLHtlLnkxfSB7ZS54MH0sMCAnICtcbiAgICAgICAgJzAsLXtlLnkxfSB7ZS54MX0sMCAwLC17ZS55MH0gLXtlLngxfSwwIDAsLXtlLnkxfSAte2UueDB9LDAgeicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsgNC43NSwgOC41IF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbIDQuNzUsIDguNSBdXG4gICAgfSxcbiAgICAnRVZFTlRfQ09NUEVOU0FUSU9OJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IHtlLngwfSwte2UueTB9IDAse2UueTF9IHogbSB7ZS54MX0sLXtlLnkyfSB7ZS54Mn0sLXtlLnkzfSAwLHtlLnkxfSAte2UueDJ9LC17ZS55M30geicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6IDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsgNi41LCAxMywgMC40LCA2LjEgXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsgOSwgOS4zLCA4LjcgXVxuICAgIH0sXG4gICAgJ0VWRU5UX1RJTUVSX1dIJzoge1xuICAgICAgZDogJ00ge214fSx7bXl9IGwge2UueDB9LC17ZS55MH0gbSAte2UueDB9LHtlLnkwfSBsIHtlLngxfSx7ZS55MX0gJyxcbiAgICAgIGhlaWdodDogMzYsXG4gICAgICB3aWR0aDogIDM2LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsgMTAsIDIgXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsgMywgNyBdXG4gICAgfSxcbiAgICAnRVZFTlRfVElNRVJfTElORSc6IHtcbiAgICAgIGQ6ICAnTSB7bXh9LHtteX0gJyArXG4gICAgICAgICAgJ20ge2UueDB9LHtlLnkwfSBsIC17ZS54MX0se2UueTF9ICcsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6ICAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbIDEwLCAzIF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbIDAsIDAgXVxuICAgIH0sXG4gICAgJ0VWRU5UX01VTFRJUExFJzoge1xuICAgICAgZDonbSB7bXh9LHtteX0ge2UueDF9LC17ZS55MH0ge2UueDF9LHtlLnkwfSAte2UueDB9LHtlLnkxfSAte2UueDJ9LDAgeicsXG4gICAgICBoZWlnaHQ6IDM2LFxuICAgICAgd2lkdGg6ICAzNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbIDYuMjgwOTksIDEyLjU2MTk5IF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbIDMuMTQwNSwgOS40MjE0OSwgMTIuNTYxOTggXVxuICAgIH0sXG4gICAgJ0VWRU5UX1BBUkFMTEVMX01VTFRJUExFJzoge1xuICAgICAgZDonbSB7bXh9LHtteX0ge2UueDB9LDAgMCx7ZS55MX0ge2UueDF9LDAgMCx7ZS55MH0gLXtlLngxfSwwIDAse2UueTF9ICcgK1xuICAgICAgICAnLXtlLngwfSwwIDAsLXtlLnkxfSAte2UueDF9LDAgMCwte2UueTB9IHtlLngxfSwwIHonLFxuICAgICAgaGVpZ2h0OiAzNixcbiAgICAgIHdpZHRoOiAgMzYsXG4gICAgICBoZWlnaHRFbGVtZW50czogWyAyLjU2MjI4LCA3LjY4NjgzIF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbIDIuNTYyMjgsIDcuNjg2ODMgXVxuICAgIH0sXG4gICAgJ0dBVEVXQVlfRVhDTFVTSVZFJzoge1xuICAgICAgZDonbSB7bXh9LHtteX0ge2UueDB9LHtlLnkwfSB7ZS54MX0se2UueTB9IHtlLngyfSwwIHtlLng0fSx7ZS55Mn0gJyArXG4gICAgICAgICAgICAgICAgICAgICd7ZS54NH0se2UueTF9IHtlLngyfSwwIHtlLngxfSx7ZS55M30ge2UueDB9LHtlLnkzfSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3tlLngzfSwwIHtlLng1fSx7ZS55MX0ge2UueDV9LHtlLnkyfSB7ZS54M30sMCB6JyxcbiAgICAgIGhlaWdodDogMTcuNSxcbiAgICAgIHdpZHRoOiAgMTcuNSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbIDguNSwgNi41MzEyLCAtNi41MzEyLCAtOC41IF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiAgWyA2LjUsIC02LjUsIDMsIC0zLCA1LCAtNSBdXG4gICAgfSxcbiAgICAnR0FURVdBWV9QQVJBTExFTCc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IDAse2UueTF9IC17ZS54MX0sMCAwLHtlLnkwfSB7ZS54MX0sMCAwLHtlLnkxfSB7ZS54MH0sMCAnICtcbiAgICAgICAgJzAsLXtlLnkxfSB7ZS54MX0sMCAwLC17ZS55MH0gLXtlLngxfSwwIDAsLXtlLnkxfSAte2UueDB9LDAgeicsXG4gICAgICBoZWlnaHQ6IDMwLFxuICAgICAgd2lkdGg6ICAzMCxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbIDUsIDEyLjUgXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsgNSwgMTIuNSBdXG4gICAgfSxcbiAgICAnR0FURVdBWV9FVkVOVF9CQVNFRCc6IHtcbiAgICAgIGQ6J20ge214fSx7bXl9IHtlLngwfSx7ZS55MH0ge2UueDB9LHtlLnkxfSB7ZS54MX0se2UueTJ9IHtlLngyfSwwIHonLFxuICAgICAgaGVpZ2h0OiAxMSxcbiAgICAgIHdpZHRoOiAgMTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWyAtNiwgNiwgMTIsIC0xMiBdLFxuICAgICAgd2lkdGhFbGVtZW50czogWyA5LCAtMywgLTEyIF1cbiAgICB9LFxuICAgICdHQVRFV0FZX0NPTVBMRVgnOiB7XG4gICAgICBkOidtIHtteH0se215fSAwLHtlLnkwfSAte2UueDB9LC17ZS55MX0gLXtlLngxfSx7ZS55Mn0ge2UueDB9LHtlLnkxfSAte2UueDJ9LDAgMCx7ZS55M30gJyArXG4gICAgICAgICd7ZS54Mn0sMCAgLXtlLngwfSx7ZS55MX0gbCB7ZS54MX0se2UueTJ9IHtlLngwfSwte2UueTF9IDAse2UueTB9IHtlLngzfSwwIDAsLXtlLnkwfSB7ZS54MH0se2UueTF9ICcgK1xuICAgICAgICAne2UueDF9LC17ZS55Mn0gLXtlLngwfSwte2UueTF9IHtlLngyfSwwIDAsLXtlLnkzfSAte2UueDJ9LDAge2UueDB9LC17ZS55MX0gLXtlLngxfSwte2UueTJ9ICcgK1xuICAgICAgICAnLXtlLngwfSx7ZS55MX0gMCwte2UueTB9IC17ZS54M30sMCB6JyxcbiAgICAgIGhlaWdodDogMTcuMTI1LFxuICAgICAgd2lkdGg6ICAxNy4xMjUsXG4gICAgICBoZWlnaHRFbGVtZW50czogWyA0Ljg3NSwgMy40Mzc1LCAyLjEyNSwgMyBdLFxuICAgICAgd2lkdGhFbGVtZW50czogWyAzLjQzNzUsIDIuMTI1LCA0Ljg3NSwgMyBdXG4gICAgfSxcbiAgICAnREFUQV9PQkpFQ1RfUEFUSCc6IHtcbiAgICAgIGQ6J20gMCwwIHtlLngxfSwwIHtlLngwfSx7ZS55MH0gMCx7ZS55MX0gLXtlLngyfSwwIDAsLXtlLnkyfSB7ZS54MX0sMCAwLHtlLnkwfSB7ZS54MH0sMCcsXG4gICAgICBoZWlnaHQ6IDYxLFxuICAgICAgd2lkdGg6ICA1MSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbIDEwLCA1MCwgNjAgXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsgMTAsIDQwLCA1MCwgNjAgXVxuICAgIH0sXG4gICAgJ0RBVEFfT0JKRUNUX0NPTExFQ1RJT05fUEFUSCc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gMywyIGwgMCwxMCBtIDMsLTEwIGwgMCwxMCBtIDMsLTEwIGwgMCwxMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdEQVRBX0FSUk9XJzoge1xuICAgICAgZDonbSA1LDkgOSwwIDAsLTMgNSw1IC01LDUgMCwtMyAtOSwwIHonLFxuICAgICAgaGVpZ2h0OiA2MSxcbiAgICAgIHdpZHRoOiAgNTEsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ0RBVEFfU1RPUkUnOiB7XG4gICAgICBkOidtICB7bXh9LHtteX0gJyArXG4gICAgICAgICdsICAwLHtlLnkyfSAnICtcbiAgICAgICAgJ2MgIHtlLngwfSx7ZS55MX0ge2UueDF9LHtlLnkxfSAge2UueDJ9LDAgJyArXG4gICAgICAgICdsICAwLC17ZS55Mn0gJyArXG4gICAgICAgICdjIC17ZS54MH0sLXtlLnkxfSAte2UueDF9LC17ZS55MX0gLXtlLngyfSwwJyArXG4gICAgICAgICdjICB7ZS54MH0se2UueTF9IHtlLngxfSx7ZS55MX0gIHtlLngyfSwwICcgK1xuICAgICAgICAnbSAgLXtlLngyfSx7ZS55MH0nICtcbiAgICAgICAgJ2MgIHtlLngwfSx7ZS55MX0ge2UueDF9LHtlLnkxfSB7ZS54Mn0sMCcgK1xuICAgICAgICAnbSAgLXtlLngyfSx7ZS55MH0nICtcbiAgICAgICAgJ2MgIHtlLngwfSx7ZS55MX0ge2UueDF9LHtlLnkxfSAge2UueDJ9LDAnLFxuICAgICAgaGVpZ2h0OiA2MSxcbiAgICAgIHdpZHRoOiAgNjEsXG4gICAgICBoZWlnaHRFbGVtZW50czogWyA3LCAxMCwgNDUgXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6ICBbIDIsIDU4LCA2MCBdXG4gICAgfSxcbiAgICAnVEVYVF9BTk5PVEFUSU9OJzoge1xuICAgICAgZDogJ20ge214fSwge215fSBtIDEwLDAgbCAtMTAsMCBsIDAse2UueTB9IGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDMwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFsgMzAgXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFsgMTAgXVxuICAgIH0sXG4gICAgJ01BUktFUl9TVUJfUFJPQ0VTUyc6IHtcbiAgICAgIGQ6ICdte214fSx7bXl9IG0gNywyIGwgMCwxMCBtIC01LC01IGwgMTAsMCcsXG4gICAgICBoZWlnaHQ6IDEwLFxuICAgICAgd2lkdGg6IDEwLFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdNQVJLRVJfUEFSQUxMRUwnOiB7XG4gICAgICBkOiAnbXtteH0se215fSBtIDMsMiBsIDAsMTAgbSAzLC0xMCBsIDAsMTAgbSAzLC0xMCBsIDAsMTAnLFxuICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX1NFUVVFTlRJQUwnOiB7XG4gICAgICBkOiAnbXtteH0se215fSBtIDAsMyBsIDEwLDAgbSAtMTAsMyBsIDEwLDAgbSAtMTAsMyBsIDEwLDAnLFxuICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX0NPTVBFTlNBVElPTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSA3LC01IDAsMTAgeiBtIDcuMSwtMC4zIDYuOSwtNC43IDAsMTAgLTYuOSwtNC43IHonLFxuICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgIHdpZHRoOiAyMSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbXSxcbiAgICAgIHdpZHRoRWxlbWVudHM6IFtdXG4gICAgfSxcbiAgICAnTUFSS0VSX0xPT1AnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gYyAzLjUyNjk3OSwwIDYuMzg2MTYxLC0yLjgyOTg1OCA2LjM4NjE2MSwtNi4zMjA2NjEgMCwtMy40OTA4MDYgLTIuODU5MTgyLC02LjMyMDY2MSAnICtcbiAgICAgICAgJy02LjM4NjE2MSwtNi4zMjA2NjEgLTMuNTI2OTc4LDAgLTYuMzg2MTYsMi44Mjk4NTUgLTYuMzg2MTYsNi4zMjA2NjEgMCwxLjc0NTQwMiAnICtcbiAgICAgICAgJzAuNzE0Nzk3LDMuMzI1NTY3IDEuODcwNDYzLDQuNDY5MzgxIDAuNTc3ODM0LDAuNTcxOTA4IDEuMjY1ODg1LDEuMDM0NzI4IDIuMDI5OTE2LDEuMzU0NTcgJyArXG4gICAgICAgICdsIC0wLjcxODE2MywtMy45MDk3OTMgbSAwLjcxODE2MywzLjkwOTc5MyAtMy44ODUyMTEsMC44MDI5MDInLFxuICAgICAgaGVpZ2h0OiAxMy45LFxuICAgICAgd2lkdGg6IDEzLjcsXG4gICAgICBoZWlnaHRFbGVtZW50czogW10sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbXVxuICAgIH0sXG4gICAgJ01BUktFUl9BREhPQyc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBtIDAuODQ0NjEsMi42NDQxMSBjIDEuMDU1MzMsLTEuMjM3ODA5OTYgMi42NDMzNywtMi4wNzg4MiA0LjI5NjUzLC0xLjk3OTk3OTk2IDIuMDUxNjMsMC4wODA1ICcgK1xuICAgICAgICAnMy44NTU3OSwxLjE1ODAzIDUuNzYwODIsMS43OTEwNyAxLjA2Mzg1LDAuMzQxMzk5OTYgMi4yNDQ1NCwwLjE0MzggMy4xODc1OSwtMC40Mzc2NyAwLjYxNzQzLC0wLjMzNjQyICcgK1xuICAgICAgICAnMS4yNzc1LC0wLjY0MDc4IDEuNzU0MiwtMS4xNzUxMSAwLDAuNTYwMjMgMCwxLjEyMDQ2IDAsMS42ODA3IC0wLjk4NzA2LDAuOTYyMzc5OTYgLTIuMjk3OTIsMS42MjM5Mzk5NiAnICtcbiAgICAgICAgJy0zLjY5MTgsMS42NjE4MTk5NiAtMS4yNDQ1OSwwLjA5MjcgLTIuNDY2NzEsLTAuMjQ5MSAtMy41OTUwNSwtMC43NDgxMiAtMS4zNTc4OSwtMC41NTk2NSAnICtcbiAgICAgICAgJy0yLjc1MTMzLC0xLjMzNDM2OTk2IC00LjI3MDI3LC0xLjE4MTIxOTk2IC0xLjM3NzQxLDAuMTQ2MDEgLTIuNDE4NDIsMS4xMzY4NTk5NiAtMy40NDI4OCwxLjk2NzgyOTk2IHonLFxuICAgICAgaGVpZ2h0OiA0LFxuICAgICAgd2lkdGg6IDE1LFxuICAgICAgaGVpZ2h0RWxlbWVudHM6IFtdLFxuICAgICAgd2lkdGhFbGVtZW50czogW11cbiAgICB9LFxuICAgICdUQVNLX1RZUEVfU0VORCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBsIDAse2UueTF9IGwge2UueDF9LDAgbCAwLC17ZS55MX0geiBsIHtlLngwfSx7ZS55MH0gbCB7ZS54MH0sLXtlLnkwfScsXG4gICAgICBoZWlnaHQ6IDE0LFxuICAgICAgd2lkdGg6ICAyMSxcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbIDYsIDE0IF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbIDEwLjUsIDIxIF1cbiAgICB9LFxuICAgICdUQVNLX1RZUEVfU0NSSVBUJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgOS45NjY1NTMsLTYuMjcyNzYgLTguMDAwOTI2LC03LjkxOTMyIDIuOTY4OTY4LC0xNC45MzggbCAtOC44MDI3MjgsMCAnICtcbiAgICAgICAgJ2MgLTEwLjk2OTg5NCw3LjAxODY4IDYuOTk3NTg1LDguNjY1MjQgLTIuOTY4OTY3LDE0LjkzOCB6ICcgK1xuICAgICAgICAnbSAtNywtMTIgbCA1LDAgJyArXG4gICAgICAgICdtIC00LjUsMyBsIDQuNSwwICcgK1xuICAgICAgICAnbSAtMywzIGwgNSwwJyArXG4gICAgICAgICdtIC00LDMgbCA1LDAnLFxuICAgICAgaGVpZ2h0OiAxNSxcbiAgICAgIHdpZHRoOiAgMTIuNixcbiAgICAgIGhlaWdodEVsZW1lbnRzOiBbIDYsIDE0IF0sXG4gICAgICB3aWR0aEVsZW1lbnRzOiBbIDEwLjUsIDIxIF1cbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8xJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgMC45MDksLTAuODQ1IDEuNTk0LC0yLjA0OSAxLjU5NCwtMy4zODUgMCwtMi41NTQgLTEuODA1LC00LjYyMTk5OTk5ICcgK1xuICAgICAgICAnLTQuMzU3LC00LjYyMTk5OTk5IC0yLjU1MTk5OTk4LDAgLTQuMjg3OTk5OTgsMi4wNjc5OTk5OSAtNC4yODc5OTk5OCw0LjYyMTk5OTk5IDAsMS4zNDggJyArXG4gICAgICAgICcwLjk3NCwyLjU2MiAxLjg5NTk5OTk4LDMuNDA1IC0wLjUyODk5OTk4LDAuMTg3IC01LjY2OSwyLjA5NyAtNS43OTQsNC43NTYwMDA1IHYgNi43MTggJyArXG4gICAgICAgICdoIDE3IHYgLTYuNzE4IGMgMCwtMi4yOTgwMDA1IC01LjUyNzk5OTYsLTQuNTk1MDAwNSAtNi4wNTA5OTk2LC00Ljc3NjAwMDUgeicgK1xuICAgICAgICAnbSAtOCw2IGwgMCw1LjUgbSAxMSwwIGwgMCwtNSdcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfVVNFUl8yJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IG0gMi4xNjIsMS4wMDkgYyAwLDIuNDQ3MDAwNSAtMi4xNTgsNC40MzEwMDA1IC00LjgyMSw0LjQzMTAwMDUgJyArXG4gICAgICAgICctMi42NjQ5OTk5OCwwIC00LjgyMiwtMS45ODEgLTQuODIyLC00LjQzMTAwMDUgJ1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9VU0VSXzMnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gbSAtNi45LC0zLjgwIGMgMCwwIDIuMjUwOTk5OTgsLTIuMzU4IDQuMjczOTk5OTgsLTEuMTc3IDIuMDI0LDEuMTgxIDQuMjIxLDEuNTM3ICcgK1xuICAgICAgICAnNC4xMjQsMC45NjUgLTAuMDk4LC0wLjU3IC0wLjExNywtMy43OTA5OTk5OSAtNC4xOTEsLTQuMTM1OTk5OTkgLTMuNTc0OTk5OTgsMC4wMDEgJyArXG4gICAgICAgICctNC4yMDc5OTk5OCwzLjM2Njk5OTk5IC00LjIwNjk5OTk4LDQuMzQ3OTk5OTkgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfTUFOVUFMJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgMC4yMzQsLTAuMDEgNS42MDQsMC4wMDggOC4wMjksMC4wMDQgMC44MDgsMCAxLjI3MSwtMC4xNzIgMS40MTcsLTAuNzUyIDAuMjI3LC0wLjg5OCAnICtcbiAgICAgICAgJy0wLjMzNCwtMS4zMTQgLTEuMzM4LC0xLjMxNiAtMi40NjcsLTAuMDEgLTcuODg2LC0wLjAwNCAtOC4xMDgsLTAuMDA0IC0wLjAxNCwtMC4wNzkgMC4wMTYsLTAuNTMzIDAsLTAuNjEgJyArXG4gICAgICAgICcwLjE5NSwtMC4wNDIgOC41MDcsMC4wMDYgOS42MTYsMC4wMDIgMC44NzcsLTAuMDA3IDEuMzUsLTAuNDM4IDEuMzUzLC0xLjIwOCAwLjAwMywtMC43NjggLTAuNDc5LC0xLjA5ICcgK1xuICAgICAgICAnLTEuMzUsLTEuMDkxIC0yLjk2OCwtMC4wMDIgLTkuNjE5LC0wLjAxMyAtOS42MTksLTAuMDEzIHYgLTAuNTkxIGMgMCwwIDUuMDUyLC0wLjAxNiA3LjIyNSwtMC4wMTYgJyArXG4gICAgICAgICcwLjg4OCwtMC4wMDIgMS4zNTQsLTAuNDE2IDEuMzUxLC0xLjE5MyAtMC4wMDYsLTAuNzYxIC0wLjQ5MiwtMS4xOTYgLTEuMzYxLC0xLjE5NiAtMy40NzMsLTAuMDA1ICcgK1xuICAgICAgICAnLTEwLjg2LC0wLjAwMyAtMTEuMDgyOTk5NSwtMC4wMDMgLTAuMDIyLC0wLjA0NyAtMC4wNDUsLTAuMDk0IC0wLjA2OSwtMC4xMzkgMC4zOTM5OTk1LC0wLjMxOSAnICtcbiAgICAgICAgJzIuMDQwOTk5NSwtMS42MjYgMi40MTQ5OTk1LC0yLjAxNyAwLjQ2OSwtMC40ODcwMDA1IDAuNTE5LC0xLjE2NTAwMDUgMC4xNjIsLTEuNjA0MDAwNSAtMC40MTQsLTAuNTExICcgK1xuICAgICAgICAnLTAuOTczLC0wLjUgLTEuNDgsLTAuMjM2IC0xLjQ2MDk5OTUsMC43NjQgLTYuNTk5OTk5NSwzLjY0MzAwMDUgLTcuNzMyOTk5NSw0LjI3MTAwMDUgLTAuOSwwLjQ5OSAnICtcbiAgICAgICAgJy0xLjUxNiwxLjI1MyAtMS44ODIsMi4xOSAtMC4zNzAwMDAwMiwwLjk1IC0wLjE3LDIuMDEgLTAuMTY2LDIuOTc5IDAuMDA0LDAuNzE4IC0wLjI3MzAwMDAyLDEuMzQ1ICcgK1xuICAgICAgICAnLTAuMDU1LDIuMDYzIDAuNjI5LDIuMDg3IDIuNDI1LDMuMzEyIDQuODU5LDMuMzE4IDQuNjE3OTk5NSwwLjAxNCA5LjIzNzk5OTUsLTAuMTM5IDEzLjg1Njk5OTUsLTAuMTU4ICcgK1xuICAgICAgICAnMC43NTUsLTAuMDA0IDEuMTcxLC0wLjMwMSAxLjE4MiwtMS4wMzMgMC4wMTIsLTAuNzU0IC0wLjQyMywtMC45NjkgLTEuMTgzLC0wLjk3MyAtMS43NzgsLTAuMDEgJyArXG4gICAgICAgICctNS44MjQsLTAuMDA0IC02LjA0LC0wLjAwNCAxMGUtNCwtMC4wODQgMC4wMDMsLTAuNTg2IDEwZS00LC0wLjY3IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX0lOU1RBTlRJQVRJTkdfU0VORCc6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBsIDAsOC40IGwgMTIuNiwwIGwgMCwtOC40IHogbCA2LjMsMy42IGwgNi4zLC0zLjYnXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX1NFUlZJQ0UnOiB7XG4gICAgICBkOiAnbSB7bXh9LHtteX0gdiAtMS43MTMzNSBjIDAuMzUyMzI2LC0wLjA3MDUgMC43MDM5MzIsLTAuMTc4MzggMS4wNDc2MjgsLTAuMzIxMzMgJyArXG4gICAgICAgICcwLjM0NDQxNiwtMC4xNDQ2NSAwLjY2NTgyMiwtMC4zMjEzMyAwLjk2NjM3NywtMC41MjE0NSBsIDEuMTk0MzEsMS4xODAwNSAxLjU2NzQ4NywtMS41NzY4OCAnICtcbiAgICAgICAgJy0xLjE5NTAyOCwtMS4xODAxNCBjIDAuNDAzMzc2LC0wLjYxMzk0IDAuNjgzMDc5LC0xLjI5OTA4IDAuODI1NDQ3LC0yLjAxODI0IGwgMS42MjIxMzMsLTAuMDEgJyArXG4gICAgICAgICd2IC0yLjIxOTYgbCAtMS42MzY1MTQsMC4wMSBjIC0wLjA3MzMzLC0wLjM1MTUzIC0wLjE3ODMxOSwtMC43MDAyNCAtMC4zMjM1NjQsLTEuMDQzNzIgJyArXG4gICAgICAgICctMC4xNDUyNDQsLTAuMzQ0MDYgLTAuMzIxNDA3LC0wLjY2NDQgLTAuNTIyNzM1LC0wLjk2MjE3IGwgMS4xMzEwMzUsLTEuMTM2MzEgLTEuNTgzMzA1LC0xLjU2MjkzICcgK1xuICAgICAgICAnLTEuMTI5NTk4LDEuMTM1ODkgYyAtMC42MTQwNTIsLTAuNDAxMDggLTEuMzAyODgzLC0wLjY4MDkzIC0yLjAyMjYzMywtMC44MjI0NyBsIDAuMDA5MywtMS42MTg1MiAnICtcbiAgICAgICAgJ2ggLTIuMjQxMTczIGwgMC4wMDQyLDEuNjMxMjQgYyAtMC4zNTM3NjMsMC4wNzM2IC0wLjcwNTM2OSwwLjE3OTc3IC0xLjA0OTc4NSwwLjMyMzcxIC0wLjM0NDQxNSwwLjE0NDM3ICcgK1xuICAgICAgICAnLTAuNjY1MTAyLDAuMzIwOTIgLTAuOTYzNTAwNiwwLjUyMDQ2IGwgLTEuMTY5ODYyOCwtMS4xNTgyMyAtMS41NjY3NjkxLDEuNTc5MiAxLjE2ODQyNjUsMS4xNTY2OSAnICtcbiAgICAgICAgJ2MgLTAuNDAyNjU3MywwLjYxMjgzIC0wLjY4MzA4LDEuMjk3OTcgLTAuODI0NzI4NywyLjAxNzEzIGwgLTEuNjU4ODA0MSwwLjAwMyB2IDIuMjIxNzQgJyArXG4gICAgICAgICdsIDEuNjcyNDY0OCwtMC4wMDYgYyAwLjA3MzMyNywwLjM1MDc3IDAuMTc5NzU5OCwwLjcwMjQzIDAuMzI0Mjg1MSwxLjA0NDcyIDAuMTQ1MjQyOCwwLjM0NDQ4ICcgK1xuICAgICAgICAnMC4zMjE0MDY0LDAuNjY0NCAwLjUyMjczMzksMC45NjA2NiBsIC0xLjE5OTM0MzEsMS4xOTcyMyAxLjU4NDAyNTYsMS41NjAxMSAxLjE5NjQ2NjgsLTEuMTkzNDggJyArXG4gICAgICAgICdjIDAuNjE0MDUxNywwLjQwMzQ2IDEuMzAyODgyNywwLjY4MjMyIDIuMDIzMzUxNywwLjgyMzMxIGwgNy4xOWUtNCwxLjY5ODkyIGggMi4yMjY4NDggeiAnICtcbiAgICAgICAgJ20gMC4yMjE0NjIsLTMuOTk1NyBjIC0xLjc4ODk0OCwwLjc1MDIgLTMuODU3NiwtMC4wOTI4IC00LjYwOTcwNTUsLTEuODc0MzggLTAuNzUyMTA2NSwtMS43ODMyMSAnICtcbiAgICAgICAgJzAuMDkwNTk4LC0zLjg0NjI3IDEuODgwMjY0NSwtNC41OTYwNCAxLjc4ODIzLC0wLjc0OTM2IDMuODU2ODgxLDAuMDkyOSA0LjYwODk4NywxLjg3NDM3ICcgK1xuICAgICAgICAnMC43NTIxMDYsMS43ODE2NSAtMC4wOTA2LDMuODQ2MTIgLTEuODc5NTQ2LDQuNTk2MDUgeidcbiAgICB9LFxuICAgICdUQVNLX1RZUEVfU0VSVklDRV9GSUxMJzoge1xuICAgICAgZDogJ20ge214fSx7bXl9IGMgLTEuNzg4OTQ4LDAuNzUwMiAtMy44NTc2LC0wLjA5MjggLTQuNjA5NzA1NSwtMS44NzQzOCAtMC43NTIxMDY1LC0xLjc4MzIxICcgK1xuICAgICAgICAnMC4wOTA1OTgsLTMuODQ2MjcgMS44ODAyNjQ1LC00LjU5NjA0IDEuNzg4MjMsLTAuNzQ5MzYgMy44NTY4ODEsMC4wOTI5IDQuNjA4OTg3LDEuODc0MzcgJyArXG4gICAgICAgICcwLjc1MjEwNiwxLjc4MTY1IC0wLjA5MDYsMy44NDYxMiAtMS44Nzk1NDYsNC41OTYwNSB6J1xuICAgIH0sXG4gICAgJ1RBU0tfVFlQRV9CVVNJTkVTU19SVUxFX0hFQURFUic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLDQgMjAsMCAwLC00IHonXG4gICAgfSxcbiAgICAnVEFTS19UWVBFX0JVU0lORVNTX1JVTEVfTUFJTic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSAwLDEyIDIwLDAgMCwtMTIgeicgK1xuICAgICAgICAnbSAwLDggbCAyMCwwICcgK1xuICAgICAgICAnbSAtMTMsLTQgbCAwLDgnXG4gICAgfSxcbiAgICAnTUVTU0FHRV9GTE9XX01BUktFUic6IHtcbiAgICAgIGQ6ICdtIHtteH0se215fSBtIC0xMC41ICwtNyBsIDAsMTQgbCAyMSwwIGwgMCwtMTQgeiBsIDEwLjUsNiBsIDEwLjUsLTYnXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gcmF3IHBhdGggZm9yIHRoZSBnaXZlbiBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhJZFxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHJhdyBwYXRoXG4gICAqL1xuICB0aGlzLmdldFJhd1BhdGggPSBmdW5jdGlvbiBnZXRSYXdQYXRoKHBhdGhJZCkge1xuICAgIHJldHVybiB0aGlzLnBhdGhNYXBbcGF0aElkXS5kO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTY2FsZXMgdGhlIHBhdGggdG8gdGhlIGdpdmVuIGhlaWdodCBhbmQgd2lkdGguXG4gICAqIDxoMT5Vc2UgY2FzZTwvaDE+XG4gICAqIDxwPlVzZSBjYXNlIGlzIHRvIHNjYWxlIHRoZSBjb250ZW50IG9mIGVsZW1lbnRzIChldmVudCwgZ2F0ZXdheXMpIGJhc2VkXG4gICAqIG9uIHRoZSBlbGVtZW50IGJvdW5kaW5nIGJveCdzIHNpemUuXG4gICAqIDwvcD5cbiAgICogPGgxPldoeSBub3QgdHJhbnNmb3JtPC9oMT5cbiAgICogPHA+U2NhbGluZyBhIHBhdGggd2l0aCB0cmFuc2Zvcm0oKSB3aWxsIGFsc28gc2NhbGUgdGhlIHN0cm9rZSBhbmQgSUUgZG9lcyBub3Qgc3VwcG9ydFxuICAgKiB0aGUgb3B0aW9uICdub24tc2NhbGluZy1zdHJva2UnIHRvIHByZXZlbnQgdGhpcy5cbiAgICogQWxzbyB0aGVyZSBhcmUgdXNlIGNhc2VzIHdoZXJlIG9ubHkgc29tZSBwYXJ0cyBvZiBhIHBhdGggc2hvdWxkIGJlXG4gICAqIHNjYWxlZC48L3A+XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoSWQgVGhlIElEIG9mIHRoZSBwYXRoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW0gPHA+XG4gICAqICAgRXhhbXBsZSBwYXJhbSBvYmplY3Qgc2NhbGVzIHRoZSBwYXRoIHRvIDYwJSBzaXplIG9mIHRoZSBjb250YWluZXIgKGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0KS5cbiAgICogICA8cHJlPlxuICAgKiAgIHtcbiAgICogICAgIHhTY2FsZUZhY3RvcjogMC42LFxuICAgKiAgICAgeVNjYWxlRmFjdG9yOjAuNixcbiAgICogICAgIGNvbnRhaW5lcldpZHRoOiBkYXRhLndpZHRoLFxuICAgKiAgICAgY29udGFpbmVySGVpZ2h0OiBkYXRhLmhlaWdodCxcbiAgICogICAgIHBvc2l0aW9uOiB7XG4gICAqICAgICAgIG14OiAwLjQ2LFxuICAgKiAgICAgICBteTogMC4yLFxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICogICA8L3ByZT5cbiAgICogICA8dWw+XG4gICAqICAgIDxsaT50YXJnZXRwYXRod2lkdGggPSB4U2NhbGVGYWN0b3IgKiBjb250YWluZXJXaWR0aDwvbGk+XG4gICAqICAgIDxsaT50YXJnZXRwYXRoaGVpZ2h0ID0geVNjYWxlRmFjdG9yICogY29udGFpbmVySGVpZ2h0PC9saT5cbiAgICogICAgPGxpPlBvc2l0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBzdGFydGluZyBjb29yZGluYXRlIG9mIHRoZSBwYXRoLiBNIGlzIGNvbXB1dGVkOlxuICAgICogICAgPHVsPlxuICAgICogICAgICA8bGk+cG9zaXRpb24ueCAqIGNvbnRhaW5lcldpZHRoPC9saT5cbiAgICAqICAgICAgPGxpPnBvc2l0aW9uLnkgKiBjb250YWluZXJIZWlnaHQ8L2xpPlxuICAgICogICAgPC91bD5cbiAgICAqICAgIENlbnRlciBvZiB0aGUgY29udGFpbmVyIDxwcmU+IHBvc2l0aW9uOiB7XG4gICAqICAgICAgIG14OiAwLjUsXG4gICAqICAgICAgIG15OiAwLjUsXG4gICAqICAgICB9PC9wcmU+XG4gICAqICAgICBVcHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgY29udGFpbmVyXG4gICAqICAgICA8cHJlPiBwb3NpdGlvbjoge1xuICAgKiAgICAgICBteDogMC4wLFxuICAgKiAgICAgICBteTogMC4wLFxuICAgKiAgICAgfTwvcHJlPlxuICAgKiAgICA8L2xpPlxuICAgKiAgIDwvdWw+XG4gICAqIDwvcD5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBzY2FsZWQgcGF0aFxuICAgKi9cbiAgdGhpcy5nZXRTY2FsZWRQYXRoID0gZnVuY3Rpb24gZ2V0U2NhbGVkUGF0aChwYXRoSWQsIHBhcmFtKSB7XG4gICAgdmFyIHJhd1BhdGggPSB0aGlzLnBhdGhNYXBbcGF0aElkXTtcblxuICAgIC8vIHBvc2l0aW9uaW5nXG4gICAgLy8gY29tcHV0ZSB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIHBhdGhcbiAgICB2YXIgbXgsIG15O1xuXG4gICAgaWYgKHBhcmFtLmFic3Bvcykge1xuICAgICAgbXggPSBwYXJhbS5hYnNwb3MueDtcbiAgICAgIG15ID0gcGFyYW0uYWJzcG9zLnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG14ID0gcGFyYW0uY29udGFpbmVyV2lkdGggKiBwYXJhbS5wb3NpdGlvbi5teDtcbiAgICAgIG15ID0gcGFyYW0uY29udGFpbmVySGVpZ2h0ICogcGFyYW0ucG9zaXRpb24ubXk7XG4gICAgfVxuXG4gICAgdmFyIGNvb3JkaW5hdGVzID0ge307IC8vIG1hcCBmb3IgdGhlIHNjYWxlZCBjb29yZGluYXRlc1xuICAgIGlmIChwYXJhbS5wb3NpdGlvbikge1xuXG4gICAgICAvLyBwYXRoXG4gICAgICB2YXIgaGVpZ2h0UmF0aW8gPSAocGFyYW0uY29udGFpbmVySGVpZ2h0IC8gcmF3UGF0aC5oZWlnaHQpICogcGFyYW0ueVNjYWxlRmFjdG9yO1xuICAgICAgdmFyIHdpZHRoUmF0aW8gPSAocGFyYW0uY29udGFpbmVyV2lkdGggLyByYXdQYXRoLndpZHRoKSAqIHBhcmFtLnhTY2FsZUZhY3RvcjtcblxuXG4gICAgICAvLyBBcHBseSBoZWlnaHQgcmF0aW9cbiAgICAgIGZvciAodmFyIGhlaWdodEluZGV4ID0gMDsgaGVpZ2h0SW5kZXggPCByYXdQYXRoLmhlaWdodEVsZW1lbnRzLmxlbmd0aDsgaGVpZ2h0SW5kZXgrKykge1xuICAgICAgICBjb29yZGluYXRlc1sneScgKyBoZWlnaHRJbmRleF0gPSByYXdQYXRoLmhlaWdodEVsZW1lbnRzW2hlaWdodEluZGV4XSAqIGhlaWdodFJhdGlvO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSB3aWR0aCByYXRpb1xuICAgICAgZm9yICh2YXIgd2lkdGhJbmRleCA9IDA7IHdpZHRoSW5kZXggPCByYXdQYXRoLndpZHRoRWxlbWVudHMubGVuZ3RoOyB3aWR0aEluZGV4KyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXNbJ3gnICsgd2lkdGhJbmRleF0gPSByYXdQYXRoLndpZHRoRWxlbWVudHNbd2lkdGhJbmRleF0gKiB3aWR0aFJhdGlvO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHZhbHVlIHRvIHJhdyBwYXRoXG4gICAgdmFyIHBhdGggPSBmb3JtYXQoXG4gICAgICByYXdQYXRoLmQsIHtcbiAgICAgICAgbXg6IG14LFxuICAgICAgICBteTogbXksXG4gICAgICAgIGU6IGNvb3JkaW5hdGVzXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIGNvcGllZCBhbmQgYWRqdXN0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWRvYmUtd2VicGxhdGZvcm0vU25hcC5zdmcvYmxvYi9tYXN0ZXIvc3JjL3N2Zy5qc1xudmFyIHRva2VuUmVnZXggPSAvXFx7KFtee31dKylcXH0vZyxcbiAgICBvYmpOb3RhdGlvblJlZ2V4ID0gLyg/Oig/Ol58XFwuKSguKz8pKD89XFxbfFxcLnwkfFxcKCl8XFxbKCd8XCIpKC4rPylcXDJcXF0pKFxcKFxcKSk/L2c7IC8vIG1hdGNoZXMgLnh4eHh4IG9yIFtcInh4eHh4XCJdIHRvIHJ1biBvdmVyIG9iamVjdCBwcm9wZXJ0aWVzXG5cbmZ1bmN0aW9uIHJlcGxhY2VyKGFsbCwga2V5LCBvYmopIHtcbiAgdmFyIHJlcyA9IG9iajtcbiAga2V5LnJlcGxhY2Uob2JqTm90YXRpb25SZWdleCwgZnVuY3Rpb24oYWxsLCBuYW1lLCBxdW90ZSwgcXVvdGVkTmFtZSwgaXNGdW5jKSB7XG4gICAgbmFtZSA9IG5hbWUgfHwgcXVvdGVkTmFtZTtcbiAgICBpZiAocmVzKSB7XG4gICAgICBpZiAobmFtZSBpbiByZXMpIHtcbiAgICAgICAgcmVzID0gcmVzW25hbWVdO1xuICAgICAgfVxuICAgICAgdHlwZW9mIHJlcyA9PSAnZnVuY3Rpb24nICYmIGlzRnVuYyAmJiAocmVzID0gcmVzKCkpO1xuICAgIH1cbiAgfSk7XG4gIHJlcyA9IChyZXMgPT0gbnVsbCB8fCByZXMgPT0gb2JqID8gYWxsIDogcmVzKSArICcnO1xuXG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdChzdHIsIG9iaikge1xuICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZSh0b2tlblJlZ2V4LCBmdW5jdGlvbihhbGwsIGtleSkge1xuICAgIHJldHVybiByZXBsYWNlcihhbGwsIGtleSwgb2JqKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/PathMap.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/TextRenderer.js":
/*!************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/TextRenderer.js ***!
\************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TextRenderer)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_util_Text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/util/Text */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Text.js\");\n\n\n\n\nvar DEFAULT_FONT_SIZE = 12;\nvar LINE_HEIGHT_RATIO = 1.2;\n\nvar MIN_TEXT_ANNOTATION_HEIGHT = 30;\n\n/**\n * @typedef { {\n * fontFamily: string;\n * fontSize: number;\n * fontWeight: string;\n * lineHeight: number;\n * } } TextRendererStyle\n *\n * @typedef { {\n * defaultStyle?: Partial;\n * externalStyle?: Partial;\n * } } TextRendererConfig\n *\n * @typedef { import('diagram-js/lib/util/Text').TextLayoutConfig } TextLayoutConfig\n *\n * @typedef { import('diagram-js/lib/util/Types').Rect } Rect\n */\n\n\n/**\n * Renders text and computes text bounding boxes.\n *\n * @param {TextRendererConfig} [config]\n */\nfunction TextRenderer(config) {\n\n var defaultStyle = (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)({\n fontFamily: 'Arial, sans-serif',\n fontSize: DEFAULT_FONT_SIZE,\n fontWeight: 'normal',\n lineHeight: LINE_HEIGHT_RATIO\n }, config && config.defaultStyle || {});\n\n var fontSize = parseInt(defaultStyle.fontSize, 10) - 1;\n\n var externalStyle = (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)({}, defaultStyle, {\n fontSize: fontSize\n }, config && config.externalStyle || {});\n\n var textUtil = new diagram_js_lib_util_Text__WEBPACK_IMPORTED_MODULE_1__[\"default\"]({\n style: defaultStyle\n });\n\n /**\n * Get the new bounds of an externally rendered,\n * layouted label.\n *\n * @param {Rect} bounds\n * @param {string} text\n *\n * @return {Rect}\n */\n this.getExternalLabelBounds = function(bounds, text) {\n\n var layoutedDimensions = textUtil.getDimensions(text, {\n box: {\n width: 90,\n height: 30\n },\n style: externalStyle\n });\n\n // resize label shape to fit label text\n return {\n x: Math.round(bounds.x + bounds.width / 2 - layoutedDimensions.width / 2),\n y: Math.round(bounds.y),\n width: Math.ceil(layoutedDimensions.width),\n height: Math.ceil(layoutedDimensions.height)\n };\n\n };\n\n /**\n * Get the new bounds of text annotation.\n *\n * @param {Rect} bounds\n * @param {string} text\n *\n * @return {Rect}\n */\n this.getTextAnnotationBounds = function(bounds, text) {\n\n var layoutedDimensions = textUtil.getDimensions(text, {\n box: bounds,\n style: defaultStyle,\n align: 'left-top',\n padding: 5\n });\n\n return {\n x: bounds.x,\n y: bounds.y,\n width: bounds.width,\n height: Math.max(MIN_TEXT_ANNOTATION_HEIGHT, Math.round(layoutedDimensions.height))\n };\n };\n\n /**\n * Create a layouted text element.\n *\n * @param {string} text\n * @param {TextLayoutConfig} [options]\n *\n * @return {SVGElement} rendered text\n */\n this.createText = function(text, options) {\n return textUtil.createText(text, options || {});\n };\n\n /**\n * Get default text style.\n */\n this.getDefaultStyle = function() {\n return defaultStyle;\n };\n\n /**\n * Get the external text style.\n */\n this.getExternalStyle = function() {\n return externalStyle;\n };\n\n}\n\nTextRenderer.$inject = [\n 'config.textRenderer'\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L1RleHRSZW5kZXJlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBa0M7O0FBRWM7O0FBRWhEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsY0FBYyxzREFBc0Q7QUFDcEU7QUFDQSxjQUFjLDJDQUEyQztBQUN6RDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0I7QUFDZTs7QUFFZixxQkFBcUIsZ0RBQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLHFDQUFxQzs7QUFFeEM7O0FBRUEsc0JBQXNCLGdEQUFNLEdBQUc7QUFDL0I7QUFDQSxHQUFHLHNDQUFzQzs7QUFFekMscUJBQXFCLGdFQUFRO0FBQzdCO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLGtCQUFrQjtBQUMvQjtBQUNBLGNBQWMsWUFBWTtBQUMxQjtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZHJhdy9UZXh0UmVuZGVyZXIuanM/MmI5YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBUZXh0VXRpbCBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL1RleHQnO1xuXG52YXIgREVGQVVMVF9GT05UX1NJWkUgPSAxMjtcbnZhciBMSU5FX0hFSUdIVF9SQVRJTyA9IDEuMjtcblxudmFyIE1JTl9URVhUX0FOTk9UQVRJT05fSEVJR0hUID0gMzA7XG5cbi8qKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIGZvbnRGYW1pbHk6IHN0cmluZztcbiAqICAgZm9udFNpemU6IG51bWJlcjtcbiAqICAgZm9udFdlaWdodDogc3RyaW5nO1xuICogICBsaW5lSGVpZ2h0OiBudW1iZXI7XG4gKiB9IH0gVGV4dFJlbmRlcmVyU3R5bGVcbiAqXG4gKiBAdHlwZWRlZiB7IHtcbiAqICAgZGVmYXVsdFN0eWxlPzogUGFydGlhbDxUZXh0UmVuZGVyZXJTdHlsZT47XG4gKiAgIGV4dGVybmFsU3R5bGU/OiBQYXJ0aWFsPFRleHRSZW5kZXJlclN0eWxlPjtcbiAqIH0gfSBUZXh0UmVuZGVyZXJDb25maWdcbiAqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UZXh0JykuVGV4dExheW91dENvbmZpZyB9IFRleHRMYXlvdXRDb25maWdcbiAqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlJlY3QgfSBSZWN0XG4gKi9cblxuXG4vKipcbiAqIFJlbmRlcnMgdGV4dCBhbmQgY29tcHV0ZXMgdGV4dCBib3VuZGluZyBib3hlcy5cbiAqXG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlckNvbmZpZ30gW2NvbmZpZ11cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGV4dFJlbmRlcmVyKGNvbmZpZykge1xuXG4gIHZhciBkZWZhdWx0U3R5bGUgPSBhc3NpZ24oe1xuICAgIGZvbnRGYW1pbHk6ICdBcmlhbCwgc2Fucy1zZXJpZicsXG4gICAgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIGxpbmVIZWlnaHQ6IExJTkVfSEVJR0hUX1JBVElPXG4gIH0sIGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdFN0eWxlIHx8IHt9KTtcblxuICB2YXIgZm9udFNpemUgPSBwYXJzZUludChkZWZhdWx0U3R5bGUuZm9udFNpemUsIDEwKSAtIDE7XG5cbiAgdmFyIGV4dGVybmFsU3R5bGUgPSBhc3NpZ24oe30sIGRlZmF1bHRTdHlsZSwge1xuICAgIGZvbnRTaXplOiBmb250U2l6ZVxuICB9LCBjb25maWcgJiYgY29uZmlnLmV4dGVybmFsU3R5bGUgfHwge30pO1xuXG4gIHZhciB0ZXh0VXRpbCA9IG5ldyBUZXh0VXRpbCh7XG4gICAgc3R5bGU6IGRlZmF1bHRTdHlsZVxuICB9KTtcblxuICAvKipcbiAgICogR2V0IHRoZSBuZXcgYm91bmRzIG9mIGFuIGV4dGVybmFsbHkgcmVuZGVyZWQsXG4gICAqIGxheW91dGVkIGxhYmVsLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlY3R9IGJvdW5kc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWN0fVxuICAgKi9cbiAgdGhpcy5nZXRFeHRlcm5hbExhYmVsQm91bmRzID0gZnVuY3Rpb24oYm91bmRzLCB0ZXh0KSB7XG5cbiAgICB2YXIgbGF5b3V0ZWREaW1lbnNpb25zID0gdGV4dFV0aWwuZ2V0RGltZW5zaW9ucyh0ZXh0LCB7XG4gICAgICBib3g6IHtcbiAgICAgICAgd2lkdGg6IDkwLFxuICAgICAgICBoZWlnaHQ6IDMwXG4gICAgICB9LFxuICAgICAgc3R5bGU6IGV4dGVybmFsU3R5bGVcbiAgICB9KTtcblxuICAgIC8vIHJlc2l6ZSBsYWJlbCBzaGFwZSB0byBmaXQgbGFiZWwgdGV4dFxuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLnJvdW5kKGJvdW5kcy54ICsgYm91bmRzLndpZHRoIC8gMiAtIGxheW91dGVkRGltZW5zaW9ucy53aWR0aCAvIDIpLFxuICAgICAgeTogTWF0aC5yb3VuZChib3VuZHMueSksXG4gICAgICB3aWR0aDogTWF0aC5jZWlsKGxheW91dGVkRGltZW5zaW9ucy53aWR0aCksXG4gICAgICBoZWlnaHQ6IE1hdGguY2VpbChsYXlvdXRlZERpbWVuc2lvbnMuaGVpZ2h0KVxuICAgIH07XG5cbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBuZXcgYm91bmRzIG9mIHRleHQgYW5ub3RhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtSZWN0fSBib3VuZHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICpcbiAgICogQHJldHVybiB7UmVjdH1cbiAgICovXG4gIHRoaXMuZ2V0VGV4dEFubm90YXRpb25Cb3VuZHMgPSBmdW5jdGlvbihib3VuZHMsIHRleHQpIHtcblxuICAgIHZhciBsYXlvdXRlZERpbWVuc2lvbnMgPSB0ZXh0VXRpbC5nZXREaW1lbnNpb25zKHRleHQsIHtcbiAgICAgIGJveDogYm91bmRzLFxuICAgICAgc3R5bGU6IGRlZmF1bHRTdHlsZSxcbiAgICAgIGFsaWduOiAnbGVmdC10b3AnLFxuICAgICAgcGFkZGluZzogNVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgeTogYm91bmRzLnksXG4gICAgICB3aWR0aDogYm91bmRzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBNYXRoLm1heChNSU5fVEVYVF9BTk5PVEFUSU9OX0hFSUdIVCwgTWF0aC5yb3VuZChsYXlvdXRlZERpbWVuc2lvbnMuaGVpZ2h0KSlcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsYXlvdXRlZCB0ZXh0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7VGV4dExheW91dENvbmZpZ30gW29wdGlvbnNdXG4gICAqXG4gICAqIEByZXR1cm4ge1NWR0VsZW1lbnR9IHJlbmRlcmVkIHRleHRcbiAgICovXG4gIHRoaXMuY3JlYXRlVGV4dCA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGV4dFV0aWwuY3JlYXRlVGV4dCh0ZXh0LCBvcHRpb25zIHx8IHt9KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgdGV4dCBzdHlsZS5cbiAgICovXG4gIHRoaXMuZ2V0RGVmYXVsdFN0eWxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRTdHlsZTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlcm5hbCB0ZXh0IHN0eWxlLlxuICAgKi9cbiAgdGhpcy5nZXRFeHRlcm5hbFN0eWxlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGV4dGVybmFsU3R5bGU7XG4gIH07XG5cbn1cblxuVGV4dFJlbmRlcmVyLiRpbmplY3QgPSBbXG4gICdjb25maWcudGV4dFJlbmRlcmVyJ1xuXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/TextRenderer.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/index.js":
/*!*****************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/index.js ***!
\*****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _BpmnRenderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BpmnRenderer */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/BpmnRenderer.js\");\n/* harmony import */ var _TextRenderer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TextRenderer */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/TextRenderer.js\");\n/* harmony import */ var _PathMap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PathMap */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/PathMap.js\");\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __init__: [ 'bpmnRenderer' ],\n bpmnRenderer: [ 'type', _BpmnRenderer__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ],\n textRenderer: [ 'type', _TextRenderer__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ],\n pathMap: [ 'type', _PathMap__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9kcmF3L2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBMEM7QUFDQTs7QUFFVjs7QUFFaEMsaUVBQWU7QUFDZjtBQUNBLDBCQUEwQixxREFBWTtBQUN0QywwQkFBMEIscURBQVk7QUFDdEMscUJBQXFCLGdEQUFPO0FBQzVCLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2RyYXcvaW5kZXguanM/MGM3MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnBtblJlbmRlcmVyIGZyb20gJy4vQnBtblJlbmRlcmVyJztcbmltcG9ydCBUZXh0UmVuZGVyZXIgZnJvbSAnLi9UZXh0UmVuZGVyZXInO1xuXG5pbXBvcnQgUGF0aE1hcCBmcm9tICcuL1BhdGhNYXAnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbICdicG1uUmVuZGVyZXInIF0sXG4gIGJwbW5SZW5kZXJlcjogWyAndHlwZScsIEJwbW5SZW5kZXJlciBdLFxuICB0ZXh0UmVuZGVyZXI6IFsgJ3R5cGUnLCBUZXh0UmVuZGVyZXIgXSxcbiAgcGF0aE1hcDogWyAndHlwZScsIFBhdGhNYXAgXVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/draw/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsContextPadProvider.js":
/*!**************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsContextPadProvider.js ***!
\**************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AlignElementsContextPadProvider)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _AlignElementsIcons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AlignElementsIcons */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsIcons.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('diagram-js/lib/features/context-pad/ContextPad').default} ContextPad\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n *\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('diagram-js/lib/features/context-pad/ContextPad').ContextPadEntries} ContextPadEntries\n * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').default} ContextPadProvider\n */\n\nvar LOW_PRIORITY = 900;\n\n/**\n * A provider for the `Align elements` context pad entry.\n *\n * @implements {ContextPadProvider}\n *\n * @param {ContextPad} contextPad\n * @param {PopupMenu} popupMenu\n * @param {Translate} translate\n * @param {Canvas} canvas\n */\nfunction AlignElementsContextPadProvider(contextPad, popupMenu, translate, canvas) {\n\n contextPad.registerProvider(LOW_PRIORITY, this);\n\n this._contextPad = contextPad;\n this._popupMenu = popupMenu;\n this._translate = translate;\n this._canvas = canvas;\n}\n\nAlignElementsContextPadProvider.$inject = [\n 'contextPad',\n 'popupMenu',\n 'translate',\n 'canvas'\n];\n\n/**\n * @param {Element[]} elements\n *\n * @return {ContextPadEntries}\n */\nAlignElementsContextPadProvider.prototype.getMultiElementContextPadEntries = function(elements) {\n var actions = {};\n\n if (this._isAllowed(elements)) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)(actions, this._getEntries(elements));\n }\n\n return actions;\n};\n\nAlignElementsContextPadProvider.prototype._isAllowed = function(elements) {\n return !this._popupMenu.isEmpty(elements, 'align-elements');\n};\n\nAlignElementsContextPadProvider.prototype._getEntries = function() {\n var self = this;\n\n return {\n 'align-elements': {\n group: 'align-elements',\n title: self._translate('Align elements'),\n html: `${_AlignElementsIcons__WEBPACK_IMPORTED_MODULE_1__[\"default\"]['align']}
`,\n action: {\n click: function(event, target) {\n var position = self._getMenuPosition(target);\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)(position, {\n cursor: {\n x: event.x,\n y: event.y\n }\n });\n\n self._popupMenu.open(target, 'align-elements', position);\n }\n }\n }\n };\n};\n\nAlignElementsContextPadProvider.prototype._getMenuPosition = function(elements) {\n var Y_OFFSET = 5;\n\n var pad = this._contextPad.getPad(elements).html;\n\n var padRect = pad.getBoundingClientRect();\n\n var pos = {\n x: padRect.left,\n y: padRect.bottom + Y_OFFSET\n };\n\n return pos;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9BbGlnbkVsZW1lbnRzQ29udGV4dFBhZFByb3ZpZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUVrQjs7QUFFdUI7O0FBRXpDO0FBQ0EsYUFBYSw4Q0FBOEM7QUFDM0QsYUFBYSxrRUFBa0U7QUFDL0UsYUFBYSxnRUFBZ0U7QUFDN0UsYUFBYSwyREFBMkQ7QUFDeEU7QUFDQSxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLDRFQUE0RTtBQUN6RixhQUFhLDBFQUEwRTtBQUN2Rjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsV0FBVztBQUN0QixXQUFXLFFBQVE7QUFDbkI7QUFDZTs7QUFFZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLGdEQUFNO0FBQ1Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywyREFBSyxVQUFVO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGdEQUFNO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYWxpZ24tZWxlbWVudHMvQWxpZ25FbGVtZW50c0NvbnRleHRQYWRQcm92aWRlci5qcz82MWU5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBJQ09OUyBmcm9tICcuL0FsaWduRWxlbWVudHNJY29ucyc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9DYW52YXMnKS5kZWZhdWx0fSBDYW52YXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL0NvbnRleHRQYWQnKS5kZWZhdWx0fSBDb250ZXh0UGFkXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudScpLmRlZmF1bHR9IFBvcHVwTWVudVxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvdHJhbnNsYXRlJykuZGVmYXVsdH0gVHJhbnNsYXRlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkJykuQ29udGV4dFBhZEVudHJpZXN9IENvbnRleHRQYWRFbnRyaWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkUHJvdmlkZXInKS5kZWZhdWx0fSBDb250ZXh0UGFkUHJvdmlkZXJcbiAqL1xuXG52YXIgTE9XX1BSSU9SSVRZID0gOTAwO1xuXG4vKipcbiAqIEEgcHJvdmlkZXIgZm9yIHRoZSBgQWxpZ24gZWxlbWVudHNgIGNvbnRleHQgcGFkIGVudHJ5LlxuICpcbiAqIEBpbXBsZW1lbnRzIHtDb250ZXh0UGFkUHJvdmlkZXJ9XG4gKlxuICogQHBhcmFtIHtDb250ZXh0UGFkfSBjb250ZXh0UGFkXG4gKiBAcGFyYW0ge1BvcHVwTWVudX0gcG9wdXBNZW51XG4gKiBAcGFyYW0ge1RyYW5zbGF0ZX0gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFsaWduRWxlbWVudHNDb250ZXh0UGFkUHJvdmlkZXIoY29udGV4dFBhZCwgcG9wdXBNZW51LCB0cmFuc2xhdGUsIGNhbnZhcykge1xuXG4gIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcihMT1dfUFJJT1JJVFksIHRoaXMpO1xuXG4gIHRoaXMuX2NvbnRleHRQYWQgPSBjb250ZXh0UGFkO1xuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XG4gIHRoaXMuX3RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xufVxuXG5BbGlnbkVsZW1lbnRzQ29udGV4dFBhZFByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdjb250ZXh0UGFkJyxcbiAgJ3BvcHVwTWVudScsXG4gICd0cmFuc2xhdGUnLFxuICAnY2FudmFzJ1xuXTtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtDb250ZXh0UGFkRW50cmllc31cbiAqL1xuQWxpZ25FbGVtZW50c0NvbnRleHRQYWRQcm92aWRlci5wcm90b3R5cGUuZ2V0TXVsdGlFbGVtZW50Q29udGV4dFBhZEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICB2YXIgYWN0aW9ucyA9IHt9O1xuXG4gIGlmICh0aGlzLl9pc0FsbG93ZWQoZWxlbWVudHMpKSB7XG4gICAgYXNzaWduKGFjdGlvbnMsIHRoaXMuX2dldEVudHJpZXMoZWxlbWVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuQWxpZ25FbGVtZW50c0NvbnRleHRQYWRQcm92aWRlci5wcm90b3R5cGUuX2lzQWxsb3dlZCA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHJldHVybiAhdGhpcy5fcG9wdXBNZW51LmlzRW1wdHkoZWxlbWVudHMsICdhbGlnbi1lbGVtZW50cycpO1xufTtcblxuQWxpZ25FbGVtZW50c0NvbnRleHRQYWRQcm92aWRlci5wcm90b3R5cGUuX2dldEVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHJldHVybiB7XG4gICAgJ2FsaWduLWVsZW1lbnRzJzoge1xuICAgICAgZ3JvdXA6ICdhbGlnbi1lbGVtZW50cycsXG4gICAgICB0aXRsZTogc2VsZi5fdHJhbnNsYXRlKCdBbGlnbiBlbGVtZW50cycpLFxuICAgICAgaHRtbDogYDxkaXYgY2xhc3M9XCJlbnRyeVwiPiR7SUNPTlNbJ2FsaWduJ119PC9kaXY+YCxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIHRhcmdldCkge1xuICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHNlbGYuX2dldE1lbnVQb3NpdGlvbih0YXJnZXQpO1xuXG4gICAgICAgICAgYXNzaWduKHBvc2l0aW9uLCB7XG4gICAgICAgICAgICBjdXJzb3I6IHtcbiAgICAgICAgICAgICAgeDogZXZlbnQueCxcbiAgICAgICAgICAgICAgeTogZXZlbnQueVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgc2VsZi5fcG9wdXBNZW51Lm9wZW4odGFyZ2V0LCAnYWxpZ24tZWxlbWVudHMnLCBwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5BbGlnbkVsZW1lbnRzQ29udGV4dFBhZFByb3ZpZGVyLnByb3RvdHlwZS5fZ2V0TWVudVBvc2l0aW9uID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIFlfT0ZGU0VUID0gNTtcblxuICB2YXIgcGFkID0gdGhpcy5fY29udGV4dFBhZC5nZXRQYWQoZWxlbWVudHMpLmh0bWw7XG5cbiAgdmFyIHBhZFJlY3QgPSBwYWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgdmFyIHBvcyA9IHtcbiAgICB4OiBwYWRSZWN0LmxlZnQsXG4gICAgeTogcGFkUmVjdC5ib3R0b20gKyBZX09GRlNFVFxuICB9O1xuXG4gIHJldHVybiBwb3M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsContextPadProvider.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsIcons.js":
/*!*************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsIcons.js ***!
\*************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * To change the icons, modify the SVGs in `./resources`, execute `npx svgo -f resources --datauri enc -o dist`,\n * and then replace respective icons with the optimized data URIs in `./dist`.\n */\nvar icons = {\n align: `\n \n \n \n `,\n bottom: `\n \n \n \n `,\n center: `\n \n \n \n `,\n left: `\n \n \n \n `,\n right: `\n \n \n \n `,\n top: `\n \n \n \n `,\n middle: `\n \n \n \n `\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (icons);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9BbGlnbkVsZW1lbnRzSWNvbnMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRixpQkFBaUIscUJBQXFCO0FBQzFILHNGQUFzRixvQkFBb0IsaUJBQWlCO0FBQzNILDhGQUE4RixvQkFBb0IsaUJBQWlCLFdBQVc7QUFDOUk7QUFDQTtBQUNBLG9GQUFvRixpQkFBaUIscUJBQXFCO0FBQzFILG9GQUFvRixvQkFBb0IsaUJBQWlCO0FBQ3pILDRGQUE0RixvQkFBb0IsaUJBQWlCLFdBQVc7QUFDNUk7QUFDQTtBQUNBLGtGQUFrRixpQkFBaUIscUJBQXFCO0FBQ3hILG9GQUFvRixvQkFBb0IsaUJBQWlCO0FBQ3pILDRGQUE0RixvQkFBb0IsaUJBQWlCLFdBQVc7QUFDNUk7QUFDQTtBQUNBLGtGQUFrRixpQkFBaUIscUJBQXFCO0FBQ3hILG9GQUFvRixvQkFBb0IsaUJBQWlCO0FBQ3pILDRGQUE0RixvQkFBb0IsaUJBQWlCLFdBQVc7QUFDNUk7QUFDQTtBQUNBLG9GQUFvRixpQkFBaUIscUJBQXFCO0FBQzFILG9GQUFvRixvQkFBb0IsaUJBQWlCO0FBQ3pILDRGQUE0RixvQkFBb0IsaUJBQWlCLFdBQVc7QUFDNUk7QUFDQTtBQUNBLGtGQUFrRixpQkFBaUIscUJBQXFCO0FBQ3hILG9GQUFvRixvQkFBb0IsaUJBQWlCO0FBQ3pILDRGQUE0RixvQkFBb0IsaUJBQWlCLFdBQVc7QUFDNUk7QUFDQTtBQUNBLGtGQUFrRixpQkFBaUIscUJBQXFCO0FBQ3hILG9GQUFvRixvQkFBb0IsaUJBQWlCO0FBQ3pILDRGQUE0RixvQkFBb0IsaUJBQWlCLFdBQVc7QUFDNUk7QUFDQTs7QUFFQSxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9BbGlnbkVsZW1lbnRzSWNvbnMuanM/MjAzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvIGNoYW5nZSB0aGUgaWNvbnMsIG1vZGlmeSB0aGUgU1ZHcyBpbiBgLi9yZXNvdXJjZXNgLCBleGVjdXRlIGBucHggc3ZnbyAtZiByZXNvdXJjZXMgLS1kYXRhdXJpIGVuYyAtbyBkaXN0YCxcbiAqIGFuZCB0aGVuIHJlcGxhY2UgcmVzcGVjdGl2ZSBpY29ucyB3aXRoIHRoZSBvcHRpbWl6ZWQgZGF0YSBVUklzIGluIGAuL2Rpc3RgLlxuICovXG52YXIgaWNvbnMgPSB7XG4gIGFsaWduOiAgYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAwMCAyMDAwXCI+XG4gICAgICAgICAgICAgIDxsaW5lIHgxPVwiMjAwXCIgeTE9XCIxNTBcIiB4Mj1cIjIwMFwiIHkyPVwiMTg1MFwiIHN0eWxlPVwic3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO1wiLz5cbiAgICAgICAgICAgICAgPHJlY3QgeD1cIjUwMFwiIHk9XCIxNTBcIiB3aWR0aD1cIjEzMDBcIiBoZWlnaHQ9XCI3MDBcIiByeD1cIjFcIiBzdHlsZT1cImZpbGw6bm9uZTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7XCI+PC9yZWN0PlxuICAgICAgICAgICAgICA8cmVjdCB4PVwiNTAwXCIgeT1cIjExNTBcIiB3aWR0aD1cIjcwMFwiIGhlaWdodD1cIjcwMFwiIHJ4PVwiMVwiIHN0eWxlPVwiZmlsbDpjdXJyZW50Q29sb3I7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO29wYWNpdHk6LjU7XCI+PC9yZWN0PlxuICAgICAgICAgIDwvc3ZnPmAsXG4gIGJvdHRvbTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTgwMCAxODAwXCI+XG4gICAgICAgICAgICA8bGluZSB4MT1cIjE1MFwiIHkxPVwiMTY1MFwiIHgyPVwiMTY1MFwiIHkyPVwiMTY1MFwiIHN0eWxlPVwic3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO1wiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxNTBcIiB5PVwiMzUwXCIgd2lkdGg9XCI2MDBcIiBoZWlnaHQ9XCIxMzAwXCIgcng9XCIxXCIgc3R5bGU9XCJmaWxsOm5vbmU7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO1wiPjwvcmVjdD5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxMDUwXCIgeT1cIjg1MFwiIHdpZHRoPVwiNjAwXCIgaGVpZ2h0PVwiODAwXCIgcng9XCIxXCIgc3R5bGU9XCJmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7b3BhY2l0eTouNTtcIj48L3JlY3Q+XG4gICAgICAgICAgPC9zdmc+YCxcbiAgY2VudGVyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxODAwIDE4MDBcIj5cbiAgICAgICAgICAgIDxsaW5lIHgxPVwiOTAwXCIgeTE9XCIxNTBcIiB4Mj1cIjkwMFwiIHkyPVwiMTY1MFwiIHN0eWxlPVwic3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO1wiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIyNTBcIiB5PVwiMTUwXCIgd2lkdGg9XCIxMzAwXCIgaGVpZ2h0PVwiNjAwXCIgcng9XCIxXCIgc3R5bGU9XCJmaWxsOm5vbmU7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO1wiPjwvcmVjdD5cbiAgICAgICAgICAgIDxyZWN0IHg9XCI1MDBcIiB5PVwiMTA1MFwiIHdpZHRoPVwiODAwXCIgaGVpZ2h0PVwiNjAwXCIgcng9XCIxXCIgc3R5bGU9XCJmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7b3BhY2l0eTouNTtcIj48L3JlY3Q+XG4gICAgICAgICAgPC9zdmc+YCxcbiAgbGVmdDogICBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxODAwIDE4MDBcIj5cbiAgICAgICAgICAgIDxsaW5lIHgxPVwiMTAwXCIgeTE9XCIxNTBcIiB4Mj1cIjEwMFwiIHkyPVwiMTY1MFwiIHN0eWxlPVwic3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO1wiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxMDBcIiB5PVwiMTUwXCIgd2lkdGg9XCIxMzAwXCIgaGVpZ2h0PVwiNjAwXCIgcng9XCIxXCIgc3R5bGU9XCJmaWxsOm5vbmU7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO1wiPjwvcmVjdD5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxMDBcIiB5PVwiMTA1MFwiIHdpZHRoPVwiODAwXCIgaGVpZ2h0PVwiNjAwXCIgcng9XCIxXCIgc3R5bGU9XCJmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7b3BhY2l0eTouNTtcIj48L3JlY3Q+XG4gICAgICAgICAgPC9zdmc+YCxcbiAgcmlnaHQ6ICBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxODAwIDE4MDBcIj5cbiAgICAgICAgICAgIDxsaW5lIHgxPVwiMTY1MFwiIHkxPVwiMTUwXCIgeDI9XCIxNjUwXCIgeTI9XCIxNjUwXCIgc3R5bGU9XCJzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7XCIvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjM1MFwiIHk9XCIxNTBcIiB3aWR0aD1cIjEzMDBcIiBoZWlnaHQ9XCI2MDBcIiByeD1cIjFcIiBzdHlsZT1cImZpbGw6bm9uZTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7XCI+PC9yZWN0PlxuICAgICAgICAgICAgPHJlY3QgeD1cIjg1MFwiIHk9XCIxMDUwXCIgd2lkdGg9XCI4MDBcIiBoZWlnaHQ9XCI2MDBcIiByeD1cIjFcIiBzdHlsZT1cImZpbGw6Y3VycmVudENvbG9yO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjEwMDtvcGFjaXR5Oi41O1wiPjwvcmVjdD5cbiAgICAgICAgICA8L3N2Zz5gLFxuICB0b3A6ICAgIGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE4MDAgMTgwMFwiPlxuICAgICAgICAgICAgPGxpbmUgeDE9XCIxNTBcIiB5MT1cIjE1MFwiIHgyPVwiMTY1MFwiIHkyPVwiMTUwXCIgc3R5bGU9XCJzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7XCIvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjE1MFwiIHk9XCIxNTBcIiB3aWR0aD1cIjYwMFwiIGhlaWdodD1cIjEzMDBcIiByeD1cIjFcIiBzdHlsZT1cImZpbGw6bm9uZTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7XCI+PC9yZWN0PlxuICAgICAgICAgICAgPHJlY3QgeD1cIjEwNTBcIiB5PVwiMTUwXCIgd2lkdGg9XCI2MDBcIiBoZWlnaHQ9XCI4MDBcIiByeD1cIjFcIiBzdHlsZT1cImZpbGw6Y3VycmVudENvbG9yO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjEwMDtvcGFjaXR5Oi41O1wiPjwvcmVjdD5cbiAgICAgICAgICA8L3N2Zz5gLFxuICBtaWRkbGU6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE4MDAgMTgwMFwiPlxuICAgICAgICAgICAgPGxpbmUgeDE9XCIxNTBcIiB5MT1cIjkwMFwiIHgyPVwiMTY1MFwiIHkyPVwiOTAwXCIgc3R5bGU9XCJzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7XCIvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjE1MFwiIHk9XCIyNTBcIiB3aWR0aD1cIjYwMFwiIGhlaWdodD1cIjEzMDBcIiByeD1cIjFcIiBzdHlsZT1cImZpbGw6bm9uZTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7XCI+PC9yZWN0PlxuICAgICAgICAgICAgPHJlY3QgeD1cIjEwNTBcIiB5PVwiNTAwXCIgd2lkdGg9XCI2MDBcIiBoZWlnaHQ9XCI4MDBcIiByeD1cIjFcIiBzdHlsZT1cImZpbGw6Y3VycmVudENvbG9yO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjEwMDtvcGFjaXR5Oi41O1wiPjwvcmVjdD5cbiAgICAgICAgICA8L3N2Zz5gXG59O1xuXG5leHBvcnQgZGVmYXVsdCBpY29ucztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsIcons.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsMenuProvider.js":
/*!********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsMenuProvider.js ***!
\********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AlignElementsMenuProvider)\n/* harmony export */ });\n/* harmony import */ var _AlignElementsIcons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AlignElementsIcons */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsIcons.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/features/align-elements/AlignElements').default} AlignElements\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu\n * @typedef {import('diagram-js/lib/features/rules/Rules').default} Rules\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n *\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').PopupMenuEntries} PopupMenuEntries\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').default} PopupMenuProvider\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').PopupMenuTarget} PopupMenuTarget\n */\n\nvar ALIGNMENT_OPTIONS = [\n 'left',\n 'center',\n 'right',\n 'top',\n 'middle',\n 'bottom'\n];\n\n/**\n * A provider for the `Align elements` popup menu.\n *\n * @implements {PopupMenuProvider}\n *\n * @param {PopupMenu} popupMenu\n * @param {AlignElements} alignElements\n * @param {Translate} translate\n * @param {Rules} rules\n */\nfunction AlignElementsMenuProvider(popupMenu, alignElements, translate, rules) {\n\n this._alignElements = alignElements;\n this._translate = translate;\n this._popupMenu = popupMenu;\n this._rules = rules;\n\n popupMenu.registerProvider('align-elements', this);\n}\n\nAlignElementsMenuProvider.$inject = [\n 'popupMenu',\n 'alignElements',\n 'translate',\n 'rules'\n];\n\n/**\n * @param {PopupMenuTarget} target\n *\n * @return {PopupMenuEntries}\n */\nAlignElementsMenuProvider.prototype.getPopupMenuEntries = function(target) {\n var entries = {};\n\n if (this._isAllowed(target)) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)(entries, this._getEntries(target));\n }\n\n return entries;\n};\n\nAlignElementsMenuProvider.prototype._isAllowed = function(target) {\n return this._rules.allowed('elements.align', { elements: target });\n};\n\n/**\n * @param {PopupMenuTarget} target\n *\n * @return {PopupMenuEntries}\n */\nAlignElementsMenuProvider.prototype._getEntries = function(target) {\n var alignElements = this._alignElements,\n translate = this._translate,\n popupMenu = this._popupMenu;\n\n var entries = {};\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.forEach)(ALIGNMENT_OPTIONS, function(alignment) {\n entries[ 'align-elements-' + alignment ] = {\n group: 'align',\n title: translate('Align elements ' + alignment),\n className: 'bjs-align-elements-menu-entry',\n imageHtml: _AlignElementsIcons__WEBPACK_IMPORTED_MODULE_1__[\"default\"][ alignment ],\n action: function() {\n alignElements.trigger(target, alignment);\n popupMenu.close();\n }\n };\n });\n\n return entries;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9BbGlnbkVsZW1lbnRzTWVudVByb3ZpZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF5Qzs7QUFLdkI7O0FBRWxCO0FBQ0EsYUFBYSx3RUFBd0U7QUFDckYsYUFBYSxnRUFBZ0U7QUFDN0UsYUFBYSx1REFBdUQ7QUFDcEUsYUFBYSwyREFBMkQ7QUFDeEU7QUFDQSxhQUFhLHlFQUF5RTtBQUN0RixhQUFhLHdFQUF3RTtBQUNyRixhQUFhLHdFQUF3RTtBQUNyRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLFdBQVcsV0FBVztBQUN0QixXQUFXLGVBQWU7QUFDMUIsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsT0FBTztBQUNsQjtBQUNlOztBQUVmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxnREFBTTtBQUNWOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQsa0JBQWtCO0FBQ25FOztBQUVBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxFQUFFLGlEQUFPO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsMkRBQUs7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2FsaWduLWVsZW1lbnRzL0FsaWduRWxlbWVudHNNZW51UHJvdmlkZXIuanM/M2FiMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSUNPTlMgZnJvbSAnLi9BbGlnbkVsZW1lbnRzSWNvbnMnO1xuXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZvckVhY2gsXG59IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9BbGlnbkVsZW1lbnRzJykuZGVmYXVsdH0gQWxpZ25FbGVtZW50c1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS9Qb3B1cE1lbnUnKS5kZWZhdWx0fSBQb3B1cE1lbnVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL1J1bGVzJykuZGVmYXVsdH0gUnVsZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlL3RyYW5zbGF0ZScpLmRlZmF1bHR9IFRyYW5zbGF0ZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3BvcHVwLW1lbnUvUG9wdXBNZW51JykuUG9wdXBNZW51RW50cmllc30gUG9wdXBNZW51RW50cmllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS9Qb3B1cE1lbnVQcm92aWRlcicpLmRlZmF1bHR9IFBvcHVwTWVudVByb3ZpZGVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudScpLlBvcHVwTWVudVRhcmdldH0gUG9wdXBNZW51VGFyZ2V0XG4gKi9cblxudmFyIEFMSUdOTUVOVF9PUFRJT05TID0gW1xuICAnbGVmdCcsXG4gICdjZW50ZXInLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ21pZGRsZScsXG4gICdib3R0b20nXG5dO1xuXG4vKipcbiAqIEEgcHJvdmlkZXIgZm9yIHRoZSBgQWxpZ24gZWxlbWVudHNgIHBvcHVwIG1lbnUuXG4gKlxuICogQGltcGxlbWVudHMge1BvcHVwTWVudVByb3ZpZGVyfVxuICpcbiAqIEBwYXJhbSB7UG9wdXBNZW51fSBwb3B1cE1lbnVcbiAqIEBwYXJhbSB7QWxpZ25FbGVtZW50c30gYWxpZ25FbGVtZW50c1xuICogQHBhcmFtIHtUcmFuc2xhdGV9IHRyYW5zbGF0ZVxuICogQHBhcmFtIHtSdWxlc30gcnVsZXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQWxpZ25FbGVtZW50c01lbnVQcm92aWRlcihwb3B1cE1lbnUsIGFsaWduRWxlbWVudHMsIHRyYW5zbGF0ZSwgcnVsZXMpIHtcblxuICB0aGlzLl9hbGlnbkVsZW1lbnRzID0gYWxpZ25FbGVtZW50cztcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgcG9wdXBNZW51LnJlZ2lzdGVyUHJvdmlkZXIoJ2FsaWduLWVsZW1lbnRzJywgdGhpcyk7XG59XG5cbkFsaWduRWxlbWVudHNNZW51UHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ3BvcHVwTWVudScsXG4gICdhbGlnbkVsZW1lbnRzJyxcbiAgJ3RyYW5zbGF0ZScsXG4gICdydWxlcydcbl07XG5cbi8qKlxuICogQHBhcmFtIHtQb3B1cE1lbnVUYXJnZXR9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge1BvcHVwTWVudUVudHJpZXN9XG4gKi9cbkFsaWduRWxlbWVudHNNZW51UHJvdmlkZXIucHJvdG90eXBlLmdldFBvcHVwTWVudUVudHJpZXMgPSBmdW5jdGlvbih0YXJnZXQpIHtcbiAgdmFyIGVudHJpZXMgPSB7fTtcblxuICBpZiAodGhpcy5faXNBbGxvd2VkKHRhcmdldCkpIHtcbiAgICBhc3NpZ24oZW50cmllcywgdGhpcy5fZ2V0RW50cmllcyh0YXJnZXQpKTtcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzO1xufTtcblxuQWxpZ25FbGVtZW50c01lbnVQcm92aWRlci5wcm90b3R5cGUuX2lzQWxsb3dlZCA9IGZ1bmN0aW9uKHRhcmdldCkge1xuICByZXR1cm4gdGhpcy5fcnVsZXMuYWxsb3dlZCgnZWxlbWVudHMuYWxpZ24nLCB7IGVsZW1lbnRzOiB0YXJnZXQgfSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7UG9wdXBNZW51VGFyZ2V0fSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJuIHtQb3B1cE1lbnVFbnRyaWVzfVxuICovXG5BbGlnbkVsZW1lbnRzTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fZ2V0RW50cmllcyA9IGZ1bmN0aW9uKHRhcmdldCkge1xuICB2YXIgYWxpZ25FbGVtZW50cyA9IHRoaXMuX2FsaWduRWxlbWVudHMsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGUsXG4gICAgICBwb3B1cE1lbnUgPSB0aGlzLl9wb3B1cE1lbnU7XG5cbiAgdmFyIGVudHJpZXMgPSB7fTtcblxuICBmb3JFYWNoKEFMSUdOTUVOVF9PUFRJT05TLCBmdW5jdGlvbihhbGlnbm1lbnQpIHtcbiAgICBlbnRyaWVzWyAnYWxpZ24tZWxlbWVudHMtJyArIGFsaWdubWVudCBdID0ge1xuICAgICAgZ3JvdXA6ICdhbGlnbicsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdBbGlnbiBlbGVtZW50cyAnICsgYWxpZ25tZW50KSxcbiAgICAgIGNsYXNzTmFtZTogJ2Jqcy1hbGlnbi1lbGVtZW50cy1tZW51LWVudHJ5JyxcbiAgICAgIGltYWdlSHRtbDogSUNPTlNbIGFsaWdubWVudCBdLFxuICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgYWxpZ25FbGVtZW50cy50cmlnZ2VyKHRhcmdldCwgYWxpZ25tZW50KTtcbiAgICAgICAgcG9wdXBNZW51LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsMenuProvider.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/BpmnAlignElements.js":
/*!************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/BpmnAlignElements.js ***!
\************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnAlignElements)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_features_rules_RuleProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/rules/RuleProvider */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/rules/RuleProvider.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n */\n\n/**\n * Rule provider for aligning BPMN elements.\n *\n * @param {EventBus} eventBus\n */\nfunction BpmnAlignElements(eventBus) {\n diagram_js_lib_features_rules_RuleProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n}\n\nBpmnAlignElements.$inject = [ 'eventBus' ];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BpmnAlignElements, diagram_js_lib_features_rules_RuleProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nBpmnAlignElements.prototype.init = function() {\n this.addRule('elements.align', function(context) {\n var elements = context.elements;\n\n // filter out elements which cannot be aligned\n var filteredElements = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.filter)(elements, function(element) {\n return !(element.waypoints || element.host || element.labelTarget);\n });\n\n // filter out elements which are children of any of the selected elements\n filteredElements = (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_3__.getParents)(filteredElements);\n\n if (filteredElements.length < 2) {\n return false;\n }\n\n return filteredElements;\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9CcG1uQWxpZ25FbGVtZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3Qzs7QUFFOEI7QUFDWjs7QUFJeEM7O0FBRWxCO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZixFQUFFLGtGQUFZO0FBQ2Q7O0FBRUE7O0FBRUEsNERBQVEsb0JBQW9CLGtGQUFZOztBQUV4QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsZ0RBQU07QUFDakM7QUFDQSxLQUFLOztBQUVMO0FBQ0EsdUJBQXVCLHdFQUFVOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9CcG1uQWxpZ25FbGVtZW50cy5qcz9kNjBmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IFJ1bGVQcm92aWRlciBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9SdWxlUHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0UGFyZW50cyB9IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMnO1xuXG5pbXBvcnQge1xuICBmaWx0ZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICovXG5cbi8qKlxuICogUnVsZSBwcm92aWRlciBmb3IgYWxpZ25pbmcgQlBNTiBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uQWxpZ25FbGVtZW50cyhldmVudEJ1cykge1xuICBSdWxlUHJvdmlkZXIuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG59XG5cbkJwbW5BbGlnbkVsZW1lbnRzLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuaW5oZXJpdHMoQnBtbkFsaWduRWxlbWVudHMsIFJ1bGVQcm92aWRlcik7XG5cbkJwbW5BbGlnbkVsZW1lbnRzLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuYWRkUnVsZSgnZWxlbWVudHMuYWxpZ24nLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIC8vIGZpbHRlciBvdXQgZWxlbWVudHMgd2hpY2ggY2Fubm90IGJlIGFsaWduZWRcbiAgICB2YXIgZmlsdGVyZWRFbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuICEoZWxlbWVudC53YXlwb2ludHMgfHwgZWxlbWVudC5ob3N0IHx8IGVsZW1lbnQubGFiZWxUYXJnZXQpO1xuICAgIH0pO1xuXG4gICAgLy8gZmlsdGVyIG91dCBlbGVtZW50cyB3aGljaCBhcmUgY2hpbGRyZW4gb2YgYW55IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50c1xuICAgIGZpbHRlcmVkRWxlbWVudHMgPSBnZXRQYXJlbnRzKGZpbHRlcmVkRWxlbWVudHMpO1xuXG4gICAgaWYgKGZpbHRlcmVkRWxlbWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xuICB9KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/BpmnAlignElements.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/index.js":
/*!************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/index.js ***!
\************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_align_elements__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/align-elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/align-elements/index.js\");\n/* harmony import */ var diagram_js_lib_features_context_pad__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/features/context-pad */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/context-pad/index.js\");\n/* harmony import */ var diagram_js_lib_features_popup_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/features/popup-menu */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/popup-menu/index.js\");\n/* harmony import */ var _AlignElementsContextPadProvider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AlignElementsContextPadProvider */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsContextPadProvider.js\");\n/* harmony import */ var _AlignElementsMenuProvider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AlignElementsMenuProvider */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/AlignElementsMenuProvider.js\");\n/* harmony import */ var _BpmnAlignElements__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./BpmnAlignElements */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/BpmnAlignElements.js\");\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n diagram_js_lib_features_align_elements__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n diagram_js_lib_features_context_pad__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n diagram_js_lib_features_popup_menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n ],\n __init__: [\n 'alignElementsContextPadProvider',\n 'alignElementsMenuProvider',\n 'bpmnAlignElements'\n ],\n alignElementsContextPadProvider: [ 'type', _AlignElementsContextPadProvider__WEBPACK_IMPORTED_MODULE_3__[\"default\"] ],\n alignElementsMenuProvider: [ 'type', _AlignElementsMenuProvider__WEBPACK_IMPORTED_MODULE_4__[\"default\"] ],\n bpmnAlignElements: [ 'type', _BpmnAlignElements__WEBPACK_IMPORTED_MODULE_5__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXlFO0FBQ047QUFDRjs7QUFFZTtBQUNaO0FBQ2hCOztBQUVwRCxpRUFBZTtBQUNmO0FBQ0EsSUFBSSw4RUFBbUI7QUFDdkIsSUFBSSwyRUFBZ0I7QUFDcEIsSUFBSSwwRUFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsd0VBQStCO0FBQzVFLHVDQUF1QyxrRUFBeUI7QUFDaEUsK0JBQStCLDBEQUFpQjtBQUNoRCxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hbGlnbi1lbGVtZW50cy9pbmRleC5qcz84MTBlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBbGlnbkVsZW1lbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2FsaWduLWVsZW1lbnRzJztcbmltcG9ydCBDb250ZXh0UGFkTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkJztcbmltcG9ydCBQb3B1cE1lbnVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudSc7XG5cbmltcG9ydCBBbGlnbkVsZW1lbnRzQ29udGV4dFBhZFByb3ZpZGVyIGZyb20gJy4vQWxpZ25FbGVtZW50c0NvbnRleHRQYWRQcm92aWRlcic7XG5pbXBvcnQgQWxpZ25FbGVtZW50c01lbnVQcm92aWRlciBmcm9tICcuL0FsaWduRWxlbWVudHNNZW51UHJvdmlkZXInO1xuaW1wb3J0IEJwbW5BbGlnbkVsZW1lbnRzIGZyb20gJy4vQnBtbkFsaWduRWxlbWVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQWxpZ25FbGVtZW50c01vZHVsZSxcbiAgICBDb250ZXh0UGFkTW9kdWxlLFxuICAgIFBvcHVwTWVudU1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogW1xuICAgICdhbGlnbkVsZW1lbnRzQ29udGV4dFBhZFByb3ZpZGVyJyxcbiAgICAnYWxpZ25FbGVtZW50c01lbnVQcm92aWRlcicsXG4gICAgJ2JwbW5BbGlnbkVsZW1lbnRzJ1xuICBdLFxuICBhbGlnbkVsZW1lbnRzQ29udGV4dFBhZFByb3ZpZGVyOiBbICd0eXBlJywgQWxpZ25FbGVtZW50c0NvbnRleHRQYWRQcm92aWRlciBdLFxuICBhbGlnbkVsZW1lbnRzTWVudVByb3ZpZGVyOiBbICd0eXBlJywgQWxpZ25FbGVtZW50c01lbnVQcm92aWRlciBdLFxuICBicG1uQWxpZ25FbGVtZW50czogWyAndHlwZScsIEJwbW5BbGlnbkVsZW1lbnRzIF1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/align-elements/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/append-preview/AppendPreview.js":
/*!********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/append-preview/AppendPreview.js ***!
\********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AppendPreview)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\nconst round = Math.round;\n\n/**\n * @typedef {import('diagram-js/lib/features/complex-preview/ComplexPreview').default} ComplexPreview\n * @typedef {import('diagram-js/lib/layout/ConnectionDocking').default} ConnectionDocking\n * @typedef {import('../modeling/ElementFactory').default} ElementFactory\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('diagram-js/lib/layout/ManhattanLayout').default} ManhattanLayout\n * @typedef {import('diagram-js/lib/features/rules/Rules').default} Rules\n *\n * @typedef {import('../../model/Types').Shape} Shape\n */\n\n/**\n * A preview for appending.\n *\n * @param {ComplexPreview} complexPreview\n * @param {ConnectionDocking} connectionDocking\n * @param {ElementFactory} elementFactory\n * @param {EventBus} eventBus\n * @param {ManhattanLayout} layouter\n * @param {Rules} rules\n */\nfunction AppendPreview(complexPreview, connectionDocking, elementFactory, eventBus, layouter, rules) {\n this._complexPreview = complexPreview;\n this._connectionDocking = connectionDocking;\n this._elementFactory = elementFactory;\n this._eventBus = eventBus;\n this._layouter = layouter;\n this._rules = rules;\n}\n\n/**\n * Create a preview of appending a shape of the given type to the given source.\n *\n * @param {Shape} source\n * @param {string} type\n * @param {Partial} options\n */\nAppendPreview.prototype.create = function(source, type, options) {\n const complexPreview = this._complexPreview,\n connectionDocking = this._connectionDocking,\n elementFactory = this._elementFactory,\n eventBus = this._eventBus,\n layouter = this._layouter,\n rules = this._rules;\n\n const shape = elementFactory.createShape((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)({ type }, options));\n\n const position = eventBus.fire('autoPlace', {\n source,\n shape\n });\n\n if (!position) {\n return;\n }\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)(shape, {\n x: position.x - round(shape.width / 2),\n y: position.y - round(shape.height / 2)\n });\n\n const connectionCreateAllowed = rules.allowed('connection.create', {\n source,\n target: shape,\n hints: {\n targetParent: source.parent\n }\n });\n\n let connection = null;\n\n if (connectionCreateAllowed) {\n connection = elementFactory.createConnection(connectionCreateAllowed);\n\n connection.waypoints = layouter.layoutConnection(connection, {\n source,\n target: shape\n });\n\n connection.waypoints = connectionDocking.getCroppedWaypoints(connection, source, shape);\n }\n\n complexPreview.create({\n created: [\n shape,\n connection\n ].filter((element) => !(0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isNil)(element))\n });\n};\n\nAppendPreview.prototype.cleanUp = function() {\n this._complexPreview.cleanUp();\n};\n\nAppendPreview.$inject = [\n 'complexPreview',\n 'connectionDocking',\n 'elementFactory',\n 'eventBus',\n 'layouter',\n 'rules'\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hcHBlbmQtcHJldmlldy9BcHBlbmRQcmV2aWV3LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBR2tCOztBQUVsQjs7QUFFQTtBQUNBLGFBQWEsMEVBQTBFO0FBQ3ZGLGFBQWEsMkRBQTJEO0FBQ3hFLGFBQWEsOENBQThDO0FBQzNELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEseURBQXlEO0FBQ3RFLGFBQWEsdURBQXVEO0FBQ3BFO0FBQ0EsYUFBYSxtQ0FBbUM7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxtQkFBbUI7QUFDOUIsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsT0FBTztBQUNsQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxnREFBTSxHQUFHLE1BQU07O0FBRTFEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBLEVBQUUsZ0RBQU07QUFDUjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLCtDQUFLO0FBQ2hDLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2FwcGVuZC1wcmV2aWV3L0FwcGVuZFByZXZpZXcuanM/M2U5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGlzTmlsXG59IGZyb20gJ21pbi1kYXNoJztcblxuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbXBsZXgtcHJldmlldy9Db21wbGV4UHJldmlldycpLmRlZmF1bHR9IENvbXBsZXhQcmV2aWV3XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9sYXlvdXQvQ29ubmVjdGlvbkRvY2tpbmcnKS5kZWZhdWx0fSBDb25uZWN0aW9uRG9ja2luZ1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vbW9kZWxpbmcvRWxlbWVudEZhY3RvcnknKS5kZWZhdWx0fSBFbGVtZW50RmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTWFuaGF0dGFuTGF5b3V0JykuZGVmYXVsdH0gTWFuaGF0dGFuTGF5b3V0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9ydWxlcy9SdWxlcycpLmRlZmF1bHR9IFJ1bGVzXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5TaGFwZX0gU2hhcGVcbiAqL1xuXG4vKipcbiAqIEEgcHJldmlldyBmb3IgYXBwZW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7Q29tcGxleFByZXZpZXd9IGNvbXBsZXhQcmV2aWV3XG4gKiBAcGFyYW0ge0Nvbm5lY3Rpb25Eb2NraW5nfSBjb25uZWN0aW9uRG9ja2luZ1xuICogQHBhcmFtIHtFbGVtZW50RmFjdG9yeX0gZWxlbWVudEZhY3RvcnlcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01hbmhhdHRhbkxheW91dH0gbGF5b3V0ZXJcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcGVuZFByZXZpZXcoY29tcGxleFByZXZpZXcsIGNvbm5lY3Rpb25Eb2NraW5nLCBlbGVtZW50RmFjdG9yeSwgZXZlbnRCdXMsIGxheW91dGVyLCBydWxlcykge1xuICB0aGlzLl9jb21wbGV4UHJldmlldyA9IGNvbXBsZXhQcmV2aWV3O1xuICB0aGlzLl9jb25uZWN0aW9uRG9ja2luZyA9IGNvbm5lY3Rpb25Eb2NraW5nO1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB0aGlzLl9sYXlvdXRlciA9IGxheW91dGVyO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHByZXZpZXcgb2YgYXBwZW5kaW5nIGEgc2hhcGUgb2YgdGhlIGdpdmVuIHR5cGUgdG8gdGhlIGdpdmVuIHNvdXJjZS5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBzb3VyY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge1BhcnRpYWw8U2hhcGU+fSBvcHRpb25zXG4gKi9cbkFwcGVuZFByZXZpZXcucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgdHlwZSwgb3B0aW9ucykge1xuICBjb25zdCBjb21wbGV4UHJldmlldyA9IHRoaXMuX2NvbXBsZXhQcmV2aWV3LFxuICAgICAgICBjb25uZWN0aW9uRG9ja2luZyA9IHRoaXMuX2Nvbm5lY3Rpb25Eb2NraW5nLFxuICAgICAgICBlbGVtZW50RmFjdG9yeSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LFxuICAgICAgICBldmVudEJ1cyA9IHRoaXMuX2V2ZW50QnVzLFxuICAgICAgICBsYXlvdXRlciA9IHRoaXMuX2xheW91dGVyLFxuICAgICAgICBydWxlcyA9IHRoaXMuX3J1bGVzO1xuXG4gIGNvbnN0IHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoYXNzaWduKHsgdHlwZSB9LCBvcHRpb25zKSk7XG5cbiAgY29uc3QgcG9zaXRpb24gPSBldmVudEJ1cy5maXJlKCdhdXRvUGxhY2UnLCB7XG4gICAgc291cmNlLFxuICAgIHNoYXBlXG4gIH0pO1xuXG4gIGlmICghcG9zaXRpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3NpZ24oc2hhcGUsIHtcbiAgICB4OiBwb3NpdGlvbi54IC0gcm91bmQoc2hhcGUud2lkdGggLyAyKSxcbiAgICB5OiBwb3NpdGlvbi55IC0gcm91bmQoc2hhcGUuaGVpZ2h0IC8gMilcbiAgfSk7XG5cbiAgY29uc3QgY29ubmVjdGlvbkNyZWF0ZUFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKCdjb25uZWN0aW9uLmNyZWF0ZScsIHtcbiAgICBzb3VyY2UsXG4gICAgdGFyZ2V0OiBzaGFwZSxcbiAgICBoaW50czoge1xuICAgICAgdGFyZ2V0UGFyZW50OiBzb3VyY2UucGFyZW50XG4gICAgfVxuICB9KTtcblxuICBsZXQgY29ubmVjdGlvbiA9IG51bGw7XG5cbiAgaWYgKGNvbm5lY3Rpb25DcmVhdGVBbGxvd2VkKSB7XG4gICAgY29ubmVjdGlvbiA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZUNvbm5lY3Rpb24oY29ubmVjdGlvbkNyZWF0ZUFsbG93ZWQpO1xuXG4gICAgY29ubmVjdGlvbi53YXlwb2ludHMgPSBsYXlvdXRlci5sYXlvdXRDb25uZWN0aW9uKGNvbm5lY3Rpb24sIHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHRhcmdldDogc2hhcGVcbiAgICB9KTtcblxuICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uLCBzb3VyY2UsIHNoYXBlKTtcbiAgfVxuXG4gIGNvbXBsZXhQcmV2aWV3LmNyZWF0ZSh7XG4gICAgY3JlYXRlZDogW1xuICAgICAgc2hhcGUsXG4gICAgICBjb25uZWN0aW9uXG4gICAgXS5maWx0ZXIoKGVsZW1lbnQpID0+ICFpc05pbChlbGVtZW50KSlcbiAgfSk7XG59O1xuXG5BcHBlbmRQcmV2aWV3LnByb3RvdHlwZS5jbGVhblVwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NvbXBsZXhQcmV2aWV3LmNsZWFuVXAoKTtcbn07XG5cbkFwcGVuZFByZXZpZXcuJGluamVjdCA9IFtcbiAgJ2NvbXBsZXhQcmV2aWV3JyxcbiAgJ2Nvbm5lY3Rpb25Eb2NraW5nJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2xheW91dGVyJyxcbiAgJ3J1bGVzJ1xuXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/append-preview/AppendPreview.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/append-preview/index.js":
/*!************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/append-preview/index.js ***!
\************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _auto_place__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../auto-place */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/index.js\");\n/* harmony import */ var diagram_js_lib_features_complex_preview__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/features/complex-preview */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/complex-preview/index.js\");\n/* harmony import */ var _modeling__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modeling */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/index.js\");\n/* harmony import */ var _AppendPreview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AppendPreview */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/append-preview/AppendPreview.js\");\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n _auto_place__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n diagram_js_lib_features_complex_preview__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _modeling__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n ],\n __init__: [ 'appendPreview' ],\n appendPreview: [ 'type', _AppendPreview__WEBPACK_IMPORTED_MODULE_3__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hcHBlbmQtcHJldmlldy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE0QztBQUMrQjtBQUNsQzs7QUFFRzs7QUFFNUMsaUVBQWU7QUFDZjtBQUNBLElBQUksbURBQWU7QUFDbkIsSUFBSSwrRUFBb0I7QUFDeEIsSUFBSSxpREFBYztBQUNsQjtBQUNBO0FBQ0EsMkJBQTJCLHNEQUFhO0FBQ3hDLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2FwcGVuZC1wcmV2aWV3L2luZGV4LmpzPzkzOTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF1dG9QbGFjZU1vZHVsZSBmcm9tICcuLi9hdXRvLXBsYWNlJztcbmltcG9ydCBDb21wbGV4UHJldmlld01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb21wbGV4LXByZXZpZXcnO1xuaW1wb3J0IE1vZGVsaW5nTW9kdWxlIGZyb20gJy4uL21vZGVsaW5nJztcblxuaW1wb3J0IEFwcGVuZFByZXZpZXcgZnJvbSAnLi9BcHBlbmRQcmV2aWV3JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEF1dG9QbGFjZU1vZHVsZSxcbiAgICBDb21wbGV4UHJldmlld01vZHVsZSxcbiAgICBNb2RlbGluZ01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYXBwZW5kUHJldmlldycgXSxcbiAgYXBwZW5kUHJldmlldzogWyAndHlwZScsIEFwcGVuZFByZXZpZXcgXVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/append-preview/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlace.js":
/*!****************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlace.js ***!
\****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AutoPlace)\n/* harmony export */ });\n/* harmony import */ var _BpmnAutoPlaceUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BpmnAutoPlaceUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlaceUtil.js\");\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n */\n\n/**\n * BPMN auto-place behavior.\n *\n * @param {EventBus} eventBus\n */\nfunction AutoPlace(eventBus) {\n eventBus.on('autoPlace', function(context) {\n var shape = context.shape,\n source = context.source;\n\n return (0,_BpmnAutoPlaceUtil__WEBPACK_IMPORTED_MODULE_0__.getNewShapePosition)(source, shape);\n });\n}\n\nAutoPlace.$inject = [ 'eventBus' ];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0JwbW5BdXRvUGxhY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMEQ7O0FBRTFEO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUEsV0FBVyx1RUFBbUI7QUFDOUIsR0FBRztBQUNIOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9CcG1uQXV0b1BsYWNlLmpzPzdiZjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TmV3U2hhcGVQb3NpdGlvbiB9IGZyb20gJy4vQnBtbkF1dG9QbGFjZVV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICovXG5cbi8qKlxuICogQlBNTiBhdXRvLXBsYWNlIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEF1dG9QbGFjZShldmVudEJ1cykge1xuICBldmVudEJ1cy5vbignYXV0b1BsYWNlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlO1xuXG4gICAgcmV0dXJuIGdldE5ld1NoYXBlUG9zaXRpb24oc291cmNlLCBzaGFwZSk7XG4gIH0pO1xufVxuXG5BdXRvUGxhY2UuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlace.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlaceUtil.js":
/*!********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlaceUtil.js ***!
\********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getDataElementPosition: () => (/* binding */ getDataElementPosition),\n/* harmony export */ getFlowNodePosition: () => (/* binding */ getFlowNodePosition),\n/* harmony export */ getNewShapePosition: () => (/* binding */ getNewShapePosition),\n/* harmony export */ getTextAnnotationPosition: () => (/* binding */ getTextAnnotationPosition)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modeling/util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_features_auto_place_AutoPlaceUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/features/auto-place/AutoPlaceUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/auto-place/AutoPlaceUtil.js\");\n/* harmony import */ var diagram_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('../../model/Types').Shape} Shape\n *\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n * @typedef {import('diagram-js/lib/util/Types').DirectionTRBL} DirectionTRBL\n */\n\n/**\n * Get the position for given new target relative to the source it will be\n * connected to.\n *\n * @param {Shape} source\n * @param {Shape} element\n *\n * @return {Point}\n */\nfunction getNewShapePosition(source, element) {\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:TextAnnotation')) {\n return getTextAnnotationPosition(source, element);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(element, [ 'bpmn:DataObjectReference', 'bpmn:DataStoreReference' ])) {\n return getDataElementPosition(source, element);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:FlowNode')) {\n return getFlowNodePosition(source, element);\n }\n}\n\n/**\n * Get the position for given new flow node. Try placing the flow node right of\n * the source.\n *\n * @param {Shape} source\n * @param {Shape} element\n *\n * @return {Point}\n */\nfunction getFlowNodePosition(source, element) {\n\n var sourceTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.asTRBL)(source);\n var sourceMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.getMid)(source);\n\n var horizontalDistance = (0,diagram_js_lib_features_auto_place_AutoPlaceUtil__WEBPACK_IMPORTED_MODULE_2__.getConnectedDistance)(source, {\n filter: function(connection) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(connection, 'bpmn:SequenceFlow');\n }\n });\n\n var margin = 30,\n minDistance = 80,\n orientation = 'left';\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(source, 'bpmn:BoundaryEvent')) {\n orientation = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.getOrientation)(source, source.host, -25);\n\n if (orientation.indexOf('top') !== -1) {\n margin *= -1;\n }\n }\n\n var position = {\n x: sourceTrbl.right + horizontalDistance + element.width / 2,\n y: sourceMid.y + getVerticalDistance(orientation, minDistance)\n };\n\n var nextPositionDirection = {\n y: {\n margin: margin,\n minDistance: minDistance\n }\n };\n\n return (0,diagram_js_lib_features_auto_place_AutoPlaceUtil__WEBPACK_IMPORTED_MODULE_2__.findFreePosition)(source, element, position, (0,diagram_js_lib_features_auto_place_AutoPlaceUtil__WEBPACK_IMPORTED_MODULE_2__.generateGetNextPosition)(nextPositionDirection));\n}\n\n/**\n * @param {DirectionTRBL} orientation\n * @param {number} minDistance\n *\n * @return {number}\n */\nfunction getVerticalDistance(orientation, minDistance) {\n if (orientation.includes('top')) {\n return -1 * minDistance;\n } else if (orientation.includes('bottom')) {\n return minDistance;\n } else {\n return 0;\n }\n}\n\n\n/**\n * Get the position for given text annotation. Try placing the text annotation\n * top-right of the source.\n *\n * @param {Shape} source\n * @param {Shape} element\n *\n * @return {Point}\n */\nfunction getTextAnnotationPosition(source, element) {\n\n var sourceTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.asTRBL)(source);\n\n var position = {\n x: sourceTrbl.right + element.width / 2,\n y: sourceTrbl.top - 50 - element.height / 2\n };\n\n if ((0,diagram_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.isConnection)(source)) {\n position = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.getMid)(source);\n position.x += 100;\n position.y -= 50;\n }\n\n var nextPositionDirection = {\n y: {\n margin: -30,\n minDistance: 20\n }\n };\n\n return (0,diagram_js_lib_features_auto_place_AutoPlaceUtil__WEBPACK_IMPORTED_MODULE_2__.findFreePosition)(source, element, position, (0,diagram_js_lib_features_auto_place_AutoPlaceUtil__WEBPACK_IMPORTED_MODULE_2__.generateGetNextPosition)(nextPositionDirection));\n}\n\n\n/**\n * Get the position for given new data element. Try placing the data element\n * bottom-right of the source.\n *\n * @param {Shape} source\n * @param {Shape} element\n *\n * @return {Point}\n */\nfunction getDataElementPosition(source, element) {\n\n var sourceTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.asTRBL)(source);\n\n var position = {\n x: sourceTrbl.right - 10 + element.width / 2,\n y: sourceTrbl.bottom + 40 + element.width / 2\n };\n\n var nextPositionDirection = {\n x: {\n margin: 30,\n minDistance: 30\n }\n };\n\n return (0,diagram_js_lib_features_auto_place_AutoPlaceUtil__WEBPACK_IMPORTED_MODULE_2__.findFreePosition)(source, element, position, (0,diagram_js_lib_features_auto_place_AutoPlaceUtil__WEBPACK_IMPORTED_MODULE_2__.generateGetNextPosition)(nextPositionDirection));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0JwbW5BdXRvUGxhY2VVdGlsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQTBDO0FBQ1k7O0FBTVo7O0FBTWdCOztBQUVHOztBQUU3RDtBQUNBLGFBQWEsbUNBQW1DO0FBQ2hEO0FBQ0EsYUFBYSwyQ0FBMkM7QUFDeEQsYUFBYSxtREFBbUQ7QUFDaEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ087O0FBRVAsTUFBTSxtREFBRTtBQUNSO0FBQ0E7O0FBRUEsTUFBTSxzREFBSztBQUNYO0FBQ0E7O0FBRUEsTUFBTSxtREFBRTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZO0FBQ1o7QUFDTzs7QUFFUCxtQkFBbUIsd0VBQU07QUFDekIsa0JBQWtCLHdFQUFNOztBQUV4QiwyQkFBMkIsc0dBQW9CO0FBQy9DO0FBQ0EsYUFBYSxtREFBRTtBQUNmO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxtREFBRTtBQUNSLGtCQUFrQixnRkFBYzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsa0dBQWdCLDRCQUE0Qix5R0FBdUI7QUFDNUU7O0FBRUE7QUFDQSxXQUFXLGVBQWU7QUFDMUIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWTtBQUNaO0FBQ087O0FBRVAsbUJBQW1CLHdFQUFNOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLDJFQUFZO0FBQ2xCLGVBQWUsd0VBQU07QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLGtHQUFnQiw0QkFBNEIseUdBQXVCO0FBQzVFOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZO0FBQ1o7QUFDTzs7QUFFUCxtQkFBbUIsd0VBQU07O0FBRXpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLGtHQUFnQiw0QkFBNEIseUdBQXVCO0FBQzVFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1wbGFjZS9CcG1uQXV0b1BsYWNlVXRpbC5qcz8wYzI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgYXNUUkJMLFxuICBnZXRPcmllbnRhdGlvblxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGZpbmRGcmVlUG9zaXRpb24sXG4gIGdlbmVyYXRlR2V0TmV4dFBvc2l0aW9uLFxuICBnZXRDb25uZWN0ZWREaXN0YW5jZVxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL0F1dG9QbGFjZVV0aWwnO1xuXG5pbXBvcnQgeyBpc0Nvbm5lY3Rpb24gfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5TaGFwZX0gU2hhcGVcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi91dGlsL1R5cGVzJykuUG9pbnR9IFBvaW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi91dGlsL1R5cGVzJykuRGlyZWN0aW9uVFJCTH0gRGlyZWN0aW9uVFJCTFxuICovXG5cbi8qKlxuICogR2V0IHRoZSBwb3NpdGlvbiBmb3IgZ2l2ZW4gbmV3IHRhcmdldCByZWxhdGl2ZSB0byB0aGUgc291cmNlIGl0IHdpbGwgYmVcbiAqIGNvbm5lY3RlZCB0by5cbiAqXG4gKiBAcGFyYW0gIHtTaGFwZX0gc291cmNlXG4gKiBAcGFyYW0gIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3U2hhcGVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpIHtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIHJldHVybiBnZXRUZXh0QW5ub3RhdGlvblBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCk7XG4gIH1cblxuICBpZiAoaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJywgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyBdKSkge1xuICAgIHJldHVybiBnZXREYXRhRWxlbWVudFBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgIHJldHVybiBnZXRGbG93Tm9kZVBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHBvc2l0aW9uIGZvciBnaXZlbiBuZXcgZmxvdyBub2RlLiBUcnkgcGxhY2luZyB0aGUgZmxvdyBub2RlIHJpZ2h0IG9mXG4gKiB0aGUgc291cmNlLlxuICpcbiAqIEBwYXJhbSB7U2hhcGV9IHNvdXJjZVxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd05vZGVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpIHtcblxuICB2YXIgc291cmNlVHJibCA9IGFzVFJCTChzb3VyY2UpO1xuICB2YXIgc291cmNlTWlkID0gZ2V0TWlkKHNvdXJjZSk7XG5cbiAgdmFyIGhvcml6b250YWxEaXN0YW5jZSA9IGdldENvbm5lY3RlZERpc3RhbmNlKHNvdXJjZSwge1xuICAgIGZpbHRlcjogZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIGlzKGNvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIG1hcmdpbiA9IDMwLFxuICAgICAgbWluRGlzdGFuY2UgPSA4MCxcbiAgICAgIG9yaWVudGF0aW9uID0gJ2xlZnQnO1xuXG4gIGlmIChpcyhzb3VyY2UsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSkge1xuICAgIG9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24oc291cmNlLCBzb3VyY2UuaG9zdCwgLTI1KTtcblxuICAgIGlmIChvcmllbnRhdGlvbi5pbmRleE9mKCd0b3AnKSAhPT0gLTEpIHtcbiAgICAgIG1hcmdpbiAqPSAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgcG9zaXRpb24gPSB7XG4gICAgeDogc291cmNlVHJibC5yaWdodCArIGhvcml6b250YWxEaXN0YW5jZSArIGVsZW1lbnQud2lkdGggLyAyLFxuICAgIHk6IHNvdXJjZU1pZC55ICsgZ2V0VmVydGljYWxEaXN0YW5jZShvcmllbnRhdGlvbiwgbWluRGlzdGFuY2UpXG4gIH07XG5cbiAgdmFyIG5leHRQb3NpdGlvbkRpcmVjdGlvbiA9IHtcbiAgICB5OiB7XG4gICAgICBtYXJnaW46IG1hcmdpbixcbiAgICAgIG1pbkRpc3RhbmNlOiBtaW5EaXN0YW5jZVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZmluZEZyZWVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQsIHBvc2l0aW9uLCBnZW5lcmF0ZUdldE5leHRQb3NpdGlvbihuZXh0UG9zaXRpb25EaXJlY3Rpb24pKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RpcmVjdGlvblRSQkx9IG9yaWVudGF0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbWluRGlzdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFZlcnRpY2FsRGlzdGFuY2Uob3JpZW50YXRpb24sIG1pbkRpc3RhbmNlKSB7XG4gIGlmIChvcmllbnRhdGlvbi5pbmNsdWRlcygndG9wJykpIHtcbiAgICByZXR1cm4gLTEgKiBtaW5EaXN0YW5jZTtcbiAgfSBlbHNlIGlmIChvcmllbnRhdGlvbi5pbmNsdWRlcygnYm90dG9tJykpIHtcbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vKipcbiAqIEdldCB0aGUgcG9zaXRpb24gZm9yIGdpdmVuIHRleHQgYW5ub3RhdGlvbi4gVHJ5IHBsYWNpbmcgdGhlIHRleHQgYW5ub3RhdGlvblxuICogdG9wLXJpZ2h0IG9mIHRoZSBzb3VyY2UuXG4gKlxuICogQHBhcmFtIHtTaGFwZX0gc291cmNlXG4gKiBAcGFyYW0ge1NoYXBlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0QW5ub3RhdGlvblBvc2l0aW9uKHNvdXJjZSwgZWxlbWVudCkge1xuXG4gIHZhciBzb3VyY2VUcmJsID0gYXNUUkJMKHNvdXJjZSk7XG5cbiAgdmFyIHBvc2l0aW9uID0ge1xuICAgIHg6IHNvdXJjZVRyYmwucmlnaHQgKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICB5OiBzb3VyY2VUcmJsLnRvcCAtIDUwIC0gZWxlbWVudC5oZWlnaHQgLyAyXG4gIH07XG5cbiAgaWYgKGlzQ29ubmVjdGlvbihzb3VyY2UpKSB7XG4gICAgcG9zaXRpb24gPSBnZXRNaWQoc291cmNlKTtcbiAgICBwb3NpdGlvbi54ICs9IDEwMDtcbiAgICBwb3NpdGlvbi55IC09IDUwO1xuICB9XG5cbiAgdmFyIG5leHRQb3NpdGlvbkRpcmVjdGlvbiA9IHtcbiAgICB5OiB7XG4gICAgICBtYXJnaW46IC0zMCxcbiAgICAgIG1pbkRpc3RhbmNlOiAyMFxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZmluZEZyZWVQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQsIHBvc2l0aW9uLCBnZW5lcmF0ZUdldE5leHRQb3NpdGlvbihuZXh0UG9zaXRpb25EaXJlY3Rpb24pKTtcbn1cblxuXG4vKipcbiAqIEdldCB0aGUgcG9zaXRpb24gZm9yIGdpdmVuIG5ldyBkYXRhIGVsZW1lbnQuIFRyeSBwbGFjaW5nIHRoZSBkYXRhIGVsZW1lbnRcbiAqIGJvdHRvbS1yaWdodCBvZiB0aGUgc291cmNlLlxuICpcbiAqIEBwYXJhbSB7U2hhcGV9IHNvdXJjZVxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YUVsZW1lbnRQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpIHtcblxuICB2YXIgc291cmNlVHJibCA9IGFzVFJCTChzb3VyY2UpO1xuXG4gIHZhciBwb3NpdGlvbiA9IHtcbiAgICB4OiBzb3VyY2VUcmJsLnJpZ2h0IC0gMTAgKyBlbGVtZW50LndpZHRoIC8gMixcbiAgICB5OiBzb3VyY2VUcmJsLmJvdHRvbSArIDQwICsgZWxlbWVudC53aWR0aCAvIDJcbiAgfTtcblxuICB2YXIgbmV4dFBvc2l0aW9uRGlyZWN0aW9uID0ge1xuICAgIHg6IHtcbiAgICAgIG1hcmdpbjogMzAsXG4gICAgICBtaW5EaXN0YW5jZTogMzBcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGZpbmRGcmVlUG9zaXRpb24oc291cmNlLCBlbGVtZW50LCBwb3NpdGlvbiwgZ2VuZXJhdGVHZXROZXh0UG9zaXRpb24obmV4dFBvc2l0aW9uRGlyZWN0aW9uKSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlaceUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/index.js":
/*!********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/index.js ***!
\********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_auto_place__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/auto-place */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/auto-place/index.js\");\n/* harmony import */ var _BpmnAutoPlace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BpmnAutoPlace */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlace.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [ diagram_js_lib_features_auto_place__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ],\n __init__: [ 'bpmnAutoPlace' ],\n bpmnAutoPlace: [ 'type', _BpmnAutoPlace__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFpRTs7QUFFckI7O0FBRTVDLGlFQUFlO0FBQ2YsaUJBQWlCLDBFQUFlO0FBQ2hDO0FBQ0EsMkJBQTJCLHNEQUFhO0FBQ3hDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlL2luZGV4LmpzP2ZmOGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF1dG9QbGFjZU1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXBsYWNlJztcblxuaW1wb3J0IEJwbW5BdXRvUGxhY2UgZnJvbSAnLi9CcG1uQXV0b1BsYWNlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogWyBBdXRvUGxhY2VNb2R1bGUgXSxcbiAgX19pbml0X186IFsgJ2JwbW5BdXRvUGxhY2UnIF0sXG4gIGJwbW5BdXRvUGxhY2U6IFsgJ3R5cGUnLCBCcG1uQXV0b1BsYWNlIF1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/BpmnAutoResize.js":
/*!******************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/BpmnAutoResize.js ***!
\******************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnAutoResize)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_auto_resize_AutoResize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/auto-resize/AutoResize */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/auto-resize/AutoResize.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('didi').Injector} Injector\n *\n * @typedef {import('../../model/Types').Shape} Shape\n *\n * @typedef {import('diagram-js/lib/util/Types').Rect} Rect\n */\n\n/**\n * BPMN-specific resize behavior.\n *\n * @param {Injector} injector\n */\nfunction BpmnAutoResize(injector) {\n\n injector.invoke(diagram_js_lib_features_auto_resize_AutoResize__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n}\n\nBpmnAutoResize.$inject = [\n 'injector'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BpmnAutoResize, diagram_js_lib_features_auto_resize_AutoResize__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/**\n * Perform BPMN-specific resizing of participants.\n *\n * @param {Shape} target\n * @param {Rect} newBounds\n * @param {Object} [hints]\n * @param {string} [hints.autoResize]\n */\nBpmnAutoResize.prototype.resize = function(target, newBounds, hints) {\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:Participant')) {\n this._modeling.resizeLane(target, newBounds, null, hints);\n } else {\n this._modeling.resizeShape(target, newBounds, null, hints);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9CcG1uQXV0b1Jlc2l6ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdFOztBQUVoQzs7QUFFRTs7QUFFMUM7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBLGFBQWEsbUNBQW1DO0FBQ2hEO0FBQ0EsYUFBYSwwQ0FBMEM7QUFDdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7O0FBRWYsa0JBQWtCLHNGQUFVO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0REFBUSxpQkFBaUIsc0ZBQVU7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE1BQU07QUFDakIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBLE1BQU0sbURBQUU7QUFDUjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9CcG1uQXV0b1Jlc2l6ZS5qcz8yNWZjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBdXRvUmVzaXplIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0F1dG9SZXNpemUnO1xuXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpZGknKS5JbmplY3Rvcn0gSW5qZWN0b3JcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLlNoYXBlfSBTaGFwZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL3V0aWwvVHlwZXMnKS5SZWN0fSBSZWN0XG4gKi9cblxuLyoqXG4gKiBCUE1OLXNwZWNpZmljIHJlc2l6ZSBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uQXV0b1Jlc2l6ZShpbmplY3Rvcikge1xuXG4gIGluamVjdG9yLmludm9rZShBdXRvUmVzaXplLCB0aGlzKTtcbn1cblxuQnBtbkF1dG9SZXNpemUuJGluamVjdCA9IFtcbiAgJ2luamVjdG9yJ1xuXTtcblxuaW5oZXJpdHMoQnBtbkF1dG9SZXNpemUsIEF1dG9SZXNpemUpO1xuXG4vKipcbiAqIFBlcmZvcm0gQlBNTi1zcGVjaWZpYyByZXNpemluZyBvZiBwYXJ0aWNpcGFudHMuXG4gKlxuICogQHBhcmFtIHtTaGFwZX0gdGFyZ2V0XG4gKiBAcGFyYW0ge1JlY3R9IG5ld0JvdW5kc1xuICogQHBhcmFtIHtPYmplY3R9IFtoaW50c11cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaGludHMuYXV0b1Jlc2l6ZV1cbiAqL1xuQnBtbkF1dG9SZXNpemUucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKHRhcmdldCwgbmV3Qm91bmRzLCBoaW50cykge1xuXG4gIGlmIChpcyh0YXJnZXQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICB0aGlzLl9tb2RlbGluZy5yZXNpemVMYW5lKHRhcmdldCwgbmV3Qm91bmRzLCBudWxsLCBoaW50cyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbW9kZWxpbmcucmVzaXplU2hhcGUodGFyZ2V0LCBuZXdCb3VuZHMsIG51bGwsIGhpbnRzKTtcbiAgfVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/BpmnAutoResize.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/BpmnAutoResizeProvider.js":
/*!**************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/BpmnAutoResizeProvider.js ***!
\**************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnAutoResizeProvider)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_features_auto_resize_AutoResizeProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/auto-resize/AutoResizeProvider */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/auto-resize/AutoResizeProvider.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../modeling/Modeling').default} Modeling\n *\n * @typedef {import('../../model/Types').Shape} Shape\n */\n\n/**\n * BPMN-specific provider for automatic resizung.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction BpmnAutoResizeProvider(eventBus, modeling) {\n diagram_js_lib_features_auto_resize_AutoResizeProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this._modeling = modeling;\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BpmnAutoResizeProvider, diagram_js_lib_features_auto_resize_AutoResizeProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nBpmnAutoResizeProvider.$inject = [\n 'eventBus',\n 'modeling'\n];\n\n\n/**\n * BPMN-specific check whether given elements can be resized.\n *\n * @param {Shape[]} elements\n * @param {Shape} target\n *\n * @return {boolean}\n */\nBpmnAutoResizeProvider.prototype.canResize = function(elements, target) {\n\n // do not resize plane elements:\n // root elements, collapsed sub-processes\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target.di, 'bpmndi:BPMNPlane')) {\n return false;\n }\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:Participant') && !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:Lane') && !((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:SubProcess'))) {\n return false;\n }\n\n var canResize = true;\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_3__.forEach)(elements, function(element) {\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:Lane') || (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_4__.isLabel)(element)) {\n canResize = false;\n return;\n }\n });\n\n return canResize;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9CcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUEwQzs7QUFFSzs7QUFFUDs7QUFFTDs7QUFFcUQ7O0FBRXhGO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSx3Q0FBd0M7QUFDckQ7QUFDQSxhQUFhLG1DQUFtQztBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZixFQUFFLDhGQUFrQjs7QUFFcEI7QUFDQTs7QUFFQSw0REFBUSx5QkFBeUIsOEZBQWtCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLG1EQUFFO0FBQ1I7QUFDQTs7QUFFQSxPQUFPLG1EQUFFLGlDQUFpQyxtREFBRSwyQkFBMkIsbURBQUU7QUFDekU7QUFDQTs7QUFFQTs7QUFFQSxFQUFFLGlEQUFPOztBQUVULFFBQVEsbURBQUUsMEJBQTBCLHdEQUFPO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0JwbW5BdXRvUmVzaXplUHJvdmlkZXIuanM/NTIwOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHsgaXNMYWJlbCB9IGZyb20gJy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQXV0b1Jlc2l6ZVByb3ZpZGVyIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2F1dG8tcmVzaXplL0F1dG9SZXNpemVQcm92aWRlcic7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9tb2RlbGluZy9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5TaGFwZX0gU2hhcGVcbiAqL1xuXG4vKipcbiAqIEJQTU4tc3BlY2lmaWMgcHJvdmlkZXIgZm9yIGF1dG9tYXRpYyByZXNpenVuZy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkF1dG9SZXNpemVQcm92aWRlcihldmVudEJ1cywgbW9kZWxpbmcpIHtcbiAgQXV0b1Jlc2l6ZVByb3ZpZGVyLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG59XG5cbmluaGVyaXRzKEJwbW5BdXRvUmVzaXplUHJvdmlkZXIsIEF1dG9SZXNpemVQcm92aWRlcik7XG5cbkJwbW5BdXRvUmVzaXplUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG4vKipcbiAqIEJQTU4tc3BlY2lmaWMgY2hlY2sgd2hldGhlciBnaXZlbiBlbGVtZW50cyBjYW4gYmUgcmVzaXplZC5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlW119IGVsZW1lbnRzXG4gKiBAcGFyYW0ge1NoYXBlfSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5CcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyLnByb3RvdHlwZS5jYW5SZXNpemUgPSBmdW5jdGlvbihlbGVtZW50cywgdGFyZ2V0KSB7XG5cbiAgLy8gZG8gbm90IHJlc2l6ZSBwbGFuZSBlbGVtZW50czpcbiAgLy8gcm9vdCBlbGVtZW50cywgY29sbGFwc2VkIHN1Yi1wcm9jZXNzZXNcbiAgaWYgKGlzKHRhcmdldC5kaSwgJ2JwbW5kaTpCUE1OUGxhbmUnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXModGFyZ2V0LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICFpcyh0YXJnZXQsICdicG1uOkxhbmUnKSAmJiAhKGlzKHRhcmdldCwgJ2JwbW46U3ViUHJvY2VzcycpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjYW5SZXNpemUgPSB0cnVlO1xuXG4gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgfHwgaXNMYWJlbChlbGVtZW50KSkge1xuICAgICAgY2FuUmVzaXplID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY2FuUmVzaXplO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/BpmnAutoResizeProvider.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/index.js":
/*!*********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/index.js ***!
\*********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _BpmnAutoResize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BpmnAutoResize */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/BpmnAutoResize.js\");\n/* harmony import */ var _BpmnAutoResizeProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BpmnAutoResizeProvider */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/BpmnAutoResizeProvider.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __init__: [\n 'bpmnAutoResize',\n 'bpmnAutoResizeProvider'\n ],\n bpmnAutoResize: [ 'type', _BpmnAutoResize__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ],\n bpmnAutoResizeProvider: [ 'type', _BpmnAutoResizeProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9hdXRvLXJlc2l6ZS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEM7QUFDZ0I7OztBQUc5RCxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVEQUFjO0FBQzFDLG9DQUFvQywrREFBc0I7QUFDMUQsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvYXV0by1yZXNpemUvaW5kZXguanM/NWVhYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnBtbkF1dG9SZXNpemUgZnJvbSAnLi9CcG1uQXV0b1Jlc2l6ZSc7XG5pbXBvcnQgQnBtbkF1dG9SZXNpemVQcm92aWRlciBmcm9tICcuL0JwbW5BdXRvUmVzaXplUHJvdmlkZXInO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnYnBtbkF1dG9SZXNpemUnLFxuICAgICdicG1uQXV0b1Jlc2l6ZVByb3ZpZGVyJ1xuICBdLFxuICBicG1uQXV0b1Jlc2l6ZTogWyAndHlwZScsIEJwbW5BdXRvUmVzaXplIF0sXG4gIGJwbW5BdXRvUmVzaXplUHJvdmlkZXI6IFsgJ3R5cGUnLCBCcG1uQXV0b1Jlc2l6ZVByb3ZpZGVyIF1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-resize/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/context-pad/ContextPadProvider.js":
/*!**********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/context-pad/ContextPadProvider.js ***!
\**********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ContextPadProvider)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modeling/util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _modeling_util_LaneUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../modeling/util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Mouse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/util/Mouse */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Mouse.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('didi').Injector} Injector\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('diagram-js/lib/features/context-pad/ContextPad').default} ContextPad\n * @typedef {import('../modeling/Modeling').default} Modeling\n * @typedef {import('../modeling/ElementFactory').default} ElementFactory\n * @typedef {import('diagram-js/lib/features/connect/Connect').default} Connect\n * @typedef {import('diagram-js/lib/features/create/Create').default} Create\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu\n * @typedef {import('diagram-js/lib/features/canvas/Canvas').default} Canvas\n * @typedef {import('diagram-js/lib/features/rules/Rules').default} Rules\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n *\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('../../model/Types').ModdleElement} ModdleElement\n *\n * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').default} BaseContextPadProvider\n * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').ContextPadEntries} ContextPadEntries\n * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').ContextPadEntry} ContextPadEntry\n *\n * @typedef { { autoPlace?: boolean; } } ContextPadConfig\n */\n\n/**\n * BPMN-specific context pad provider.\n *\n * @implements {BaseContextPadProvider}\n *\n * @param {ContextPadConfig} config\n * @param {Injector} injector\n * @param {EventBus} eventBus\n * @param {ContextPad} contextPad\n * @param {Modeling} modeling\n * @param {ElementFactory} elementFactory\n * @param {Connect} connect\n * @param {Create} create\n * @param {PopupMenu} popupMenu\n * @param {Canvas} canvas\n * @param {Rules} rules\n * @param {Translate} translate\n */\nfunction ContextPadProvider(\n config, injector, eventBus,\n contextPad, modeling, elementFactory,\n connect, create, popupMenu,\n canvas, rules, translate, appendPreview) {\n\n config = config || {};\n\n contextPad.registerProvider(this);\n\n this._contextPad = contextPad;\n\n this._modeling = modeling;\n\n this._elementFactory = elementFactory;\n this._connect = connect;\n this._create = create;\n this._popupMenu = popupMenu;\n this._canvas = canvas;\n this._rules = rules;\n this._translate = translate;\n this._eventBus = eventBus;\n this._appendPreview = appendPreview;\n\n if (config.autoPlace !== false) {\n this._autoPlace = injector.get('autoPlace', false);\n }\n\n eventBus.on('create.end', 250, function(event) {\n var context = event.context,\n shape = context.shape;\n\n if (!(0,diagram_js_lib_util_Mouse__WEBPACK_IMPORTED_MODULE_0__.hasPrimaryModifier)(event) || !contextPad.isOpen(shape)) {\n return;\n }\n\n var entries = contextPad.getEntries(shape);\n\n if (entries.replace) {\n entries.replace.action.click(event, shape);\n }\n });\n}\n\nContextPadProvider.$inject = [\n 'config.contextPad',\n 'injector',\n 'eventBus',\n 'contextPad',\n 'modeling',\n 'elementFactory',\n 'connect',\n 'create',\n 'popupMenu',\n 'canvas',\n 'rules',\n 'translate',\n 'appendPreview'\n];\n\n/**\n * @param {Element[]} elements\n *\n * @return {ContextPadEntries}\n */\nContextPadProvider.prototype.getMultiElementContextPadEntries = function(elements) {\n var modeling = this._modeling;\n\n var actions = {};\n\n if (this._isDeleteAllowed(elements)) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'delete': {\n group: 'edit',\n className: 'bpmn-icon-trash',\n title: this._translate('Delete'),\n action: {\n click: function(event, elements) {\n modeling.removeElements(elements.slice());\n }\n }\n }\n });\n }\n\n return actions;\n};\n\n/**\n * @param {Element[]} elements\n *\n * @return {boolean}\n */\nContextPadProvider.prototype._isDeleteAllowed = function(elements) {\n\n var baseAllowed = this._rules.allowed('elements.delete', {\n elements: elements\n });\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_1__.isArray)(baseAllowed)) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.every)(baseAllowed, function(element) {\n return includes(baseAllowed, element);\n });\n }\n\n return baseAllowed;\n};\n\n/**\n * @param {Element} element\n *\n * @return {ContextPadEntries}\n */\nContextPadProvider.prototype.getContextPadEntries = function(element) {\n var contextPad = this._contextPad,\n modeling = this._modeling,\n elementFactory = this._elementFactory,\n connect = this._connect,\n create = this._create,\n popupMenu = this._popupMenu,\n rules = this._rules,\n autoPlace = this._autoPlace,\n translate = this._translate,\n appendPreview = this._appendPreview;\n\n var actions = {};\n\n if (element.type === 'label') {\n return actions;\n }\n\n var businessObject = element.businessObject;\n\n function startConnect(event, element) {\n connect.start(event, element);\n }\n\n function removeElement(e, element) {\n modeling.removeElements([ element ]);\n }\n\n function getReplaceMenuPosition(element) {\n\n var Y_OFFSET = 5;\n\n var pad = contextPad.getPad(element).html;\n\n var padRect = pad.getBoundingClientRect();\n\n var pos = {\n x: padRect.left,\n y: padRect.bottom + Y_OFFSET\n };\n\n return pos;\n }\n\n /**\n * Create an append action.\n *\n * @param {string} type\n * @param {string} className\n * @param {string} title\n * @param {Object} [options]\n *\n * @return {ContextPadEntry}\n */\n function appendAction(type, className, title, options) {\n\n function appendStart(event, element) {\n\n var shape = elementFactory.createShape((0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)({ type: type }, options));\n\n create.start(event, shape, {\n source: element\n });\n\n appendPreview.cleanUp();\n }\n\n var append = autoPlace ? function(_, element) {\n var shape = elementFactory.createShape((0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)({ type: type }, options));\n\n autoPlace.append(element, shape);\n\n appendPreview.cleanUp();\n } : appendStart;\n\n var previewAppend = autoPlace ? function(_, element) {\n\n // mouseover\n appendPreview.create(element, type, options);\n\n return () => {\n\n // mouseout\n appendPreview.cleanUp();\n };\n } : null;\n\n return {\n group: 'model',\n className: className,\n title: title,\n action: {\n dragstart: appendStart,\n click: append,\n hover: previewAppend\n }\n };\n }\n\n function splitLaneHandler(count) {\n\n return function(_, element) {\n\n // actual split\n modeling.splitLane(element, count);\n\n // refresh context pad after split to\n // get rid of split icons\n contextPad.open(element, true);\n };\n }\n\n\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.isAny)(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isExpanded)(element)) {\n\n var childLanes = (0,_modeling_util_LaneUtil__WEBPACK_IMPORTED_MODULE_4__.getChildLanes)(element);\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'lane-insert-above': {\n group: 'lane-insert-above',\n className: 'bpmn-icon-lane-insert-above',\n title: translate('Add lane above'),\n action: {\n click: function(event, element) {\n modeling.addLane(element, 'top');\n }\n }\n }\n });\n\n if (childLanes.length < 2) {\n\n if (element.height >= 120) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'lane-divide-two': {\n group: 'lane-divide',\n className: 'bpmn-icon-lane-divide-two',\n title: translate('Divide into two lanes'),\n action: {\n click: splitLaneHandler(2)\n }\n }\n });\n }\n\n if (element.height >= 180) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'lane-divide-three': {\n group: 'lane-divide',\n className: 'bpmn-icon-lane-divide-three',\n title: translate('Divide into three lanes'),\n action: {\n click: splitLaneHandler(3)\n }\n }\n });\n }\n }\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'lane-insert-below': {\n group: 'lane-insert-below',\n className: 'bpmn-icon-lane-insert-below',\n title: translate('Add lane below'),\n action: {\n click: function(event, element) {\n modeling.addLane(element, 'bottom');\n }\n }\n }\n });\n\n }\n\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:FlowNode')) {\n\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:EventBasedGateway')) {\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'append.receive-task': appendAction(\n 'bpmn:ReceiveTask',\n 'bpmn-icon-receive-task',\n translate('Append receive task')\n ),\n 'append.message-intermediate-event': appendAction(\n 'bpmn:IntermediateCatchEvent',\n 'bpmn-icon-intermediate-event-catch-message',\n translate('Append message intermediate catch event'),\n { eventDefinitionType: 'bpmn:MessageEventDefinition' }\n ),\n 'append.timer-intermediate-event': appendAction(\n 'bpmn:IntermediateCatchEvent',\n 'bpmn-icon-intermediate-event-catch-timer',\n translate('Append timer intermediate catch event'),\n { eventDefinitionType: 'bpmn:TimerEventDefinition' }\n ),\n 'append.condition-intermediate-event': appendAction(\n 'bpmn:IntermediateCatchEvent',\n 'bpmn-icon-intermediate-event-catch-condition',\n translate('Append conditional intermediate catch event'),\n { eventDefinitionType: 'bpmn:ConditionalEventDefinition' }\n ),\n 'append.signal-intermediate-event': appendAction(\n 'bpmn:IntermediateCatchEvent',\n 'bpmn-icon-intermediate-event-catch-signal',\n translate('Append signal intermediate catch event'),\n { eventDefinitionType: 'bpmn:SignalEventDefinition' }\n )\n });\n } else\n\n if (isEventType(businessObject, 'bpmn:BoundaryEvent', 'bpmn:CompensateEventDefinition')) {\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'append.compensation-activity':\n appendAction(\n 'bpmn:Task',\n 'bpmn-icon-task',\n translate('Append compensation activity'),\n {\n isForCompensation: true\n }\n )\n });\n } else\n\n if (!(0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:EndEvent') &&\n !businessObject.isForCompensation &&\n !isEventType(businessObject, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition') &&\n !(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isEventSubProcess)(businessObject)) {\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'append.end-event': appendAction(\n 'bpmn:EndEvent',\n 'bpmn-icon-end-event-none',\n translate('Append end event')\n ),\n 'append.gateway': appendAction(\n 'bpmn:ExclusiveGateway',\n 'bpmn-icon-gateway-none',\n translate('Append gateway')\n ),\n 'append.append-task': appendAction(\n 'bpmn:Task',\n 'bpmn-icon-task',\n translate('Append task')\n ),\n 'append.intermediate-event': appendAction(\n 'bpmn:IntermediateThrowEvent',\n 'bpmn-icon-intermediate-event-none',\n translate('Append intermediate/boundary event')\n )\n });\n }\n }\n\n if (!popupMenu.isEmpty(element, 'bpmn-replace')) {\n\n // Replace menu entry\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'replace': {\n group: 'edit',\n className: 'bpmn-icon-screw-wrench',\n title: translate('Change element'),\n action: {\n click: function(event, element) {\n\n var position = (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(getReplaceMenuPosition(element), {\n cursor: { x: event.x, y: event.y }\n });\n\n popupMenu.open(element, 'bpmn-replace', position, {\n title: translate('Change element'),\n width: 300,\n search: true\n });\n }\n }\n }\n });\n }\n\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:SequenceFlow')) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'append.text-annotation': appendAction(\n 'bpmn:TextAnnotation',\n 'bpmn-icon-text-annotation',\n translate('Add text annotation')\n )\n });\n }\n\n if (\n (0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.isAny)(businessObject, [\n 'bpmn:FlowNode',\n 'bpmn:InteractionNode',\n 'bpmn:DataObjectReference',\n 'bpmn:DataStoreReference',\n ])\n ) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'append.text-annotation': appendAction(\n 'bpmn:TextAnnotation',\n 'bpmn-icon-text-annotation',\n translate('Add text annotation')\n ),\n\n 'connect': {\n group: 'connect',\n className: 'bpmn-icon-connection-multi',\n title: translate('Connect to other element'),\n action: {\n click: startConnect,\n dragstart: startConnect,\n },\n },\n });\n }\n\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:TextAnnotation')) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'connect': {\n group: 'connect',\n className: 'bpmn-icon-connection-multi',\n title: translate('Connect using association'),\n action: {\n click: startConnect,\n dragstart: startConnect,\n },\n },\n });\n }\n\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.isAny)(businessObject, [ 'bpmn:DataObjectReference', 'bpmn:DataStoreReference' ])) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'connect': {\n group: 'connect',\n className: 'bpmn-icon-connection-multi',\n title: translate('Connect using data input association'),\n action: {\n click: startConnect,\n dragstart: startConnect\n }\n }\n });\n }\n\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:Group')) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'append.text-annotation': appendAction(\n 'bpmn:TextAnnotation',\n 'bpmn-icon-text-annotation',\n translate('Add text annotation')\n )\n });\n }\n\n // delete element entry, only show if allowed by rules\n var deleteAllowed = rules.allowed('elements.delete', { elements: [ element ] });\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_1__.isArray)(deleteAllowed)) {\n\n // was the element returned as a deletion candidate?\n deleteAllowed = deleteAllowed[0] === element;\n }\n\n if (deleteAllowed) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(actions, {\n 'delete': {\n group: 'edit',\n className: 'bpmn-icon-trash',\n title: translate('Delete'),\n action: {\n click: removeElement\n }\n }\n });\n }\n\n return actions;\n};\n\n\n// helpers /////////\n\n/**\n * @param {ModdleElement} businessObject\n * @param {string} type\n * @param {string} eventDefinitionType\n *\n * @return {boolean}\n */\nfunction isEventType(businessObject, type, eventDefinitionType) {\n\n var isType = businessObject.$instanceOf(type);\n var isDefinition = false;\n\n var definitions = businessObject.eventDefinitions || [];\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.forEach)(definitions, function(def) {\n if (def.$type === eventDefinitionType) {\n isDefinition = true;\n }\n });\n\n return isType && isDefinition;\n}\n\nfunction includes(array, item) {\n return array.indexOf(item) !== -1;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkUHJvdmlkZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBS2tCOztBQUlZOztBQUtIOztBQUlZOztBQUlKOztBQUlBOztBQUVuQztBQUNBLGFBQWEseUJBQXlCO0FBQ3RDLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsa0VBQWtFO0FBQy9FLGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEsOENBQThDO0FBQzNELGFBQWEsMkRBQTJEO0FBQ3hFLGFBQWEseURBQXlEO0FBQ3RFLGFBQWEsZ0VBQWdFO0FBQzdFLGFBQWEseURBQXlEO0FBQ3RFLGFBQWEsdURBQXVEO0FBQ3BFLGFBQWEsMkRBQTJEO0FBQ3hFO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQsYUFBYSwyQ0FBMkM7QUFDeEQ7QUFDQSxhQUFhLG1GQUFtRjtBQUNoRyxhQUFhLG9GQUFvRjtBQUNqRyxhQUFhLGtGQUFrRjtBQUMvRjtBQUNBLGdCQUFnQix5QkFBeUI7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFlBQVk7QUFDdkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsU0FBUztBQUNwQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsV0FBVyxXQUFXO0FBQ3RCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDZFQUFrQjtBQUMzQjtB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Ozs7QUFHQTs7QUFFQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUUsaURBQU87QUFDVDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvY29udGV4dC1wYWQvQ29udGV4dFBhZFByb3ZpZGVyLmpzP2I0MWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoLFxuICBpc0FycmF5LFxuICBldmVyeVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZCxcbiAgaXNFdmVudFN1YlByb2Nlc3Ncbn0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0FueVxufSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldENoaWxkTGFuZXNcbn0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9MYW5lVXRpbCc7XG5cbmltcG9ydCB7XG4gIGhhc1ByaW1hcnlNb2RpZmllclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vdXNlJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWRpJykuSW5qZWN0b3J9IEluamVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL0NvbnRleHRQYWQnKS5kZWZhdWx0fSBDb250ZXh0UGFkXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9tb2RlbGluZy9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9tb2RlbGluZy9FbGVtZW50RmFjdG9yeScpLmRlZmF1bHR9IEVsZW1lbnRGYWN0b3J5XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb25uZWN0L0Nvbm5lY3QnKS5kZWZhdWx0fSBDb25uZWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jcmVhdGUvQ3JlYXRlJykuZGVmYXVsdH0gQ3JlYXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudScpLmRlZmF1bHR9IFBvcHVwTWVudVxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY2FudmFzL0NhbnZhcycpLmRlZmF1bHR9IENhbnZhc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcnVsZXMvUnVsZXMnKS5kZWZhdWx0fSBSdWxlc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvdHJhbnNsYXRlJykuZGVmYXVsdH0gVHJhbnNsYXRlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLk1vZGRsZUVsZW1lbnR9IE1vZGRsZUVsZW1lbnRcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkUHJvdmlkZXInKS5kZWZhdWx0PEVsZW1lbnQ+fSBCYXNlQ29udGV4dFBhZFByb3ZpZGVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9Db250ZXh0UGFkUHJvdmlkZXInKS5Db250ZXh0UGFkRW50cmllc30gQ29udGV4dFBhZEVudHJpZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvbnRleHQtcGFkL0NvbnRleHRQYWRQcm92aWRlcicpLkNvbnRleHRQYWRFbnRyeX0gQ29udGV4dFBhZEVudHJ5XG4gKlxuICogQHR5cGVkZWYgeyB7IGF1dG9QbGFjZT86IGJvb2xlYW47IH0gfSBDb250ZXh0UGFkQ29uZmlnXG4gKi9cblxuLyoqXG4gKiBCUE1OLXNwZWNpZmljIGNvbnRleHQgcGFkIHByb3ZpZGVyLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtCYXNlQ29udGV4dFBhZFByb3ZpZGVyfVxuICpcbiAqIEBwYXJhbSB7Q29udGV4dFBhZENvbmZpZ30gY29uZmlnXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7Q29udGV4dFBhZH0gY29udGV4dFBhZFxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0Nvbm5lY3R9IGNvbm5lY3RcbiAqIEBwYXJhbSB7Q3JlYXRlfSBjcmVhdGVcbiAqIEBwYXJhbSB7UG9wdXBNZW51fSBwb3B1cE1lbnVcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7UnVsZXN9IHJ1bGVzXG4gKiBAcGFyYW0ge1RyYW5zbGF0ZX0gdHJhbnNsYXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbnRleHRQYWRQcm92aWRlcihcbiAgICBjb25maWcsIGluamVjdG9yLCBldmVudEJ1cyxcbiAgICBjb250ZXh0UGFkLCBtb2RlbGluZywgZWxlbWVudEZhY3RvcnksXG4gICAgY29ubmVjdCwgY3JlYXRlLCBwb3B1cE1lbnUsXG4gICAgY2FudmFzLCBydWxlcywgdHJhbnNsYXRlLCBhcHBlbmRQcmV2aWV3KSB7XG5cbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuXG4gIGNvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcblxuICB0aGlzLl9jb250ZXh0UGFkID0gY29udGV4dFBhZDtcblxuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuXG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2Nvbm5lY3QgPSBjb25uZWN0O1xuICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2FwcGVuZFByZXZpZXcgPSBhcHBlbmRQcmV2aWV3O1xuXG4gIGlmIChjb25maWcuYXV0b1BsYWNlICE9PSBmYWxzZSkge1xuICAgIHRoaXMuX2F1dG9QbGFjZSA9IGluamVjdG9yLmdldCgnYXV0b1BsYWNlJywgZmFsc2UpO1xuICB9XG5cbiAgZXZlbnRCdXMub24oJ2NyZWF0ZS5lbmQnLCAyNTAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWhhc1ByaW1hcnlNb2RpZmllcihldmVudCkgfHwgIWNvbnRleHRQYWQuaXNPcGVuKHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlbnRyaWVzID0gY29udGV4dFBhZC5nZXRFbnRyaWVzKHNoYXBlKTtcblxuICAgIGlmIChlbnRyaWVzLnJlcGxhY2UpIHtcbiAgICAgIGVudHJpZXMucmVwbGFjZS5hY3Rpb24uY2xpY2soZXZlbnQsIHNoYXBlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5Db250ZXh0UGFkUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5jb250ZXh0UGFkJyxcbiAgJ2luamVjdG9yJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2NvbnRleHRQYWQnLFxuICAnbW9kZWxpbmcnLFxuICAnZWxlbWVudEZhY3RvcnknLFxuICAnY29ubmVjdCcsXG4gICdjcmVhdGUnLFxuICAncG9wdXBNZW51JyxcbiAgJ2NhbnZhcycsXG4gICdydWxlcycsXG4gICd0cmFuc2xhdGUnLFxuICAnYXBwZW5kUHJldmlldydcbl07XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50W119IGVsZW1lbnRzXG4gKlxuICogQHJldHVybiB7Q29udGV4dFBhZEVudHJpZXN9XG4gKi9cbkNvbnRleHRQYWRQcm92aWRlci5wcm90b3R5cGUuZ2V0TXVsdGlFbGVtZW50Q29udGV4dFBhZEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgYWN0aW9ucyA9IHt9O1xuXG4gIGlmICh0aGlzLl9pc0RlbGV0ZUFsbG93ZWQoZWxlbWVudHMpKSB7XG4gICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICdkZWxldGUnOiB7XG4gICAgICAgIGdyb3VwOiAnZWRpdCcsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi10cmFzaCcsXG4gICAgICAgIHRpdGxlOiB0aGlzLl90cmFuc2xhdGUoJ0RlbGV0ZScpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhlbGVtZW50cy5zbGljZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5Db250ZXh0UGFkUHJvdmlkZXIucHJvdG90eXBlLl9pc0RlbGV0ZUFsbG93ZWQgPSBmdW5jdGlvbihlbGVtZW50cykge1xuXG4gIHZhciBiYXNlQWxsb3dlZCA9IHRoaXMuX3J1bGVzLmFsbG93ZWQoJ2VsZW1lbnRzLmRlbGV0ZScsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHNcbiAgfSk7XG5cbiAgaWYgKGlzQXJyYXkoYmFzZUFsbG93ZWQpKSB7XG4gICAgcmV0dXJuIGV2ZXJ5KGJhc2VBbGxvd2VkLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gaW5jbHVkZXMoYmFzZUFsbG93ZWQsIGVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VBbGxvd2VkO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtDb250ZXh0UGFkRW50cmllc31cbiAqL1xuQ29udGV4dFBhZFByb3ZpZGVyLnByb3RvdHlwZS5nZXRDb250ZXh0UGFkRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdmFyIGNvbnRleHRQYWQgPSB0aGlzLl9jb250ZXh0UGFkLFxuICAgICAgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcbiAgICAgIGVsZW1lbnRGYWN0b3J5ID0gdGhpcy5fZWxlbWVudEZhY3RvcnksXG4gICAgICBjb25uZWN0ID0gdGhpcy5fY29ubmVjdCxcbiAgICAgIGNyZWF0ZSA9IHRoaXMuX2NyZWF0ZSxcbiAgICAgIHBvcHVwTWVudSA9IHRoaXMuX3BvcHVwTWVudSxcbiAgICAgIHJ1bGVzID0gdGhpcy5fcnVsZXMsXG4gICAgICBhdXRvUGxhY2UgPSB0aGlzLl9hdXRvUGxhY2UsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGUsXG4gICAgICBhcHBlbmRQcmV2aWV3ID0gdGhpcy5fYXBwZW5kUHJldmlldztcblxuICB2YXIgYWN0aW9ucyA9IHt9O1xuXG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG5cbiAgZnVuY3Rpb24gc3RhcnRDb25uZWN0KGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29ubmVjdC5zdGFydChldmVudCwgZWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KGUsIGVsZW1lbnQpIHtcbiAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhbIGVsZW1lbnQgXSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSZXBsYWNlTWVudVBvc2l0aW9uKGVsZW1lbnQpIHtcblxuICAgIHZhciBZX09GRlNFVCA9IDU7XG5cbiAgICB2YXIgcGFkID0gY29udGV4dFBhZC5nZXRQYWQoZWxlbWVudCkuaHRtbDtcblxuICAgIHZhciBwYWRSZWN0ID0gcGFkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIHBvcyA9IHtcbiAgICAgIHg6IHBhZFJlY3QubGVmdCxcbiAgICAgIHk6IHBhZFJlY3QuYm90dG9tICsgWV9PRkZTRVRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBvcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYXBwZW5kIGFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKlxuICAgKiBAcmV0dXJuIHtDb250ZXh0UGFkRW50cnl9XG4gICAqL1xuICBmdW5jdGlvbiBhcHBlbmRBY3Rpb24odHlwZSwgY2xhc3NOYW1lLCB0aXRsZSwgb3B0aW9ucykge1xuXG4gICAgZnVuY3Rpb24gYXBwZW5kU3RhcnQoZXZlbnQsIGVsZW1lbnQpIHtcblxuICAgICAgdmFyIHNoYXBlID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlU2hhcGUoYXNzaWduKHsgdHlwZTogdHlwZSB9LCBvcHRpb25zKSk7XG5cbiAgICAgIGNyZWF0ZS5zdGFydChldmVudCwgc2hhcGUsIHtcbiAgICAgICAgc291cmNlOiBlbGVtZW50XG4gICAgICB9KTtcblxuICAgICAgYXBwZW5kUHJldmlldy5jbGVhblVwKCk7XG4gICAgfVxuXG4gICAgdmFyIGFwcGVuZCA9IGF1dG9QbGFjZSA/IGZ1bmN0aW9uKF8sIGVsZW1lbnQpIHtcbiAgICAgIHZhciBzaGFwZSA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGFzc2lnbih7IHR5cGU6IHR5cGUgfSwgb3B0aW9ucykpO1xuXG4gICAgICBhdXRvUGxhY2UuYXBwZW5kKGVsZW1lbnQsIHNoYXBlKTtcblxuICAgICAgYXBwZW5kUHJldmlldy5jbGVhblVwKCk7XG4gICAgfSA6IGFwcGVuZFN0YXJ0O1xuXG4gICAgdmFyIHByZXZpZXdBcHBlbmQgPSBhdXRvUGxhY2UgPyBmdW5jdGlvbihfLCBlbGVtZW50KSB7XG5cbiAgICAgIC8vIG1vdXNlb3ZlclxuICAgICAgYXBwZW5kUHJldmlldy5jcmVhdGUoZWxlbWVudCwgdHlwZSwgb3B0aW9ucyk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG5cbiAgICAgICAgLy8gbW91c2VvdXRcbiAgICAgICAgYXBwZW5kUHJldmlldy5jbGVhblVwKCk7XG4gICAgICB9O1xuICAgIH0gOiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdyb3VwOiAnbW9kZWwnLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICB0aXRsZTogdGl0bGUsXG4gICAgICBhY3Rpb246IHtcbiAgICAgICAgZHJhZ3N0YXJ0OiBhcHBlbmRTdGFydCxcbiAgICAgICAgY2xpY2s6IGFwcGVuZCxcbiAgICAgICAgaG92ZXI6IHByZXZpZXdBcHBlbmRcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc3BsaXRMYW5lSGFuZGxlcihjb3VudCkge1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKF8sIGVsZW1lbnQpIHtcblxuICAgICAgLy8gYWN0dWFsIHNwbGl0XG4gICAgICBtb2RlbGluZy5zcGxpdExhbmUoZWxlbWVudCwgY291bnQpO1xuXG4gICAgICAvLyByZWZyZXNoIGNvbnRleHQgcGFkIGFmdGVyIHNwbGl0IHRvXG4gICAgICAvLyBnZXQgcmlkIG9mIHNwbGl0IGljb25zXG4gICAgICBjb250ZXh0UGFkLm9wZW4oZWxlbWVudCwgdHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG5cbiAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbICdicG1uOkxhbmUnLCAnYnBtbjpQYXJ0aWNpcGFudCcgXSkgJiYgaXNFeHBhbmRlZChlbGVtZW50KSkge1xuXG4gICAgdmFyIGNoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKGVsZW1lbnQpO1xuXG4gICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICdsYW5lLWluc2VydC1hYm92ZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdsYW5lLWluc2VydC1hYm92ZScsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1sYW5lLWluc2VydC1hYm92ZScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0FkZCBsYW5lIGFib3ZlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuICAgICAgICAgICAgbW9kZWxpbmcuYWRkTGFuZShlbGVtZW50LCAndG9wJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoY2hpbGRMYW5lcy5sZW5ndGggPCAyKSB7XG5cbiAgICAgIGlmIChlbGVtZW50LmhlaWdodCA+PSAxMjApIHtcbiAgICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgICAnbGFuZS1kaXZpZGUtdHdvJzoge1xuICAgICAgICAgICAgZ3JvdXA6ICdsYW5lLWRpdmlkZScsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1kaXZpZGUtdHdvJyxcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RpdmlkZSBpbnRvIHR3byBsYW5lcycpLFxuICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBzcGxpdExhbmVIYW5kbGVyKDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQuaGVpZ2h0ID49IDE4MCkge1xuICAgICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAgICdsYW5lLWRpdmlkZS10aHJlZSc6IHtcbiAgICAgICAgICAgIGdyb3VwOiAnbGFuZS1kaXZpZGUnLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWxhbmUtZGl2aWRlLXRocmVlJyxcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RpdmlkZSBpbnRvIHRocmVlIGxhbmVzJyksXG4gICAgICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IHNwbGl0TGFuZUhhbmRsZXIoMylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnbGFuZS1pbnNlcnQtYmVsb3cnOiB7XG4gICAgICAgIGdyb3VwOiAnbGFuZS1pbnNlcnQtYmVsb3cnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZS1pbnNlcnQtYmVsb3cnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdBZGQgbGFuZSBiZWxvdycpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIG1vZGVsaW5nLmFkZExhbmUoZWxlbWVudCwgJ2JvdHRvbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkZsb3dOb2RlJykpIHtcblxuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuXG4gICAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgICAnYXBwZW5kLnJlY2VpdmUtdGFzayc6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgICAnYnBtbjpSZWNlaXZlVGFzaycsXG4gICAgICAgICAgJ2JwbW4taWNvbi1yZWNlaXZlLXRhc2snLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIHJlY2VpdmUgdGFzaycpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQubWVzc2FnZS1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbWVzc2FnZScsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgbWVzc2FnZSBpbnRlcm1lZGlhdGUgY2F0Y2ggZXZlbnQnKSxcbiAgICAgICAgICB7IGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC50aW1lci1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtdGltZXInLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIHRpbWVyIGludGVybWVkaWF0ZSBjYXRjaCBldmVudCcpLFxuICAgICAgICAgIHsgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKSxcbiAgICAgICAgJ2FwcGVuZC5jb25kaXRpb24taW50ZXJtZWRpYXRlLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgICAgICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWNvbmRpdGlvbicsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgY29uZGl0aW9uYWwgaW50ZXJtZWRpYXRlIGNhdGNoIGV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicgfVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLnNpZ25hbC1pbnRlcm1lZGlhdGUtZXZlbnQnOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICAgICAgJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtc2lnbmFsJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBzaWduYWwgaW50ZXJtZWRpYXRlIGNhdGNoIGV2ZW50JyksXG4gICAgICAgICAgeyBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nIH1cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoaXNFdmVudFR5cGUoYnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnLCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJykpIHtcblxuICAgICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICAgJ2FwcGVuZC5jb21wZW5zYXRpb24tYWN0aXZpdHknOlxuICAgICAgICAgICAgYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICAgICAnYnBtbjpUYXNrJyxcbiAgICAgICAgICAgICAgJ2JwbW4taWNvbi10YXNrJyxcbiAgICAgICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgY29tcGVuc2F0aW9uIGFjdGl2aXR5JyksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0ZvckNvbXBlbnNhdGlvbjogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICB9KTtcbiAgICB9IGVsc2VcblxuICAgIGlmICghaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkVuZEV2ZW50JykgJiZcbiAgICAgICAgIWJ1c2luZXNzT2JqZWN0LmlzRm9yQ29tcGVuc2F0aW9uICYmXG4gICAgICAgICFpc0V2ZW50VHlwZShidXNpbmVzc09iamVjdCwgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSAmJlxuICAgICAgICAhaXNFdmVudFN1YlByb2Nlc3MoYnVzaW5lc3NPYmplY3QpKSB7XG5cbiAgICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAgICdhcHBlbmQuZW5kLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkVuZEV2ZW50JyxcbiAgICAgICAgICAnYnBtbi1pY29uLWVuZC1ldmVudC1ub25lJyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ0FwcGVuZCBlbmQgZXZlbnQnKVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLmdhdGV3YXknOiBhcHBlbmRBY3Rpb24oXG4gICAgICAgICAgJ2JwbW46RXhjbHVzaXZlR2F0ZXdheScsXG4gICAgICAgICAgJ2JwbW4taWNvbi1nYXRld2F5LW5vbmUnLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIGdhdGV3YXknKVxuICAgICAgICApLFxuICAgICAgICAnYXBwZW5kLmFwcGVuZC10YXNrJzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOlRhc2snLFxuICAgICAgICAgICdicG1uLWljb24tdGFzaycsXG4gICAgICAgICAgdHJhbnNsYXRlKCdBcHBlbmQgdGFzaycpXG4gICAgICAgICksXG4gICAgICAgICdhcHBlbmQuaW50ZXJtZWRpYXRlLWV2ZW50JzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAgICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgICAgICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LW5vbmUnLFxuICAgICAgICAgIHRyYW5zbGF0ZSgnQXBwZW5kIGludGVybWVkaWF0ZS9ib3VuZGFyeSBldmVudCcpXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcG9wdXBNZW51LmlzRW1wdHkoZWxlbWVudCwgJ2JwbW4tcmVwbGFjZScpKSB7XG5cbiAgICAvLyBSZXBsYWNlIG1lbnUgZW50cnlcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ3JlcGxhY2UnOiB7XG4gICAgICAgIGdyb3VwOiAnZWRpdCcsXG4gICAgICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zY3Jldy13cmVuY2gnLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdDaGFuZ2UgZWxlbWVudCcpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQsIGVsZW1lbnQpIHtcblxuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gYXNzaWduKGdldFJlcGxhY2VNZW51UG9zaXRpb24oZWxlbWVudCksIHtcbiAgICAgICAgICAgICAgY3Vyc29yOiB7IHg6IGV2ZW50LngsIHk6IGV2ZW50LnkgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHBvcHVwTWVudS5vcGVuKGVsZW1lbnQsICdicG1uLXJlcGxhY2UnLCBwb3NpdGlvbiwge1xuICAgICAgICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdDaGFuZ2UgZWxlbWVudCcpLFxuICAgICAgICAgICAgICB3aWR0aDogMzAwLFxuICAgICAgICAgICAgICBzZWFyY2g6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnYXBwZW5kLnRleHQtYW5ub3RhdGlvbic6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nLFxuICAgICAgICAnYnBtbi1pY29uLXRleHQtYW5ub3RhdGlvbicsXG4gICAgICAgIHRyYW5zbGF0ZSgnQWRkIHRleHQgYW5ub3RhdGlvbicpXG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuICBpZiAoXG4gICAgaXNBbnkoYnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICdicG1uOkZsb3dOb2RlJyxcbiAgICAgICdicG1uOkludGVyYWN0aW9uTm9kZScsXG4gICAgICAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJyxcbiAgICAgICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScsXG4gICAgXSlcbiAgKSB7XG4gICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICdhcHBlbmQudGV4dC1hbm5vdGF0aW9uJzogYXBwZW5kQWN0aW9uKFxuICAgICAgICAnYnBtbjpUZXh0QW5ub3RhdGlvbicsXG4gICAgICAgICdicG1uLWljb24tdGV4dC1hbm5vdGF0aW9uJyxcbiAgICAgICAgdHJhbnNsYXRlKCdBZGQgdGV4dCBhbm5vdGF0aW9uJylcbiAgICAgICksXG5cbiAgICAgICdjb25uZWN0Jzoge1xuICAgICAgICBncm91cDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbi1tdWx0aScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0Nvbm5lY3QgdG8gb3RoZXIgZWxlbWVudCcpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogc3RhcnRDb25uZWN0LFxuICAgICAgICAgIGRyYWdzdGFydDogc3RhcnRDb25uZWN0LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnY29ubmVjdCc6IHtcbiAgICAgICAgZ3JvdXA6ICdjb25uZWN0JyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNvbm5lY3Rpb24tbXVsdGknLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdDb25uZWN0IHVzaW5nIGFzc29jaWF0aW9uJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiBzdGFydENvbm5lY3QsXG4gICAgICAgICAgZHJhZ3N0YXJ0OiBzdGFydENvbm5lY3QsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnIF0pKSB7XG4gICAgYXNzaWduKGFjdGlvbnMsIHtcbiAgICAgICdjb25uZWN0Jzoge1xuICAgICAgICBncm91cDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29ubmVjdGlvbi1tdWx0aScsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0Nvbm5lY3QgdXNpbmcgZGF0YSBpbnB1dCBhc3NvY2lhdGlvbicpLFxuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICBjbGljazogc3RhcnRDb25uZWN0LFxuICAgICAgICAgIGRyYWdzdGFydDogc3RhcnRDb25uZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46R3JvdXAnKSkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnYXBwZW5kLnRleHQtYW5ub3RhdGlvbic6IGFwcGVuZEFjdGlvbihcbiAgICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nLFxuICAgICAgICAnYnBtbi1pY29uLXRleHQtYW5ub3RhdGlvbicsXG4gICAgICAgIHRyYW5zbGF0ZSgnQWRkIHRleHQgYW5ub3RhdGlvbicpXG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuICAvLyBkZWxldGUgZWxlbWVudCBlbnRyeSwgb25seSBzaG93IGlmIGFsbG93ZWQgYnkgcnVsZXNcbiAgdmFyIGRlbGV0ZUFsbG93ZWQgPSBydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5kZWxldGUnLCB7IGVsZW1lbnRzOiBbIGVsZW1lbnQgXSB9KTtcblxuICBpZiAoaXNBcnJheShkZWxldGVBbGxvd2VkKSkge1xuXG4gICAgLy8gd2FzIHRoZSBlbGVtZW50IHJldHVybmVkIGFzIGEgZGVsZXRpb24gY2FuZGlkYXRlP1xuICAgIGRlbGV0ZUFsbG93ZWQgPSBkZWxldGVBbGxvd2VkWzBdID09PSBlbGVtZW50O1xuICB9XG5cbiAgaWYgKGRlbGV0ZUFsbG93ZWQpIHtcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2RlbGV0ZSc6IHtcbiAgICAgICAgZ3JvdXA6ICdlZGl0JyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXRyYXNoJyxcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnRGVsZXRlJyksXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIGNsaWNrOiByZW1vdmVFbGVtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vL1xuXG4vKipcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYnVzaW5lc3NPYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnREZWZpbml0aW9uVHlwZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRXZlbnRUeXBlKGJ1c2luZXNzT2JqZWN0LCB0eXBlLCBldmVudERlZmluaXRpb25UeXBlKSB7XG5cbiAgdmFyIGlzVHlwZSA9IGJ1c2luZXNzT2JqZWN0LiRpbnN0YW5jZU9mKHR5cGUpO1xuICB2YXIgaXNEZWZpbml0aW9uID0gZmFsc2U7XG5cbiAgdmFyIGRlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucyB8fCBbXTtcbiAgZm9yRWFjaChkZWZpbml0aW9ucywgZnVuY3Rpb24oZGVmKSB7XG4gICAgaWYgKGRlZi4kdHlwZSA9PT0gZXZlbnREZWZpbml0aW9uVHlwZSkge1xuICAgICAgaXNEZWZpbml0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpc1R5cGUgJiYgaXNEZWZpbml0aW9uO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/context-pad/ContextPadProvider.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/context-pad/index.js":
/*!*********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/context-pad/index.js ***!
\*********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _append_preview__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../append-preview */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/append-preview/index.js\");\n/* harmony import */ var diagram_js_direct_editing__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js-direct-editing */ \"./node_modules/diagram-js-direct-editing/lib/index.js\");\n/* harmony import */ var diagram_js_lib_features_context_pad__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/features/context-pad */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/context-pad/index.js\");\n/* harmony import */ var diagram_js_lib_features_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/features/selection */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/selection/index.js\");\n/* harmony import */ var diagram_js_lib_features_connect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! diagram-js/lib/features/connect */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/connect/index.js\");\n/* harmony import */ var diagram_js_lib_features_create__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! diagram-js/lib/features/create */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/create/index.js\");\n/* harmony import */ var _popup_menu__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../popup-menu */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/popup-menu/index.js\");\n/* harmony import */ var _ContextPadProvider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ContextPadProvider */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/context-pad/ContextPadProvider.js\");\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n _append_preview__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n diagram_js_direct_editing__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n diagram_js_lib_features_context_pad__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n diagram_js_lib_features_selection__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n diagram_js_lib_features_connect__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n diagram_js_lib_features_create__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n _popup_menu__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n ],\n __init__: [ 'contextPadProvider' ],\n contextPadProvider: [ 'type', _ContextPadProvider__WEBPACK_IMPORTED_MODULE_7__[\"default\"] ]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBb0Q7QUFDUTtBQUNPO0FBQ0g7QUFDSjtBQUNGO0FBQ2Q7O0FBRVU7O0FBRXRELGlFQUFlO0FBQ2Y7QUFDQSxJQUFJLHVEQUFtQjtBQUN2QixJQUFJLGlFQUFtQjtBQUN2QixJQUFJLDJFQUFnQjtBQUNwQixJQUFJLHlFQUFlO0FBQ25CLElBQUksdUVBQWE7QUFDakIsSUFBSSxzRUFBWTtBQUNoQixJQUFJLG1EQUFlO0FBQ25CO0FBQ0E7QUFDQSxnQ0FBZ0MsMkRBQWtCO0FBQ2xELENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb250ZXh0LXBhZC9pbmRleC5qcz9kNGM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBlbmRQcmV2aWV3TW9kdWxlIGZyb20gJy4uL2FwcGVuZC1wcmV2aWV3JztcbmltcG9ydCBEaXJlY3RFZGl0aW5nTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcnO1xuaW1wb3J0IENvbnRleHRQYWRNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29udGV4dC1wYWQnO1xuaW1wb3J0IFNlbGVjdGlvbk1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWxlY3Rpb24nO1xuaW1wb3J0IENvbm5lY3RNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvY29ubmVjdCc7XG5pbXBvcnQgQ3JlYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NyZWF0ZSc7XG5pbXBvcnQgUG9wdXBNZW51TW9kdWxlIGZyb20gJy4uL3BvcHVwLW1lbnUnO1xuXG5pbXBvcnQgQ29udGV4dFBhZFByb3ZpZGVyIGZyb20gJy4vQ29udGV4dFBhZFByb3ZpZGVyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIEFwcGVuZFByZXZpZXdNb2R1bGUsXG4gICAgRGlyZWN0RWRpdGluZ01vZHVsZSxcbiAgICBDb250ZXh0UGFkTW9kdWxlLFxuICAgIFNlbGVjdGlvbk1vZHVsZSxcbiAgICBDb25uZWN0TW9kdWxlLFxuICAgIENyZWF0ZU1vZHVsZSxcbiAgICBQb3B1cE1lbnVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2NvbnRleHRQYWRQcm92aWRlcicgXSxcbiAgY29udGV4dFBhZFByb3ZpZGVyOiBbICd0eXBlJywgQ29udGV4dFBhZFByb3ZpZGVyIF1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/context-pad/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/BpmnCopyPaste.js":
/*!****************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/BpmnCopyPaste.js ***!
\****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnCopyPaste)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('../modeling/BpmnFactory').default} BpmnFactory\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('./ModdleCopy').default} ModdleCopy\n */\n\nfunction copyProperties(source, target, properties) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isArray)(properties)) {\n properties = [ properties ];\n }\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.forEach)(properties, function(property) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isUndefined)(source[property])) {\n target[property] = source[property];\n }\n });\n}\n\nvar LOW_PRIORITY = 750;\n\n/**\n * BPMN-specific copy & paste.\n *\n * @param {BpmnFactory} bpmnFactory\n * @param {EventBus} eventBus\n * @param {ModdleCopy} moddleCopy\n */\nfunction BpmnCopyPaste(bpmnFactory, eventBus, moddleCopy) {\n\n function copy(bo, clone) {\n var targetBo = bpmnFactory.create(bo.$type);\n\n return moddleCopy.copyElement(bo, targetBo, null, clone);\n }\n\n eventBus.on('copyPaste.copyElement', LOW_PRIORITY, function(context) {\n var descriptor = context.descriptor,\n element = context.element,\n businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\n\n // do not copy business object + di for labels;\n // will be pulled from the referenced label target\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_2__.isLabel)(element)) {\n return descriptor;\n }\n\n var businessObjectCopy = descriptor.businessObject = copy(businessObject, true);\n var diCopy = descriptor.di = copy((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getDi)(element), true);\n diCopy.bpmnElement = businessObjectCopy;\n\n copyProperties(businessObjectCopy, descriptor, 'name');\n copyProperties(diCopy, descriptor, 'isExpanded');\n\n // default sequence flow\n if (businessObject.default) {\n descriptor.default = businessObject.default.id;\n }\n });\n\n var referencesKey = '-bpmn-js-refs';\n\n function getReferences(cache) {\n return (cache[referencesKey] = cache[referencesKey] || {});\n }\n\n function setReferences(cache, references) {\n cache[referencesKey] = references;\n }\n\n function resolveReferences(descriptor, cache, references) {\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(descriptor);\n\n // default sequence flows\n if (descriptor.default) {\n\n // relationship cannot be resolved immediately\n references[ descriptor.default ] = {\n element: businessObject,\n property: 'default'\n };\n }\n\n // boundary events\n if (descriptor.host) {\n\n // relationship can be resolved immediately\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(descriptor).attachedToRef = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(cache[ descriptor.host ]);\n }\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.omit)(references, (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.reduce)(references, function(array, reference, key) {\n var element = reference.element,\n property = reference.property;\n\n if (key === descriptor.id) {\n element.set(property, businessObject);\n\n array.push(descriptor.id);\n }\n\n return array;\n }, []));\n }\n\n eventBus.on('copyPaste.pasteElement', function(context) {\n var cache = context.cache,\n descriptor = context.descriptor,\n businessObject = descriptor.businessObject,\n di = descriptor.di;\n\n // wire existing di + businessObject for external label\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_2__.isLabel)(descriptor)) {\n descriptor.businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(cache[ descriptor.labelTarget ]);\n descriptor.di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getDi)(cache[ descriptor.labelTarget ]);\n\n return;\n }\n\n businessObject = descriptor.businessObject = copy(businessObject);\n\n di = descriptor.di = copy(di);\n di.bpmnElement = businessObject;\n\n copyProperties(descriptor, businessObject, [\n 'isExpanded',\n 'name'\n ]);\n\n descriptor.type = businessObject.$type;\n });\n\n // copy + paste processRef with participant\n\n eventBus.on('copyPaste.copyElement', LOW_PRIORITY, function(context) {\n var descriptor = context.descriptor,\n element = context.element;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:Participant')) {\n return;\n }\n\n var participantBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\n\n if (participantBo.processRef) {\n descriptor.processRef = copy(participantBo.processRef, true);\n }\n });\n\n eventBus.on('copyPaste.pasteElement', function(context) {\n var descriptor = context.descriptor,\n processRef = descriptor.processRef;\n\n if (processRef) {\n descriptor.processRef = copy(processRef);\n }\n });\n\n // resolve references\n\n eventBus.on('copyPaste.pasteElement', LOW_PRIORITY, function(context) {\n var cache = context.cache,\n descriptor = context.descriptor;\n\n // resolve references e.g. default sequence flow\n setReferences(\n cache,\n resolveReferences(descriptor, cache, getReferences(cache))\n );\n });\n\n}\n\n\nBpmnCopyPaste.$inject = [\n 'bpmnFactory',\n 'eventBus',\n 'moddleCopy'\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL0JwbW5Db3B5UGFzdGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUk4Qjs7QUFRWjs7QUFFNkI7O0FBRS9DO0FBQ0EsYUFBYSwyQ0FBMkM7QUFDeEQsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSxnQ0FBZ0M7QUFDN0M7O0FBRUE7QUFDQSxPQUFPLGlEQUFPO0FBQ2Q7QUFDQTs7QUFFQSxFQUFFLGlEQUFPO0FBQ1QsU0FBUyxxREFBVztBQUNwQjtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLFVBQVU7QUFDckIsV0FBVyxZQUFZO0FBQ3ZCO0FBQ2U7O0FBRWY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrRUFBaUI7O0FBRTFDO0FBQ0E7QUFDQSxRQUFRLHdEQUFPO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQyxzREFBSztBQUMzQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBLDZEQUE2RDtBQUM3RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUIsa0VBQWlCOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxrRUFBaUIsNkJBQTZCLGtFQUFpQjtBQUNyRTs7QUFFQSxXQUFXLDhDQUFJLGFBQWEsZ0RBQU07QUFDbEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsd0RBQU87QUFDZixrQ0FBa0Msa0VBQWlCO0FBQ25ELHNCQUFzQixzREFBSzs7QUFFM0I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxtREFBRTtBQUNYO0FBQ0E7O0FBRUEsd0JBQXdCLGtFQUFpQjs7QUFFekM7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL0JwbW5Db3B5UGFzdGUuanM/ZGRkMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgZ2V0RGksXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZm9yRWFjaCxcbiAgaXNBcnJheSxcbiAgaXNVbmRlZmluZWQsXG4gIG9taXQsXG4gIHJlZHVjZVxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7IGlzTGFiZWwgfSBmcm9tICcuLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vbW9kZWxpbmcvQnBtbkZhY3RvcnknKS5kZWZhdWx0fSBCcG1uRmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL01vZGRsZUNvcHknKS5kZWZhdWx0fSBNb2RkbGVDb3B5XG4gKi9cblxuZnVuY3Rpb24gY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQsIHByb3BlcnRpZXMpIHtcbiAgaWYgKCFpc0FycmF5KHByb3BlcnRpZXMpKSB7XG4gICAgcHJvcGVydGllcyA9IFsgcHJvcGVydGllcyBdO1xuICB9XG5cbiAgZm9yRWFjaChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0eSkge1xuICAgIGlmICghaXNVbmRlZmluZWQoc291cmNlW3Byb3BlcnR5XSkpIHtcbiAgICAgIHRhcmdldFtwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA3NTA7XG5cbi8qKlxuICogQlBNTi1zcGVjaWZpYyBjb3B5ICYgcGFzdGUuXG4gKlxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGRsZUNvcHl9IG1vZGRsZUNvcHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkNvcHlQYXN0ZShicG1uRmFjdG9yeSwgZXZlbnRCdXMsIG1vZGRsZUNvcHkpIHtcblxuICBmdW5jdGlvbiBjb3B5KGJvLCBjbG9uZSkge1xuICAgIHZhciB0YXJnZXRCbyA9IGJwbW5GYWN0b3J5LmNyZWF0ZShiby4kdHlwZSk7XG5cbiAgICByZXR1cm4gbW9kZGxlQ29weS5jb3B5RWxlbWVudChibywgdGFyZ2V0Qm8sIG51bGwsIGNsb25lKTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUuY29weUVsZW1lbnQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcixcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgIC8vIGRvIG5vdCBjb3B5IGJ1c2luZXNzIG9iamVjdCArIGRpIGZvciBsYWJlbHM7XG4gICAgLy8gd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgcmVmZXJlbmNlZCBsYWJlbCB0YXJnZXRcbiAgICBpZiAoaXNMYWJlbChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0Q29weSA9IGRlc2NyaXB0b3IuYnVzaW5lc3NPYmplY3QgPSBjb3B5KGJ1c2luZXNzT2JqZWN0LCB0cnVlKTtcbiAgICB2YXIgZGlDb3B5ID0gZGVzY3JpcHRvci5kaSA9IGNvcHkoZ2V0RGkoZWxlbWVudCksIHRydWUpO1xuICAgIGRpQ29weS5icG1uRWxlbWVudCA9IGJ1c2luZXNzT2JqZWN0Q29weTtcblxuICAgIGNvcHlQcm9wZXJ0aWVzKGJ1c2luZXNzT2JqZWN0Q29weSwgZGVzY3JpcHRvciwgJ25hbWUnKTtcbiAgICBjb3B5UHJvcGVydGllcyhkaUNvcHksIGRlc2NyaXB0b3IsICdpc0V4cGFuZGVkJyk7XG5cbiAgICAvLyBkZWZhdWx0IHNlcXVlbmNlIGZsb3dcbiAgICBpZiAoYnVzaW5lc3NPYmplY3QuZGVmYXVsdCkge1xuICAgICAgZGVzY3JpcHRvci5kZWZhdWx0ID0gYnVzaW5lc3NPYmplY3QuZGVmYXVsdC5pZDtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciByZWZlcmVuY2VzS2V5ID0gJy1icG1uLWpzLXJlZnMnO1xuXG4gIGZ1bmN0aW9uIGdldFJlZmVyZW5jZXMoY2FjaGUpIHtcbiAgICByZXR1cm4gKGNhY2hlW3JlZmVyZW5jZXNLZXldID0gY2FjaGVbcmVmZXJlbmNlc0tleV0gfHwge30pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0UmVmZXJlbmNlcyhjYWNoZSwgcmVmZXJlbmNlcykge1xuICAgIGNhY2hlW3JlZmVyZW5jZXNLZXldID0gcmVmZXJlbmNlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VzKGRlc2NyaXB0b3IsIGNhY2hlLCByZWZlcmVuY2VzKSB7XG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZGVzY3JpcHRvcik7XG5cbiAgICAvLyBkZWZhdWx0IHNlcXVlbmNlIGZsb3dzXG4gICAgaWYgKGRlc2NyaXB0b3IuZGVmYXVsdCkge1xuXG4gICAgICAvLyByZWxhdGlvbnNoaXAgY2Fubm90IGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5XG4gICAgICByZWZlcmVuY2VzWyBkZXNjcmlwdG9yLmRlZmF1bHQgXSA9IHtcbiAgICAgICAgZWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnR5OiAnZGVmYXVsdCdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gYm91bmRhcnkgZXZlbnRzXG4gICAgaWYgKGRlc2NyaXB0b3IuaG9zdCkge1xuXG4gICAgICAvLyByZWxhdGlvbnNoaXAgY2FuIGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5XG4gICAgICBnZXRCdXNpbmVzc09iamVjdChkZXNjcmlwdG9yKS5hdHRhY2hlZFRvUmVmID0gZ2V0QnVzaW5lc3NPYmplY3QoY2FjaGVbIGRlc2NyaXB0b3IuaG9zdCBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb21pdChyZWZlcmVuY2VzLCByZWR1Y2UocmVmZXJlbmNlcywgZnVuY3Rpb24oYXJyYXksIHJlZmVyZW5jZSwga2V5KSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHJlZmVyZW5jZS5lbGVtZW50LFxuICAgICAgICAgIHByb3BlcnR5ID0gcmVmZXJlbmNlLnByb3BlcnR5O1xuXG4gICAgICBpZiAoa2V5ID09PSBkZXNjcmlwdG9yLmlkKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0KHByb3BlcnR5LCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgICAgYXJyYXkucHVzaChkZXNjcmlwdG9yLmlkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH0sIFtdKSk7XG4gIH1cblxuICBldmVudEJ1cy5vbignY29weVBhc3RlLnBhc3RlRWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgY2FjaGUgPSBjb250ZXh0LmNhY2hlLFxuICAgICAgICBkZXNjcmlwdG9yID0gY29udGV4dC5kZXNjcmlwdG9yLFxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGRlc2NyaXB0b3IuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIGRpID0gZGVzY3JpcHRvci5kaTtcblxuICAgIC8vIHdpcmUgZXhpc3RpbmcgZGkgKyBidXNpbmVzc09iamVjdCBmb3IgZXh0ZXJuYWwgbGFiZWxcbiAgICBpZiAoaXNMYWJlbChkZXNjcmlwdG9yKSkge1xuICAgICAgZGVzY3JpcHRvci5idXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGNhY2hlWyBkZXNjcmlwdG9yLmxhYmVsVGFyZ2V0IF0pO1xuICAgICAgZGVzY3JpcHRvci5kaSA9IGdldERpKGNhY2hlWyBkZXNjcmlwdG9yLmxhYmVsVGFyZ2V0IF0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0ID0gY29weShidXNpbmVzc09iamVjdCk7XG5cbiAgICBkaSA9IGRlc2NyaXB0b3IuZGkgPSBjb3B5KGRpKTtcbiAgICBkaS5icG1uRWxlbWVudCA9IGJ1c2luZXNzT2JqZWN0O1xuXG4gICAgY29weVByb3BlcnRpZXMoZGVzY3JpcHRvciwgYnVzaW5lc3NPYmplY3QsIFtcbiAgICAgICdpc0V4cGFuZGVkJyxcbiAgICAgICduYW1lJ1xuICAgIF0pO1xuXG4gICAgZGVzY3JpcHRvci50eXBlID0gYnVzaW5lc3NPYmplY3QuJHR5cGU7XG4gIH0pO1xuXG4gIC8vIGNvcHkgKyBwYXN0ZSBwcm9jZXNzUmVmIHdpdGggcGFydGljaXBhbnRcblxuICBldmVudEJ1cy5vbignY29weVBhc3RlLmNvcHlFbGVtZW50JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XG5cbiAgICBpZiAoIWlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcGFydGljaXBhbnRCbyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgaWYgKHBhcnRpY2lwYW50Qm8ucHJvY2Vzc1JlZikge1xuICAgICAgZGVzY3JpcHRvci5wcm9jZXNzUmVmID0gY29weShwYXJ0aWNpcGFudEJvLnByb2Nlc3NSZWYsIHRydWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXG4gICAgICAgIHByb2Nlc3NSZWYgPSBkZXNjcmlwdG9yLnByb2Nlc3NSZWY7XG5cbiAgICBpZiAocHJvY2Vzc1JlZikge1xuICAgICAgZGVzY3JpcHRvci5wcm9jZXNzUmVmID0gY29weShwcm9jZXNzUmVmKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlc29sdmUgcmVmZXJlbmNlc1xuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUucGFzdGVFbGVtZW50JywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGNhY2hlID0gY29udGV4dC5jYWNoZSxcbiAgICAgICAgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcjtcblxuICAgIC8vIHJlc29sdmUgcmVmZXJlbmNlcyBlLmcuIGRlZmF1bHQgc2VxdWVuY2UgZmxvd1xuICAgIHNldFJlZmVyZW5jZXMoXG4gICAgICBjYWNoZSxcbiAgICAgIHJlc29sdmVSZWZlcmVuY2VzKGRlc2NyaXB0b3IsIGNhY2hlLCBnZXRSZWZlcmVuY2VzKGNhY2hlKSlcbiAgICApO1xuICB9KTtcblxufVxuXG5cbkJwbW5Db3B5UGFzdGUuJGluamVjdCA9IFtcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGRsZUNvcHknXG5dOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/BpmnCopyPaste.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/ModdleCopy.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/ModdleCopy.js ***!
\*************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ModdleCopy),\n/* harmony export */ getPropertyNames: () => (/* binding */ getPropertyNames)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\nvar DISALLOWED_PROPERTIES = [\n 'artifacts',\n 'dataInputAssociations',\n 'dataOutputAssociations',\n 'default',\n 'flowElements',\n 'lanes',\n 'incoming',\n 'outgoing',\n 'categoryValue'\n];\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../modeling/BpmnFactory').default} BpmnFactory\n * @typedef {import('../../model/Types').Moddle} Moddle\n *\n * @typedef {import('../../model/Types').ModdleElement} ModdleElement\n */\n\n/**\n * Utility for copying model properties from source element to target element.\n *\n * @param {EventBus} eventBus\n * @param {BpmnFactory} bpmnFactory\n * @param {Moddle} moddle\n */\nfunction ModdleCopy(eventBus, bpmnFactory, moddle) {\n this._bpmnFactory = bpmnFactory;\n this._eventBus = eventBus;\n this._moddle = moddle;\n\n // copy extension elements last\n eventBus.on('moddleCopy.canCopyProperties', function(context) {\n var propertyNames = context.propertyNames;\n\n if (!propertyNames || !propertyNames.length) {\n return;\n }\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.sortBy)(propertyNames, function(propertyName) {\n return propertyName === 'extensionElements';\n });\n });\n\n // default check whether property can be copied\n eventBus.on('moddleCopy.canCopyProperty', function(context) {\n var parent = context.parent,\n parentDescriptor = (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isObject)(parent) && parent.$descriptor,\n propertyName = context.propertyName;\n\n if (propertyName && DISALLOWED_PROPERTIES.indexOf(propertyName) !== -1) {\n\n // disallow copying property\n return false;\n }\n\n if (propertyName &&\n parentDescriptor &&\n !(0,min_dash__WEBPACK_IMPORTED_MODULE_0__.find)(parentDescriptor.properties, (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.matchPattern)({ name: propertyName }))) {\n\n // disallow copying property\n return false;\n }\n });\n\n // do NOT allow to copy empty extension elements\n eventBus.on('moddleCopy.canSetCopiedProperty', function(context) {\n var property = context.property;\n\n if (is(property, 'bpmn:ExtensionElements') && (!property.values || !property.values.length)) {\n\n // disallow setting copied property\n return false;\n }\n });\n}\n\nModdleCopy.$inject = [\n 'eventBus',\n 'bpmnFactory',\n 'moddle'\n];\n\n/**\n * Copy model properties of source element to target element.\n *\n * @param {ModdleElement} sourceElement\n * @param {ModdleElement} targetElement\n * @param {string[]} [propertyNames]\n * @param {boolean} [clone=false]\n *\n * @return {ModdleElement}\n */\nModdleCopy.prototype.copyElement = function(sourceElement, targetElement, propertyNames, clone = false) {\n var self = this;\n\n if (propertyNames && !(0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isArray)(propertyNames)) {\n propertyNames = [ propertyNames ];\n }\n\n propertyNames = propertyNames || getPropertyNames(sourceElement.$descriptor);\n\n var canCopyProperties = this._eventBus.fire('moddleCopy.canCopyProperties', {\n propertyNames: propertyNames,\n sourceElement: sourceElement,\n targetElement: targetElement,\n clone: clone\n });\n\n if (canCopyProperties === false) {\n return targetElement;\n }\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isArray)(canCopyProperties)) {\n propertyNames = canCopyProperties;\n }\n\n // copy properties\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.forEach)(propertyNames, function(propertyName) {\n var sourceProperty;\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.has)(sourceElement, propertyName)) {\n sourceProperty = sourceElement.get(propertyName);\n }\n\n var copiedProperty = self.copyProperty(sourceProperty, targetElement, propertyName, clone);\n\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isDefined)(copiedProperty)) {\n return;\n }\n\n var canSetProperty = self._eventBus.fire('moddleCopy.canSetCopiedProperty', {\n parent: targetElement,\n property: copiedProperty,\n propertyName: propertyName\n });\n\n if (canSetProperty === false) {\n return;\n }\n\n // TODO(nikku): unclaim old IDs if ID property is copied over\n // this._moddle.getPropertyDescriptor(parent, propertyName)\n targetElement.set(propertyName, copiedProperty);\n });\n\n return targetElement;\n};\n\n/**\n * Copy model property.\n *\n * @param {any} property\n * @param {ModdleElement} parent\n * @param {string} propertyName\n * @param {boolean} [clone=false]\n *\n * @return {any}\n */\nModdleCopy.prototype.copyProperty = function(property, parent, propertyName, clone = false) {\n var self = this;\n\n // allow others to copy property\n var copiedProperty = this._eventBus.fire('moddleCopy.canCopyProperty', {\n parent: parent,\n property: property,\n propertyName: propertyName,\n clone: clone\n });\n\n // return if copying is NOT allowed\n if (copiedProperty === false) {\n return;\n }\n\n if (copiedProperty) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isObject)(copiedProperty) && copiedProperty.$type && !copiedProperty.$parent) {\n copiedProperty.$parent = parent;\n }\n\n return copiedProperty;\n }\n\n var propertyDescriptor = this._moddle.getPropertyDescriptor(parent, propertyName);\n\n // do NOT copy references\n if (propertyDescriptor.isReference) {\n return;\n }\n\n // copy id\n if (propertyDescriptor.isId) {\n return property && this._copyId(property, parent, clone);\n }\n\n // copy arrays\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isArray)(property)) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.reduce)(property, function(childProperties, childProperty) {\n\n // recursion\n copiedProperty = self.copyProperty(childProperty, parent, propertyName, clone);\n\n // copying might NOT be allowed\n if (copiedProperty) {\n return childProperties.concat(copiedProperty);\n }\n\n return childProperties;\n }, []);\n }\n\n // copy model elements\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isObject)(property) && property.$type) {\n if (this._moddle.getElementDescriptor(property).isGeneric) {\n return;\n }\n\n copiedProperty = self._bpmnFactory.create(property.$type);\n\n copiedProperty.$parent = parent;\n\n // recursion\n copiedProperty = self.copyElement(property, copiedProperty, null, clone);\n\n return copiedProperty;\n }\n\n // copy primitive properties\n return property;\n};\n\nModdleCopy.prototype._copyId = function(id, element, clone = false) {\n if (clone) {\n return id;\n }\n\n // disallow if already taken\n if (this._moddle.ids.assigned(id)) {\n return;\n } else {\n\n this._moddle.ids.claim(id, element);\n return id;\n }\n};\n\n// helpers //////////\n\nfunction getPropertyNames(descriptor, keepDefaultProperties) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.reduce)(descriptor.properties, function(properties, property) {\n\n if (keepDefaultProperties && property.default) {\n return properties;\n }\n\n return properties.concat(property.name);\n }, []);\n}\n\nfunction is(element, type) {\n return element && (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isFunction)(element.$instanceOf) && element.$instanceOf(type);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL01vZGRsZUNvcHkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBV2tCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwyQ0FBMkM7QUFDeEQsYUFBYSxvQ0FBb0M7QUFDakQ7QUFDQSxhQUFhLDJDQUEyQztBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsUUFBUTtBQUNuQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxnREFBTTtBQUNqQjtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixrREFBUTtBQUNuQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sOENBQUksOEJBQThCLHNEQUFZLEdBQUcsb0JBQW9COztBQUU1RTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsV0FBVyxlQUFlO0FBQzFCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixpREFBTztBQUMvQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLGlEQUFPO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLEVBQUUsaURBQU87QUFDVDs7QUFFQSxRQUFRLDZDQUFHO0FBQ1g7QUFDQTs7QUFFQTs7QUFFQSxTQUFTLG1EQUFTO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxrREFBUTtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLGlEQUFPO0FBQ2IsV0FBVyxnREFBTTs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLE1BQU0sa0RBQVE7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVPO0FBQ1AsU0FBUyxnREFBTTs7QUFFZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxvQkFBb0Isb0RBQVU7QUFDOUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL01vZGRsZUNvcHkuanM/OWU1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBmaW5kLFxuICBmb3JFYWNoLFxuICBoYXMsXG4gIGlzQXJyYXksXG4gIGlzRGVmaW5lZCxcbiAgaXNGdW5jdGlvbixcbiAgaXNPYmplY3QsXG4gIG1hdGNoUGF0dGVybixcbiAgcmVkdWNlLFxuICBzb3J0Qnlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG52YXIgRElTQUxMT1dFRF9QUk9QRVJUSUVTID0gW1xuICAnYXJ0aWZhY3RzJyxcbiAgJ2RhdGFJbnB1dEFzc29jaWF0aW9ucycsXG4gICdkYXRhT3V0cHV0QXNzb2NpYXRpb25zJyxcbiAgJ2RlZmF1bHQnLFxuICAnZmxvd0VsZW1lbnRzJyxcbiAgJ2xhbmVzJyxcbiAgJ2luY29taW5nJyxcbiAgJ291dGdvaW5nJyxcbiAgJ2NhdGVnb3J5VmFsdWUnXG5dO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vbW9kZWxpbmcvQnBtbkZhY3RvcnknKS5kZWZhdWx0fSBCcG1uRmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGV9IE1vZGRsZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuTW9kZGxlRWxlbWVudH0gTW9kZGxlRWxlbWVudFxuICovXG5cbi8qKlxuICogVXRpbGl0eSBmb3IgY29weWluZyBtb2RlbCBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGVsZW1lbnQgdG8gdGFyZ2V0IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge01vZGRsZX0gbW9kZGxlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGRsZUNvcHkoZXZlbnRCdXMsIGJwbW5GYWN0b3J5LCBtb2RkbGUpIHtcbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuXG4gIC8vIGNvcHkgZXh0ZW5zaW9uIGVsZW1lbnRzIGxhc3RcbiAgZXZlbnRCdXMub24oJ21vZGRsZUNvcHkuY2FuQ29weVByb3BlcnRpZXMnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHByb3BlcnR5TmFtZXMgPSBjb250ZXh0LnByb3BlcnR5TmFtZXM7XG5cbiAgICBpZiAoIXByb3BlcnR5TmFtZXMgfHwgIXByb3BlcnR5TmFtZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRCeShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPT09ICdleHRlbnNpb25FbGVtZW50cyc7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGRlZmF1bHQgY2hlY2sgd2hldGhlciBwcm9wZXJ0eSBjYW4gYmUgY29waWVkXG4gIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0eScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcGFyZW50ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICAgIHBhcmVudERlc2NyaXB0b3IgPSBpc09iamVjdChwYXJlbnQpICYmIHBhcmVudC4kZGVzY3JpcHRvcixcbiAgICAgICAgcHJvcGVydHlOYW1lID0gY29udGV4dC5wcm9wZXJ0eU5hbWU7XG5cbiAgICBpZiAocHJvcGVydHlOYW1lICYmIERJU0FMTE9XRURfUFJPUEVSVElFUy5pbmRleE9mKHByb3BlcnR5TmFtZSkgIT09IC0xKSB7XG5cbiAgICAgIC8vIGRpc2FsbG93IGNvcHlpbmcgcHJvcGVydHlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlOYW1lICYmXG4gICAgICBwYXJlbnREZXNjcmlwdG9yICYmXG4gICAgICAhZmluZChwYXJlbnREZXNjcmlwdG9yLnByb3BlcnRpZXMsIG1hdGNoUGF0dGVybih7IG5hbWU6IHByb3BlcnR5TmFtZSB9KSkpIHtcblxuICAgICAgLy8gZGlzYWxsb3cgY29weWluZyBwcm9wZXJ0eVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZG8gTk9UIGFsbG93IHRvIGNvcHkgZW1wdHkgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gIGV2ZW50QnVzLm9uKCdtb2RkbGVDb3B5LmNhblNldENvcGllZFByb3BlcnR5JywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBwcm9wZXJ0eSA9IGNvbnRleHQucHJvcGVydHk7XG5cbiAgICBpZiAoaXMocHJvcGVydHksICdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJykgJiYgKCFwcm9wZXJ0eS52YWx1ZXMgfHwgIXByb3BlcnR5LnZhbHVlcy5sZW5ndGgpKSB7XG5cbiAgICAgIC8vIGRpc2FsbG93IHNldHRpbmcgY29waWVkIHByb3BlcnR5XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cblxuTW9kZGxlQ29weS4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtbkZhY3RvcnknLFxuICAnbW9kZGxlJ1xuXTtcblxuLyoqXG4gKiBDb3B5IG1vZGVsIHByb3BlcnRpZXMgb2Ygc291cmNlIGVsZW1lbnQgdG8gdGFyZ2V0IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBzb3VyY2VFbGVtZW50XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IHRhcmdldEVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IFtwcm9wZXJ0eU5hbWVzXVxuICogQHBhcmFtIHtib29sZWFufSBbY2xvbmU9ZmFsc2VdXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuTW9kZGxlQ29weS5wcm90b3R5cGUuY29weUVsZW1lbnQgPSBmdW5jdGlvbihzb3VyY2VFbGVtZW50LCB0YXJnZXRFbGVtZW50LCBwcm9wZXJ0eU5hbWVzLCBjbG9uZSA9IGZhbHNlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBpZiAocHJvcGVydHlOYW1lcyAmJiAhaXNBcnJheShwcm9wZXJ0eU5hbWVzKSkge1xuICAgIHByb3BlcnR5TmFtZXMgPSBbIHByb3BlcnR5TmFtZXMgXTtcbiAgfVxuXG4gIHByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVzIHx8IGdldFByb3BlcnR5TmFtZXMoc291cmNlRWxlbWVudC4kZGVzY3JpcHRvcik7XG5cbiAgdmFyIGNhbkNvcHlQcm9wZXJ0aWVzID0gdGhpcy5fZXZlbnRCdXMuZmlyZSgnbW9kZGxlQ29weS5jYW5Db3B5UHJvcGVydGllcycsIHtcbiAgICBwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzLFxuICAgIHNvdXJjZUVsZW1lbnQ6IHNvdXJjZUVsZW1lbnQsXG4gICAgdGFyZ2V0RWxlbWVudDogdGFyZ2V0RWxlbWVudCxcbiAgICBjbG9uZTogY2xvbmVcbiAgfSk7XG5cbiAgaWYgKGNhbkNvcHlQcm9wZXJ0aWVzID09PSBmYWxzZSkge1xuICAgIHJldHVybiB0YXJnZXRFbGVtZW50O1xuICB9XG5cbiAgaWYgKGlzQXJyYXkoY2FuQ29weVByb3BlcnRpZXMpKSB7XG4gICAgcHJvcGVydHlOYW1lcyA9IGNhbkNvcHlQcm9wZXJ0aWVzO1xuICB9XG5cbiAgLy8gY29weSBwcm9wZXJ0aWVzXG4gIGZvckVhY2gocHJvcGVydHlOYW1lcywgZnVuY3Rpb24ocHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIHNvdXJjZVByb3BlcnR5O1xuXG4gICAgaWYgKGhhcyhzb3VyY2VFbGVtZW50LCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZUVsZW1lbnQuZ2V0KHByb3BlcnR5TmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIGNvcGllZFByb3BlcnR5ID0gc2VsZi5jb3B5UHJvcGVydHkoc291cmNlUHJvcGVydHksIHRhcmdldEVsZW1lbnQsIHByb3BlcnR5TmFtZSwgY2xvbmUpO1xuXG4gICAgaWYgKCFpc0RlZmluZWQoY29waWVkUHJvcGVydHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNhblNldFByb3BlcnR5ID0gc2VsZi5fZXZlbnRCdXMuZmlyZSgnbW9kZGxlQ29weS5jYW5TZXRDb3BpZWRQcm9wZXJ0eScsIHtcbiAgICAgIHBhcmVudDogdGFyZ2V0RWxlbWVudCxcbiAgICAgIHByb3BlcnR5OiBjb3BpZWRQcm9wZXJ0eSxcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lXG4gICAgfSk7XG5cbiAgICBpZiAoY2FuU2V0UHJvcGVydHkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVE9ETyhuaWtrdSk6IHVuY2xhaW0gb2xkIElEcyBpZiBJRCBwcm9wZXJ0eSBpcyBjb3BpZWQgb3ZlclxuICAgIC8vIHRoaXMuX21vZGRsZS5nZXRQcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBwcm9wZXJ0eU5hbWUpXG4gICAgdGFyZ2V0RWxlbWVudC5zZXQocHJvcGVydHlOYW1lLCBjb3BpZWRQcm9wZXJ0eSk7XG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXRFbGVtZW50O1xufTtcblxuLyoqXG4gKiBDb3B5IG1vZGVsIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBwcm9wZXJ0eVxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Nsb25lPWZhbHNlXVxuICpcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuTW9kZGxlQ29weS5wcm90b3R5cGUuY29weVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcGVydHksIHBhcmVudCwgcHJvcGVydHlOYW1lLCBjbG9uZSA9IGZhbHNlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBhbGxvdyBvdGhlcnMgdG8gY29weSBwcm9wZXJ0eVxuICB2YXIgY29waWVkUHJvcGVydHkgPSB0aGlzLl9ldmVudEJ1cy5maXJlKCdtb2RkbGVDb3B5LmNhbkNvcHlQcm9wZXJ0eScsIHtcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgY2xvbmU6IGNsb25lXG4gIH0pO1xuXG4gIC8vIHJldHVybiBpZiBjb3B5aW5nIGlzIE5PVCBhbGxvd2VkXG4gIGlmIChjb3BpZWRQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29waWVkUHJvcGVydHkpIHtcbiAgICBpZiAoaXNPYmplY3QoY29waWVkUHJvcGVydHkpICYmIGNvcGllZFByb3BlcnR5LiR0eXBlICYmICFjb3BpZWRQcm9wZXJ0eS4kcGFyZW50KSB7XG4gICAgICBjb3BpZWRQcm9wZXJ0eS4kcGFyZW50ID0gcGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBjb3BpZWRQcm9wZXJ0eTtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0eURlc2NyaXB0b3IgPSB0aGlzLl9tb2RkbGUuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcblxuICAvLyBkbyBOT1QgY29weSByZWZlcmVuY2VzXG4gIGlmIChwcm9wZXJ0eURlc2NyaXB0b3IuaXNSZWZlcmVuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjb3B5IGlkXG4gIGlmIChwcm9wZXJ0eURlc2NyaXB0b3IuaXNJZCkge1xuICAgIHJldHVybiBwcm9wZXJ0eSAmJiB0aGlzLl9jb3B5SWQocHJvcGVydHksIHBhcmVudCwgY2xvbmUpO1xuICB9XG5cbiAgLy8gY29weSBhcnJheXNcbiAgaWYgKGlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eSwgZnVuY3Rpb24oY2hpbGRQcm9wZXJ0aWVzLCBjaGlsZFByb3BlcnR5KSB7XG5cbiAgICAgIC8vIHJlY3Vyc2lvblxuICAgICAgY29waWVkUHJvcGVydHkgPSBzZWxmLmNvcHlQcm9wZXJ0eShjaGlsZFByb3BlcnR5LCBwYXJlbnQsIHByb3BlcnR5TmFtZSwgY2xvbmUpO1xuXG4gICAgICAvLyBjb3B5aW5nIG1pZ2h0IE5PVCBiZSBhbGxvd2VkXG4gICAgICBpZiAoY29waWVkUHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkUHJvcGVydGllcy5jb25jYXQoY29waWVkUHJvcGVydHkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hpbGRQcm9wZXJ0aWVzO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8vIGNvcHkgbW9kZWwgZWxlbWVudHNcbiAgaWYgKGlzT2JqZWN0KHByb3BlcnR5KSAmJiBwcm9wZXJ0eS4kdHlwZSkge1xuICAgIGlmICh0aGlzLl9tb2RkbGUuZ2V0RWxlbWVudERlc2NyaXB0b3IocHJvcGVydHkpLmlzR2VuZXJpYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcGllZFByb3BlcnR5ID0gc2VsZi5fYnBtbkZhY3RvcnkuY3JlYXRlKHByb3BlcnR5LiR0eXBlKTtcblxuICAgIGNvcGllZFByb3BlcnR5LiRwYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICAvLyByZWN1cnNpb25cbiAgICBjb3BpZWRQcm9wZXJ0eSA9IHNlbGYuY29weUVsZW1lbnQocHJvcGVydHksIGNvcGllZFByb3BlcnR5LCBudWxsLCBjbG9uZSk7XG5cbiAgICByZXR1cm4gY29waWVkUHJvcGVydHk7XG4gIH1cblxuICAvLyBjb3B5IHByaW1pdGl2ZSBwcm9wZXJ0aWVzXG4gIHJldHVybiBwcm9wZXJ0eTtcbn07XG5cbk1vZGRsZUNvcHkucHJvdG90eXBlLl9jb3B5SWQgPSBmdW5jdGlvbihpZCwgZWxlbWVudCwgY2xvbmUgPSBmYWxzZSkge1xuICBpZiAoY2xvbmUpIHtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvLyBkaXNhbGxvdyBpZiBhbHJlYWR5IHRha2VuXG4gIGlmICh0aGlzLl9tb2RkbGUuaWRzLmFzc2lnbmVkKGlkKSkge1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcblxuICAgIHRoaXMuX21vZGRsZS5pZHMuY2xhaW0oaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxufTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eU5hbWVzKGRlc2NyaXB0b3IsIGtlZXBEZWZhdWx0UHJvcGVydGllcykge1xuICByZXR1cm4gcmVkdWNlKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocHJvcGVydGllcywgcHJvcGVydHkpIHtcblxuICAgIGlmIChrZWVwRGVmYXVsdFByb3BlcnRpZXMgJiYgcHJvcGVydHkuZGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXMuY29uY2F0KHByb3BlcnR5Lm5hbWUpO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIGlzKGVsZW1lbnQsIHR5cGUpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgaXNGdW5jdGlvbihlbGVtZW50LiRpbnN0YW5jZU9mKSAmJiBlbGVtZW50LiRpbnN0YW5jZU9mKHR5cGUpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/ModdleCopy.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/index.js":
/*!********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/index.js ***!
\********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_copy_paste__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/copy-paste */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/copy-paste/index.js\");\n/* harmony import */ var _BpmnCopyPaste__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BpmnCopyPaste */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/BpmnCopyPaste.js\");\n/* harmony import */ var _ModdleCopy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ModdleCopy */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/ModdleCopy.js\");\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n diagram_js_lib_features_copy_paste__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n ],\n __init__: [ 'bpmnCopyPaste', 'moddleCopy' ],\n bpmnCopyPaste: [ 'type', _BpmnCopyPaste__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ],\n moddleCopy: [ 'type', _ModdleCopy__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9jb3B5LXBhc3RlL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBaUU7O0FBRXJCO0FBQ047O0FBRXRDLGlFQUFlO0FBQ2Y7QUFDQSxJQUFJLDBFQUFlO0FBQ25CO0FBQ0E7QUFDQSwyQkFBMkIsc0RBQWE7QUFDeEMsd0JBQXdCLG1EQUFVO0FBQ2xDLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUvaW5kZXguanM/OTEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29weVBhc3RlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NvcHktcGFzdGUnO1xuXG5pbXBvcnQgQnBtbkNvcHlQYXN0ZSBmcm9tICcuL0JwbW5Db3B5UGFzdGUnO1xuaW1wb3J0IE1vZGRsZUNvcHkgZnJvbSAnLi9Nb2RkbGVDb3B5JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2RlcGVuZHNfXzogW1xuICAgIENvcHlQYXN0ZU1vZHVsZVxuICBdLFxuICBfX2luaXRfXzogWyAnYnBtbkNvcHlQYXN0ZScsICdtb2RkbGVDb3B5JyBdLFxuICBicG1uQ29weVBhc3RlOiBbICd0eXBlJywgQnBtbkNvcHlQYXN0ZSBdLFxuICBtb2RkbGVDb3B5OiBbICd0eXBlJywgTW9kZGxlQ29weSBdXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/copy-paste/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/di-ordering/BpmnDiOrdering.js":
/*!******************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/di-ordering/BpmnDiOrdering.js ***!
\******************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnDiOrdering)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n */\n\nvar HIGH_PRIORITY = 2000;\n\n/**\n * @param {EventBus} eventBus\n * @param {Canvas} canvas\n */\nfunction BpmnDiOrdering(eventBus, canvas) {\n\n eventBus.on('saveXML.start', HIGH_PRIORITY, orderDi);\n\n function orderDi() {\n var rootElements = canvas.getRootElements();\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.forEach)(rootElements, function(root) {\n var rootDi = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getDi)(root),\n elements,\n diElements;\n\n elements = (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_2__.selfAndAllChildren)([ root ], false);\n\n // only bpmndi:Shape and bpmndi:Edge can be direct children of bpmndi:Plane\n elements = (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.filter)(elements, function(element) {\n return element !== root && !element.labelTarget;\n });\n\n diElements = (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.map)(elements, _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getDi);\n\n rootDi.set('planeElement', diElements);\n });\n }\n}\n\nBpmnDiOrdering.$inject = [ 'eventBus', 'canvas' ];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9CcG1uRGlPcmRlcmluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTZDOztBQU0zQjs7QUFFZ0Q7O0FBRWxFO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSw4Q0FBOEM7QUFDM0Q7O0FBRUE7O0FBRUE7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CO0FBQ2U7O0FBRWY7O0FBRUE7QUFDQTs7QUFFQSxJQUFJLGlEQUFPO0FBQ1gsbUJBQW1CLHNEQUFLO0FBQ3hCO0FBQ0E7O0FBRUEsaUJBQWlCLGdGQUFrQjs7QUFFbkM7QUFDQSxpQkFBaUIsZ0RBQU07QUFDdkI7QUFDQSxPQUFPOztBQUVQLG1CQUFtQiw2Q0FBRyxXQUFXLGtEQUFLOztBQUV0QztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZGktb3JkZXJpbmcvQnBtbkRpT3JkZXJpbmcuanM/ZDViZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXREaSB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBmb3JFYWNoLFxuICBtYXBcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBzZWxmQW5kQWxsQ2hpbGRyZW4gfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvQ2FudmFzJykuZGVmYXVsdH0gQ2FudmFzXG4gKi9cblxudmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xuXG4vKipcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5EaU9yZGVyaW5nKGV2ZW50QnVzLCBjYW52YXMpIHtcblxuICBldmVudEJ1cy5vbignc2F2ZVhNTC5zdGFydCcsIEhJR0hfUFJJT1JJVFksIG9yZGVyRGkpO1xuXG4gIGZ1bmN0aW9uIG9yZGVyRGkoKSB7XG4gICAgdmFyIHJvb3RFbGVtZW50cyA9IGNhbnZhcy5nZXRSb290RWxlbWVudHMoKTtcblxuICAgIGZvckVhY2gocm9vdEVsZW1lbnRzLCBmdW5jdGlvbihyb290KSB7XG4gICAgICB2YXIgcm9vdERpID0gZ2V0RGkocm9vdCksXG4gICAgICAgICAgZWxlbWVudHMsXG4gICAgICAgICAgZGlFbGVtZW50cztcblxuICAgICAgZWxlbWVudHMgPSBzZWxmQW5kQWxsQ2hpbGRyZW4oWyByb290IF0sIGZhbHNlKTtcblxuICAgICAgLy8gb25seSBicG1uZGk6U2hhcGUgYW5kIGJwbW5kaTpFZGdlIGNhbiBiZSBkaXJlY3QgY2hpbGRyZW4gb2YgYnBtbmRpOlBsYW5lXG4gICAgICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudCAhPT0gcm9vdCAmJiAhZWxlbWVudC5sYWJlbFRhcmdldDtcbiAgICAgIH0pO1xuXG4gICAgICBkaUVsZW1lbnRzID0gbWFwKGVsZW1lbnRzLCBnZXREaSk7XG5cbiAgICAgIHJvb3REaS5zZXQoJ3BsYW5lRWxlbWVudCcsIGRpRWxlbWVudHMpO1xuICAgIH0pO1xuICB9XG59XG5cbkJwbW5EaU9yZGVyaW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdjYW52YXMnIF07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/di-ordering/BpmnDiOrdering.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/di-ordering/index.js":
/*!*********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/di-ordering/index.js ***!
\*********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _di_ordering_BpmnDiOrdering__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../di-ordering/BpmnDiOrdering */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/di-ordering/BpmnDiOrdering.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __init__: [\n 'bpmnDiOrdering'\n ],\n bpmnDiOrdering: [ 'type', _di_ordering_BpmnDiOrdering__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaS1vcmRlcmluZy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEyRDs7QUFFM0QsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUVBQWM7QUFDMUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2RpLW9yZGVyaW5nL2luZGV4LmpzPzc2NjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJwbW5EaU9yZGVyaW5nIGZyb20gJy4uL2RpLW9yZGVyaW5nL0JwbW5EaU9yZGVyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgICdicG1uRGlPcmRlcmluZydcbiAgXSxcbiAgYnBtbkRpT3JkZXJpbmc6IFsgJ3R5cGUnLCBCcG1uRGlPcmRlcmluZyBdXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/di-ordering/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/BpmnDistributeElements.js":
/*!**********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/BpmnDistributeElements.js ***!
\**********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnDistributeElements)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_features_rules_RuleProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/rules/RuleProvider */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/rules/RuleProvider.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modeling/util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n */\n\n/**\n * Registers element exclude filters for elements that currently do not support\n * distribution.\n *\n * @param {EventBus} eventBus\n */\nfunction BpmnDistributeElements(eventBus) {\n diagram_js_lib_features_rules_RuleProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n}\n\nBpmnDistributeElements.$inject = [ 'eventBus' ];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BpmnDistributeElements, diagram_js_lib_features_rules_RuleProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nBpmnDistributeElements.prototype.init = function() {\n this.addRule('elements.distribute', function(context) {\n var elements = context.elements;\n\n elements = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.filter)(elements, function(element) {\n var cannotDistribute = (0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_3__.isAny)(element, [\n 'bpmn:Association',\n 'bpmn:BoundaryEvent',\n 'bpmn:DataInputAssociation',\n 'bpmn:DataOutputAssociation',\n 'bpmn:Lane',\n 'bpmn:MessageFlow',\n 'bpmn:SequenceFlow',\n 'bpmn:TextAnnotation'\n ]);\n\n return !(element.labelTarget || cannotDistribute);\n });\n\n // filter out elements which are children of any of the selected elements\n elements = (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_4__.getParents)(elements);\n\n if (elements.length < 3) {\n return false;\n }\n\n return elements;\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL0JwbW5EaXN0cmlidXRlRWxlbWVudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXdDOztBQUU4QjtBQUNaOztBQUl4Qzs7QUFJcUI7O0FBRXZDO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDZTtBQUNmLEVBQUUsa0ZBQVk7QUFDZDs7QUFFQTs7QUFFQSw0REFBUSx5QkFBeUIsa0ZBQVk7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGdEQUFNO0FBQ3JCLDZCQUE2QixrRUFBSztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsZUFBZSx3RUFBVTs7QUFFekI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9CcG1uRGlzdHJpYnV0ZUVsZW1lbnRzLmpzPzA0MDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgUnVsZVByb3ZpZGVyIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL1J1bGVQcm92aWRlcic7XG5pbXBvcnQgeyBnZXRQYXJlbnRzIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGZpbHRlclxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqL1xuXG4vKipcbiAqIFJlZ2lzdGVycyBlbGVtZW50IGV4Y2x1ZGUgZmlsdGVycyBmb3IgZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnRcbiAqIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uRGlzdHJpYnV0ZUVsZW1lbnRzKGV2ZW50QnVzKSB7XG4gIFJ1bGVQcm92aWRlci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcbn1cblxuQnBtbkRpc3RyaWJ1dGVFbGVtZW50cy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbmluaGVyaXRzKEJwbW5EaXN0cmlidXRlRWxlbWVudHMsIFJ1bGVQcm92aWRlcik7XG5cbkJwbW5EaXN0cmlidXRlRWxlbWVudHMucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5hZGRSdWxlKCdlbGVtZW50cy5kaXN0cmlidXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHM7XG5cbiAgICBlbGVtZW50cyA9IGZpbHRlcihlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgdmFyIGNhbm5vdERpc3RyaWJ1dGUgPSBpc0FueShlbGVtZW50LCBbXG4gICAgICAgICdicG1uOkFzc29jaWF0aW9uJyxcbiAgICAgICAgJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICAgICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJyxcbiAgICAgICAgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJyxcbiAgICAgICAgJ2JwbW46TGFuZScsXG4gICAgICAgICdicG1uOk1lc3NhZ2VGbG93JyxcbiAgICAgICAgJ2JwbW46U2VxdWVuY2VGbG93JyxcbiAgICAgICAgJ2JwbW46VGV4dEFubm90YXRpb24nXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuICEoZWxlbWVudC5sYWJlbFRhcmdldCB8fCBjYW5ub3REaXN0cmlidXRlKTtcbiAgICB9KTtcblxuICAgIC8vIGZpbHRlciBvdXQgZWxlbWVudHMgd2hpY2ggYXJlIGNoaWxkcmVuIG9mIGFueSBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHNcbiAgICBlbGVtZW50cyA9IGdldFBhcmVudHMoZWxlbWVudHMpO1xuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/BpmnDistributeElements.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/DistributeElementsIcons.js":
/*!***********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/DistributeElementsIcons.js ***!
\***********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * To change the icons, modify the SVGs in `./resources`, execute `npx svgo -f resources --datauri enc -o dist`,\n * and then replace respective icons with the optimized data URIs in `./dist`.\n */\nvar icons = {\n horizontal: `\n \n \n \n `,\n vertical: `\n \n \n \n `\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (icons);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL0Rpc3RyaWJ1dGVFbGVtZW50c0ljb25zLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRkFBc0Ysb0JBQW9CLGlCQUFpQixzQkFBc0I7QUFDakosd0ZBQXdGLG9CQUFvQixpQkFBaUI7QUFDN0gsZ0dBQWdHLG9CQUFvQixpQkFBaUIsV0FBVztBQUNoSjtBQUNBO0FBQ0Esb0ZBQW9GLG9CQUFvQixpQkFBaUIsc0JBQXNCO0FBQy9JLHNGQUFzRixvQkFBb0IsaUJBQWlCO0FBQzNILDhGQUE4RixvQkFBb0IsaUJBQWlCLFdBQVc7QUFDOUk7QUFDQTs7QUFFQSxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL0Rpc3RyaWJ1dGVFbGVtZW50c0ljb25zLmpzPzQ0ZmYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUbyBjaGFuZ2UgdGhlIGljb25zLCBtb2RpZnkgdGhlIFNWR3MgaW4gYC4vcmVzb3VyY2VzYCwgZXhlY3V0ZSBgbnB4IHN2Z28gLWYgcmVzb3VyY2VzIC0tZGF0YXVyaSBlbmMgLW8gZGlzdGAsXG4gKiBhbmQgdGhlbiByZXBsYWNlIHJlc3BlY3RpdmUgaWNvbnMgd2l0aCB0aGUgb3B0aW1pemVkIGRhdGEgVVJJcyBpbiBgLi9kaXN0YC5cbiAqL1xudmFyIGljb25zID0ge1xuICBob3Jpem9udGFsOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxODAwIDE4MDBcIj5cbiAgICAgICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPVwiNDUwIDQwMCA0NTAgMTUwIDEzNTAgMTUwIDEzNTAgNDAwXCIgc3R5bGU9XCJmaWxsOm5vbmU7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MTAwO3N0cm9rZS1saW5lam9pbjpyb3VuZDtcIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjE1MFwiIHk9XCI0NTBcIiB3aWR0aD1cIjYwMFwiIGhlaWdodD1cIjEyMDBcIiByeD1cIjFcIiBzdHlsZT1cImZpbGw6bm9uZTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7XCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxMDUwXCIgeT1cIjQ1MFwiIHdpZHRoPVwiNjAwXCIgaGVpZ2h0PVwiODAwXCIgcng9XCIxXCIgc3R5bGU9XCJmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7b3BhY2l0eTouNTtcIj48L3JlY3Q+XG4gICAgICAgICAgICAgIDwvc3ZnPmAsXG4gIHZlcnRpY2FsOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxODAwIDE4MDBcIj5cbiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjQwMCAxMzUwIDE1MCAxMzUwIDE1MCA0NTAgNDAwIDQ1MFwiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjEwMDtzdHJva2UtbGluZWpvaW46cm91bmQ7XCIvPlxuICAgICAgICAgICAgICA8cmVjdCB4PVwiNDUwXCIgeT1cIjE1MFwiIHdpZHRoPVwiMTIwMFwiIGhlaWdodD1cIjYwMFwiIHJ4PVwiMVwiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjEwMDtcIj48L3JlY3Q+XG4gICAgICAgICAgICAgIDxyZWN0IHg9XCI0NTBcIiB5PVwiMTA1MFwiIHdpZHRoPVwiODAwXCIgaGVpZ2h0PVwiNjAwXCIgcng9XCIxXCIgc3R5bGU9XCJmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoxMDA7b3BhY2l0eTouNTtcIj48L3JlY3Q+XG4gICAgICAgICAgICA8L3N2Zz5gXG59O1xuXG5leHBvcnQgZGVmYXVsdCBpY29ucztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/DistributeElementsIcons.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/DistributeElementsMenuProvider.js":
/*!******************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/DistributeElementsMenuProvider.js ***!
\******************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DistributeElementsMenuProvider)\n/* harmony export */ });\n/* harmony import */ var _DistributeElementsIcons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DistributeElementsIcons */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/DistributeElementsIcons.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu\n * @typedef {import('./BpmnDistributeElements').default} DistributeElements\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n * @typedef {import('diagram-js/lib/features/rules/Rules').default} Rules\n *\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntries} PopupMenuEntries\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').default} PopupMenuProvider\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').PopupMenuTarget} PopupMenuTarget\n */\n\nvar LOW_PRIORITY = 900;\n\n/**\n * A provider for the distribute elements popup menu.\n *\n * @implements {PopupMenuProvider}\n *\n * @param {PopupMenu} popupMenu\n * @param {DistributeElements} distributeElements\n * @param {Translate} translate\n * @param {Rules} rules\n */\nfunction DistributeElementsMenuProvider(\n popupMenu, distributeElements, translate, rules) {\n this._distributeElements = distributeElements;\n this._translate = translate;\n this._popupMenu = popupMenu;\n this._rules = rules;\n\n popupMenu.registerProvider('align-elements', LOW_PRIORITY, this);\n}\n\nDistributeElementsMenuProvider.$inject = [\n 'popupMenu',\n 'distributeElements',\n 'translate',\n 'rules'\n];\n\n/**\n * @param {PopupMenuTarget} target\n *\n * @return {PopupMenuEntries}\n */\nDistributeElementsMenuProvider.prototype.getPopupMenuEntries = function(target) {\n var entries = {};\n\n if (this._isAllowed(target)) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)(entries, this._getEntries(target));\n }\n\n return entries;\n};\n\nDistributeElementsMenuProvider.prototype._isAllowed = function(elements) {\n return this._rules.allowed('elements.distribute', { elements: elements });\n};\n\nDistributeElementsMenuProvider.prototype._getEntries = function(elements) {\n var distributeElements = this._distributeElements,\n translate = this._translate,\n popupMenu = this._popupMenu;\n\n var entries = {\n 'distribute-elements-horizontal': {\n group: 'distribute',\n title: translate('Distribute elements horizontally'),\n className: 'bjs-align-elements-menu-entry',\n imageHtml: _DistributeElementsIcons__WEBPACK_IMPORTED_MODULE_1__[\"default\"]['horizontal'],\n action: function(event, entry) {\n distributeElements.trigger(elements, 'horizontal');\n popupMenu.close();\n }\n },\n 'distribute-elements-vertical': {\n group: 'distribute',\n title: translate('Distribute elements vertically'),\n imageHtml: _DistributeElementsIcons__WEBPACK_IMPORTED_MODULE_1__[\"default\"]['vertical'],\n action: function(event, entry) {\n distributeElements.trigger(elements, 'vertical');\n popupMenu.close();\n }\n },\n };\n\n return entries;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL0Rpc3RyaWJ1dGVFbGVtZW50c01lbnVQcm92aWRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEM7O0FBRVo7O0FBRWxDO0FBQ0EsYUFBYSxnRUFBZ0U7QUFDN0UsYUFBYSw0Q0FBNEM7QUFDekQsYUFBYSwyREFBMkQ7QUFDeEUsYUFBYSx1REFBdUQ7QUFDcEU7QUFDQSxhQUFhLGlGQUFpRjtBQUM5RixhQUFhLHdFQUF3RTtBQUNyRixhQUFhLHdFQUF3RTtBQUNyRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxvQkFBb0I7QUFDL0IsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsT0FBTztBQUNsQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksZ0RBQU07QUFDVjs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0RBQXNELG9CQUFvQjtBQUMxRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGdFQUFLO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnRUFBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZGlzdHJpYnV0ZS1lbGVtZW50cy9EaXN0cmlidXRlRWxlbWVudHNNZW51UHJvdmlkZXIuanM/MDBkYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSUNPTlMgZnJvbSAnLi9EaXN0cmlidXRlRWxlbWVudHNJY29ucyc7XG5cbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudScpLmRlZmF1bHR9IFBvcHVwTWVudVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9CcG1uRGlzdHJpYnV0ZUVsZW1lbnRzJykuZGVmYXVsdH0gRGlzdHJpYnV0ZUVsZW1lbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZS90cmFuc2xhdGUnKS5kZWZhdWx0fSBUcmFuc2xhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3J1bGVzL1J1bGVzJykuZGVmYXVsdH0gUnVsZXNcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudVByb3ZpZGVyJykuUG9wdXBNZW51RW50cmllc30gUG9wdXBNZW51RW50cmllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS9Qb3B1cE1lbnVQcm92aWRlcicpLmRlZmF1bHR9IFBvcHVwTWVudVByb3ZpZGVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9wb3B1cC1tZW51L1BvcHVwTWVudScpLlBvcHVwTWVudVRhcmdldH0gUG9wdXBNZW51VGFyZ2V0XG4gKi9cblxudmFyIExPV19QUklPUklUWSA9IDkwMDtcblxuLyoqXG4gKiBBIHByb3ZpZGVyIGZvciB0aGUgZGlzdHJpYnV0ZSBlbGVtZW50cyBwb3B1cCBtZW51LlxuICpcbiAqIEBpbXBsZW1lbnRzIHtQb3B1cE1lbnVQcm92aWRlcn1cbiAqXG4gKiBAcGFyYW0ge1BvcHVwTWVudX0gcG9wdXBNZW51XG4gKiBAcGFyYW0ge0Rpc3RyaWJ1dGVFbGVtZW50c30gZGlzdHJpYnV0ZUVsZW1lbnRzXG4gKiBAcGFyYW0ge1RyYW5zbGF0ZX0gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge1J1bGVzfSBydWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXN0cmlidXRlRWxlbWVudHNNZW51UHJvdmlkZXIoXG4gICAgcG9wdXBNZW51LCBkaXN0cmlidXRlRWxlbWVudHMsIHRyYW5zbGF0ZSwgcnVsZXMpIHtcbiAgdGhpcy5fZGlzdHJpYnV0ZUVsZW1lbnRzID0gZGlzdHJpYnV0ZUVsZW1lbnRzO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fcnVsZXMgPSBydWxlcztcblxuICBwb3B1cE1lbnUucmVnaXN0ZXJQcm92aWRlcignYWxpZ24tZWxlbWVudHMnLCBMT1dfUFJJT1JJVFksIHRoaXMpO1xufVxuXG5EaXN0cmlidXRlRWxlbWVudHNNZW51UHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ3BvcHVwTWVudScsXG4gICdkaXN0cmlidXRlRWxlbWVudHMnLFxuICAndHJhbnNsYXRlJyxcbiAgJ3J1bGVzJ1xuXTtcblxuLyoqXG4gKiBAcGFyYW0ge1BvcHVwTWVudVRhcmdldH0gdGFyZ2V0XG4gKlxuICogQHJldHVybiB7UG9wdXBNZW51RW50cmllc31cbiAqL1xuRGlzdHJpYnV0ZUVsZW1lbnRzTWVudVByb3ZpZGVyLnByb3RvdHlwZS5nZXRQb3B1cE1lbnVFbnRyaWVzID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gIHZhciBlbnRyaWVzID0ge307XG5cbiAgaWYgKHRoaXMuX2lzQWxsb3dlZCh0YXJnZXQpKSB7XG4gICAgYXNzaWduKGVudHJpZXMsIHRoaXMuX2dldEVudHJpZXModGFyZ2V0KSk7XG4gIH1cblxuICByZXR1cm4gZW50cmllcztcbn07XG5cbkRpc3RyaWJ1dGVFbGVtZW50c01lbnVQcm92aWRlci5wcm90b3R5cGUuX2lzQWxsb3dlZCA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHJldHVybiB0aGlzLl9ydWxlcy5hbGxvd2VkKCdlbGVtZW50cy5kaXN0cmlidXRlJywgeyBlbGVtZW50czogZWxlbWVudHMgfSk7XG59O1xuXG5EaXN0cmlidXRlRWxlbWVudHNNZW51UHJvdmlkZXIucHJvdG90eXBlLl9nZXRFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgdmFyIGRpc3RyaWJ1dGVFbGVtZW50cyA9IHRoaXMuX2Rpc3RyaWJ1dGVFbGVtZW50cyxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZSxcbiAgICAgIHBvcHVwTWVudSA9IHRoaXMuX3BvcHVwTWVudTtcblxuICB2YXIgZW50cmllcyA9IHtcbiAgICAnZGlzdHJpYnV0ZS1lbGVtZW50cy1ob3Jpem9udGFsJzoge1xuICAgICAgZ3JvdXA6ICdkaXN0cmlidXRlJyxcbiAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0Rpc3RyaWJ1dGUgZWxlbWVudHMgaG9yaXpvbnRhbGx5JyksXG4gICAgICBjbGFzc05hbWU6ICdianMtYWxpZ24tZWxlbWVudHMtbWVudS1lbnRyeScsXG4gICAgICBpbWFnZUh0bWw6IElDT05TWydob3Jpem9udGFsJ10sXG4gICAgICBhY3Rpb246IGZ1bmN0aW9uKGV2ZW50LCBlbnRyeSkge1xuICAgICAgICBkaXN0cmlidXRlRWxlbWVudHMudHJpZ2dlcihlbGVtZW50cywgJ2hvcml6b250YWwnKTtcbiAgICAgICAgcG9wdXBNZW51LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnZGlzdHJpYnV0ZS1lbGVtZW50cy12ZXJ0aWNhbCc6IHtcbiAgICAgIGdyb3VwOiAnZGlzdHJpYnV0ZScsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdEaXN0cmlidXRlIGVsZW1lbnRzIHZlcnRpY2FsbHknKSxcbiAgICAgIGltYWdlSHRtbDogSUNPTlNbJ3ZlcnRpY2FsJ10sXG4gICAgICBhY3Rpb246IGZ1bmN0aW9uKGV2ZW50LCBlbnRyeSkge1xuICAgICAgICBkaXN0cmlidXRlRWxlbWVudHMudHJpZ2dlcihlbGVtZW50cywgJ3ZlcnRpY2FsJyk7XG4gICAgICAgIHBvcHVwTWVudS5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/DistributeElementsMenuProvider.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/index.js":
/*!*****************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/index.js ***!
\*****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_distribute_elements__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/features/distribute-elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/distribute-elements/index.js\");\n/* harmony import */ var diagram_js_lib_features_popup_menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/popup-menu */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/popup-menu/index.js\");\n/* harmony import */ var _BpmnDistributeElements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BpmnDistributeElements */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/BpmnDistributeElements.js\");\n/* harmony import */ var _DistributeElementsMenuProvider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./DistributeElementsMenuProvider */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/DistributeElementsMenuProvider.js\");\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n diagram_js_lib_features_popup_menu__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n diagram_js_lib_features_distribute_elements__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n ],\n __init__: [\n 'bpmnDistributeElements',\n 'distributeElementsMenuProvider'\n ],\n bpmnDistributeElements: [ 'type', _BpmnDistributeElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ],\n distributeElementsMenuProvider: [ 'type', _DistributeElementsMenuProvider__WEBPACK_IMPORTED_MODULE_3__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQW1GO0FBQ2xCOztBQUVIO0FBQ2dCOzs7QUFHOUUsaUVBQWU7QUFDZjtBQUNBLElBQUksMEVBQWU7QUFDbkIsSUFBSSxtRkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQywrREFBc0I7QUFDMUQsNENBQTRDLHVFQUE4QjtBQUMxRSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzL2luZGV4LmpzPzVhZGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpc3RyaWJ1dGVFbGVtZW50c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9kaXN0cmlidXRlLWVsZW1lbnRzJztcbmltcG9ydCBQb3B1cE1lbnVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudSc7XG5cbmltcG9ydCBCcG1uRGlzdHJpYnV0ZUVsZW1lbnRzIGZyb20gJy4vQnBtbkRpc3RyaWJ1dGVFbGVtZW50cyc7XG5pbXBvcnQgRGlzdHJpYnV0ZUVsZW1lbnRzTWVudVByb3ZpZGVyIGZyb20gJy4vRGlzdHJpYnV0ZUVsZW1lbnRzTWVudVByb3ZpZGVyJztcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgUG9wdXBNZW51TW9kdWxlLFxuICAgIERpc3RyaWJ1dGVFbGVtZW50c01vZHVsZVxuICBdLFxuICBfX2luaXRfXzogW1xuICAgICdicG1uRGlzdHJpYnV0ZUVsZW1lbnRzJyxcbiAgICAnZGlzdHJpYnV0ZUVsZW1lbnRzTWVudVByb3ZpZGVyJ1xuICBdLFxuICBicG1uRGlzdHJpYnV0ZUVsZW1lbnRzOiBbICd0eXBlJywgQnBtbkRpc3RyaWJ1dGVFbGVtZW50cyBdLFxuICBkaXN0cmlidXRlRWxlbWVudHNNZW51UHJvdmlkZXI6IFsgJ3R5cGUnLCBEaXN0cmlidXRlRWxlbWVudHNNZW51UHJvdmlkZXIgXVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/distribute-elements/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownBreadcrumbs.js":
/*!**********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownBreadcrumbs.js ***!
\**********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DrilldownBreadcrumbs)\n/* harmony export */ });\n/* harmony import */ var min_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dom */ \"./node_modules/min-dom/dist/index.esm.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_util_EscapeUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/EscapeUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/EscapeUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/DrilldownUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DrilldownUtil.js\");\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n *\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('../../model/Types').Shape} Shape\n */\n\nvar OPEN_CLASS = 'bjs-breadcrumbs-shown';\n\n\n/**\n * Adds overlays that allow switching planes on collapsed subprocesses.\n *\n * @param {EventBus} eventBus\n * @param {ElementRegistry} elementRegistry\n * @param {Canvas} canvas\n */\nfunction DrilldownBreadcrumbs(eventBus, elementRegistry, canvas) {\n var breadcrumbs = (0,min_dom__WEBPACK_IMPORTED_MODULE_0__.domify)('');\n var container = canvas.getContainer();\n var containerClasses = (0,min_dom__WEBPACK_IMPORTED_MODULE_0__.classes)(container);\n container.appendChild(breadcrumbs);\n\n var businessObjectParents = [];\n\n // update breadcrumbs if name or ID of the primary shape changes\n eventBus.on('element.changed', function(event) {\n var shape = event.element,\n businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape);\n\n var isPresent = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.find)(businessObjectParents, function(element) {\n return element === businessObject;\n });\n\n if (!isPresent) {\n return;\n }\n\n updateBreadcrumbs();\n });\n\n /**\n * Updates the displayed breadcrumbs. If no element is provided, only the\n * labels are updated.\n *\n * @param {Element} [element]\n */\n function updateBreadcrumbs(element) {\n if (element) {\n businessObjectParents = getBusinessObjectParentChain(element);\n }\n\n var path = businessObjectParents.map(function(parent) {\n var title = (0,diagram_js_lib_util_EscapeUtil__WEBPACK_IMPORTED_MODULE_3__.escapeHTML)(parent.name || parent.id);\n var link = (0,min_dom__WEBPACK_IMPORTED_MODULE_0__.domify)('' + title + ' ');\n\n var parentPlane = canvas.findRoot((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_4__.getPlaneIdFromShape)(parent)) || canvas.findRoot(parent.id);\n\n // when the root is a collaboration, the process does not have a corresponding\n // element in the elementRegisty. Instead, we search for the corresponding participant\n if (!parentPlane && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(parent, 'bpmn:Process')) {\n var participant = elementRegistry.find(function(element) {\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\n\n return businessObject && businessObject.get('processRef') && businessObject.get('processRef') === parent;\n });\n\n parentPlane = canvas.findRoot(participant.id);\n }\n\n link.addEventListener('click', function() {\n canvas.setRootElement(parentPlane);\n });\n\n return link;\n });\n\n breadcrumbs.innerHTML = '';\n\n // show breadcrumbs and expose state to .djs-container\n var visible = path.length > 1;\n\n containerClasses.toggle(OPEN_CLASS, visible);\n\n path.forEach(function(element) {\n breadcrumbs.appendChild(element);\n });\n }\n\n eventBus.on('root.set', function(event) {\n updateBreadcrumbs(event.element);\n });\n\n}\n\nDrilldownBreadcrumbs.$inject = [ 'eventBus', 'elementRegistry', 'canvas' ];\n\n\n// helpers //////////\n\n/**\n * Returns the parents for the element using the business object chain,\n * starting with the root element.\n *\n * @param {Shape} child\n *\n * @return {Shape}\n */\nfunction getBusinessObjectParentChain(child) {\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(child);\n\n var parents = [];\n\n for (var element = businessObject; element; element = element.$parent) {\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:SubProcess') || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:Process')) {\n parents.push(element);\n }\n }\n\n return parents.reverse();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kcmlsbGRvd24vRHJpbGxkb3duQnJlYWRjcnVtYnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTBDO0FBQ1Y7O0FBRTRCO0FBQ0M7QUFHM0I7O0FBRWxDO0FBQ0EsYUFBYSw4Q0FBOEM7QUFDM0QsYUFBYSx1REFBdUQ7QUFDcEUsYUFBYSxnREFBZ0Q7QUFDN0Q7QUFDQSxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLG1DQUFtQztBQUNoRDs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsUUFBUTtBQUNuQjtBQUNlO0FBQ2Ysb0JBQW9CLCtDQUFNO0FBQzFCO0FBQ0EseUJBQXlCLGdEQUFPO0FBQ2hDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrRUFBaUI7O0FBRTFDLG9CQUFvQiw4Q0FBSTtBQUN4QjtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLDBFQUFVO0FBQzVCLGlCQUFpQiwrQ0FBTTs7QUFFdkIsd0NBQXdDLHdFQUFtQjs7QUFFM0Q7QUFDQTtBQUNBLDBCQUEwQixtREFBRTtBQUM1QjtBQUNBLCtCQUErQixrRUFBaUI7O0FBRWhEO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSx1QkFBdUIsa0VBQWlCOztBQUV4Qzs7QUFFQSxxQ0FBcUMsU0FBUztBQUM5QyxRQUFRLG1EQUFFLGdDQUFnQyxtREFBRTtBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2RyaWxsZG93bi9EcmlsbGRvd25CcmVhZGNydW1icy5qcz9jZjc1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRvbWlmeSwgY2xhc3NlcyB9IGZyb20gJ21pbi1kb20nO1xuaW1wb3J0IHsgZmluZCB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgZXNjYXBlSFRNTCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvRXNjYXBlVXRpbCc7XG5pbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCwgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5pbXBvcnQge1xuICBnZXRQbGFuZUlkRnJvbVNoYXBlXG59IGZyb20gJy4uLy4uL3V0aWwvRHJpbGxkb3duVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9DYW52YXMnKS5kZWZhdWx0fSBDYW52YXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudFJlZ2lzdHJ5JykuZGVmYXVsdH0gRWxlbWVudFJlZ2lzdHJ5XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLkVsZW1lbnR9IEVsZW1lbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuU2hhcGV9IFNoYXBlXG4gKi9cblxudmFyIE9QRU5fQ0xBU1MgPSAnYmpzLWJyZWFkY3J1bWJzLXNob3duJztcblxuXG4vKipcbiAqIEFkZHMgb3ZlcmxheXMgdGhhdCBhbGxvdyBzd2l0Y2hpbmcgcGxhbmVzIG9uIGNvbGxhcHNlZCBzdWJwcm9jZXNzZXMuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHJpbGxkb3duQnJlYWRjcnVtYnMoZXZlbnRCdXMsIGVsZW1lbnRSZWdpc3RyeSwgY2FudmFzKSB7XG4gIHZhciBicmVhZGNydW1icyA9IGRvbWlmeSgnPHVsIGNsYXNzPVwiYmpzLWJyZWFkY3J1bWJzXCI+PC91bD4nKTtcbiAgdmFyIGNvbnRhaW5lciA9IGNhbnZhcy5nZXRDb250YWluZXIoKTtcbiAgdmFyIGNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc2VzKGNvbnRhaW5lcik7XG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChicmVhZGNydW1icyk7XG5cbiAgdmFyIGJ1c2luZXNzT2JqZWN0UGFyZW50cyA9IFtdO1xuXG4gIC8vIHVwZGF0ZSBicmVhZGNydW1icyBpZiBuYW1lIG9yIElEIG9mIHRoZSBwcmltYXJ5IHNoYXBlIGNoYW5nZXNcbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQuY2hhbmdlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHNoYXBlID0gZXZlbnQuZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XG5cbiAgICB2YXIgaXNQcmVzZW50ID0gZmluZChidXNpbmVzc09iamVjdFBhcmVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50ID09PSBidXNpbmVzc09iamVjdDtcbiAgICB9KTtcblxuICAgIGlmICghaXNQcmVzZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlQnJlYWRjcnVtYnMoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGRpc3BsYXllZCBicmVhZGNydW1icy4gSWYgbm8gZWxlbWVudCBpcyBwcm92aWRlZCwgb25seSB0aGVcbiAgICogbGFiZWxzIGFyZSB1cGRhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtlbGVtZW50XVxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlQnJlYWRjcnVtYnMoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBidXNpbmVzc09iamVjdFBhcmVudHMgPSBnZXRCdXNpbmVzc09iamVjdFBhcmVudENoYWluKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHZhciBwYXRoID0gYnVzaW5lc3NPYmplY3RQYXJlbnRzLm1hcChmdW5jdGlvbihwYXJlbnQpIHtcbiAgICAgIHZhciB0aXRsZSA9IGVzY2FwZUhUTUwocGFyZW50Lm5hbWUgfHwgcGFyZW50LmlkKTtcbiAgICAgIHZhciBsaW5rID0gZG9taWZ5KCc8bGk+PHNwYW4gY2xhc3M9XCJianMtY3J1bWJcIj48YSB0aXRsZT1cIicgKyB0aXRsZSArICdcIj4nICsgdGl0bGUgKyAnPC9hPjwvc3Bhbj48L2xpPicpO1xuXG4gICAgICB2YXIgcGFyZW50UGxhbmUgPSBjYW52YXMuZmluZFJvb3QoZ2V0UGxhbmVJZEZyb21TaGFwZShwYXJlbnQpKSB8fCBjYW52YXMuZmluZFJvb3QocGFyZW50LmlkKTtcblxuICAgICAgLy8gd2hlbiB0aGUgcm9vdCBpcyBhIGNvbGxhYm9yYXRpb24sIHRoZSBwcm9jZXNzIGRvZXMgbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nXG4gICAgICAvLyBlbGVtZW50IGluIHRoZSBlbGVtZW50UmVnaXN0eS4gSW5zdGVhZCwgd2Ugc2VhcmNoIGZvciB0aGUgY29ycmVzcG9uZGluZyBwYXJ0aWNpcGFudFxuICAgICAgaWYgKCFwYXJlbnRQbGFuZSAmJiBpcyhwYXJlbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgICB2YXIgcGFydGljaXBhbnQgPSBlbGVtZW50UmVnaXN0cnkuZmluZChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICAgICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykgJiYgYnVzaW5lc3NPYmplY3QuZ2V0KCdwcm9jZXNzUmVmJykgPT09IHBhcmVudDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGFyZW50UGxhbmUgPSBjYW52YXMuZmluZFJvb3QocGFydGljaXBhbnQuaWQpO1xuICAgICAgfVxuXG4gICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhbnZhcy5zZXRSb290RWxlbWVudChwYXJlbnRQbGFuZSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGxpbms7XG4gICAgfSk7XG5cbiAgICBicmVhZGNydW1icy5pbm5lckhUTUwgPSAnJztcblxuICAgIC8vIHNob3cgYnJlYWRjcnVtYnMgYW5kIGV4cG9zZSBzdGF0ZSB0byAuZGpzLWNvbnRhaW5lclxuICAgIHZhciB2aXNpYmxlID0gcGF0aC5sZW5ndGggPiAxO1xuXG4gICAgY29udGFpbmVyQ2xhc3Nlcy50b2dnbGUoT1BFTl9DTEFTUywgdmlzaWJsZSk7XG5cbiAgICBwYXRoLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgYnJlYWRjcnVtYnMuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBldmVudEJ1cy5vbigncm9vdC5zZXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHVwZGF0ZUJyZWFkY3J1bWJzKGV2ZW50LmVsZW1lbnQpO1xuICB9KTtcblxufVxuXG5EcmlsbGRvd25CcmVhZGNydW1icy4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnZWxlbWVudFJlZ2lzdHJ5JywgJ2NhbnZhcycgXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnRzIGZvciB0aGUgZWxlbWVudCB1c2luZyB0aGUgYnVzaW5lc3Mgb2JqZWN0IGNoYWluLFxuICogc3RhcnRpbmcgd2l0aCB0aGUgcm9vdCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7U2hhcGV9IGNoaWxkXG4gKlxuICogQHJldHVybiB7U2hhcGV9XG4gKi9cbmZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0UGFyZW50Q2hhaW4oY2hpbGQpIHtcbiAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoY2hpbGQpO1xuXG4gIHZhciBwYXJlbnRzID0gW107XG5cbiAgZm9yICh2YXIgZWxlbWVudCA9IGJ1c2luZXNzT2JqZWN0OyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC4kcGFyZW50KSB7XG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSB8fCBpcyhlbGVtZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIHBhcmVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50cy5yZXZlcnNlKCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownBreadcrumbs.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownCentering.js":
/*!********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownCentering.js ***!
\********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DrilldownCentering)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n/**\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n */\n\n/**\n * Move collapsed subprocesses into view when drilling down.\n *\n * Zoom and scroll are saved in a session.\n *\n * @param {EventBus} eventBus\n * @param {Canvas} canvas\n */\nfunction DrilldownCentering(eventBus, canvas) {\n\n var currentRoot = null;\n var positionMap = new Map();\n\n eventBus.on('root.set', function(event) {\n var newRoot = event.element;\n var currentViewbox = canvas.viewbox();\n var storedViewbox = positionMap.get(newRoot);\n\n positionMap.set(currentRoot, {\n x: currentViewbox.x,\n y: currentViewbox.y,\n zoom: currentViewbox.scale\n });\n\n currentRoot = newRoot;\n\n // current root was replaced with a collaboration, we don't update the viewbox\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(newRoot, 'bpmn:Collaboration') && !storedViewbox) {\n return;\n }\n\n storedViewbox = storedViewbox || { x: 0, y: 0, zoom: 1 };\n\n var dx = (currentViewbox.x - storedViewbox.x) * currentViewbox.scale,\n dy = (currentViewbox.y - storedViewbox.y) * currentViewbox.scale;\n\n if (dx !== 0 || dy !== 0) {\n canvas.scroll({\n dx: dx,\n dy: dy\n });\n }\n\n if (storedViewbox.zoom !== currentViewbox.scale) {\n canvas.zoom(storedViewbox.zoom, { x: 0, y: 0 });\n }\n });\n\n eventBus.on('diagram.clear', function() {\n positionMap.clear();\n currentRoot = null;\n });\n\n}\n\nDrilldownCentering.$inject = [ 'eventBus', 'canvas' ];\n\n\n/**\n * ES5 Map implementation. Works.\n */\nfunction Map() {\n\n this._entries = [];\n\n this.set = function(key, value) {\n\n var found = false;\n\n for (var k in this._entries) {\n if (this._entries[k][0] === key) {\n this._entries[k][1] = value;\n\n found = true;\n\n break;\n }\n }\n\n if (!found) {\n this._entries.push([ key, value ]);\n }\n };\n\n this.get = function(key) {\n\n for (var k in this._entries) {\n if (this._entries[k][0] === key) {\n return this._entries[k][1];\n }\n }\n\n return null;\n };\n\n this.clear = function() {\n this._entries.length = 0;\n };\n\n this.remove = function(key) {\n\n var idx = -1;\n\n for (var k in this._entries) {\n if (this._entries[k][0] === key) {\n idx = k;\n\n break;\n }\n }\n\n if (idx !== -1) {\n this._entries.splice(idx, 1);\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kcmlsbGRvd24vRHJpbGxkb3duQ2VudGVyaW5nLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTBDOztBQUUxQztBQUNBLGFBQWEsOENBQThDO0FBQzNELGFBQWEsZ0RBQWdEO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CO0FBQ2U7O0FBRWY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQTs7QUFFQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSx3Q0FBd0MsWUFBWTtBQUNwRDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2RyaWxsZG93bi9EcmlsbGRvd25DZW50ZXJpbmcuanM/ZmY0YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0NhbnZhcycpLmRlZmF1bHR9IENhbnZhc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKi9cblxuLyoqXG4gKiBNb3ZlIGNvbGxhcHNlZCBzdWJwcm9jZXNzZXMgaW50byB2aWV3IHdoZW4gZHJpbGxpbmcgZG93bi5cbiAqXG4gKiBab29tIGFuZCBzY3JvbGwgYXJlIHNhdmVkIGluIGEgc2Vzc2lvbi5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcmlsbGRvd25DZW50ZXJpbmcoZXZlbnRCdXMsIGNhbnZhcykge1xuXG4gIHZhciBjdXJyZW50Um9vdCA9IG51bGw7XG4gIHZhciBwb3NpdGlvbk1hcCA9IG5ldyBNYXAoKTtcblxuICBldmVudEJ1cy5vbigncm9vdC5zZXQnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBuZXdSb290ID0gZXZlbnQuZWxlbWVudDtcbiAgICB2YXIgY3VycmVudFZpZXdib3ggPSBjYW52YXMudmlld2JveCgpO1xuICAgIHZhciBzdG9yZWRWaWV3Ym94ID0gcG9zaXRpb25NYXAuZ2V0KG5ld1Jvb3QpO1xuXG4gICAgcG9zaXRpb25NYXAuc2V0KGN1cnJlbnRSb290LCB7XG4gICAgICB4OiBjdXJyZW50Vmlld2JveC54LFxuICAgICAgeTogY3VycmVudFZpZXdib3gueSxcbiAgICAgIHpvb206IGN1cnJlbnRWaWV3Ym94LnNjYWxlXG4gICAgfSk7XG5cbiAgICBjdXJyZW50Um9vdCA9IG5ld1Jvb3Q7XG5cbiAgICAvLyBjdXJyZW50IHJvb3Qgd2FzIHJlcGxhY2VkIHdpdGggYSBjb2xsYWJvcmF0aW9uLCB3ZSBkb24ndCB1cGRhdGUgdGhlIHZpZXdib3hcbiAgICBpZiAoaXMobmV3Um9vdCwgJ2JwbW46Q29sbGFib3JhdGlvbicpICYmICFzdG9yZWRWaWV3Ym94KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RvcmVkVmlld2JveCA9IHN0b3JlZFZpZXdib3ggfHwgeyB4OiAwLCB5OiAwLCB6b29tOiAxIH07XG5cbiAgICB2YXIgZHggPSAoY3VycmVudFZpZXdib3gueCAtIHN0b3JlZFZpZXdib3gueCkgKiBjdXJyZW50Vmlld2JveC5zY2FsZSxcbiAgICAgICAgZHkgPSAoY3VycmVudFZpZXdib3gueSAtIHN0b3JlZFZpZXdib3gueSkgKiBjdXJyZW50Vmlld2JveC5zY2FsZTtcblxuICAgIGlmIChkeCAhPT0gMCB8fCBkeSAhPT0gMCkge1xuICAgICAgY2FudmFzLnNjcm9sbCh7XG4gICAgICAgIGR4OiBkeCxcbiAgICAgICAgZHk6IGR5XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RvcmVkVmlld2JveC56b29tICE9PSBjdXJyZW50Vmlld2JveC5zY2FsZSkge1xuICAgICAgY2FudmFzLnpvb20oc3RvcmVkVmlld2JveC56b29tLCB7IHg6IDAsIHk6IDAgfSk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbignZGlhZ3JhbS5jbGVhcicsIGZ1bmN0aW9uKCkge1xuICAgIHBvc2l0aW9uTWFwLmNsZWFyKCk7XG4gICAgY3VycmVudFJvb3QgPSBudWxsO1xuICB9KTtcblxufVxuXG5EcmlsbGRvd25DZW50ZXJpbmcuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ2NhbnZhcycgXTtcblxuXG4vKipcbiAqIEVTNSBNYXAgaW1wbGVtZW50YXRpb24uIFdvcmtzLlxuICovXG5mdW5jdGlvbiBNYXAoKSB7XG5cbiAgdGhpcy5fZW50cmllcyA9IFtdO1xuXG4gIHRoaXMuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuXG4gICAgdmFyIGZvdW5kID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBrIGluIHRoaXMuX2VudHJpZXMpIHtcbiAgICAgIGlmICh0aGlzLl9lbnRyaWVzW2tdWzBdID09PSBrZXkpIHtcbiAgICAgICAgdGhpcy5fZW50cmllc1trXVsxXSA9IHZhbHVlO1xuXG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICB0aGlzLl9lbnRyaWVzLnB1c2goWyBrZXksIHZhbHVlIF0pO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmdldCA9IGZ1bmN0aW9uKGtleSkge1xuXG4gICAgZm9yICh2YXIgayBpbiB0aGlzLl9lbnRyaWVzKSB7XG4gICAgICBpZiAodGhpcy5fZW50cmllc1trXVswXSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnRyaWVzW2tdWzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHRoaXMuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9lbnRyaWVzLmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihrZXkpIHtcblxuICAgIHZhciBpZHggPSAtMTtcblxuICAgIGZvciAodmFyIGsgaW4gdGhpcy5fZW50cmllcykge1xuICAgICAgaWYgKHRoaXMuX2VudHJpZXNba11bMF0gPT09IGtleSkge1xuICAgICAgICBpZHggPSBrO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzLl9lbnRyaWVzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbiAgfTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownCentering.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownOverlayBehavior.js":
/*!**************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownOverlayBehavior.js ***!
\**************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DrilldownOverlayBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! min-dom */ \"./node_modules/min-dom/dist/index.esm.js\");\n/* harmony import */ var _util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/DrilldownUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DrilldownUtil.js\");\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('diagram-js/lib/features/overlays/Overlays').default} Overlays\n *\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('../../model/Types').Parent} Parent\n * @typedef {import('../../model/Types').Shape} Shape\n */\n\nvar LOW_PRIORITY = 250;\nvar ARROW_DOWN_SVG = ' ';\n\nvar EMPTY_MARKER = 'bjs-drilldown-empty';\n\n/**\n * @param {Canvas} canvas\n * @param {EventBus} eventBus\n * @param {ElementRegistry} elementRegistry\n * @param {Overlays} overlays\n */\nfunction DrilldownOverlayBehavior(\n canvas, eventBus, elementRegistry, overlays\n) {\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this._canvas = canvas;\n this._eventBus = eventBus;\n this._elementRegistry = elementRegistry;\n this._overlays = overlays;\n\n var self = this;\n\n this.executed('shape.toggleCollapse', LOW_PRIORITY, function(context) {\n var shape = context.shape;\n\n // Add overlay to the collapsed shape\n if (self._canDrillDown(shape)) {\n self._addOverlay(shape);\n } else {\n self._removeOverlay(shape);\n }\n }, true);\n\n\n this.reverted('shape.toggleCollapse', LOW_PRIORITY, function(context) {\n var shape = context.shape;\n\n // Add overlay to the collapsed shape\n if (self._canDrillDown(shape)) {\n self._addOverlay(shape);\n } else {\n self._removeOverlay(shape);\n }\n }, true);\n\n\n this.executed([ 'shape.create', 'shape.move', 'shape.delete' ], LOW_PRIORITY,\n function(context) {\n var oldParent = context.oldParent,\n newParent = context.newParent || context.parent,\n shape = context.shape;\n\n // Add overlay to the collapsed shape\n if (self._canDrillDown(shape)) {\n self._addOverlay(shape);\n }\n\n self._updateDrilldownOverlay(oldParent);\n self._updateDrilldownOverlay(newParent);\n self._updateDrilldownOverlay(shape);\n }, true);\n\n\n this.reverted([ 'shape.create', 'shape.move', 'shape.delete' ], LOW_PRIORITY,\n function(context) {\n var oldParent = context.oldParent,\n newParent = context.newParent || context.parent,\n shape = context.shape;\n\n // Add overlay to the collapsed shape\n if (self._canDrillDown(shape)) {\n self._addOverlay(shape);\n }\n\n self._updateDrilldownOverlay(oldParent);\n self._updateDrilldownOverlay(newParent);\n self._updateDrilldownOverlay(shape);\n }, true);\n\n\n eventBus.on('import.render.complete', function() {\n elementRegistry.filter(function(e) {\n return self._canDrillDown(e);\n }).map(function(el) {\n self._addOverlay(el);\n });\n });\n\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(DrilldownOverlayBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/**\n * @param {Shape} shape\n */\nDrilldownOverlayBehavior.prototype._updateDrilldownOverlay = function(shape) {\n var canvas = this._canvas;\n\n if (!shape) {\n return;\n }\n\n var root = canvas.findRoot(shape);\n\n if (root) {\n this._updateOverlayVisibility(root);\n }\n};\n\n/**\n * @param {Element} element\n *\n * @return {boolean}\n */\nDrilldownOverlayBehavior.prototype._canDrillDown = function(element) {\n var canvas = this._canvas;\n\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:SubProcess') && canvas.findRoot((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getPlaneIdFromShape)(element));\n};\n\n/**\n * Update the visibility of the drilldown overlay. If the plane has no elements,\n * the drilldown will only be shown when the element is selected.\n *\n * @param {Parent} element The collapsed root or shape.\n */\nDrilldownOverlayBehavior.prototype._updateOverlayVisibility = function(element) {\n var overlays = this._overlays;\n\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element);\n\n var overlay = overlays.get({ element: businessObject.id, type: 'drilldown' })[0];\n\n if (!overlay) {\n return;\n }\n\n var hasFlowElements = businessObject\n && businessObject.get('flowElements')\n && businessObject.get('flowElements').length;\n\n (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.classes)(overlay.html).toggle(EMPTY_MARKER, !hasFlowElements);\n};\n\n/**\n * Add a drilldown button to the given element assuming the plane has the same\n * ID as the element.\n *\n * @param {Shape} element The collapsed shape.\n */\nDrilldownOverlayBehavior.prototype._addOverlay = function(element) {\n var canvas = this._canvas,\n overlays = this._overlays;\n\n var existingOverlays = overlays.get({ element: element, type: 'drilldown' });\n\n if (existingOverlays.length) {\n this._removeOverlay(element);\n }\n\n var button = (0,min_dom__WEBPACK_IMPORTED_MODULE_4__.domify)('' + ARROW_DOWN_SVG + ' ');\n\n button.addEventListener('click', function() {\n canvas.setRootElement(canvas.findRoot((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getPlaneIdFromShape)(element)));\n });\n\n overlays.add(element, 'drilldown', {\n position: {\n bottom: -7,\n right: -8\n },\n html: button\n });\n\n this._updateOverlayVisibility(element);\n};\n\nDrilldownOverlayBehavior.prototype._removeOverlay = function(element) {\n var overlays = this._overlays;\n\n overlays.remove({\n element: element,\n type: 'drilldown'\n });\n};\n\nDrilldownOverlayBehavior.$inject = [\n 'canvas',\n 'eventBus',\n 'elementRegistry',\n 'overlays'\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kcmlsbGRvd24vRHJpbGxkb3duT3ZlcmxheUJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF3Qzs7QUFFbUM7QUFDZDtBQUNuQjtBQUNxQjs7QUFFL0Q7QUFDQSxhQUFhLDhDQUE4QztBQUMzRCxhQUFhLHVEQUF1RDtBQUNwRSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLDZEQUE2RDtBQUMxRTtBQUNBLGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsb0NBQW9DO0FBQ2pELGFBQWEsbUNBQW1DO0FBQ2hEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBLEVBQUUsaUZBQWtCOztBQUVwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDs7QUFFQSw0REFBUSwyQkFBMkIsaUZBQWtCOztBQUVyRDtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLG1EQUFFLGdEQUFnRCx3RUFBbUI7QUFDOUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixrRUFBaUI7O0FBRXhDLCtCQUErQiwrQ0FBK0M7O0FBRTlFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxnREFBTztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QyxxQ0FBcUM7O0FBRTdFO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLCtDQUFNOztBQUVyQjtBQUNBLDBDQUEwQyx3RUFBbUI7QUFDN0QsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kcmlsbGRvd24vRHJpbGxkb3duT3ZlcmxheUJlaGF2aW9yLmpzPzAzYTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcbmltcG9ydCB7IGdldEJ1c2luZXNzT2JqZWN0LCBpcyB9IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCB7IGNsYXNzZXMsIGRvbWlmeSB9IGZyb20gJ21pbi1kb20nO1xuaW1wb3J0IHsgZ2V0UGxhbmVJZEZyb21TaGFwZSB9IGZyb20gJy4uLy4uL3V0aWwvRHJpbGxkb3duVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9DYW52YXMnKS5kZWZhdWx0fSBDYW52YXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudFJlZ2lzdHJ5JykuZGVmYXVsdH0gRWxlbWVudFJlZ2lzdHJ5XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL292ZXJsYXlzL092ZXJsYXlzJykuZGVmYXVsdH0gT3ZlcmxheXNcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLkVsZW1lbnR9IEVsZW1lbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuUGFyZW50fSBQYXJlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuU2hhcGV9IFNoYXBlXG4gKi9cblxudmFyIExPV19QUklPUklUWSA9IDI1MDtcbnZhciBBUlJPV19ET1dOX1NWRyA9ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNNC44MTgwMTk0OCwzLjUwNzM1OTMxIEwxMC40OTk2ODk0LDkuMTg5Njg5NCBMMTAuNSw0IEwxMiw0IEwxMiwxMiBMNCwxMiBMNCwxMC41IEw5LjY4OTY4OTQsMTAuNDk5Njg5NCBMMy43NTczNTkzMSw0LjU2ODAxOTQ4IEMzLjQ2NDQ2NjA5LDQuMjc1MTI2MjcgMy40NjQ0NjYwOSwzLjgwMDI1MjUzIDMuNzU3MzU5MzEsMy41MDczNTkzMSBDNC4wNTAyNTI1MywzLjIxNDQ2NjA5IDQuNTI1MTI2MjcsMy4yMTQ0NjYwOSA0LjgxODAxOTQ4LDMuNTA3MzU5MzEgWlwiLz48L3N2Zz4nO1xuXG52YXIgRU1QVFlfTUFSS0VSID0gJ2Jqcy1kcmlsbGRvd24tZW1wdHknO1xuXG4vKipcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XG4gKiBAcGFyYW0ge092ZXJsYXlzfSBvdmVybGF5c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcmlsbGRvd25PdmVybGF5QmVoYXZpb3IoXG4gICAgY2FudmFzLCBldmVudEJ1cywgZWxlbWVudFJlZ2lzdHJ5LCBvdmVybGF5c1xuKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fb3ZlcmxheXMgPSBvdmVybGF5cztcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdGhpcy5leGVjdXRlZCgnc2hhcGUudG9nZ2xlQ29sbGFwc2UnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgLy8gQWRkIG92ZXJsYXkgdG8gdGhlIGNvbGxhcHNlZCBzaGFwZVxuICAgIGlmIChzZWxmLl9jYW5EcmlsbERvd24oc2hhcGUpKSB7XG4gICAgICBzZWxmLl9hZGRPdmVybGF5KHNoYXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5fcmVtb3ZlT3ZlcmxheShzaGFwZSk7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIC8vIEFkZCBvdmVybGF5IHRvIHRoZSBjb2xsYXBzZWQgc2hhcGVcbiAgICBpZiAoc2VsZi5fY2FuRHJpbGxEb3duKHNoYXBlKSkge1xuICAgICAgc2VsZi5fYWRkT3ZlcmxheShzaGFwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuX3JlbW92ZU92ZXJsYXkoc2hhcGUpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5tb3ZlJywgJ3NoYXBlLmRlbGV0ZScgXSwgTE9XX1BSSU9SSVRZLFxuICAgIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICAgIHZhciBvbGRQYXJlbnQgPSBjb250ZXh0Lm9sZFBhcmVudCxcbiAgICAgICAgICBuZXdQYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCB8fCBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICAgIC8vIEFkZCBvdmVybGF5IHRvIHRoZSBjb2xsYXBzZWQgc2hhcGVcbiAgICAgIGlmIChzZWxmLl9jYW5EcmlsbERvd24oc2hhcGUpKSB7XG4gICAgICAgIHNlbGYuX2FkZE92ZXJsYXkoc2hhcGUpO1xuICAgICAgfVxuXG4gICAgICBzZWxmLl91cGRhdGVEcmlsbGRvd25PdmVybGF5KG9sZFBhcmVudCk7XG4gICAgICBzZWxmLl91cGRhdGVEcmlsbGRvd25PdmVybGF5KG5ld1BhcmVudCk7XG4gICAgICBzZWxmLl91cGRhdGVEcmlsbGRvd25PdmVybGF5KHNoYXBlKTtcbiAgICB9LCB0cnVlKTtcblxuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnc2hhcGUuY3JlYXRlJywgJ3NoYXBlLm1vdmUnLCAnc2hhcGUuZGVsZXRlJyBdLCBMT1dfUFJJT1JJVFksXG4gICAgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG9sZFBhcmVudCA9IGNvbnRleHQub2xkUGFyZW50LFxuICAgICAgICAgIG5ld1BhcmVudCA9IGNvbnRleHQubmV3UGFyZW50IHx8IGNvbnRleHQucGFyZW50LFxuICAgICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgICAgLy8gQWRkIG92ZXJsYXkgdG8gdGhlIGNvbGxhcHNlZCBzaGFwZVxuICAgICAgaWYgKHNlbGYuX2NhbkRyaWxsRG93bihzaGFwZSkpIHtcbiAgICAgICAgc2VsZi5fYWRkT3ZlcmxheShzaGFwZSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX3VwZGF0ZURyaWxsZG93bk92ZXJsYXkob2xkUGFyZW50KTtcbiAgICAgIHNlbGYuX3VwZGF0ZURyaWxsZG93bk92ZXJsYXkobmV3UGFyZW50KTtcbiAgICAgIHNlbGYuX3VwZGF0ZURyaWxsZG93bk92ZXJsYXkoc2hhcGUpO1xuICAgIH0sIHRydWUpO1xuXG5cbiAgZXZlbnRCdXMub24oJ2ltcG9ydC5yZW5kZXIuY29tcGxldGUnLCBmdW5jdGlvbigpIHtcbiAgICBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiBzZWxmLl9jYW5EcmlsbERvd24oZSk7XG4gICAgfSkubWFwKGZ1bmN0aW9uKGVsKSB7XG4gICAgICBzZWxmLl9hZGRPdmVybGF5KGVsKTtcbiAgICB9KTtcbiAgfSk7XG5cbn1cblxuaW5oZXJpdHMoRHJpbGxkb3duT3ZlcmxheUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG4vKipcbiAqIEBwYXJhbSB7U2hhcGV9IHNoYXBlXG4gKi9cbkRyaWxsZG93bk92ZXJsYXlCZWhhdmlvci5wcm90b3R5cGUuX3VwZGF0ZURyaWxsZG93bk92ZXJsYXkgPSBmdW5jdGlvbihzaGFwZSkge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIGlmICghc2hhcGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcm9vdCA9IGNhbnZhcy5maW5kUm9vdChzaGFwZSk7XG5cbiAgaWYgKHJvb3QpIHtcbiAgICB0aGlzLl91cGRhdGVPdmVybGF5VmlzaWJpbGl0eShyb290KTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5EcmlsbGRvd25PdmVybGF5QmVoYXZpb3IucHJvdG90eXBlLl9jYW5EcmlsbERvd24gPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG5cbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBjYW52YXMuZmluZFJvb3QoZ2V0UGxhbmVJZEZyb21TaGFwZShlbGVtZW50KSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZHJpbGxkb3duIG92ZXJsYXkuIElmIHRoZSBwbGFuZSBoYXMgbm8gZWxlbWVudHMsXG4gKiB0aGUgZHJpbGxkb3duIHdpbGwgb25seSBiZSBzaG93biB3aGVuIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkLlxuICpcbiAqIEBwYXJhbSB7UGFyZW50fSBlbGVtZW50IFRoZSBjb2xsYXBzZWQgcm9vdCBvciBzaGFwZS5cbiAqL1xuRHJpbGxkb3duT3ZlcmxheUJlaGF2aW9yLnByb3RvdHlwZS5fdXBkYXRlT3ZlcmxheVZpc2liaWxpdHkgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBvdmVybGF5cyA9IHRoaXMuX292ZXJsYXlzO1xuXG4gIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIHZhciBvdmVybGF5ID0gb3ZlcmxheXMuZ2V0KHsgZWxlbWVudDogYnVzaW5lc3NPYmplY3QuaWQsIHR5cGU6ICdkcmlsbGRvd24nIH0pWzBdO1xuXG4gIGlmICghb3ZlcmxheSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoYXNGbG93RWxlbWVudHMgPSBidXNpbmVzc09iamVjdFxuICAgICYmIGJ1c2luZXNzT2JqZWN0LmdldCgnZmxvd0VsZW1lbnRzJylcbiAgICAmJiBidXNpbmVzc09iamVjdC5nZXQoJ2Zsb3dFbGVtZW50cycpLmxlbmd0aDtcblxuICBjbGFzc2VzKG92ZXJsYXkuaHRtbCkudG9nZ2xlKEVNUFRZX01BUktFUiwgIWhhc0Zsb3dFbGVtZW50cyk7XG59O1xuXG4vKipcbiAqIEFkZCBhIGRyaWxsZG93biBidXR0b24gdG8gdGhlIGdpdmVuIGVsZW1lbnQgYXNzdW1pbmcgdGhlIHBsYW5lIGhhcyB0aGUgc2FtZVxuICogSUQgYXMgdGhlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudCBUaGUgY29sbGFwc2VkIHNoYXBlLlxuICovXG5EcmlsbGRvd25PdmVybGF5QmVoYXZpb3IucHJvdG90eXBlLl9hZGRPdmVybGF5ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzLFxuICAgICAgb3ZlcmxheXMgPSB0aGlzLl9vdmVybGF5cztcblxuICB2YXIgZXhpc3RpbmdPdmVybGF5cyA9IG92ZXJsYXlzLmdldCh7IGVsZW1lbnQ6IGVsZW1lbnQsIHR5cGU6ICdkcmlsbGRvd24nIH0pO1xuXG4gIGlmIChleGlzdGluZ092ZXJsYXlzLmxlbmd0aCkge1xuICAgIHRoaXMuX3JlbW92ZU92ZXJsYXkoZWxlbWVudCk7XG4gIH1cblxuICB2YXIgYnV0dG9uID0gZG9taWZ5KCc8YnV0dG9uIGNsYXNzPVwiYmpzLWRyaWxsZG93blwiPicgKyBBUlJPV19ET1dOX1NWRyArICc8L2J1dHRvbj4nKTtcblxuICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICBjYW52YXMuc2V0Um9vdEVsZW1lbnQoY2FudmFzLmZpbmRSb290KGdldFBsYW5lSWRGcm9tU2hhcGUoZWxlbWVudCkpKTtcbiAgfSk7XG5cbiAgb3ZlcmxheXMuYWRkKGVsZW1lbnQsICdkcmlsbGRvd24nLCB7XG4gICAgcG9zaXRpb246IHtcbiAgICAgIGJvdHRvbTogLTcsXG4gICAgICByaWdodDogLThcbiAgICB9LFxuICAgIGh0bWw6IGJ1dHRvblxuICB9KTtcblxuICB0aGlzLl91cGRhdGVPdmVybGF5VmlzaWJpbGl0eShlbGVtZW50KTtcbn07XG5cbkRyaWxsZG93bk92ZXJsYXlCZWhhdmlvci5wcm90b3R5cGUuX3JlbW92ZU92ZXJsYXkgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHZhciBvdmVybGF5cyA9IHRoaXMuX292ZXJsYXlzO1xuXG4gIG92ZXJsYXlzLnJlbW92ZSh7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICB0eXBlOiAnZHJpbGxkb3duJ1xuICB9KTtcbn07XG5cbkRyaWxsZG93bk92ZXJsYXlCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRSZWdpc3RyeScsXG4gICdvdmVybGF5cydcbl07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownOverlayBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/SubprocessCompatibility.js":
/*!*************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/SubprocessCompatibility.js ***!
\*************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SubprocessCompatibility)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../../model/Types').Moddle} Moddle\n *\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('../../model/Types').Shape} Shape\n *\n * @typedef {import('diagram-js/lib/core/Canvas').CanvasPlane} CanvasPlane\n *\n * @typedef {import('diagram-js/lib/util/Types').Rect} Rect\n */\n\nvar DEFAULT_POSITION = {\n x: 180,\n y: 160\n};\n\n/**\n * Hook into `import.render.start` and create new planes for diagrams with\n * collapsed subprocesses and all DI elements on the same plane.\n *\n * @param {EventBus} eventBus\n * @param {Moddle} moddle\n */\nfunction SubprocessCompatibility(eventBus, moddle) {\n this._eventBus = eventBus;\n this._moddle = moddle;\n\n var self = this;\n\n eventBus.on('import.render.start', 1500, function(e, context) {\n self._handleImport(context.definitions);\n });\n}\n\n/**\n * @param {ModdleElement} definitions\n */\nSubprocessCompatibility.prototype._handleImport = function(definitions) {\n if (!definitions.diagrams) {\n return;\n }\n\n var self = this;\n this._definitions = definitions;\n this._processToDiagramMap = {};\n\n definitions.diagrams.forEach(function(diagram) {\n if (!diagram.plane || !diagram.plane.bpmnElement) {\n return;\n }\n\n self._processToDiagramMap[diagram.plane.bpmnElement.id] = diagram;\n });\n\n var newDiagrams = [];\n definitions.diagrams.forEach(function(diagram) {\n var createdDiagrams = self._createNewDiagrams(diagram.plane);\n Array.prototype.push.apply(newDiagrams, createdDiagrams);\n });\n\n newDiagrams.forEach(function(diagram) {\n self._movePlaneElementsToOrigin(diagram.plane);\n });\n};\n\n\n/**\n * Moves all DI elements from collapsed subprocesses to a new plane.\n *\n * @param {CanvasPlane} plane\n *\n * @return {ModdleElement[]} new diagrams created for the collapsed subprocesses\n */\nSubprocessCompatibility.prototype._createNewDiagrams = function(plane) {\n var self = this;\n\n var collapsedElements = [];\n var elementsToMove = [];\n\n plane.get('planeElement').forEach(function(diElement) {\n var businessObject = diElement.bpmnElement;\n\n if (!businessObject) {\n return;\n }\n\n var parent = businessObject.$parent;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(businessObject, 'bpmn:SubProcess') && !diElement.isExpanded) {\n collapsedElements.push(businessObject);\n }\n\n if (shouldMoveToPlane(businessObject, plane)) {\n\n // don't change the array while we iterate over it\n elementsToMove.push({ diElement: diElement, parent: parent });\n }\n });\n\n var newDiagrams = [];\n\n // create new planes for all collapsed subprocesses, even when they are empty\n collapsedElements.forEach(function(element) {\n if (!self._processToDiagramMap[ element.id ]) {\n var diagram = self._createDiagram(element);\n\n self._processToDiagramMap[element.id] = diagram;\n\n newDiagrams.push(diagram);\n }\n });\n\n elementsToMove.forEach(function(element) {\n var diElement = element.diElement;\n var parent = element.parent;\n\n // parent is expanded, get nearest collapsed parent\n while (parent && collapsedElements.indexOf(parent) === -1) {\n parent = parent.$parent;\n }\n\n // false positive, all parents are expanded\n if (!parent) {\n return;\n }\n\n var diagram = self._processToDiagramMap[ parent.id ];\n\n self._moveToDiPlane(diElement, diagram.plane);\n });\n\n return newDiagrams;\n};\n\n/**\n * @param {CanvasPlane} plane\n */\nSubprocessCompatibility.prototype._movePlaneElementsToOrigin = function(plane) {\n var elements = plane.get('planeElement');\n\n // get bounding box of all elements\n var planeBounds = getPlaneBounds(plane);\n\n var offset = {\n x: planeBounds.x - DEFAULT_POSITION.x,\n y: planeBounds.y - DEFAULT_POSITION.y\n };\n\n elements.forEach(function(diElement) {\n if (diElement.waypoint) {\n diElement.waypoint.forEach(function(waypoint) {\n waypoint.x = waypoint.x - offset.x;\n waypoint.y = waypoint.y - offset.y;\n });\n } else if (diElement.bounds) {\n diElement.bounds.x = diElement.bounds.x - offset.x;\n diElement.bounds.y = diElement.bounds.y - offset.y;\n }\n });\n};\n\n/**\n * @param {ModdleElement} diElement\n * @param {CanvasPlane} newPlane\n */\nSubprocessCompatibility.prototype._moveToDiPlane = function(diElement, newPlane) {\n var containingDiagram = findRootDiagram(diElement);\n\n // remove DI from old Plane and add it to the new one\n var parentPlaneElement = containingDiagram.plane.get('planeElement');\n\n parentPlaneElement.splice(parentPlaneElement.indexOf(diElement), 1);\n\n newPlane.get('planeElement').push(diElement);\n};\n\n/**\n * @param {ModdleElement} businessObject\n *\n * @return {ModdleElement}\n */\nSubprocessCompatibility.prototype._createDiagram = function(businessObject) {\n var plane = this._moddle.create('bpmndi:BPMNPlane', {\n bpmnElement: businessObject\n });\n\n var diagram = this._moddle.create('bpmndi:BPMNDiagram', {\n plane: plane\n });\n\n plane.$parent = diagram;\n\n plane.bpmnElement = businessObject;\n\n diagram.$parent = this._definitions;\n\n this._definitions.diagrams.push(diagram);\n\n return diagram;\n};\n\nSubprocessCompatibility.$inject = [ 'eventBus', 'moddle' ];\n\n\n// helpers //////////\n\nfunction findRootDiagram(element) {\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmndi:BPMNDiagram')) {\n return element;\n } else {\n return findRootDiagram(element.$parent);\n }\n}\n\n/**\n * @param {CanvasPlane} plane\n *\n * @return {Rect}\n */\nfunction getPlaneBounds(plane) {\n var planeTrbl = {\n top: Infinity,\n right: -Infinity,\n bottom: -Infinity,\n left: Infinity\n };\n\n plane.planeElement.forEach(function(element) {\n if (!element.bounds) {\n return;\n }\n\n var trbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.asTRBL)(element.bounds);\n\n planeTrbl.top = Math.min(trbl.top, planeTrbl.top);\n planeTrbl.left = Math.min(trbl.left, planeTrbl.left);\n });\n\n return (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.asBounds)(planeTrbl);\n}\n\n/**\n * @param {ModdleElement} businessObject\n * @param {CanvasPlane} plane\n *\n * @return {boolean}\n */\nfunction shouldMoveToPlane(businessObject, plane) {\n var parent = businessObject.$parent;\n\n // don't move elements that are already on the plane\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(parent, 'bpmn:SubProcess') || parent === plane.bpmnElement) {\n return false;\n }\n\n // dataAssociations are children of the subprocess but rendered on process level\n // cf. https://github.com/bpmn-io/bpmn-js/issues/1619\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(businessObject, [ 'bpmn:DataInputAssociation', 'bpmn:DataOutputAssociation' ])) {\n return false;\n }\n\n return true;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kcmlsbGRvd24vU3VicHJvY2Vzc0NvbXBhdGliaWxpdHkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNvRTtBQUNuQjs7QUFFakQ7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLG9DQUFvQztBQUNqRDtBQUNBLGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsbUNBQW1DO0FBQ2hEO0FBQ0EsYUFBYSxrREFBa0Q7QUFDL0Q7QUFDQSxhQUFhLDBDQUEwQztBQUN2RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkI7QUFDZTtBQUNmO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QjtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsbURBQUU7QUFDVjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsNEJBQTRCLHNDQUFzQztBQUNsRTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLGFBQWE7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQSxNQUFNLG1EQUFFO0FBQ1I7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSx3RUFBTTs7QUFFckI7QUFDQTtBQUNBLEdBQUc7O0FBRUgsU0FBUywwRUFBUTtBQUNqQjs7QUFFQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLGFBQWE7QUFDeEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTyxtREFBRTtBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sc0RBQUs7QUFDWDtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kcmlsbGRvd24vU3VicHJvY2Vzc0NvbXBhdGliaWxpdHkuanM/MzE0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IGFzQm91bmRzLCBhc1RSQkwgfSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5pbXBvcnQgeyBpcywgaXNBbnkgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLk1vZGRsZX0gTW9kZGxlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLlNoYXBlfSBTaGFwZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvQ2FudmFzJykuQ2FudmFzUGxhbmV9IENhbnZhc1BsYW5lXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlJlY3R9IFJlY3RcbiAqL1xuXG52YXIgREVGQVVMVF9QT1NJVElPTiA9IHtcbiAgeDogMTgwLFxuICB5OiAxNjBcbn07XG5cbi8qKlxuICogSG9vayBpbnRvIGBpbXBvcnQucmVuZGVyLnN0YXJ0YCBhbmQgY3JlYXRlIG5ldyBwbGFuZXMgZm9yIGRpYWdyYW1zIHdpdGhcbiAqIGNvbGxhcHNlZCBzdWJwcm9jZXNzZXMgYW5kIGFsbCBESSBlbGVtZW50cyBvbiB0aGUgc2FtZSBwbGFuZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RkbGV9IG1vZGRsZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdWJwcm9jZXNzQ29tcGF0aWJpbGl0eShldmVudEJ1cywgbW9kZGxlKSB7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGRsZSA9IG1vZGRsZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgZXZlbnRCdXMub24oJ2ltcG9ydC5yZW5kZXIuc3RhcnQnLCAxNTAwLCBmdW5jdGlvbihlLCBjb250ZXh0KSB7XG4gICAgc2VsZi5faGFuZGxlSW1wb3J0KGNvbnRleHQuZGVmaW5pdGlvbnMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmluaXRpb25zXG4gKi9cblN1YnByb2Nlc3NDb21wYXRpYmlsaXR5LnByb3RvdHlwZS5faGFuZGxlSW1wb3J0ID0gZnVuY3Rpb24oZGVmaW5pdGlvbnMpIHtcbiAgaWYgKCFkZWZpbml0aW9ucy5kaWFncmFtcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgdGhpcy5fcHJvY2Vzc1RvRGlhZ3JhbU1hcCA9IHt9O1xuXG4gIGRlZmluaXRpb25zLmRpYWdyYW1zLmZvckVhY2goZnVuY3Rpb24oZGlhZ3JhbSkge1xuICAgIGlmICghZGlhZ3JhbS5wbGFuZSB8fCAhZGlhZ3JhbS5wbGFuZS5icG1uRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuX3Byb2Nlc3NUb0RpYWdyYW1NYXBbZGlhZ3JhbS5wbGFuZS5icG1uRWxlbWVudC5pZF0gPSBkaWFncmFtO1xuICB9KTtcblxuICB2YXIgbmV3RGlhZ3JhbXMgPSBbXTtcbiAgZGVmaW5pdGlvbnMuZGlhZ3JhbXMuZm9yRWFjaChmdW5jdGlvbihkaWFncmFtKSB7XG4gICAgdmFyIGNyZWF0ZWREaWFncmFtcyA9IHNlbGYuX2NyZWF0ZU5ld0RpYWdyYW1zKGRpYWdyYW0ucGxhbmUpO1xuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld0RpYWdyYW1zLCBjcmVhdGVkRGlhZ3JhbXMpO1xuICB9KTtcblxuICBuZXdEaWFncmFtcy5mb3JFYWNoKGZ1bmN0aW9uKGRpYWdyYW0pIHtcbiAgICBzZWxmLl9tb3ZlUGxhbmVFbGVtZW50c1RvT3JpZ2luKGRpYWdyYW0ucGxhbmUpO1xuICB9KTtcbn07XG5cblxuLyoqXG4gKiBNb3ZlcyBhbGwgREkgZWxlbWVudHMgZnJvbSBjb2xsYXBzZWQgc3VicHJvY2Vzc2VzIHRvIGEgbmV3IHBsYW5lLlxuICpcbiAqIEBwYXJhbSB7Q2FudmFzUGxhbmV9IHBsYW5lXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudFtdfSBuZXcgZGlhZ3JhbXMgY3JlYXRlZCBmb3IgdGhlIGNvbGxhcHNlZCBzdWJwcm9jZXNzZXNcbiAqL1xuU3VicHJvY2Vzc0NvbXBhdGliaWxpdHkucHJvdG90eXBlLl9jcmVhdGVOZXdEaWFncmFtcyA9IGZ1bmN0aW9uKHBsYW5lKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgY29sbGFwc2VkRWxlbWVudHMgPSBbXTtcbiAgdmFyIGVsZW1lbnRzVG9Nb3ZlID0gW107XG5cbiAgcGxhbmUuZ2V0KCdwbGFuZUVsZW1lbnQnKS5mb3JFYWNoKGZ1bmN0aW9uKGRpRWxlbWVudCkge1xuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGRpRWxlbWVudC5icG1uRWxlbWVudDtcblxuICAgIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50ID0gYnVzaW5lc3NPYmplY3QuJHBhcmVudDtcblxuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46U3ViUHJvY2VzcycpICYmICFkaUVsZW1lbnQuaXNFeHBhbmRlZCkge1xuICAgICAgY29sbGFwc2VkRWxlbWVudHMucHVzaChidXNpbmVzc09iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZE1vdmVUb1BsYW5lKGJ1c2luZXNzT2JqZWN0LCBwbGFuZSkpIHtcblxuICAgICAgLy8gZG9uJ3QgY2hhbmdlIHRoZSBhcnJheSB3aGlsZSB3ZSBpdGVyYXRlIG92ZXIgaXRcbiAgICAgIGVsZW1lbnRzVG9Nb3ZlLnB1c2goeyBkaUVsZW1lbnQ6IGRpRWxlbWVudCwgcGFyZW50OiBwYXJlbnQgfSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgbmV3RGlhZ3JhbXMgPSBbXTtcblxuICAvLyBjcmVhdGUgbmV3IHBsYW5lcyBmb3IgYWxsIGNvbGxhcHNlZCBzdWJwcm9jZXNzZXMsIGV2ZW4gd2hlbiB0aGV5IGFyZSBlbXB0eVxuICBjb2xsYXBzZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBpZiAoIXNlbGYuX3Byb2Nlc3NUb0RpYWdyYW1NYXBbIGVsZW1lbnQuaWQgXSkge1xuICAgICAgdmFyIGRpYWdyYW0gPSBzZWxmLl9jcmVhdGVEaWFncmFtKGVsZW1lbnQpO1xuXG4gICAgICBzZWxmLl9wcm9jZXNzVG9EaWFncmFtTWFwW2VsZW1lbnQuaWRdID0gZGlhZ3JhbTtcblxuICAgICAgbmV3RGlhZ3JhbXMucHVzaChkaWFncmFtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVsZW1lbnRzVG9Nb3ZlLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHZhciBkaUVsZW1lbnQgPSBlbGVtZW50LmRpRWxlbWVudDtcbiAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG5cbiAgICAvLyBwYXJlbnQgaXMgZXhwYW5kZWQsIGdldCBuZWFyZXN0IGNvbGxhcHNlZCBwYXJlbnRcbiAgICB3aGlsZSAocGFyZW50ICYmIGNvbGxhcHNlZEVsZW1lbnRzLmluZGV4T2YocGFyZW50KSA9PT0gLTEpIHtcbiAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgIH1cblxuICAgIC8vIGZhbHNlIHBvc2l0aXZlLCBhbGwgcGFyZW50cyBhcmUgZXhwYW5kZWRcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkaWFncmFtID0gc2VsZi5fcHJvY2Vzc1RvRGlhZ3JhbU1hcFsgcGFyZW50LmlkIF07XG5cbiAgICBzZWxmLl9tb3ZlVG9EaVBsYW5lKGRpRWxlbWVudCwgZGlhZ3JhbS5wbGFuZSk7XG4gIH0pO1xuXG4gIHJldHVybiBuZXdEaWFncmFtcztcbn07XG5cbi8qKlxuICogQHBhcmFtIHtDYW52YXNQbGFuZX0gcGxhbmVcbiAqL1xuU3VicHJvY2Vzc0NvbXBhdGliaWxpdHkucHJvdG90eXBlLl9tb3ZlUGxhbmVFbGVtZW50c1RvT3JpZ2luID0gZnVuY3Rpb24ocGxhbmUpIHtcbiAgdmFyIGVsZW1lbnRzID0gcGxhbmUuZ2V0KCdwbGFuZUVsZW1lbnQnKTtcblxuICAvLyBnZXQgYm91bmRpbmcgYm94IG9mIGFsbCBlbGVtZW50c1xuICB2YXIgcGxhbmVCb3VuZHMgPSBnZXRQbGFuZUJvdW5kcyhwbGFuZSk7XG5cbiAgdmFyIG9mZnNldCA9IHtcbiAgICB4OiBwbGFuZUJvdW5kcy54IC0gREVGQVVMVF9QT1NJVElPTi54LFxuICAgIHk6IHBsYW5lQm91bmRzLnkgLSBERUZBVUxUX1BPU0lUSU9OLnlcbiAgfTtcblxuICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGRpRWxlbWVudCkge1xuICAgIGlmIChkaUVsZW1lbnQud2F5cG9pbnQpIHtcbiAgICAgIGRpRWxlbWVudC53YXlwb2ludC5mb3JFYWNoKGZ1bmN0aW9uKHdheXBvaW50KSB7XG4gICAgICAgIHdheXBvaW50LnggPSB3YXlwb2ludC54IC0gb2Zmc2V0Lng7XG4gICAgICAgIHdheXBvaW50LnkgPSB3YXlwb2ludC55IC0gb2Zmc2V0Lnk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGRpRWxlbWVudC5ib3VuZHMpIHtcbiAgICAgIGRpRWxlbWVudC5ib3VuZHMueCA9IGRpRWxlbWVudC5ib3VuZHMueCAtIG9mZnNldC54O1xuICAgICAgZGlFbGVtZW50LmJvdW5kcy55ID0gZGlFbGVtZW50LmJvdW5kcy55IC0gb2Zmc2V0Lnk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkaUVsZW1lbnRcbiAqIEBwYXJhbSB7Q2FudmFzUGxhbmV9IG5ld1BsYW5lXG4gKi9cblN1YnByb2Nlc3NDb21wYXRpYmlsaXR5LnByb3RvdHlwZS5fbW92ZVRvRGlQbGFuZSA9IGZ1bmN0aW9uKGRpRWxlbWVudCwgbmV3UGxhbmUpIHtcbiAgdmFyIGNvbnRhaW5pbmdEaWFncmFtID0gZmluZFJvb3REaWFncmFtKGRpRWxlbWVudCk7XG5cbiAgLy8gcmVtb3ZlIERJIGZyb20gb2xkIFBsYW5lIGFuZCBhZGQgaXQgdG8gdGhlIG5ldyBvbmVcbiAgdmFyIHBhcmVudFBsYW5lRWxlbWVudCA9IGNvbnRhaW5pbmdEaWFncmFtLnBsYW5lLmdldCgncGxhbmVFbGVtZW50Jyk7XG5cbiAgcGFyZW50UGxhbmVFbGVtZW50LnNwbGljZShwYXJlbnRQbGFuZUVsZW1lbnQuaW5kZXhPZihkaUVsZW1lbnQpLCAxKTtcblxuICBuZXdQbGFuZS5nZXQoJ3BsYW5lRWxlbWVudCcpLnB1c2goZGlFbGVtZW50KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBidXNpbmVzc09iamVjdFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cblN1YnByb2Nlc3NDb21wYXRpYmlsaXR5LnByb3RvdHlwZS5fY3JlYXRlRGlhZ3JhbSA9IGZ1bmN0aW9uKGJ1c2luZXNzT2JqZWN0KSB7XG4gIHZhciBwbGFuZSA9IHRoaXMuX21vZGRsZS5jcmVhdGUoJ2JwbW5kaTpCUE1OUGxhbmUnLCB7XG4gICAgYnBtbkVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0XG4gIH0pO1xuXG4gIHZhciBkaWFncmFtID0gdGhpcy5fbW9kZGxlLmNyZWF0ZSgnYnBtbmRpOkJQTU5EaWFncmFtJywge1xuICAgIHBsYW5lOiBwbGFuZVxuICB9KTtcblxuICBwbGFuZS4kcGFyZW50ID0gZGlhZ3JhbTtcblxuICBwbGFuZS5icG1uRWxlbWVudCA9IGJ1c2luZXNzT2JqZWN0O1xuXG4gIGRpYWdyYW0uJHBhcmVudCA9IHRoaXMuX2RlZmluaXRpb25zO1xuXG4gIHRoaXMuX2RlZmluaXRpb25zLmRpYWdyYW1zLnB1c2goZGlhZ3JhbSk7XG5cbiAgcmV0dXJuIGRpYWdyYW07XG59O1xuXG5TdWJwcm9jZXNzQ29tcGF0aWJpbGl0eS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnbW9kZGxlJyBdO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBmaW5kUm9vdERpYWdyYW0oZWxlbWVudCkge1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW5kaTpCUE1ORGlhZ3JhbScpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmRSb290RGlhZ3JhbShlbGVtZW50LiRwYXJlbnQpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDYW52YXNQbGFuZX0gcGxhbmVcbiAqXG4gKiBAcmV0dXJuIHtSZWN0fVxuICovXG5mdW5jdGlvbiBnZXRQbGFuZUJvdW5kcyhwbGFuZSkge1xuICB2YXIgcGxhbmVUcmJsID0ge1xuICAgIHRvcDogSW5maW5pdHksXG4gICAgcmlnaHQ6IC1JbmZpbml0eSxcbiAgICBib3R0b206IC1JbmZpbml0eSxcbiAgICBsZWZ0OiBJbmZpbml0eVxuICB9O1xuXG4gIHBsYW5lLnBsYW5lRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQuYm91bmRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRyYmwgPSBhc1RSQkwoZWxlbWVudC5ib3VuZHMpO1xuXG4gICAgcGxhbmVUcmJsLnRvcCA9IE1hdGgubWluKHRyYmwudG9wLCBwbGFuZVRyYmwudG9wKTtcbiAgICBwbGFuZVRyYmwubGVmdCA9IE1hdGgubWluKHRyYmwubGVmdCwgcGxhbmVUcmJsLmxlZnQpO1xuICB9KTtcblxuICByZXR1cm4gYXNCb3VuZHMocGxhbmVUcmJsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJ1c2luZXNzT2JqZWN0XG4gKiBAcGFyYW0ge0NhbnZhc1BsYW5lfSBwbGFuZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZE1vdmVUb1BsYW5lKGJ1c2luZXNzT2JqZWN0LCBwbGFuZSkge1xuICB2YXIgcGFyZW50ID0gYnVzaW5lc3NPYmplY3QuJHBhcmVudDtcblxuICAvLyBkb24ndCBtb3ZlIGVsZW1lbnRzIHRoYXQgYXJlIGFscmVhZHkgb24gdGhlIHBsYW5lXG4gIGlmICghaXMocGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgfHwgcGFyZW50ID09PSBwbGFuZS5icG1uRWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGRhdGFBc3NvY2lhdGlvbnMgYXJlIGNoaWxkcmVuIG9mIHRoZSBzdWJwcm9jZXNzIGJ1dCByZW5kZXJlZCBvbiBwcm9jZXNzIGxldmVsXG4gIC8vIGNmLiBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL2lzc3Vlcy8xNjE5XG4gIGlmIChpc0FueShidXNpbmVzc09iamVjdCwgWyAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicsICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicgXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/SubprocessCompatibility.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/index.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/index.js ***!
\*******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_overlays__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/overlays */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/overlays/index.js\");\n/* harmony import */ var diagram_js_lib_features_change_support__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/features/change-support */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/change-support/index.js\");\n/* harmony import */ var diagram_js_lib_features_root_elements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/features/root-elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/root-elements/index.js\");\n/* harmony import */ var _DrilldownBreadcrumbs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./DrilldownBreadcrumbs */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownBreadcrumbs.js\");\n/* harmony import */ var _DrilldownCentering__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DrilldownCentering */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownCentering.js\");\n/* harmony import */ var _SubprocessCompatibility__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./SubprocessCompatibility */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/SubprocessCompatibility.js\");\n/* harmony import */ var _DrilldownOverlayBehavior__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./DrilldownOverlayBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/DrilldownOverlayBehavior.js\");\n\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [ diagram_js_lib_features_overlays__WEBPACK_IMPORTED_MODULE_0__[\"default\"], diagram_js_lib_features_change_support__WEBPACK_IMPORTED_MODULE_1__[\"default\"], diagram_js_lib_features_root_elements__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ],\n __init__: [ 'drilldownBreadcrumbs', 'drilldownOverlayBehavior', 'drilldownCentering', 'subprocessCompatibility' ],\n drilldownBreadcrumbs: [ 'type', _DrilldownBreadcrumbs__WEBPACK_IMPORTED_MODULE_3__[\"default\"] ],\n drilldownCentering: [ 'type', _DrilldownCentering__WEBPACK_IMPORTED_MODULE_4__[\"default\"] ],\n drilldownOverlayBehavior: [ 'type', _DrilldownOverlayBehavior__WEBPACK_IMPORTED_MODULE_5__[\"default\"] ],\n subprocessCompatibility: [ 'type', _SubprocessCompatibility__WEBPACK_IMPORTED_MODULE_6__[\"default\"] ]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9kcmlsbGRvd24vaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBOEQ7QUFDVztBQUNGOztBQUViO0FBQ0o7QUFDVTtBQUNFOztBQUVsRSxpRUFBZTtBQUNmLGlCQUFpQix3RUFBYyxFQUFFLDhFQUFtQixFQUFFLDZFQUFrQjtBQUN4RTtBQUNBLGtDQUFrQyw2REFBb0I7QUFDdEQsZ0NBQWdDLDJEQUFrQjtBQUNsRCxzQ0FBc0MsaUVBQXdCO0FBQzlELHFDQUFxQyxnRUFBdUI7QUFDNUQsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2RyaWxsZG93bi9pbmRleC5qcz84ZjU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPdmVybGF5c01vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9vdmVybGF5cyc7XG5pbXBvcnQgQ2hhbmdlU3VwcG9ydE1vZHVsZSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9jaGFuZ2Utc3VwcG9ydCc7XG5pbXBvcnQgUm9vdEVsZW1lbnRzTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL3Jvb3QtZWxlbWVudHMnO1xuXG5pbXBvcnQgRHJpbGxkb3duQnJlYWRjcnVtYnMgZnJvbSAnLi9EcmlsbGRvd25CcmVhZGNydW1icyc7XG5pbXBvcnQgRHJpbGxkb3duQ2VudGVyaW5nIGZyb20gJy4vRHJpbGxkb3duQ2VudGVyaW5nJztcbmltcG9ydCBTdWJwcm9jZXNzQ29tcGF0aWJpbGl0eSBmcm9tICcuL1N1YnByb2Nlc3NDb21wYXRpYmlsaXR5JztcbmltcG9ydCBEcmlsbGRvd25PdmVybGF5QmVoYXZpb3IgZnJvbSAnLi9EcmlsbGRvd25PdmVybGF5QmVoYXZpb3InO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbIE92ZXJsYXlzTW9kdWxlLCBDaGFuZ2VTdXBwb3J0TW9kdWxlLCBSb290RWxlbWVudHNNb2R1bGUgXSxcbiAgX19pbml0X186IFsgJ2RyaWxsZG93bkJyZWFkY3J1bWJzJywgJ2RyaWxsZG93bk92ZXJsYXlCZWhhdmlvcicsICdkcmlsbGRvd25DZW50ZXJpbmcnLCAnc3VicHJvY2Vzc0NvbXBhdGliaWxpdHknIF0sXG4gIGRyaWxsZG93bkJyZWFkY3J1bWJzOiBbICd0eXBlJywgRHJpbGxkb3duQnJlYWRjcnVtYnMgXSxcbiAgZHJpbGxkb3duQ2VudGVyaW5nOiBbICd0eXBlJywgRHJpbGxkb3duQ2VudGVyaW5nIF0sXG4gIGRyaWxsZG93bk92ZXJsYXlCZWhhdmlvcjogWyAndHlwZScsIERyaWxsZG93bk92ZXJsYXlCZWhhdmlvciBdLFxuICBzdWJwcm9jZXNzQ29tcGF0aWJpbGl0eTogWyAndHlwZScsIFN1YnByb2Nlc3NDb21wYXRpYmlsaXR5IF1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/drilldown/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/editor-actions/BpmnEditorActions.js":
/*!************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/editor-actions/BpmnEditorActions.js ***!
\************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnEditorActions)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_features_editor_actions_EditorActions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/editor-actions/EditorActions */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/editor-actions/EditorActions.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('didi').Injector} Injector\n */\n\n/**\n * Registers and executes BPMN specific editor actions.\n *\n * @param {Injector} injector\n */\nfunction BpmnEditorActions(injector) {\n injector.invoke(diagram_js_lib_features_editor_actions_EditorActions__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BpmnEditorActions, diagram_js_lib_features_editor_actions_EditorActions__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nBpmnEditorActions.$inject = [\n 'injector'\n];\n\n/**\n * Register default actions.\n *\n * @param {Injector} injector\n */\nBpmnEditorActions.prototype._registerDefaultActions = function(injector) {\n\n // (0) invoke super method\n\n diagram_js_lib_features_editor_actions_EditorActions__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype._registerDefaultActions.call(this, injector);\n\n // (1) retrieve optional components to integrate with\n\n var canvas = injector.get('canvas', false);\n var elementRegistry = injector.get('elementRegistry', false);\n var selection = injector.get('selection', false);\n var spaceTool = injector.get('spaceTool', false);\n var lassoTool = injector.get('lassoTool', false);\n var handTool = injector.get('handTool', false);\n var globalConnect = injector.get('globalConnect', false);\n var distributeElements = injector.get('distributeElements', false);\n var alignElements = injector.get('alignElements', false);\n var directEditing = injector.get('directEditing', false);\n var searchPad = injector.get('searchPad', false);\n var modeling = injector.get('modeling', false);\n var contextPad = injector.get('contextPad', false);\n\n // (2) check components and register actions\n\n if (canvas && elementRegistry && selection) {\n this._registerAction('selectElements', function() {\n\n // select all elements except for the invisible\n // root element\n var rootElement = canvas.getRootElement();\n\n var elements = elementRegistry.filter(function(element) {\n return element !== rootElement;\n });\n\n selection.select(elements);\n\n return elements;\n });\n }\n\n if (spaceTool) {\n this._registerAction('spaceTool', function() {\n spaceTool.toggle();\n });\n }\n\n if (lassoTool) {\n this._registerAction('lassoTool', function() {\n lassoTool.toggle();\n });\n }\n\n if (handTool) {\n this._registerAction('handTool', function() {\n handTool.toggle();\n });\n }\n\n if (globalConnect) {\n this._registerAction('globalConnectTool', function() {\n globalConnect.toggle();\n });\n }\n\n if (selection && distributeElements) {\n this._registerAction('distributeElements', function(opts) {\n var currentSelection = selection.get(),\n type = opts.type;\n\n if (currentSelection.length) {\n distributeElements.trigger(currentSelection, type);\n }\n });\n }\n\n if (selection && alignElements) {\n this._registerAction('alignElements', function(opts) {\n var currentSelection = selection.get(),\n aligneableElements = [],\n type = opts.type;\n\n if (currentSelection.length) {\n aligneableElements = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.filter)(currentSelection, function(element) {\n return !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(element, 'bpmn:Lane');\n });\n\n alignElements.trigger(aligneableElements, type);\n }\n });\n }\n\n if (selection && modeling) {\n this._registerAction('setColor', function(opts) {\n var currentSelection = selection.get();\n\n if (currentSelection.length) {\n modeling.setColor(currentSelection, opts);\n }\n });\n }\n\n if (selection && directEditing) {\n this._registerAction('directEditing', function() {\n var currentSelection = selection.get();\n\n if (currentSelection.length) {\n directEditing.activate(currentSelection[0]);\n }\n });\n }\n\n if (searchPad) {\n this._registerAction('find', function() {\n searchPad.toggle();\n });\n }\n\n if (canvas && modeling) {\n this._registerAction('moveToOrigin', function() {\n var rootElement = canvas.getRootElement(),\n boundingBox,\n elements;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(rootElement, 'bpmn:Collaboration')) {\n elements = elementRegistry.filter(function(element) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(element.parent, 'bpmn:Collaboration');\n });\n } else {\n elements = elementRegistry.filter(function(element) {\n return element !== rootElement && !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(element.parent, 'bpmn:SubProcess');\n });\n }\n\n boundingBox = (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_4__.getBBox)(elements);\n\n modeling.moveElements(\n elements,\n { x: -boundingBox.x, y: -boundingBox.y },\n rootElement\n );\n });\n }\n\n if (selection && contextPad) {\n this._registerAction('replaceElement', function(event) {\n contextPad.triggerEntry('replace', 'click', event);\n });\n }\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9CcG1uRWRpdG9yQWN0aW9ucy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBd0M7O0FBRXlDOztBQUUvQzs7QUFFUTs7QUFJSjs7QUFFdEM7QUFDQSxhQUFhLHlCQUF5QjtBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDZTtBQUNmLGtCQUFrQiw0RkFBYTtBQUMvQjs7QUFFQSw0REFBUSxvQkFBb0IsNEZBQWE7O0FBRXpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQTs7QUFFQTs7QUFFQSxFQUFFLDRGQUFhOztBQUVmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZCQUE2QixnREFBTTtBQUNuQyxrQkFBa0IsbURBQUU7QUFDcEIsU0FBUzs7QUFFVDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLG1EQUFFO0FBQ1o7QUFDQSxpQkFBaUIsbURBQUU7QUFDbkIsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBLDZDQUE2QyxtREFBRTtBQUMvQyxTQUFTO0FBQ1Q7O0FBRUEsb0JBQW9CLHFFQUFPOztBQUUzQjtBQUNBO0FBQ0EsVUFBVSxzQ0FBc0M7QUFDaEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9CcG1uRWRpdG9yQWN0aW9ucy5qcz8xOTRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IEVkaXRvckFjdGlvbnMgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZWRpdG9yLWFjdGlvbnMvRWRpdG9yQWN0aW9ucyc7XG5cbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEJCb3hcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlkaScpLkluamVjdG9yfSBJbmplY3RvclxuICovXG5cbi8qKlxuICogUmVnaXN0ZXJzIGFuZCBleGVjdXRlcyBCUE1OIHNwZWNpZmljIGVkaXRvciBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJwbW5FZGl0b3JBY3Rpb25zKGluamVjdG9yKSB7XG4gIGluamVjdG9yLmludm9rZShFZGl0b3JBY3Rpb25zLCB0aGlzKTtcbn1cblxuaW5oZXJpdHMoQnBtbkVkaXRvckFjdGlvbnMsIEVkaXRvckFjdGlvbnMpO1xuXG5CcG1uRWRpdG9yQWN0aW9ucy4kaW5qZWN0ID0gW1xuICAnaW5qZWN0b3InXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGRlZmF1bHQgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5CcG1uRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUuX3JlZ2lzdGVyRGVmYXVsdEFjdGlvbnMgPSBmdW5jdGlvbihpbmplY3Rvcikge1xuXG4gIC8vICgwKSBpbnZva2Ugc3VwZXIgbWV0aG9kXG5cbiAgRWRpdG9yQWN0aW9ucy5wcm90b3R5cGUuX3JlZ2lzdGVyRGVmYXVsdEFjdGlvbnMuY2FsbCh0aGlzLCBpbmplY3Rvcik7XG5cbiAgLy8gKDEpIHJldHJpZXZlIG9wdGlvbmFsIGNvbXBvbmVudHMgdG8gaW50ZWdyYXRlIHdpdGhcblxuICB2YXIgY2FudmFzID0gaW5qZWN0b3IuZ2V0KCdjYW52YXMnLCBmYWxzZSk7XG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSBpbmplY3Rvci5nZXQoJ2VsZW1lbnRSZWdpc3RyeScsIGZhbHNlKTtcbiAgdmFyIHNlbGVjdGlvbiA9IGluamVjdG9yLmdldCgnc2VsZWN0aW9uJywgZmFsc2UpO1xuICB2YXIgc3BhY2VUb29sID0gaW5qZWN0b3IuZ2V0KCdzcGFjZVRvb2wnLCBmYWxzZSk7XG4gIHZhciBsYXNzb1Rvb2wgPSBpbmplY3Rvci5nZXQoJ2xhc3NvVG9vbCcsIGZhbHNlKTtcbiAgdmFyIGhhbmRUb29sID0gaW5qZWN0b3IuZ2V0KCdoYW5kVG9vbCcsIGZhbHNlKTtcbiAgdmFyIGdsb2JhbENvbm5lY3QgPSBpbmplY3Rvci5nZXQoJ2dsb2JhbENvbm5lY3QnLCBmYWxzZSk7XG4gIHZhciBkaXN0cmlidXRlRWxlbWVudHMgPSBpbmplY3Rvci5nZXQoJ2Rpc3RyaWJ1dGVFbGVtZW50cycsIGZhbHNlKTtcbiAgdmFyIGFsaWduRWxlbWVudHMgPSBpbmplY3Rvci5nZXQoJ2FsaWduRWxlbWVudHMnLCBmYWxzZSk7XG4gIHZhciBkaXJlY3RFZGl0aW5nID0gaW5qZWN0b3IuZ2V0KCdkaXJlY3RFZGl0aW5nJywgZmFsc2UpO1xuICB2YXIgc2VhcmNoUGFkID0gaW5qZWN0b3IuZ2V0KCdzZWFyY2hQYWQnLCBmYWxzZSk7XG4gIHZhciBtb2RlbGluZyA9IGluamVjdG9yLmdldCgnbW9kZWxpbmcnLCBmYWxzZSk7XG4gIHZhciBjb250ZXh0UGFkID0gaW5qZWN0b3IuZ2V0KCdjb250ZXh0UGFkJywgZmFsc2UpO1xuXG4gIC8vICgyKSBjaGVjayBjb21wb25lbnRzIGFuZCByZWdpc3RlciBhY3Rpb25zXG5cbiAgaWYgKGNhbnZhcyAmJiBlbGVtZW50UmVnaXN0cnkgJiYgc2VsZWN0aW9uKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ3NlbGVjdEVsZW1lbnRzJywgZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlbGVjdCBhbGwgZWxlbWVudHMgZXhjZXB0IGZvciB0aGUgaW52aXNpYmxlXG4gICAgICAvLyByb290IGVsZW1lbnRcbiAgICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgIT09IHJvb3RFbGVtZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHNlbGVjdGlvbi5zZWxlY3QoZWxlbWVudHMpO1xuXG4gICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc3BhY2VUb29sKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ3NwYWNlVG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgc3BhY2VUb29sLnRvZ2dsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGxhc3NvVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdsYXNzb1Rvb2wnLCBmdW5jdGlvbigpIHtcbiAgICAgIGxhc3NvVG9vbC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYW5kVG9vbCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdoYW5kVG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgaGFuZFRvb2wudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZ2xvYmFsQ29ubmVjdCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdnbG9iYWxDb25uZWN0VG9vbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZ2xvYmFsQ29ubmVjdC50b2dnbGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgZGlzdHJpYnV0ZUVsZW1lbnRzKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ2Rpc3RyaWJ1dGVFbGVtZW50cycsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpLFxuICAgICAgICAgIHR5cGUgPSBvcHRzLnR5cGU7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBkaXN0cmlidXRlRWxlbWVudHMudHJpZ2dlcihjdXJyZW50U2VsZWN0aW9uLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgYWxpZ25FbGVtZW50cykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdhbGlnbkVsZW1lbnRzJywgZnVuY3Rpb24ob3B0cykge1xuICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCksXG4gICAgICAgICAgYWxpZ25lYWJsZUVsZW1lbnRzID0gW10sXG4gICAgICAgICAgdHlwZSA9IG9wdHMudHlwZTtcblxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIGFsaWduZWFibGVFbGVtZW50cyA9IGZpbHRlcihjdXJyZW50U2VsZWN0aW9uLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuICFpcyhlbGVtZW50LCAnYnBtbjpMYW5lJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFsaWduRWxlbWVudHMudHJpZ2dlcihhbGlnbmVhYmxlRWxlbWVudHMsIHR5cGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlbGVjdGlvbiAmJiBtb2RlbGluZykge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdzZXRDb2xvcicsIGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldCgpO1xuXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgbW9kZWxpbmcuc2V0Q29sb3IoY3VycmVudFNlbGVjdGlvbiwgb3B0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9uICYmIGRpcmVjdEVkaXRpbmcpIHtcbiAgICB0aGlzLl9yZWdpc3RlckFjdGlvbignZGlyZWN0RWRpdGluZycsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBkaXJlY3RFZGl0aW5nLmFjdGl2YXRlKGN1cnJlbnRTZWxlY3Rpb25bMF0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlYXJjaFBhZCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdmaW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWFyY2hQYWQudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY2FudmFzICYmIG1vZGVsaW5nKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJBY3Rpb24oJ21vdmVUb09yaWdpbicsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgICAgYm91bmRpbmdCb3gsXG4gICAgICAgICAgZWxlbWVudHM7XG5cbiAgICAgIGlmIChpcyhyb290RWxlbWVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgICAgIGVsZW1lbnRzID0gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudCAhPT0gcm9vdEVsZW1lbnQgJiYgIWlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBib3VuZGluZ0JveCA9IGdldEJCb3goZWxlbWVudHMpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICB7IHg6IC1ib3VuZGluZ0JveC54LCB5OiAtYm91bmRpbmdCb3gueSB9LFxuICAgICAgICByb290RWxlbWVudFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb24gJiYgY29udGV4dFBhZCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyQWN0aW9uKCdyZXBsYWNlRWxlbWVudCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBjb250ZXh0UGFkLnRyaWdnZXJFbnRyeSgncmVwbGFjZScsICdjbGljaycsIGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/editor-actions/BpmnEditorActions.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/editor-actions/index.js":
/*!************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/editor-actions/index.js ***!
\************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_editor_actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/editor-actions */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/editor-actions/index.js\");\n/* harmony import */ var _BpmnEditorActions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BpmnEditorActions */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/editor-actions/BpmnEditorActions.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n diagram_js_lib_features_editor_actions__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n ],\n editorActions: [ 'type', _BpmnEditorActions__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUU7O0FBRXJCOztBQUVwRCxpRUFBZTtBQUNmO0FBQ0EsSUFBSSw4RUFBbUI7QUFDdkI7QUFDQSwyQkFBMkIsMERBQWlCO0FBQzVDLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2VkaXRvci1hY3Rpb25zL2luZGV4LmpzP2E2ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEVkaXRvckFjdGlvbnNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvZWRpdG9yLWFjdGlvbnMnO1xuXG5pbXBvcnQgQnBtbkVkaXRvckFjdGlvbnMgZnJvbSAnLi9CcG1uRWRpdG9yQWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBFZGl0b3JBY3Rpb25zTW9kdWxlXG4gIF0sXG4gIGVkaXRvckFjdGlvbnM6IFsgJ3R5cGUnLCBCcG1uRWRpdG9yQWN0aW9ucyBdXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/editor-actions/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/BpmnGridSnapping.js":
/*!**********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/BpmnGridSnapping.js ***!
\**********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnGridSnapping)\n/* harmony export */ });\n/* harmony import */ var _modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modeling/util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n/**\r\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\r\n */\r\n\r\n/**\r\n * @param {EventBus} eventBus\r\n */\r\nfunction BpmnGridSnapping(eventBus) {\r\n eventBus.on([\r\n 'create.init',\r\n 'shape.move.init'\r\n ], function(event) {\r\n var context = event.context,\r\n shape = event.shape;\r\n\r\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(shape, [\r\n 'bpmn:Participant',\r\n 'bpmn:SubProcess',\r\n 'bpmn:TextAnnotation'\r\n ])) {\r\n if (!context.gridSnappingContext) {\r\n context.gridSnappingContext = {};\r\n }\r\n\r\n context.gridSnappingContext.snapLocation = 'top-left';\r\n }\r\n });\r\n}\r\n\r\nBpmnGridSnapping.$inject = [ 'eventBus' ];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL0JwbW5HcmlkU25hcHBpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBc0Q7QUFDdEQ7QUFDQTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGtFQUFLO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9CcG1uR3JpZFNuYXBwaW5nLmpzPzM4NzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi9tb2RlbGluZy91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uR3JpZFNuYXBwaW5nKGV2ZW50QnVzKSB7XHJcbiAgZXZlbnRCdXMub24oW1xyXG4gICAgJ2NyZWF0ZS5pbml0JyxcclxuICAgICdzaGFwZS5tb3ZlLmluaXQnXHJcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGV2ZW50LnNoYXBlO1xyXG5cclxuICAgIGlmIChpc0FueShzaGFwZSwgW1xyXG4gICAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXHJcbiAgICAgICdicG1uOlN1YlByb2Nlc3MnLFxyXG4gICAgICAnYnBtbjpUZXh0QW5ub3RhdGlvbidcclxuICAgIF0pKSB7XHJcbiAgICAgIGlmICghY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgY29udGV4dC5ncmlkU25hcHBpbmdDb250ZXh0ID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnRleHQuZ3JpZFNuYXBwaW5nQ29udGV4dC5zbmFwTG9jYXRpb24gPSAndG9wLWxlZnQnO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5CcG1uR3JpZFNuYXBwaW5nLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/BpmnGridSnapping.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.js":
/*!********************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.js ***!
\********************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GridSnappingAutoPlaceBehavior)\n/* harmony export */ });\n/* harmony import */ var _auto_place_BpmnAutoPlaceUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../auto-place/BpmnAutoPlaceUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/auto-place/BpmnAutoPlaceUtil.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\r\n * @typedef {import('diagram-js/lib/features/grid-snapping/GridSnapping').default} GridSnapping\r\n *\r\n * @typedef {import('diagram-js/lib/util/Types').Axis} Axis\r\n */\r\n\r\nvar HIGH_PRIORITY = 2000;\r\n\r\n/**\r\n * @param {EventBus} eventBus\r\n * @param {GridSnapping} gridSnapping\r\n */\r\nfunction GridSnappingAutoPlaceBehavior(eventBus, gridSnapping) {\r\n eventBus.on('autoPlace', HIGH_PRIORITY, function(context) {\r\n var source = context.source,\r\n sourceMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_0__.getMid)(source),\r\n shape = context.shape;\r\n\r\n var position = (0,_auto_place_BpmnAutoPlaceUtil__WEBPACK_IMPORTED_MODULE_1__.getNewShapePosition)(source, shape);\r\n\r\n [ 'x', 'y' ].forEach(function(axis) {\r\n var options = {};\r\n\r\n // do not snap if x/y equal\r\n if (position[ axis ] === sourceMid[ axis ]) {\r\n return;\r\n }\r\n\r\n if (position[ axis ] > sourceMid[ axis ]) {\r\n options.min = position[ axis ];\r\n } else {\r\n options.max = position[ axis ];\r\n }\r\n\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:TextAnnotation')) {\r\n\r\n if (isHorizontal(axis)) {\r\n options.offset = -shape.width / 2;\r\n } else {\r\n options.offset = -shape.height / 2;\r\n }\r\n\r\n }\r\n\r\n position[ axis ] = gridSnapping.snapValue(position[ axis ], options);\r\n\r\n });\r\n\r\n // must be returned to be considered by auto place\r\n return position;\r\n });\r\n}\r\n\r\nGridSnappingAutoPlaceBehavior.$inject = [\r\n 'eventBus',\r\n 'gridSnapping'\r\n];\r\n\r\n// helpers //////////\r\n\r\n/**\r\n * @param {Axis} axis\r\n *\r\n * @return {boolean}\r\n */\r\nfunction isHorizontal(axis) {\r\n return axis === 'x';\r\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL0dyaWRTbmFwcGluZ0F1dG9QbGFjZUJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBeUU7QUFDekU7QUFDMEQ7QUFDYjtBQUM3QztBQUNBO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSxzRUFBc0U7QUFDbkY7QUFDQSxhQUFhLDBDQUEwQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsY0FBYztBQUN6QjtBQUNlO0FBQ2Y7QUFDQTtBQUNBLG9CQUFvQix3RUFBTTtBQUMxQjtBQUNBO0FBQ0EsbUJBQW1CLGtGQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFVBQVUsbURBQUU7QUFDWjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9HcmlkU25hcHBpbmdBdXRvUGxhY2VCZWhhdmlvci5qcz83Mjg0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldE5ld1NoYXBlUG9zaXRpb24gfSBmcm9tICcuLi8uLi9hdXRvLXBsYWNlL0JwbW5BdXRvUGxhY2VVdGlsJztcclxuXHJcbmltcG9ydCB7IGdldE1pZCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvR3JpZFNuYXBwaW5nJykuZGVmYXVsdH0gR3JpZFNuYXBwaW5nXHJcbiAqXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL3V0aWwvVHlwZXMnKS5BeGlzfSBBeGlzXHJcbiAqL1xyXG5cclxudmFyIEhJR0hfUFJJT1JJVFkgPSAyMDAwO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqIEBwYXJhbSB7R3JpZFNuYXBwaW5nfSBncmlkU25hcHBpbmdcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEdyaWRTbmFwcGluZ0F1dG9QbGFjZUJlaGF2aW9yKGV2ZW50QnVzLCBncmlkU25hcHBpbmcpIHtcclxuICBldmVudEJ1cy5vbignYXV0b1BsYWNlJywgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxyXG4gICAgICAgIHNvdXJjZU1pZCA9IGdldE1pZChzb3VyY2UpLFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcclxuXHJcbiAgICB2YXIgcG9zaXRpb24gPSBnZXROZXdTaGFwZVBvc2l0aW9uKHNvdXJjZSwgc2hhcGUpO1xyXG5cclxuICAgIFsgJ3gnLCAneScgXS5mb3JFYWNoKGZ1bmN0aW9uKGF4aXMpIHtcclxuICAgICAgdmFyIG9wdGlvbnMgPSB7fTtcclxuXHJcbiAgICAgIC8vIGRvIG5vdCBzbmFwIGlmIHgveSBlcXVhbFxyXG4gICAgICBpZiAocG9zaXRpb25bIGF4aXMgXSA9PT0gc291cmNlTWlkWyBheGlzIF0pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwb3NpdGlvblsgYXhpcyBdID4gc291cmNlTWlkWyBheGlzIF0pIHtcclxuICAgICAgICBvcHRpb25zLm1pbiA9IHBvc2l0aW9uWyBheGlzIF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9ucy5tYXggPSBwb3NpdGlvblsgYXhpcyBdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXMoc2hhcGUsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcclxuXHJcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbChheGlzKSkge1xyXG4gICAgICAgICAgb3B0aW9ucy5vZmZzZXQgPSAtc2hhcGUud2lkdGggLyAyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvcHRpb25zLm9mZnNldCA9IC1zaGFwZS5oZWlnaHQgLyAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBvc2l0aW9uWyBheGlzIF0gPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKHBvc2l0aW9uWyBheGlzIF0sIG9wdGlvbnMpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIG11c3QgYmUgcmV0dXJuZWQgdG8gYmUgY29uc2lkZXJlZCBieSBhdXRvIHBsYWNlXHJcbiAgICByZXR1cm4gcG9zaXRpb247XHJcbiAgfSk7XHJcbn1cclxuXHJcbkdyaWRTbmFwcGluZ0F1dG9QbGFjZUJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJ1xyXG5dO1xyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vXHJcblxyXG4vKipcclxuICogQHBhcmFtIHtBeGlzfSBheGlzXHJcbiAqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqL1xyXG5mdW5jdGlvbiBpc0hvcml6b250YWwoYXhpcykge1xyXG4gIHJldHVybiBheGlzID09PSAneCc7XHJcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js":
/*!***************************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js ***!
\***************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GridSnappingLayoutConnectionBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var diagram_js_lib_util_Geometry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/util/Geometry */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Geometry.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('diagram-js/lib/features/grid-snapping/GridSnapping').default} GridSnapping\n * @typedef {import('../../modeling/Modeling').default} Modeling\n *\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n */\n\nvar HIGH_PRIORITY = 3000;\n\n\n/**\n * Snaps connections with Manhattan layout.\n *\n * @param {EventBus} eventBus\n * @param {GridSnapping} gridSnapping\n * @param {Modeling} modeling\n */\nfunction GridSnappingLayoutConnectionBehavior(eventBus, gridSnapping, modeling) {\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this._gridSnapping = gridSnapping;\n\n var self = this;\n\n this.postExecuted([\n 'connection.create',\n 'connection.layout'\n ], HIGH_PRIORITY, function(event) {\n var context = event.context,\n connection = context.connection,\n hints = context.hints || {},\n waypoints = connection.waypoints;\n\n if (hints.connectionStart || hints.connectionEnd || hints.createElementsBehavior === false) {\n return;\n }\n\n if (!hasMiddleSegments(waypoints)) {\n return;\n }\n\n modeling.updateWaypoints(connection, self.snapMiddleSegments(waypoints));\n });\n}\n\nGridSnappingLayoutConnectionBehavior.$inject = [\n 'eventBus',\n 'gridSnapping',\n 'modeling'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(GridSnappingLayoutConnectionBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/**\n * Snap middle segments of a given connection.\n *\n * @param {Point[]} waypoints\n *\n * @return {Point[]}\n */\nGridSnappingLayoutConnectionBehavior.prototype.snapMiddleSegments = function(waypoints) {\n var gridSnapping = this._gridSnapping,\n snapped;\n\n waypoints = waypoints.slice();\n\n for (var i = 1; i < waypoints.length - 2; i++) {\n\n snapped = snapSegment(gridSnapping, waypoints[i], waypoints[i + 1]);\n\n waypoints[i] = snapped[0];\n waypoints[i + 1] = snapped[1];\n }\n\n return waypoints;\n};\n\n\n// helpers //////////\n\n/**\n * Check whether a connection has a middle segments.\n *\n * @param {Point[]} waypoints\n *\n * @return {boolean}\n */\nfunction hasMiddleSegments(waypoints) {\n return waypoints.length > 3;\n}\n\n/**\n * Check whether an alignment is horizontal.\n *\n * @param {string} aligned\n *\n * @return {boolean}\n */\nfunction horizontallyAligned(aligned) {\n return aligned === 'h';\n}\n\n/**\n * Check whether an alignment is vertical.\n *\n * @param {string} aligned\n *\n * @return {boolean}\n */\nfunction verticallyAligned(aligned) {\n return aligned === 'v';\n}\n\n/**\n * Get middle segments from a given connection.\n *\n * @param {Point[]} waypoints\n *\n * @return {Point[]}\n */\nfunction snapSegment(gridSnapping, segmentStart, segmentEnd) {\n\n var aligned = (0,diagram_js_lib_util_Geometry__WEBPACK_IMPORTED_MODULE_2__.pointsAligned)(segmentStart, segmentEnd);\n\n var snapped = {};\n\n if (horizontallyAligned(aligned)) {\n\n // snap horizontally\n snapped.y = gridSnapping.snapValue(segmentStart.y);\n }\n\n if (verticallyAligned(aligned)) {\n\n // snap vertically\n snapped.x = gridSnapping.snapValue(segmentStart.x);\n }\n\n if ('x' in snapped || 'y' in snapped) {\n segmentStart = (0,min_dash__WEBPACK_IMPORTED_MODULE_3__.assign)({}, segmentStart, snapped);\n segmentEnd = (0,min_dash__WEBPACK_IMPORTED_MODULE_3__.assign)({}, segmentEnd, snapped);\n }\n\n return [ segmentStart, segmentEnd ];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL0dyaWRTbmFwcGluZ0xheW91dENvbm5lY3Rpb25CZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3Qzs7QUFFbUM7O0FBRWQ7O0FBSTNDOztBQUVsQjtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsc0VBQXNFO0FBQ25GLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0EsYUFBYSwyQ0FBMkM7QUFDeEQ7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLGNBQWM7QUFDekIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZixFQUFFLGlGQUFrQjs7QUFFcEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0REFBUSx1Q0FBdUMsaUZBQWtCOztBQUVqRTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsa0JBQWtCLDBCQUEwQjs7QUFFNUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBLGdCQUFnQiwyRUFBYTs7QUFFN0I7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixnREFBTSxHQUFHO0FBQzVCLGlCQUFpQixnREFBTSxHQUFHO0FBQzFCOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL0dyaWRTbmFwcGluZ0xheW91dENvbm5lY3Rpb25CZWhhdmlvci5qcz85MDEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IHBvaW50c0FsaWduZWQgfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0dlb21ldHJ5JztcblxuaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvR3JpZFNuYXBwaW5nJykuZGVmYXVsdH0gR3JpZFNuYXBwaW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbGluZy9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlBvaW50fSBQb2ludFxuICovXG5cbnZhciBISUdIX1BSSU9SSVRZID0gMzAwMDtcblxuXG4vKipcbiAqIFNuYXBzIGNvbm5lY3Rpb25zIHdpdGggTWFuaGF0dGFuIGxheW91dC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtHcmlkU25hcHBpbmd9IGdyaWRTbmFwcGluZ1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3JpZFNuYXBwaW5nTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yKGV2ZW50QnVzLCBncmlkU25hcHBpbmcsIG1vZGVsaW5nKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9ncmlkU25hcHBpbmcgPSBncmlkU25hcHBpbmc7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLmxheW91dCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgd2F5cG9pbnRzID0gY29ubmVjdGlvbi53YXlwb2ludHM7XG5cbiAgICBpZiAoaGludHMuY29ubmVjdGlvblN0YXJ0IHx8IGhpbnRzLmNvbm5lY3Rpb25FbmQgfHwgaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWhhc01pZGRsZVNlZ21lbnRzKHdheXBvaW50cykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgc2VsZi5zbmFwTWlkZGxlU2VnbWVudHMod2F5cG9pbnRzKSk7XG4gIH0pO1xufVxuXG5HcmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2dyaWRTbmFwcGluZycsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKEdyaWRTbmFwcGluZ0xheW91dENvbm5lY3Rpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuLyoqXG4gKiBTbmFwIG1pZGRsZSBzZWdtZW50cyBvZiBhIGdpdmVuIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtQb2ludFtdfSB3YXlwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtQb2ludFtdfVxuICovXG5HcmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IucHJvdG90eXBlLnNuYXBNaWRkbGVTZWdtZW50cyA9IGZ1bmN0aW9uKHdheXBvaW50cykge1xuICB2YXIgZ3JpZFNuYXBwaW5nID0gdGhpcy5fZ3JpZFNuYXBwaW5nLFxuICAgICAgc25hcHBlZDtcblxuICB3YXlwb2ludHMgPSB3YXlwb2ludHMuc2xpY2UoKTtcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IHdheXBvaW50cy5sZW5ndGggLSAyOyBpKyspIHtcblxuICAgIHNuYXBwZWQgPSBzbmFwU2VnbWVudChncmlkU25hcHBpbmcsIHdheXBvaW50c1tpXSwgd2F5cG9pbnRzW2kgKyAxXSk7XG5cbiAgICB3YXlwb2ludHNbaV0gPSBzbmFwcGVkWzBdO1xuICAgIHdheXBvaW50c1tpICsgMV0gPSBzbmFwcGVkWzFdO1xuICB9XG5cbiAgcmV0dXJuIHdheXBvaW50cztcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNvbm5lY3Rpb24gaGFzIGEgbWlkZGxlIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnRbXX0gd2F5cG9pbnRzXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzTWlkZGxlU2VnbWVudHMod2F5cG9pbnRzKSB7XG4gIHJldHVybiB3YXlwb2ludHMubGVuZ3RoID4gMztcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIGFsaWdubWVudCBpcyBob3Jpem9udGFsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlnbmVkXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaG9yaXpvbnRhbGx5QWxpZ25lZChhbGlnbmVkKSB7XG4gIHJldHVybiBhbGlnbmVkID09PSAnaCc7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBhbGlnbm1lbnQgaXMgdmVydGljYWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWduZWRcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB2ZXJ0aWNhbGx5QWxpZ25lZChhbGlnbmVkKSB7XG4gIHJldHVybiBhbGlnbmVkID09PSAndic7XG59XG5cbi8qKlxuICogR2V0IG1pZGRsZSBzZWdtZW50cyBmcm9tIGEgZ2l2ZW4gY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1BvaW50W119IHdheXBvaW50c1xuICpcbiAqIEByZXR1cm4ge1BvaW50W119XG4gKi9cbmZ1bmN0aW9uIHNuYXBTZWdtZW50KGdyaWRTbmFwcGluZywgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKSB7XG5cbiAgdmFyIGFsaWduZWQgPSBwb2ludHNBbGlnbmVkKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCk7XG5cbiAgdmFyIHNuYXBwZWQgPSB7fTtcblxuICBpZiAoaG9yaXpvbnRhbGx5QWxpZ25lZChhbGlnbmVkKSkge1xuXG4gICAgLy8gc25hcCBob3Jpem9udGFsbHlcbiAgICBzbmFwcGVkLnkgPSBncmlkU25hcHBpbmcuc25hcFZhbHVlKHNlZ21lbnRTdGFydC55KTtcbiAgfVxuXG4gIGlmICh2ZXJ0aWNhbGx5QWxpZ25lZChhbGlnbmVkKSkge1xuXG4gICAgLy8gc25hcCB2ZXJ0aWNhbGx5XG4gICAgc25hcHBlZC54ID0gZ3JpZFNuYXBwaW5nLnNuYXBWYWx1ZShzZWdtZW50U3RhcnQueCk7XG4gIH1cblxuICBpZiAoJ3gnIGluIHNuYXBwZWQgfHwgJ3knIGluIHNuYXBwZWQpIHtcbiAgICBzZWdtZW50U3RhcnQgPSBhc3NpZ24oe30sIHNlZ21lbnRTdGFydCwgc25hcHBlZCk7XG4gICAgc2VnbWVudEVuZCA9IGFzc2lnbih7fSwgc2VnbWVudEVuZCwgc25hcHBlZCk7XG4gIH1cblxuICByZXR1cm4gWyBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQgXTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.js ***!
\**********************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GridSnappingParticipantBehavior)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n/**\r\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\r\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\r\n * @typedef {import('diagram-js/lib/features/grid-snapping/GridSnapping').default} GridSnapping\r\n */\r\n\r\nvar HIGHER_PRIORITY = 1750;\r\n\r\n/**\r\n * @param {Canvas} canvas\r\n * @param {EventBus} eventBus\r\n * @param {GridSnapping} gridSnapping\r\n */\r\nfunction GridSnappingParticipantBehavior(canvas, eventBus, gridSnapping) {\r\n eventBus.on([\r\n 'create.start',\r\n 'shape.move.start'\r\n ], HIGHER_PRIORITY, function(event) {\r\n var context = event.context,\r\n shape = context.shape,\r\n rootElement = canvas.getRootElement();\r\n\r\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:Participant') ||\r\n !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(rootElement, 'bpmn:Process') ||\r\n !rootElement.children.length) {\r\n return;\r\n }\r\n\r\n var createConstraints = context.createConstraints;\r\n\r\n if (!createConstraints) {\r\n return;\r\n }\r\n\r\n shape.width = gridSnapping.snapValue(shape.width, { min: shape.width });\r\n shape.height = gridSnapping.snapValue(shape.height, { min: shape.height });\r\n });\r\n}\r\n\r\nGridSnappingParticipantBehavior.$inject = [\r\n 'canvas',\r\n 'eventBus',\r\n 'gridSnapping'\r\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL0dyaWRTbmFwcGluZ1BhcnRpY2lwYW50QmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNkM7QUFDN0M7QUFDQTtBQUNBLGFBQWEsOENBQThDO0FBQzNELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsc0VBQXNFO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsY0FBYztBQUN6QjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsbURBQUU7QUFDWCxPQUFPLG1EQUFFO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Qsa0JBQWtCO0FBQzFFLDBEQUEwRCxtQkFBbUI7QUFDN0UsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvZ3JpZC1zbmFwcGluZy9iZWhhdmlvci9HcmlkU25hcHBpbmdQYXJ0aWNpcGFudEJlaGF2aW9yLmpzPzgxZDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9DYW52YXMnKS5kZWZhdWx0fSBDYW52YXNcclxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvR3JpZFNuYXBwaW5nJykuZGVmYXVsdH0gR3JpZFNuYXBwaW5nXHJcbiAqL1xyXG5cclxudmFyIEhJR0hFUl9QUklPUklUWSA9IDE3NTA7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0dyaWRTbmFwcGluZ30gZ3JpZFNuYXBwaW5nXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHcmlkU25hcHBpbmdQYXJ0aWNpcGFudEJlaGF2aW9yKGNhbnZhcywgZXZlbnRCdXMsIGdyaWRTbmFwcGluZykge1xyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjcmVhdGUuc3RhcnQnLFxyXG4gICAgJ3NoYXBlLm1vdmUuc3RhcnQnXHJcbiAgXSwgSElHSEVSX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgfHxcclxuICAgICAgIWlzKHJvb3RFbGVtZW50LCAnYnBtbjpQcm9jZXNzJykgfHxcclxuICAgICAgIXJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGNyZWF0ZUNvbnN0cmFpbnRzID0gY29udGV4dC5jcmVhdGVDb25zdHJhaW50cztcclxuXHJcbiAgICBpZiAoIWNyZWF0ZUNvbnN0cmFpbnRzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzaGFwZS53aWR0aCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2hhcGUud2lkdGgsIHsgbWluOiBzaGFwZS53aWR0aCB9KTtcclxuICAgIHNoYXBlLmhlaWdodCA9IGdyaWRTbmFwcGluZy5zbmFwVmFsdWUoc2hhcGUuaGVpZ2h0LCB7IG1pbjogc2hhcGUuaGVpZ2h0IH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5HcmlkU25hcHBpbmdQYXJ0aWNpcGFudEJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2NhbnZhcycsXHJcbiAgJ2V2ZW50QnVzJyxcclxuICAnZ3JpZFNuYXBwaW5nJ1xyXG5dOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/index.js":
/*!********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/index.js ***!
\********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _GridSnappingAutoPlaceBehavior__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GridSnappingAutoPlaceBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.js\");\n/* harmony import */ var _GridSnappingParticipantBehavior__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GridSnappingParticipantBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.js\");\n/* harmony import */ var _GridSnappingLayoutConnectionBehavior__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./GridSnappingLayoutConnectionBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js\");\n\r\n\r\n\r\n\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\r\n __init__: [\r\n 'gridSnappingAutoPlaceBehavior',\r\n 'gridSnappingParticipantBehavior',\r\n 'gridSnappingLayoutConnectionBehavior',\r\n ],\r\n gridSnappingAutoPlaceBehavior: [ 'type', _GridSnappingAutoPlaceBehavior__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ],\r\n gridSnappingParticipantBehavior: [ 'type', _GridSnappingParticipantBehavior__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ],\r\n gridSnappingLayoutConnectionBehavior: [ 'type', _GridSnappingLayoutConnectionBehavior__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ]\r\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2JlaGF2aW9yL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBNEU7QUFDSTtBQUNVO0FBQzFGO0FBQ0EsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHNFQUE2QjtBQUN4RSw2Q0FBNkMsd0VBQStCO0FBQzVFLGtEQUFrRCw2RUFBb0M7QUFDdEYsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvYmVoYXZpb3IvaW5kZXguanM/MGE4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR3JpZFNuYXBwaW5nQXV0b1BsYWNlQmVoYXZpb3IgZnJvbSAnLi9HcmlkU25hcHBpbmdBdXRvUGxhY2VCZWhhdmlvcic7XHJcbmltcG9ydCBHcmlkU25hcHBpbmdQYXJ0aWNpcGFudEJlaGF2aW9yIGZyb20gJy4vR3JpZFNuYXBwaW5nUGFydGljaXBhbnRCZWhhdmlvcic7XHJcbmltcG9ydCBHcmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9HcmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3InO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIF9faW5pdF9fOiBbXHJcbiAgICAnZ3JpZFNuYXBwaW5nQXV0b1BsYWNlQmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ1BhcnRpY2lwYW50QmVoYXZpb3InLFxyXG4gICAgJ2dyaWRTbmFwcGluZ0xheW91dENvbm5lY3Rpb25CZWhhdmlvcicsXHJcbiAgXSxcclxuICBncmlkU25hcHBpbmdBdXRvUGxhY2VCZWhhdmlvcjogWyAndHlwZScsIEdyaWRTbmFwcGluZ0F1dG9QbGFjZUJlaGF2aW9yIF0sXHJcbiAgZ3JpZFNuYXBwaW5nUGFydGljaXBhbnRCZWhhdmlvcjogWyAndHlwZScsIEdyaWRTbmFwcGluZ1BhcnRpY2lwYW50QmVoYXZpb3IgXSxcclxuICBncmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBHcmlkU25hcHBpbmdMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgXVxyXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/index.js":
/*!***********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/index.js ***!
\***********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _BpmnGridSnapping__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BpmnGridSnapping */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/BpmnGridSnapping.js\");\n/* harmony import */ var diagram_js_lib_features_grid_snapping__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/grid-snapping */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/grid-snapping/index.js\");\n/* harmony import */ var _behavior__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./behavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/behavior/index.js\");\n\r\n\r\n\r\n\r\n\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\r\n __depends__: [\r\n diagram_js_lib_features_grid_snapping__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\r\n _behavior__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\r\n ],\r\n __init__: [ 'bpmnGridSnapping' ],\r\n bpmnGridSnapping: [ 'type', _BpmnGridSnapping__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ]\r\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9ncmlkLXNuYXBwaW5nL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0Q7QUFDcUI7QUFDdkU7QUFDb0Q7QUFDcEQ7QUFDQSxpRUFBZTtBQUNmO0FBQ0EsSUFBSSw2RUFBa0I7QUFDdEIsSUFBSSxpREFBMEI7QUFDOUI7QUFDQTtBQUNBLDhCQUE4Qix5REFBZ0I7QUFDOUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcvaW5kZXguanM/ZmFiMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnBtbkdyaWRTbmFwcGluZyBmcm9tICcuL0JwbW5HcmlkU25hcHBpbmcnO1xyXG5pbXBvcnQgR3JpZFNuYXBwaW5nTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2dyaWQtc25hcHBpbmcnO1xyXG5cclxuaW1wb3J0IEdyaWRTbmFwcGluZ0JlaGF2aW9yTW9kdWxlIGZyb20gJy4vYmVoYXZpb3InO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIF9fZGVwZW5kc19fOiBbXHJcbiAgICBHcmlkU25hcHBpbmdNb2R1bGUsXHJcbiAgICBHcmlkU25hcHBpbmdCZWhhdmlvck1vZHVsZVxyXG4gIF0sXHJcbiAgX19pbml0X186IFsgJ2JwbW5HcmlkU25hcHBpbmcnIF0sXHJcbiAgYnBtbkdyaWRTbmFwcGluZzogWyAndHlwZScsIEJwbW5HcmlkU25hcHBpbmcgXVxyXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/grid-snapping/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/interaction-events/BpmnInteractionEvents.js":
/*!********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/interaction-events/BpmnInteractionEvents.js ***!
\********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnInteractionEvents)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('diagram-js/lib/features/interaction-events/InteractionEvents').default} InteractionEvents\n *\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('../../model/Types').Shape} Shape\n */\n\nvar LABEL_WIDTH = 30,\n LABEL_HEIGHT = 30;\n\n\n/**\n * BPMN-specific hit zones and interaction fixes.\n *\n * @param {EventBus} eventBus\n * @param {InteractionEvents} interactionEvents\n */\nfunction BpmnInteractionEvents(eventBus, interactionEvents) {\n\n this._interactionEvents = interactionEvents;\n\n var self = this;\n\n eventBus.on([\n 'interactionEvents.createHit',\n 'interactionEvents.updateHit'\n ], function(context) {\n var element = context.element,\n gfx = context.gfx;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Lane')) {\n return self._createParticipantHit(element, gfx);\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Participant')) {\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_1__.isExpanded)(element)) {\n return self._createParticipantHit(element, gfx);\n } else {\n return self._createDefaultHit(element, gfx);\n }\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:SubProcess')) {\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_1__.isExpanded)(element)) {\n return self._createSubProcessHit(element, gfx);\n } else {\n return self._createDefaultHit(element, gfx);\n }\n }\n });\n\n}\n\nBpmnInteractionEvents.$inject = [\n 'eventBus',\n 'interactionEvents'\n];\n\n/**\n * @param {Element} element\n * @param {SVGElement} gfx\n *\n * @return {boolean}\n */\nBpmnInteractionEvents.prototype._createDefaultHit = function(element, gfx) {\n this._interactionEvents.removeHits(gfx);\n\n this._interactionEvents.createDefaultHit(element, gfx);\n\n // indicate that we created a hit\n return true;\n};\n\n/**\n * @param {Shape} element\n * @param {SVGElement} gfx\n *\n * @return {boolean}\n */\nBpmnInteractionEvents.prototype._createParticipantHit = function(element, gfx) {\n\n // remove existing hits\n this._interactionEvents.removeHits(gfx);\n\n // add body hit\n this._interactionEvents.createBoxHit(gfx, 'no-move', {\n width: element.width,\n height: element.height\n });\n\n // add outline hit\n this._interactionEvents.createBoxHit(gfx, 'click-stroke', {\n width: element.width,\n height: element.height\n });\n\n // add label hit\n this._interactionEvents.createBoxHit(gfx, 'all', {\n width: LABEL_WIDTH,\n height: element.height\n });\n\n // indicate that we created a hit\n return true;\n};\n\n/**\n * @param {Shape} element\n * @param {SVGElement} gfx\n *\n * @return {boolean}\n */\nBpmnInteractionEvents.prototype._createSubProcessHit = function(element, gfx) {\n\n // remove existing hits\n this._interactionEvents.removeHits(gfx);\n\n // add body hit\n this._interactionEvents.createBoxHit(gfx, 'no-move', {\n width: element.width,\n height: element.height\n });\n\n // add outline hit\n this._interactionEvents.createBoxHit(gfx, 'click-stroke', {\n width: element.width,\n height: element.height\n });\n\n // add label hit\n this._interactionEvents.createBoxHit(gfx, 'all', {\n width: element.width,\n height: LABEL_HEIGHT\n });\n\n // indicate that we created a hit\n return true;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMvQnBtbkludGVyYWN0aW9uRXZlbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwQzs7QUFFSzs7QUFFL0M7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLGdGQUFnRjtBQUM3RjtBQUNBLGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsbUNBQW1DO0FBQ2hEOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLG1CQUFtQjtBQUM5QjtBQUNlOztBQUVmOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQSxNQUFNOztBQUVOLFFBQVEsbURBQUU7QUFDVixVQUFVLHdEQUFVO0FBQ3BCO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNOztBQUVOLFFBQVEsbURBQUU7QUFDVixVQUFVLHdEQUFVO0FBQ3BCO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMvQnBtbkludGVyYWN0aW9uRXZlbnRzLmpzPzQwMTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMvSW50ZXJhY3Rpb25FdmVudHMnKS5kZWZhdWx0fSBJbnRlcmFjdGlvbkV2ZW50c1xuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5TaGFwZX0gU2hhcGVcbiAqL1xuXG52YXIgTEFCRUxfV0lEVEggPSAzMCxcbiAgICBMQUJFTF9IRUlHSFQgPSAzMDtcblxuXG4vKipcbiAqIEJQTU4tc3BlY2lmaWMgaGl0IHpvbmVzIGFuZCBpbnRlcmFjdGlvbiBmaXhlcy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtJbnRlcmFjdGlvbkV2ZW50c30gaW50ZXJhY3Rpb25FdmVudHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkludGVyYWN0aW9uRXZlbnRzKGV2ZW50QnVzLCBpbnRlcmFjdGlvbkV2ZW50cykge1xuXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzID0gaW50ZXJhY3Rpb25FdmVudHM7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnaW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlSGl0JyxcbiAgICAnaW50ZXJhY3Rpb25FdmVudHMudXBkYXRlSGl0J1xuICBdLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIGdmeCA9IGNvbnRleHQuZ2Z4O1xuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZVBhcnRpY2lwYW50SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgfSBlbHNlXG5cbiAgICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgaWYgKGlzRXhwYW5kZWQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZVBhcnRpY2lwYW50SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRlRGVmYXVsdEhpdChlbGVtZW50LCBnZngpO1xuICAgICAgfVxuICAgIH0gZWxzZVxuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgICAgaWYgKGlzRXhwYW5kZWQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZVN1YlByb2Nlc3NIaXQoZWxlbWVudCwgZ2Z4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxmLl9jcmVhdGVEZWZhdWx0SGl0KGVsZW1lbnQsIGdmeCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxufVxuXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2ludGVyYWN0aW9uRXZlbnRzJ1xuXTtcblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQnBtbkludGVyYWN0aW9uRXZlbnRzLnByb3RvdHlwZS5fY3JlYXRlRGVmYXVsdEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuICB0aGlzLl9pbnRlcmFjdGlvbkV2ZW50cy5yZW1vdmVIaXRzKGdmeCk7XG5cbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlRGVmYXVsdEhpdChlbGVtZW50LCBnZngpO1xuXG4gIC8vIGluZGljYXRlIHRoYXQgd2UgY3JlYXRlZCBhIGhpdFxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudFxuICogQHBhcmFtIHtTVkdFbGVtZW50fSBnZnhcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5CcG1uSW50ZXJhY3Rpb25FdmVudHMucHJvdG90eXBlLl9jcmVhdGVQYXJ0aWNpcGFudEhpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gIC8vIHJlbW92ZSBleGlzdGluZyBoaXRzXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLnJlbW92ZUhpdHMoZ2Z4KTtcblxuICAvLyBhZGQgYm9keSBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ25vLW1vdmUnLCB7XG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICB9KTtcblxuICAvLyBhZGQgb3V0bGluZSBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2NsaWNrLXN0cm9rZScsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGFkZCBsYWJlbCBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2FsbCcsIHtcbiAgICB3aWR0aDogTEFCRUxfV0lEVEgsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICB9KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7U2hhcGV9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U1ZHRWxlbWVudH0gZ2Z4XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuQnBtbkludGVyYWN0aW9uRXZlbnRzLnByb3RvdHlwZS5fY3JlYXRlU3ViUHJvY2Vzc0hpdCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGdmeCkge1xuXG4gIC8vIHJlbW92ZSBleGlzdGluZyBoaXRzXG4gIHRoaXMuX2ludGVyYWN0aW9uRXZlbnRzLnJlbW92ZUhpdHMoZ2Z4KTtcblxuICAvLyBhZGQgYm9keSBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ25vLW1vdmUnLCB7XG4gICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICB9KTtcblxuICAvLyBhZGQgb3V0bGluZSBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2NsaWNrLXN0cm9rZScsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0XG4gIH0pO1xuXG4gIC8vIGFkZCBsYWJlbCBoaXRcbiAgdGhpcy5faW50ZXJhY3Rpb25FdmVudHMuY3JlYXRlQm94SGl0KGdmeCwgJ2FsbCcsIHtcbiAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICBoZWlnaHQ6IExBQkVMX0hFSUdIVFxuICB9KTtcblxuICAvLyBpbmRpY2F0ZSB0aGF0IHdlIGNyZWF0ZWQgYSBoaXRcbiAgcmV0dXJuIHRydWU7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/interaction-events/BpmnInteractionEvents.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/interaction-events/index.js":
/*!****************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/interaction-events/index.js ***!
\****************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _BpmnInteractionEvents__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BpmnInteractionEvents */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/interaction-events/BpmnInteractionEvents.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __init__: [ 'bpmnInteractionEvents' ],\n bpmnInteractionEvents: [ 'type', _BpmnInteractionEvents__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNEQ7O0FBRTVELGlFQUFlO0FBQ2Y7QUFDQSxtQ0FBbUMsOERBQXFCO0FBQ3hELENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9pbnRlcmFjdGlvbi1ldmVudHMvaW5kZXguanM/NTk5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnBtbkludGVyYWN0aW9uRXZlbnRzIGZyb20gJy4vQnBtbkludGVyYWN0aW9uRXZlbnRzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogWyAnYnBtbkludGVyYWN0aW9uRXZlbnRzJyBdLFxuICBicG1uSW50ZXJhY3Rpb25FdmVudHM6IFsgJ3R5cGUnLCBCcG1uSW50ZXJhY3Rpb25FdmVudHMgXVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/interaction-events/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/keyboard/BpmnKeyboardBindings.js":
/*!*********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/keyboard/BpmnKeyboardBindings.js ***!
\*********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnKeyboardBindings)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_features_keyboard_KeyboardBindings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/keyboard/KeyboardBindings */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/keyboard/KeyboardBindings.js\");\n\n\n\n\n/**\n * @typedef {import('didi').Injector} Injector\n * @typedef {import('diagram-js/lib/features/editor-actions/EditorActions').default} EditorActions\n * @typedef {import('diagram-js/lib/features/keyboard/Keyboard').default} Keyboard\n */\n\n/**\n * BPMN 2.0 specific keyboard bindings.\n *\n * @param {Injector} injector\n */\nfunction BpmnKeyboardBindings(injector) {\n injector.invoke(diagram_js_lib_features_keyboard_KeyboardBindings__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(BpmnKeyboardBindings, diagram_js_lib_features_keyboard_KeyboardBindings__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nBpmnKeyboardBindings.$inject = [\n 'injector'\n];\n\n\n/**\n * Register available keyboard bindings.\n *\n * @param {Keyboard} keyboard\n * @param {EditorActions} editorActions\n */\nBpmnKeyboardBindings.prototype.registerBindings = function(keyboard, editorActions) {\n\n // inherit default bindings\n diagram_js_lib_features_keyboard_KeyboardBindings__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.registerBindings.call(this, keyboard, editorActions);\n\n /**\n * Add keyboard binding if respective editor action\n * is registered.\n *\n * @param {string} action name\n * @param {Function} fn that implements the key binding\n */\n function addListener(action, fn) {\n\n if (editorActions.isRegistered(action)) {\n keyboard.addListener(fn);\n }\n }\n\n // select all elements\n // CTRL + A\n addListener('selectElements', function(context) {\n\n var event = context.keyEvent;\n\n if (keyboard.isKey([ 'a', 'A' ], event) && keyboard.isCmd(event)) {\n editorActions.trigger('selectElements');\n\n return true;\n }\n });\n\n // search labels\n // CTRL + F\n addListener('find', function(context) {\n\n var event = context.keyEvent;\n\n if (keyboard.isKey([ 'f', 'F' ], event) && keyboard.isCmd(event)) {\n editorActions.trigger('find');\n\n return true;\n }\n });\n\n // activate space tool\n // S\n addListener('spaceTool', function(context) {\n\n var event = context.keyEvent;\n\n if (keyboard.hasModifier(event)) {\n return;\n }\n\n if (keyboard.isKey([ 's', 'S' ], event)) {\n editorActions.trigger('spaceTool');\n\n return true;\n }\n });\n\n // activate lasso tool\n // L\n addListener('lassoTool', function(context) {\n\n var event = context.keyEvent;\n\n if (keyboard.hasModifier(event)) {\n return;\n }\n\n if (keyboard.isKey([ 'l', 'L' ], event)) {\n editorActions.trigger('lassoTool');\n\n return true;\n }\n });\n\n // activate hand tool\n // H\n addListener('handTool', function(context) {\n\n var event = context.keyEvent;\n\n if (keyboard.hasModifier(event)) {\n return;\n }\n\n if (keyboard.isKey([ 'h', 'H' ], event)) {\n editorActions.trigger('handTool');\n\n return true;\n }\n });\n\n // activate global connect tool\n // C\n addListener('globalConnectTool', function(context) {\n\n var event = context.keyEvent;\n\n if (keyboard.hasModifier(event)) {\n return;\n }\n\n if (keyboard.isKey([ 'c', 'C' ], event)) {\n editorActions.trigger('globalConnectTool');\n\n return true;\n }\n });\n\n // activate direct editing\n // E\n addListener('directEditing', function(context) {\n\n var event = context.keyEvent;\n\n if (keyboard.hasModifier(event)) {\n return;\n }\n\n if (keyboard.isKey([ 'e', 'E' ], event)) {\n editorActions.trigger('directEditing');\n\n return true;\n }\n });\n\n // activate replace element\n // R\n addListener('replaceElement', function(context) {\n\n var event = context.keyEvent;\n\n if (keyboard.hasModifier(event)) {\n return;\n }\n\n if (keyboard.isKey([ 'r', 'R' ], event)) {\n editorActions.trigger('replaceElement', event);\n\n return true;\n }\n });\n\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9CcG1uS2V5Ym9hcmRCaW5kaW5ncy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0M7O0FBRXlDOztBQUVqRjtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDLGFBQWEsd0VBQXdFO0FBQ3JGLGFBQWEsNkRBQTZEO0FBQzFFOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2Ysa0JBQWtCLHlGQUFnQjtBQUNsQzs7QUFFQSw0REFBUSx1QkFBdUIseUZBQWdCOztBQUUvQztBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLGVBQWU7QUFDMUI7QUFDQTs7QUFFQTtBQUNBLEVBQUUseUZBQWdCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFVBQVU7QUFDdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL0JwbW5LZXlib2FyZEJpbmRpbmdzLmpzPzcwZWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgS2V5Ym9hcmRCaW5kaW5ncyBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9LZXlib2FyZEJpbmRpbmdzJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWRpJykuSW5qZWN0b3J9IEluamVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9lZGl0b3ItYWN0aW9ucy9FZGl0b3JBY3Rpb25zJykuZGVmYXVsdH0gRWRpdG9yQWN0aW9uc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMva2V5Ym9hcmQvS2V5Ym9hcmQnKS5kZWZhdWx0fSBLZXlib2FyZFxuICovXG5cbi8qKlxuICogQlBNTiAyLjAgc3BlY2lmaWMga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbktleWJvYXJkQmluZGluZ3MoaW5qZWN0b3IpIHtcbiAgaW5qZWN0b3IuaW52b2tlKEtleWJvYXJkQmluZGluZ3MsIHRoaXMpO1xufVxuXG5pbmhlcml0cyhCcG1uS2V5Ym9hcmRCaW5kaW5ncywgS2V5Ym9hcmRCaW5kaW5ncyk7XG5cbkJwbW5LZXlib2FyZEJpbmRpbmdzLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhdmFpbGFibGUga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7RWRpdG9yQWN0aW9uc30gZWRpdG9yQWN0aW9uc1xuICovXG5CcG1uS2V5Ym9hcmRCaW5kaW5ncy5wcm90b3R5cGUucmVnaXN0ZXJCaW5kaW5ncyA9IGZ1bmN0aW9uKGtleWJvYXJkLCBlZGl0b3JBY3Rpb25zKSB7XG5cbiAgLy8gaW5oZXJpdCBkZWZhdWx0IGJpbmRpbmdzXG4gIEtleWJvYXJkQmluZGluZ3MucHJvdG90eXBlLnJlZ2lzdGVyQmluZGluZ3MuY2FsbCh0aGlzLCBrZXlib2FyZCwgZWRpdG9yQWN0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEFkZCBrZXlib2FyZCBiaW5kaW5nIGlmIHJlc3BlY3RpdmUgZWRpdG9yIGFjdGlvblxuICAgKiBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhhdCBpbXBsZW1lbnRzIHRoZSBrZXkgYmluZGluZ1xuICAgKi9cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIoYWN0aW9uLCBmbikge1xuXG4gICAgaWYgKGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICAgIGtleWJvYXJkLmFkZExpc3RlbmVyKGZuKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZWxlY3QgYWxsIGVsZW1lbnRzXG4gIC8vIENUUkwgKyBBXG4gIGFkZExpc3RlbmVyKCdzZWxlY3RFbGVtZW50cycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWyAnYScsICdBJyBdLCBldmVudCkgJiYga2V5Ym9hcmQuaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3NlbGVjdEVsZW1lbnRzJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gc2VhcmNoIGxhYmVsc1xuICAvLyBDVFJMICsgRlxuICBhZGRMaXN0ZW5lcignZmluZCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWyAnZicsICdGJyBdLCBldmVudCkgJiYga2V5Ym9hcmQuaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ2ZpbmQnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBzcGFjZSB0b29sXG4gIC8vIFNcbiAgYWRkTGlzdGVuZXIoJ3NwYWNlVG9vbCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaGFzTW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsgJ3MnLCAnUycgXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3NwYWNlVG9vbCcpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIGxhc3NvIHRvb2xcbiAgLy8gTFxuICBhZGRMaXN0ZW5lcignbGFzc29Ub29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWyAnbCcsICdMJyBdLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignbGFzc29Ub29sJyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYWN0aXZhdGUgaGFuZCB0b29sXG4gIC8vIEhcbiAgYWRkTGlzdGVuZXIoJ2hhbmRUb29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWyAnaCcsICdIJyBdLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignaGFuZFRvb2wnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBnbG9iYWwgY29ubmVjdCB0b29sXG4gIC8vIENcbiAgYWRkTGlzdGVuZXIoJ2dsb2JhbENvbm5lY3RUb29sJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWyAnYycsICdDJyBdLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignZ2xvYmFsQ29ubmVjdFRvb2wnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBhY3RpdmF0ZSBkaXJlY3QgZWRpdGluZ1xuICAvLyBFXG4gIGFkZExpc3RlbmVyKCdkaXJlY3RFZGl0aW5nJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQuaXNLZXkoWyAnZScsICdFJyBdLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcignZGlyZWN0RWRpdGluZycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGFjdGl2YXRlIHJlcGxhY2UgZWxlbWVudFxuICAvLyBSXG4gIGFkZExpc3RlbmVyKCdyZXBsYWNlRWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoa2V5Ym9hcmQuaGFzTW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleWJvYXJkLmlzS2V5KFsgJ3InLCAnUicgXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3JlcGxhY2VFbGVtZW50JywgZXZlbnQpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/keyboard/BpmnKeyboardBindings.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/keyboard/index.js":
/*!******************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/keyboard/index.js ***!
\******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_keyboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/keyboard */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/keyboard/index.js\");\n/* harmony import */ var _BpmnKeyboardBindings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BpmnKeyboardBindings */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/keyboard/BpmnKeyboardBindings.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n diagram_js_lib_features_keyboard__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n ],\n __init__: [ 'keyboardBindings' ],\n keyboardBindings: [ 'type', _BpmnKeyboardBindings__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9rZXlib2FyZC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEQ7O0FBRUo7O0FBRTFELGlFQUFlO0FBQ2Y7QUFDQSxJQUFJLHdFQUFjO0FBQ2xCO0FBQ0E7QUFDQSw4QkFBOEIsNkRBQW9CO0FBQ2xELENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkL2luZGV4LmpzPzIyMjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEtleWJvYXJkTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2tleWJvYXJkJztcblxuaW1wb3J0IEJwbW5LZXlib2FyZEJpbmRpbmdzIGZyb20gJy4vQnBtbktleWJvYXJkQmluZGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgS2V5Ym9hcmRNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFsgJ2tleWJvYXJkQmluZGluZ3MnIF0sXG4gIGtleWJvYXJkQmluZGluZ3M6IFsgJ3R5cGUnLCBCcG1uS2V5Ym9hcmRCaW5kaW5ncyBdXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/keyboard/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/LabelEditingPreview.js":
/*!*************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/LabelEditingPreview.js ***!
\*************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LabelEditingPreview)\n/* harmony export */ });\n/* harmony import */ var tiny_svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tiny-svg */ \"./node_modules/tiny-svg/dist/index.esm.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_util_SvgTransformUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/util/SvgTransformUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/SvgTransformUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../../draw/PathMap').default} PathMap\n */\n\nvar MARKER_HIDDEN = 'djs-element-hidden',\n MARKER_LABEL_HIDDEN = 'djs-label-hidden';\n\n/**\n * @param {EventBus} eventBus\n * @param {Canvas} canvas\n * @param {PathMap} pathMap\n */\nfunction LabelEditingPreview(eventBus, canvas, pathMap) {\n\n var self = this;\n\n var defaultLayer = canvas.getDefaultLayer();\n\n var element, absoluteElementBBox, gfx;\n\n eventBus.on('directEditing.activate', function(context) {\n var activeProvider = context.active;\n\n element = activeProvider.element.label || activeProvider.element;\n\n // text annotation\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:TextAnnotation')) {\n absoluteElementBBox = canvas.getAbsoluteBBox(element);\n\n gfx = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_1__.create)('g');\n\n var textPathData = pathMap.getScaledPath('TEXT_ANNOTATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: element.height,\n position: {\n mx: 0.0,\n my: 0.0\n }\n });\n\n var path = self.path = (0,tiny_svg__WEBPACK_IMPORTED_MODULE_1__.create)('path');\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_1__.attr)(path, {\n d: textPathData,\n strokeWidth: 2,\n stroke: getStrokeColor(element)\n });\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_1__.append)(gfx, path);\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_1__.append)(defaultLayer, gfx);\n\n (0,diagram_js_lib_util_SvgTransformUtil__WEBPACK_IMPORTED_MODULE_2__.translate)(gfx, element.x, element.y);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:TextAnnotation') ||\n element.labelTarget) {\n canvas.addMarker(element, MARKER_HIDDEN);\n } else if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Task') ||\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:CallActivity') ||\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:SubProcess') ||\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Participant')) {\n canvas.addMarker(element, MARKER_LABEL_HIDDEN);\n }\n });\n\n eventBus.on('directEditing.resize', function(context) {\n\n // text annotation\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:TextAnnotation')) {\n var height = context.height,\n dy = context.dy;\n\n var newElementHeight = Math.max(element.height / absoluteElementBBox.height * (height + dy), 0);\n\n var textPathData = pathMap.getScaledPath('TEXT_ANNOTATION', {\n xScaleFactor: 1,\n yScaleFactor: 1,\n containerWidth: element.width,\n containerHeight: newElementHeight,\n position: {\n mx: 0.0,\n my: 0.0\n }\n });\n\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_1__.attr)(self.path, {\n d: textPathData\n });\n }\n });\n\n eventBus.on([ 'directEditing.complete', 'directEditing.cancel' ], function(context) {\n var activeProvider = context.active;\n\n if (activeProvider) {\n canvas.removeMarker(activeProvider.element.label || activeProvider.element, MARKER_HIDDEN);\n canvas.removeMarker(element, MARKER_LABEL_HIDDEN);\n }\n\n element = undefined;\n absoluteElementBBox = undefined;\n\n if (gfx) {\n (0,tiny_svg__WEBPACK_IMPORTED_MODULE_1__.remove)(gfx);\n\n gfx = undefined;\n }\n });\n}\n\nLabelEditingPreview.$inject = [\n 'eventBus',\n 'canvas',\n 'pathMap'\n];\n\n\n// helpers //////////\n\nfunction getStrokeColor(element, defaultColor) {\n var di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi)(element);\n\n return di.get('stroke') || defaultColor || 'black';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsRWRpdGluZ1ByZXZpZXcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUtrQjs7QUFLWTs7QUFJZ0I7O0FBRTlDO0FBQ0EsYUFBYSw4Q0FBOEM7QUFDM0QsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSxzQ0FBc0M7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCO0FBQ2U7O0FBRWY7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFFBQVEsbURBQUU7QUFDVjs7QUFFQSxZQUFZLGdEQUFTOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQLDZCQUE2QixnREFBUzs7QUFFdEMsTUFBTSw4Q0FBTztBQUNiO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVAsTUFBTSxnREFBUzs7QUFFZixNQUFNLGdEQUFTOztBQUVmLE1BQU0sK0VBQVM7QUFDZjs7QUFFQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQTtBQUNBLE1BQU0sU0FBUyxtREFBRTtBQUNqQixlQUFlLG1EQUFFO0FBQ2pCLGVBQWUsbURBQUU7QUFDakIsZUFBZSxtREFBRTtBQUNqQjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBLFFBQVEsbURBQUU7QUFDVjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVAsTUFBTSw4Q0FBTztBQUNiO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLGdEQUFTOztBQUVmO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQSxXQUFXLHNEQUFLOztBQUVoQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbGFiZWwtZWRpdGluZy9MYWJlbEVkaXRpbmdQcmV2aWV3LmpzP2Q3YTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kIGFzIHN2Z0FwcGVuZCxcbiAgYXR0ciBhcyBzdmdBdHRyLFxuICBjcmVhdGUgYXMgc3ZnQ3JlYXRlLFxuICByZW1vdmUgYXMgc3ZnUmVtb3ZlXG59IGZyb20gJ3Rpbnktc3ZnJztcblxuaW1wb3J0IHtcbiAgZ2V0RGksXG4gIGlzXG59IGZyb20gJy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgdHJhbnNsYXRlXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvU3ZnVHJhbnNmb3JtVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9DYW52YXMnKS5kZWZhdWx0fSBDYW52YXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vZHJhdy9QYXRoTWFwJykuZGVmYXVsdH0gUGF0aE1hcFxuICovXG5cbnZhciBNQVJLRVJfSElEREVOID0gJ2Rqcy1lbGVtZW50LWhpZGRlbicsXG4gICAgTUFSS0VSX0xBQkVMX0hJRERFTiA9ICdkanMtbGFiZWwtaGlkZGVuJztcblxuLyoqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtQYXRoTWFwfSBwYXRoTWFwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsRWRpdGluZ1ByZXZpZXcoZXZlbnRCdXMsIGNhbnZhcywgcGF0aE1hcCkge1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgZGVmYXVsdExheWVyID0gY2FudmFzLmdldERlZmF1bHRMYXllcigpO1xuXG4gIHZhciBlbGVtZW50LCBhYnNvbHV0ZUVsZW1lbnRCQm94LCBnZng7XG5cbiAgZXZlbnRCdXMub24oJ2RpcmVjdEVkaXRpbmcuYWN0aXZhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGFjdGl2ZVByb3ZpZGVyID0gY29udGV4dC5hY3RpdmU7XG5cbiAgICBlbGVtZW50ID0gYWN0aXZlUHJvdmlkZXIuZWxlbWVudC5sYWJlbCB8fCBhY3RpdmVQcm92aWRlci5lbGVtZW50O1xuXG4gICAgLy8gdGV4dCBhbm5vdGF0aW9uXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgIGFic29sdXRlRWxlbWVudEJCb3ggPSBjYW52YXMuZ2V0QWJzb2x1dGVCQm94KGVsZW1lbnQpO1xuXG4gICAgICBnZnggPSBzdmdDcmVhdGUoJ2cnKTtcblxuICAgICAgdmFyIHRleHRQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEVYVF9BTk5PVEFUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbXg6IDAuMCxcbiAgICAgICAgICBteTogMC4wXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcGF0aCA9IHNlbGYucGF0aCA9IHN2Z0NyZWF0ZSgncGF0aCcpO1xuXG4gICAgICBzdmdBdHRyKHBhdGgsIHtcbiAgICAgICAgZDogdGV4dFBhdGhEYXRhLFxuICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgc3Ryb2tlOiBnZXRTdHJva2VDb2xvcihlbGVtZW50KVxuICAgICAgfSk7XG5cbiAgICAgIHN2Z0FwcGVuZChnZngsIHBhdGgpO1xuXG4gICAgICBzdmdBcHBlbmQoZGVmYXVsdExheWVyLCBnZngpO1xuXG4gICAgICB0cmFuc2xhdGUoZ2Z4LCBlbGVtZW50LngsIGVsZW1lbnQueSk7XG4gICAgfVxuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykgfHxcbiAgICAgICAgZWxlbWVudC5sYWJlbFRhcmdldCkge1xuICAgICAgY2FudmFzLmFkZE1hcmtlcihlbGVtZW50LCBNQVJLRVJfSElEREVOKTtcbiAgICB9IGVsc2UgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRhc2snKSB8fFxuICAgICAgICAgICAgICAgaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5JykgfHxcbiAgICAgICAgICAgICAgIGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSB8fFxuICAgICAgICAgICAgICAgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgY2FudmFzLmFkZE1hcmtlcihlbGVtZW50LCBNQVJLRVJfTEFCRUxfSElEREVOKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdkaXJlY3RFZGl0aW5nLnJlc2l6ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIC8vIHRleHQgYW5ub3RhdGlvblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICB2YXIgaGVpZ2h0ID0gY29udGV4dC5oZWlnaHQsXG4gICAgICAgICAgZHkgPSBjb250ZXh0LmR5O1xuXG4gICAgICB2YXIgbmV3RWxlbWVudEhlaWdodCA9IE1hdGgubWF4KGVsZW1lbnQuaGVpZ2h0IC8gYWJzb2x1dGVFbGVtZW50QkJveC5oZWlnaHQgKiAoaGVpZ2h0ICsgZHkpLCAwKTtcblxuICAgICAgdmFyIHRleHRQYXRoRGF0YSA9IHBhdGhNYXAuZ2V0U2NhbGVkUGF0aCgnVEVYVF9BTk5PVEFUSU9OJywge1xuICAgICAgICB4U2NhbGVGYWN0b3I6IDEsXG4gICAgICAgIHlTY2FsZUZhY3RvcjogMSxcbiAgICAgICAgY29udGFpbmVyV2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGNvbnRhaW5lckhlaWdodDogbmV3RWxlbWVudEhlaWdodCxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBteDogMC4wLFxuICAgICAgICAgIG15OiAwLjBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHN2Z0F0dHIoc2VsZi5wYXRoLCB7XG4gICAgICAgIGQ6IHRleHRQYXRoRGF0YVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBldmVudEJ1cy5vbihbICdkaXJlY3RFZGl0aW5nLmNvbXBsZXRlJywgJ2RpcmVjdEVkaXRpbmcuY2FuY2VsJyBdLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGFjdGl2ZVByb3ZpZGVyID0gY29udGV4dC5hY3RpdmU7XG5cbiAgICBpZiAoYWN0aXZlUHJvdmlkZXIpIHtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoYWN0aXZlUHJvdmlkZXIuZWxlbWVudC5sYWJlbCB8fCBhY3RpdmVQcm92aWRlci5lbGVtZW50LCBNQVJLRVJfSElEREVOKTtcbiAgICAgIGNhbnZhcy5yZW1vdmVNYXJrZXIoZWxlbWVudCwgTUFSS0VSX0xBQkVMX0hJRERFTik7XG4gICAgfVxuXG4gICAgZWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICBhYnNvbHV0ZUVsZW1lbnRCQm94ID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGdmeCkge1xuICAgICAgc3ZnUmVtb3ZlKGdmeCk7XG5cbiAgICAgIGdmeCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0pO1xufVxuXG5MYWJlbEVkaXRpbmdQcmV2aWV3LiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdjYW52YXMnLFxuICAncGF0aE1hcCdcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFN0cm9rZUNvbG9yKGVsZW1lbnQsIGRlZmF1bHRDb2xvcikge1xuICB2YXIgZGkgPSBnZXREaShlbGVtZW50KTtcblxuICByZXR1cm4gZGkuZ2V0KCdzdHJva2UnKSB8fCBkZWZhdWx0Q29sb3IgfHwgJ2JsYWNrJztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/LabelEditingPreview.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/LabelEditingProvider.js":
/*!**************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/LabelEditingProvider.js ***!
\**************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LabelEditingProvider)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var _modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modeling/util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../modeling/BpmnFactory').default} BpmnFactory\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('diagram-js-direct-editing/lib/DirectEditing').default} DirectEditing\n * @typedef {import('../modeling/Modeling').default} Modeling\n * @typedef {import('diagram-js/lib/features/resize/ResizeHandles').default} ResizeHandles\n * @typedef {import('../../draw/TextRenderer').default} TextRenderer\n *\n * @typedef {import('../../model/Types').Element} Element\n *\n * @typedef { {\n * bounds: {\n * x: number;\n * y: number;\n * width: number;\n * height: number;\n * minWidth?: number;\n * minHeight?: number;\n * };\n * style: Object;\n * } } DirectEditingContext\n */\n\nvar HIGH_PRIORITY = 2000;\n\n/**\n * @param {EventBus} eventBus\n * @param {BpmnFactory} bpmnFactory\n * @param {Canvas} canvas\n * @param {DirectEditing} directEditing\n * @param {Modeling} modeling\n * @param {ResizeHandles} resizeHandles\n * @param {TextRenderer} textRenderer\n */\nfunction LabelEditingProvider(\n eventBus, bpmnFactory, canvas, directEditing,\n modeling, resizeHandles, textRenderer) {\n\n this._bpmnFactory = bpmnFactory;\n this._canvas = canvas;\n this._modeling = modeling;\n this._textRenderer = textRenderer;\n\n directEditing.registerProvider(this);\n\n // listen to dblclick on non-root elements\n eventBus.on('element.dblclick', function(event) {\n activateDirectEdit(event.element, true);\n });\n\n // complete on followup canvas operation\n eventBus.on([\n 'autoPlace.start',\n 'canvas.viewbox.changing',\n 'drag.init',\n 'element.mousedown',\n 'popupMenu.open',\n 'root.set',\n 'selection.changed'\n ], function() {\n if (directEditing.isActive()) {\n directEditing.complete();\n }\n });\n\n eventBus.on([\n 'shape.remove',\n 'connection.remove'\n ], HIGH_PRIORITY, function(event) {\n\n if (directEditing.isActive(event.element)) {\n directEditing.cancel();\n }\n });\n\n // cancel on command stack changes\n eventBus.on([ 'commandStack.changed' ], function(e) {\n if (directEditing.isActive()) {\n directEditing.cancel();\n }\n });\n\n\n eventBus.on('directEditing.activate', function(event) {\n resizeHandles.removeResizers();\n });\n\n eventBus.on('create.end', 500, function(event) {\n\n var context = event.context,\n element = context.shape,\n canExecute = event.context.canExecute,\n isTouch = event.isTouch;\n\n // TODO(nikku): we need to find a way to support the\n // direct editing on mobile devices; right now this will\n // break for desworkflowediting on mobile devices\n // as it breaks the user interaction workflow\n\n // TODO(nikku): we should temporarily focus the edited element\n // here and release the focused viewport after the direct edit\n // operation is finished\n if (isTouch) {\n return;\n }\n\n if (!canExecute) {\n return;\n }\n\n if (context.hints && context.hints.createElementsBehavior === false) {\n return;\n }\n\n activateDirectEdit(element);\n });\n\n eventBus.on('autoPlace.end', 500, function(event) {\n activateDirectEdit(event.shape);\n });\n\n\n function activateDirectEdit(element, force) {\n if (force ||\n (0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(element, [ 'bpmn:Task', 'bpmn:TextAnnotation', 'bpmn:Participant' ]) ||\n isCollapsedSubProcess(element)) {\n\n directEditing.activate(element);\n }\n }\n\n}\n\nLabelEditingProvider.$inject = [\n 'eventBus',\n 'bpmnFactory',\n 'canvas',\n 'directEditing',\n 'modeling',\n 'resizeHandles',\n 'textRenderer'\n];\n\n\n/**\n * Activate direct editing for activities and text annotations.\n *\n * @param {Element} element\n *\n * @return { {\n * text: string;\n * options?: {\n * autoResize?: boolean;\n * centerVertically?: boolean;\n * resizable?: boolean;\n * }\n * } & DirectEditingContext }\n */\nLabelEditingProvider.prototype.activate = function(element) {\n\n // text\n var text = (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.getLabel)(element);\n\n if (text === undefined) {\n return;\n }\n\n var context = {\n text: text\n };\n\n // bounds\n var bounds = this.getEditingBBox(element);\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(context, bounds);\n\n var options = {};\n\n // tasks\n if (\n (0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(element, [\n 'bpmn:Task',\n 'bpmn:Participant',\n 'bpmn:Lane',\n 'bpmn:CallActivity'\n ]) ||\n isCollapsedSubProcess(element)\n ) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(options, {\n centerVertically: true\n });\n }\n\n // external labels\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.isLabelExternal)(element)) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(options, {\n autoResize: true\n });\n }\n\n // text annotations\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:TextAnnotation')) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(options, {\n resizable: true,\n autoResize: true\n });\n }\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(context, {\n options: options\n });\n\n return context;\n};\n\n\n/**\n * Get the editing bounding box based on the element's size and position.\n *\n * @param {Element} element\n *\n * @return {DirectEditingContext}\n */\nLabelEditingProvider.prototype.getEditingBBox = function(element) {\n var canvas = this._canvas;\n\n var target = element.label || element;\n\n var bbox = canvas.getAbsoluteBBox(target);\n\n var mid = {\n x: bbox.x + bbox.width / 2,\n y: bbox.y + bbox.height / 2\n };\n\n // default position\n var bounds = { x: bbox.x, y: bbox.y };\n\n var zoom = canvas.zoom();\n\n var defaultStyle = this._textRenderer.getDefaultStyle(),\n externalStyle = this._textRenderer.getExternalStyle();\n\n // take zoom into account\n var externalFontSize = externalStyle.fontSize * zoom,\n externalLineHeight = externalStyle.lineHeight,\n defaultFontSize = defaultStyle.fontSize * zoom,\n defaultLineHeight = defaultStyle.lineHeight;\n\n var style = {\n fontFamily: this._textRenderer.getDefaultStyle().fontFamily,\n fontWeight: this._textRenderer.getDefaultStyle().fontWeight\n };\n\n // adjust for expanded pools AND lanes\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Lane') || isExpandedPool(element)) {\n var isHorizontalLane = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isHorizontal)(element);\n\n var laneBounds = isHorizontalLane ? {\n width: bbox.height,\n height: 30 * zoom,\n x: bbox.x - bbox.height / 2 + (15 * zoom),\n y: mid.y - (30 * zoom) / 2\n } : {\n width: bbox.width,\n height: 30 * zoom\n };\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(bounds, laneBounds);\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(style, {\n fontSize: defaultFontSize + 'px',\n lineHeight: defaultLineHeight,\n paddingTop: (7 * zoom) + 'px',\n paddingBottom: (7 * zoom) + 'px',\n paddingLeft: (5 * zoom) + 'px',\n paddingRight: (5 * zoom) + 'px',\n transform: isHorizontalLane ? 'rotate(-90deg)' : null\n });\n }\n\n\n // internal labels for collapsed participants\n if (isCollapsedPool(element)) {\n var isHorizontalPool = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isHorizontal)(element);\n\n var poolBounds = isHorizontalPool ? {\n width: bbox.width,\n height: bbox.height\n } : {\n width: bbox.height,\n height: bbox.width,\n x: mid.x - bbox.height / 2,\n y: mid.y - bbox.width / 2\n };\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(bounds, poolBounds);\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(style, {\n fontSize: defaultFontSize + 'px',\n lineHeight: defaultLineHeight,\n paddingTop: (7 * zoom) + 'px',\n paddingBottom: (7 * zoom) + 'px',\n paddingLeft: (5 * zoom) + 'px',\n paddingRight: (5 * zoom) + 'px',\n transform: isHorizontalPool ? null : 'rotate(-90deg)'\n });\n }\n\n\n // internal labels for tasks and collapsed call activities\n // and sub processes\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(element, [ 'bpmn:Task', 'bpmn:CallActivity' ]) ||\n isCollapsedSubProcess(element)) {\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(bounds, {\n width: bbox.width,\n height: bbox.height\n });\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(style, {\n fontSize: defaultFontSize + 'px',\n lineHeight: defaultLineHeight,\n paddingTop: (7 * zoom) + 'px',\n paddingBottom: (7 * zoom) + 'px',\n paddingLeft: (5 * zoom) + 'px',\n paddingRight: (5 * zoom) + 'px'\n });\n }\n\n\n // internal labels for expanded sub processes\n if (isExpandedSubProcess(element)) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(bounds, {\n width: bbox.width,\n x: bbox.x\n });\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(style, {\n fontSize: defaultFontSize + 'px',\n lineHeight: defaultLineHeight,\n paddingTop: (7 * zoom) + 'px',\n paddingBottom: (7 * zoom) + 'px',\n paddingLeft: (5 * zoom) + 'px',\n paddingRight: (5 * zoom) + 'px'\n });\n }\n\n var width = 90 * zoom,\n paddingTop = 7 * zoom,\n paddingBottom = 4 * zoom;\n\n // external labels for events, data elements, gateways, groups and connections\n if (target.labelTarget) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(bounds, {\n width: width,\n height: bbox.height + paddingTop + paddingBottom,\n x: mid.x - width / 2,\n y: bbox.y - paddingTop\n });\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(style, {\n fontSize: externalFontSize + 'px',\n lineHeight: externalLineHeight,\n paddingTop: paddingTop + 'px',\n paddingBottom: paddingBottom + 'px'\n });\n }\n\n // external label not yet created\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.isLabelExternal)(target)\n && !(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.hasExternalLabel)(target)\n && !(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_4__.isLabel)(target)) {\n\n var externalLabelMid = (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.getExternalLabelMid)(element);\n\n var absoluteBBox = canvas.getAbsoluteBBox({\n x: externalLabelMid.x,\n y: externalLabelMid.y,\n width: 0,\n height: 0\n });\n\n var height = externalFontSize + paddingTop + paddingBottom;\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(bounds, {\n width: width,\n height: height,\n x: absoluteBBox.x - width / 2,\n y: absoluteBBox.y - height / 2\n });\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(style, {\n fontSize: externalFontSize + 'px',\n lineHeight: externalLineHeight,\n paddingTop: paddingTop + 'px',\n paddingBottom: paddingBottom + 'px'\n });\n }\n\n // text annotations\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:TextAnnotation')) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(bounds, {\n width: bbox.width,\n height: bbox.height,\n minWidth: 30 * zoom,\n minHeight: 10 * zoom\n });\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(style, {\n textAlign: 'left',\n paddingTop: (5 * zoom) + 'px',\n paddingBottom: (7 * zoom) + 'px',\n paddingLeft: (7 * zoom) + 'px',\n paddingRight: (5 * zoom) + 'px',\n fontSize: defaultFontSize + 'px',\n lineHeight: defaultLineHeight\n });\n }\n\n return { bounds: bounds, style: style };\n};\n\n\nLabelEditingProvider.prototype.update = function(\n element, newLabel,\n activeContextText, bounds) {\n\n var newBounds,\n bbox;\n\n if ((0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:TextAnnotation')) {\n\n bbox = this._canvas.getAbsoluteBBox(element);\n\n newBounds = {\n x: element.x,\n y: element.y,\n width: element.width / bbox.width * bounds.width,\n height: element.height / bbox.height * bounds.height\n };\n }\n\n if (isEmptyText(newLabel)) {\n newLabel = null;\n }\n\n this._modeling.updateLabel(element, newLabel, newBounds);\n};\n\n\n\n// helpers //////////\n\nfunction isCollapsedSubProcess(element) {\n return (0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:SubProcess') && !(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isExpanded)(element);\n}\n\nfunction isExpandedSubProcess(element) {\n return (0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:SubProcess') && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isExpanded)(element);\n}\n\nfunction isCollapsedPool(element) {\n return (0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Participant') && !(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isExpanded)(element);\n}\n\nfunction isExpandedPool(element) {\n return (0,_modeling_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Participant') && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isExpanded)(element);\n}\n\nfunction isEmptyText(label) {\n return !label || !label.trim();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsRWRpdGluZ1Byb3ZpZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVrQjs7QUFJWTs7QUFJQTs7QUFFd0I7O0FBSzNCOztBQU9HOztBQUU5QjtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsMkNBQTJDO0FBQ3hELGFBQWEsOENBQThDO0FBQzNELGFBQWEsK0RBQStEO0FBQzVFLGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEsZ0VBQWdFO0FBQzdFLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsZUFBZTtBQUMxQixXQUFXLFVBQVU7QUFDckIsV0FBVyxlQUFlO0FBQzFCLFdBQVcsY0FBYztBQUN6QjtBQUNlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEsV0FBVztBQUNYOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxNQUFNLCtEQUFFOztBQUVSOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7O0FBSUE7O0FBRUE7QUFDQSxTQUFTLCtEQUFFLGlDQUFpQyx3REFBVTtBQUN0RDs7QUFFQTtBQUNBLFNBQVMsK0RBQUUsZ0NBQWdDLHdEQUFVO0FBQ3JEOztBQUVBO0FBQ0EsU0FBUywrREFBRSxrQ0FBa0Msd0RBQVU7QUFDdkQ7O0FBRUE7QUFDQSxTQUFTLCtEQUFFLGlDQUFpQyx3REFBVTtBQUN0RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsRWRpdGluZ1Byb3ZpZGVyLmpzP2I2M2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxcbn0gZnJvbSAnLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzQW55IH0gZnJvbSAnLi4vbW9kZWxpbmcvdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkLFxuICBpc0hvcml6b250YWxcbn0gZnJvbSAnLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRFeHRlcm5hbExhYmVsTWlkLFxuICBpc0xhYmVsRXh0ZXJuYWwsXG4gIGhhc0V4dGVybmFsTGFiZWwsXG4gIGlzTGFiZWxcbn0gZnJvbSAnLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vbW9kZWxpbmcvQnBtbkZhY3RvcnknKS5kZWZhdWx0fSBCcG1uRmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9DYW52YXMnKS5kZWZhdWx0fSBDYW52YXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcvbGliL0RpcmVjdEVkaXRpbmcnKS5kZWZhdWx0fSBEaXJlY3RFZGl0aW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9tb2RlbGluZy9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9yZXNpemUvUmVzaXplSGFuZGxlcycpLmRlZmF1bHR9IFJlc2l6ZUhhbmRsZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL2RyYXcvVGV4dFJlbmRlcmVyJykuZGVmYXVsdH0gVGV4dFJlbmRlcmVyXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIGJvdW5kczoge1xuICogICAgIHg6IG51bWJlcjtcbiAqICAgICB5OiBudW1iZXI7XG4gKiAgICAgd2lkdGg6IG51bWJlcjtcbiAqICAgICBoZWlnaHQ6IG51bWJlcjtcbiAqICAgICBtaW5XaWR0aD86IG51bWJlcjtcbiAqICAgICBtaW5IZWlnaHQ/OiBudW1iZXI7XG4gKiAgIH07XG4gKiAgIHN0eWxlOiBPYmplY3Q7XG4gKiB9IH0gRGlyZWN0RWRpdGluZ0NvbnRleHRcbiAqL1xuXG52YXIgSElHSF9QUklPUklUWSA9IDIwMDA7XG5cbi8qKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0RpcmVjdEVkaXRpbmd9IGRpcmVjdEVkaXRpbmdcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1Jlc2l6ZUhhbmRsZXN9IHJlc2l6ZUhhbmRsZXNcbiAqIEBwYXJhbSB7VGV4dFJlbmRlcmVyfSB0ZXh0UmVuZGVyZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGFiZWxFZGl0aW5nUHJvdmlkZXIoXG4gICAgZXZlbnRCdXMsIGJwbW5GYWN0b3J5LCBjYW52YXMsIGRpcmVjdEVkaXRpbmcsXG4gICAgbW9kZWxpbmcsIHJlc2l6ZUhhbmRsZXMsIHRleHRSZW5kZXJlcikge1xuXG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fdGV4dFJlbmRlcmVyID0gdGV4dFJlbmRlcmVyO1xuXG4gIGRpcmVjdEVkaXRpbmcucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcblxuICAvLyBsaXN0ZW4gdG8gZGJsY2xpY2sgb24gbm9uLXJvb3QgZWxlbWVudHNcbiAgZXZlbnRCdXMub24oJ2VsZW1lbnQuZGJsY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgIGFjdGl2YXRlRGlyZWN0RWRpdChldmVudC5lbGVtZW50LCB0cnVlKTtcbiAgfSk7XG5cbiAgLy8gY29tcGxldGUgb24gZm9sbG93dXAgY2FudmFzIG9wZXJhdGlvblxuICBldmVudEJ1cy5vbihbXG4gICAgJ2F1dG9QbGFjZS5zdGFydCcsXG4gICAgJ2NhbnZhcy52aWV3Ym94LmNoYW5naW5nJyxcbiAgICAnZHJhZy5pbml0JyxcbiAgICAnZWxlbWVudC5tb3VzZWRvd24nLFxuICAgICdwb3B1cE1lbnUub3BlbicsXG4gICAgJ3Jvb3Quc2V0JyxcbiAgICAnc2VsZWN0aW9uLmNoYW5nZWQnXG4gIF0sIGZ1bmN0aW9uKCkge1xuICAgIGlmIChkaXJlY3RFZGl0aW5nLmlzQWN0aXZlKCkpIHtcbiAgICAgIGRpcmVjdEVkaXRpbmcuY29tcGxldGUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnc2hhcGUucmVtb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5yZW1vdmUnXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICBpZiAoZGlyZWN0RWRpdGluZy5pc0FjdGl2ZShldmVudC5lbGVtZW50KSkge1xuICAgICAgZGlyZWN0RWRpdGluZy5jYW5jZWwoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNhbmNlbCBvbiBjb21tYW5kIHN0YWNrIGNoYW5nZXNcbiAgZXZlbnRCdXMub24oWyAnY29tbWFuZFN0YWNrLmNoYW5nZWQnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoZGlyZWN0RWRpdGluZy5pc0FjdGl2ZSgpKSB7XG4gICAgICBkaXJlY3RFZGl0aW5nLmNhbmNlbCgpO1xuICAgIH1cbiAgfSk7XG5cblxuICBldmVudEJ1cy5vbignZGlyZWN0RWRpdGluZy5hY3RpdmF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmVzaXplSGFuZGxlcy5yZW1vdmVSZXNpemVycygpO1xuICB9KTtcblxuICBldmVudEJ1cy5vbignY3JlYXRlLmVuZCcsIDUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBldmVudC5jb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIGlzVG91Y2ggPSBldmVudC5pc1RvdWNoO1xuXG4gICAgLy8gVE9ETyhuaWtrdSk6IHdlIG5lZWQgdG8gZmluZCBhIHdheSB0byBzdXBwb3J0IHRoZVxuICAgIC8vIGRpcmVjdCBlZGl0aW5nIG9uIG1vYmlsZSBkZXZpY2VzOyByaWdodCBub3cgdGhpcyB3aWxsXG4gICAgLy8gYnJlYWsgZm9yIGRlc3dvcmtmbG93ZWRpdGluZyBvbiBtb2JpbGUgZGV2aWNlc1xuICAgIC8vIGFzIGl0IGJyZWFrcyB0aGUgdXNlciBpbnRlcmFjdGlvbiB3b3JrZmxvd1xuXG4gICAgLy8gVE9ETyhuaWtrdSk6IHdlIHNob3VsZCB0ZW1wb3JhcmlseSBmb2N1cyB0aGUgZWRpdGVkIGVsZW1lbnRcbiAgICAvLyBoZXJlIGFuZCByZWxlYXNlIHRoZSBmb2N1c2VkIHZpZXdwb3J0IGFmdGVyIHRoZSBkaXJlY3QgZWRpdFxuICAgIC8vIG9wZXJhdGlvbiBpcyBmaW5pc2hlZFxuICAgIGlmIChpc1RvdWNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjYW5FeGVjdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuaGludHMgJiYgY29udGV4dC5oaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFjdGl2YXRlRGlyZWN0RWRpdChlbGVtZW50KTtcbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2F1dG9QbGFjZS5lbmQnLCA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgYWN0aXZhdGVEaXJlY3RFZGl0KGV2ZW50LnNoYXBlKTtcbiAgfSk7XG5cblxuICBmdW5jdGlvbiBhY3RpdmF0ZURpcmVjdEVkaXQoZWxlbWVudCwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UgfHxcbiAgICAgICAgaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpUYXNrJywgJ2JwbW46VGV4dEFubm90YXRpb24nLCAnYnBtbjpQYXJ0aWNpcGFudCcgXSkgfHxcbiAgICAgICAgaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG5cbiAgICAgIGRpcmVjdEVkaXRpbmcuYWN0aXZhdGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbn1cblxuTGFiZWxFZGl0aW5nUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2NhbnZhcycsXG4gICdkaXJlY3RFZGl0aW5nJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3Jlc2l6ZUhhbmRsZXMnLFxuICAndGV4dFJlbmRlcmVyJ1xuXTtcblxuXG4vKipcbiAqIEFjdGl2YXRlIGRpcmVjdCBlZGl0aW5nIGZvciBhY3Rpdml0aWVzIGFuZCB0ZXh0IGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4geyB7XG4gKiAgIHRleHQ6IHN0cmluZztcbiAqICAgb3B0aW9ucz86IHtcbiAqICAgICBhdXRvUmVzaXplPzogYm9vbGVhbjtcbiAqICAgICBjZW50ZXJWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAqICAgICByZXNpemFibGU/OiBib29sZWFuO1xuICogICB9XG4gKiB9ICYgRGlyZWN0RWRpdGluZ0NvbnRleHQgfVxuICovXG5MYWJlbEVkaXRpbmdQcm92aWRlci5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgLy8gdGV4dFxuICB2YXIgdGV4dCA9IGdldExhYmVsKGVsZW1lbnQpO1xuXG4gIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY29udGV4dCA9IHtcbiAgICB0ZXh0OiB0ZXh0XG4gIH07XG5cbiAgLy8gYm91bmRzXG4gIHZhciBib3VuZHMgPSB0aGlzLmdldEVkaXRpbmdCQm94KGVsZW1lbnQpO1xuXG4gIGFzc2lnbihjb250ZXh0LCBib3VuZHMpO1xuXG4gIHZhciBvcHRpb25zID0ge307XG5cbiAgLy8gdGFza3NcbiAgaWYgKFxuICAgIGlzQW55KGVsZW1lbnQsIFtcbiAgICAgICdicG1uOlRhc2snLFxuICAgICAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgJ2JwbW46TGFuZScsXG4gICAgICAnYnBtbjpDYWxsQWN0aXZpdHknXG4gICAgXSkgfHxcbiAgICBpc0NvbGxhcHNlZFN1YlByb2Nlc3MoZWxlbWVudClcbiAgKSB7XG4gICAgYXNzaWduKG9wdGlvbnMsIHtcbiAgICAgIGNlbnRlclZlcnRpY2FsbHk6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGV4dGVybmFsIGxhYmVsc1xuICBpZiAoaXNMYWJlbEV4dGVybmFsKGVsZW1lbnQpKSB7XG4gICAgYXNzaWduKG9wdGlvbnMsIHtcbiAgICAgIGF1dG9SZXNpemU6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRleHQgYW5ub3RhdGlvbnNcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICBhc3NpZ24ob3B0aW9ucywge1xuICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgYXNzaWduKGNvbnRleHQsIHtcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH0pO1xuXG4gIHJldHVybiBjb250ZXh0O1xufTtcblxuXG4vKipcbiAqIEdldCB0aGUgZWRpdGluZyBib3VuZGluZyBib3ggYmFzZWQgb24gdGhlIGVsZW1lbnQncyBzaXplIGFuZCBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtEaXJlY3RFZGl0aW5nQ29udGV4dH1cbiAqL1xuTGFiZWxFZGl0aW5nUHJvdmlkZXIucHJvdG90eXBlLmdldEVkaXRpbmdCQm94ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciB0YXJnZXQgPSBlbGVtZW50LmxhYmVsIHx8IGVsZW1lbnQ7XG5cbiAgdmFyIGJib3ggPSBjYW52YXMuZ2V0QWJzb2x1dGVCQm94KHRhcmdldCk7XG5cbiAgdmFyIG1pZCA9IHtcbiAgICB4OiBiYm94LnggKyBiYm94LndpZHRoIC8gMixcbiAgICB5OiBiYm94LnkgKyBiYm94LmhlaWdodCAvIDJcbiAgfTtcblxuICAvLyBkZWZhdWx0IHBvc2l0aW9uXG4gIHZhciBib3VuZHMgPSB7IHg6IGJib3gueCwgeTogYmJveC55IH07XG5cbiAgdmFyIHpvb20gPSBjYW52YXMuem9vbSgpO1xuXG4gIHZhciBkZWZhdWx0U3R5bGUgPSB0aGlzLl90ZXh0UmVuZGVyZXIuZ2V0RGVmYXVsdFN0eWxlKCksXG4gICAgICBleHRlcm5hbFN0eWxlID0gdGhpcy5fdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsU3R5bGUoKTtcblxuICAvLyB0YWtlIHpvb20gaW50byBhY2NvdW50XG4gIHZhciBleHRlcm5hbEZvbnRTaXplID0gZXh0ZXJuYWxTdHlsZS5mb250U2l6ZSAqIHpvb20sXG4gICAgICBleHRlcm5hbExpbmVIZWlnaHQgPSBleHRlcm5hbFN0eWxlLmxpbmVIZWlnaHQsXG4gICAgICBkZWZhdWx0Rm9udFNpemUgPSBkZWZhdWx0U3R5bGUuZm9udFNpemUgKiB6b29tLFxuICAgICAgZGVmYXVsdExpbmVIZWlnaHQgPSBkZWZhdWx0U3R5bGUubGluZUhlaWdodDtcblxuICB2YXIgc3R5bGUgPSB7XG4gICAgZm9udEZhbWlseTogdGhpcy5fdGV4dFJlbmRlcmVyLmdldERlZmF1bHRTdHlsZSgpLmZvbnRGYW1pbHksXG4gICAgZm9udFdlaWdodDogdGhpcy5fdGV4dFJlbmRlcmVyLmdldERlZmF1bHRTdHlsZSgpLmZvbnRXZWlnaHRcbiAgfTtcblxuICAvLyBhZGp1c3QgZm9yIGV4cGFuZGVkIHBvb2xzIEFORCBsYW5lc1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46TGFuZScpIHx8IGlzRXhwYW5kZWRQb29sKGVsZW1lbnQpKSB7XG4gICAgdmFyIGlzSG9yaXpvbnRhbExhbmUgPSBpc0hvcml6b250YWwoZWxlbWVudCk7XG5cbiAgICB2YXIgbGFuZUJvdW5kcyA9IGlzSG9yaXpvbnRhbExhbmUgPyB7XG4gICAgICB3aWR0aDogYmJveC5oZWlnaHQsXG4gICAgICBoZWlnaHQ6IDMwICogem9vbSxcbiAgICAgIHg6IGJib3gueCAtIGJib3guaGVpZ2h0IC8gMiArICgxNSAqIHpvb20pLFxuICAgICAgeTogbWlkLnkgLSAoMzAgKiB6b29tKSAvIDJcbiAgICB9IDoge1xuICAgICAgd2lkdGg6IGJib3gud2lkdGgsXG4gICAgICBoZWlnaHQ6IDMwICogem9vbVxuICAgIH07XG5cbiAgICBhc3NpZ24oYm91bmRzLCBsYW5lQm91bmRzKTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgdHJhbnNmb3JtOiBpc0hvcml6b250YWxMYW5lID8gJ3JvdGF0ZSgtOTBkZWcpJyA6IG51bGxcbiAgICB9KTtcbiAgfVxuXG5cbiAgLy8gaW50ZXJuYWwgbGFiZWxzIGZvciBjb2xsYXBzZWQgcGFydGljaXBhbnRzXG4gIGlmIChpc0NvbGxhcHNlZFBvb2woZWxlbWVudCkpIHtcbiAgICB2YXIgaXNIb3Jpem9udGFsUG9vbCA9IGlzSG9yaXpvbnRhbChlbGVtZW50KTtcblxuICAgIHZhciBwb29sQm91bmRzID0gaXNIb3Jpem9udGFsUG9vbCA/IHtcbiAgICAgIHdpZHRoOiBiYm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiBiYm94LmhlaWdodFxuICAgIH0gOiB7XG4gICAgICB3aWR0aDogYmJveC5oZWlnaHQsXG4gICAgICBoZWlnaHQ6IGJib3gud2lkdGgsXG4gICAgICB4OiBtaWQueCAtIGJib3guaGVpZ2h0IC8gMixcbiAgICAgIHk6IG1pZC55IC0gYmJveC53aWR0aCAvIDJcbiAgICB9O1xuXG4gICAgYXNzaWduKGJvdW5kcywgcG9vbEJvdW5kcyk7XG5cbiAgICBhc3NpZ24oc3R5bGUsIHtcbiAgICAgIGZvbnRTaXplOiBkZWZhdWx0Rm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZGVmYXVsdExpbmVIZWlnaHQsXG4gICAgICBwYWRkaW5nVG9wOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdCb3R0b206ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0xlZnQ6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHRyYW5zZm9ybTogaXNIb3Jpem9udGFsUG9vbCA/IG51bGwgOiAncm90YXRlKC05MGRlZyknXG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIGludGVybmFsIGxhYmVscyBmb3IgdGFza3MgYW5kIGNvbGxhcHNlZCBjYWxsIGFjdGl2aXRpZXNcbiAgLy8gYW5kIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzQW55KGVsZW1lbnQsIFsgJ2JwbW46VGFzaycsICdicG1uOkNhbGxBY3Rpdml0eScgXSkgfHxcbiAgICAgIGlzQ29sbGFwc2VkU3ViUHJvY2VzcyhlbGVtZW50KSkge1xuXG4gICAgYXNzaWduKGJvdW5kcywge1xuICAgICAgd2lkdGg6IGJib3gud2lkdGgsXG4gICAgICBoZWlnaHQ6IGJib3guaGVpZ2h0XG4gICAgfSk7XG5cbiAgICBhc3NpZ24oc3R5bGUsIHtcbiAgICAgIGZvbnRTaXplOiBkZWZhdWx0Rm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZGVmYXVsdExpbmVIZWlnaHQsXG4gICAgICBwYWRkaW5nVG9wOiAoNyAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdCb3R0b206ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0xlZnQ6ICg1ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAoNSAqIHpvb20pICsgJ3B4J1xuICAgIH0pO1xuICB9XG5cblxuICAvLyBpbnRlcm5hbCBsYWJlbHMgZm9yIGV4cGFuZGVkIHN1YiBwcm9jZXNzZXNcbiAgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKGVsZW1lbnQpKSB7XG4gICAgYXNzaWduKGJvdW5kcywge1xuICAgICAgd2lkdGg6IGJib3gud2lkdGgsXG4gICAgICB4OiBiYm94LnhcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGRlZmF1bHRGb250U2l6ZSArICdweCcsXG4gICAgICBsaW5lSGVpZ2h0OiBkZWZhdWx0TGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogKDcgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nTGVmdDogKDUgKiB6b29tKSArICdweCcsXG4gICAgICBwYWRkaW5nUmlnaHQ6ICg1ICogem9vbSkgKyAncHgnXG4gICAgfSk7XG4gIH1cblxuICB2YXIgd2lkdGggPSA5MCAqIHpvb20sXG4gICAgICBwYWRkaW5nVG9wID0gNyAqIHpvb20sXG4gICAgICBwYWRkaW5nQm90dG9tID0gNCAqIHpvb207XG5cbiAgLy8gZXh0ZXJuYWwgbGFiZWxzIGZvciBldmVudHMsIGRhdGEgZWxlbWVudHMsIGdhdGV3YXlzLCBncm91cHMgYW5kIGNvbm5lY3Rpb25zXG4gIGlmICh0YXJnZXQubGFiZWxUYXJnZXQpIHtcbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGJib3guaGVpZ2h0ICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20sXG4gICAgICB4OiBtaWQueCAtIHdpZHRoIC8gMixcbiAgICAgIHk6IGJib3gueSAtIHBhZGRpbmdUb3BcbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgZm9udFNpemU6IGV4dGVybmFsRm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZXh0ZXJuYWxMaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcCArICdweCcsXG4gICAgICBwYWRkaW5nQm90dG9tOiBwYWRkaW5nQm90dG9tICsgJ3B4J1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZXh0ZXJuYWwgbGFiZWwgbm90IHlldCBjcmVhdGVkXG4gIGlmIChpc0xhYmVsRXh0ZXJuYWwodGFyZ2V0KVxuICAgICAgJiYgIWhhc0V4dGVybmFsTGFiZWwodGFyZ2V0KVxuICAgICAgJiYgIWlzTGFiZWwodGFyZ2V0KSkge1xuXG4gICAgdmFyIGV4dGVybmFsTGFiZWxNaWQgPSBnZXRFeHRlcm5hbExhYmVsTWlkKGVsZW1lbnQpO1xuXG4gICAgdmFyIGFic29sdXRlQkJveCA9IGNhbnZhcy5nZXRBYnNvbHV0ZUJCb3goe1xuICAgICAgeDogZXh0ZXJuYWxMYWJlbE1pZC54LFxuICAgICAgeTogZXh0ZXJuYWxMYWJlbE1pZC55LFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KTtcblxuICAgIHZhciBoZWlnaHQgPSBleHRlcm5hbEZvbnRTaXplICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b207XG5cbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHg6IGFic29sdXRlQkJveC54IC0gd2lkdGggLyAyLFxuICAgICAgeTogYWJzb2x1dGVCQm94LnkgLSBoZWlnaHQgLyAyXG4gICAgfSk7XG5cbiAgICBhc3NpZ24oc3R5bGUsIHtcbiAgICAgIGZvbnRTaXplOiBleHRlcm5hbEZvbnRTaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IGV4dGVybmFsTGluZUhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3AgKyAncHgnLFxuICAgICAgcGFkZGluZ0JvdHRvbTogcGFkZGluZ0JvdHRvbSArICdweCdcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRleHQgYW5ub3RhdGlvbnNcbiAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICBhc3NpZ24oYm91bmRzLCB7XG4gICAgICB3aWR0aDogYmJveC53aWR0aCxcbiAgICAgIGhlaWdodDogYmJveC5oZWlnaHQsXG4gICAgICBtaW5XaWR0aDogMzAgKiB6b29tLFxuICAgICAgbWluSGVpZ2h0OiAxMCAqIHpvb21cbiAgICB9KTtcblxuICAgIGFzc2lnbihzdHlsZSwge1xuICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICBwYWRkaW5nVG9wOiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIHBhZGRpbmdCb3R0b206ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ0xlZnQ6ICg3ICogem9vbSkgKyAncHgnLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAoNSAqIHpvb20pICsgJ3B4JyxcbiAgICAgIGZvbnRTaXplOiBkZWZhdWx0Rm9udFNpemUgKyAncHgnLFxuICAgICAgbGluZUhlaWdodDogZGVmYXVsdExpbmVIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7IGJvdW5kczogYm91bmRzLCBzdHlsZTogc3R5bGUgfTtcbn07XG5cblxuTGFiZWxFZGl0aW5nUHJvdmlkZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKFxuICAgIGVsZW1lbnQsIG5ld0xhYmVsLFxuICAgIGFjdGl2ZUNvbnRleHRUZXh0LCBib3VuZHMpIHtcblxuICB2YXIgbmV3Qm91bmRzLFxuICAgICAgYmJveDtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuXG4gICAgYmJveCA9IHRoaXMuX2NhbnZhcy5nZXRBYnNvbHV0ZUJCb3goZWxlbWVudCk7XG5cbiAgICBuZXdCb3VuZHMgPSB7XG4gICAgICB4OiBlbGVtZW50LngsXG4gICAgICB5OiBlbGVtZW50LnksXG4gICAgICB3aWR0aDogZWxlbWVudC53aWR0aCAvIGJib3gud2lkdGggKiBib3VuZHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0IC8gYmJveC5oZWlnaHQgKiBib3VuZHMuaGVpZ2h0XG4gICAgfTtcbiAgfVxuXG4gIGlmIChpc0VtcHR5VGV4dChuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IG51bGw7XG4gIH1cblxuICB0aGlzLl9tb2RlbGluZy51cGRhdGVMYWJlbChlbGVtZW50LCBuZXdMYWJlbCwgbmV3Qm91bmRzKTtcbn07XG5cblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiAhaXNFeHBhbmRlZChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gaXNFeHBhbmRlZFN1YlByb2Nlc3MoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGlzRXhwYW5kZWQoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzQ29sbGFwc2VkUG9vbChlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmICFpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc0V4cGFuZGVkUG9vbChlbGVtZW50KSB7XG4gIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpICYmIGlzRXhwYW5kZWQoZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlUZXh0KGxhYmVsKSB7XG4gIHJldHVybiAhbGFiZWwgfHwgIWxhYmVsLnRyaW0oKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/LabelEditingProvider.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/cmd/UpdateLabelHandler.js":
/*!****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/cmd/UpdateLabelHandler.js ***!
\****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdateLabelHandler)\n/* harmony export */ });\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\nvar NULL_DIMENSIONS = {\n width: 0,\n height: 0\n};\n\n/**\n * @typedef {import('../../modeling/Modeling').default} Modeling\n * @typedef {import('../../../draw/TextRenderer').default} TextRenderer\n * @typedef {import('../../modeling/BpmnFactory').default} BpmnFactory\n *\n * @typedef {import('../../../model/Types').Element} Element\n */\n\n/**\n * A handler that updates the text of a BPMN element.\n *\n * @param {Modeling} modeling\n * @param {TextRenderer} textRenderer\n * @param {BpmnFactory} bpmnFactory\n */\nfunction UpdateLabelHandler(modeling, textRenderer, bpmnFactory) {\n\n /**\n * Set the label and return the changed elements.\n *\n * Element parameter can be label itself or connection (i.e. sequence flow).\n *\n * @param {Element} element\n * @param {string} text\n */\n function setText(element, text) {\n\n // external label if present\n var label = element.label || element;\n\n var labelTarget = element.labelTarget || element;\n\n (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_0__.setLabel)(label, text, labelTarget !== label);\n\n return [ label, labelTarget ];\n }\n\n function preExecute(ctx) {\n var element = ctx.element,\n businessObject = element.businessObject,\n newLabel = ctx.newLabel;\n\n if (!(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.isLabel)(element)\n && (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_0__.isLabelExternal)(element)\n && !(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_0__.hasExternalLabel)(element)\n && !isEmptyText(newLabel)) {\n\n // create label\n var paddingTop = 7;\n\n var labelCenter = (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_0__.getExternalLabelMid)(element);\n\n labelCenter = {\n x: labelCenter.x,\n y: labelCenter.y + paddingTop\n };\n\n modeling.createLabel(element, labelCenter, {\n id: businessObject.id + '_label',\n businessObject: businessObject,\n di: element.di\n });\n }\n }\n\n function execute(ctx) {\n ctx.oldLabel = (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_0__.getLabel)(ctx.element);\n return setText(ctx.element, ctx.newLabel);\n }\n\n function revert(ctx) {\n return setText(ctx.element, ctx.oldLabel);\n }\n\n function postExecute(ctx) {\n var element = ctx.element,\n label = element.label || element,\n newLabel = ctx.newLabel,\n newBounds = ctx.newBounds,\n hints = ctx.hints || {};\n\n // ignore internal labels for elements except text annotations\n if (!(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.isLabel)(label) && !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(label, 'bpmn:TextAnnotation')) {\n return;\n }\n\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.isLabel)(label) && isEmptyText(newLabel)) {\n\n if (hints.removeShape !== false) {\n modeling.removeShape(label, { unsetLabel: false });\n }\n\n return;\n }\n\n var text = (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_0__.getLabel)(element);\n\n // resize element based on label _or_ pre-defined bounds\n if (typeof newBounds === 'undefined') {\n newBounds = textRenderer.getExternalLabelBounds(label, text);\n }\n\n // setting newBounds to false or _null_ will\n // disable the postExecute resize operation\n if (newBounds) {\n modeling.resizeShape(label, newBounds, NULL_DIMENSIONS);\n }\n }\n\n // API\n\n this.preExecute = preExecute;\n this.execute = execute;\n this.revert = revert;\n this.postExecute = postExecute;\n}\n\nUpdateLabelHandler.$inject = [\n 'modeling',\n 'textRenderer',\n 'bpmnFactory'\n];\n\n\n// helpers //////////\n\nfunction isEmptyText(label) {\n return !label || !label.trim();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL2NtZC9VcGRhdGVMYWJlbEhhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdpQzs7QUFPQTs7QUFJQTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLDJDQUEyQztBQUN4RCxhQUFhLDhDQUE4QztBQUMzRCxhQUFhLDhDQUE4QztBQUMzRDtBQUNBLGFBQWEsd0NBQXdDO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLGNBQWM7QUFDekIsV0FBVyxhQUFhO0FBQ3hCO0FBQ2U7O0FBRWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsU0FBUztBQUN0QixhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLElBQUkseURBQVE7O0FBRVo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLHdEQUFPO0FBQ2hCLFdBQVcsZ0VBQWU7QUFDMUIsWUFBWSxpRUFBZ0I7QUFDNUI7O0FBRUE7QUFDQTs7QUFFQSx3QkFBd0Isb0VBQW1COztBQUUzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLHlEQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsd0RBQU8sWUFBWSxtREFBRTtBQUM5QjtBQUNBOztBQUVBLFFBQVEsd0RBQU87O0FBRWY7QUFDQSxzQ0FBc0MsbUJBQW1CO0FBQ3pEOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSx5REFBUTs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbGFiZWwtZWRpdGluZy9jbWQvVXBkYXRlTGFiZWxIYW5kbGVyLmpzPzEzYTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgc2V0TGFiZWwsXG4gIGdldExhYmVsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0RXh0ZXJuYWxMYWJlbE1pZCxcbiAgaXNMYWJlbEV4dGVybmFsLFxuICBoYXNFeHRlcm5hbExhYmVsLFxuICBpc0xhYmVsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG52YXIgTlVMTF9ESU1FTlNJT05TID0ge1xuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsaW5nL01vZGVsaW5nJykuZGVmYXVsdH0gTW9kZWxpbmdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL2RyYXcvVGV4dFJlbmRlcmVyJykuZGVmYXVsdH0gVGV4dFJlbmRlcmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbGluZy9CcG1uRmFjdG9yeScpLmRlZmF1bHR9IEJwbW5GYWN0b3J5XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKi9cblxuLyoqXG4gKiBBIGhhbmRsZXIgdGhhdCB1cGRhdGVzIHRoZSB0ZXh0IG9mIGEgQlBNTiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlcn0gdGV4dFJlbmRlcmVyXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBVcGRhdGVMYWJlbEhhbmRsZXIobW9kZWxpbmcsIHRleHRSZW5kZXJlciwgYnBtbkZhY3RvcnkpIHtcblxuICAvKipcbiAgICogU2V0IHRoZSBsYWJlbCBhbmQgcmV0dXJuIHRoZSBjaGFuZ2VkIGVsZW1lbnRzLlxuICAgKlxuICAgKiBFbGVtZW50IHBhcmFtZXRlciBjYW4gYmUgbGFiZWwgaXRzZWxmIG9yIGNvbm5lY3Rpb24gKGkuZS4gc2VxdWVuY2UgZmxvdykuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VGV4dChlbGVtZW50LCB0ZXh0KSB7XG5cbiAgICAvLyBleHRlcm5hbCBsYWJlbCBpZiBwcmVzZW50XG4gICAgdmFyIGxhYmVsID0gZWxlbWVudC5sYWJlbCB8fCBlbGVtZW50O1xuXG4gICAgdmFyIGxhYmVsVGFyZ2V0ID0gZWxlbWVudC5sYWJlbFRhcmdldCB8fCBlbGVtZW50O1xuXG4gICAgc2V0TGFiZWwobGFiZWwsIHRleHQsIGxhYmVsVGFyZ2V0ICE9PSBsYWJlbCk7XG5cbiAgICByZXR1cm4gWyBsYWJlbCwgbGFiZWxUYXJnZXQgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZUV4ZWN1dGUoY3R4KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjdHguZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBuZXdMYWJlbCA9IGN0eC5uZXdMYWJlbDtcblxuICAgIGlmICghaXNMYWJlbChlbGVtZW50KVxuICAgICAgICAmJiBpc0xhYmVsRXh0ZXJuYWwoZWxlbWVudClcbiAgICAgICAgJiYgIWhhc0V4dGVybmFsTGFiZWwoZWxlbWVudClcbiAgICAgICAgJiYgIWlzRW1wdHlUZXh0KG5ld0xhYmVsKSkge1xuXG4gICAgICAvLyBjcmVhdGUgbGFiZWxcbiAgICAgIHZhciBwYWRkaW5nVG9wID0gNztcblxuICAgICAgdmFyIGxhYmVsQ2VudGVyID0gZ2V0RXh0ZXJuYWxMYWJlbE1pZChlbGVtZW50KTtcblxuICAgICAgbGFiZWxDZW50ZXIgPSB7XG4gICAgICAgIHg6IGxhYmVsQ2VudGVyLngsXG4gICAgICAgIHk6IGxhYmVsQ2VudGVyLnkgKyBwYWRkaW5nVG9wXG4gICAgICB9O1xuXG4gICAgICBtb2RlbGluZy5jcmVhdGVMYWJlbChlbGVtZW50LCBsYWJlbENlbnRlciwge1xuICAgICAgICBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2xhYmVsJyxcbiAgICAgICAgYnVzaW5lc3NPYmplY3Q6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBkaTogZWxlbWVudC5kaVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXhlY3V0ZShjdHgpIHtcbiAgICBjdHgub2xkTGFiZWwgPSBnZXRMYWJlbChjdHguZWxlbWVudCk7XG4gICAgcmV0dXJuIHNldFRleHQoY3R4LmVsZW1lbnQsIGN0eC5uZXdMYWJlbCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnQoY3R4KSB7XG4gICAgcmV0dXJuIHNldFRleHQoY3R4LmVsZW1lbnQsIGN0eC5vbGRMYWJlbCk7XG4gIH1cblxuICBmdW5jdGlvbiBwb3N0RXhlY3V0ZShjdHgpIHtcbiAgICB2YXIgZWxlbWVudCA9IGN0eC5lbGVtZW50LFxuICAgICAgICBsYWJlbCA9IGVsZW1lbnQubGFiZWwgfHwgZWxlbWVudCxcbiAgICAgICAgbmV3TGFiZWwgPSBjdHgubmV3TGFiZWwsXG4gICAgICAgIG5ld0JvdW5kcyA9IGN0eC5uZXdCb3VuZHMsXG4gICAgICAgIGhpbnRzID0gY3R4LmhpbnRzIHx8IHt9O1xuXG4gICAgLy8gaWdub3JlIGludGVybmFsIGxhYmVscyBmb3IgZWxlbWVudHMgZXhjZXB0IHRleHQgYW5ub3RhdGlvbnNcbiAgICBpZiAoIWlzTGFiZWwobGFiZWwpICYmICFpcyhsYWJlbCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0xhYmVsKGxhYmVsKSAmJiBpc0VtcHR5VGV4dChuZXdMYWJlbCkpIHtcblxuICAgICAgaWYgKGhpbnRzLnJlbW92ZVNoYXBlICE9PSBmYWxzZSkge1xuICAgICAgICBtb2RlbGluZy5yZW1vdmVTaGFwZShsYWJlbCwgeyB1bnNldExhYmVsOiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gZ2V0TGFiZWwoZWxlbWVudCk7XG5cbiAgICAvLyByZXNpemUgZWxlbWVudCBiYXNlZCBvbiBsYWJlbCBfb3JfIHByZS1kZWZpbmVkIGJvdW5kc1xuICAgIGlmICh0eXBlb2YgbmV3Qm91bmRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbmV3Qm91bmRzID0gdGV4dFJlbmRlcmVyLmdldEV4dGVybmFsTGFiZWxCb3VuZHMobGFiZWwsIHRleHQpO1xuICAgIH1cblxuICAgIC8vIHNldHRpbmcgbmV3Qm91bmRzIHRvIGZhbHNlIG9yIF9udWxsXyB3aWxsXG4gICAgLy8gZGlzYWJsZSB0aGUgcG9zdEV4ZWN1dGUgcmVzaXplIG9wZXJhdGlvblxuICAgIGlmIChuZXdCb3VuZHMpIHtcbiAgICAgIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKGxhYmVsLCBuZXdCb3VuZHMsIE5VTExfRElNRU5TSU9OUyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQVBJXG5cbiAgdGhpcy5wcmVFeGVjdXRlID0gcHJlRXhlY3V0ZTtcbiAgdGhpcy5leGVjdXRlID0gZXhlY3V0ZTtcbiAgdGhpcy5yZXZlcnQgPSByZXZlcnQ7XG4gIHRoaXMucG9zdEV4ZWN1dGUgPSBwb3N0RXhlY3V0ZTtcbn1cblxuVXBkYXRlTGFiZWxIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdtb2RlbGluZycsXG4gICd0ZXh0UmVuZGVyZXInLFxuICAnYnBtbkZhY3RvcnknXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0VtcHR5VGV4dChsYWJlbCkge1xuICByZXR1cm4gIWxhYmVsIHx8ICFsYWJlbC50cmltKCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/cmd/UpdateLabelHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/index.js":
/*!***********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/index.js ***!
\***********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_change_support__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/features/change-support */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/change-support/index.js\");\n/* harmony import */ var diagram_js_lib_features_resize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/features/resize */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/resize/index.js\");\n/* harmony import */ var diagram_js_direct_editing__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js-direct-editing */ \"./node_modules/diagram-js-direct-editing/lib/index.js\");\n/* harmony import */ var _LabelEditingProvider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./LabelEditingProvider */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/LabelEditingProvider.js\");\n/* harmony import */ var _LabelEditingPreview__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./LabelEditingPreview */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/LabelEditingPreview.js\");\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n diagram_js_lib_features_change_support__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n diagram_js_lib_features_resize__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n diagram_js_direct_editing__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n ],\n __init__: [\n 'labelEditingProvider',\n 'labelEditingPreview'\n ],\n labelEditingProvider: [ 'type', _LabelEditingProvider__WEBPACK_IMPORTED_MODULE_3__[\"default\"] ],\n labelEditingPreview: [ 'type', _LabelEditingPreview__WEBPACK_IMPORTED_MODULE_4__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF5RTtBQUNmO0FBQ0U7O0FBRUY7QUFDRjs7O0FBR3hELGlFQUFlO0FBQ2Y7QUFDQSxJQUFJLDhFQUFtQjtBQUN2QixJQUFJLHNFQUFZO0FBQ2hCLElBQUksaUVBQW1CO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsNkRBQW9CO0FBQ3RELGlDQUFpQyw0REFBbUI7QUFDcEQsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbGFiZWwtZWRpdGluZy9pbmRleC5qcz9mOTk3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDaGFuZ2VTdXBwb3J0TW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL2NoYW5nZS1zdXBwb3J0JztcbmltcG9ydCBSZXNpemVNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplJztcbmltcG9ydCBEaXJlY3RFZGl0aW5nTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMtZGlyZWN0LWVkaXRpbmcnO1xuXG5pbXBvcnQgTGFiZWxFZGl0aW5nUHJvdmlkZXIgZnJvbSAnLi9MYWJlbEVkaXRpbmdQcm92aWRlcic7XG5pbXBvcnQgTGFiZWxFZGl0aW5nUHJldmlldyBmcm9tICcuL0xhYmVsRWRpdGluZ1ByZXZpZXcnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBDaGFuZ2VTdXBwb3J0TW9kdWxlLFxuICAgIFJlc2l6ZU1vZHVsZSxcbiAgICBEaXJlY3RFZGl0aW5nTW9kdWxlXG4gIF0sXG4gIF9faW5pdF9fOiBbXG4gICAgJ2xhYmVsRWRpdGluZ1Byb3ZpZGVyJyxcbiAgICAnbGFiZWxFZGl0aW5nUHJldmlldydcbiAgXSxcbiAgbGFiZWxFZGl0aW5nUHJvdmlkZXI6IFsgJ3R5cGUnLCBMYWJlbEVkaXRpbmdQcm92aWRlciBdLFxuICBsYWJlbEVkaXRpbmdQcmV2aWV3OiBbICd0eXBlJywgTGFiZWxFZGl0aW5nUHJldmlldyBdXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling-feedback/ModelingFeedback.js":
/*!**************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling-feedback/ModelingFeedback.js ***!
\**************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ModelingFeedback)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('diagram-js/lib/features/tooltips/Tooltips').default} Tooltips\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n */\n\nvar COLLAB_ERR_MSG = 'flow elements must be children of pools/participants';\n\n/**\n * @param {EventBus} eventBus\n * @param {Tooltips} tooltips\n * @param {Translate} translate\n */\nfunction ModelingFeedback(eventBus, tooltips, translate) {\n\n function showError(position, message, timeout) {\n tooltips.add({\n position: {\n x: position.x + 5,\n y: position.y + 5\n },\n type: 'error',\n timeout: timeout || 2000,\n html: '' + message + '
'\n });\n }\n\n eventBus.on([ 'shape.move.rejected', 'create.rejected' ], function(event) {\n var context = event.context,\n shape = context.shape,\n target = context.target;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(target, 'bpmn:Collaboration') && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:FlowNode')) {\n showError(event, translate(COLLAB_ERR_MSG));\n }\n });\n\n}\n\nModelingFeedback.$inject = [\n 'eventBus',\n 'tooltips',\n 'translate'\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy1mZWVkYmFjay9Nb2RlbGluZ0ZlZWRiYWNrLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTBDOztBQUUxQztBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsNkRBQTZEO0FBQzFFLGFBQWEsMkRBQTJEO0FBQ3hFOztBQUVBOztBQUVBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFdBQVc7QUFDdEI7QUFDZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFLGtDQUFrQyxtREFBRTtBQUM5QztBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmctZmVlZGJhY2svTW9kZWxpbmdGZWVkYmFjay5qcz9lMjlhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbHRpcHMvVG9vbHRpcHMnKS5kZWZhdWx0fSBUb29sdGlwc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvaTE4bi90cmFuc2xhdGUvdHJhbnNsYXRlJykuZGVmYXVsdH0gVHJhbnNsYXRlXG4gKi9cblxudmFyIENPTExBQl9FUlJfTVNHID0gJ2Zsb3cgZWxlbWVudHMgbXVzdCBiZSBjaGlsZHJlbiBvZiBwb29scy9wYXJ0aWNpcGFudHMnO1xuXG4vKipcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge1Rvb2x0aXBzfSB0b29sdGlwc1xuICogQHBhcmFtIHtUcmFuc2xhdGV9IHRyYW5zbGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RlbGluZ0ZlZWRiYWNrKGV2ZW50QnVzLCB0b29sdGlwcywgdHJhbnNsYXRlKSB7XG5cbiAgZnVuY3Rpb24gc2hvd0Vycm9yKHBvc2l0aW9uLCBtZXNzYWdlLCB0aW1lb3V0KSB7XG4gICAgdG9vbHRpcHMuYWRkKHtcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIHg6IHBvc2l0aW9uLnggKyA1LFxuICAgICAgICB5OiBwb3NpdGlvbi55ICsgNVxuICAgICAgfSxcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICB0aW1lb3V0OiB0aW1lb3V0IHx8IDIwMDAsXG4gICAgICBodG1sOiAnPGRpdj4nICsgbWVzc2FnZSArICc8L2Rpdj4nXG4gICAgfSk7XG4gIH1cblxuICBldmVudEJ1cy5vbihbICdzaGFwZS5tb3ZlLnJlamVjdGVkJywgJ2NyZWF0ZS5yZWplY3RlZCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC50YXJnZXQ7XG5cbiAgICBpZiAoaXModGFyZ2V0LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykgJiYgaXMoc2hhcGUsICdicG1uOkZsb3dOb2RlJykpIHtcbiAgICAgIHNob3dFcnJvcihldmVudCwgdHJhbnNsYXRlKENPTExBQl9FUlJfTVNHKSk7XG4gICAgfVxuICB9KTtcblxufVxuXG5Nb2RlbGluZ0ZlZWRiYWNrLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICd0b29sdGlwcycsXG4gICd0cmFuc2xhdGUnXG5dO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling-feedback/ModelingFeedback.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling-feedback/index.js":
/*!***************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling-feedback/index.js ***!
\***************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_features_tooltips__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/tooltips */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/tooltips/index.js\");\n/* harmony import */ var _ModelingFeedback__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ModelingFeedback */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling-feedback/ModelingFeedback.js\");\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __depends__: [\n diagram_js_lib_features_tooltips__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n ],\n __init__: [\n 'modelingFeedback'\n ],\n modelingFeedback: [ 'type', _ModelingFeedback__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy1mZWVkYmFjay9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEQ7O0FBRVo7O0FBRWxELGlFQUFlO0FBQ2Y7QUFDQSxJQUFJLHdFQUFjO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHlEQUFnQjtBQUM5QyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmctZmVlZGJhY2svaW5kZXguanM/MGIyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9vbHRpcHNNb2R1bGUgZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvdG9vbHRpcHMnO1xuXG5pbXBvcnQgTW9kZWxpbmdGZWVkYmFjayBmcm9tICcuL01vZGVsaW5nRmVlZGJhY2snO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgVG9vbHRpcHNNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnbW9kZWxpbmdGZWVkYmFjaydcbiAgXSxcbiAgbW9kZWxpbmdGZWVkYmFjazogWyAndHlwZScsIE1vZGVsaW5nRmVlZGJhY2sgXVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling-feedback/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnFactory.js":
/*!************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnFactory.js ***!
\************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnFactory)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('../../model/Types').Moddle} Moddle\n * @typedef {import('../../model/Types').ModdleElement} ModdleElement\n *\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n */\n\n/**\n * A factory for BPMN elements.\n *\n * @param {Moddle} moddle\n */\nfunction BpmnFactory(moddle) {\n this._model = moddle;\n}\n\nBpmnFactory.$inject = [ 'moddle' ];\n\n/**\n * @param {ModdleElement} element\n *\n * @return {boolean}\n */\nBpmnFactory.prototype._needsId = function(element) {\n return (0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(element, [\n 'bpmn:RootElement',\n 'bpmn:FlowElement',\n 'bpmn:MessageFlow',\n 'bpmn:DataAssociation',\n 'bpmn:Artifact',\n 'bpmn:Participant',\n 'bpmn:Lane',\n 'bpmn:LaneSet',\n 'bpmn:Process',\n 'bpmn:Collaboration',\n 'bpmndi:BPMNShape',\n 'bpmndi:BPMNEdge',\n 'bpmndi:BPMNDiagram',\n 'bpmndi:BPMNPlane',\n 'bpmn:Property',\n 'bpmn:CategoryValue'\n ]);\n};\n\n/**\n * @param {ModdleElement} element\n */\nBpmnFactory.prototype._ensureId = function(element) {\n if (element.id) {\n this._model.ids.claim(element.id, element);\n return;\n }\n\n // generate semantic ids for elements\n // bpmn:SequenceFlow -> SequenceFlow_ID\n var prefix;\n\n if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Activity')) {\n prefix = 'Activity';\n } else if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Event')) {\n prefix = 'Event';\n } else if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.is)(element, 'bpmn:Gateway')) {\n prefix = 'Gateway';\n } else if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(element, [ 'bpmn:SequenceFlow', 'bpmn:MessageFlow' ])) {\n prefix = 'Flow';\n } else {\n prefix = (element.$type || '').replace(/^[^:]*:/g, '');\n }\n\n prefix += '_';\n\n if (!element.id && this._needsId(element)) {\n element.id = this._model.ids.nextPrefixed(prefix, element);\n }\n};\n\n/**\n * Create BPMN element.\n *\n * @param {string} type\n * @param {Object} [attrs]\n *\n * @return {ModdleElement}\n */\nBpmnFactory.prototype.create = function(type, attrs) {\n var element = this._model.create(type, attrs || {});\n\n this._ensureId(element);\n\n return element;\n};\n\n/**\n * @return {ModdleElement}\n */\nBpmnFactory.prototype.createDiLabel = function() {\n return this.create('bpmndi:BPMNLabel', {\n bounds: this.createDiBounds()\n });\n};\n\n/**\n * @param {ModdleElement} semantic\n * @param {Object} [attrs]\n * @return {ModdleElement}\n */\nBpmnFactory.prototype.createDiShape = function(semantic, attrs) {\n return this.create('bpmndi:BPMNShape', (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)({\n bpmnElement: semantic,\n bounds: this.createDiBounds()\n }, attrs));\n};\n\n/**\n * @return {ModdleElement}\n */\nBpmnFactory.prototype.createDiBounds = function(bounds) {\n return this.create('dc:Bounds', bounds);\n};\n\n/**\n * @param {Point[]} waypoints\n *\n * @return {ModdleElement[]}\n */\nBpmnFactory.prototype.createDiWaypoints = function(waypoints) {\n var self = this;\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.map)(waypoints, function(pos) {\n return self.createDiWaypoint(pos);\n });\n};\n\n/**\n * @param {Point} point\n *\n * @return {ModdleElement}\n */\nBpmnFactory.prototype.createDiWaypoint = function(point) {\n return this.create('dc:Point', (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.pick)(point, [ 'x', 'y' ]));\n};\n\n/**\n * @param {ModdleElement} semantic\n * @param {Object} [attrs]\n *\n * @return {ModdleElement}\n */\nBpmnFactory.prototype.createDiEdge = function(semantic, attrs) {\n return this.create('bpmndi:BPMNEdge', (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)({\n bpmnElement: semantic,\n waypoint: this.createDiWaypoints([])\n }, attrs));\n};\n\n/**\n * @param {ModdleElement} semantic\n * @param {Object} [attrs]\n *\n * @return {ModdleElement}\n */\nBpmnFactory.prototype.createDiPlane = function(semantic, attrs) {\n return this.create('bpmndi:BPMNPlane', (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)({\n bpmnElement: semantic\n }, attrs));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uRmFjdG9yeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFJa0I7O0FBSVc7O0FBSUM7O0FBRTlCO0FBQ0EsYUFBYSxvQ0FBb0M7QUFDakQsYUFBYSwyQ0FBMkM7QUFDeEQ7QUFDQSxhQUFhLDJDQUEyQztBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDZTtBQUNmO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxXQUFXLGVBQWU7QUFDMUI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFNBQVMseURBQUs7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGVBQWU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLHNEQUFFO0FBQ1I7QUFDQSxJQUFJLFNBQVMsc0RBQUU7QUFDZjtBQUNBLElBQUksU0FBUyxzREFBRTtBQUNmO0FBQ0EsSUFBSSxTQUFTLHlEQUFLO0FBQ2xCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0Esb0RBQW9EOztBQUVwRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDQTtBQUNBLHlDQUF5QyxnREFBTTtBQUMvQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDZDQUFHO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGlDQUFpQyw4Q0FBSTtBQUNyQzs7QUFFQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLHdDQUF3QyxnREFBTTtBQUM5QztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EseUNBQXlDLGdEQUFNO0FBQy9DO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvQnBtbkZhY3RvcnkuanM/YzE5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBtYXAsXG4gIGFzc2lnbixcbiAgcGlja1xufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGV9IE1vZGRsZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fSBNb2RkbGVFbGVtZW50XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlBvaW50fSBQb2ludFxuICovXG5cbi8qKlxuICogQSBmYWN0b3J5IGZvciBCUE1OIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RkbGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtbkZhY3RvcnkobW9kZGxlKSB7XG4gIHRoaXMuX21vZGVsID0gbW9kZGxlO1xufVxuXG5CcG1uRmFjdG9yeS4kaW5qZWN0ID0gWyAnbW9kZGxlJyBdO1xuXG4vKipcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbkJwbW5GYWN0b3J5LnByb3RvdHlwZS5fbmVlZHNJZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIFtcbiAgICAnYnBtbjpSb290RWxlbWVudCcsXG4gICAgJ2JwbW46Rmxvd0VsZW1lbnQnLFxuICAgICdicG1uOk1lc3NhZ2VGbG93JyxcbiAgICAnYnBtbjpEYXRhQXNzb2NpYXRpb24nLFxuICAgICdicG1uOkFydGlmYWN0JyxcbiAgICAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgJ2JwbW46TGFuZScsXG4gICAgJ2JwbW46TGFuZVNldCcsXG4gICAgJ2JwbW46UHJvY2VzcycsXG4gICAgJ2JwbW46Q29sbGFib3JhdGlvbicsXG4gICAgJ2JwbW5kaTpCUE1OU2hhcGUnLFxuICAgICdicG1uZGk6QlBNTkVkZ2UnLFxuICAgICdicG1uZGk6QlBNTkRpYWdyYW0nLFxuICAgICdicG1uZGk6QlBNTlBsYW5lJyxcbiAgICAnYnBtbjpQcm9wZXJ0eScsXG4gICAgJ2JwbW46Q2F0ZWdvcnlWYWx1ZSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICovXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuX2Vuc3VyZUlkID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC5pZCkge1xuICAgIHRoaXMuX21vZGVsLmlkcy5jbGFpbShlbGVtZW50LmlkLCBlbGVtZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBnZW5lcmF0ZSBzZW1hbnRpYyBpZHMgZm9yIGVsZW1lbnRzXG4gIC8vIGJwbW46U2VxdWVuY2VGbG93IC0+IFNlcXVlbmNlRmxvd19JRFxuICB2YXIgcHJlZml4O1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpBY3Rpdml0eScpKSB7XG4gICAgcHJlZml4ID0gJ0FjdGl2aXR5JztcbiAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgcHJlZml4ID0gJ0V2ZW50JztcbiAgfSBlbHNlIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICBwcmVmaXggPSAnR2F0ZXdheSc7XG4gIH0gZWxzZSBpZiAoaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpTZXF1ZW5jZUZsb3cnLCAnYnBtbjpNZXNzYWdlRmxvdycgXSkpIHtcbiAgICBwcmVmaXggPSAnRmxvdyc7XG4gIH0gZWxzZSB7XG4gICAgcHJlZml4ID0gKGVsZW1lbnQuJHR5cGUgfHwgJycpLnJlcGxhY2UoL15bXjpdKjovZywgJycpO1xuICB9XG5cbiAgcHJlZml4ICs9ICdfJztcblxuICBpZiAoIWVsZW1lbnQuaWQgJiYgdGhpcy5fbmVlZHNJZChlbGVtZW50KSkge1xuICAgIGVsZW1lbnQuaWQgPSB0aGlzLl9tb2RlbC5pZHMubmV4dFByZWZpeGVkKHByZWZpeCwgZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIEJQTU4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IFthdHRyc11cbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odHlwZSwgYXR0cnMpIHtcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLl9tb2RlbC5jcmVhdGUodHlwZSwgYXR0cnMgfHwge30pO1xuXG4gIHRoaXMuX2Vuc3VyZUlkKGVsZW1lbnQpO1xuXG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlMYWJlbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OTGFiZWwnLCB7XG4gICAgYm91bmRzOiB0aGlzLmNyZWF0ZURpQm91bmRzKClcbiAgfSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gc2VtYW50aWNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXR0cnNdXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlTaGFwZSA9IGZ1bmN0aW9uKHNlbWFudGljLCBhdHRycykge1xuICByZXR1cm4gdGhpcy5jcmVhdGUoJ2JwbW5kaTpCUE1OU2hhcGUnLCBhc3NpZ24oe1xuICAgIGJwbW5FbGVtZW50OiBzZW1hbnRpYyxcbiAgICBib3VuZHM6IHRoaXMuY3JlYXRlRGlCb3VuZHMoKVxuICB9LCBhdHRycykpO1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlCb3VuZHMgPSBmdW5jdGlvbihib3VuZHMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdkYzpCb3VuZHMnLCBib3VuZHMpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge1BvaW50W119IHdheXBvaW50c1xuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnRbXX1cbiAqL1xuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpV2F5cG9pbnRzID0gZnVuY3Rpb24od2F5cG9pbnRzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXR1cm4gbWFwKHdheXBvaW50cywgZnVuY3Rpb24ocG9zKSB7XG4gICAgcmV0dXJuIHNlbGYuY3JlYXRlRGlXYXlwb2ludChwb3MpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlXYXlwb2ludCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnZGM6UG9pbnQnLCBwaWNrKHBvaW50LCBbICd4JywgJ3knIF0pKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBzZW1hbnRpY1xuICogQHBhcmFtIHtPYmplY3R9IFthdHRyc11cbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5CcG1uRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlRGlFZGdlID0gZnVuY3Rpb24oc2VtYW50aWMsIGF0dHJzKSB7XG4gIHJldHVybiB0aGlzLmNyZWF0ZSgnYnBtbmRpOkJQTU5FZGdlJywgYXNzaWduKHtcbiAgICBicG1uRWxlbWVudDogc2VtYW50aWMsXG4gICAgd2F5cG9pbnQ6IHRoaXMuY3JlYXRlRGlXYXlwb2ludHMoW10pXG4gIH0sIGF0dHJzKSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gc2VtYW50aWNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXR0cnNdXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuQnBtbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZURpUGxhbmUgPSBmdW5jdGlvbihzZW1hbnRpYywgYXR0cnMpIHtcbiAgcmV0dXJuIHRoaXMuY3JlYXRlKCdicG1uZGk6QlBNTlBsYW5lJywgYXNzaWduKHtcbiAgICBicG1uRWxlbWVudDogc2VtYW50aWNcbiAgfSwgYXR0cnMpKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnFactory.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnLayouter.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnLayouter.js ***!
\*************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnLayouter)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_layout_BaseLayouter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/layout/BaseLayouter */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/BaseLayouter.js\");\n/* harmony import */ var diagram_js_lib_layout_ManhattanLayout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! diagram-js/lib/layout/ManhattanLayout */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/ManhattanLayout.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n *\n * @typedef {import('../../model/Types').Connection} Connection\n * @typedef {import('../../model/Types').Element} Element\n *\n * @typedef {import('diagram-js/lib/layout/BaseLayouter').LayoutConnectionHints} LayoutConnectionHints\n *\n * @typedef { {\n * source?: Element;\n * target?: Element;\n * waypoints?: Point[];\n * connectionStart?: Point;\n * connectionEnd?: Point;\n * } & LayoutConnectionHints } BpmnLayoutConnectionHints\n */\n\nvar ATTACH_ORIENTATION_PADDING = -10,\n BOUNDARY_TO_HOST_THRESHOLD = 40;\n\nvar oppositeOrientationMapping = {\n 'top': 'bottom',\n 'top-right': 'bottom-left',\n 'top-left': 'bottom-right',\n 'right': 'left',\n 'bottom': 'top',\n 'bottom-right': 'top-left',\n 'bottom-left': 'top-right',\n 'left': 'right'\n};\n\nvar orientationDirectionMapping = {\n top: 't',\n right: 'r',\n bottom: 'b',\n left: 'l'\n};\n\nfunction BpmnLayouter() {}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(BpmnLayouter, diagram_js_lib_layout_BaseLayouter__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n/**\n * Returns waypoints of laid out connection.\n *\n * @param {Connection} connection\n * @param {BpmnLayoutConnectionHints} [hints]\n *\n * @return {Point[]}\n */\nBpmnLayouter.prototype.layoutConnection = function(connection, hints) {\n if (!hints) {\n hints = {};\n }\n\n var source = hints.source || connection.source,\n target = hints.target || connection.target,\n waypoints = hints.waypoints || connection.waypoints,\n connectionStart = hints.connectionStart,\n connectionEnd = hints.connectionEnd;\n\n var manhattanOptions,\n updatedWaypoints;\n\n if (!connectionStart) {\n connectionStart = getConnectionDocking(waypoints && waypoints[ 0 ], source);\n }\n\n if (!connectionEnd) {\n connectionEnd = getConnectionDocking(waypoints && waypoints[ waypoints.length - 1 ], target);\n }\n\n // TODO(nikku): support vertical modeling\n // and invert preferredLayouts accordingly\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(connection, 'bpmn:Association') ||\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(connection, 'bpmn:DataAssociation')) {\n\n if (waypoints && !isCompensationAssociation(source, target)) {\n return [].concat([ connectionStart ], waypoints.slice(1, -1), [ connectionEnd ]);\n }\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(connection, 'bpmn:MessageFlow')) {\n manhattanOptions = getMessageFlowManhattanOptions(source, target);\n } else if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(connection, 'bpmn:SequenceFlow') || isCompensationAssociation(source, target)) {\n\n // layout all connection between flow elements h:h, except for\n // (1) outgoing of boundary events -> layout based on attach orientation and target orientation\n // (2) incoming/outgoing of gateways -> v:h for outgoing, h:v for incoming\n // (3) loops\n if (source === target) {\n manhattanOptions = {\n preferredLayouts: getLoopPreferredLayout(source, connection)\n };\n } else if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(source, 'bpmn:BoundaryEvent')) {\n manhattanOptions = {\n preferredLayouts: getBoundaryEventPreferredLayouts(source, target, connectionEnd)\n };\n } else if (isExpandedSubProcess(source) || isExpandedSubProcess(target)) {\n manhattanOptions = getSubProcessManhattanOptions(source);\n } else if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(source, 'bpmn:Gateway')) {\n manhattanOptions = {\n preferredLayouts: [ 'v:h' ]\n };\n } else if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:Gateway')) {\n manhattanOptions = {\n preferredLayouts: [ 'h:v' ]\n };\n } else {\n manhattanOptions = {\n preferredLayouts: [ 'h:h' ]\n };\n }\n }\n\n if (manhattanOptions) {\n manhattanOptions = (0,min_dash__WEBPACK_IMPORTED_MODULE_3__.assign)(manhattanOptions, hints);\n\n updatedWaypoints = (0,diagram_js_lib_layout_ManhattanLayout__WEBPACK_IMPORTED_MODULE_4__.withoutRedundantPoints)((0,diagram_js_lib_layout_ManhattanLayout__WEBPACK_IMPORTED_MODULE_4__.repairConnection)(\n source,\n target,\n connectionStart,\n connectionEnd,\n waypoints,\n manhattanOptions\n ));\n }\n\n return updatedWaypoints || [ connectionStart, connectionEnd ];\n};\n\n\n// helpers //////////\n\nfunction getAttachOrientation(attachedElement) {\n var hostElement = attachedElement.host;\n\n return (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getOrientation)((0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getMid)(attachedElement), hostElement, ATTACH_ORIENTATION_PADDING);\n}\n\nfunction getMessageFlowManhattanOptions(source, target) {\n return {\n preferredLayouts: [ 'straight', 'v:v' ],\n preserveDocking: getMessageFlowPreserveDocking(source, target)\n };\n}\n\nfunction getMessageFlowPreserveDocking(source, target) {\n\n // (1) docking element connected to participant has precedence\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:Participant')) {\n return 'source';\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(source, 'bpmn:Participant')) {\n return 'target';\n }\n\n // (2) docking element connected to expanded sub-process has precedence\n if (isExpandedSubProcess(target)) {\n return 'source';\n }\n\n if (isExpandedSubProcess(source)) {\n return 'target';\n }\n\n // (3) docking event has precedence\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:Event')) {\n return 'target';\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(source, 'bpmn:Event')) {\n return 'source';\n }\n\n return null;\n}\n\nfunction getSubProcessManhattanOptions(source) {\n return {\n preferredLayouts: [ 'straight', 'h:h' ],\n preserveDocking: getSubProcessPreserveDocking(source)\n };\n}\n\nfunction getSubProcessPreserveDocking(source) {\n return isExpandedSubProcess(source) ? 'target' : 'source';\n}\n\nfunction getConnectionDocking(point, shape) {\n return point ? (point.original || point) : (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getMid)(shape);\n}\n\nfunction isCompensationAssociation(source, target) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:Activity') &&\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(source, 'bpmn:BoundaryEvent') &&\n target.businessObject.isForCompensation;\n}\n\nfunction isExpandedSubProcess(element) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:SubProcess') && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_6__.isExpanded)(element);\n}\n\nfunction isSame(a, b) {\n return a === b;\n}\n\nfunction isAnyOrientation(orientation, orientations) {\n return orientations.indexOf(orientation) !== -1;\n}\n\nfunction getHorizontalOrientation(orientation) {\n var matches = /right|left/.exec(orientation);\n\n return matches && matches[0];\n}\n\nfunction getVerticalOrientation(orientation) {\n var matches = /top|bottom/.exec(orientation);\n\n return matches && matches[0];\n}\n\nfunction isOppositeOrientation(a, b) {\n return oppositeOrientationMapping[a] === b;\n}\n\nfunction isOppositeHorizontalOrientation(a, b) {\n var horizontalOrientation = getHorizontalOrientation(a);\n\n var oppositeHorizontalOrientation = oppositeOrientationMapping[horizontalOrientation];\n\n return b.indexOf(oppositeHorizontalOrientation) !== -1;\n}\n\nfunction isOppositeVerticalOrientation(a, b) {\n var verticalOrientation = getVerticalOrientation(a);\n\n var oppositeVerticalOrientation = oppositeOrientationMapping[verticalOrientation];\n\n return b.indexOf(oppositeVerticalOrientation) !== -1;\n}\n\nfunction isHorizontalOrientation(orientation) {\n return orientation === 'right' || orientation === 'left';\n}\n\nfunction getLoopPreferredLayout(source, connection) {\n var waypoints = connection.waypoints;\n\n var orientation = waypoints && waypoints.length && (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getOrientation)(waypoints[0], source);\n\n if (orientation === 'top') {\n return [ 't:r' ];\n } else if (orientation === 'right') {\n return [ 'r:b' ];\n } else if (orientation === 'left') {\n return [ 'l:t' ];\n }\n\n return [ 'b:l' ];\n}\n\nfunction getBoundaryEventPreferredLayouts(source, target, end) {\n var sourceMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getMid)(source),\n targetMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getMid)(target),\n attachOrientation = getAttachOrientation(source),\n sourceLayout,\n targetLayout;\n\n var isLoop = isSame(source.host, target);\n\n var attachedToSide = isAnyOrientation(attachOrientation, [ 'top', 'right', 'bottom', 'left' ]);\n\n var targetOrientation = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getOrientation)(targetMid, sourceMid, {\n x: source.width / 2 + target.width / 2,\n y: source.height / 2 + target.height / 2\n });\n\n if (isLoop) {\n return getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end);\n }\n\n // source layout\n sourceLayout = getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide);\n\n // target layout\n targetLayout = getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide);\n\n return [ sourceLayout + ':' + targetLayout ];\n}\n\nfunction getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end) {\n var orientation = attachedToSide ? attachOrientation : getVerticalOrientation(attachOrientation),\n sourceLayout = orientationDirectionMapping[ orientation ],\n targetLayout;\n\n if (attachedToSide) {\n if (isHorizontalOrientation(attachOrientation)) {\n targetLayout = shouldConnectToSameSide('y', source, target, end) ? 'h' : 'b';\n } else {\n targetLayout = shouldConnectToSameSide('x', source, target, end) ? 'v' : 'l';\n }\n } else {\n targetLayout = 'v';\n }\n\n return [ sourceLayout + ':' + targetLayout ];\n}\n\nfunction shouldConnectToSameSide(axis, source, target, end) {\n var threshold = BOUNDARY_TO_HOST_THRESHOLD;\n\n return !(\n areCloseOnAxis(axis, end, target, threshold) ||\n areCloseOnAxis(axis, end, {\n x: target.x + target.width,\n y: target.y + target.height\n }, threshold) ||\n areCloseOnAxis(axis, end, (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getMid)(source), threshold)\n );\n}\n\nfunction areCloseOnAxis(axis, a, b, threshold) {\n return Math.abs(a[ axis ] - b[ axis ]) < threshold;\n}\n\nfunction getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide) {\n\n // attached to either top, right, bottom or left side\n if (attachedToSide) {\n return orientationDirectionMapping[ attachOrientation ];\n }\n\n // attached to either top-right, top-left, bottom-right or bottom-left corner\n\n // same vertical or opposite horizontal orientation\n if (isSame(\n getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation)\n ) || isOppositeOrientation(\n getHorizontalOrientation(attachOrientation), getHorizontalOrientation(targetOrientation)\n )) {\n return orientationDirectionMapping[ getVerticalOrientation(attachOrientation) ];\n }\n\n // fallback\n return orientationDirectionMapping[ getHorizontalOrientation(attachOrientation) ];\n}\n\nfunction getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide) {\n\n // attached to either top, right, bottom or left side\n if (attachedToSide) {\n if (isHorizontalOrientation(attachOrientation)) {\n\n // orientation is right or left\n\n // opposite horizontal orientation or same orientation\n if (\n isOppositeHorizontalOrientation(attachOrientation, targetOrientation) ||\n isSame(attachOrientation, targetOrientation)\n ) {\n return 'h';\n }\n\n // fallback\n return 'v';\n } else {\n\n // orientation is top or bottom\n\n // opposite vertical orientation or same orientation\n if (\n isOppositeVerticalOrientation(attachOrientation, targetOrientation) ||\n isSame(attachOrientation, targetOrientation)\n ) {\n return 'v';\n }\n\n // fallback\n return 'h';\n }\n }\n\n // attached to either top-right, top-left, bottom-right or bottom-left corner\n\n // orientation is right, left\n // or same vertical orientation but also right or left\n if (isHorizontalOrientation(targetOrientation) ||\n (isSame(getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation)) &&\n getHorizontalOrientation(targetOrientation))) {\n return 'h';\n } else {\n return 'v';\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uTGF5b3V0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBd0M7O0FBSXRCOztBQUU0Qzs7QUFLZjs7QUFLTDs7QUFJZjs7QUFFZTs7QUFFMUM7QUFDQSxhQUFhLDJDQUEyQztBQUN4RDtBQUNBLGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEscUNBQXFDO0FBQ2xEO0FBQ0EsYUFBYSxvRUFBb0U7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLDBCQUEwQjtBQUMvQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTs7QUFFZiw0REFBUSxlQUFlLDBFQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVywyQkFBMkI7QUFDdEM7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLE1BQU0sbURBQUU7QUFDUixNQUFNLG1EQUFFOztBQUVSO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sbURBQUU7QUFDUjtBQUNBLElBQUksU0FBUyxtREFBRTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxTQUFTLG1EQUFFO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU0sU0FBUyxtREFBRTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxNQUFNLFNBQVMsbURBQUU7QUFDakI7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsZ0RBQU07O0FBRTdCLHVCQUF1Qiw2RkFBc0IsQ0FBQyx1RkFBZ0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBLFNBQVMsZ0ZBQWMsQ0FBQyx3RUFBTTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNLG1EQUFFO0FBQ1I7QUFDQTs7QUFFQSxNQUFNLG1EQUFFO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLG1EQUFFO0FBQ1I7QUFDQTs7QUFFQSxNQUFNLG1EQUFFO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkMsd0VBQU07QUFDbkQ7O0FBRUE7QUFDQSxTQUFTLG1EQUFFO0FBQ1gsSUFBSSxtREFBRTtBQUNOO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLG1EQUFFLGdDQUFnQyx3REFBVTtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscURBQXFELGdGQUFjOztBQUVuRTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix3RUFBTTtBQUN4QixrQkFBa0Isd0VBQU07QUFDeEI7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLDBCQUEwQixnRkFBYztBQUN4QztBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCw4QkFBOEIsd0VBQU07QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOztBQUVOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uTGF5b3V0ZXIuanM/ZDk0YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBCYXNlTGF5b3V0ZXIgZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Jhc2VMYXlvdXRlcic7XG5cbmltcG9ydCB7XG4gIHJlcGFpckNvbm5lY3Rpb24sXG4gIHdpdGhvdXRSZWR1bmRhbnRQb2ludHNcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L01hbmhhdHRhbkxheW91dCc7XG5cbmltcG9ydCB7XG4gIGdldE1pZCxcbiAgZ2V0T3JpZW50YXRpb25cbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0V4cGFuZGVkXG59IGZyb20gJy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlBvaW50fSBQb2ludFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuQ29ubmVjdGlvbn0gQ29ubmVjdGlvblxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Jhc2VMYXlvdXRlcicpLkxheW91dENvbm5lY3Rpb25IaW50c30gTGF5b3V0Q29ubmVjdGlvbkhpbnRzXG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIHNvdXJjZT86IEVsZW1lbnQ7XG4gKiAgIHRhcmdldD86IEVsZW1lbnQ7XG4gKiAgIHdheXBvaW50cz86IFBvaW50W107XG4gKiAgIGNvbm5lY3Rpb25TdGFydD86IFBvaW50O1xuICogICBjb25uZWN0aW9uRW5kPzogUG9pbnQ7XG4gKiB9ICYgTGF5b3V0Q29ubmVjdGlvbkhpbnRzIH0gQnBtbkxheW91dENvbm5lY3Rpb25IaW50c1xuICovXG5cbnZhciBBVFRBQ0hfT1JJRU5UQVRJT05fUEFERElORyA9IC0xMCxcbiAgICBCT1VOREFSWV9UT19IT1NUX1RIUkVTSE9MRCA9IDQwO1xuXG52YXIgb3Bwb3NpdGVPcmllbnRhdGlvbk1hcHBpbmcgPSB7XG4gICd0b3AnOiAnYm90dG9tJyxcbiAgJ3RvcC1yaWdodCc6ICdib3R0b20tbGVmdCcsXG4gICd0b3AtbGVmdCc6ICdib3R0b20tcmlnaHQnLFxuICAncmlnaHQnOiAnbGVmdCcsXG4gICdib3R0b20nOiAndG9wJyxcbiAgJ2JvdHRvbS1yaWdodCc6ICd0b3AtbGVmdCcsXG4gICdib3R0b20tbGVmdCc6ICd0b3AtcmlnaHQnLFxuICAnbGVmdCc6ICdyaWdodCdcbn07XG5cbnZhciBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmcgPSB7XG4gIHRvcDogJ3QnLFxuICByaWdodDogJ3InLFxuICBib3R0b206ICdiJyxcbiAgbGVmdDogJ2wnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCcG1uTGF5b3V0ZXIoKSB7fVxuXG5pbmhlcml0cyhCcG1uTGF5b3V0ZXIsIEJhc2VMYXlvdXRlcik7XG5cbi8qKlxuICogUmV0dXJucyB3YXlwb2ludHMgb2YgbGFpZCBvdXQgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb25cbiAqIEBwYXJhbSB7QnBtbkxheW91dENvbm5lY3Rpb25IaW50c30gW2hpbnRzXVxuICpcbiAqIEByZXR1cm4ge1BvaW50W119XG4gKi9cbkJwbW5MYXlvdXRlci5wcm90b3R5cGUubGF5b3V0Q29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIGhpbnRzKSB7XG4gIGlmICghaGludHMpIHtcbiAgICBoaW50cyA9IHt9O1xuICB9XG5cbiAgdmFyIHNvdXJjZSA9IGhpbnRzLnNvdXJjZSB8fCBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGhpbnRzLnRhcmdldCB8fCBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgIHdheXBvaW50cyA9IGhpbnRzLndheXBvaW50cyB8fCBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgIGNvbm5lY3Rpb25TdGFydCA9IGhpbnRzLmNvbm5lY3Rpb25TdGFydCxcbiAgICAgIGNvbm5lY3Rpb25FbmQgPSBoaW50cy5jb25uZWN0aW9uRW5kO1xuXG4gIHZhciBtYW5oYXR0YW5PcHRpb25zLFxuICAgICAgdXBkYXRlZFdheXBvaW50cztcblxuICBpZiAoIWNvbm5lY3Rpb25TdGFydCkge1xuICAgIGNvbm5lY3Rpb25TdGFydCA9IGdldENvbm5lY3Rpb25Eb2NraW5nKHdheXBvaW50cyAmJiB3YXlwb2ludHNbIDAgXSwgc291cmNlKTtcbiAgfVxuXG4gIGlmICghY29ubmVjdGlvbkVuZCkge1xuICAgIGNvbm5lY3Rpb25FbmQgPSBnZXRDb25uZWN0aW9uRG9ja2luZyh3YXlwb2ludHMgJiYgd2F5cG9pbnRzWyB3YXlwb2ludHMubGVuZ3RoIC0gMSBdLCB0YXJnZXQpO1xuICB9XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHN1cHBvcnQgdmVydGljYWwgbW9kZWxpbmdcbiAgLy8gYW5kIGludmVydCBwcmVmZXJyZWRMYXlvdXRzIGFjY29yZGluZ2x5XG5cbiAgaWYgKGlzKGNvbm5lY3Rpb24sICdicG1uOkFzc29jaWF0aW9uJykgfHxcbiAgICAgIGlzKGNvbm5lY3Rpb24sICdicG1uOkRhdGFBc3NvY2lhdGlvbicpKSB7XG5cbiAgICBpZiAod2F5cG9pbnRzICYmICFpc0NvbXBlbnNhdGlvbkFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIFtdLmNvbmNhdChbIGNvbm5lY3Rpb25TdGFydCBdLCB3YXlwb2ludHMuc2xpY2UoMSwgLTEpLCBbIGNvbm5lY3Rpb25FbmQgXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKGNvbm5lY3Rpb24sICdicG1uOk1lc3NhZ2VGbG93JykpIHtcbiAgICBtYW5oYXR0YW5PcHRpb25zID0gZ2V0TWVzc2FnZUZsb3dNYW5oYXR0YW5PcHRpb25zKHNvdXJjZSwgdGFyZ2V0KTtcbiAgfSBlbHNlIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSB8fCBpc0NvbXBlbnNhdGlvbkFzc29jaWF0aW9uKHNvdXJjZSwgdGFyZ2V0KSkge1xuXG4gICAgLy8gbGF5b3V0IGFsbCBjb25uZWN0aW9uIGJldHdlZW4gZmxvdyBlbGVtZW50cyBoOmgsIGV4Y2VwdCBmb3JcbiAgICAvLyAoMSkgb3V0Z29pbmcgb2YgYm91bmRhcnkgZXZlbnRzIC0+IGxheW91dCBiYXNlZCBvbiBhdHRhY2ggb3JpZW50YXRpb24gYW5kIHRhcmdldCBvcmllbnRhdGlvblxuICAgIC8vICgyKSBpbmNvbWluZy9vdXRnb2luZyBvZiBnYXRld2F5cyAtPiB2OmggZm9yIG91dGdvaW5nLCBoOnYgZm9yIGluY29taW5nXG4gICAgLy8gKDMpIGxvb3BzXG4gICAgaWYgKHNvdXJjZSA9PT0gdGFyZ2V0KSB7XG4gICAgICBtYW5oYXR0YW5PcHRpb25zID0ge1xuICAgICAgICBwcmVmZXJyZWRMYXlvdXRzOiBnZXRMb29wUHJlZmVycmVkTGF5b3V0KHNvdXJjZSwgY29ubmVjdGlvbilcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpcyhzb3VyY2UsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogZ2V0Qm91bmRhcnlFdmVudFByZWZlcnJlZExheW91dHMoc291cmNlLCB0YXJnZXQsIGNvbm5lY3Rpb25FbmQpXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNFeHBhbmRlZFN1YlByb2Nlc3Moc291cmNlKSB8fCBpc0V4cGFuZGVkU3ViUHJvY2Vzcyh0YXJnZXQpKSB7XG4gICAgICBtYW5oYXR0YW5PcHRpb25zID0gZ2V0U3ViUHJvY2Vzc01hbmhhdHRhbk9wdGlvbnMoc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKGlzKHNvdXJjZSwgJ2JwbW46R2F0ZXdheScpKSB7XG4gICAgICBtYW5oYXR0YW5PcHRpb25zID0ge1xuICAgICAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICd2OmgnIF1cbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpcyh0YXJnZXQsICdicG1uOkdhdGV3YXknKSkge1xuICAgICAgbWFuaGF0dGFuT3B0aW9ucyA9IHtcbiAgICAgICAgcHJlZmVycmVkTGF5b3V0czogWyAnaDp2JyBdXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW5oYXR0YW5PcHRpb25zID0ge1xuICAgICAgICBwcmVmZXJyZWRMYXlvdXRzOiBbICdoOmgnIF1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hbmhhdHRhbk9wdGlvbnMpIHtcbiAgICBtYW5oYXR0YW5PcHRpb25zID0gYXNzaWduKG1hbmhhdHRhbk9wdGlvbnMsIGhpbnRzKTtcblxuICAgIHVwZGF0ZWRXYXlwb2ludHMgPSB3aXRob3V0UmVkdW5kYW50UG9pbnRzKHJlcGFpckNvbm5lY3Rpb24oXG4gICAgICBzb3VyY2UsXG4gICAgICB0YXJnZXQsXG4gICAgICBjb25uZWN0aW9uU3RhcnQsXG4gICAgICBjb25uZWN0aW9uRW5kLFxuICAgICAgd2F5cG9pbnRzLFxuICAgICAgbWFuaGF0dGFuT3B0aW9uc1xuICAgICkpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZWRXYXlwb2ludHMgfHwgWyBjb25uZWN0aW9uU3RhcnQsIGNvbm5lY3Rpb25FbmQgXTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEF0dGFjaE9yaWVudGF0aW9uKGF0dGFjaGVkRWxlbWVudCkge1xuICB2YXIgaG9zdEVsZW1lbnQgPSBhdHRhY2hlZEVsZW1lbnQuaG9zdDtcblxuICByZXR1cm4gZ2V0T3JpZW50YXRpb24oZ2V0TWlkKGF0dGFjaGVkRWxlbWVudCksIGhvc3RFbGVtZW50LCBBVFRBQ0hfT1JJRU5UQVRJT05fUEFERElORyk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VGbG93TWFuaGF0dGFuT3B0aW9ucyhzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4ge1xuICAgIHByZWZlcnJlZExheW91dHM6IFsgJ3N0cmFpZ2h0JywgJ3Y6dicgXSxcbiAgICBwcmVzZXJ2ZURvY2tpbmc6IGdldE1lc3NhZ2VGbG93UHJlc2VydmVEb2NraW5nKHNvdXJjZSwgdGFyZ2V0KVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlRmxvd1ByZXNlcnZlRG9ja2luZyhzb3VyY2UsIHRhcmdldCkge1xuXG4gIC8vICgxKSBkb2NraW5nIGVsZW1lbnQgY29ubmVjdGVkIHRvIHBhcnRpY2lwYW50IGhhcyBwcmVjZWRlbmNlXG4gIGlmIChpcyh0YXJnZXQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gJ3NvdXJjZSc7XG4gIH1cblxuICBpZiAoaXMoc291cmNlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuICd0YXJnZXQnO1xuICB9XG5cbiAgLy8gKDIpIGRvY2tpbmcgZWxlbWVudCBjb25uZWN0ZWQgdG8gZXhwYW5kZWQgc3ViLXByb2Nlc3MgaGFzIHByZWNlZGVuY2VcbiAgaWYgKGlzRXhwYW5kZWRTdWJQcm9jZXNzKHRhcmdldCkpIHtcbiAgICByZXR1cm4gJ3NvdXJjZSc7XG4gIH1cblxuICBpZiAoaXNFeHBhbmRlZFN1YlByb2Nlc3Moc291cmNlKSkge1xuICAgIHJldHVybiAndGFyZ2V0JztcbiAgfVxuXG4gIC8vICgzKSBkb2NraW5nIGV2ZW50IGhhcyBwcmVjZWRlbmNlXG4gIGlmIChpcyh0YXJnZXQsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4gJ3RhcmdldCc7XG4gIH1cblxuICBpZiAoaXMoc291cmNlLCAnYnBtbjpFdmVudCcpKSB7XG4gICAgcmV0dXJuICdzb3VyY2UnO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFN1YlByb2Nlc3NNYW5oYXR0YW5PcHRpb25zKHNvdXJjZSkge1xuICByZXR1cm4ge1xuICAgIHByZWZlcnJlZExheW91dHM6IFsgJ3N0cmFpZ2h0JywgJ2g6aCcgXSxcbiAgICBwcmVzZXJ2ZURvY2tpbmc6IGdldFN1YlByb2Nlc3NQcmVzZXJ2ZURvY2tpbmcoc291cmNlKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTdWJQcm9jZXNzUHJlc2VydmVEb2NraW5nKHNvdXJjZSkge1xuICByZXR1cm4gaXNFeHBhbmRlZFN1YlByb2Nlc3Moc291cmNlKSA/ICd0YXJnZXQnIDogJ3NvdXJjZSc7XG59XG5cbmZ1bmN0aW9uIGdldENvbm5lY3Rpb25Eb2NraW5nKHBvaW50LCBzaGFwZSkge1xuICByZXR1cm4gcG9pbnQgPyAocG9pbnQub3JpZ2luYWwgfHwgcG9pbnQpIDogZ2V0TWlkKHNoYXBlKTtcbn1cblxuZnVuY3Rpb24gaXNDb21wZW5zYXRpb25Bc3NvY2lhdGlvbihzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gaXModGFyZ2V0LCAnYnBtbjpBY3Rpdml0eScpICYmXG4gICAgaXMoc291cmNlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgJiZcbiAgICB0YXJnZXQuYnVzaW5lc3NPYmplY3QuaXNGb3JDb21wZW5zYXRpb247XG59XG5cbmZ1bmN0aW9uIGlzRXhwYW5kZWRTdWJQcm9jZXNzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlN1YlByb2Nlc3MnKSAmJiBpc0V4cGFuZGVkKGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWUoYSwgYikge1xuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuZnVuY3Rpb24gaXNBbnlPcmllbnRhdGlvbihvcmllbnRhdGlvbiwgb3JpZW50YXRpb25zKSB7XG4gIHJldHVybiBvcmllbnRhdGlvbnMuaW5kZXhPZihvcmllbnRhdGlvbikgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24ob3JpZW50YXRpb24pIHtcbiAgdmFyIG1hdGNoZXMgPSAvcmlnaHR8bGVmdC8uZXhlYyhvcmllbnRhdGlvbik7XG5cbiAgcmV0dXJuIG1hdGNoZXMgJiYgbWF0Y2hlc1swXTtcbn1cblxuZnVuY3Rpb24gZ2V0VmVydGljYWxPcmllbnRhdGlvbihvcmllbnRhdGlvbikge1xuICB2YXIgbWF0Y2hlcyA9IC90b3B8Ym90dG9tLy5leGVjKG9yaWVudGF0aW9uKTtcblxuICByZXR1cm4gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xufVxuXG5mdW5jdGlvbiBpc09wcG9zaXRlT3JpZW50YXRpb24oYSwgYikge1xuICByZXR1cm4gb3Bwb3NpdGVPcmllbnRhdGlvbk1hcHBpbmdbYV0gPT09IGI7XG59XG5cbmZ1bmN0aW9uIGlzT3Bwb3NpdGVIb3Jpem9udGFsT3JpZW50YXRpb24oYSwgYikge1xuICB2YXIgaG9yaXpvbnRhbE9yaWVudGF0aW9uID0gZ2V0SG9yaXpvbnRhbE9yaWVudGF0aW9uKGEpO1xuXG4gIHZhciBvcHBvc2l0ZUhvcml6b250YWxPcmllbnRhdGlvbiA9IG9wcG9zaXRlT3JpZW50YXRpb25NYXBwaW5nW2hvcml6b250YWxPcmllbnRhdGlvbl07XG5cbiAgcmV0dXJuIGIuaW5kZXhPZihvcHBvc2l0ZUhvcml6b250YWxPcmllbnRhdGlvbikgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBpc09wcG9zaXRlVmVydGljYWxPcmllbnRhdGlvbihhLCBiKSB7XG4gIHZhciB2ZXJ0aWNhbE9yaWVudGF0aW9uID0gZ2V0VmVydGljYWxPcmllbnRhdGlvbihhKTtcblxuICB2YXIgb3Bwb3NpdGVWZXJ0aWNhbE9yaWVudGF0aW9uID0gb3Bwb3NpdGVPcmllbnRhdGlvbk1hcHBpbmdbdmVydGljYWxPcmllbnRhdGlvbl07XG5cbiAgcmV0dXJuIGIuaW5kZXhPZihvcHBvc2l0ZVZlcnRpY2FsT3JpZW50YXRpb24pICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNIb3Jpem9udGFsT3JpZW50YXRpb24ob3JpZW50YXRpb24pIHtcbiAgcmV0dXJuIG9yaWVudGF0aW9uID09PSAncmlnaHQnIHx8IG9yaWVudGF0aW9uID09PSAnbGVmdCc7XG59XG5cbmZ1bmN0aW9uIGdldExvb3BQcmVmZXJyZWRMYXlvdXQoc291cmNlLCBjb25uZWN0aW9uKSB7XG4gIHZhciB3YXlwb2ludHMgPSBjb25uZWN0aW9uLndheXBvaW50cztcblxuICB2YXIgb3JpZW50YXRpb24gPSB3YXlwb2ludHMgJiYgd2F5cG9pbnRzLmxlbmd0aCAmJiBnZXRPcmllbnRhdGlvbih3YXlwb2ludHNbMF0sIHNvdXJjZSk7XG5cbiAgaWYgKG9yaWVudGF0aW9uID09PSAndG9wJykge1xuICAgIHJldHVybiBbICd0OnInIF07XG4gIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcbiAgICByZXR1cm4gWyAncjpiJyBdO1xuICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcbiAgICByZXR1cm4gWyAnbDp0JyBdO1xuICB9XG5cbiAgcmV0dXJuIFsgJ2I6bCcgXTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRhcnlFdmVudFByZWZlcnJlZExheW91dHMoc291cmNlLCB0YXJnZXQsIGVuZCkge1xuICB2YXIgc291cmNlTWlkID0gZ2V0TWlkKHNvdXJjZSksXG4gICAgICB0YXJnZXRNaWQgPSBnZXRNaWQodGFyZ2V0KSxcbiAgICAgIGF0dGFjaE9yaWVudGF0aW9uID0gZ2V0QXR0YWNoT3JpZW50YXRpb24oc291cmNlKSxcbiAgICAgIHNvdXJjZUxheW91dCxcbiAgICAgIHRhcmdldExheW91dDtcblxuICB2YXIgaXNMb29wID0gaXNTYW1lKHNvdXJjZS5ob3N0LCB0YXJnZXQpO1xuXG4gIHZhciBhdHRhY2hlZFRvU2lkZSA9IGlzQW55T3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24sIFsgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCcgXSk7XG5cbiAgdmFyIHRhcmdldE9yaWVudGF0aW9uID0gZ2V0T3JpZW50YXRpb24odGFyZ2V0TWlkLCBzb3VyY2VNaWQsIHtcbiAgICB4OiBzb3VyY2Uud2lkdGggLyAyICsgdGFyZ2V0LndpZHRoIC8gMixcbiAgICB5OiBzb3VyY2UuaGVpZ2h0IC8gMiArIHRhcmdldC5oZWlnaHQgLyAyXG4gIH0pO1xuXG4gIGlmIChpc0xvb3ApIHtcbiAgICByZXR1cm4gZ2V0Qm91bmRhcnlFdmVudExvb3BMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIGF0dGFjaGVkVG9TaWRlLCBzb3VyY2UsIHRhcmdldCwgZW5kKTtcbiAgfVxuXG4gIC8vIHNvdXJjZSBsYXlvdXRcbiAgc291cmNlTGF5b3V0ID0gZ2V0Qm91bmRhcnlFdmVudFNvdXJjZUxheW91dChhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24sIGF0dGFjaGVkVG9TaWRlKTtcblxuICAvLyB0YXJnZXQgbGF5b3V0XG4gIHRhcmdldExheW91dCA9IGdldEJvdW5kYXJ5RXZlbnRUYXJnZXRMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSk7XG5cbiAgcmV0dXJuIFsgc291cmNlTGF5b3V0ICsgJzonICsgdGFyZ2V0TGF5b3V0IF07XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRMb29wTGF5b3V0KGF0dGFjaE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSwgc291cmNlLCB0YXJnZXQsIGVuZCkge1xuICB2YXIgb3JpZW50YXRpb24gPSBhdHRhY2hlZFRvU2lkZSA/IGF0dGFjaE9yaWVudGF0aW9uIDogZ2V0VmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiksXG4gICAgICBzb3VyY2VMYXlvdXQgPSBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmdbIG9yaWVudGF0aW9uIF0sXG4gICAgICB0YXJnZXRMYXlvdXQ7XG5cbiAgaWYgKGF0dGFjaGVkVG9TaWRlKSB7XG4gICAgaWYgKGlzSG9yaXpvbnRhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSkge1xuICAgICAgdGFyZ2V0TGF5b3V0ID0gc2hvdWxkQ29ubmVjdFRvU2FtZVNpZGUoJ3knLCBzb3VyY2UsIHRhcmdldCwgZW5kKSA/ICdoJyA6ICdiJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0TGF5b3V0ID0gc2hvdWxkQ29ubmVjdFRvU2FtZVNpZGUoJ3gnLCBzb3VyY2UsIHRhcmdldCwgZW5kKSA/ICd2JyA6ICdsJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0TGF5b3V0ID0gJ3YnO1xuICB9XG5cbiAgcmV0dXJuIFsgc291cmNlTGF5b3V0ICsgJzonICsgdGFyZ2V0TGF5b3V0IF07XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbm5lY3RUb1NhbWVTaWRlKGF4aXMsIHNvdXJjZSwgdGFyZ2V0LCBlbmQpIHtcbiAgdmFyIHRocmVzaG9sZCA9IEJPVU5EQVJZX1RPX0hPU1RfVEhSRVNIT0xEO1xuXG4gIHJldHVybiAhKFxuICAgIGFyZUNsb3NlT25BeGlzKGF4aXMsIGVuZCwgdGFyZ2V0LCB0aHJlc2hvbGQpIHx8XG4gICAgYXJlQ2xvc2VPbkF4aXMoYXhpcywgZW5kLCB7XG4gICAgICB4OiB0YXJnZXQueCArIHRhcmdldC53aWR0aCxcbiAgICAgIHk6IHRhcmdldC55ICsgdGFyZ2V0LmhlaWdodFxuICAgIH0sIHRocmVzaG9sZCkgfHxcbiAgICBhcmVDbG9zZU9uQXhpcyhheGlzLCBlbmQsIGdldE1pZChzb3VyY2UpLCB0aHJlc2hvbGQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFyZUNsb3NlT25BeGlzKGF4aXMsIGEsIGIsIHRocmVzaG9sZCkge1xuICByZXR1cm4gTWF0aC5hYnMoYVsgYXhpcyBdIC0gYlsgYXhpcyBdKSA8IHRocmVzaG9sZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRhcnlFdmVudFNvdXJjZUxheW91dChhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24sIGF0dGFjaGVkVG9TaWRlKSB7XG5cbiAgLy8gYXR0YWNoZWQgdG8gZWl0aGVyIHRvcCwgcmlnaHQsIGJvdHRvbSBvciBsZWZ0IHNpZGVcbiAgaWYgKGF0dGFjaGVkVG9TaWRlKSB7XG4gICAgcmV0dXJuIG9yaWVudGF0aW9uRGlyZWN0aW9uTWFwcGluZ1sgYXR0YWNoT3JpZW50YXRpb24gXTtcbiAgfVxuXG4gIC8vIGF0dGFjaGVkIHRvIGVpdGhlciB0b3AtcmlnaHQsIHRvcC1sZWZ0LCBib3R0b20tcmlnaHQgb3IgYm90dG9tLWxlZnQgY29ybmVyXG5cbiAgLy8gc2FtZSB2ZXJ0aWNhbCBvciBvcHBvc2l0ZSBob3Jpem9udGFsIG9yaWVudGF0aW9uXG4gIGlmIChpc1NhbWUoXG4gICAgZ2V0VmVydGljYWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiksIGdldFZlcnRpY2FsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pXG4gICkgfHwgaXNPcHBvc2l0ZU9yaWVudGF0aW9uKFxuICAgIGdldEhvcml6b250YWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiksIGdldEhvcml6b250YWxPcmllbnRhdGlvbih0YXJnZXRPcmllbnRhdGlvbilcbiAgKSkge1xuICAgIHJldHVybiBvcmllbnRhdGlvbkRpcmVjdGlvbk1hcHBpbmdbIGdldFZlcnRpY2FsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pIF07XG4gIH1cblxuICAvLyBmYWxsYmFja1xuICByZXR1cm4gb3JpZW50YXRpb25EaXJlY3Rpb25NYXBwaW5nWyBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24oYXR0YWNoT3JpZW50YXRpb24pIF07XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kYXJ5RXZlbnRUYXJnZXRMYXlvdXQoYXR0YWNoT3JpZW50YXRpb24sIHRhcmdldE9yaWVudGF0aW9uLCBhdHRhY2hlZFRvU2lkZSkge1xuXG4gIC8vIGF0dGFjaGVkIHRvIGVpdGhlciB0b3AsIHJpZ2h0LCBib3R0b20gb3IgbGVmdCBzaWRlXG4gIGlmIChhdHRhY2hlZFRvU2lkZSkge1xuICAgIGlmIChpc0hvcml6b250YWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbikpIHtcblxuICAgICAgLy8gb3JpZW50YXRpb24gaXMgcmlnaHQgb3IgbGVmdFxuXG4gICAgICAvLyBvcHBvc2l0ZSBob3Jpem9udGFsIG9yaWVudGF0aW9uIG9yIHNhbWUgb3JpZW50YXRpb25cbiAgICAgIGlmIChcbiAgICAgICAgaXNPcHBvc2l0ZUhvcml6b250YWxPcmllbnRhdGlvbihhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pIHx8XG4gICAgICAgIGlzU2FtZShhdHRhY2hPcmllbnRhdGlvbiwgdGFyZ2V0T3JpZW50YXRpb24pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuICdoJztcbiAgICAgIH1cblxuICAgICAgLy8gZmFsbGJhY2tcbiAgICAgIHJldHVybiAndic7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gb3JpZW50YXRpb24gaXMgdG9wIG9yIGJvdHRvbVxuXG4gICAgICAvLyBvcHBvc2l0ZSB2ZXJ0aWNhbCBvcmllbnRhdGlvbiBvciBzYW1lIG9yaWVudGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIGlzT3Bwb3NpdGVWZXJ0aWNhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbikgfHxcbiAgICAgICAgaXNTYW1lKGF0dGFjaE9yaWVudGF0aW9uLCB0YXJnZXRPcmllbnRhdGlvbilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gJ3YnO1xuICAgICAgfVxuXG4gICAgICAvLyBmYWxsYmFja1xuICAgICAgcmV0dXJuICdoJztcbiAgICB9XG4gIH1cblxuICAvLyBhdHRhY2hlZCB0byBlaXRoZXIgdG9wLXJpZ2h0LCB0b3AtbGVmdCwgYm90dG9tLXJpZ2h0IG9yIGJvdHRvbS1sZWZ0IGNvcm5lclxuXG4gIC8vIG9yaWVudGF0aW9uIGlzIHJpZ2h0LCBsZWZ0XG4gIC8vIG9yIHNhbWUgdmVydGljYWwgb3JpZW50YXRpb24gYnV0IGFsc28gcmlnaHQgb3IgbGVmdFxuICBpZiAoaXNIb3Jpem9udGFsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pIHx8XG4gICAgKGlzU2FtZShnZXRWZXJ0aWNhbE9yaWVudGF0aW9uKGF0dGFjaE9yaWVudGF0aW9uKSwgZ2V0VmVydGljYWxPcmllbnRhdGlvbih0YXJnZXRPcmllbnRhdGlvbikpICYmXG4gICAgICBnZXRIb3Jpem9udGFsT3JpZW50YXRpb24odGFyZ2V0T3JpZW50YXRpb24pKSkge1xuICAgIHJldHVybiAnaCc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICd2JztcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnLayouter.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnUpdater.js":
/*!************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnUpdater.js ***!
\************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BpmnUpdater)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Collections.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/DrilldownUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DrilldownUtil.js\");\n/* harmony import */ var diagram_js_lib_util_PositionUtil__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! diagram-js/lib/util/PositionUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/PositionUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('./BpmnFactory').default} BpmnFactory\n * @typedef {import('diagram-js/lib/layout/CroppingConnectionDocking').default} CroppingConnectionDocking\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n *\n * @typedef {import('../../model/Types').Connection} Connection\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('../../model/Types').Shape} Shape\n * @typedef {import('../../model/Types').Parent} Parent\n * @typedef {import('../../model/Types').ModdleElement} ModdleElement\n */\n\n/**\n * A handler responsible for updating the underlying BPMN 2.0 XML & DI\n * once changes on the diagram happen.\n *\n * @param {EventBus} eventBus\n * @param {BpmnFactory} bpmnFactory\n * @param {CroppingConnectionDocking} connectionDocking\n * @param {Translate} translate\n */\nfunction BpmnUpdater(\n eventBus,\n bpmnFactory,\n connectionDocking,\n translate\n) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this._bpmnFactory = bpmnFactory;\n this._translate = translate;\n\n var self = this;\n\n\n\n // connection cropping //////////////////////\n\n // crop connection ends during create/update\n function cropConnection(e) {\n var context = e.context,\n hints = context.hints || {},\n connection;\n\n if (!context.cropped && hints.createElementsBehavior !== false) {\n connection = context.connection;\n connection.waypoints = connectionDocking.getCroppedWaypoints(connection);\n context.cropped = true;\n }\n }\n\n this.executed([\n 'connection.layout',\n 'connection.create'\n ], cropConnection);\n\n this.reverted([ 'connection.layout' ], function(e) {\n delete e.context.cropped;\n });\n\n\n\n // BPMN + DI update //////////////////////\n\n\n // update parent\n function updateParent(e) {\n var context = e.context;\n\n self.updateParent(context.shape || context.connection, context.oldParent);\n }\n\n function reverseUpdateParent(e) {\n var context = e.context;\n\n var element = context.shape || context.connection,\n\n // oldParent is the (old) new parent, because we are undoing\n oldParent = context.parent || context.newParent;\n\n self.updateParent(element, oldParent);\n }\n\n this.executed([\n 'shape.move',\n 'shape.create',\n 'shape.delete',\n 'connection.create',\n 'connection.move',\n 'connection.delete'\n ], ifBpmn(updateParent));\n\n this.reverted([\n 'shape.move',\n 'shape.create',\n 'shape.delete',\n 'connection.create',\n 'connection.move',\n 'connection.delete'\n ], ifBpmn(reverseUpdateParent));\n\n /*\n * ## Updating Parent\n *\n * When morphing a Process into a Collaboration or vice-versa,\n * make sure that both the *semantic* and *di* parent of each element\n * is updated.\n *\n */\n function updateRoot(event) {\n var context = event.context,\n oldRoot = context.oldRoot,\n children = oldRoot.children;\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.forEach)(children, function(child) {\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(child, 'bpmn:BaseElement')) {\n self.updateParent(child);\n }\n });\n }\n\n this.executed([ 'canvas.updateRoot' ], updateRoot);\n this.reverted([ 'canvas.updateRoot' ], updateRoot);\n\n\n // update bounds\n function updateBounds(e) {\n var shape = e.context.shape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:BaseElement')) {\n return;\n }\n\n self.updateBounds(shape);\n }\n\n this.executed([ 'shape.move', 'shape.create', 'shape.resize' ], ifBpmn(function(event) {\n\n // exclude labels because they're handled separately during shape.changed\n if (event.context.shape.type === 'label') {\n return;\n }\n\n updateBounds(event);\n }));\n\n this.reverted([ 'shape.move', 'shape.create', 'shape.resize' ], ifBpmn(function(event) {\n\n // exclude labels because they're handled separately during shape.changed\n if (event.context.shape.type === 'label') {\n return;\n }\n\n updateBounds(event);\n }));\n\n // Handle labels separately. This is necessary, because the label bounds have to be updated\n // every time its shape changes, not only on move, create and resize.\n eventBus.on('shape.changed', function(event) {\n if (event.element.type === 'label') {\n updateBounds({ context: { shape: event.element } });\n }\n });\n\n // attach / detach connection\n function updateConnection(e) {\n self.updateConnection(e.context);\n }\n\n this.executed([\n 'connection.create',\n 'connection.move',\n 'connection.delete',\n 'connection.reconnect'\n ], ifBpmn(updateConnection));\n\n this.reverted([\n 'connection.create',\n 'connection.move',\n 'connection.delete',\n 'connection.reconnect'\n ], ifBpmn(updateConnection));\n\n\n // update waypoints\n function updateConnectionWaypoints(e) {\n self.updateConnectionWaypoints(e.context.connection);\n }\n\n this.executed([\n 'connection.layout',\n 'connection.move',\n 'connection.updateWaypoints',\n ], ifBpmn(updateConnectionWaypoints));\n\n this.reverted([\n 'connection.layout',\n 'connection.move',\n 'connection.updateWaypoints',\n ], ifBpmn(updateConnectionWaypoints));\n\n // update conditional/default flows\n this.executed('connection.reconnect', ifBpmn(function(event) {\n var context = event.context,\n connection = context.connection,\n oldSource = context.oldSource,\n newSource = context.newSource,\n connectionBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(connection),\n oldSourceBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(oldSource),\n newSourceBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(newSource);\n\n // remove condition from connection on reconnect to new source\n // if new source can NOT have condional sequence flow\n if (connectionBo.conditionExpression && !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.isAny)(newSourceBo, [\n 'bpmn:Activity',\n 'bpmn:ExclusiveGateway',\n 'bpmn:InclusiveGateway'\n ])) {\n context.oldConditionExpression = connectionBo.conditionExpression;\n\n delete connectionBo.conditionExpression;\n }\n\n // remove default from old source flow on reconnect to new source\n // if source changed\n if (oldSource !== newSource && oldSourceBo.default === connectionBo) {\n context.oldDefault = oldSourceBo.default;\n\n delete oldSourceBo.default;\n }\n }));\n\n this.reverted('connection.reconnect', ifBpmn(function(event) {\n var context = event.context,\n connection = context.connection,\n oldSource = context.oldSource,\n newSource = context.newSource,\n connectionBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(connection),\n oldSourceBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(oldSource),\n newSourceBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(newSource);\n\n // add condition to connection on revert reconnect to new source\n if (context.oldConditionExpression) {\n connectionBo.conditionExpression = context.oldConditionExpression;\n }\n\n // add default to old source on revert reconnect to new source\n if (context.oldDefault) {\n oldSourceBo.default = context.oldDefault;\n\n delete newSourceBo.default;\n }\n }));\n\n // update attachments\n function updateAttachment(e) {\n self.updateAttachment(e.context);\n }\n\n this.executed([ 'element.updateAttachment' ], ifBpmn(updateAttachment));\n this.reverted([ 'element.updateAttachment' ], ifBpmn(updateAttachment));\n\n\n // update BPMNLabel\n this.executed('element.updateLabel', ifBpmn(updateBPMNLabel));\n this.reverted('element.updateLabel', ifBpmn(updateBPMNLabel));\n\n function updateBPMNLabel(event) {\n const { element } = event.context,\n label = (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.getLabel)(element);\n const di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(element),\n diLabel = di && di.get('label');\n\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.isLabelExternal)(element) || (0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_4__.isPlane)(element)) {\n return;\n }\n\n if (label && !diLabel) {\n di.set('label', bpmnFactory.create('bpmndi:BPMNLabel'));\n } else if (!label && diLabel) {\n di.set('label', undefined);\n }\n }\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(BpmnUpdater, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nBpmnUpdater.$inject = [\n 'eventBus',\n 'bpmnFactory',\n 'connectionDocking',\n 'translate'\n];\n\n\n// implementation //////////////////////\n\n/**\n * @param { {\n * shape: Shape;\n * host: Shape;\n * } } context\n */\nBpmnUpdater.prototype.updateAttachment = function(context) {\n\n var shape = context.shape,\n businessObject = shape.businessObject,\n host = shape.host;\n\n businessObject.attachedToRef = host && host.businessObject;\n};\n\n/**\n * @param {Element} element\n * @param {Parent} oldParent\n */\nBpmnUpdater.prototype.updateParent = function(element, oldParent) {\n\n // do not update BPMN 2.0 label parent\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_6__.isLabel)(element)) {\n return;\n }\n\n // data stores in collaborations are handled separately by DataStoreBehavior\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:DataStoreReference') &&\n element.parent &&\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element.parent, 'bpmn:Collaboration')) {\n return;\n }\n\n var parentShape = element.parent;\n\n var businessObject = element.businessObject,\n di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(element),\n parentBusinessObject = parentShape && parentShape.businessObject,\n parentDi = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(parentShape);\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:FlowNode')) {\n this.updateFlowNodeRefs(businessObject, parentBusinessObject, oldParent && oldParent.businessObject);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:DataOutputAssociation')) {\n if (element.source) {\n parentBusinessObject = element.source.businessObject;\n } else {\n parentBusinessObject = null;\n }\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:DataInputAssociation')) {\n if (element.target) {\n parentBusinessObject = element.target.businessObject;\n } else {\n parentBusinessObject = null;\n }\n }\n\n this.updateSemanticParent(businessObject, parentBusinessObject);\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:DataObjectReference') && businessObject.dataObjectRef) {\n this.updateSemanticParent(businessObject.dataObjectRef, parentBusinessObject);\n }\n\n this.updateDiParent(di, parentDi);\n};\n\n/**\n * @param {Shape} shape\n */\nBpmnUpdater.prototype.updateBounds = function(shape) {\n\n var di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(shape),\n embeddedLabelBounds = getEmbeddedLabelBounds(shape);\n\n // update embedded label bounds if possible\n if (embeddedLabelBounds) {\n var embeddedLabelBoundsDelta = (0,diagram_js_lib_util_PositionUtil__WEBPACK_IMPORTED_MODULE_7__.delta)(embeddedLabelBounds, di.get('bounds'));\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(embeddedLabelBounds, {\n x: shape.x + embeddedLabelBoundsDelta.x,\n y: shape.y + embeddedLabelBoundsDelta.y\n });\n }\n\n var target = (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_6__.isLabel)(shape) ? this._getLabel(di) : di;\n\n var bounds = target.bounds;\n\n if (!bounds) {\n bounds = this._bpmnFactory.createDiBounds();\n target.set('bounds', bounds);\n }\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)(bounds, {\n x: shape.x,\n y: shape.y,\n width: shape.width,\n height: shape.height\n });\n};\n\n/**\n * @param {ModdleElement} businessObject\n * @param {ModdleElement} newContainment\n * @param {ModdleElement} oldContainment\n */\nBpmnUpdater.prototype.updateFlowNodeRefs = function(businessObject, newContainment, oldContainment) {\n\n if (oldContainment === newContainment) {\n return;\n }\n\n var oldRefs, newRefs;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is) (oldContainment, 'bpmn:Lane')) {\n oldRefs = oldContainment.get('flowNodeRef');\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.remove)(oldRefs, businessObject);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newContainment, 'bpmn:Lane')) {\n newRefs = newContainment.get('flowNodeRef');\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.add)(newRefs, businessObject);\n }\n};\n\n/**\n * @param {Connection} connection\n * @param {Element} newSource\n * @param {Element} newTarget\n */\nBpmnUpdater.prototype.updateDiConnection = function(connection, newSource, newTarget) {\n var connectionDi = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(connection),\n newSourceDi = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(newSource),\n newTargetDi = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(newTarget);\n\n if (connectionDi.sourceElement && connectionDi.sourceElement.bpmnElement !== (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(newSource)) {\n connectionDi.sourceElement = newSource && newSourceDi;\n }\n\n if (connectionDi.targetElement && connectionDi.targetElement.bpmnElement !== (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(newTarget)) {\n connectionDi.targetElement = newTarget && newTargetDi;\n }\n\n};\n\n/**\n * @param {ModdleElement} di\n * @param {ModdleElement} parentDi\n */\nBpmnUpdater.prototype.updateDiParent = function(di, parentDi) {\n\n if (parentDi && !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(parentDi, 'bpmndi:BPMNPlane')) {\n parentDi = parentDi.$parent;\n }\n\n if (di.$parent === parentDi) {\n return;\n }\n\n var planeElements = (parentDi || di.$parent).get('planeElement');\n\n if (parentDi) {\n planeElements.push(di);\n di.$parent = parentDi;\n } else {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.remove)(planeElements, di);\n di.$parent = null;\n }\n};\n\n/**\n * @param {ModdleElement} element\n *\n * @return {ModdleElement}\n */\nfunction getDefinitions(element) {\n while (element && !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:Definitions')) {\n element = element.$parent;\n }\n\n return element;\n}\n\n/**\n * @param {ModdleElement} container\n *\n * @return {ModdleElement}\n */\nBpmnUpdater.prototype.getLaneSet = function(container) {\n\n var laneSet, laneSets;\n\n // bpmn:Lane\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(container, 'bpmn:Lane')) {\n laneSet = container.childLaneSet;\n\n if (!laneSet) {\n laneSet = this._bpmnFactory.create('bpmn:LaneSet');\n container.childLaneSet = laneSet;\n laneSet.$parent = container;\n }\n\n return laneSet;\n }\n\n // bpmn:Participant\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(container, 'bpmn:Participant')) {\n container = container.processRef;\n }\n\n // bpmn:FlowElementsContainer\n laneSets = container.get('laneSets');\n laneSet = laneSets[0];\n\n if (!laneSet) {\n laneSet = this._bpmnFactory.create('bpmn:LaneSet');\n laneSet.$parent = container;\n laneSets.push(laneSet);\n }\n\n return laneSet;\n};\n\n/**\n * @param {ModdleElement} businessObject\n * @param {ModdleElement} newParent\n * @param {ModdleElement} visualParent\n */\nBpmnUpdater.prototype.updateSemanticParent = function(businessObject, newParent, visualParent) {\n\n var containment,\n translate = this._translate;\n\n if (businessObject.$parent === newParent) {\n return;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:DataInput') || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:DataOutput')) {\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newParent, 'bpmn:Participant') && 'processRef' in newParent) {\n newParent = newParent.processRef;\n }\n\n // already in correct ioSpecification\n if ('ioSpecification' in newParent && newParent.ioSpecification === businessObject.$parent) {\n return;\n }\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:Lane')) {\n\n if (newParent) {\n newParent = this.getLaneSet(newParent);\n }\n\n containment = 'lanes';\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:FlowElement')) {\n\n if (newParent) {\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newParent, 'bpmn:Participant')) {\n newParent = newParent.processRef;\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newParent, 'bpmn:Lane')) {\n do {\n\n // unwrap Lane -> LaneSet -> (Lane | FlowElementsContainer)\n newParent = newParent.$parent.$parent;\n } while ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newParent, 'bpmn:Lane'));\n\n }\n }\n\n containment = 'flowElements';\n\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:Artifact')) {\n\n while (newParent &&\n !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newParent, 'bpmn:Process') &&\n !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newParent, 'bpmn:SubProcess') &&\n !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newParent, 'bpmn:Collaboration')) {\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newParent, 'bpmn:Participant')) {\n newParent = newParent.processRef;\n break;\n } else {\n newParent = newParent.$parent;\n }\n }\n\n containment = 'artifacts';\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:MessageFlow')) {\n containment = 'messageFlows';\n\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:Participant')) {\n containment = 'participants';\n\n // make sure the participants process is properly attached / detached\n // from the XML document\n\n var process = businessObject.processRef,\n definitions;\n\n if (process) {\n definitions = getDefinitions(businessObject.$parent || newParent);\n\n if (businessObject.$parent) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.remove)(definitions.get('rootElements'), process);\n process.$parent = null;\n }\n\n if (newParent) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.add)(definitions.get('rootElements'), process);\n process.$parent = definitions;\n }\n }\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:DataOutputAssociation')) {\n containment = 'dataOutputAssociations';\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:DataInputAssociation')) {\n containment = 'dataInputAssociations';\n }\n\n if (!containment) {\n throw new Error(translate(\n 'no parent for {element} in {parent}',\n {\n element: businessObject.id,\n parent: newParent.id\n }\n ));\n }\n\n var children;\n\n if (businessObject.$parent) {\n\n // remove from old parent\n children = businessObject.$parent.get(containment);\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.remove)(children, businessObject);\n }\n\n if (!newParent) {\n businessObject.$parent = null;\n } else {\n\n // add to new parent\n children = newParent.get(containment);\n children.push(businessObject);\n businessObject.$parent = newParent;\n }\n\n if (visualParent) {\n var diChildren = visualParent.get(containment);\n\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.remove)(children, businessObject);\n\n if (newParent) {\n\n if (!diChildren) {\n diChildren = [];\n newParent.set(containment, diChildren);\n }\n\n diChildren.push(businessObject);\n }\n }\n};\n\n/**\n * @param {Connection} connection\n */\nBpmnUpdater.prototype.updateConnectionWaypoints = function(connection) {\n var di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(connection);\n\n di.set('waypoint', this._bpmnFactory.createDiWaypoints(connection.waypoints));\n};\n\n/**\n * @param { {\n * connection: Connection;\n * parent: Parent;\n * newParent: Parent;\n * } } context\n */\nBpmnUpdater.prototype.updateConnection = function(context) {\n var connection = context.connection,\n businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(connection),\n newSource = connection.source,\n newSourceBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(newSource),\n newTarget = connection.target,\n newTargetBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(connection.target),\n visualParent;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:DataAssociation')) {\n\n var inverseSet = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:SequenceFlow');\n\n if (businessObject.sourceRef !== newSourceBo) {\n if (inverseSet) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.remove)(businessObject.sourceRef && businessObject.sourceRef.get('outgoing'), businessObject);\n\n if (newSourceBo && newSourceBo.get('outgoing')) {\n newSourceBo.get('outgoing').push(businessObject);\n }\n }\n\n businessObject.sourceRef = newSourceBo;\n }\n\n if (businessObject.targetRef !== newTargetBo) {\n if (inverseSet) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_8__.remove)(businessObject.targetRef && businessObject.targetRef.get('incoming'), businessObject);\n\n if (newTargetBo && newTargetBo.get('incoming')) {\n newTargetBo.get('incoming').push(businessObject);\n }\n }\n\n businessObject.targetRef = newTargetBo;\n }\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:DataInputAssociation')) {\n\n // handle obnoxious isMsome sourceRef\n businessObject.get('sourceRef')[0] = newSourceBo;\n\n visualParent = context.parent || context.newParent || newTargetBo;\n\n this.updateSemanticParent(businessObject, newTargetBo, visualParent);\n } else\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:DataOutputAssociation')) {\n visualParent = context.parent || context.newParent || newSourceBo;\n\n this.updateSemanticParent(businessObject, newSourceBo, visualParent);\n\n // targetRef = new target\n businessObject.targetRef = newTargetBo;\n }\n\n this.updateConnectionWaypoints(connection);\n\n this.updateDiConnection(connection, newSource, newTarget);\n};\n\n\n// helpers //////////////////////\n\nBpmnUpdater.prototype._getLabel = function(di) {\n if (!di.label) {\n di.label = this._bpmnFactory.createDiLabel();\n }\n\n return di.label;\n};\n\n\n/**\n * Call function if shape or connection is BPMN element.\n *\n * @param {Function} fn\n *\n * @return {Function}\n */\nfunction ifBpmn(fn) {\n\n return function(event) {\n\n var context = event.context,\n element = context.shape || context.connection || context.element;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:BaseElement')) {\n fn(event);\n }\n };\n}\n\n/**\n * Return dc:Bounds of bpmndi:BPMNLabel if exists.\n *\n * @param {Shape} shape\n *\n * @return {ModdleElement|undefined}\n */\nfunction getEmbeddedLabelBounds(shape) {\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:Activity')) {\n return;\n }\n\n var di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(shape);\n\n if (!di) {\n return;\n }\n\n var label = di.get('label');\n\n if (!label) {\n return;\n }\n\n return label.get('bounds');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9CcG1uVXBkYXRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBR2tCOztBQUVzQjs7QUFLQzs7QUFNWDs7QUFFYzs7QUFNZDs7QUFFcUI7O0FBRU07O0FBRWtCOztBQUUzRTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsaUNBQWlDO0FBQzlDLGFBQWEsbUVBQW1FO0FBQ2hGLGFBQWEsMkRBQTJEO0FBQ3hFO0FBQ0EsYUFBYSx3Q0FBd0M7QUFDckQsYUFBYSxxQ0FBcUM7QUFDbEQsYUFBYSxtQ0FBbUM7QUFDaEQsYUFBYSxvQ0FBb0M7QUFDakQsYUFBYSwyQ0FBMkM7QUFDeEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsMkJBQTJCO0FBQ3RDLFdBQVcsV0FBVztBQUN0QjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGlGQUFrQjs7QUFFcEI7QUFDQTs7QUFFQTs7OztBQUlBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7Ozs7QUFJSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLGlEQUFPO0FBQ1gsVUFBVSxtREFBRTtBQUNa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QixrRUFBaUI7QUFDckM7O0FBRUEsT0FBTyxtREFBRTs7QUFFVCxxQkFBcUIsbURBQUU7O0FBRXZCO0FBQ0E7QUFDQSxRQUFRLHVFQUFnQjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSx1RUFBZ0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLE1BQU0sbURBQUU7O0FBRVI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLElBQUk7O0FBRUosTUFBTSxtREFBRTtBQUNSOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLFFBQVEsbURBQUU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLE9BQU8sbURBQUU7QUFDVDtBQUNBOztBQUVBLFdBQVcsc0RBQUs7O0FBRWhCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL0JwbW5VcGRhdGVyLmpzPzgwNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBnZXREaSxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRMYWJlbCxcbiAgaXNMYWJlbCxcbiAgaXNMYWJlbEV4dGVybmFsXG59IGZyb20gJy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHsgaXNQbGFuZSB9IGZyb20gJy4uLy4uL3V0aWwvRHJpbGxkb3duVXRpbCc7XG5cbmltcG9ydCB7IGRlbHRhIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Qb3NpdGlvblV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vQnBtbkZhY3RvcnknKS5kZWZhdWx0fSBCcG1uRmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0Nyb3BwaW5nQ29ubmVjdGlvbkRvY2tpbmcnKS5kZWZhdWx0fSBDcm9wcGluZ0Nvbm5lY3Rpb25Eb2NraW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZS90cmFuc2xhdGUnKS5kZWZhdWx0fSBUcmFuc2xhdGVcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLkNvbm5lY3Rpb259IENvbm5lY3Rpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5TaGFwZX0gU2hhcGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuUGFyZW50fSBQYXJlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuTW9kZGxlRWxlbWVudH0gTW9kZGxlRWxlbWVudFxuICovXG5cbi8qKlxuICogQSBoYW5kbGVyIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgdW5kZXJseWluZyBCUE1OIDIuMCBYTUwgJiBESVxuICogb25jZSBjaGFuZ2VzIG9uIHRoZSBkaWFncmFtIGhhcHBlbi5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqIEBwYXJhbSB7Q3JvcHBpbmdDb25uZWN0aW9uRG9ja2luZ30gY29ubmVjdGlvbkRvY2tpbmdcbiAqIEBwYXJhbSB7VHJhbnNsYXRlfSB0cmFuc2xhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQnBtblVwZGF0ZXIoXG4gICAgZXZlbnRCdXMsXG4gICAgYnBtbkZhY3RvcnksXG4gICAgY29ubmVjdGlvbkRvY2tpbmcsXG4gICAgdHJhbnNsYXRlXG4pIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuXG5cbiAgLy8gY29ubmVjdGlvbiBjcm9wcGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gY3JvcCBjb25uZWN0aW9uIGVuZHMgZHVyaW5nIGNyZWF0ZS91cGRhdGVcbiAgZnVuY3Rpb24gY3JvcENvbm5lY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge30sXG4gICAgICAgIGNvbm5lY3Rpb247XG5cbiAgICBpZiAoIWNvbnRleHQuY3JvcHBlZCAmJiBoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcbiAgICAgIGNvbm5lY3Rpb24ud2F5cG9pbnRzID0gY29ubmVjdGlvbkRvY2tpbmcuZ2V0Q3JvcHBlZFdheXBvaW50cyhjb25uZWN0aW9uKTtcbiAgICAgIGNvbnRleHQuY3JvcHBlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnXG4gIF0sIGNyb3BDb25uZWN0aW9uKTtcblxuICB0aGlzLnJldmVydGVkKFsgJ2Nvbm5lY3Rpb24ubGF5b3V0JyBdLCBmdW5jdGlvbihlKSB7XG4gICAgZGVsZXRlIGUuY29udGV4dC5jcm9wcGVkO1xuICB9KTtcblxuXG5cbiAgLy8gQlBNTiArIERJIHVwZGF0ZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuICAvLyB1cGRhdGUgcGFyZW50XG4gIGZ1bmN0aW9uIHVwZGF0ZVBhcmVudChlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQ7XG5cbiAgICBzZWxmLnVwZGF0ZVBhcmVudChjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbiwgY29udGV4dC5vbGRQYXJlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJzZVVwZGF0ZVBhcmVudChlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQ7XG5cbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuc2hhcGUgfHwgY29udGV4dC5jb25uZWN0aW9uLFxuXG4gICAgICAgIC8vIG9sZFBhcmVudCBpcyB0aGUgKG9sZCkgbmV3IHBhcmVudCwgYmVjYXVzZSB3ZSBhcmUgdW5kb2luZ1xuICAgICAgICBvbGRQYXJlbnQgPSBjb250ZXh0LnBhcmVudCB8fCBjb250ZXh0Lm5ld1BhcmVudDtcblxuICAgIHNlbGYudXBkYXRlUGFyZW50KGVsZW1lbnQsIG9sZFBhcmVudCk7XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFtcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLmNyZWF0ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnXG4gIF0sIGlmQnBtbih1cGRhdGVQYXJlbnQpKTtcblxuICB0aGlzLnJldmVydGVkKFtcbiAgICAnc2hhcGUubW92ZScsXG4gICAgJ3NoYXBlLmNyZWF0ZScsXG4gICAgJ3NoYXBlLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnXG4gIF0sIGlmQnBtbihyZXZlcnNlVXBkYXRlUGFyZW50KSk7XG5cbiAgLypcbiAgICogIyMgVXBkYXRpbmcgUGFyZW50XG4gICAqXG4gICAqIFdoZW4gbW9ycGhpbmcgYSBQcm9jZXNzIGludG8gYSBDb2xsYWJvcmF0aW9uIG9yIHZpY2UtdmVyc2EsXG4gICAqIG1ha2Ugc3VyZSB0aGF0IGJvdGggdGhlICpzZW1hbnRpYyogYW5kICpkaSogcGFyZW50IG9mIGVhY2ggZWxlbWVudFxuICAgKiBpcyB1cGRhdGVkLlxuICAgKlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlUm9vdChldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgb2xkUm9vdCA9IGNvbnRleHQub2xkUm9vdCxcbiAgICAgICAgY2hpbGRyZW4gPSBvbGRSb290LmNoaWxkcmVuO1xuXG4gICAgZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIGlmIChpcyhjaGlsZCwgJ2JwbW46QmFzZUVsZW1lbnQnKSkge1xuICAgICAgICBzZWxmLnVwZGF0ZVBhcmVudChjaGlsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ2NhbnZhcy51cGRhdGVSb290JyBdLCB1cGRhdGVSb290KTtcbiAgdGhpcy5yZXZlcnRlZChbICdjYW52YXMudXBkYXRlUm9vdCcgXSwgdXBkYXRlUm9vdCk7XG5cblxuICAvLyB1cGRhdGUgYm91bmRzXG4gIGZ1bmN0aW9uIHVwZGF0ZUJvdW5kcyhlKSB7XG4gICAgdmFyIHNoYXBlID0gZS5jb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46QmFzZUVsZW1lbnQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlQm91bmRzKHNoYXBlKTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoWyAnc2hhcGUubW92ZScsICdzaGFwZS5jcmVhdGUnLCAnc2hhcGUucmVzaXplJyBdLCBpZkJwbW4oZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIGV4Y2x1ZGUgbGFiZWxzIGJlY2F1c2UgdGhleSdyZSBoYW5kbGVkIHNlcGFyYXRlbHkgZHVyaW5nIHNoYXBlLmNoYW5nZWRcbiAgICBpZiAoZXZlbnQuY29udGV4dC5zaGFwZS50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlQm91bmRzKGV2ZW50KTtcbiAgfSkpO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnc2hhcGUubW92ZScsICdzaGFwZS5jcmVhdGUnLCAnc2hhcGUucmVzaXplJyBdLCBpZkJwbW4oZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIC8vIGV4Y2x1ZGUgbGFiZWxzIGJlY2F1c2UgdGhleSdyZSBoYW5kbGVkIHNlcGFyYXRlbHkgZHVyaW5nIHNoYXBlLmNoYW5nZWRcbiAgICBpZiAoZXZlbnQuY29udGV4dC5zaGFwZS50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlQm91bmRzKGV2ZW50KTtcbiAgfSkpO1xuXG4gIC8vIEhhbmRsZSBsYWJlbHMgc2VwYXJhdGVseS4gVGhpcyBpcyBuZWNlc3NhcnksIGJlY2F1c2UgdGhlIGxhYmVsIGJvdW5kcyBoYXZlIHRvIGJlIHVwZGF0ZWRcbiAgLy8gZXZlcnkgdGltZSBpdHMgc2hhcGUgY2hhbmdlcywgbm90IG9ubHkgb24gbW92ZSwgY3JlYXRlIGFuZCByZXNpemUuXG4gIGV2ZW50QnVzLm9uKCdzaGFwZS5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuZWxlbWVudC50eXBlID09PSAnbGFiZWwnKSB7XG4gICAgICB1cGRhdGVCb3VuZHMoeyBjb250ZXh0OiB7IHNoYXBlOiBldmVudC5lbGVtZW50IH0gfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhdHRhY2ggLyBkZXRhY2ggY29ubmVjdGlvblxuICBmdW5jdGlvbiB1cGRhdGVDb25uZWN0aW9uKGUpIHtcbiAgICBzZWxmLnVwZGF0ZUNvbm5lY3Rpb24oZS5jb250ZXh0KTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24uZGVsZXRlJyxcbiAgICAnY29ubmVjdGlvbi5yZWNvbm5lY3QnXG4gIF0sIGlmQnBtbih1cGRhdGVDb25uZWN0aW9uKSk7XG5cbiAgdGhpcy5yZXZlcnRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5tb3ZlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb24pKTtcblxuXG4gIC8vIHVwZGF0ZSB3YXlwb2ludHNcbiAgZnVuY3Rpb24gdXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyhlKSB7XG4gICAgc2VsZi51cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzKGUuY29udGV4dC5jb25uZWN0aW9uKTtcbiAgfVxuXG4gIHRoaXMuZXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmxheW91dCcsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24udXBkYXRlV2F5cG9pbnRzJyxcbiAgXSwgaWZCcG1uKHVwZGF0ZUNvbm5lY3Rpb25XYXlwb2ludHMpKTtcblxuICB0aGlzLnJldmVydGVkKFtcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cycsXG4gIF0sIGlmQnBtbih1cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzKSk7XG5cbiAgLy8gdXBkYXRlIGNvbmRpdGlvbmFsL2RlZmF1bHQgZmxvd3NcbiAgdGhpcy5leGVjdXRlZCgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCBpZkJwbW4oZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIG9sZFNvdXJjZSA9IGNvbnRleHQub2xkU291cmNlLFxuICAgICAgICBuZXdTb3VyY2UgPSBjb250ZXh0Lm5ld1NvdXJjZSxcbiAgICAgICAgY29ubmVjdGlvbkJvID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbiksXG4gICAgICAgIG9sZFNvdXJjZUJvID0gZ2V0QnVzaW5lc3NPYmplY3Qob2xkU291cmNlKSxcbiAgICAgICAgbmV3U291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChuZXdTb3VyY2UpO1xuXG4gICAgLy8gcmVtb3ZlIGNvbmRpdGlvbiBmcm9tIGNvbm5lY3Rpb24gb24gcmVjb25uZWN0IHRvIG5ldyBzb3VyY2VcbiAgICAvLyBpZiBuZXcgc291cmNlIGNhbiBOT1QgaGF2ZSBjb25kaW9uYWwgc2VxdWVuY2UgZmxvd1xuICAgIGlmIChjb25uZWN0aW9uQm8uY29uZGl0aW9uRXhwcmVzc2lvbiAmJiAhaXNBbnkobmV3U291cmNlQm8sIFtcbiAgICAgICdicG1uOkFjdGl2aXR5JyxcbiAgICAgICdicG1uOkV4Y2x1c2l2ZUdhdGV3YXknLFxuICAgICAgJ2JwbW46SW5jbHVzaXZlR2F0ZXdheSdcbiAgICBdKSkge1xuICAgICAgY29udGV4dC5vbGRDb25kaXRpb25FeHByZXNzaW9uID0gY29ubmVjdGlvbkJvLmNvbmRpdGlvbkV4cHJlc3Npb247XG5cbiAgICAgIGRlbGV0ZSBjb25uZWN0aW9uQm8uY29uZGl0aW9uRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgZGVmYXVsdCBmcm9tIG9sZCBzb3VyY2UgZmxvdyBvbiByZWNvbm5lY3QgdG8gbmV3IHNvdXJjZVxuICAgIC8vIGlmIHNvdXJjZSBjaGFuZ2VkXG4gICAgaWYgKG9sZFNvdXJjZSAhPT0gbmV3U291cmNlICYmIG9sZFNvdXJjZUJvLmRlZmF1bHQgPT09IGNvbm5lY3Rpb25Cbykge1xuICAgICAgY29udGV4dC5vbGREZWZhdWx0ID0gb2xkU291cmNlQm8uZGVmYXVsdDtcblxuICAgICAgZGVsZXRlIG9sZFNvdXJjZUJvLmRlZmF1bHQ7XG4gICAgfVxuICB9KSk7XG5cbiAgdGhpcy5yZXZlcnRlZCgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCBpZkJwbW4oZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIG9sZFNvdXJjZSA9IGNvbnRleHQub2xkU291cmNlLFxuICAgICAgICBuZXdTb3VyY2UgPSBjb250ZXh0Lm5ld1NvdXJjZSxcbiAgICAgICAgY29ubmVjdGlvbkJvID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbiksXG4gICAgICAgIG9sZFNvdXJjZUJvID0gZ2V0QnVzaW5lc3NPYmplY3Qob2xkU291cmNlKSxcbiAgICAgICAgbmV3U291cmNlQm8gPSBnZXRCdXNpbmVzc09iamVjdChuZXdTb3VyY2UpO1xuXG4gICAgLy8gYWRkIGNvbmRpdGlvbiB0byBjb25uZWN0aW9uIG9uIHJldmVydCByZWNvbm5lY3QgdG8gbmV3IHNvdXJjZVxuICAgIGlmIChjb250ZXh0Lm9sZENvbmRpdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgIGNvbm5lY3Rpb25Cby5jb25kaXRpb25FeHByZXNzaW9uID0gY29udGV4dC5vbGRDb25kaXRpb25FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIC8vIGFkZCBkZWZhdWx0IHRvIG9sZCBzb3VyY2Ugb24gcmV2ZXJ0IHJlY29ubmVjdCB0byBuZXcgc291cmNlXG4gICAgaWYgKGNvbnRleHQub2xkRGVmYXVsdCkge1xuICAgICAgb2xkU291cmNlQm8uZGVmYXVsdCA9IGNvbnRleHQub2xkRGVmYXVsdDtcblxuICAgICAgZGVsZXRlIG5ld1NvdXJjZUJvLmRlZmF1bHQ7XG4gICAgfVxuICB9KSk7XG5cbiAgLy8gdXBkYXRlIGF0dGFjaG1lbnRzXG4gIGZ1bmN0aW9uIHVwZGF0ZUF0dGFjaG1lbnQoZSkge1xuICAgIHNlbGYudXBkYXRlQXR0YWNobWVudChlLmNvbnRleHQpO1xuICB9XG5cbiAgdGhpcy5leGVjdXRlZChbICdlbGVtZW50LnVwZGF0ZUF0dGFjaG1lbnQnIF0sIGlmQnBtbih1cGRhdGVBdHRhY2htZW50KSk7XG4gIHRoaXMucmV2ZXJ0ZWQoWyAnZWxlbWVudC51cGRhdGVBdHRhY2htZW50JyBdLCBpZkJwbW4odXBkYXRlQXR0YWNobWVudCkpO1xuXG5cbiAgLy8gdXBkYXRlIEJQTU5MYWJlbFxuICB0aGlzLmV4ZWN1dGVkKCdlbGVtZW50LnVwZGF0ZUxhYmVsJywgaWZCcG1uKHVwZGF0ZUJQTU5MYWJlbCkpO1xuICB0aGlzLnJldmVydGVkKCdlbGVtZW50LnVwZGF0ZUxhYmVsJywgaWZCcG1uKHVwZGF0ZUJQTU5MYWJlbCkpO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZUJQTU5MYWJlbChldmVudCkge1xuICAgIGNvbnN0IHsgZWxlbWVudCB9ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgICBsYWJlbCA9IGdldExhYmVsKGVsZW1lbnQpO1xuICAgIGNvbnN0IGRpID0gZ2V0RGkoZWxlbWVudCksXG4gICAgICAgICAgZGlMYWJlbCA9IGRpICYmIGRpLmdldCgnbGFiZWwnKTtcblxuICAgIGlmIChpc0xhYmVsRXh0ZXJuYWwoZWxlbWVudCkgfHwgaXNQbGFuZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChsYWJlbCAmJiAhZGlMYWJlbCkge1xuICAgICAgZGkuc2V0KCdsYWJlbCcsIGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbmRpOkJQTU5MYWJlbCcpKTtcbiAgICB9IGVsc2UgaWYgKCFsYWJlbCAmJiBkaUxhYmVsKSB7XG4gICAgICBkaS5zZXQoJ2xhYmVsJywgdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cbn1cblxuaW5oZXJpdHMoQnBtblVwZGF0ZXIsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkJwbW5VcGRhdGVyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uRmFjdG9yeScsXG4gICdjb25uZWN0aW9uRG9ja2luZycsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5cbi8vIGltcGxlbWVudGF0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBAcGFyYW0geyB7XG4gKiAgIHNoYXBlOiBTaGFwZTtcbiAqICAgaG9zdDogU2hhcGU7XG4gKiB9IH0gY29udGV4dFxuICovXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQXR0YWNobWVudCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgYnVzaW5lc3NPYmplY3QgPSBzaGFwZS5idXNpbmVzc09iamVjdCxcbiAgICAgIGhvc3QgPSBzaGFwZS5ob3N0O1xuXG4gIGJ1c2luZXNzT2JqZWN0LmF0dGFjaGVkVG9SZWYgPSBob3N0ICYmIGhvc3QuYnVzaW5lc3NPYmplY3Q7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtQYXJlbnR9IG9sZFBhcmVudFxuICovXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlUGFyZW50ID0gZnVuY3Rpb24oZWxlbWVudCwgb2xkUGFyZW50KSB7XG5cbiAgLy8gZG8gbm90IHVwZGF0ZSBCUE1OIDIuMCBsYWJlbCBwYXJlbnRcbiAgaWYgKGlzTGFiZWwoZWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBkYXRhIHN0b3JlcyBpbiBjb2xsYWJvcmF0aW9ucyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGJ5IERhdGFTdG9yZUJlaGF2aW9yXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSAmJlxuICAgICAgZWxlbWVudC5wYXJlbnQgJiZcbiAgICAgIGlzKGVsZW1lbnQucGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFyZW50U2hhcGUgPSBlbGVtZW50LnBhcmVudDtcblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgZGkgPSBnZXREaShlbGVtZW50KSxcbiAgICAgIHBhcmVudEJ1c2luZXNzT2JqZWN0ID0gcGFyZW50U2hhcGUgJiYgcGFyZW50U2hhcGUuYnVzaW5lc3NPYmplY3QsXG4gICAgICBwYXJlbnREaSA9IGdldERpKHBhcmVudFNoYXBlKTtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgIHRoaXMudXBkYXRlRmxvd05vZGVSZWZzKGJ1c2luZXNzT2JqZWN0LCBwYXJlbnRCdXNpbmVzc09iamVjdCwgb2xkUGFyZW50ICYmIG9sZFBhcmVudC5idXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YU91dHB1dEFzc29jaWF0aW9uJykpIHtcbiAgICBpZiAoZWxlbWVudC5zb3VyY2UpIHtcbiAgICAgIHBhcmVudEJ1c2luZXNzT2JqZWN0ID0gZWxlbWVudC5zb3VyY2UuYnVzaW5lc3NPYmplY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudEJ1c2luZXNzT2JqZWN0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YUlucHV0QXNzb2NpYXRpb24nKSkge1xuICAgIGlmIChlbGVtZW50LnRhcmdldCkge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LnRhcmdldC5idXNpbmVzc09iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50QnVzaW5lc3NPYmplY3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMudXBkYXRlU2VtYW50aWNQYXJlbnQoYnVzaW5lc3NPYmplY3QsIHBhcmVudEJ1c2luZXNzT2JqZWN0KTtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpICYmIGJ1c2luZXNzT2JqZWN0LmRhdGFPYmplY3RSZWYpIHtcbiAgICB0aGlzLnVwZGF0ZVNlbWFudGljUGFyZW50KGJ1c2luZXNzT2JqZWN0LmRhdGFPYmplY3RSZWYsIHBhcmVudEJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuXG4gIHRoaXMudXBkYXRlRGlQYXJlbnQoZGksIHBhcmVudERpKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtTaGFwZX0gc2hhcGVcbiAqL1xuQnBtblVwZGF0ZXIucHJvdG90eXBlLnVwZGF0ZUJvdW5kcyA9IGZ1bmN0aW9uKHNoYXBlKSB7XG5cbiAgdmFyIGRpID0gZ2V0RGkoc2hhcGUpLFxuICAgICAgZW1iZWRkZWRMYWJlbEJvdW5kcyA9IGdldEVtYmVkZGVkTGFiZWxCb3VuZHMoc2hhcGUpO1xuXG4gIC8vIHVwZGF0ZSBlbWJlZGRlZCBsYWJlbCBib3VuZHMgaWYgcG9zc2libGVcbiAgaWYgKGVtYmVkZGVkTGFiZWxCb3VuZHMpIHtcbiAgICB2YXIgZW1iZWRkZWRMYWJlbEJvdW5kc0RlbHRhID0gZGVsdGEoZW1iZWRkZWRMYWJlbEJvdW5kcywgZGkuZ2V0KCdib3VuZHMnKSk7XG5cbiAgICBhc3NpZ24oZW1iZWRkZWRMYWJlbEJvdW5kcywge1xuICAgICAgeDogc2hhcGUueCArIGVtYmVkZGVkTGFiZWxCb3VuZHNEZWx0YS54LFxuICAgICAgeTogc2hhcGUueSArIGVtYmVkZGVkTGFiZWxCb3VuZHNEZWx0YS55XG4gICAgfSk7XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gaXNMYWJlbChzaGFwZSkgPyB0aGlzLl9nZXRMYWJlbChkaSkgOiBkaTtcblxuICB2YXIgYm91bmRzID0gdGFyZ2V0LmJvdW5kcztcblxuICBpZiAoIWJvdW5kcykge1xuICAgIGJvdW5kcyA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpQm91bmRzKCk7XG4gICAgdGFyZ2V0LnNldCgnYm91bmRzJywgYm91bmRzKTtcbiAgfVxuXG4gIGFzc2lnbihib3VuZHMsIHtcbiAgICB4OiBzaGFwZS54LFxuICAgIHk6IHNoYXBlLnksXG4gICAgd2lkdGg6IHNoYXBlLndpZHRoLFxuICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0XG4gIH0pO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJ1c2luZXNzT2JqZWN0XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IG5ld0NvbnRhaW5tZW50XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IG9sZENvbnRhaW5tZW50XG4gKi9cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVGbG93Tm9kZVJlZnMgPSBmdW5jdGlvbihidXNpbmVzc09iamVjdCwgbmV3Q29udGFpbm1lbnQsIG9sZENvbnRhaW5tZW50KSB7XG5cbiAgaWYgKG9sZENvbnRhaW5tZW50ID09PSBuZXdDb250YWlubWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBvbGRSZWZzLCBuZXdSZWZzO1xuXG4gIGlmIChpcyAob2xkQ29udGFpbm1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIG9sZFJlZnMgPSBvbGRDb250YWlubWVudC5nZXQoJ2Zsb3dOb2RlUmVmJyk7XG4gICAgY29sbGVjdGlvblJlbW92ZShvbGRSZWZzLCBidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoaXMobmV3Q29udGFpbm1lbnQsICdicG1uOkxhbmUnKSkge1xuICAgIG5ld1JlZnMgPSBuZXdDb250YWlubWVudC5nZXQoJ2Zsb3dOb2RlUmVmJyk7XG4gICAgY29sbGVjdGlvbkFkZChuZXdSZWZzLCBidXNpbmVzc09iamVjdCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uZWN0aW9uXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5ld1NvdXJjZVxuICogQHBhcmFtIHtFbGVtZW50fSBuZXdUYXJnZXRcbiAqL1xuQnBtblVwZGF0ZXIucHJvdG90eXBlLnVwZGF0ZURpQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbm5lY3Rpb24sIG5ld1NvdXJjZSwgbmV3VGFyZ2V0KSB7XG4gIHZhciBjb25uZWN0aW9uRGkgPSBnZXREaShjb25uZWN0aW9uKSxcbiAgICAgIG5ld1NvdXJjZURpID0gZ2V0RGkobmV3U291cmNlKSxcbiAgICAgIG5ld1RhcmdldERpID0gZ2V0RGkobmV3VGFyZ2V0KTtcblxuICBpZiAoY29ubmVjdGlvbkRpLnNvdXJjZUVsZW1lbnQgJiYgY29ubmVjdGlvbkRpLnNvdXJjZUVsZW1lbnQuYnBtbkVsZW1lbnQgIT09IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NvdXJjZSkpIHtcbiAgICBjb25uZWN0aW9uRGkuc291cmNlRWxlbWVudCA9IG5ld1NvdXJjZSAmJiBuZXdTb3VyY2VEaTtcbiAgfVxuXG4gIGlmIChjb25uZWN0aW9uRGkudGFyZ2V0RWxlbWVudCAmJiBjb25uZWN0aW9uRGkudGFyZ2V0RWxlbWVudC5icG1uRWxlbWVudCAhPT0gZ2V0QnVzaW5lc3NPYmplY3QobmV3VGFyZ2V0KSkge1xuICAgIGNvbm5lY3Rpb25EaS50YXJnZXRFbGVtZW50ID0gbmV3VGFyZ2V0ICYmIG5ld1RhcmdldERpO1xuICB9XG5cbn07XG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkaVxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBwYXJlbnREaVxuICovXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlRGlQYXJlbnQgPSBmdW5jdGlvbihkaSwgcGFyZW50RGkpIHtcblxuICBpZiAocGFyZW50RGkgJiYgIWlzKHBhcmVudERpLCAnYnBtbmRpOkJQTU5QbGFuZScpKSB7XG4gICAgcGFyZW50RGkgPSBwYXJlbnREaS4kcGFyZW50O1xuICB9XG5cbiAgaWYgKGRpLiRwYXJlbnQgPT09IHBhcmVudERpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBsYW5lRWxlbWVudHMgPSAocGFyZW50RGkgfHwgZGkuJHBhcmVudCkuZ2V0KCdwbGFuZUVsZW1lbnQnKTtcblxuICBpZiAocGFyZW50RGkpIHtcbiAgICBwbGFuZUVsZW1lbnRzLnB1c2goZGkpO1xuICAgIGRpLiRwYXJlbnQgPSBwYXJlbnREaTtcbiAgfSBlbHNlIHtcbiAgICBjb2xsZWN0aW9uUmVtb3ZlKHBsYW5lRWxlbWVudHMsIGRpKTtcbiAgICBkaS4kcGFyZW50ID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBnZXREZWZpbml0aW9ucyhlbGVtZW50KSB7XG4gIHdoaWxlIChlbGVtZW50ICYmICFpcyhlbGVtZW50LCAnYnBtbjpEZWZpbml0aW9ucycpKSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnQuJHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGFpbmVyXG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuQnBtblVwZGF0ZXIucHJvdG90eXBlLmdldExhbmVTZXQgPSBmdW5jdGlvbihjb250YWluZXIpIHtcblxuICB2YXIgbGFuZVNldCwgbGFuZVNldHM7XG5cbiAgLy8gYnBtbjpMYW5lXG4gIGlmIChpcyhjb250YWluZXIsICdicG1uOkxhbmUnKSkge1xuICAgIGxhbmVTZXQgPSBjb250YWluZXIuY2hpbGRMYW5lU2V0O1xuXG4gICAgaWYgKCFsYW5lU2V0KSB7XG4gICAgICBsYW5lU2V0ID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkxhbmVTZXQnKTtcbiAgICAgIGNvbnRhaW5lci5jaGlsZExhbmVTZXQgPSBsYW5lU2V0O1xuICAgICAgbGFuZVNldC4kcGFyZW50ID0gY29udGFpbmVyO1xuICAgIH1cblxuICAgIHJldHVybiBsYW5lU2V0O1xuICB9XG5cbiAgLy8gYnBtbjpQYXJ0aWNpcGFudFxuICBpZiAoaXMoY29udGFpbmVyLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgY29udGFpbmVyID0gY29udGFpbmVyLnByb2Nlc3NSZWY7XG4gIH1cblxuICAvLyBicG1uOkZsb3dFbGVtZW50c0NvbnRhaW5lclxuICBsYW5lU2V0cyA9IGNvbnRhaW5lci5nZXQoJ2xhbmVTZXRzJyk7XG4gIGxhbmVTZXQgPSBsYW5lU2V0c1swXTtcblxuICBpZiAoIWxhbmVTZXQpIHtcbiAgICBsYW5lU2V0ID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkxhbmVTZXQnKTtcbiAgICBsYW5lU2V0LiRwYXJlbnQgPSBjb250YWluZXI7XG4gICAgbGFuZVNldHMucHVzaChsYW5lU2V0KTtcbiAgfVxuXG4gIHJldHVybiBsYW5lU2V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJ1c2luZXNzT2JqZWN0XG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IG5ld1BhcmVudFxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSB2aXN1YWxQYXJlbnRcbiAqL1xuQnBtblVwZGF0ZXIucHJvdG90eXBlLnVwZGF0ZVNlbWFudGljUGFyZW50ID0gZnVuY3Rpb24oYnVzaW5lc3NPYmplY3QsIG5ld1BhcmVudCwgdmlzdWFsUGFyZW50KSB7XG5cbiAgdmFyIGNvbnRhaW5tZW50LFxuICAgICAgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIGlmIChidXNpbmVzc09iamVjdC4kcGFyZW50ID09PSBuZXdQYXJlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFJbnB1dCcpIHx8IGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhT3V0cHV0JykpIHtcblxuICAgIGlmIChpcyhuZXdQYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgJ3Byb2Nlc3NSZWYnIGluIG5ld1BhcmVudCkge1xuICAgICAgbmV3UGFyZW50ID0gbmV3UGFyZW50LnByb2Nlc3NSZWY7XG4gICAgfVxuXG4gICAgLy8gYWxyZWFkeSBpbiBjb3JyZWN0IGlvU3BlY2lmaWNhdGlvblxuICAgIGlmICgnaW9TcGVjaWZpY2F0aW9uJyBpbiBuZXdQYXJlbnQgJiYgbmV3UGFyZW50LmlvU3BlY2lmaWNhdGlvbiA9PT0gYnVzaW5lc3NPYmplY3QuJHBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46TGFuZScpKSB7XG5cbiAgICBpZiAobmV3UGFyZW50KSB7XG4gICAgICBuZXdQYXJlbnQgPSB0aGlzLmdldExhbmVTZXQobmV3UGFyZW50KTtcbiAgICB9XG5cbiAgICBjb250YWlubWVudCA9ICdsYW5lcyc7XG4gIH0gZWxzZVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46Rmxvd0VsZW1lbnQnKSkge1xuXG4gICAgaWYgKG5ld1BhcmVudCkge1xuXG4gICAgICBpZiAoaXMobmV3UGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC5wcm9jZXNzUmVmO1xuICAgICAgfSBlbHNlXG5cbiAgICAgIGlmIChpcyhuZXdQYXJlbnQsICdicG1uOkxhbmUnKSkge1xuICAgICAgICBkbyB7XG5cbiAgICAgICAgICAvLyB1bndyYXAgTGFuZSAtPiBMYW5lU2V0IC0+IChMYW5lIHwgRmxvd0VsZW1lbnRzQ29udGFpbmVyKVxuICAgICAgICAgIG5ld1BhcmVudCA9IG5ld1BhcmVudC4kcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH0gd2hpbGUgKGlzKG5ld1BhcmVudCwgJ2JwbW46TGFuZScpKTtcblxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5tZW50ID0gJ2Zsb3dFbGVtZW50cyc7XG5cbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpBcnRpZmFjdCcpKSB7XG5cbiAgICB3aGlsZSAobmV3UGFyZW50ICYmXG4gICAgICAgICAgICFpcyhuZXdQYXJlbnQsICdicG1uOlByb2Nlc3MnKSAmJlxuICAgICAgICAgICAhaXMobmV3UGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiZcbiAgICAgICAgICAgIWlzKG5ld1BhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG5cbiAgICAgIGlmIChpcyhuZXdQYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgICAgbmV3UGFyZW50ID0gbmV3UGFyZW50LnByb2Nlc3NSZWY7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3UGFyZW50ID0gbmV3UGFyZW50LiRwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGFpbm1lbnQgPSAnYXJ0aWZhY3RzJztcbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG4gICAgY29udGFpbm1lbnQgPSAnbWVzc2FnZUZsb3dzJztcblxuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICBjb250YWlubWVudCA9ICdwYXJ0aWNpcGFudHMnO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBwYXJ0aWNpcGFudHMgcHJvY2VzcyBpcyBwcm9wZXJseSBhdHRhY2hlZCAvIGRldGFjaGVkXG4gICAgLy8gZnJvbSB0aGUgWE1MIGRvY3VtZW50XG5cbiAgICB2YXIgcHJvY2VzcyA9IGJ1c2luZXNzT2JqZWN0LnByb2Nlc3NSZWYsXG4gICAgICAgIGRlZmluaXRpb25zO1xuXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGRlZmluaXRpb25zID0gZ2V0RGVmaW5pdGlvbnMoYnVzaW5lc3NPYmplY3QuJHBhcmVudCB8fCBuZXdQYXJlbnQpO1xuXG4gICAgICBpZiAoYnVzaW5lc3NPYmplY3QuJHBhcmVudCkge1xuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIHByb2Nlc3MpO1xuICAgICAgICBwcm9jZXNzLiRwYXJlbnQgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3UGFyZW50KSB7XG4gICAgICAgIGNvbGxlY3Rpb25BZGQoZGVmaW5pdGlvbnMuZ2V0KCdyb290RWxlbWVudHMnKSwgcHJvY2Vzcyk7XG4gICAgICAgIHByb2Nlc3MuJHBhcmVudCA9IGRlZmluaXRpb25zO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlXG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpEYXRhT3V0cHV0QXNzb2NpYXRpb24nKSkge1xuICAgIGNvbnRhaW5tZW50ID0gJ2RhdGFPdXRwdXRBc3NvY2lhdGlvbnMnO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykpIHtcbiAgICBjb250YWlubWVudCA9ICdkYXRhSW5wdXRBc3NvY2lhdGlvbnMnO1xuICB9XG5cbiAgaWYgKCFjb250YWlubWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoXG4gICAgICAnbm8gcGFyZW50IGZvciB7ZWxlbWVudH0gaW4ge3BhcmVudH0nLFxuICAgICAge1xuICAgICAgICBlbGVtZW50OiBidXNpbmVzc09iamVjdC5pZCxcbiAgICAgICAgcGFyZW50OiBuZXdQYXJlbnQuaWRcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbjtcblxuICBpZiAoYnVzaW5lc3NPYmplY3QuJHBhcmVudCkge1xuXG4gICAgLy8gcmVtb3ZlIGZyb20gb2xkIHBhcmVudFxuICAgIGNoaWxkcmVuID0gYnVzaW5lc3NPYmplY3QuJHBhcmVudC5nZXQoY29udGFpbm1lbnQpO1xuICAgIGNvbGxlY3Rpb25SZW1vdmUoY2hpbGRyZW4sIGJ1c2luZXNzT2JqZWN0KTtcbiAgfVxuXG4gIGlmICghbmV3UGFyZW50KSB7XG4gICAgYnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IG51bGw7XG4gIH0gZWxzZSB7XG5cbiAgICAvLyBhZGQgdG8gbmV3IHBhcmVudFxuICAgIGNoaWxkcmVuID0gbmV3UGFyZW50LmdldChjb250YWlubWVudCk7XG4gICAgY2hpbGRyZW4ucHVzaChidXNpbmVzc09iamVjdCk7XG4gICAgYnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IG5ld1BhcmVudDtcbiAgfVxuXG4gIGlmICh2aXN1YWxQYXJlbnQpIHtcbiAgICB2YXIgZGlDaGlsZHJlbiA9IHZpc3VhbFBhcmVudC5nZXQoY29udGFpbm1lbnQpO1xuXG4gICAgY29sbGVjdGlvblJlbW92ZShjaGlsZHJlbiwgYnVzaW5lc3NPYmplY3QpO1xuXG4gICAgaWYgKG5ld1BhcmVudCkge1xuXG4gICAgICBpZiAoIWRpQ2hpbGRyZW4pIHtcbiAgICAgICAgZGlDaGlsZHJlbiA9IFtdO1xuICAgICAgICBuZXdQYXJlbnQuc2V0KGNvbnRhaW5tZW50LCBkaUNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgZGlDaGlsZHJlbi5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uZWN0aW9uXG4gKi9cbkJwbW5VcGRhdGVyLnByb3RvdHlwZS51cGRhdGVDb25uZWN0aW9uV2F5cG9pbnRzID0gZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICB2YXIgZGkgPSBnZXREaShjb25uZWN0aW9uKTtcblxuICBkaS5zZXQoJ3dheXBvaW50JywgdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlRGlXYXlwb2ludHMoY29ubmVjdGlvbi53YXlwb2ludHMpKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHsge1xuICogICBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuICogICBwYXJlbnQ6IFBhcmVudDtcbiAqICAgbmV3UGFyZW50OiBQYXJlbnQ7XG4gKiB9IH0gY29udGV4dFxuICovXG5CcG1uVXBkYXRlci5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGNvbm5lY3Rpb24pLFxuICAgICAgbmV3U291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICBuZXdTb3VyY2VCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NvdXJjZSksXG4gICAgICBuZXdUYXJnZXQgPSBjb25uZWN0aW9uLnRhcmdldCxcbiAgICAgIG5ld1RhcmdldEJvID0gZ2V0QnVzaW5lc3NPYmplY3QoY29ubmVjdGlvbi50YXJnZXQpLFxuICAgICAgdmlzdWFsUGFyZW50O1xuXG4gIGlmICghaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFBc3NvY2lhdGlvbicpKSB7XG5cbiAgICB2YXIgaW52ZXJzZVNldCA9IGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcblxuICAgIGlmIChidXNpbmVzc09iamVjdC5zb3VyY2VSZWYgIT09IG5ld1NvdXJjZUJvKSB7XG4gICAgICBpZiAoaW52ZXJzZVNldCkge1xuICAgICAgICBjb2xsZWN0aW9uUmVtb3ZlKGJ1c2luZXNzT2JqZWN0LnNvdXJjZVJlZiAmJiBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYuZ2V0KCdvdXRnb2luZycpLCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgICAgaWYgKG5ld1NvdXJjZUJvICYmIG5ld1NvdXJjZUJvLmdldCgnb3V0Z29pbmcnKSkge1xuICAgICAgICAgIG5ld1NvdXJjZUJvLmdldCgnb3V0Z29pbmcnKS5wdXNoKGJ1c2luZXNzT2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidXNpbmVzc09iamVjdC5zb3VyY2VSZWYgPSBuZXdTb3VyY2VCbztcbiAgICB9XG5cbiAgICBpZiAoYnVzaW5lc3NPYmplY3QudGFyZ2V0UmVmICE9PSBuZXdUYXJnZXRCbykge1xuICAgICAgaWYgKGludmVyc2VTZXQpIHtcbiAgICAgICAgY29sbGVjdGlvblJlbW92ZShidXNpbmVzc09iamVjdC50YXJnZXRSZWYgJiYgYnVzaW5lc3NPYmplY3QudGFyZ2V0UmVmLmdldCgnaW5jb21pbmcnKSwgYnVzaW5lc3NPYmplY3QpO1xuXG4gICAgICAgIGlmIChuZXdUYXJnZXRCbyAmJiBuZXdUYXJnZXRCby5nZXQoJ2luY29taW5nJykpIHtcbiAgICAgICAgICBuZXdUYXJnZXRCby5nZXQoJ2luY29taW5nJykucHVzaChidXNpbmVzc09iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYnVzaW5lc3NPYmplY3QudGFyZ2V0UmVmID0gbmV3VGFyZ2V0Qm87XG4gICAgfVxuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uJykpIHtcblxuICAgIC8vIGhhbmRsZSBvYm5veGlvdXMgaXNNc29tZSBzb3VyY2VSZWZcbiAgICBidXNpbmVzc09iamVjdC5nZXQoJ3NvdXJjZVJlZicpWzBdID0gbmV3U291cmNlQm87XG5cbiAgICB2aXN1YWxQYXJlbnQgPSBjb250ZXh0LnBhcmVudCB8fCBjb250ZXh0Lm5ld1BhcmVudCB8fCBuZXdUYXJnZXRCbztcblxuICAgIHRoaXMudXBkYXRlU2VtYW50aWNQYXJlbnQoYnVzaW5lc3NPYmplY3QsIG5ld1RhcmdldEJvLCB2aXN1YWxQYXJlbnQpO1xuICB9IGVsc2VcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkRhdGFPdXRwdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgdmlzdWFsUGFyZW50ID0gY29udGV4dC5wYXJlbnQgfHwgY29udGV4dC5uZXdQYXJlbnQgfHwgbmV3U291cmNlQm87XG5cbiAgICB0aGlzLnVwZGF0ZVNlbWFudGljUGFyZW50KGJ1c2luZXNzT2JqZWN0LCBuZXdTb3VyY2VCbywgdmlzdWFsUGFyZW50KTtcblxuICAgIC8vIHRhcmdldFJlZiA9IG5ldyB0YXJnZXRcbiAgICBidXNpbmVzc09iamVjdC50YXJnZXRSZWYgPSBuZXdUYXJnZXRCbztcbiAgfVxuXG4gIHRoaXMudXBkYXRlQ29ubmVjdGlvbldheXBvaW50cyhjb25uZWN0aW9uKTtcblxuICB0aGlzLnVwZGF0ZURpQ29ubmVjdGlvbihjb25uZWN0aW9uLCBuZXdTb3VyY2UsIG5ld1RhcmdldCk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5CcG1uVXBkYXRlci5wcm90b3R5cGUuX2dldExhYmVsID0gZnVuY3Rpb24oZGkpIHtcbiAgaWYgKCFkaS5sYWJlbCkge1xuICAgIGRpLmxhYmVsID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlRGlMYWJlbCgpO1xuICB9XG5cbiAgcmV0dXJuIGRpLmxhYmVsO1xufTtcblxuXG4vKipcbiAqIENhbGwgZnVuY3Rpb24gaWYgc2hhcGUgb3IgY29ubmVjdGlvbiBpcyBCUE1OIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGlmQnBtbihmbikge1xuXG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5zaGFwZSB8fCBjb250ZXh0LmNvbm5lY3Rpb24gfHwgY29udGV4dC5lbGVtZW50O1xuXG4gICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOkJhc2VFbGVtZW50JykpIHtcbiAgICAgIGZuKGV2ZW50KTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGRjOkJvdW5kcyBvZiBicG1uZGk6QlBNTkxhYmVsIGlmIGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBnZXRFbWJlZGRlZExhYmVsQm91bmRzKHNoYXBlKSB7XG4gIGlmICghaXMoc2hhcGUsICdicG1uOkFjdGl2aXR5JykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZGkgPSBnZXREaShzaGFwZSk7XG5cbiAgaWYgKCFkaSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBsYWJlbCA9IGRpLmdldCgnbGFiZWwnKTtcblxuICBpZiAoIWxhYmVsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxhYmVsLmdldCgnYm91bmRzJyk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/BpmnUpdater.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/ElementFactory.js":
/*!***************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/ElementFactory.js ***!
\***************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ElementFactory)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../modeling/util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var diagram_js_lib_core_ElementFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/core/ElementFactory */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/core/ElementFactory.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var _util_CompatibilityUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/CompatibilityUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/CompatibilityUtil.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n *\n * @typedef {import('diagram-js/lib/util/Types').Dimensions} Dimensions\n *\n * @typedef {import('./BpmnFactory').default} BpmnFactory\n *\n * @typedef {import('../../model/Types').BpmnAttributes} BpmnAttributes\n * @typedef {import('../../model/Types').Connection} Connection\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('../../model/Types').Label} Label\n * @typedef {import('../../model/Types').Root} Root\n * @typedef {import('../../model/Types').Shape} Shape\n * @typedef {import('../../model/Types').Moddle} Moddle\n * @typedef {import('../../model/Types').ModdleElement} ModdleElement\n */\n\n/**\n * A BPMN-specific element factory.\n *\n * @template {Connection} [T=Connection]\n * @template {Label} [U=Label]\n * @template {Root} [V=Root]\n * @template {Shape} [W=Shape]\n *\n * @extends {BaseElementFactory}\n *\n * @param {BpmnFactory} bpmnFactory\n * @param {Moddle} moddle\n * @param {Translate} translate\n */\nfunction ElementFactory(bpmnFactory, moddle, translate) {\n diagram_js_lib_core_ElementFactory__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this);\n\n this._bpmnFactory = bpmnFactory;\n this._moddle = moddle;\n this._translate = translate;\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(ElementFactory, diagram_js_lib_core_ElementFactory__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nElementFactory.$inject = [\n 'bpmnFactory',\n 'moddle',\n 'translate'\n];\n\nElementFactory.prototype._baseCreate = diagram_js_lib_core_ElementFactory__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.create;\n\n/**\n * Create a root element.\n *\n * @overlord\n * @param {'root'} elementType\n * @param {Partial & Partial} [attrs]\n * @return {V}\n */\n\n/**\n * Create a shape.\n *\n * @overlord\n * @param {'shape'} elementType\n * @param {Partial & Partial} [attrs]\n * @return {W}\n */\n\n/**\n * Create a connection.\n *\n * @overlord\n * @param {'connection'} elementType\n * @param {Partial & Partial} [attrs]\n * @return {T}\n */\n\n/**\n * Create a label.\n *\n * @param {'label'} elementType\n * @param {Partial & Partial} [attrs]\n * @return {U}\n */\nElementFactory.prototype.create = function(elementType, attrs) {\n\n // no special magic for labels,\n // we assume their businessObjects have already been created\n // and wired via attrs\n if (elementType === 'label') {\n var di = attrs.di || this._bpmnFactory.createDiLabel();\n return this._baseCreate(elementType, (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)({ type: 'label', di: di }, _util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_LABEL_SIZE, attrs));\n }\n\n return this.createElement(elementType, attrs);\n};\n\n/**\n * Create a BPMN root element.\n *\n * @overlord\n * @param {'root'} elementType\n * @param {Partial & Partial} [attrs]\n * @return {V}\n */\n\n/**\n * Create a BPMN shape.\n *\n * @overlord\n * @param {'shape'} elementType\n * @param {Partial & Partial} [attrs]\n * @return {W}\n */\n\n/**\n * Create a BPMN connection.\n *\n * @param {'connection'} elementType\n * @param {Partial & Partial} [attrs]\n * @return {T}\n */\nElementFactory.prototype.createElement = function(elementType, attrs) {\n var size,\n translate = this._translate;\n\n attrs = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)({}, attrs || {});\n\n var businessObject = attrs.businessObject,\n di = attrs.di;\n\n if (!businessObject) {\n if (!attrs.type) {\n throw new Error(translate('no shape type specified'));\n }\n\n businessObject = this._bpmnFactory.create(attrs.type);\n\n (0,_util_CompatibilityUtil__WEBPACK_IMPORTED_MODULE_4__.ensureCompatDiRef)(businessObject);\n }\n\n if (!isModdleDi(di)) {\n var diAttrs = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)(\n {},\n di || {},\n { id: businessObject.id + '_di' }\n );\n\n if (elementType === 'root') {\n di = this._bpmnFactory.createDiPlane(businessObject, diAttrs);\n } else\n if (elementType === 'connection') {\n di = this._bpmnFactory.createDiEdge(businessObject, diAttrs);\n } else {\n di = this._bpmnFactory.createDiShape(businessObject, diAttrs);\n }\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(businessObject, 'bpmn:Group')) {\n attrs = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)({\n isFrame: true\n }, attrs);\n }\n\n attrs = applyAttributes(businessObject, attrs, [\n 'processRef',\n 'isInterrupting',\n 'associationDirection',\n 'isForCompensation'\n ]);\n\n if (attrs.isExpanded) {\n attrs = applyAttribute(di, attrs, 'isExpanded');\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.isAny)(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ])) {\n attrs = applyAttribute(di, attrs, 'isHorizontal');\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(businessObject, 'bpmn:SubProcess')) {\n attrs.collapsed = !(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_6__.isExpanded)(businessObject, di);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(businessObject, 'bpmn:ExclusiveGateway')) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_2__.has)(attrs, 'isMarkerVisible')) {\n if (attrs.isMarkerVisible === undefined) {\n di.isMarkerVisible = false;\n } else {\n attrs = applyAttribute(di, attrs, 'isMarkerVisible');\n }\n } else {\n di.isMarkerVisible = true;\n }\n }\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_2__.isDefined)(attrs.triggeredByEvent)) {\n businessObject.triggeredByEvent = attrs.triggeredByEvent;\n delete attrs.triggeredByEvent;\n }\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_2__.isDefined)(attrs.cancelActivity)) {\n businessObject.cancelActivity = attrs.cancelActivity;\n delete attrs.cancelActivity;\n }\n\n var eventDefinitions,\n newEventDefinition;\n\n if (attrs.eventDefinitionType) {\n eventDefinitions = businessObject.get('eventDefinitions') || [];\n newEventDefinition = this._bpmnFactory.create(attrs.eventDefinitionType, attrs.eventDefinitionAttrs);\n\n if (attrs.eventDefinitionType === 'bpmn:ConditionalEventDefinition') {\n newEventDefinition.condition = this._bpmnFactory.create('bpmn:FormalExpression');\n }\n\n eventDefinitions.push(newEventDefinition);\n\n newEventDefinition.$parent = businessObject;\n businessObject.eventDefinitions = eventDefinitions;\n\n delete attrs.eventDefinitionType;\n }\n\n size = this.getDefaultSize(businessObject, di);\n\n attrs = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)({\n id: businessObject.id\n }, size, attrs, {\n businessObject: businessObject,\n di: di\n });\n\n return this._baseCreate(elementType, attrs);\n};\n\n/**\n * Get the default size of a diagram element.\n *\n * @param {Element} element The element.\n * @param {ModdleElement} di The DI.\n *\n * @return {Dimensions} Default width and height of the element.\n */\nElementFactory.prototype.getDefaultSize = function(element, di) {\n\n var bo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.getBusinessObject)(element);\n di = di || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.getDi)(element);\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:SubProcess')) {\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_6__.isExpanded)(bo, di)) {\n return { width: 350, height: 200 };\n } else {\n return { width: 100, height: 80 };\n }\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:Task')) {\n return { width: 100, height: 80 };\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:Gateway')) {\n return { width: 50, height: 50 };\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:Event')) {\n return { width: 36, height: 36 };\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:Participant')) {\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_6__.isExpanded)(bo, di)) {\n return { width: 600, height: 250 };\n } else {\n return { width: 400, height: 60 };\n }\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:Lane')) {\n return { width: 400, height: 100 };\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:DataObjectReference')) {\n return { width: 36, height: 50 };\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:DataStoreReference')) {\n return { width: 50, height: 50 };\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:TextAnnotation')) {\n return { width: 100, height: 30 };\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.is)(bo, 'bpmn:Group')) {\n return { width: 300, height: 300 };\n }\n\n return { width: 100, height: 80 };\n};\n\n\n/**\n * Create participant.\n *\n * @param {boolean|Partial & Partial} [attrs]\n * Attributes or whether the participant is expanded.\n *\n * @return {W} The created participant.\n */\nElementFactory.prototype.createParticipantShape = function(attrs) {\n\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_2__.isObject)(attrs)) {\n attrs = { isExpanded: attrs };\n }\n\n attrs = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.assign)({ type: 'bpmn:Participant' }, attrs || {});\n\n // participants are expanded by default\n if (attrs.isExpanded !== false) {\n attrs.processRef = this._bpmnFactory.create('bpmn:Process');\n }\n\n return this.createShape(attrs);\n};\n\n\n// helpers //////////////////////\n\n/**\n * Apply attributes from a map to the given element, remove attribute from the\n * map on application.\n *\n * @param {Element} element\n * @param {Object} attrs (in/out map of attributes)\n * @param {string[]} attributeNames name of attributes to apply\n *\n * @return {Object} changed attrs\n */\nfunction applyAttributes(element, attrs, attributeNames) {\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.forEach)(attributeNames, function(property) {\n attrs = applyAttribute(element, attrs, property);\n });\n\n return attrs;\n}\n\n/**\n * Apply named property to element and drain it from the attrs collection.\n *\n * @param {Element} element\n * @param {Object} attrs (in/out map of attributes)\n * @param {string} attributeName to apply\n *\n * @return {Object} changed attrs\n */\nfunction applyAttribute(element, attrs, attributeName) {\n if (attrs[attributeName] === undefined) {\n return attrs;\n }\n\n element[attributeName] = attrs[attributeName];\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.omit)(attrs, [ attributeName ]);\n}\n\n/**\n * @param {Element} element\n *\n * @return {boolean}\n */\nfunction isModdleDi(element) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_5__.isAny)(element, [\n 'bpmndi:BPMNShape',\n 'bpmndi:BPMNEdge',\n 'bpmndi:BPMNDiagram',\n 'bpmndi:BPMNPlane',\n ]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9FbGVtZW50RmFjdG9yeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQU9rQjs7QUFFc0I7O0FBTVY7O0FBSVM7O0FBSVo7O0FBRXlDOztBQUl0Qzs7QUFJUTs7QUFFdEM7QUFDQSxhQUFhLDJEQUEyRDtBQUN4RTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdEO0FBQ0EsYUFBYSxpQ0FBaUM7QUFDOUM7QUFDQSxhQUFhLDRDQUE0QztBQUN6RCxhQUFhLHdDQUF3QztBQUNyRCxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLG1DQUFtQztBQUNoRCxhQUFhLGtDQUFrQztBQUMvQyxhQUFhLG1DQUFtQztBQUNoRCxhQUFhLG9DQUFvQztBQUNqRCxhQUFhLDJDQUEyQztBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFlBQVk7QUFDMUIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsTUFBTTtBQUNwQixjQUFjLE9BQU87QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsV0FBVztBQUN0QjtBQUNlO0FBQ2YsRUFBRSwwRUFBa0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDREQUFRLGlCQUFpQiwwRUFBa0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDLDBFQUFrQjs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyx5Q0FBeUM7QUFDcEQsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsMENBQTBDO0FBQ3JELFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLCtDQUErQztBQUMxRCxZQUFZO0FBQ1o7O0FBRUE7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QUFDbkIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7O0FBRUEsRUFBRSxpREFBTztBQUNUO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUyw4Q0FBSTtBQUNiOztBQUVBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxTQUFTLHNEQUFLO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvRWxlbWVudEZhY3RvcnkuanM/YzQwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhc3NpZ24sXG4gIGZvckVhY2gsXG4gIGhhcyxcbiAgaXNEZWZpbmVkLFxuICBpc09iamVjdCxcbiAgb21pdFxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IHtcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXG4gIGdldERpLFxuICBpc1xufSBmcm9tICcuLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL21vZGVsaW5nL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZFxufSBmcm9tICcuLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCBCYXNlRWxlbWVudEZhY3RvcnkgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29yZS9FbGVtZW50RmFjdG9yeSc7XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfTEFCRUxfU0laRVxufSBmcm9tICcuLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGVuc3VyZUNvbXBhdERpUmVmXG59IGZyb20gJy4uLy4uL3V0aWwvQ29tcGF0aWJpbGl0eVV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlL3RyYW5zbGF0ZScpLmRlZmF1bHR9IFRyYW5zbGF0ZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL3V0aWwvVHlwZXMnKS5EaW1lbnNpb25zfSBEaW1lbnNpb25zXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9CcG1uRmFjdG9yeScpLmRlZmF1bHR9IEJwbW5GYWN0b3J5XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5CcG1uQXR0cmlidXRlc30gQnBtbkF0dHJpYnV0ZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuQ29ubmVjdGlvbn0gQ29ubmVjdGlvblxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLkxhYmVsfSBMYWJlbFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5Sb290fSBSb290XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLlNoYXBlfSBTaGFwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGV9IE1vZGRsZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fSBNb2RkbGVFbGVtZW50XG4gKi9cblxuLyoqXG4gKiBBIEJQTU4tc3BlY2lmaWMgZWxlbWVudCBmYWN0b3J5LlxuICpcbiAqIEB0ZW1wbGF0ZSB7Q29ubmVjdGlvbn0gW1Q9Q29ubmVjdGlvbl1cbiAqIEB0ZW1wbGF0ZSB7TGFiZWx9IFtVPUxhYmVsXVxuICogQHRlbXBsYXRlIHtSb290fSBbVj1Sb290XVxuICogQHRlbXBsYXRlIHtTaGFwZX0gW1c9U2hhcGVdXG4gKlxuICogQGV4dGVuZHMge0Jhc2VFbGVtZW50RmFjdG9yeTxULCBVLCBWLCBXPn1cbiAqXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGRsZVxuICogQHBhcmFtIHtUcmFuc2xhdGV9IHRyYW5zbGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbGVtZW50RmFjdG9yeShicG1uRmFjdG9yeSwgbW9kZGxlLCB0cmFuc2xhdGUpIHtcbiAgQmFzZUVsZW1lbnRGYWN0b3J5LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG59XG5cbmluaGVyaXRzKEVsZW1lbnRGYWN0b3J5LCBCYXNlRWxlbWVudEZhY3RvcnkpO1xuXG5FbGVtZW50RmFjdG9yeS4kaW5qZWN0ID0gW1xuICAnYnBtbkZhY3RvcnknLFxuICAnbW9kZGxlJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cbkVsZW1lbnRGYWN0b3J5LnByb3RvdHlwZS5fYmFzZUNyZWF0ZSA9IEJhc2VFbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlO1xuXG4vKipcbiAqIENyZWF0ZSBhIHJvb3QgZWxlbWVudC5cbiAqXG4gKiBAb3ZlcmxvcmRcbiAqIEBwYXJhbSB7J3Jvb3QnfSBlbGVtZW50VHlwZVxuICogQHBhcmFtIHtQYXJ0aWFsPFJvb3Q+ICYgUGFydGlhbDxCcG1uQXR0cmlidXRlcz59IFthdHRyc11cbiAqIEByZXR1cm4ge1Z9XG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBzaGFwZS5cbiAqXG4gKiBAb3ZlcmxvcmRcbiAqIEBwYXJhbSB7J3NoYXBlJ30gZWxlbWVudFR5cGVcbiAqIEBwYXJhbSB7UGFydGlhbDxTaGFwZT4gJiBQYXJ0aWFsPEJwbW5BdHRyaWJ1dGVzPn0gW2F0dHJzXVxuICogQHJldHVybiB7V31cbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbm5lY3Rpb24uXG4gKlxuICogQG92ZXJsb3JkXG4gKiBAcGFyYW0geydjb25uZWN0aW9uJ30gZWxlbWVudFR5cGVcbiAqIEBwYXJhbSB7UGFydGlhbDxDb25uZWN0aW9uPiAmIFBhcnRpYWw8QnBtbkF0dHJpYnV0ZXM+fSBbYXR0cnNdXG4gKiBAcmV0dXJuIHtUfVxuICovXG5cbi8qKlxuICogQ3JlYXRlIGEgbGFiZWwuXG4gKlxuICogQHBhcmFtIHsnbGFiZWwnfSBlbGVtZW50VHlwZVxuICogQHBhcmFtIHtQYXJ0aWFsPExhYmVsPiAmIFBhcnRpYWw8QnBtbkF0dHJpYnV0ZXM+fSBbYXR0cnNdXG4gKiBAcmV0dXJuIHtVfVxuICovXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oZWxlbWVudFR5cGUsIGF0dHJzKSB7XG5cbiAgLy8gbm8gc3BlY2lhbCBtYWdpYyBmb3IgbGFiZWxzLFxuICAvLyB3ZSBhc3N1bWUgdGhlaXIgYnVzaW5lc3NPYmplY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0ZWRcbiAgLy8gYW5kIHdpcmVkIHZpYSBhdHRyc1xuICBpZiAoZWxlbWVudFR5cGUgPT09ICdsYWJlbCcpIHtcbiAgICB2YXIgZGkgPSBhdHRycy5kaSB8fCB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGVEaUxhYmVsKCk7XG4gICAgcmV0dXJuIHRoaXMuX2Jhc2VDcmVhdGUoZWxlbWVudFR5cGUsIGFzc2lnbih7IHR5cGU6ICdsYWJlbCcsIGRpOiBkaSB9LCBERUZBVUxUX0xBQkVMX1NJWkUsIGF0dHJzKSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlLCBhdHRycyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEJQTU4gcm9vdCBlbGVtZW50LlxuICpcbiAqIEBvdmVybG9yZFxuICogQHBhcmFtIHsncm9vdCd9IGVsZW1lbnRUeXBlXG4gKiBAcGFyYW0ge1BhcnRpYWw8Um9vdD4gJiBQYXJ0aWFsPEJwbW5BdHRyaWJ1dGVzPn0gW2F0dHJzXVxuICogQHJldHVybiB7Vn1cbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhIEJQTU4gc2hhcGUuXG4gKlxuICogQG92ZXJsb3JkXG4gKiBAcGFyYW0geydzaGFwZSd9IGVsZW1lbnRUeXBlXG4gKiBAcGFyYW0ge1BhcnRpYWw8U2hhcGU+ICYgUGFydGlhbDxCcG1uQXR0cmlidXRlcz59IFthdHRyc11cbiAqIEByZXR1cm4ge1d9XG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBCUE1OIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHsnY29ubmVjdGlvbid9IGVsZW1lbnRUeXBlXG4gKiBAcGFyYW0ge1BhcnRpYWw8Q29ubmVjdGlvbj4gJiBQYXJ0aWFsPEJwbW5BdHRyaWJ1dGVzPn0gW2F0dHJzXVxuICogQHJldHVybiB7VH1cbiAqL1xuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50VHlwZSwgYXR0cnMpIHtcbiAgdmFyIHNpemUsXG4gICAgICB0cmFuc2xhdGUgPSB0aGlzLl90cmFuc2xhdGU7XG5cbiAgYXR0cnMgPSBhc3NpZ24oe30sIGF0dHJzIHx8IHt9KTtcblxuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBhdHRycy5idXNpbmVzc09iamVjdCxcbiAgICAgIGRpID0gYXR0cnMuZGk7XG5cbiAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgIGlmICghYXR0cnMudHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbm8gc2hhcGUgdHlwZSBzcGVjaWZpZWQnKSk7XG4gICAgfVxuXG4gICAgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGUoYXR0cnMudHlwZSk7XG5cbiAgICBlbnN1cmVDb21wYXREaVJlZihidXNpbmVzc09iamVjdCk7XG4gIH1cblxuICBpZiAoIWlzTW9kZGxlRGkoZGkpKSB7XG4gICAgdmFyIGRpQXR0cnMgPSBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRpIHx8IHt9LFxuICAgICAgeyBpZDogYnVzaW5lc3NPYmplY3QuaWQgKyAnX2RpJyB9XG4gICAgKTtcblxuICAgIGlmIChlbGVtZW50VHlwZSA9PT0gJ3Jvb3QnKSB7XG4gICAgICBkaSA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpUGxhbmUoYnVzaW5lc3NPYmplY3QsIGRpQXR0cnMpO1xuICAgIH0gZWxzZVxuICAgIGlmIChlbGVtZW50VHlwZSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICBkaSA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZURpRWRnZShidXNpbmVzc09iamVjdCwgZGlBdHRycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlRGlTaGFwZShidXNpbmVzc09iamVjdCwgZGlBdHRycyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpHcm91cCcpKSB7XG4gICAgYXR0cnMgPSBhc3NpZ24oe1xuICAgICAgaXNGcmFtZTogdHJ1ZVxuICAgIH0sIGF0dHJzKTtcbiAgfVxuXG4gIGF0dHJzID0gYXBwbHlBdHRyaWJ1dGVzKGJ1c2luZXNzT2JqZWN0LCBhdHRycywgW1xuICAgICdwcm9jZXNzUmVmJyxcbiAgICAnaXNJbnRlcnJ1cHRpbmcnLFxuICAgICdhc3NvY2lhdGlvbkRpcmVjdGlvbicsXG4gICAgJ2lzRm9yQ29tcGVuc2F0aW9uJ1xuICBdKTtcblxuICBpZiAoYXR0cnMuaXNFeHBhbmRlZCkge1xuICAgIGF0dHJzID0gYXBwbHlBdHRyaWJ1dGUoZGksIGF0dHJzLCAnaXNFeHBhbmRlZCcpO1xuICB9XG5cbiAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbICdicG1uOkxhbmUnLCAnYnBtbjpQYXJ0aWNpcGFudCcgXSkpIHtcbiAgICBhdHRycyA9IGFwcGx5QXR0cmlidXRlKGRpLCBhdHRycywgJ2lzSG9yaXpvbnRhbCcpO1xuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICBhdHRycy5jb2xsYXBzZWQgPSAhaXNFeHBhbmRlZChidXNpbmVzc09iamVjdCwgZGkpO1xuICB9XG5cbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFeGNsdXNpdmVHYXRld2F5JykpIHtcbiAgICBpZiAoaGFzKGF0dHJzLCAnaXNNYXJrZXJWaXNpYmxlJykpIHtcbiAgICAgIGlmIChhdHRycy5pc01hcmtlclZpc2libGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkaS5pc01hcmtlclZpc2libGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHJzID0gYXBwbHlBdHRyaWJ1dGUoZGksIGF0dHJzLCAnaXNNYXJrZXJWaXNpYmxlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpLmlzTWFya2VyVmlzaWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRGVmaW5lZChhdHRycy50cmlnZ2VyZWRCeUV2ZW50KSkge1xuICAgIGJ1c2luZXNzT2JqZWN0LnRyaWdnZXJlZEJ5RXZlbnQgPSBhdHRycy50cmlnZ2VyZWRCeUV2ZW50O1xuICAgIGRlbGV0ZSBhdHRycy50cmlnZ2VyZWRCeUV2ZW50O1xuICB9XG5cbiAgaWYgKGlzRGVmaW5lZChhdHRycy5jYW5jZWxBY3Rpdml0eSkpIHtcbiAgICBidXNpbmVzc09iamVjdC5jYW5jZWxBY3Rpdml0eSA9IGF0dHJzLmNhbmNlbEFjdGl2aXR5O1xuICAgIGRlbGV0ZSBhdHRycy5jYW5jZWxBY3Rpdml0eTtcbiAgfVxuXG4gIHZhciBldmVudERlZmluaXRpb25zLFxuICAgICAgbmV3RXZlbnREZWZpbml0aW9uO1xuXG4gIGlmIChhdHRycy5ldmVudERlZmluaXRpb25UeXBlKSB7XG4gICAgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpIHx8IFtdO1xuICAgIG5ld0V2ZW50RGVmaW5pdGlvbiA9IHRoaXMuX2JwbW5GYWN0b3J5LmNyZWF0ZShhdHRycy5ldmVudERlZmluaXRpb25UeXBlLCBhdHRycy5ldmVudERlZmluaXRpb25BdHRycyk7XG5cbiAgICBpZiAoYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZSA9PT0gJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nKSB7XG4gICAgICBuZXdFdmVudERlZmluaXRpb24uY29uZGl0aW9uID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkZvcm1hbEV4cHJlc3Npb24nKTtcbiAgICB9XG5cbiAgICBldmVudERlZmluaXRpb25zLnB1c2gobmV3RXZlbnREZWZpbml0aW9uKTtcblxuICAgIG5ld0V2ZW50RGVmaW5pdGlvbi4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9ucyA9IGV2ZW50RGVmaW5pdGlvbnM7XG5cbiAgICBkZWxldGUgYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZTtcbiAgfVxuXG4gIHNpemUgPSB0aGlzLmdldERlZmF1bHRTaXplKGJ1c2luZXNzT2JqZWN0LCBkaSk7XG5cbiAgYXR0cnMgPSBhc3NpZ24oe1xuICAgIGlkOiBidXNpbmVzc09iamVjdC5pZFxuICB9LCBzaXplLCBhdHRycywge1xuICAgIGJ1c2luZXNzT2JqZWN0OiBidXNpbmVzc09iamVjdCxcbiAgICBkaTogZGlcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXMuX2Jhc2VDcmVhdGUoZWxlbWVudFR5cGUsIGF0dHJzKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHNpemUgb2YgYSBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50LlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkaSBUaGUgREkuXG4gKlxuICogQHJldHVybiB7RGltZW5zaW9uc30gRGVmYXVsdCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICovXG5FbGVtZW50RmFjdG9yeS5wcm90b3R5cGUuZ2V0RGVmYXVsdFNpemUgPSBmdW5jdGlvbihlbGVtZW50LCBkaSkge1xuXG4gIHZhciBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBkaSA9IGRpIHx8IGdldERpKGVsZW1lbnQpO1xuXG4gIGlmIChpcyhibywgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgaWYgKGlzRXhwYW5kZWQoYm8sIGRpKSkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDM1MCwgaGVpZ2h0OiAyMDAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhibywgJ2JwbW46VGFzaycpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xuICB9XG5cbiAgaWYgKGlzKGJvLCAnYnBtbjpHYXRld2F5JykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogNTAsIGhlaWdodDogNTAgfTtcbiAgfVxuXG4gIGlmIChpcyhibywgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiB7IHdpZHRoOiAzNiwgaGVpZ2h0OiAzNiB9O1xuICB9XG5cbiAgaWYgKGlzKGJvLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgaWYgKGlzRXhwYW5kZWQoYm8sIGRpKSkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDYwMCwgaGVpZ2h0OiAyNTAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDQwMCwgaGVpZ2h0OiA2MCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpcyhibywgJ2JwbW46TGFuZScpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDQwMCwgaGVpZ2h0OiAxMDAgfTtcbiAgfVxuXG4gIGlmIChpcyhibywgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDM2LCBoZWlnaHQ6IDUwIH07XG4gIH1cblxuICBpZiAoaXMoYm8sICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpKSB7XG4gICAgcmV0dXJuIHsgd2lkdGg6IDUwLCBoZWlnaHQ6IDUwIH07XG4gIH1cblxuICBpZiAoaXMoYm8sICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMTAwLCBoZWlnaHQ6IDMwIH07XG4gIH1cblxuICBpZiAoaXMoYm8sICdicG1uOkdyb3VwJykpIHtcbiAgICByZXR1cm4geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDMwMCB9O1xuICB9XG5cbiAgcmV0dXJuIHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiA4MCB9O1xufTtcblxuXG4vKipcbiAqIENyZWF0ZSBwYXJ0aWNpcGFudC5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW58UGFydGlhbDxTaGFwZT4gJiBQYXJ0aWFsPEJwbW5BdHRyaWJ1dGVzPn0gW2F0dHJzXVxuICogQXR0cmlidXRlcyBvciB3aGV0aGVyIHRoZSBwYXJ0aWNpcGFudCBpcyBleHBhbmRlZC5cbiAqXG4gKiBAcmV0dXJuIHtXfSBUaGUgY3JlYXRlZCBwYXJ0aWNpcGFudC5cbiAqL1xuRWxlbWVudEZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVBhcnRpY2lwYW50U2hhcGUgPSBmdW5jdGlvbihhdHRycykge1xuXG4gIGlmICghaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgYXR0cnMgPSB7IGlzRXhwYW5kZWQ6IGF0dHJzIH07XG4gIH1cblxuICBhdHRycyA9IGFzc2lnbih7IHR5cGU6ICdicG1uOlBhcnRpY2lwYW50JyB9LCBhdHRycyB8fCB7fSk7XG5cbiAgLy8gcGFydGljaXBhbnRzIGFyZSBleHBhbmRlZCBieSBkZWZhdWx0XG4gIGlmIChhdHRycy5pc0V4cGFuZGVkICE9PSBmYWxzZSkge1xuICAgIGF0dHJzLnByb2Nlc3NSZWYgPSB0aGlzLl9icG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46UHJvY2VzcycpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlU2hhcGUoYXR0cnMpO1xufTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBBcHBseSBhdHRyaWJ1dGVzIGZyb20gYSBtYXAgdG8gdGhlIGdpdmVuIGVsZW1lbnQsIHJlbW92ZSBhdHRyaWJ1dGUgZnJvbSB0aGVcbiAqIG1hcCBvbiBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycyAoaW4vb3V0IG1hcCBvZiBhdHRyaWJ1dGVzKVxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXR0cmlidXRlTmFtZXMgbmFtZSBvZiBhdHRyaWJ1dGVzIHRvIGFwcGx5XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBjaGFuZ2VkIGF0dHJzXG4gKi9cbmZ1bmN0aW9uIGFwcGx5QXR0cmlidXRlcyhlbGVtZW50LCBhdHRycywgYXR0cmlidXRlTmFtZXMpIHtcblxuICBmb3JFYWNoKGF0dHJpYnV0ZU5hbWVzLCBmdW5jdGlvbihwcm9wZXJ0eSkge1xuICAgIGF0dHJzID0gYXBwbHlBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cnMsIHByb3BlcnR5KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGF0dHJzO1xufVxuXG4vKipcbiAqIEFwcGx5IG5hbWVkIHByb3BlcnR5IHRvIGVsZW1lbnQgYW5kIGRyYWluIGl0IGZyb20gdGhlIGF0dHJzIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cnMgKGluL291dCBtYXAgb2YgYXR0cmlidXRlcylcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIHRvIGFwcGx5XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBjaGFuZ2VkIGF0dHJzXG4gKi9cbmZ1bmN0aW9uIGFwcGx5QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJzLCBhdHRyaWJ1dGVOYW1lKSB7XG4gIGlmIChhdHRyc1thdHRyaWJ1dGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGF0dHJzO1xuICB9XG5cbiAgZWxlbWVudFthdHRyaWJ1dGVOYW1lXSA9IGF0dHJzW2F0dHJpYnV0ZU5hbWVdO1xuXG4gIHJldHVybiBvbWl0KGF0dHJzLCBbIGF0dHJpYnV0ZU5hbWUgXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNNb2RkbGVEaShlbGVtZW50KSB7XG4gIHJldHVybiBpc0FueShlbGVtZW50LCBbXG4gICAgJ2JwbW5kaTpCUE1OU2hhcGUnLFxuICAgICdicG1uZGk6QlBNTkVkZ2UnLFxuICAgICdicG1uZGk6QlBNTkRpYWdyYW0nLFxuICAgICdicG1uZGk6QlBNTlBsYW5lJyxcbiAgXSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/ElementFactory.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/Modeling.js":
/*!*********************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/Modeling.js ***!
\*********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Modeling)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_features_modeling_Modeling__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/features/modeling/Modeling */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/modeling/Modeling.js\");\n/* harmony import */ var _cmd_UpdateModdlePropertiesHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cmd/UpdateModdlePropertiesHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js\");\n/* harmony import */ var _cmd_UpdatePropertiesHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cmd/UpdatePropertiesHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdatePropertiesHandler.js\");\n/* harmony import */ var _cmd_UpdateCanvasRootHandler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./cmd/UpdateCanvasRootHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateCanvasRootHandler.js\");\n/* harmony import */ var _cmd_AddLaneHandler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cmd/AddLaneHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/AddLaneHandler.js\");\n/* harmony import */ var _cmd_SplitLaneHandler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./cmd/SplitLaneHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/SplitLaneHandler.js\");\n/* harmony import */ var _cmd_ResizeLaneHandler__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cmd/ResizeLaneHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/ResizeLaneHandler.js\");\n/* harmony import */ var _cmd_UpdateFlowNodeRefsHandler__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./cmd/UpdateFlowNodeRefsHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js\");\n/* harmony import */ var _cmd_IdClaimHandler__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./cmd/IdClaimHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/IdClaimHandler.js\");\n/* harmony import */ var _cmd_SetColorHandler__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./cmd/SetColorHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/SetColorHandler.js\");\n/* harmony import */ var _label_editing_cmd_UpdateLabelHandler__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../label-editing/cmd/UpdateLabelHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/label-editing/cmd/UpdateLabelHandler.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('../rules/BpmnRules').default} BpmnRules\n * @typedef {import('diagram-js/lib/command/CommandStack').default} CommandStack\n * @typedef {import('./ElementFactory').default} ElementFactory\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n *\n * @typedef {import('diagram-js/lib/features/modeling/Modeling').ModelingHints} ModelingHints\n *\n * @typedef {import('../../model/Types').Connection} Connection\n * @typedef {import('../../model/Types').Element} Element\n * @typedef {import('../../model/Types').Label} Label\n * @typedef {import('../../model/Types').Parent} Parent\n * @typedef {import('../../model/Types').Root} Root\n * @typedef {import('../../model/Types').Shape} Shape\n * @typedef {import('../../model/Types').ModdleElement} ModdleElement\n *\n * @typedef {import('diagram-js/lib/util/Types').Rect} Rect\n *\n * @typedef {import('../../util/Types').Colors} Colors\n *\n * @typedef { {\n * removeShape?: boolean;\n * } } UpdateLabelHints\n */\n\n/**\n * The BPMN 2.0 modeling entry point.\n *\n * @template {Connection} [T=Connection]\n * @template {Element} [U=Element]\n * @template {Label} [V=Label]\n * @template {Parent} [W=Parent]\n * @template {Shape} [X=Shape]\n *\n * @extends {BaseModeling}\n *\n * @param {EventBus} eventBus\n * @param {ElementFactory} elementFactory\n * @param {CommandStack} commandStack\n * @param {BpmnRules} bpmnRules\n */\nfunction Modeling(\n eventBus,\n elementFactory,\n commandStack,\n bpmnRules\n) {\n\n diagram_js_lib_features_modeling_Modeling__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus, elementFactory, commandStack);\n\n this._bpmnRules = bpmnRules;\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Modeling, diagram_js_lib_features_modeling_Modeling__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nModeling.$inject = [\n 'eventBus',\n 'elementFactory',\n 'commandStack',\n 'bpmnRules'\n];\n\n\nModeling.prototype.getHandlers = function() {\n var handlers = diagram_js_lib_features_modeling_Modeling__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.getHandlers.call(this);\n\n handlers['element.updateModdleProperties'] = _cmd_UpdateModdlePropertiesHandler__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n handlers['element.updateProperties'] = _cmd_UpdatePropertiesHandler__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n handlers['canvas.updateRoot'] = _cmd_UpdateCanvasRootHandler__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n handlers['lane.add'] = _cmd_AddLaneHandler__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n handlers['lane.resize'] = _cmd_ResizeLaneHandler__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\n handlers['lane.split'] = _cmd_SplitLaneHandler__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\n handlers['lane.updateRefs'] = _cmd_UpdateFlowNodeRefsHandler__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\n handlers['id.updateClaim'] = _cmd_IdClaimHandler__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\n handlers['element.setColor'] = _cmd_SetColorHandler__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\n handlers['element.updateLabel'] = _label_editing_cmd_UpdateLabelHandler__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\n\n return handlers;\n};\n\n/**\n * Update an element's label.\n *\n * @param {Element} element The element.\n * @param {string} newLabel The new label.\n * @param {Rect} [newBounds] The optional bounds of the label.\n * @param {UpdateLabelHints} [hints] The optional hints.\n */\nModeling.prototype.updateLabel = function(element, newLabel, newBounds, hints) {\n this._commandStack.execute('element.updateLabel', {\n element: element,\n newLabel: newLabel,\n newBounds: newBounds,\n hints: hints || {}\n });\n};\n\n/**\n * @param {Element} source\n * @param {Element} target\n * @param {Partial} attrs\n * @param {ModelingHints} [hints]\n *\n * @return {T}\n */\nModeling.prototype.connect = function(source, target, attrs, hints) {\n\n var bpmnRules = this._bpmnRules;\n\n if (!attrs) {\n attrs = bpmnRules.canConnect(source, target);\n }\n\n if (!attrs) {\n return;\n }\n\n return this.createConnection(source, target, attrs, source.parent, hints);\n};\n\n/**\n * Update a model element's properties.\n *\n * @param {Element} element The element.\n * @param {ModdleElement} moddleElement The model element.\n * @param {Object} properties The updated properties.\n */\nModeling.prototype.updateModdleProperties = function(element, moddleElement, properties) {\n this._commandStack.execute('element.updateModdleProperties', {\n element: element,\n moddleElement: moddleElement,\n properties: properties\n });\n};\n\n/**\n * Update an element's properties.\n *\n * @param {Element} element The element.\n * @param {Object} properties The updated properties.\n */\nModeling.prototype.updateProperties = function(element, properties) {\n this._commandStack.execute('element.updateProperties', {\n element: element,\n properties: properties\n });\n};\n\n/**\n * Resize a lane.\n *\n * @param {Shape} laneShape The lane.\n * @param {Rect} newBounds The new bounds of the lane.\n * @param {boolean} [balanced] Wether to resize neighboring lanes.\n */\nModeling.prototype.resizeLane = function(laneShape, newBounds, balanced) {\n this._commandStack.execute('lane.resize', {\n shape: laneShape,\n newBounds: newBounds,\n balanced: balanced\n });\n};\n\n/**\n * Add a lane.\n *\n * @param {Shape} targetLaneShape The shape to add the lane to.\n * @param {string} location The location.\n *\n * @return {Shape} The added lane.\n */\nModeling.prototype.addLane = function(targetLaneShape, location) {\n var context = {\n shape: targetLaneShape,\n location: location\n };\n\n this._commandStack.execute('lane.add', context);\n\n return context.newLane;\n};\n\n/**\n * Split a lane.\n *\n * @param {Shape} targetLane The lane to split.\n * @param {number} count The number of lanes to split the lane into. Must not\n * exceed the number of existing lanes.\n */\nModeling.prototype.splitLane = function(targetLane, count) {\n this._commandStack.execute('lane.split', {\n shape: targetLane,\n count: count\n });\n};\n\n/**\n * Turn a process into a collaboration.\n *\n * @return {Root} The root of the collaboration.\n */\nModeling.prototype.makeCollaboration = function() {\n\n var collaborationElement = this._create('root', {\n type: 'bpmn:Collaboration'\n });\n\n var context = {\n newRoot: collaborationElement\n };\n\n this._commandStack.execute('canvas.updateRoot', context);\n\n return collaborationElement;\n};\n\n/**\n * Transform a collaboration into a process.\n *\n * @return {Root} The root of the process.\n */\nModeling.prototype.makeProcess = function() {\n\n var processElement = this._create('root', {\n type: 'bpmn:Process'\n });\n\n var context = {\n newRoot: processElement\n };\n\n this._commandStack.execute('canvas.updateRoot', context);\n};\n\n/**\n * Update the referenced lanes of each flow node.\n *\n * @param {Shape[]} flowNodeShapes The flow nodes to update.\n * @param {Shape[]} laneShapes The lanes.\n */\nModeling.prototype.updateLaneRefs = function(flowNodeShapes, laneShapes) {\n\n this._commandStack.execute('lane.updateRefs', {\n flowNodeShapes: flowNodeShapes,\n laneShapes: laneShapes\n });\n};\n\n/**\n * Claim an ID.\n *\n * @param {string} id The ID to claim.\n * @param {ModdleElement} moddleElement The model element the ID is claimed for.\n */\nModeling.prototype.claimId = function(id, moddleElement) {\n this._commandStack.execute('id.updateClaim', {\n id: id,\n element: moddleElement,\n claiming: true\n });\n};\n\n/**\n * Unclaim an ID.\n *\n * @param {string} id The ID to unclaim.\n * @param {ModdleElement} moddleElement The model element the ID is claimed for.\n */\nModeling.prototype.unclaimId = function(id, moddleElement) {\n this._commandStack.execute('id.updateClaim', {\n id: id,\n element: moddleElement\n });\n};\n\n/**\n * Set the color(s) of one or many elements.\n *\n * @param {Element[]} elements The elements to set the color(s) for.\n * @param {Colors} colors The color(s) to set.\n */\nModeling.prototype.setColor = function(elements, colors) {\n if (!elements.length) {\n elements = [ elements ];\n }\n\n this._commandStack.execute('element.setColor', {\n elements: elements,\n colors: colors\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9Nb2RlbGluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQXdDOztBQUU2Qjs7QUFFVztBQUNaO0FBQ0E7QUFDbEI7QUFDSTtBQUNFO0FBQ2dCO0FBQ3RCO0FBQ0U7O0FBRXFCOztBQUV6RTtBQUNBLGFBQWEsc0NBQXNDO0FBQ25ELGFBQWEsdURBQXVEO0FBQ3BFLGFBQWEsb0NBQW9DO0FBQ2pELGFBQWEsZ0RBQWdEO0FBQzdEO0FBQ0EsYUFBYSxtRUFBbUU7QUFDaEY7QUFDQSxhQUFhLHdDQUF3QztBQUNyRCxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLG1DQUFtQztBQUNoRCxhQUFhLG9DQUFvQztBQUNqRCxhQUFhLGtDQUFrQztBQUMvQyxhQUFhLG1DQUFtQztBQUNoRCxhQUFhLDJDQUEyQztBQUN4RDtBQUNBLGFBQWEsMENBQTBDO0FBQ3ZEO0FBQ0EsYUFBYSxtQ0FBbUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsWUFBWTtBQUMxQixjQUFjLFNBQVM7QUFDdkIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsUUFBUTtBQUN0QixjQUFjLE9BQU87QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsV0FBVztBQUN0QjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGlGQUFZOztBQUVkO0FBQ0E7O0FBRUEsNERBQVEsV0FBVyxpRkFBWTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLGlCQUFpQixpRkFBWTs7QUFFN0IsK0NBQStDLDBFQUE2QjtBQUM1RSx5Q0FBeUMsb0VBQXVCO0FBQ2hFLGtDQUFrQyxvRUFBdUI7QUFDekQseUJBQXlCLDJEQUFjO0FBQ3ZDLDRCQUE0Qiw4REFBaUI7QUFDN0MsMkJBQTJCLDZEQUFnQjtBQUMzQyxnQ0FBZ0Msc0VBQXlCO0FBQ3pELCtCQUErQiwyREFBYztBQUM3QyxpQ0FBaUMsNkRBQWU7QUFDaEQsb0NBQW9DLDhFQUFrQjs7QUFFdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsTUFBTTtBQUNqQixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLGVBQWU7QUFDMUIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsTUFBTTtBQUNqQixXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxlQUFlO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxlQUFlO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nLmpzPzRiNTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgQmFzZU1vZGVsaW5nIGZyb20gJ2RpYWdyYW0tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL01vZGVsaW5nJztcblxuaW1wb3J0IFVwZGF0ZU1vZGRsZVByb3BlcnRpZXNIYW5kbGVyIGZyb20gJy4vY21kL1VwZGF0ZU1vZGRsZVByb3BlcnRpZXNIYW5kbGVyJztcbmltcG9ydCBVcGRhdGVQcm9wZXJ0aWVzSGFuZGxlciBmcm9tICcuL2NtZC9VcGRhdGVQcm9wZXJ0aWVzSGFuZGxlcic7XG5pbXBvcnQgVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIgZnJvbSAnLi9jbWQvVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXInO1xuaW1wb3J0IEFkZExhbmVIYW5kbGVyIGZyb20gJy4vY21kL0FkZExhbmVIYW5kbGVyJztcbmltcG9ydCBTcGxpdExhbmVIYW5kbGVyIGZyb20gJy4vY21kL1NwbGl0TGFuZUhhbmRsZXInO1xuaW1wb3J0IFJlc2l6ZUxhbmVIYW5kbGVyIGZyb20gJy4vY21kL1Jlc2l6ZUxhbmVIYW5kbGVyJztcbmltcG9ydCBVcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyIGZyb20gJy4vY21kL1VwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXInO1xuaW1wb3J0IElkQ2xhaW1IYW5kbGVyIGZyb20gJy4vY21kL0lkQ2xhaW1IYW5kbGVyJztcbmltcG9ydCBTZXRDb2xvckhhbmRsZXIgZnJvbSAnLi9jbWQvU2V0Q29sb3JIYW5kbGVyJztcblxuaW1wb3J0IFVwZGF0ZUxhYmVsSGFuZGxlciBmcm9tICcuLi9sYWJlbC1lZGl0aW5nL2NtZC9VcGRhdGVMYWJlbEhhbmRsZXInO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3J1bGVzL0JwbW5SdWxlcycpLmRlZmF1bHR9IEJwbW5SdWxlc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kU3RhY2snKS5kZWZhdWx0fSBDb21tYW5kU3RhY2tcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vRWxlbWVudEZhY3RvcnknKS5kZWZhdWx0fSBFbGVtZW50RmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvTW9kZWxpbmcnKS5Nb2RlbGluZ0hpbnRzfSBNb2RlbGluZ0hpbnRzXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWwvVHlwZXMnKS5Db25uZWN0aW9ufSBDb25uZWN0aW9uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLkVsZW1lbnR9IEVsZW1lbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuTGFiZWx9IExhYmVsXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLlBhcmVudH0gUGFyZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLlJvb3R9IFJvb3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL21vZGVsL1R5cGVzJykuU2hhcGV9IFNoYXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9tb2RlbC9UeXBlcycpLk1vZGRsZUVsZW1lbnR9IE1vZGRsZUVsZW1lbnRcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi91dGlsL1R5cGVzJykuUmVjdH0gUmVjdFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3V0aWwvVHlwZXMnKS5Db2xvcnN9IENvbG9yc1xuICpcbiAqIEB0eXBlZGVmIHsge1xuICogICByZW1vdmVTaGFwZT86IGJvb2xlYW47XG4gKiB9IH0gVXBkYXRlTGFiZWxIaW50c1xuICovXG5cbi8qKlxuICogVGhlIEJQTU4gMi4wIG1vZGVsaW5nIGVudHJ5IHBvaW50LlxuICpcbiAqIEB0ZW1wbGF0ZSB7Q29ubmVjdGlvbn0gW1Q9Q29ubmVjdGlvbl1cbiAqIEB0ZW1wbGF0ZSB7RWxlbWVudH0gW1U9RWxlbWVudF1cbiAqIEB0ZW1wbGF0ZSB7TGFiZWx9IFtWPUxhYmVsXVxuICogQHRlbXBsYXRlIHtQYXJlbnR9IFtXPVBhcmVudF1cbiAqIEB0ZW1wbGF0ZSB7U2hhcGV9IFtYPVNoYXBlXVxuICpcbiAqIEBleHRlbmRzIHtCYXNlTW9kZWxpbmc8VCwgVSwgViwgVywgWD59XG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXG4gKiBAcGFyYW0ge0JwbW5SdWxlc30gYnBtblJ1bGVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsaW5nKFxuICAgIGV2ZW50QnVzLFxuICAgIGVsZW1lbnRGYWN0b3J5LFxuICAgIGNvbW1hbmRTdGFjayxcbiAgICBicG1uUnVsZXNcbikge1xuXG4gIEJhc2VNb2RlbGluZy5jYWxsKHRoaXMsIGV2ZW50QnVzLCBlbGVtZW50RmFjdG9yeSwgY29tbWFuZFN0YWNrKTtcblxuICB0aGlzLl9icG1uUnVsZXMgPSBicG1uUnVsZXM7XG59XG5cbmluaGVyaXRzKE1vZGVsaW5nLCBCYXNlTW9kZWxpbmcpO1xuXG5Nb2RlbGluZy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnZWxlbWVudEZhY3RvcnknLFxuICAnY29tbWFuZFN0YWNrJyxcbiAgJ2JwbW5SdWxlcydcbl07XG5cblxuTW9kZWxpbmcucHJvdG90eXBlLmdldEhhbmRsZXJzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBoYW5kbGVycyA9IEJhc2VNb2RlbGluZy5wcm90b3R5cGUuZ2V0SGFuZGxlcnMuY2FsbCh0aGlzKTtcblxuICBoYW5kbGVyc1snZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJ10gPSBVcGRhdGVNb2RkbGVQcm9wZXJ0aWVzSGFuZGxlcjtcbiAgaGFuZGxlcnNbJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcyddID0gVXBkYXRlUHJvcGVydGllc0hhbmRsZXI7XG4gIGhhbmRsZXJzWydjYW52YXMudXBkYXRlUm9vdCddID0gVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXI7XG4gIGhhbmRsZXJzWydsYW5lLmFkZCddID0gQWRkTGFuZUhhbmRsZXI7XG4gIGhhbmRsZXJzWydsYW5lLnJlc2l6ZSddID0gUmVzaXplTGFuZUhhbmRsZXI7XG4gIGhhbmRsZXJzWydsYW5lLnNwbGl0J10gPSBTcGxpdExhbmVIYW5kbGVyO1xuICBoYW5kbGVyc1snbGFuZS51cGRhdGVSZWZzJ10gPSBVcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyO1xuICBoYW5kbGVyc1snaWQudXBkYXRlQ2xhaW0nXSA9IElkQ2xhaW1IYW5kbGVyO1xuICBoYW5kbGVyc1snZWxlbWVudC5zZXRDb2xvciddID0gU2V0Q29sb3JIYW5kbGVyO1xuICBoYW5kbGVyc1snZWxlbWVudC51cGRhdGVMYWJlbCddID0gVXBkYXRlTGFiZWxIYW5kbGVyO1xuXG4gIHJldHVybiBoYW5kbGVycztcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGVsZW1lbnQncyBsYWJlbC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3TGFiZWwgVGhlIG5ldyBsYWJlbC5cbiAqIEBwYXJhbSB7UmVjdH0gW25ld0JvdW5kc10gVGhlIG9wdGlvbmFsIGJvdW5kcyBvZiB0aGUgbGFiZWwuXG4gKiBAcGFyYW0ge1VwZGF0ZUxhYmVsSGludHN9IFtoaW50c10gVGhlIG9wdGlvbmFsIGhpbnRzLlxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlTGFiZWwgPSBmdW5jdGlvbihlbGVtZW50LCBuZXdMYWJlbCwgbmV3Qm91bmRzLCBoaW50cykge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVMYWJlbCcsIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIG5ld0xhYmVsOiBuZXdMYWJlbCxcbiAgICBuZXdCb3VuZHM6IG5ld0JvdW5kcyxcbiAgICBoaW50czogaGludHMgfHwge31cbiAgfSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gc291cmNlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldFxuICogQHBhcmFtIHtQYXJ0aWFsPENvbm5lY3Rpb24+fSBhdHRyc1xuICogQHBhcmFtIHtNb2RlbGluZ0hpbnRzfSBbaGludHNdXG4gKlxuICogQHJldHVybiB7VH1cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMsIGhpbnRzKSB7XG5cbiAgdmFyIGJwbW5SdWxlcyA9IHRoaXMuX2JwbW5SdWxlcztcblxuICBpZiAoIWF0dHJzKSB7XG4gICAgYXR0cnMgPSBicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBpZiAoIWF0dHJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3JlYXRlQ29ubmVjdGlvbihzb3VyY2UsIHRhcmdldCwgYXR0cnMsIHNvdXJjZS5wYXJlbnQsIGhpbnRzKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgbW9kZWwgZWxlbWVudCdzIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50LlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBtb2RkbGVFbGVtZW50IFRoZSBtb2RlbCBlbGVtZW50LlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHVwZGF0ZWQgcHJvcGVydGllcy5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMgPSBmdW5jdGlvbihlbGVtZW50LCBtb2RkbGVFbGVtZW50LCBwcm9wZXJ0aWVzKSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgZWxlbWVudDogZWxlbWVudCxcbiAgICBtb2RkbGVFbGVtZW50OiBtb2RkbGVFbGVtZW50LFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNcbiAgfSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBlbGVtZW50J3MgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQuXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBUaGUgdXBkYXRlZCBwcm9wZXJ0aWVzLlxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUudXBkYXRlUHJvcGVydGllcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnRpZXMpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsIHtcbiAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlc2l6ZSBhIGxhbmUuXG4gKlxuICogQHBhcmFtIHtTaGFwZX0gbGFuZVNoYXBlIFRoZSBsYW5lLlxuICogQHBhcmFtIHtSZWN0fSBuZXdCb3VuZHMgVGhlIG5ldyBib3VuZHMgb2YgdGhlIGxhbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiYWxhbmNlZF0gV2V0aGVyIHRvIHJlc2l6ZSBuZWlnaGJvcmluZyBsYW5lcy5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnJlc2l6ZUxhbmUgPSBmdW5jdGlvbihsYW5lU2hhcGUsIG5ld0JvdW5kcywgYmFsYW5jZWQpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUucmVzaXplJywge1xuICAgIHNoYXBlOiBsYW5lU2hhcGUsXG4gICAgbmV3Qm91bmRzOiBuZXdCb3VuZHMsXG4gICAgYmFsYW5jZWQ6IGJhbGFuY2VkXG4gIH0pO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYW5lLlxuICpcbiAqIEBwYXJhbSB7U2hhcGV9IHRhcmdldExhbmVTaGFwZSBUaGUgc2hhcGUgdG8gYWRkIHRoZSBsYW5lIHRvLlxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIFRoZSBsb2NhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtTaGFwZX0gVGhlIGFkZGVkIGxhbmUuXG4gKi9cbk1vZGVsaW5nLnByb3RvdHlwZS5hZGRMYW5lID0gZnVuY3Rpb24odGFyZ2V0TGFuZVNoYXBlLCBsb2NhdGlvbikge1xuICB2YXIgY29udGV4dCA9IHtcbiAgICBzaGFwZTogdGFyZ2V0TGFuZVNoYXBlLFxuICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICB9O1xuXG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdsYW5lLmFkZCcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb250ZXh0Lm5ld0xhbmU7XG59O1xuXG4vKipcbiAqIFNwbGl0IGEgbGFuZS5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSB0YXJnZXRMYW5lIFRoZSBsYW5lIHRvIHNwbGl0LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IFRoZSBudW1iZXIgb2YgbGFuZXMgdG8gc3BsaXQgdGhlIGxhbmUgaW50by4gTXVzdCBub3RcbiAqIGV4Y2VlZCB0aGUgbnVtYmVyIG9mIGV4aXN0aW5nIGxhbmVzLlxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUuc3BsaXRMYW5lID0gZnVuY3Rpb24odGFyZ2V0TGFuZSwgY291bnQpIHtcbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2xhbmUuc3BsaXQnLCB7XG4gICAgc2hhcGU6IHRhcmdldExhbmUsXG4gICAgY291bnQ6IGNvdW50XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUdXJuIGEgcHJvY2VzcyBpbnRvIGEgY29sbGFib3JhdGlvbi5cbiAqXG4gKiBAcmV0dXJuIHtSb290fSBUaGUgcm9vdCBvZiB0aGUgY29sbGFib3JhdGlvbi5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLm1ha2VDb2xsYWJvcmF0aW9uID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGNvbGxhYm9yYXRpb25FbGVtZW50ID0gdGhpcy5fY3JlYXRlKCdyb290Jywge1xuICAgIHR5cGU6ICdicG1uOkNvbGxhYm9yYXRpb24nXG4gIH0pO1xuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgIG5ld1Jvb3Q6IGNvbGxhYm9yYXRpb25FbGVtZW50XG4gIH07XG5cbiAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2NhbnZhcy51cGRhdGVSb290JywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbGxhYm9yYXRpb25FbGVtZW50O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBjb2xsYWJvcmF0aW9uIGludG8gYSBwcm9jZXNzLlxuICpcbiAqIEByZXR1cm4ge1Jvb3R9IFRoZSByb290IG9mIHRoZSBwcm9jZXNzLlxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUubWFrZVByb2Nlc3MgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgcHJvY2Vzc0VsZW1lbnQgPSB0aGlzLl9jcmVhdGUoJ3Jvb3QnLCB7XG4gICAgdHlwZTogJ2JwbW46UHJvY2VzcydcbiAgfSk7XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgbmV3Um9vdDogcHJvY2Vzc0VsZW1lbnRcbiAgfTtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnY2FudmFzLnVwZGF0ZVJvb3QnLCBjb250ZXh0KTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSByZWZlcmVuY2VkIGxhbmVzIG9mIGVhY2ggZmxvdyBub2RlLlxuICpcbiAqIEBwYXJhbSB7U2hhcGVbXX0gZmxvd05vZGVTaGFwZXMgVGhlIGZsb3cgbm9kZXMgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtTaGFwZVtdfSBsYW5lU2hhcGVzIFRoZSBsYW5lcy5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnVwZGF0ZUxhbmVSZWZzID0gZnVuY3Rpb24oZmxvd05vZGVTaGFwZXMsIGxhbmVTaGFwZXMpIHtcblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnbGFuZS51cGRhdGVSZWZzJywge1xuICAgIGZsb3dOb2RlU2hhcGVzOiBmbG93Tm9kZVNoYXBlcyxcbiAgICBsYW5lU2hhcGVzOiBsYW5lU2hhcGVzXG4gIH0pO1xufTtcblxuLyoqXG4gKiBDbGFpbSBhbiBJRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIHRvIGNsYWltLlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBtb2RkbGVFbGVtZW50IFRoZSBtb2RlbCBlbGVtZW50IHRoZSBJRCBpcyBjbGFpbWVkIGZvci5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLmNsYWltSWQgPSBmdW5jdGlvbihpZCwgbW9kZGxlRWxlbWVudCkge1xuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnaWQudXBkYXRlQ2xhaW0nLCB7XG4gICAgaWQ6IGlkLFxuICAgIGVsZW1lbnQ6IG1vZGRsZUVsZW1lbnQsXG4gICAgY2xhaW1pbmc6IHRydWVcbiAgfSk7XG59O1xuXG4vKipcbiAqIFVuY2xhaW0gYW4gSUQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCB0byB1bmNsYWltLlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBtb2RkbGVFbGVtZW50IFRoZSBtb2RlbCBlbGVtZW50IHRoZSBJRCBpcyBjbGFpbWVkIGZvci5cbiAqL1xuTW9kZWxpbmcucHJvdG90eXBlLnVuY2xhaW1JZCA9IGZ1bmN0aW9uKGlkLCBtb2RkbGVFbGVtZW50KSB7XG4gIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdpZC51cGRhdGVDbGFpbScsIHtcbiAgICBpZDogaWQsXG4gICAgZWxlbWVudDogbW9kZGxlRWxlbWVudFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjb2xvcihzKSBvZiBvbmUgb3IgbWFueSBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIHRvIHNldCB0aGUgY29sb3IocykgZm9yLlxuICogQHBhcmFtIHtDb2xvcnN9IGNvbG9ycyBUaGUgY29sb3IocykgdG8gc2V0LlxuICovXG5Nb2RlbGluZy5wcm90b3R5cGUuc2V0Q29sb3IgPSBmdW5jdGlvbihlbGVtZW50cywgY29sb3JzKSB7XG4gIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gIH1cblxuICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC5zZXRDb2xvcicsIHtcbiAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgY29sb3JzOiBjb2xvcnNcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/Modeling.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js":
/*!******************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js ***!
\******************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AdaptiveLabelPositioningBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/Math */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/PositionUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n *\n * @typedef {import('../../../model/Types').Element} Element\n * @typedef {import('../../../model/Types').Shape} Shape\n *\n * @typedef {import('diagram-js/lib/util/Types').DirectionTRBL} DirectionTRBL\n */\n\nvar ALIGNMENTS = [\n 'top',\n 'bottom',\n 'left',\n 'right'\n];\n\nvar ELEMENT_LABEL_DISTANCE = 10;\n\n/**\n * A component that makes sure that external labels are added\n * together with respective elements and properly updated (DI wise)\n * during move.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction AdaptiveLabelPositioningBehavior(eventBus, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this.postExecuted([\n 'connection.create',\n 'connection.layout',\n 'connection.updateWaypoints'\n ], function(event) {\n var context = event.context,\n connection = context.connection,\n source = connection.source,\n target = connection.target,\n hints = context.hints || {};\n\n if (hints.createElementsBehavior !== false) {\n checkLabelAdjustment(source);\n checkLabelAdjustment(target);\n }\n });\n\n\n this.postExecuted([\n 'label.create'\n ], function(event) {\n var context = event.context,\n shape = context.shape,\n hints = context.hints || {};\n\n if (hints.createElementsBehavior !== false) {\n checkLabelAdjustment(shape.labelTarget);\n }\n });\n\n\n this.postExecuted([\n 'elements.create'\n ], function(event) {\n var context = event.context,\n elements = context.elements,\n hints = context.hints || {};\n\n if (hints.createElementsBehavior !== false) {\n elements.forEach(function(element) {\n checkLabelAdjustment(element);\n });\n }\n });\n\n function checkLabelAdjustment(element) {\n\n // skip non-existing labels\n if (!(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.hasExternalLabel)(element)) {\n return;\n }\n\n var optimalPosition = getOptimalPosition(element);\n\n // no optimal position found\n if (!optimalPosition) {\n return;\n }\n\n adjustLabelPosition(element, optimalPosition);\n }\n\n function adjustLabelPosition(element, orientation) {\n\n var elementMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getMid)(element),\n label = element.label,\n labelMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getMid)(label);\n\n // ignore labels that are being created\n if (!label.parent) {\n return;\n }\n\n var elementTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.asTRBL)(element);\n\n var newLabelMid;\n\n switch (orientation) {\n case 'top':\n newLabelMid = {\n x: elementMid.x,\n y: elementTrbl.top - ELEMENT_LABEL_DISTANCE - label.height / 2\n };\n\n break;\n\n case 'left':\n\n newLabelMid = {\n x: elementTrbl.left - ELEMENT_LABEL_DISTANCE - label.width / 2,\n y: elementMid.y\n };\n\n break;\n\n case 'bottom':\n\n newLabelMid = {\n x: elementMid.x,\n y: elementTrbl.bottom + ELEMENT_LABEL_DISTANCE + label.height / 2\n };\n\n break;\n\n case 'right':\n\n newLabelMid = {\n x: elementTrbl.right + ELEMENT_LABEL_DISTANCE + label.width / 2,\n y: elementMid.y\n };\n\n break;\n }\n\n var delta = (0,diagram_js_lib_util_Math__WEBPACK_IMPORTED_MODULE_3__.delta)(newLabelMid, labelMid);\n\n modeling.moveShape(label, delta);\n }\n\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(AdaptiveLabelPositioningBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nAdaptiveLabelPositioningBehavior.$inject = [\n 'eventBus',\n 'modeling'\n];\n\n\n// helpers //////////////////////\n\n/**\n * Return alignments which are taken by a boundary's host element\n *\n * @param {Shape} element\n *\n * @return {DirectionTRBL[]}\n */\nfunction getTakenHostAlignments(element) {\n\n var hostElement = element.host,\n elementMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getMid)(element),\n hostOrientation = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getOrientation)(elementMid, hostElement);\n\n var freeAlignments;\n\n // check whether there is a multi-orientation, e.g. 'top-left'\n if (hostOrientation.indexOf('-') >= 0) {\n freeAlignments = hostOrientation.split('-');\n } else {\n freeAlignments = [ hostOrientation ];\n }\n\n var takenAlignments = ALIGNMENTS.filter(function(alignment) {\n\n return freeAlignments.indexOf(alignment) === -1;\n });\n\n return takenAlignments;\n\n}\n\n/**\n * Return alignments which are taken by related connections\n *\n * @param {Element} element\n *\n * @return {DirectionTRBL[]}\n */\nfunction getTakenConnectionAlignments(element) {\n\n var elementMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getMid)(element);\n\n var takenAlignments = [].concat(\n element.incoming.map(function(c) {\n return c.waypoints[c.waypoints.length - 2 ];\n }),\n element.outgoing.map(function(c) {\n return c.waypoints[1];\n })\n ).map(function(point) {\n return getApproximateOrientation(elementMid, point);\n });\n\n return takenAlignments;\n}\n\n/**\n * Return the optimal label position around an element\n * or `undefined`, if none was found.\n *\n * @param {Element} element\n *\n * @return {DirectionTRBL|undefined}\n */\nfunction getOptimalPosition(element) {\n\n var labelMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getMid)(element.label);\n\n var elementMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getMid)(element);\n\n var labelOrientation = getApproximateOrientation(elementMid, labelMid);\n\n if (!isAligned(labelOrientation)) {\n return;\n }\n\n var takenAlignments = getTakenConnectionAlignments(element);\n\n if (element.host) {\n var takenHostAlignments = getTakenHostAlignments(element);\n\n takenAlignments = takenAlignments.concat(takenHostAlignments);\n }\n\n var freeAlignments = ALIGNMENTS.filter(function(alignment) {\n\n return takenAlignments.indexOf(alignment) === -1;\n });\n\n // NOTHING TO DO; label already aligned a.O.K.\n if (freeAlignments.indexOf(labelOrientation) !== -1) {\n return;\n }\n\n return freeAlignments[0];\n}\n\nfunction getApproximateOrientation(p0, p1) {\n return (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getOrientation)(p1, p0, 5);\n}\n\nfunction isAligned(orientation) {\n return ALIGNMENTS.indexOf(orientation) !== -1;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBd0M7O0FBTUU7O0FBSVI7O0FBSUQ7O0FBRTBDOztBQUUzRTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsK0JBQStCO0FBQzVDO0FBQ0EsYUFBYSx3Q0FBd0M7QUFDckQsYUFBYSxzQ0FBc0M7QUFDbkQ7QUFDQSxhQUFhLG1EQUFtRDtBQUNoRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckI7QUFDZTs7QUFFZixFQUFFLGlGQUFrQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQSxTQUFTLGlFQUFnQjtBQUN6QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEscUJBQXFCLHdFQUFNO0FBQzNCO0FBQ0EsbUJBQW1CLHdFQUFNOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0Isd0VBQU07O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGdCQUFnQiwrREFBUzs7QUFFekI7QUFDQTs7QUFFQTs7QUFFQSw0REFBUSxtQ0FBbUMsaUZBQWtCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsd0VBQU07QUFDekIsd0JBQXdCLGdGQUFjOztBQUV0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUEsbUJBQW1CLHdFQUFNOztBQUV6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUEsaUJBQWlCLHdFQUFNOztBQUV2QixtQkFBbUIsd0VBQU07O0FBRXpCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxHQUFHOztBQUVILG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVMsZ0ZBQWM7QUFDdkI7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvQWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3IuanM/MjY3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCB7XG4gIGdldE9yaWVudGF0aW9uLFxuICBnZXRNaWQsXG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIHN1YnN0cmFjdFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01hdGgnO1xuXG5pbXBvcnQge1xuICBoYXNFeHRlcm5hbExhYmVsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi9tb2RlbC9UeXBlcycpLlNoYXBlfSBTaGFwZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL3V0aWwvVHlwZXMnKS5EaXJlY3Rpb25UUkJMfSBEaXJlY3Rpb25UUkJMXG4gKi9cblxudmFyIEFMSUdOTUVOVFMgPSBbXG4gICd0b3AnLFxuICAnYm90dG9tJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnXG5dO1xuXG52YXIgRUxFTUVOVF9MQUJFTF9ESVNUQU5DRSA9IDEwO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFrZXMgc3VyZSB0aGF0IGV4dGVybmFsIGxhYmVscyBhcmUgYWRkZWRcbiAqIHRvZ2V0aGVyIHdpdGggcmVzcGVjdGl2ZSBlbGVtZW50cyBhbmQgcHJvcGVybHkgdXBkYXRlZCAoREkgd2lzZSlcbiAqIGR1cmluZyBtb3ZlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoW1xuICAgICdjb25uZWN0aW9uLmNyZWF0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBzb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZSxcbiAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgY2hlY2tMYWJlbEFkanVzdG1lbnQoc291cmNlKTtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHRhcmdldCk7XG4gICAgfVxuICB9KTtcblxuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFtcbiAgICAnbGFiZWwuY3JlYXRlJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciAhPT0gZmFsc2UpIHtcbiAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KHNoYXBlLmxhYmVsVGFyZ2V0KTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoW1xuICAgICdlbGVtZW50cy5jcmVhdGUnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQuZWxlbWVudHMsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGNoZWNrTGFiZWxBZGp1c3RtZW50KGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBjaGVja0xhYmVsQWRqdXN0bWVudChlbGVtZW50KSB7XG5cbiAgICAvLyBza2lwIG5vbi1leGlzdGluZyBsYWJlbHNcbiAgICBpZiAoIWhhc0V4dGVybmFsTGFiZWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW1hbFBvc2l0aW9uID0gZ2V0T3B0aW1hbFBvc2l0aW9uKGVsZW1lbnQpO1xuXG4gICAgLy8gbm8gb3B0aW1hbCBwb3NpdGlvbiBmb3VuZFxuICAgIGlmICghb3B0aW1hbFBvc2l0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRqdXN0TGFiZWxQb3NpdGlvbihlbGVtZW50LCBvcHRpbWFsUG9zaXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRqdXN0TGFiZWxQb3NpdGlvbihlbGVtZW50LCBvcmllbnRhdGlvbikge1xuXG4gICAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCksXG4gICAgICAgIGxhYmVsID0gZWxlbWVudC5sYWJlbCxcbiAgICAgICAgbGFiZWxNaWQgPSBnZXRNaWQobGFiZWwpO1xuXG4gICAgLy8gaWdub3JlIGxhYmVscyB0aGF0IGFyZSBiZWluZyBjcmVhdGVkXG4gICAgaWYgKCFsYWJlbC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudFRyYmwgPSBhc1RSQkwoZWxlbWVudCk7XG5cbiAgICB2YXIgbmV3TGFiZWxNaWQ7XG5cbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIG5ld0xhYmVsTWlkID0ge1xuICAgICAgICB4OiBlbGVtZW50TWlkLngsXG4gICAgICAgIHk6IGVsZW1lbnRUcmJsLnRvcCAtIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgLSBsYWJlbC5oZWlnaHQgLyAyXG4gICAgICB9O1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2xlZnQnOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudFRyYmwubGVmdCAtIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgLSBsYWJlbC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdib3R0b20nOlxuXG4gICAgICBuZXdMYWJlbE1pZCA9IHtcbiAgICAgICAgeDogZWxlbWVudE1pZC54LFxuICAgICAgICB5OiBlbGVtZW50VHJibC5ib3R0b20gKyBFTEVNRU5UX0xBQkVMX0RJU1RBTkNFICsgbGFiZWwuaGVpZ2h0IC8gMlxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdyaWdodCc6XG5cbiAgICAgIG5ld0xhYmVsTWlkID0ge1xuICAgICAgICB4OiBlbGVtZW50VHJibC5yaWdodCArIEVMRU1FTlRfTEFCRUxfRElTVEFOQ0UgKyBsYWJlbC53aWR0aCAvIDIsXG4gICAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhID0gc3Vic3RyYWN0KG5ld0xhYmVsTWlkLCBsYWJlbE1pZCk7XG5cbiAgICBtb2RlbGluZy5tb3ZlU2hhcGUobGFiZWwsIGRlbHRhKTtcbiAgfVxuXG59XG5cbmluaGVyaXRzKEFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5BZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHVybiBhbGlnbm1lbnRzIHdoaWNoIGFyZSB0YWtlbiBieSBhIGJvdW5kYXJ5J3MgaG9zdCBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtTaGFwZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0RpcmVjdGlvblRSQkxbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0VGFrZW5Ib3N0QWxpZ25tZW50cyhlbGVtZW50KSB7XG5cbiAgdmFyIGhvc3RFbGVtZW50ID0gZWxlbWVudC5ob3N0LFxuICAgICAgZWxlbWVudE1pZCA9IGdldE1pZChlbGVtZW50KSxcbiAgICAgIGhvc3RPcmllbnRhdGlvbiA9IGdldE9yaWVudGF0aW9uKGVsZW1lbnRNaWQsIGhvc3RFbGVtZW50KTtcblxuICB2YXIgZnJlZUFsaWdubWVudHM7XG5cbiAgLy8gY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIG11bHRpLW9yaWVudGF0aW9uLCBlLmcuICd0b3AtbGVmdCdcbiAgaWYgKGhvc3RPcmllbnRhdGlvbi5pbmRleE9mKCctJykgPj0gMCkge1xuICAgIGZyZWVBbGlnbm1lbnRzID0gaG9zdE9yaWVudGF0aW9uLnNwbGl0KCctJyk7XG4gIH0gZWxzZSB7XG4gICAgZnJlZUFsaWdubWVudHMgPSBbIGhvc3RPcmllbnRhdGlvbiBdO1xuICB9XG5cbiAgdmFyIHRha2VuQWxpZ25tZW50cyA9IEFMSUdOTUVOVFMuZmlsdGVyKGZ1bmN0aW9uKGFsaWdubWVudCkge1xuXG4gICAgcmV0dXJuIGZyZWVBbGlnbm1lbnRzLmluZGV4T2YoYWxpZ25tZW50KSA9PT0gLTE7XG4gIH0pO1xuXG4gIHJldHVybiB0YWtlbkFsaWdubWVudHM7XG5cbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxpZ25tZW50cyB3aGljaCBhcmUgdGFrZW4gYnkgcmVsYXRlZCBjb25uZWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0RpcmVjdGlvblRSQkxbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0VGFrZW5Db25uZWN0aW9uQWxpZ25tZW50cyhlbGVtZW50KSB7XG5cbiAgdmFyIGVsZW1lbnRNaWQgPSBnZXRNaWQoZWxlbWVudCk7XG5cbiAgdmFyIHRha2VuQWxpZ25tZW50cyA9IFtdLmNvbmNhdChcbiAgICBlbGVtZW50LmluY29taW5nLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gYy53YXlwb2ludHNbYy53YXlwb2ludHMubGVuZ3RoIC0gMiBdO1xuICAgIH0pLFxuICAgIGVsZW1lbnQub3V0Z29pbmcubWFwKGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBjLndheXBvaW50c1sxXTtcbiAgICB9KVxuICApLm1hcChmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBnZXRBcHByb3hpbWF0ZU9yaWVudGF0aW9uKGVsZW1lbnRNaWQsIHBvaW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRha2VuQWxpZ25tZW50cztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG9wdGltYWwgbGFiZWwgcG9zaXRpb24gYXJvdW5kIGFuIGVsZW1lbnRcbiAqIG9yIGB1bmRlZmluZWRgLCBpZiBub25lIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7RGlyZWN0aW9uVFJCTHx1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGltYWxQb3NpdGlvbihlbGVtZW50KSB7XG5cbiAgdmFyIGxhYmVsTWlkID0gZ2V0TWlkKGVsZW1lbnQubGFiZWwpO1xuXG4gIHZhciBlbGVtZW50TWlkID0gZ2V0TWlkKGVsZW1lbnQpO1xuXG4gIHZhciBsYWJlbE9yaWVudGF0aW9uID0gZ2V0QXBwcm94aW1hdGVPcmllbnRhdGlvbihlbGVtZW50TWlkLCBsYWJlbE1pZCk7XG5cbiAgaWYgKCFpc0FsaWduZWQobGFiZWxPcmllbnRhdGlvbikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFrZW5BbGlnbm1lbnRzID0gZ2V0VGFrZW5Db25uZWN0aW9uQWxpZ25tZW50cyhlbGVtZW50KTtcblxuICBpZiAoZWxlbWVudC5ob3N0KSB7XG4gICAgdmFyIHRha2VuSG9zdEFsaWdubWVudHMgPSBnZXRUYWtlbkhvc3RBbGlnbm1lbnRzKGVsZW1lbnQpO1xuXG4gICAgdGFrZW5BbGlnbm1lbnRzID0gdGFrZW5BbGlnbm1lbnRzLmNvbmNhdCh0YWtlbkhvc3RBbGlnbm1lbnRzKTtcbiAgfVxuXG4gIHZhciBmcmVlQWxpZ25tZW50cyA9IEFMSUdOTUVOVFMuZmlsdGVyKGZ1bmN0aW9uKGFsaWdubWVudCkge1xuXG4gICAgcmV0dXJuIHRha2VuQWxpZ25tZW50cy5pbmRleE9mKGFsaWdubWVudCkgPT09IC0xO1xuICB9KTtcblxuICAvLyBOT1RISU5HIFRPIERPOyBsYWJlbCBhbHJlYWR5IGFsaWduZWQgYS5PLksuXG4gIGlmIChmcmVlQWxpZ25tZW50cy5pbmRleE9mKGxhYmVsT3JpZW50YXRpb24pICE9PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBmcmVlQWxpZ25tZW50c1swXTtcbn1cblxuZnVuY3Rpb24gZ2V0QXBwcm94aW1hdGVPcmllbnRhdGlvbihwMCwgcDEpIHtcbiAgcmV0dXJuIGdldE9yaWVudGF0aW9uKHAxLCBwMCwgNSk7XG59XG5cbmZ1bmN0aW9uIGlzQWxpZ25lZChvcmllbnRhdGlvbikge1xuICByZXR1cm4gQUxJR05NRU5UUy5pbmRleE9mKG9yaWVudGF0aW9uKSAhPT0gLTE7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AppendBehavior.js":
/*!************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AppendBehavior.js ***!
\************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AppendBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n */\n\nfunction AppendBehavior(eventBus) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n // assign correct shape position unless already set\n\n this.preExecute('shape.append', function(context) {\n\n var source = context.source,\n shape = context.shape;\n\n if (!context.position) {\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:TextAnnotation')) {\n context.position = {\n x: source.x + source.width / 2 + 75,\n y: source.y - 50 - shape.height / 2\n };\n } else {\n context.position = {\n x: source.x + source.width + 80 + shape.width / 2,\n y: source.y + source.height / 2\n };\n }\n }\n }, true);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(AppendBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nAppendBehavior.$inject = [\n 'eventBus'\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BcHBlbmRCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdDOztBQUVLOztBQUU4Qjs7QUFFM0U7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RDs7QUFFZTs7QUFFZixFQUFFLGlGQUFrQjs7QUFFcEI7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxVQUFVLG1EQUFFO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLDREQUFRLGlCQUFpQixpRkFBa0I7O0FBRTNDO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0FwcGVuZEJlaGF2aW9yLmpzP2UyYmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXBwZW5kQmVoYXZpb3IoZXZlbnRCdXMpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLy8gYXNzaWduIGNvcnJlY3Qgc2hhcGUgcG9zaXRpb24gdW5sZXNzIGFscmVhZHkgc2V0XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5hcHBlbmQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgc291cmNlID0gY29udGV4dC5zb3VyY2UsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmICghY29udGV4dC5wb3NpdGlvbikge1xuXG4gICAgICBpZiAoaXMoc2hhcGUsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgICAgY29udGV4dC5wb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiBzb3VyY2UueCArIHNvdXJjZS53aWR0aCAvIDIgKyA3NSxcbiAgICAgICAgICB5OiBzb3VyY2UueSAtIDUwIC0gc2hhcGUuaGVpZ2h0IC8gMlxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5wb3NpdGlvbiA9IHtcbiAgICAgICAgICB4OiBzb3VyY2UueCArIHNvdXJjZS53aWR0aCArIDgwICsgc2hhcGUud2lkdGggLyAyLFxuICAgICAgICAgIHk6IHNvdXJjZS55ICsgc291cmNlLmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG5pbmhlcml0cyhBcHBlbmRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuQXBwZW5kQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJ1xuXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AppendBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AssociationBehavior.js":
/*!*****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AssociationBehavior.js ***!
\*****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AssociationBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @typedef {import('didi').Injector} Injector\r\n * @typedef {import('../Modeling').default} Modeling\r\n */\r\n\r\n/**\r\n * @param {Injector} injector\r\n * @param {Modeling} modeling\r\n */\r\nfunction AssociationBehavior(injector, modeling) {\r\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\r\n\r\n this.postExecute('shape.move', function(context) {\r\n var newParent = context.newParent,\r\n shape = context.shape;\r\n\r\n var associations = (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.filter)(shape.incoming.concat(shape.outgoing), function(connection) {\r\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(connection, 'bpmn:Association');\r\n });\r\n\r\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.forEach)(associations, function(association) {\r\n modeling.moveConnection(association, { x: 0, y: 0 }, newParent);\r\n });\r\n }, true);\r\n}\r\n\r\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(AssociationBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\r\n\r\nAssociationBehavior.$inject = [\r\n 'injector',\r\n 'modeling'\r\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Bc3NvY2lhdGlvbkJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXdDO0FBQ3hDO0FBQzZDO0FBQzdDO0FBQzJFO0FBQzNFO0FBSWtCO0FBQ2xCO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QyxhQUFhLCtCQUErQjtBQUM1QztBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZixrQkFBa0IsaUZBQWtCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0RBQU07QUFDN0IsYUFBYSxtREFBRTtBQUNmLEtBQUs7QUFDTDtBQUNBLElBQUksaURBQU87QUFDWCw2Q0FBNkMsWUFBWTtBQUN6RCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQSw0REFBUSxzQkFBc0IsaUZBQWtCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Bc3NvY2lhdGlvbkJlaGF2aW9yLmpzP2ZhN2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xyXG5cclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZmlsdGVyLFxyXG4gIGZvckVhY2hcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlkaScpLkluamVjdG9yfSBJbmplY3RvclxyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXHJcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBc3NvY2lhdGlvbkJlaGF2aW9yKGluamVjdG9yLCBtb2RlbGluZykge1xyXG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xyXG5cclxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5tb3ZlJywgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIG5ld1BhcmVudCA9IGNvbnRleHQubmV3UGFyZW50LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcclxuXHJcbiAgICB2YXIgYXNzb2NpYXRpb25zID0gZmlsdGVyKHNoYXBlLmluY29taW5nLmNvbmNhdChzaGFwZS5vdXRnb2luZyksIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGlzKGNvbm5lY3Rpb24sICdicG1uOkFzc29jaWF0aW9uJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3JFYWNoKGFzc29jaWF0aW9ucywgZnVuY3Rpb24oYXNzb2NpYXRpb24pIHtcclxuICAgICAgbW9kZWxpbmcubW92ZUNvbm5lY3Rpb24oYXNzb2NpYXRpb24sIHsgeDogMCwgeTogMCB9LCBuZXdQYXJlbnQpO1xyXG4gICAgfSk7XHJcbiAgfSwgdHJ1ZSk7XHJcbn1cclxuXHJcbmluaGVyaXRzKEFzc29jaWF0aW9uQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XHJcblxyXG5Bc3NvY2lhdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXHJcbiAgJ2luamVjdG9yJyxcclxuICAnbW9kZWxpbmcnXHJcbl07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AssociationBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AttachEventBehavior.js":
/*!*****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AttachEventBehavior.js ***!
\*****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AttachEventBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('../../replace/BpmnReplace').default} BpmnReplace\n * @typedef {import('didi').Injector} Injector\n */\n\nvar LOW_PRIORITY = 500;\n\n\n/**\n * Replace intermediate event with boundary event when creating or moving results in attached event.\n *\n * @param {BpmnReplace} bpmnReplace\n * @param {Injector} injector\n */\nfunction AttachEventBehavior(bpmnReplace, injector) {\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n\n this._bpmnReplace = bpmnReplace;\n\n var self = this;\n\n this.postExecuted('elements.create', LOW_PRIORITY, function(context) {\n var elements = context.elements;\n\n elements = elements.filter(function(shape) {\n var host = shape.host;\n\n return shouldReplace(shape, host);\n });\n\n if (elements.length !== 1) {\n return;\n }\n\n elements.map(function(element) {\n return elements.indexOf(element);\n }).forEach(function(index) {\n var host = elements[ index ];\n\n context.elements[ index ] = self._replaceShape(elements[ index ], host);\n });\n }, true);\n\n\n this.preExecute('elements.move', LOW_PRIORITY, function(context) {\n var shapes = context.shapes,\n host = context.newHost;\n\n if (shapes.length !== 1) {\n return;\n }\n\n var shape = shapes[0];\n\n if (shouldReplace(shape, host)) {\n context.shapes = [ self._replaceShape(shape, host) ];\n }\n }, true);\n}\n\nAttachEventBehavior.$inject = [\n 'bpmnReplace',\n 'injector'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(AttachEventBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nAttachEventBehavior.prototype._replaceShape = function(shape, host) {\n var eventDefinition = getEventDefinition(shape);\n\n var boundaryEvent = {\n type: 'bpmn:BoundaryEvent',\n host: host\n };\n\n if (eventDefinition) {\n boundaryEvent.eventDefinitionType = eventDefinition.$type;\n }\n\n return this._bpmnReplace.replaceElement(shape, boundaryEvent, { layoutConnection: false });\n};\n\n\n// helpers //////////\n\nfunction getEventDefinition(element) {\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element),\n eventDefinitions = businessObject.eventDefinitions;\n\n return eventDefinitions && eventDefinitions[0];\n}\n\nfunction shouldReplace(shape, host) {\n return !(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.isLabel)(shape) &&\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.isAny)(shape, [ 'bpmn:IntermediateThrowEvent', 'bpmn:IntermediateCatchEvent' ]) && !!host;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9BdHRhY2hFdmVudEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXdDOztBQUVtQzs7QUFFZjs7QUFFZjs7QUFFSzs7QUFFbEQ7QUFDQSxhQUFhLDZDQUE2QztBQUMxRCxhQUFhLHlCQUF5QjtBQUN0Qzs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2Ysa0JBQWtCLGlGQUFrQjs7QUFFcEM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0REFBUSxzQkFBc0IsaUZBQWtCOztBQUVoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrRUFBa0UseUJBQXlCO0FBQzNGOzs7QUFHQTs7QUFFQTtBQUNBLHVCQUF1QixrRUFBaUI7QUFDeEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFVBQVUsd0RBQU87QUFDakIsSUFBSSxzREFBSztBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvQXR0YWNoRXZlbnRCZWhhdmlvci5qcz8wNjI5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGdldEJ1c2luZXNzT2JqZWN0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuaW1wb3J0IHsgaXNMYWJlbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9yZXBsYWNlL0JwbW5SZXBsYWNlJykuZGVmYXVsdH0gQnBtblJlcGxhY2VcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpZGknKS5JbmplY3Rvcn0gSW5qZWN0b3JcbiAqL1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogUmVwbGFjZSBpbnRlcm1lZGlhdGUgZXZlbnQgd2l0aCBib3VuZGFyeSBldmVudCB3aGVuIGNyZWF0aW5nIG9yIG1vdmluZyByZXN1bHRzIGluIGF0dGFjaGVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7QnBtblJlcGxhY2V9IGJwbW5SZXBsYWNlXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdHRhY2hFdmVudEJlaGF2aW9yKGJwbW5SZXBsYWNlLCBpbmplY3Rvcikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLl9icG1uUmVwbGFjZSA9IGJwbW5SZXBsYWNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMuY3JlYXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIHJldHVybiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KTtcbiAgICB9KTtcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgdmFyIGhvc3QgPSBlbGVtZW50c1sgaW5kZXggXTtcblxuICAgICAgY29udGV4dC5lbGVtZW50c1sgaW5kZXggXSA9IHNlbGYuX3JlcGxhY2VTaGFwZShlbGVtZW50c1sgaW5kZXggXSwgaG9zdCk7XG4gICAgfSk7XG4gIH0sIHRydWUpO1xuXG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBob3N0ID0gY29udGV4dC5uZXdIb3N0O1xuXG4gICAgaWYgKHNoYXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2hhcGUgPSBzaGFwZXNbMF07XG5cbiAgICBpZiAoc2hvdWxkUmVwbGFjZShzaGFwZSwgaG9zdCkpIHtcbiAgICAgIGNvbnRleHQuc2hhcGVzID0gWyBzZWxmLl9yZXBsYWNlU2hhcGUoc2hhcGUsIGhvc3QpIF07XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cblxuQXR0YWNoRXZlbnRCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnYnBtblJlcGxhY2UnLFxuICAnaW5qZWN0b3InXG5dO1xuXG5pbmhlcml0cyhBdHRhY2hFdmVudEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5BdHRhY2hFdmVudEJlaGF2aW9yLnByb3RvdHlwZS5fcmVwbGFjZVNoYXBlID0gZnVuY3Rpb24oc2hhcGUsIGhvc3QpIHtcbiAgdmFyIGV2ZW50RGVmaW5pdGlvbiA9IGdldEV2ZW50RGVmaW5pdGlvbihzaGFwZSk7XG5cbiAgdmFyIGJvdW5kYXJ5RXZlbnQgPSB7XG4gICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgaG9zdDogaG9zdFxuICB9O1xuXG4gIGlmIChldmVudERlZmluaXRpb24pIHtcbiAgICBib3VuZGFyeUV2ZW50LmV2ZW50RGVmaW5pdGlvblR5cGUgPSBldmVudERlZmluaXRpb24uJHR5cGU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYnBtblJlcGxhY2UucmVwbGFjZUVsZW1lbnQoc2hhcGUsIGJvdW5kYXJ5RXZlbnQsIHsgbGF5b3V0Q29ubmVjdGlvbjogZmFsc2UgfSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zO1xuXG4gIHJldHVybiBldmVudERlZmluaXRpb25zICYmIGV2ZW50RGVmaW5pdGlvbnNbMF07XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlcGxhY2Uoc2hhcGUsIGhvc3QpIHtcbiAgcmV0dXJuICFpc0xhYmVsKHNoYXBlKSAmJlxuICAgIGlzQW55KHNoYXBlLCBbICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyBdKSAmJiAhIWhvc3Q7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AttachEventBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/BoundaryEventBehavior.js":
/*!*******************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/BoundaryEventBehavior.js ***!
\*******************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BoundaryEventBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * BPMN specific boundary event behavior.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction BoundaryEventBehavior(eventBus, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n function getBoundaryEvents(element) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.filter)(element.attachers, function(attacher) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(attacher, 'bpmn:BoundaryEvent');\n });\n }\n\n // remove after connecting to event-based gateway\n this.postExecute('connection.create', function(event) {\n var source = event.context.source,\n target = event.context.target,\n boundaryEvents = getBoundaryEvents(target);\n\n if (\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(source, 'bpmn:EventBasedGateway') &&\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:ReceiveTask') &&\n boundaryEvents.length > 0\n ) {\n modeling.removeElements(boundaryEvents);\n }\n\n });\n\n // remove after replacing connected gateway with event-based gateway\n this.postExecute('connection.reconnect', function(event) {\n var oldSource = event.context.oldSource,\n newSource = event.context.newSource;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(oldSource, 'bpmn:Gateway') &&\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newSource, 'bpmn:EventBasedGateway')) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.forEach)(newSource.outgoing, function(connection) {\n var target = connection.target,\n attachedboundaryEvents = getBoundaryEvents(target);\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(target, 'bpmn:ReceiveTask') &&\n attachedboundaryEvents.length > 0) {\n modeling.removeElements(attachedboundaryEvents);\n }\n });\n }\n });\n\n}\n\nBoundaryEventBehavior.$inject = [\n 'eventBus',\n 'modeling'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(BoundaryEventBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Cb3VuZGFyeUV2ZW50QmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBd0M7O0FBRW1DOztBQUU5Qjs7QUFLM0I7O0FBRWxCO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwrQkFBK0I7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQjtBQUNlOztBQUVmLEVBQUUsaUZBQWtCOztBQUVwQjtBQUNBLFdBQVcsZ0RBQU07QUFDakIsYUFBYSxtREFBRTtBQUNmLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxtREFBRTtBQUNSLE1BQU0sbURBQUU7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsbURBQUU7QUFDVixRQUFRLG1EQUFFO0FBQ1YsTUFBTSxpREFBTztBQUNiO0FBQ0E7O0FBRUEsWUFBWSxtREFBRTtBQUNkO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNERBQVEsd0JBQXdCLGlGQUFrQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0JvdW5kYXJ5RXZlbnRCZWhhdmlvci5qcz9iMGZmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBib3VuZGFyeSBldmVudCBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQm91bmRhcnlFdmVudEJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICBmdW5jdGlvbiBnZXRCb3VuZGFyeUV2ZW50cyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZpbHRlcihlbGVtZW50LmF0dGFjaGVycywgZnVuY3Rpb24oYXR0YWNoZXIpIHtcbiAgICAgIHJldHVybiBpcyhhdHRhY2hlciwgJ2JwbW46Qm91bmRhcnlFdmVudCcpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gcmVtb3ZlIGFmdGVyIGNvbm5lY3RpbmcgdG8gZXZlbnQtYmFzZWQgZ2F0ZXdheVxuICB0aGlzLnBvc3RFeGVjdXRlKCdjb25uZWN0aW9uLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHNvdXJjZSA9IGV2ZW50LmNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBldmVudC5jb250ZXh0LnRhcmdldCxcbiAgICAgICAgYm91bmRhcnlFdmVudHMgPSBnZXRCb3VuZGFyeUV2ZW50cyh0YXJnZXQpO1xuXG4gICAgaWYgKFxuICAgICAgaXMoc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpICYmXG4gICAgICBpcyh0YXJnZXQsICdicG1uOlJlY2VpdmVUYXNrJykgJiZcbiAgICAgIGJvdW5kYXJ5RXZlbnRzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKGJvdW5kYXJ5RXZlbnRzKTtcbiAgICB9XG5cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGFmdGVyIHJlcGxhY2luZyBjb25uZWN0ZWQgZ2F0ZXdheSB3aXRoIGV2ZW50LWJhc2VkIGdhdGV3YXlcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBvbGRTb3VyY2UgPSBldmVudC5jb250ZXh0Lm9sZFNvdXJjZSxcbiAgICAgICAgbmV3U291cmNlID0gZXZlbnQuY29udGV4dC5uZXdTb3VyY2U7XG5cbiAgICBpZiAoaXMob2xkU291cmNlLCAnYnBtbjpHYXRld2F5JykgJiZcbiAgICAgICAgaXMobmV3U291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpKSB7XG4gICAgICBmb3JFYWNoKG5ld1NvdXJjZS5vdXRnb2luZywgZnVuY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICAgICAgICBhdHRhY2hlZGJvdW5kYXJ5RXZlbnRzID0gZ2V0Qm91bmRhcnlFdmVudHModGFyZ2V0KTtcblxuICAgICAgICBpZiAoaXModGFyZ2V0LCAnYnBtbjpSZWNlaXZlVGFzaycpICYmXG4gICAgICAgICAgICBhdHRhY2hlZGJvdW5kYXJ5RXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhhdHRhY2hlZGJvdW5kYXJ5RXZlbnRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxufVxuXG5Cb3VuZGFyeUV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuaW5oZXJpdHMoQm91bmRhcnlFdmVudEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/BoundaryEventBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js":
/*!*****************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js ***!
\*****************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CompensateBoundaryEventBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../lib/features/modeling/Modeling').default} Modeling\n */\n\n/**\n * Behavior ensuring that only a single compensation activity is connected to a\n * compensation boundary event when connecting, reconnecting or replacing shapes.\n *\n * @param {import('diagram-js/lib/core/EventBus').default} eventBus\n * @param {import('../Modeling').default} modeling\n * @param {import('../../rules/BpmnRules').default} bpmnRules\n */\nfunction CompensateBoundaryEventBehavior(eventBus, modeling, bpmnRules) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this.preExecute('shape.replace', handleReplacement, true);\n this.postExecuted('shape.replace', handleReplacementPostExecuted, true);\n this.preExecute('connection.create', handleNewConnection, true);\n this.postExecuted('connection.delete', handleConnectionRemoval, true);\n this.postExecuted('connection.reconnect', handleReconnection, true);\n this.postExecuted('element.updateProperties', handlePropertiesUpdate, true);\n\n /**\n * Given a connection from boundary event is removed, remove the `isForCompensation` property.\n */\n function handleConnectionRemoval(context) {\n const source = context.source,\n target = context.target;\n\n if (isCompensationBoundaryEvent(source) && isForCompensation(target)) {\n removeIsForCompensationProperty(target);\n }\n }\n\n /**\n * Add `isForCompensation` property and make sure only a single compensation activity is connected.\n */\n function handleNewConnection(context) {\n const connection = context.connection,\n source = context.source,\n target = context.target;\n\n if (isCompensationBoundaryEvent(source) && isForCompensationAllowed(target)) {\n addIsForCompensationProperty(target);\n removeExistingAssociations(source, [ connection ]);\n }\n }\n\n function handleReconnection(context) {\n const newTarget = context.newTarget,\n oldSource = context.oldSource,\n oldTarget = context.oldTarget;\n\n // target changes\n if (oldTarget !== newTarget) {\n const source = oldSource;\n\n // oldTarget perspective\n if (isForCompensation(oldTarget)) {\n removeIsForCompensationProperty(oldTarget);\n }\n\n // newTarget perspective\n if (isCompensationBoundaryEvent(source) && isForCompensationAllowed(newTarget)) {\n addIsForCompensationProperty(newTarget);\n }\n }\n }\n\n function handlePropertiesUpdate(context) {\n const { element } = context;\n\n if (isForCompensation(element)) {\n removeDisallowedConnections(element);\n removeAttachments(element);\n } else if (isForCompensationAllowed(element)) {\n removeIncomingCompensationAssociations(element);\n }\n }\n\n /**\n * When replacing a boundary event, make sure the compensation activity is connected,\n * and remove the potential candidates for connection replacement to have a single compensation activity.\n */\n function handleReplacement(context) {\n const {\n newData,\n oldShape\n } = context;\n\n // from compensate boundary event\n if (isCompensationBoundaryEvent(context.oldShape) &&\n newData.eventDefinitionType !== 'bpmn:CompensateEventDefinition' ||\n newData.type !== 'bpmn:BoundaryEvent'\n ) {\n const targetConnection = oldShape.outgoing.find(\n ({ target }) => isForCompensation(target)\n );\n\n if (targetConnection && targetConnection.target) {\n context._connectionTarget = targetConnection.target;\n }\n }\n\n // to compensate boundary event\n else if (\n !isCompensationBoundaryEvent(context.oldShape) &&\n newData.eventDefinitionType === 'bpmn:CompensateEventDefinition' &&\n newData.type === 'bpmn:BoundaryEvent'\n ) {\n const targetConnection = oldShape.outgoing.find(\n ({ target }) => isForCompensationAllowed(target)\n );\n\n if (targetConnection && targetConnection.target) {\n context._connectionTarget = targetConnection.target;\n }\n\n removeOutgoingSequenceFlows(oldShape);\n }\n }\n\n function handleReplacementPostExecuted(context) {\n const { _connectionTarget: target, newShape } = context;\n\n if (target) {\n modeling.connect(newShape, target);\n }\n }\n\n function addIsForCompensationProperty(target) {\n modeling.updateProperties(target, { isForCompensation: true });\n }\n\n function removeIsForCompensationProperty(target) {\n modeling.updateProperties(target, { isForCompensation: undefined });\n }\n\n function removeDisallowedConnections(element) {\n\n for (const connection of element.incoming) {\n if (!bpmnRules.canConnect(connection.source, element)) {\n modeling.removeConnection(connection);\n }\n }\n\n for (const connection of element.outgoing) {\n if (!bpmnRules.canConnect(element, connection.target)) {\n modeling.removeConnection(connection);\n }\n }\n }\n\n function removeExistingAssociations(boundaryEvent, ignoredAssociations) {\n const associations = boundaryEvent.outgoing.filter(connection => (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(connection, 'bpmn:Association'));\n const associationsToRemove = associations.filter(association => {\n return isForCompensation(association.target) && !ignoredAssociations.includes(association);\n });\n\n // remove existing associations\n associationsToRemove.forEach(association => modeling.removeConnection(association));\n }\n\n function removeAttachments(element) {\n const attachments = element.attachers.slice();\n\n if (!attachments.length) {\n return;\n }\n\n modeling.removeElements(attachments);\n }\n\n function removeIncomingCompensationAssociations(element) {\n const compensationAssociations = element.incoming.filter(\n connection => isCompensationBoundaryEvent(connection.source)\n );\n\n modeling.removeElements(compensationAssociations);\n }\n\n function removeOutgoingSequenceFlows(element) {\n const sequenceFlows = element.outgoing.filter(\n connection => (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(connection, 'bpmn:SequenceFlow')\n );\n\n modeling.removeElements(sequenceFlows);\n }\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(CompensateBoundaryEventBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nCompensateBoundaryEventBehavior.$inject = [\n 'eventBus',\n 'modeling',\n 'bpmnRules'\n];\n\n// helpers //////////\n\nfunction isForCompensation(element) {\n const bo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\n return bo && bo.get('isForCompensation');\n}\n\nfunction isCompensationBoundaryEvent(element) {\n return element && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:BoundaryEvent') &&\n (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.hasEventDefinition)(element, 'bpmn:CompensateEventDefinition');\n}\n\nfunction isForCompensationAllowed(element) {\n return element && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:Activity') && !(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isEventSubProcess)(element);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Db21wZW5zYXRlQm91bmRhcnlFdmVudEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXdDOztBQUV3Qjs7QUFFVztBQUNFOztBQUU3RTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEscURBQXFEO0FBQ2xFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnREFBZ0Q7QUFDM0QsV0FBVywrQkFBK0I7QUFDMUMsV0FBVyx5Q0FBeUM7QUFDcEQ7QUFDZTs7QUFFZixFQUFFLGlGQUFrQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLFVBQVU7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLHNDQUFzQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0MseUJBQXlCO0FBQ2pFOztBQUVBO0FBQ0Esd0NBQXdDLDhCQUE4QjtBQUN0RTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFFQUFxRSxtREFBRTtBQUN2RTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsbURBQUU7QUFDdEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDREQUFRLGtDQUFrQyxpRkFBa0I7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxhQUFhLGtFQUFpQjtBQUM5QjtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLG1EQUFFO0FBQ3RCLElBQUksZ0VBQWtCO0FBQ3RCOztBQUVBO0FBQ0Esb0JBQW9CLG1EQUFFLCtCQUErQiwrREFBaUI7QUFDdEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Db21wZW5zYXRlQm91bmRhcnlFdmVudEJlaGF2aW9yLmpzP2VhYmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCwgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgaGFzRXZlbnREZWZpbml0aW9uLCBpc0V2ZW50U3ViUHJvY2VzcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKi9cblxuLyoqXG4gKiBCZWhhdmlvciBlbnN1cmluZyB0aGF0IG9ubHkgYSBzaW5nbGUgY29tcGVuc2F0aW9uIGFjdGl2aXR5IGlzIGNvbm5lY3RlZCB0byBhXG4gKiBjb21wZW5zYXRpb24gYm91bmRhcnkgZXZlbnQgd2hlbiBjb25uZWN0aW5nLCByZWNvbm5lY3Rpbmcgb3IgcmVwbGFjaW5nIHNoYXBlcy5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBtb2RlbGluZ1xuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3J1bGVzL0JwbW5SdWxlcycpLmRlZmF1bHR9IGJwbW5SdWxlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb21wZW5zYXRlQm91bmRhcnlFdmVudEJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZywgYnBtblJ1bGVzKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUucmVwbGFjZScsIGhhbmRsZVJlcGxhY2VtZW50LCB0cnVlKTtcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBoYW5kbGVSZXBsYWNlbWVudFBvc3RFeGVjdXRlZCwgdHJ1ZSk7XG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5jcmVhdGUnLCBoYW5kbGVOZXdDb25uZWN0aW9uLCB0cnVlKTtcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ2Nvbm5lY3Rpb24uZGVsZXRlJywgaGFuZGxlQ29ubmVjdGlvblJlbW92YWwsIHRydWUpO1xuICB0aGlzLnBvc3RFeGVjdXRlZCgnY29ubmVjdGlvbi5yZWNvbm5lY3QnLCBoYW5kbGVSZWNvbm5lY3Rpb24sIHRydWUpO1xuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgaGFuZGxlUHJvcGVydGllc1VwZGF0ZSwgdHJ1ZSk7XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgY29ubmVjdGlvbiBmcm9tIGJvdW5kYXJ5IGV2ZW50IGlzIHJlbW92ZWQsIHJlbW92ZSB0aGUgYGlzRm9yQ29tcGVuc2F0aW9uYCBwcm9wZXJ0eS5cbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbm5lY3Rpb25SZW1vdmFsKGNvbnRleHQpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIGlmIChpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5RXZlbnQoc291cmNlKSAmJiBpc0ZvckNvbXBlbnNhdGlvbih0YXJnZXQpKSB7XG4gICAgICByZW1vdmVJc0ZvckNvbXBlbnNhdGlvblByb3BlcnR5KHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBgaXNGb3JDb21wZW5zYXRpb25gIHByb3BlcnR5IGFuZCBtYWtlIHN1cmUgb25seSBhIHNpbmdsZSBjb21wZW5zYXRpb24gYWN0aXZpdHkgaXMgY29ubmVjdGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlTmV3Q29ubmVjdGlvbihjb250ZXh0KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgICBzb3VyY2UgPSBjb250ZXh0LnNvdXJjZSxcbiAgICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldDtcblxuICAgIGlmIChpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5RXZlbnQoc291cmNlKSAmJiBpc0ZvckNvbXBlbnNhdGlvbkFsbG93ZWQodGFyZ2V0KSkge1xuICAgICAgYWRkSXNGb3JDb21wZW5zYXRpb25Qcm9wZXJ0eSh0YXJnZXQpO1xuICAgICAgcmVtb3ZlRXhpc3RpbmdBc3NvY2lhdGlvbnMoc291cmNlLCBbIGNvbm5lY3Rpb24gXSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUmVjb25uZWN0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBuZXdUYXJnZXQgPSBjb250ZXh0Lm5ld1RhcmdldCxcbiAgICAgICAgICBvbGRTb3VyY2UgPSBjb250ZXh0Lm9sZFNvdXJjZSxcbiAgICAgICAgICBvbGRUYXJnZXQgPSBjb250ZXh0Lm9sZFRhcmdldDtcblxuICAgIC8vIHRhcmdldCBjaGFuZ2VzXG4gICAgaWYgKG9sZFRhcmdldCAhPT0gbmV3VGFyZ2V0KSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBvbGRTb3VyY2U7XG5cbiAgICAgIC8vIG9sZFRhcmdldCBwZXJzcGVjdGl2ZVxuICAgICAgaWYgKGlzRm9yQ29tcGVuc2F0aW9uKG9sZFRhcmdldCkpIHtcbiAgICAgICAgcmVtb3ZlSXNGb3JDb21wZW5zYXRpb25Qcm9wZXJ0eShvbGRUYXJnZXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBuZXdUYXJnZXQgcGVyc3BlY3RpdmVcbiAgICAgIGlmIChpc0NvbXBlbnNhdGlvbkJvdW5kYXJ5RXZlbnQoc291cmNlKSAmJiBpc0ZvckNvbXBlbnNhdGlvbkFsbG93ZWQobmV3VGFyZ2V0KSkge1xuICAgICAgICBhZGRJc0ZvckNvbXBlbnNhdGlvblByb3BlcnR5KG5ld1RhcmdldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUHJvcGVydGllc1VwZGF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgeyBlbGVtZW50IH0gPSBjb250ZXh0O1xuXG4gICAgaWYgKGlzRm9yQ29tcGVuc2F0aW9uKGVsZW1lbnQpKSB7XG4gICAgICByZW1vdmVEaXNhbGxvd2VkQ29ubmVjdGlvbnMoZWxlbWVudCk7XG4gICAgICByZW1vdmVBdHRhY2htZW50cyhlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGlzRm9yQ29tcGVuc2F0aW9uQWxsb3dlZChlbGVtZW50KSkge1xuICAgICAgcmVtb3ZlSW5jb21pbmdDb21wZW5zYXRpb25Bc3NvY2lhdGlvbnMoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gcmVwbGFjaW5nIGEgYm91bmRhcnkgZXZlbnQsIG1ha2Ugc3VyZSB0aGUgY29tcGVuc2F0aW9uIGFjdGl2aXR5IGlzIGNvbm5lY3RlZCxcbiAgICogYW5kIHJlbW92ZSB0aGUgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIGNvbm5lY3Rpb24gcmVwbGFjZW1lbnQgdG8gaGF2ZSBhIHNpbmdsZSBjb21wZW5zYXRpb24gYWN0aXZpdHkuXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVSZXBsYWNlbWVudChjb250ZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgbmV3RGF0YSxcbiAgICAgIG9sZFNoYXBlXG4gICAgfSA9IGNvbnRleHQ7XG5cbiAgICAvLyBmcm9tIGNvbXBlbnNhdGUgYm91bmRhcnkgZXZlbnRcbiAgICBpZiAoaXNDb21wZW5zYXRpb25Cb3VuZGFyeUV2ZW50KGNvbnRleHQub2xkU2hhcGUpICYmXG4gICAgICBuZXdEYXRhLmV2ZW50RGVmaW5pdGlvblR5cGUgIT09ICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nIHx8XG4gICAgICBuZXdEYXRhLnR5cGUgIT09ICdicG1uOkJvdW5kYXJ5RXZlbnQnXG4gICAgKSB7XG4gICAgICBjb25zdCB0YXJnZXRDb25uZWN0aW9uID0gb2xkU2hhcGUub3V0Z29pbmcuZmluZChcbiAgICAgICAgKHsgdGFyZ2V0IH0pID0+IGlzRm9yQ29tcGVuc2F0aW9uKHRhcmdldClcbiAgICAgICk7XG5cbiAgICAgIGlmICh0YXJnZXRDb25uZWN0aW9uICYmIHRhcmdldENvbm5lY3Rpb24udGFyZ2V0KSB7XG4gICAgICAgIGNvbnRleHQuX2Nvbm5lY3Rpb25UYXJnZXQgPSB0YXJnZXRDb25uZWN0aW9uLnRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0byBjb21wZW5zYXRlIGJvdW5kYXJ5IGV2ZW50XG4gICAgZWxzZSBpZiAoXG4gICAgICAhaXNDb21wZW5zYXRpb25Cb3VuZGFyeUV2ZW50KGNvbnRleHQub2xkU2hhcGUpICYmXG4gICAgICBuZXdEYXRhLmV2ZW50RGVmaW5pdGlvblR5cGUgPT09ICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nICYmXG4gICAgICBuZXdEYXRhLnR5cGUgPT09ICdicG1uOkJvdW5kYXJ5RXZlbnQnXG4gICAgKSB7XG4gICAgICBjb25zdCB0YXJnZXRDb25uZWN0aW9uID0gb2xkU2hhcGUub3V0Z29pbmcuZmluZChcbiAgICAgICAgKHsgdGFyZ2V0IH0pID0+IGlzRm9yQ29tcGVuc2F0aW9uQWxsb3dlZCh0YXJnZXQpXG4gICAgICApO1xuXG4gICAgICBpZiAodGFyZ2V0Q29ubmVjdGlvbiAmJiB0YXJnZXRDb25uZWN0aW9uLnRhcmdldCkge1xuICAgICAgICBjb250ZXh0Ll9jb25uZWN0aW9uVGFyZ2V0ID0gdGFyZ2V0Q29ubmVjdGlvbi50YXJnZXQ7XG4gICAgICB9XG5cbiAgICAgIHJlbW92ZU91dGdvaW5nU2VxdWVuY2VGbG93cyhvbGRTaGFwZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUmVwbGFjZW1lbnRQb3N0RXhlY3V0ZWQoY29udGV4dCkge1xuICAgIGNvbnN0IHsgX2Nvbm5lY3Rpb25UYXJnZXQ6IHRhcmdldCwgbmV3U2hhcGUgfSA9IGNvbnRleHQ7XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBtb2RlbGluZy5jb25uZWN0KG5ld1NoYXBlLCB0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZElzRm9yQ29tcGVuc2F0aW9uUHJvcGVydHkodGFyZ2V0KSB7XG4gICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyh0YXJnZXQsIHsgaXNGb3JDb21wZW5zYXRpb246IHRydWUgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVJc0ZvckNvbXBlbnNhdGlvblByb3BlcnR5KHRhcmdldCkge1xuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXModGFyZ2V0LCB7IGlzRm9yQ29tcGVuc2F0aW9uOiB1bmRlZmluZWQgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVEaXNhbGxvd2VkQ29ubmVjdGlvbnMoZWxlbWVudCkge1xuXG4gICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIGVsZW1lbnQuaW5jb21pbmcpIHtcbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3QoY29ubmVjdGlvbi5zb3VyY2UsIGVsZW1lbnQpKSB7XG4gICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIGVsZW1lbnQub3V0Z29pbmcpIHtcbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3QoZWxlbWVudCwgY29ubmVjdGlvbi50YXJnZXQpKSB7XG4gICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRXhpc3RpbmdBc3NvY2lhdGlvbnMoYm91bmRhcnlFdmVudCwgaWdub3JlZEFzc29jaWF0aW9ucykge1xuICAgIGNvbnN0IGFzc29jaWF0aW9ucyA9IGJvdW5kYXJ5RXZlbnQub3V0Z29pbmcuZmlsdGVyKGNvbm5lY3Rpb24gPT4gaXMoY29ubmVjdGlvbiwgJ2JwbW46QXNzb2NpYXRpb24nKSk7XG4gICAgY29uc3QgYXNzb2NpYXRpb25zVG9SZW1vdmUgPSBhc3NvY2lhdGlvbnMuZmlsdGVyKGFzc29jaWF0aW9uID0+IHtcbiAgICAgIHJldHVybiBpc0ZvckNvbXBlbnNhdGlvbihhc3NvY2lhdGlvbi50YXJnZXQpICYmICFpZ25vcmVkQXNzb2NpYXRpb25zLmluY2x1ZGVzKGFzc29jaWF0aW9uKTtcbiAgICB9KTtcblxuICAgIC8vIHJlbW92ZSBleGlzdGluZyBhc3NvY2lhdGlvbnNcbiAgICBhc3NvY2lhdGlvbnNUb1JlbW92ZS5mb3JFYWNoKGFzc29jaWF0aW9uID0+IG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oYXNzb2NpYXRpb24pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUF0dGFjaG1lbnRzKGVsZW1lbnQpIHtcbiAgICBjb25zdCBhdHRhY2htZW50cyA9IGVsZW1lbnQuYXR0YWNoZXJzLnNsaWNlKCk7XG5cbiAgICBpZiAoIWF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKGF0dGFjaG1lbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUluY29taW5nQ29tcGVuc2F0aW9uQXNzb2NpYXRpb25zKGVsZW1lbnQpIHtcbiAgICBjb25zdCBjb21wZW5zYXRpb25Bc3NvY2lhdGlvbnMgPSBlbGVtZW50LmluY29taW5nLmZpbHRlcihcbiAgICAgIGNvbm5lY3Rpb24gPT4gaXNDb21wZW5zYXRpb25Cb3VuZGFyeUV2ZW50KGNvbm5lY3Rpb24uc291cmNlKVxuICAgICk7XG5cbiAgICBtb2RlbGluZy5yZW1vdmVFbGVtZW50cyhjb21wZW5zYXRpb25Bc3NvY2lhdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlT3V0Z29pbmdTZXF1ZW5jZUZsb3dzKGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZXF1ZW5jZUZsb3dzID0gZWxlbWVudC5vdXRnb2luZy5maWx0ZXIoXG4gICAgICBjb25uZWN0aW9uID0+IGlzKGNvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpXG4gICAgKTtcblxuICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKHNlcXVlbmNlRmxvd3MpO1xuICB9XG59XG5cbmluaGVyaXRzKENvbXBlbnNhdGVCb3VuZGFyeUV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkNvbXBlbnNhdGVCb3VuZGFyeUV2ZW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ2JwbW5SdWxlcydcbl07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc0ZvckNvbXBlbnNhdGlvbihlbGVtZW50KSB7XG4gIGNvbnN0IGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIHJldHVybiBibyAmJiBiby5nZXQoJ2lzRm9yQ29tcGVuc2F0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcGVuc2F0aW9uQm91bmRhcnlFdmVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ICYmIGlzKGVsZW1lbnQsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzRm9yQ29tcGVuc2F0aW9uQWxsb3dlZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ICYmIGlzKGVsZW1lbnQsICdicG1uOkFjdGl2aXR5JykgJiYgIWlzRXZlbnRTdWJQcm9jZXNzKGVsZW1lbnQpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateBehavior.js":
/*!************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateBehavior.js ***!
\************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CreateBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/ModelingUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('didi').Injector} Injector\n */\n\n/**\n * @param {Injector} injector\n */\nfunction CreateBehavior(injector) {\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n\n this.preExecute('shape.create', 1500, function(event) {\n var context = event.context,\n parent = context.parent,\n shape = context.shape;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(parent, 'bpmn:Lane') && !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Lane')) {\n context.parent = (0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_2__.getParent)(parent, 'bpmn:Participant');\n }\n });\n\n}\n\n\nCreateBehavior.$inject = [ 'injector' ];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(CreateBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9DcmVhdGVCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3Qzs7QUFFSzs7QUFFOEI7O0FBRTFCOztBQUVqRDtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDOztBQUVBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZixrQkFBa0IsaUZBQWtCOztBQUVwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFLDBCQUEwQixtREFBRTtBQUN0Qyx1QkFBdUIsNkRBQVM7QUFDaEM7QUFDQSxHQUFHOztBQUVIOzs7QUFHQTs7QUFFQSw0REFBUSxpQkFBaUIsaUZBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvQ3JlYXRlQmVoYXZpb3IuanM/Y2M0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgZ2V0UGFyZW50IH0gZnJvbSAnLi4vdXRpbC9Nb2RlbGluZ1V0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpZGknKS5JbmplY3Rvcn0gSW5qZWN0b3JcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENyZWF0ZUJlaGF2aW9yKGluamVjdG9yKSB7XG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgMTUwMCwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoaXMocGFyZW50LCAnYnBtbjpMYW5lJykgJiYgIWlzKHNoYXBlLCAnYnBtbjpMYW5lJykpIHtcbiAgICAgIGNvbnRleHQucGFyZW50ID0gZ2V0UGFyZW50KHBhcmVudCwgJ2JwbW46UGFydGljaXBhbnQnKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cblxuQ3JlYXRlQmVoYXZpb3IuJGluamVjdCA9IFsgJ2luamVjdG9yJyBdO1xuXG5pbmhlcml0cyhDcmVhdGVCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateDataObjectBehavior.js":
/*!**********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateDataObjectBehavior.js ***!
\**********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CreateDataObjectBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../BpmnFactory').default} BpmnFactory\n */\n\n/**\n * BPMN specific create data object behavior.\n *\n * @param {EventBus} eventBus\n * @param {BpmnFactory} bpmnFactory\n */\nfunction CreateDataObjectBehavior(eventBus, bpmnFactory) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this.preExecute('shape.create', function(event) {\n\n var context = event.context,\n shape = context.shape;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:DataObjectReference') && shape.type !== 'label') {\n\n // create a DataObject every time a DataObjectReference is created\n var dataObject = bpmnFactory.create('bpmn:DataObject');\n\n // set the reference to the DataObject\n shape.businessObject.dataObjectRef = dataObject;\n }\n });\n\n}\n\nCreateDataObjectBehavior.$inject = [\n 'eventBus',\n 'bpmnFactory'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(CreateDataObjectBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9DcmVhdGVEYXRhT2JqZWN0QmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF3Qzs7QUFFbUM7O0FBRTlCOztBQUU3QztBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsa0NBQWtDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLGFBQWE7QUFDeEI7QUFDZTs7QUFFZixFQUFFLGlGQUFrQjs7QUFFcEI7O0FBRUE7QUFDQTs7QUFFQSxRQUFRLG1EQUFFOztBQUVWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0REFBUSwyQkFBMkIsaUZBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yLmpzPzUxNzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9CcG1uRmFjdG9yeScpLmRlZmF1bHR9IEJwbW5GYWN0b3J5XG4gKi9cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIGNyZWF0ZSBkYXRhIG9iamVjdCBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yKGV2ZW50QnVzLCBicG1uRmFjdG9yeSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YU9iamVjdFJlZmVyZW5jZScpICYmIHNoYXBlLnR5cGUgIT09ICdsYWJlbCcpIHtcblxuICAgICAgLy8gY3JlYXRlIGEgRGF0YU9iamVjdCBldmVyeSB0aW1lIGEgRGF0YU9iamVjdFJlZmVyZW5jZSBpcyBjcmVhdGVkXG4gICAgICB2YXIgZGF0YU9iamVjdCA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpEYXRhT2JqZWN0Jyk7XG5cbiAgICAgIC8vIHNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBEYXRhT2JqZWN0XG4gICAgICBzaGFwZS5idXNpbmVzc09iamVjdC5kYXRhT2JqZWN0UmVmID0gZGF0YU9iamVjdDtcbiAgICB9XG4gIH0pO1xuXG59XG5cbkNyZWF0ZURhdGFPYmplY3RCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnYnBtbkZhY3RvcnknXG5dO1xuXG5pbmhlcml0cyhDcmVhdGVEYXRhT2JqZWN0QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateDataObjectBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateParticipantBehavior.js":
/*!***********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateParticipantBehavior.js ***!
\***********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PARTICIPANT_BORDER_WIDTH: () => (/* binding */ PARTICIPANT_BORDER_WIDTH),\n/* harmony export */ \"default\": () => (/* binding */ CreateParticipantBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n */\n\nvar HORIZONTAL_PARTICIPANT_PADDING = 20,\n VERTICAL_PARTICIPANT_PADDING = 20;\n\nvar PARTICIPANT_BORDER_WIDTH = 30;\n\nvar HIGH_PRIORITY = 2000;\n\n\n/**\n * BPMN-specific behavior for creating participants.\n *\n * @param {Canvas} canvas\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction CreateParticipantBehavior(canvas, eventBus, modeling) {\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n // fit participant\n eventBus.on([\n 'create.start',\n 'shape.move.start'\n ], HIGH_PRIORITY, function(event) {\n var context = event.context,\n shape = context.shape,\n rootElement = canvas.getRootElement();\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Participant') ||\n !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(rootElement, 'bpmn:Process') ||\n !rootElement.children.length) {\n return;\n }\n\n // ignore connections, groups and labels\n var children = rootElement.children.filter(function(element) {\n return !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:Group') &&\n !(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_2__.isLabel)(element) &&\n !(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_2__.isConnection)(element);\n });\n\n // ensure for available children to calculate bounds\n if (!children.length) {\n return;\n }\n\n var childrenBBox = (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_3__.getBBox)(children);\n\n var participantBounds = getParticipantBounds(shape, childrenBBox);\n\n // assign width and height\n (0,min_dash__WEBPACK_IMPORTED_MODULE_4__.assign)(shape, participantBounds);\n\n // assign create constraints\n context.createConstraints = getParticipantCreateConstraints(shape, childrenBBox);\n });\n\n // force hovering process when creating first participant\n eventBus.on('create.start', HIGH_PRIORITY, function(event) {\n var context = event.context,\n shape = context.shape,\n rootElement = canvas.getRootElement(),\n rootElementGfx = canvas.getGraphics(rootElement);\n\n function ensureHoveringProcess(event) {\n event.element = rootElement;\n event.gfx = rootElementGfx;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Participant') && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(rootElement, 'bpmn:Process')) {\n eventBus.on('element.hover', HIGH_PRIORITY, ensureHoveringProcess);\n\n eventBus.once('create.cleanup', function() {\n eventBus.off('element.hover', ensureHoveringProcess);\n });\n }\n });\n\n // turn process into collaboration when creating first participant\n function getOrCreateCollaboration() {\n var rootElement = canvas.getRootElement();\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(rootElement, 'bpmn:Collaboration')) {\n return rootElement;\n }\n\n return modeling.makeCollaboration();\n }\n\n // when creating mutliple elements through `elements.create` parent must be set to collaboration\n // and passed to `shape.create` as hint\n this.preExecute('elements.create', HIGH_PRIORITY, function(context) {\n var elements = context.elements,\n parent = context.parent,\n participant = findParticipant(elements),\n hints;\n\n if (participant && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(parent, 'bpmn:Process')) {\n context.parent = getOrCreateCollaboration();\n\n hints = context.hints = context.hints || {};\n\n hints.participant = participant;\n hints.process = parent;\n hints.processRef = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(participant).get('processRef');\n }\n }, true);\n\n // when creating single shape through `shape.create` parent must be set to collaboration\n // unless it was already set through `elements.create`\n this.preExecute('shape.create', function(context) {\n var parent = context.parent,\n shape = context.shape;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Participant') && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(parent, 'bpmn:Process')) {\n context.parent = getOrCreateCollaboration();\n\n context.process = parent;\n context.processRef = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape).get('processRef');\n }\n }, true);\n\n // #execute necessary because #preExecute not called on CommandStack#redo\n this.execute('shape.create', function(context) {\n var hints = context.hints || {},\n process = context.process || hints.process,\n shape = context.shape,\n participant = hints.participant;\n\n // both shape.create and elements.create must be handled\n if (process && (!participant || shape === participant)) {\n\n // monkey-patch process ref\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape).set('processRef', (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(process));\n }\n }, true);\n\n this.revert('shape.create', function(context) {\n var hints = context.hints || {},\n process = context.process || hints.process,\n processRef = context.processRef || hints.processRef,\n shape = context.shape,\n participant = hints.participant;\n\n // both shape.create and elements.create must be handled\n if (process && (!participant || shape === participant)) {\n\n // monkey-patch process ref\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape).set('processRef', processRef);\n }\n }, true);\n\n this.postExecute('shape.create', function(context) {\n var hints = context.hints || {},\n process = context.process || context.hints.process,\n shape = context.shape,\n participant = hints.participant;\n\n if (process) {\n var children = process.children.slice();\n\n // both shape.create and elements.create must be handled\n if (!participant) {\n modeling.moveElements(children, { x: 0, y: 0 }, shape);\n } else if (shape === participant) {\n modeling.moveElements(children, { x: 0, y: 0 }, participant);\n }\n }\n }, true);\n}\n\nCreateParticipantBehavior.$inject = [\n 'canvas',\n 'eventBus',\n 'modeling'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(CreateParticipantBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n// helpers //////////\n\nfunction getParticipantBounds(shape, childrenBBox) {\n childrenBBox = {\n width: childrenBBox.width + HORIZONTAL_PARTICIPANT_PADDING * 2 + PARTICIPANT_BORDER_WIDTH,\n height: childrenBBox.height + VERTICAL_PARTICIPANT_PADDING * 2\n };\n\n var width = Math.max(shape.width, childrenBBox.width),\n height = Math.max(shape.height, childrenBBox.height);\n\n return {\n x: -width / 2,\n y: -height / 2,\n width: width,\n height: height\n };\n}\n\nfunction getParticipantCreateConstraints(shape, childrenBBox) {\n childrenBBox = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_6__.asTRBL)(childrenBBox);\n\n return {\n bottom: childrenBBox.top + shape.height / 2 - VERTICAL_PARTICIPANT_PADDING,\n left: childrenBBox.right - shape.width / 2 + HORIZONTAL_PARTICIPANT_PADDING,\n top: childrenBBox.bottom - shape.height / 2 + VERTICAL_PARTICIPANT_PADDING,\n right: childrenBBox.left + shape.width / 2 - HORIZONTAL_PARTICIPANT_PADDING - PARTICIPANT_BORDER_WIDTH\n };\n}\n\nfunction findParticipant(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_4__.find)(elements, function(element) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:Participant');\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9DcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUF3Qzs7QUFFbUM7O0FBRVg7O0FBRWQ7O0FBRUs7O0FBS3JDOztBQUV3Qzs7QUFFRzs7QUFFN0Q7QUFDQSxhQUFhLDhDQUE4QztBQUMzRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLCtCQUErQjtBQUM1Qzs7QUFFQTtBQUNBOztBQUVPOztBQUVQOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2YsRUFBRSxpRkFBa0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxtREFBRTtBQUNYLE9BQU8sbURBQUU7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsbURBQUU7QUFDaEIsU0FBUyx3REFBTztBQUNoQixTQUFTLDZEQUFZO0FBQ3JCLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLHFFQUFPOztBQUU5Qjs7QUFFQTtBQUNBLElBQUksZ0RBQU07O0FBRVY7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsbURBQUUsK0JBQStCLG1EQUFFO0FBQzNDOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixtREFBRTtBQUN6Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLGtFQUFpQjtBQUMxQztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFLCtCQUErQixtREFBRTtBQUMzQzs7QUFFQTtBQUNBLDJCQUEyQixrRUFBaUI7QUFDNUM7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLGtFQUFpQiwwQkFBMEIsa0VBQWlCO0FBQ2xFO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxrRUFBaUI7QUFDdkI7QUFDQSxHQUFHOztBQUVIO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEMsWUFBWTtBQUN0RCxRQUFRO0FBQ1IsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDREQUFRLDRCQUE0QixpRkFBa0I7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQix3RUFBTTs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLDhDQUFJO0FBQ2IsV0FBVyxtREFBRTtBQUNiLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IuanM/YjRkMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCwgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7IGlzTGFiZWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL0xhYmVsVXRpbCc7XG5cbmltcG9ydCB7IGdldEJCb3ggfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBmaW5kXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgYXNUUkJMIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuXG5pbXBvcnQgeyBpc0Nvbm5lY3Rpb24gfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9DYW52YXMnKS5kZWZhdWx0fSBDYW52YXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbnZhciBIT1JJWk9OVEFMX1BBUlRJQ0lQQU5UX1BBRERJTkcgPSAyMCxcbiAgICBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HID0gMjA7XG5cbmV4cG9ydCB2YXIgUEFSVElDSVBBTlRfQk9SREVSX1dJRFRIID0gMzA7XG5cbnZhciBISUdIX1BSSU9SSVRZID0gMjAwMDtcblxuXG4vKipcbiAqIEJQTU4tc3BlY2lmaWMgYmVoYXZpb3IgZm9yIGNyZWF0aW5nIHBhcnRpY2lwYW50cy5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvcihjYW52YXMsIGV2ZW50QnVzLCBtb2RlbGluZykge1xuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLy8gZml0IHBhcnRpY2lwYW50XG4gIGV2ZW50QnVzLm9uKFtcbiAgICAnY3JlYXRlLnN0YXJ0JyxcbiAgICAnc2hhcGUubW92ZS5zdGFydCdcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKTtcblxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgfHxcbiAgICAgICFpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpIHx8XG4gICAgICAhcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWdub3JlIGNvbm5lY3Rpb25zLCBncm91cHMgYW5kIGxhYmVsc1xuICAgIHZhciBjaGlsZHJlbiA9IHJvb3RFbGVtZW50LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gIWlzKGVsZW1lbnQsICdicG1uOkdyb3VwJykgJiZcbiAgICAgICAgIWlzTGFiZWwoZWxlbWVudCkgJiZcbiAgICAgICAgIWlzQ29ubmVjdGlvbihlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIC8vIGVuc3VyZSBmb3IgYXZhaWxhYmxlIGNoaWxkcmVuIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjaGlsZHJlbkJCb3ggPSBnZXRCQm94KGNoaWxkcmVuKTtcblxuICAgIHZhciBwYXJ0aWNpcGFudEJvdW5kcyA9IGdldFBhcnRpY2lwYW50Qm91bmRzKHNoYXBlLCBjaGlsZHJlbkJCb3gpO1xuXG4gICAgLy8gYXNzaWduIHdpZHRoIGFuZCBoZWlnaHRcbiAgICBhc3NpZ24oc2hhcGUsIHBhcnRpY2lwYW50Qm91bmRzKTtcblxuICAgIC8vIGFzc2lnbiBjcmVhdGUgY29uc3RyYWludHNcbiAgICBjb250ZXh0LmNyZWF0ZUNvbnN0cmFpbnRzID0gZ2V0UGFydGljaXBhbnRDcmVhdGVDb25zdHJhaW50cyhzaGFwZSwgY2hpbGRyZW5CQm94KTtcbiAgfSk7XG5cbiAgLy8gZm9yY2UgaG92ZXJpbmcgcHJvY2VzcyB3aGVuIGNyZWF0aW5nIGZpcnN0IHBhcnRpY2lwYW50XG4gIGV2ZW50QnVzLm9uKCdjcmVhdGUuc3RhcnQnLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpLFxuICAgICAgICByb290RWxlbWVudEdmeCA9IGNhbnZhcy5nZXRHcmFwaGljcyhyb290RWxlbWVudCk7XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVIb3ZlcmluZ1Byb2Nlc3MoZXZlbnQpIHtcbiAgICAgIGV2ZW50LmVsZW1lbnQgPSByb290RWxlbWVudDtcbiAgICAgIGV2ZW50LmdmeCA9IHJvb3RFbGVtZW50R2Z4O1xuICAgIH1cblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSAmJiBpcyhyb290RWxlbWVudCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgICBldmVudEJ1cy5vbignZWxlbWVudC5ob3ZlcicsIEhJR0hfUFJJT1JJVFksIGVuc3VyZUhvdmVyaW5nUHJvY2Vzcyk7XG5cbiAgICAgIGV2ZW50QnVzLm9uY2UoJ2NyZWF0ZS5jbGVhbnVwJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV2ZW50QnVzLm9mZignZWxlbWVudC5ob3ZlcicsIGVuc3VyZUhvdmVyaW5nUHJvY2Vzcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHR1cm4gcHJvY2VzcyBpbnRvIGNvbGxhYm9yYXRpb24gd2hlbiBjcmVhdGluZyBmaXJzdCBwYXJ0aWNpcGFudFxuICBmdW5jdGlvbiBnZXRPckNyZWF0ZUNvbGxhYm9yYXRpb24oKSB7XG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgICBpZiAoaXMocm9vdEVsZW1lbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xuICAgICAgcmV0dXJuIHJvb3RFbGVtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlbGluZy5tYWtlQ29sbGFib3JhdGlvbigpO1xuICB9XG5cbiAgLy8gd2hlbiBjcmVhdGluZyBtdXRsaXBsZSBlbGVtZW50cyB0aHJvdWdoIGBlbGVtZW50cy5jcmVhdGVgIHBhcmVudCBtdXN0IGJlIHNldCB0byBjb2xsYWJvcmF0aW9uXG4gIC8vIGFuZCBwYXNzZWQgdG8gYHNoYXBlLmNyZWF0ZWAgYXMgaGludFxuICB0aGlzLnByZUV4ZWN1dGUoJ2VsZW1lbnRzLmNyZWF0ZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzLFxuICAgICAgICBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgcGFydGljaXBhbnQgPSBmaW5kUGFydGljaXBhbnQoZWxlbWVudHMpLFxuICAgICAgICBoaW50cztcblxuICAgIGlmIChwYXJ0aWNpcGFudCAmJiBpcyhwYXJlbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgY29udGV4dC5wYXJlbnQgPSBnZXRPckNyZWF0ZUNvbGxhYm9yYXRpb24oKTtcblxuICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgICAgaGludHMucGFydGljaXBhbnQgPSBwYXJ0aWNpcGFudDtcbiAgICAgIGhpbnRzLnByb2Nlc3MgPSBwYXJlbnQ7XG4gICAgICBoaW50cy5wcm9jZXNzUmVmID0gZ2V0QnVzaW5lc3NPYmplY3QocGFydGljaXBhbnQpLmdldCgncHJvY2Vzc1JlZicpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgLy8gd2hlbiBjcmVhdGluZyBzaW5nbGUgc2hhcGUgdGhyb3VnaCBgc2hhcGUuY3JlYXRlYCBwYXJlbnQgbXVzdCBiZSBzZXQgdG8gY29sbGFib3JhdGlvblxuICAvLyB1bmxlc3MgaXQgd2FzIGFscmVhZHkgc2V0IHRocm91Z2ggYGVsZW1lbnRzLmNyZWF0ZWBcbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudCA9IGNvbnRleHQucGFyZW50LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgJiYgaXMocGFyZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICAgIGNvbnRleHQucGFyZW50ID0gZ2V0T3JDcmVhdGVDb2xsYWJvcmF0aW9uKCk7XG5cbiAgICAgIGNvbnRleHQucHJvY2VzcyA9IHBhcmVudDtcbiAgICAgIGNvbnRleHQucHJvY2Vzc1JlZiA9IGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKS5nZXQoJ3Byb2Nlc3NSZWYnKTtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIC8vICNleGVjdXRlIG5lY2Vzc2FyeSBiZWNhdXNlICNwcmVFeGVjdXRlIG5vdCBjYWxsZWQgb24gQ29tbWFuZFN0YWNrI3JlZG9cbiAgdGhpcy5leGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fSxcbiAgICAgICAgcHJvY2VzcyA9IGNvbnRleHQucHJvY2VzcyB8fCBoaW50cy5wcm9jZXNzLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHBhcnRpY2lwYW50ID0gaGludHMucGFydGljaXBhbnQ7XG5cbiAgICAvLyBib3RoIHNoYXBlLmNyZWF0ZSBhbmQgZWxlbWVudHMuY3JlYXRlIG11c3QgYmUgaGFuZGxlZFxuICAgIGlmIChwcm9jZXNzICYmICghcGFydGljaXBhbnQgfHwgc2hhcGUgPT09IHBhcnRpY2lwYW50KSkge1xuXG4gICAgICAvLyBtb25rZXktcGF0Y2ggcHJvY2VzcyByZWZcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKS5zZXQoJ3Byb2Nlc3NSZWYnLCBnZXRCdXNpbmVzc09iamVjdChwcm9jZXNzKSk7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICB0aGlzLnJldmVydCgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge30sXG4gICAgICAgIHByb2Nlc3MgPSBjb250ZXh0LnByb2Nlc3MgfHwgaGludHMucHJvY2VzcyxcbiAgICAgICAgcHJvY2Vzc1JlZiA9IGNvbnRleHQucHJvY2Vzc1JlZiB8fCBoaW50cy5wcm9jZXNzUmVmLFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIHBhcnRpY2lwYW50ID0gaGludHMucGFydGljaXBhbnQ7XG5cbiAgICAvLyBib3RoIHNoYXBlLmNyZWF0ZSBhbmQgZWxlbWVudHMuY3JlYXRlIG11c3QgYmUgaGFuZGxlZFxuICAgIGlmIChwcm9jZXNzICYmICghcGFydGljaXBhbnQgfHwgc2hhcGUgPT09IHBhcnRpY2lwYW50KSkge1xuXG4gICAgICAvLyBtb25rZXktcGF0Y2ggcHJvY2VzcyByZWZcbiAgICAgIGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKS5zZXQoJ3Byb2Nlc3NSZWYnLCBwcm9jZXNzUmVmKTtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9LFxuICAgICAgICBwcm9jZXNzID0gY29udGV4dC5wcm9jZXNzIHx8IGNvbnRleHQuaGludHMucHJvY2VzcyxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBwYXJ0aWNpcGFudCA9IGhpbnRzLnBhcnRpY2lwYW50O1xuXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb2Nlc3MuY2hpbGRyZW4uc2xpY2UoKTtcblxuICAgICAgLy8gYm90aCBzaGFwZS5jcmVhdGUgYW5kIGVsZW1lbnRzLmNyZWF0ZSBtdXN0IGJlIGhhbmRsZWRcbiAgICAgIGlmICghcGFydGljaXBhbnQpIHtcbiAgICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKGNoaWxkcmVuLCB7IHg6IDAsIHk6IDAgfSwgc2hhcGUpO1xuICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gcGFydGljaXBhbnQpIHtcbiAgICAgICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKGNoaWxkcmVuLCB7IHg6IDAsIHk6IDAgfSwgcGFydGljaXBhbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5cbkNyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2NhbnZhcycsXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKENyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRQYXJ0aWNpcGFudEJvdW5kcyhzaGFwZSwgY2hpbGRyZW5CQm94KSB7XG4gIGNoaWxkcmVuQkJveCA9IHtcbiAgICB3aWR0aDogY2hpbGRyZW5CQm94LndpZHRoICsgSE9SSVpPTlRBTF9QQVJUSUNJUEFOVF9QQURESU5HICogMiArIFBBUlRJQ0lQQU5UX0JPUkRFUl9XSURUSCxcbiAgICBoZWlnaHQ6IGNoaWxkcmVuQkJveC5oZWlnaHQgKyBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HICogMlxuICB9O1xuXG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KHNoYXBlLndpZHRoLCBjaGlsZHJlbkJCb3gud2lkdGgpLFxuICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoc2hhcGUuaGVpZ2h0LCBjaGlsZHJlbkJCb3guaGVpZ2h0KTtcblxuICByZXR1cm4ge1xuICAgIHg6IC13aWR0aCAvIDIsXG4gICAgeTogLWhlaWdodCAvIDIsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFBhcnRpY2lwYW50Q3JlYXRlQ29uc3RyYWludHMoc2hhcGUsIGNoaWxkcmVuQkJveCkge1xuICBjaGlsZHJlbkJCb3ggPSBhc1RSQkwoY2hpbGRyZW5CQm94KTtcblxuICByZXR1cm4ge1xuICAgIGJvdHRvbTogY2hpbGRyZW5CQm94LnRvcCArIHNoYXBlLmhlaWdodCAvIDIgLSBWRVJUSUNBTF9QQVJUSUNJUEFOVF9QQURESU5HLFxuICAgIGxlZnQ6IGNoaWxkcmVuQkJveC5yaWdodCAtIHNoYXBlLndpZHRoIC8gMiArIEhPUklaT05UQUxfUEFSVElDSVBBTlRfUEFERElORyxcbiAgICB0b3A6IGNoaWxkcmVuQkJveC5ib3R0b20gLSBzaGFwZS5oZWlnaHQgLyAyICsgVkVSVElDQUxfUEFSVElDSVBBTlRfUEFERElORyxcbiAgICByaWdodDogY2hpbGRyZW5CQm94LmxlZnQgKyBzaGFwZS53aWR0aCAvIDIgLSBIT1JJWk9OVEFMX1BBUlRJQ0lQQU5UX1BBRERJTkcgLSBQQVJUSUNJUEFOVF9CT1JERVJfV0lEVEhcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZFBhcnRpY2lwYW50KGVsZW1lbnRzKSB7XG4gIHJldHVybiBmaW5kKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50Jyk7XG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateParticipantBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DataInputAssociationBehavior.js":
/*!**************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DataInputAssociationBehavior.js ***!
\**************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DataInputAssociationBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Collections.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../BpmnFactory').default} BpmnFactory\n */\n\nvar TARGET_REF_PLACEHOLDER_NAME = '__targetRef_placeholder';\n\n\n/**\n * This behavior makes sure we always set a fake\n * DataInputAssociation#targetRef as demanded by the BPMN 2.0\n * XSD schema.\n *\n * The reference is set to a bpmn:Property{ name: '__targetRef_placeholder' }\n * which is created on the fly and cleaned up afterwards if not needed\n * anymore.\n *\n * @param {EventBus} eventBus\n * @param {BpmnFactory} bpmnFactory\n */\nfunction DataInputAssociationBehavior(eventBus, bpmnFactory) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n\n this.executed([\n 'connection.create',\n 'connection.delete',\n 'connection.move',\n 'connection.reconnect'\n ], ifDataInputAssociation(fixTargetRef));\n\n this.reverted([\n 'connection.create',\n 'connection.delete',\n 'connection.move',\n 'connection.reconnect'\n ], ifDataInputAssociation(fixTargetRef));\n\n\n function usesTargetRef(element, targetRef, removedConnection) {\n\n var inputAssociations = element.get('dataInputAssociations');\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.find)(inputAssociations, function(association) {\n return association !== removedConnection &&\n association.targetRef === targetRef;\n });\n }\n\n function getTargetRef(element, create) {\n\n var properties = element.get('properties');\n\n var targetRefProp = (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.find)(properties, function(p) {\n return p.name === TARGET_REF_PLACEHOLDER_NAME;\n });\n\n if (!targetRefProp && create) {\n targetRefProp = bpmnFactory.create('bpmn:Property', {\n name: TARGET_REF_PLACEHOLDER_NAME\n });\n\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_2__.add)(properties, targetRefProp);\n }\n\n return targetRefProp;\n }\n\n function cleanupTargetRef(element, connection) {\n\n var targetRefProp = getTargetRef(element);\n\n if (!targetRefProp) {\n return;\n }\n\n if (!usesTargetRef(element, targetRefProp, connection)) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_2__.remove)(element.get('properties'), targetRefProp);\n }\n }\n\n /**\n * Make sure targetRef is set to a valid property or\n * `null` if the connection is detached.\n *\n * @param {Event} event\n */\n function fixTargetRef(event) {\n\n var context = event.context,\n connection = context.connection,\n connectionBo = connection.businessObject,\n target = connection.target,\n targetBo = target && target.businessObject,\n newTarget = context.newTarget,\n newTargetBo = newTarget && newTarget.businessObject,\n oldTarget = context.oldTarget || context.target,\n oldTargetBo = oldTarget && oldTarget.businessObject;\n\n var dataAssociation = connection.businessObject,\n targetRefProp;\n\n if (oldTargetBo && oldTargetBo !== targetBo) {\n cleanupTargetRef(oldTargetBo, connectionBo);\n }\n\n if (newTargetBo && newTargetBo !== targetBo) {\n cleanupTargetRef(newTargetBo, connectionBo);\n }\n\n if (targetBo) {\n targetRefProp = getTargetRef(targetBo, true);\n dataAssociation.targetRef = targetRefProp;\n } else {\n dataAssociation.targetRef = null;\n }\n }\n}\n\nDataInputAssociationBehavior.$inject = [\n 'eventBus',\n 'bpmnFactory'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(DataInputAssociationBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n\n/**\n * Only call the given function when the event\n * touches a bpmn:DataInputAssociation.\n *\n * @param {Function} fn\n * @return {Function}\n */\nfunction ifDataInputAssociation(fn) {\n\n return function(event) {\n var context = event.context,\n connection = context.connection;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__.is)(connection, 'bpmn:DataInputAssociation')) {\n return fn(event);\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9EYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF3Qzs7QUFFbUM7O0FBS2xDOztBQUl2Qjs7QUFJZTs7QUFFakM7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLGtDQUFrQztBQUMvQzs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxhQUFhO0FBQ3hCO0FBQ2U7O0FBRWYsRUFBRSxpRkFBa0I7OztBQUdwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQSxXQUFXLDhDQUFJO0FBQ2Y7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTs7QUFFQSx3QkFBd0IsOENBQUk7QUFDNUI7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVAsTUFBTSxvRUFBYTtBQUNuQjs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sdUVBQWdCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0REFBUSwrQkFBK0IsaUZBQWtCOzs7QUFHekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFFBQVEsbURBQUU7QUFDVjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IuanM/MDA3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGZpbmRcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9CcG1uRmFjdG9yeScpLmRlZmF1bHR9IEJwbW5GYWN0b3J5XG4gKi9cblxudmFyIFRBUkdFVF9SRUZfUExBQ0VIT0xERVJfTkFNRSA9ICdfX3RhcmdldFJlZl9wbGFjZWhvbGRlcic7XG5cblxuLyoqXG4gKiBUaGlzIGJlaGF2aW9yIG1ha2VzIHN1cmUgd2UgYWx3YXlzIHNldCBhIGZha2VcbiAqIERhdGFJbnB1dEFzc29jaWF0aW9uI3RhcmdldFJlZiBhcyBkZW1hbmRlZCBieSB0aGUgQlBNTiAyLjBcbiAqIFhTRCBzY2hlbWEuXG4gKlxuICogVGhlIHJlZmVyZW5jZSBpcyBzZXQgdG8gYSBicG1uOlByb3BlcnR5eyBuYW1lOiAnX190YXJnZXRSZWZfcGxhY2Vob2xkZXInIH1cbiAqIHdoaWNoIGlzIGNyZWF0ZWQgb24gdGhlIGZseSBhbmQgY2xlYW5lZCB1cCBhZnRlcndhcmRzIGlmIG5vdCBuZWVkZWRcbiAqIGFueW1vcmUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IoZXZlbnRCdXMsIGJwbW5GYWN0b3J5KSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG5cbiAgdGhpcy5leGVjdXRlZChbXG4gICAgJ2Nvbm5lY3Rpb24uY3JlYXRlJyxcbiAgICAnY29ubmVjdGlvbi5kZWxldGUnLFxuICAgICdjb25uZWN0aW9uLm1vdmUnLFxuICAgICdjb25uZWN0aW9uLnJlY29ubmVjdCdcbiAgXSwgaWZEYXRhSW5wdXRBc3NvY2lhdGlvbihmaXhUYXJnZXRSZWYpKTtcblxuICB0aGlzLnJldmVydGVkKFtcbiAgICAnY29ubmVjdGlvbi5jcmVhdGUnLFxuICAgICdjb25uZWN0aW9uLmRlbGV0ZScsXG4gICAgJ2Nvbm5lY3Rpb24ubW92ZScsXG4gICAgJ2Nvbm5lY3Rpb24ucmVjb25uZWN0J1xuICBdLCBpZkRhdGFJbnB1dEFzc29jaWF0aW9uKGZpeFRhcmdldFJlZikpO1xuXG5cbiAgZnVuY3Rpb24gdXNlc1RhcmdldFJlZihlbGVtZW50LCB0YXJnZXRSZWYsIHJlbW92ZWRDb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgaW5wdXRBc3NvY2lhdGlvbnMgPSBlbGVtZW50LmdldCgnZGF0YUlucHV0QXNzb2NpYXRpb25zJyk7XG5cbiAgICByZXR1cm4gZmluZChpbnB1dEFzc29jaWF0aW9ucywgZnVuY3Rpb24oYXNzb2NpYXRpb24pIHtcbiAgICAgIHJldHVybiBhc3NvY2lhdGlvbiAhPT0gcmVtb3ZlZENvbm5lY3Rpb24gJiZcbiAgICAgICAgICAgICBhc3NvY2lhdGlvbi50YXJnZXRSZWYgPT09IHRhcmdldFJlZjtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRhcmdldFJlZihlbGVtZW50LCBjcmVhdGUpIHtcblxuICAgIHZhciBwcm9wZXJ0aWVzID0gZWxlbWVudC5nZXQoJ3Byb3BlcnRpZXMnKTtcblxuICAgIHZhciB0YXJnZXRSZWZQcm9wID0gZmluZChwcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gcC5uYW1lID09PSBUQVJHRVRfUkVGX1BMQUNFSE9MREVSX05BTUU7XG4gICAgfSk7XG5cbiAgICBpZiAoIXRhcmdldFJlZlByb3AgJiYgY3JlYXRlKSB7XG4gICAgICB0YXJnZXRSZWZQcm9wID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOlByb3BlcnR5Jywge1xuICAgICAgICBuYW1lOiBUQVJHRVRfUkVGX1BMQUNFSE9MREVSX05BTUVcbiAgICAgIH0pO1xuXG4gICAgICBjb2xsZWN0aW9uQWRkKHByb3BlcnRpZXMsIHRhcmdldFJlZlByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRSZWZQcm9wO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW51cFRhcmdldFJlZihlbGVtZW50LCBjb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgdGFyZ2V0UmVmUHJvcCA9IGdldFRhcmdldFJlZihlbGVtZW50KTtcblxuICAgIGlmICghdGFyZ2V0UmVmUHJvcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdXNlc1RhcmdldFJlZihlbGVtZW50LCB0YXJnZXRSZWZQcm9wLCBjb25uZWN0aW9uKSkge1xuICAgICAgY29sbGVjdGlvblJlbW92ZShlbGVtZW50LmdldCgncHJvcGVydGllcycpLCB0YXJnZXRSZWZQcm9wKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBzdXJlIHRhcmdldFJlZiBpcyBzZXQgdG8gYSB2YWxpZCBwcm9wZXJ0eSBvclxuICAgKiBgbnVsbGAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZGV0YWNoZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBmdW5jdGlvbiBmaXhUYXJnZXRSZWYoZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgY29ubmVjdGlvbkJvID0gY29ubmVjdGlvbi5idXNpbmVzc09iamVjdCxcbiAgICAgICAgdGFyZ2V0ID0gY29ubmVjdGlvbi50YXJnZXQsXG4gICAgICAgIHRhcmdldEJvID0gdGFyZ2V0ICYmIHRhcmdldC5idXNpbmVzc09iamVjdCxcbiAgICAgICAgbmV3VGFyZ2V0ID0gY29udGV4dC5uZXdUYXJnZXQsXG4gICAgICAgIG5ld1RhcmdldEJvID0gbmV3VGFyZ2V0ICYmIG5ld1RhcmdldC5idXNpbmVzc09iamVjdCxcbiAgICAgICAgb2xkVGFyZ2V0ID0gY29udGV4dC5vbGRUYXJnZXQgfHwgY29udGV4dC50YXJnZXQsXG4gICAgICAgIG9sZFRhcmdldEJvID0gb2xkVGFyZ2V0ICYmIG9sZFRhcmdldC5idXNpbmVzc09iamVjdDtcblxuICAgIHZhciBkYXRhQXNzb2NpYXRpb24gPSBjb25uZWN0aW9uLmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICB0YXJnZXRSZWZQcm9wO1xuXG4gICAgaWYgKG9sZFRhcmdldEJvICYmIG9sZFRhcmdldEJvICE9PSB0YXJnZXRCbykge1xuICAgICAgY2xlYW51cFRhcmdldFJlZihvbGRUYXJnZXRCbywgY29ubmVjdGlvbkJvKTtcbiAgICB9XG5cbiAgICBpZiAobmV3VGFyZ2V0Qm8gJiYgbmV3VGFyZ2V0Qm8gIT09IHRhcmdldEJvKSB7XG4gICAgICBjbGVhbnVwVGFyZ2V0UmVmKG5ld1RhcmdldEJvLCBjb25uZWN0aW9uQm8pO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRCbykge1xuICAgICAgdGFyZ2V0UmVmUHJvcCA9IGdldFRhcmdldFJlZih0YXJnZXRCbywgdHJ1ZSk7XG4gICAgICBkYXRhQXNzb2NpYXRpb24udGFyZ2V0UmVmID0gdGFyZ2V0UmVmUHJvcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YUFzc29jaWF0aW9uLnRhcmdldFJlZiA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbkRhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5GYWN0b3J5J1xuXTtcblxuaW5oZXJpdHMoRGF0YUlucHV0QXNzb2NpYXRpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuXG4vKipcbiAqIE9ubHkgY2FsbCB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2hlbiB0aGUgZXZlbnRcbiAqIHRvdWNoZXMgYSBicG1uOkRhdGFJbnB1dEFzc29jaWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gaWZEYXRhSW5wdXRBc3NvY2lhdGlvbihmbikge1xuXG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpEYXRhSW5wdXRBc3NvY2lhdGlvbicpKSB7XG4gICAgICByZXR1cm4gZm4oZXZlbnQpO1xuICAgIH1cbiAgfTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DataInputAssociationBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DataStoreBehavior.js":
/*!***************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DataStoreBehavior.js ***!
\***************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DataStoreBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _cmd_UpdateSemanticParentHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../cmd/UpdateSemanticParentHandler */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateSemanticParentHandler.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\r\n * @typedef {import('diagram-js/lib/command/CommandStack').default} CommandStack\r\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\r\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\r\n */\r\n\r\n/**\r\n * BPMN specific data store behavior.\r\n *\r\n * @param {Canvas} canvas\r\n * @param {CommandStack} commandStack\r\n * @param {ElementRegistry} elementRegistry\r\n * @param {EventBus} eventBus\r\n */\r\nfunction DataStoreBehavior(\r\n canvas, commandStack, elementRegistry,\r\n eventBus) {\r\n\r\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\r\n\r\n commandStack.registerHandler('dataStore.updateContainment', _cmd_UpdateSemanticParentHandler__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\r\n\r\n function getFirstParticipantWithProcessRef() {\r\n return elementRegistry.filter(function(element) {\r\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element, 'bpmn:Participant') && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element).processRef;\r\n })[0];\r\n }\r\n\r\n function getDataStores(element) {\r\n return element.children.filter(function(child) {\r\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(child, 'bpmn:DataStoreReference') && !child.labelTarget;\r\n });\r\n }\r\n\r\n function updateDataStoreParent(dataStore, newDataStoreParent) {\r\n var dataStoreBo = dataStore.businessObject || dataStore;\r\n\r\n newDataStoreParent = newDataStoreParent || getFirstParticipantWithProcessRef();\r\n\r\n if (newDataStoreParent) {\r\n var newDataStoreParentBo = newDataStoreParent.businessObject || newDataStoreParent;\r\n\r\n commandStack.execute('dataStore.updateContainment', {\r\n dataStoreBo: dataStoreBo,\r\n dataStoreDi: (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(dataStore),\r\n newSemanticParent: newDataStoreParentBo.processRef || newDataStoreParentBo,\r\n newDiParent: (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(newDataStoreParent)\r\n });\r\n }\r\n }\r\n\r\n\r\n // disable auto-resize for data stores\r\n this.preExecute('shape.create', function(event) {\r\n\r\n var context = event.context,\r\n shape = context.shape;\r\n\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:DataStoreReference') &&\r\n shape.type !== 'label') {\r\n\r\n if (!context.hints) {\r\n context.hints = {};\r\n }\r\n\r\n // prevent auto resizing\r\n context.hints.autoResize = false;\r\n }\r\n });\r\n\r\n\r\n // disable auto-resize for data stores\r\n this.preExecute('elements.move', function(event) {\r\n var context = event.context,\r\n shapes = context.shapes;\r\n\r\n var dataStoreReferences = shapes.filter(function(shape) {\r\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:DataStoreReference');\r\n });\r\n\r\n if (dataStoreReferences.length) {\r\n if (!context.hints) {\r\n context.hints = {};\r\n }\r\n\r\n // prevent auto resizing for data store references\r\n context.hints.autoResize = shapes.filter(function(shape) {\r\n return !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:DataStoreReference');\r\n });\r\n }\r\n });\r\n\r\n\r\n // update parent on data store created\r\n this.postExecute('shape.create', function(event) {\r\n var context = event.context,\r\n shape = context.shape,\r\n parent = shape.parent;\r\n\r\n\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:DataStoreReference') &&\r\n shape.type !== 'label' &&\r\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(parent, 'bpmn:Collaboration')) {\r\n\r\n updateDataStoreParent(shape);\r\n }\r\n });\r\n\r\n\r\n // update parent on data store moved\r\n this.postExecute('shape.move', function(event) {\r\n var context = event.context,\r\n shape = context.shape,\r\n oldParent = context.oldParent,\r\n parent = shape.parent;\r\n\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(oldParent, 'bpmn:Collaboration')) {\r\n\r\n // do nothing if not necessary\r\n return;\r\n }\r\n\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:DataStoreReference') &&\r\n shape.type !== 'label' &&\r\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(parent, 'bpmn:Collaboration')) {\r\n\r\n var participant = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(oldParent, 'bpmn:Participant') ?\r\n oldParent :\r\n getAncestor(oldParent, 'bpmn:Participant');\r\n\r\n updateDataStoreParent(shape, participant);\r\n }\r\n });\r\n\r\n\r\n // update data store parents on participant or subprocess deleted\r\n this.postExecute('shape.delete', function(event) {\r\n var context = event.context,\r\n shape = context.shape,\r\n rootElement = canvas.getRootElement();\r\n\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.isAny)(shape, [ 'bpmn:Participant', 'bpmn:SubProcess' ])\r\n && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(rootElement, 'bpmn:Collaboration')) {\r\n getDataStores(rootElement)\r\n .filter(function(dataStore) {\r\n return isDescendant(dataStore, shape);\r\n })\r\n .forEach(function(dataStore) {\r\n updateDataStoreParent(dataStore);\r\n });\r\n }\r\n });\r\n\r\n // update data store parents on collaboration -> process\r\n this.postExecute('canvas.updateRoot', function(event) {\r\n var context = event.context,\r\n oldRoot = context.oldRoot,\r\n newRoot = context.newRoot;\r\n\r\n var dataStores = getDataStores(oldRoot);\r\n\r\n dataStores.forEach(function(dataStore) {\r\n\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(newRoot, 'bpmn:Process')) {\r\n updateDataStoreParent(dataStore, newRoot);\r\n }\r\n\r\n });\r\n });\r\n}\r\n\r\nDataStoreBehavior.$inject = [\r\n 'canvas',\r\n 'commandStack',\r\n 'elementRegistry',\r\n 'eventBus',\r\n];\r\n\r\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(DataStoreBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\r\n\r\n\r\n// helpers //////////\r\n\r\nfunction isDescendant(descendant, ancestor) {\r\n var descendantBo = descendant.businessObject || descendant,\r\n ancestorBo = ancestor.businessObject || ancestor;\r\n\r\n while (descendantBo.$parent) {\r\n if (descendantBo.$parent === ancestorBo.processRef || ancestorBo) {\r\n return true;\r\n }\r\n\r\n descendantBo = descendantBo.$parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getAncestor(element, type) {\r\n\r\n while (element.parent) {\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(element.parent, type)) {\r\n return element.parent;\r\n }\r\n\r\n element = element.parent;\r\n }\r\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9EYXRhU3RvcmVCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3QztBQUN4QztBQUMyRTtBQUMzRTtBQUtpQztBQUNqQztBQUM2QztBQUM3QztBQUM2RTtBQUM3RTtBQUNBO0FBQ0EsYUFBYSw4Q0FBOEM7QUFDM0QsYUFBYSx1REFBdUQ7QUFDcEUsYUFBYSx1REFBdUQ7QUFDcEUsYUFBYSxnREFBZ0Q7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLGNBQWM7QUFDekIsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQSxFQUFFLGlGQUFrQjtBQUNwQjtBQUNBLDhEQUE4RCx3RUFBMkI7QUFDekY7QUFDQTtBQUNBO0FBQ0EsYUFBYSxtREFBRSxpQ0FBaUMsa0VBQWlCO0FBQ2pFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsbURBQUU7QUFDZixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHNEQUFLO0FBQzFCO0FBQ0EscUJBQXFCLHNEQUFLO0FBQzFCLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbURBQUU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsbURBQUU7QUFDZixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtREFBRTtBQUNsQixPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtREFBRTtBQUNWO0FBQ0EsUUFBUSxtREFBRTtBQUNWO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbURBQUU7QUFDVjtBQUNBLFFBQVEsbURBQUU7QUFDVjtBQUNBLHdCQUF3QixtREFBRTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNEQUFLO0FBQ2IsV0FBVyxtREFBRTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLG1EQUFFO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBUSxvQkFBb0IsaUZBQWtCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtREFBRTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RhdGFTdG9yZUJlaGF2aW9yLmpzP2Y0YjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xyXG5cclxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldEJ1c2luZXNzT2JqZWN0LFxyXG4gIGdldERpLFxyXG4gIGlzXHJcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNBbnkgfSBmcm9tICcuLi91dGlsL01vZGVsaW5nVXRpbCc7XHJcblxyXG5pbXBvcnQgVXBkYXRlU2VtYW50aWNQYXJlbnRIYW5kbGVyIGZyb20gJy4uL2NtZC9VcGRhdGVTZW1hbnRpY1BhcmVudEhhbmRsZXInO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvQ2FudmFzJykuZGVmYXVsdH0gQ2FudmFzXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZFN0YWNrJykuZGVmYXVsdH0gQ29tbWFuZFN0YWNrXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudFJlZ2lzdHJ5JykuZGVmYXVsdH0gRWxlbWVudFJlZ2lzdHJ5XHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBCUE1OIHNwZWNpZmljIGRhdGEgc3RvcmUgYmVoYXZpb3IuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcclxuICogQHBhcmFtIHtDb21tYW5kU3RhY2t9IGNvbW1hbmRTdGFja1xyXG4gKiBAcGFyYW0ge0VsZW1lbnRSZWdpc3RyeX0gZWxlbWVudFJlZ2lzdHJ5XHJcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXRhU3RvcmVCZWhhdmlvcihcclxuICAgIGNhbnZhcywgY29tbWFuZFN0YWNrLCBlbGVtZW50UmVnaXN0cnksXHJcbiAgICBldmVudEJ1cykge1xyXG5cclxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XHJcblxyXG4gIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoJ2RhdGFTdG9yZS51cGRhdGVDb250YWlubWVudCcsIFVwZGF0ZVNlbWFudGljUGFyZW50SGFuZGxlcik7XHJcblxyXG4gIGZ1bmN0aW9uIGdldEZpcnN0UGFydGljaXBhbnRXaXRoUHJvY2Vzc1JlZigpIHtcclxuICAgIHJldHVybiBlbGVtZW50UmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGlzKGVsZW1lbnQsICdicG1uOlBhcnRpY2lwYW50JykgJiYgZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkucHJvY2Vzc1JlZjtcclxuICAgIH0pWzBdO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0RGF0YVN0b3JlcyhlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcclxuICAgICAgcmV0dXJuIGlzKGNoaWxkLCAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnKSAmJiAhY2hpbGQubGFiZWxUYXJnZXQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUsIG5ld0RhdGFTdG9yZVBhcmVudCkge1xyXG4gICAgdmFyIGRhdGFTdG9yZUJvID0gZGF0YVN0b3JlLmJ1c2luZXNzT2JqZWN0IHx8IGRhdGFTdG9yZTtcclxuXHJcbiAgICBuZXdEYXRhU3RvcmVQYXJlbnQgPSBuZXdEYXRhU3RvcmVQYXJlbnQgfHwgZ2V0Rmlyc3RQYXJ0aWNpcGFudFdpdGhQcm9jZXNzUmVmKCk7XHJcblxyXG4gICAgaWYgKG5ld0RhdGFTdG9yZVBhcmVudCkge1xyXG4gICAgICB2YXIgbmV3RGF0YVN0b3JlUGFyZW50Qm8gPSBuZXdEYXRhU3RvcmVQYXJlbnQuYnVzaW5lc3NPYmplY3QgfHwgbmV3RGF0YVN0b3JlUGFyZW50O1xyXG5cclxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2RhdGFTdG9yZS51cGRhdGVDb250YWlubWVudCcsIHtcclxuICAgICAgICBkYXRhU3RvcmVCbzogZGF0YVN0b3JlQm8sXHJcbiAgICAgICAgZGF0YVN0b3JlRGk6IGdldERpKGRhdGFTdG9yZSksXHJcbiAgICAgICAgbmV3U2VtYW50aWNQYXJlbnQ6IG5ld0RhdGFTdG9yZVBhcmVudEJvLnByb2Nlc3NSZWYgfHwgbmV3RGF0YVN0b3JlUGFyZW50Qm8sXHJcbiAgICAgICAgbmV3RGlQYXJlbnQ6IGdldERpKG5ld0RhdGFTdG9yZVBhcmVudClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gZGlzYWJsZSBhdXRvLXJlc2l6ZSBmb3IgZGF0YSBzdG9yZXNcclxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpICYmXHJcbiAgICAgICAgc2hhcGUudHlwZSAhPT0gJ2xhYmVsJykge1xyXG5cclxuICAgICAgaWYgKCFjb250ZXh0LmhpbnRzKSB7XHJcbiAgICAgICAgY29udGV4dC5oaW50cyA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBwcmV2ZW50IGF1dG8gcmVzaXppbmdcclxuICAgICAgY29udGV4dC5oaW50cy5hdXRvUmVzaXplID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBkaXNhYmxlIGF1dG8tcmVzaXplIGZvciBkYXRhIHN0b3Jlc1xyXG4gIHRoaXMucHJlRXhlY3V0ZSgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXM7XHJcblxyXG4gICAgdmFyIGRhdGFTdG9yZVJlZmVyZW5jZXMgPSBzaGFwZXMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XHJcbiAgICAgIHJldHVybiBpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZGF0YVN0b3JlUmVmZXJlbmNlcy5sZW5ndGgpIHtcclxuICAgICAgaWYgKCFjb250ZXh0LmhpbnRzKSB7XHJcbiAgICAgICAgY29udGV4dC5oaW50cyA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBwcmV2ZW50IGF1dG8gcmVzaXppbmcgZm9yIGRhdGEgc3RvcmUgcmVmZXJlbmNlc1xyXG4gICAgICBjb250ZXh0LmhpbnRzLmF1dG9SZXNpemUgPSBzaGFwZXMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XHJcbiAgICAgICAgcmV0dXJuICFpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gdXBkYXRlIHBhcmVudCBvbiBkYXRhIHN0b3JlIGNyZWF0ZWRcclxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcclxuICAgICAgICBwYXJlbnQgPSBzaGFwZS5wYXJlbnQ7XHJcblxyXG5cclxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJykgJiZcclxuICAgICAgICBzaGFwZS50eXBlICE9PSAnbGFiZWwnICYmXHJcbiAgICAgICAgaXMocGFyZW50LCAnYnBtbjpDb2xsYWJvcmF0aW9uJykpIHtcclxuXHJcbiAgICAgIHVwZGF0ZURhdGFTdG9yZVBhcmVudChzaGFwZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyB1cGRhdGUgcGFyZW50IG9uIGRhdGEgc3RvcmUgbW92ZWRcclxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5tb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXHJcbiAgICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQsXHJcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xyXG5cclxuICAgIGlmIChpcyhvbGRQYXJlbnQsICdicG1uOkNvbGxhYm9yYXRpb24nKSkge1xyXG5cclxuICAgICAgLy8gZG8gbm90aGluZyBpZiBub3QgbmVjZXNzYXJ5XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkRhdGFTdG9yZVJlZmVyZW5jZScpICYmXHJcbiAgICAgICAgc2hhcGUudHlwZSAhPT0gJ2xhYmVsJyAmJlxyXG4gICAgICAgIGlzKHBhcmVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XHJcblxyXG4gICAgICB2YXIgcGFydGljaXBhbnQgPSBpcyhvbGRQYXJlbnQsICdicG1uOlBhcnRpY2lwYW50JykgP1xyXG4gICAgICAgIG9sZFBhcmVudCA6XHJcbiAgICAgICAgZ2V0QW5jZXN0b3Iob2xkUGFyZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpO1xyXG5cclxuICAgICAgdXBkYXRlRGF0YVN0b3JlUGFyZW50KHNoYXBlLCBwYXJ0aWNpcGFudCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyB1cGRhdGUgZGF0YSBzdG9yZSBwYXJlbnRzIG9uIHBhcnRpY2lwYW50IG9yIHN1YnByb2Nlc3MgZGVsZXRlZFxyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxyXG4gICAgICAgIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCk7XHJcblxyXG4gICAgaWYgKGlzQW55KHNoYXBlLCBbICdicG1uOlBhcnRpY2lwYW50JywgJ2JwbW46U3ViUHJvY2VzcycgXSlcclxuICAgICAgICAmJiBpcyhyb290RWxlbWVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XHJcbiAgICAgIGdldERhdGFTdG9yZXMocm9vdEVsZW1lbnQpXHJcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbihkYXRhU3RvcmUpIHtcclxuICAgICAgICAgIHJldHVybiBpc0Rlc2NlbmRhbnQoZGF0YVN0b3JlLCBzaGFwZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihkYXRhU3RvcmUpIHtcclxuICAgICAgICAgIHVwZGF0ZURhdGFTdG9yZVBhcmVudChkYXRhU3RvcmUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyB1cGRhdGUgZGF0YSBzdG9yZSBwYXJlbnRzIG9uIGNvbGxhYm9yYXRpb24gLT4gcHJvY2Vzc1xyXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ2NhbnZhcy51cGRhdGVSb290JywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBvbGRSb290ID0gY29udGV4dC5vbGRSb290LFxyXG4gICAgICAgIG5ld1Jvb3QgPSBjb250ZXh0Lm5ld1Jvb3Q7XHJcblxyXG4gICAgdmFyIGRhdGFTdG9yZXMgPSBnZXREYXRhU3RvcmVzKG9sZFJvb3QpO1xyXG5cclxuICAgIGRhdGFTdG9yZXMuZm9yRWFjaChmdW5jdGlvbihkYXRhU3RvcmUpIHtcclxuXHJcbiAgICAgIGlmIChpcyhuZXdSb290LCAnYnBtbjpQcm9jZXNzJykpIHtcclxuICAgICAgICB1cGRhdGVEYXRhU3RvcmVQYXJlbnQoZGF0YVN0b3JlLCBuZXdSb290KTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5EYXRhU3RvcmVCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdjYW52YXMnLFxyXG4gICdjb21tYW5kU3RhY2snLFxyXG4gICdlbGVtZW50UmVnaXN0cnknLFxyXG4gICdldmVudEJ1cycsXHJcbl07XHJcblxyXG5pbmhlcml0cyhEYXRhU3RvcmVCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzRGVzY2VuZGFudChkZXNjZW5kYW50LCBhbmNlc3Rvcikge1xyXG4gIHZhciBkZXNjZW5kYW50Qm8gPSBkZXNjZW5kYW50LmJ1c2luZXNzT2JqZWN0IHx8IGRlc2NlbmRhbnQsXHJcbiAgICAgIGFuY2VzdG9yQm8gPSBhbmNlc3Rvci5idXNpbmVzc09iamVjdCB8fCBhbmNlc3RvcjtcclxuXHJcbiAgd2hpbGUgKGRlc2NlbmRhbnRCby4kcGFyZW50KSB7XHJcbiAgICBpZiAoZGVzY2VuZGFudEJvLiRwYXJlbnQgPT09IGFuY2VzdG9yQm8ucHJvY2Vzc1JlZiB8fCBhbmNlc3RvckJvKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc2NlbmRhbnRCbyA9IGRlc2NlbmRhbnRCby4kcGFyZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBbmNlc3RvcihlbGVtZW50LCB0eXBlKSB7XHJcblxyXG4gIHdoaWxlIChlbGVtZW50LnBhcmVudCkge1xyXG4gICAgaWYgKGlzKGVsZW1lbnQucGFyZW50LCB0eXBlKSkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50O1xyXG4gIH1cclxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DataStoreBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DeleteLaneBehavior.js":
/*!****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DeleteLaneBehavior.js ***!
\****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DeleteLaneBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LaneUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../../space-tool/BpmnSpaceTool').default} SpaceTool\n */\n\nvar LOW_PRIORITY = 500;\n\n\n/**\n * BPMN specific delete lane behavior.\n *\n * @param {EventBus} eventBus\n * @param {SpaceTool} spaceTool\n */\nfunction DeleteLaneBehavior(eventBus, spaceTool) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n\n function compensateLaneDelete(shape, oldParent) {\n var isHorizontalLane = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_1__.isHorizontal)(shape);\n\n var siblings = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_2__.getChildLanes)(oldParent);\n\n var topAffected = [];\n var bottomAffected = [];\n var leftAffected = [];\n var rightAffected = [];\n\n (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_3__.eachElement)(siblings, function(element) {\n\n if (isHorizontalLane) {\n if (element.y > shape.y) {\n bottomAffected.push(element);\n } else {\n topAffected.push(element);\n }\n } else {\n if (element.x > shape.x) {\n rightAffected.push(element);\n } else {\n leftAffected.push(element);\n }\n }\n\n return element.children;\n });\n\n if (!siblings.length) {\n return;\n }\n\n var offset;\n\n if (isHorizontalLane) {\n if (bottomAffected.length && topAffected.length) {\n offset = shape.height / 2;\n } else {\n offset = shape.height;\n }\n } else {\n if (rightAffected.length && leftAffected.length) {\n offset = shape.width / 2;\n } else {\n offset = shape.width;\n }\n }\n\n var topAdjustments,\n bottomAdjustments,\n leftAdjustments,\n rightAdjustments;\n\n if (topAffected.length) {\n topAdjustments = spaceTool.calculateAdjustments(\n topAffected, 'y', offset, shape.y - 10);\n\n spaceTool.makeSpace(\n topAdjustments.movingShapes,\n topAdjustments.resizingShapes,\n { x: 0, y: offset }, 's');\n }\n\n if (bottomAffected.length) {\n bottomAdjustments = spaceTool.calculateAdjustments(\n bottomAffected, 'y', -offset, shape.y + shape.height + 10);\n\n spaceTool.makeSpace(\n bottomAdjustments.movingShapes,\n bottomAdjustments.resizingShapes,\n { x: 0, y: -offset }, 'n');\n }\n\n if (leftAffected.length) {\n leftAdjustments = spaceTool.calculateAdjustments(\n leftAffected, 'x', offset, shape.x - 10);\n\n spaceTool.makeSpace(\n leftAdjustments.movingShapes,\n leftAdjustments.resizingShapes,\n { x: offset, y: 0 }, 'e');\n }\n\n if (rightAffected.length) {\n rightAdjustments = spaceTool.calculateAdjustments(\n rightAffected, 'x', -offset, shape.x + shape.width + 10);\n\n spaceTool.makeSpace(\n rightAdjustments.movingShapes,\n rightAdjustments.resizingShapes,\n { x: -offset, y: 0 }, 'w');\n }\n }\n\n\n /**\n * Adjust sizes of other lanes after lane deletion\n */\n this.postExecuted('shape.delete', LOW_PRIORITY, function(event) {\n\n var context = event.context,\n hints = context.hints,\n shape = context.shape,\n oldParent = context.oldParent;\n\n // only compensate lane deletes\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__.is)(shape, 'bpmn:Lane')) {\n return;\n }\n\n // compensate root deletes only\n if (hints && hints.nested) {\n return;\n }\n\n compensateLaneDelete(shape, oldParent);\n });\n}\n\nDeleteLaneBehavior.$inject = [\n 'eventBus',\n 'spaceTool'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(DeleteLaneBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9EZWxldGVMYW5lQmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUF3Qzs7QUFFbUM7O0FBRTlCOztBQUluQjs7QUFJSTs7QUFJUTs7QUFFdEM7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLGtEQUFrRDtBQUMvRDs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsV0FBVztBQUN0QjtBQUNlOztBQUVmLEVBQUUsaUZBQWtCOzs7QUFHcEI7QUFDQSwyQkFBMkIsMERBQVk7O0FBRXZDLG1CQUFtQiw2REFBYTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSx5RUFBVzs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGlCQUFpQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSxrQkFBa0I7QUFDNUI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsaUJBQWlCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGtCQUFrQjtBQUM1QjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsbURBQUU7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDREQUFRLHFCQUFxQixpRkFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9EZWxldGVMYW5lQmVoYXZpb3IuanM/ZGRhOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2hpbGRMYW5lc1xufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNIb3Jpem9udGFsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgZWFjaEVsZW1lbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9zcGFjZS10b29sL0JwbW5TcGFjZVRvb2wnKS5kZWZhdWx0fSBTcGFjZVRvb2xcbiAqL1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBkZWxldGUgbGFuZSBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtTcGFjZVRvb2x9IHNwYWNlVG9vbFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWxldGVMYW5lQmVoYXZpb3IoZXZlbnRCdXMsIHNwYWNlVG9vbCkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIGZ1bmN0aW9uIGNvbXBlbnNhdGVMYW5lRGVsZXRlKHNoYXBlLCBvbGRQYXJlbnQpIHtcbiAgICB2YXIgaXNIb3Jpem9udGFsTGFuZSA9IGlzSG9yaXpvbnRhbChzaGFwZSk7XG5cbiAgICB2YXIgc2libGluZ3MgPSBnZXRDaGlsZExhbmVzKG9sZFBhcmVudCk7XG5cbiAgICB2YXIgdG9wQWZmZWN0ZWQgPSBbXTtcbiAgICB2YXIgYm90dG9tQWZmZWN0ZWQgPSBbXTtcbiAgICB2YXIgbGVmdEFmZmVjdGVkID0gW107XG4gICAgdmFyIHJpZ2h0QWZmZWN0ZWQgPSBbXTtcblxuICAgIGVhY2hFbGVtZW50KHNpYmxpbmdzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICAgIGlmIChpc0hvcml6b250YWxMYW5lKSB7XG4gICAgICAgIGlmIChlbGVtZW50LnkgPiBzaGFwZS55KSB7XG4gICAgICAgICAgYm90dG9tQWZmZWN0ZWQucHVzaChlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3BBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZWxlbWVudC54ID4gc2hhcGUueCkge1xuICAgICAgICAgIHJpZ2h0QWZmZWN0ZWQucHVzaChlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0QWZmZWN0ZWQucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbjtcbiAgICB9KTtcblxuICAgIGlmICghc2libGluZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldDtcblxuICAgIGlmIChpc0hvcml6b250YWxMYW5lKSB7XG4gICAgICBpZiAoYm90dG9tQWZmZWN0ZWQubGVuZ3RoICYmIHRvcEFmZmVjdGVkLmxlbmd0aCkge1xuICAgICAgICBvZmZzZXQgPSBzaGFwZS5oZWlnaHQgLyAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gc2hhcGUuaGVpZ2h0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmlnaHRBZmZlY3RlZC5sZW5ndGggJiYgbGVmdEFmZmVjdGVkLmxlbmd0aCkge1xuICAgICAgICBvZmZzZXQgPSBzaGFwZS53aWR0aCAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvZmZzZXQgPSBzaGFwZS53aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdG9wQWRqdXN0bWVudHMsXG4gICAgICAgIGJvdHRvbUFkanVzdG1lbnRzLFxuICAgICAgICBsZWZ0QWRqdXN0bWVudHMsXG4gICAgICAgIHJpZ2h0QWRqdXN0bWVudHM7XG5cbiAgICBpZiAodG9wQWZmZWN0ZWQubGVuZ3RoKSB7XG4gICAgICB0b3BBZGp1c3RtZW50cyA9IHNwYWNlVG9vbC5jYWxjdWxhdGVBZGp1c3RtZW50cyhcbiAgICAgICAgdG9wQWZmZWN0ZWQsICd5Jywgb2Zmc2V0LCBzaGFwZS55IC0gMTApO1xuXG4gICAgICBzcGFjZVRvb2wubWFrZVNwYWNlKFxuICAgICAgICB0b3BBZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgICAgIHRvcEFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLFxuICAgICAgICB7IHg6IDAsIHk6IG9mZnNldCB9LCAncycpO1xuICAgIH1cblxuICAgIGlmIChib3R0b21BZmZlY3RlZC5sZW5ndGgpIHtcbiAgICAgIGJvdHRvbUFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKFxuICAgICAgICBib3R0b21BZmZlY3RlZCwgJ3knLCAtb2Zmc2V0LCBzaGFwZS55ICsgc2hhcGUuaGVpZ2h0ICsgMTApO1xuXG4gICAgICBzcGFjZVRvb2wubWFrZVNwYWNlKFxuICAgICAgICBib3R0b21BZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgICAgIGJvdHRvbUFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLFxuICAgICAgICB7IHg6IDAsIHk6IC1vZmZzZXQgfSwgJ24nKTtcbiAgICB9XG5cbiAgICBpZiAobGVmdEFmZmVjdGVkLmxlbmd0aCkge1xuICAgICAgbGVmdEFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKFxuICAgICAgICBsZWZ0QWZmZWN0ZWQsICd4Jywgb2Zmc2V0LCBzaGFwZS54IC0gMTApO1xuXG4gICAgICBzcGFjZVRvb2wubWFrZVNwYWNlKFxuICAgICAgICBsZWZ0QWRqdXN0bWVudHMubW92aW5nU2hhcGVzLFxuICAgICAgICBsZWZ0QWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHsgeDogb2Zmc2V0LCB5OiAwIH0sICdlJyk7XG4gICAgfVxuXG4gICAgaWYgKHJpZ2h0QWZmZWN0ZWQubGVuZ3RoKSB7XG4gICAgICByaWdodEFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKFxuICAgICAgICByaWdodEFmZmVjdGVkLCAneCcsIC1vZmZzZXQsIHNoYXBlLnggKyBzaGFwZS53aWR0aCArIDEwKTtcblxuICAgICAgc3BhY2VUb29sLm1ha2VTcGFjZShcbiAgICAgICAgcmlnaHRBZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsXG4gICAgICAgIHJpZ2h0QWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsXG4gICAgICAgIHsgeDogLW9mZnNldCwgeTogMCB9LCAndycpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFkanVzdCBzaXplcyBvZiBvdGhlciBsYW5lcyBhZnRlciBsYW5lIGRlbGV0aW9uXG4gICAqL1xuICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUuZGVsZXRlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgb2xkUGFyZW50ID0gY29udGV4dC5vbGRQYXJlbnQ7XG5cbiAgICAvLyBvbmx5IGNvbXBlbnNhdGUgbGFuZSBkZWxldGVzXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29tcGVuc2F0ZSByb290IGRlbGV0ZXMgb25seVxuICAgIGlmIChoaW50cyAmJiBoaW50cy5uZXN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb21wZW5zYXRlTGFuZURlbGV0ZShzaGFwZSwgb2xkUGFyZW50KTtcbiAgfSk7XG59XG5cbkRlbGV0ZUxhbmVCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnc3BhY2VUb29sJ1xuXTtcblxuaW5oZXJpdHMoRGVsZXRlTGFuZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DeleteLaneBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DetachEventBehavior.js":
/*!*****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DetachEventBehavior.js ***!
\*****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DetachEventBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('../../replace/BpmnReplace').default} BpmnReplace\n * @typedef {import('didi').Injector} Injector\n */\n\nvar LOW_PRIORITY = 500;\n\n\n/**\n * Replace boundary event with intermediate event when creating or moving results in detached event.\n *\n * @param {BpmnReplace} bpmnReplace\n * @param {Injector} injector\n */\nfunction DetachEventBehavior(bpmnReplace, injector) {\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n\n this._bpmnReplace = bpmnReplace;\n\n var self = this;\n\n this.postExecuted('elements.create', LOW_PRIORITY, function(context) {\n var elements = context.elements;\n\n elements.filter(function(shape) {\n var host = shape.host;\n\n return shouldReplace(shape, host);\n }).map(function(shape) {\n return elements.indexOf(shape);\n }).forEach(function(index) {\n context.elements[ index ] = self._replaceShape(elements[ index ]);\n });\n }, true);\n\n this.preExecute('elements.move', LOW_PRIORITY, function(context) {\n var shapes = context.shapes,\n newHost = context.newHost;\n\n shapes.forEach(function(shape, index) {\n var host = shape.host;\n\n if (shouldReplace(shape, includes(shapes, host) ? host : newHost)) {\n shapes[ index ] = self._replaceShape(shape);\n }\n });\n }, true);\n}\n\nDetachEventBehavior.$inject = [\n 'bpmnReplace',\n 'injector'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(DetachEventBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nDetachEventBehavior.prototype._replaceShape = function(shape) {\n var eventDefinition = getEventDefinition(shape),\n intermediateEvent;\n\n if (eventDefinition) {\n intermediateEvent = {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: eventDefinition.$type\n };\n } else {\n intermediateEvent = {\n type: 'bpmn:IntermediateThrowEvent'\n };\n }\n\n return this._bpmnReplace.replaceElement(shape, intermediateEvent, { layoutConnection: false });\n};\n\n\n// helpers //////////\n\nfunction getEventDefinition(element) {\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element),\n eventDefinitions = businessObject.eventDefinitions;\n\n return eventDefinitions && eventDefinitions[0];\n}\n\nfunction shouldReplace(shape, host) {\n return !(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.isLabel)(shape) && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:BoundaryEvent') && !host;\n}\n\nfunction includes(array, item) {\n return array.indexOf(item) !== -1;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9EZXRhY2hFdmVudEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXdDOztBQUVtQzs7QUFLMUM7O0FBRWlCOztBQUVsRDtBQUNBLGFBQWEsNkNBQTZDO0FBQzFELGFBQWEseUJBQXlCO0FBQ3RDOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZixrQkFBa0IsaUZBQWtCOztBQUVwQzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDREQUFRLHNCQUFzQixpRkFBa0I7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNFQUFzRSx5QkFBeUI7QUFDL0Y7OztBQUdBOztBQUVBO0FBQ0EsdUJBQXVCLGtFQUFpQjtBQUN4Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSx3REFBTyxXQUFXLG1EQUFFO0FBQzlCOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0RldGFjaEV2ZW50QmVoYXZpb3IuanM/ZmNjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3JlcGxhY2UvQnBtblJlcGxhY2UnKS5kZWZhdWx0fSBCcG1uUmVwbGFjZVxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlkaScpLkluamVjdG9yfSBJbmplY3RvclxuICovXG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cblxuLyoqXG4gKiBSZXBsYWNlIGJvdW5kYXJ5IGV2ZW50IHdpdGggaW50ZXJtZWRpYXRlIGV2ZW50IHdoZW4gY3JlYXRpbmcgb3IgbW92aW5nIHJlc3VsdHMgaW4gZGV0YWNoZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtCcG1uUmVwbGFjZX0gYnBtblJlcGxhY2VcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERldGFjaEV2ZW50QmVoYXZpb3IoYnBtblJlcGxhY2UsIGluamVjdG9yKSB7XG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xuXG4gIHRoaXMuX2JwbW5SZXBsYWNlID0gYnBtblJlcGxhY2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdlbGVtZW50cy5jcmVhdGUnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LmVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIHJldHVybiBzaG91bGRSZXBsYWNlKHNoYXBlLCBob3N0KTtcbiAgICB9KS5tYXAoZnVuY3Rpb24oc2hhcGUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50cy5pbmRleE9mKHNoYXBlKTtcbiAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICBjb250ZXh0LmVsZW1lbnRzWyBpbmRleCBdID0gc2VsZi5fcmVwbGFjZVNoYXBlKGVsZW1lbnRzWyBpbmRleCBdKTtcbiAgICB9KTtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdlbGVtZW50cy5tb3ZlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzLFxuICAgICAgICBuZXdIb3N0ID0gY29udGV4dC5uZXdIb3N0O1xuXG4gICAgc2hhcGVzLmZvckVhY2goZnVuY3Rpb24oc2hhcGUsIGluZGV4KSB7XG4gICAgICB2YXIgaG9zdCA9IHNoYXBlLmhvc3Q7XG5cbiAgICAgIGlmIChzaG91bGRSZXBsYWNlKHNoYXBlLCBpbmNsdWRlcyhzaGFwZXMsIGhvc3QpID8gaG9zdCA6IG5ld0hvc3QpKSB7XG4gICAgICAgIHNoYXBlc1sgaW5kZXggXSA9IHNlbGYuX3JlcGxhY2VTaGFwZShzaGFwZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHRydWUpO1xufVxuXG5EZXRhY2hFdmVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdicG1uUmVwbGFjZScsXG4gICdpbmplY3Rvcidcbl07XG5cbmluaGVyaXRzKERldGFjaEV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkRldGFjaEV2ZW50QmVoYXZpb3IucHJvdG90eXBlLl9yZXBsYWNlU2hhcGUgPSBmdW5jdGlvbihzaGFwZSkge1xuICB2YXIgZXZlbnREZWZpbml0aW9uID0gZ2V0RXZlbnREZWZpbml0aW9uKHNoYXBlKSxcbiAgICAgIGludGVybWVkaWF0ZUV2ZW50O1xuXG4gIGlmIChldmVudERlZmluaXRpb24pIHtcbiAgICBpbnRlcm1lZGlhdGVFdmVudCA9IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogZXZlbnREZWZpbml0aW9uLiR0eXBlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm1lZGlhdGVFdmVudCA9IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9icG1uUmVwbGFjZS5yZXBsYWNlRWxlbWVudChzaGFwZSwgaW50ZXJtZWRpYXRlRXZlbnQsIHsgbGF5b3V0Q29ubmVjdGlvbjogZmFsc2UgfSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zO1xuXG4gIHJldHVybiBldmVudERlZmluaXRpb25zICYmIGV2ZW50RGVmaW5pdGlvbnNbMF07XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJlcGxhY2Uoc2hhcGUsIGhvc3QpIHtcbiAgcmV0dXJuICFpc0xhYmVsKHNoYXBlKSAmJiBpcyhzaGFwZSwgJ2JwbW46Qm91bmRhcnlFdmVudCcpICYmICFob3N0O1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DetachEventBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DropOnFlowBehavior.js":
/*!****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DropOnFlowBehavior.js ***!
\****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DropOnFlowBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var diagram_js_lib_util_LineIntersection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/LineIntersection */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/LineIntersection.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../../rules/BpmnRules').default} BpmnRules\n * @typedef {import('../../modeling/Modeling').default} Modeling\n */\n\n/**\n * @param {EventBus} eventBus\n * @param {BpmnRules} bpmnRules\n * @param {Modeling} modeling\n */\nfunction DropOnFlowBehavior(eventBus, bpmnRules, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n /**\n * Reconnect start / end of a connection after\n * dropping an element on a flow.\n */\n\n function insertShape(shape, targetFlow, positionOrBounds) {\n var waypoints = targetFlow.waypoints,\n waypointsBefore,\n waypointsAfter,\n dockingPoint,\n source,\n target,\n incomingConnection,\n outgoingConnection,\n oldOutgoing = shape.outgoing.slice(),\n oldIncoming = shape.incoming.slice();\n\n var mid;\n\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_1__.isNumber)(positionOrBounds.width)) {\n mid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getMid)(positionOrBounds);\n } else {\n mid = positionOrBounds;\n }\n\n var intersection = (0,diagram_js_lib_util_LineIntersection__WEBPACK_IMPORTED_MODULE_3__.getApproxIntersection)(waypoints, mid);\n\n if (intersection) {\n waypointsBefore = waypoints.slice(0, intersection.index);\n waypointsAfter = waypoints.slice(intersection.index + (intersection.bendpoint ? 1 : 0));\n\n // due to inaccuracy intersection might have been found\n if (!waypointsBefore.length || !waypointsAfter.length) {\n return;\n }\n\n dockingPoint = intersection.bendpoint ? waypoints[intersection.index] : mid;\n\n // if last waypointBefore is inside shape's bounds, ignore docking point\n if (waypointsBefore.length === 1 || !isPointInsideBBox(shape, waypointsBefore[waypointsBefore.length - 1])) {\n waypointsBefore.push(copy(dockingPoint));\n }\n\n // if first waypointAfter is inside shape's bounds, ignore docking point\n if (waypointsAfter.length === 1 || !isPointInsideBBox(shape, waypointsAfter[0])) {\n waypointsAfter.unshift(copy(dockingPoint));\n }\n }\n\n source = targetFlow.source;\n target = targetFlow.target;\n\n if (bpmnRules.canConnect(source, shape, targetFlow)) {\n\n // reconnect source -> inserted shape\n modeling.reconnectEnd(targetFlow, shape, waypointsBefore || mid);\n\n incomingConnection = targetFlow;\n }\n\n if (bpmnRules.canConnect(shape, target, targetFlow)) {\n\n if (!incomingConnection) {\n\n // reconnect inserted shape -> end\n modeling.reconnectStart(targetFlow, shape, waypointsAfter || mid);\n\n outgoingConnection = targetFlow;\n } else {\n outgoingConnection = modeling.connect(\n shape, target, { type: targetFlow.type, waypoints: waypointsAfter }\n );\n }\n }\n\n var duplicateConnections = [].concat(\n\n incomingConnection && (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.filter)(oldIncoming, function(connection) {\n return connection.source === incomingConnection.source;\n }) || [],\n\n outgoingConnection && (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.filter)(oldOutgoing, function(connection) {\n return connection.target === outgoingConnection.target;\n }) || []\n );\n\n if (duplicateConnections.length) {\n modeling.removeElements(duplicateConnections);\n }\n }\n\n this.preExecute('elements.move', function(context) {\n\n var newParent = context.newParent,\n shapes = context.shapes,\n delta = context.delta,\n shape = shapes[0];\n\n if (!shape || !newParent) {\n return;\n }\n\n // if the new parent is a connection,\n // change it to the new parent's parent\n if (newParent && newParent.waypoints) {\n context.newParent = newParent = newParent.parent;\n }\n\n var shapeMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getMid)(shape);\n var newShapeMid = {\n x: shapeMid.x + delta.x,\n y: shapeMid.y + delta.y\n };\n\n // find a connection which intersects with the\n // element's mid point\n var connection = (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.find)(newParent.children, function(element) {\n var canInsert = bpmnRules.canInsert(shapes, element);\n\n return canInsert && (0,diagram_js_lib_util_LineIntersection__WEBPACK_IMPORTED_MODULE_3__.getApproxIntersection)(element.waypoints, newShapeMid);\n });\n\n if (connection) {\n context.targetFlow = connection;\n context.position = newShapeMid;\n }\n\n }, true);\n\n this.postExecuted('elements.move', function(context) {\n\n var shapes = context.shapes,\n targetFlow = context.targetFlow,\n position = context.position;\n\n if (targetFlow) {\n insertShape(shapes[0], targetFlow, position);\n }\n\n }, true);\n\n this.preExecute('shape.create', function(context) {\n\n var parent = context.parent,\n shape = context.shape;\n\n if (bpmnRules.canInsert(shape, parent)) {\n context.targetFlow = parent;\n context.parent = parent.parent;\n }\n }, true);\n\n this.postExecuted('shape.create', function(context) {\n\n var shape = context.shape,\n targetFlow = context.targetFlow,\n positionOrBounds = context.position;\n\n if (targetFlow) {\n insertShape(shape, targetFlow, positionOrBounds);\n }\n }, true);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(DropOnFlowBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nDropOnFlowBehavior.$inject = [\n 'eventBus',\n 'bpmnRules',\n 'modeling'\n];\n\n\n// helpers /////////////////////\n\nfunction isPointInsideBBox(bbox, point) {\n var x = point.x,\n y = point.y;\n\n return x >= bbox.x &&\n x <= bbox.x + bbox.width &&\n y >= bbox.y &&\n y <= bbox.y + bbox.height;\n}\n\nfunction copy(obj) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)({}, obj);\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Ecm9wT25GbG93QmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXdDOztBQU90Qjs7QUFFd0M7O0FBRWlCOztBQUk3Qjs7QUFFOUM7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLHlDQUF5QztBQUN0RCxhQUFhLDJDQUEyQztBQUN4RDs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFdBQVc7QUFDdEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7O0FBRWYsRUFBRSxpRkFBa0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsUUFBUSxrREFBUTtBQUNoQixZQUFZLHdFQUFNO0FBQ2xCLE1BQU07QUFDTjtBQUNBOztBQUVBLHVCQUF1QiwyRkFBcUI7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QixnREFBTTtBQUNsQztBQUNBLE9BQU87O0FBRVAsNEJBQTRCLGdEQUFNO0FBQ2xDO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQix3RUFBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDhDQUFJO0FBQ3pCOztBQUVBLDBCQUEwQiwyRkFBcUI7QUFDL0MsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLDREQUFRLHFCQUFxQixpRkFBa0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxnREFBTSxHQUFHO0FBQ2xCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRHJvcE9uRmxvd0JlaGF2aW9yLmpzPzg5N2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgaXNOdW1iZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBnZXRNaWQgfSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRBcHByb3hJbnRlcnNlY3Rpb25cbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9MaW5lSW50ZXJzZWN0aW9uJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3J1bGVzL0JwbW5SdWxlcycpLmRlZmF1bHR9IEJwbW5SdWxlc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vbW9kZWxpbmcvTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7QnBtblJ1bGVzfSBicG1uUnVsZXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyb3BPbkZsb3dCZWhhdmlvcihldmVudEJ1cywgYnBtblJ1bGVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVjb25uZWN0IHN0YXJ0IC8gZW5kIG9mIGEgY29ubmVjdGlvbiBhZnRlclxuICAgKiBkcm9wcGluZyBhbiBlbGVtZW50IG9uIGEgZmxvdy5cbiAgICovXG5cbiAgZnVuY3Rpb24gaW5zZXJ0U2hhcGUoc2hhcGUsIHRhcmdldEZsb3csIHBvc2l0aW9uT3JCb3VuZHMpIHtcbiAgICB2YXIgd2F5cG9pbnRzID0gdGFyZ2V0Rmxvdy53YXlwb2ludHMsXG4gICAgICAgIHdheXBvaW50c0JlZm9yZSxcbiAgICAgICAgd2F5cG9pbnRzQWZ0ZXIsXG4gICAgICAgIGRvY2tpbmdQb2ludCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGluY29taW5nQ29ubmVjdGlvbixcbiAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9uLFxuICAgICAgICBvbGRPdXRnb2luZyA9IHNoYXBlLm91dGdvaW5nLnNsaWNlKCksXG4gICAgICAgIG9sZEluY29taW5nID0gc2hhcGUuaW5jb21pbmcuc2xpY2UoKTtcblxuICAgIHZhciBtaWQ7XG5cbiAgICBpZiAoaXNOdW1iZXIocG9zaXRpb25PckJvdW5kcy53aWR0aCkpIHtcbiAgICAgIG1pZCA9IGdldE1pZChwb3NpdGlvbk9yQm91bmRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkID0gcG9zaXRpb25PckJvdW5kcztcbiAgICB9XG5cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gZ2V0QXBwcm94SW50ZXJzZWN0aW9uKHdheXBvaW50cywgbWlkKTtcblxuICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHdheXBvaW50c0JlZm9yZSA9IHdheXBvaW50cy5zbGljZSgwLCBpbnRlcnNlY3Rpb24uaW5kZXgpO1xuICAgICAgd2F5cG9pbnRzQWZ0ZXIgPSB3YXlwb2ludHMuc2xpY2UoaW50ZXJzZWN0aW9uLmluZGV4ICsgKGludGVyc2VjdGlvbi5iZW5kcG9pbnQgPyAxIDogMCkpO1xuXG4gICAgICAvLyBkdWUgdG8gaW5hY2N1cmFjeSBpbnRlcnNlY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIGZvdW5kXG4gICAgICBpZiAoIXdheXBvaW50c0JlZm9yZS5sZW5ndGggfHwgIXdheXBvaW50c0FmdGVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY2tpbmdQb2ludCA9IGludGVyc2VjdGlvbi5iZW5kcG9pbnQgPyB3YXlwb2ludHNbaW50ZXJzZWN0aW9uLmluZGV4XSA6IG1pZDtcblxuICAgICAgLy8gaWYgbGFzdCB3YXlwb2ludEJlZm9yZSBpcyBpbnNpZGUgc2hhcGUncyBib3VuZHMsIGlnbm9yZSBkb2NraW5nIHBvaW50XG4gICAgICBpZiAod2F5cG9pbnRzQmVmb3JlLmxlbmd0aCA9PT0gMSB8fCAhaXNQb2ludEluc2lkZUJCb3goc2hhcGUsIHdheXBvaW50c0JlZm9yZVt3YXlwb2ludHNCZWZvcmUubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgIHdheXBvaW50c0JlZm9yZS5wdXNoKGNvcHkoZG9ja2luZ1BvaW50KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGZpcnN0IHdheXBvaW50QWZ0ZXIgaXMgaW5zaWRlIHNoYXBlJ3MgYm91bmRzLCBpZ25vcmUgZG9ja2luZyBwb2ludFxuICAgICAgaWYgKHdheXBvaW50c0FmdGVyLmxlbmd0aCA9PT0gMSB8fCAhaXNQb2ludEluc2lkZUJCb3goc2hhcGUsIHdheXBvaW50c0FmdGVyWzBdKSkge1xuICAgICAgICB3YXlwb2ludHNBZnRlci51bnNoaWZ0KGNvcHkoZG9ja2luZ1BvaW50KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc291cmNlID0gdGFyZ2V0Rmxvdy5zb3VyY2U7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0Rmxvdy50YXJnZXQ7XG5cbiAgICBpZiAoYnBtblJ1bGVzLmNhbkNvbm5lY3Qoc291cmNlLCBzaGFwZSwgdGFyZ2V0RmxvdykpIHtcblxuICAgICAgLy8gcmVjb25uZWN0IHNvdXJjZSAtPiBpbnNlcnRlZCBzaGFwZVxuICAgICAgbW9kZWxpbmcucmVjb25uZWN0RW5kKHRhcmdldEZsb3csIHNoYXBlLCB3YXlwb2ludHNCZWZvcmUgfHwgbWlkKTtcblxuICAgICAgaW5jb21pbmdDb25uZWN0aW9uID0gdGFyZ2V0RmxvdztcbiAgICB9XG5cbiAgICBpZiAoYnBtblJ1bGVzLmNhbkNvbm5lY3Qoc2hhcGUsIHRhcmdldCwgdGFyZ2V0RmxvdykpIHtcblxuICAgICAgaWYgKCFpbmNvbWluZ0Nvbm5lY3Rpb24pIHtcblxuICAgICAgICAvLyByZWNvbm5lY3QgaW5zZXJ0ZWQgc2hhcGUgLT4gZW5kXG4gICAgICAgIG1vZGVsaW5nLnJlY29ubmVjdFN0YXJ0KHRhcmdldEZsb3csIHNoYXBlLCB3YXlwb2ludHNBZnRlciB8fCBtaWQpO1xuXG4gICAgICAgIG91dGdvaW5nQ29ubmVjdGlvbiA9IHRhcmdldEZsb3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb24gPSBtb2RlbGluZy5jb25uZWN0KFxuICAgICAgICAgIHNoYXBlLCB0YXJnZXQsIHsgdHlwZTogdGFyZ2V0Rmxvdy50eXBlLCB3YXlwb2ludHM6IHdheXBvaW50c0FmdGVyIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZHVwbGljYXRlQ29ubmVjdGlvbnMgPSBbXS5jb25jYXQoXG5cbiAgICAgIGluY29taW5nQ29ubmVjdGlvbiAmJiBmaWx0ZXIob2xkSW5jb21pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24uc291cmNlID09PSBpbmNvbWluZ0Nvbm5lY3Rpb24uc291cmNlO1xuICAgICAgfSkgfHwgW10sXG5cbiAgICAgIG91dGdvaW5nQ29ubmVjdGlvbiAmJiBmaWx0ZXIob2xkT3V0Z29pbmcsIGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24udGFyZ2V0ID09PSBvdXRnb2luZ0Nvbm5lY3Rpb24udGFyZ2V0O1xuICAgICAgfSkgfHwgW11cbiAgICApO1xuXG4gICAgaWYgKGR1cGxpY2F0ZUNvbm5lY3Rpb25zLmxlbmd0aCkge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlRWxlbWVudHMoZHVwbGljYXRlQ29ubmVjdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMucHJlRXhlY3V0ZSgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBuZXdQYXJlbnQgPSBjb250ZXh0Lm5ld1BhcmVudCxcbiAgICAgICAgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGRlbHRhID0gY29udGV4dC5kZWx0YSxcbiAgICAgICAgc2hhcGUgPSBzaGFwZXNbMF07XG5cbiAgICBpZiAoIXNoYXBlIHx8ICFuZXdQYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgbmV3IHBhcmVudCBpcyBhIGNvbm5lY3Rpb24sXG4gICAgLy8gY2hhbmdlIGl0IHRvIHRoZSBuZXcgcGFyZW50J3MgcGFyZW50XG4gICAgaWYgKG5ld1BhcmVudCAmJiBuZXdQYXJlbnQud2F5cG9pbnRzKSB7XG4gICAgICBjb250ZXh0Lm5ld1BhcmVudCA9IG5ld1BhcmVudCA9IG5ld1BhcmVudC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlTWlkID0gZ2V0TWlkKHNoYXBlKTtcbiAgICB2YXIgbmV3U2hhcGVNaWQgPSB7XG4gICAgICB4OiBzaGFwZU1pZC54ICsgZGVsdGEueCxcbiAgICAgIHk6IHNoYXBlTWlkLnkgKyBkZWx0YS55XG4gICAgfTtcblxuICAgIC8vIGZpbmQgYSBjb25uZWN0aW9uIHdoaWNoIGludGVyc2VjdHMgd2l0aCB0aGVcbiAgICAvLyBlbGVtZW50J3MgbWlkIHBvaW50XG4gICAgdmFyIGNvbm5lY3Rpb24gPSBmaW5kKG5ld1BhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgdmFyIGNhbkluc2VydCA9IGJwbW5SdWxlcy5jYW5JbnNlcnQoc2hhcGVzLCBlbGVtZW50KTtcblxuICAgICAgcmV0dXJuIGNhbkluc2VydCAmJiBnZXRBcHByb3hJbnRlcnNlY3Rpb24oZWxlbWVudC53YXlwb2ludHMsIG5ld1NoYXBlTWlkKTtcbiAgICB9KTtcblxuICAgIGlmIChjb25uZWN0aW9uKSB7XG4gICAgICBjb250ZXh0LnRhcmdldEZsb3cgPSBjb25uZWN0aW9uO1xuICAgICAgY29udGV4dC5wb3NpdGlvbiA9IG5ld1NoYXBlTWlkO1xuICAgIH1cblxuICB9LCB0cnVlKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBzaGFwZXMgPSBjb250ZXh0LnNoYXBlcyxcbiAgICAgICAgdGFyZ2V0RmxvdyA9IGNvbnRleHQudGFyZ2V0RmxvdyxcbiAgICAgICAgcG9zaXRpb24gPSBjb250ZXh0LnBvc2l0aW9uO1xuXG4gICAgaWYgKHRhcmdldEZsb3cpIHtcbiAgICAgIGluc2VydFNoYXBlKHNoYXBlc1swXSwgdGFyZ2V0RmxvdywgcG9zaXRpb24pO1xuICAgIH1cblxuICB9LCB0cnVlKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5JbnNlcnQoc2hhcGUsIHBhcmVudCkpIHtcbiAgICAgIGNvbnRleHQudGFyZ2V0RmxvdyA9IHBhcmVudDtcbiAgICAgIGNvbnRleHQucGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICB0YXJnZXRGbG93ID0gY29udGV4dC50YXJnZXRGbG93LFxuICAgICAgICBwb3NpdGlvbk9yQm91bmRzID0gY29udGV4dC5wb3NpdGlvbjtcblxuICAgIGlmICh0YXJnZXRGbG93KSB7XG4gICAgICBpbnNlcnRTaGFwZShzaGFwZSwgdGFyZ2V0RmxvdywgcG9zaXRpb25PckJvdW5kcyk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cblxuaW5oZXJpdHMoRHJvcE9uRmxvd0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5Ecm9wT25GbG93QmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2JwbW5SdWxlcycsXG4gICdtb2RlbGluZydcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNQb2ludEluc2lkZUJCb3goYmJveCwgcG9pbnQpIHtcbiAgdmFyIHggPSBwb2ludC54LFxuICAgICAgeSA9IHBvaW50Lnk7XG5cbiAgcmV0dXJuIHggPj0gYmJveC54ICYmXG4gICAgeCA8PSBiYm94LnggKyBiYm94LndpZHRoICYmXG4gICAgeSA+PSBiYm94LnkgJiZcbiAgICB5IDw9IGJib3gueSArIGJib3guaGVpZ2h0O1xufVxuXG5mdW5jdGlvbiBjb3B5KG9iaikge1xuICByZXR1cm4gYXNzaWduKHt9LCBvYmopO1xufVxuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DropOnFlowBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/EventBasedGatewayBehavior.js":
/*!***********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/EventBasedGatewayBehavior.js ***!
\***********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EventBasedGatewayBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction EventBasedGatewayBehavior(eventBus, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n /**\n * Remove incoming sequence flows of event-based target when creating\n * sequence flow.\n *\n * 1. If source is event-based gateway remove all incoming sequence flows\n * 2. If source is not event-based gateway remove all incoming sequence flows\n * whose source is event-based gateway\n */\n this.preExecuted('connection.create', function(event) {\n var context = event.context,\n connection = context.connection,\n source = context.source,\n target = context.target,\n hints = context.hints;\n\n if (hints && hints.createElementsBehavior === false) {\n return;\n }\n\n if (!isSequenceFlow(connection)) {\n return;\n }\n\n var sequenceFlows = [];\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(source, 'bpmn:EventBasedGateway')) {\n sequenceFlows = target.incoming\n .filter(flow =>\n flow !== connection &&\n isSequenceFlow(flow)\n );\n } else {\n sequenceFlows = target.incoming\n .filter(flow =>\n flow !== connection &&\n isSequenceFlow(flow) &&\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(flow.source, 'bpmn:EventBasedGateway')\n );\n }\n\n sequenceFlows.forEach(function(sequenceFlow) {\n modeling.removeConnection(sequenceFlow);\n });\n });\n\n /**\n * Remove incoming sequence flows of event-based targets when replacing source\n * with event-based gateway.\n */\n this.preExecuted('shape.replace', function(event) {\n var context = event.context,\n newShape = context.newShape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(newShape, 'bpmn:EventBasedGateway')) {\n return;\n }\n\n var targets = newShape.outgoing.filter(isSequenceFlow)\n .reduce(function(targets, sequenceFlow) {\n if (!targets.includes(sequenceFlow.target)) {\n return targets.concat(sequenceFlow.target);\n }\n\n return targets;\n }, []);\n\n targets.forEach(function(target) {\n target.incoming.filter(isSequenceFlow).forEach(function(sequenceFlow) {\n const sequenceFlowsFromNewShape = target.incoming.filter(isSequenceFlow).filter(function(sequenceFlow) {\n return sequenceFlow.source === newShape;\n });\n\n if (sequenceFlow.source !== newShape || sequenceFlowsFromNewShape.length > 1) {\n modeling.removeConnection(sequenceFlow);\n }\n });\n });\n });\n}\n\nEventBasedGatewayBehavior.$inject = [\n 'eventBus',\n 'modeling'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(EventBasedGatewayBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n// helpers //////////\n\nfunction isSequenceFlow(connection) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(connection, 'bpmn:SequenceFlow');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9FdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBd0M7O0FBRW1DOztBQUU5Qjs7QUFFN0M7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLCtCQUErQjtBQUM1Qzs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckI7QUFDZTs7QUFFZixFQUFFLGlGQUFrQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsbURBQUU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtREFBRTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsbURBQUU7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0REFBUSw0QkFBNEIsaUZBQWtCOztBQUV0RDs7QUFFQTtBQUNBLFNBQVMsbURBQUU7QUFDWCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IuanM/OWEwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL01vZGVsaW5nJykuZGVmYXVsdH0gTW9kZWxpbmdcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogUmVtb3ZlIGluY29taW5nIHNlcXVlbmNlIGZsb3dzIG9mIGV2ZW50LWJhc2VkIHRhcmdldCB3aGVuIGNyZWF0aW5nXG4gICAqIHNlcXVlbmNlIGZsb3cuXG4gICAqXG4gICAqIDEuIElmIHNvdXJjZSBpcyBldmVudC1iYXNlZCBnYXRld2F5IHJlbW92ZSBhbGwgaW5jb21pbmcgc2VxdWVuY2UgZmxvd3NcbiAgICogMi4gSWYgc291cmNlIGlzIG5vdCBldmVudC1iYXNlZCBnYXRld2F5IHJlbW92ZSBhbGwgaW5jb21pbmcgc2VxdWVuY2UgZmxvd3NcbiAgICogd2hvc2Ugc291cmNlIGlzIGV2ZW50LWJhc2VkIGdhdGV3YXlcbiAgICovXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ2Nvbm5lY3Rpb24uY3JlYXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIHNvdXJjZSA9IGNvbnRleHQuc291cmNlLFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0LnRhcmdldCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzO1xuXG4gICAgaWYgKGhpbnRzICYmIGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpc1NlcXVlbmNlRmxvdyhjb25uZWN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzZXF1ZW5jZUZsb3dzID0gW107XG5cbiAgICBpZiAoaXMoc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpKSB7XG4gICAgICBzZXF1ZW5jZUZsb3dzID0gdGFyZ2V0LmluY29taW5nXG4gICAgICAgIC5maWx0ZXIoZmxvdyA9PlxuICAgICAgICAgIGZsb3cgIT09IGNvbm5lY3Rpb24gJiZcbiAgICAgICAgICBpc1NlcXVlbmNlRmxvdyhmbG93KVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXF1ZW5jZUZsb3dzID0gdGFyZ2V0LmluY29taW5nXG4gICAgICAgIC5maWx0ZXIoZmxvdyA9PlxuICAgICAgICAgIGZsb3cgIT09IGNvbm5lY3Rpb24gJiZcbiAgICAgICAgICBpc1NlcXVlbmNlRmxvdyhmbG93KSAmJlxuICAgICAgICAgIGlzKGZsb3cuc291cmNlLCAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheScpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2VxdWVuY2VGbG93cy5mb3JFYWNoKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgbW9kZWxpbmcucmVtb3ZlQ29ubmVjdGlvbihzZXF1ZW5jZUZsb3cpO1xuICAgIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUmVtb3ZlIGluY29taW5nIHNlcXVlbmNlIGZsb3dzIG9mIGV2ZW50LWJhc2VkIHRhcmdldHMgd2hlbiByZXBsYWNpbmcgc291cmNlXG4gICAqIHdpdGggZXZlbnQtYmFzZWQgZ2F0ZXdheS5cbiAgICovXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlO1xuXG4gICAgaWYgKCFpcyhuZXdTaGFwZSwgJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRzID0gbmV3U2hhcGUub3V0Z29pbmcuZmlsdGVyKGlzU2VxdWVuY2VGbG93KVxuICAgICAgLnJlZHVjZShmdW5jdGlvbih0YXJnZXRzLCBzZXF1ZW5jZUZsb3cpIHtcbiAgICAgICAgaWYgKCF0YXJnZXRzLmluY2x1ZGVzKHNlcXVlbmNlRmxvdy50YXJnZXQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldHMuY29uY2F0KHNlcXVlbmNlRmxvdy50YXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldHM7XG4gICAgICB9LCBbXSk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICB0YXJnZXQuaW5jb21pbmcuZmlsdGVyKGlzU2VxdWVuY2VGbG93KS5mb3JFYWNoKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgICBjb25zdCBzZXF1ZW5jZUZsb3dzRnJvbU5ld1NoYXBlID0gdGFyZ2V0LmluY29taW5nLmZpbHRlcihpc1NlcXVlbmNlRmxvdykuZmlsdGVyKGZ1bmN0aW9uKHNlcXVlbmNlRmxvdykge1xuICAgICAgICAgIHJldHVybiBzZXF1ZW5jZUZsb3cuc291cmNlID09PSBuZXdTaGFwZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNlcXVlbmNlRmxvdy5zb3VyY2UgIT09IG5ld1NoYXBlIHx8IHNlcXVlbmNlRmxvd3NGcm9tTmV3U2hhcGUubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oc2VxdWVuY2VGbG93KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5FdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKEV2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1NlcXVlbmNlRmxvdyhjb25uZWN0aW9uKSB7XG4gIHJldHVybiBpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/EventBasedGatewayBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/FixHoverBehavior.js":
/*!**************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/FixHoverBehavior.js ***!
\**************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FixHoverBehavior)\n/* harmony export */ });\n/* harmony import */ var _util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\r\n\r\n\r\n\r\n/**\r\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\r\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\r\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\r\n */\r\n\r\nvar HIGH_PRIORITY = 1500;\r\nvar HIGHEST_PRIORITY = 2000;\r\n\r\n\r\n/**\r\n * Correct hover targets in certain situations to improve diagram interaction.\r\n *\r\n * @param {ElementRegistry} elementRegistry\r\n * @param {EventBus} eventBus\r\n * @param {Canvas} canvas\r\n */\r\nfunction FixHoverBehavior(elementRegistry, eventBus, canvas) {\r\n\r\n eventBus.on([\r\n 'create.hover',\r\n 'create.move',\r\n 'create.out',\r\n 'create.end',\r\n 'shape.move.hover',\r\n 'shape.move.move',\r\n 'shape.move.out',\r\n 'shape.move.end'\r\n ], HIGH_PRIORITY, function(event) {\r\n var context = event.context,\r\n shape = context.shape || event.shape,\r\n hover = event.hover;\r\n\r\n // ensure elements are not dropped onto a bpmn:Lane but onto\r\n // the underlying bpmn:Participant\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(hover, 'bpmn:Lane') && !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(shape, [ 'bpmn:Lane', 'bpmn:Participant' ])) {\r\n event.hover = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.getLanesRoot)(hover);\r\n event.hoverGfx = elementRegistry.getGraphics(event.hover);\r\n }\r\n\r\n var rootElement = canvas.getRootElement();\r\n\r\n // ensure bpmn:Group and label elements are dropped\r\n // always onto the root\r\n if (hover !== rootElement && (shape.labelTarget || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.isAny)(shape, [ 'bpmn:Group', 'bpmn:TextAnnotation' ]))) {\r\n event.hover = rootElement;\r\n event.hoverGfx = elementRegistry.getGraphics(event.hover);\r\n }\r\n });\r\n\r\n eventBus.on([\r\n 'connect.hover',\r\n 'connect.out',\r\n 'connect.end',\r\n 'connect.cleanup',\r\n 'global-connect.hover',\r\n 'global-connect.out',\r\n 'global-connect.end',\r\n 'global-connect.cleanup'\r\n ], HIGH_PRIORITY, function(event) {\r\n var hover = event.hover;\r\n\r\n // ensure connections start/end on bpmn:Participant,\r\n // not the underlying bpmn:Lane\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(hover, 'bpmn:Lane')) {\r\n event.hover = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.getLanesRoot)(hover) || hover;\r\n event.hoverGfx = elementRegistry.getGraphics(event.hover);\r\n }\r\n });\r\n\r\n\r\n eventBus.on([\r\n 'bendpoint.move.hover'\r\n ], HIGH_PRIORITY, function(event) {\r\n var context = event.context,\r\n hover = event.hover,\r\n type = context.type;\r\n\r\n // ensure reconnect start/end on bpmn:Participant,\r\n // not the underlying bpmn:Lane\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(hover, 'bpmn:Lane') && /reconnect/.test(type)) {\r\n event.hover = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.getLanesRoot)(hover) || hover;\r\n event.hoverGfx = elementRegistry.getGraphics(event.hover);\r\n }\r\n });\r\n\r\n\r\n eventBus.on([\r\n 'connect.start'\r\n ], HIGH_PRIORITY, function(event) {\r\n var context = event.context,\r\n start = context.start;\r\n\r\n // ensure connect start on bpmn:Participant,\r\n // not the underlying bpmn:Lane\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(start, 'bpmn:Lane')) {\r\n context.start = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.getLanesRoot)(start) || start;\r\n }\r\n });\r\n\r\n\r\n // allow movement of participants from lanes\r\n eventBus.on('shape.move.start', HIGHEST_PRIORITY, function(event) {\r\n var shape = event.shape;\r\n\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:Lane')) {\r\n event.shape = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.getLanesRoot)(shape) || shape;\r\n }\r\n });\r\n\r\n // ensure lanes aren't resized without their parent participant when using\r\n // space tool\r\n eventBus.on('spaceTool.move', HIGHEST_PRIORITY, function(event) {\r\n var hover = event.hover;\r\n\r\n if (hover && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(hover, 'bpmn:Lane')) {\r\n event.hover = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.getLanesRoot)(hover);\r\n }\r\n });\r\n\r\n}\r\n\r\nFixHoverBehavior.$inject = [\r\n 'elementRegistry',\r\n 'eventBus',\r\n 'canvas'\r\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9GaXhIb3ZlckJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFnRDtBQUNoRDtBQUNvRDtBQUNwRDtBQUNBO0FBQ0EsYUFBYSx1REFBdUQ7QUFDcEUsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSw4Q0FBOEM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbURBQUUseUJBQXlCLHNEQUFLO0FBQ3hDLG9CQUFvQiw0REFBWTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxzREFBSztBQUM1RDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxtREFBRTtBQUNWLG9CQUFvQiw0REFBWTtBQUNoQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFFO0FBQ1Ysb0JBQW9CLDREQUFZO0FBQ2hDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1EQUFFO0FBQ1Ysc0JBQXNCLDREQUFZO0FBQ2xDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsbURBQUU7QUFDVixvQkFBb0IsNERBQVk7QUFDaEM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1EQUFFO0FBQ25CLG9CQUFvQiw0REFBWTtBQUNoQztBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvRml4SG92ZXJCZWhhdmlvci5qcz9mODIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExhbmVzUm9vdCB9IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXMsIGlzQW55IH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudFJlZ2lzdHJ5JykuZGVmYXVsdH0gRWxlbWVudFJlZ2lzdHJ5XHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0NhbnZhcycpLmRlZmF1bHR9IENhbnZhc1xyXG4gKi9cclxuXHJcbnZhciBISUdIX1BSSU9SSVRZID0gMTUwMDtcclxudmFyIEhJR0hFU1RfUFJJT1JJVFkgPSAyMDAwO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb3JyZWN0IGhvdmVyIHRhcmdldHMgaW4gY2VydGFpbiBzaXR1YXRpb25zIHRvIGltcHJvdmUgZGlhZ3JhbSBpbnRlcmFjdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGaXhIb3ZlckJlaGF2aW9yKGVsZW1lbnRSZWdpc3RyeSwgZXZlbnRCdXMsIGNhbnZhcykge1xyXG5cclxuICBldmVudEJ1cy5vbihbXHJcbiAgICAnY3JlYXRlLmhvdmVyJyxcclxuICAgICdjcmVhdGUubW92ZScsXHJcbiAgICAnY3JlYXRlLm91dCcsXHJcbiAgICAnY3JlYXRlLmVuZCcsXHJcbiAgICAnc2hhcGUubW92ZS5ob3ZlcicsXHJcbiAgICAnc2hhcGUubW92ZS5tb3ZlJyxcclxuICAgICdzaGFwZS5tb3ZlLm91dCcsXHJcbiAgICAnc2hhcGUubW92ZS5lbmQnXHJcbiAgXSwgSElHSF9QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcclxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUgfHwgZXZlbnQuc2hhcGUsXHJcbiAgICAgICAgaG92ZXIgPSBldmVudC5ob3ZlcjtcclxuXHJcbiAgICAvLyBlbnN1cmUgZWxlbWVudHMgYXJlIG5vdCBkcm9wcGVkIG9udG8gYSBicG1uOkxhbmUgYnV0IG9udG9cclxuICAgIC8vIHRoZSB1bmRlcmx5aW5nIGJwbW46UGFydGljaXBhbnRcclxuICAgIGlmIChpcyhob3ZlciwgJ2JwbW46TGFuZScpICYmICFpc0FueShzaGFwZSwgWyAnYnBtbjpMYW5lJywgJ2JwbW46UGFydGljaXBhbnQnIF0pKSB7XHJcbiAgICAgIGV2ZW50LmhvdmVyID0gZ2V0TGFuZXNSb290KGhvdmVyKTtcclxuICAgICAgZXZlbnQuaG92ZXJHZnggPSBlbGVtZW50UmVnaXN0cnkuZ2V0R3JhcGhpY3MoZXZlbnQuaG92ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByb290RWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xyXG5cclxuICAgIC8vIGVuc3VyZSBicG1uOkdyb3VwIGFuZCBsYWJlbCBlbGVtZW50cyBhcmUgZHJvcHBlZFxyXG4gICAgLy8gYWx3YXlzIG9udG8gdGhlIHJvb3RcclxuICAgIGlmIChob3ZlciAhPT0gcm9vdEVsZW1lbnQgJiYgKHNoYXBlLmxhYmVsVGFyZ2V0IHx8IGlzQW55KHNoYXBlLCBbICdicG1uOkdyb3VwJywgJ2JwbW46VGV4dEFubm90YXRpb24nIF0pKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IHJvb3RFbGVtZW50O1xyXG4gICAgICBldmVudC5ob3ZlckdmeCA9IGVsZW1lbnRSZWdpc3RyeS5nZXRHcmFwaGljcyhldmVudC5ob3Zlcik7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjb25uZWN0LmhvdmVyJyxcclxuICAgICdjb25uZWN0Lm91dCcsXHJcbiAgICAnY29ubmVjdC5lbmQnLFxyXG4gICAgJ2Nvbm5lY3QuY2xlYW51cCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuaG92ZXInLFxyXG4gICAgJ2dsb2JhbC1jb25uZWN0Lm91dCcsXHJcbiAgICAnZ2xvYmFsLWNvbm5lY3QuZW5kJyxcclxuICAgICdnbG9iYWwtY29ubmVjdC5jbGVhbnVwJ1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgaG92ZXIgPSBldmVudC5ob3ZlcjtcclxuXHJcbiAgICAvLyBlbnN1cmUgY29ubmVjdGlvbnMgc3RhcnQvZW5kIG9uIGJwbW46UGFydGljaXBhbnQsXHJcbiAgICAvLyBub3QgdGhlIHVuZGVybHlpbmcgYnBtbjpMYW5lXHJcbiAgICBpZiAoaXMoaG92ZXIsICdicG1uOkxhbmUnKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IGdldExhbmVzUm9vdChob3ZlcikgfHwgaG92ZXI7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdiZW5kcG9pbnQubW92ZS5ob3ZlcidcclxuICBdLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxyXG4gICAgICAgIGhvdmVyID0gZXZlbnQuaG92ZXIsXHJcbiAgICAgICAgdHlwZSA9IGNvbnRleHQudHlwZTtcclxuXHJcbiAgICAvLyBlbnN1cmUgcmVjb25uZWN0IHN0YXJ0L2VuZCBvbiBicG1uOlBhcnRpY2lwYW50LFxyXG4gICAgLy8gbm90IHRoZSB1bmRlcmx5aW5nIGJwbW46TGFuZVxyXG4gICAgaWYgKGlzKGhvdmVyLCAnYnBtbjpMYW5lJykgJiYgL3JlY29ubmVjdC8udGVzdCh0eXBlKSkge1xyXG4gICAgICBldmVudC5ob3ZlciA9IGdldExhbmVzUm9vdChob3ZlcikgfHwgaG92ZXI7XHJcbiAgICAgIGV2ZW50LmhvdmVyR2Z4ID0gZWxlbWVudFJlZ2lzdHJ5LmdldEdyYXBoaWNzKGV2ZW50LmhvdmVyKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGV2ZW50QnVzLm9uKFtcclxuICAgICdjb25uZWN0LnN0YXJ0J1xyXG4gIF0sIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXHJcbiAgICAgICAgc3RhcnQgPSBjb250ZXh0LnN0YXJ0O1xyXG5cclxuICAgIC8vIGVuc3VyZSBjb25uZWN0IHN0YXJ0IG9uIGJwbW46UGFydGljaXBhbnQsXHJcbiAgICAvLyBub3QgdGhlIHVuZGVybHlpbmcgYnBtbjpMYW5lXHJcbiAgICBpZiAoaXMoc3RhcnQsICdicG1uOkxhbmUnKSkge1xyXG4gICAgICBjb250ZXh0LnN0YXJ0ID0gZ2V0TGFuZXNSb290KHN0YXJ0KSB8fCBzdGFydDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGFsbG93IG1vdmVtZW50IG9mIHBhcnRpY2lwYW50cyBmcm9tIGxhbmVzXHJcbiAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUuc3RhcnQnLCBISUdIRVNUX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIHNoYXBlID0gZXZlbnQuc2hhcGU7XHJcblxyXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykpIHtcclxuICAgICAgZXZlbnQuc2hhcGUgPSBnZXRMYW5lc1Jvb3Qoc2hhcGUpIHx8IHNoYXBlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvLyBlbnN1cmUgbGFuZXMgYXJlbid0IHJlc2l6ZWQgd2l0aG91dCB0aGVpciBwYXJlbnQgcGFydGljaXBhbnQgd2hlbiB1c2luZ1xyXG4gIC8vIHNwYWNlIHRvb2xcclxuICBldmVudEJ1cy5vbignc3BhY2VUb29sLm1vdmUnLCBISUdIRVNUX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgdmFyIGhvdmVyID0gZXZlbnQuaG92ZXI7XHJcblxyXG4gICAgaWYgKGhvdmVyICYmIGlzKGhvdmVyLCAnYnBtbjpMYW5lJykpIHtcclxuICAgICAgZXZlbnQuaG92ZXIgPSBnZXRMYW5lc1Jvb3QoaG92ZXIpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxufVxyXG5cclxuRml4SG92ZXJCZWhhdmlvci4kaW5qZWN0ID0gW1xyXG4gICdlbGVtZW50UmVnaXN0cnknLFxyXG4gICdldmVudEJ1cycsXHJcbiAgJ2NhbnZhcydcclxuXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/FixHoverBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/GroupBehavior.js":
/*!***********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/GroupBehavior.js ***!
\***********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ GroupBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_CategoryUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/CategoryUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/CategoryUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('../BpmnFactory').default} BpmnFactory\n * @typedef {import('../../../Modeler').default} Modeler\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('didi').Injector} Injector\n * @typedef {import('../../copy-paste/ModdleCopy').default} ModdleCopy\n *\n * @typedef {import('../../../model/Types').Element} Element\n * @typedef {import('../../../model/Types').Shape} Shape\n *\n * @typedef {import('diagram-js/lib/util/Types').DirectionTRBL} DirectionTRBL\n */\n\nvar LOWER_PRIORITY = 770;\n\n\n/**\n * BPMN specific group behavior.\n *\n * @param {BpmnFactory} bpmnFactory\n * @param {Modeler} bpmnjs\n * @param {ElementRegistry} elementRegistry\n * @param {EventBus} eventBus\n * @param {Injector} injector\n * @param {ModdleCopy} moddleCopy\n */\nfunction GroupBehavior(\n bpmnFactory,\n bpmnjs,\n elementRegistry,\n eventBus,\n injector,\n moddleCopy\n) {\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n\n /**\n * Returns all group element in the current registry.\n *\n * @return {Shape[]}\n */\n function getGroupElements() {\n return elementRegistry.filter(function(e) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(e, 'bpmn:Group');\n });\n }\n\n /**\n * Returns true if given category is referenced in one of the given elements.\n *\n * @param {Element[]} elements\n * @param {ModdleElement} category\n *\n * @return {boolean}\n */\n function isReferencedCategory(elements, category) {\n return elements.some(function(element) {\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\n\n var _category = businessObject.categoryValueRef && businessObject.categoryValueRef.$parent;\n\n return _category === category;\n });\n }\n\n /**\n * Returns true if given categoryValue is referenced in one of the given elements.\n *\n * @param {Element[]} elements\n * @param {ModdleElement} categoryValue\n *\n * @return {boolean}\n */\n function isReferencedCategoryValue(elements, categoryValue) {\n return elements.some(function(element) {\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\n\n return businessObject.categoryValueRef === categoryValue;\n });\n }\n\n /**\n * Remove category value unless it is still referenced.\n *\n * @param {ModdleElement} categoryValue\n * @param {ModdleElement} category\n * @param {ModdleElement} businessObject\n */\n function removeCategoryValue(categoryValue, category, businessObject) {\n\n var groups = getGroupElements().filter(function(element) {\n return element.businessObject !== businessObject;\n });\n\n if (category && !isReferencedCategory(groups, category)) {\n (0,_util_CategoryUtil__WEBPACK_IMPORTED_MODULE_2__.unlinkCategory)(category);\n }\n\n if (categoryValue && !isReferencedCategoryValue(groups, categoryValue)) {\n (0,_util_CategoryUtil__WEBPACK_IMPORTED_MODULE_2__.unlinkCategoryValue)(categoryValue);\n }\n }\n\n /**\n * Add category value.\n *\n * @param {ModdleElement} categoryValue\n * @param {ModdleElement} category\n *\n * @return {ModdleElement}\n */\n function addCategoryValue(categoryValue, category) {\n return (0,_util_CategoryUtil__WEBPACK_IMPORTED_MODULE_2__.linkCategoryValue)(categoryValue, category, bpmnjs.getDefinitions());\n }\n\n function setCategoryValue(element, context) {\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element),\n categoryValue = businessObject.categoryValueRef;\n\n if (!categoryValue) {\n categoryValue =\n businessObject.categoryValueRef =\n context.categoryValue = (\n context.categoryValue || (0,_util_CategoryUtil__WEBPACK_IMPORTED_MODULE_2__.createCategoryValue)(bpmnFactory)\n );\n }\n\n var category = categoryValue.$parent;\n\n if (!category) {\n category =\n categoryValue.$parent =\n context.category = (\n context.category || (0,_util_CategoryUtil__WEBPACK_IMPORTED_MODULE_2__.createCategory)(bpmnFactory)\n );\n }\n\n addCategoryValue(categoryValue, category, bpmnjs.getDefinitions());\n }\n\n function unsetCategoryValue(element, context) {\n var category = context.category,\n categoryValue = context.categoryValue,\n businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\n\n if (categoryValue) {\n businessObject.categoryValueRef = null;\n\n removeCategoryValue(categoryValue, category, businessObject);\n } else {\n removeCategoryValue(null, businessObject.categoryValueRef.$parent, businessObject);\n }\n }\n\n\n // ensure category + value exist before label editing\n\n this.execute('label.create', function(event) {\n var context = event.context,\n labelTarget = context.labelTarget;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(labelTarget, 'bpmn:Group')) {\n return;\n }\n\n setCategoryValue(labelTarget, context);\n });\n\n this.revert('label.create', function(event) {\n var context = event.context,\n labelTarget = context.labelTarget;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(labelTarget, 'bpmn:Group')) {\n return;\n }\n\n unsetCategoryValue(labelTarget, context);\n });\n\n\n // remove referenced category + value when group was deleted\n\n this.execute('shape.delete', function(event) {\n\n var context = event.context,\n shape = context.shape,\n businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape);\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Group') || shape.labelTarget) {\n return;\n }\n\n var categoryValue = context.categoryValue = businessObject.categoryValueRef,\n category;\n\n if (categoryValue) {\n category = context.category = categoryValue.$parent;\n\n removeCategoryValue(categoryValue, category, businessObject);\n\n businessObject.categoryValueRef = null;\n }\n });\n\n this.reverted('shape.delete', function(event) {\n\n var context = event.context,\n shape = context.shape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Group') || shape.labelTarget) {\n return;\n }\n\n var category = context.category,\n categoryValue = context.categoryValue,\n businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape);\n\n if (categoryValue) {\n businessObject.categoryValueRef = categoryValue;\n\n addCategoryValue(categoryValue, category);\n }\n });\n\n\n // create new category + value when group was created\n\n this.execute('shape.create', function(event) {\n var context = event.context,\n shape = context.shape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Group') || shape.labelTarget) {\n return;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape).categoryValueRef) {\n setCategoryValue(shape, context);\n }\n });\n\n this.reverted('shape.create', function(event) {\n\n var context = event.context,\n shape = context.shape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Group') || shape.labelTarget) {\n return;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape).categoryValueRef) {\n unsetCategoryValue(shape, context);\n }\n });\n\n\n // copy + paste categoryValueRef with group\n\n function copy(bo, clone) {\n var targetBo = bpmnFactory.create(bo.$type);\n\n return moddleCopy.copyElement(bo, targetBo, null, clone);\n }\n\n eventBus.on('copyPaste.copyElement', LOWER_PRIORITY, function(context) {\n var descriptor = context.descriptor,\n element = context.element;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:Group') || element.labelTarget) {\n return;\n }\n\n var groupBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element);\n\n if (groupBo.categoryValueRef) {\n\n var categoryValue = groupBo.categoryValueRef;\n\n descriptor.categoryValue = copy(categoryValue, true);\n\n if (categoryValue.$parent) {\n descriptor.category = copy(categoryValue.$parent, true);\n }\n }\n });\n\n eventBus.on('copyPaste.pasteElement', LOWER_PRIORITY, function(context) {\n var descriptor = context.descriptor,\n businessObject = descriptor.businessObject,\n categoryValue = descriptor.categoryValue,\n category = descriptor.category;\n\n if (categoryValue) {\n categoryValue = businessObject.categoryValueRef = copy(categoryValue);\n }\n\n if (category) {\n categoryValue.$parent = copy(category);\n }\n\n delete descriptor.category;\n delete descriptor.categoryValue;\n });\n\n}\n\nGroupBehavior.$inject = [\n 'bpmnFactory',\n 'bpmnjs',\n 'elementRegistry',\n 'eventBus',\n 'injector',\n 'moddleCopy'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(GroupBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Hcm91cEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXdDOztBQUVtQzs7QUFLMUM7O0FBUUo7O0FBRTdCO0FBQ0EsYUFBYSxrQ0FBa0M7QUFDL0MsYUFBYSxvQ0FBb0M7QUFDakQsYUFBYSx1REFBdUQ7QUFDcEUsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSx5QkFBeUI7QUFDdEMsYUFBYSwrQ0FBK0M7QUFDNUQ7QUFDQSxhQUFhLHdDQUF3QztBQUNyRCxhQUFhLHNDQUFzQztBQUNuRDtBQUNBLGFBQWEsbURBQW1EO0FBQ2hFOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsV0FBVyxZQUFZO0FBQ3ZCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixpRkFBa0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxhQUFhLG1EQUFFO0FBQ2YsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsV0FBVztBQUN4QixhQUFhLGVBQWU7QUFDNUI7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGtFQUFpQjs7QUFFNUM7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxXQUFXO0FBQ3hCLGFBQWEsZUFBZTtBQUM1QjtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsa0VBQWlCOztBQUU1QztBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGVBQWU7QUFDNUIsYUFBYSxlQUFlO0FBQzVCLGFBQWEsZUFBZTtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsTUFBTSxrRUFBYztBQUNwQjs7QUFFQTtBQUNBLE1BQU0sdUVBQW1CO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxlQUFlO0FBQzVCLGFBQWEsZUFBZTtBQUM1QjtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsV0FBVyxxRUFBaUI7QUFDNUI7O0FBRUE7QUFDQSx5QkFBeUIsa0VBQWlCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHVFQUFtQjtBQUNwRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGtFQUFjO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsa0VBQWlCOztBQUUxQztBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVMsbURBQUU7QUFDWDtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxtREFBRTtBQUNYO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLGtFQUFpQjs7QUFFMUMsU0FBUyxtREFBRTtBQUNYO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7O0FBRUEsU0FBUyxtREFBRTtBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlCQUF5QixrRUFBaUI7O0FBRTFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLG1EQUFFO0FBQ1g7QUFDQTs7QUFFQSxRQUFRLGtFQUFpQjtBQUN6QjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBLFNBQVMsbURBQUU7QUFDWDtBQUNBOztBQUVBLFFBQVEsa0VBQWlCO0FBQ3pCO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVMsbURBQUU7QUFDWDtBQUNBOztBQUVBLGtCQUFrQixrRUFBaUI7O0FBRW5DOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0REFBUSxnQkFBZ0IsaUZBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvR3JvdXBCZWhhdmlvci5qcz80N2RjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZUNhdGVnb3J5LFxuICBjcmVhdGVDYXRlZ29yeVZhbHVlLFxuICBsaW5rQ2F0ZWdvcnlWYWx1ZSxcbiAgdW5saW5rQ2F0ZWdvcnksXG4gIHVubGlua0NhdGVnb3J5VmFsdWVcbn0gZnJvbSAnLi91dGlsL0NhdGVnb3J5VXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vQnBtbkZhY3RvcnknKS5kZWZhdWx0fSBCcG1uRmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vTW9kZWxlcicpLmRlZmF1bHR9IE1vZGVsZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudFJlZ2lzdHJ5JykuZGVmYXVsdH0gRWxlbWVudFJlZ2lzdHJ5XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpZGknKS5JbmplY3Rvcn0gSW5qZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL2NvcHktcGFzdGUvTW9kZGxlQ29weScpLmRlZmF1bHR9IE1vZGRsZUNvcHlcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi9tb2RlbC9UeXBlcycpLkVsZW1lbnR9IEVsZW1lbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL21vZGVsL1R5cGVzJykuU2hhcGV9IFNoYXBlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLkRpcmVjdGlvblRSQkx9IERpcmVjdGlvblRSQkxcbiAqL1xuXG52YXIgTE9XRVJfUFJJT1JJVFkgPSA3NzA7XG5cblxuLyoqXG4gKiBCUE1OIHNwZWNpZmljIGdyb3VwIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge01vZGVsZXJ9IGJwbW5qc1xuICogQHBhcmFtIHtFbGVtZW50UmVnaXN0cnl9IGVsZW1lbnRSZWdpc3RyeVxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKiBAcGFyYW0ge01vZGRsZUNvcHl9IG1vZGRsZUNvcHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3JvdXBCZWhhdmlvcihcbiAgICBicG1uRmFjdG9yeSxcbiAgICBicG1uanMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIGV2ZW50QnVzLFxuICAgIGluamVjdG9yLFxuICAgIG1vZGRsZUNvcHlcbikge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgZ3JvdXAgZWxlbWVudCBpbiB0aGUgY3VycmVudCByZWdpc3RyeS5cbiAgICpcbiAgICogQHJldHVybiB7U2hhcGVbXX1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEdyb3VwRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRSZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGlzKGUsICdicG1uOkdyb3VwJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGdpdmVuIGNhdGVnb3J5IGlzIHJlZmVyZW5jZWQgaW4gb25lIG9mIHRoZSBnaXZlbiBlbGVtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50W119IGVsZW1lbnRzXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlcbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGlzUmVmZXJlbmNlZENhdGVnb3J5KGVsZW1lbnRzLCBjYXRlZ29yeSkge1xuICAgIHJldHVybiBlbGVtZW50cy5zb21lKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgICB2YXIgX2NhdGVnb3J5ID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZiAmJiBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmLiRwYXJlbnQ7XG5cbiAgICAgIHJldHVybiBfY2F0ZWdvcnkgPT09IGNhdGVnb3J5O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBjYXRlZ29yeVZhbHVlIGlzIHJlZmVyZW5jZWQgaW4gb25lIG9mIHRoZSBnaXZlbiBlbGVtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50W119IGVsZW1lbnRzXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlWYWx1ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNSZWZlcmVuY2VkQ2F0ZWdvcnlWYWx1ZShlbGVtZW50cywgY2F0ZWdvcnlWYWx1ZSkge1xuICAgIHJldHVybiBlbGVtZW50cy5zb21lKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZiA9PT0gY2F0ZWdvcnlWYWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgY2F0ZWdvcnkgdmFsdWUgdW5sZXNzIGl0IGlzIHN0aWxsIHJlZmVyZW5jZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlWYWx1ZVxuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNhdGVnb3J5XG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYnVzaW5lc3NPYmplY3RcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUNhdGVnb3J5VmFsdWUoY2F0ZWdvcnlWYWx1ZSwgY2F0ZWdvcnksIGJ1c2luZXNzT2JqZWN0KSB7XG5cbiAgICB2YXIgZ3JvdXBzID0gZ2V0R3JvdXBFbGVtZW50cygpLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5idXNpbmVzc09iamVjdCAhPT0gYnVzaW5lc3NPYmplY3Q7XG4gICAgfSk7XG5cbiAgICBpZiAoY2F0ZWdvcnkgJiYgIWlzUmVmZXJlbmNlZENhdGVnb3J5KGdyb3VwcywgY2F0ZWdvcnkpKSB7XG4gICAgICB1bmxpbmtDYXRlZ29yeShjYXRlZ29yeSk7XG4gICAgfVxuXG4gICAgaWYgKGNhdGVnb3J5VmFsdWUgJiYgIWlzUmVmZXJlbmNlZENhdGVnb3J5VmFsdWUoZ3JvdXBzLCBjYXRlZ29yeVZhbHVlKSkge1xuICAgICAgdW5saW5rQ2F0ZWdvcnlWYWx1ZShjYXRlZ29yeVZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNhdGVnb3J5IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNhdGVnb3J5VmFsdWVcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBjYXRlZ29yeVxuICAgKlxuICAgKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICAgKi9cbiAgZnVuY3Rpb24gYWRkQ2F0ZWdvcnlWYWx1ZShjYXRlZ29yeVZhbHVlLCBjYXRlZ29yeSkge1xuICAgIHJldHVybiBsaW5rQ2F0ZWdvcnlWYWx1ZShjYXRlZ29yeVZhbHVlLCBjYXRlZ29yeSwgYnBtbmpzLmdldERlZmluaXRpb25zKCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0Q2F0ZWdvcnlWYWx1ZShlbGVtZW50LCBjb250ZXh0KSB7XG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICAgIGNhdGVnb3J5VmFsdWUgPSBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmO1xuXG4gICAgaWYgKCFjYXRlZ29yeVZhbHVlKSB7XG4gICAgICBjYXRlZ29yeVZhbHVlID1cbiAgICAgIGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYgPVxuICAgICAgY29udGV4dC5jYXRlZ29yeVZhbHVlID0gKFxuICAgICAgICBjb250ZXh0LmNhdGVnb3J5VmFsdWUgfHwgY3JlYXRlQ2F0ZWdvcnlWYWx1ZShicG1uRmFjdG9yeSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGNhdGVnb3J5ID0gY2F0ZWdvcnlWYWx1ZS4kcGFyZW50O1xuXG4gICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgY2F0ZWdvcnkgPVxuICAgICAgY2F0ZWdvcnlWYWx1ZS4kcGFyZW50ID1cbiAgICAgIGNvbnRleHQuY2F0ZWdvcnkgPSAoXG4gICAgICAgIGNvbnRleHQuY2F0ZWdvcnkgfHwgY3JlYXRlQ2F0ZWdvcnkoYnBtbkZhY3RvcnkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGFkZENhdGVnb3J5VmFsdWUoY2F0ZWdvcnlWYWx1ZSwgY2F0ZWdvcnksIGJwbW5qcy5nZXREZWZpbml0aW9ucygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2V0Q2F0ZWdvcnlWYWx1ZShlbGVtZW50LCBjb250ZXh0KSB7XG4gICAgdmFyIGNhdGVnb3J5ID0gY29udGV4dC5jYXRlZ29yeSxcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZSA9IGNvbnRleHQuY2F0ZWdvcnlWYWx1ZSxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgIGlmIChjYXRlZ29yeVZhbHVlKSB7XG4gICAgICBidXNpbmVzc09iamVjdC5jYXRlZ29yeVZhbHVlUmVmID0gbnVsbDtcblxuICAgICAgcmVtb3ZlQ2F0ZWdvcnlWYWx1ZShjYXRlZ29yeVZhbHVlLCBjYXRlZ29yeSwgYnVzaW5lc3NPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVDYXRlZ29yeVZhbHVlKG51bGwsIGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYuJHBhcmVudCwgYnVzaW5lc3NPYmplY3QpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gZW5zdXJlIGNhdGVnb3J5ICsgdmFsdWUgZXhpc3QgYmVmb3JlIGxhYmVsIGVkaXRpbmdcblxuICB0aGlzLmV4ZWN1dGUoJ2xhYmVsLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBsYWJlbFRhcmdldCA9IGNvbnRleHQubGFiZWxUYXJnZXQ7XG5cbiAgICBpZiAoIWlzKGxhYmVsVGFyZ2V0LCAnYnBtbjpHcm91cCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0Q2F0ZWdvcnlWYWx1ZShsYWJlbFRhcmdldCwgY29udGV4dCk7XG4gIH0pO1xuXG4gIHRoaXMucmV2ZXJ0KCdsYWJlbC5jcmVhdGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgbGFiZWxUYXJnZXQgPSBjb250ZXh0LmxhYmVsVGFyZ2V0O1xuXG4gICAgaWYgKCFpcyhsYWJlbFRhcmdldCwgJ2JwbW46R3JvdXAnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVuc2V0Q2F0ZWdvcnlWYWx1ZShsYWJlbFRhcmdldCwgY29udGV4dCk7XG4gIH0pO1xuXG5cbiAgLy8gcmVtb3ZlIHJlZmVyZW5jZWQgY2F0ZWdvcnkgKyB2YWx1ZSB3aGVuIGdyb3VwIHdhcyBkZWxldGVkXG5cbiAgdGhpcy5leGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSB8fCBzaGFwZS5sYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjYXRlZ29yeVZhbHVlID0gY29udGV4dC5jYXRlZ29yeVZhbHVlID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZixcbiAgICAgICAgY2F0ZWdvcnk7XG5cbiAgICBpZiAoY2F0ZWdvcnlWYWx1ZSkge1xuICAgICAgY2F0ZWdvcnkgPSBjb250ZXh0LmNhdGVnb3J5ID0gY2F0ZWdvcnlWYWx1ZS4kcGFyZW50O1xuXG4gICAgICByZW1vdmVDYXRlZ29yeVZhbHVlKGNhdGVnb3J5VmFsdWUsIGNhdGVnb3J5LCBidXNpbmVzc09iamVjdCk7XG5cbiAgICAgIGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYgPSBudWxsO1xuICAgIH1cbiAgfSk7XG5cbiAgdGhpcy5yZXZlcnRlZCgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46R3JvdXAnKSB8fCBzaGFwZS5sYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjYXRlZ29yeSA9IGNvbnRleHQuY2F0ZWdvcnksXG4gICAgICAgIGNhdGVnb3J5VmFsdWUgPSBjb250ZXh0LmNhdGVnb3J5VmFsdWUsXG4gICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpO1xuXG4gICAgaWYgKGNhdGVnb3J5VmFsdWUpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0LmNhdGVnb3J5VmFsdWVSZWYgPSBjYXRlZ29yeVZhbHVlO1xuXG4gICAgICBhZGRDYXRlZ29yeVZhbHVlKGNhdGVnb3J5VmFsdWUsIGNhdGVnb3J5KTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gY3JlYXRlIG5ldyBjYXRlZ29yeSArIHZhbHVlIHdoZW4gZ3JvdXAgd2FzIGNyZWF0ZWRcblxuICB0aGlzLmV4ZWN1dGUoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpHcm91cCcpIHx8IHNoYXBlLmxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGdldEJ1c2luZXNzT2JqZWN0KHNoYXBlKS5jYXRlZ29yeVZhbHVlUmVmKSB7XG4gICAgICBzZXRDYXRlZ29yeVZhbHVlKHNoYXBlLCBjb250ZXh0KTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOkdyb3VwJykgfHwgc2hhcGUubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLmNhdGVnb3J5VmFsdWVSZWYpIHtcbiAgICAgIHVuc2V0Q2F0ZWdvcnlWYWx1ZShzaGFwZSwgY29udGV4dCk7XG4gICAgfVxuICB9KTtcblxuXG4gIC8vIGNvcHkgKyBwYXN0ZSBjYXRlZ29yeVZhbHVlUmVmIHdpdGggZ3JvdXBcblxuICBmdW5jdGlvbiBjb3B5KGJvLCBjbG9uZSkge1xuICAgIHZhciB0YXJnZXRCbyA9IGJwbW5GYWN0b3J5LmNyZWF0ZShiby4kdHlwZSk7XG5cbiAgICByZXR1cm4gbW9kZGxlQ29weS5jb3B5RWxlbWVudChibywgdGFyZ2V0Qm8sIG51bGwsIGNsb25lKTtcbiAgfVxuXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUuY29weUVsZW1lbnQnLCBMT1dFUl9QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gY29udGV4dC5kZXNjcmlwdG9yLFxuICAgICAgICBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50O1xuXG4gICAgaWYgKCFpcyhlbGVtZW50LCAnYnBtbjpHcm91cCcpIHx8IGVsZW1lbnQubGFiZWxUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBCbyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgaWYgKGdyb3VwQm8uY2F0ZWdvcnlWYWx1ZVJlZikge1xuXG4gICAgICB2YXIgY2F0ZWdvcnlWYWx1ZSA9IGdyb3VwQm8uY2F0ZWdvcnlWYWx1ZVJlZjtcblxuICAgICAgZGVzY3JpcHRvci5jYXRlZ29yeVZhbHVlID0gY29weShjYXRlZ29yeVZhbHVlLCB0cnVlKTtcblxuICAgICAgaWYgKGNhdGVnb3J5VmFsdWUuJHBhcmVudCkge1xuICAgICAgICBkZXNjcmlwdG9yLmNhdGVnb3J5ID0gY29weShjYXRlZ29yeVZhbHVlLiRwYXJlbnQsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5wYXN0ZUVsZW1lbnQnLCBMT1dFUl9QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gY29udGV4dC5kZXNjcmlwdG9yLFxuICAgICAgICBidXNpbmVzc09iamVjdCA9IGRlc2NyaXB0b3IuYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIGNhdGVnb3J5VmFsdWUgPSBkZXNjcmlwdG9yLmNhdGVnb3J5VmFsdWUsXG4gICAgICAgIGNhdGVnb3J5ID0gZGVzY3JpcHRvci5jYXRlZ29yeTtcblxuICAgIGlmIChjYXRlZ29yeVZhbHVlKSB7XG4gICAgICBjYXRlZ29yeVZhbHVlID0gYnVzaW5lc3NPYmplY3QuY2F0ZWdvcnlWYWx1ZVJlZiA9IGNvcHkoY2F0ZWdvcnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNhdGVnb3J5KSB7XG4gICAgICBjYXRlZ29yeVZhbHVlLiRwYXJlbnQgPSBjb3B5KGNhdGVnb3J5KTtcbiAgICB9XG5cbiAgICBkZWxldGUgZGVzY3JpcHRvci5jYXRlZ29yeTtcbiAgICBkZWxldGUgZGVzY3JpcHRvci5jYXRlZ29yeVZhbHVlO1xuICB9KTtcblxufVxuXG5Hcm91cEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdicG1uRmFjdG9yeScsXG4gICdicG1uanMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGRsZUNvcHknXG5dO1xuXG5pbmhlcml0cyhHcm91cEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/GroupBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ImportDockingFix.js":
/*!**************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ImportDockingFix.js ***!
\**************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ImportDockingFix)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var _util_LineIntersect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/LineIntersect */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineIntersect.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n */\n\n/**\n * Fix broken dockings after DI imports.\n *\n * @param {EventBus} eventBus\n */\nfunction ImportDockingFix(eventBus) {\n\n function adjustDocking(startPoint, nextPoint, elementMid) {\n\n var elementTop = {\n x: elementMid.x,\n y: elementMid.y - 50\n };\n\n var elementLeft = {\n x: elementMid.x - 50,\n y: elementMid.y\n };\n\n var verticalIntersect = (0,_util_LineIntersect__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(startPoint, nextPoint, elementMid, elementTop),\n horizontalIntersect = (0,_util_LineIntersect__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(startPoint, nextPoint, elementMid, elementLeft);\n\n // original is horizontal or vertical center cross intersection\n var centerIntersect;\n\n if (verticalIntersect && horizontalIntersect) {\n if (getDistance(verticalIntersect, elementMid) > getDistance(horizontalIntersect, elementMid)) {\n centerIntersect = horizontalIntersect;\n } else {\n centerIntersect = verticalIntersect;\n }\n } else {\n centerIntersect = verticalIntersect || horizontalIntersect;\n }\n\n startPoint.original = centerIntersect;\n }\n\n function fixDockings(connection) {\n var waypoints = connection.waypoints;\n\n adjustDocking(\n waypoints[0],\n waypoints[1],\n (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.getMid)(connection.source)\n );\n\n adjustDocking(\n waypoints[waypoints.length - 1],\n waypoints[waypoints.length - 2],\n (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.getMid)(connection.target)\n );\n }\n\n eventBus.on('bpmnElement.added', function(e) {\n\n var element = e.element;\n\n if (element.waypoints) {\n fixDockings(element);\n }\n });\n}\n\nImportDockingFix.$inject = [\n 'eventBus'\n];\n\n\n// helpers //////////////////////\n\nfunction getDistance(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9JbXBvcnREb2NraW5nRml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUUwQzs7QUFFTzs7QUFFakQ7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDZTs7QUFFZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsK0RBQWE7QUFDekMsOEJBQThCLCtEQUFhOztBQUUzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sd0VBQU07QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHdFQUFNO0FBQ1o7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9JbXBvcnREb2NraW5nRml4LmpzPzYyOTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0TWlkXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IGxpbmVJbnRlcnNlY3QgZnJvbSAnLi91dGlsL0xpbmVJbnRlcnNlY3QnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICovXG5cbi8qKlxuICogRml4IGJyb2tlbiBkb2NraW5ncyBhZnRlciBESSBpbXBvcnRzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEltcG9ydERvY2tpbmdGaXgoZXZlbnRCdXMpIHtcblxuICBmdW5jdGlvbiBhZGp1c3REb2NraW5nKHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCkge1xuXG4gICAgdmFyIGVsZW1lbnRUb3AgPSB7XG4gICAgICB4OiBlbGVtZW50TWlkLngsXG4gICAgICB5OiBlbGVtZW50TWlkLnkgLSA1MFxuICAgIH07XG5cbiAgICB2YXIgZWxlbWVudExlZnQgPSB7XG4gICAgICB4OiBlbGVtZW50TWlkLnggLSA1MCxcbiAgICAgIHk6IGVsZW1lbnRNaWQueVxuICAgIH07XG5cbiAgICB2YXIgdmVydGljYWxJbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0KHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCwgZWxlbWVudFRvcCksXG4gICAgICAgIGhvcml6b250YWxJbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0KHN0YXJ0UG9pbnQsIG5leHRQb2ludCwgZWxlbWVudE1pZCwgZWxlbWVudExlZnQpO1xuXG4gICAgLy8gb3JpZ2luYWwgaXMgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjZW50ZXIgY3Jvc3MgaW50ZXJzZWN0aW9uXG4gICAgdmFyIGNlbnRlckludGVyc2VjdDtcblxuICAgIGlmICh2ZXJ0aWNhbEludGVyc2VjdCAmJiBob3Jpem9udGFsSW50ZXJzZWN0KSB7XG4gICAgICBpZiAoZ2V0RGlzdGFuY2UodmVydGljYWxJbnRlcnNlY3QsIGVsZW1lbnRNaWQpID4gZ2V0RGlzdGFuY2UoaG9yaXpvbnRhbEludGVyc2VjdCwgZWxlbWVudE1pZCkpIHtcbiAgICAgICAgY2VudGVySW50ZXJzZWN0ID0gaG9yaXpvbnRhbEludGVyc2VjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbnRlckludGVyc2VjdCA9IHZlcnRpY2FsSW50ZXJzZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjZW50ZXJJbnRlcnNlY3QgPSB2ZXJ0aWNhbEludGVyc2VjdCB8fCBob3Jpem9udGFsSW50ZXJzZWN0O1xuICAgIH1cblxuICAgIHN0YXJ0UG9pbnQub3JpZ2luYWwgPSBjZW50ZXJJbnRlcnNlY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBmaXhEb2NraW5ncyhjb25uZWN0aW9uKSB7XG4gICAgdmFyIHdheXBvaW50cyA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzO1xuXG4gICAgYWRqdXN0RG9ja2luZyhcbiAgICAgIHdheXBvaW50c1swXSxcbiAgICAgIHdheXBvaW50c1sxXSxcbiAgICAgIGdldE1pZChjb25uZWN0aW9uLnNvdXJjZSlcbiAgICApO1xuXG4gICAgYWRqdXN0RG9ja2luZyhcbiAgICAgIHdheXBvaW50c1t3YXlwb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgICB3YXlwb2ludHNbd2F5cG9pbnRzLmxlbmd0aCAtIDJdLFxuICAgICAgZ2V0TWlkKGNvbm5lY3Rpb24udGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBldmVudEJ1cy5vbignYnBtbkVsZW1lbnQuYWRkZWQnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgZWxlbWVudCA9IGUuZWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50LndheXBvaW50cykge1xuICAgICAgZml4RG9ja2luZ3MoZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuSW1wb3J0RG9ja2luZ0ZpeC4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwMS54IC0gcDIueCwgMikgKyBNYXRoLnBvdyhwMS55IC0gcDIueSwgMikpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ImportDockingFix.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/IsHorizontalFix.js":
/*!*************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/IsHorizontalFix.js ***!
\*************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ IsHorizontalFix)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n */\n\n/**\n * A component that makes sure that each created or updated\n * Pool and Lane is assigned an isHorizontal property set to true.\n *\n * @param {EventBus} eventBus\n */\nfunction IsHorizontalFix(eventBus) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n var elementTypesToUpdate = [\n 'bpmn:Participant',\n 'bpmn:Lane'\n ];\n\n this.executed([ 'shape.move', 'shape.create', 'shape.resize' ], function(event) {\n var shape = event.context.shape,\n bo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape),\n di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getDi)(shape);\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.isAny)(bo, elementTypesToUpdate)) {\n var isHorizontal = di.get('isHorizontal');\n\n if (isHorizontal === undefined) {\n isHorizontal = true;\n }\n\n // set attribute directly to avoid modeling#updateProperty side effects\n di.set('isHorizontal', isHorizontal);\n }\n });\n\n}\n\nIsHorizontalFix.$inject = [ 'eventBus' ];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(IsHorizontalFix, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Jc0hvcml6b250YWxGaXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF3Qzs7QUFFbUM7O0FBSzFDOztBQUlIOztBQUU5QjtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7O0FBRWYsRUFBRSxpRkFBa0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGtFQUFpQjtBQUM5QixhQUFhLHNEQUFLOztBQUVsQixRQUFRLHNEQUFLO0FBQ2I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUEsNERBQVEsa0JBQWtCLGlGQUFrQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0lzSG9yaXpvbnRhbEZpeC5qcz85ZjYwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBnZXREaVxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzQW55XG59IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqL1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFrZXMgc3VyZSB0aGF0IGVhY2ggY3JlYXRlZCBvciB1cGRhdGVkXG4gKiBQb29sIGFuZCBMYW5lIGlzIGFzc2lnbmVkIGFuIGlzSG9yaXpvbnRhbCBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJc0hvcml6b250YWxGaXgoZXZlbnRCdXMpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdmFyIGVsZW1lbnRUeXBlc1RvVXBkYXRlID0gW1xuICAgICdicG1uOlBhcnRpY2lwYW50JyxcbiAgICAnYnBtbjpMYW5lJ1xuICBdO1xuXG4gIHRoaXMuZXhlY3V0ZWQoWyAnc2hhcGUubW92ZScsICdzaGFwZS5jcmVhdGUnLCAnc2hhcGUucmVzaXplJyBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBzaGFwZSA9IGV2ZW50LmNvbnRleHQuc2hhcGUsXG4gICAgICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpLFxuICAgICAgICBkaSA9IGdldERpKHNoYXBlKTtcblxuICAgIGlmIChpc0FueShibywgZWxlbWVudFR5cGVzVG9VcGRhdGUpKSB7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGkuZ2V0KCdpc0hvcml6b250YWwnKTtcblxuICAgICAgaWYgKGlzSG9yaXpvbnRhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlzSG9yaXpvbnRhbCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBhdHRyaWJ1dGUgZGlyZWN0bHkgdG8gYXZvaWQgbW9kZWxpbmcjdXBkYXRlUHJvcGVydHkgc2lkZSBlZmZlY3RzXG4gICAgICBkaS5zZXQoJ2lzSG9yaXpvbnRhbCcsIGlzSG9yaXpvbnRhbCk7XG4gICAgfVxuICB9KTtcblxufVxuXG5Jc0hvcml6b250YWxGaXguJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5pbmhlcml0cyhJc0hvcml6b250YWxGaXgsIENvbW1hbmRJbnRlcmNlcHRvcik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/IsHorizontalFix.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/LabelBehavior.js":
/*!***********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/LabelBehavior.js ***!
\***********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ asEdges: () => (/* binding */ asEdges),\n/* harmony export */ \"default\": () => (/* binding */ LabelBehavior),\n/* harmony export */ getReferencePoint: () => (/* binding */ getReferencePoint),\n/* harmony export */ getReferencePointDelta: () => (/* binding */ getReferencePointDelta)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var _util_LabelLayoutUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/LabelLayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LabelLayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var diagram_js_lib_util_AttachUtil__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! diagram-js/lib/util/AttachUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/AttachUtil.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_util_PositionUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! diagram-js/lib/util/PositionUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/PositionUtil.js\");\n/* harmony import */ var _util_GeometricUtil__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./util/GeometricUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/bendpoints/GeometricUtil.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NAME_PROPERTY = 'name';\nvar TEXT_PROPERTY = 'text';\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('../BpmnFactory').default} BpmnFactory\n * @typedef {import('../../../draw/TextRenderer').default} TextRenderer\n *\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n * @typedef {import('diagram-js/lib/util/Types').Rect} Rect\n *\n * @typedef {Point[]} Line\n */\n\n/**\n * A component that makes sure that external labels are added\n * together with respective elements and properly updated (DI wise)\n * during move.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n * @param {BpmnFactory} bpmnFactory\n * @param {TextRenderer} textRenderer\n */\nfunction LabelBehavior(\n eventBus, modeling, bpmnFactory,\n textRenderer) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n // update label if name property was updated\n this.postExecute('element.updateProperties', onPropertyUpdate);\n this.postExecute('element.updateModdleProperties', e => {\n const elementBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(e.context.element);\n\n if (elementBo === e.context.moddleElement) {\n onPropertyUpdate(e);\n }\n });\n\n function onPropertyUpdate(e) {\n var context = e.context,\n element = context.element,\n properties = context.properties;\n\n if (NAME_PROPERTY in properties) {\n modeling.updateLabel(element, properties[NAME_PROPERTY]);\n }\n\n if (TEXT_PROPERTY in properties\n && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:TextAnnotation')) {\n\n var newBounds = textRenderer.getTextAnnotationBounds(\n {\n x: element.x,\n y: element.y,\n width: element.width,\n height: element.height\n },\n properties[TEXT_PROPERTY] || ''\n );\n\n modeling.updateLabel(element, properties.text, newBounds);\n }\n }\n\n // create label shape after shape/connection was created\n this.postExecute([ 'shape.create', 'connection.create' ], function(e) {\n var context = e.context,\n hints = context.hints || {};\n\n if (hints.createElementsBehavior === false) {\n return;\n }\n\n var element = context.shape || context.connection;\n\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_2__.isLabel)(element) || !(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.isLabelExternal)(element)) {\n return;\n }\n\n // only create label if attribute available\n if (!(0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.getLabel)(element)) {\n return;\n }\n\n modeling.updateLabel(element, (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.getLabel)(element));\n });\n\n // update label after label shape was deleted\n this.postExecute('shape.delete', function(event) {\n var context = event.context,\n labelTarget = context.labelTarget,\n hints = context.hints || {};\n\n // check if label\n if (labelTarget && hints.unsetLabel !== false) {\n modeling.updateLabel(labelTarget, null, null, { removeShape: false });\n }\n });\n\n function getVisibleLabelAdjustment(event) {\n\n var context = event.context,\n connection = context.connection,\n label = connection.label,\n hints = (0,min_dash__WEBPACK_IMPORTED_MODULE_4__.assign)({}, context.hints),\n newWaypoints = context.newWaypoints || connection.waypoints,\n oldWaypoints = context.oldWaypoints;\n\n\n if (typeof hints.startChanged === 'undefined') {\n hints.startChanged = !!hints.connectionStart;\n }\n\n if (typeof hints.endChanged === 'undefined') {\n hints.endChanged = !!hints.connectionEnd;\n }\n\n return (0,_util_LabelLayoutUtil__WEBPACK_IMPORTED_MODULE_5__.getLabelAdjustment)(label, newWaypoints, oldWaypoints, hints);\n }\n\n this.postExecute([\n 'connection.layout',\n 'connection.updateWaypoints'\n ], function(event) {\n var context = event.context,\n hints = context.hints || {};\n\n if (hints.labelBehavior === false) {\n return;\n }\n\n var connection = context.connection,\n label = connection.label,\n labelAdjustment;\n\n // handle missing label as well as the case\n // that the label parent does not exist (yet),\n // because it is being pasted / created via multi element create\n //\n // Cf. https://github.com/bpmn-io/bpmn-js/pull/1227\n if (!label || !label.parent) {\n return;\n }\n\n labelAdjustment = getVisibleLabelAdjustment(event);\n\n modeling.moveShape(label, labelAdjustment);\n });\n\n\n // keep label position on shape replace\n this.postExecute([ 'shape.replace' ], function(event) {\n var context = event.context,\n newShape = context.newShape,\n oldShape = context.oldShape;\n\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(newShape);\n\n if (businessObject\n && (0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.isLabelExternal)(businessObject)\n && oldShape.label\n && newShape.label) {\n newShape.label.x = oldShape.label.x;\n newShape.label.y = oldShape.label.y;\n }\n });\n\n\n // move external label after resizing\n this.postExecute('shape.resize', function(event) {\n\n var context = event.context,\n shape = context.shape,\n newBounds = context.newBounds,\n oldBounds = context.oldBounds;\n\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_3__.hasExternalLabel)(shape)) {\n\n var label = shape.label,\n labelMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_6__.getMid)(label),\n edges = asEdges(oldBounds);\n\n // get nearest border point to label as reference point\n var referencePoint = getReferencePoint(labelMid, edges);\n\n var delta = getReferencePointDelta(referencePoint, oldBounds, newBounds);\n\n modeling.moveShape(label, delta);\n\n }\n\n });\n\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(LabelBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nLabelBehavior.$inject = [\n 'eventBus',\n 'modeling',\n 'bpmnFactory',\n 'textRenderer'\n];\n\n// helpers //////////////////////\n\n/**\n * Calculates a reference point delta relative to a new position\n * of a certain element's bounds\n *\n * @param {Point} referencePoint\n * @param {Rect} oldBounds\n * @param {Rect} newBounds\n *\n * @return {Point}\n */\nfunction getReferencePointDelta(referencePoint, oldBounds, newBounds) {\n\n var newReferencePoint = (0,diagram_js_lib_util_AttachUtil__WEBPACK_IMPORTED_MODULE_8__.getNewAttachPoint)(referencePoint, oldBounds, newBounds);\n\n return (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_6__.roundPoint)((0,diagram_js_lib_util_PositionUtil__WEBPACK_IMPORTED_MODULE_9__.delta)(newReferencePoint, referencePoint));\n}\n\n/**\n * Generates the nearest point (reference point) for a given point\n * onto given set of lines\n *\n * @param {Point} point\n * @param {Line[]} lines\n *\n * @return {Point}\n */\nfunction getReferencePoint(point, lines) {\n\n if (!lines.length) {\n return;\n }\n\n var nearestLine = getNearestLine(point, lines);\n\n return (0,_util_GeometricUtil__WEBPACK_IMPORTED_MODULE_10__.perpendicularFoot)(point, nearestLine);\n}\n\n/**\n * Convert the given bounds to a lines array containing all edges\n *\n * @param {Rect|Point} bounds\n *\n * @return {Line[]}\n */\nfunction asEdges(bounds) {\n return [\n [ // top\n {\n x: bounds.x,\n y: bounds.y\n },\n {\n x: bounds.x + (bounds.width || 0),\n y: bounds.y\n }\n ],\n [ // right\n {\n x: bounds.x + (bounds.width || 0),\n y: bounds.y\n },\n {\n x: bounds.x + (bounds.width || 0),\n y: bounds.y + (bounds.height || 0)\n }\n ],\n [ // bottom\n {\n x: bounds.x,\n y: bounds.y + (bounds.height || 0)\n },\n {\n x: bounds.x + (bounds.width || 0),\n y: bounds.y + (bounds.height || 0)\n }\n ],\n [ // left\n {\n x: bounds.x,\n y: bounds.y\n },\n {\n x: bounds.x,\n y: bounds.y + (bounds.height || 0)\n }\n ]\n ];\n}\n\n/**\n * Returns the nearest line for a given point by distance\n * @param {Point} point\n * @param {Line[]} lines\n *\n * @return {Line}\n */\nfunction getNearestLine(point, lines) {\n\n var distances = lines.map(function(l) {\n return {\n line: l,\n distance: (0,_util_GeometricUtil__WEBPACK_IMPORTED_MODULE_10__.getDistancePointLine)(point, l)\n };\n });\n\n var sorted = (0,min_dash__WEBPACK_IMPORTED_MODULE_4__.sortBy)(distances, 'distance');\n\n return sorted[0].line;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9MYWJlbEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVrQjs7QUFFc0I7O0FBS1A7O0FBT0E7O0FBSUQ7O0FBRTJDOztBQUluQzs7QUFLRTs7QUFJQTs7QUFJeEI7O0FBS1k7O0FBRTlCO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLCtCQUErQjtBQUM1QyxhQUFhLGtDQUFrQztBQUMvQyxhQUFhLDhDQUE4QztBQUMzRDtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hELGFBQWEsMENBQTBDO0FBQ3ZEO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsYUFBYTtBQUN4QixXQUFXLGNBQWM7QUFDekI7QUFDZTtBQUNmO0FBQ0E7O0FBRUEsRUFBRSxpRkFBa0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixrRUFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxtREFBRTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsd0RBQU8sY0FBYyxnRUFBZTtBQUM1QztBQUNBOztBQUVBO0FBQ0EsU0FBUyx5REFBUTtBQUNqQjtBQUNBOztBQUVBLGtDQUFrQyx5REFBUTtBQUMxQyxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNEQUFzRCxvQkFBb0I7QUFDMUU7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnREFBTSxHQUFHO0FBQ3pCO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyx5RUFBa0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLGtFQUFpQjs7QUFFMUM7QUFDQSxTQUFTLGdFQUFlO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsaUVBQWdCOztBQUV4QjtBQUNBLHFCQUFxQix3RUFBTTtBQUMzQjs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLEdBQUc7O0FBRUg7O0FBRUEsNERBQVEsZ0JBQWdCLGlGQUFrQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsTUFBTTtBQUNqQixXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZO0FBQ1o7QUFDTzs7QUFFUCwwQkFBMEIsaUZBQWlCOztBQUUzQyxTQUFTLDRFQUFVLENBQUMsdUVBQUs7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ087O0FBRVA7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVMsdUVBQWlCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwwRUFBb0I7QUFDcEM7QUFDQSxHQUFHOztBQUVILGVBQWUsZ0RBQU07O0FBRXJCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9MYWJlbEJlaGF2aW9yLmpzPzhmZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXNzaWduXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQge1xuICBpcyxcbiAgZ2V0QnVzaW5lc3NPYmplY3Rcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0xhYmVsRXh0ZXJuYWwsXG4gIGdldExhYmVsLFxuICBoYXNFeHRlcm5hbExhYmVsLFxuICBpc0xhYmVsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvTGFiZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFiZWxBZGp1c3RtZW50XG59IGZyb20gJy4vdXRpbC9MYWJlbExheW91dFV0aWwnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHtcbiAgZ2V0TmV3QXR0YWNoUG9pbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9BdHRhY2hVdGlsJztcblxuaW1wb3J0IHtcbiAgZ2V0TWlkLFxuICByb3VuZFBvaW50XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuaW1wb3J0IHtcbiAgZGVsdGFcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Qb3NpdGlvblV0aWwnO1xuXG5pbXBvcnQge1xuICBzb3J0Qnlcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBnZXREaXN0YW5jZVBvaW50TGluZSxcbiAgcGVycGVuZGljdWxhckZvb3Rcbn0gZnJvbSAnLi91dGlsL0dlb21ldHJpY1V0aWwnO1xuXG52YXIgTkFNRV9QUk9QRVJUWSA9ICduYW1lJztcbnZhciBURVhUX1BST1BFUlRZID0gJ3RleHQnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vQnBtbkZhY3RvcnknKS5kZWZhdWx0fSBCcG1uRmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vZHJhdy9UZXh0UmVuZGVyZXInKS5kZWZhdWx0fSBUZXh0UmVuZGVyZXJcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi91dGlsL1R5cGVzJykuUG9pbnR9IFBvaW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi91dGlsL1R5cGVzJykuUmVjdH0gUmVjdFxuICpcbiAqIEB0eXBlZGVmIHtQb2ludFtdfSBMaW5lXG4gKi9cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBleHRlcm5hbCBsYWJlbHMgYXJlIGFkZGVkXG4gKiB0b2dldGhlciB3aXRoIHJlc3BlY3RpdmUgZWxlbWVudHMgYW5kIHByb3Blcmx5IHVwZGF0ZWQgKERJIHdpc2UpXG4gKiBkdXJpbmcgbW92ZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKiBAcGFyYW0ge1RleHRSZW5kZXJlcn0gdGV4dFJlbmRlcmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExhYmVsQmVoYXZpb3IoXG4gICAgZXZlbnRCdXMsIG1vZGVsaW5nLCBicG1uRmFjdG9yeSxcbiAgICB0ZXh0UmVuZGVyZXIpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLy8gdXBkYXRlIGxhYmVsIGlmIG5hbWUgcHJvcGVydHkgd2FzIHVwZGF0ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZSgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgb25Qcm9wZXJ0eVVwZGF0ZSk7XG4gIHRoaXMucG9zdEV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIGUgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRCbyA9IGdldEJ1c2luZXNzT2JqZWN0KGUuY29udGV4dC5lbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Qm8gPT09IGUuY29udGV4dC5tb2RkbGVFbGVtZW50KSB7XG4gICAgICBvblByb3BlcnR5VXBkYXRlKGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gb25Qcm9wZXJ0eVVwZGF0ZShlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LnByb3BlcnRpZXM7XG5cbiAgICBpZiAoTkFNRV9QUk9QRVJUWSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVMYWJlbChlbGVtZW50LCBwcm9wZXJ0aWVzW05BTUVfUFJPUEVSVFldKTtcbiAgICB9XG5cbiAgICBpZiAoVEVYVF9QUk9QRVJUWSBpbiBwcm9wZXJ0aWVzXG4gICAgICAgICYmIGlzKGVsZW1lbnQsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcblxuICAgICAgdmFyIG5ld0JvdW5kcyA9IHRleHRSZW5kZXJlci5nZXRUZXh0QW5ub3RhdGlvbkJvdW5kcyhcbiAgICAgICAge1xuICAgICAgICAgIHg6IGVsZW1lbnQueCxcbiAgICAgICAgICB5OiBlbGVtZW50LnksXG4gICAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodFxuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0aWVzW1RFWFRfUFJPUEVSVFldIHx8ICcnXG4gICAgICApO1xuXG4gICAgICBtb2RlbGluZy51cGRhdGVMYWJlbChlbGVtZW50LCBwcm9wZXJ0aWVzLnRleHQsIG5ld0JvdW5kcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gY3JlYXRlIGxhYmVsIHNoYXBlIGFmdGVyIHNoYXBlL2Nvbm5lY3Rpb24gd2FzIGNyZWF0ZWRcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5jcmVhdGUnLCAnY29ubmVjdGlvbi5jcmVhdGUnIF0sIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgaGludHMgPSBjb250ZXh0LmhpbnRzIHx8IHt9O1xuXG4gICAgaWYgKGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlIHx8IGNvbnRleHQuY29ubmVjdGlvbjtcblxuICAgIGlmIChpc0xhYmVsKGVsZW1lbnQpIHx8ICFpc0xhYmVsRXh0ZXJuYWwoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvbmx5IGNyZWF0ZSBsYWJlbCBpZiBhdHRyaWJ1dGUgYXZhaWxhYmxlXG4gICAgaWYgKCFnZXRMYWJlbChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLnVwZGF0ZUxhYmVsKGVsZW1lbnQsIGdldExhYmVsKGVsZW1lbnQpKTtcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGxhYmVsIGFmdGVyIGxhYmVsIHNoYXBlIHdhcyBkZWxldGVkXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBsYWJlbFRhcmdldCA9IGNvbnRleHQubGFiZWxUYXJnZXQsXG4gICAgICAgIGhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgIC8vIGNoZWNrIGlmIGxhYmVsXG4gICAgaWYgKGxhYmVsVGFyZ2V0ICYmIGhpbnRzLnVuc2V0TGFiZWwgIT09IGZhbHNlKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVMYWJlbChsYWJlbFRhcmdldCwgbnVsbCwgbnVsbCwgeyByZW1vdmVTaGFwZTogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBnZXRWaXNpYmxlTGFiZWxBZGp1c3RtZW50KGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGxhYmVsID0gY29ubmVjdGlvbi5sYWJlbCxcbiAgICAgICAgaGludHMgPSBhc3NpZ24oe30sIGNvbnRleHQuaGludHMpLFxuICAgICAgICBuZXdXYXlwb2ludHMgPSBjb250ZXh0Lm5ld1dheXBvaW50cyB8fCBjb25uZWN0aW9uLndheXBvaW50cyxcbiAgICAgICAgb2xkV2F5cG9pbnRzID0gY29udGV4dC5vbGRXYXlwb2ludHM7XG5cblxuICAgIGlmICh0eXBlb2YgaGludHMuc3RhcnRDaGFuZ2VkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaGludHMuc3RhcnRDaGFuZ2VkID0gISFoaW50cy5jb25uZWN0aW9uU3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoaW50cy5lbmRDaGFuZ2VkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaGludHMuZW5kQ2hhbmdlZCA9ICEhaGludHMuY29ubmVjdGlvbkVuZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0TGFiZWxBZGp1c3RtZW50KGxhYmVsLCBuZXdXYXlwb2ludHMsIG9sZFdheXBvaW50cywgaGludHMpO1xuICB9XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZShbXG4gICAgJ2Nvbm5lY3Rpb24ubGF5b3V0JyxcbiAgICAnY29ubmVjdGlvbi51cGRhdGVXYXlwb2ludHMnXG4gIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBoaW50cyA9IGNvbnRleHQuaGludHMgfHwge307XG5cbiAgICBpZiAoaGludHMubGFiZWxCZWhhdmlvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgbGFiZWwgPSBjb25uZWN0aW9uLmxhYmVsLFxuICAgICAgICBsYWJlbEFkanVzdG1lbnQ7XG5cbiAgICAvLyBoYW5kbGUgbWlzc2luZyBsYWJlbCBhcyB3ZWxsIGFzIHRoZSBjYXNlXG4gICAgLy8gdGhhdCB0aGUgbGFiZWwgcGFyZW50IGRvZXMgbm90IGV4aXN0ICh5ZXQpLFxuICAgIC8vIGJlY2F1c2UgaXQgaXMgYmVpbmcgcGFzdGVkIC8gY3JlYXRlZCB2aWEgbXVsdGkgZWxlbWVudCBjcmVhdGVcbiAgICAvL1xuICAgIC8vIENmLiBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL3B1bGwvMTIyN1xuICAgIGlmICghbGFiZWwgfHwgIWxhYmVsLnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxhYmVsQWRqdXN0bWVudCA9IGdldFZpc2libGVMYWJlbEFkanVzdG1lbnQoZXZlbnQpO1xuXG4gICAgbW9kZWxpbmcubW92ZVNoYXBlKGxhYmVsLCBsYWJlbEFkanVzdG1lbnQpO1xuICB9KTtcblxuXG4gIC8vIGtlZXAgbGFiZWwgcG9zaXRpb24gb24gc2hhcGUgcmVwbGFjZVxuICB0aGlzLnBvc3RFeGVjdXRlKFsgJ3NoYXBlLnJlcGxhY2UnIF0sIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGUsXG4gICAgICAgIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZTtcblxuICAgIHZhciBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NoYXBlKTtcblxuICAgIGlmIChidXNpbmVzc09iamVjdFxuICAgICAgJiYgaXNMYWJlbEV4dGVybmFsKGJ1c2luZXNzT2JqZWN0KVxuICAgICAgJiYgb2xkU2hhcGUubGFiZWxcbiAgICAgICYmIG5ld1NoYXBlLmxhYmVsKSB7XG4gICAgICBuZXdTaGFwZS5sYWJlbC54ID0gb2xkU2hhcGUubGFiZWwueDtcbiAgICAgIG5ld1NoYXBlLmxhYmVsLnkgPSBvbGRTaGFwZS5sYWJlbC55O1xuICAgIH1cbiAgfSk7XG5cblxuICAvLyBtb3ZlIGV4dGVybmFsIGxhYmVsIGFmdGVyIHJlc2l6aW5nXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgbmV3Qm91bmRzID0gY29udGV4dC5uZXdCb3VuZHMsXG4gICAgICAgIG9sZEJvdW5kcyA9IGNvbnRleHQub2xkQm91bmRzO1xuXG4gICAgaWYgKGhhc0V4dGVybmFsTGFiZWwoc2hhcGUpKSB7XG5cbiAgICAgIHZhciBsYWJlbCA9IHNoYXBlLmxhYmVsLFxuICAgICAgICAgIGxhYmVsTWlkID0gZ2V0TWlkKGxhYmVsKSxcbiAgICAgICAgICBlZGdlcyA9IGFzRWRnZXMob2xkQm91bmRzKTtcblxuICAgICAgLy8gZ2V0IG5lYXJlc3QgYm9yZGVyIHBvaW50IHRvIGxhYmVsIGFzIHJlZmVyZW5jZSBwb2ludFxuICAgICAgdmFyIHJlZmVyZW5jZVBvaW50ID0gZ2V0UmVmZXJlbmNlUG9pbnQobGFiZWxNaWQsIGVkZ2VzKTtcblxuICAgICAgdmFyIGRlbHRhID0gZ2V0UmVmZXJlbmNlUG9pbnREZWx0YShyZWZlcmVuY2VQb2ludCwgb2xkQm91bmRzLCBuZXdCb3VuZHMpO1xuXG4gICAgICBtb2RlbGluZy5tb3ZlU2hhcGUobGFiZWwsIGRlbHRhKTtcblxuICAgIH1cblxuICB9KTtcblxufVxuXG5pbmhlcml0cyhMYWJlbEJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5MYWJlbEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdicG1uRmFjdG9yeScsXG4gICd0ZXh0UmVuZGVyZXInXG5dO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIGEgcmVmZXJlbmNlIHBvaW50IGRlbHRhIHJlbGF0aXZlIHRvIGEgbmV3IHBvc2l0aW9uXG4gKiBvZiBhIGNlcnRhaW4gZWxlbWVudCdzIGJvdW5kc1xuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHJlZmVyZW5jZVBvaW50XG4gKiBAcGFyYW0ge1JlY3R9IG9sZEJvdW5kc1xuICogQHBhcmFtIHtSZWN0fSBuZXdCb3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZmVyZW5jZVBvaW50RGVsdGEocmVmZXJlbmNlUG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKSB7XG5cbiAgdmFyIG5ld1JlZmVyZW5jZVBvaW50ID0gZ2V0TmV3QXR0YWNoUG9pbnQocmVmZXJlbmNlUG9pbnQsIG9sZEJvdW5kcywgbmV3Qm91bmRzKTtcblxuICByZXR1cm4gcm91bmRQb2ludChkZWx0YShuZXdSZWZlcmVuY2VQb2ludCwgcmVmZXJlbmNlUG9pbnQpKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIG5lYXJlc3QgcG9pbnQgKHJlZmVyZW5jZSBwb2ludCkgZm9yIGEgZ2l2ZW4gcG9pbnRcbiAqIG9udG8gZ2l2ZW4gc2V0IG9mIGxpbmVzXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7TGluZVtdfSBsaW5lc1xuICpcbiAqIEByZXR1cm4ge1BvaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlUG9pbnQocG9pbnQsIGxpbmVzKSB7XG5cbiAgaWYgKCFsaW5lcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmVhcmVzdExpbmUgPSBnZXROZWFyZXN0TGluZShwb2ludCwgbGluZXMpO1xuXG4gIHJldHVybiBwZXJwZW5kaWN1bGFyRm9vdChwb2ludCwgbmVhcmVzdExpbmUpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIGJvdW5kcyB0byBhIGxpbmVzIGFycmF5IGNvbnRhaW5pbmcgYWxsIGVkZ2VzXG4gKlxuICogQHBhcmFtIHtSZWN0fFBvaW50fSBib3VuZHNcbiAqXG4gKiBAcmV0dXJuIHtMaW5lW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0VkZ2VzKGJvdW5kcykge1xuICByZXR1cm4gW1xuICAgIFsgLy8gdG9wXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgeDogYm91bmRzLnggKyAoYm91bmRzLndpZHRoIHx8IDApLFxuICAgICAgICB5OiBib3VuZHMueVxuICAgICAgfVxuICAgIF0sXG4gICAgWyAvLyByaWdodFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH1cbiAgICBdLFxuICAgIFsgLy8gYm90dG9tXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueSArIChib3VuZHMuaGVpZ2h0IHx8IDApXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCArIChib3VuZHMud2lkdGggfHwgMCksXG4gICAgICAgIHk6IGJvdW5kcy55ICsgKGJvdW5kcy5oZWlnaHQgfHwgMClcbiAgICAgIH1cbiAgICBdLFxuICAgIFsgLy8gbGVmdFxuICAgICAge1xuICAgICAgICB4OiBib3VuZHMueCxcbiAgICAgICAgeTogYm91bmRzLnlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHg6IGJvdW5kcy54LFxuICAgICAgICB5OiBib3VuZHMueSArIChib3VuZHMuaGVpZ2h0IHx8IDApXG4gICAgICB9XG4gICAgXVxuICBdO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5lYXJlc3QgbGluZSBmb3IgYSBnaXZlbiBwb2ludCBieSBkaXN0YW5jZVxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7TGluZVtdfSBsaW5lc1xuICpcbiAqIEByZXR1cm4ge0xpbmV9XG4gKi9cbmZ1bmN0aW9uIGdldE5lYXJlc3RMaW5lKHBvaW50LCBsaW5lcykge1xuXG4gIHZhciBkaXN0YW5jZXMgPSBsaW5lcy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBsLFxuICAgICAgZGlzdGFuY2U6IGdldERpc3RhbmNlUG9pbnRMaW5lKHBvaW50LCBsKVxuICAgIH07XG4gIH0pO1xuXG4gIHZhciBzb3J0ZWQgPSBzb3J0QnkoZGlzdGFuY2VzLCAnZGlzdGFuY2UnKTtcblxuICByZXR1cm4gc29ydGVkWzBdLmxpbmU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/LabelBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/LayoutConnectionBehavior.js":
/*!**********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/LayoutConnectionBehavior.js ***!
\**********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LayoutConnectionBehavior)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ConnectionLayoutUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/ConnectionLayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * A component that makes sure that Associations connected to Connections\n * are updated together with the Connection.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction LayoutConnectionBehavior(eventBus, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n function getnewAnchorPoint(event, point) {\n\n var context = event.context,\n connection = context.connection,\n hints = (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.assign)({}, context.hints),\n newWaypoints = context.newWaypoints || connection.waypoints,\n oldWaypoints = context.oldWaypoints;\n\n\n if (typeof hints.startChanged === 'undefined') {\n hints.startChanged = !!hints.connectionStart;\n }\n\n if (typeof hints.endChanged === 'undefined') {\n hints.endChanged = !!hints.connectionEnd;\n }\n\n return (0,_util_ConnectionLayoutUtil__WEBPACK_IMPORTED_MODULE_2__.getConnectionAdjustment)(point, newWaypoints, oldWaypoints, hints);\n }\n\n this.postExecute([\n 'connection.layout',\n 'connection.updateWaypoints'\n ], function(event) {\n var context = event.context;\n\n var connection = context.connection,\n outgoing = connection.outgoing,\n incoming = connection.incoming;\n\n incoming.forEach(function(connection) {\n var endPoint = connection.waypoints[connection.waypoints.length - 1];\n var newEndpoint = getnewAnchorPoint(event, endPoint);\n\n var newWaypoints = [].concat(connection.waypoints.slice(0, -1), [ newEndpoint ]);\n\n modeling.updateWaypoints(connection, newWaypoints);\n });\n\n outgoing.forEach(function(connection) {\n var startpoint = connection.waypoints[0];\n var newStartpoint = getnewAnchorPoint(event, startpoint);\n\n var newWaypoints = [].concat([ newStartpoint ], connection.waypoints.slice(1));\n\n modeling.updateWaypoints(connection, newWaypoints);\n });\n\n });\n\n\n this.postExecute([\n 'connection.move'\n ], function(event) {\n var context = event.context;\n\n var connection = context.connection,\n outgoing = connection.outgoing,\n incoming = connection.incoming,\n delta = context.delta;\n\n incoming.forEach(function(connection) {\n var endPoint = connection.waypoints[connection.waypoints.length - 1];\n var newEndpoint = {\n x: endPoint.x + delta.x,\n y: endPoint.y + delta.y\n };\n\n var newWaypoints = [].concat(connection.waypoints.slice(0, -1), [ newEndpoint ]);\n\n modeling.updateWaypoints(connection, newWaypoints);\n });\n\n outgoing.forEach(function(connection) {\n var startpoint = connection.waypoints[0];\n var newStartpoint = {\n x: startpoint.x + delta.x,\n y: startpoint.y + delta.y\n };\n\n var newWaypoints = [].concat([ newStartpoint ], connection.waypoints.slice(1));\n\n modeling.updateWaypoints(connection, newWaypoints);\n });\n\n });\n\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(LayoutConnectionBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nLayoutConnectionBehavior.$inject = [\n 'eventBus',\n 'modeling'\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFa0I7O0FBRXNCOztBQUVtQzs7QUFFdUI7O0FBRWxHO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwrQkFBK0I7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7O0FBRWYsRUFBRSxpRkFBa0I7O0FBRXBCOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0IsZ0RBQU0sR0FBRztBQUN6QjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFdBQVcsbUZBQXdCO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTCxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUwsR0FBRzs7QUFFSDs7QUFFQSw0REFBUSwyQkFBMkIsaUZBQWtCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL0xheW91dENvbm5lY3Rpb25CZWhhdmlvci5qcz9hYjk3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFzc2lnblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGdldENvbm5lY3Rpb25BZGp1c3RtZW50IGFzIGdldENvbm5lY3Rpb25BbmNob3JQb2ludCB9IGZyb20gJy4vdXRpbC9Db25uZWN0aW9uTGF5b3V0VXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKi9cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1ha2VzIHN1cmUgdGhhdCBBc3NvY2lhdGlvbnMgY29ubmVjdGVkIHRvIENvbm5lY3Rpb25zXG4gKiBhcmUgdXBkYXRlZCB0b2dldGhlciB3aXRoIHRoZSBDb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIGZ1bmN0aW9uIGdldG5ld0FuY2hvclBvaW50KGV2ZW50LCBwb2ludCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBoaW50cyA9IGFzc2lnbih7fSwgY29udGV4dC5oaW50cyksXG4gICAgICAgIG5ld1dheXBvaW50cyA9IGNvbnRleHQubmV3V2F5cG9pbnRzIHx8IGNvbm5lY3Rpb24ud2F5cG9pbnRzLFxuICAgICAgICBvbGRXYXlwb2ludHMgPSBjb250ZXh0Lm9sZFdheXBvaW50cztcblxuXG4gICAgaWYgKHR5cGVvZiBoaW50cy5zdGFydENoYW5nZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaW50cy5zdGFydENoYW5nZWQgPSAhIWhpbnRzLmNvbm5lY3Rpb25TdGFydDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhpbnRzLmVuZENoYW5nZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaW50cy5lbmRDaGFuZ2VkID0gISFoaW50cy5jb25uZWN0aW9uRW5kO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRDb25uZWN0aW9uQW5jaG9yUG9pbnQocG9pbnQsIG5ld1dheXBvaW50cywgb2xkV2F5cG9pbnRzLCBoaW50cyk7XG4gIH1cblxuICB0aGlzLnBvc3RFeGVjdXRlKFtcbiAgICAnY29ubmVjdGlvbi5sYXlvdXQnLFxuICAgICdjb25uZWN0aW9uLnVwZGF0ZVdheXBvaW50cydcbiAgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQ7XG5cbiAgICB2YXIgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgb3V0Z29pbmcgPSBjb25uZWN0aW9uLm91dGdvaW5nLFxuICAgICAgICBpbmNvbWluZyA9IGNvbm5lY3Rpb24uaW5jb21pbmc7XG5cbiAgICBpbmNvbWluZy5mb3JFYWNoKGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIHZhciBlbmRQb2ludCA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzW2Nvbm5lY3Rpb24ud2F5cG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIG5ld0VuZHBvaW50ID0gZ2V0bmV3QW5jaG9yUG9pbnQoZXZlbnQsIGVuZFBvaW50KTtcblxuICAgICAgdmFyIG5ld1dheXBvaW50cyA9IFtdLmNvbmNhdChjb25uZWN0aW9uLndheXBvaW50cy5zbGljZSgwLCAtMSksIFsgbmV3RW5kcG9pbnQgXSk7XG5cbiAgICAgIG1vZGVsaW5nLnVwZGF0ZVdheXBvaW50cyhjb25uZWN0aW9uLCBuZXdXYXlwb2ludHMpO1xuICAgIH0pO1xuXG4gICAgb3V0Z29pbmcuZm9yRWFjaChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgc3RhcnRwb2ludCA9IGNvbm5lY3Rpb24ud2F5cG9pbnRzWzBdO1xuICAgICAgdmFyIG5ld1N0YXJ0cG9pbnQgPSBnZXRuZXdBbmNob3JQb2ludChldmVudCwgc3RhcnRwb2ludCk7XG5cbiAgICAgIHZhciBuZXdXYXlwb2ludHMgPSBbXS5jb25jYXQoWyBuZXdTdGFydHBvaW50IF0sIGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKDEpKTtcblxuICAgICAgbW9kZWxpbmcudXBkYXRlV2F5cG9pbnRzKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG4gICAgfSk7XG5cbiAgfSk7XG5cblxuICB0aGlzLnBvc3RFeGVjdXRlKFtcbiAgICAnY29ubmVjdGlvbi5tb3ZlJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dDtcblxuICAgIHZhciBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBvdXRnb2luZyA9IGNvbm5lY3Rpb24ub3V0Z29pbmcsXG4gICAgICAgIGluY29taW5nID0gY29ubmVjdGlvbi5pbmNvbWluZyxcbiAgICAgICAgZGVsdGEgPSBjb250ZXh0LmRlbHRhO1xuXG4gICAgaW5jb21pbmcuZm9yRWFjaChmdW5jdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICB2YXIgZW5kUG9pbnQgPSBjb25uZWN0aW9uLndheXBvaW50c1tjb25uZWN0aW9uLndheXBvaW50cy5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBuZXdFbmRwb2ludCA9IHtcbiAgICAgICAgeDogZW5kUG9pbnQueCArIGRlbHRhLngsXG4gICAgICAgIHk6IGVuZFBvaW50LnkgKyBkZWx0YS55XG4gICAgICB9O1xuXG4gICAgICB2YXIgbmV3V2F5cG9pbnRzID0gW10uY29uY2F0KGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKDAsIC0xKSwgWyBuZXdFbmRwb2ludCBdKTtcblxuICAgICAgbW9kZWxpbmcudXBkYXRlV2F5cG9pbnRzKGNvbm5lY3Rpb24sIG5ld1dheXBvaW50cyk7XG4gICAgfSk7XG5cbiAgICBvdXRnb2luZy5mb3JFYWNoKGZ1bmN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgIHZhciBzdGFydHBvaW50ID0gY29ubmVjdGlvbi53YXlwb2ludHNbMF07XG4gICAgICB2YXIgbmV3U3RhcnRwb2ludCA9IHtcbiAgICAgICAgeDogc3RhcnRwb2ludC54ICsgZGVsdGEueCxcbiAgICAgICAgeTogc3RhcnRwb2ludC55ICsgZGVsdGEueVxuICAgICAgfTtcblxuICAgICAgdmFyIG5ld1dheXBvaW50cyA9IFtdLmNvbmNhdChbIG5ld1N0YXJ0cG9pbnQgXSwgY29ubmVjdGlvbi53YXlwb2ludHMuc2xpY2UoMSkpO1xuXG4gICAgICBtb2RlbGluZy51cGRhdGVXYXlwb2ludHMoY29ubmVjdGlvbiwgbmV3V2F5cG9pbnRzKTtcbiAgICB9KTtcblxuICB9KTtcblxufVxuXG5pbmhlcml0cyhMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkxheW91dENvbm5lY3Rpb25CZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/LayoutConnectionBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/MessageFlowBehavior.js":
/*!*****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/MessageFlowBehavior.js ***!
\*****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MessageFlowBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n/* harmony import */ var diagram_js_lib_features_modeling_cmd_helper_AnchorsHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/features/modeling/cmd/helper/AnchorsHelper */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/modeling/cmd/helper/AnchorsHelper.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\r\n * @typedef {import('../Modeling').default} Modeling\r\n */\r\n\r\n/**\r\n * BPMN-specific message flow behavior.\r\n *\r\n * @param {EventBus} eventBus\r\n * @param {Modeling} modeling\r\n */\r\nfunction MessageFlowBehavior(eventBus, modeling) {\r\n\r\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\r\n\r\n this.postExecute('shape.replace', function(context) {\r\n var oldShape = context.oldShape,\r\n newShape = context.newShape;\r\n\r\n if (!isParticipantCollapse(oldShape, newShape)) {\r\n return;\r\n }\r\n\r\n var messageFlows = getMessageFlows(oldShape);\r\n\r\n messageFlows.incoming.forEach(function(incoming) {\r\n var anchor = (0,diagram_js_lib_features_modeling_cmd_helper_AnchorsHelper__WEBPACK_IMPORTED_MODULE_1__.getResizedTargetAnchor)(incoming, newShape, oldShape);\r\n\r\n modeling.reconnectEnd(incoming, newShape, anchor);\r\n });\r\n\r\n messageFlows.outgoing.forEach(function(outgoing) {\r\n var anchor = (0,diagram_js_lib_features_modeling_cmd_helper_AnchorsHelper__WEBPACK_IMPORTED_MODULE_1__.getResizedSourceAnchor)(outgoing, newShape, oldShape);\r\n\r\n modeling.reconnectStart(outgoing, newShape, anchor);\r\n });\r\n }, true);\r\n\r\n}\r\n\r\nMessageFlowBehavior.$inject = [ 'eventBus', 'modeling' ];\r\n\r\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(MessageFlowBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\r\n\r\n// helpers //////////\r\n\r\nfunction isParticipantCollapse(oldShape, newShape) {\r\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(oldShape, 'bpmn:Participant')\r\n && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_4__.isExpanded)(oldShape)\r\n && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(newShape, 'bpmn:Participant')\r\n && !(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_4__.isExpanded)(newShape);\r\n}\r\n\r\nfunction getMessageFlows(parent) {\r\n var elements = (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_5__.selfAndAllChildren)([ parent ], false);\r\n\r\n var incoming = [],\r\n outgoing = [];\r\n\r\n elements.forEach(function(element) {\r\n if (element === parent) {\r\n return;\r\n }\r\n\r\n element.incoming.forEach(function(connection) {\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(connection, 'bpmn:MessageFlow')) {\r\n incoming.push(connection);\r\n }\r\n });\r\n\r\n element.outgoing.forEach(function(connection) {\r\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_3__.is)(connection, 'bpmn:MessageFlow')) {\r\n outgoing.push(connection);\r\n }\r\n });\r\n }, []);\r\n\r\n return {\r\n incoming: incoming,\r\n outgoing: outgoing\r\n };\r\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9NZXNzYWdlRmxvd0JlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBd0M7QUFDeEM7QUFDMkU7QUFDM0U7QUFDNkM7QUFDN0M7QUFDa0Q7QUFDbEQ7QUFDa0U7QUFDbEU7QUFJbUU7QUFDbkU7QUFDQTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsK0JBQStCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZjtBQUNBLEVBQUUsaUZBQWtCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixpSEFBc0I7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLGlIQUFzQjtBQUN6QztBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQVEsc0JBQXNCLGlGQUFrQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsbURBQUU7QUFDWCxPQUFPLHdEQUFVO0FBQ2pCLE9BQU8sbURBQUU7QUFDVCxRQUFRLHdEQUFVO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnRkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLG1EQUFFO0FBQ1o7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsVUFBVSxtREFBRTtBQUNaO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL01lc3NhZ2VGbG93QmVoYXZpb3IuanM/ODIyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XHJcblxyXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcclxuXHJcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcclxuXHJcbmltcG9ydCB7IHNlbGZBbmRBbGxDaGlsZHJlbiB9IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvRWxlbWVudHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBnZXRSZXNpemVkU291cmNlQW5jaG9yLFxyXG4gIGdldFJlc2l6ZWRUYXJnZXRBbmNob3JcclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvaGVscGVyL0FuY2hvcnNIZWxwZXInO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEJQTU4tc3BlY2lmaWMgbWVzc2FnZSBmbG93IGJlaGF2aW9yLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWVzc2FnZUZsb3dCZWhhdmlvcihldmVudEJ1cywgbW9kZWxpbmcpIHtcclxuXHJcbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xyXG5cclxuICB0aGlzLnBvc3RFeGVjdXRlKCdzaGFwZS5yZXBsYWNlJywgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZSxcclxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGU7XHJcblxyXG4gICAgaWYgKCFpc1BhcnRpY2lwYW50Q29sbGFwc2Uob2xkU2hhcGUsIG5ld1NoYXBlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG1lc3NhZ2VGbG93cyA9IGdldE1lc3NhZ2VGbG93cyhvbGRTaGFwZSk7XHJcblxyXG4gICAgbWVzc2FnZUZsb3dzLmluY29taW5nLmZvckVhY2goZnVuY3Rpb24oaW5jb21pbmcpIHtcclxuICAgICAgdmFyIGFuY2hvciA9IGdldFJlc2l6ZWRUYXJnZXRBbmNob3IoaW5jb21pbmcsIG5ld1NoYXBlLCBvbGRTaGFwZSk7XHJcblxyXG4gICAgICBtb2RlbGluZy5yZWNvbm5lY3RFbmQoaW5jb21pbmcsIG5ld1NoYXBlLCBhbmNob3IpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbWVzc2FnZUZsb3dzLm91dGdvaW5nLmZvckVhY2goZnVuY3Rpb24ob3V0Z29pbmcpIHtcclxuICAgICAgdmFyIGFuY2hvciA9IGdldFJlc2l6ZWRTb3VyY2VBbmNob3Iob3V0Z29pbmcsIG5ld1NoYXBlLCBvbGRTaGFwZSk7XHJcblxyXG4gICAgICBtb2RlbGluZy5yZWNvbm5lY3RTdGFydChvdXRnb2luZywgbmV3U2hhcGUsIGFuY2hvcik7XHJcbiAgICB9KTtcclxuICB9LCB0cnVlKTtcclxuXHJcbn1cclxuXHJcbk1lc3NhZ2VGbG93QmVoYXZpb3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJywgJ21vZGVsaW5nJyBdO1xyXG5cclxuaW5oZXJpdHMoTWVzc2FnZUZsb3dCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcclxuXHJcbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xyXG5cclxuZnVuY3Rpb24gaXNQYXJ0aWNpcGFudENvbGxhcHNlKG9sZFNoYXBlLCBuZXdTaGFwZSkge1xyXG4gIHJldHVybiBpcyhvbGRTaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKVxyXG4gICAgJiYgaXNFeHBhbmRlZChvbGRTaGFwZSlcclxuICAgICYmIGlzKG5ld1NoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpXHJcbiAgICAmJiAhaXNFeHBhbmRlZChuZXdTaGFwZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE1lc3NhZ2VGbG93cyhwYXJlbnQpIHtcclxuICB2YXIgZWxlbWVudHMgPSBzZWxmQW5kQWxsQ2hpbGRyZW4oWyBwYXJlbnQgXSwgZmFsc2UpO1xyXG5cclxuICB2YXIgaW5jb21pbmcgPSBbXSxcclxuICAgICAgb3V0Z29pbmcgPSBbXTtcclxuXHJcbiAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBpZiAoZWxlbWVudCA9PT0gcGFyZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50LmluY29taW5nLmZvckVhY2goZnVuY3Rpb24oY29ubmVjdGlvbikge1xyXG4gICAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46TWVzc2FnZUZsb3cnKSkge1xyXG4gICAgICAgIGluY29taW5nLnB1c2goY29ubmVjdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGVsZW1lbnQub3V0Z29pbmcuZm9yRWFjaChmdW5jdGlvbihjb25uZWN0aW9uKSB7XHJcbiAgICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XHJcbiAgICAgICAgb3V0Z29pbmcucHVzaChjb25uZWN0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaW5jb21pbmc6IGluY29taW5nLFxyXG4gICAgb3V0Z29pbmc6IG91dGdvaW5nXHJcbiAgfTtcclxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/MessageFlowBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/NonInterruptingBehavior.js":
/*!*********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/NonInterruptingBehavior.js ***!
\*********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ NonInterruptingBehavior)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_NonInterruptingUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/NonInterruptingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/NonInterruptingUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\nfunction NonInterruptingBehavior(injector, modeling) {\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n\n this.postExecuted('shape.replace', function(event) {\n const oldShape = event.context.oldShape;\n const newShape = event.context.newShape;\n const hints = event.context.hints;\n\n if (!(0,_util_NonInterruptingUtil__WEBPACK_IMPORTED_MODULE_1__.canBeNonInterrupting)(newShape)) {\n return;\n }\n\n const property = (0,_util_NonInterruptingUtil__WEBPACK_IMPORTED_MODULE_1__.getInterruptingProperty)(newShape);\n const isExplicitChange = hints.targetElement && hints.targetElement[property] !== undefined;\n\n if (isExplicitChange) {\n return;\n }\n\n const isOldInterrupting = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(oldShape).get(property);\n const isNewInterruptingDefault = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(newShape).get(property);\n\n if (isOldInterrupting === isNewInterruptingDefault) {\n return;\n }\n\n modeling.updateProperties(newShape, {\n [property]: isOldInterrupting\n });\n });\n}\n\nNonInterruptingBehavior.$inject = [ 'injector', 'modeling' ];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(NonInterruptingBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Ob25JbnRlcnJ1cHRpbmdCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUEyRTtBQUNuQzs7QUFFbUQ7QUFDL0I7O0FBRTdDO0FBQ2Ysa0JBQWtCLGlGQUFrQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUywrRUFBb0I7QUFDN0I7QUFDQTs7QUFFQSxxQkFBcUIsa0ZBQXVCO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEIsa0VBQWlCO0FBQy9DLHFDQUFxQyxrRUFBaUI7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTs7QUFFQSw0REFBUSwwQkFBMEIsaUZBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvTm9uSW50ZXJydXB0aW5nQmVoYXZpb3IuanM/MmZhYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IHsgY2FuQmVOb25JbnRlcnJ1cHRpbmcsIGdldEludGVycnVwdGluZ1Byb3BlcnR5IH0gZnJvbSAnLi91dGlsL05vbkludGVycnVwdGluZ1V0aWwnO1xuaW1wb3J0IHsgZ2V0QnVzaW5lc3NPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5vbkludGVycnVwdGluZ0JlaGF2aW9yKGluamVjdG9yLCBtb2RlbGluZykge1xuICBpbmplY3Rvci5pbnZva2UoQ29tbWFuZEludGVyY2VwdG9yLCB0aGlzKTtcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUucmVwbGFjZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgY29uc3Qgb2xkU2hhcGUgPSBldmVudC5jb250ZXh0Lm9sZFNoYXBlO1xuICAgIGNvbnN0IG5ld1NoYXBlID0gZXZlbnQuY29udGV4dC5uZXdTaGFwZTtcbiAgICBjb25zdCBoaW50cyA9IGV2ZW50LmNvbnRleHQuaGludHM7XG5cbiAgICBpZiAoIWNhbkJlTm9uSW50ZXJydXB0aW5nKG5ld1NoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnR5ID0gZ2V0SW50ZXJydXB0aW5nUHJvcGVydHkobmV3U2hhcGUpO1xuICAgIGNvbnN0IGlzRXhwbGljaXRDaGFuZ2UgPSBoaW50cy50YXJnZXRFbGVtZW50ICYmIGhpbnRzLnRhcmdldEVsZW1lbnRbcHJvcGVydHldICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNFeHBsaWNpdENoYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzT2xkSW50ZXJydXB0aW5nID0gZ2V0QnVzaW5lc3NPYmplY3Qob2xkU2hhcGUpLmdldChwcm9wZXJ0eSk7XG4gICAgY29uc3QgaXNOZXdJbnRlcnJ1cHRpbmdEZWZhdWx0ID0gZ2V0QnVzaW5lc3NPYmplY3QobmV3U2hhcGUpLmdldChwcm9wZXJ0eSk7XG5cbiAgICBpZiAoaXNPbGRJbnRlcnJ1cHRpbmcgPT09IGlzTmV3SW50ZXJydXB0aW5nRGVmYXVsdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMobmV3U2hhcGUsIHtcbiAgICAgIFtwcm9wZXJ0eV06IGlzT2xkSW50ZXJydXB0aW5nXG4gICAgfSk7XG4gIH0pO1xufVxuXG5Ob25JbnRlcnJ1cHRpbmdCZWhhdmlvci4kaW5qZWN0ID0gWyAnaW5qZWN0b3InLCAnbW9kZWxpbmcnIF07XG5cbmluaGVyaXRzKE5vbkludGVycnVwdGluZ0JlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/NonInterruptingBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveElementBehavior.js":
/*!*******************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveElementBehavior.js ***!
\*******************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RemoveElementBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_LineIntersect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/LineIntersect */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineIntersect.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../../rules/BpmnRules').default} BpmnRules\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * @param {EventBus} eventBus\n * @param {BpmnRules} bpmnRules\n * @param {Modeling} modeling\n */\nfunction RemoveElementBehavior(eventBus, bpmnRules, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n /**\n * Combine sequence flows when deleting an element\n * if there is one incoming and one outgoing\n * sequence flow\n */\n this.preExecute('shape.delete', function(e) {\n\n var shape = e.context.shape;\n\n // only handle [a] -> [shape] -> [b] patterns\n if (shape.incoming.length !== 1 || shape.outgoing.length !== 1) {\n return;\n }\n\n var inConnection = shape.incoming[0],\n outConnection = shape.outgoing[0];\n\n // only handle sequence flows\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(inConnection, 'bpmn:SequenceFlow') || !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(outConnection, 'bpmn:SequenceFlow')) {\n return;\n }\n\n if (bpmnRules.canConnect(inConnection.source, outConnection.target, inConnection)) {\n\n // compute new, combined waypoints\n var newWaypoints = getNewWaypoints(inConnection.waypoints, outConnection.waypoints);\n\n modeling.reconnectEnd(inConnection, outConnection.target, newWaypoints);\n }\n });\n\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(RemoveElementBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nRemoveElementBehavior.$inject = [\n 'eventBus',\n 'bpmnRules',\n 'modeling'\n];\n\n\n// helpers //////////////////////\n\nfunction getDocking(point) {\n return point.original || point;\n}\n\n\nfunction getNewWaypoints(inWaypoints, outWaypoints) {\n\n var intersection = (0,_util_LineIntersect__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n getDocking(inWaypoints[inWaypoints.length - 2]),\n getDocking(inWaypoints[inWaypoints.length - 1]),\n getDocking(outWaypoints[1]),\n getDocking(outWaypoints[0]));\n\n if (intersection) {\n return [].concat(\n inWaypoints.slice(0, inWaypoints.length - 1),\n [ intersection ],\n outWaypoints.slice(1));\n } else {\n return [\n getDocking(inWaypoints[0]),\n getDocking(outWaypoints[outWaypoints.length - 1])\n ];\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZW1vdmVFbGVtZW50QmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBd0M7O0FBRUs7O0FBRThCOztBQUUxQjs7QUFFakQ7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLHlDQUF5QztBQUN0RCxhQUFhLCtCQUErQjtBQUM1Qzs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFdBQVc7QUFDdEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7O0FBRWYsRUFBRSxpRkFBa0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxtREFBRSx3Q0FBd0MsbURBQUU7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBLDREQUFRLHdCQUF3QixpRkFBa0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUEscUJBQXFCLCtEQUFhO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvUmVtb3ZlRWxlbWVudEJlaGF2aW9yLmpzP2I3MTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCBsaW5lSW50ZXJzZWN0IGZyb20gJy4vdXRpbC9MaW5lSW50ZXJzZWN0JztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3J1bGVzL0JwbW5SdWxlcycpLmRlZmF1bHR9IEJwbW5SdWxlc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbi8qKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7QnBtblJ1bGVzfSBicG1uUnVsZXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbW92ZUVsZW1lbnRCZWhhdmlvcihldmVudEJ1cywgYnBtblJ1bGVzLCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICAvKipcbiAgICogQ29tYmluZSBzZXF1ZW5jZSBmbG93cyB3aGVuIGRlbGV0aW5nIGFuIGVsZW1lbnRcbiAgICogaWYgdGhlcmUgaXMgb25lIGluY29taW5nIGFuZCBvbmUgb3V0Z29pbmdcbiAgICogc2VxdWVuY2UgZmxvd1xuICAgKi9cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGU7XG5cbiAgICAvLyBvbmx5IGhhbmRsZSBbYV0gLT4gW3NoYXBlXSAtPiBbYl0gcGF0dGVybnNcbiAgICBpZiAoc2hhcGUuaW5jb21pbmcubGVuZ3RoICE9PSAxIHx8IHNoYXBlLm91dGdvaW5nLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbkNvbm5lY3Rpb24gPSBzaGFwZS5pbmNvbWluZ1swXSxcbiAgICAgICAgb3V0Q29ubmVjdGlvbiA9IHNoYXBlLm91dGdvaW5nWzBdO1xuXG4gICAgLy8gb25seSBoYW5kbGUgc2VxdWVuY2UgZmxvd3NcbiAgICBpZiAoIWlzKGluQ29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykgfHwgIWlzKG91dENvbm5lY3Rpb24sICdicG1uOlNlcXVlbmNlRmxvdycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0KGluQ29ubmVjdGlvbi5zb3VyY2UsIG91dENvbm5lY3Rpb24udGFyZ2V0LCBpbkNvbm5lY3Rpb24pKSB7XG5cbiAgICAgIC8vIGNvbXB1dGUgbmV3LCBjb21iaW5lZCB3YXlwb2ludHNcbiAgICAgIHZhciBuZXdXYXlwb2ludHMgPSBnZXROZXdXYXlwb2ludHMoaW5Db25uZWN0aW9uLndheXBvaW50cywgb3V0Q29ubmVjdGlvbi53YXlwb2ludHMpO1xuXG4gICAgICBtb2RlbGluZy5yZWNvbm5lY3RFbmQoaW5Db25uZWN0aW9uLCBvdXRDb25uZWN0aW9uLnRhcmdldCwgbmV3V2F5cG9pbnRzKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbmluaGVyaXRzKFJlbW92ZUVsZW1lbnRCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuUmVtb3ZlRWxlbWVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdicG1uUnVsZXMnLFxuICAnbW9kZWxpbmcnXG5dO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXREb2NraW5nKHBvaW50KSB7XG4gIHJldHVybiBwb2ludC5vcmlnaW5hbCB8fCBwb2ludDtcbn1cblxuXG5mdW5jdGlvbiBnZXROZXdXYXlwb2ludHMoaW5XYXlwb2ludHMsIG91dFdheXBvaW50cykge1xuXG4gIHZhciBpbnRlcnNlY3Rpb24gPSBsaW5lSW50ZXJzZWN0KFxuICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbaW5XYXlwb2ludHMubGVuZ3RoIC0gMl0pLFxuICAgIGdldERvY2tpbmcoaW5XYXlwb2ludHNbaW5XYXlwb2ludHMubGVuZ3RoIC0gMV0pLFxuICAgIGdldERvY2tpbmcob3V0V2F5cG9pbnRzWzFdKSxcbiAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1swXSkpO1xuXG4gIGlmIChpbnRlcnNlY3Rpb24pIHtcbiAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgaW5XYXlwb2ludHMuc2xpY2UoMCwgaW5XYXlwb2ludHMubGVuZ3RoIC0gMSksXG4gICAgICBbIGludGVyc2VjdGlvbiBdLFxuICAgICAgb3V0V2F5cG9pbnRzLnNsaWNlKDEpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW1xuICAgICAgZ2V0RG9ja2luZyhpbldheXBvaW50c1swXSksXG4gICAgICBnZXREb2NraW5nKG91dFdheXBvaW50c1tvdXRXYXlwb2ludHMubGVuZ3RoIC0gMV0pXG4gICAgXTtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveElementBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js":
/*!*******************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js ***!
\*******************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RemoveEmbeddedLabelBoundsBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * BPMN specific behavior ensuring that bpmndi:Label's dc:Bounds are removed\n * when shape is resized.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction RemoveEmbeddedLabelBoundsBehavior(eventBus, modeling) {\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this.preExecute('shape.resize', function(context) {\n var shape = context.shape;\n\n var di = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getDi)(shape),\n label = di && di.get('label'),\n bounds = label && label.get('bounds');\n\n if (bounds) {\n modeling.updateModdleProperties(shape, label, {\n bounds: undefined\n });\n }\n }, true);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(RemoveEmbeddedLabelBoundsBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nRemoveEmbeddedLabelBoundsBehavior.$inject = [\n 'eventBus',\n 'modeling'\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZW1vdmVFbWJlZGRlZExhYmVsQm91bmRzQmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF3Qzs7QUFFbUM7O0FBRTNCOztBQUVoRDtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsK0JBQStCO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2YsRUFBRSxpRkFBa0I7O0FBRXBCO0FBQ0E7O0FBRUEsYUFBYSxzREFBSztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFQSw0REFBUSxvQ0FBb0MsaUZBQWtCOztBQUU5RDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1JlbW92ZUVtYmVkZGVkTGFiZWxCb3VuZHNCZWhhdmlvci5qcz9lNWY0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGdldERpIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBiZWhhdmlvciBlbnN1cmluZyB0aGF0IGJwbW5kaTpMYWJlbCdzIGRjOkJvdW5kcyBhcmUgcmVtb3ZlZFxuICogd2hlbiBzaGFwZSBpcyByZXNpemVkLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZW1vdmVFbWJlZGRlZExhYmVsQm91bmRzQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ3NoYXBlLnJlc2l6ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgdmFyIGRpID0gZ2V0RGkoc2hhcGUpLFxuICAgICAgICBsYWJlbCA9IGRpICYmIGRpLmdldCgnbGFiZWwnKSxcbiAgICAgICAgYm91bmRzID0gbGFiZWwgJiYgbGFiZWwuZ2V0KCdib3VuZHMnKTtcblxuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoc2hhcGUsIGxhYmVsLCB7XG4gICAgICAgIGJvdW5kczogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuXG5pbmhlcml0cyhSZW1vdmVFbWJlZGRlZExhYmVsQm91bmRzQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblJlbW92ZUVtYmVkZGVkTGFiZWxCb3VuZHNCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAnbW9kZWxpbmcnXG5dOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveParticipantBehavior.js":
/*!***********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveParticipantBehavior.js ***!
\***********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RemoveParticipantBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * BPMN specific remove behavior.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction RemoveParticipantBehavior(eventBus, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n\n /**\n * morph collaboration diagram into process diagram\n * after the last participant has been removed\n */\n\n this.preExecute('shape.delete', function(context) {\n\n var shape = context.shape,\n parent = shape.parent;\n\n // activate the behavior if the shape to be removed\n // is a participant\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Participant')) {\n context.collaborationRoot = parent;\n }\n }, true);\n\n this.postExecute('shape.delete', function(context) {\n\n var collaborationRoot = context.collaborationRoot;\n\n if (collaborationRoot && !collaborationRoot.businessObject.participants.length) {\n\n // replace empty collaboration with process diagram\n modeling.makeProcess();\n }\n }, true);\n\n}\n\nRemoveParticipantBehavior.$inject = [ 'eventBus', 'modeling' ];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(RemoveParticipantBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBd0M7O0FBRW1DOztBQUU5Qjs7QUFFN0M7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLCtCQUErQjtBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7O0FBRWYsRUFBRSxpRkFBa0I7OztBQUdwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQSw0REFBUSw0QkFBNEIsaUZBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci5qcz83M2I4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyByZW1vdmUgYmVoYXZpb3IuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG5cbiAgLyoqXG4gICAqIG1vcnBoIGNvbGxhYm9yYXRpb24gZGlhZ3JhbSBpbnRvIHByb2Nlc3MgZGlhZ3JhbVxuICAgKiBhZnRlciB0aGUgbGFzdCBwYXJ0aWNpcGFudCBoYXMgYmVlbiByZW1vdmVkXG4gICAqL1xuXG4gIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuZGVsZXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgICAgcGFyZW50ID0gc2hhcGUucGFyZW50O1xuXG4gICAgLy8gYWN0aXZhdGUgdGhlIGJlaGF2aW9yIGlmIHRoZSBzaGFwZSB0byBiZSByZW1vdmVkXG4gICAgLy8gaXMgYSBwYXJ0aWNpcGFudFxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgY29udGV4dC5jb2xsYWJvcmF0aW9uUm9vdCA9IHBhcmVudDtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGUoJ3NoYXBlLmRlbGV0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBjb2xsYWJvcmF0aW9uUm9vdCA9IGNvbnRleHQuY29sbGFib3JhdGlvblJvb3Q7XG5cbiAgICBpZiAoY29sbGFib3JhdGlvblJvb3QgJiYgIWNvbGxhYm9yYXRpb25Sb290LmJ1c2luZXNzT2JqZWN0LnBhcnRpY2lwYW50cy5sZW5ndGgpIHtcblxuICAgICAgLy8gcmVwbGFjZSBlbXB0eSBjb2xsYWJvcmF0aW9uIHdpdGggcHJvY2VzcyBkaWFncmFtXG4gICAgICBtb2RlbGluZy5tYWtlUHJvY2VzcygpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbn1cblxuUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnLCAnbW9kZWxpbmcnIF07XG5cbmluaGVyaXRzKFJlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveParticipantBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ReplaceConnectionBehavior.js":
/*!***********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ReplaceConnectionBehavior.js ***!
\***********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ReplaceConnectionBehavior)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('../../rules/BpmnRules').default} BpmnRules\n * @typedef {import('didi').Injector} Injector\n */\n\n/**\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n * @param {BpmnRules} bpmnRules\n * @param {Injector} injector\n */\nfunction ReplaceConnectionBehavior(eventBus, modeling, bpmnRules, injector) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n var dragging = injector.get('dragging', false);\n\n function fixConnection(connection) {\n\n var source = connection.source,\n target = connection.target,\n parent = connection.parent;\n\n // do not do anything if connection\n // is already deleted (may happen due to other\n // behaviors plugged-in before)\n if (!parent) {\n return;\n }\n\n var replacementType,\n remove;\n\n /**\n * Check if incoming or outgoing connections\n * can stay or could be substituted with an\n * appropriate replacement.\n *\n * This holds true for SequenceFlow <> MessageFlow.\n */\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(connection, 'bpmn:SequenceFlow')) {\n if (!bpmnRules.canConnectSequenceFlow(source, target)) {\n remove = true;\n }\n\n if (bpmnRules.canConnectMessageFlow(source, target)) {\n replacementType = 'bpmn:MessageFlow';\n }\n }\n\n // transform message flows into sequence flows, if possible\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(connection, 'bpmn:MessageFlow')) {\n\n if (!bpmnRules.canConnectMessageFlow(source, target)) {\n remove = true;\n }\n\n if (bpmnRules.canConnectSequenceFlow(source, target)) {\n replacementType = 'bpmn:SequenceFlow';\n }\n }\n\n // remove invalid connection,\n // unless it has been removed already\n if (remove) {\n modeling.removeConnection(connection);\n }\n\n // replace SequenceFlow <> MessageFlow\n\n if (replacementType) {\n modeling.connect(source, target, {\n type: replacementType,\n waypoints: connection.waypoints.slice()\n });\n }\n }\n\n function replaceReconnectedConnection(event) {\n\n var context = event.context,\n connection = context.connection,\n source = context.newSource || connection.source,\n target = context.newTarget || connection.target,\n allowed,\n replacement;\n\n allowed = bpmnRules.canConnect(source, target);\n\n if (!allowed || allowed.type === connection.type) {\n return;\n }\n\n replacement = modeling.connect(source, target, {\n type: allowed.type,\n associationDirection: allowed.associationDirection,\n waypoints: connection.waypoints.slice()\n });\n\n // remove old connection unless it's already removed\n if (connection.parent) {\n modeling.removeConnection(connection);\n }\n\n // replace connection in context to reconnect end/start\n context.connection = replacement;\n\n if (dragging) {\n cleanDraggingSelection(connection, replacement);\n }\n }\n\n // monkey-patch selection saved in dragging in order to re-select it when operation is finished\n function cleanDraggingSelection(oldConnection, newConnection) {\n var context = dragging.context(),\n previousSelection = context && context.payload.previousSelection,\n index;\n\n // do nothing if not dragging or no selection was present\n if (!previousSelection || !previousSelection.length) {\n return;\n }\n\n index = previousSelection.indexOf(oldConnection);\n\n if (index === -1) {\n return;\n }\n\n previousSelection.splice(index, 1, newConnection);\n }\n\n // lifecycle hooks\n\n this.postExecuted('elements.move', function(context) {\n\n var closure = context.closure,\n allConnections = closure.allConnections;\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.forEach)(allConnections, fixConnection);\n }, true);\n\n this.preExecute('connection.reconnect', replaceReconnectedConnection);\n\n this.postExecuted('element.updateProperties', function(event) {\n var context = event.context,\n properties = context.properties,\n element = context.element,\n businessObject = element.businessObject,\n connection;\n\n // remove condition on change to default\n if (properties.default) {\n connection = (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.find)(\n element.outgoing,\n (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.matchPattern)({ id: element.businessObject.default.id })\n );\n\n if (connection) {\n modeling.updateProperties(connection, { conditionExpression: undefined });\n }\n }\n\n // remove default from source on change to conditional\n if (properties.conditionExpression && businessObject.sourceRef.default === businessObject) {\n modeling.updateProperties(element.source, { default: undefined });\n }\n });\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(ReplaceConnectionBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nReplaceConnectionBehavior.$inject = [\n 'eventBus',\n 'modeling',\n 'bpmnRules',\n 'injector'\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBSWtCOztBQUVzQjs7QUFFbUM7O0FBRTlCOztBQUU3QztBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsK0JBQStCO0FBQzVDLGFBQWEseUNBQXlDO0FBQ3RELGFBQWEseUJBQXlCO0FBQ3RDOztBQUVBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFdBQVc7QUFDdEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7O0FBRWYsRUFBRSxpRkFBa0I7O0FBRXBCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsbURBQUU7O0FBRVY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxJQUFJLGlEQUFPO0FBQ1gsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQiw4Q0FBSTtBQUN2QjtBQUNBLFFBQVEsc0RBQVksR0FBRyx1Q0FBdUM7QUFDOUQ7O0FBRUE7QUFDQSxnREFBZ0QsZ0NBQWdDO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRCxvQkFBb0I7QUFDdEU7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsNERBQVEsNEJBQTRCLGlGQUFrQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvUmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvci5qcz85OWRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGZvckVhY2gsXG4gIGZpbmQsXG4gIG1hdGNoUGF0dGVyblxufSBmcm9tICdtaW4tZGFzaCc7XG5cbmltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vcnVsZXMvQnBtblJ1bGVzJykuZGVmYXVsdH0gQnBtblJ1bGVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWRpJykuSW5qZWN0b3J9IEluamVjdG9yXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7QnBtblJ1bGVzfSBicG1uUnVsZXNcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCBicG1uUnVsZXMsIGluamVjdG9yKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHZhciBkcmFnZ2luZyA9IGluamVjdG9yLmdldCgnZHJhZ2dpbmcnLCBmYWxzZSk7XG5cbiAgZnVuY3Rpb24gZml4Q29ubmVjdGlvbihjb25uZWN0aW9uKSB7XG5cbiAgICB2YXIgc291cmNlID0gY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBwYXJlbnQgPSBjb25uZWN0aW9uLnBhcmVudDtcblxuICAgIC8vIGRvIG5vdCBkbyBhbnl0aGluZyBpZiBjb25uZWN0aW9uXG4gICAgLy8gaXMgYWxyZWFkeSBkZWxldGVkIChtYXkgaGFwcGVuIGR1ZSB0byBvdGhlclxuICAgIC8vIGJlaGF2aW9ycyBwbHVnZ2VkLWluIGJlZm9yZSlcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZXBsYWNlbWVudFR5cGUsXG4gICAgICAgIHJlbW92ZTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGluY29taW5nIG9yIG91dGdvaW5nIGNvbm5lY3Rpb25zXG4gICAgICogY2FuIHN0YXkgb3IgY291bGQgYmUgc3Vic3RpdHV0ZWQgd2l0aCBhblxuICAgICAqIGFwcHJvcHJpYXRlIHJlcGxhY2VtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBob2xkcyB0cnVlIGZvciBTZXF1ZW5jZUZsb3cgPD4gTWVzc2FnZUZsb3cuXG4gICAgICovXG5cbiAgICBpZiAoaXMoY29ubmVjdGlvbiwgJ2JwbW46U2VxdWVuY2VGbG93JykpIHtcbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3RTZXF1ZW5jZUZsb3coc291cmNlLCB0YXJnZXQpKSB7XG4gICAgICAgIHJlbW92ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChicG1uUnVsZXMuY2FuQ29ubmVjdE1lc3NhZ2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXBsYWNlbWVudFR5cGUgPSAnYnBtbjpNZXNzYWdlRmxvdyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJhbnNmb3JtIG1lc3NhZ2UgZmxvd3MgaW50byBzZXF1ZW5jZSBmbG93cywgaWYgcG9zc2libGVcblxuICAgIGlmIChpcyhjb25uZWN0aW9uLCAnYnBtbjpNZXNzYWdlRmxvdycpKSB7XG5cbiAgICAgIGlmICghYnBtblJ1bGVzLmNhbkNvbm5lY3RNZXNzYWdlRmxvdyhzb3VyY2UsIHRhcmdldCkpIHtcbiAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJwbW5SdWxlcy5jYW5Db25uZWN0U2VxdWVuY2VGbG93KHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXBsYWNlbWVudFR5cGUgPSAnYnBtbjpTZXF1ZW5jZUZsb3cnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBpbnZhbGlkIGNvbm5lY3Rpb24sXG4gICAgLy8gdW5sZXNzIGl0IGhhcyBiZWVuIHJlbW92ZWQgYWxyZWFkeVxuICAgIGlmIChyZW1vdmUpIHtcbiAgICAgIG1vZGVsaW5nLnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gcmVwbGFjZSBTZXF1ZW5jZUZsb3cgPD4gTWVzc2FnZUZsb3dcblxuICAgIGlmIChyZXBsYWNlbWVudFR5cGUpIHtcbiAgICAgIG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIHtcbiAgICAgICAgdHlwZTogcmVwbGFjZW1lbnRUeXBlLFxuICAgICAgICB3YXlwb2ludHM6IGNvbm5lY3Rpb24ud2F5cG9pbnRzLnNsaWNlKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWNvbm5lY3RlZENvbm5lY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbnRleHQuY29ubmVjdGlvbixcbiAgICAgICAgc291cmNlID0gY29udGV4dC5uZXdTb3VyY2UgfHwgY29ubmVjdGlvbi5zb3VyY2UsXG4gICAgICAgIHRhcmdldCA9IGNvbnRleHQubmV3VGFyZ2V0IHx8IGNvbm5lY3Rpb24udGFyZ2V0LFxuICAgICAgICBhbGxvd2VkLFxuICAgICAgICByZXBsYWNlbWVudDtcblxuICAgIGFsbG93ZWQgPSBicG1uUnVsZXMuY2FuQ29ubmVjdChzb3VyY2UsIHRhcmdldCk7XG5cbiAgICBpZiAoIWFsbG93ZWQgfHwgYWxsb3dlZC50eXBlID09PSBjb25uZWN0aW9uLnR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXBsYWNlbWVudCA9IG1vZGVsaW5nLmNvbm5lY3Qoc291cmNlLCB0YXJnZXQsIHtcbiAgICAgIHR5cGU6IGFsbG93ZWQudHlwZSxcbiAgICAgIGFzc29jaWF0aW9uRGlyZWN0aW9uOiBhbGxvd2VkLmFzc29jaWF0aW9uRGlyZWN0aW9uLFxuICAgICAgd2F5cG9pbnRzOiBjb25uZWN0aW9uLndheXBvaW50cy5zbGljZSgpXG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgb2xkIGNvbm5lY3Rpb24gdW5sZXNzIGl0J3MgYWxyZWFkeSByZW1vdmVkXG4gICAgaWYgKGNvbm5lY3Rpb24ucGFyZW50KSB7XG4gICAgICBtb2RlbGluZy5yZW1vdmVDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIHJlcGxhY2UgY29ubmVjdGlvbiBpbiBjb250ZXh0IHRvIHJlY29ubmVjdCBlbmQvc3RhcnRcbiAgICBjb250ZXh0LmNvbm5lY3Rpb24gPSByZXBsYWNlbWVudDtcblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgY2xlYW5EcmFnZ2luZ1NlbGVjdGlvbihjb25uZWN0aW9uLCByZXBsYWNlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbW9ua2V5LXBhdGNoIHNlbGVjdGlvbiBzYXZlZCBpbiBkcmFnZ2luZyBpbiBvcmRlciB0byByZS1zZWxlY3QgaXQgd2hlbiBvcGVyYXRpb24gaXMgZmluaXNoZWRcbiAgZnVuY3Rpb24gY2xlYW5EcmFnZ2luZ1NlbGVjdGlvbihvbGRDb25uZWN0aW9uLCBuZXdDb25uZWN0aW9uKSB7XG4gICAgdmFyIGNvbnRleHQgPSBkcmFnZ2luZy5jb250ZXh0KCksXG4gICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gY29udGV4dCAmJiBjb250ZXh0LnBheWxvYWQucHJldmlvdXNTZWxlY3Rpb24sXG4gICAgICAgIGluZGV4O1xuXG4gICAgLy8gZG8gbm90aGluZyBpZiBub3QgZHJhZ2dpbmcgb3Igbm8gc2VsZWN0aW9uIHdhcyBwcmVzZW50XG4gICAgaWYgKCFwcmV2aW91c1NlbGVjdGlvbiB8fCAhcHJldmlvdXNTZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5kZXggPSBwcmV2aW91c1NlbGVjdGlvbi5pbmRleE9mKG9sZENvbm5lY3Rpb24pO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByZXZpb3VzU2VsZWN0aW9uLnNwbGljZShpbmRleCwgMSwgbmV3Q29ubmVjdGlvbik7XG4gIH1cblxuICAvLyBsaWZlY3ljbGUgaG9va3NcblxuICB0aGlzLnBvc3RFeGVjdXRlZCgnZWxlbWVudHMubW92ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBjbG9zdXJlID0gY29udGV4dC5jbG9zdXJlLFxuICAgICAgICBhbGxDb25uZWN0aW9ucyA9IGNsb3N1cmUuYWxsQ29ubmVjdGlvbnM7XG5cbiAgICBmb3JFYWNoKGFsbENvbm5lY3Rpb25zLCBmaXhDb25uZWN0aW9uKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdjb25uZWN0aW9uLnJlY29ubmVjdCcsIHJlcGxhY2VSZWNvbm5lY3RlZENvbm5lY3Rpb24pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgcHJvcGVydGllcyA9IGNvbnRleHQucHJvcGVydGllcyxcbiAgICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBlbGVtZW50LmJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBjb25uZWN0aW9uO1xuXG4gICAgLy8gcmVtb3ZlIGNvbmRpdGlvbiBvbiBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmIChwcm9wZXJ0aWVzLmRlZmF1bHQpIHtcbiAgICAgIGNvbm5lY3Rpb24gPSBmaW5kKFxuICAgICAgICBlbGVtZW50Lm91dGdvaW5nLFxuICAgICAgICBtYXRjaFBhdHRlcm4oeyBpZDogZWxlbWVudC5idXNpbmVzc09iamVjdC5kZWZhdWx0LmlkIH0pXG4gICAgICApO1xuXG4gICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGNvbm5lY3Rpb24sIHsgY29uZGl0aW9uRXhwcmVzc2lvbjogdW5kZWZpbmVkIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlbW92ZSBkZWZhdWx0IGZyb20gc291cmNlIG9uIGNoYW5nZSB0byBjb25kaXRpb25hbFxuICAgIGlmIChwcm9wZXJ0aWVzLmNvbmRpdGlvbkV4cHJlc3Npb24gJiYgYnVzaW5lc3NPYmplY3Quc291cmNlUmVmLmRlZmF1bHQgPT09IGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQuc291cmNlLCB7IGRlZmF1bHQ6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbmhlcml0cyhSZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG4gICdicG1uUnVsZXMnLFxuICAnaW5qZWN0b3InXG5dO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ReplaceConnectionBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ReplaceElementBehaviour.js":
/*!*********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ReplaceElementBehaviour.js ***!
\*********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ReplaceElementBehaviour)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('../../replace/BpmnReplace').default} BpmnReplace\n * @typedef {import('../../rules/BpmnRules').default} BpmnRules\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\n * @typedef {import('didi').Injector} Injector\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('diagram-js/lib/features/selection/Selection').default} Selection\n */\n\n/**\n * BPMN-specific replace behavior.\n *\n * @param {BpmnReplace} bpmnReplace\n * @param {BpmnRules} bpmnRules\n * @param {ElementRegistry} elementRegistry\n * @param {Injector} injector\n * @param {Modeling} modeling\n * @param {Selection} selection\n */\nfunction ReplaceElementBehaviour(\n bpmnReplace,\n bpmnRules,\n elementRegistry,\n injector,\n modeling,\n selection\n) {\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n\n this._bpmnReplace = bpmnReplace;\n this._elementRegistry = elementRegistry;\n this._selection = selection;\n\n // replace elements on create, e.g. during copy-paste\n this.postExecuted([ 'elements.create' ], 500, function(event) {\n var context = event.context,\n target = context.parent,\n elements = context.elements;\n\n var elementReplacements = (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.reduce)(elements, function(replacements, element) {\n var canReplace = bpmnRules.canReplace([ element ], element.host || element.parent || target);\n\n return canReplace ? replacements.concat(canReplace.replacements) : replacements;\n }, []);\n\n if (elementReplacements.length) {\n this._replaceElements(elements, elementReplacements);\n }\n }, this);\n\n // replace elements on move\n this.postExecuted([ 'elements.move' ], 500, function(event) {\n var context = event.context,\n target = context.newParent,\n newHost = context.newHost,\n elements = [];\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.forEach)(context.closure.topLevel, function(topLevelElements) {\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_2__.isEventSubProcess)(topLevelElements)) {\n elements = elements.concat(topLevelElements.children);\n } else {\n elements = elements.concat(topLevelElements);\n }\n });\n\n // set target to host if attaching\n if (elements.length === 1 && newHost) {\n target = newHost;\n }\n\n var canReplace = bpmnRules.canReplace(elements, target);\n\n if (canReplace) {\n this._replaceElements(elements, canReplace.replacements, newHost);\n }\n }, this);\n\n // update attachments on host replace\n this.postExecute([ 'shape.replace' ], 1500, function(e) {\n var context = e.context,\n oldShape = context.oldShape,\n newShape = context.newShape,\n attachers = oldShape.attachers,\n canReplace;\n\n if (attachers && attachers.length) {\n canReplace = bpmnRules.canReplace(attachers, newShape);\n\n this._replaceElements(attachers, canReplace.replacements);\n }\n\n }, this);\n\n // keep ID on shape replace\n this.postExecuted([ 'shape.replace' ], 1500, function(e) {\n var context = e.context,\n oldShape = context.oldShape,\n newShape = context.newShape;\n\n modeling.unclaimId(oldShape.businessObject.id, oldShape.businessObject);\n modeling.updateProperties(newShape, { id: oldShape.id });\n });\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(ReplaceElementBehaviour, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nReplaceElementBehaviour.prototype._replaceElements = function(elements, newElements) {\n var elementRegistry = this._elementRegistry,\n bpmnReplace = this._bpmnReplace,\n selection = this._selection;\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.forEach)(newElements, function(replacement) {\n var newElement = {\n type: replacement.newElementType\n };\n\n var oldElement = elementRegistry.get(replacement.oldElementId);\n\n var idx = elements.indexOf(oldElement);\n\n elements[idx] = bpmnReplace.replaceElement(oldElement, newElement, { select: false });\n });\n\n if (newElements) {\n selection.select(elements);\n }\n};\n\nReplaceElementBehaviour.$inject = [\n 'bpmnReplace',\n 'bpmnRules',\n 'elementRegistry',\n 'injector',\n 'modeling',\n 'selection'\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXBsYWNlRWxlbWVudEJlaGF2aW91ci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3Qzs7QUFFRzs7QUFFZ0M7O0FBRWxCOztBQUV6RDtBQUNBLGFBQWEsNkNBQTZDO0FBQzFELGFBQWEseUNBQXlDO0FBQ3RELGFBQWEsdURBQXVEO0FBQ3BFLGFBQWEseUJBQXlCO0FBQ3RDLGFBQWEsK0JBQStCO0FBQzVDLGFBQWEsK0RBQStEO0FBQzVFOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixXQUFXLFdBQVc7QUFDdEIsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFdBQVc7QUFDdEI7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGlGQUFrQjs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCLGdEQUFNO0FBQ3BDOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLGlEQUFPO0FBQ1gsVUFBVSwrREFBaUI7QUFDM0I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDLGlCQUFpQjtBQUMzRCxHQUFHO0FBQ0g7O0FBRUEsNERBQVEsMEJBQTBCLGlGQUFrQjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxpREFBTztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx5RUFBeUUsZUFBZTtBQUN4RixHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXBsYWNlRWxlbWVudEJlaGF2aW91ci5qcz80OGVkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IHsgZm9yRWFjaCwgcmVkdWNlIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgaXNFdmVudFN1YlByb2Nlc3MgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vcmVwbGFjZS9CcG1uUmVwbGFjZScpLmRlZmF1bHR9IEJwbW5SZXBsYWNlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9ydWxlcy9CcG1uUnVsZXMnKS5kZWZhdWx0fSBCcG1uUnVsZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudFJlZ2lzdHJ5JykuZGVmYXVsdH0gRWxlbWVudFJlZ2lzdHJ5XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWRpJykuSW5qZWN0b3J9IEluamVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9mZWF0dXJlcy9zZWxlY3Rpb24vU2VsZWN0aW9uJykuZGVmYXVsdH0gU2VsZWN0aW9uXG4gKi9cblxuLyoqXG4gKiBCUE1OLXNwZWNpZmljIHJlcGxhY2UgYmVoYXZpb3IuXG4gKlxuICogQHBhcmFtIHtCcG1uUmVwbGFjZX0gYnBtblJlcGxhY2VcbiAqIEBwYXJhbSB7QnBtblJ1bGVzfSBicG1uUnVsZXNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlRWxlbWVudEJlaGF2aW91cihcbiAgICBicG1uUmVwbGFjZSxcbiAgICBicG1uUnVsZXMsXG4gICAgZWxlbWVudFJlZ2lzdHJ5LFxuICAgIGluamVjdG9yLFxuICAgIG1vZGVsaW5nLFxuICAgIHNlbGVjdGlvblxuKSB7XG4gIGluamVjdG9yLmludm9rZShDb21tYW5kSW50ZXJjZXB0b3IsIHRoaXMpO1xuXG4gIHRoaXMuX2JwbW5SZXBsYWNlID0gYnBtblJlcGxhY2U7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuXG4gIC8vIHJlcGxhY2UgZWxlbWVudHMgb24gY3JlYXRlLCBlLmcuIGR1cmluZyBjb3B5LXBhc3RlXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ2VsZW1lbnRzLmNyZWF0ZScgXSwgNTAwLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgdGFyZ2V0ID0gY29udGV4dC5wYXJlbnQsXG4gICAgICAgIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIHZhciBlbGVtZW50UmVwbGFjZW1lbnRzID0gcmVkdWNlKGVsZW1lbnRzLCBmdW5jdGlvbihyZXBsYWNlbWVudHMsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBjYW5SZXBsYWNlID0gYnBtblJ1bGVzLmNhblJlcGxhY2UoWyBlbGVtZW50IF0sIGVsZW1lbnQuaG9zdCB8fCBlbGVtZW50LnBhcmVudCB8fCB0YXJnZXQpO1xuXG4gICAgICByZXR1cm4gY2FuUmVwbGFjZSA/IHJlcGxhY2VtZW50cy5jb25jYXQoY2FuUmVwbGFjZS5yZXBsYWNlbWVudHMpIDogcmVwbGFjZW1lbnRzO1xuICAgIH0sIFtdKTtcblxuICAgIGlmIChlbGVtZW50UmVwbGFjZW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fcmVwbGFjZUVsZW1lbnRzKGVsZW1lbnRzLCBlbGVtZW50UmVwbGFjZW1lbnRzKTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIC8vIHJlcGxhY2UgZWxlbWVudHMgb24gbW92ZVxuICB0aGlzLnBvc3RFeGVjdXRlZChbICdlbGVtZW50cy5tb3ZlJyBdLCA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICB0YXJnZXQgPSBjb250ZXh0Lm5ld1BhcmVudCxcbiAgICAgICAgbmV3SG9zdCA9IGNvbnRleHQubmV3SG9zdCxcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICAgIGZvckVhY2goY29udGV4dC5jbG9zdXJlLnRvcExldmVsLCBmdW5jdGlvbih0b3BMZXZlbEVsZW1lbnRzKSB7XG4gICAgICBpZiAoaXNFdmVudFN1YlByb2Nlc3ModG9wTGV2ZWxFbGVtZW50cykpIHtcbiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy5jb25jYXQodG9wTGV2ZWxFbGVtZW50cy5jaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmNvbmNhdCh0b3BMZXZlbEVsZW1lbnRzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHNldCB0YXJnZXQgdG8gaG9zdCBpZiBhdHRhY2hpbmdcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxICYmIG5ld0hvc3QpIHtcbiAgICAgIHRhcmdldCA9IG5ld0hvc3Q7XG4gICAgfVxuXG4gICAgdmFyIGNhblJlcGxhY2UgPSBicG1uUnVsZXMuY2FuUmVwbGFjZShlbGVtZW50cywgdGFyZ2V0KTtcblxuICAgIGlmIChjYW5SZXBsYWNlKSB7XG4gICAgICB0aGlzLl9yZXBsYWNlRWxlbWVudHMoZWxlbWVudHMsIGNhblJlcGxhY2UucmVwbGFjZW1lbnRzLCBuZXdIb3N0KTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIC8vIHVwZGF0ZSBhdHRhY2htZW50cyBvbiBob3N0IHJlcGxhY2VcbiAgdGhpcy5wb3N0RXhlY3V0ZShbICdzaGFwZS5yZXBsYWNlJyBdLCAxNTAwLCBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQsXG4gICAgICAgIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZSxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlLFxuICAgICAgICBhdHRhY2hlcnMgPSBvbGRTaGFwZS5hdHRhY2hlcnMsXG4gICAgICAgIGNhblJlcGxhY2U7XG5cbiAgICBpZiAoYXR0YWNoZXJzICYmIGF0dGFjaGVycy5sZW5ndGgpIHtcbiAgICAgIGNhblJlcGxhY2UgPSBicG1uUnVsZXMuY2FuUmVwbGFjZShhdHRhY2hlcnMsIG5ld1NoYXBlKTtcblxuICAgICAgdGhpcy5fcmVwbGFjZUVsZW1lbnRzKGF0dGFjaGVycywgY2FuUmVwbGFjZS5yZXBsYWNlbWVudHMpO1xuICAgIH1cblxuICB9LCB0aGlzKTtcblxuICAvLyBrZWVwIElEIG9uIHNoYXBlIHJlcGxhY2VcbiAgdGhpcy5wb3N0RXhlY3V0ZWQoWyAnc2hhcGUucmVwbGFjZScgXSwgMTUwMCwgZnVuY3Rpb24oZSkge1xuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBvbGRTaGFwZSA9IGNvbnRleHQub2xkU2hhcGUsXG4gICAgICAgIG5ld1NoYXBlID0gY29udGV4dC5uZXdTaGFwZTtcblxuICAgIG1vZGVsaW5nLnVuY2xhaW1JZChvbGRTaGFwZS5idXNpbmVzc09iamVjdC5pZCwgb2xkU2hhcGUuYnVzaW5lc3NPYmplY3QpO1xuICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMobmV3U2hhcGUsIHsgaWQ6IG9sZFNoYXBlLmlkIH0pO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoUmVwbGFjZUVsZW1lbnRCZWhhdmlvdXIsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblJlcGxhY2VFbGVtZW50QmVoYXZpb3VyLnByb3RvdHlwZS5fcmVwbGFjZUVsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMsIG5ld0VsZW1lbnRzKSB7XG4gIHZhciBlbGVtZW50UmVnaXN0cnkgPSB0aGlzLl9lbGVtZW50UmVnaXN0cnksXG4gICAgICBicG1uUmVwbGFjZSA9IHRoaXMuX2JwbW5SZXBsYWNlLFxuICAgICAgc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uO1xuXG4gIGZvckVhY2gobmV3RWxlbWVudHMsIGZ1bmN0aW9uKHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSB7XG4gICAgICB0eXBlOiByZXBsYWNlbWVudC5uZXdFbGVtZW50VHlwZVxuICAgIH07XG5cbiAgICB2YXIgb2xkRWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQocmVwbGFjZW1lbnQub2xkRWxlbWVudElkKTtcblxuICAgIHZhciBpZHggPSBlbGVtZW50cy5pbmRleE9mKG9sZEVsZW1lbnQpO1xuXG4gICAgZWxlbWVudHNbaWR4XSA9IGJwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQsIHsgc2VsZWN0OiBmYWxzZSB9KTtcbiAgfSk7XG5cbiAgaWYgKG5ld0VsZW1lbnRzKSB7XG4gICAgc2VsZWN0aW9uLnNlbGVjdChlbGVtZW50cyk7XG4gIH1cbn07XG5cblJlcGxhY2VFbGVtZW50QmVoYXZpb3VyLiRpbmplY3QgPSBbXG4gICdicG1uUmVwbGFjZScsXG4gICdicG1uUnVsZXMnLFxuICAnZWxlbWVudFJlZ2lzdHJ5JyxcbiAgJ2luamVjdG9yJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ3NlbGVjdGlvbidcbl07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ReplaceElementBehaviour.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeBehavior.js":
/*!************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeBehavior.js ***!
\************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GROUP_MIN_DIMENSIONS: () => (/* binding */ GROUP_MIN_DIMENSIONS),\n/* harmony export */ LANE_MIN_DIMENSIONS: () => (/* binding */ LANE_MIN_DIMENSIONS),\n/* harmony export */ PARTICIPANT_MIN_DIMENSIONS: () => (/* binding */ PARTICIPANT_MIN_DIMENSIONS),\n/* harmony export */ SUB_PROCESS_MIN_DIMENSIONS: () => (/* binding */ SUB_PROCESS_MIN_DIMENSIONS),\n/* harmony export */ TEXT_ANNOTATION_MIN_DIMENSIONS: () => (/* binding */ TEXT_ANNOTATION_MIN_DIMENSIONS),\n/* harmony export */ VERTICAL_LANE_MIN_DIMENSIONS: () => (/* binding */ VERTICAL_LANE_MIN_DIMENSIONS),\n/* harmony export */ VERTICAL_PARTICIPANT_MIN_DIMENSIONS: () => (/* binding */ VERTICAL_PARTICIPANT_MIN_DIMENSIONS),\n/* harmony export */ \"default\": () => (/* binding */ ResizeBehavior),\n/* harmony export */ getParticipantResizeConstraints: () => (/* binding */ getParticipantResizeConstraints)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var _util_LaneUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n\n\n\n\n\n\n\n\nvar HIGH_PRIORITY = 1500;\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n *\n * @typedef {import('../../../model/Types').Shape} Shape\n *\n * @typedef {import('diagram-js/lib/util/Types').Dimensions} Dimensions\n * @typedef {import('diagram-js/lib/util/Types').Direction} Direction\n * @typedef {import('diagram-js/lib/util/Types').RectTRBL} RectTRBL\n */\n\n/**\n * @type {Dimensions}\n */\nvar GROUP_MIN_DIMENSIONS = { width: 140, height: 120 };\n\n/**\n * @type {Dimensions}\n */\nvar LANE_MIN_DIMENSIONS = { width: 300, height: 60 };\n\n/**\n * @type {Dimensions}\n */\nvar VERTICAL_LANE_MIN_DIMENSIONS = { width: 60, height: 300 };\n\n/**\n * @type {Dimensions}\n */\nvar PARTICIPANT_MIN_DIMENSIONS = { width: 300, height: 150 };\n\n/**\n * @type {Dimensions}\n */\nvar VERTICAL_PARTICIPANT_MIN_DIMENSIONS = { width: 150, height: 300 };\n\n/**\n * @type {Dimensions}\n */\nvar SUB_PROCESS_MIN_DIMENSIONS = { width: 140, height: 120 };\n\n/**\n * @type {Dimensions}\n */\nvar TEXT_ANNOTATION_MIN_DIMENSIONS = { width: 50, height: 30 };\n\n/**\n * Set minimum bounds/resize constraints on resize.\n *\n * @param {EventBus} eventBus\n */\nfunction ResizeBehavior(eventBus) {\n eventBus.on('resize.start', HIGH_PRIORITY, function(event) {\n var context = event.context,\n shape = context.shape,\n direction = context.direction,\n balanced = context.balanced;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:Lane') || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:Participant')) {\n context.resizeConstraints = getParticipantResizeConstraints(shape, direction, balanced);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:SubProcess') && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_1__.isExpanded)(shape)) {\n context.minDimensions = SUB_PROCESS_MIN_DIMENSIONS;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:TextAnnotation')) {\n context.minDimensions = TEXT_ANNOTATION_MIN_DIMENSIONS;\n }\n });\n}\n\nResizeBehavior.$inject = [ 'eventBus' ];\n\n\nvar abs = Math.abs,\n min = Math.min,\n max = Math.max;\n\n\nfunction addToTrbl(trbl, attr, value, choice) {\n var current = trbl[attr];\n\n // make sure to set the value if it does not exist\n // or apply the correct value by comparing against\n // choice(value, currentValue)\n trbl[attr] = current === undefined ? value : choice(value, current);\n}\n\nfunction addMin(trbl, attr, value) {\n return addToTrbl(trbl, attr, value, min);\n}\n\nfunction addMax(trbl, attr, value) {\n return addToTrbl(trbl, attr, value, max);\n}\n\nvar LANE_PADDING = { top: 20, left: 50, right: 20, bottom: 20 },\n VERTICAL_LANE_PADDING = { top: 50, left: 20, right: 20, bottom: 20 };\n\n/**\n * @param {Shape} laneShape\n * @param {Direction} resizeDirection\n * @param {boolean} [balanced=false]\n *\n * @return { {\n * min: RectTRBL;\n * max: RectTRBL;\n * } }\n */\nfunction getParticipantResizeConstraints(laneShape, resizeDirection, balanced) {\n var lanesRoot = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_2__.getLanesRoot)(laneShape);\n\n var isFirst = true,\n isLast = true;\n\n var allLanes = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_2__.collectLanes)(lanesRoot, [ lanesRoot ]);\n\n var laneTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_3__.asTRBL)(laneShape);\n\n var maxTrbl = {},\n minTrbl = {};\n\n var isHorizontalLane = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_1__.isHorizontal)(laneShape);\n\n var minDimensions = isHorizontalLane ? LANE_MIN_DIMENSIONS : VERTICAL_LANE_MIN_DIMENSIONS;\n\n if (/n/.test(resizeDirection)) {\n minTrbl.top = laneTrbl.bottom - minDimensions.height;\n } else\n if (/e/.test(resizeDirection)) {\n minTrbl.right = laneTrbl.left + minDimensions.width;\n } else\n if (/s/.test(resizeDirection)) {\n minTrbl.bottom = laneTrbl.top + minDimensions.height;\n } else\n if (/w/.test(resizeDirection)) {\n minTrbl.left = laneTrbl.right - minDimensions.width;\n }\n\n // min/max size based on related lanes\n allLanes.forEach(function(other) {\n\n var otherTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_3__.asTRBL)(other);\n\n if (/n/.test(resizeDirection)) {\n if (isHorizontalLane && otherTrbl.top < (laneTrbl.top - 10)) {\n isFirst = false;\n }\n\n // max top size (based on next element)\n if (balanced && abs(laneTrbl.top - otherTrbl.bottom) < 10) {\n addMax(maxTrbl, 'top', otherTrbl.top + minDimensions.height);\n }\n\n // min top size (based on self or nested element)\n if (abs(laneTrbl.top - otherTrbl.top) < 5) {\n addMin(minTrbl, 'top', otherTrbl.bottom - minDimensions.height);\n }\n }\n\n if (/e/.test(resizeDirection)) {\n\n if (!isHorizontalLane && otherTrbl.right > (laneTrbl.right + 10)) {\n isLast = false;\n }\n\n // max right size (based on previous element)\n if (balanced && abs(laneTrbl.right - otherTrbl.left) < 10) {\n addMin(maxTrbl, 'right', otherTrbl.right - minDimensions.width);\n }\n\n // min right size (based on self or nested element)\n if (abs(laneTrbl.right - otherTrbl.right) < 5) {\n addMax(minTrbl, 'right', otherTrbl.left + minDimensions.width);\n }\n }\n\n if (/s/.test(resizeDirection)) {\n\n if (isHorizontalLane && otherTrbl.bottom > (laneTrbl.bottom + 10)) {\n isLast = false;\n }\n\n // max bottom size (based on previous element)\n if (balanced && abs(laneTrbl.bottom - otherTrbl.top) < 10) {\n addMin(maxTrbl, 'bottom', otherTrbl.bottom - minDimensions.height);\n }\n\n // min bottom size (based on self or nested element)\n if (abs(laneTrbl.bottom - otherTrbl.bottom) < 5) {\n addMax(minTrbl, 'bottom', otherTrbl.top + minDimensions.height);\n }\n }\n\n if (/w/.test(resizeDirection)) {\n\n if (!isHorizontalLane && otherTrbl.left < (laneTrbl.left - 10)) {\n isFirst = false;\n }\n\n // max left size (based on next element)\n if (balanced && abs(laneTrbl.left - otherTrbl.right) < 10) {\n addMax(maxTrbl, 'left', otherTrbl.left + minDimensions.width);\n }\n\n // min left size (based on self or nested element)\n if (abs(laneTrbl.left - otherTrbl.left) < 5) {\n addMin(minTrbl, 'left', otherTrbl.right - minDimensions.width);\n }\n }\n });\n\n // max top/bottom/left/right size based on flow nodes\n var flowElements = lanesRoot.children.filter(function(s) {\n return !s.hidden && !s.waypoints && ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(s, 'bpmn:FlowElement') || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(s, 'bpmn:Artifact'));\n });\n\n var padding = isHorizontalLane ? LANE_PADDING : VERTICAL_LANE_PADDING;\n\n flowElements.forEach(function(flowElement) {\n\n var flowElementTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_3__.asTRBL)(flowElement);\n\n if (isFirst && /n/.test(resizeDirection)) {\n addMin(minTrbl, 'top', flowElementTrbl.top - padding.top);\n }\n\n if (isLast && /e/.test(resizeDirection)) {\n addMax(minTrbl, 'right', flowElementTrbl.right + padding.right);\n }\n\n if (isLast && /s/.test(resizeDirection)) {\n addMax(minTrbl, 'bottom', flowElementTrbl.bottom + padding.bottom);\n }\n\n if (isFirst && /w/.test(resizeDirection)) {\n addMin(minTrbl, 'left', flowElementTrbl.left - padding.left);\n }\n });\n\n return {\n min: minTrbl,\n max: maxTrbl\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXNpemVCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQTZDOztBQUtmOztBQUlZOztBQUtoQjs7QUFFMUI7O0FBRUE7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RDtBQUNBLGFBQWEsc0NBQXNDO0FBQ25EO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwrQ0FBK0M7QUFDNUQsYUFBYSw4Q0FBOEM7QUFDM0Q7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDTyw2QkFBNkI7O0FBRXBDO0FBQ0EsVUFBVTtBQUNWO0FBQ08sNEJBQTRCOztBQUVuQztBQUNBLFVBQVU7QUFDVjtBQUNPLHFDQUFxQzs7QUFFNUM7QUFDQSxVQUFVO0FBQ1Y7QUFDTyxtQ0FBbUM7O0FBRTFDO0FBQ0EsVUFBVTtBQUNWO0FBQ08sNENBQTRDOztBQUVuRDtBQUNBLFVBQVU7QUFDVjtBQUNPLG1DQUFtQzs7QUFFMUM7QUFDQSxVQUFVO0FBQ1Y7QUFDTyx1Q0FBdUM7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFLHdCQUF3QixtREFBRTtBQUNwQztBQUNBOztBQUVBLFFBQVEsbURBQUUsOEJBQThCLHdEQUFVO0FBQ2xEO0FBQ0E7O0FBRUEsUUFBUSxtREFBRTtBQUNWO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLDBDQUEwQztBQUMvRCw4QkFBOEI7O0FBRTlCO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsV0FBVztBQUN0QixXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxrQkFBa0IsNERBQVk7O0FBRTlCO0FBQ0E7O0FBRUEsaUJBQWlCLDREQUFZOztBQUU3QixpQkFBaUIsd0VBQU07O0FBRXZCLGtCQUFrQjtBQUNsQjs7QUFFQSx5QkFBeUIsMERBQVk7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQix3RUFBTTs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLHlDQUF5QyxtREFBRSwyQkFBMkIsbURBQUU7QUFDeEUsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQSwwQkFBMEIsd0VBQU07O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUJlaGF2aW9yLmpzP2FmMGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGlzRXhwYW5kZWQsXG4gIGlzSG9yaXpvbnRhbFxufSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGNvbGxlY3RMYW5lcyxcbiAgZ2V0TGFuZXNSb290XG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG52YXIgSElHSF9QUklPUklUWSA9IDE1MDA7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vbW9kZWwvVHlwZXMnKS5TaGFwZX0gU2hhcGVcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi91dGlsL1R5cGVzJykuRGltZW5zaW9uc30gRGltZW5zaW9uc1xuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLkRpcmVjdGlvbn0gRGlyZWN0aW9uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi91dGlsL1R5cGVzJykuUmVjdFRSQkx9IFJlY3RUUkJMXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7RGltZW5zaW9uc31cbiAqL1xuZXhwb3J0IHZhciBHUk9VUF9NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDE0MCwgaGVpZ2h0OiAxMjAgfTtcblxuLyoqXG4gKiBAdHlwZSB7RGltZW5zaW9uc31cbiAqL1xuZXhwb3J0IHZhciBMQU5FX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDYwIH07XG5cbi8qKlxuICogQHR5cGUge0RpbWVuc2lvbnN9XG4gKi9cbmV4cG9ydCB2YXIgVkVSVElDQUxfTEFORV9NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDYwLCBoZWlnaHQ6IDMwMCB9O1xuXG4vKipcbiAqIEB0eXBlIHtEaW1lbnNpb25zfVxuICovXG5leHBvcnQgdmFyIFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDE1MCB9O1xuXG4vKipcbiAqIEB0eXBlIHtEaW1lbnNpb25zfVxuICovXG5leHBvcnQgdmFyIFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMTUwLCBoZWlnaHQ6IDMwMCB9O1xuXG4vKipcbiAqIEB0eXBlIHtEaW1lbnNpb25zfVxuICovXG5leHBvcnQgdmFyIFNVQl9QUk9DRVNTX01JTl9ESU1FTlNJT05TID0geyB3aWR0aDogMTQwLCBoZWlnaHQ6IDEyMCB9O1xuXG4vKipcbiAqIEB0eXBlIHtEaW1lbnNpb25zfVxuICovXG5leHBvcnQgdmFyIFRFWFRfQU5OT1RBVElPTl9NSU5fRElNRU5TSU9OUyA9IHsgd2lkdGg6IDUwLCBoZWlnaHQ6IDMwIH07XG5cbi8qKlxuICogU2V0IG1pbmltdW0gYm91bmRzL3Jlc2l6ZSBjb25zdHJhaW50cyBvbiByZXNpemUuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplQmVoYXZpb3IoZXZlbnRCdXMpIHtcbiAgZXZlbnRCdXMub24oJ3Jlc2l6ZS5zdGFydCcsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQuZGlyZWN0aW9uLFxuICAgICAgICBiYWxhbmNlZCA9IGNvbnRleHQuYmFsYW5jZWQ7XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSB8fCBpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgY29udGV4dC5yZXNpemVDb25zdHJhaW50cyA9IGdldFBhcnRpY2lwYW50UmVzaXplQ29uc3RyYWludHMoc2hhcGUsIGRpcmVjdGlvbiwgYmFsYW5jZWQpO1xuICAgIH1cblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGlzRXhwYW5kZWQoc2hhcGUpKSB7XG4gICAgICBjb250ZXh0Lm1pbkRpbWVuc2lvbnMgPSBTVUJfUFJPQ0VTU19NSU5fRElNRU5TSU9OUztcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgIGNvbnRleHQubWluRGltZW5zaW9ucyA9IFRFWFRfQU5OT1RBVElPTl9NSU5fRElNRU5TSU9OUztcbiAgICB9XG4gIH0pO1xufVxuXG5SZXNpemVCZWhhdmlvci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cblxudmFyIGFicyA9IE1hdGguYWJzLFxuICAgIG1pbiA9IE1hdGgubWluLFxuICAgIG1heCA9IE1hdGgubWF4O1xuXG5cbmZ1bmN0aW9uIGFkZFRvVHJibCh0cmJsLCBhdHRyLCB2YWx1ZSwgY2hvaWNlKSB7XG4gIHZhciBjdXJyZW50ID0gdHJibFthdHRyXTtcblxuICAvLyBtYWtlIHN1cmUgdG8gc2V0IHRoZSB2YWx1ZSBpZiBpdCBkb2VzIG5vdCBleGlzdFxuICAvLyBvciBhcHBseSB0aGUgY29ycmVjdCB2YWx1ZSBieSBjb21wYXJpbmcgYWdhaW5zdFxuICAvLyBjaG9pY2UodmFsdWUsIGN1cnJlbnRWYWx1ZSlcbiAgdHJibFthdHRyXSA9IGN1cnJlbnQgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogY2hvaWNlKHZhbHVlLCBjdXJyZW50KTtcbn1cblxuZnVuY3Rpb24gYWRkTWluKHRyYmwsIGF0dHIsIHZhbHVlKSB7XG4gIHJldHVybiBhZGRUb1RyYmwodHJibCwgYXR0ciwgdmFsdWUsIG1pbik7XG59XG5cbmZ1bmN0aW9uIGFkZE1heCh0cmJsLCBhdHRyLCB2YWx1ZSkge1xuICByZXR1cm4gYWRkVG9UcmJsKHRyYmwsIGF0dHIsIHZhbHVlLCBtYXgpO1xufVxuXG52YXIgTEFORV9QQURESU5HID0geyB0b3A6IDIwLCBsZWZ0OiA1MCwgcmlnaHQ6IDIwLCBib3R0b206IDIwIH0sXG4gICAgVkVSVElDQUxfTEFORV9QQURESU5HID0geyB0b3A6IDUwLCBsZWZ0OiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwIH07XG5cbi8qKlxuICogQHBhcmFtIHtTaGFwZX0gbGFuZVNoYXBlXG4gKiBAcGFyYW0ge0RpcmVjdGlvbn0gcmVzaXplRGlyZWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiYWxhbmNlZD1mYWxzZV1cbiAqXG4gKiBAcmV0dXJuIHsge1xuICogICBtaW46IFJlY3RUUkJMO1xuICogICBtYXg6IFJlY3RUUkJMO1xuICogfSB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJ0aWNpcGFudFJlc2l6ZUNvbnN0cmFpbnRzKGxhbmVTaGFwZSwgcmVzaXplRGlyZWN0aW9uLCBiYWxhbmNlZCkge1xuICB2YXIgbGFuZXNSb290ID0gZ2V0TGFuZXNSb290KGxhbmVTaGFwZSk7XG5cbiAgdmFyIGlzRmlyc3QgPSB0cnVlLFxuICAgICAgaXNMYXN0ID0gdHJ1ZTtcblxuICB2YXIgYWxsTGFuZXMgPSBjb2xsZWN0TGFuZXMobGFuZXNSb290LCBbIGxhbmVzUm9vdCBdKTtcblxuICB2YXIgbGFuZVRyYmwgPSBhc1RSQkwobGFuZVNoYXBlKTtcblxuICB2YXIgbWF4VHJibCA9IHt9LFxuICAgICAgbWluVHJibCA9IHt9O1xuXG4gIHZhciBpc0hvcml6b250YWxMYW5lID0gaXNIb3Jpem9udGFsKGxhbmVTaGFwZSk7XG5cbiAgdmFyIG1pbkRpbWVuc2lvbnMgPSBpc0hvcml6b250YWxMYW5lID8gTEFORV9NSU5fRElNRU5TSU9OUyA6IFZFUlRJQ0FMX0xBTkVfTUlOX0RJTUVOU0lPTlM7XG5cbiAgaWYgKC9uLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcbiAgICBtaW5UcmJsLnRvcCA9IGxhbmVUcmJsLmJvdHRvbSAtIG1pbkRpbWVuc2lvbnMuaGVpZ2h0O1xuICB9IGVsc2VcbiAgaWYgKC9lLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcbiAgICBtaW5UcmJsLnJpZ2h0ID0gbGFuZVRyYmwubGVmdCArIG1pbkRpbWVuc2lvbnMud2lkdGg7XG4gIH0gZWxzZVxuICBpZiAoL3MvLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xuICAgIG1pblRyYmwuYm90dG9tID0gbGFuZVRyYmwudG9wICsgbWluRGltZW5zaW9ucy5oZWlnaHQ7XG4gIH0gZWxzZVxuICBpZiAoL3cvLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xuICAgIG1pblRyYmwubGVmdCA9IGxhbmVUcmJsLnJpZ2h0IC0gbWluRGltZW5zaW9ucy53aWR0aDtcbiAgfVxuXG4gIC8vIG1pbi9tYXggc2l6ZSBiYXNlZCBvbiByZWxhdGVkIGxhbmVzXG4gIGFsbExhbmVzLmZvckVhY2goZnVuY3Rpb24ob3RoZXIpIHtcblxuICAgIHZhciBvdGhlclRyYmwgPSBhc1RSQkwob3RoZXIpO1xuXG4gICAgaWYgKC9uLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcbiAgICAgIGlmIChpc0hvcml6b250YWxMYW5lICYmIG90aGVyVHJibC50b3AgPCAobGFuZVRyYmwudG9wIC0gMTApKSB7XG4gICAgICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gbWF4IHRvcCBzaXplIChiYXNlZCBvbiBuZXh0IGVsZW1lbnQpXG4gICAgICBpZiAoYmFsYW5jZWQgJiYgYWJzKGxhbmVUcmJsLnRvcCAtIG90aGVyVHJibC5ib3R0b20pIDwgMTApIHtcbiAgICAgICAgYWRkTWF4KG1heFRyYmwsICd0b3AnLCBvdGhlclRyYmwudG9wICsgbWluRGltZW5zaW9ucy5oZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBtaW4gdG9wIHNpemUgKGJhc2VkIG9uIHNlbGYgb3IgbmVzdGVkIGVsZW1lbnQpXG4gICAgICBpZiAoYWJzKGxhbmVUcmJsLnRvcCAtIG90aGVyVHJibC50b3ApIDwgNSkge1xuICAgICAgICBhZGRNaW4obWluVHJibCwgJ3RvcCcsIG90aGVyVHJibC5ib3R0b20gLSBtaW5EaW1lbnNpb25zLmhlaWdodCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKC9lLy50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcblxuICAgICAgaWYgKCFpc0hvcml6b250YWxMYW5lICYmIG90aGVyVHJibC5yaWdodCA+IChsYW5lVHJibC5yaWdodCArIDEwKSkge1xuICAgICAgICBpc0xhc3QgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gbWF4IHJpZ2h0IHNpemUgKGJhc2VkIG9uIHByZXZpb3VzIGVsZW1lbnQpXG4gICAgICBpZiAoYmFsYW5jZWQgJiYgYWJzKGxhbmVUcmJsLnJpZ2h0IC0gb3RoZXJUcmJsLmxlZnQpIDwgMTApIHtcbiAgICAgICAgYWRkTWluKG1heFRyYmwsICdyaWdodCcsIG90aGVyVHJibC5yaWdodCAtIG1pbkRpbWVuc2lvbnMud2lkdGgpO1xuICAgICAgfVxuXG4gICAgICAvLyBtaW4gcmlnaHQgc2l6ZSAoYmFzZWQgb24gc2VsZiBvciBuZXN0ZWQgZWxlbWVudClcbiAgICAgIGlmIChhYnMobGFuZVRyYmwucmlnaHQgLSBvdGhlclRyYmwucmlnaHQpIDwgNSkge1xuICAgICAgICBhZGRNYXgobWluVHJibCwgJ3JpZ2h0Jywgb3RoZXJUcmJsLmxlZnQgKyBtaW5EaW1lbnNpb25zLndpZHRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoL3MvLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xuXG4gICAgICBpZiAoaXNIb3Jpem9udGFsTGFuZSAmJiBvdGhlclRyYmwuYm90dG9tID4gKGxhbmVUcmJsLmJvdHRvbSArIDEwKSkge1xuICAgICAgICBpc0xhc3QgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gbWF4IGJvdHRvbSBzaXplIChiYXNlZCBvbiBwcmV2aW91cyBlbGVtZW50KVxuICAgICAgaWYgKGJhbGFuY2VkICYmIGFicyhsYW5lVHJibC5ib3R0b20gLSBvdGhlclRyYmwudG9wKSA8IDEwKSB7XG4gICAgICAgIGFkZE1pbihtYXhUcmJsLCAnYm90dG9tJywgb3RoZXJUcmJsLmJvdHRvbSAtIG1pbkRpbWVuc2lvbnMuaGVpZ2h0KTtcbiAgICAgIH1cblxuICAgICAgLy8gbWluIGJvdHRvbSBzaXplIChiYXNlZCBvbiBzZWxmIG9yIG5lc3RlZCBlbGVtZW50KVxuICAgICAgaWYgKGFicyhsYW5lVHJibC5ib3R0b20gLSBvdGhlclRyYmwuYm90dG9tKSA8IDUpIHtcbiAgICAgICAgYWRkTWF4KG1pblRyYmwsICdib3R0b20nLCBvdGhlclRyYmwudG9wICsgbWluRGltZW5zaW9ucy5oZWlnaHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgvdy8udGVzdChyZXNpemVEaXJlY3Rpb24pKSB7XG5cbiAgICAgIGlmICghaXNIb3Jpem9udGFsTGFuZSAmJiBvdGhlclRyYmwubGVmdCA8IChsYW5lVHJibC5sZWZ0IC0gMTApKSB7XG4gICAgICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gbWF4IGxlZnQgc2l6ZSAoYmFzZWQgb24gbmV4dCBlbGVtZW50KVxuICAgICAgaWYgKGJhbGFuY2VkICYmIGFicyhsYW5lVHJibC5sZWZ0IC0gb3RoZXJUcmJsLnJpZ2h0KSA8IDEwKSB7XG4gICAgICAgIGFkZE1heChtYXhUcmJsLCAnbGVmdCcsIG90aGVyVHJibC5sZWZ0ICsgbWluRGltZW5zaW9ucy53aWR0aCk7XG4gICAgICB9XG5cbiAgICAgIC8vIG1pbiBsZWZ0IHNpemUgKGJhc2VkIG9uIHNlbGYgb3IgbmVzdGVkIGVsZW1lbnQpXG4gICAgICBpZiAoYWJzKGxhbmVUcmJsLmxlZnQgLSBvdGhlclRyYmwubGVmdCkgPCA1KSB7XG4gICAgICAgIGFkZE1pbihtaW5UcmJsLCAnbGVmdCcsIG90aGVyVHJibC5yaWdodCAtIG1pbkRpbWVuc2lvbnMud2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gbWF4IHRvcC9ib3R0b20vbGVmdC9yaWdodCBzaXplIGJhc2VkIG9uIGZsb3cgbm9kZXNcbiAgdmFyIGZsb3dFbGVtZW50cyA9IGxhbmVzUm9vdC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24ocykge1xuICAgIHJldHVybiAhcy5oaWRkZW4gJiYgIXMud2F5cG9pbnRzICYmIChpcyhzLCAnYnBtbjpGbG93RWxlbWVudCcpIHx8IGlzKHMsICdicG1uOkFydGlmYWN0JykpO1xuICB9KTtcblxuICB2YXIgcGFkZGluZyA9IGlzSG9yaXpvbnRhbExhbmUgPyBMQU5FX1BBRERJTkcgOiBWRVJUSUNBTF9MQU5FX1BBRERJTkc7XG5cbiAgZmxvd0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZmxvd0VsZW1lbnQpIHtcblxuICAgIHZhciBmbG93RWxlbWVudFRyYmwgPSBhc1RSQkwoZmxvd0VsZW1lbnQpO1xuXG4gICAgaWYgKGlzRmlyc3QgJiYgL24vLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xuICAgICAgYWRkTWluKG1pblRyYmwsICd0b3AnLCBmbG93RWxlbWVudFRyYmwudG9wIC0gcGFkZGluZy50b3ApO1xuICAgIH1cblxuICAgIGlmIChpc0xhc3QgJiYgL2UvLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xuICAgICAgYWRkTWF4KG1pblRyYmwsICdyaWdodCcsIGZsb3dFbGVtZW50VHJibC5yaWdodCArIHBhZGRpbmcucmlnaHQpO1xuICAgIH1cblxuICAgIGlmIChpc0xhc3QgJiYgL3MvLnRlc3QocmVzaXplRGlyZWN0aW9uKSkge1xuICAgICAgYWRkTWF4KG1pblRyYmwsICdib3R0b20nLCBmbG93RWxlbWVudFRyYmwuYm90dG9tICsgcGFkZGluZy5ib3R0b20pO1xuICAgIH1cblxuICAgIGlmIChpc0ZpcnN0ICYmIC93Ly50ZXN0KHJlc2l6ZURpcmVjdGlvbikpIHtcbiAgICAgIGFkZE1pbihtaW5UcmJsLCAnbGVmdCcsIGZsb3dFbGVtZW50VHJibC5sZWZ0IC0gcGFkZGluZy5sZWZ0KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbWluOiBtaW5UcmJsLFxuICAgIG1heDogbWF4VHJibFxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeLaneBehavior.js":
/*!****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeLaneBehavior.js ***!
\****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ResizeLaneBehavior)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Mouse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/util/Mouse */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Mouse.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n */\n\nvar SLIGHTLY_HIGHER_PRIORITY = 1001;\n\n\n/**\n * Invoke {@link Modeling#resizeLane} instead of {@link Modeling#resizeShape}\n * when resizing a lane or participant shape.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction ResizeLaneBehavior(eventBus, modeling) {\n\n eventBus.on('resize.start', SLIGHTLY_HIGHER_PRIORITY + 500, function(event) {\n var context = event.context,\n shape = context.shape;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:Lane') || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:Participant')) {\n\n // should we resize the opposite lane(s) in\n // order to compensate for the resize operation?\n context.balanced = !(0,diagram_js_lib_util_Mouse__WEBPACK_IMPORTED_MODULE_1__.hasPrimaryModifier)(event);\n }\n });\n\n /**\n * Intercept resize end and call resize lane function instead.\n */\n eventBus.on('resize.end', SLIGHTLY_HIGHER_PRIORITY, function(event) {\n var context = event.context,\n shape = context.shape,\n canExecute = context.canExecute,\n newBounds = context.newBounds;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:Lane') || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:Participant')) {\n\n if (canExecute) {\n\n // ensure we have actual pixel values for new bounds\n // (important when zoom level was > 1 during move)\n newBounds = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.roundBounds)(newBounds);\n\n // perform the actual resize\n modeling.resizeLane(shape, newBounds, context.balanced);\n }\n\n // stop propagation\n return false;\n }\n });\n}\n\nResizeLaneBehavior.$inject = [\n 'eventBus',\n 'modeling'\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9SZXNpemVMYW5lQmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE2Qzs7QUFJSDs7QUFJUDs7QUFFbkM7QUFDQSxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLCtCQUErQjtBQUM1Qzs7QUFFQTs7O0FBR0E7QUFDQSxXQUFXLDJCQUEyQixZQUFZO0FBQ2xEO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7O0FBRWY7QUFDQTtBQUNBOztBQUVBLFFBQVEsbURBQUUsd0JBQXdCLG1EQUFFOztBQUVwQztBQUNBO0FBQ0EsMEJBQTBCLDZFQUFrQjtBQUM1QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFLHdCQUF3QixtREFBRTs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQiw2RUFBVzs7QUFFL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1Jlc2l6ZUxhbmVCZWhhdmlvci5qcz82ZTI4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICByb3VuZEJvdW5kc1xufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIGhhc1ByaW1hcnlNb2RpZmllclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL01vdXNlJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL01vZGVsaW5nJykuZGVmYXVsdH0gTW9kZWxpbmdcbiAqL1xuXG52YXIgU0xJR0hUTFlfSElHSEVSX1BSSU9SSVRZID0gMTAwMTtcblxuXG4vKipcbiAqIEludm9rZSB7QGxpbmsgTW9kZWxpbmcjcmVzaXplTGFuZX0gaW5zdGVhZCBvZiB7QGxpbmsgTW9kZWxpbmcjcmVzaXplU2hhcGV9XG4gKiB3aGVuIHJlc2l6aW5nIGEgbGFuZSBvciBwYXJ0aWNpcGFudCBzaGFwZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplTGFuZUJlaGF2aW9yKGV2ZW50QnVzLCBtb2RlbGluZykge1xuXG4gIGV2ZW50QnVzLm9uKCdyZXNpemUuc3RhcnQnLCBTTElHSFRMWV9ISUdIRVJfUFJJT1JJVFkgKyA1MDAsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOkxhbmUnKSB8fCBpcyhzaGFwZSwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuXG4gICAgICAvLyBzaG91bGQgd2UgcmVzaXplIHRoZSBvcHBvc2l0ZSBsYW5lKHMpIGluXG4gICAgICAvLyBvcmRlciB0byBjb21wZW5zYXRlIGZvciB0aGUgcmVzaXplIG9wZXJhdGlvbj9cbiAgICAgIGNvbnRleHQuYmFsYW5jZWQgPSAhaGFzUHJpbWFyeU1vZGlmaWVyKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBJbnRlcmNlcHQgcmVzaXplIGVuZCBhbmQgY2FsbCByZXNpemUgbGFuZSBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgKi9cbiAgZXZlbnRCdXMub24oJ3Jlc2l6ZS5lbmQnLCBTTElHSFRMWV9ISUdIRVJfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGUsXG4gICAgICAgIGNhbkV4ZWN1dGUgPSBjb250ZXh0LmNhbkV4ZWN1dGUsXG4gICAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzO1xuXG4gICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykgfHwgaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykpIHtcblxuICAgICAgaWYgKGNhbkV4ZWN1dGUpIHtcblxuICAgICAgICAvLyBlbnN1cmUgd2UgaGF2ZSBhY3R1YWwgcGl4ZWwgdmFsdWVzIGZvciBuZXcgYm91bmRzXG4gICAgICAgIC8vIChpbXBvcnRhbnQgd2hlbiB6b29tIGxldmVsIHdhcyA+IDEgZHVyaW5nIG1vdmUpXG4gICAgICAgIG5ld0JvdW5kcyA9IHJvdW5kQm91bmRzKG5ld0JvdW5kcyk7XG5cbiAgICAgICAgLy8gcGVyZm9ybSB0aGUgYWN0dWFsIHJlc2l6ZVxuICAgICAgICBtb2RlbGluZy5yZXNpemVMYW5lKHNoYXBlLCBuZXdCb3VuZHMsIGNvbnRleHQuYmFsYW5jZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBzdG9wIHByb3BhZ2F0aW9uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cblxuUmVzaXplTGFuZUJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeLaneBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RootElementReferenceBehavior.js":
/*!**************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RootElementReferenceBehavior.js ***!
\**************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootElementReferenceBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Collections.js\");\n/* harmony import */ var _util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/ModelingUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @typedef {import('../../../Modeler').default} Modeler\r\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\r\n * @typedef {import('didi').Injector} Injector\r\n * @typedef {import('../../copy-paste/ModdleCopy').default} ModdleCopy\r\n * @typedef {import('../BpmnFactory').default} BpmnFactory\r\n *\r\n * @typedef {import('../../../model/Types').Element} Element\r\n * @typedef {import('../../../model/Types').Shape} Shape\r\n *\r\n * @typedef {import('diagram-js/lib/util/Types').DirectionTRBL} DirectionTRBL\r\n */\r\n\r\nvar LOW_PRIORITY = 500;\r\n\r\n\r\n/**\r\n * Add referenced root elements (error, escalation, message, signal) if they don't exist.\r\n * Copy referenced root elements on copy & paste.\r\n *\r\n * @param {Modeler} bpmnjs\r\n * @param {EventBus} eventBus\r\n * @param {Injector} injector\r\n * @param {ModdleCopy} moddleCopy\r\n * @param {BpmnFactory} bpmnFactory\r\n */\r\nfunction RootElementReferenceBehavior(\r\n bpmnjs, eventBus, injector, moddleCopy, bpmnFactory\r\n) {\r\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\r\n\r\n function canHaveRootElementReference(element) {\r\n return (0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.isAny)(element, [ 'bpmn:ReceiveTask', 'bpmn:SendTask' ]) ||\r\n hasAnyEventDefinition(element, [\r\n 'bpmn:ErrorEventDefinition',\r\n 'bpmn:EscalationEventDefinition',\r\n 'bpmn:MessageEventDefinition',\r\n 'bpmn:SignalEventDefinition'\r\n ]);\r\n }\r\n\r\n function hasRootElement(rootElement) {\r\n var definitions = bpmnjs.getDefinitions(),\r\n rootElements = definitions.get('rootElements');\r\n\r\n return !!(0,min_dash__WEBPACK_IMPORTED_MODULE_2__.find)(rootElements, (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.matchPattern)({ id: rootElement.id }));\r\n }\r\n\r\n function getRootElementReferencePropertyName(eventDefinition) {\r\n if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.is)(eventDefinition, 'bpmn:ErrorEventDefinition')) {\r\n return 'errorRef';\r\n } else if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.is)(eventDefinition, 'bpmn:EscalationEventDefinition')) {\r\n return 'escalationRef';\r\n } else if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.is)(eventDefinition, 'bpmn:MessageEventDefinition')) {\r\n return 'messageRef';\r\n } else if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.is)(eventDefinition, 'bpmn:SignalEventDefinition')) {\r\n return 'signalRef';\r\n }\r\n }\r\n\r\n function getRootElement(businessObject) {\r\n if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.isAny)(businessObject, [ 'bpmn:ReceiveTask', 'bpmn:SendTask' ])) {\r\n return businessObject.get('messageRef');\r\n }\r\n\r\n var eventDefinitions = businessObject.get('eventDefinitions'),\r\n eventDefinition = eventDefinitions[ 0 ];\r\n\r\n return eventDefinition.get(getRootElementReferencePropertyName(eventDefinition));\r\n }\r\n\r\n function setRootElement(businessObject, rootElement) {\r\n if ((0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.isAny)(businessObject, [ 'bpmn:ReceiveTask', 'bpmn:SendTask' ])) {\r\n return businessObject.set('messageRef', rootElement);\r\n }\r\n\r\n var eventDefinitions = businessObject.get('eventDefinitions'),\r\n eventDefinition = eventDefinitions[ 0 ];\r\n\r\n return eventDefinition.set(getRootElementReferencePropertyName(eventDefinition), rootElement);\r\n }\r\n\r\n // create shape\r\n this.executed([\r\n 'shape.create',\r\n 'element.updateProperties',\r\n 'element.updateModdleProperties'\r\n ], function(context) {\r\n var shape = context.shape || context.element;\r\n\r\n if (!canHaveRootElementReference(shape)) {\r\n return;\r\n }\r\n\r\n var businessObject = (0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape),\r\n rootElement = getRootElement(businessObject),\r\n rootElements;\r\n\r\n if (rootElement && !hasRootElement(rootElement)) {\r\n rootElements = bpmnjs.getDefinitions().get('rootElements');\r\n\r\n // add root element\r\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.add)(rootElements, rootElement);\r\n\r\n context.addedRootElement = rootElement;\r\n }\r\n }, true);\r\n\r\n this.reverted([\r\n 'shape.create',\r\n 'element.updateProperties',\r\n 'element.updateModdleProperties'\r\n ], function(context) {\r\n var addedRootElement = context.addedRootElement;\r\n\r\n if (!addedRootElement) {\r\n return;\r\n }\r\n\r\n var rootElements = bpmnjs.getDefinitions().get('rootElements');\r\n\r\n // remove root element\r\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.remove)(rootElements, addedRootElement);\r\n }, true);\r\n\r\n eventBus.on('copyPaste.copyElement', function(context) {\r\n var descriptor = context.descriptor,\r\n element = context.element;\r\n\r\n if (element.labelTarget || !canHaveRootElementReference(element)) {\r\n return;\r\n }\r\n\r\n var businessObject = (0,_util_ModelingUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element),\r\n rootElement = getRootElement(businessObject);\r\n\r\n if (rootElement) {\r\n\r\n // TODO(nikku): clone on copy\r\n descriptor.referencedRootElement = rootElement;\r\n }\r\n });\r\n\r\n eventBus.on('copyPaste.pasteElement', LOW_PRIORITY, function(context) {\r\n var descriptor = context.descriptor,\r\n businessObject = descriptor.businessObject,\r\n referencedRootElement = descriptor.referencedRootElement;\r\n\r\n if (!referencedRootElement) {\r\n return;\r\n }\r\n\r\n if (!hasRootElement(referencedRootElement)) {\r\n referencedRootElement = moddleCopy.copyElement(\r\n referencedRootElement,\r\n bpmnFactory.create(referencedRootElement.$type)\r\n );\r\n }\r\n\r\n setRootElement(businessObject, referencedRootElement);\r\n\r\n delete descriptor.referencedRootElement;\r\n });\r\n}\r\n\r\nRootElementReferenceBehavior.$inject = [\r\n 'bpmnjs',\r\n 'eventBus',\r\n 'injector',\r\n 'moddleCopy',\r\n 'bpmnFactory'\r\n];\r\n\r\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(RootElementReferenceBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\r\n\r\n// helpers //////////\r\n\r\nfunction hasAnyEventDefinition(element, types) {\r\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_2__.isArray)(types)) {\r\n types = [ types ];\r\n }\r\n\r\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_2__.some)(types, function(type) {\r\n return (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_5__.hasEventDefinition)(element, type);\r\n });\r\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBd0M7QUFDeEM7QUFNa0I7QUFDbEI7QUFDMkU7QUFDM0U7QUFJeUM7QUFDekM7QUFJaUM7QUFDakM7QUFDNkM7QUFDN0M7QUFDMEQ7QUFDMUQ7QUFDQTtBQUNBLGFBQWEsb0NBQW9DO0FBQ2pELGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEseUJBQXlCO0FBQ3RDLGFBQWEsK0NBQStDO0FBQzVELGFBQWEsa0NBQWtDO0FBQy9DO0FBQ0EsYUFBYSx3Q0FBd0M7QUFDckQsYUFBYSxzQ0FBc0M7QUFDbkQ7QUFDQSxhQUFhLG1EQUFtRDtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFlBQVk7QUFDdkIsV0FBVyxhQUFhO0FBQ3hCO0FBQ2U7QUFDZjtBQUNBO0FBQ0Esa0JBQWtCLGlGQUFrQjtBQUNwQztBQUNBO0FBQ0EsV0FBVyx5REFBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDhDQUFJLGVBQWUsc0RBQVksR0FBRyxvQkFBb0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsUUFBUSxzREFBRTtBQUNWO0FBQ0EsTUFBTSxTQUFTLHNEQUFFO0FBQ2pCO0FBQ0EsTUFBTSxTQUFTLHNEQUFFO0FBQ2pCO0FBQ0EsTUFBTSxTQUFTLHNEQUFFO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHlEQUFLO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHlEQUFLO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHFFQUFpQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sb0VBQWE7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksdUVBQWdCO0FBQ3BCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIscUVBQWlCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBUSwrQkFBK0IsaUZBQWtCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxpREFBTztBQUNkO0FBQ0E7QUFDQTtBQUNBLFNBQVMsOENBQUk7QUFDYixXQUFXLGdFQUFrQjtBQUM3QixHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yLmpzP2Y2NjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaGVyaXRzIGZyb20gJ2luaGVyaXRzLWJyb3dzZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBmaW5kLFxyXG4gIGlzQXJyYXksXHJcbiAgbWF0Y2hQYXR0ZXJuLFxyXG4gIHNvbWVcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQgQ29tbWFuZEludGVyY2VwdG9yIGZyb20gJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEludGVyY2VwdG9yJztcclxuXHJcbmltcG9ydCB7XHJcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXHJcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcclxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0NvbGxlY3Rpb25zJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0QnVzaW5lc3NPYmplY3QsXHJcbiAgaXNcclxufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XHJcblxyXG5pbXBvcnQgeyBpc0FueSB9IGZyb20gJy4uL3V0aWwvTW9kZWxpbmdVdGlsJztcclxuXHJcbmltcG9ydCB7IGhhc0V2ZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi9Nb2RlbGVyJykuZGVmYXVsdH0gTW9kZWxlclxyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcclxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlkaScpLkluamVjdG9yfSBJbmplY3RvclxyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9jb3B5LXBhc3RlL01vZGRsZUNvcHknKS5kZWZhdWx0fSBNb2RkbGVDb3B5XHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL0JwbW5GYWN0b3J5JykuZGVmYXVsdH0gQnBtbkZhY3RvcnlcclxuICpcclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL21vZGVsL1R5cGVzJykuU2hhcGV9IFNoYXBlXHJcbiAqXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL3V0aWwvVHlwZXMnKS5EaXJlY3Rpb25UUkJMfSBEaXJlY3Rpb25UUkJMXHJcbiAqL1xyXG5cclxudmFyIExPV19QUklPUklUWSA9IDUwMDtcclxuXHJcblxyXG4vKipcclxuICogQWRkIHJlZmVyZW5jZWQgcm9vdCBlbGVtZW50cyAoZXJyb3IsIGVzY2FsYXRpb24sIG1lc3NhZ2UsIHNpZ25hbCkgaWYgdGhleSBkb24ndCBleGlzdC5cclxuICogQ29weSByZWZlcmVuY2VkIHJvb3QgZWxlbWVudHMgb24gY29weSAmIHBhc3RlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGVsZXJ9IGJwbW5qc1xyXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xyXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxyXG4gKiBAcGFyYW0ge01vZGRsZUNvcHl9IG1vZGRsZUNvcHlcclxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3IoXHJcbiAgICBicG1uanMsIGV2ZW50QnVzLCBpbmplY3RvciwgbW9kZGxlQ29weSwgYnBtbkZhY3RvcnlcclxuKSB7XHJcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XHJcblxyXG4gIGZ1bmN0aW9uIGNhbkhhdmVSb290RWxlbWVudFJlZmVyZW5jZShlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gaXNBbnkoZWxlbWVudCwgWyAnYnBtbjpSZWNlaXZlVGFzaycsICdicG1uOlNlbmRUYXNrJyBdKSB8fFxyXG4gICAgICBoYXNBbnlFdmVudERlZmluaXRpb24oZWxlbWVudCwgW1xyXG4gICAgICAgICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJyxcclxuICAgICAgICAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyxcclxuICAgICAgICAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcclxuICAgICAgICAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXHJcbiAgICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaGFzUm9vdEVsZW1lbnQocm9vdEVsZW1lbnQpIHtcclxuICAgIHZhciBkZWZpbml0aW9ucyA9IGJwbW5qcy5nZXREZWZpbml0aW9ucygpLFxyXG4gICAgICAgIHJvb3RFbGVtZW50cyA9IGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyk7XHJcblxyXG4gICAgcmV0dXJuICEhZmluZChyb290RWxlbWVudHMsIG1hdGNoUGF0dGVybih7IGlkOiByb290RWxlbWVudC5pZCB9KSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRSb290RWxlbWVudFJlZmVyZW5jZVByb3BlcnR5TmFtZShldmVudERlZmluaXRpb24pIHtcclxuICAgIGlmIChpcyhldmVudERlZmluaXRpb24sICdicG1uOkVycm9yRXZlbnREZWZpbml0aW9uJykpIHtcclxuICAgICAgcmV0dXJuICdlcnJvclJlZic7XHJcbiAgICB9IGVsc2UgaWYgKGlzKGV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgIHJldHVybiAnZXNjYWxhdGlvblJlZic7XHJcbiAgICB9IGVsc2UgaWYgKGlzKGV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicpKSB7XHJcbiAgICAgIHJldHVybiAnbWVzc2FnZVJlZic7XHJcbiAgICB9IGVsc2UgaWYgKGlzKGV2ZW50RGVmaW5pdGlvbiwgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJykpIHtcclxuICAgICAgcmV0dXJuICdzaWduYWxSZWYnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Um9vdEVsZW1lbnQoYnVzaW5lc3NPYmplY3QpIHtcclxuICAgIGlmIChpc0FueShidXNpbmVzc09iamVjdCwgWyAnYnBtbjpSZWNlaXZlVGFzaycsICdicG1uOlNlbmRUYXNrJyBdKSkge1xyXG4gICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdtZXNzYWdlUmVmJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKSxcclxuICAgICAgICBldmVudERlZmluaXRpb24gPSBldmVudERlZmluaXRpb25zWyAwIF07XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGVmaW5pdGlvbi5nZXQoZ2V0Um9vdEVsZW1lbnRSZWZlcmVuY2VQcm9wZXJ0eU5hbWUoZXZlbnREZWZpbml0aW9uKSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCwgcm9vdEVsZW1lbnQpIHtcclxuICAgIGlmIChpc0FueShidXNpbmVzc09iamVjdCwgWyAnYnBtbjpSZWNlaXZlVGFzaycsICdicG1uOlNlbmRUYXNrJyBdKSkge1xyXG4gICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3Quc2V0KCdtZXNzYWdlUmVmJywgcm9vdEVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBldmVudERlZmluaXRpb25zID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdldmVudERlZmluaXRpb25zJyksXHJcbiAgICAgICAgZXZlbnREZWZpbml0aW9uID0gZXZlbnREZWZpbml0aW9uc1sgMCBdO1xyXG5cclxuICAgIHJldHVybiBldmVudERlZmluaXRpb24uc2V0KGdldFJvb3RFbGVtZW50UmVmZXJlbmNlUHJvcGVydHlOYW1lKGV2ZW50RGVmaW5pdGlvbiksIHJvb3RFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8vIGNyZWF0ZSBzaGFwZVxyXG4gIHRoaXMuZXhlY3V0ZWQoW1xyXG4gICAgJ3NoYXBlLmNyZWF0ZScsXHJcbiAgICAnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJyxcclxuICAgICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnXHJcbiAgXSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSB8fCBjb250ZXh0LmVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKCFjYW5IYXZlUm9vdEVsZW1lbnRSZWZlcmVuY2Uoc2hhcGUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSksXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBnZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCksXHJcbiAgICAgICAgcm9vdEVsZW1lbnRzO1xyXG5cclxuICAgIGlmIChyb290RWxlbWVudCAmJiAhaGFzUm9vdEVsZW1lbnQocm9vdEVsZW1lbnQpKSB7XHJcbiAgICAgIHJvb3RFbGVtZW50cyA9IGJwbW5qcy5nZXREZWZpbml0aW9ucygpLmdldCgncm9vdEVsZW1lbnRzJyk7XHJcblxyXG4gICAgICAvLyBhZGQgcm9vdCBlbGVtZW50XHJcbiAgICAgIGNvbGxlY3Rpb25BZGQocm9vdEVsZW1lbnRzLCByb290RWxlbWVudCk7XHJcblxyXG4gICAgICBjb250ZXh0LmFkZGVkUm9vdEVsZW1lbnQgPSByb290RWxlbWVudDtcclxuICAgIH1cclxuICB9LCB0cnVlKTtcclxuXHJcbiAgdGhpcy5yZXZlcnRlZChbXHJcbiAgICAnc2hhcGUuY3JlYXRlJyxcclxuICAgICdlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLFxyXG4gICAgJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcydcclxuICBdLCBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICB2YXIgYWRkZWRSb290RWxlbWVudCA9IGNvbnRleHQuYWRkZWRSb290RWxlbWVudDtcclxuXHJcbiAgICBpZiAoIWFkZGVkUm9vdEVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByb290RWxlbWVudHMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKS5nZXQoJ3Jvb3RFbGVtZW50cycpO1xyXG5cclxuICAgIC8vIHJlbW92ZSByb290IGVsZW1lbnRcclxuICAgIGNvbGxlY3Rpb25SZW1vdmUocm9vdEVsZW1lbnRzLCBhZGRlZFJvb3RFbGVtZW50KTtcclxuICB9LCB0cnVlKTtcclxuXHJcbiAgZXZlbnRCdXMub24oJ2NvcHlQYXN0ZS5jb3B5RWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgIHZhciBkZXNjcmlwdG9yID0gY29udGV4dC5kZXNjcmlwdG9yLFxyXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKGVsZW1lbnQubGFiZWxUYXJnZXQgfHwgIWNhbkhhdmVSb290RWxlbWVudFJlZmVyZW5jZShlbGVtZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXHJcbiAgICAgICAgcm9vdEVsZW1lbnQgPSBnZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCk7XHJcblxyXG4gICAgaWYgKHJvb3RFbGVtZW50KSB7XHJcblxyXG4gICAgICAvLyBUT0RPKG5pa2t1KTogY2xvbmUgb24gY29weVxyXG4gICAgICBkZXNjcmlwdG9yLnJlZmVyZW5jZWRSb290RWxlbWVudCA9IHJvb3RFbGVtZW50O1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBldmVudEJ1cy5vbignY29weVBhc3RlLnBhc3RlRWxlbWVudCcsIExPV19QUklPUklUWSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXHJcbiAgICAgICAgYnVzaW5lc3NPYmplY3QgPSBkZXNjcmlwdG9yLmJ1c2luZXNzT2JqZWN0LFxyXG4gICAgICAgIHJlZmVyZW5jZWRSb290RWxlbWVudCA9IGRlc2NyaXB0b3IucmVmZXJlbmNlZFJvb3RFbGVtZW50O1xyXG5cclxuICAgIGlmICghcmVmZXJlbmNlZFJvb3RFbGVtZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhhc1Jvb3RFbGVtZW50KHJlZmVyZW5jZWRSb290RWxlbWVudCkpIHtcclxuICAgICAgcmVmZXJlbmNlZFJvb3RFbGVtZW50ID0gbW9kZGxlQ29weS5jb3B5RWxlbWVudChcclxuICAgICAgICByZWZlcmVuY2VkUm9vdEVsZW1lbnQsXHJcbiAgICAgICAgYnBtbkZhY3RvcnkuY3JlYXRlKHJlZmVyZW5jZWRSb290RWxlbWVudC4kdHlwZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRSb290RWxlbWVudChidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFJvb3RFbGVtZW50KTtcclxuXHJcbiAgICBkZWxldGUgZGVzY3JpcHRvci5yZWZlcmVuY2VkUm9vdEVsZW1lbnQ7XHJcbiAgfSk7XHJcbn1cclxuXHJcblJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3IuJGluamVjdCA9IFtcclxuICAnYnBtbmpzJyxcclxuICAnZXZlbnRCdXMnLFxyXG4gICdpbmplY3RvcicsXHJcbiAgJ21vZGRsZUNvcHknLFxyXG4gICdicG1uRmFjdG9yeSdcclxuXTtcclxuXHJcbmluaGVyaXRzKFJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XHJcblxyXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGhhc0FueUV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCB0eXBlcykge1xyXG4gIGlmICghaXNBcnJheSh0eXBlcykpIHtcclxuICAgIHR5cGVzID0gWyB0eXBlcyBdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNvbWUodHlwZXMsIGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiBoYXNFdmVudERlZmluaXRpb24oZWxlbWVudCwgdHlwZSk7XHJcbiAgfSk7XHJcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RootElementReferenceBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SpaceToolBehavior.js":
/*!***************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SpaceToolBehavior.js ***!
\***************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SpaceToolBehavior)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ResizeBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeBehavior.js\");\n/* harmony import */ var _util_LaneUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n *\n * @typedef {import('../../../model/Types').Shape} Shape\n */\n\nvar max = Math.max;\n\n/**\n * @param {EventBus} eventBus\n */\nfunction SpaceToolBehavior(eventBus) {\n eventBus.on('spaceTool.getMinDimensions', function(context) {\n var shapes = context.shapes,\n axis = context.axis,\n start = context.start,\n minDimensions = {};\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.forEach)(shapes, function(shape) {\n var id = shape.id;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Participant')) {\n minDimensions[ id ] = getParticipantMinDimensions(shape, axis, start);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Lane')) {\n minDimensions[ id ] = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_2__.isHorizontal)(shape) ? _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.LANE_MIN_DIMENSIONS : _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.VERTICAL_LANE_MIN_DIMENSIONS;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:SubProcess') && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_2__.isExpanded)(shape)) {\n minDimensions[ id ] = _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.SUB_PROCESS_MIN_DIMENSIONS;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:TextAnnotation')) {\n minDimensions[ id ] = _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.TEXT_ANNOTATION_MIN_DIMENSIONS;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Group')) {\n minDimensions[ id ] = _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.GROUP_MIN_DIMENSIONS;\n }\n });\n\n return minDimensions;\n });\n}\n\nSpaceToolBehavior.$inject = [ 'eventBus' ];\n\n\n// helpers //////////\nfunction isHorizontalAxis(axis) {\n return axis === 'x';\n}\n\n/**\n * Get minimum dimensions for participant taking lanes into account.\n *\n * @param {Shape} participant\n * @param {Axis} axis\n * @param {number} start\n *\n * @return {number}\n */\nfunction getParticipantMinDimensions(participant, axis, start) {\n var isHorizontalLane = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_2__.isHorizontal)(participant);\n\n if (!hasChildLanes(participant)) {\n return isHorizontalLane ? _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.PARTICIPANT_MIN_DIMENSIONS : _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.VERTICAL_PARTICIPANT_MIN_DIMENSIONS;\n }\n\n var isHorizontalResize = isHorizontalAxis(axis);\n var minDimensions = {};\n\n if (isHorizontalResize) {\n if (isHorizontalLane) {\n minDimensions = _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.PARTICIPANT_MIN_DIMENSIONS;\n } else {\n minDimensions = {\n width: getParticipantMinWidth(participant, start, isHorizontalResize),\n height: _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.VERTICAL_PARTICIPANT_MIN_DIMENSIONS.height\n };\n }\n\n } else {\n if (isHorizontalLane) {\n minDimensions = {\n width: _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.PARTICIPANT_MIN_DIMENSIONS.width,\n height: getParticipantMinHeight(participant, start, isHorizontalResize)\n };\n } else {\n minDimensions = _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.VERTICAL_PARTICIPANT_MIN_DIMENSIONS;\n }\n }\n\n return minDimensions;\n}\n\n/**\n * Get minimum height for participant taking lanes into account.\n *\n * @param {Shape} participant\n * @param {number} start\n * @param {boolean} isHorizontalResize\n *\n * @return {number}\n */\nfunction getParticipantMinHeight(participant, start, isHorizontalResize) {\n var lanesMinHeight;\n lanesMinHeight = getLanesMinHeight(participant, start, isHorizontalResize);\n return max(_ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.PARTICIPANT_MIN_DIMENSIONS.height, lanesMinHeight);\n}\n\n/**\n * Get minimum width for participant taking lanes into account.\n *\n * @param {Shape} participant\n * @param {number} start\n * @param {boolean} isHorizontalResize\n *\n * @return {number}\n */\nfunction getParticipantMinWidth(participant, start, isHorizontalResize) {\n var lanesMinWidth;\n lanesMinWidth = getLanesMinWidth(participant, start, isHorizontalResize);\n return max(_ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.VERTICAL_PARTICIPANT_MIN_DIMENSIONS.width, lanesMinWidth);\n}\n\nfunction hasChildLanes(element) {\n return !!(0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_4__.getChildLanes)(element).length;\n}\n\nfunction getLanesMinHeight(participant, resizeStart, isHorizontalResize) {\n var lanes = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_4__.getChildLanes)(participant),\n resizedLane;\n\n // find the nested lane which is currently resized\n resizedLane = findResizedLane(lanes, resizeStart, isHorizontalResize);\n\n // resized lane cannot shrink below the minimum height\n // but remaining lanes' dimensions are kept intact\n return participant.height - resizedLane.height + _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.LANE_MIN_DIMENSIONS.height;\n}\n\nfunction getLanesMinWidth(participant, resizeStart, isHorizontalResize) {\n var lanes = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_4__.getChildLanes)(participant),\n resizedLane;\n\n // find the nested lane which is currently resized\n resizedLane = findResizedLane(lanes, resizeStart, isHorizontalResize);\n\n // resized lane cannot shrink below the minimum width\n // but remaining lanes' dimensions are kept intact\n return participant.width - resizedLane.width + _ResizeBehavior__WEBPACK_IMPORTED_MODULE_3__.VERTICAL_LANE_MIN_DIMENSIONS.width;\n}\n\n/**\n * Find nested lane which is currently resized.\n *\n * @param {Shape[]} lanes\n * @param {number} resizeStart\n * @param {boolean} isHorizontalResize\n *\n * @return {Shape}\n */\nfunction findResizedLane(lanes, resizeStart, isHorizontalResize) {\n var i, lane, childLanes;\n\n for (i = 0; i < lanes.length; i++) {\n lane = lanes[i];\n\n // resizing current lane or a lane nested\n if (!isHorizontalResize && resizeStart >= lane.y && resizeStart <= lane.y + lane.height ||\n isHorizontalResize && resizeStart >= lane.x && resizeStart <= lane.x + lane.width) {\n\n childLanes = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_4__.getChildLanes)(lane);\n\n // a nested lane is resized\n if (childLanes.length) {\n return findResizedLane(childLanes, resizeStart, isHorizontalResize);\n }\n\n // current lane is the resized one\n return lane;\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9TcGFjZVRvb2xCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBbUM7O0FBRVU7O0FBS2Y7O0FBVUo7O0FBRXVCOztBQUVqRDtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdEO0FBQ0EsYUFBYSxzQ0FBc0M7QUFDbkQ7O0FBRUE7O0FBRUE7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxpREFBTztBQUNYOztBQUVBLFVBQVUsbURBQUU7QUFDWjtBQUNBOztBQUVBLFVBQVUsbURBQUU7QUFDWiw4QkFBOEIsMERBQVksVUFBVSxnRUFBbUIsR0FBRyx5RUFBNEI7QUFDdEc7O0FBRUEsVUFBVSxtREFBRSw4QkFBOEIsd0RBQVU7QUFDcEQsOEJBQThCLHVFQUEwQjtBQUN4RDs7QUFFQSxVQUFVLG1EQUFFO0FBQ1osOEJBQThCLDJFQUE4QjtBQUM1RDs7QUFFQSxVQUFVLG1EQUFFO0FBQ1osOEJBQThCLGlFQUFvQjtBQUNsRDtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE1BQU07QUFDakIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSx5QkFBeUIsMERBQVk7O0FBRXJDO0FBQ0EsOEJBQThCLHVFQUEwQixHQUFHLGdGQUFtQztBQUM5Rjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsdUVBQTBCO0FBQ2hELE1BQU07QUFDTjtBQUNBO0FBQ0EsZ0JBQWdCLGdGQUFtQztBQUNuRDtBQUNBOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsZUFBZSx1RUFBMEI7QUFDekM7QUFDQTtBQUNBLE1BQU07QUFDTixzQkFBc0IsZ0ZBQW1DO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsdUVBQTBCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnRkFBbUM7QUFDaEQ7O0FBRUE7QUFDQSxXQUFXLDZEQUFhO0FBQ3hCOztBQUVBO0FBQ0EsY0FBYyw2REFBYTtBQUMzQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQsZ0VBQW1CO0FBQ3RFOztBQUVBO0FBQ0EsY0FBYyw2REFBYTtBQUMzQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQseUVBQTRCO0FBQzdFOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLGtCQUFrQjtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLDZEQUFhOztBQUVoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvU3BhY2VUb29sQmVoYXZpb3IuanM/MTEyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNFeHBhbmRlZCxcbiAgaXNIb3Jpem9udGFsXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcblxuaW1wb3J0IHtcbiAgR1JPVVBfTUlOX0RJTUVOU0lPTlMsXG4gIExBTkVfTUlOX0RJTUVOU0lPTlMsXG4gIFZFUlRJQ0FMX0xBTkVfTUlOX0RJTUVOU0lPTlMsXG4gIFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TLFxuICBWRVJUSUNBTF9QQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUyxcbiAgU1VCX1BST0NFU1NfTUlOX0RJTUVOU0lPTlMsXG4gIFRFWFRfQU5OT1RBVElPTl9NSU5fRElNRU5TSU9OU1xufSBmcm9tICcuL1Jlc2l6ZUJlaGF2aW9yJztcblxuaW1wb3J0IHsgZ2V0Q2hpbGRMYW5lcyB9IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL21vZGVsL1R5cGVzJykuU2hhcGV9IFNoYXBlXG4gKi9cblxudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNwYWNlVG9vbEJlaGF2aW9yKGV2ZW50QnVzKSB7XG4gIGV2ZW50QnVzLm9uKCdzcGFjZVRvb2wuZ2V0TWluRGltZW5zaW9ucycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGVzID0gY29udGV4dC5zaGFwZXMsXG4gICAgICAgIGF4aXMgPSBjb250ZXh0LmF4aXMsXG4gICAgICAgIHN0YXJ0ID0gY29udGV4dC5zdGFydCxcbiAgICAgICAgbWluRGltZW5zaW9ucyA9IHt9O1xuXG4gICAgZm9yRWFjaChzaGFwZXMsIGZ1bmN0aW9uKHNoYXBlKSB7XG4gICAgICB2YXIgaWQgPSBzaGFwZS5pZDtcblxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSBnZXRQYXJ0aWNpcGFudE1pbkRpbWVuc2lvbnMoc2hhcGUsIGF4aXMsIHN0YXJ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpMYW5lJykpIHtcbiAgICAgICAgbWluRGltZW5zaW9uc1sgaWQgXSA9IGlzSG9yaXpvbnRhbChzaGFwZSkgPyBMQU5FX01JTl9ESU1FTlNJT05TIDogVkVSVElDQUxfTEFORV9NSU5fRElNRU5TSU9OUztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaXNFeHBhbmRlZChzaGFwZSkpIHtcbiAgICAgICAgbWluRGltZW5zaW9uc1sgaWQgXSA9IFNVQl9QUk9DRVNTX01JTl9ESU1FTlNJT05TO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXMoc2hhcGUsICdicG1uOlRleHRBbm5vdGF0aW9uJykpIHtcbiAgICAgICAgbWluRGltZW5zaW9uc1sgaWQgXSA9IFRFWFRfQU5OT1RBVElPTl9NSU5fRElNRU5TSU9OUztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzKHNoYXBlLCAnYnBtbjpHcm91cCcpKSB7XG4gICAgICAgIG1pbkRpbWVuc2lvbnNbIGlkIF0gPSBHUk9VUF9NSU5fRElNRU5TSU9OUztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtaW5EaW1lbnNpb25zO1xuICB9KTtcbn1cblxuU3BhY2VUb29sQmVoYXZpb3IuJGluamVjdCA9IFsgJ2V2ZW50QnVzJyBdO1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuZnVuY3Rpb24gaXNIb3Jpem9udGFsQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCc7XG59XG5cbi8qKlxuICogR2V0IG1pbmltdW0gZGltZW5zaW9ucyBmb3IgcGFydGljaXBhbnQgdGFraW5nIGxhbmVzIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBwYXJ0aWNpcGFudFxuICogQHBhcmFtIHtBeGlzfSBheGlzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFBhcnRpY2lwYW50TWluRGltZW5zaW9ucyhwYXJ0aWNpcGFudCwgYXhpcywgc3RhcnQpIHtcbiAgdmFyIGlzSG9yaXpvbnRhbExhbmUgPSBpc0hvcml6b250YWwocGFydGljaXBhbnQpO1xuXG4gIGlmICghaGFzQ2hpbGRMYW5lcyhwYXJ0aWNpcGFudCkpIHtcbiAgICByZXR1cm4gaXNIb3Jpem9udGFsTGFuZSA/IFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TIDogVkVSVElDQUxfUEFSVElDSVBBTlRfTUlOX0RJTUVOU0lPTlM7XG4gIH1cblxuICB2YXIgaXNIb3Jpem9udGFsUmVzaXplID0gaXNIb3Jpem9udGFsQXhpcyhheGlzKTtcbiAgdmFyIG1pbkRpbWVuc2lvbnMgPSB7fTtcblxuICBpZiAoaXNIb3Jpem9udGFsUmVzaXplKSB7XG4gICAgaWYgKGlzSG9yaXpvbnRhbExhbmUpIHtcbiAgICAgIG1pbkRpbWVuc2lvbnMgPSBQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUztcbiAgICB9IGVsc2Uge1xuICAgICAgbWluRGltZW5zaW9ucyA9IHtcbiAgICAgICAgd2lkdGg6IGdldFBhcnRpY2lwYW50TWluV2lkdGgocGFydGljaXBhbnQsIHN0YXJ0LCBpc0hvcml6b250YWxSZXNpemUpLFxuICAgICAgICBoZWlnaHQ6IFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TLmhlaWdodFxuICAgICAgfTtcbiAgICB9XG5cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNIb3Jpem9udGFsTGFuZSkge1xuICAgICAgbWluRGltZW5zaW9ucyA9IHtcbiAgICAgICAgd2lkdGg6IFBBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGdldFBhcnRpY2lwYW50TWluSGVpZ2h0KHBhcnRpY2lwYW50LCBzdGFydCwgaXNIb3Jpem9udGFsUmVzaXplKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWluRGltZW5zaW9ucyA9IFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaW5EaW1lbnNpb25zO1xufVxuXG4vKipcbiAqIEdldCBtaW5pbXVtIGhlaWdodCBmb3IgcGFydGljaXBhbnQgdGFraW5nIGxhbmVzIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBwYXJ0aWNpcGFudFxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSG9yaXpvbnRhbFJlc2l6ZVxuICpcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRNaW5IZWlnaHQocGFydGljaXBhbnQsIHN0YXJ0LCBpc0hvcml6b250YWxSZXNpemUpIHtcbiAgdmFyIGxhbmVzTWluSGVpZ2h0O1xuICBsYW5lc01pbkhlaWdodCA9IGdldExhbmVzTWluSGVpZ2h0KHBhcnRpY2lwYW50LCBzdGFydCwgaXNIb3Jpem9udGFsUmVzaXplKTtcbiAgcmV0dXJuIG1heChQQVJUSUNJUEFOVF9NSU5fRElNRU5TSU9OUy5oZWlnaHQsIGxhbmVzTWluSGVpZ2h0KTtcbn1cblxuLyoqXG4gKiBHZXQgbWluaW11bSB3aWR0aCBmb3IgcGFydGljaXBhbnQgdGFraW5nIGxhbmVzIGludG8gYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBwYXJ0aWNpcGFudFxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSG9yaXpvbnRhbFJlc2l6ZVxuICpcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UGFydGljaXBhbnRNaW5XaWR0aChwYXJ0aWNpcGFudCwgc3RhcnQsIGlzSG9yaXpvbnRhbFJlc2l6ZSkge1xuICB2YXIgbGFuZXNNaW5XaWR0aDtcbiAgbGFuZXNNaW5XaWR0aCA9IGdldExhbmVzTWluV2lkdGgocGFydGljaXBhbnQsIHN0YXJ0LCBpc0hvcml6b250YWxSZXNpemUpO1xuICByZXR1cm4gbWF4KFZFUlRJQ0FMX1BBUlRJQ0lQQU5UX01JTl9ESU1FTlNJT05TLndpZHRoLCBsYW5lc01pbldpZHRoKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2hpbGRMYW5lcyhlbGVtZW50KSB7XG4gIHJldHVybiAhIWdldENoaWxkTGFuZXMoZWxlbWVudCkubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBnZXRMYW5lc01pbkhlaWdodChwYXJ0aWNpcGFudCwgcmVzaXplU3RhcnQsIGlzSG9yaXpvbnRhbFJlc2l6ZSkge1xuICB2YXIgbGFuZXMgPSBnZXRDaGlsZExhbmVzKHBhcnRpY2lwYW50KSxcbiAgICAgIHJlc2l6ZWRMYW5lO1xuXG4gIC8vIGZpbmQgdGhlIG5lc3RlZCBsYW5lIHdoaWNoIGlzIGN1cnJlbnRseSByZXNpemVkXG4gIHJlc2l6ZWRMYW5lID0gZmluZFJlc2l6ZWRMYW5lKGxhbmVzLCByZXNpemVTdGFydCwgaXNIb3Jpem9udGFsUmVzaXplKTtcblxuICAvLyByZXNpemVkIGxhbmUgY2Fubm90IHNocmluayBiZWxvdyB0aGUgbWluaW11bSBoZWlnaHRcbiAgLy8gYnV0IHJlbWFpbmluZyBsYW5lcycgZGltZW5zaW9ucyBhcmUga2VwdCBpbnRhY3RcbiAgcmV0dXJuIHBhcnRpY2lwYW50LmhlaWdodCAtIHJlc2l6ZWRMYW5lLmhlaWdodCArIExBTkVfTUlOX0RJTUVOU0lPTlMuaGVpZ2h0O1xufVxuXG5mdW5jdGlvbiBnZXRMYW5lc01pbldpZHRoKHBhcnRpY2lwYW50LCByZXNpemVTdGFydCwgaXNIb3Jpem9udGFsUmVzaXplKSB7XG4gIHZhciBsYW5lcyA9IGdldENoaWxkTGFuZXMocGFydGljaXBhbnQpLFxuICAgICAgcmVzaXplZExhbmU7XG5cbiAgLy8gZmluZCB0aGUgbmVzdGVkIGxhbmUgd2hpY2ggaXMgY3VycmVudGx5IHJlc2l6ZWRcbiAgcmVzaXplZExhbmUgPSBmaW5kUmVzaXplZExhbmUobGFuZXMsIHJlc2l6ZVN0YXJ0LCBpc0hvcml6b250YWxSZXNpemUpO1xuXG4gIC8vIHJlc2l6ZWQgbGFuZSBjYW5ub3Qgc2hyaW5rIGJlbG93IHRoZSBtaW5pbXVtIHdpZHRoXG4gIC8vIGJ1dCByZW1haW5pbmcgbGFuZXMnIGRpbWVuc2lvbnMgYXJlIGtlcHQgaW50YWN0XG4gIHJldHVybiBwYXJ0aWNpcGFudC53aWR0aCAtIHJlc2l6ZWRMYW5lLndpZHRoICsgVkVSVElDQUxfTEFORV9NSU5fRElNRU5TSU9OUy53aWR0aDtcbn1cblxuLyoqXG4gKiBGaW5kIG5lc3RlZCBsYW5lIHdoaWNoIGlzIGN1cnJlbnRseSByZXNpemVkLlxuICpcbiAqIEBwYXJhbSB7U2hhcGVbXX0gbGFuZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXNpemVTdGFydFxuICogQHBhcmFtIHtib29sZWFufSBpc0hvcml6b250YWxSZXNpemVcbiAqXG4gKiBAcmV0dXJuIHtTaGFwZX1cbiAqL1xuZnVuY3Rpb24gZmluZFJlc2l6ZWRMYW5lKGxhbmVzLCByZXNpemVTdGFydCwgaXNIb3Jpem9udGFsUmVzaXplKSB7XG4gIHZhciBpLCBsYW5lLCBjaGlsZExhbmVzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsYW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGxhbmUgPSBsYW5lc1tpXTtcblxuICAgIC8vIHJlc2l6aW5nIGN1cnJlbnQgbGFuZSBvciBhIGxhbmUgbmVzdGVkXG4gICAgaWYgKCFpc0hvcml6b250YWxSZXNpemUgJiYgcmVzaXplU3RhcnQgPj0gbGFuZS55ICYmIHJlc2l6ZVN0YXJ0IDw9IGxhbmUueSArIGxhbmUuaGVpZ2h0IHx8XG4gICAgICAgIGlzSG9yaXpvbnRhbFJlc2l6ZSAmJiByZXNpemVTdGFydCA+PSBsYW5lLnggJiYgcmVzaXplU3RhcnQgPD0gbGFuZS54ICsgbGFuZS53aWR0aCkge1xuXG4gICAgICBjaGlsZExhbmVzID0gZ2V0Q2hpbGRMYW5lcyhsYW5lKTtcblxuICAgICAgLy8gYSBuZXN0ZWQgbGFuZSBpcyByZXNpemVkXG4gICAgICBpZiAoY2hpbGRMYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRSZXNpemVkTGFuZShjaGlsZExhbmVzLCByZXNpemVTdGFydCwgaXNIb3Jpem9udGFsUmVzaXplKTtcbiAgICAgIH1cblxuICAgICAgLy8gY3VycmVudCBsYW5lIGlzIHRoZSByZXNpemVkIG9uZVxuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SpaceToolBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SubProcessPlaneBehavior.js":
/*!*********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SubProcessPlaneBehavior.js ***!
\*********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SubProcessPlaneBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n/* harmony import */ var _util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/DrilldownUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DrilldownUtil.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('../ElementFactory').default} ElementFactory\n * @typedef {import('../BpmnFactory').default} BpmnFactory\n * @typedef {import('../../../Modeler').default} Modeler\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\n *\n * @typedef {import('../../../model/Types').Element} Element\n * @typedef {import('../../../model/Types').Root} Root\n * @typedef {import('../../../model/Types').ModdleElement} ModdleElement\n */\n\nvar LOW_PRIORITY = 400;\nvar HIGH_PRIORITY = 600;\n\nvar DEFAULT_POSITION = {\n x: 180,\n y: 160\n};\n\n\n/**\n * Creates bpmndi:BPMNPlane elements and canvas planes when collapsed subprocesses are created.\n *\n * @param {Canvas} canvas\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n * @param {ElementFactory} elementFactory\n * @param {BpmnFactory} bpmnFactory\n * @param {Modeler} bpmnjs\n * @param {ElementRegistry} elementRegistry\n */\nfunction SubProcessPlaneBehavior(\n canvas, eventBus, modeling,\n elementFactory, bpmnFactory, bpmnjs, elementRegistry) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this._canvas = canvas;\n this._eventBus = eventBus;\n this._modeling = modeling;\n this._elementFactory = elementFactory;\n this._bpmnFactory = bpmnFactory;\n this._bpmnjs = bpmnjs;\n this._elementRegistry = elementRegistry;\n\n var self = this;\n\n function isCollapsedSubProcess(element) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:SubProcess') && !(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_2__.isExpanded)(element);\n }\n\n function createRoot(context) {\n var shape = context.shape,\n rootElement = context.newRootElement;\n\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape);\n\n rootElement = self._addDiagram(rootElement || businessObject);\n\n context.newRootElement = canvas.addRootElement(rootElement);\n }\n\n function removeRoot(context) {\n var shape = context.shape;\n\n var businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(shape);\n self._removeDiagram(businessObject);\n\n var rootElement = context.newRootElement = elementRegistry.get((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getPlaneIdFromShape)(businessObject));\n\n canvas.removeRootElement(rootElement);\n }\n\n // add plane elements for newly created sub-processes\n // this ensures we can actually drill down into the element\n this.executed('shape.create', function(context) {\n var shape = context.shape;\n if (!isCollapsedSubProcess(shape)) {\n return;\n }\n\n createRoot(context);\n }, true);\n\n\n this.postExecuted('shape.create', function(context) {\n var shape = context.shape,\n rootElement = context.newRootElement;\n\n if (!rootElement || !shape.children) {\n return;\n }\n\n self._showRecursively(shape.children);\n\n self._moveChildrenToShape(shape, rootElement);\n }, true);\n\n\n this.reverted('shape.create', function(context) {\n var shape = context.shape;\n if (!isCollapsedSubProcess(shape)) {\n return;\n }\n\n removeRoot(context);\n }, true);\n\n\n this.preExecuted('shape.delete', function(context) {\n var shape = context.shape;\n if (!isCollapsedSubProcess(shape)) {\n return;\n }\n\n var attachedRoot = elementRegistry.get((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getPlaneIdFromShape)(shape));\n\n if (!attachedRoot) {\n return;\n }\n\n modeling.removeElements(attachedRoot.children.slice());\n }, true);\n\n\n this.executed('shape.delete', function(context) {\n var shape = context.shape;\n if (!isCollapsedSubProcess(shape)) {\n return;\n }\n removeRoot(context);\n }, true);\n\n\n this.reverted('shape.delete', function(context) {\n var shape = context.shape;\n if (!isCollapsedSubProcess(shape)) {\n return;\n }\n\n createRoot(context);\n }, true);\n\n\n this.preExecuted('shape.replace', function(context) {\n var oldShape = context.oldShape;\n var newShape = context.newShape;\n\n if (!isCollapsedSubProcess(oldShape) || !isCollapsedSubProcess(newShape)) {\n return;\n }\n\n // old plane could have content,\n // we remove it so it is not recursively deleted from 'shape.delete'\n context.oldRoot = canvas.removeRootElement((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getPlaneIdFromShape)(oldShape));\n }, true);\n\n\n this.postExecuted('shape.replace', function(context) {\n var newShape = context.newShape,\n source = context.oldRoot,\n target = canvas.findRoot((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getPlaneIdFromShape)(newShape));\n\n if (!source || !target) {\n return;\n }\n var elements = source.children;\n\n modeling.moveElements(elements, { x: 0, y: 0 }, target);\n }, true);\n\n\n // rename primary elements when the secondary element changes\n // this ensures rootElement.id = element.id + '_plane'\n this.executed('element.updateProperties', function(context) {\n var shape = context.element;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:SubProcess')) {\n return;\n }\n\n var properties = context.properties;\n var oldProperties = context.oldProperties;\n\n var oldId = oldProperties.id,\n newId = properties.id;\n\n if (oldId === newId) {\n return;\n }\n\n if ((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.isPlane)(shape)) {\n elementRegistry.updateId(shape, (0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.toPlaneId)(newId));\n elementRegistry.updateId(oldId, newId);\n\n return;\n }\n\n var planeElement = elementRegistry.get((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.toPlaneId)(oldId));\n\n if (!planeElement) {\n return;\n }\n\n elementRegistry.updateId((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.toPlaneId)(oldId), (0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.toPlaneId)(newId));\n }, true);\n\n\n this.reverted('element.updateProperties', function(context) {\n var shape = context.element;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:SubProcess')) {\n return;\n }\n\n var properties = context.properties;\n var oldProperties = context.oldProperties;\n\n var oldId = oldProperties.id,\n newId = properties.id;\n\n if (oldId === newId) {\n return;\n }\n\n if ((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.isPlane)(shape)) {\n elementRegistry.updateId(shape, (0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.toPlaneId)(oldId));\n elementRegistry.updateId(newId, oldId);\n\n return;\n }\n\n var planeElement = elementRegistry.get((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.toPlaneId)(newId));\n\n if (!planeElement) {\n return;\n }\n\n elementRegistry.updateId(planeElement, (0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.toPlaneId)(oldId));\n }, true);\n\n // re-throw element.changed to re-render primary shape if associated plane has\n // changed (e.g. bpmn:name property has changed)\n eventBus.on('element.changed', function(context) {\n var element = context.element;\n\n if (!(0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.isPlane)(element)) {\n return;\n }\n\n var plane = element;\n\n var primaryShape = elementRegistry.get((0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getShapeIdFromPlane)(plane));\n\n // do not re-throw if no associated primary shape (e.g. bpmn:Process)\n if (!primaryShape || primaryShape === plane) {\n return;\n }\n\n eventBus.fire('element.changed', { element: primaryShape });\n });\n\n\n // create/remove plane for the subprocess\n this.executed('shape.toggleCollapse', LOW_PRIORITY, function(context) {\n var shape = context.shape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:SubProcess')) {\n return;\n }\n\n if (!(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_2__.isExpanded)(shape)) {\n createRoot(context);\n self._showRecursively(shape.children);\n } else {\n removeRoot(context);\n }\n\n }, true);\n\n\n // create/remove plane for the subprocess\n this.reverted('shape.toggleCollapse', LOW_PRIORITY, function(context) {\n var shape = context.shape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:SubProcess')) {\n return;\n }\n\n if (!(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_2__.isExpanded)(shape)) {\n createRoot(context);\n self._showRecursively(shape.children);\n } else {\n removeRoot(context);\n }\n\n }, true);\n\n // move elements between planes\n this.postExecuted('shape.toggleCollapse', HIGH_PRIORITY, function(context) {\n var shape = context.shape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:SubProcess')) {\n return;\n }\n\n var rootElement = context.newRootElement;\n\n if (!rootElement) {\n return;\n }\n\n if (!(0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_2__.isExpanded)(shape)) {\n\n // collapsed\n self._moveChildrenToShape(shape, rootElement);\n\n } else {\n self._moveChildrenToShape(rootElement, shape);\n }\n }, true);\n\n\n // copy-paste ///////////\n\n // add elements in plane to tree\n eventBus.on('copyPaste.createTree', function(context) {\n var element = context.element,\n children = context.children;\n\n if (!isCollapsedSubProcess(element)) {\n return;\n }\n\n var id = (0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getPlaneIdFromShape)(element);\n var parent = elementRegistry.get(id);\n\n if (parent) {\n\n // do not copy invisible root element\n children.push.apply(children, parent.children);\n }\n });\n\n // set plane children as direct children of collapsed shape\n eventBus.on('copyPaste.copyElement', function(context) {\n var descriptor = context.descriptor,\n element = context.element,\n elements = context.elements;\n\n var parent = element.parent;\n\n var isPlane = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getDi)(parent), 'bpmndi:BPMNPlane');\n if (!isPlane) {\n return;\n }\n\n var parentId = (0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getShapeIdFromPlane)(parent);\n\n var referencedShape = (0,min_dash__WEBPACK_IMPORTED_MODULE_4__.find)(elements, function(element) {\n return element.id === parentId;\n });\n\n if (!referencedShape) {\n return;\n }\n\n descriptor.parent = referencedShape.id;\n });\n\n // hide children during pasting\n eventBus.on('copyPaste.pasteElement', function(context) {\n var descriptor = context.descriptor;\n\n if (!descriptor.parent) {\n return;\n }\n\n if (isCollapsedSubProcess(descriptor.parent) || descriptor.parent.hidden) {\n descriptor.hidden = true;\n }\n });\n\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(SubProcessPlaneBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n/**\n * Moves the child elements from source to target.\n *\n * If the target is a plane, the children are moved to the top left corner.\n * Otherwise, the center of the target is used.\n *\n * @param {Root} source\n * @param {Root} target\n */\nSubProcessPlaneBehavior.prototype._moveChildrenToShape = function(source, target) {\n var modeling = this._modeling;\n\n var children = source.children;\n var offset;\n\n if (!children) {\n return;\n }\n\n // add external labels that weren't children of sub process\n children = children.concat(children.reduce(function(labels, child) {\n if (child.label && child.label.parent !== source) {\n return labels.concat(child.label);\n }\n\n return labels;\n }, []));\n\n // only change plane if there are no visible children, but don't move them\n var visibleChildren = children.filter(function(child) {\n return !child.hidden;\n });\n\n if (!visibleChildren.length) {\n modeling.moveElements(children, { x: 0, y: 0 }, target, { autoResize: false });\n return;\n }\n\n var childrenBounds = (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_6__.getBBox)(visibleChildren);\n\n // target is a plane\n if (!target.x) {\n offset = {\n x: DEFAULT_POSITION.x - childrenBounds.x,\n y: DEFAULT_POSITION.y - childrenBounds.y\n };\n }\n\n // source is a plane\n else {\n\n // move relative to the center of the shape\n var targetMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_7__.getMid)(target);\n var childrenMid = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_7__.getMid)(childrenBounds);\n\n offset = {\n x: targetMid.x - childrenMid.x,\n y: targetMid.y - childrenMid.y\n };\n }\n\n modeling.moveElements(children, offset, target, { autoResize: false });\n};\n\n/**\n * Sets `hidden` property on all children of the given shape.\n *\n * @param {Element[]} elements\n * @param {boolean} [hidden=false]\n *\n * @return {Element[]}\n */\nSubProcessPlaneBehavior.prototype._showRecursively = function(elements, hidden) {\n var self = this;\n\n var result = [];\n elements.forEach(function(element) {\n element.hidden = !!hidden;\n\n result = result.concat(element);\n\n if (element.children) {\n result = result.concat(\n self._showRecursively(element.children, element.collapsed || hidden)\n );\n }\n });\n\n return result;\n};\n\n/**\n * Adds a given root element to the BPMNDI diagrams.\n *\n * @param {Root|ModdleElement} planeElement\n *\n * @return {Root}\n */\nSubProcessPlaneBehavior.prototype._addDiagram = function(planeElement) {\n var bpmnjs = this._bpmnjs;\n var diagrams = bpmnjs.getDefinitions().diagrams;\n\n if (!planeElement.businessObject) {\n planeElement = this._createNewDiagram(planeElement);\n }\n\n diagrams.push(planeElement.di.$parent);\n\n return planeElement;\n};\n\n\n/**\n * Creates a new plane element for the given sub process.\n *\n * @param {ModdleElement} bpmnElement\n *\n * @return {Root}\n */\nSubProcessPlaneBehavior.prototype._createNewDiagram = function(bpmnElement) {\n var bpmnFactory = this._bpmnFactory,\n elementFactory = this._elementFactory;\n\n var diPlane = bpmnFactory.create('bpmndi:BPMNPlane', {\n bpmnElement: bpmnElement\n });\n\n var diDiagram = bpmnFactory.create('bpmndi:BPMNDiagram', {\n plane: diPlane\n });\n\n diPlane.$parent = diDiagram;\n\n // add a virtual element (not being drawn),\n // a copy cat of our BpmnImporter code\n var planeElement = elementFactory.createRoot({\n id: (0,_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_3__.getPlaneIdFromShape)(bpmnElement),\n type: bpmnElement.$type,\n di: diPlane,\n businessObject: bpmnElement,\n collapsed: true\n });\n\n return planeElement;\n};\n\n/**\n * Removes the diagram for a given root element.\n *\n * @param {Root} rootElement\n *\n * @return {ModdleElement}\n */\nSubProcessPlaneBehavior.prototype._removeDiagram = function(rootElement) {\n var bpmnjs = this._bpmnjs;\n\n var diagrams = bpmnjs.getDefinitions().diagrams;\n\n var removedDiagram = (0,min_dash__WEBPACK_IMPORTED_MODULE_4__.find)(diagrams, function(diagram) {\n return diagram.plane.bpmnElement.id === rootElement.id;\n });\n\n diagrams.splice(diagrams.indexOf(removedDiagram), 1);\n\n return removedDiagram;\n};\n\n\nSubProcessPlaneBehavior.$inject = [\n 'canvas',\n 'eventBus',\n 'modeling',\n 'elementFactory',\n 'bpmnFactory',\n 'bpmnjs',\n 'elementRegistry'\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9TdWJQcm9jZXNzUGxhbmVCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBd0M7O0FBRW1DOztBQUUzQzs7QUFFa0I7O0FBRXFCOztBQUViOztBQUVIOztBQU9sQjs7QUFFckM7QUFDQSxhQUFhLDhDQUE4QztBQUMzRCxhQUFhLGdEQUFnRDtBQUM3RCxhQUFhLCtCQUErQjtBQUM1QyxhQUFhLHFDQUFxQztBQUNsRCxhQUFhLGtDQUFrQztBQUMvQyxhQUFhLG9DQUFvQztBQUNqRCxhQUFhLHVEQUF1RDtBQUNwRTtBQUNBLGFBQWEsd0NBQXdDO0FBQ3JELGFBQWEscUNBQXFDO0FBQ2xELGFBQWEsOENBQThDO0FBQzNEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsYUFBYTtBQUN4QixXQUFXLFNBQVM7QUFDcEIsV0FBVyxpQkFBaUI7QUFDNUI7QUFDZTtBQUNmO0FBQ0E7O0FBRUEsRUFBRSxpRkFBa0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsV0FBVyxtREFBRSxpQ0FBaUMsd0RBQVU7QUFDeEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixrRUFBaUI7O0FBRTFDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5QkFBeUIsa0VBQWlCO0FBQzFDOztBQUVBLG1FQUFtRSx3RUFBbUI7O0FBRXRGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNB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Q0Esc0NBQXNDLFlBQVksWUFBWSxtQkFBbUI7QUFDakY7QUFDQTs7QUFFQSx1QkFBdUIscUVBQU87O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0Isd0VBQU07QUFDMUIsc0JBQXNCLHdFQUFNOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9EQUFvRCxtQkFBbUI7QUFDdkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsU0FBUztBQUNwQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHdFQUFtQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVCQUF1Qiw4Q0FBSTtBQUMzQjtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvU3ViUHJvY2Vzc1BsYW5lQmVoYXZpb3IuanM/YmEwYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBmaW5kIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQgeyBpc0V4cGFuZGVkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG5pbXBvcnQgeyBnZXRCdXNpbmVzc09iamVjdCwgZ2V0RGksIGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQgeyBnZXRNaWQgfSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7IGdldEJCb3ggfSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0UGxhbmVJZEZyb21TaGFwZSxcbiAgZ2V0U2hhcGVJZEZyb21QbGFuZSxcbiAgaXNQbGFuZSxcbiAgdG9QbGFuZUlkXG59IGZyb20gJy4uLy4uLy4uL3V0aWwvRHJpbGxkb3duVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9DYW52YXMnKS5kZWZhdWx0fSBDYW52YXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vRWxlbWVudEZhY3RvcnknKS5kZWZhdWx0fSBFbGVtZW50RmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vQnBtbkZhY3RvcnknKS5kZWZhdWx0fSBCcG1uRmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vTW9kZWxlcicpLmRlZmF1bHR9IE1vZGVsZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudFJlZ2lzdHJ5JykuZGVmYXVsdH0gRWxlbWVudFJlZ2lzdHJ5XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi9tb2RlbC9UeXBlcycpLlJvb3R9IFJvb3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL21vZGVsL1R5cGVzJykuTW9kZGxlRWxlbWVudH0gTW9kZGxlRWxlbWVudFxuICovXG5cbnZhciBMT1dfUFJJT1JJVFkgPSA0MDA7XG52YXIgSElHSF9QUklPUklUWSA9IDYwMDtcblxudmFyIERFRkFVTFRfUE9TSVRJT04gPSB7XG4gIHg6IDE4MCxcbiAgeTogMTYwXG59O1xuXG5cbi8qKlxuICogQ3JlYXRlcyBicG1uZGk6QlBNTlBsYW5lIGVsZW1lbnRzIGFuZCBjYW52YXMgcGxhbmVzIHdoZW4gY29sbGFwc2VkIHN1YnByb2Nlc3NlcyBhcmUgY3JlYXRlZC5cbiAqXG4gKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICogQHBhcmFtIHtNb2RlbGVyfSBicG1uanNcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3ViUHJvY2Vzc1BsYW5lQmVoYXZpb3IoXG4gICAgY2FudmFzLCBldmVudEJ1cywgbW9kZWxpbmcsXG4gICAgZWxlbWVudEZhY3RvcnksIGJwbW5GYWN0b3J5LCBicG1uanMsIGVsZW1lbnRSZWdpc3RyeSkge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX2VsZW1lbnRGYWN0b3J5ID0gZWxlbWVudEZhY3Rvcnk7XG4gIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gIHRoaXMuX2JwbW5qcyA9IGJwbW5qcztcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xuXG4gIHZhciBzZWxmID0gdGhpcztcblxuICBmdW5jdGlvbiBpc0NvbGxhcHNlZFN1YlByb2Nlc3MoZWxlbWVudCkge1xuICAgIHJldHVybiBpcyhlbGVtZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgIWlzRXhwYW5kZWQoZWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSb290KGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICByb290RWxlbWVudCA9IGNvbnRleHQubmV3Um9vdEVsZW1lbnQ7XG5cbiAgICB2YXIgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XG5cbiAgICByb290RWxlbWVudCA9IHNlbGYuX2FkZERpYWdyYW0ocm9vdEVsZW1lbnQgfHwgYnVzaW5lc3NPYmplY3QpO1xuXG4gICAgY29udGV4dC5uZXdSb290RWxlbWVudCA9IGNhbnZhcy5hZGRSb290RWxlbWVudChyb290RWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVSb290KGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpO1xuICAgIHNlbGYuX3JlbW92ZURpYWdyYW0oYnVzaW5lc3NPYmplY3QpO1xuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY29udGV4dC5uZXdSb290RWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2V0UGxhbmVJZEZyb21TaGFwZShidXNpbmVzc09iamVjdCkpO1xuXG4gICAgY2FudmFzLnJlbW92ZVJvb3RFbGVtZW50KHJvb3RFbGVtZW50KTtcbiAgfVxuXG4gIC8vIGFkZCBwbGFuZSBlbGVtZW50cyBmb3IgbmV3bHkgY3JlYXRlZCBzdWItcHJvY2Vzc2VzXG4gIC8vIHRoaXMgZW5zdXJlcyB3ZSBjYW4gYWN0dWFsbHkgZHJpbGwgZG93biBpbnRvIHRoZSBlbGVtZW50XG4gIHRoaXMuZXhlY3V0ZWQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuICAgIGlmICghaXNDb2xsYXBzZWRTdWJQcm9jZXNzKHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNyZWF0ZVJvb3QoY29udGV4dCk7XG4gIH0sIHRydWUpO1xuXG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLmNyZWF0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICByb290RWxlbWVudCA9IGNvbnRleHQubmV3Um9vdEVsZW1lbnQ7XG5cbiAgICBpZiAoIXJvb3RFbGVtZW50IHx8ICFzaGFwZS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuX3Nob3dSZWN1cnNpdmVseShzaGFwZS5jaGlsZHJlbik7XG5cbiAgICBzZWxmLl9tb3ZlQ2hpbGRyZW5Ub1NoYXBlKHNoYXBlLCByb290RWxlbWVudCk7XG4gIH0sIHRydWUpO1xuXG5cbiAgdGhpcy5yZXZlcnRlZCgnc2hhcGUuY3JlYXRlJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG4gICAgaWYgKCFpc0NvbGxhcHNlZFN1YlByb2Nlc3Moc2hhcGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVtb3ZlUm9vdChjb250ZXh0KTtcbiAgfSwgdHJ1ZSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGVkKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcbiAgICBpZiAoIWlzQ29sbGFwc2VkU3ViUHJvY2VzcyhzaGFwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYXR0YWNoZWRSb290ID0gZWxlbWVudFJlZ2lzdHJ5LmdldChnZXRQbGFuZUlkRnJvbVNoYXBlKHNoYXBlKSk7XG5cbiAgICBpZiAoIWF0dGFjaGVkUm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLnJlbW92ZUVsZW1lbnRzKGF0dGFjaGVkUm9vdC5jaGlsZHJlbi5zbGljZSgpKTtcbiAgfSwgdHJ1ZSk7XG5cblxuICB0aGlzLmV4ZWN1dGVkKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcbiAgICBpZiAoIWlzQ29sbGFwc2VkU3ViUHJvY2VzcyhzaGFwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVtb3ZlUm9vdChjb250ZXh0KTtcbiAgfSwgdHJ1ZSk7XG5cblxuICB0aGlzLnJldmVydGVkKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcbiAgICBpZiAoIWlzQ29sbGFwc2VkU3ViUHJvY2VzcyhzaGFwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjcmVhdGVSb290KGNvbnRleHQpO1xuICB9LCB0cnVlKTtcblxuXG4gIHRoaXMucHJlRXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIG9sZFNoYXBlID0gY29udGV4dC5vbGRTaGFwZTtcbiAgICB2YXIgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlO1xuXG4gICAgaWYgKCFpc0NvbGxhcHNlZFN1YlByb2Nlc3Mob2xkU2hhcGUpIHx8ICFpc0NvbGxhcHNlZFN1YlByb2Nlc3MobmV3U2hhcGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gb2xkIHBsYW5lIGNvdWxkIGhhdmUgY29udGVudCxcbiAgICAvLyB3ZSByZW1vdmUgaXQgc28gaXQgaXMgbm90IHJlY3Vyc2l2ZWx5IGRlbGV0ZWQgZnJvbSAnc2hhcGUuZGVsZXRlJ1xuICAgIGNvbnRleHQub2xkUm9vdCA9IGNhbnZhcy5yZW1vdmVSb290RWxlbWVudChnZXRQbGFuZUlkRnJvbVNoYXBlKG9sZFNoYXBlKSk7XG4gIH0sIHRydWUpO1xuXG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIG5ld1NoYXBlID0gY29udGV4dC5uZXdTaGFwZSxcbiAgICAgICAgc291cmNlID0gY29udGV4dC5vbGRSb290LFxuICAgICAgICB0YXJnZXQgPSBjYW52YXMuZmluZFJvb3QoZ2V0UGxhbmVJZEZyb21TaGFwZShuZXdTaGFwZSkpO1xuXG4gICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudHMgPSBzb3VyY2UuY2hpbGRyZW47XG5cbiAgICBtb2RlbGluZy5tb3ZlRWxlbWVudHMoZWxlbWVudHMsIHsgeDogMCwgeTogMCB9LCB0YXJnZXQpO1xuICB9LCB0cnVlKTtcblxuXG4gIC8vIHJlbmFtZSBwcmltYXJ5IGVsZW1lbnRzIHdoZW4gdGhlIHNlY29uZGFyeSBlbGVtZW50IGNoYW5nZXNcbiAgLy8gdGhpcyBlbnN1cmVzIHJvb3RFbGVtZW50LmlkID0gZWxlbWVudC5pZCArICdfcGxhbmUnXG4gIHRoaXMuZXhlY3V0ZWQoJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LmVsZW1lbnQ7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydGllcyA9IGNvbnRleHQucHJvcGVydGllcztcbiAgICB2YXIgb2xkUHJvcGVydGllcyA9IGNvbnRleHQub2xkUHJvcGVydGllcztcblxuICAgIHZhciBvbGRJZCA9IG9sZFByb3BlcnRpZXMuaWQsXG4gICAgICAgIG5ld0lkID0gcHJvcGVydGllcy5pZDtcblxuICAgIGlmIChvbGRJZCA9PT0gbmV3SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNQbGFuZShzaGFwZSkpIHtcbiAgICAgIGVsZW1lbnRSZWdpc3RyeS51cGRhdGVJZChzaGFwZSwgdG9QbGFuZUlkKG5ld0lkKSk7XG4gICAgICBlbGVtZW50UmVnaXN0cnkudXBkYXRlSWQob2xkSWQsIG5ld0lkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwbGFuZUVsZW1lbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KHRvUGxhbmVJZChvbGRJZCkpO1xuXG4gICAgaWYgKCFwbGFuZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50UmVnaXN0cnkudXBkYXRlSWQodG9QbGFuZUlkKG9sZElkKSwgdG9QbGFuZUlkKG5ld0lkKSk7XG4gIH0sIHRydWUpO1xuXG5cbiAgdGhpcy5yZXZlcnRlZCgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBzaGFwZSA9IGNvbnRleHQuZWxlbWVudDtcblxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0aWVzID0gY29udGV4dC5wcm9wZXJ0aWVzO1xuICAgIHZhciBvbGRQcm9wZXJ0aWVzID0gY29udGV4dC5vbGRQcm9wZXJ0aWVzO1xuXG4gICAgdmFyIG9sZElkID0gb2xkUHJvcGVydGllcy5pZCxcbiAgICAgICAgbmV3SWQgPSBwcm9wZXJ0aWVzLmlkO1xuXG4gICAgaWYgKG9sZElkID09PSBuZXdJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1BsYW5lKHNoYXBlKSkge1xuICAgICAgZWxlbWVudFJlZ2lzdHJ5LnVwZGF0ZUlkKHNoYXBlLCB0b1BsYW5lSWQob2xkSWQpKTtcbiAgICAgIGVsZW1lbnRSZWdpc3RyeS51cGRhdGVJZChuZXdJZCwgb2xkSWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHBsYW5lRWxlbWVudCA9IGVsZW1lbnRSZWdpc3RyeS5nZXQodG9QbGFuZUlkKG5ld0lkKSk7XG5cbiAgICBpZiAoIXBsYW5lRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnRSZWdpc3RyeS51cGRhdGVJZChwbGFuZUVsZW1lbnQsIHRvUGxhbmVJZChvbGRJZCkpO1xuICB9LCB0cnVlKTtcblxuICAvLyByZS10aHJvdyBlbGVtZW50LmNoYW5nZWQgdG8gcmUtcmVuZGVyIHByaW1hcnkgc2hhcGUgaWYgYXNzb2NpYXRlZCBwbGFuZSBoYXNcbiAgLy8gY2hhbmdlZCAoZS5nLiBicG1uOm5hbWUgcHJvcGVydHkgaGFzIGNoYW5nZWQpXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50LmNoYW5nZWQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7XG5cbiAgICBpZiAoIWlzUGxhbmUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcGxhbmUgPSBlbGVtZW50O1xuXG4gICAgdmFyIHByaW1hcnlTaGFwZSA9IGVsZW1lbnRSZWdpc3RyeS5nZXQoZ2V0U2hhcGVJZEZyb21QbGFuZShwbGFuZSkpO1xuXG4gICAgLy8gZG8gbm90IHJlLXRocm93IGlmIG5vIGFzc29jaWF0ZWQgcHJpbWFyeSBzaGFwZSAoZS5nLiBicG1uOlByb2Nlc3MpXG4gICAgaWYgKCFwcmltYXJ5U2hhcGUgfHwgcHJpbWFyeVNoYXBlID09PSBwbGFuZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50QnVzLmZpcmUoJ2VsZW1lbnQuY2hhbmdlZCcsIHsgZWxlbWVudDogcHJpbWFyeVNoYXBlIH0pO1xuICB9KTtcblxuXG4gIC8vIGNyZWF0ZS9yZW1vdmUgcGxhbmUgZm9yIHRoZSBzdWJwcm9jZXNzXG4gIHRoaXMuZXhlY3V0ZWQoJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghaXNFeHBhbmRlZChzaGFwZSkpIHtcbiAgICAgIGNyZWF0ZVJvb3QoY29udGV4dCk7XG4gICAgICBzZWxmLl9zaG93UmVjdXJzaXZlbHkoc2hhcGUuY2hpbGRyZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVSb290KGNvbnRleHQpO1xuICAgIH1cblxuICB9LCB0cnVlKTtcblxuXG4gIC8vIGNyZWF0ZS9yZW1vdmUgcGxhbmUgZm9yIHRoZSBzdWJwcm9jZXNzXG4gIHRoaXMucmV2ZXJ0ZWQoJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJywgTE9XX1BSSU9SSVRZLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIGlmICghaXMoc2hhcGUsICdicG1uOlN1YlByb2Nlc3MnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghaXNFeHBhbmRlZChzaGFwZSkpIHtcbiAgICAgIGNyZWF0ZVJvb3QoY29udGV4dCk7XG4gICAgICBzZWxmLl9zaG93UmVjdXJzaXZlbHkoc2hhcGUuY2hpbGRyZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVSb290KGNvbnRleHQpO1xuICAgIH1cblxuICB9LCB0cnVlKTtcblxuICAvLyBtb3ZlIGVsZW1lbnRzIGJldHdlZW4gcGxhbmVzXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS50b2dnbGVDb2xsYXBzZScsIEhJR0hfUFJJT1JJVFksIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlO1xuXG4gICAgaWYgKCFpcyhzaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY29udGV4dC5uZXdSb290RWxlbWVudDtcblxuICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXhwYW5kZWQoc2hhcGUpKSB7XG5cbiAgICAgIC8vIGNvbGxhcHNlZFxuICAgICAgc2VsZi5fbW92ZUNoaWxkcmVuVG9TaGFwZShzaGFwZSwgcm9vdEVsZW1lbnQpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuX21vdmVDaGlsZHJlblRvU2hhcGUocm9vdEVsZW1lbnQsIHNoYXBlKTtcbiAgICB9XG4gIH0sIHRydWUpO1xuXG5cbiAgLy8gY29weS1wYXN0ZSAvLy8vLy8vLy8vL1xuXG4gIC8vIGFkZCBlbGVtZW50cyBpbiBwbGFuZSB0byB0cmVlXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUuY3JlYXRlVHJlZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCxcbiAgICAgICAgY2hpbGRyZW4gPSBjb250ZXh0LmNoaWxkcmVuO1xuXG4gICAgaWYgKCFpc0NvbGxhcHNlZFN1YlByb2Nlc3MoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaWQgPSBnZXRQbGFuZUlkRnJvbVNoYXBlKGVsZW1lbnQpO1xuICAgIHZhciBwYXJlbnQgPSBlbGVtZW50UmVnaXN0cnkuZ2V0KGlkKTtcblxuICAgIGlmIChwYXJlbnQpIHtcblxuICAgICAgLy8gZG8gbm90IGNvcHkgaW52aXNpYmxlIHJvb3QgZWxlbWVudFxuICAgICAgY2hpbGRyZW4ucHVzaC5hcHBseShjaGlsZHJlbiwgcGFyZW50LmNoaWxkcmVuKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHNldCBwbGFuZSBjaGlsZHJlbiBhcyBkaXJlY3QgY2hpbGRyZW4gb2YgY29sbGFwc2VkIHNoYXBlXG4gIGV2ZW50QnVzLm9uKCdjb3B5UGFzdGUuY29weUVsZW1lbnQnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBjb250ZXh0LmRlc2NyaXB0b3IsXG4gICAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cztcblxuICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcblxuICAgIHZhciBpc1BsYW5lID0gaXMoZ2V0RGkocGFyZW50KSwgJ2JwbW5kaTpCUE1OUGxhbmUnKTtcbiAgICBpZiAoIWlzUGxhbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50SWQgPSBnZXRTaGFwZUlkRnJvbVBsYW5lKHBhcmVudCk7XG5cbiAgICB2YXIgcmVmZXJlbmNlZFNoYXBlID0gZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuaWQgPT09IHBhcmVudElkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFyZWZlcmVuY2VkU2hhcGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkZXNjcmlwdG9yLnBhcmVudCA9IHJlZmVyZW5jZWRTaGFwZS5pZDtcbiAgfSk7XG5cbiAgLy8gaGlkZSBjaGlsZHJlbiBkdXJpbmcgcGFzdGluZ1xuICBldmVudEJ1cy5vbignY29weVBhc3RlLnBhc3RlRWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IGNvbnRleHQuZGVzY3JpcHRvcjtcblxuICAgIGlmICghZGVzY3JpcHRvci5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNDb2xsYXBzZWRTdWJQcm9jZXNzKGRlc2NyaXB0b3IucGFyZW50KSB8fCBkZXNjcmlwdG9yLnBhcmVudC5oaWRkZW4pIHtcbiAgICAgIGRlc2NyaXB0b3IuaGlkZGVuID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbmluaGVyaXRzKFN1YlByb2Nlc3NQbGFuZUJlaGF2aW9yLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG4vKipcbiAqIE1vdmVzIHRoZSBjaGlsZCBlbGVtZW50cyBmcm9tIHNvdXJjZSB0byB0YXJnZXQuXG4gKlxuICogSWYgdGhlIHRhcmdldCBpcyBhIHBsYW5lLCB0aGUgY2hpbGRyZW4gYXJlIG1vdmVkIHRvIHRoZSB0b3AgbGVmdCBjb3JuZXIuXG4gKiBPdGhlcndpc2UsIHRoZSBjZW50ZXIgb2YgdGhlIHRhcmdldCBpcyB1c2VkLlxuICpcbiAqIEBwYXJhbSB7Um9vdH0gc291cmNlXG4gKiBAcGFyYW0ge1Jvb3R9IHRhcmdldFxuICovXG5TdWJQcm9jZXNzUGxhbmVCZWhhdmlvci5wcm90b3R5cGUuX21vdmVDaGlsZHJlblRvU2hhcGUgPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCkge1xuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgY2hpbGRyZW4gPSBzb3VyY2UuY2hpbGRyZW47XG4gIHZhciBvZmZzZXQ7XG5cbiAgaWYgKCFjaGlsZHJlbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGFkZCBleHRlcm5hbCBsYWJlbHMgdGhhdCB3ZXJlbid0IGNoaWxkcmVuIG9mIHN1YiBwcm9jZXNzXG4gIGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGNoaWxkcmVuLnJlZHVjZShmdW5jdGlvbihsYWJlbHMsIGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkLmxhYmVsICYmIGNoaWxkLmxhYmVsLnBhcmVudCAhPT0gc291cmNlKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLmNvbmNhdChjaGlsZC5sYWJlbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfSwgW10pKTtcblxuICAvLyBvbmx5IGNoYW5nZSBwbGFuZSBpZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSBjaGlsZHJlbiwgYnV0IGRvbid0IG1vdmUgdGhlbVxuICB2YXIgdmlzaWJsZUNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgcmV0dXJuICFjaGlsZC5oaWRkZW47XG4gIH0pO1xuXG4gIGlmICghdmlzaWJsZUNoaWxkcmVuLmxlbmd0aCkge1xuICAgIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhjaGlsZHJlbiwgeyB4OiAwLCB5OiAwIH0sIHRhcmdldCwgeyBhdXRvUmVzaXplOiBmYWxzZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGRyZW5Cb3VuZHMgPSBnZXRCQm94KHZpc2libGVDaGlsZHJlbik7XG5cbiAgLy8gdGFyZ2V0IGlzIGEgcGxhbmVcbiAgaWYgKCF0YXJnZXQueCkge1xuICAgIG9mZnNldCA9IHtcbiAgICAgIHg6IERFRkFVTFRfUE9TSVRJT04ueCAtIGNoaWxkcmVuQm91bmRzLngsXG4gICAgICB5OiBERUZBVUxUX1BPU0lUSU9OLnkgLSBjaGlsZHJlbkJvdW5kcy55XG4gICAgfTtcbiAgfVxuXG4gIC8vIHNvdXJjZSBpcyBhIHBsYW5lXG4gIGVsc2Uge1xuXG4gICAgLy8gbW92ZSByZWxhdGl2ZSB0byB0aGUgY2VudGVyIG9mIHRoZSBzaGFwZVxuICAgIHZhciB0YXJnZXRNaWQgPSBnZXRNaWQodGFyZ2V0KTtcbiAgICB2YXIgY2hpbGRyZW5NaWQgPSBnZXRNaWQoY2hpbGRyZW5Cb3VuZHMpO1xuXG4gICAgb2Zmc2V0ID0ge1xuICAgICAgeDogdGFyZ2V0TWlkLnggLSBjaGlsZHJlbk1pZC54LFxuICAgICAgeTogdGFyZ2V0TWlkLnkgLSBjaGlsZHJlbk1pZC55XG4gICAgfTtcbiAgfVxuXG4gIG1vZGVsaW5nLm1vdmVFbGVtZW50cyhjaGlsZHJlbiwgb2Zmc2V0LCB0YXJnZXQsIHsgYXV0b1Jlc2l6ZTogZmFsc2UgfSk7XG59O1xuXG4vKipcbiAqIFNldHMgYGhpZGRlbmAgcHJvcGVydHkgb24gYWxsIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBzaGFwZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZGRlbj1mYWxzZV1cbiAqXG4gKiBAcmV0dXJuIHtFbGVtZW50W119XG4gKi9cblN1YlByb2Nlc3NQbGFuZUJlaGF2aW9yLnByb3RvdHlwZS5fc2hvd1JlY3Vyc2l2ZWx5ID0gZnVuY3Rpb24oZWxlbWVudHMsIGhpZGRlbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBlbGVtZW50LmhpZGRlbiA9ICEhaGlkZGVuO1xuXG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KFxuICAgICAgICBzZWxmLl9zaG93UmVjdXJzaXZlbHkoZWxlbWVudC5jaGlsZHJlbiwgZWxlbWVudC5jb2xsYXBzZWQgfHwgaGlkZGVuKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBnaXZlbiByb290IGVsZW1lbnQgdG8gdGhlIEJQTU5ESSBkaWFncmFtcy5cbiAqXG4gKiBAcGFyYW0ge1Jvb3R8TW9kZGxlRWxlbWVudH0gcGxhbmVFbGVtZW50XG4gKlxuICogQHJldHVybiB7Um9vdH1cbiAqL1xuU3ViUHJvY2Vzc1BsYW5lQmVoYXZpb3IucHJvdG90eXBlLl9hZGREaWFncmFtID0gZnVuY3Rpb24ocGxhbmVFbGVtZW50KSB7XG4gIHZhciBicG1uanMgPSB0aGlzLl9icG1uanM7XG4gIHZhciBkaWFncmFtcyA9IGJwbW5qcy5nZXREZWZpbml0aW9ucygpLmRpYWdyYW1zO1xuXG4gIGlmICghcGxhbmVFbGVtZW50LmJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcGxhbmVFbGVtZW50ID0gdGhpcy5fY3JlYXRlTmV3RGlhZ3JhbShwbGFuZUVsZW1lbnQpO1xuICB9XG5cbiAgZGlhZ3JhbXMucHVzaChwbGFuZUVsZW1lbnQuZGkuJHBhcmVudCk7XG5cbiAgcmV0dXJuIHBsYW5lRWxlbWVudDtcbn07XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHBsYW5lIGVsZW1lbnQgZm9yIHRoZSBnaXZlbiBzdWIgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGJwbW5FbGVtZW50XG4gKlxuICogQHJldHVybiB7Um9vdH1cbiAqL1xuU3ViUHJvY2Vzc1BsYW5lQmVoYXZpb3IucHJvdG90eXBlLl9jcmVhdGVOZXdEaWFncmFtID0gZnVuY3Rpb24oYnBtbkVsZW1lbnQpIHtcbiAgdmFyIGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBlbGVtZW50RmFjdG9yeSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5O1xuXG4gIHZhciBkaVBsYW5lID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uZGk6QlBNTlBsYW5lJywge1xuICAgIGJwbW5FbGVtZW50OiBicG1uRWxlbWVudFxuICB9KTtcblxuICB2YXIgZGlEaWFncmFtID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uZGk6QlBNTkRpYWdyYW0nLCB7XG4gICAgcGxhbmU6IGRpUGxhbmVcbiAgfSk7XG5cbiAgZGlQbGFuZS4kcGFyZW50ID0gZGlEaWFncmFtO1xuXG4gIC8vIGFkZCBhIHZpcnR1YWwgZWxlbWVudCAobm90IGJlaW5nIGRyYXduKSxcbiAgLy8gYSBjb3B5IGNhdCBvZiBvdXIgQnBtbkltcG9ydGVyIGNvZGVcbiAgdmFyIHBsYW5lRWxlbWVudCA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVJvb3Qoe1xuICAgIGlkOiBnZXRQbGFuZUlkRnJvbVNoYXBlKGJwbW5FbGVtZW50KSxcbiAgICB0eXBlOiBicG1uRWxlbWVudC4kdHlwZSxcbiAgICBkaTogZGlQbGFuZSxcbiAgICBidXNpbmVzc09iamVjdDogYnBtbkVsZW1lbnQsXG4gICAgY29sbGFwc2VkOiB0cnVlXG4gIH0pO1xuXG4gIHJldHVybiBwbGFuZUVsZW1lbnQ7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGRpYWdyYW0gZm9yIGEgZ2l2ZW4gcm9vdCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Um9vdH0gcm9vdEVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5TdWJQcm9jZXNzUGxhbmVCZWhhdmlvci5wcm90b3R5cGUuX3JlbW92ZURpYWdyYW0gPSBmdW5jdGlvbihyb290RWxlbWVudCkge1xuICB2YXIgYnBtbmpzID0gdGhpcy5fYnBtbmpzO1xuXG4gIHZhciBkaWFncmFtcyA9IGJwbW5qcy5nZXREZWZpbml0aW9ucygpLmRpYWdyYW1zO1xuXG4gIHZhciByZW1vdmVkRGlhZ3JhbSA9IGZpbmQoZGlhZ3JhbXMsIGZ1bmN0aW9uKGRpYWdyYW0pIHtcbiAgICByZXR1cm4gZGlhZ3JhbS5wbGFuZS5icG1uRWxlbWVudC5pZCA9PT0gcm9vdEVsZW1lbnQuaWQ7XG4gIH0pO1xuXG4gIGRpYWdyYW1zLnNwbGljZShkaWFncmFtcy5pbmRleE9mKHJlbW92ZWREaWFncmFtKSwgMSk7XG5cbiAgcmV0dXJuIHJlbW92ZWREaWFncmFtO1xufTtcblxuXG5TdWJQcm9jZXNzUGxhbmVCZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ2JwbW5GYWN0b3J5JyxcbiAgJ2JwbW5qcycsXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SubProcessPlaneBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SubProcessStartEventBehavior.js":
/*!**************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SubProcessStartEventBehavior.js ***!
\**************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SubProcessStartEventBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/DiUtil.js */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('didi').Injector} Injector\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * Add start event replacing element with expanded sub process.\n *\n * @param {Injector} injector\n * @param {Modeling} modeling\n */\nfunction SubProcessStartEventBehavior(injector, modeling) {\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n\n this.postExecuted('shape.replace', function(event) {\n var oldShape = event.context.oldShape,\n newShape = event.context.newShape;\n\n if (\n !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(newShape, 'bpmn:SubProcess') ||\n ! ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(oldShape, 'bpmn:Task') || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(oldShape, 'bpmn:CallActivity')) ||\n !(0,_util_DiUtil_js__WEBPACK_IMPORTED_MODULE_2__.isExpanded)(newShape)\n ) {\n return;\n }\n\n var position = getStartEventPosition(newShape);\n\n modeling.createShape({ type: 'bpmn:StartEvent' }, position, newShape);\n });\n}\n\nSubProcessStartEventBehavior.$inject = [\n 'injector',\n 'modeling'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(SubProcessStartEventBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n// helpers //////////\n\nfunction getStartEventPosition(shape) {\n return {\n x: shape.x + shape.width / 6,\n y: shape.y + shape.height / 2\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9TdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXdDOztBQUVtQzs7QUFFOUI7O0FBRVE7O0FBRXJEO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEMsYUFBYSwrQkFBK0I7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2Ysa0JBQWtCLGlGQUFrQjs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTyxtREFBRTtBQUNULFNBQVMsbURBQUUsMkJBQTJCLG1EQUFFO0FBQ3hDLE9BQU8sMkRBQVU7QUFDakI7QUFDQTtBQUNBOztBQUVBOztBQUVBLDJCQUEyQix5QkFBeUI7QUFDcEQsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDREQUFRLCtCQUErQixpRkFBa0I7O0FBRXpEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1N1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IuanM/ZjQ1MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuaW1wb3J0IHsgaXNFeHBhbmRlZCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvRGlVdGlsLmpzJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWRpJykuSW5qZWN0b3J9IEluamVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKi9cblxuLyoqXG4gKiBBZGQgc3RhcnQgZXZlbnQgcmVwbGFjaW5nIGVsZW1lbnQgd2l0aCBleHBhbmRlZCBzdWIgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvcihpbmplY3RvciwgbW9kZWxpbmcpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5wb3N0RXhlY3V0ZWQoJ3NoYXBlLnJlcGxhY2UnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBvbGRTaGFwZSA9IGV2ZW50LmNvbnRleHQub2xkU2hhcGUsXG4gICAgICAgIG5ld1NoYXBlID0gZXZlbnQuY29udGV4dC5uZXdTaGFwZTtcblxuICAgIGlmIChcbiAgICAgICFpcyhuZXdTaGFwZSwgJ2JwbW46U3ViUHJvY2VzcycpIHx8XG4gICAgICAhIChpcyhvbGRTaGFwZSwgJ2JwbW46VGFzaycpIHx8IGlzKG9sZFNoYXBlLCAnYnBtbjpDYWxsQWN0aXZpdHknKSkgfHxcbiAgICAgICFpc0V4cGFuZGVkKG5ld1NoYXBlKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwb3NpdGlvbiA9IGdldFN0YXJ0RXZlbnRQb3NpdGlvbihuZXdTaGFwZSk7XG5cbiAgICBtb2RlbGluZy5jcmVhdGVTaGFwZSh7IHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnIH0sIHBvc2l0aW9uLCBuZXdTaGFwZSk7XG4gIH0pO1xufVxuXG5TdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdpbmplY3RvcicsXG4gICdtb2RlbGluZydcbl07XG5cbmluaGVyaXRzKFN1YlByb2Nlc3NTdGFydEV2ZW50QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRTdGFydEV2ZW50UG9zaXRpb24oc2hhcGUpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBzaGFwZS54ICsgc2hhcGUud2lkdGggLyA2LFxuICAgIHk6IHNoYXBlLnkgKyBzaGFwZS5oZWlnaHQgLyAyXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SubProcessStartEventBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/TextAnnotationBehavior.js":
/*!********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/TextAnnotationBehavior.js ***!
\********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TextAnnotationBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n */\n\nfunction TextAnnotationBehavior(eventBus) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n // On Append, TextAnnotations will be created on the Root.\n // The default for connections will create the connection in the parent of\n // the source element, so we overwrite the parent here.\n this.preExecute('connection.create', function(context) {\n const { target } = context;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(target, 'bpmn:TextAnnotation')) {\n return;\n }\n\n context.parent = target.parent;\n }, true);\n\n this.preExecute([ 'shape.create', 'shape.resize', 'elements.move' ], function(context) {\n const shapes = context.shapes || [ context.shape ];\n\n if (shapes.length === 1 && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shapes[0], 'bpmn:TextAnnotation')) {\n context.hints = context.hints || {};\n\n context.hints.autoResize = false;\n }\n }, true);\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(TextAnnotationBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nTextAnnotationBehavior.$inject = [\n 'eventBus'\n];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9UZXh0QW5ub3RhdGlvbkJlaGF2aW9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBd0M7O0FBRUs7O0FBRThCOztBQUUzRTtBQUNBLGFBQWEsZ0RBQWdEO0FBQzdEOztBQUVlOztBQUVmLEVBQUUsaUZBQWtCOztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksU0FBUzs7QUFFckIsU0FBUyxtREFBRTtBQUNYO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsK0JBQStCLG1EQUFFO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsNERBQVEseUJBQXlCLGlGQUFrQjs7QUFFbkQ7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVGV4dEFubm90YXRpb25CZWhhdmlvci5qcz81NjgwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRleHRBbm5vdGF0aW9uQmVoYXZpb3IoZXZlbnRCdXMpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLy8gT24gQXBwZW5kLCBUZXh0QW5ub3RhdGlvbnMgd2lsbCBiZSBjcmVhdGVkIG9uIHRoZSBSb290LlxuICAvLyBUaGUgZGVmYXVsdCBmb3IgY29ubmVjdGlvbnMgd2lsbCBjcmVhdGUgdGhlIGNvbm5lY3Rpb24gaW4gdGhlIHBhcmVudCBvZlxuICAvLyB0aGUgc291cmNlIGVsZW1lbnQsIHNvIHdlIG92ZXJ3cml0ZSB0aGUgcGFyZW50IGhlcmUuXG4gIHRoaXMucHJlRXhlY3V0ZSgnY29ubmVjdGlvbi5jcmVhdGUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGNvbnRleHQ7XG5cbiAgICBpZiAoIWlzKHRhcmdldCwgJ2JwbW46VGV4dEFubm90YXRpb24nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQucGFyZW50ID0gdGFyZ2V0LnBhcmVudDtcbiAgfSwgdHJ1ZSk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKFsgJ3NoYXBlLmNyZWF0ZScsICdzaGFwZS5yZXNpemUnLCAnZWxlbWVudHMubW92ZScgXSwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGNvbnN0IHNoYXBlcyA9IGNvbnRleHQuc2hhcGVzIHx8IFsgY29udGV4dC5zaGFwZSBdO1xuXG4gICAgaWYgKHNoYXBlcy5sZW5ndGggPT09IDEgJiYgaXMoc2hhcGVzWzBdLCAnYnBtbjpUZXh0QW5ub3RhdGlvbicpKSB7XG4gICAgICBjb250ZXh0LmhpbnRzID0gY29udGV4dC5oaW50cyB8fCB7fTtcblxuICAgICAgY29udGV4dC5oaW50cy5hdXRvUmVzaXplID0gZmFsc2U7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cblxuaW5oZXJpdHMoVGV4dEFubm90YXRpb25CZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuVGV4dEFubm90YXRpb25CZWhhdmlvci4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnXG5dOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/TextAnnotationBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js":
/*!*******************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js ***!
\*******************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ToggleCollapseConnectionBehaviour)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n *\n * @typedef {import('../../../model/Types').Element} Element\n * @typedef {import('../../../model/Types').Shape} Shape\n *\n * @typedef {import('diagram-js/lib/util/Types').DirectionTRBL} DirectionTRBL\n */\n\n/**\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction ToggleCollapseConnectionBehaviour(\n eventBus, modeling\n) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n this.postExecuted('shape.toggleCollapse', 1500, function(context) {\n\n // var shape = context.shape;\n var shape = context.shape;\n\n // only change connections when collapsing\n if ((0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_1__.isExpanded)(shape)) {\n return;\n }\n\n var allChildren = (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_2__.selfAndAllChildren)(shape);\n\n allChildren.forEach(function(child) {\n\n // Ensure that the connection array is not modified during iteration\n var incomingConnections = child.incoming.slice(),\n outgoingConnections = child.outgoing.slice();\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_3__.forEach)(incomingConnections, function(c) {\n handleConnection(c, true);\n });\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_3__.forEach)(outgoingConnections, function(c) {\n handleConnection(c, false);\n });\n });\n\n\n function handleConnection(c, incoming) {\n if (allChildren.indexOf(c.source) !== -1 && allChildren.indexOf(c.target) !== -1) {\n return;\n }\n\n if (incoming) {\n modeling.reconnectEnd(c, shape, (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_4__.getMid)(shape));\n } else {\n modeling.reconnectStart(c, shape, (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_4__.getMid)(shape));\n }\n\n }\n\n }, true);\n\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ToggleCollapseConnectionBehaviour, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nToggleCollapseConnectionBehaviour.$inject = [\n 'eventBus',\n 'modeling',\n];\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Ub2dnbGVDb2xsYXBzZUNvbm5lY3Rpb25CZWhhdmlvdXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDd0M7O0FBRW1DOztBQUl6RDs7QUFFd0M7QUFDUTs7QUFFaEI7O0FBRWxEO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwrQkFBK0I7QUFDNUM7QUFDQSxhQUFhLHdDQUF3QztBQUNyRCxhQUFhLHNDQUFzQztBQUNuRDtBQUNBLGFBQWEsbURBQW1EO0FBQ2hFOztBQUVBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQjtBQUNlO0FBQ2Y7QUFDQTs7QUFFQSxFQUFFLGlGQUFrQjs7QUFFcEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFFBQVEsd0RBQVU7QUFDbEI7QUFDQTs7QUFFQSxzQkFBc0IsZ0ZBQWtCOztBQUV4Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxpREFBTztBQUNiO0FBQ0EsT0FBTzs7QUFFUCxNQUFNLGlEQUFPO0FBQ2I7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0Msd0VBQU07QUFDOUMsUUFBUTtBQUNSLDBDQUEwQyx3RUFBTTtBQUNoRDs7QUFFQTs7QUFFQSxHQUFHOztBQUVIOztBQUVBLDREQUFRLG9DQUFvQyxpRkFBa0I7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVG9nZ2xlQ29sbGFwc2VDb25uZWN0aW9uQmVoYXZpb3VyLmpzPzk1NjkiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBmb3JFYWNoXG59IGZyb20gJ21pbi1kYXNoJztcblxuaW1wb3J0IHsgZ2V0TWlkIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvbGF5b3V0L0xheW91dFV0aWwnO1xuaW1wb3J0IHsgc2VsZkFuZEFsbENoaWxkcmVuIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vbW9kZWwvVHlwZXMnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi9tb2RlbC9UeXBlcycpLlNoYXBlfSBTaGFwZVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL3V0aWwvVHlwZXMnKS5EaXJlY3Rpb25UUkJMfSBEaXJlY3Rpb25UUkJMXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9nZ2xlQ29sbGFwc2VDb25uZWN0aW9uQmVoYXZpb3VyKFxuICAgIGV2ZW50QnVzLCBtb2RlbGluZ1xuKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS50b2dnbGVDb2xsYXBzZScsIDE1MDAsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIC8vIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuICAgIC8vIG9ubHkgY2hhbmdlIGNvbm5lY3Rpb25zIHdoZW4gY29sbGFwc2luZ1xuICAgIGlmIChpc0V4cGFuZGVkKHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhbGxDaGlsZHJlbiA9IHNlbGZBbmRBbGxDaGlsZHJlbihzaGFwZSk7XG5cbiAgICBhbGxDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBjb25uZWN0aW9uIGFycmF5IGlzIG5vdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uXG4gICAgICB2YXIgaW5jb21pbmdDb25uZWN0aW9ucyA9IGNoaWxkLmluY29taW5nLnNsaWNlKCksXG4gICAgICAgICAgb3V0Z29pbmdDb25uZWN0aW9ucyA9IGNoaWxkLm91dGdvaW5nLnNsaWNlKCk7XG5cbiAgICAgIGZvckVhY2goaW5jb21pbmdDb25uZWN0aW9ucywgZnVuY3Rpb24oYykge1xuICAgICAgICBoYW5kbGVDb25uZWN0aW9uKGMsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGZvckVhY2gob3V0Z29pbmdDb25uZWN0aW9ucywgZnVuY3Rpb24oYykge1xuICAgICAgICBoYW5kbGVDb25uZWN0aW9uKGMsIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBmdW5jdGlvbiBoYW5kbGVDb25uZWN0aW9uKGMsIGluY29taW5nKSB7XG4gICAgICBpZiAoYWxsQ2hpbGRyZW4uaW5kZXhPZihjLnNvdXJjZSkgIT09IC0xICYmIGFsbENoaWxkcmVuLmluZGV4T2YoYy50YXJnZXQpICE9PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmNvbWluZykge1xuICAgICAgICBtb2RlbGluZy5yZWNvbm5lY3RFbmQoYywgc2hhcGUsIGdldE1pZChzaGFwZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW9kZWxpbmcucmVjb25uZWN0U3RhcnQoYywgc2hhcGUsIGdldE1pZChzaGFwZSkpO1xuICAgICAgfVxuXG4gICAgfVxuXG4gIH0sIHRydWUpO1xuXG59XG5cbmluaGVyaXRzKFRvZ2dsZUNvbGxhcHNlQ29ubmVjdGlvbkJlaGF2aW91ciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuVG9nZ2xlQ29sbGFwc2VDb25uZWN0aW9uQmVoYXZpb3VyLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZycsXG5dO1xuXG5cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js":
/*!****************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js ***!
\****************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ToggleElementCollapseBehaviour)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_features_resize_ResizeUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/features/resize/ResizeUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/resize/ResizeUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../ElementFactory').default} ElementFactory\n * @typedef {import('../Modeling').default} Modeling\n */\n\nvar LOW_PRIORITY = 500;\n\n/**\n * @param {EventBus} eventBus\n * @param {ElementFactory} elementFactory\n * @param {Modeling} modeling\n */\nfunction ToggleElementCollapseBehaviour(\n eventBus, elementFactory, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n\n function hideEmptyLabels(children) {\n if (children.length) {\n children.forEach(function(child) {\n if (child.type === 'label' && !child.businessObject.name) {\n child.hidden = true;\n }\n });\n }\n }\n\n function expandedBounds(shape, defaultSize) {\n var children = shape.children,\n newBounds = defaultSize,\n visibleElements,\n visibleBBox;\n\n visibleElements = filterVisible(children).concat([ shape ]);\n\n visibleBBox = (0,diagram_js_lib_features_resize_ResizeUtil__WEBPACK_IMPORTED_MODULE_1__.computeChildrenBBox)(visibleElements);\n\n if (visibleBBox) {\n\n // center to visibleBBox with max(defaultSize, childrenBounds)\n newBounds.width = Math.max(visibleBBox.width, newBounds.width);\n newBounds.height = Math.max(visibleBBox.height, newBounds.height);\n\n newBounds.x = visibleBBox.x + (visibleBBox.width - newBounds.width) / 2;\n newBounds.y = visibleBBox.y + (visibleBBox.height - newBounds.height) / 2;\n } else {\n\n // center to collapsed shape with defaultSize\n newBounds.x = shape.x + (shape.width - newBounds.width) / 2;\n newBounds.y = shape.y + (shape.height - newBounds.height) / 2;\n }\n\n return newBounds;\n }\n\n function collapsedBounds(shape, defaultSize) {\n\n return {\n x: shape.x + (shape.width - defaultSize.width) / 2,\n y: shape.y + (shape.height - defaultSize.height) / 2,\n width: defaultSize.width,\n height: defaultSize.height\n };\n }\n\n this.executed([ 'shape.toggleCollapse' ], LOW_PRIORITY, function(e) {\n\n var context = e.context,\n shape = context.shape;\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:SubProcess')) {\n return;\n }\n\n if (!shape.collapsed) {\n\n // all children got made visible through djs, hide empty labels\n hideEmptyLabels(shape.children);\n\n // remove collapsed marker\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(shape).isExpanded = true;\n } else {\n\n // place collapsed marker\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(shape).isExpanded = false;\n }\n });\n\n this.reverted([ 'shape.toggleCollapse' ], LOW_PRIORITY, function(e) {\n\n var context = e.context;\n var shape = context.shape;\n\n\n // revert removing/placing collapsed marker\n if (!shape.collapsed) {\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(shape).isExpanded = true;\n\n } else {\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(shape).isExpanded = false;\n }\n });\n\n this.postExecuted([ 'shape.toggleCollapse' ], LOW_PRIORITY, function(e) {\n var shape = e.context.shape,\n defaultSize = elementFactory.getDefaultSize(shape),\n newBounds;\n\n if (shape.collapsed) {\n\n // resize to default size of collapsed shapes\n newBounds = collapsedBounds(shape, defaultSize);\n } else {\n\n // resize to bounds of max(visible children, defaultSize)\n newBounds = expandedBounds(shape, defaultSize);\n }\n\n modeling.resizeShape(shape, newBounds, null, {\n autoResize: shape.collapsed ? false : 'nwse'\n });\n });\n\n}\n\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(ToggleElementCollapseBehaviour, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nToggleElementCollapseBehaviour.$inject = [\n 'eventBus',\n 'elementFactory',\n 'modeling'\n];\n\n\n// helpers //////////////////////\n\nfunction filterVisible(elements) {\n return elements.filter(function(e) {\n return !e.hidden;\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9Ub2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBd0M7O0FBRW1DOztBQUsxQzs7QUFJa0I7O0FBRW5EO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSxxQ0FBcUM7QUFDbEQsYUFBYSwrQkFBK0I7QUFDNUM7O0FBRUE7O0FBRUE7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZjs7QUFFQSxFQUFFLGlGQUFrQjs7O0FBR3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsa0JBQWtCLDhGQUFtQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxTQUFTLG1EQUFFO0FBQ1g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxzREFBSztBQUNYLE1BQU07O0FBRU47QUFDQSxNQUFNLHNEQUFLO0FBQ1g7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxNQUFNLHNEQUFLOztBQUVYLE1BQU07QUFDTixNQUFNLHNEQUFLO0FBQ1g7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7OztBQUdBLDREQUFRLGlDQUFpQyxpRkFBa0I7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL1RvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ci5qcz9hZGVlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmhlcml0cyBmcm9tICdpbmhlcml0cy1icm93c2VyJztcblxuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIGdldERpLFxuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbmltcG9ydCB7XG4gIGNvbXB1dGVDaGlsZHJlbkJCb3hcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZVV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vRWxlbWVudEZhY3RvcnknKS5kZWZhdWx0fSBFbGVtZW50RmFjdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cbi8qKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7RWxlbWVudEZhY3Rvcnl9IGVsZW1lbnRGYWN0b3J5XG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUb2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIoXG4gICAgZXZlbnRCdXMsIGVsZW1lbnRGYWN0b3J5LCBtb2RlbGluZykge1xuXG4gIENvbW1hbmRJbnRlcmNlcHRvci5jYWxsKHRoaXMsIGV2ZW50QnVzKTtcblxuXG4gIGZ1bmN0aW9uIGhpZGVFbXB0eUxhYmVscyhjaGlsZHJlbikge1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdsYWJlbCcgJiYgIWNoaWxkLmJ1c2luZXNzT2JqZWN0Lm5hbWUpIHtcbiAgICAgICAgICBjaGlsZC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHBhbmRlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBzaGFwZS5jaGlsZHJlbixcbiAgICAgICAgbmV3Qm91bmRzID0gZGVmYXVsdFNpemUsXG4gICAgICAgIHZpc2libGVFbGVtZW50cyxcbiAgICAgICAgdmlzaWJsZUJCb3g7XG5cbiAgICB2aXNpYmxlRWxlbWVudHMgPSBmaWx0ZXJWaXNpYmxlKGNoaWxkcmVuKS5jb25jYXQoWyBzaGFwZSBdKTtcblxuICAgIHZpc2libGVCQm94ID0gY29tcHV0ZUNoaWxkcmVuQkJveCh2aXNpYmxlRWxlbWVudHMpO1xuXG4gICAgaWYgKHZpc2libGVCQm94KSB7XG5cbiAgICAgIC8vIGNlbnRlciB0byB2aXNpYmxlQkJveCB3aXRoIG1heChkZWZhdWx0U2l6ZSwgY2hpbGRyZW5Cb3VuZHMpXG4gICAgICBuZXdCb3VuZHMud2lkdGggPSBNYXRoLm1heCh2aXNpYmxlQkJveC53aWR0aCwgbmV3Qm91bmRzLndpZHRoKTtcbiAgICAgIG5ld0JvdW5kcy5oZWlnaHQgPSBNYXRoLm1heCh2aXNpYmxlQkJveC5oZWlnaHQsIG5ld0JvdW5kcy5oZWlnaHQpO1xuXG4gICAgICBuZXdCb3VuZHMueCA9IHZpc2libGVCQm94LnggKyAodmlzaWJsZUJCb3gud2lkdGggLSBuZXdCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgIG5ld0JvdW5kcy55ID0gdmlzaWJsZUJCb3gueSArICh2aXNpYmxlQkJveC5oZWlnaHQgLSBuZXdCb3VuZHMuaGVpZ2h0KSAvIDI7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gY2VudGVyIHRvIGNvbGxhcHNlZCBzaGFwZSB3aXRoIGRlZmF1bHRTaXplXG4gICAgICBuZXdCb3VuZHMueCA9IHNoYXBlLnggKyAoc2hhcGUud2lkdGggLSBuZXdCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgIG5ld0JvdW5kcy55ID0gc2hhcGUueSArIChzaGFwZS5oZWlnaHQgLSBuZXdCb3VuZHMuaGVpZ2h0KSAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0JvdW5kcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbGxhcHNlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpIHtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBzaGFwZS54ICsgKHNoYXBlLndpZHRoIC0gZGVmYXVsdFNpemUud2lkdGgpIC8gMixcbiAgICAgIHk6IHNoYXBlLnkgKyAoc2hhcGUuaGVpZ2h0IC0gZGVmYXVsdFNpemUuaGVpZ2h0KSAvIDIsXG4gICAgICB3aWR0aDogZGVmYXVsdFNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IGRlZmF1bHRTaXplLmhlaWdodFxuICAgIH07XG4gIH1cblxuICB0aGlzLmV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcblxuICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICBpZiAoIWlzKHNoYXBlLCAnYnBtbjpTdWJQcm9jZXNzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXNoYXBlLmNvbGxhcHNlZCkge1xuXG4gICAgICAvLyBhbGwgY2hpbGRyZW4gZ290IG1hZGUgdmlzaWJsZSB0aHJvdWdoIGRqcywgaGlkZSBlbXB0eSBsYWJlbHNcbiAgICAgIGhpZGVFbXB0eUxhYmVscyhzaGFwZS5jaGlsZHJlbik7XG5cbiAgICAgIC8vIHJlbW92ZSBjb2xsYXBzZWQgbWFya2VyXG4gICAgICBnZXREaShzaGFwZSkuaXNFeHBhbmRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gcGxhY2UgY29sbGFwc2VkIG1hcmtlclxuICAgICAgZ2V0RGkoc2hhcGUpLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucmV2ZXJ0ZWQoWyAnc2hhcGUudG9nZ2xlQ29sbGFwc2UnIF0sIExPV19QUklPUklUWSwgZnVuY3Rpb24oZSkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBlLmNvbnRleHQ7XG4gICAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZTtcblxuXG4gICAgLy8gcmV2ZXJ0IHJlbW92aW5nL3BsYWNpbmcgY29sbGFwc2VkIG1hcmtlclxuICAgIGlmICghc2hhcGUuY29sbGFwc2VkKSB7XG4gICAgICBnZXREaShzaGFwZSkuaXNFeHBhbmRlZCA9IHRydWU7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0RGkoc2hhcGUpLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKFsgJ3NoYXBlLnRvZ2dsZUNvbGxhcHNlJyBdLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgc2hhcGUgPSBlLmNvbnRleHQuc2hhcGUsXG4gICAgICAgIGRlZmF1bHRTaXplID0gZWxlbWVudEZhY3RvcnkuZ2V0RGVmYXVsdFNpemUoc2hhcGUpLFxuICAgICAgICBuZXdCb3VuZHM7XG5cbiAgICBpZiAoc2hhcGUuY29sbGFwc2VkKSB7XG5cbiAgICAgIC8vIHJlc2l6ZSB0byBkZWZhdWx0IHNpemUgb2YgY29sbGFwc2VkIHNoYXBlc1xuICAgICAgbmV3Qm91bmRzID0gY29sbGFwc2VkQm91bmRzKHNoYXBlLCBkZWZhdWx0U2l6ZSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gcmVzaXplIHRvIGJvdW5kcyBvZiBtYXgodmlzaWJsZSBjaGlsZHJlbiwgZGVmYXVsdFNpemUpXG4gICAgICBuZXdCb3VuZHMgPSBleHBhbmRlZEJvdW5kcyhzaGFwZSwgZGVmYXVsdFNpemUpO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKHNoYXBlLCBuZXdCb3VuZHMsIG51bGwsIHtcbiAgICAgIGF1dG9SZXNpemU6IHNoYXBlLmNvbGxhcHNlZCA/IGZhbHNlIDogJ253c2UnXG4gICAgfSk7XG4gIH0pO1xuXG59XG5cblxuaW5oZXJpdHMoVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5Ub2dnbGVFbGVtZW50Q29sbGFwc2VCZWhhdmlvdXIuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZmlsdGVyVmlzaWJsZShlbGVtZW50cykge1xuICByZXR1cm4gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gIWUuaGlkZGVuO1xuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UnclaimIdBehavior.js":
/*!***************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UnclaimIdBehavior.js ***!
\***************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UnclaimIdBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/LabelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('didi').Injector} Injector\n * @typedef {import('../Modeling').default} Modeling\n *\n * @typedef {import('../../../model/Types').Moddle} Moddle\n */\n\n/**\n * Unclaims model IDs on element deletion.\n *\n * @param {Canvas} canvas\n * @param {Injector} injector\n * @param {Moddle} moddle\n * @param {Modeling} modeling\n */\nfunction UnclaimIdBehavior(canvas, injector, moddle, modeling) {\n injector.invoke(diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"], this);\n\n this.preExecute('shape.delete', function(event) {\n var context = event.context,\n shape = context.shape,\n shapeBo = shape.businessObject;\n\n if ((0,_util_LabelUtil__WEBPACK_IMPORTED_MODULE_1__.isLabel)(shape)) {\n return;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(shape, 'bpmn:Participant') && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_3__.isExpanded)(shape)) {\n moddle.ids.unclaim(shapeBo.processRef.id);\n }\n\n modeling.unclaimId(shapeBo.id, shapeBo);\n });\n\n\n this.preExecute('connection.delete', function(event) {\n var context = event.context,\n connection = context.connection,\n connectionBo = connection.businessObject;\n\n modeling.unclaimId(connectionBo.id, connectionBo);\n });\n\n this.preExecute('canvas.updateRoot', function() {\n var rootElement = canvas.getRootElement(),\n rootElementBo = rootElement.businessObject;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(rootElement, 'bpmn:Collaboration')) {\n moddle.ids.unclaim(rootElementBo.id);\n }\n });\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(UnclaimIdBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nUnclaimIdBehavior.$inject = [ 'canvas', 'injector', 'moddle', 'modeling' ];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9VbmNsYWltSWRCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBd0M7O0FBRW1DOztBQUU5QjtBQUNLO0FBQ0E7O0FBRWxEO0FBQ0EsYUFBYSw4Q0FBOEM7QUFDM0QsYUFBYSx5QkFBeUI7QUFDdEMsYUFBYSwrQkFBK0I7QUFDNUM7QUFDQSxhQUFhLHVDQUF1QztBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFVBQVU7QUFDckI7QUFDZTtBQUNmLGtCQUFrQixpRkFBa0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsd0RBQU87QUFDZjtBQUNBOztBQUVBLFFBQVEsbURBQUUsK0JBQStCLHdEQUFVO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBLFFBQVEsbURBQUU7QUFDVjtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLDREQUFRLG9CQUFvQixpRkFBa0I7O0FBRTlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVW5jbGFpbUlkQmVoYXZpb3IuanM/ZmYxNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCB7IGlzRXhwYW5kZWQgfSBmcm9tICcuLi8uLi8uLi91dGlsL0RpVXRpbCc7XG5pbXBvcnQgeyBpc0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvQ2FudmFzJykuZGVmYXVsdH0gQ2FudmFzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWRpJykuSW5qZWN0b3J9IEluamVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGV9IE1vZGRsZVxuICovXG5cbi8qKlxuICogVW5jbGFpbXMgbW9kZWwgSURzIG9uIGVsZW1lbnQgZGVsZXRpb24uXG4gKlxuICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RkbGVcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVuY2xhaW1JZEJlaGF2aW9yKGNhbnZhcywgaW5qZWN0b3IsIG1vZGRsZSwgbW9kZWxpbmcpIHtcbiAgaW5qZWN0b3IuaW52b2tlKENvbW1hbmRJbnRlcmNlcHRvciwgdGhpcyk7XG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5kZWxldGUnLCBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBjb250ZXh0ID0gZXZlbnQuY29udGV4dCxcbiAgICAgICAgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgICBzaGFwZUJvID0gc2hhcGUuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICBpZiAoaXNMYWJlbChzaGFwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXMoc2hhcGUsICdicG1uOlBhcnRpY2lwYW50JykgJiYgaXNFeHBhbmRlZChzaGFwZSkpIHtcbiAgICAgIG1vZGRsZS5pZHMudW5jbGFpbShzaGFwZUJvLnByb2Nlc3NSZWYuaWQpO1xuICAgIH1cblxuICAgIG1vZGVsaW5nLnVuY2xhaW1JZChzaGFwZUJvLmlkLCBzaGFwZUJvKTtcbiAgfSk7XG5cblxuICB0aGlzLnByZUV4ZWN1dGUoJ2Nvbm5lY3Rpb24uZGVsZXRlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgY29udGV4dCA9IGV2ZW50LmNvbnRleHQsXG4gICAgICAgIGNvbm5lY3Rpb24gPSBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICAgIGNvbm5lY3Rpb25CbyA9IGNvbm5lY3Rpb24uYnVzaW5lc3NPYmplY3Q7XG5cbiAgICBtb2RlbGluZy51bmNsYWltSWQoY29ubmVjdGlvbkJvLmlkLCBjb25uZWN0aW9uQm8pO1xuICB9KTtcblxuICB0aGlzLnByZUV4ZWN1dGUoJ2NhbnZhcy51cGRhdGVSb290JywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJvb3RFbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgICAgIHJvb3RFbGVtZW50Qm8gPSByb290RWxlbWVudC5idXNpbmVzc09iamVjdDtcblxuICAgIGlmIChpcyhyb290RWxlbWVudCwgJ2JwbW46Q29sbGFib3JhdGlvbicpKSB7XG4gICAgICBtb2RkbGUuaWRzLnVuY2xhaW0ocm9vdEVsZW1lbnRCby5pZCk7XG4gICAgfVxuICB9KTtcbn1cblxuaW5oZXJpdHMoVW5jbGFpbUlkQmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cblVuY2xhaW1JZEJlaGF2aW9yLiRpbmplY3QgPSBbICdjYW52YXMnLCAnaW5qZWN0b3InLCAnbW9kZGxlJywgJ21vZGVsaW5nJyBdOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UnclaimIdBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js":
/*!**********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js ***!
\**********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DeleteSequenceFlowBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * A behavior that unsets the Default property of sequence flow source on\n * element delete, if the removed element is the Gateway or Task's default flow.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n */\nfunction DeleteSequenceFlowBehavior(eventBus, modeling) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n\n this.preExecute('connection.delete', function(event) {\n var context = event.context,\n connection = context.connection,\n source = connection.source;\n\n if (isDefaultFlow(connection, source)) {\n modeling.updateProperties(source, {\n 'default': null\n });\n }\n });\n}\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(DeleteSequenceFlowBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\nDeleteSequenceFlowBehavior.$inject = [\n 'eventBus',\n 'modeling'\n];\n\n\n// helpers //////////////////////\n\nfunction isDefaultFlow(connection, source) {\n\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(connection, 'bpmn:SequenceFlow')) {\n return false;\n }\n\n var sourceBo = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(source),\n sequenceFlow = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(connection);\n\n return sourceBo.get('default') === sequenceFlow;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9VbnNldERlZmF1bHRGbG93QmVoYXZpb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF3Qzs7QUFFbUM7O0FBSzFDOztBQUVqQztBQUNBLGFBQWEsZ0RBQWdEO0FBQzdELGFBQWEsK0JBQStCO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQjtBQUNlOztBQUVmLEVBQUUsaUZBQWtCOzs7QUFHcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIOztBQUVBLDREQUFRLDZCQUE2QixpRkFBa0I7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQSxPQUFPLG1EQUFFO0FBQ1Q7QUFDQTs7QUFFQSxpQkFBaUIsa0VBQWlCO0FBQ2xDLHFCQUFxQixrRUFBaUI7O0FBRXRDO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9VbnNldERlZmF1bHRGbG93QmVoYXZpb3IuanM/ZTI3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbi8qKlxuICogQSBiZWhhdmlvciB0aGF0IHVuc2V0cyB0aGUgRGVmYXVsdCBwcm9wZXJ0eSBvZiBzZXF1ZW5jZSBmbG93IHNvdXJjZSBvblxuICogZWxlbWVudCBkZWxldGUsIGlmIHRoZSByZW1vdmVkIGVsZW1lbnQgaXMgdGhlIEdhdGV3YXkgb3IgVGFzaydzIGRlZmF1bHQgZmxvdy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVsZXRlU2VxdWVuY2VGbG93QmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nKSB7XG5cbiAgQ29tbWFuZEludGVyY2VwdG9yLmNhbGwodGhpcywgZXZlbnRCdXMpO1xuXG5cbiAgdGhpcy5wcmVFeGVjdXRlKCdjb25uZWN0aW9uLmRlbGV0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBjb25uZWN0aW9uID0gY29udGV4dC5jb25uZWN0aW9uLFxuICAgICAgICBzb3VyY2UgPSBjb25uZWN0aW9uLnNvdXJjZTtcblxuICAgIGlmIChpc0RlZmF1bHRGbG93KGNvbm5lY3Rpb24sIHNvdXJjZSkpIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoc291cmNlLCB7XG4gICAgICAgICdkZWZhdWx0JzogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuaW5oZXJpdHMoRGVsZXRlU2VxdWVuY2VGbG93QmVoYXZpb3IsIENvbW1hbmRJbnRlcmNlcHRvcik7XG5cbkRlbGV0ZVNlcXVlbmNlRmxvd0JlaGF2aW9yLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cycsXG4gICdtb2RlbGluZydcbl07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzRGVmYXVsdEZsb3coY29ubmVjdGlvbiwgc291cmNlKSB7XG5cbiAgaWYgKCFpcyhjb25uZWN0aW9uLCAnYnBtbjpTZXF1ZW5jZUZsb3cnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBzb3VyY2VCbyA9IGdldEJ1c2luZXNzT2JqZWN0KHNvdXJjZSksXG4gICAgICBzZXF1ZW5jZUZsb3cgPSBnZXRCdXNpbmVzc09iamVjdChjb25uZWN0aW9uKTtcblxuICByZXR1cm4gc291cmNlQm8uZ2V0KCdkZWZhdWx0JykgPT09IHNlcXVlbmNlRmxvdztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js":
/*!************************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js ***!
\************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdateFlowNodeRefsBehavior)\n/* harmony export */ });\n/* harmony import */ var inherits_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! inherits-browser */ \"./node_modules/inherits-browser/dist/index.es.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n */\n\nvar LOW_PRIORITY = 500,\n HIGH_PRIORITY = 5000;\n\n\n/**\n * BPMN specific delete lane behavior.\n *\n * @param {EventBus} eventBus\n * @param {Modeling} modeling\n * @param {Translate} translate\n */\nfunction UpdateFlowNodeRefsBehavior(eventBus, modeling, translate) {\n\n diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, eventBus);\n\n /**\n * Update Lane#flowNodeRefs and FlowNode#lanes with every flow node\n * move/resize and lane move/resize. Groups elements to recompute containments\n * as efficient as possible.\n */\n\n // the update context\n var context;\n\n\n function initContext() {\n context = context || new UpdateContext();\n context.enter();\n\n return context;\n }\n\n function getContext() {\n if (!context) {\n throw new Error(translate('out of bounds release'));\n }\n\n return context;\n }\n\n function releaseContext() {\n\n if (!context) {\n throw new Error(translate('out of bounds release'));\n }\n\n var triggerUpdate = context.leave();\n\n if (triggerUpdate) {\n modeling.updateLaneRefs(context.flowNodes, context.lanes);\n\n context = null;\n }\n\n return triggerUpdate;\n }\n\n\n var laneRefUpdateEvents = [\n 'spaceTool',\n 'lane.add',\n 'lane.resize',\n 'lane.split',\n 'elements.create',\n 'elements.delete',\n 'elements.move',\n 'shape.create',\n 'shape.delete',\n 'shape.move',\n 'shape.resize'\n ];\n\n\n // listen to a lot of stuff to group lane updates\n\n this.preExecute(laneRefUpdateEvents, HIGH_PRIORITY, function(event) {\n initContext();\n });\n\n this.postExecuted(laneRefUpdateEvents, LOW_PRIORITY, function(event) {\n releaseContext();\n });\n\n\n // Mark flow nodes + lanes that need an update\n\n this.preExecute([\n 'shape.create',\n 'shape.move',\n 'shape.delete',\n 'shape.resize'\n ], function(event) {\n\n var context = event.context,\n shape = context.shape;\n\n var updateContext = getContext();\n\n // no need to update labels\n if (shape.labelTarget) {\n return;\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:Lane')) {\n updateContext.addLane(shape);\n }\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(shape, 'bpmn:FlowNode')) {\n updateContext.addFlowNode(shape);\n }\n });\n}\n\nUpdateFlowNodeRefsBehavior.$inject = [\n 'eventBus',\n 'modeling' ,\n 'translate'\n];\n\n(0,inherits_browser__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(UpdateFlowNodeRefsBehavior, diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n\nfunction UpdateContext() {\n\n this.flowNodes = [];\n this.lanes = [];\n\n this.counter = 0;\n\n this.addLane = function(lane) {\n this.lanes.push(lane);\n };\n\n this.addFlowNode = function(flowNode) {\n this.flowNodes.push(flowNode);\n };\n\n this.enter = function() {\n this.counter++;\n };\n\n this.leave = function() {\n this.counter--;\n\n return !this.counter;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9VcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdDOztBQUVtQzs7QUFJMUM7O0FBRWpDO0FBQ0EsYUFBYSxnREFBZ0Q7QUFDN0QsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSwyREFBMkQ7QUFDeEU7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQixXQUFXLFdBQVc7QUFDdEI7QUFDZTs7QUFFZixFQUFFLGlGQUFrQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQTs7QUFFQSxRQUFRLG1EQUFFO0FBQ1Y7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDREQUFRLDZCQUE2QixpRkFBa0I7OztBQUd2RDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IuanM/N2FkNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5oZXJpdHMgZnJvbSAnaW5oZXJpdHMtYnJvd3Nlcic7XG5cbmltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuXG5pbXBvcnQge1xuICBpc1xufSBmcm9tICcuLi8uLi8uLi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FdmVudEJ1cycpLmRlZmF1bHR9IEV2ZW50QnVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZS90cmFuc2xhdGUnKS5kZWZhdWx0fSBUcmFuc2xhdGVcbiAqL1xuXG52YXIgTE9XX1BSSU9SSVRZID0gNTAwLFxuICAgIEhJR0hfUFJJT1JJVFkgPSA1MDAwO1xuXG5cbi8qKlxuICogQlBNTiBzcGVjaWZpYyBkZWxldGUgbGFuZSBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICogQHBhcmFtIHtNb2RlbGluZ30gbW9kZWxpbmdcbiAqIEBwYXJhbSB7VHJhbnNsYXRlfSB0cmFuc2xhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IoZXZlbnRCdXMsIG1vZGVsaW5nLCB0cmFuc2xhdGUpIHtcblxuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBMYW5lI2Zsb3dOb2RlUmVmcyBhbmQgRmxvd05vZGUjbGFuZXMgd2l0aCBldmVyeSBmbG93IG5vZGVcbiAgICogbW92ZS9yZXNpemUgYW5kIGxhbmUgbW92ZS9yZXNpemUuIEdyb3VwcyBlbGVtZW50cyB0byByZWNvbXB1dGUgY29udGFpbm1lbnRzXG4gICAqIGFzIGVmZmljaWVudCBhcyBwb3NzaWJsZS5cbiAgICovXG5cbiAgLy8gdGhlIHVwZGF0ZSBjb250ZXh0XG4gIHZhciBjb250ZXh0O1xuXG5cbiAgZnVuY3Rpb24gaW5pdENvbnRleHQoKSB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgfHwgbmV3IFVwZGF0ZUNvbnRleHQoKTtcbiAgICBjb250ZXh0LmVudGVyKCk7XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdvdXQgb2YgYm91bmRzIHJlbGVhc2UnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWxlYXNlQ29udGV4dCgpIHtcblxuICAgIGlmICghY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnb3V0IG9mIGJvdW5kcyByZWxlYXNlJykpO1xuICAgIH1cblxuICAgIHZhciB0cmlnZ2VyVXBkYXRlID0gY29udGV4dC5sZWF2ZSgpO1xuXG4gICAgaWYgKHRyaWdnZXJVcGRhdGUpIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZUxhbmVSZWZzKGNvbnRleHQuZmxvd05vZGVzLCBjb250ZXh0LmxhbmVzKTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyaWdnZXJVcGRhdGU7XG4gIH1cblxuXG4gIHZhciBsYW5lUmVmVXBkYXRlRXZlbnRzID0gW1xuICAgICdzcGFjZVRvb2wnLFxuICAgICdsYW5lLmFkZCcsXG4gICAgJ2xhbmUucmVzaXplJyxcbiAgICAnbGFuZS5zcGxpdCcsXG4gICAgJ2VsZW1lbnRzLmNyZWF0ZScsXG4gICAgJ2VsZW1lbnRzLmRlbGV0ZScsXG4gICAgJ2VsZW1lbnRzLm1vdmUnLFxuICAgICdzaGFwZS5jcmVhdGUnLFxuICAgICdzaGFwZS5kZWxldGUnLFxuICAgICdzaGFwZS5tb3ZlJyxcbiAgICAnc2hhcGUucmVzaXplJ1xuICBdO1xuXG5cbiAgLy8gbGlzdGVuIHRvIGEgbG90IG9mIHN0dWZmIHRvIGdyb3VwIGxhbmUgdXBkYXRlc1xuXG4gIHRoaXMucHJlRXhlY3V0ZShsYW5lUmVmVXBkYXRlRXZlbnRzLCBISUdIX1BSSU9SSVRZLCBmdW5jdGlvbihldmVudCkge1xuICAgIGluaXRDb250ZXh0KCk7XG4gIH0pO1xuXG4gIHRoaXMucG9zdEV4ZWN1dGVkKGxhbmVSZWZVcGRhdGVFdmVudHMsIExPV19QUklPUklUWSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZWxlYXNlQ29udGV4dCgpO1xuICB9KTtcblxuXG4gIC8vIE1hcmsgZmxvdyBub2RlcyArIGxhbmVzIHRoYXQgbmVlZCBhbiB1cGRhdGVcblxuICB0aGlzLnByZUV4ZWN1dGUoW1xuICAgICdzaGFwZS5jcmVhdGUnLFxuICAgICdzaGFwZS5tb3ZlJyxcbiAgICAnc2hhcGUuZGVsZXRlJyxcbiAgICAnc2hhcGUucmVzaXplJ1xuICBdLCBmdW5jdGlvbihldmVudCkge1xuXG4gICAgdmFyIGNvbnRleHQgPSBldmVudC5jb250ZXh0LFxuICAgICAgICBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG5cbiAgICB2YXIgdXBkYXRlQ29udGV4dCA9IGdldENvbnRleHQoKTtcblxuICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIGxhYmVsc1xuICAgIGlmIChzaGFwZS5sYWJlbFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46TGFuZScpKSB7XG4gICAgICB1cGRhdGVDb250ZXh0LmFkZExhbmUoc2hhcGUpO1xuICAgIH1cblxuICAgIGlmIChpcyhzaGFwZSwgJ2JwbW46Rmxvd05vZGUnKSkge1xuICAgICAgdXBkYXRlQ29udGV4dC5hZGRGbG93Tm9kZShzaGFwZSk7XG4gICAgfVxuICB9KTtcbn1cblxuVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3IuJGluamVjdCA9IFtcbiAgJ2V2ZW50QnVzJyxcbiAgJ21vZGVsaW5nJyAsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5pbmhlcml0cyhVcGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvciwgQ29tbWFuZEludGVyY2VwdG9yKTtcblxuXG5mdW5jdGlvbiBVcGRhdGVDb250ZXh0KCkge1xuXG4gIHRoaXMuZmxvd05vZGVzID0gW107XG4gIHRoaXMubGFuZXMgPSBbXTtcblxuICB0aGlzLmNvdW50ZXIgPSAwO1xuXG4gIHRoaXMuYWRkTGFuZSA9IGZ1bmN0aW9uKGxhbmUpIHtcbiAgICB0aGlzLmxhbmVzLnB1c2gobGFuZSk7XG4gIH07XG5cbiAgdGhpcy5hZGRGbG93Tm9kZSA9IGZ1bmN0aW9uKGZsb3dOb2RlKSB7XG4gICAgdGhpcy5mbG93Tm9kZXMucHVzaChmbG93Tm9kZSk7XG4gIH07XG5cbiAgdGhpcy5lbnRlciA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY291bnRlcisrO1xuICB9O1xuXG4gIHRoaXMubGVhdmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNvdW50ZXItLTtcblxuICAgIHJldHVybiAhdGhpcy5jb3VudGVyO1xuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/index.js":
/*!***************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/index.js ***!
\***************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _AdaptiveLabelPositioningBehavior__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AdaptiveLabelPositioningBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js\");\n/* harmony import */ var _AppendBehavior__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AppendBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AppendBehavior.js\");\n/* harmony import */ var _AssociationBehavior__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AssociationBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AssociationBehavior.js\");\n/* harmony import */ var _AttachEventBehavior__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AttachEventBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/AttachEventBehavior.js\");\n/* harmony import */ var _BoundaryEventBehavior__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./BoundaryEventBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/BoundaryEventBehavior.js\");\n/* harmony import */ var _CompensateBoundaryEventBehavior__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./CompensateBoundaryEventBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js\");\n/* harmony import */ var _CreateBehavior__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./CreateBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateBehavior.js\");\n/* harmony import */ var _CreateDataObjectBehavior__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./CreateDataObjectBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateDataObjectBehavior.js\");\n/* harmony import */ var _CreateParticipantBehavior__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./CreateParticipantBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/CreateParticipantBehavior.js\");\n/* harmony import */ var _DataInputAssociationBehavior__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./DataInputAssociationBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DataInputAssociationBehavior.js\");\n/* harmony import */ var _DataStoreBehavior__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./DataStoreBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DataStoreBehavior.js\");\n/* harmony import */ var _DeleteLaneBehavior__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./DeleteLaneBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DeleteLaneBehavior.js\");\n/* harmony import */ var _DetachEventBehavior__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./DetachEventBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DetachEventBehavior.js\");\n/* harmony import */ var _DropOnFlowBehavior__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./DropOnFlowBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/DropOnFlowBehavior.js\");\n/* harmony import */ var _EventBasedGatewayBehavior__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./EventBasedGatewayBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/EventBasedGatewayBehavior.js\");\n/* harmony import */ var _FixHoverBehavior__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./FixHoverBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/FixHoverBehavior.js\");\n/* harmony import */ var _GroupBehavior__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./GroupBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/GroupBehavior.js\");\n/* harmony import */ var _ImportDockingFix__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ImportDockingFix */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ImportDockingFix.js\");\n/* harmony import */ var _IsHorizontalFix__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./IsHorizontalFix */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/IsHorizontalFix.js\");\n/* harmony import */ var _LabelBehavior__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./LabelBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/LabelBehavior.js\");\n/* harmony import */ var _LayoutConnectionBehavior__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./LayoutConnectionBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/LayoutConnectionBehavior.js\");\n/* harmony import */ var _MessageFlowBehavior__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./MessageFlowBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/MessageFlowBehavior.js\");\n/* harmony import */ var _NonInterruptingBehavior__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./NonInterruptingBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/NonInterruptingBehavior.js\");\n/* harmony import */ var _RemoveEmbeddedLabelBoundsBehavior__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./RemoveEmbeddedLabelBoundsBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js\");\n/* harmony import */ var _RemoveElementBehavior__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./RemoveElementBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveElementBehavior.js\");\n/* harmony import */ var _RemoveParticipantBehavior__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./RemoveParticipantBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RemoveParticipantBehavior.js\");\n/* harmony import */ var _ReplaceConnectionBehavior__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./ReplaceConnectionBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ReplaceConnectionBehavior.js\");\n/* harmony import */ var _ReplaceElementBehaviour__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./ReplaceElementBehaviour */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ReplaceElementBehaviour.js\");\n/* harmony import */ var _ResizeBehavior__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./ResizeBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeBehavior.js\");\n/* harmony import */ var _ResizeLaneBehavior__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./ResizeLaneBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ResizeLaneBehavior.js\");\n/* harmony import */ var _RootElementReferenceBehavior__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./RootElementReferenceBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/RootElementReferenceBehavior.js\");\n/* harmony import */ var _SpaceToolBehavior__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./SpaceToolBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SpaceToolBehavior.js\");\n/* harmony import */ var _SubProcessPlaneBehavior__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./SubProcessPlaneBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SubProcessPlaneBehavior.js\");\n/* harmony import */ var _SubProcessStartEventBehavior__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./SubProcessStartEventBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/SubProcessStartEventBehavior.js\");\n/* harmony import */ var _TextAnnotationBehavior__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./TextAnnotationBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/TextAnnotationBehavior.js\");\n/* harmony import */ var _ToggleCollapseConnectionBehaviour__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./ToggleCollapseConnectionBehaviour */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js\");\n/* harmony import */ var _ToggleElementCollapseBehaviour__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./ToggleElementCollapseBehaviour */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js\");\n/* harmony import */ var _UnclaimIdBehavior__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./UnclaimIdBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UnclaimIdBehavior.js\");\n/* harmony import */ var _UnsetDefaultFlowBehavior__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./UnsetDefaultFlowBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js\");\n/* harmony import */ var _UpdateFlowNodeRefsBehavior__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./UpdateFlowNodeRefsBehavior */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js\");\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * @type { import('didi').ModuleDeclaration }\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __init__: [\n 'adaptiveLabelPositioningBehavior',\n 'appendBehavior',\n 'associationBehavior',\n 'attachEventBehavior',\n 'boundaryEventBehavior',\n 'compensateBoundaryEventBehaviour',\n 'createBehavior',\n 'createDataObjectBehavior',\n 'createParticipantBehavior',\n 'dataInputAssociationBehavior',\n 'dataStoreBehavior',\n 'deleteLaneBehavior',\n 'detachEventBehavior',\n 'dropOnFlowBehavior',\n 'eventBasedGatewayBehavior',\n 'fixHoverBehavior',\n 'groupBehavior',\n 'importDockingFix',\n 'isHorizontalFix',\n 'labelBehavior',\n 'layoutConnectionBehavior',\n 'messageFlowBehavior',\n 'nonInterruptingBehavior',\n 'removeElementBehavior',\n 'removeEmbeddedLabelBoundsBehavior',\n 'removeParticipantBehavior',\n 'replaceConnectionBehavior',\n 'replaceElementBehaviour',\n 'resizeBehavior',\n 'resizeLaneBehavior',\n 'rootElementReferenceBehavior',\n 'spaceToolBehavior',\n 'subProcessPlaneBehavior',\n 'subProcessStartEventBehavior',\n 'textAnnotationBehavior',\n 'toggleCollapseConnectionBehaviour',\n 'toggleElementCollapseBehaviour',\n 'unclaimIdBehavior',\n 'updateFlowNodeRefsBehavior',\n 'unsetDefaultFlowBehavior'\n ],\n adaptiveLabelPositioningBehavior: [ 'type', _AdaptiveLabelPositioningBehavior__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ],\n appendBehavior: [ 'type', _AppendBehavior__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ],\n associationBehavior: [ 'type', _AssociationBehavior__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ],\n attachEventBehavior: [ 'type', _AttachEventBehavior__WEBPACK_IMPORTED_MODULE_3__[\"default\"] ],\n boundaryEventBehavior: [ 'type', _BoundaryEventBehavior__WEBPACK_IMPORTED_MODULE_4__[\"default\"] ],\n compensateBoundaryEventBehaviour: [ 'type', _CompensateBoundaryEventBehavior__WEBPACK_IMPORTED_MODULE_5__[\"default\"] ],\n createBehavior: [ 'type', _CreateBehavior__WEBPACK_IMPORTED_MODULE_6__[\"default\"] ],\n createDataObjectBehavior: [ 'type', _CreateDataObjectBehavior__WEBPACK_IMPORTED_MODULE_7__[\"default\"] ],\n createParticipantBehavior: [ 'type', _CreateParticipantBehavior__WEBPACK_IMPORTED_MODULE_8__[\"default\"] ],\n dataInputAssociationBehavior: [ 'type', _DataInputAssociationBehavior__WEBPACK_IMPORTED_MODULE_9__[\"default\"] ],\n dataStoreBehavior: [ 'type', _DataStoreBehavior__WEBPACK_IMPORTED_MODULE_10__[\"default\"] ],\n deleteLaneBehavior: [ 'type', _DeleteLaneBehavior__WEBPACK_IMPORTED_MODULE_11__[\"default\"] ],\n detachEventBehavior: [ 'type', _DetachEventBehavior__WEBPACK_IMPORTED_MODULE_12__[\"default\"] ],\n dropOnFlowBehavior: [ 'type', _DropOnFlowBehavior__WEBPACK_IMPORTED_MODULE_13__[\"default\"] ],\n eventBasedGatewayBehavior: [ 'type', _EventBasedGatewayBehavior__WEBPACK_IMPORTED_MODULE_14__[\"default\"] ],\n fixHoverBehavior: [ 'type', _FixHoverBehavior__WEBPACK_IMPORTED_MODULE_15__[\"default\"] ],\n groupBehavior: [ 'type', _GroupBehavior__WEBPACK_IMPORTED_MODULE_16__[\"default\"] ],\n importDockingFix: [ 'type', _ImportDockingFix__WEBPACK_IMPORTED_MODULE_17__[\"default\"] ],\n isHorizontalFix: [ 'type', _IsHorizontalFix__WEBPACK_IMPORTED_MODULE_18__[\"default\"] ],\n labelBehavior: [ 'type', _LabelBehavior__WEBPACK_IMPORTED_MODULE_19__[\"default\"] ],\n layoutConnectionBehavior: [ 'type', _LayoutConnectionBehavior__WEBPACK_IMPORTED_MODULE_20__[\"default\"] ],\n messageFlowBehavior: [ 'type', _MessageFlowBehavior__WEBPACK_IMPORTED_MODULE_21__[\"default\"] ],\n nonInterruptingBehavior: [ 'type', _NonInterruptingBehavior__WEBPACK_IMPORTED_MODULE_22__[\"default\"] ],\n removeElementBehavior: [ 'type', _RemoveElementBehavior__WEBPACK_IMPORTED_MODULE_23__[\"default\"] ],\n removeEmbeddedLabelBoundsBehavior: [ 'type', _RemoveEmbeddedLabelBoundsBehavior__WEBPACK_IMPORTED_MODULE_24__[\"default\"] ],\n removeParticipantBehavior: [ 'type', _RemoveParticipantBehavior__WEBPACK_IMPORTED_MODULE_25__[\"default\"] ],\n replaceConnectionBehavior: [ 'type', _ReplaceConnectionBehavior__WEBPACK_IMPORTED_MODULE_26__[\"default\"] ],\n replaceElementBehaviour: [ 'type', _ReplaceElementBehaviour__WEBPACK_IMPORTED_MODULE_27__[\"default\"] ],\n resizeBehavior: [ 'type', _ResizeBehavior__WEBPACK_IMPORTED_MODULE_28__[\"default\"] ],\n resizeLaneBehavior: [ 'type', _ResizeLaneBehavior__WEBPACK_IMPORTED_MODULE_29__[\"default\"] ],\n rootElementReferenceBehavior: [ 'type', _RootElementReferenceBehavior__WEBPACK_IMPORTED_MODULE_30__[\"default\"] ],\n spaceToolBehavior: [ 'type', _SpaceToolBehavior__WEBPACK_IMPORTED_MODULE_31__[\"default\"] ],\n subProcessPlaneBehavior: [ 'type', _SubProcessPlaneBehavior__WEBPACK_IMPORTED_MODULE_32__[\"default\"] ],\n subProcessStartEventBehavior: [ 'type', _SubProcessStartEventBehavior__WEBPACK_IMPORTED_MODULE_33__[\"default\"] ],\n textAnnotationBehavior: [ 'type', _TextAnnotationBehavior__WEBPACK_IMPORTED_MODULE_34__[\"default\"] ],\n toggleCollapseConnectionBehaviour: [ 'type', _ToggleCollapseConnectionBehaviour__WEBPACK_IMPORTED_MODULE_35__[\"default\"] ],\n toggleElementCollapseBehaviour : [ 'type', _ToggleElementCollapseBehaviour__WEBPACK_IMPORTED_MODULE_36__[\"default\"] ],\n unclaimIdBehavior: [ 'type', _UnclaimIdBehavior__WEBPACK_IMPORTED_MODULE_37__[\"default\"] ],\n unsetDefaultFlowBehavior: [ 'type', _UnsetDefaultFlowBehavior__WEBPACK_IMPORTED_MODULE_38__[\"default\"] ],\n updateFlowNodeRefsBehavior: [ 'type', _UpdateFlowNodeRefsBehavior__WEBPACK_IMPORTED_MODULE_39__[\"default\"] ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFrRjtBQUNwQztBQUNVO0FBQ0E7QUFDSTtBQUNvQjtBQUNsQztBQUNvQjtBQUNFO0FBQ007QUFDdEI7QUFDRTtBQUNFO0FBQ0Y7QUFDYztBQUNsQjtBQUNOO0FBQ007QUFDRjtBQUNKO0FBQ3NCO0FBQ1Y7QUFDUTtBQUNvQjtBQUN4QjtBQUNRO0FBQ0E7QUFDSjtBQUNsQjtBQUNRO0FBQ29CO0FBQ3RCO0FBQ1k7QUFDVTtBQUNaO0FBQ3NCO0FBQ047QUFDMUI7QUFDYztBQUNJOztBQUV0RTtBQUNBLFdBQVc7QUFDWDtBQUNBLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHlFQUFnQztBQUM5RSw0QkFBNEIsdURBQWM7QUFDMUMsaUNBQWlDLDREQUFtQjtBQUNwRCxpQ0FBaUMsNERBQW1CO0FBQ3BELG1DQUFtQyw4REFBcUI7QUFDeEQsOENBQThDLHdFQUErQjtBQUM3RSw0QkFBNEIsdURBQWM7QUFDMUMsc0NBQXNDLGlFQUF3QjtBQUM5RCx1Q0FBdUMsa0VBQXlCO0FBQ2hFLDBDQUEwQyxxRUFBNEI7QUFDdEUsK0JBQStCLDJEQUFpQjtBQUNoRCxnQ0FBZ0MsNERBQWtCO0FBQ2xELGlDQUFpQyw2REFBbUI7QUFDcEQsZ0NBQWdDLDREQUFrQjtBQUNsRCx1Q0FBdUMsbUVBQXlCO0FBQ2hFLDhCQUE4QiwwREFBZ0I7QUFDOUMsMkJBQTJCLHVEQUFhO0FBQ3hDLDhCQUE4QiwwREFBZ0I7QUFDOUMsNkJBQTZCLHlEQUFlO0FBQzVDLDJCQUEyQix1REFBYTtBQUN4QyxzQ0FBc0Msa0VBQXdCO0FBQzlELGlDQUFpQyw2REFBbUI7QUFDcEQscUNBQXFDLGlFQUF1QjtBQUM1RCxtQ0FBbUMsK0RBQXFCO0FBQ3hELCtDQUErQywyRUFBaUM7QUFDaEYsdUNBQXVDLG1FQUF5QjtBQUNoRSx1Q0FBdUMsbUVBQXlCO0FBQ2hFLHFDQUFxQyxpRUFBdUI7QUFDNUQsNEJBQTRCLHdEQUFjO0FBQzFDLGdDQUFnQyw0REFBa0I7QUFDbEQsMENBQTBDLHNFQUE0QjtBQUN0RSwrQkFBK0IsMkRBQWlCO0FBQ2hELHFDQUFxQyxpRUFBdUI7QUFDNUQsMENBQTBDLHNFQUE0QjtBQUN0RSxvQ0FBb0MsZ0VBQXNCO0FBQzFELCtDQUErQywyRUFBaUM7QUFDaEYsNkNBQTZDLHdFQUE4QjtBQUMzRSwrQkFBK0IsMkRBQWlCO0FBQ2hELHNDQUFzQyxrRUFBd0I7QUFDOUQsd0NBQXdDLG9FQUEwQjtBQUNsRSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci9pbmRleC5qcz8xZmVmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBZGFwdGl2ZUxhYmVsUG9zaXRpb25pbmdCZWhhdmlvciBmcm9tICcuL0FkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yJztcbmltcG9ydCBBcHBlbmRCZWhhdmlvciBmcm9tICcuL0FwcGVuZEJlaGF2aW9yJztcbmltcG9ydCBBc3NvY2lhdGlvbkJlaGF2aW9yIGZyb20gJy4vQXNzb2NpYXRpb25CZWhhdmlvcic7XG5pbXBvcnQgQXR0YWNoRXZlbnRCZWhhdmlvciBmcm9tICcuL0F0dGFjaEV2ZW50QmVoYXZpb3InO1xuaW1wb3J0IEJvdW5kYXJ5RXZlbnRCZWhhdmlvciBmcm9tICcuL0JvdW5kYXJ5RXZlbnRCZWhhdmlvcic7XG5pbXBvcnQgQ29tcGVuc2F0ZUJvdW5kYXJ5RXZlbnRCZWhhdmlvciBmcm9tICcuL0NvbXBlbnNhdGVCb3VuZGFyeUV2ZW50QmVoYXZpb3InO1xuaW1wb3J0IENyZWF0ZUJlaGF2aW9yIGZyb20gJy4vQ3JlYXRlQmVoYXZpb3InO1xuaW1wb3J0IENyZWF0ZURhdGFPYmplY3RCZWhhdmlvciBmcm9tICcuL0NyZWF0ZURhdGFPYmplY3RCZWhhdmlvcic7XG5pbXBvcnQgQ3JlYXRlUGFydGljaXBhbnRCZWhhdmlvciBmcm9tICcuL0NyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3InO1xuaW1wb3J0IERhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3IgZnJvbSAnLi9EYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yJztcbmltcG9ydCBEYXRhU3RvcmVCZWhhdmlvciBmcm9tICcuL0RhdGFTdG9yZUJlaGF2aW9yJztcbmltcG9ydCBEZWxldGVMYW5lQmVoYXZpb3IgZnJvbSAnLi9EZWxldGVMYW5lQmVoYXZpb3InO1xuaW1wb3J0IERldGFjaEV2ZW50QmVoYXZpb3IgZnJvbSAnLi9EZXRhY2hFdmVudEJlaGF2aW9yJztcbmltcG9ydCBEcm9wT25GbG93QmVoYXZpb3IgZnJvbSAnLi9Ecm9wT25GbG93QmVoYXZpb3InO1xuaW1wb3J0IEV2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3IgZnJvbSAnLi9FdmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yJztcbmltcG9ydCBGaXhIb3ZlckJlaGF2aW9yIGZyb20gJy4vRml4SG92ZXJCZWhhdmlvcic7XG5pbXBvcnQgR3JvdXBCZWhhdmlvciBmcm9tICcuL0dyb3VwQmVoYXZpb3InO1xuaW1wb3J0IEltcG9ydERvY2tpbmdGaXggZnJvbSAnLi9JbXBvcnREb2NraW5nRml4JztcbmltcG9ydCBJc0hvcml6b250YWxGaXggZnJvbSAnLi9Jc0hvcml6b250YWxGaXgnO1xuaW1wb3J0IExhYmVsQmVoYXZpb3IgZnJvbSAnLi9MYWJlbEJlaGF2aW9yJztcbmltcG9ydCBMYXlvdXRDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9MYXlvdXRDb25uZWN0aW9uQmVoYXZpb3InO1xuaW1wb3J0IE1lc3NhZ2VGbG93QmVoYXZpb3IgZnJvbSAnLi9NZXNzYWdlRmxvd0JlaGF2aW9yJztcbmltcG9ydCBOb25JbnRlcnJ1cHRpbmdCZWhhdmlvciBmcm9tICcuL05vbkludGVycnVwdGluZ0JlaGF2aW9yJztcbmltcG9ydCBSZW1vdmVFbWJlZGRlZExhYmVsQm91bmRzQmVoYXZpb3IgZnJvbSAnLi9SZW1vdmVFbWJlZGRlZExhYmVsQm91bmRzQmVoYXZpb3InO1xuaW1wb3J0IFJlbW92ZUVsZW1lbnRCZWhhdmlvciBmcm9tICcuL1JlbW92ZUVsZW1lbnRCZWhhdmlvcic7XG5pbXBvcnQgUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvciBmcm9tICcuL1JlbW92ZVBhcnRpY2lwYW50QmVoYXZpb3InO1xuaW1wb3J0IFJlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3IgZnJvbSAnLi9SZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yJztcbmltcG9ydCBSZXBsYWNlRWxlbWVudEJlaGF2aW91ciBmcm9tICcuL1JlcGxhY2VFbGVtZW50QmVoYXZpb3VyJztcbmltcG9ydCBSZXNpemVCZWhhdmlvciBmcm9tICcuL1Jlc2l6ZUJlaGF2aW9yJztcbmltcG9ydCBSZXNpemVMYW5lQmVoYXZpb3IgZnJvbSAnLi9SZXNpemVMYW5lQmVoYXZpb3InO1xuaW1wb3J0IFJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3IgZnJvbSAnLi9Sb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yJztcbmltcG9ydCBTcGFjZVRvb2xCZWhhdmlvciBmcm9tICcuL1NwYWNlVG9vbEJlaGF2aW9yJztcbmltcG9ydCBTdWJQcm9jZXNzUGxhbmVCZWhhdmlvciBmcm9tICcuL1N1YlByb2Nlc3NQbGFuZUJlaGF2aW9yJztcbmltcG9ydCBTdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yIGZyb20gJy4vU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvcic7XG5pbXBvcnQgVGV4dEFubm90YXRpb25CZWhhdmlvciBmcm9tICcuL1RleHRBbm5vdGF0aW9uQmVoYXZpb3InO1xuaW1wb3J0IFRvZ2dsZUNvbGxhcHNlQ29ubmVjdGlvbkJlaGF2aW91ciBmcm9tICcuL1RvZ2dsZUNvbGxhcHNlQ29ubmVjdGlvbkJlaGF2aW91cic7XG5pbXBvcnQgVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyIGZyb20gJy4vVG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyJztcbmltcG9ydCBVbmNsYWltSWRCZWhhdmlvciBmcm9tICcuL1VuY2xhaW1JZEJlaGF2aW9yJztcbmltcG9ydCBVbnNldERlZmF1bHRGbG93QmVoYXZpb3IgZnJvbSAnLi9VbnNldERlZmF1bHRGbG93QmVoYXZpb3InO1xuaW1wb3J0IFVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yIGZyb20gJy4vVXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3InO1xuXG4vKipcbiAqIEB0eXBlIHsgaW1wb3J0KCdkaWRpJykuTW9kdWxlRGVjbGFyYXRpb24gfVxuICovXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2FkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yJyxcbiAgICAnYXBwZW5kQmVoYXZpb3InLFxuICAgICdhc3NvY2lhdGlvbkJlaGF2aW9yJyxcbiAgICAnYXR0YWNoRXZlbnRCZWhhdmlvcicsXG4gICAgJ2JvdW5kYXJ5RXZlbnRCZWhhdmlvcicsXG4gICAgJ2NvbXBlbnNhdGVCb3VuZGFyeUV2ZW50QmVoYXZpb3VyJyxcbiAgICAnY3JlYXRlQmVoYXZpb3InLFxuICAgICdjcmVhdGVEYXRhT2JqZWN0QmVoYXZpb3InLFxuICAgICdjcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yJyxcbiAgICAnZGF0YUlucHV0QXNzb2NpYXRpb25CZWhhdmlvcicsXG4gICAgJ2RhdGFTdG9yZUJlaGF2aW9yJyxcbiAgICAnZGVsZXRlTGFuZUJlaGF2aW9yJyxcbiAgICAnZGV0YWNoRXZlbnRCZWhhdmlvcicsXG4gICAgJ2Ryb3BPbkZsb3dCZWhhdmlvcicsXG4gICAgJ2V2ZW50QmFzZWRHYXRld2F5QmVoYXZpb3InLFxuICAgICdmaXhIb3ZlckJlaGF2aW9yJyxcbiAgICAnZ3JvdXBCZWhhdmlvcicsXG4gICAgJ2ltcG9ydERvY2tpbmdGaXgnLFxuICAgICdpc0hvcml6b250YWxGaXgnLFxuICAgICdsYWJlbEJlaGF2aW9yJyxcbiAgICAnbGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yJyxcbiAgICAnbWVzc2FnZUZsb3dCZWhhdmlvcicsXG4gICAgJ25vbkludGVycnVwdGluZ0JlaGF2aW9yJyxcbiAgICAncmVtb3ZlRWxlbWVudEJlaGF2aW9yJyxcbiAgICAncmVtb3ZlRW1iZWRkZWRMYWJlbEJvdW5kc0JlaGF2aW9yJyxcbiAgICAncmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvcicsXG4gICAgJ3JlcGxhY2VDb25uZWN0aW9uQmVoYXZpb3InLFxuICAgICdyZXBsYWNlRWxlbWVudEJlaGF2aW91cicsXG4gICAgJ3Jlc2l6ZUJlaGF2aW9yJyxcbiAgICAncmVzaXplTGFuZUJlaGF2aW9yJyxcbiAgICAncm9vdEVsZW1lbnRSZWZlcmVuY2VCZWhhdmlvcicsXG4gICAgJ3NwYWNlVG9vbEJlaGF2aW9yJyxcbiAgICAnc3ViUHJvY2Vzc1BsYW5lQmVoYXZpb3InLFxuICAgICdzdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yJyxcbiAgICAndGV4dEFubm90YXRpb25CZWhhdmlvcicsXG4gICAgJ3RvZ2dsZUNvbGxhcHNlQ29ubmVjdGlvbkJlaGF2aW91cicsXG4gICAgJ3RvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91cicsXG4gICAgJ3VuY2xhaW1JZEJlaGF2aW9yJyxcbiAgICAndXBkYXRlRmxvd05vZGVSZWZzQmVoYXZpb3InLFxuICAgICd1bnNldERlZmF1bHRGbG93QmVoYXZpb3InXG4gIF0sXG4gIGFkYXB0aXZlTGFiZWxQb3NpdGlvbmluZ0JlaGF2aW9yOiBbICd0eXBlJywgQWRhcHRpdmVMYWJlbFBvc2l0aW9uaW5nQmVoYXZpb3IgXSxcbiAgYXBwZW5kQmVoYXZpb3I6IFsgJ3R5cGUnLCBBcHBlbmRCZWhhdmlvciBdLFxuICBhc3NvY2lhdGlvbkJlaGF2aW9yOiBbICd0eXBlJywgQXNzb2NpYXRpb25CZWhhdmlvciBdLFxuICBhdHRhY2hFdmVudEJlaGF2aW9yOiBbICd0eXBlJywgQXR0YWNoRXZlbnRCZWhhdmlvciBdLFxuICBib3VuZGFyeUV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBCb3VuZGFyeUV2ZW50QmVoYXZpb3IgXSxcbiAgY29tcGVuc2F0ZUJvdW5kYXJ5RXZlbnRCZWhhdmlvdXI6IFsgJ3R5cGUnLCBDb21wZW5zYXRlQm91bmRhcnlFdmVudEJlaGF2aW9yIF0sXG4gIGNyZWF0ZUJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlQmVoYXZpb3IgXSxcbiAgY3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yOiBbICd0eXBlJywgQ3JlYXRlRGF0YU9iamVjdEJlaGF2aW9yIF0sXG4gIGNyZWF0ZVBhcnRpY2lwYW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBDcmVhdGVQYXJ0aWNpcGFudEJlaGF2aW9yIF0sXG4gIGRhdGFJbnB1dEFzc29jaWF0aW9uQmVoYXZpb3I6IFsgJ3R5cGUnLCBEYXRhSW5wdXRBc3NvY2lhdGlvbkJlaGF2aW9yIF0sXG4gIGRhdGFTdG9yZUJlaGF2aW9yOiBbICd0eXBlJywgRGF0YVN0b3JlQmVoYXZpb3IgXSxcbiAgZGVsZXRlTGFuZUJlaGF2aW9yOiBbICd0eXBlJywgRGVsZXRlTGFuZUJlaGF2aW9yIF0sXG4gIGRldGFjaEV2ZW50QmVoYXZpb3I6IFsgJ3R5cGUnLCBEZXRhY2hFdmVudEJlaGF2aW9yIF0sXG4gIGRyb3BPbkZsb3dCZWhhdmlvcjogWyAndHlwZScsIERyb3BPbkZsb3dCZWhhdmlvciBdLFxuICBldmVudEJhc2VkR2F0ZXdheUJlaGF2aW9yOiBbICd0eXBlJywgRXZlbnRCYXNlZEdhdGV3YXlCZWhhdmlvciBdLFxuICBmaXhIb3ZlckJlaGF2aW9yOiBbICd0eXBlJywgRml4SG92ZXJCZWhhdmlvciBdLFxuICBncm91cEJlaGF2aW9yOiBbICd0eXBlJywgR3JvdXBCZWhhdmlvciBdLFxuICBpbXBvcnREb2NraW5nRml4OiBbICd0eXBlJywgSW1wb3J0RG9ja2luZ0ZpeCBdLFxuICBpc0hvcml6b250YWxGaXg6IFsgJ3R5cGUnLCBJc0hvcml6b250YWxGaXggXSxcbiAgbGFiZWxCZWhhdmlvcjogWyAndHlwZScsIExhYmVsQmVoYXZpb3IgXSxcbiAgbGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yOiBbICd0eXBlJywgTGF5b3V0Q29ubmVjdGlvbkJlaGF2aW9yIF0sXG4gIG1lc3NhZ2VGbG93QmVoYXZpb3I6IFsgJ3R5cGUnLCBNZXNzYWdlRmxvd0JlaGF2aW9yIF0sXG4gIG5vbkludGVycnVwdGluZ0JlaGF2aW9yOiBbICd0eXBlJywgTm9uSW50ZXJydXB0aW5nQmVoYXZpb3IgXSxcbiAgcmVtb3ZlRWxlbWVudEJlaGF2aW9yOiBbICd0eXBlJywgUmVtb3ZlRWxlbWVudEJlaGF2aW9yIF0sXG4gIHJlbW92ZUVtYmVkZGVkTGFiZWxCb3VuZHNCZWhhdmlvcjogWyAndHlwZScsIFJlbW92ZUVtYmVkZGVkTGFiZWxCb3VuZHNCZWhhdmlvciBdLFxuICByZW1vdmVQYXJ0aWNpcGFudEJlaGF2aW9yOiBbICd0eXBlJywgUmVtb3ZlUGFydGljaXBhbnRCZWhhdmlvciBdLFxuICByZXBsYWNlQ29ubmVjdGlvbkJlaGF2aW9yOiBbICd0eXBlJywgUmVwbGFjZUNvbm5lY3Rpb25CZWhhdmlvciBdLFxuICByZXBsYWNlRWxlbWVudEJlaGF2aW91cjogWyAndHlwZScsIFJlcGxhY2VFbGVtZW50QmVoYXZpb3VyIF0sXG4gIHJlc2l6ZUJlaGF2aW9yOiBbICd0eXBlJywgUmVzaXplQmVoYXZpb3IgXSxcbiAgcmVzaXplTGFuZUJlaGF2aW9yOiBbICd0eXBlJywgUmVzaXplTGFuZUJlaGF2aW9yIF0sXG4gIHJvb3RFbGVtZW50UmVmZXJlbmNlQmVoYXZpb3I6IFsgJ3R5cGUnLCBSb290RWxlbWVudFJlZmVyZW5jZUJlaGF2aW9yIF0sXG4gIHNwYWNlVG9vbEJlaGF2aW9yOiBbICd0eXBlJywgU3BhY2VUb29sQmVoYXZpb3IgXSxcbiAgc3ViUHJvY2Vzc1BsYW5lQmVoYXZpb3I6IFsgJ3R5cGUnLCBTdWJQcm9jZXNzUGxhbmVCZWhhdmlvciBdLFxuICBzdWJQcm9jZXNzU3RhcnRFdmVudEJlaGF2aW9yOiBbICd0eXBlJywgU3ViUHJvY2Vzc1N0YXJ0RXZlbnRCZWhhdmlvciBdLFxuICB0ZXh0QW5ub3RhdGlvbkJlaGF2aW9yOiBbICd0eXBlJywgVGV4dEFubm90YXRpb25CZWhhdmlvciBdLFxuICB0b2dnbGVDb2xsYXBzZUNvbm5lY3Rpb25CZWhhdmlvdXI6IFsgJ3R5cGUnLCBUb2dnbGVDb2xsYXBzZUNvbm5lY3Rpb25CZWhhdmlvdXIgXSxcbiAgdG9nZ2xlRWxlbWVudENvbGxhcHNlQmVoYXZpb3VyIDogWyAndHlwZScsIFRvZ2dsZUVsZW1lbnRDb2xsYXBzZUJlaGF2aW91ciBdLFxuICB1bmNsYWltSWRCZWhhdmlvcjogWyAndHlwZScsIFVuY2xhaW1JZEJlaGF2aW9yIF0sXG4gIHVuc2V0RGVmYXVsdEZsb3dCZWhhdmlvcjogWyAndHlwZScsIFVuc2V0RGVmYXVsdEZsb3dCZWhhdmlvciBdLFxuICB1cGRhdGVGbG93Tm9kZVJlZnNCZWhhdmlvcjogWyAndHlwZScsIFVwZGF0ZUZsb3dOb2RlUmVmc0JlaGF2aW9yIF1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/index.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/CategoryUtil.js":
/*!***************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/CategoryUtil.js ***!
\***************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createCategory: () => (/* binding */ createCategory),\n/* harmony export */ createCategoryValue: () => (/* binding */ createCategoryValue),\n/* harmony export */ linkCategoryValue: () => (/* binding */ linkCategoryValue),\n/* harmony export */ unlinkCategory: () => (/* binding */ unlinkCategory),\n/* harmony export */ unlinkCategoryValue: () => (/* binding */ unlinkCategoryValue)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Collections.js\");\n\n\n/**\n * @typedef {import('../../BpmnFactory').default} BpmnFactory\n *\n * @typedef {import('../../../model/Types').ModdleElement} ModdleElement\n */\n\n/**\n * Creates a new bpmn:CategoryValue inside a new bpmn:Category\n *\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCategory(bpmnFactory) {\n return bpmnFactory.create('bpmn:Category');\n}\n\n/**\n * Creates a new bpmn:CategoryValue inside a new bpmn:Category\n *\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCategoryValue(bpmnFactory) {\n return bpmnFactory.create('bpmn:CategoryValue');\n}\n\n/**\n * Adds category value to definitions\n *\n * @param {ModdleElement} categoryValue\n * @param {ModdleElement} category\n * @param {ModdleElement} definitions\n *\n * @return {ModdleElement}\n */\nfunction linkCategoryValue(categoryValue, category, definitions) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_0__.add)(category.get('categoryValue'), categoryValue);\n categoryValue.$parent = category;\n\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_0__.add)(definitions.get('rootElements'), category);\n category.$parent = definitions;\n\n return categoryValue;\n}\n\n/**\n * Unlink category value from parent\n *\n * @param {ModdleElement} categoryValue\n *\n * @return {ModdleElement}\n */\nfunction unlinkCategoryValue(categoryValue) {\n var category = categoryValue.$parent;\n\n if (category) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_0__.remove)(category.get('categoryValue'), categoryValue);\n categoryValue.$parent = null;\n }\n\n return categoryValue;\n}\n\n/**\n * Unlink category from parent\n *\n * @param {ModdleElement} category\n *\n * @return {ModdleElement}\n */\nfunction unlinkCategory(category) {\n var definitions = category.$parent;\n\n if (definitions) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_0__.remove)(definitions.get('rootElements'), category);\n category.$parent = null;\n }\n\n return category;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0NhdGVnb3J5VXRpbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHeUM7O0FBRXpDO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQ7QUFDQSxhQUFhLDhDQUE4QztBQUMzRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLGVBQWU7QUFDMUIsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCxFQUFFLG9FQUFhO0FBQ2Y7O0FBRUEsRUFBRSxvRUFBYTtBQUNmOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDs7QUFFQTtBQUNBLElBQUksdUVBQWdCO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQOztBQUVBO0FBQ0EsSUFBSSx1RUFBZ0I7QUFDcEI7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9DYXRlZ29yeVV0aWwuanM/MGUxNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vQnBtbkZhY3RvcnknKS5kZWZhdWx0fSBCcG1uRmFjdG9yeVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL21vZGVsL1R5cGVzJykuTW9kZGxlRWxlbWVudH0gTW9kZGxlRWxlbWVudFxuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBicG1uOkNhdGVnb3J5VmFsdWUgaW5zaWRlIGEgbmV3IGJwbW46Q2F0ZWdvcnlcbiAqXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXRlZ29yeShicG1uRmFjdG9yeSkge1xuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5Jyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBicG1uOkNhdGVnb3J5VmFsdWUgaW5zaWRlIGEgbmV3IGJwbW46Q2F0ZWdvcnlcbiAqXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXRlZ29yeVZhbHVlKGJwbW5GYWN0b3J5KSB7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46Q2F0ZWdvcnlWYWx1ZScpO1xufVxuXG4vKipcbiAqIEFkZHMgY2F0ZWdvcnkgdmFsdWUgdG8gZGVmaW5pdGlvbnNcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNhdGVnb3J5VmFsdWVcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZGVmaW5pdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlua0NhdGVnb3J5VmFsdWUoY2F0ZWdvcnlWYWx1ZSwgY2F0ZWdvcnksIGRlZmluaXRpb25zKSB7XG4gIGNvbGxlY3Rpb25BZGQoY2F0ZWdvcnkuZ2V0KCdjYXRlZ29yeVZhbHVlJyksIGNhdGVnb3J5VmFsdWUpO1xuICBjYXRlZ29yeVZhbHVlLiRwYXJlbnQgPSBjYXRlZ29yeTtcblxuICBjb2xsZWN0aW9uQWRkKGRlZmluaXRpb25zLmdldCgncm9vdEVsZW1lbnRzJyksIGNhdGVnb3J5KTtcbiAgY2F0ZWdvcnkuJHBhcmVudCA9IGRlZmluaXRpb25zO1xuXG4gIHJldHVybiBjYXRlZ29yeVZhbHVlO1xufVxuXG4vKipcbiAqIFVubGluayBjYXRlZ29yeSB2YWx1ZSBmcm9tIHBhcmVudFxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY2F0ZWdvcnlWYWx1ZVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmxpbmtDYXRlZ29yeVZhbHVlKGNhdGVnb3J5VmFsdWUpIHtcbiAgdmFyIGNhdGVnb3J5ID0gY2F0ZWdvcnlWYWx1ZS4kcGFyZW50O1xuXG4gIGlmIChjYXRlZ29yeSkge1xuICAgIGNvbGxlY3Rpb25SZW1vdmUoY2F0ZWdvcnkuZ2V0KCdjYXRlZ29yeVZhbHVlJyksIGNhdGVnb3J5VmFsdWUpO1xuICAgIGNhdGVnb3J5VmFsdWUuJHBhcmVudCA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY2F0ZWdvcnlWYWx1ZTtcbn1cblxuLyoqXG4gKiBVbmxpbmsgY2F0ZWdvcnkgZnJvbSBwYXJlbnRcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGNhdGVnb3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubGlua0NhdGVnb3J5KGNhdGVnb3J5KSB7XG4gIHZhciBkZWZpbml0aW9ucyA9IGNhdGVnb3J5LiRwYXJlbnQ7XG5cbiAgaWYgKGRlZmluaXRpb25zKSB7XG4gICAgY29sbGVjdGlvblJlbW92ZShkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpLCBjYXRlZ29yeSk7XG4gICAgY2F0ZWdvcnkuJHBhcmVudCA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY2F0ZWdvcnk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/CategoryUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js":
/*!***********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js ***!
\***********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getConnectionAdjustment: () => (/* binding */ getConnectionAdjustment)\n/* harmony export */ });\n/* harmony import */ var _LayoutUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LayoutUtil.js\");\n\n\n/**\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n *\n * @typedef {import('./LayoutUtil').FindNewLineStartIndexHints} FindNewLineStartIndexHints\n */\n\n/**\n * Calculate the new point after the connection waypoints got updated.\n *\n * @param {Point} position\n * @param {Point[]} newWaypoints\n * @param {Point[]} oldWaypoints\n * @param {FindNewLineStartIndexHints} hints\n *\n * @return {Point}\n */\nfunction getConnectionAdjustment(position, newWaypoints, oldWaypoints, hints) {\n return (0,_LayoutUtil__WEBPACK_IMPORTED_MODULE_0__.getAnchorPointAdjustment)(position, newWaypoints, oldWaypoints, hints).point;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0Nvbm5lY3Rpb25MYXlvdXRVdGlsLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXdEOztBQUV4RDtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0EsYUFBYSxtREFBbUQ7QUFDaEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyw0QkFBNEI7QUFDdkM7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLFNBQVMscUVBQXdCO0FBQ2pDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9Db25uZWN0aW9uTGF5b3V0VXRpbC5qcz8wYzNhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEFuY2hvclBvaW50QWRqdXN0bWVudCB9IGZyb20gJy4vTGF5b3V0VXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlBvaW50fSBQb2ludFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vTGF5b3V0VXRpbCcpLkZpbmROZXdMaW5lU3RhcnRJbmRleEhpbnRzfSBGaW5kTmV3TGluZVN0YXJ0SW5kZXhIaW50c1xuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBuZXcgcG9pbnQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gd2F5cG9pbnRzIGdvdCB1cGRhdGVkLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge1BvaW50W119IG5ld1dheXBvaW50c1xuICogQHBhcmFtIHtQb2ludFtdfSBvbGRXYXlwb2ludHNcbiAqIEBwYXJhbSB7RmluZE5ld0xpbmVTdGFydEluZGV4SGludHN9IGhpbnRzXG4gKlxuICogQHJldHVybiB7UG9pbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0aW9uQWRqdXN0bWVudChwb3NpdGlvbiwgbmV3V2F5cG9pbnRzLCBvbGRXYXlwb2ludHMsIGhpbnRzKSB7XG4gIHJldHVybiBnZXRBbmNob3JQb2ludEFkanVzdG1lbnQocG9zaXRpb24sIG5ld1dheXBvaW50cywgb2xkV2F5cG9pbnRzLCBoaW50cykucG9pbnQ7XG59XG5cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LabelLayoutUtil.js":
/*!******************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LabelLayoutUtil.js ***!
\******************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ findNewLabelLineStartIndex: () => (/* binding */ findNewLabelLineStartIndex),\n/* harmony export */ getLabelAdjustment: () => (/* binding */ getLabelAdjustment)\n/* harmony export */ });\n/* harmony import */ var _LayoutUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n\n\n\n\n/**\n * @typedef {import('./LineAttachmentUtil').Attachment} Attachment\n *\n * @typedef {import('./LayoutUtil').FindNewLineStartIndexHints} FindNewLineStartIndexHints\n *\n * @typedef {import('../../../../model/Types').Label} Label\n *\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n */\n\n/**\n * @param {Point[]} oldWaypoints\n * @param {Point[]} newWaypoints\n * @param {Attachment} attachment\n * @param {FindNewLineStartIndexHints} hints\n *\n * @return {number}\n */\nfunction findNewLabelLineStartIndex(oldWaypoints, newWaypoints, attachment, hints) {\n return (0,_LayoutUtil__WEBPACK_IMPORTED_MODULE_0__.findNewLineStartIndex)(oldWaypoints, newWaypoints, attachment, hints);\n}\n\n/**\n * Calculate the required adjustment (move delta) for the given label\n * after the connection waypoints got updated.\n *\n * @param {Label} label\n * @param {Point[]} newWaypoints\n * @param {Point[]} oldWaypoints\n * @param {FindNewLineStartIndexHints} hints\n *\n * @return {Point}\n */\nfunction getLabelAdjustment(label, newWaypoints, oldWaypoints, hints) {\n var labelPosition = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.getMid)(label);\n\n return (0,_LayoutUtil__WEBPACK_IMPORTED_MODULE_0__.getAnchorPointAdjustment)(labelPosition, newWaypoints, oldWaypoints, hints).delta;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0xhYmVsTGF5b3V0VXRpbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStFOztBQUVyQjs7QUFFMUQ7QUFDQSxhQUFhLDJDQUEyQztBQUN4RDtBQUNBLGFBQWEsbURBQW1EO0FBQ2hFO0FBQ0EsYUFBYSx5Q0FBeUM7QUFDdEQ7QUFDQSxhQUFhLDJDQUEyQztBQUN4RDs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCxTQUFTLGtFQUFxQjtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsNEJBQTRCO0FBQ3ZDO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUCxzQkFBc0Isd0VBQU07O0FBRTVCLFNBQVMscUVBQXdCO0FBQ2pDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MYWJlbExheW91dFV0aWwuanM/YTcxNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaW5kTmV3TGluZVN0YXJ0SW5kZXgsIGdldEFuY2hvclBvaW50QWRqdXN0bWVudCB9IGZyb20gJy4vTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7IGdldE1pZCB9IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL0xpbmVBdHRhY2htZW50VXRpbCcpLkF0dGFjaG1lbnR9IEF0dGFjaG1lbnRcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL0xheW91dFV0aWwnKS5GaW5kTmV3TGluZVN0YXJ0SW5kZXhIaW50c30gRmluZE5ld0xpbmVTdGFydEluZGV4SGludHNcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi8uLi9tb2RlbC9UeXBlcycpLkxhYmVsfSBMYWJlbFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL3V0aWwvVHlwZXMnKS5Qb2ludH0gUG9pbnRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7UG9pbnRbXX0gb2xkV2F5cG9pbnRzXG4gKiBAcGFyYW0ge1BvaW50W119IG5ld1dheXBvaW50c1xuICogQHBhcmFtIHtBdHRhY2htZW50fSBhdHRhY2htZW50XG4gKiBAcGFyYW0ge0ZpbmROZXdMaW5lU3RhcnRJbmRleEhpbnRzfSBoaW50c1xuICpcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXdMYWJlbExpbmVTdGFydEluZGV4KG9sZFdheXBvaW50cywgbmV3V2F5cG9pbnRzLCBhdHRhY2htZW50LCBoaW50cykge1xuICByZXR1cm4gZmluZE5ld0xpbmVTdGFydEluZGV4KG9sZFdheXBvaW50cywgbmV3V2F5cG9pbnRzLCBhdHRhY2htZW50LCBoaW50cyk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSByZXF1aXJlZCBhZGp1c3RtZW50IChtb3ZlIGRlbHRhKSBmb3IgdGhlIGdpdmVuIGxhYmVsXG4gKiBhZnRlciB0aGUgY29ubmVjdGlvbiB3YXlwb2ludHMgZ290IHVwZGF0ZWQuXG4gKlxuICogQHBhcmFtIHtMYWJlbH0gbGFiZWxcbiAqIEBwYXJhbSB7UG9pbnRbXX0gbmV3V2F5cG9pbnRzXG4gKiBAcGFyYW0ge1BvaW50W119IG9sZFdheXBvaW50c1xuICogQHBhcmFtIHtGaW5kTmV3TGluZVN0YXJ0SW5kZXhIaW50c30gaGludHNcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsQWRqdXN0bWVudChsYWJlbCwgbmV3V2F5cG9pbnRzLCBvbGRXYXlwb2ludHMsIGhpbnRzKSB7XG4gIHZhciBsYWJlbFBvc2l0aW9uID0gZ2V0TWlkKGxhYmVsKTtcblxuICByZXR1cm4gZ2V0QW5jaG9yUG9pbnRBZGp1c3RtZW50KGxhYmVsUG9zaXRpb24sIG5ld1dheXBvaW50cywgb2xkV2F5cG9pbnRzLCBoaW50cykuZGVsdGE7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LabelLayoutUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LayoutUtil.js":
/*!*************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LayoutUtil.js ***!
\*************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ findNewLineStartIndex: () => (/* binding */ findNewLineStartIndex),\n/* harmony export */ getAnchorPointAdjustment: () => (/* binding */ getAnchorPointAdjustment)\n/* harmony export */ });\n/* harmony import */ var _GeometricUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GeometricUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/bendpoints/GeometricUtil.js\");\n/* harmony import */ var _LineAttachmentUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LineAttachmentUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineAttachmentUtil.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n *\n * @typedef {import('./LineAttachmentUtil').Attachment} Attachment\n *\n * @typedef { {\n * point: Point;\n * delta: Point;\n * } } AnchorPointAdjustment\n *\n * @typedef { {\n * segmentMove?: {\n* segmentStartIndex: number;\n* newSegmentStartIndex: number;\n* };\n* bendpointMove?: {\n* insert: boolean;\n* bendpointIndex: number;\n* };\n* connectionStart: boolean;\n* connectionEnd: boolean;\n* } } FindNewLineStartIndexHints\n */\n\n/**\n * @param {Point[]} oldWaypoints\n * @param {Point[]} newWaypoints\n * @param {Attachment} attachment\n * @param {FindNewLineStartIndexHints} hints\n *\n * @return {number}\n */\nfunction findNewLineStartIndex(oldWaypoints, newWaypoints, attachment, hints) {\n\n var index = attachment.segmentIndex;\n\n var offset = newWaypoints.length - oldWaypoints.length;\n\n // segmentMove happened\n if (hints.segmentMove) {\n\n var oldSegmentStartIndex = hints.segmentMove.segmentStartIndex,\n newSegmentStartIndex = hints.segmentMove.newSegmentStartIndex;\n\n // if point was on moved segment return new segment index\n if (index === oldSegmentStartIndex) {\n return newSegmentStartIndex;\n }\n\n // point is after new segment index\n if (index >= newSegmentStartIndex) {\n return (index + offset < newSegmentStartIndex) ? newSegmentStartIndex : index + offset;\n }\n\n // if point is before new segment index\n return index;\n }\n\n // bendpointMove happened\n if (hints.bendpointMove) {\n\n var insert = hints.bendpointMove.insert,\n bendpointIndex = hints.bendpointMove.bendpointIndex,\n newIndex;\n\n // waypoints length didnt change\n if (offset === 0) {\n return index;\n }\n\n // point behind new/removed bendpoint\n if (index >= bendpointIndex) {\n newIndex = insert ? index + 1 : index - 1;\n }\n\n // point before new/removed bendpoint\n if (index < bendpointIndex) {\n\n newIndex = index;\n\n // decide point should take right or left segment\n if (insert && attachment.type !== 'bendpoint' && bendpointIndex - 1 === index) {\n\n var rel = relativePositionMidWaypoint(newWaypoints, bendpointIndex);\n\n if (rel < attachment.relativeLocation) {\n newIndex++;\n }\n }\n }\n\n return newIndex;\n }\n\n // start/end changed\n if (offset === 0) {\n return index;\n }\n\n if (hints.connectionStart && index === 0) {\n return 0;\n }\n\n if (hints.connectionEnd && index === oldWaypoints.length - 2) {\n return newWaypoints.length - 2;\n }\n\n // if nothing fits, take the middle segment\n return Math.floor((newWaypoints.length - 2) / 2);\n}\n\n\n/**\n * Calculate the required adjustment (move delta) for the given point\n * after the connection waypoints got updated.\n *\n * @param {Point} position\n * @param {Point[]} newWaypoints\n * @param {Point[]} oldWaypoints\n * @param {FindNewLineStartIndexHints} hints\n *\n * @return {AnchorPointAdjustment} result\n */\nfunction getAnchorPointAdjustment(position, newWaypoints, oldWaypoints, hints) {\n\n var dx = 0,\n dy = 0;\n\n var oldPosition = {\n point: position,\n delta: { x: 0, y: 0 }\n };\n\n // get closest attachment\n var attachment = (0,_LineAttachmentUtil__WEBPACK_IMPORTED_MODULE_0__.getAttachment)(position, oldWaypoints),\n oldLabelLineIndex = attachment.segmentIndex,\n newLabelLineIndex = findNewLineStartIndex(oldWaypoints, newWaypoints, attachment, hints);\n\n\n // should never happen\n // TODO(@janstuemmel): throw an error here when connectionSegmentMove is refactored\n if (newLabelLineIndex < 0 ||\n newLabelLineIndex > newWaypoints.length - 2 ||\n newLabelLineIndex === null) {\n return oldPosition;\n }\n\n var oldLabelLine = getLine(oldWaypoints, oldLabelLineIndex),\n newLabelLine = getLine(newWaypoints, newLabelLineIndex),\n oldFoot = attachment.position;\n\n var relativeFootPosition = getRelativeFootPosition(oldLabelLine, oldFoot),\n angleDelta = getAngleDelta(oldLabelLine, newLabelLine);\n\n // special rule if label on bendpoint\n if (attachment.type === 'bendpoint') {\n\n var offset = newWaypoints.length - oldWaypoints.length,\n oldBendpointIndex = attachment.bendpointIndex,\n oldBendpoint = oldWaypoints[oldBendpointIndex];\n\n // bendpoint position hasn't changed, return same position\n if (newWaypoints.indexOf(oldBendpoint) !== -1) {\n return oldPosition;\n }\n\n // new bendpoint and old bendpoint have same index, then just return the offset\n if (offset === 0) {\n var newBendpoint = newWaypoints[oldBendpointIndex];\n\n dx = newBendpoint.x - attachment.position.x,\n dy = newBendpoint.y - attachment.position.y;\n\n return {\n delta: {\n x: dx,\n y: dy\n },\n point: {\n x: position.x + dx,\n y: position.y + dy\n }\n };\n }\n\n // if bendpoints get removed\n if (offset < 0 && oldBendpointIndex !== 0 && oldBendpointIndex < oldWaypoints.length - 1) {\n relativeFootPosition = relativePositionMidWaypoint(oldWaypoints, oldBendpointIndex);\n }\n }\n\n var newFoot = {\n x: (newLabelLine[1].x - newLabelLine[0].x) * relativeFootPosition + newLabelLine[0].x,\n y: (newLabelLine[1].y - newLabelLine[0].y) * relativeFootPosition + newLabelLine[0].y\n };\n\n // the rotated vector to label\n var newLabelVector = (0,_GeometricUtil__WEBPACK_IMPORTED_MODULE_1__.rotateVector)({\n x: position.x - oldFoot.x,\n y: position.y - oldFoot.y\n }, angleDelta);\n\n // the new relative position\n dx = newFoot.x + newLabelVector.x - position.x;\n dy = newFoot.y + newLabelVector.y - position.y;\n\n return {\n point: (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.roundPoint)(newFoot),\n delta: (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_2__.roundPoint)({\n x: dx,\n y: dy\n })\n };\n}\n\n\n// HELPERS //////////////////////\n\nfunction relativePositionMidWaypoint(waypoints, idx) {\n\n var distanceSegment1 = (0,_GeometricUtil__WEBPACK_IMPORTED_MODULE_1__.getDistancePointPoint)(waypoints[idx - 1], waypoints[idx]),\n distanceSegment2 = (0,_GeometricUtil__WEBPACK_IMPORTED_MODULE_1__.getDistancePointPoint)(waypoints[idx], waypoints[idx + 1]);\n\n var relativePosition = distanceSegment1 / (distanceSegment1 + distanceSegment2);\n\n return relativePosition;\n}\n\nfunction getAngleDelta(l1, l2) {\n var a1 = (0,_GeometricUtil__WEBPACK_IMPORTED_MODULE_1__.getAngle)(l1),\n a2 = (0,_GeometricUtil__WEBPACK_IMPORTED_MODULE_1__.getAngle)(l2);\n return a2 - a1;\n}\n\nfunction getLine(waypoints, idx) {\n return [ waypoints[idx], waypoints[idx + 1] ];\n}\n\nfunction getRelativeFootPosition(line, foot) {\n\n var length = (0,_GeometricUtil__WEBPACK_IMPORTED_MODULE_1__.getDistancePointPoint)(line[0], line[1]),\n lengthToFoot = (0,_GeometricUtil__WEBPACK_IMPORTED_MODULE_1__.getDistancePointPoint)(line[0], foot);\n\n return length === 0 ? 0 : lengthToFoot / length;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0xheW91dFV0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJeUI7O0FBSUs7O0FBSVk7O0FBRTFDO0FBQ0EsYUFBYSwyQ0FBMkM7QUFDeEQ7QUFDQSxhQUFhLDJDQUEyQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsWUFBWTtBQUN2QixXQUFXLDRCQUE0QjtBQUN2QztBQUNBLFlBQVk7QUFDWjtBQUNPOztBQUVQOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLDRCQUE0QjtBQUN2QztBQUNBLFlBQVksdUJBQXVCO0FBQ25DO0FBQ087O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsbUJBQW1CLGtFQUFhO0FBQ2hDO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLDREQUFZO0FBQ25DO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsNEVBQVU7QUFDckIsV0FBVyw0RUFBVTtBQUNyQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBOztBQUVBOztBQUVBLHlCQUF5QixxRUFBcUI7QUFDOUMseUJBQXlCLHFFQUFxQjs7QUFFOUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFdBQVcsd0RBQVE7QUFDbkIsV0FBVyx3REFBUTtBQUNuQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLHFFQUFxQjtBQUNwQyxxQkFBcUIscUVBQXFCOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvYmVoYXZpb3IvdXRpbC9MYXlvdXRVdGlsLmpzPzZiODIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0RGlzdGFuY2VQb2ludFBvaW50LFxuICByb3RhdGVWZWN0b3IsXG4gIGdldEFuZ2xlXG59IGZyb20gJy4vR2VvbWV0cmljVXRpbCc7XG5cbmltcG9ydCB7XG4gIGdldEF0dGFjaG1lbnRcbn0gZnJvbSAnLi9MaW5lQXR0YWNobWVudFV0aWwnO1xuXG5pbXBvcnQge1xuICByb3VuZFBvaW50XG59IGZyb20gJ2RpYWdyYW0tanMvbGliL2xheW91dC9MYXlvdXRVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi91dGlsL1R5cGVzJykuUG9pbnR9IFBvaW50XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9MaW5lQXR0YWNobWVudFV0aWwnKS5BdHRhY2htZW50fSBBdHRhY2htZW50XG4gKlxuICogQHR5cGVkZWYgeyB7XG4gKiAgIHBvaW50OiBQb2ludDtcbiAqICAgZGVsdGE6IFBvaW50O1xuICogfSB9IEFuY2hvclBvaW50QWRqdXN0bWVudFxuICpcbiAqIEB0eXBlZGVmIHsge1xuICogICBzZWdtZW50TW92ZT86IHtcbiogICAgIHNlZ21lbnRTdGFydEluZGV4OiBudW1iZXI7XG4qICAgICBuZXdTZWdtZW50U3RhcnRJbmRleDogbnVtYmVyO1xuKiAgIH07XG4qICAgYmVuZHBvaW50TW92ZT86IHtcbiogICAgIGluc2VydDogYm9vbGVhbjtcbiogICAgIGJlbmRwb2ludEluZGV4OiBudW1iZXI7XG4qICAgfTtcbiogICBjb25uZWN0aW9uU3RhcnQ6IGJvb2xlYW47XG4qICAgY29ubmVjdGlvbkVuZDogYm9vbGVhbjtcbiogfSB9IEZpbmROZXdMaW5lU3RhcnRJbmRleEhpbnRzXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1BvaW50W119IG9sZFdheXBvaW50c1xuICogQHBhcmFtIHtQb2ludFtdfSBuZXdXYXlwb2ludHNcbiAqIEBwYXJhbSB7QXR0YWNobWVudH0gYXR0YWNobWVudFxuICogQHBhcmFtIHtGaW5kTmV3TGluZVN0YXJ0SW5kZXhIaW50c30gaGludHNcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmV3TGluZVN0YXJ0SW5kZXgob2xkV2F5cG9pbnRzLCBuZXdXYXlwb2ludHMsIGF0dGFjaG1lbnQsIGhpbnRzKSB7XG5cbiAgdmFyIGluZGV4ID0gYXR0YWNobWVudC5zZWdtZW50SW5kZXg7XG5cbiAgdmFyIG9mZnNldCA9IG5ld1dheXBvaW50cy5sZW5ndGggLSBvbGRXYXlwb2ludHMubGVuZ3RoO1xuXG4gIC8vIHNlZ21lbnRNb3ZlIGhhcHBlbmVkXG4gIGlmIChoaW50cy5zZWdtZW50TW92ZSkge1xuXG4gICAgdmFyIG9sZFNlZ21lbnRTdGFydEluZGV4ID0gaGludHMuc2VnbWVudE1vdmUuc2VnbWVudFN0YXJ0SW5kZXgsXG4gICAgICAgIG5ld1NlZ21lbnRTdGFydEluZGV4ID0gaGludHMuc2VnbWVudE1vdmUubmV3U2VnbWVudFN0YXJ0SW5kZXg7XG5cbiAgICAvLyBpZiBwb2ludCB3YXMgb24gbW92ZWQgc2VnbWVudCByZXR1cm4gbmV3IHNlZ21lbnQgaW5kZXhcbiAgICBpZiAoaW5kZXggPT09IG9sZFNlZ21lbnRTdGFydEluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3U2VnbWVudFN0YXJ0SW5kZXg7XG4gICAgfVxuXG4gICAgLy8gcG9pbnQgaXMgYWZ0ZXIgbmV3IHNlZ21lbnQgaW5kZXhcbiAgICBpZiAoaW5kZXggPj0gbmV3U2VnbWVudFN0YXJ0SW5kZXgpIHtcbiAgICAgIHJldHVybiAoaW5kZXggKyBvZmZzZXQgPCBuZXdTZWdtZW50U3RhcnRJbmRleCkgPyBuZXdTZWdtZW50U3RhcnRJbmRleCA6IGluZGV4ICsgb2Zmc2V0O1xuICAgIH1cblxuICAgIC8vIGlmIHBvaW50IGlzIGJlZm9yZSBuZXcgc2VnbWVudCBpbmRleFxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8vIGJlbmRwb2ludE1vdmUgaGFwcGVuZWRcbiAgaWYgKGhpbnRzLmJlbmRwb2ludE1vdmUpIHtcblxuICAgIHZhciBpbnNlcnQgPSBoaW50cy5iZW5kcG9pbnRNb3ZlLmluc2VydCxcbiAgICAgICAgYmVuZHBvaW50SW5kZXggPSBoaW50cy5iZW5kcG9pbnRNb3ZlLmJlbmRwb2ludEluZGV4LFxuICAgICAgICBuZXdJbmRleDtcblxuICAgIC8vIHdheXBvaW50cyBsZW5ndGggZGlkbnQgY2hhbmdlXG4gICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8vIHBvaW50IGJlaGluZCBuZXcvcmVtb3ZlZCBiZW5kcG9pbnRcbiAgICBpZiAoaW5kZXggPj0gYmVuZHBvaW50SW5kZXgpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5zZXJ0ID8gaW5kZXggKyAxIDogaW5kZXggLSAxO1xuICAgIH1cblxuICAgIC8vIHBvaW50IGJlZm9yZSBuZXcvcmVtb3ZlZCBiZW5kcG9pbnRcbiAgICBpZiAoaW5kZXggPCBiZW5kcG9pbnRJbmRleCkge1xuXG4gICAgICBuZXdJbmRleCA9IGluZGV4O1xuXG4gICAgICAvLyBkZWNpZGUgcG9pbnQgc2hvdWxkIHRha2UgcmlnaHQgb3IgbGVmdCBzZWdtZW50XG4gICAgICBpZiAoaW5zZXJ0ICYmIGF0dGFjaG1lbnQudHlwZSAhPT0gJ2JlbmRwb2ludCcgJiYgYmVuZHBvaW50SW5kZXggLSAxID09PSBpbmRleCkge1xuXG4gICAgICAgIHZhciByZWwgPSByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQobmV3V2F5cG9pbnRzLCBiZW5kcG9pbnRJbmRleCk7XG5cbiAgICAgICAgaWYgKHJlbCA8IGF0dGFjaG1lbnQucmVsYXRpdmVMb2NhdGlvbikge1xuICAgICAgICAgIG5ld0luZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3SW5kZXg7XG4gIH1cblxuICAvLyBzdGFydC9lbmQgY2hhbmdlZFxuICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25TdGFydCAmJiBpbmRleCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGhpbnRzLmNvbm5lY3Rpb25FbmQgJiYgaW5kZXggPT09IG9sZFdheXBvaW50cy5sZW5ndGggLSAyKSB7XG4gICAgcmV0dXJuIG5ld1dheXBvaW50cy5sZW5ndGggLSAyO1xuICB9XG5cbiAgLy8gaWYgbm90aGluZyBmaXRzLCB0YWtlIHRoZSBtaWRkbGUgc2VnbWVudFxuICByZXR1cm4gTWF0aC5mbG9vcigobmV3V2F5cG9pbnRzLmxlbmd0aCAtIDIpIC8gMik7XG59XG5cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHJlcXVpcmVkIGFkanVzdG1lbnQgKG1vdmUgZGVsdGEpIGZvciB0aGUgZ2l2ZW4gcG9pbnRcbiAqIGFmdGVyIHRoZSBjb25uZWN0aW9uIHdheXBvaW50cyBnb3QgdXBkYXRlZC5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwb3NpdGlvblxuICogQHBhcmFtIHtQb2ludFtdfSBuZXdXYXlwb2ludHNcbiAqIEBwYXJhbSB7UG9pbnRbXX0gb2xkV2F5cG9pbnRzXG4gKiBAcGFyYW0ge0ZpbmROZXdMaW5lU3RhcnRJbmRleEhpbnRzfSBoaW50c1xuICpcbiAqIEByZXR1cm4ge0FuY2hvclBvaW50QWRqdXN0bWVudH0gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmNob3JQb2ludEFkanVzdG1lbnQocG9zaXRpb24sIG5ld1dheXBvaW50cywgb2xkV2F5cG9pbnRzLCBoaW50cykge1xuXG4gIHZhciBkeCA9IDAsXG4gICAgICBkeSA9IDA7XG5cbiAgdmFyIG9sZFBvc2l0aW9uID0ge1xuICAgIHBvaW50OiBwb3NpdGlvbixcbiAgICBkZWx0YTogeyB4OiAwLCB5OiAwIH1cbiAgfTtcblxuICAvLyBnZXQgY2xvc2VzdCBhdHRhY2htZW50XG4gIHZhciBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChwb3NpdGlvbiwgb2xkV2F5cG9pbnRzKSxcbiAgICAgIG9sZExhYmVsTGluZUluZGV4ID0gYXR0YWNobWVudC5zZWdtZW50SW5kZXgsXG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA9IGZpbmROZXdMaW5lU3RhcnRJbmRleChvbGRXYXlwb2ludHMsIG5ld1dheXBvaW50cywgYXR0YWNobWVudCwgaGludHMpO1xuXG5cbiAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlblxuICAvLyBUT0RPKEBqYW5zdHVlbW1lbCk6IHRocm93IGFuIGVycm9yIGhlcmUgd2hlbiBjb25uZWN0aW9uU2VnbWVudE1vdmUgaXMgcmVmYWN0b3JlZFxuICBpZiAobmV3TGFiZWxMaW5lSW5kZXggPCAwIHx8XG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA+IG5ld1dheXBvaW50cy5sZW5ndGggLSAyIHx8XG4gICAgICBuZXdMYWJlbExpbmVJbmRleCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBvbGRQb3NpdGlvbjtcbiAgfVxuXG4gIHZhciBvbGRMYWJlbExpbmUgPSBnZXRMaW5lKG9sZFdheXBvaW50cywgb2xkTGFiZWxMaW5lSW5kZXgpLFxuICAgICAgbmV3TGFiZWxMaW5lID0gZ2V0TGluZShuZXdXYXlwb2ludHMsIG5ld0xhYmVsTGluZUluZGV4KSxcbiAgICAgIG9sZEZvb3QgPSBhdHRhY2htZW50LnBvc2l0aW9uO1xuXG4gIHZhciByZWxhdGl2ZUZvb3RQb3NpdGlvbiA9IGdldFJlbGF0aXZlRm9vdFBvc2l0aW9uKG9sZExhYmVsTGluZSwgb2xkRm9vdCksXG4gICAgICBhbmdsZURlbHRhID0gZ2V0QW5nbGVEZWx0YShvbGRMYWJlbExpbmUsIG5ld0xhYmVsTGluZSk7XG5cbiAgLy8gc3BlY2lhbCBydWxlIGlmIGxhYmVsIG9uIGJlbmRwb2ludFxuICBpZiAoYXR0YWNobWVudC50eXBlID09PSAnYmVuZHBvaW50Jykge1xuXG4gICAgdmFyIG9mZnNldCA9IG5ld1dheXBvaW50cy5sZW5ndGggLSBvbGRXYXlwb2ludHMubGVuZ3RoLFxuICAgICAgICBvbGRCZW5kcG9pbnRJbmRleCA9IGF0dGFjaG1lbnQuYmVuZHBvaW50SW5kZXgsXG4gICAgICAgIG9sZEJlbmRwb2ludCA9IG9sZFdheXBvaW50c1tvbGRCZW5kcG9pbnRJbmRleF07XG5cbiAgICAvLyBiZW5kcG9pbnQgcG9zaXRpb24gaGFzbid0IGNoYW5nZWQsIHJldHVybiBzYW1lIHBvc2l0aW9uXG4gICAgaWYgKG5ld1dheXBvaW50cy5pbmRleE9mKG9sZEJlbmRwb2ludCkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gb2xkUG9zaXRpb247XG4gICAgfVxuXG4gICAgLy8gbmV3IGJlbmRwb2ludCBhbmQgb2xkIGJlbmRwb2ludCBoYXZlIHNhbWUgaW5kZXgsIHRoZW4ganVzdCByZXR1cm4gdGhlIG9mZnNldFxuICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgIHZhciBuZXdCZW5kcG9pbnQgPSBuZXdXYXlwb2ludHNbb2xkQmVuZHBvaW50SW5kZXhdO1xuXG4gICAgICBkeCA9IG5ld0JlbmRwb2ludC54IC0gYXR0YWNobWVudC5wb3NpdGlvbi54LFxuICAgICAgZHkgPSBuZXdCZW5kcG9pbnQueSAtIGF0dGFjaG1lbnQucG9zaXRpb24ueTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVsdGE6IHtcbiAgICAgICAgICB4OiBkeCxcbiAgICAgICAgICB5OiBkeVxuICAgICAgICB9LFxuICAgICAgICBwb2ludDoge1xuICAgICAgICAgIHg6IHBvc2l0aW9uLnggKyBkeCxcbiAgICAgICAgICB5OiBwb3NpdGlvbi55ICsgZHlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpZiBiZW5kcG9pbnRzIGdldCByZW1vdmVkXG4gICAgaWYgKG9mZnNldCA8IDAgJiYgb2xkQmVuZHBvaW50SW5kZXggIT09IDAgJiYgb2xkQmVuZHBvaW50SW5kZXggPCBvbGRXYXlwb2ludHMubGVuZ3RoIC0gMSkge1xuICAgICAgcmVsYXRpdmVGb290UG9zaXRpb24gPSByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQob2xkV2F5cG9pbnRzLCBvbGRCZW5kcG9pbnRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0Zvb3QgPSB7XG4gICAgeDogKG5ld0xhYmVsTGluZVsxXS54IC0gbmV3TGFiZWxMaW5lWzBdLngpICogcmVsYXRpdmVGb290UG9zaXRpb24gKyBuZXdMYWJlbExpbmVbMF0ueCxcbiAgICB5OiAobmV3TGFiZWxMaW5lWzFdLnkgLSBuZXdMYWJlbExpbmVbMF0ueSkgKiByZWxhdGl2ZUZvb3RQb3NpdGlvbiArIG5ld0xhYmVsTGluZVswXS55XG4gIH07XG5cbiAgLy8gdGhlIHJvdGF0ZWQgdmVjdG9yIHRvIGxhYmVsXG4gIHZhciBuZXdMYWJlbFZlY3RvciA9IHJvdGF0ZVZlY3Rvcih7XG4gICAgeDogcG9zaXRpb24ueCAtIG9sZEZvb3QueCxcbiAgICB5OiBwb3NpdGlvbi55IC0gb2xkRm9vdC55XG4gIH0sIGFuZ2xlRGVsdGEpO1xuXG4gIC8vIHRoZSBuZXcgcmVsYXRpdmUgcG9zaXRpb25cbiAgZHggPSBuZXdGb290LnggKyBuZXdMYWJlbFZlY3Rvci54IC0gcG9zaXRpb24ueDtcbiAgZHkgPSBuZXdGb290LnkgKyBuZXdMYWJlbFZlY3Rvci55IC0gcG9zaXRpb24ueTtcblxuICByZXR1cm4ge1xuICAgIHBvaW50OiByb3VuZFBvaW50KG5ld0Zvb3QpLFxuICAgIGRlbHRhOiByb3VuZFBvaW50KHtcbiAgICAgIHg6IGR4LFxuICAgICAgeTogZHlcbiAgICB9KVxuICB9O1xufVxuXG5cbi8vIEhFTFBFUlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiByZWxhdGl2ZVBvc2l0aW9uTWlkV2F5cG9pbnQod2F5cG9pbnRzLCBpZHgpIHtcblxuICB2YXIgZGlzdGFuY2VTZWdtZW50MSA9IGdldERpc3RhbmNlUG9pbnRQb2ludCh3YXlwb2ludHNbaWR4IC0gMV0sIHdheXBvaW50c1tpZHhdKSxcbiAgICAgIGRpc3RhbmNlU2VnbWVudDIgPSBnZXREaXN0YW5jZVBvaW50UG9pbnQod2F5cG9pbnRzW2lkeF0sIHdheXBvaW50c1tpZHggKyAxXSk7XG5cbiAgdmFyIHJlbGF0aXZlUG9zaXRpb24gPSBkaXN0YW5jZVNlZ21lbnQxIC8gKGRpc3RhbmNlU2VnbWVudDEgKyBkaXN0YW5jZVNlZ21lbnQyKTtcblxuICByZXR1cm4gcmVsYXRpdmVQb3NpdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0QW5nbGVEZWx0YShsMSwgbDIpIHtcbiAgdmFyIGExID0gZ2V0QW5nbGUobDEpLFxuICAgICAgYTIgPSBnZXRBbmdsZShsMik7XG4gIHJldHVybiBhMiAtIGExO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5lKHdheXBvaW50cywgaWR4KSB7XG4gIHJldHVybiBbIHdheXBvaW50c1tpZHhdLCB3YXlwb2ludHNbaWR4ICsgMV0gXTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVsYXRpdmVGb290UG9zaXRpb24obGluZSwgZm9vdCkge1xuXG4gIHZhciBsZW5ndGggPSBnZXREaXN0YW5jZVBvaW50UG9pbnQobGluZVswXSwgbGluZVsxXSksXG4gICAgICBsZW5ndGhUb0Zvb3QgPSBnZXREaXN0YW5jZVBvaW50UG9pbnQobGluZVswXSwgZm9vdCk7XG5cbiAgcmV0dXJuIGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGhUb0Zvb3QgLyBsZW5ndGg7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LayoutUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineAttachmentUtil.js":
/*!*********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineAttachmentUtil.js ***!
\*********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getAttachment: () => (/* binding */ getAttachment)\n/* harmony export */ });\n/**\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n *\n * @typedef { {\n* type: 'bendpoint' | 'segment';\n* position: Point;\n* segmentIndex: number;\n* bendpointIndex?: number;\n* relativeLocation?: number;\n* } } Attachment\n*/\n\nvar sqrt = Math.sqrt,\n min = Math.min,\n max = Math.max,\n abs = Math.abs;\n\n/**\n * Calculate the square (power to two) of a number.\n *\n * @param {number} n\n *\n * @return {number}\n */\nfunction sq(n) {\n return Math.pow(n, 2);\n}\n\n/**\n * Get distance between two points.\n *\n * @param {Point} p1\n * @param {Point} p2\n *\n * @return {number}\n */\nfunction getDistance(p1, p2) {\n return sqrt(sq(p1.x - p2.x) + sq(p1.y - p2.y));\n}\n\n/**\n * Return the attachment of the given point on the specified line.\n *\n * The attachment is either a bendpoint (attached to the given point)\n * or segment (attached to a location on a line segment) attachment:\n *\n * ```javascript\n * var pointAttachment = {\n * type: 'bendpoint',\n * bendpointIndex: 3,\n * position: { x: 10, y: 10 } // the attach point on the line\n * };\n *\n * var segmentAttachment = {\n * type: 'segment',\n * segmentIndex: 2,\n * relativeLocation: 0.31, // attach point location between 0 (at start) and 1 (at end)\n * position: { x: 10, y: 10 } // the attach point on the line\n * };\n * ```\n *\n * @param {Point} point\n * @param {Point[]} line\n *\n * @return {Attachment}\n */\nfunction getAttachment(point, line) {\n\n var idx = 0,\n segmentStart,\n segmentEnd,\n segmentStartDistance,\n segmentEndDistance,\n attachmentPosition,\n minDistance,\n intersections,\n attachment,\n attachmentDistance,\n closestAttachmentDistance,\n closestAttachment;\n\n for (idx = 0; idx < line.length - 1; idx++) {\n\n segmentStart = line[idx];\n segmentEnd = line[idx + 1];\n\n if (pointsEqual(segmentStart, segmentEnd)) {\n intersections = [ segmentStart ];\n } else {\n segmentStartDistance = getDistance(point, segmentStart);\n segmentEndDistance = getDistance(point, segmentEnd);\n\n minDistance = min(segmentStartDistance, segmentEndDistance);\n\n intersections = getCircleSegmentIntersections(segmentStart, segmentEnd, point, minDistance);\n }\n\n if (intersections.length < 1) {\n throw new Error('expected between [1, 2] circle -> line intersections');\n }\n\n // one intersection -> bendpoint attachment\n if (intersections.length === 1) {\n attachment = {\n type: 'bendpoint',\n position: intersections[0],\n segmentIndex: idx,\n bendpointIndex: pointsEqual(segmentStart, intersections[0]) ? idx : idx + 1\n };\n }\n\n // two intersections -> segment attachment\n if (intersections.length === 2) {\n\n attachmentPosition = mid(intersections[0], intersections[1]);\n\n attachment = {\n type: 'segment',\n position: attachmentPosition,\n segmentIndex: idx,\n relativeLocation: getDistance(segmentStart, attachmentPosition) / getDistance(segmentStart, segmentEnd)\n };\n }\n\n attachmentDistance = getDistance(attachment.position, point);\n\n if (!closestAttachment || closestAttachmentDistance > attachmentDistance) {\n closestAttachment = attachment;\n closestAttachmentDistance = attachmentDistance;\n }\n }\n\n return closestAttachment;\n}\n\n/**\n * Get the intersection between a circle and a line segment.\n *\n * @param {Point} s1 segment start\n * @param {Point} s2 segment end\n * @param {Point} cc circle center\n * @param {number} cr circle radius\n *\n * @return {Point[]} intersections\n */\nfunction getCircleSegmentIntersections(s1, s2, cc, cr) {\n\n var baX = s2.x - s1.x;\n var baY = s2.y - s1.y;\n var caX = cc.x - s1.x;\n var caY = cc.y - s1.y;\n\n var a = baX * baX + baY * baY;\n var bBy2 = baX * caX + baY * caY;\n var c = caX * caX + caY * caY - cr * cr;\n\n var pBy2 = bBy2 / a;\n var q = c / a;\n\n var disc = pBy2 * pBy2 - q;\n\n // check against negative value to work around\n // negative, very close to zero results (-4e-15)\n // being produced in some environments\n if (disc < 0 && disc > -0.000001) {\n disc = 0;\n }\n\n if (disc < 0) {\n return [];\n }\n\n // if disc == 0 ... dealt with later\n var tmpSqrt = sqrt(disc);\n var abScalingFactor1 = -pBy2 + tmpSqrt;\n var abScalingFactor2 = -pBy2 - tmpSqrt;\n\n var i1 = {\n x: s1.x - baX * abScalingFactor1,\n y: s1.y - baY * abScalingFactor1\n };\n\n if (disc === 0) { // abScalingFactor1 == abScalingFactor2\n return [ i1 ];\n }\n\n var i2 = {\n x: s1.x - baX * abScalingFactor2,\n y: s1.y - baY * abScalingFactor2\n };\n\n // return only points on line segment\n return [ i1, i2 ].filter(function(p) {\n return isPointInSegment(p, s1, s2);\n });\n}\n\n\nfunction isPointInSegment(p, segmentStart, segmentEnd) {\n return (\n fenced(p.x, segmentStart.x, segmentEnd.x) &&\n fenced(p.y, segmentStart.y, segmentEnd.y)\n );\n}\n\nfunction fenced(n, rangeStart, rangeEnd) {\n\n // use matching threshold to work around\n // precision errors in intersection computation\n\n return (\n n >= min(rangeStart, rangeEnd) - EQUAL_THRESHOLD &&\n n <= max(rangeStart, rangeEnd) + EQUAL_THRESHOLD\n );\n}\n\n/**\n * Calculate the mid between two points.\n *\n * @param {Point} p1\n * @param {Point} p2\n *\n * @return {Point}\n */\nfunction mid(p1, p2) {\n\n return {\n x: (p1.x + p2.x) / 2,\n y: (p1.y + p2.y) / 2\n };\n}\n\nvar EQUAL_THRESHOLD = 0.1;\n\nfunction pointsEqual(p1, p2) {\n\n return (\n abs(p1.x - p2.x) <= EQUAL_THRESHOLD &&\n abs(p1.y - p2.y) <= EQUAL_THRESHOLD\n );\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0xpbmVBdHRhY2htZW50VXRpbC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSxhQUFhLDJDQUEyQztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixlQUFlO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixlQUFlO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFZO0FBQ1o7QUFDTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLHVCQUF1Qjs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0xpbmVBdHRhY2htZW50VXRpbC5qcz9hYzJjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlBvaW50fSBQb2ludFxuICpcbiAqIEB0eXBlZGVmIHsge1xuKiAgIHR5cGU6ICdiZW5kcG9pbnQnIHwgJ3NlZ21lbnQnO1xuKiAgIHBvc2l0aW9uOiBQb2ludDtcbiogICBzZWdtZW50SW5kZXg6IG51bWJlcjtcbiogICBiZW5kcG9pbnRJbmRleD86IG51bWJlcjtcbiogICByZWxhdGl2ZUxvY2F0aW9uPzogbnVtYmVyO1xuKiB9IH0gQXR0YWNobWVudFxuKi9cblxudmFyIHNxcnQgPSBNYXRoLnNxcnQsXG4gICAgbWluID0gTWF0aC5taW4sXG4gICAgbWF4ID0gTWF0aC5tYXgsXG4gICAgYWJzID0gTWF0aC5hYnM7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgKHBvd2VyIHRvIHR3bykgb2YgYSBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNxKG4pIHtcbiAgcmV0dXJuIE1hdGgucG93KG4sIDIpO1xufVxuXG4vKipcbiAqIEdldCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcDFcbiAqIEBwYXJhbSB7UG9pbnR9IHAyXG4gKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIpIHtcbiAgcmV0dXJuIHNxcnQoc3EocDEueCAtIHAyLngpICsgc3EocDEueSAtIHAyLnkpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGF0dGFjaG1lbnQgb2YgdGhlIGdpdmVuIHBvaW50IG9uIHRoZSBzcGVjaWZpZWQgbGluZS5cbiAqXG4gKiBUaGUgYXR0YWNobWVudCBpcyBlaXRoZXIgYSBiZW5kcG9pbnQgKGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBwb2ludClcbiAqIG9yIHNlZ21lbnQgKGF0dGFjaGVkIHRvIGEgbG9jYXRpb24gb24gYSBsaW5lIHNlZ21lbnQpIGF0dGFjaG1lbnQ6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIHBvaW50QXR0YWNobWVudCA9IHtcbiAqICAgdHlwZTogJ2JlbmRwb2ludCcsXG4gKiAgIGJlbmRwb2ludEluZGV4OiAzLFxuICogICBwb3NpdGlvbjogeyB4OiAxMCwgeTogMTAgfSAvLyB0aGUgYXR0YWNoIHBvaW50IG9uIHRoZSBsaW5lXG4gKiB9O1xuICpcbiAqIHZhciBzZWdtZW50QXR0YWNobWVudCA9IHtcbiAqICAgdHlwZTogJ3NlZ21lbnQnLFxuICogICBzZWdtZW50SW5kZXg6IDIsXG4gKiAgIHJlbGF0aXZlTG9jYXRpb246IDAuMzEsIC8vIGF0dGFjaCBwb2ludCBsb2NhdGlvbiBiZXR3ZWVuIDAgKGF0IHN0YXJ0KSBhbmQgMSAoYXQgZW5kKVxuICogICBwb3NpdGlvbjogeyB4OiAxMCwgeTogMTAgfSAvLyB0aGUgYXR0YWNoIHBvaW50IG9uIHRoZSBsaW5lXG4gKiB9O1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtQb2ludH0gcG9pbnRcbiAqIEBwYXJhbSB7UG9pbnRbXX0gbGluZVxuICpcbiAqIEByZXR1cm4ge0F0dGFjaG1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRhY2htZW50KHBvaW50LCBsaW5lKSB7XG5cbiAgdmFyIGlkeCA9IDAsXG4gICAgICBzZWdtZW50U3RhcnQsXG4gICAgICBzZWdtZW50RW5kLFxuICAgICAgc2VnbWVudFN0YXJ0RGlzdGFuY2UsXG4gICAgICBzZWdtZW50RW5kRGlzdGFuY2UsXG4gICAgICBhdHRhY2htZW50UG9zaXRpb24sXG4gICAgICBtaW5EaXN0YW5jZSxcbiAgICAgIGludGVyc2VjdGlvbnMsXG4gICAgICBhdHRhY2htZW50LFxuICAgICAgYXR0YWNobWVudERpc3RhbmNlLFxuICAgICAgY2xvc2VzdEF0dGFjaG1lbnREaXN0YW5jZSxcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50O1xuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbGluZS5sZW5ndGggLSAxOyBpZHgrKykge1xuXG4gICAgc2VnbWVudFN0YXJ0ID0gbGluZVtpZHhdO1xuICAgIHNlZ21lbnRFbmQgPSBsaW5lW2lkeCArIDFdO1xuXG4gICAgaWYgKHBvaW50c0VxdWFsKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCkpIHtcbiAgICAgIGludGVyc2VjdGlvbnMgPSBbIHNlZ21lbnRTdGFydCBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWdtZW50U3RhcnREaXN0YW5jZSA9IGdldERpc3RhbmNlKHBvaW50LCBzZWdtZW50U3RhcnQpO1xuICAgICAgc2VnbWVudEVuZERpc3RhbmNlID0gZ2V0RGlzdGFuY2UocG9pbnQsIHNlZ21lbnRFbmQpO1xuXG4gICAgICBtaW5EaXN0YW5jZSA9IG1pbihzZWdtZW50U3RhcnREaXN0YW5jZSwgc2VnbWVudEVuZERpc3RhbmNlKTtcblxuICAgICAgaW50ZXJzZWN0aW9ucyA9IGdldENpcmNsZVNlZ21lbnRJbnRlcnNlY3Rpb25zKHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgcG9pbnQsIG1pbkRpc3RhbmNlKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGJldHdlZW4gWzEsIDJdIGNpcmNsZSAtPiBsaW5lIGludGVyc2VjdGlvbnMnKTtcbiAgICB9XG5cbiAgICAvLyBvbmUgaW50ZXJzZWN0aW9uIC0+IGJlbmRwb2ludCBhdHRhY2htZW50XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBhdHRhY2htZW50ID0ge1xuICAgICAgICB0eXBlOiAnYmVuZHBvaW50JyxcbiAgICAgICAgcG9zaXRpb246IGludGVyc2VjdGlvbnNbMF0sXG4gICAgICAgIHNlZ21lbnRJbmRleDogaWR4LFxuICAgICAgICBiZW5kcG9pbnRJbmRleDogcG9pbnRzRXF1YWwoc2VnbWVudFN0YXJ0LCBpbnRlcnNlY3Rpb25zWzBdKSA/IGlkeCA6IGlkeCArIDFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdHdvIGludGVyc2VjdGlvbnMgLT4gc2VnbWVudCBhdHRhY2htZW50XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID09PSAyKSB7XG5cbiAgICAgIGF0dGFjaG1lbnRQb3NpdGlvbiA9IG1pZChpbnRlcnNlY3Rpb25zWzBdLCBpbnRlcnNlY3Rpb25zWzFdKTtcblxuICAgICAgYXR0YWNobWVudCA9IHtcbiAgICAgICAgdHlwZTogJ3NlZ21lbnQnLFxuICAgICAgICBwb3NpdGlvbjogYXR0YWNobWVudFBvc2l0aW9uLFxuICAgICAgICBzZWdtZW50SW5kZXg6IGlkeCxcbiAgICAgICAgcmVsYXRpdmVMb2NhdGlvbjogZ2V0RGlzdGFuY2Uoc2VnbWVudFN0YXJ0LCBhdHRhY2htZW50UG9zaXRpb24pIC8gZ2V0RGlzdGFuY2Uoc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhdHRhY2htZW50RGlzdGFuY2UgPSBnZXREaXN0YW5jZShhdHRhY2htZW50LnBvc2l0aW9uLCBwb2ludCk7XG5cbiAgICBpZiAoIWNsb3Nlc3RBdHRhY2htZW50IHx8IGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UgPiBhdHRhY2htZW50RGlzdGFuY2UpIHtcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50ID0gYXR0YWNobWVudDtcbiAgICAgIGNsb3Nlc3RBdHRhY2htZW50RGlzdGFuY2UgPSBhdHRhY2htZW50RGlzdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsb3Nlc3RBdHRhY2htZW50O1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gYSBjaXJjbGUgYW5kIGEgbGluZSBzZWdtZW50LlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHMxIHNlZ21lbnQgc3RhcnRcbiAqIEBwYXJhbSB7UG9pbnR9IHMyIHNlZ21lbnQgZW5kXG4gKiBAcGFyYW0ge1BvaW50fSBjYyBjaXJjbGUgY2VudGVyXG4gKiBAcGFyYW0ge251bWJlcn0gY3IgY2lyY2xlIHJhZGl1c1xuICpcbiAqIEByZXR1cm4ge1BvaW50W119IGludGVyc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0Q2lyY2xlU2VnbWVudEludGVyc2VjdGlvbnMoczEsIHMyLCBjYywgY3IpIHtcblxuICB2YXIgYmFYID0gczIueCAtIHMxLng7XG4gIHZhciBiYVkgPSBzMi55IC0gczEueTtcbiAgdmFyIGNhWCA9IGNjLnggLSBzMS54O1xuICB2YXIgY2FZID0gY2MueSAtIHMxLnk7XG5cbiAgdmFyIGEgPSBiYVggKiBiYVggKyBiYVkgKiBiYVk7XG4gIHZhciBiQnkyID0gYmFYICogY2FYICsgYmFZICogY2FZO1xuICB2YXIgYyA9IGNhWCAqIGNhWCArIGNhWSAqIGNhWSAtIGNyICogY3I7XG5cbiAgdmFyIHBCeTIgPSBiQnkyIC8gYTtcbiAgdmFyIHEgPSBjIC8gYTtcblxuICB2YXIgZGlzYyA9IHBCeTIgKiBwQnkyIC0gcTtcblxuICAvLyBjaGVjayBhZ2FpbnN0IG5lZ2F0aXZlIHZhbHVlIHRvIHdvcmsgYXJvdW5kXG4gIC8vIG5lZ2F0aXZlLCB2ZXJ5IGNsb3NlIHRvIHplcm8gcmVzdWx0cyAoLTRlLTE1KVxuICAvLyBiZWluZyBwcm9kdWNlZCBpbiBzb21lIGVudmlyb25tZW50c1xuICBpZiAoZGlzYyA8IDAgJiYgZGlzYyA+IC0wLjAwMDAwMSkge1xuICAgIGRpc2MgPSAwO1xuICB9XG5cbiAgaWYgKGRpc2MgPCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gaWYgZGlzYyA9PSAwIC4uLiBkZWFsdCB3aXRoIGxhdGVyXG4gIHZhciB0bXBTcXJ0ID0gc3FydChkaXNjKTtcbiAgdmFyIGFiU2NhbGluZ0ZhY3RvcjEgPSAtcEJ5MiArIHRtcFNxcnQ7XG4gIHZhciBhYlNjYWxpbmdGYWN0b3IyID0gLXBCeTIgLSB0bXBTcXJ0O1xuXG4gIHZhciBpMSA9IHtcbiAgICB4OiBzMS54IC0gYmFYICogYWJTY2FsaW5nRmFjdG9yMSxcbiAgICB5OiBzMS55IC0gYmFZICogYWJTY2FsaW5nRmFjdG9yMVxuICB9O1xuXG4gIGlmIChkaXNjID09PSAwKSB7IC8vIGFiU2NhbGluZ0ZhY3RvcjEgPT0gYWJTY2FsaW5nRmFjdG9yMlxuICAgIHJldHVybiBbIGkxIF07XG4gIH1cblxuICB2YXIgaTIgPSB7XG4gICAgeDogczEueCAtIGJhWCAqIGFiU2NhbGluZ0ZhY3RvcjIsXG4gICAgeTogczEueSAtIGJhWSAqIGFiU2NhbGluZ0ZhY3RvcjJcbiAgfTtcblxuICAvLyByZXR1cm4gb25seSBwb2ludHMgb24gbGluZSBzZWdtZW50XG4gIHJldHVybiBbIGkxLCBpMiBdLmZpbHRlcihmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuIGlzUG9pbnRJblNlZ21lbnQocCwgczEsIHMyKTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gaXNQb2ludEluU2VnbWVudChwLCBzZWdtZW50U3RhcnQsIHNlZ21lbnRFbmQpIHtcbiAgcmV0dXJuIChcbiAgICBmZW5jZWQocC54LCBzZWdtZW50U3RhcnQueCwgc2VnbWVudEVuZC54KSAmJlxuICAgIGZlbmNlZChwLnksIHNlZ21lbnRTdGFydC55LCBzZWdtZW50RW5kLnkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZlbmNlZChuLCByYW5nZVN0YXJ0LCByYW5nZUVuZCkge1xuXG4gIC8vIHVzZSBtYXRjaGluZyB0aHJlc2hvbGQgdG8gd29yayBhcm91bmRcbiAgLy8gcHJlY2lzaW9uIGVycm9ycyBpbiBpbnRlcnNlY3Rpb24gY29tcHV0YXRpb25cblxuICByZXR1cm4gKFxuICAgIG4gPj0gbWluKHJhbmdlU3RhcnQsIHJhbmdlRW5kKSAtIEVRVUFMX1RIUkVTSE9MRCAmJlxuICAgIG4gPD0gbWF4KHJhbmdlU3RhcnQsIHJhbmdlRW5kKSArIEVRVUFMX1RIUkVTSE9MRFxuICApO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbWlkIGJldHdlZW4gdHdvIHBvaW50cy5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBwMVxuICogQHBhcmFtIHtQb2ludH0gcDJcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZnVuY3Rpb24gbWlkKHAxLCBwMikge1xuXG4gIHJldHVybiB7XG4gICAgeDogKHAxLnggKyBwMi54KSAvIDIsXG4gICAgeTogKHAxLnkgKyBwMi55KSAvIDJcbiAgfTtcbn1cblxudmFyIEVRVUFMX1RIUkVTSE9MRCA9IDAuMTtcblxuZnVuY3Rpb24gcG9pbnRzRXF1YWwocDEsIHAyKSB7XG5cbiAgcmV0dXJuIChcbiAgICBhYnMocDEueCAtIHAyLngpIDw9IEVRVUFMX1RIUkVTSE9MRCAmJlxuICAgIGFicyhwMS55IC0gcDIueSkgPD0gRVFVQUxfVEhSRVNIT0xEXG4gICk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineAttachmentUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineIntersect.js":
/*!****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineIntersect.js ***!
\****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lineIntersect)\n/* harmony export */ });\n/**\n * @typedef {import('diagram-js/lib/util/Types').Point} Point\n */\n\n/**\n * Returns the intersection between two line segments a and b.\n *\n * @param {Point} l1s\n * @param {Point} l1e\n * @param {Point} l2s\n * @param {Point} l2e\n *\n * @return {Point}\n */\nfunction lineIntersect(l1s, l1e, l2s, l2e) {\n\n // if the lines intersect, the result contains the x and y of the\n // intersection (treating the lines as infinite) and booleans for\n // whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, c, numerator;\n\n denominator = ((l2e.y - l2s.y) * (l1e.x - l1s.x)) - ((l2e.x - l2s.x) * (l1e.y - l1s.y));\n\n if (denominator == 0) {\n return null;\n }\n\n a = l1s.y - l2s.y;\n b = l1s.x - l2s.x;\n numerator = ((l2e.x - l2s.x) * a) - ((l2e.y - l2s.y) * b);\n\n c = numerator / denominator;\n\n // if we cast these lines infinitely in\n // both directions, they intersect here\n return {\n x: Math.round(l1s.x + (c * (l1e.x - l1s.x))),\n y: Math.round(l1s.y + (c * (l1e.y - l1s.y)))\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL0xpbmVJbnRlcnNlY3QuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0EsYUFBYSwyQ0FBMkM7QUFDeEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBWTtBQUNaO0FBQ2U7O0FBRWY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2JlaGF2aW9yL3V0aWwvTGluZUludGVyc2VjdC5qcz80MjY4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlBvaW50fSBQb2ludFxuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIGxpbmUgc2VnbWVudHMgYSBhbmQgYi5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBsMXNcbiAqIEBwYXJhbSB7UG9pbnR9IGwxZVxuICogQHBhcmFtIHtQb2ludH0gbDJzXG4gKiBAcGFyYW0ge1BvaW50fSBsMmVcbiAqXG4gKiBAcmV0dXJuIHtQb2ludH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZUludGVyc2VjdChsMXMsIGwxZSwgbDJzLCBsMmUpIHtcblxuICAvLyBpZiB0aGUgbGluZXMgaW50ZXJzZWN0LCB0aGUgcmVzdWx0IGNvbnRhaW5zIHRoZSB4IGFuZCB5IG9mIHRoZVxuICAvLyBpbnRlcnNlY3Rpb24gKHRyZWF0aW5nIHRoZSBsaW5lcyBhcyBpbmZpbml0ZSkgYW5kIGJvb2xlYW5zIGZvclxuICAvLyB3aGV0aGVyIGxpbmUgc2VnbWVudCAxIG9yIGxpbmUgc2VnbWVudCAyIGNvbnRhaW4gdGhlIHBvaW50XG4gIHZhciBkZW5vbWluYXRvciwgYSwgYiwgYywgbnVtZXJhdG9yO1xuXG4gIGRlbm9taW5hdG9yID0gKChsMmUueSAtIGwycy55KSAqIChsMWUueCAtIGwxcy54KSkgLSAoKGwyZS54IC0gbDJzLngpICogKGwxZS55IC0gbDFzLnkpKTtcblxuICBpZiAoZGVub21pbmF0b3IgPT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYSA9IGwxcy55IC0gbDJzLnk7XG4gIGIgPSBsMXMueCAtIGwycy54O1xuICBudW1lcmF0b3IgPSAoKGwyZS54IC0gbDJzLngpICogYSkgLSAoKGwyZS55IC0gbDJzLnkpICogYik7XG5cbiAgYyA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yO1xuXG4gIC8vIGlmIHdlIGNhc3QgdGhlc2UgbGluZXMgaW5maW5pdGVseSBpblxuICAvLyBib3RoIGRpcmVjdGlvbnMsIHRoZXkgaW50ZXJzZWN0IGhlcmVcbiAgcmV0dXJuIHtcbiAgICB4OiBNYXRoLnJvdW5kKGwxcy54ICsgKGMgKiAobDFlLnggLSBsMXMueCkpKSxcbiAgICB5OiBNYXRoLnJvdW5kKGwxcy55ICsgKGMgKiAobDFlLnkgLSBsMXMueSkpKVxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/LineIntersect.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/NonInterruptingUtil.js":
/*!**********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/NonInterruptingUtil.js ***!
\**********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NON_INTERRUPTING_EVENT_TYPES: () => (/* binding */ NON_INTERRUPTING_EVENT_TYPES),\n/* harmony export */ canBeNonInterrupting: () => (/* binding */ canBeNonInterrupting),\n/* harmony export */ getInterruptingProperty: () => (/* binding */ getInterruptingProperty)\n/* harmony export */ });\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\nconst NON_INTERRUPTING_EVENT_TYPES = [\n 'bpmn:MessageEventDefinition',\n 'bpmn:TimerEventDefinition',\n 'bpmn:EscalationEventDefinition',\n 'bpmn:ConditionalEventDefinition',\n 'bpmn:SignalEventDefinition'\n];\n\nfunction canBeNonInterrupting(shape) {\n\n const businessObject = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(shape);\n\n if (\n !(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(businessObject, 'bpmn:BoundaryEvent') &&\n !((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(businessObject, 'bpmn:StartEvent') && (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_1__.isEventSubProcess)(businessObject.$parent))\n ) {\n return false;\n }\n\n const eventDefinitions = businessObject.get('eventDefinitions');\n if (!eventDefinitions || !eventDefinitions.length) {\n return false;\n }\n\n return NON_INTERRUPTING_EVENT_TYPES.some(event => (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(eventDefinitions[0], event));\n}\n\nfunction getInterruptingProperty(shape) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(shape, 'bpmn:BoundaryEvent') ? 'cancelActivity' : 'isInterrupting';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL05vbkludGVycnVwdGluZ1V0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBNEQ7QUFDTzs7QUFFNUQ7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87O0FBRVAseUJBQXlCLGtFQUFpQjs7QUFFMUM7QUFDQSxLQUFLLG1EQUFFO0FBQ1AsTUFBTSxtREFBRSx1Q0FBdUMsK0RBQWlCO0FBQ2hFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0QsbURBQUU7QUFDdEQ7O0FBRU87QUFDUCxTQUFTLG1EQUFFO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9iZWhhdmlvci91dGlsL05vbkludGVycnVwdGluZ1V0aWwuanM/ODAxOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0V2ZW50U3ViUHJvY2VzcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvRGlVdGlsJztcbmltcG9ydCB7IGdldEJ1c2luZXNzT2JqZWN0LCBpcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuZXhwb3J0IGNvbnN0IE5PTl9JTlRFUlJVUFRJTkdfRVZFTlRfVFlQRVMgPSBbXG4gICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nLFxuICAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicsXG4gICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nLFxuICAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5CZU5vbkludGVycnVwdGluZyhzaGFwZSkge1xuXG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3Qoc2hhcGUpO1xuXG4gIGlmIChcbiAgICAhaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOkJvdW5kYXJ5RXZlbnQnKSAmJlxuICAgICEoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlN0YXJ0RXZlbnQnKSAmJiBpc0V2ZW50U3ViUHJvY2VzcyhidXNpbmVzc09iamVjdC4kcGFyZW50KSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpO1xuICBpZiAoIWV2ZW50RGVmaW5pdGlvbnMgfHwgIWV2ZW50RGVmaW5pdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIE5PTl9JTlRFUlJVUFRJTkdfRVZFTlRfVFlQRVMuc29tZShldmVudCA9PiBpcyhldmVudERlZmluaXRpb25zWzBdLCBldmVudCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJydXB0aW5nUHJvcGVydHkoc2hhcGUpIHtcbiAgcmV0dXJuIGlzKHNoYXBlLCAnYnBtbjpCb3VuZGFyeUV2ZW50JykgPyAnY2FuY2VsQWN0aXZpdHknIDogJ2lzSW50ZXJydXB0aW5nJztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/behavior/util/NonInterruptingUtil.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/AddLaneHandler.js":
/*!*******************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/AddLaneHandler.js ***!
\*******************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AddLaneHandler)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n/* harmony import */ var _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n/* harmony import */ var _util_DiUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/DiUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/DiUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\n *\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('../../space-tool/BpmnSpaceTool').default} SpaceTool\n */\n\n/**\n * A handler that allows us to add a new lane\n * above or below an existing one.\n *\n * @implements {CommandHandler}\n *\n * @param {Modeling} modeling\n * @param {SpaceTool} spaceTool\n */\nfunction AddLaneHandler(modeling, spaceTool) {\n this._modeling = modeling;\n this._spaceTool = spaceTool;\n}\n\nAddLaneHandler.$inject = [\n 'modeling',\n 'spaceTool'\n];\n\n\nAddLaneHandler.prototype.preExecute = function(context) {\n\n var spaceTool = this._spaceTool,\n modeling = this._modeling;\n\n var shape = context.shape,\n location = context.location;\n\n var lanesRoot = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.getLanesRoot)(shape);\n\n var isRoot = lanesRoot === shape,\n laneParent = isRoot ? shape : shape.parent;\n\n var existingChildLanes = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.getChildLanes)(laneParent);\n\n var isHorizontalLane = (0,_util_DiUtil__WEBPACK_IMPORTED_MODULE_1__.isHorizontal)(shape);\n\n // never mix up horizontal/vertical lanes\n if (isHorizontalLane) {\n if (location === 'left') {\n location = 'top';\n } else\n if (location === 'right') {\n location = 'bottom';\n }\n } else {\n if (location === 'top') {\n location = 'left';\n } else\n if (location === 'bottom') {\n location = 'right';\n }\n }\n\n // (0) add a lane if we currently got none and are adding to root\n if (!existingChildLanes.length) {\n var siblingPosition = isHorizontalLane ? {\n x: shape.x + _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION,\n y: shape.y,\n width: shape.width - _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION,\n height: shape.height\n } : {\n x: shape.x,\n y: shape.y + _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION,\n width: shape.width,\n height: shape.height - _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION\n };\n\n modeling.createShape(\n {\n type: 'bpmn:Lane',\n isHorizontal: isHorizontalLane\n },\n siblingPosition,\n laneParent\n );\n }\n\n // (1) collect affected elements to create necessary space\n var allAffected = [];\n\n (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_2__.eachElement)(lanesRoot, function(element) {\n allAffected.push(element);\n\n // handle element labels in the diagram root\n if (element.label) {\n allAffected.push(element.label);\n }\n\n if (element === shape) {\n return [];\n }\n\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_3__.filter)(element.children, function(c) {\n return c !== shape;\n });\n });\n\n var offset,\n lanePosition,\n spacePos,\n direction,\n axis;\n\n if (location === 'top') {\n offset = -120;\n lanePosition = shape.y;\n spacePos = lanePosition + 10;\n direction = 'n';\n axis = 'y';\n } else\n if (location === 'left') {\n offset = -120;\n lanePosition = shape.x;\n spacePos = lanePosition + 10;\n direction = 'w';\n axis = 'x';\n } else\n if (location === 'bottom') {\n offset = 120;\n lanePosition = shape.y + shape.height;\n spacePos = lanePosition - 10;\n direction = 's';\n axis = 'y';\n } else\n if (location === 'right') {\n offset = 120;\n lanePosition = shape.x + shape.width;\n spacePos = lanePosition - 10;\n direction = 'e';\n axis = 'x';\n }\n\n var adjustments = spaceTool.calculateAdjustments(allAffected, axis, offset, spacePos);\n\n var delta = isHorizontalLane ? { x: 0, y: offset } : { x: offset, y: 0 };\n\n spaceTool.makeSpace(\n adjustments.movingShapes,\n adjustments.resizingShapes,\n delta,\n direction,\n spacePos\n );\n\n // (2) create new lane at open space\n var newLanePosition = isHorizontalLane ? {\n x: shape.x + (isRoot ? _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION : 0),\n y: lanePosition - (location === 'top' ? 120 : 0),\n width: shape.width - (isRoot ? _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION : 0),\n height: 120\n } : {\n x: lanePosition - (location === 'left' ? 120 : 0),\n y: shape.y + (isRoot ? _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION : 0),\n width: 120,\n height: shape.height - (isRoot ? _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION : 0)\n };\n\n context.newLane = modeling.createShape(\n {\n type: 'bpmn:Lane',\n isHorizontal: isHorizontalLane\n },\n newLanePosition,\n laneParent\n );\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQWRkTGFuZUhhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFa0I7O0FBSW9COztBQU1aOztBQUlJOztBQUU5QjtBQUNBLGFBQWEseURBQXlEO0FBQ3RFO0FBQ0EsYUFBYSwrQkFBK0I7QUFDNUMsYUFBYSxrREFBa0Q7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxXQUFXO0FBQ3RCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsNERBQVk7O0FBRTlCO0FBQ0E7O0FBRUEsMkJBQTJCLDZEQUFhOztBQUV4Qyx5QkFBeUIsMERBQVk7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiw0REFBZ0I7QUFDbkM7QUFDQSwyQkFBMkIsNERBQWdCO0FBQzNDO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsbUJBQW1CLDREQUFnQjtBQUNuQztBQUNBLDZCQUE2Qiw0REFBZ0I7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFLHlFQUFXO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFdBQVcsZ0RBQU07QUFDakI7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLG1DQUFtQyxrQkFBa0IsSUFBSTs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQiw0REFBZ0I7QUFDM0M7QUFDQSxtQ0FBbUMsNERBQWdCO0FBQ25EO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsMkJBQTJCLDREQUFnQjtBQUMzQztBQUNBLHFDQUFxQyw0REFBZ0I7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvQWRkTGFuZUhhbmRsZXIuanM/M2NmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBmaWx0ZXJcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBlYWNoRWxlbWVudFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi91dGlsL0VsZW1lbnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0TGFuZXNSb290LFxuICBnZXRDaGlsZExhbmVzLFxuICBMQU5FX0lOREVOVEFUSU9OXG59IGZyb20gJy4uL3V0aWwvTGFuZVV0aWwnO1xuXG5pbXBvcnQge1xuICBpc0hvcml6b250YWxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9EaVV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEhhbmRsZXInKS5kZWZhdWx0fSBDb21tYW5kSGFuZGxlclxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL01vZGVsaW5nJykuZGVmYXVsdH0gTW9kZWxpbmdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3NwYWNlLXRvb2wvQnBtblNwYWNlVG9vbCcpLmRlZmF1bHR9IFNwYWNlVG9vbFxuICovXG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgYWxsb3dzIHVzIHRvIGFkZCBhIG5ldyBsYW5lXG4gKiBhYm92ZSBvciBiZWxvdyBhbiBleGlzdGluZyBvbmUuXG4gKlxuICogQGltcGxlbWVudHMge0NvbW1hbmRIYW5kbGVyfVxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1NwYWNlVG9vbH0gc3BhY2VUb29sXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFkZExhbmVIYW5kbGVyKG1vZGVsaW5nLCBzcGFjZVRvb2wpIHtcbiAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgdGhpcy5fc3BhY2VUb29sID0gc3BhY2VUb29sO1xufVxuXG5BZGRMYW5lSGFuZGxlci4kaW5qZWN0ID0gW1xuICAnbW9kZWxpbmcnLFxuICAnc3BhY2VUb29sJ1xuXTtcblxuXG5BZGRMYW5lSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgc3BhY2VUb29sID0gdGhpcy5fc3BhY2VUb29sLFxuICAgICAgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbG9jYXRpb24gPSBjb250ZXh0LmxvY2F0aW9uO1xuXG4gIHZhciBsYW5lc1Jvb3QgPSBnZXRMYW5lc1Jvb3Qoc2hhcGUpO1xuXG4gIHZhciBpc1Jvb3QgPSBsYW5lc1Jvb3QgPT09IHNoYXBlLFxuICAgICAgbGFuZVBhcmVudCA9IGlzUm9vdCA/IHNoYXBlIDogc2hhcGUucGFyZW50O1xuXG4gIHZhciBleGlzdGluZ0NoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKGxhbmVQYXJlbnQpO1xuXG4gIHZhciBpc0hvcml6b250YWxMYW5lID0gaXNIb3Jpem9udGFsKHNoYXBlKTtcblxuICAvLyBuZXZlciBtaXggdXAgaG9yaXpvbnRhbC92ZXJ0aWNhbCBsYW5lc1xuICBpZiAoaXNIb3Jpem9udGFsTGFuZSkge1xuICAgIGlmIChsb2NhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBsb2NhdGlvbiA9ICd0b3AnO1xuICAgIH0gZWxzZVxuICAgIGlmIChsb2NhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgbG9jYXRpb24gPSAnYm90dG9tJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGxvY2F0aW9uID09PSAndG9wJykge1xuICAgICAgbG9jYXRpb24gPSAnbGVmdCc7XG4gICAgfSBlbHNlXG4gICAgaWYgKGxvY2F0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgbG9jYXRpb24gPSAncmlnaHQnO1xuICAgIH1cbiAgfVxuXG4gIC8vICgwKSBhZGQgYSBsYW5lIGlmIHdlIGN1cnJlbnRseSBnb3Qgbm9uZSBhbmQgYXJlIGFkZGluZyB0byByb290XG4gIGlmICghZXhpc3RpbmdDaGlsZExhbmVzLmxlbmd0aCkge1xuICAgIHZhciBzaWJsaW5nUG9zaXRpb24gPSBpc0hvcml6b250YWxMYW5lID8ge1xuICAgICAgeDogc2hhcGUueCArIExBTkVfSU5ERU5UQVRJT04sXG4gICAgICB5OiBzaGFwZS55LFxuICAgICAgd2lkdGg6IHNoYXBlLndpZHRoIC0gTEFORV9JTkRFTlRBVElPTixcbiAgICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0XG4gICAgfSA6IHtcbiAgICAgIHg6IHNoYXBlLngsXG4gICAgICB5OiBzaGFwZS55ICsgTEFORV9JTkRFTlRBVElPTixcbiAgICAgIHdpZHRoOiBzaGFwZS53aWR0aCxcbiAgICAgIGhlaWdodDogc2hhcGUuaGVpZ2h0IC0gTEFORV9JTkRFTlRBVElPTlxuICAgIH07XG5cbiAgICBtb2RlbGluZy5jcmVhdGVTaGFwZShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2JwbW46TGFuZScsXG4gICAgICAgIGlzSG9yaXpvbnRhbDogaXNIb3Jpem9udGFsTGFuZVxuICAgICAgfSxcbiAgICAgIHNpYmxpbmdQb3NpdGlvbixcbiAgICAgIGxhbmVQYXJlbnRcbiAgICApO1xuICB9XG5cbiAgLy8gKDEpIGNvbGxlY3QgYWZmZWN0ZWQgZWxlbWVudHMgdG8gY3JlYXRlIG5lY2Vzc2FyeSBzcGFjZVxuICB2YXIgYWxsQWZmZWN0ZWQgPSBbXTtcblxuICBlYWNoRWxlbWVudChsYW5lc1Jvb3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBhbGxBZmZlY3RlZC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgLy8gaGFuZGxlIGVsZW1lbnQgbGFiZWxzIGluIHRoZSBkaWFncmFtIHJvb3RcbiAgICBpZiAoZWxlbWVudC5sYWJlbCkge1xuICAgICAgYWxsQWZmZWN0ZWQucHVzaChlbGVtZW50LmxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCA9PT0gc2hhcGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKGVsZW1lbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGMpIHtcbiAgICAgIHJldHVybiBjICE9PSBzaGFwZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmFyIG9mZnNldCxcbiAgICAgIGxhbmVQb3NpdGlvbixcbiAgICAgIHNwYWNlUG9zLFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgYXhpcztcblxuICBpZiAobG9jYXRpb24gPT09ICd0b3AnKSB7XG4gICAgb2Zmc2V0ID0gLTEyMDtcbiAgICBsYW5lUG9zaXRpb24gPSBzaGFwZS55O1xuICAgIHNwYWNlUG9zID0gbGFuZVBvc2l0aW9uICsgMTA7XG4gICAgZGlyZWN0aW9uID0gJ24nO1xuICAgIGF4aXMgPSAneSc7XG4gIH0gZWxzZVxuICBpZiAobG9jYXRpb24gPT09ICdsZWZ0Jykge1xuICAgIG9mZnNldCA9IC0xMjA7XG4gICAgbGFuZVBvc2l0aW9uID0gc2hhcGUueDtcbiAgICBzcGFjZVBvcyA9IGxhbmVQb3NpdGlvbiArIDEwO1xuICAgIGRpcmVjdGlvbiA9ICd3JztcbiAgICBheGlzID0gJ3gnO1xuICB9IGVsc2VcbiAgaWYgKGxvY2F0aW9uID09PSAnYm90dG9tJykge1xuICAgIG9mZnNldCA9IDEyMDtcbiAgICBsYW5lUG9zaXRpb24gPSBzaGFwZS55ICsgc2hhcGUuaGVpZ2h0O1xuICAgIHNwYWNlUG9zID0gbGFuZVBvc2l0aW9uIC0gMTA7XG4gICAgZGlyZWN0aW9uID0gJ3MnO1xuICAgIGF4aXMgPSAneSc7XG4gIH0gZWxzZVxuICBpZiAobG9jYXRpb24gPT09ICdyaWdodCcpIHtcbiAgICBvZmZzZXQgPSAxMjA7XG4gICAgbGFuZVBvc2l0aW9uID0gc2hhcGUueCArIHNoYXBlLndpZHRoO1xuICAgIHNwYWNlUG9zID0gbGFuZVBvc2l0aW9uIC0gMTA7XG4gICAgZGlyZWN0aW9uID0gJ2UnO1xuICAgIGF4aXMgPSAneCc7XG4gIH1cblxuICB2YXIgYWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoYWxsQWZmZWN0ZWQsIGF4aXMsIG9mZnNldCwgc3BhY2VQb3MpO1xuXG4gIHZhciBkZWx0YSA9IGlzSG9yaXpvbnRhbExhbmUgPyB7IHg6IDAsIHk6IG9mZnNldCB9IDogeyB4OiBvZmZzZXQsIHk6IDAgfTtcblxuICBzcGFjZVRvb2wubWFrZVNwYWNlKFxuICAgIGFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcyxcbiAgICBhZGp1c3RtZW50cy5yZXNpemluZ1NoYXBlcyxcbiAgICBkZWx0YSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BhY2VQb3NcbiAgKTtcblxuICAvLyAoMikgY3JlYXRlIG5ldyBsYW5lIGF0IG9wZW4gc3BhY2VcbiAgdmFyIG5ld0xhbmVQb3NpdGlvbiA9IGlzSG9yaXpvbnRhbExhbmUgPyB7XG4gICAgeDogc2hhcGUueCArIChpc1Jvb3QgPyBMQU5FX0lOREVOVEFUSU9OIDogMCksXG4gICAgeTogbGFuZVBvc2l0aW9uIC0gKGxvY2F0aW9uID09PSAndG9wJyA/IDEyMCA6IDApLFxuICAgIHdpZHRoOiBzaGFwZS53aWR0aCAtIChpc1Jvb3QgPyBMQU5FX0lOREVOVEFUSU9OIDogMCksXG4gICAgaGVpZ2h0OiAxMjBcbiAgfSA6IHtcbiAgICB4OiBsYW5lUG9zaXRpb24gLSAobG9jYXRpb24gPT09ICdsZWZ0JyA/IDEyMCA6IDApLFxuICAgIHk6IHNoYXBlLnkgKyAoaXNSb290ID8gTEFORV9JTkRFTlRBVElPTiA6IDApLFxuICAgIHdpZHRoOiAxMjAsXG4gICAgaGVpZ2h0OiBzaGFwZS5oZWlnaHQgLSAoaXNSb290ID8gTEFORV9JTkRFTlRBVElPTiA6IDApXG4gIH07XG5cbiAgY29udGV4dC5uZXdMYW5lID0gbW9kZWxpbmcuY3JlYXRlU2hhcGUoXG4gICAge1xuICAgICAgdHlwZTogJ2JwbW46TGFuZScsXG4gICAgICBpc0hvcml6b250YWw6IGlzSG9yaXpvbnRhbExhbmVcbiAgICB9LFxuICAgIG5ld0xhbmVQb3NpdGlvbixcbiAgICBsYW5lUGFyZW50XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/AddLaneHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/IdClaimHandler.js":
/*!*******************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/IdClaimHandler.js ***!
\*******************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ IdClaimHandler)\n/* harmony export */ });\n/**\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\n *\n * @typedef {import('../../../model/Types').Moddle} Moddle\n */\n\n/**\n * @implements {CommandHandler}\n *\n * @param {Moddle} moddle\n */\nfunction IdClaimHandler(moddle) {\n this._moddle = moddle;\n}\n\nIdClaimHandler.$inject = [ 'moddle' ];\n\n\nIdClaimHandler.prototype.execute = function(context) {\n var ids = this._moddle.ids,\n id = context.id,\n element = context.element,\n claiming = context.claiming;\n\n if (claiming) {\n ids.claim(id, element);\n } else {\n ids.unclaim(id);\n }\n\n return [];\n};\n\n/**\n * Command revert implementation.\n */\nIdClaimHandler.prototype.revert = function(context) {\n var ids = this._moddle.ids,\n id = context.id,\n element = context.element,\n claiming = context.claiming;\n\n if (claiming) {\n ids.unclaim(id);\n } else {\n ids.claim(id, element);\n }\n\n return [];\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvSWRDbGFpbUhhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0EsYUFBYSx5REFBeUQ7QUFDdEU7QUFDQSxhQUFhLHVDQUF1QztBQUNwRDs7QUFFQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNlO0FBQ2Y7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL0lkQ2xhaW1IYW5kbGVyLmpzPzkwN2YiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRIYW5kbGVyJykuZGVmYXVsdH0gQ29tbWFuZEhhbmRsZXJcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi9tb2RlbC9UeXBlcycpLk1vZGRsZX0gTW9kZGxlXG4gKi9cblxuLyoqXG4gKiBAaW1wbGVtZW50cyB7Q29tbWFuZEhhbmRsZXJ9XG4gKlxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGRsZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJZENsYWltSGFuZGxlcihtb2RkbGUpIHtcbiAgdGhpcy5fbW9kZGxlID0gbW9kZGxlO1xufVxuXG5JZENsYWltSGFuZGxlci4kaW5qZWN0ID0gWyAnbW9kZGxlJyBdO1xuXG5cbklkQ2xhaW1IYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgaWRzID0gdGhpcy5fbW9kZGxlLmlkcyxcbiAgICAgIGlkID0gY29udGV4dC5pZCxcbiAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBjbGFpbWluZyA9IGNvbnRleHQuY2xhaW1pbmc7XG5cbiAgaWYgKGNsYWltaW5nKSB7XG4gICAgaWRzLmNsYWltKGlkLCBlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZHMudW5jbGFpbShpZCk7XG4gIH1cblxuICByZXR1cm4gW107XG59O1xuXG4vKipcbiAqIENvbW1hbmQgcmV2ZXJ0IGltcGxlbWVudGF0aW9uLlxuICovXG5JZENsYWltSGFuZGxlci5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICB2YXIgaWRzID0gdGhpcy5fbW9kZGxlLmlkcyxcbiAgICAgIGlkID0gY29udGV4dC5pZCxcbiAgICAgIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBjbGFpbWluZyA9IGNvbnRleHQuY2xhaW1pbmc7XG5cbiAgaWYgKGNsYWltaW5nKSB7XG4gICAgaWRzLnVuY2xhaW0oaWQpO1xuICB9IGVsc2Uge1xuICAgIGlkcy5jbGFpbShpZCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gW107XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/IdClaimHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/ResizeLaneHandler.js":
/*!**********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/ResizeLaneHandler.js ***!
\**********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ResizeLaneHandler)\n/* harmony export */ });\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/Elements */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Elements.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n/* harmony import */ var diagram_js_lib_features_resize_ResizeUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! diagram-js/lib/features/resize/ResizeUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/features/resize/ResizeUtil.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\n *\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('../../space-tool/BpmnSpaceTool').default} SpaceTool\n *\n * @typedef {import('../../../model/Types').Shape} Shape\n *\n * @typedef {import('diagram-js/lib/util/Types').Rect} Rect\n */\n\n/**\n * A handler that resizes a lane.\n *\n * @implements {CommandHandler}\n *\n * @param {Modeling} modeling\n * @param {SpaceTool} spaceTool\n */\nfunction ResizeLaneHandler(modeling, spaceTool) {\n this._modeling = modeling;\n this._spaceTool = spaceTool;\n}\n\nResizeLaneHandler.$inject = [\n 'modeling',\n 'spaceTool'\n];\n\n\nResizeLaneHandler.prototype.preExecute = function(context) {\n\n var shape = context.shape,\n newBounds = context.newBounds,\n balanced = context.balanced;\n\n if (balanced !== false) {\n this.resizeBalanced(shape, newBounds);\n } else {\n this.resizeSpace(shape, newBounds);\n }\n};\n\n\n/**\n * Resize balanced, adjusting next / previous lane sizes.\n *\n * @param {Shape} shape\n * @param {Rect} newBounds\n */\nResizeLaneHandler.prototype.resizeBalanced = function(shape, newBounds) {\n\n var modeling = this._modeling;\n\n var resizeNeeded = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.computeLanesResize)(shape, newBounds);\n\n // resize the lane\n modeling.resizeShape(shape, newBounds);\n\n // resize other lanes as needed\n resizeNeeded.forEach(function(r) {\n modeling.resizeShape(r.shape, r.newBounds);\n });\n};\n\n\n/**\n * Resize, making actual space and moving below / above elements.\n *\n * @param {Shape} shape\n * @param {Rect} newBounds\n */\nResizeLaneHandler.prototype.resizeSpace = function(shape, newBounds) {\n var spaceTool = this._spaceTool;\n\n var shapeTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.asTRBL)(shape),\n newTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_1__.asTRBL)(newBounds);\n\n var trblDiff = (0,diagram_js_lib_features_resize_ResizeUtil__WEBPACK_IMPORTED_MODULE_2__.substractTRBL)(newTrbl, shapeTrbl);\n\n var lanesRoot = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.getLanesRoot)(shape);\n\n var allAffected = [],\n allLanes = [];\n\n (0,diagram_js_lib_util_Elements__WEBPACK_IMPORTED_MODULE_3__.eachElement)(lanesRoot, function(element) {\n allAffected.push(element);\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__.is)(element, 'bpmn:Lane') || (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__.is)(element, 'bpmn:Participant')) {\n allLanes.push(element);\n }\n\n return element.children;\n });\n\n var change,\n spacePos,\n direction,\n offset,\n adjustments;\n\n if (trblDiff.bottom || trblDiff.top) {\n\n change = trblDiff.bottom || trblDiff.top;\n spacePos = shape.y + (trblDiff.bottom ? shape.height : 0) + (trblDiff.bottom ? -10 : 10);\n direction = trblDiff.bottom ? 's' : 'n';\n\n offset = trblDiff.top > 0 || trblDiff.bottom < 0 ? -change : change;\n\n adjustments = spaceTool.calculateAdjustments(allAffected, 'y', offset, spacePos);\n\n spaceTool.makeSpace(adjustments.movingShapes, adjustments.resizingShapes, { x: 0, y: change }, direction);\n }\n\n\n if (trblDiff.left || trblDiff.right) {\n\n change = trblDiff.right || trblDiff.left;\n spacePos = shape.x + (trblDiff.right ? shape.width : 0) + (trblDiff.right ? -10 : 100);\n direction = trblDiff.right ? 'e' : 'w';\n\n offset = trblDiff.left > 0 || trblDiff.right < 0 ? -change : change;\n\n adjustments = spaceTool.calculateAdjustments(allLanes, 'x', offset, spacePos);\n\n spaceTool.makeSpace(adjustments.movingShapes, adjustments.resizingShapes, { x: change, y: 0 }, direction);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvUmVzaXplTGFuZUhhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTZDOztBQUtuQjs7QUFJWTs7QUFJSTs7QUFJUzs7QUFFbkQ7QUFDQSxhQUFhLHlEQUF5RDtBQUN0RTtBQUNBLGFBQWEsK0JBQStCO0FBQzVDLGFBQWEsa0RBQWtEO0FBQy9EO0FBQ0EsYUFBYSxzQ0FBc0M7QUFDbkQ7QUFDQSxhQUFhLDBDQUEwQztBQUN2RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxXQUFXO0FBQ3RCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsTUFBTTtBQUNqQjtBQUNBOztBQUVBOztBQUVBLHFCQUFxQixrRUFBa0I7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isd0VBQU07QUFDeEIsZ0JBQWdCLHdFQUFNOztBQUV0QixpQkFBaUIsd0ZBQWE7O0FBRTlCLGtCQUFrQiw0REFBWTs7QUFFOUI7QUFDQTs7QUFFQSxFQUFFLHlFQUFXO0FBQ2I7O0FBRUEsUUFBUSxtREFBRSwwQkFBMEIsbURBQUU7QUFDdEM7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsZ0ZBQWdGLGlCQUFpQjtBQUNqRzs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGdGQUFnRixpQkFBaUI7QUFDakc7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9SZXNpemVMYW5lSGFuZGxlci5qcz8xZGFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBnZXRMYW5lc1Jvb3QsXG4gIGNvbXB1dGVMYW5lc1Jlc2l6ZVxufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuaW1wb3J0IHtcbiAgZWFjaEVsZW1lbnRcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9FbGVtZW50cyc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbmltcG9ydCB7XG4gIHN1YnN0cmFjdFRSQkxcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcmVzaXplL1Jlc2l6ZVV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEhhbmRsZXInKS5kZWZhdWx0fSBDb21tYW5kSGFuZGxlclxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL01vZGVsaW5nJykuZGVmYXVsdH0gTW9kZWxpbmdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3NwYWNlLXRvb2wvQnBtblNwYWNlVG9vbCcpLmRlZmF1bHR9IFNwYWNlVG9vbFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL21vZGVsL1R5cGVzJykuU2hhcGV9IFNoYXBlXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvdXRpbC9UeXBlcycpLlJlY3R9IFJlY3RcbiAqL1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IHJlc2l6ZXMgYSBsYW5lLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtDb21tYW5kSGFuZGxlcn1cbiAqXG4gKiBAcGFyYW0ge01vZGVsaW5nfSBtb2RlbGluZ1xuICogQHBhcmFtIHtTcGFjZVRvb2x9IHNwYWNlVG9vbFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemVMYW5lSGFuZGxlcihtb2RlbGluZywgc3BhY2VUb29sKSB7XG4gIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIHRoaXMuX3NwYWNlVG9vbCA9IHNwYWNlVG9vbDtcbn1cblxuUmVzaXplTGFuZUhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3NwYWNlVG9vbCdcbl07XG5cblxuUmVzaXplTGFuZUhhbmRsZXIucHJvdG90eXBlLnByZUV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHNoYXBlID0gY29udGV4dC5zaGFwZSxcbiAgICAgIG5ld0JvdW5kcyA9IGNvbnRleHQubmV3Qm91bmRzLFxuICAgICAgYmFsYW5jZWQgPSBjb250ZXh0LmJhbGFuY2VkO1xuXG4gIGlmIChiYWxhbmNlZCAhPT0gZmFsc2UpIHtcbiAgICB0aGlzLnJlc2l6ZUJhbGFuY2VkKHNoYXBlLCBuZXdCb3VuZHMpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVzaXplU3BhY2Uoc2hhcGUsIG5ld0JvdW5kcyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZXNpemUgYmFsYW5jZWQsIGFkanVzdGluZyBuZXh0IC8gcHJldmlvdXMgbGFuZSBzaXplcy5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICogQHBhcmFtIHtSZWN0fSBuZXdCb3VuZHNcbiAqL1xuUmVzaXplTGFuZUhhbmRsZXIucHJvdG90eXBlLnJlc2l6ZUJhbGFuY2VkID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcykge1xuXG4gIHZhciBtb2RlbGluZyA9IHRoaXMuX21vZGVsaW5nO1xuXG4gIHZhciByZXNpemVOZWVkZWQgPSBjb21wdXRlTGFuZXNSZXNpemUoc2hhcGUsIG5ld0JvdW5kcyk7XG5cbiAgLy8gcmVzaXplIHRoZSBsYW5lXG4gIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKHNoYXBlLCBuZXdCb3VuZHMpO1xuXG4gIC8vIHJlc2l6ZSBvdGhlciBsYW5lcyBhcyBuZWVkZWRcbiAgcmVzaXplTmVlZGVkLmZvckVhY2goZnVuY3Rpb24ocikge1xuICAgIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKHIuc2hhcGUsIHIubmV3Qm91bmRzKTtcbiAgfSk7XG59O1xuXG5cbi8qKlxuICogUmVzaXplLCBtYWtpbmcgYWN0dWFsIHNwYWNlIGFuZCBtb3ZpbmcgYmVsb3cgLyBhYm92ZSBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge1NoYXBlfSBzaGFwZVxuICogQHBhcmFtIHtSZWN0fSBuZXdCb3VuZHNcbiAqL1xuUmVzaXplTGFuZUhhbmRsZXIucHJvdG90eXBlLnJlc2l6ZVNwYWNlID0gZnVuY3Rpb24oc2hhcGUsIG5ld0JvdW5kcykge1xuICB2YXIgc3BhY2VUb29sID0gdGhpcy5fc3BhY2VUb29sO1xuXG4gIHZhciBzaGFwZVRyYmwgPSBhc1RSQkwoc2hhcGUpLFxuICAgICAgbmV3VHJibCA9IGFzVFJCTChuZXdCb3VuZHMpO1xuXG4gIHZhciB0cmJsRGlmZiA9IHN1YnN0cmFjdFRSQkwobmV3VHJibCwgc2hhcGVUcmJsKTtcblxuICB2YXIgbGFuZXNSb290ID0gZ2V0TGFuZXNSb290KHNoYXBlKTtcblxuICB2YXIgYWxsQWZmZWN0ZWQgPSBbXSxcbiAgICAgIGFsbExhbmVzID0gW107XG5cbiAgZWFjaEVsZW1lbnQobGFuZXNSb290LCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgYWxsQWZmZWN0ZWQucHVzaChlbGVtZW50KTtcblxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpMYW5lJykgfHwgaXMoZWxlbWVudCwgJ2JwbW46UGFydGljaXBhbnQnKSkge1xuICAgICAgYWxsTGFuZXMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudC5jaGlsZHJlbjtcbiAgfSk7XG5cbiAgdmFyIGNoYW5nZSxcbiAgICAgIHNwYWNlUG9zLFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgb2Zmc2V0LFxuICAgICAgYWRqdXN0bWVudHM7XG5cbiAgaWYgKHRyYmxEaWZmLmJvdHRvbSB8fCB0cmJsRGlmZi50b3ApIHtcblxuICAgIGNoYW5nZSA9IHRyYmxEaWZmLmJvdHRvbSB8fCB0cmJsRGlmZi50b3A7XG4gICAgc3BhY2VQb3MgPSBzaGFwZS55ICsgKHRyYmxEaWZmLmJvdHRvbSA/IHNoYXBlLmhlaWdodCA6IDApICsgKHRyYmxEaWZmLmJvdHRvbSA/IC0xMCA6IDEwKTtcbiAgICBkaXJlY3Rpb24gPSB0cmJsRGlmZi5ib3R0b20gPyAncycgOiAnbic7XG5cbiAgICBvZmZzZXQgPSB0cmJsRGlmZi50b3AgPiAwIHx8IHRyYmxEaWZmLmJvdHRvbSA8IDAgPyAtY2hhbmdlIDogY2hhbmdlO1xuXG4gICAgYWRqdXN0bWVudHMgPSBzcGFjZVRvb2wuY2FsY3VsYXRlQWRqdXN0bWVudHMoYWxsQWZmZWN0ZWQsICd5Jywgb2Zmc2V0LCBzcGFjZVBvcyk7XG5cbiAgICBzcGFjZVRvb2wubWFrZVNwYWNlKGFkanVzdG1lbnRzLm1vdmluZ1NoYXBlcywgYWRqdXN0bWVudHMucmVzaXppbmdTaGFwZXMsIHsgeDogMCwgeTogY2hhbmdlIH0sIGRpcmVjdGlvbik7XG4gIH1cblxuXG4gIGlmICh0cmJsRGlmZi5sZWZ0IHx8IHRyYmxEaWZmLnJpZ2h0KSB7XG5cbiAgICBjaGFuZ2UgPSB0cmJsRGlmZi5yaWdodCB8fCB0cmJsRGlmZi5sZWZ0O1xuICAgIHNwYWNlUG9zID0gc2hhcGUueCArICh0cmJsRGlmZi5yaWdodCA/IHNoYXBlLndpZHRoIDogMCkgKyAodHJibERpZmYucmlnaHQgPyAtMTAgOiAxMDApO1xuICAgIGRpcmVjdGlvbiA9IHRyYmxEaWZmLnJpZ2h0ID8gJ2UnIDogJ3cnO1xuXG4gICAgb2Zmc2V0ID0gdHJibERpZmYubGVmdCA+IDAgfHwgdHJibERpZmYucmlnaHQgPCAwID8gLWNoYW5nZSA6IGNoYW5nZTtcblxuICAgIGFkanVzdG1lbnRzID0gc3BhY2VUb29sLmNhbGN1bGF0ZUFkanVzdG1lbnRzKGFsbExhbmVzLCAneCcsIG9mZnNldCwgc3BhY2VQb3MpO1xuXG4gICAgc3BhY2VUb29sLm1ha2VTcGFjZShhZGp1c3RtZW50cy5tb3ZpbmdTaGFwZXMsIGFkanVzdG1lbnRzLnJlc2l6aW5nU2hhcGVzLCB7IHg6IGNoYW5nZSwgeTogMCB9LCBkaXJlY3Rpb24pO1xuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/ResizeLaneHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/SetColorHandler.js":
/*!********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/SetColorHandler.js ***!
\********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SetColorHandler)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/ModelUtil.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\r\n *\r\n * @typedef {import('diagram-js/lib/command/CommandStack').default} CommandStack\r\n *\r\n * @typedef {import('../../../model/Types').ModdleElement} ModdleElement\r\n */\r\n\r\nvar DEFAULT_COLORS = {\r\n fill: undefined,\r\n stroke: undefined\r\n};\r\n\r\n/**\r\n * @implements {CommandHandler}\r\n *\r\n * @param {CommandStack} commandStack\r\n */\r\nfunction SetColorHandler(commandStack) {\r\n this._commandStack = commandStack;\r\n\r\n this._normalizeColor = function(color) {\r\n\r\n // Remove color for falsy values.\r\n if (!color) {\r\n return undefined;\r\n }\r\n\r\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_0__.isString)(color)) {\r\n var hexColor = colorToHex(color);\r\n\r\n if (hexColor) {\r\n return hexColor;\r\n }\r\n }\r\n\r\n throw new Error('invalid color value: ' + color);\r\n };\r\n}\r\n\r\nSetColorHandler.$inject = [\r\n 'commandStack'\r\n];\r\n\r\n\r\nSetColorHandler.prototype.postExecute = function(context) {\r\n var elements = context.elements,\r\n colors = context.colors || DEFAULT_COLORS;\r\n\r\n var self = this;\r\n\r\n var di = {};\r\n\r\n if ('fill' in colors) {\r\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)(di, {\r\n 'background-color': this._normalizeColor(colors.fill) });\r\n }\r\n\r\n if ('stroke' in colors) {\r\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.assign)(di, {\r\n 'border-color': this._normalizeColor(colors.stroke) });\r\n }\r\n\r\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.forEach)(elements, function(element) {\r\n var assignedDi = (0,diagram_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.isConnection)(element) ? (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.pick)(di, [ 'border-color' ]) : di,\r\n elementDi = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getDi)(element);\r\n\r\n // TODO @barmac: remove once we drop bpmn.io properties\r\n ensureLegacySupport(assignedDi);\r\n\r\n if ((0,diagram_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.isLabel)(element)) {\r\n\r\n // set label colors as bpmndi:BPMNLabel#color\r\n self._commandStack.execute('element.updateModdleProperties', {\r\n element: element,\r\n moddleElement: elementDi.label,\r\n properties: {\r\n color: di['border-color']\r\n }\r\n });\r\n } else {\r\n\r\n // ignore non-compliant di\r\n if (!(0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.isAny)(elementDi, [ 'bpmndi:BPMNEdge', 'bpmndi:BPMNShape' ])) {\r\n return;\r\n }\r\n\r\n // set colors bpmndi:BPMNEdge or bpmndi:BPMNShape\r\n self._commandStack.execute('element.updateProperties', {\r\n element: element,\r\n properties: {\r\n di: assignedDi\r\n }\r\n });\r\n }\r\n });\r\n\r\n};\r\n\r\n/**\r\n * Convert color from rgb(a)/hsl to hex. Returns `null` for unknown color names\r\n * and for colors with alpha less than 1.0. This depends on ``\r\n * serialization of the `context.fillStyle`.\r\n * Cf. https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-fillstyle\r\n *\r\n * @example\r\n *\r\n * ```javascript\r\n * colorToHex('fuchsia'); // \"#ff00ff\"\r\n *\r\n * colorToHex('rgba(1, 2, 3, 0.4)'); // null\r\n * ```\r\n *\r\n * @param {string} color\r\n *\r\n * @return {string|null}\r\n */\r\nfunction colorToHex(color) {\r\n var context = document.createElement('canvas').getContext('2d');\r\n\r\n // (0) Start with transparent to account for browser default values.\r\n context.fillStyle = 'transparent';\r\n\r\n // (1) Assign color so that it's serialized.\r\n context.fillStyle = color;\r\n\r\n // (2) Return null for non-hex serialization result.\r\n return /^#[0-9a-fA-F]{6}$/.test(context.fillStyle) ? context.fillStyle : null;\r\n}\r\n\r\n/**\r\n * Add legacy properties if required.\r\n *\r\n * @param {ModdleElement} di\r\n */\r\nfunction ensureLegacySupport(di) {\r\n if ('border-color' in di) {\r\n di.stroke = di['border-color'];\r\n }\r\n\r\n if ('background-color' in di) {\r\n di.fill = di['background-color'];\r\n }\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvU2V0Q29sb3JIYW5kbGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFLa0I7QUFDbEI7QUFJaUM7QUFDakM7QUFHaUM7QUFDakM7QUFDNkQ7QUFDN0Q7QUFDQTtBQUNBLGFBQWEseURBQXlEO0FBQ3RFO0FBQ0EsYUFBYSx1REFBdUQ7QUFDcEU7QUFDQSxhQUFhLDhDQUE4QztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLGtEQUFRO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxnREFBTTtBQUNWLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdEQUFNO0FBQ1YsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQSxFQUFFLGlEQUFPO0FBQ1QscUJBQXFCLDJFQUFZLFlBQVksOENBQUk7QUFDakQsb0JBQW9CLHNEQUFLO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxzRUFBTztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQSxXQUFXLHNEQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TZXRDb2xvckhhbmRsZXIuanM/YmVhMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGFzc2lnbixcclxuICBmb3JFYWNoLFxyXG4gIGlzU3RyaW5nLFxyXG4gIHBpY2tcclxufSBmcm9tICdtaW4tZGFzaCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGdldERpLFxyXG4gIGlzQW55XHJcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBpc0xhYmVsXHJcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9MYWJlbFV0aWwnO1xyXG5cclxuaW1wb3J0IHsgaXNDb25uZWN0aW9uIH0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEhhbmRsZXInKS5kZWZhdWx0fSBDb21tYW5kSGFuZGxlclxyXG4gKlxyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRTdGFjaycpLmRlZmF1bHR9IENvbW1hbmRTdGFja1xyXG4gKlxyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi9tb2RlbC9UeXBlcycpLk1vZGRsZUVsZW1lbnR9IE1vZGRsZUVsZW1lbnRcclxuICovXHJcblxyXG52YXIgREVGQVVMVF9DT0xPUlMgPSB7XHJcbiAgZmlsbDogdW5kZWZpbmVkLFxyXG4gIHN0cm9rZTogdW5kZWZpbmVkXHJcbn07XHJcblxyXG4vKipcclxuICogQGltcGxlbWVudHMge0NvbW1hbmRIYW5kbGVyfVxyXG4gKlxyXG4gKiBAcGFyYW0ge0NvbW1hbmRTdGFja30gY29tbWFuZFN0YWNrXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZXRDb2xvckhhbmRsZXIoY29tbWFuZFN0YWNrKSB7XHJcbiAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xyXG5cclxuICB0aGlzLl9ub3JtYWxpemVDb2xvciA9IGZ1bmN0aW9uKGNvbG9yKSB7XHJcblxyXG4gICAgLy8gUmVtb3ZlIGNvbG9yIGZvciBmYWxzeSB2YWx1ZXMuXHJcbiAgICBpZiAoIWNvbG9yKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzU3RyaW5nKGNvbG9yKSkge1xyXG4gICAgICB2YXIgaGV4Q29sb3IgPSBjb2xvclRvSGV4KGNvbG9yKTtcclxuXHJcbiAgICAgIGlmIChoZXhDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBoZXhDb2xvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb2xvciB2YWx1ZTogJyArIGNvbG9yKTtcclxuICB9O1xyXG59XHJcblxyXG5TZXRDb2xvckhhbmRsZXIuJGluamVjdCA9IFtcclxuICAnY29tbWFuZFN0YWNrJ1xyXG5dO1xyXG5cclxuXHJcblNldENvbG9ySGFuZGxlci5wcm90b3R5cGUucG9zdEV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5lbGVtZW50cyxcclxuICAgICAgY29sb3JzID0gY29udGV4dC5jb2xvcnMgfHwgREVGQVVMVF9DT0xPUlM7XHJcblxyXG4gIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgdmFyIGRpID0ge307XHJcblxyXG4gIGlmICgnZmlsbCcgaW4gY29sb3JzKSB7XHJcbiAgICBhc3NpZ24oZGksIHtcclxuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiB0aGlzLl9ub3JtYWxpemVDb2xvcihjb2xvcnMuZmlsbCkgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoJ3N0cm9rZScgaW4gY29sb3JzKSB7XHJcbiAgICBhc3NpZ24oZGksIHtcclxuICAgICAgJ2JvcmRlci1jb2xvcic6IHRoaXMuX25vcm1hbGl6ZUNvbG9yKGNvbG9ycy5zdHJva2UpIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgdmFyIGFzc2lnbmVkRGkgPSBpc0Nvbm5lY3Rpb24oZWxlbWVudCkgPyBwaWNrKGRpLCBbICdib3JkZXItY29sb3InIF0pIDogZGksXHJcbiAgICAgICAgZWxlbWVudERpID0gZ2V0RGkoZWxlbWVudCk7XHJcblxyXG4gICAgLy8gVE9ETyBAYmFybWFjOiByZW1vdmUgb25jZSB3ZSBkcm9wIGJwbW4uaW8gcHJvcGVydGllc1xyXG4gICAgZW5zdXJlTGVnYWN5U3VwcG9ydChhc3NpZ25lZERpKTtcclxuXHJcbiAgICBpZiAoaXNMYWJlbChlbGVtZW50KSkge1xyXG5cclxuICAgICAgLy8gc2V0IGxhYmVsIGNvbG9ycyBhcyBicG1uZGk6QlBNTkxhYmVsI2NvbG9yXHJcbiAgICAgIHNlbGYuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICBtb2RkbGVFbGVtZW50OiBlbGVtZW50RGkubGFiZWwsXHJcbiAgICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgICAgY29sb3I6IGRpWydib3JkZXItY29sb3InXVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gaWdub3JlIG5vbi1jb21wbGlhbnQgZGlcclxuICAgICAgaWYgKCFpc0FueShlbGVtZW50RGksIFsgJ2JwbW5kaTpCUE1ORWRnZScsICdicG1uZGk6QlBNTlNoYXBlJyBdKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2V0IGNvbG9ycyBicG1uZGk6QlBNTkVkZ2Ugb3IgYnBtbmRpOkJQTU5TaGFwZVxyXG4gICAgICBzZWxmLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywge1xyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgICAgZGk6IGFzc2lnbmVkRGlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGNvbG9yIGZyb20gcmdiKGEpL2hzbCB0byBoZXguIFJldHVybnMgYG51bGxgIGZvciB1bmtub3duIGNvbG9yIG5hbWVzXHJcbiAqIGFuZCBmb3IgY29sb3JzIHdpdGggYWxwaGEgbGVzcyB0aGFuIDEuMC4gVGhpcyBkZXBlbmRzIG9uIGA8Y2FudmFzPmBcclxuICogc2VyaWFsaXphdGlvbiBvZiB0aGUgYGNvbnRleHQuZmlsbFN0eWxlYC5cclxuICogQ2YuIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NhbnZhcy5odG1sI2RvbS1jb250ZXh0LTJkLWZpbGxzdHlsZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBgYGBqYXZhc2NyaXB0XHJcbiAqIGNvbG9yVG9IZXgoJ2Z1Y2hzaWEnKTsgLy8gXCIjZmYwMGZmXCJcclxuICpcclxuICogY29sb3JUb0hleCgncmdiYSgxLCAyLCAzLCAwLjQpJyk7IC8vIG51bGxcclxuICogYGBgXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cclxuICovXHJcbmZ1bmN0aW9uIGNvbG9yVG9IZXgoY29sb3IpIHtcclxuICB2YXIgY29udGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gIC8vICgwKSBTdGFydCB3aXRoIHRyYW5zcGFyZW50IHRvIGFjY291bnQgZm9yIGJyb3dzZXIgZGVmYXVsdCB2YWx1ZXMuXHJcbiAgY29udGV4dC5maWxsU3R5bGUgPSAndHJhbnNwYXJlbnQnO1xyXG5cclxuICAvLyAoMSkgQXNzaWduIGNvbG9yIHNvIHRoYXQgaXQncyBzZXJpYWxpemVkLlxyXG4gIGNvbnRleHQuZmlsbFN0eWxlID0gY29sb3I7XHJcblxyXG4gIC8vICgyKSBSZXR1cm4gbnVsbCBmb3Igbm9uLWhleCBzZXJpYWxpemF0aW9uIHJlc3VsdC5cclxuICByZXR1cm4gL14jWzAtOWEtZkEtRl17Nn0kLy50ZXN0KGNvbnRleHQuZmlsbFN0eWxlKSA/IGNvbnRleHQuZmlsbFN0eWxlIDogbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFkZCBsZWdhY3kgcHJvcGVydGllcyBpZiByZXF1aXJlZC5cclxuICpcclxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBkaVxyXG4gKi9cclxuZnVuY3Rpb24gZW5zdXJlTGVnYWN5U3VwcG9ydChkaSkge1xyXG4gIGlmICgnYm9yZGVyLWNvbG9yJyBpbiBkaSkge1xyXG4gICAgZGkuc3Ryb2tlID0gZGlbJ2JvcmRlci1jb2xvciddO1xyXG4gIH1cclxuXHJcbiAgaWYgKCdiYWNrZ3JvdW5kLWNvbG9yJyBpbiBkaSkge1xyXG4gICAgZGkuZmlsbCA9IGRpWydiYWNrZ3JvdW5kLWNvbG9yJ107XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/SetColorHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/SplitLaneHandler.js":
/*!*********************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/SplitLaneHandler.js ***!
\*********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SplitLaneHandler)\n/* harmony export */ });\n/* harmony import */ var _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n\n\n/**\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\n *\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n */\n\n/**\n * A handler that splits a lane into a number of sub-lanes,\n * creating new sub lanes, if necessary.\n *\n * @implements {CommandHandler}\n *\n * @param {Modeling} modeling\n * @param {Translate} translate\n */\nfunction SplitLaneHandler(modeling, translate) {\n this._modeling = modeling;\n this._translate = translate;\n}\n\nSplitLaneHandler.$inject = [\n 'modeling',\n 'translate'\n];\n\n\nSplitLaneHandler.prototype.preExecute = function(context) {\n\n var modeling = this._modeling,\n translate = this._translate;\n\n var shape = context.shape,\n newLanesCount = context.count;\n\n var childLanes = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.getChildLanes)(shape),\n existingLanesCount = childLanes.length;\n\n if (existingLanesCount > newLanesCount) {\n throw new Error(translate('more than {count} child lanes', { count: newLanesCount }));\n }\n\n var newLanesHeight = Math.round(shape.height / newLanesCount);\n\n // Iterate from top to bottom in child lane order,\n // resizing existing lanes and creating new ones\n // so that they split the parent proportionally.\n //\n // Due to rounding related errors, the bottom lane\n // needs to take up all the remaining space.\n var laneY,\n laneHeight,\n laneBounds,\n newLaneAttrs,\n idx;\n\n for (idx = 0; idx < newLanesCount; idx++) {\n\n laneY = shape.y + idx * newLanesHeight;\n\n // if bottom lane\n if (idx === newLanesCount - 1) {\n laneHeight = shape.height - (newLanesHeight * idx);\n } else {\n laneHeight = newLanesHeight;\n }\n\n laneBounds = {\n x: shape.x + _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION,\n y: laneY,\n width: shape.width - _util_LaneUtil__WEBPACK_IMPORTED_MODULE_0__.LANE_INDENTATION,\n height: laneHeight\n };\n\n if (idx < existingLanesCount) {\n\n // resize existing lane\n modeling.resizeShape(childLanes[idx], laneBounds);\n } else {\n\n // create a new lane at position\n newLaneAttrs = {\n type: 'bpmn:Lane'\n };\n\n modeling.createShape(newLaneAttrs, laneBounds, shape);\n }\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvU3BsaXRMYW5lSGFuZGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUcwQjs7QUFFMUI7QUFDQSxhQUFhLHlEQUF5RDtBQUN0RTtBQUNBLGFBQWEsK0JBQStCO0FBQzVDLGFBQWEsMkRBQTJEO0FBQ3hFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsV0FBVztBQUN0QjtBQUNlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLDZEQUFhO0FBQ2hDOztBQUVBO0FBQ0EsMENBQTBDLE9BQU8sZ0JBQWdCLHNCQUFzQjtBQUN2Rjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixxQkFBcUI7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDREQUFnQjtBQUNuQztBQUNBLDJCQUEyQiw0REFBZ0I7QUFDM0M7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jYW11bmRhLWJwbW4tanMvbm9kZV9tb2R1bGVzL2JwbW4tanMvbGliL2ZlYXR1cmVzL21vZGVsaW5nL2NtZC9TcGxpdExhbmVIYW5kbGVyLmpzPzY5ZTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0Q2hpbGRMYW5lcyxcbiAgTEFORV9JTkRFTlRBVElPTlxufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRIYW5kbGVyJykuZGVmYXVsdH0gQ29tbWFuZEhhbmRsZXJcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9Nb2RlbGluZycpLmRlZmF1bHR9IE1vZGVsaW5nXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9pMThuL3RyYW5zbGF0ZS90cmFuc2xhdGUnKS5kZWZhdWx0fSBUcmFuc2xhdGVcbiAqL1xuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IHNwbGl0cyBhIGxhbmUgaW50byBhIG51bWJlciBvZiBzdWItbGFuZXMsXG4gKiBjcmVhdGluZyBuZXcgc3ViIGxhbmVzLCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQGltcGxlbWVudHMge0NvbW1hbmRIYW5kbGVyfVxuICpcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKiBAcGFyYW0ge1RyYW5zbGF0ZX0gdHJhbnNsYXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNwbGl0TGFuZUhhbmRsZXIobW9kZWxpbmcsIHRyYW5zbGF0ZSkge1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG59XG5cblNwbGl0TGFuZUhhbmRsZXIuJGluamVjdCA9IFtcbiAgJ21vZGVsaW5nJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cblxuU3BsaXRMYW5lSGFuZGxlci5wcm90b3R5cGUucHJlRXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZyxcbiAgICAgIHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcblxuICB2YXIgc2hhcGUgPSBjb250ZXh0LnNoYXBlLFxuICAgICAgbmV3TGFuZXNDb3VudCA9IGNvbnRleHQuY291bnQ7XG5cbiAgdmFyIGNoaWxkTGFuZXMgPSBnZXRDaGlsZExhbmVzKHNoYXBlKSxcbiAgICAgIGV4aXN0aW5nTGFuZXNDb3VudCA9IGNoaWxkTGFuZXMubGVuZ3RoO1xuXG4gIGlmIChleGlzdGluZ0xhbmVzQ291bnQgPiBuZXdMYW5lc0NvdW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHRyYW5zbGF0ZSgnbW9yZSB0aGFuIHtjb3VudH0gY2hpbGQgbGFuZXMnLCB7IGNvdW50OiBuZXdMYW5lc0NvdW50IH0pKTtcbiAgfVxuXG4gIHZhciBuZXdMYW5lc0hlaWdodCA9IE1hdGgucm91bmQoc2hhcGUuaGVpZ2h0IC8gbmV3TGFuZXNDb3VudCk7XG5cbiAgLy8gSXRlcmF0ZSBmcm9tIHRvcCB0byBib3R0b20gaW4gY2hpbGQgbGFuZSBvcmRlcixcbiAgLy8gcmVzaXppbmcgZXhpc3RpbmcgbGFuZXMgYW5kIGNyZWF0aW5nIG5ldyBvbmVzXG4gIC8vIHNvIHRoYXQgdGhleSBzcGxpdCB0aGUgcGFyZW50IHByb3BvcnRpb25hbGx5LlxuICAvL1xuICAvLyBEdWUgdG8gcm91bmRpbmcgcmVsYXRlZCBlcnJvcnMsIHRoZSBib3R0b20gbGFuZVxuICAvLyBuZWVkcyB0byB0YWtlIHVwIGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLlxuICB2YXIgbGFuZVksXG4gICAgICBsYW5lSGVpZ2h0LFxuICAgICAgbGFuZUJvdW5kcyxcbiAgICAgIG5ld0xhbmVBdHRycyxcbiAgICAgIGlkeDtcblxuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG5ld0xhbmVzQ291bnQ7IGlkeCsrKSB7XG5cbiAgICBsYW5lWSA9IHNoYXBlLnkgKyBpZHggKiBuZXdMYW5lc0hlaWdodDtcblxuICAgIC8vIGlmIGJvdHRvbSBsYW5lXG4gICAgaWYgKGlkeCA9PT0gbmV3TGFuZXNDb3VudCAtIDEpIHtcbiAgICAgIGxhbmVIZWlnaHQgPSBzaGFwZS5oZWlnaHQgLSAobmV3TGFuZXNIZWlnaHQgKiBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW5lSGVpZ2h0ID0gbmV3TGFuZXNIZWlnaHQ7XG4gICAgfVxuXG4gICAgbGFuZUJvdW5kcyA9IHtcbiAgICAgIHg6IHNoYXBlLnggKyBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgeTogbGFuZVksXG4gICAgICB3aWR0aDogc2hhcGUud2lkdGggLSBMQU5FX0lOREVOVEFUSU9OLFxuICAgICAgaGVpZ2h0OiBsYW5lSGVpZ2h0XG4gICAgfTtcblxuICAgIGlmIChpZHggPCBleGlzdGluZ0xhbmVzQ291bnQpIHtcblxuICAgICAgLy8gcmVzaXplIGV4aXN0aW5nIGxhbmVcbiAgICAgIG1vZGVsaW5nLnJlc2l6ZVNoYXBlKGNoaWxkTGFuZXNbaWR4XSwgbGFuZUJvdW5kcyk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gY3JlYXRlIGEgbmV3IGxhbmUgYXQgcG9zaXRpb25cbiAgICAgIG5ld0xhbmVBdHRycyA9IHtcbiAgICAgICAgdHlwZTogJ2JwbW46TGFuZSdcbiAgICAgIH07XG5cbiAgICAgIG1vZGVsaW5nLmNyZWF0ZVNoYXBlKG5ld0xhbmVBdHRycywgbGFuZUJvdW5kcywgc2hhcGUpO1xuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/SplitLaneHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateCanvasRootHandler.js":
/*!****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateCanvasRootHandler.js ***!
\****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdateCanvasRootHandler)\n/* harmony export */ });\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Collections.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\n *\n * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas\n * @typedef {import('../Modeling').default} Modeling\n */\n\n/**\n * @implements {CommandHandler}\n *\n * @param {Canvas} canvas\n * @param {Modeling} modeling\n */\nfunction UpdateCanvasRootHandler(canvas, modeling) {\n this._canvas = canvas;\n this._modeling = modeling;\n}\n\nUpdateCanvasRootHandler.$inject = [\n 'canvas',\n 'modeling'\n];\n\n\nUpdateCanvasRootHandler.prototype.execute = function(context) {\n\n var canvas = this._canvas;\n\n var newRoot = context.newRoot,\n newRootBusinessObject = newRoot.businessObject,\n oldRoot = canvas.getRootElement(),\n oldRootBusinessObject = oldRoot.businessObject,\n bpmnDefinitions = oldRootBusinessObject.$parent,\n diPlane = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi)(oldRoot);\n\n // (1) replace process old <> new root\n canvas.setRootElement(newRoot);\n canvas.removeRootElement(oldRoot);\n\n // (2) update root elements\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_1__.add)(bpmnDefinitions.rootElements, newRootBusinessObject);\n newRootBusinessObject.$parent = bpmnDefinitions;\n\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_1__.remove)(bpmnDefinitions.rootElements, oldRootBusinessObject);\n oldRootBusinessObject.$parent = null;\n\n // (3) wire di\n oldRoot.di = null;\n\n diPlane.bpmnElement = newRootBusinessObject;\n newRoot.di = diPlane;\n\n context.oldRoot = oldRoot;\n\n // TODO(nikku): return changed elements?\n // return [ newRoot, oldRoot ];\n return [];\n};\n\n\nUpdateCanvasRootHandler.prototype.revert = function(context) {\n\n var canvas = this._canvas;\n\n var newRoot = context.newRoot,\n newRootBusinessObject = newRoot.businessObject,\n oldRoot = context.oldRoot,\n oldRootBusinessObject = oldRoot.businessObject,\n bpmnDefinitions = newRootBusinessObject.$parent,\n diPlane = (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getDi)(newRoot);\n\n // (1) replace process old <> new root\n canvas.setRootElement(oldRoot);\n canvas.removeRootElement(newRoot);\n\n // (2) update root elements\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_1__.remove)(bpmnDefinitions.rootElements, newRootBusinessObject);\n newRootBusinessObject.$parent = null;\n\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_1__.add)(bpmnDefinitions.rootElements, oldRootBusinessObject);\n oldRootBusinessObject.$parent = bpmnDefinitions;\n\n // (3) wire di\n newRoot.di = null;\n\n diPlane.bpmnElement = oldRootBusinessObject;\n oldRoot.di = diPlane;\n\n // TODO(nikku): return changed elements?\n // return [ newRoot, oldRoot ];\n\n return [];\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlQ2FudmFzUm9vdEhhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR3lDOztBQUVPOztBQUVoRDtBQUNBLGFBQWEseURBQXlEO0FBQ3RFO0FBQ0EsYUFBYSw4Q0FBOEM7QUFDM0QsYUFBYSwrQkFBK0I7QUFDNUM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isc0RBQUs7O0FBRXJCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUUsb0VBQWE7QUFDZjs7QUFFQSxFQUFFLHVFQUFnQjtBQUNsQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isc0RBQUs7O0FBRXJCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUUsdUVBQWdCO0FBQ2xCOztBQUVBLEVBQUUsb0VBQWE7QUFDZjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyLmpzP2NhYjkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYWRkIGFzIGNvbGxlY3Rpb25BZGQsXG4gIHJlbW92ZSBhcyBjb2xsZWN0aW9uUmVtb3ZlXG59IGZyb20gJ2RpYWdyYW0tanMvbGliL3V0aWwvQ29sbGVjdGlvbnMnO1xuXG5pbXBvcnQgeyBnZXREaSB9IGZyb20gJy4uLy4uLy4uL3V0aWwvTW9kZWxVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRIYW5kbGVyJykuZGVmYXVsdH0gQ29tbWFuZEhhbmRsZXJcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdkaWFncmFtLWpzL2xpYi9jb3JlL0NhbnZhcycpLmRlZmF1bHR9IENhbnZhc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vTW9kZWxpbmcnKS5kZWZhdWx0fSBNb2RlbGluZ1xuICovXG5cbi8qKlxuICogQGltcGxlbWVudHMge0NvbW1hbmRIYW5kbGVyfVxuICpcbiAqIEBwYXJhbSB7Q2FudmFzfSBjYW52YXNcbiAqIEBwYXJhbSB7TW9kZWxpbmd9IG1vZGVsaW5nXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyKGNhbnZhcywgbW9kZWxpbmcpIHtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xufVxuXG5VcGRhdGVDYW52YXNSb290SGFuZGxlci4kaW5qZWN0ID0gW1xuICAnY2FudmFzJyxcbiAgJ21vZGVsaW5nJ1xuXTtcblxuXG5VcGRhdGVDYW52YXNSb290SGFuZGxlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIHZhciBuZXdSb290ID0gY29udGV4dC5uZXdSb290LFxuICAgICAgbmV3Um9vdEJ1c2luZXNzT2JqZWN0ID0gbmV3Um9vdC5idXNpbmVzc09iamVjdCxcbiAgICAgIG9sZFJvb3QgPSBjYW52YXMuZ2V0Um9vdEVsZW1lbnQoKSxcbiAgICAgIG9sZFJvb3RCdXNpbmVzc09iamVjdCA9IG9sZFJvb3QuYnVzaW5lc3NPYmplY3QsXG4gICAgICBicG1uRGVmaW5pdGlvbnMgPSBvbGRSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCxcbiAgICAgIGRpUGxhbmUgPSBnZXREaShvbGRSb290KTtcblxuICAvLyAoMSkgcmVwbGFjZSBwcm9jZXNzIG9sZCA8PiBuZXcgcm9vdFxuICBjYW52YXMuc2V0Um9vdEVsZW1lbnQobmV3Um9vdCk7XG4gIGNhbnZhcy5yZW1vdmVSb290RWxlbWVudChvbGRSb290KTtcblxuICAvLyAoMikgdXBkYXRlIHJvb3QgZWxlbWVudHNcbiAgY29sbGVjdGlvbkFkZChicG1uRGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzLCBuZXdSb290QnVzaW5lc3NPYmplY3QpO1xuICBuZXdSb290QnVzaW5lc3NPYmplY3QuJHBhcmVudCA9IGJwbW5EZWZpbml0aW9ucztcblxuICBjb2xsZWN0aW9uUmVtb3ZlKGJwbW5EZWZpbml0aW9ucy5yb290RWxlbWVudHMsIG9sZFJvb3RCdXNpbmVzc09iamVjdCk7XG4gIG9sZFJvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50ID0gbnVsbDtcblxuICAvLyAoMykgd2lyZSBkaVxuICBvbGRSb290LmRpID0gbnVsbDtcblxuICBkaVBsYW5lLmJwbW5FbGVtZW50ID0gbmV3Um9vdEJ1c2luZXNzT2JqZWN0O1xuICBuZXdSb290LmRpID0gZGlQbGFuZTtcblxuICBjb250ZXh0Lm9sZFJvb3QgPSBvbGRSb290O1xuXG4gIC8vIFRPRE8obmlra3UpOiByZXR1cm4gY2hhbmdlZCBlbGVtZW50cz9cbiAgLy8gcmV0dXJuIFsgbmV3Um9vdCwgb2xkUm9vdCBdO1xuICByZXR1cm4gW107XG59O1xuXG5cblVwZGF0ZUNhbnZhc1Jvb3RIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICB2YXIgbmV3Um9vdCA9IGNvbnRleHQubmV3Um9vdCxcbiAgICAgIG5ld1Jvb3RCdXNpbmVzc09iamVjdCA9IG5ld1Jvb3QuYnVzaW5lc3NPYmplY3QsXG4gICAgICBvbGRSb290ID0gY29udGV4dC5vbGRSb290LFxuICAgICAgb2xkUm9vdEJ1c2luZXNzT2JqZWN0ID0gb2xkUm9vdC5idXNpbmVzc09iamVjdCxcbiAgICAgIGJwbW5EZWZpbml0aW9ucyA9IG5ld1Jvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50LFxuICAgICAgZGlQbGFuZSA9IGdldERpKG5ld1Jvb3QpO1xuXG4gIC8vICgxKSByZXBsYWNlIHByb2Nlc3Mgb2xkIDw+IG5ldyByb290XG4gIGNhbnZhcy5zZXRSb290RWxlbWVudChvbGRSb290KTtcbiAgY2FudmFzLnJlbW92ZVJvb3RFbGVtZW50KG5ld1Jvb3QpO1xuXG4gIC8vICgyKSB1cGRhdGUgcm9vdCBlbGVtZW50c1xuICBjb2xsZWN0aW9uUmVtb3ZlKGJwbW5EZWZpbml0aW9ucy5yb290RWxlbWVudHMsIG5ld1Jvb3RCdXNpbmVzc09iamVjdCk7XG4gIG5ld1Jvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50ID0gbnVsbDtcblxuICBjb2xsZWN0aW9uQWRkKGJwbW5EZWZpbml0aW9ucy5yb290RWxlbWVudHMsIG9sZFJvb3RCdXNpbmVzc09iamVjdCk7XG4gIG9sZFJvb3RCdXNpbmVzc09iamVjdC4kcGFyZW50ID0gYnBtbkRlZmluaXRpb25zO1xuXG4gIC8vICgzKSB3aXJlIGRpXG4gIG5ld1Jvb3QuZGkgPSBudWxsO1xuXG4gIGRpUGxhbmUuYnBtbkVsZW1lbnQgPSBvbGRSb290QnVzaW5lc3NPYmplY3Q7XG4gIG9sZFJvb3QuZGkgPSBkaVBsYW5lO1xuXG4gIC8vIFRPRE8obmlra3UpOiByZXR1cm4gY2hhbmdlZCBlbGVtZW50cz9cbiAgLy8gcmV0dXJuIFsgbmV3Um9vdCwgb2xkUm9vdCBdO1xuXG4gIHJldHVybiBbXTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateCanvasRootHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js":
/*!******************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js ***!
\******************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdateFlowNodeRefsHandler)\n/* harmony export */ });\n/* harmony import */ var _util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/LaneUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/util/LaneUtil.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/util/Collections.js\");\n/* harmony import */ var diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! diagram-js/lib/layout/LayoutUtil */ \"./node_modules/camunda-bpmn-js/node_modules/diagram-js/lib/layout/LayoutUtil.js\");\n\n\n\n\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\n *\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\n *\n * @typedef {import('../../../model/Types').Shape} Shape\n */\n\nvar FLOW_NODE_REFS_ATTR = 'flowNodeRef',\n LANES_ATTR = 'lanes';\n\n\n/**\n * A handler that updates lane refs on changed elements.\n *\n * @implements {CommandHandler}\n *\n * @param {ElementRegistry} elementRegistry\n */\nfunction UpdateFlowNodeRefsHandler(elementRegistry) {\n this._elementRegistry = elementRegistry;\n}\n\nUpdateFlowNodeRefsHandler.$inject = [\n 'elementRegistry'\n];\n\n/**\n * @param {Shape} flowNodeShapes\n * @param {Shape} laneShapes\n *\n * @return { {\n * flowNode: Shape;\n * add: Shape[];\n * remove: Shape[];\n * }[] }\n */\nUpdateFlowNodeRefsHandler.prototype._computeUpdates = function(flowNodeShapes, laneShapes) {\n\n var handledNodes = [];\n\n var updates = [];\n\n var participantCache = {};\n\n var allFlowNodeShapes = [];\n\n function isInLaneShape(element, laneShape) {\n\n var laneTrbl = (0,diagram_js_lib_layout_LayoutUtil__WEBPACK_IMPORTED_MODULE_0__.asTRBL)(laneShape);\n\n var elementMid = {\n x: element.x + element.width / 2,\n y: element.y + element.height / 2\n };\n\n return elementMid.x > laneTrbl.left &&\n elementMid.x < laneTrbl.right &&\n elementMid.y > laneTrbl.top &&\n elementMid.y < laneTrbl.bottom;\n }\n\n function addFlowNodeShape(flowNodeShape) {\n if (handledNodes.indexOf(flowNodeShape) === -1) {\n allFlowNodeShapes.push(flowNodeShape);\n handledNodes.push(flowNodeShape);\n }\n }\n\n function getAllLaneShapes(flowNodeShape) {\n\n var root = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.getLanesRoot)(flowNodeShape);\n\n if (!participantCache[root.id]) {\n participantCache[root.id] = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.collectLanes)(root);\n }\n\n return participantCache[root.id];\n }\n\n function getNewLanes(flowNodeShape) {\n if (!flowNodeShape.parent) {\n return [];\n }\n\n var allLaneShapes = getAllLaneShapes(flowNodeShape);\n\n return allLaneShapes.filter(function(l) {\n return isInLaneShape(flowNodeShape, l);\n }).map(function(shape) {\n return shape.businessObject;\n });\n }\n\n laneShapes.forEach(function(laneShape) {\n var root = (0,_util_LaneUtil__WEBPACK_IMPORTED_MODULE_1__.getLanesRoot)(laneShape);\n\n if (!root || handledNodes.indexOf(root) !== -1) {\n return;\n }\n\n var children = root.children.filter(function(c) {\n return (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(c, 'bpmn:FlowNode');\n });\n\n children.forEach(addFlowNodeShape);\n\n handledNodes.push(root);\n });\n\n flowNodeShapes.forEach(addFlowNodeShape);\n\n\n allFlowNodeShapes.forEach(function(flowNodeShape) {\n\n var flowNode = flowNodeShape.businessObject;\n\n var lanes = flowNode.get(LANES_ATTR),\n remove = lanes.slice(),\n add = getNewLanes(flowNodeShape);\n\n updates.push({ flowNode: flowNode, remove: remove, add: add });\n });\n\n laneShapes.forEach(function(laneShape) {\n\n var lane = laneShape.businessObject;\n\n // lane got removed XX-)\n if (!laneShape.parent) {\n lane.get(FLOW_NODE_REFS_ATTR).forEach(function(flowNode) {\n updates.push({ flowNode: flowNode, remove: [ lane ], add: [] });\n });\n }\n });\n\n return updates;\n};\n\nUpdateFlowNodeRefsHandler.prototype.execute = function(context) {\n\n var updates = context.updates;\n\n if (!updates) {\n updates = context.updates = this._computeUpdates(context.flowNodeShapes, context.laneShapes);\n }\n\n\n updates.forEach(function(update) {\n\n var flowNode = update.flowNode,\n lanes = flowNode.get(LANES_ATTR);\n\n // unwire old\n update.remove.forEach(function(oldLane) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.remove)(lanes, oldLane);\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.remove)(oldLane.get(FLOW_NODE_REFS_ATTR), flowNode);\n });\n\n // wire new\n update.add.forEach(function(newLane) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.add)(lanes, newLane);\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.add)(newLane.get(FLOW_NODE_REFS_ATTR), flowNode);\n });\n });\n\n // TODO(nikku): return changed elements\n // return [ ... ];\n\n return [];\n};\n\n\nUpdateFlowNodeRefsHandler.prototype.revert = function(context) {\n\n var updates = context.updates;\n\n updates.forEach(function(update) {\n\n var flowNode = update.flowNode,\n lanes = flowNode.get(LANES_ATTR);\n\n // unwire new\n update.add.forEach(function(newLane) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.remove)(lanes, newLane);\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.remove)(newLane.get(FLOW_NODE_REFS_ATTR), flowNode);\n });\n\n // wire old\n update.remove.forEach(function(oldLane) {\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.add)(lanes, oldLane);\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_3__.add)(oldLane.get(FLOW_NODE_REFS_ATTR), flowNode);\n });\n });\n\n // TODO(nikku): return changed elements\n // return [ ... ];\n\n return [];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUcwQjs7QUFJTzs7QUFLUTs7QUFJQzs7QUFFMUM7QUFDQSxhQUFhLHlEQUF5RDtBQUN0RTtBQUNBLGFBQWEsdURBQXVEO0FBQ3BFO0FBQ0EsYUFBYSxzQ0FBc0M7QUFDbkQ7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUI7QUFDZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsbUJBQW1CLHdFQUFNOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLDREQUFZOztBQUUzQjtBQUNBLGtDQUFrQyw0REFBWTtBQUM5Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxlQUFlLDREQUFZOztBQUUzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLG1EQUFFO0FBQ2YsS0FBSzs7QUFFTDs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsOENBQThDO0FBQ2pFLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLCtDQUErQztBQUN0RSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLHVFQUFnQjtBQUN0QixNQUFNLHVFQUFnQjtBQUN0QixLQUFLOztBQUVMO0FBQ0E7QUFDQSxNQUFNLG9FQUFhO0FBQ25CLE1BQU0sb0VBQWE7QUFDbkIsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLHVFQUFnQjtBQUN0QixNQUFNLHVFQUFnQjtBQUN0QixLQUFLOztBQUVMO0FBQ0E7QUFDQSxNQUFNLG9FQUFhO0FBQ25CLE1BQU0sb0VBQWE7QUFDbkIsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbXVuZGEtYnBtbi1qcy9ub2RlX21vZHVsZXMvYnBtbi1qcy9saWIvZmVhdHVyZXMvbW9kZWxpbmcvY21kL1VwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIuanM/MzNlNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb2xsZWN0TGFuZXMsXG4gIGdldExhbmVzUm9vdFxufSBmcm9tICcuLi91dGlsL0xhbmVVdGlsJztcblxuaW1wb3J0IHtcbiAgaXNcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG5pbXBvcnQge1xuICBhZGQgYXMgY29sbGVjdGlvbkFkZCxcbiAgcmVtb3ZlIGFzIGNvbGxlY3Rpb25SZW1vdmVcbn0gZnJvbSAnZGlhZ3JhbS1qcy9saWIvdXRpbC9Db2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGFzVFJCTFxufSBmcm9tICdkaWFncmFtLWpzL2xpYi9sYXlvdXQvTGF5b3V0VXRpbCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSGFuZGxlcicpLmRlZmF1bHR9IENvbW1hbmRIYW5kbGVyXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvY29yZS9FbGVtZW50UmVnaXN0cnknKS5kZWZhdWx0fSBFbGVtZW50UmVnaXN0cnlcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi8uLi9tb2RlbC9UeXBlcycpLlNoYXBlfSBTaGFwZVxuICovXG5cbnZhciBGTE9XX05PREVfUkVGU19BVFRSID0gJ2Zsb3dOb2RlUmVmJyxcbiAgICBMQU5FU19BVFRSID0gJ2xhbmVzJztcblxuXG4vKipcbiAqIEEgaGFuZGxlciB0aGF0IHVwZGF0ZXMgbGFuZSByZWZzIG9uIGNoYW5nZWQgZWxlbWVudHMuXG4gKlxuICogQGltcGxlbWVudHMge0NvbW1hbmRIYW5kbGVyfVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlRmxvd05vZGVSZWZzSGFuZGxlcihlbGVtZW50UmVnaXN0cnkpIHtcbiAgdGhpcy5fZWxlbWVudFJlZ2lzdHJ5ID0gZWxlbWVudFJlZ2lzdHJ5O1xufVxuXG5VcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyLiRpbmplY3QgPSBbXG4gICdlbGVtZW50UmVnaXN0cnknXG5dO1xuXG4vKipcbiAqIEBwYXJhbSB7U2hhcGV9IGZsb3dOb2RlU2hhcGVzXG4gKiBAcGFyYW0ge1NoYXBlfSBsYW5lU2hhcGVzXG4gKlxuICogQHJldHVybiB7IHtcbiAqICAgZmxvd05vZGU6IFNoYXBlO1xuICogICBhZGQ6IFNoYXBlW107XG4gKiAgIHJlbW92ZTogU2hhcGVbXTtcbiAqIH1bXSB9XG4gKi9cblVwZGF0ZUZsb3dOb2RlUmVmc0hhbmRsZXIucHJvdG90eXBlLl9jb21wdXRlVXBkYXRlcyA9IGZ1bmN0aW9uKGZsb3dOb2RlU2hhcGVzLCBsYW5lU2hhcGVzKSB7XG5cbiAgdmFyIGhhbmRsZWROb2RlcyA9IFtdO1xuXG4gIHZhciB1cGRhdGVzID0gW107XG5cbiAgdmFyIHBhcnRpY2lwYW50Q2FjaGUgPSB7fTtcblxuICB2YXIgYWxsRmxvd05vZGVTaGFwZXMgPSBbXTtcblxuICBmdW5jdGlvbiBpc0luTGFuZVNoYXBlKGVsZW1lbnQsIGxhbmVTaGFwZSkge1xuXG4gICAgdmFyIGxhbmVUcmJsID0gYXNUUkJMKGxhbmVTaGFwZSk7XG5cbiAgICB2YXIgZWxlbWVudE1pZCA9IHtcbiAgICAgIHg6IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGggLyAyLFxuICAgICAgeTogZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQgLyAyXG4gICAgfTtcblxuICAgIHJldHVybiBlbGVtZW50TWlkLnggPiBsYW5lVHJibC5sZWZ0ICYmXG4gICAgICAgICAgIGVsZW1lbnRNaWQueCA8IGxhbmVUcmJsLnJpZ2h0ICYmXG4gICAgICAgICAgIGVsZW1lbnRNaWQueSA+IGxhbmVUcmJsLnRvcCAmJlxuICAgICAgICAgICBlbGVtZW50TWlkLnkgPCBsYW5lVHJibC5ib3R0b207XG4gIH1cblxuICBmdW5jdGlvbiBhZGRGbG93Tm9kZVNoYXBlKGZsb3dOb2RlU2hhcGUpIHtcbiAgICBpZiAoaGFuZGxlZE5vZGVzLmluZGV4T2YoZmxvd05vZGVTaGFwZSkgPT09IC0xKSB7XG4gICAgICBhbGxGbG93Tm9kZVNoYXBlcy5wdXNoKGZsb3dOb2RlU2hhcGUpO1xuICAgICAgaGFuZGxlZE5vZGVzLnB1c2goZmxvd05vZGVTaGFwZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QWxsTGFuZVNoYXBlcyhmbG93Tm9kZVNoYXBlKSB7XG5cbiAgICB2YXIgcm9vdCA9IGdldExhbmVzUm9vdChmbG93Tm9kZVNoYXBlKTtcblxuICAgIGlmICghcGFydGljaXBhbnRDYWNoZVtyb290LmlkXSkge1xuICAgICAgcGFydGljaXBhbnRDYWNoZVtyb290LmlkXSA9IGNvbGxlY3RMYW5lcyhyb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydGljaXBhbnRDYWNoZVtyb290LmlkXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5ld0xhbmVzKGZsb3dOb2RlU2hhcGUpIHtcbiAgICBpZiAoIWZsb3dOb2RlU2hhcGUucGFyZW50KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdmFyIGFsbExhbmVTaGFwZXMgPSBnZXRBbGxMYW5lU2hhcGVzKGZsb3dOb2RlU2hhcGUpO1xuXG4gICAgcmV0dXJuIGFsbExhbmVTaGFwZXMuZmlsdGVyKGZ1bmN0aW9uKGwpIHtcbiAgICAgIHJldHVybiBpc0luTGFuZVNoYXBlKGZsb3dOb2RlU2hhcGUsIGwpO1xuICAgIH0pLm1hcChmdW5jdGlvbihzaGFwZSkge1xuICAgICAgcmV0dXJuIHNoYXBlLmJ1c2luZXNzT2JqZWN0O1xuICAgIH0pO1xuICB9XG5cbiAgbGFuZVNoYXBlcy5mb3JFYWNoKGZ1bmN0aW9uKGxhbmVTaGFwZSkge1xuICAgIHZhciByb290ID0gZ2V0TGFuZXNSb290KGxhbmVTaGFwZSk7XG5cbiAgICBpZiAoIXJvb3QgfHwgaGFuZGxlZE5vZGVzLmluZGV4T2Yocm9vdCkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gcm9vdC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oYykge1xuICAgICAgcmV0dXJuIGlzKGMsICdicG1uOkZsb3dOb2RlJyk7XG4gICAgfSk7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGFkZEZsb3dOb2RlU2hhcGUpO1xuXG4gICAgaGFuZGxlZE5vZGVzLnB1c2gocm9vdCk7XG4gIH0pO1xuXG4gIGZsb3dOb2RlU2hhcGVzLmZvckVhY2goYWRkRmxvd05vZGVTaGFwZSk7XG5cblxuICBhbGxGbG93Tm9kZVNoYXBlcy5mb3JFYWNoKGZ1bmN0aW9uKGZsb3dOb2RlU2hhcGUpIHtcblxuICAgIHZhciBmbG93Tm9kZSA9IGZsb3dOb2RlU2hhcGUuYnVzaW5lc3NPYmplY3Q7XG5cbiAgICB2YXIgbGFuZXMgPSBmbG93Tm9kZS5nZXQoTEFORVNfQVRUUiksXG4gICAgICAgIHJlbW92ZSA9IGxhbmVzLnNsaWNlKCksXG4gICAgICAgIGFkZCA9IGdldE5ld0xhbmVzKGZsb3dOb2RlU2hhcGUpO1xuXG4gICAgdXBkYXRlcy5wdXNoKHsgZmxvd05vZGU6IGZsb3dOb2RlLCByZW1vdmU6IHJlbW92ZSwgYWRkOiBhZGQgfSk7XG4gIH0pO1xuXG4gIGxhbmVTaGFwZXMuZm9yRWFjaChmdW5jdGlvbihsYW5lU2hhcGUpIHtcblxuICAgIHZhciBsYW5lID0gbGFuZVNoYXBlLmJ1c2luZXNzT2JqZWN0O1xuXG4gICAgLy8gbGFuZSBnb3QgcmVtb3ZlZCBYWC0pXG4gICAgaWYgKCFsYW5lU2hhcGUucGFyZW50KSB7XG4gICAgICBsYW5lLmdldChGTE9XX05PREVfUkVGU19BVFRSKS5mb3JFYWNoKGZ1bmN0aW9uKGZsb3dOb2RlKSB7XG4gICAgICAgIHVwZGF0ZXMucHVzaCh7IGZsb3dOb2RlOiBmbG93Tm9kZSwgcmVtb3ZlOiBbIGxhbmUgXSwgYWRkOiBbXSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZXM7XG59O1xuXG5VcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oY29udGV4dCkge1xuXG4gIHZhciB1cGRhdGVzID0gY29udGV4dC51cGRhdGVzO1xuXG4gIGlmICghdXBkYXRlcykge1xuICAgIHVwZGF0ZXMgPSBjb250ZXh0LnVwZGF0ZXMgPSB0aGlzLl9jb21wdXRlVXBkYXRlcyhjb250ZXh0LmZsb3dOb2RlU2hhcGVzLCBjb250ZXh0LmxhbmVTaGFwZXMpO1xuICB9XG5cblxuICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24odXBkYXRlKSB7XG5cbiAgICB2YXIgZmxvd05vZGUgPSB1cGRhdGUuZmxvd05vZGUsXG4gICAgICAgIGxhbmVzID0gZmxvd05vZGUuZ2V0KExBTkVTX0FUVFIpO1xuXG4gICAgLy8gdW53aXJlIG9sZFxuICAgIHVwZGF0ZS5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihvbGRMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKGxhbmVzLCBvbGRMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25SZW1vdmUob2xkTGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcblxuICAgIC8vIHdpcmUgbmV3XG4gICAgdXBkYXRlLmFkZC5mb3JFYWNoKGZ1bmN0aW9uKG5ld0xhbmUpIHtcbiAgICAgIGNvbGxlY3Rpb25BZGQobGFuZXMsIG5ld0xhbmUpO1xuICAgICAgY29sbGVjdGlvbkFkZChuZXdMYW5lLmdldChGTE9XX05PREVfUkVGU19BVFRSKSwgZmxvd05vZGUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUT0RPKG5pa2t1KTogcmV0dXJuIGNoYW5nZWQgZWxlbWVudHNcbiAgLy8gcmV0dXJuIFsgLi4uIF07XG5cbiAgcmV0dXJuIFtdO1xufTtcblxuXG5VcGRhdGVGbG93Tm9kZVJlZnNIYW5kbGVyLnByb3RvdHlwZS5yZXZlcnQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIHVwZGF0ZXMgPSBjb250ZXh0LnVwZGF0ZXM7XG5cbiAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uKHVwZGF0ZSkge1xuXG4gICAgdmFyIGZsb3dOb2RlID0gdXBkYXRlLmZsb3dOb2RlLFxuICAgICAgICBsYW5lcyA9IGZsb3dOb2RlLmdldChMQU5FU19BVFRSKTtcblxuICAgIC8vIHVud2lyZSBuZXdcbiAgICB1cGRhdGUuYWRkLmZvckVhY2goZnVuY3Rpb24obmV3TGFuZSkge1xuICAgICAgY29sbGVjdGlvblJlbW92ZShsYW5lcywgbmV3TGFuZSk7XG4gICAgICBjb2xsZWN0aW9uUmVtb3ZlKG5ld0xhbmUuZ2V0KEZMT1dfTk9ERV9SRUZTX0FUVFIpLCBmbG93Tm9kZSk7XG4gICAgfSk7XG5cbiAgICAvLyB3aXJlIG9sZFxuICAgIHVwZGF0ZS5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihvbGRMYW5lKSB7XG4gICAgICBjb2xsZWN0aW9uQWRkKGxhbmVzLCBvbGRMYW5lKTtcbiAgICAgIGNvbGxlY3Rpb25BZGQob2xkTGFuZS5nZXQoRkxPV19OT0RFX1JFRlNfQVRUUiksIGZsb3dOb2RlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHJldHVybiBjaGFuZ2VkIGVsZW1lbnRzXG4gIC8vIHJldHVybiBbIC4uLiBdO1xuXG4gIHJldHVybiBbXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js":
/*!**********************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js ***!
\**********************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdateModdlePropertiesHandler)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\n *\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\n *\n * @typedef {import('../../../model/Types').Shape} Shape\n * @typedef {import('../../../model/Types').ModdleElement} ModdleElement\n */\n\n/**\n * @implements {CommandHandler}\n *\n * @param {ElementRegistry} elementRegistry\n */\nfunction UpdateModdlePropertiesHandler(elementRegistry) {\n this._elementRegistry = elementRegistry;\n}\n\nUpdateModdlePropertiesHandler.$inject = [ 'elementRegistry' ];\n\nUpdateModdlePropertiesHandler.prototype.execute = function(context) {\n\n var element = context.element,\n moddleElement = context.moddleElement,\n properties = context.properties;\n\n if (!moddleElement) {\n throw new Error(' required');\n }\n\n // TODO(nikku): we need to ensure that ID properties\n // are properly registered / unregistered via\n // this._moddle.ids.assigned(id)\n var changed = context.changed || this._getVisualReferences(moddleElement).concat(element);\n var oldProperties = context.oldProperties || getModdleProperties(moddleElement, (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.keys)(properties));\n\n setModdleProperties(moddleElement, properties);\n\n context.oldProperties = oldProperties;\n context.changed = changed;\n\n return changed;\n};\n\nUpdateModdlePropertiesHandler.prototype.revert = function(context) {\n var oldProperties = context.oldProperties,\n moddleElement = context.moddleElement,\n changed = context.changed;\n\n setModdleProperties(moddleElement, oldProperties);\n\n return changed;\n};\n\n/**\n * Return visual references of given moddle element within the diagram.\n *\n * @param {ModdleElement} moddleElement\n *\n * @return {Shape[]}\n */\nUpdateModdlePropertiesHandler.prototype._getVisualReferences = function(moddleElement) {\n\n var elementRegistry = this._elementRegistry;\n\n if ((0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(moddleElement, 'bpmn:DataObject')) {\n return getAllDataObjectReferences(moddleElement, elementRegistry);\n }\n\n return [];\n};\n\n\n// helpers /////////////////\n\nfunction getModdleProperties(moddleElement, propertyNames) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.reduce)(propertyNames, function(result, key) {\n result[key] = moddleElement.get(key);\n return result;\n }, {});\n}\n\nfunction setModdleProperties(moddleElement, properties) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_0__.forEach)(properties, function(value, key) {\n moddleElement.set(key, value);\n });\n}\n\nfunction getAllDataObjectReferences(dataObject, elementRegistry) {\n return elementRegistry.filter(function(element) {\n return (\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(element, 'bpmn:DataObjectReference') &&\n (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.getBusinessObject)(element).dataObjectRef === dataObject\n );\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlTW9kZGxlUHJvcGVydGllc0hhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSWtCOztBQUtlOztBQUVqQztBQUNBLGFBQWEseURBQXlEO0FBQ3RFO0FBQ0EsYUFBYSx1REFBdUQ7QUFDcEU7QUFDQSxhQUFhLHNDQUFzQztBQUNuRCxhQUFhLDhDQUE4QztBQUMzRDs7QUFFQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ2U7QUFDZjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0YsOENBQUk7O0FBRXRGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBOztBQUVBLE1BQU0sbURBQUU7QUFDUjtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0EsU0FBUyxnREFBTTtBQUNmO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDs7QUFFQTtBQUNBLEVBQUUsaURBQU87QUFDVDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1EQUFFO0FBQ1IsVUFBVSxrRUFBaUI7QUFDM0I7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2FtdW5kYS1icG1uLWpzL25vZGVfbW9kdWxlcy9icG1uLWpzL2xpYi9mZWF0dXJlcy9tb2RlbGluZy9jbWQvVXBkYXRlTW9kZGxlUHJvcGVydGllc0hhbmRsZXIuanM/ZmRjMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICByZWR1Y2UsXG4gIGtleXMsXG4gIGZvckVhY2hcbn0gZnJvbSAnbWluLWRhc2gnO1xuXG5pbXBvcnQge1xuICBpcyxcbiAgZ2V0QnVzaW5lc3NPYmplY3Rcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9Nb2RlbFV0aWwnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvbW1hbmQvQ29tbWFuZEhhbmRsZXInKS5kZWZhdWx0fSBDb21tYW5kSGFuZGxlclxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2RpYWdyYW0tanMvbGliL2NvcmUvRWxlbWVudFJlZ2lzdHJ5JykuZGVmYXVsdH0gRWxlbWVudFJlZ2lzdHJ5XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vLi4vbW9kZWwvVHlwZXMnKS5TaGFwZX0gU2hhcGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL21vZGVsL1R5cGVzJykuTW9kZGxlRWxlbWVudH0gTW9kZGxlRWxlbWVudFxuICovXG5cbi8qKlxuICogQGltcGxlbWVudHMge0NvbW1hbmRIYW5kbGVyfVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudFJlZ2lzdHJ5fSBlbGVtZW50UmVnaXN0cnlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVXBkYXRlTW9kZGxlUHJvcGVydGllc0hhbmRsZXIoZWxlbWVudFJlZ2lzdHJ5KSB7XG4gIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbn1cblxuVXBkYXRlTW9kZGxlUHJvcGVydGllc0hhbmRsZXIuJGluamVjdCA9IFsgJ2VsZW1lbnRSZWdpc3RyeScgXTtcblxuVXBkYXRlTW9kZGxlUHJvcGVydGllc0hhbmRsZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgdmFyIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50ID0gY29udGV4dC5tb2RkbGVFbGVtZW50LFxuICAgICAgcHJvcGVydGllcyA9IGNvbnRleHQucHJvcGVydGllcztcblxuICBpZiAoIW1vZGRsZUVsZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJzxtb2RkbGVFbGVtZW50PiByZXF1aXJlZCcpO1xuICB9XG5cbiAgLy8gVE9ETyhuaWtrdSk6IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgSUQgcHJvcGVydGllc1xuICAvLyBhcmUgcHJvcGVybHkgcmVnaXN0ZXJlZCAvIHVucmVnaXN0ZXJlZCB2aWFcbiAgLy8gdGhpcy5fbW9kZGxlLmlkcy5hc3NpZ25lZChpZClcbiAgdmFyIGNoYW5nZWQgPSBjb250ZXh0LmNoYW5nZWQgfHwgdGhpcy5fZ2V0VmlzdWFsUmVmZXJlbmNlcyhtb2RkbGVFbGVtZW50KS5jb25jYXQoZWxlbWVudCk7XG4gIHZhciBvbGRQcm9wZXJ0aWVzID0gY29udGV4dC5vbGRQcm9wZXJ0aWVzIHx8IGdldE1vZGRsZVByb3BlcnRpZXMobW9kZGxlRWxlbWVudCwga2V5cyhwcm9wZXJ0aWVzKSk7XG5cbiAgc2V0TW9kZGxlUHJvcGVydGllcyhtb2RkbGVFbGVtZW50LCBwcm9wZXJ0aWVzKTtcblxuICBjb250ZXh0Lm9sZFByb3BlcnRpZXMgPSBvbGRQcm9wZXJ0aWVzO1xuICBjb250ZXh0LmNoYW5nZWQgPSBjaGFuZ2VkO1xuXG4gIHJldHVybiBjaGFuZ2VkO1xufTtcblxuVXBkYXRlTW9kZGxlUHJvcGVydGllc0hhbmRsZXIucHJvdG90eXBlLnJldmVydCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIG9sZFByb3BlcnRpZXMgPSBjb250ZXh0Lm9sZFByb3BlcnRpZXMsXG4gICAgICBtb2RkbGVFbGVtZW50ID0gY29udGV4dC5tb2RkbGVFbGVtZW50LFxuICAgICAgY2hhbmdlZCA9IGNvbnRleHQuY2hhbmdlZDtcblxuICBzZXRNb2RkbGVQcm9wZXJ0aWVzKG1vZGRsZUVsZW1lbnQsIG9sZFByb3BlcnRpZXMpO1xuXG4gIHJldHVybiBjaGFuZ2VkO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdmlzdWFsIHJlZmVyZW5jZXMgb2YgZ2l2ZW4gbW9kZGxlIGVsZW1lbnQgd2l0aGluIHRoZSBkaWFncmFtLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gbW9kZGxlRWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1NoYXBlW119XG4gKi9cblVwZGF0ZU1vZGRsZVByb3BlcnRpZXNIYW5kbGVyLnByb3RvdHlwZS5fZ2V0VmlzdWFsUmVmZXJlbmNlcyA9IGZ1bmN0aW9uKG1vZGRsZUVsZW1lbnQpIHtcblxuICB2YXIgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5O1xuXG4gIGlmIChpcyhtb2RkbGVFbGVtZW50LCAnYnBtbjpEYXRhT2JqZWN0JykpIHtcbiAgICByZXR1cm4gZ2V0QWxsRGF0YU9iamVjdFJlZmVyZW5jZXMobW9kZGxlRWxlbWVudCwgZWxlbWVudFJlZ2lzdHJ5KTtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZXRNb2RkbGVQcm9wZXJ0aWVzKG1vZGRsZUVsZW1lbnQsIHByb3BlcnR5TmFtZXMpIHtcbiAgcmV0dXJuIHJlZHVjZShwcm9wZXJ0eU5hbWVzLCBmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gbW9kZGxlRWxlbWVudC5nZXQoa2V5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIHNldE1vZGRsZVByb3BlcnRpZXMobW9kZGxlRWxlbWVudCwgcHJvcGVydGllcykge1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICBtb2RkbGVFbGVtZW50LnNldChrZXksIHZhbHVlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEFsbERhdGFPYmplY3RSZWZlcmVuY2VzKGRhdGFPYmplY3QsIGVsZW1lbnRSZWdpc3RyeSkge1xuICByZXR1cm4gZWxlbWVudFJlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzKGVsZW1lbnQsICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnKSAmJlxuICAgICAgICAgIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLmRhdGFPYmplY3RSZWYgPT09IGRhdGFPYmplY3RcbiAgICApO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js\n");
/***/ }),
/***/ "./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdatePropertiesHandler.js":
/*!****************************************************************************************************************!*\
!*** ./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/features/modeling/cmd/UpdatePropertiesHandler.js ***!
\****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ UpdatePropertiesHandler)\n/* harmony export */ });\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/ModelUtil */ \"./node_modules/camunda-bpmn-js/node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n\n\n/**\n * @typedef {import('diagram-js/lib/command/CommandHandler').default} CommandHandler\n * @typedef {import('diagram-js/lib/command/CommandStack').CommandContext} CommandContext\n *\n * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry\n * @typedef {import('../../../model/Types').Moddle} Moddle\n * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate\n * @typedef {import('../Modeling').default} Modeling\n * @typedef {import('../../../draw/TextRenderer').default} TextRenderer\n *\n * @typedef {import('../../../model/Types').Element} Element\n */\n\nvar DEFAULT_FLOW = 'default',\n ID = 'id',\n DI = 'di';\n\nvar NULL_DIMENSIONS = {\n width: 0,\n height: 0\n};\n\n/**\n * A handler that implements a BPMN 2.0 property update.\n *\n * This should be used to set simple properties on elements with\n * an underlying BPMN business object.\n *\n * Use respective diagram-js provided handlers if you would\n * like to perform automated modeling.\n *\n * @implements {CommandHandler}\n *\n * @param {ElementRegistry} elementRegistry\n * @param {Moddle} moddle\n * @param {Translate} translate\n * @param {Modeling} modeling\n * @param {TextRenderer} textRenderer\n */\nfunction UpdatePropertiesHandler(\n elementRegistry, moddle, translate,\n modeling, textRenderer) {\n\n this._elementRegistry = elementRegistry;\n this._moddle = moddle;\n this._translate = translate;\n this._modeling = modeling;\n this._textRenderer = textRenderer;\n}\n\nUpdatePropertiesHandler.$inject = [\n 'elementRegistry',\n 'moddle',\n 'translate',\n 'modeling',\n 'textRenderer'\n];\n\n\n// api //////////////////////\n\n/**\n * Update a BPMN element's properties.\n *\n * @param { {\n * element: Element;\n * properties: Record;\n * } & CommandContext } context\n *\n * @return {Element[]}\n */\nUpdatePropertiesHandler.prototype.execute = function(context) {\n\n var element = context.element,\n changed = [ element ],\n translate = this._translate;\n\n if (!element) {\n throw new Error(translate('element required'));\n }\n\n var elementRegistry = this._elementRegistry,\n ids = this._moddle.ids;\n\n var businessObject = element.businessObject,\n properties = unwrapBusinessObjects(context.properties),\n oldProperties = context.oldProperties || getProperties(element, properties);\n\n if (isIdChange(properties, businessObject)) {\n ids.unclaim(businessObject[ID]);\n\n elementRegistry.updateId(element, properties[ID]);\n\n ids.claim(properties[ID], businessObject);\n }\n\n // correctly indicate visual changes on default flow updates\n if (DEFAULT_FLOW in properties) {\n\n if (properties[DEFAULT_FLOW]) {\n changed.push(elementRegistry.get(properties[DEFAULT_FLOW].id));\n }\n\n if (businessObject[DEFAULT_FLOW]) {\n changed.push(elementRegistry.get(businessObject[DEFAULT_FLOW].id));\n }\n }\n\n // update properties\n setProperties(element, properties);\n\n // store old values\n context.oldProperties = oldProperties;\n context.changed = changed;\n\n // indicate changed on objects affected by the update\n return changed;\n};\n\n\nUpdatePropertiesHandler.prototype.postExecute = function(context) {\n var element = context.element,\n label = element.label;\n\n var text = label && (0,_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(label).name;\n\n if (!text) {\n return;\n }\n\n // get layouted text bounds and resize external\n // external label accordingly\n var newLabelBounds = this._textRenderer.getExternalLabelBounds(label, text);\n\n this._modeling.resizeShape(label, newLabelBounds, NULL_DIMENSIONS);\n};\n\n/**\n * Revert updating a BPMN element's properties.\n *\n * @param { {\n * element: Element;\n * properties: Record