From 971cc5f36ac34c3ddd336e5bb4a5a2d8d2dbfc65 Mon Sep 17 00:00:00 2001 From: Mikolaj Widla Date: Tue, 5 Sep 2023 11:15:20 +0200 Subject: [PATCH] merge new tools (#244) Co-authored-by: Adam Bem Co-authored-by: Adam Bem Reviewed-on: https://gitea.release11.com/R11/release11-tools/pulls/244 --- Backend-libXML/Parser.py | 33 +- Backend-libXML/main.py | 20 +- .../r11/tools/controller/MockController.java | 47 +- .../com/r11/tools/model/MockedMessage.java | 2 +- .../com/r11/tools/model/MockedMessageDto.java | 2 +- .../repository/MockedResponseRepository.java | 14 +- .../com/r11/tools/service/KlausService.java | 3 +- .../r11/tools/service/KlausServiceImpl.java | 63 +- .../java/com/r11/tools/SparkApplication.java | 7 +- .../r11/tools/controller/XPathController.java | 118 +- .../tools/controller/XQueryController.java | 87 + .../r11/tools/controller/XsdController.java | 81 +- .../r11/tools/controller/XsltController.java | 117 +- .../com/r11/tools/model/XMLRequestBody.java | 34 + .../com/r11/tools/model/XMLResponseBody.java | 59 + .../internal => model}/XPathQueryResult.java | 2 +- .../main/java/com/r11/tools/xml/Saxon.java | 27 +- .../main/java/com/r11/tools/xml/Xalan.java | 8 +- .../java/com/r11/tools/xml/XmlEngine.java | 4 +- Frontend/.dockerignore | 28 + Frontend/.eslintrc.cjs | 15 + Frontend/.gitignore | 28 + Frontend/.prettierrc.json | 8 + Frontend/Dockerfile | 36 +- Frontend/README.md | 46 + Frontend/assets/css/common/common.css | 6 - Frontend/assets/css/common/font/fontello.eot | Bin 5964 -> 0 bytes Frontend/assets/css/common/font/fontello.svg | 14 - Frontend/assets/css/common/font/fontello.ttf | Bin 5796 -> 0 bytes Frontend/assets/css/common/font/fontello.woff | Bin 3256 -> 0 bytes .../assets/css/common/font/fontello.woff2 | Bin 2584 -> 0 bytes Frontend/assets/css/common/fontello.css | 59 - Frontend/assets/css/frame.css | 150 - Frontend/assets/css/highlight.css | 69 - Frontend/assets/css/lawful.css | 42 - Frontend/assets/css/tools/font/fontello.eot | Bin 5964 -> 0 bytes Frontend/assets/css/tools/font/fontello.svg | 14 - Frontend/assets/css/tools/font/fontello.ttf | Bin 5796 -> 0 bytes Frontend/assets/css/tools/font/fontello.woff | Bin 3256 -> 0 bytes Frontend/assets/css/tools/font/fontello.woff2 | Bin 2584 -> 0 bytes Frontend/assets/css/tools/fontello.css | 59 - Frontend/assets/css/tools/mock/common.css | 34 - .../css/tools/mock/font/Material-Icons.woff2 | Bin 128352 -> 0 bytes .../mock/font/Nunito-VariableFont_wght.ttf | Bin 275644 -> 0 bytes .../assets/css/tools/mock/font/fontello.eot | Bin 5964 -> 0 bytes .../assets/css/tools/mock/font/fontello.svg | 14 - .../assets/css/tools/mock/font/fontello.ttf | Bin 5796 -> 0 bytes .../assets/css/tools/mock/font/fontello.woff | Bin 3256 -> 0 bytes .../assets/css/tools/mock/font/fontello.woff2 | Bin 2584 -> 0 bytes Frontend/assets/css/tools/mock/fontello.css | 59 - Frontend/assets/css/tools/mock/main.css | 4 - Frontend/assets/css/tools/mock/r11addons.css | 95 - Frontend/assets/css/tools/mock/r11flexbox.css | 57 - Frontend/assets/css/tools/mock/r11modal.css | 104 - Frontend/assets/css/tools/mock/r11popup.css | 83 - Frontend/assets/css/tools/mock/r11tables.css | 96 - Frontend/assets/css/tools/mock/r11tool.css | 322 - Frontend/assets/css/tools/mock/r11tooltip.css | 76 - Frontend/assets/css/tools/r11form.css | 520 - .../fonts/Nunito-Italic-VariableFont_wght.ttf | Bin 280276 -> 0 bytes .../assets/fonts/Nunito-VariableFont_wght.ttf | Bin 275644 -> 0 bytes Frontend/assets/images/background.jpg | Bin 297790 -> 0 bytes Frontend/assets/samples/XSLTTemplate.xslt | 14 - Frontend/assets/samples/sampleXMLForXSD.xml | 33 - Frontend/assets/samples/sampleXSD.xsd | 42 - Frontend/assets/scripts/common/hljs.min.js | 1202 -- .../scripts/common/jquery-3.6.0.slim.min.js | 2 - Frontend/assets/scripts/frame.js | 123 - Frontend/assets/scripts/tools/highlight.js | 64 - .../assets/scripts/tools/jsonFormatter.js | 250 - .../assets/scripts/tools/mock/datatransfer.js | 254 - Frontend/assets/scripts/tools/mock/fiddle.js | 5 - .../scripts/tools/mock/historyloader.js | 49 - Frontend/assets/scripts/tools/mock/modal.js | 53 - Frontend/assets/scripts/tools/mock/popup.js | 34 - .../assets/scripts/tools/mock/uianimation.js | 165 - Frontend/assets/scripts/tools/scripts.js | 414 - Frontend/assets/scripts/tools/xmlFormatter.js | 34 - Frontend/assets/scripts/tools/xpath.js | 174 - Frontend/assets/scripts/tools/xsd.js | 51 - Frontend/assets/scripts/tools/xslt.js | 100 - Frontend/common.css | 6 - Frontend/env.d.ts | 1 + Frontend/index.html | 64 +- Frontend/insert_version.sh | 5 - Frontend/lawful/privacy-policy.html | 43 - Frontend/lawful/terms-of-service.html | 43 - Frontend/nginx.conf | 6 + Frontend/package-lock.json | 8055 ++++++++ Frontend/package.json | 43 + Frontend/postcss.config.js | 7 + Frontend/src/App.vue | 18 + .../{assets/images => src/assets}/favicon.ico | Bin .../images => src/assets}/logo_biale.svg | 0 .../images => src/assets}/logo_czarne.svg | 0 Frontend/src/assets/sampleHtml.html | 14 + Frontend/src/assets/sampleXQuery.xquery | 5 + Frontend/src/assets/sampleXml.xml | 62 + Frontend/src/assets/sampleXsd.xml | 41 + Frontend/src/assets/sampleXslt.xml | 17 + .../src/assets/tooltips/xpath/xpath1.json | 537 + .../src/assets/tooltips/xpath/xpath2.json | 2522 +++ .../src/assets/tooltips/xpath/xpath3.json | 3109 +++ .../src/assets/tooltips/xpath/xpath31.json | 3328 +++ .../src/assets/tooltips/xpath/xpathdiffs.json | 48 + Frontend/src/assets/tooltips/xslt/xslt1.json | 845 + Frontend/src/assets/tooltips/xslt/xslt3.json | 2064 ++ .../src/assets/tooltips/xslt/xsltdiffs.json | 52 + .../src/components/CodeEditorComponent.vue | 69 + .../common/InsertTemplateComponent.vue | 49 + .../HtmlButtonFormatterComponent.vue | 54 + .../JsonButtonFormatterComponent.vue | 54 + .../formatter/XMLButtonFormatterComponent.vue | 58 + .../components/landing/LandingComponent.vue | 18 + .../components/mock/BodyDetailComponent.vue | 18 + .../src/components/mock/HeadersComponent.vue | 74 + .../mock/HeadersDetailComponent.vue | 23 + .../src/components/mock/HistoryComponent.vue | 42 + .../src/components/mock/HistoryRecords.vue | 68 + .../mock/MockedMessageToastComponent.vue | 36 + .../mock/RestMockMessageComponent.vue | 83 + .../src/components/mock/SaveComponent.vue | 46 + .../components/sidebar/FooterComponent.vue | 15 + .../components/sidebar/SidebarComponent.vue | 55 + .../sidebar/SidebarMenuElementComponent.vue | 28 + .../sidebar/SidebarToolLinkComponent.vue | 22 + .../components/xml/XmlInputFieldComponent.vue | 56 + .../xml/XmlInputFieldToolbarComponent.vue | 22 + .../xml/XmlOutputFieldComponent.vue | 151 + .../src/components/xml/XmlToolComponent.vue | 83 + .../xml/tooltips/TooltipCategoryComponent.vue | 22 + .../xml/tooltips/TooltipComponent.vue | 73 + .../xml/tooltips/TooltipDiffsComponent.vue | 71 + .../xml/tooltips/TooltipEntryComponent.vue | 110 + Frontend/src/main.ts | 6 + Frontend/src/router/index.ts | 70 + Frontend/src/shims-svg.d.ts | 5 + Frontend/src/shims-vue.d.ts | 1 + Frontend/src/style.css | 15 + Frontend/src/views/HtmlFormatterView.vue | 34 + Frontend/src/views/JsonFormatterView.vue | 37 + Frontend/src/views/LandingView.vue | 15 + Frontend/src/views/RestMockView.vue | 14 + Frontend/src/views/XPathView.vue | 29 + Frontend/src/views/XQueryView.vue | 20 + Frontend/src/views/XSDView.vue | 20 + Frontend/src/views/XSLTView.vue | 28 + Frontend/src/views/XmlFormatterView.vue | 37 + Frontend/tailwind.config.js | 11 + Frontend/tools/jsonFormatter.html | 64 - Frontend/tools/mock.html | 242 - Frontend/tools/xmlFormatter.html | 68 - Frontend/tools/xpath.html | 17121 ---------------- Frontend/tools/xsd.html | 85 - Frontend/tools/xslt.html | 1153 -- Frontend/tsconfig.app.json | 12 + Frontend/tsconfig.json | 29 + Frontend/tsconfig.node.json | 15 + Frontend/vite.config.ts | 40 + .../xquery/sampleXML.xml | 0 Samples/xquery/xquery.curl | 4 + Samples/xquery/xquery.json | 6 + Samples/xsd/sample.xsd | 10 + dev.sh | 1 + docker-compose.dev.yml | 75 + docker-compose.yml | 4 +- readme.md | 3 + 167 files changed, 23310 insertions(+), 24128 deletions(-) create mode 100644 Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java create mode 100644 Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java create mode 100644 Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java rename Backend/tools-services/src/main/java/com/r11/tools/{controller/internal => model}/XPathQueryResult.java (90%) create mode 100644 Frontend/.dockerignore create mode 100644 Frontend/.eslintrc.cjs create mode 100644 Frontend/.gitignore create mode 100644 Frontend/.prettierrc.json create mode 100644 Frontend/README.md delete mode 100644 Frontend/assets/css/common/common.css delete mode 100644 Frontend/assets/css/common/font/fontello.eot delete mode 100644 Frontend/assets/css/common/font/fontello.svg delete mode 100644 Frontend/assets/css/common/font/fontello.ttf delete mode 100644 Frontend/assets/css/common/font/fontello.woff delete mode 100644 Frontend/assets/css/common/font/fontello.woff2 delete mode 100644 Frontend/assets/css/common/fontello.css delete mode 100644 Frontend/assets/css/frame.css delete mode 100644 Frontend/assets/css/highlight.css delete mode 100644 Frontend/assets/css/lawful.css delete mode 100644 Frontend/assets/css/tools/font/fontello.eot delete mode 100644 Frontend/assets/css/tools/font/fontello.svg delete mode 100644 Frontend/assets/css/tools/font/fontello.ttf delete mode 100644 Frontend/assets/css/tools/font/fontello.woff delete mode 100644 Frontend/assets/css/tools/font/fontello.woff2 delete mode 100644 Frontend/assets/css/tools/fontello.css delete mode 100644 Frontend/assets/css/tools/mock/common.css delete mode 100644 Frontend/assets/css/tools/mock/font/Material-Icons.woff2 delete mode 100644 Frontend/assets/css/tools/mock/font/Nunito-VariableFont_wght.ttf delete mode 100644 Frontend/assets/css/tools/mock/font/fontello.eot delete mode 100644 Frontend/assets/css/tools/mock/font/fontello.svg delete mode 100644 Frontend/assets/css/tools/mock/font/fontello.ttf delete mode 100644 Frontend/assets/css/tools/mock/font/fontello.woff delete mode 100644 Frontend/assets/css/tools/mock/font/fontello.woff2 delete mode 100644 Frontend/assets/css/tools/mock/fontello.css delete mode 100644 Frontend/assets/css/tools/mock/main.css delete mode 100644 Frontend/assets/css/tools/mock/r11addons.css delete mode 100644 Frontend/assets/css/tools/mock/r11flexbox.css delete mode 100644 Frontend/assets/css/tools/mock/r11modal.css delete mode 100644 Frontend/assets/css/tools/mock/r11popup.css delete mode 100644 Frontend/assets/css/tools/mock/r11tables.css delete mode 100644 Frontend/assets/css/tools/mock/r11tool.css delete mode 100644 Frontend/assets/css/tools/mock/r11tooltip.css delete mode 100644 Frontend/assets/css/tools/r11form.css delete mode 100644 Frontend/assets/fonts/Nunito-Italic-VariableFont_wght.ttf delete mode 100644 Frontend/assets/fonts/Nunito-VariableFont_wght.ttf delete mode 100644 Frontend/assets/images/background.jpg delete mode 100644 Frontend/assets/samples/XSLTTemplate.xslt delete mode 100644 Frontend/assets/samples/sampleXMLForXSD.xml delete mode 100644 Frontend/assets/samples/sampleXSD.xsd delete mode 100644 Frontend/assets/scripts/common/hljs.min.js delete mode 100644 Frontend/assets/scripts/common/jquery-3.6.0.slim.min.js delete mode 100644 Frontend/assets/scripts/frame.js delete mode 100644 Frontend/assets/scripts/tools/highlight.js delete mode 100644 Frontend/assets/scripts/tools/jsonFormatter.js delete mode 100644 Frontend/assets/scripts/tools/mock/datatransfer.js delete mode 100644 Frontend/assets/scripts/tools/mock/fiddle.js delete mode 100644 Frontend/assets/scripts/tools/mock/historyloader.js delete mode 100644 Frontend/assets/scripts/tools/mock/modal.js delete mode 100644 Frontend/assets/scripts/tools/mock/popup.js delete mode 100644 Frontend/assets/scripts/tools/mock/uianimation.js delete mode 100644 Frontend/assets/scripts/tools/scripts.js delete mode 100644 Frontend/assets/scripts/tools/xmlFormatter.js delete mode 100644 Frontend/assets/scripts/tools/xpath.js delete mode 100644 Frontend/assets/scripts/tools/xsd.js delete mode 100644 Frontend/assets/scripts/tools/xslt.js delete mode 100644 Frontend/common.css create mode 100644 Frontend/env.d.ts delete mode 100644 Frontend/insert_version.sh delete mode 100644 Frontend/lawful/privacy-policy.html delete mode 100644 Frontend/lawful/terms-of-service.html create mode 100644 Frontend/package-lock.json create mode 100644 Frontend/package.json create mode 100644 Frontend/postcss.config.js create mode 100644 Frontend/src/App.vue rename Frontend/{assets/images => src/assets}/favicon.ico (100%) rename Frontend/{assets/images => src/assets}/logo_biale.svg (100%) rename Frontend/{assets/images => src/assets}/logo_czarne.svg (100%) create mode 100644 Frontend/src/assets/sampleHtml.html create mode 100644 Frontend/src/assets/sampleXQuery.xquery create mode 100644 Frontend/src/assets/sampleXml.xml create mode 100644 Frontend/src/assets/sampleXsd.xml create mode 100644 Frontend/src/assets/sampleXslt.xml create mode 100644 Frontend/src/assets/tooltips/xpath/xpath1.json create mode 100644 Frontend/src/assets/tooltips/xpath/xpath2.json create mode 100644 Frontend/src/assets/tooltips/xpath/xpath3.json create mode 100644 Frontend/src/assets/tooltips/xpath/xpath31.json create mode 100644 Frontend/src/assets/tooltips/xpath/xpathdiffs.json create mode 100644 Frontend/src/assets/tooltips/xslt/xslt1.json create mode 100644 Frontend/src/assets/tooltips/xslt/xslt3.json create mode 100644 Frontend/src/assets/tooltips/xslt/xsltdiffs.json create mode 100644 Frontend/src/components/CodeEditorComponent.vue create mode 100644 Frontend/src/components/common/InsertTemplateComponent.vue create mode 100644 Frontend/src/components/formatter/HtmlButtonFormatterComponent.vue create mode 100644 Frontend/src/components/formatter/JsonButtonFormatterComponent.vue create mode 100644 Frontend/src/components/formatter/XMLButtonFormatterComponent.vue create mode 100644 Frontend/src/components/landing/LandingComponent.vue create mode 100644 Frontend/src/components/mock/BodyDetailComponent.vue create mode 100644 Frontend/src/components/mock/HeadersComponent.vue create mode 100644 Frontend/src/components/mock/HeadersDetailComponent.vue create mode 100644 Frontend/src/components/mock/HistoryComponent.vue create mode 100644 Frontend/src/components/mock/HistoryRecords.vue create mode 100644 Frontend/src/components/mock/MockedMessageToastComponent.vue create mode 100644 Frontend/src/components/mock/RestMockMessageComponent.vue create mode 100644 Frontend/src/components/mock/SaveComponent.vue create mode 100644 Frontend/src/components/sidebar/FooterComponent.vue create mode 100644 Frontend/src/components/sidebar/SidebarComponent.vue create mode 100644 Frontend/src/components/sidebar/SidebarMenuElementComponent.vue create mode 100644 Frontend/src/components/sidebar/SidebarToolLinkComponent.vue create mode 100644 Frontend/src/components/xml/XmlInputFieldComponent.vue create mode 100644 Frontend/src/components/xml/XmlInputFieldToolbarComponent.vue create mode 100644 Frontend/src/components/xml/XmlOutputFieldComponent.vue create mode 100644 Frontend/src/components/xml/XmlToolComponent.vue create mode 100644 Frontend/src/components/xml/tooltips/TooltipCategoryComponent.vue create mode 100644 Frontend/src/components/xml/tooltips/TooltipComponent.vue create mode 100644 Frontend/src/components/xml/tooltips/TooltipDiffsComponent.vue create mode 100644 Frontend/src/components/xml/tooltips/TooltipEntryComponent.vue create mode 100644 Frontend/src/main.ts create mode 100644 Frontend/src/router/index.ts create mode 100644 Frontend/src/shims-svg.d.ts create mode 100644 Frontend/src/shims-vue.d.ts create mode 100644 Frontend/src/style.css create mode 100644 Frontend/src/views/HtmlFormatterView.vue create mode 100644 Frontend/src/views/JsonFormatterView.vue create mode 100644 Frontend/src/views/LandingView.vue create mode 100644 Frontend/src/views/RestMockView.vue create mode 100644 Frontend/src/views/XPathView.vue create mode 100644 Frontend/src/views/XQueryView.vue create mode 100644 Frontend/src/views/XSDView.vue create mode 100644 Frontend/src/views/XSLTView.vue create mode 100644 Frontend/src/views/XmlFormatterView.vue create mode 100644 Frontend/tailwind.config.js delete mode 100644 Frontend/tools/jsonFormatter.html delete mode 100644 Frontend/tools/mock.html delete mode 100644 Frontend/tools/xmlFormatter.html delete mode 100644 Frontend/tools/xpath.html delete mode 100644 Frontend/tools/xsd.html delete mode 100644 Frontend/tools/xslt.html create mode 100644 Frontend/tsconfig.app.json create mode 100644 Frontend/tsconfig.json create mode 100644 Frontend/tsconfig.node.json create mode 100644 Frontend/vite.config.ts rename Frontend/assets/samples/sampleXml.xml => Samples/xquery/sampleXML.xml (100%) create mode 100644 Samples/xquery/xquery.curl create mode 100644 Samples/xquery/xquery.json create mode 100644 Samples/xsd/sample.xsd create mode 100755 dev.sh create mode 100644 docker-compose.dev.yml diff --git a/Backend-libXML/Parser.py b/Backend-libXML/Parser.py index 687fb74..442484d 100644 --- a/Backend-libXML/Parser.py +++ b/Backend-libXML/Parser.py @@ -1,7 +1,28 @@ -from lxml import etree +from lxml import etree, html from io import BytesIO +def convertHTML(source: str, sourceFrom: str): + htmlParser = html.HTMLParser(remove_comments=True, remove_blank_text=True) + xmlParser = etree.XMLParser(remove_comments=True, remove_blank_text=True) + + if sourceFrom == "xml": + xmldoc = etree.parse(BytesIO(source.encode("utf-8")), xmlParser) + return html.tostring(xmldoc, method="html", pretty_print=True, doctype="").decode() + elif sourceFrom == "html": + htmldoc = html.parse(BytesIO(source.encode("utf-8")), htmlParser) + return etree.tostring(htmldoc, method="xml", pretty_print=True, doctype="", xml_declaration=True, encoding="utf-8").decode() + else: + return + + +def formatHTML(source: str, prettify: bool) -> str: + parser = html.HTMLParser(remove_blank_text=True, remove_comments=True, remove_pis=True) + htmlDoc = html.parse(BytesIO(source.encode("utf-8")),parser=parser) + if not prettify: + return html.tostring(htmlDoc).decode().replace("\n", "").replace("> ", ">") + return etree.tostring(htmlDoc, encoding='unicode', pretty_print=True) + def formatXML(source: str, prettify: bool) -> str: """Method used to format XML @@ -77,10 +98,12 @@ def xsd(source: str, xsd: str) -> bool: document_input = BytesIO(source.encode("utf-8")) xml = etree.parse(document_input).getroot() - if xml_schema.validate(xml): - return "XML is valid." - else: - return "XML is NOT valid." + try: + xml_schema.assertValid(xml) + return "XML is valid" + except etree.DocumentInvalid as e: + return str(e) + def xslt(source: str, xslt: str) -> str: diff --git a/Backend-libXML/main.py b/Backend-libXML/main.py index e4fefe5..abb78f9 100644 --- a/Backend-libXML/main.py +++ b/Backend-libXML/main.py @@ -40,6 +40,12 @@ def process_xml(request: request, type: str) -> str: response_json['result'] = Parser.formatXML(data, True) elif (type == "minimize"): response_json['result'] = Parser.formatXML(data, False) + elif (type == "prettifyHtml"): + response_json['result'] = Parser.formatHTML(data, True) + elif (type == "minimizeHtml"): + response_json['result'] = Parser.formatHTML(data, False) + elif (type == "convertHTML"): + response_json['result'] = Parser.convertHTML(data, process) else: raise ValueError("Valid operation types are: xsd, xslt, xpath") @@ -54,7 +60,7 @@ def process_xml(request: request, type: str) -> str: code = 400 finally: exec_time = (time.time_ns() - start) / 10**6 - response_json['time'] = f"{exec_time:.03f}" + response_json['duration'] = f"{exec_time:.03f}" response_json['processor'] = "libxml2 over lxml" return json.dumps(response_json), code @@ -79,5 +85,17 @@ def prettify(): def minimize(): return process_xml(request, "minimize") +@app.route("/html/prettify",methods=["POST"]) +def prettifyHtml(): + return process_xml(request, "prettifyHtml") + +@app.route("/html/minimize",methods=["POST"]) +def minimizeHtml(): + return process_xml(request, "minimizeHtml") + +@app.route("/html/convert",methods=["POST"]) +def XMLToHTMLConvertion(): + return process_xml(request, "convertHTML") + if __name__ == "__main__": app.run() \ No newline at end of file diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/controller/MockController.java b/Backend/mocked-services/src/main/java/com/r11/tools/controller/MockController.java index a9af2c3..e76c808 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/controller/MockController.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/controller/MockController.java @@ -1,6 +1,5 @@ package com.r11.tools.controller; -import com.fasterxml.jackson.databind.ObjectMapper; import com.r11.tools.model.MockedMessageDto; import com.r11.tools.service.KlausService; import lombok.AllArgsConstructor; @@ -9,12 +8,12 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.time.LocalDateTime; -import java.util.*; +import java.util.Arrays; +import java.util.Objects; +import java.util.UUID; /** * Returns the homepage and provides the api for javascript async requests. @@ -36,14 +35,12 @@ public class MockController { /** * Updates queried message with given set of data - * @param body {@link MockedMessageDto} json representation + * @param message {@link MockedMessageDto} json representation * @return confirmation and 200 OK */ @SneakyThrows @PutMapping - public ResponseEntity updateMessage(@RequestBody String body){ - ObjectMapper mapper = new ObjectMapper(); - MockedMessageDto message = mapper.readValue(body, MockedMessageDto.class); + public ResponseEntity updateMessage(@RequestBody MockedMessageDto message){ return klausService.setMockedResponse(message); } @@ -59,40 +56,10 @@ public class MockController { MockedMessageDto message ; if(uuidValue == null || uuidValue.equals("")) clientUUID = UUID.randomUUID(); else clientUUID = UUID.fromString(uuidValue); - message = klausService - .getMockedMessageByClientUUID(clientUUID) - .orElse( buildDefaultMessage(clientUUID) ); - + message = klausService.getMockedResponse(clientUUID.toString()); return message; } - - /** - * Constructs message with default set of data - * @param uuid the key-uuid of given set of messages - * @return message with default dataset - */ - private MockedMessageDto buildDefaultMessage(UUID uuid){ - Map headers = new HashMap<>(); - headers.put("Keep-Alive", "timeout=60"); - headers.put("Connection", "keep-alive"); - headers.put("Date", LocalDateTime.now().toString()); - MockedMessageDto mockedMessageDto = MockedMessageDto.builder() - .clientUUID(uuid) - .contentType(MediaType.APPLICATION_XML_VALUE) - .messageBody("\n" + - "\n" + - " Tove\n" + - " Jani\n" + - " Reminder\n" + - " Don't forget me this weekend!\n" + - "") - .httpHeaders(headers) - .httpStatus(200) - .build(); - klausService.setMockedResponse(mockedMessageDto); - return mockedMessageDto; - } /** * It's one of the most important features - the bread and butter of the Mocked Service. It's link that allows * to receive mocked response from the server and use it to mock! @@ -101,7 +68,7 @@ public class MockController { */ @RequestMapping(value = "/r/{clientUUID}") public ResponseEntity getMockedResponse( - @PathVariable UUID clientUUID) { + @PathVariable String clientUUID) { MockedMessageDto mockedMessageDto = klausService.getMockedResponse(clientUUID); HttpHeaders httpHeaders = new HttpHeaders(); if (mockedMessageDto.getHttpHeaders() != null) mockedMessageDto.getHttpHeaders().forEach(httpHeaders::set); diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessage.java b/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessage.java index a0b6d0e..efbe3aa 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessage.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessage.java @@ -26,7 +26,7 @@ import java.util.UUID; public class MockedMessage implements Serializable { @Indexed @Id - private UUID clientUUID; + private String clientUUID; private String contentType; private String messageBody; private Map httpHeaders; diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessageDto.java b/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessageDto.java index d3206ed..0f5f078 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessageDto.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/model/MockedMessageDto.java @@ -18,7 +18,7 @@ import java.util.UUID; @NoArgsConstructor @AllArgsConstructor public class MockedMessageDto implements Serializable{ - private UUID clientUUID; + private String clientUUID; private String contentType; private String messageBody; private Map httpHeaders; diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/repository/MockedResponseRepository.java b/Backend/mocked-services/src/main/java/com/r11/tools/repository/MockedResponseRepository.java index f9296fa..b3fb3b6 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/repository/MockedResponseRepository.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/repository/MockedResponseRepository.java @@ -1,24 +1,16 @@ package com.r11.tools.repository; import com.r11.tools.model.MockedMessage; -import java.util.List; -import java.util.Optional; -import java.util.UUID; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import java.util.Optional; + /** * Spring repository that allows to retrieve message list by key-uuid from redis database * @author Rafał Żukowicz */ @Repository @Transactional -public interface MockedResponseRepository extends CrudRepository { - /** - * Finds all messages by their uuid - * @param clientUUID the key-uuid of given set of messages - * @return Optional of list of {@link com.r11.tools.model.MockedMessage} - */ - Optional findAllByClientUUID(UUID clientUUID); -} +public interface MockedResponseRepository extends CrudRepository {} diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausService.java b/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausService.java index 1c5079a..c0b7dcd 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausService.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausService.java @@ -13,7 +13,6 @@ import org.springframework.stereotype.Service; */ @Service public interface KlausService { - Optional getMockedMessageByClientUUID(UUID clientUUID); - MockedMessageDto getMockedResponse(UUID clientUUID); + MockedMessageDto getMockedResponse(String clientUUID); ResponseEntity setMockedResponse(MockedMessageDto mockedMessageDto); } diff --git a/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausServiceImpl.java b/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausServiceImpl.java index 08f3569..a2d33a0 100644 --- a/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausServiceImpl.java +++ b/Backend/mocked-services/src/main/java/com/r11/tools/service/KlausServiceImpl.java @@ -10,11 +10,14 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; -import java.util.UUID; /** * Service for {@link com.r11.tools.controller.MockController} and {@link com.r11.tools.controller.MockController} @@ -31,18 +34,6 @@ public class KlausServiceImpl implements KlausService { private final MockedResponseRepository mockedResponseRepository; - /** - * Returns all messages of given key-uuid - * @param clientUUID the key-uuid of given set of messages - * @return List of {@link MockedMessageDto} - */ - @Override - public Optional getMockedMessageByClientUUID(UUID clientUUID){ - Optional mockedMessageOptional = mockedResponseRepository.findAllByClientUUID(clientUUID); - log.info("Message for UUID: "+clientUUID+" has been fetched from DB."); - return mockedMessageMapper.optionalMockedMessageToOptionalMockedMessageDTO(mockedMessageOptional); - } - /** * Returns {@link MockedMessageDto} of given id and key-uuid. If message doesn't then empty message is returned * @param clientUUID the key-uuid of given set of messages @@ -50,18 +41,44 @@ public class KlausServiceImpl implements KlausService { */ @SneakyThrows @Override - public MockedMessageDto getMockedResponse(UUID clientUUID){ + public MockedMessageDto getMockedResponse(String clientUUID){ Optional optionalMockedMessage = mockedResponseRepository.findById(clientUUID); - MockedMessageDto mockedMessageDto = MockedMessageDto.builder() - .clientUUID(clientUUID) - .build(); + MockedMessageDto mockedMessageDto; if (optionalMockedMessage.isPresent()) { mockedMessageDto = mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get()); - //log.info(mockedMessageDto.toString().replaceAll("\"", "\\\\\"")); return mockedMessageDto; + } else { + MockedMessageDto defaultMessage = buildDefaultMessage(clientUUID); + setMockedResponse(defaultMessage); + return defaultMessage; } - //log.info(mockedMessageDto.toString().replaceAll("\"", "\\\\\"")); - return mockedMessageDto; + } + + /** + * Constructs message with default set of data + * @param uuid the key-uuid of given set of messages + * @return message with default dataset + */ + + + private MockedMessageDto buildDefaultMessage(String uuid){ + Map headers = new HashMap<>(); + headers.put("Keep-Alive", "timeout=60"); + headers.put("Connection", "keep-alive"); + headers.put("Date", LocalDateTime.now().toString()); + return MockedMessageDto.builder() + .clientUUID(uuid) + .contentType(MediaType.APPLICATION_XML_VALUE) + .messageBody("\n" + + "\n" + + " Tove\n" + + " Jani\n" + + " Reminder\n" + + " Don't forget me this weekend!\n" + + "") + .httpHeaders(headers) + .httpStatus(200) + .build(); } /** @@ -72,8 +89,10 @@ public class KlausServiceImpl implements KlausService { @SneakyThrows @Override public ResponseEntity setMockedResponse(MockedMessageDto mockedMessageDto) { - mockedResponseRepository.save(mockedMessageMapper.mockedMessageDtoToMockedMessage(mockedMessageDto)); - //log.info(mockedMessageDto.toString().replaceAll("\"", "\\\\\"")); + MockedMessage message = mockedMessageMapper.mockedMessageDtoToMockedMessage(mockedMessageDto); + message.setCreatedAt(LocalDateTime.now()); + log.info("SAVE:"+message.toString().replace("\n"," ")); + mockedResponseRepository.save(message); return new ResponseEntity<>("MockedResponse has been setup successfully!", new HttpHeaders(), HttpStatus.ACCEPTED); } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java b/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java index 58149be..4908e9b 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java @@ -2,11 +2,7 @@ package com.r11.tools; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.r11.tools.controller.JsonController; -import com.r11.tools.controller.ProcessorInfoController; -import com.r11.tools.controller.XPathController; -import com.r11.tools.controller.XsdController; -import com.r11.tools.controller.XsltController; +import com.r11.tools.controller.*; import com.r11.tools.controller.internal.RestControllerRegistry; import com.r11.tools.xml.Saxon; import com.r11.tools.xml.Xalan; @@ -48,6 +44,7 @@ public class SparkApplication { registry.registerController(new XPathController(gson, logger, saxon, xalan)); registry.registerController(new XsltController(gson, logger, saxon, xalan)); registry.registerController(new JsonController(gson, jsongson, logger)); + registry.registerController(new XQueryController(gson, logger, saxon)); registry.register(); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index a188566..dbf3840 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -1,8 +1,10 @@ package com.r11.tools.controller; import com.google.gson.Gson; -import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; +import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; +import com.r11.tools.model.XPathQueryResult; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -24,109 +26,69 @@ public class XPathController implements RestController { this.xalan = xalan; } + private XMLResponseBody errorResponse(String message, String processor) { + return new XMLResponseBody(message, "ERR", processor, -1); + } + + private void nonValidEngineSelectedResponse(Response response) { + XMLResponseBody responseBody = + errorResponse("Valid engines are: saxon, xalan", "N/A"); + response.body(this.gson.toJson(responseBody)); + response.status(400); + } + @ScopedControllerManifest(method = HandlerType.POST, path = "/xpath") - public void transform(Request request, Response response) { - String body = request.body(); - - JsonObject requestJson; + public void acceptRequest(Request request, Response response) { + XMLRequestBody requestBody; try { - requestJson = this.gson.fromJson(body, JsonObject.class); + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - JsonObject responseJson = new JsonObject(); - responseJson.addProperty("result", e.getMessage()); - responseJson.addProperty("processor", "N/A"); - responseJson.addProperty("status", "ERR"); - responseJson.addProperty("time", "N/A"); - + XMLResponseBody responseBody = errorResponse(e.getMessage(), "N/A"); response.status(400); - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); return; } - String data = requestJson.get("data").getAsString(); - String query = requestJson.get("process").getAsString(); - String processor = requestJson.get("processor").getAsString(); - String version = requestJson.get("version").getAsString(); - - if (processor == null) { - response.body("saxon, xalan"); + if (requestBody.getProcessor() == null) { + nonValidEngineSelectedResponse(response); return; } - JsonObject responseJson = new JsonObject(); - switch (processor) { + switch (requestBody.getProcessor()) { case "saxon": - processWithSaxon(response, data, query, version, responseJson); + process(response, requestBody, saxon); break; case "xalan": - processWithXalan(response, data, query, responseJson); + process(response, requestBody, xalan); break; default: - response.body("saxon, xalan"); + nonValidEngineSelectedResponse(response); } } - private void processWithXalan(Response response, String data, String query, JsonObject responseJson) { - long timeStart; - long duration; - response.header("processor", xalan.getVersion()); - timeStart = System.currentTimeMillis(); - + private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { + long timeStart = System.currentTimeMillis(); + XMLResponseBody responseBody = null; try { - XPathQueryResult xPathQueryResult = xalan.processXPath(data, query, ""); + XPathQueryResult xPathQueryResult = + engine.processXPath(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()); response.status(200); - - responseJson.addProperty("result", xPathQueryResult.getData().trim()); - responseJson.addProperty("status", "OK"); - responseJson.addProperty("type", xPathQueryResult.getType()); + long duration = System.currentTimeMillis() - timeStart; + responseBody = new XMLResponseBody(xPathQueryResult.getData().trim(), + "OK", engine.getVersion(),duration); + + responseBody.setType(xPathQueryResult.getType()); + this.logger.info("Request (XPath, " + engine.getVersion() + ") processed in " + duration + " ms."); } catch (Exception ex) { - this.logger.error("Error on processing XPath using Xalan. " + ex); - + responseBody = errorResponse(ex.getMessage(), engine.getVersion()); response.status(400); - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + this.logger.error("Error on processing XPath using " + engine.getVersion() + ". " + ex); + } finally { + response.body(this.gson.toJson(responseBody)); } - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XPath, Xalan) processed in " + duration + " ms."); - - responseJson.addProperty("processor", xalan.getVersion()); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); } - private void processWithSaxon(Response response, String data, String query, String version, JsonObject responseJson) { - long timeStart; - String tmp; - long duration; - response.header("processor", "Saxon " + saxon.getVersion() + " " + version + " over s9api"); - timeStart = System.currentTimeMillis(); - - try { - tmp = saxon.processXPath(data, query, version).getData().trim(); - - response.status(200); - - responseJson.addProperty("result", tmp); - responseJson.addProperty("status", "OK"); - } catch (Exception ex) { - this.logger.error("Error on processing XPath using Saxon. " + ex); - - response.status(400); - - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); - } - - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XPath, Saxon) processed in " + duration + " ms."); - - responseJson.addProperty("processor", "Saxon " + saxon.getVersion() + " " + version + " over s9api"); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); - } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java new file mode 100644 index 0000000..59bec6a --- /dev/null +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -0,0 +1,87 @@ +package com.r11.tools.controller; + +import com.google.gson.Gson; +import com.r11.tools.controller.internal.*; +import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; +import com.r11.tools.xml.XmlEngine; +import org.apache.logging.log4j.Logger; +import spark.Request; +import spark.Response; + +/** + * Controller used to handle XQuery tool. Currently, it supports Saxon engine + * @author Adam Bem + */ +@GlobalControllerManifest +public class XQueryController implements RestController { + + private final Gson gson; + private final Logger logger; + private final XmlEngine saxon; + + public XQueryController(Gson gson, Logger logger, XmlEngine saxon) { + this.gson = gson; + this.logger = logger; + this.saxon = saxon; + } + + private XMLResponseBody prepareErrorResponse(String message, String processor) { + return new XMLResponseBody(message, "ERR", processor, -1); + } + + private void nonValidEngineSelectedResponse(Response response) { + XMLResponseBody responseBody = + prepareErrorResponse("Valid engines are: saxon", "N/A"); + response.body(this.gson.toJson(responseBody)); + response.status(400); + } + + @ScopedControllerManifest(method = HandlerType.POST, path = "/xquery") + public void acceptRequest(Request request, Response response) { + XMLRequestBody requestBody; + try { + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); + } catch (Exception e) { + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); + + response.status(400); + response.body(this.gson.toJson(responseBody)); + return; + } + if (requestBody.getProcessor() == null) { + nonValidEngineSelectedResponse(response); + return; + } + + if (requestBody.getProcessor().equalsIgnoreCase("saxon")) + process(response, requestBody, saxon); + else + nonValidEngineSelectedResponse(response); + } + + private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { + XMLResponseBody responseBody = null; + long timeStart = System.currentTimeMillis(); + try { + String result = engine.executeXQuery(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()); + + response.status(200); + + long duration = System.currentTimeMillis() - timeStart; + responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); + + this.logger.info("Request (XQuery, " + engine.getVersion() + ") processed in " + duration + " ms."); + } catch (Exception ex) { + response.status(400); + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); + + this.logger.error("Error on processing XQuery using " + engine.getVersion() + ". " + ex); + } + finally { + response.body(this.gson.toJson(responseBody)); + } + + } + +} diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index 3a04ce6..294c6dc 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -1,12 +1,9 @@ package com.r11.tools.controller; import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.r11.tools.controller.internal.GlobalControllerManifest; -import com.r11.tools.controller.internal.HandlerType; -import com.r11.tools.controller.internal.RestController; -import com.r11.tools.controller.internal.ScopedControllerManifest; -import com.r11.tools.xml.Xalan; +import com.r11.tools.controller.internal.*; +import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -26,57 +23,63 @@ public class XsdController implements RestController { this.xalan = xalan; } - @ScopedControllerManifest(method = HandlerType.POST, path = "/xsd") - public Response transform(Request request, Response response) { - String body = request.body(); + private XMLResponseBody prepareErrorResponse(String message, String processor) { + return new XMLResponseBody(message, "ERR", processor, -1); + } - JsonObject requestJson; + private void nonValidEngineSelectedResponse(Response response) { + XMLResponseBody responseBody = + prepareErrorResponse("Valid engines is: xalan", "N/A"); + response.body(this.gson.toJson(responseBody)); + response.status(400); + } + @ScopedControllerManifest(method = HandlerType.POST, path = "/xsd") + public void acceptRequest(Request request, Response response) { + XMLRequestBody requestBody; try { - requestJson = this.gson.fromJson(body, JsonObject.class); + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - JsonObject responseJson = new JsonObject(); - responseJson.addProperty("result", e.getMessage()); - responseJson.addProperty("processor", "N/A"); - responseJson.addProperty("status", "ERR"); - responseJson.addProperty("time", "N/A"); + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); - response.body(this.gson.toJson(responseJson)); - return response; + response.body(this.gson.toJson(responseBody)); + return; } - String data = requestJson.get("data").getAsString(); - String xsd = requestJson.get("process").getAsString(); + if (requestBody.getProcessor() == null) { + nonValidEngineSelectedResponse(response); + return; + } + if (requestBody.getProcessor().equalsIgnoreCase("xalan")) + process(response, requestBody, xalan); + else + nonValidEngineSelectedResponse(response); - response.header("processor", xalan.getVersion()); + } - long timeStart = System.currentTimeMillis(); - String tmp; - - JsonObject responseJson = new JsonObject(); + private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { + XMLResponseBody responseBody = null; try { - tmp = xalan.validate(data, xsd).trim(); + long timeStart = System.currentTimeMillis(); + String result = engine.validate(requestBody.getData(), requestBody.getProcess()).trim(); response.status(200); - responseJson.addProperty("result", tmp); - responseJson.addProperty("status", "OK"); - } catch (Exception ex) { - this.logger.error("Error on validation against XSD using Xalan. " + ex); + long duration = System.currentTimeMillis() - timeStart; + responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); + this.logger.info("Request (XSD, " + engine.getVersion() + ") processed in " + duration + " ms."); + } catch (Exception ex) { + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); response.status(400); - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + this.logger.error("Error on validation against XSD using " + engine.getVersion() + ". " + ex); + } + finally { + response.body(this.gson.toJson(responseBody)); } - long duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XSD, Xalan) processed in " + duration + " ms."); - responseJson.addProperty("processor", xalan.getVersion()); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); - return response; } + } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index 29e0fd6..a2b7e95 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -1,13 +1,9 @@ package com.r11.tools.controller; import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.r11.tools.controller.internal.GlobalControllerManifest; -import com.r11.tools.controller.internal.HandlerType; -import com.r11.tools.controller.internal.RestController; -import com.r11.tools.controller.internal.ScopedControllerManifest; -import com.r11.tools.xml.Saxon; -import com.r11.tools.xml.Xalan; +import com.r11.tools.controller.internal.*; +import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -29,106 +25,69 @@ public class XsltController implements RestController { this.xalan = xalan; } - @ScopedControllerManifest(method = HandlerType.POST, path = "/xslt") - public void transform(Request request, Response response) { - String body = request.body(); + private XMLResponseBody prepareErrorResponse(String message, String processor) { + return new XMLResponseBody(message, "ERR", processor, -1); + } - JsonObject requestJson; + private void nonValidEngineSelectedResponse(Response response) { + XMLResponseBody responseBody = + prepareErrorResponse("Valid engines are: saxon, xalan", "N/A"); + response.body(this.gson.toJson(responseBody)); + response.status(400); + } + + @ScopedControllerManifest(method = HandlerType.POST, path = "/xslt") + public void acceptRequest(Request request, Response response) { + XMLRequestBody requestBody; try { - requestJson = this.gson.fromJson(body, JsonObject.class); + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - JsonObject responseJson = new JsonObject(); - responseJson.addProperty("result", e.getMessage()); - responseJson.addProperty("processor", "N/A"); - responseJson.addProperty("status", "ERR"); - responseJson.addProperty("time", "N/A"); + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); return; } - String data = requestJson.get("data").getAsString(); - String query = requestJson.get("process").getAsString(); - String processor = requestJson.get("processor").getAsString(); - String version = requestJson.get("version").getAsString(); - - if (processor == null) { - response.body("saxon, xalan"); + if (requestBody.getProcessor() == null) { + nonValidEngineSelectedResponse(response); return; } - JsonObject responseJson = new JsonObject(); - switch (processor) { + + switch (requestBody.getProcessor()) { case "saxon": - processWithSaxon(response, data, query, version, responseJson); + process(response, requestBody, saxon); return; case "xalan": - processWithXalan(response, data, query, responseJson); + process(response, requestBody, xalan); return; default: - response.body("saxon, xalan"); + nonValidEngineSelectedResponse(response); } } - private void processWithXalan(Response response, String data, String query, JsonObject responseJson) { - long duration; - long timeStart; - String tmp; - timeStart = System.currentTimeMillis(); + private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { + XMLResponseBody responseBody = null; + long timeStart = System.currentTimeMillis(); try { - tmp = xalan.processXSLT(data, query); - + String result = engine.processXSLT(requestBody.getData(), requestBody.getProcess()); response.status(200); - responseJson.addProperty("result", tmp); - responseJson.addProperty("status", "OK"); + long duration = System.currentTimeMillis() - timeStart; + responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); + + this.logger.info("Request (XSLT, " + engine.getVersion() + ") processed in " + duration + " ms."); } catch (Exception ex) { - this.logger.error("Error on processing XSLT using Xalan. " + ex); - + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); response.status(400); + this.logger.error("Error on processing XSLT using " + engine.getVersion() + ". " + ex); - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + } finally { + response.body(this.gson.toJson(responseBody)); } - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XSLT, Xalan) processed in " + duration + " ms."); - - responseJson.addProperty("processor", xalan.getVersion()); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); } - private void processWithSaxon(Response response, String data, String query, String version, JsonObject responseJson) { - long duration; - String tmp; - long timeStart; - timeStart = System.currentTimeMillis(); - try { - tmp = saxon.processXSLT(data, query); - - response.status(200); - - responseJson.addProperty("result", tmp); - responseJson.addProperty("status", "OK"); - } catch (Exception ex) { - this.logger.error("Error on processing XSLT using Saxon. " + ex); - - response.status(400); - - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); - } - - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XSLT, Saxon) processed in " + duration + " ms."); - - responseJson.addProperty("processor", "Saxon " + saxon.getVersion() + " " + version); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); - } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java new file mode 100644 index 0000000..52e89eb --- /dev/null +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java @@ -0,0 +1,34 @@ +package com.r11.tools.model; + +import com.google.gson.annotations.SerializedName; + +/** + * POJO class used to contain body of XML related requests + * @author Adam + */ +public class XMLRequestBody { + @SerializedName("data") + private String data; + @SerializedName("process") + private String process; + @SerializedName("processor") + private String processor; + @SerializedName("version") + private String version; + + public String getData() { + return data; + } + + public String getProcess() { + return process; + } + + public String getProcessor() { + return processor; + } + + public String getVersion() { + return version; + } +} diff --git a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java new file mode 100644 index 0000000..42e52c1 --- /dev/null +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java @@ -0,0 +1,59 @@ +package com.r11.tools.model; + +public class XMLResponseBody { + + private String result; + private String status; + private String processor; + private long duration; + + // Optional + private String type; + + public XMLResponseBody(String result, String status, String processor, long duration) { + this.result = result; + this.status = status; + this.processor = processor; + this.duration = duration; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getProcessor() { + return processor; + } + + public void setProcessor(String processor) { + this.processor = processor; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XPathQueryResult.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XPathQueryResult.java similarity index 90% rename from Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XPathQueryResult.java rename to Backend/tools-services/src/main/java/com/r11/tools/model/XPathQueryResult.java index 8bb8a00..601c8c9 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XPathQueryResult.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XPathQueryResult.java @@ -1,4 +1,4 @@ -package com.r11.tools.controller.internal; +package com.r11.tools.model; /** * Class used to store data received from parser and type of that data (node, string, etc.) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java index f9f330b..897da0b 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java @@ -1,6 +1,6 @@ package com.r11.tools.xml; -import com.r11.tools.controller.internal.XPathQueryResult; +import com.r11.tools.model.XPathQueryResult; import net.sf.saxon.s9api.*; import javax.xml.transform.stream.StreamSource; @@ -39,6 +39,29 @@ public class Saxon implements XmlEngine{ throw new UnsupportedOperationException(); } + /** + * This method evaluates XQuery exporession on given xml + * @param data xml + * @param xquery expression + * @return + * @throws Exception + */ + @Override + public String executeXQuery(String data, String xquery, String version) throws Exception { + Processor processor = new Processor(false); + + XQueryCompiler compiler = processor.newXQueryCompiler(); + compiler.setLanguageVersion(version); + + XQueryExecutable executable = compiler.compile(xquery); + + XQueryEvaluator evaluator = executable.load(); + evaluator.setSource(new StreamSource(new StringReader(data))); + + XdmValue result = evaluator.evaluate(); + return result.toString(); + } + /** * Process xpath and return either node or wrapped atomic value * @param data xml to be querried @@ -76,6 +99,6 @@ public class Saxon implements XmlEngine{ * @return version of the processor */ public String getVersion() { - return new Processor(false).getSaxonProductVersion(); + return "Saxon " + new Processor(false).getSaxonProductVersion(); } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java index 51ad04f..befbe23 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java @@ -1,8 +1,7 @@ package com.r11.tools.xml; -import com.r11.tools.controller.internal.XPathQueryResult; +import com.r11.tools.model.XPathQueryResult; import org.apache.xpath.XPathAPI; -import org.apache.xpath.objects.XObject; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.traversal.NodeIterator; @@ -133,4 +132,9 @@ public class Xalan implements XmlEngine{ validator.validate(dataSource); return "XML file is valid"; } + + @Override + public String executeXQuery(String data, String xquery, String version) throws Exception { + throw new UnsupportedOperationException("Xalan doesn't support XQuery evaluation"); + } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java index 5742073..132c9d4 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java @@ -1,12 +1,14 @@ package com.r11.tools.xml; -import com.r11.tools.controller.internal.XPathQueryResult; +import com.r11.tools.model.XPathQueryResult; public interface XmlEngine { XPathQueryResult processXPath(String data, String query, String version) throws Exception; String processXSLT(String data, String transform) throws Exception; String validate(String data, String xsd) throws Exception; + String executeXQuery(String data, String xquery, String version) throws Exception; + public String getVersion(); } diff --git a/Frontend/.dockerignore b/Frontend/.dockerignore new file mode 100644 index 0000000..38adffa --- /dev/null +++ b/Frontend/.dockerignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Frontend/.eslintrc.cjs b/Frontend/.eslintrc.cjs new file mode 100644 index 0000000..6f40582 --- /dev/null +++ b/Frontend/.eslintrc.cjs @@ -0,0 +1,15 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier/skip-formatting' + ], + parserOptions: { + ecmaVersion: 'latest' + } +} diff --git a/Frontend/.gitignore b/Frontend/.gitignore new file mode 100644 index 0000000..38adffa --- /dev/null +++ b/Frontend/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Frontend/.prettierrc.json b/Frontend/.prettierrc.json new file mode 100644 index 0000000..66e2335 --- /dev/null +++ b/Frontend/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/Frontend/Dockerfile b/Frontend/Dockerfile index 4e9751f..0b44b57 100644 --- a/Frontend/Dockerfile +++ b/Frontend/Dockerfile @@ -1,20 +1,30 @@ -FROM nginx:stable-alpine +FROM node:latest as build-stage +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY ./ . +RUN npm run build + + + +FROM nginx:stable-alpine as production-stage +RUN mkdir /app RUN apk add --no-cache tzdata ENV TZ Europe/Warsaw -COPY ./tools/ /usr/share/nginx/html/tools/ -COPY ./lawful/ /usr/share/nginx/html/lawful/ -COPY ./assets/ /usr/share/nginx/html/assets/ -COPY ./index.html /usr/share/nginx/html +COPY --from=build-stage /app/dist /usr/share/nginx/html COPY ./nginx.conf /etc/nginx/conf.d/default.conf -RUN mkdir -p /scripts -COPY insert_version.sh /scripts/ -WORKDIR /scripts - -RUN chmod +x insert_version.sh -RUN ./insert_version.sh - - EXPOSE 80 +EXPOSE 443 + + +FROM node:latest as dev +WORKDIR /app +COPY package*.json ./ +RUN npm install +ENV HOST=0.0.0.0 +COPY . . +EXPOSE 8080 +CMD ["npm", "run", "dev"] diff --git a/Frontend/README.md b/Frontend/README.md new file mode 100644 index 0000000..831a223 --- /dev/null +++ b/Frontend/README.md @@ -0,0 +1,46 @@ +# new-frontend + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. + +If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: + +1. Disable the built-in TypeScript Extension + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` +2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/Frontend/assets/css/common/common.css b/Frontend/assets/css/common/common.css deleted file mode 100644 index 0c7e754..0000000 --- a/Frontend/assets/css/common/common.css +++ /dev/null @@ -1,6 +0,0 @@ -@import url('https://necolas.github.io/normalize.css/8.0.1/normalize.css'); -@import url('r11addons.css'); -@import url('r11tables.css'); -@import url('r11tool.css'); -@import url('r11tooltip.css'); -@import url('r11modal.css'); diff --git a/Frontend/assets/css/common/font/fontello.eot b/Frontend/assets/css/common/font/fontello.eot deleted file mode 100644 index 8eb876254bf40f2702d4398804dd26ede72d892c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5964 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 diff --git a/Frontend/assets/css/common/font/fontello.svg b/Frontend/assets/css/common/font/fontello.svg deleted file mode 100644 index 66886e8..0000000 --- a/Frontend/assets/css/common/font/fontello.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -Copyright (C) 2021 by original authors @ fontello.com - - - - - - - - - - \ No newline at end of file diff --git a/Frontend/assets/css/common/font/fontello.ttf b/Frontend/assets/css/common/font/fontello.ttf deleted file mode 100644 index a6a2ea27f9d30977bf801ed88595d942b038ac12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5796 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 Lp2IJ)0Kk6$Wj?nB diff --git a/Frontend/assets/css/common/font/fontello.woff2 b/Frontend/assets/css/common/font/fontello.woff2 deleted file mode 100644 index b1c349be122e72d99908b59525af47d16d8a31b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2584 zcmV+z3g`8APew8T0RR91016lY4*&oF02ZVG013hX0RR9100000000000000000000 z0000SR0dW6f_?}N37iZO2nvEEf+7nD00A}vBm)ctAO(d@2R96X92=1pQIu>}n(XI+ z?KJH`cXgqw55nMd%w;L1qU>${|K~LC`~ORpiR6S8Aof`D06Ku|$pF&XmnbRmiq`EC zm!9IP%hm}H-~j)Rwth-ci3PdgA(p{xu&kkypc!`9qW(oaU3D_JS+bU3R+(iclly^ogg^6>sJy6>{vxJAU8v;^*LZP}kiEKmi5=BOl zkC1UL!pF({gtzbAAk-<3Z6Dwt2?Ah2xmL{BeXt9TrSa$rk_Z3*K!9;PEzQr4Ls2Ra z5CA16V;1E7bRQDHPO{Gd+)lnf{f3Gdz#wtBGe%~@Q}{YYF~&RMKNv8xc)Gh109j!p z6q5*14@gEZ9x3e{mR5o6HUSaDSUesv3V|Sq{o|1gx6X!!e2NW`?Enoi23!LF-QTf| zVu9{7%hHp7aI`-`KL41gULyattTc4rz@q!Fh=R$beRtl2exTcQ1VJw`KtQXj0E2n+ z0S@&)`Sk9!IKfMm5-XdY#G2Eu!}xYv*c`@5*CS50N7l#m63KW!=wY0Uj+yn)LBVKo z^s0AKqJc>Ikw;b8-bftA6F-x<4V4q(`#SaF>k~xzIOeNepDky|o5{l?zy6dM4|PMI z5jm;Lppl|J+gpE|RUznl@&%`2(pb4F=c2C<(n`b4mXk%6C8gn&C1bTzTPQiR%>fH+ zT!M}S4k*%BBTisxho|j#|6H=9F7i*3iJbc`Lz#2qDSt#%TFe0nnh6nIFHC%yFnL7r z=)BKR4aj|Mij=#n=_QIF+UmPw7f}I>X#vu@C%iv3X#d-qwR|uKQC_9;(si$Mvh1@6 zo+nYcA#sjlqJRmQd3FRFV^Wsf?9l|WVh4L!L9bB7v>q@+nh6J&|Ab5kL=wT8$>}m} z=yVp0<|*j2c*ai}vR*ogeA^Bdr!=4=qG&c`HT6B6Lh@)FKwBc%TLpMf{pt4a#=dTn z>$FRTKcEF1#uhNq@E0WG@+`FO=6`skvh$osG zY7uv4pu-|orwG@~(5wj_FHlx9}Z}SU9lEgELMpa6uSznUT7h z@td~-UYkM$ts^NJOXkN~1q;7Tcsy!`!y|SFV^QUA!u&eiYdhCsjGZUnhd{0RMvAzV zOGk4+MTP%tAb?5Q_%yuH#f`tL5q#3eUFj zs93L(`e*4v?x0`QH&;)uR6|!A-Bp7%xWne*o(*L)T-=;ce*plDyLO{itG}E5QVX?O zG`#?He&K_OV%&ifXYNYu0{)x6=CscxVh~M>y*AbpCON9y^?>|nLs0e zO28u`5WzBYwMhso&;A%nU22E=#YURaYLxv#_Q*M-7&}QKc$$6++o8E=p0Xn;$7sSr z4O!fMw0S}1S#@s_l-Ecj2$tTE*!4=dl~(FK=fC?U!bu#h}*E=4ao%=R2;9)`6fA(eu)H&$1-q_NNN^|QMcMMTdwJ*3W>?Mq+B#^=y&Y_TrW`aw%&!L=>e&uK zWyre6kqZ->oeyT#-@*3_!88@v96??$x@*F?|5-jY;@lnCiL0qy-<`Fao<}L>N(f9SJ&^s!lrgur2}AT}Of*rib?8CjebS zA1CUsC&2($8f*gyL!4;1o&+OY)#%|6W@8AmafI0f!fH~$UN$8Jnyw?k3{!8mNig^v z3_cHoFTmi7F!&M-z6^t}z&NmqissSt)+$MYsxb6Vm(1~v9RJm3BuJu;!n{Ug>?+V7leOVdF8U6jCqHSe*n`cLkUs0D! zK)6?(a>A|S5GEM*=>xD~&u9e7&N+qiujX39m9i~2Ur(l$lIX%4dDfMz)?2S7Vx86V zzOKhN)t=DP3xVFyvs?ad`GjP`s1+F>EvoTI?78}1Bt1zyj|F~~7Xzi8v6%X60BU}f zOku==A6EDLbKuGU`2U3$)o^SUK^*ZH+%UQfYWutN@Av;ZO#=YL|6xC}tHE3dF0Oz; zS0&;A?}ZULMj3(QNLE#j|E;rRIi)C=oSEn{2{1ayiGf`q0=9f9KA(`2ia-De_~z9s z*GHYr|0+%%1Aw1yov|3ox<3;mIa&z{7|=n$BOyib7=_}`0Krupo8fN961q5YI96t` zq0pUFJmfKum;o%{ zrG-Ioha}(#ey6%e7^7XjJB1UDvu8FyXGkJ)ILHP6Fbg(_7@f zflZkBz{mKmBkd5~?cb)Gd1tTfz!cg63X=^j&wm2Is+i^+958mW>3VzLcJO*%m8MvJ u=f?`9!(j9$@8l^5eX5)X37*_!*Gl1zyaPw!#}vPUxU<8S4}VXZl3^Gn*vAI| diff --git a/Frontend/assets/css/common/fontello.css b/Frontend/assets/css/common/fontello.css deleted file mode 100644 index 28bc34a..0000000 --- a/Frontend/assets/css/common/fontello.css +++ /dev/null @@ -1,59 +0,0 @@ -@font-face { - font-family: 'fontello'; - src: url('font/fontello.eot?49304387'); - src: url('font/fontello.eot?49304387#iefix') format('embedded-opentype'), - url('font/fontello.woff2?49304387') format('woff2'), - url('font/fontello.woff?49304387') format('woff'), - url('font/fontello.ttf?49304387') format('truetype'), - url('font/fontello.svg?49304387#fontello') format('svg'); - font-weight: normal; - font-style: normal; - } - /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ - /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ - /* - @media screen and (-webkit-min-device-pixel-ratio:0) { - @font-face { - font-family: 'fontello'; - src: url('../font/fontello.svg?49304387#fontello') format('svg'); - } - } - */ - - [class^="icon-"]:before, [class*=" icon-"]:before { - font-family: "fontello"; - font-style: normal; - font-weight: normal; - speak: never; - - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - /* opacity: .8; */ - - /* For safety - reset parent styles, that can break glyph codes*/ - font-variant: normal; - text-transform: none; - - /* fix buttons height, for twitter bootstrap */ - line-height: 1em; - - /* Animation center compensation - margins should be symmetric */ - /* remove if not needed */ - margin-left: .2em; - - /* you can be more comfortable with increased icons size */ - /* font-size: 120%; */ - - /* Font smoothing. That was taken from TWBS */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - /* Uncomment for 3D effect */ - /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ - } - - .icon-plus:before { content: '\e801'; } /* '' */ - .icon-cancel:before { content: '\e802'; } /* '' */ \ No newline at end of file diff --git a/Frontend/assets/css/frame.css b/Frontend/assets/css/frame.css deleted file mode 100644 index c6a6ba2..0000000 --- a/Frontend/assets/css/frame.css +++ /dev/null @@ -1,150 +0,0 @@ -@font-face { - font-family: "Nunito"; - src: url('../fonts/Nunito-VariableFont_wght.ttf') format('truetype'); -} - -html { - background-image: url("../images/background.jpg"); -} - -body { - font-family: 'Nunito', sans-serif; - font-weight: 200; - - color: #2e3133; - margin: 0px; -} - -* { - margin: 0; - padding: 0; -} - -html, -body { - height: 100%; - min-height: 100%; -} - -div#header { - background-color: #FFFFFF; - width: 100%; - height: 80px; - display: flex; - align-items: center; - justify-content: space-between; -} - -#logo { - padding: 20px 20px 20px; - width: 250px; - grid-column: 1; -} - -iframe#iframe { - flex-grow: 1; - background-color: #FFFFFF; -} - -div#content { - width: 100%; - height: calc(100% - 80px); - display: flex; - backdrop-filter: blur(10px); -} - -div#leftBar { - float: left; - width: 200px; - background-color: transparent; - height: 100%; -} - -li { - font-size: 20px; - font-weight: 300; -} - -div#copyright{ - color:rgb(192, 192, 192); - position: fixed; - bottom: 10px; - width: 200px; - text-align: center; -} - -div#copyright a, a:visited, a:active { - color: rgb(192, 192, 192); -} - -#toolList { - list-style-type: none; - margin: 0; - padding: 10px 0 0 0; - overflow: hidden; - display: block; - float: left; - background-color: transparent; - width: 100%; - height: calc(100% - 80px); - backdrop-filter: blur(10px); -} - -.toolListRow a { - display: block; - color: white; - text-align: center; - padding: 20px 50px 25px; - text-decoration: none; -} - -.toolListRow a:hover { - background-color: #2A93B0; - color: white; - transform: scale(1.25, 1.25); - transition-duration: .3s; -} - -#leftElements { - display: flex; - align-items: center; -} - -#titlebar { - /* padding: 10px 0; */ - color: black; - height: fit-content; - margin: 0px 20px; - font-size: 36px; - text-align: center; - -} -#menu { - display: flex; - height: fit-content; - -} - -#menu a { - display: block; - margin: 0px 10px; - padding: 0px 10px; - font-size: 28px; - text-decoration: none; - color: black; -} - -#menu a.active { - border-bottom: 3px solid #2A93B0; - -} - -#menu a:hover { - transform: scale(1.25, 1.25); - transition-duration: .3s; -} - -.separator{ - width: 100%; - padding:6px; -} \ No newline at end of file diff --git a/Frontend/assets/css/highlight.css b/Frontend/assets/css/highlight.css deleted file mode 100644 index 3981640..0000000 --- a/Frontend/assets/css/highlight.css +++ /dev/null @@ -1,69 +0,0 @@ -.json-block { - height: 600px; - width: 97%; -} - -.json-border { - border: 2px solid rgba(93, 99, 96, 0.705); - border-radius: 5px; -} - -.json-border:focus { - box-shadow: 0 0 5px rgb(81, 203, 238); - border: 2px solid rgba(93, 99, 96, 0.705); - border-radius: 5px; -} - -/*! Theme: Default Description: Original highlight.js style Author: (c) Ivan Sagalaev Maintainer: @highlightjs/core-team Website: https://highlightjs.org/ License: see project LICENSE Touched: 2021 */ -pre code.hljs{ - display:block; - overflow-x:auto; - padding:1em -} -code.hljs{ - padding:3px 5px -} -.hljs{ - background:#FFFFFF; - color:#444 -} -.hljs-comment{ - color:#697070 -} -.hljs-punctuation,.hljs-tag{ - color:#444a -} -.hljs-tag .hljs-attr,.hljs-tag .hljs-name{ - color:#444 -} -.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{ - font-weight:700 -} -.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{ - color:#800 -} -.hljs-section,.hljs-title{ - color:#800; - font-weight:700 -} -.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{ - color:#ab5656 -} -.hljs-literal{ - color:#695 -} -.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{ - color:#397300 -} -.hljs-meta{ - color:#1f7199 -} -.hljs-meta .hljs-string{ - color:#38a -} -.hljs-emphasis{ - font-style:italic -} -.hljs-strong{ - font-weight:700 -} diff --git a/Frontend/assets/css/lawful.css b/Frontend/assets/css/lawful.css deleted file mode 100644 index a2bd94f..0000000 --- a/Frontend/assets/css/lawful.css +++ /dev/null @@ -1,42 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@200&display=swap'); - -body { - font-family: "Nunito", sans-serif; - background-color: #FFFFFF; - margin: 0px; - -} -h1, h2 { - text-align: center; -} - -h2::before { - background: url('/assets/images/sygnet_color.svg') no-repeat; - display: inline-block; -} - -#header { - height: 80px; - width: 100%; - display: flex; - align-items: center; - background-color: #FFFFFF; - position: fixed; - top: 0; - left: 0; -} - -#logo { - width: 250px; - margin: 0px 20px; -} - -#content { - width: 1024px; - margin: auto; - text-align: justify; - background-color: #FFFFFF; - padding: 20px 20px; - border-radius: 15px; - margin-top: 100px; -} \ No newline at end of file diff --git a/Frontend/assets/css/tools/font/fontello.eot b/Frontend/assets/css/tools/font/fontello.eot deleted file mode 100644 index 8eb876254bf40f2702d4398804dd26ede72d892c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5964 zcmd^DO>7&-6@J4dDOr+5SwECxy3Wum$+EblWcg3AWn1Brk{u}xEz1tqX=<)W>c`O! zBhjv%Hfh?%sVg@{&_hq{%>ja3nSFf`IQq-nYa*`_6E!gL9mC0eFgmo4cKC8!UUNA-uACk@f-q)}<) z!o{S#)AE$o z$;8*_UxWUQ4b%2=3Hm0;e?wb4J$G~J>X*+PAkw-rw80^Pppr|>e zU4;Aw)IwVjE59$E6El*}DU7!!w z#kx-$zkii3Yvc3_5UNE%JSJ9&$iNTtic1w+23lqrXpt@G{nX)d{H$O1-M^2w;5TH? zV|XIi)!QXYFTUXxl!kXv31}u0LP+KK8wdwca-r+5bdSjh}pCOhc9V zZV9-1y>)MEt3S9W*4Y{o!Tr6WhF@Jr&WHp2I@bTBIL@yy%v%>aK1NG2b(4A=X)|IH4{<1OF zQCPfjdB+~z=v70fDp-R)Rl$DXu?h}QJxx?_5c(?>Tt_h+zTTMi)B=yN6a70d&sBP- zf(12+PzC#_Q9N0}8ualB_5+`)-~ffivlSeKK3~CgbV)2%a6NU2KbecAn@h9PGiBLr z9+drk{fFe_O}Plw?1DWf?Q7+k#ieCAB&QY^%Eh_4#YBE_zKX|-)7R$grK(tMFBO-T zXBQXbp+sL*HBwwCF4^T`fk$7yKHXm~PsypJ#d$eg8CRB;7Oxib<-|<6TsqO)TkXm7 zk%?QVL^p9G%_3DZxVxi!(+A=(0FPB`eBn_k8 zd}~YOgKbwaP9E%po0T%OC#VrZl%)PwdG*mUdR{c zn1Evnr+;V*7lI-~D!Q0WTT+hRqsH^2DtO^?Rvn3`ZYwt>S1x9iuhagZ7A2q0>ywda zRFS2~)KjY%)66B~N*GG!rsB$H=utfySDGOUYg%g?B~8_0%3Ln#_*%`R)2W%tXHMLZ zszC=Z?Sk@WZmjxzJ`AIx#l2D1t~R!bLsWTnbvpc=9wQVlQ~uq^3# zYL?dIX)E94loEM3qH22LYKI}&+eU=t zr%6!Y?@-QSN-pJkTW759Xe2Y8?1^p^PQ9_UkQ%&EL<}yN2t6m$E4s~#>L!~aydX+O z;AGWHEUj**yeW1*rn~AuFLd4rZF8qau75qbwzGk>G?pl$N39+dama9dzO*XXskmw~ z5Q3B{WIn@@0bqqx6HDWen%wo;g@Kyfq)6l-569ImGbdMaQtd+8;;Pvgoya==Ldxn; zJB#{_xN0#*&u2$3c*;l=`W9E;YB!_(v@7n3S-))o~Vv)Rg8LIJ9oiOW~+rrM&SPlv|AVJF-zzWwdhDP3hMN#5W=m8 zHiI1Ur6;ngSx?HeYDD?%#LDH8GWY)O-GX-EI!q>$oPk!@gzdD}#?+lyWIxI~j2PQu zan)`(g4^B5H@8n1j>hdC!|`()F`NLmdkrVZ?KcdkhTDCHQ_Jm>hO>j)n1O6~`B%Xl zGOf#m5-;*@i7R81F}z`X*)zsB8M`)&OP*00q(ZUB#)+VQ=Y`5~ZjLXC_$2(=kNCLN z5g)f5h>zP&#K&zH;^X!J;^Vd(@o{?)@p0RO__$3Na?ssKy@t%G-8qRvPvp2JY_uxD zHQQ&X-k9peemsP&FoKGGTv?1EuF=o$g6mG zQ+gi9Ibz78uIEQFnm11R;bQ`)&m+BMJ%#yiJ)+cUeZV;)+Bnu@$Oi&=WS<;1i#-rm z$Bjh$U|bFSCn^d%5BgJBA_{lPgdE``0jWK=vNEEN;0Vg%;=`$n8)-n`dmb4+fwL>D z+ClTvqM?5;5;q@|(GWt^&AJaoG7yI|7`ua6WABW5YF^|N5{! z5YaKiFychx&VunCF$o;uBRPme1d94UjYEQ8ftNO%zF zs^mf+M4C=*m{c7O6Df!F5uTJ+@pRSZ2IFN~(L^>O2XUdZ_dZXFK{u8{1v?>~gK6X2 z#aqOOD=(*4RtqP8T%D=T=4QXLTsi*0*&cFriHC50Bsh!1s@=?HBDhoKpp|g?L@V~~ z(_5_Lk<1ora*MUvck_7Ldzgkg5!+0tcB)R8GStb~3d)abYy~_0alT)2@t>^v`^VZ*7zUBlJyR{noi(j$*5u>YlsIp2Ja4eA4t=%#v! zS`|M>Z~&i(RkLyy(#cqq*NpR0iDn}O=a7OnZ`iWg#CD$)TbFN>E=3T!S zEx3L$T11WqHx{tuN@@s(mp%A2;1VaDX(|b68FwupbIKlM&NY|A2IgEx=TjS_e#e#E z9ydJ5J#KoC>91g%Q{Ir@^&k_z=RqdC3hwER@m_N!cf9X=km;{`km)}_&(q#`KlC6I ze&j(WyaDc+jqz@|k~`j;9%TBDJ;?Oi=y}E)?Yk@+LQmKCdv=e5I diff --git a/Frontend/assets/css/tools/font/fontello.svg b/Frontend/assets/css/tools/font/fontello.svg deleted file mode 100644 index 66886e8..0000000 --- a/Frontend/assets/css/tools/font/fontello.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -Copyright (C) 2021 by original authors @ fontello.com - - - - - - - - - - \ No newline at end of file diff --git a/Frontend/assets/css/tools/font/fontello.ttf b/Frontend/assets/css/tools/font/fontello.ttf deleted file mode 100644 index a6a2ea27f9d30977bf801ed88595d942b038ac12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5796 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 Lp2IJ)0Kk6$Wj?nB diff --git a/Frontend/assets/css/tools/font/fontello.woff2 b/Frontend/assets/css/tools/font/fontello.woff2 deleted file mode 100644 index b1c349be122e72d99908b59525af47d16d8a31b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2584 zcmV+z3g`8APew8T0RR91016lY4*&oF02ZVG013hX0RR9100000000000000000000 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 diff --git a/Frontend/assets/css/tools/fontello.css b/Frontend/assets/css/tools/fontello.css deleted file mode 100644 index 28bc34a..0000000 --- a/Frontend/assets/css/tools/fontello.css +++ /dev/null @@ -1,59 +0,0 @@ -@font-face { - font-family: 'fontello'; - src: url('font/fontello.eot?49304387'); - src: url('font/fontello.eot?49304387#iefix') format('embedded-opentype'), - url('font/fontello.woff2?49304387') format('woff2'), - url('font/fontello.woff?49304387') format('woff'), - url('font/fontello.ttf?49304387') format('truetype'), - url('font/fontello.svg?49304387#fontello') format('svg'); - font-weight: normal; - font-style: normal; - } - /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ - /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ - /* - @media screen and (-webkit-min-device-pixel-ratio:0) { - @font-face { - font-family: 'fontello'; - src: url('../font/fontello.svg?49304387#fontello') format('svg'); - } - } - */ - - [class^="icon-"]:before, [class*=" icon-"]:before { - font-family: "fontello"; - font-style: normal; - font-weight: normal; - speak: never; - - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - /* opacity: .8; */ - - /* For safety - reset parent styles, that can break glyph codes*/ - font-variant: normal; - text-transform: none; - - /* fix buttons height, for twitter bootstrap */ - line-height: 1em; - - /* Animation center compensation - margins should be symmetric */ - /* remove if not needed */ - margin-left: .2em; - - /* you can be more comfortable with increased icons size */ - /* font-size: 120%; */ - - /* Font smoothing. That was taken from TWBS */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - /* Uncomment for 3D effect */ - /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ - } - - .icon-plus:before { content: '\e801'; } /* '' */ - .icon-cancel:before { content: '\e802'; } /* '' */ \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/common.css b/Frontend/assets/css/tools/mock/common.css deleted file mode 100644 index f814529..0000000 --- a/Frontend/assets/css/tools/mock/common.css +++ /dev/null @@ -1,34 +0,0 @@ -@import url('https://necolas.github.io/normalize.css/8.0.1/normalize.css'); -/* @import url('https://fonts.googleapis.com/icon?family=Material+Icons'); */ -@import url('r11addons.css'); -@import url('r11tables.css'); -@import url('r11tool.css'); -@import url('r11tooltip.css'); -@import url('r11modal.css'); -@import url('r11flexbox.css'); -@import url('r11popup.css'); -@import url('../../highlight.css'); - -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: url(https://fonts.gstatic.com/s/materialicons/v140/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2'); -} - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - display: inline-block; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - -moz-font-feature-settings: 'liga'; - -moz-osx-font-smoothing: grayscale; -} - \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/font/Material-Icons.woff2 b/Frontend/assets/css/tools/mock/font/Material-Icons.woff2 deleted file mode 100644 index 5492a6e75937db19f9ba860cd2575744887fa26b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128352 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

l*K8_>P7#5$l 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�nfCD=ctx>ii{U{Xa8M|9rdc1U$w{VG!^E? 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 XV!2s*0^!JHz-6gRM#eobCJ_GxrehU3 diff --git a/Frontend/assets/css/tools/mock/font/fontello.eot b/Frontend/assets/css/tools/mock/font/fontello.eot deleted file mode 100644 index 8eb876254bf40f2702d4398804dd26ede72d892c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5964 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 diff --git a/Frontend/assets/css/tools/mock/font/fontello.svg b/Frontend/assets/css/tools/mock/font/fontello.svg deleted file mode 100644 index 66886e8..0000000 --- a/Frontend/assets/css/tools/mock/font/fontello.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -Copyright (C) 2021 by original authors @ fontello.com - - - - - - - - - - \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/font/fontello.ttf b/Frontend/assets/css/tools/mock/font/fontello.ttf deleted file mode 100644 index a6a2ea27f9d30977bf801ed88595d942b038ac12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5796 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 Lp2IJ)0Kk6$Wj?nB diff --git a/Frontend/assets/css/tools/mock/font/fontello.woff2 b/Frontend/assets/css/tools/mock/font/fontello.woff2 deleted file mode 100644 index b1c349be122e72d99908b59525af47d16d8a31b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2584 zcmV+z3g`8APew8T0RR91016lY4*&oF02ZVG013hX0RR9100000000000000000000 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 diff --git a/Frontend/assets/css/tools/mock/fontello.css b/Frontend/assets/css/tools/mock/fontello.css deleted file mode 100644 index 28bc34a..0000000 --- a/Frontend/assets/css/tools/mock/fontello.css +++ /dev/null @@ -1,59 +0,0 @@ -@font-face { - font-family: 'fontello'; - src: url('font/fontello.eot?49304387'); - src: url('font/fontello.eot?49304387#iefix') format('embedded-opentype'), - url('font/fontello.woff2?49304387') format('woff2'), - url('font/fontello.woff?49304387') format('woff'), - url('font/fontello.ttf?49304387') format('truetype'), - url('font/fontello.svg?49304387#fontello') format('svg'); - font-weight: normal; - font-style: normal; - } - /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ - /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ - /* - @media screen and (-webkit-min-device-pixel-ratio:0) { - @font-face { - font-family: 'fontello'; - src: url('../font/fontello.svg?49304387#fontello') format('svg'); - } - } - */ - - [class^="icon-"]:before, [class*=" icon-"]:before { - font-family: "fontello"; - font-style: normal; - font-weight: normal; - speak: never; - - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - /* opacity: .8; */ - - /* For safety - reset parent styles, that can break glyph codes*/ - font-variant: normal; - text-transform: none; - - /* fix buttons height, for twitter bootstrap */ - line-height: 1em; - - /* Animation center compensation - margins should be symmetric */ - /* remove if not needed */ - margin-left: .2em; - - /* you can be more comfortable with increased icons size */ - /* font-size: 120%; */ - - /* Font smoothing. That was taken from TWBS */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - /* Uncomment for 3D effect */ - /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ - } - - .icon-plus:before { content: '\e801'; } /* '' */ - .icon-cancel:before { content: '\e802'; } /* '' */ \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/main.css b/Frontend/assets/css/tools/mock/main.css deleted file mode 100644 index 2f8c9ff..0000000 --- a/Frontend/assets/css/tools/mock/main.css +++ /dev/null @@ -1,4 +0,0 @@ -.overflowedTableContent { - max-height: 750px; - overflow: scroll; -} \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/r11addons.css b/Frontend/assets/css/tools/mock/r11addons.css deleted file mode 100644 index 2d2e72e..0000000 --- a/Frontend/assets/css/tools/mock/r11addons.css +++ /dev/null @@ -1,95 +0,0 @@ -.modification-button.btn-tile:hover { - color: #ca1111; -} - -.modification-button.btn-tile { - width: 10%; - margin: 20% 0 0 0; - font-size: 14px; - color: #00000020 -} - -.modification-button.btn-addtile { - font-size: 38px; - color: #00000030; -} - -.modification-button.btn-copy { - width: 24px; - height: 24px; - align-content: center; - display: grid; - justify-content: center; -} - -.modification-button.btn-copy img { - width: 100%; - height: 100%; -} - -.modification-button.btn-addtile:hover { - color: #58ac43; -} - -.tile { - width: 100%; - padding-top: 40%; - border-radius: 5px; - position: relative; - background: #D5D7E6; - margin-bottom: 10px; - cursor: default; - border-bottom: 1px solid darkgray; -} - -.tile:hover { - filter: brightness(110%); -} - -.tile.active { - background: #2A93B0; - color: white; - filter: none; -} - -.tile.active .btn-tile { - opacity: 0; -} - -.tile .content { - position: absolute; - left: 0; - top: 0; - bottom: 0; - right: 0; - padding: 0 2% 0 7%; - display: flex; -} - -.content p { - margin: 0; - padding: 0; -} - -.refresh-button{ - float: right; - border: none; - background-color: unset; - font-size: xx-large; -} - -.refresh-button:hover{ - animation-name: rotation; - animation-duration: 0.8s; - animation-iteration-count: infinite; - animation-timing-function: linear; -} - -@keyframes rotation{ - from{ - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } - } \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/r11flexbox.css b/Frontend/assets/css/tools/mock/r11flexbox.css deleted file mode 100644 index 972ddc6..0000000 --- a/Frontend/assets/css/tools/mock/r11flexbox.css +++ /dev/null @@ -1,57 +0,0 @@ -#editable-block { - flex-grow: 0; - flex-shrink: 0; -} - -#uuid-edit { - display: flex; - align-items: center; - margin-bottom: 15px; -} - -#uuid-edit-field { - display: flex; - width: fit-content; - align-items: center; - width: 70%; - margin-right: 10px; - -} - -#uuid-edit-field .uuid-inputField-icon{ - background: none; - color: black; - border: 0; -} - -#uuid-edit-field .uuid-inputField-icon:hover{ - color: #2A93B0; -} - -#uuid-input { - border: none; - width: 100% -} - -#uuid-input:focus { - outline: none; - -} - -#uuid-validation-strategy input { - margin-left: 10px; -} - -.disabled { - background-color: #CCD1CF; - -} - -.disabled #uuid-input { - background-color: #CCD1CF; - -} - -.uuid-inputField-icon-span { - font-size: x-large; -} \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/r11modal.css b/Frontend/assets/css/tools/mock/r11modal.css deleted file mode 100644 index 7848a43..0000000 --- a/Frontend/assets/css/tools/mock/r11modal.css +++ /dev/null @@ -1,104 +0,0 @@ -#overlay { - position: fixed; - left: 0; - right: 0; - top: 0; - bottom: 0; - opacity: 0; - background: rgba(0, 0 , 0, 0.5); - pointer-events: none; -} - -#overlay.active { - pointer-events: all; - opacity: 1; -} - -.modal { - display: none; - width: 390px; - min-height: 71px; - max-height: 700px; - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - background: white; - padding: 5px; - border: 1px solid #f0f0f0; -} - -.modal.active { - display: block; -} - -.modal div.header { - width: 384px; - height: 24px; - background: #2e3133; - color: white; - font-size: 24px; - font-weight: 700; - padding: 3px; - margin-bottom: 5px; - display: flex; - justify-content: space-between; - align-items: center; -} - -.modal div.header button { - font-size: 100%; - font-family: inherit; - border: 0; - padding: 0; - background: 0; - color: inherit; - cursor: pointer; -} - -.modal div.header button:hover { - color: white; - font-weight: 700; -} - -.modal div.body { - width: 370px; - padding: 10px; - background: #f0f0f0; - color: #2e3133; - min-height: 16px; - text-align: justify; - font-size: 16px; -} - -.modal div.function { - width: 385px; - min-height: 30px; - padding-top: 5px; - display: flex; - justify-content: space-evenly; - background: inherit; -} - -.modal div.function button { - min-height: 22px; - min-width: 34px; - max-width: 74px; - padding: 3px 20px; - outline: none; - border: 1px solid #f0f0f0; - background: rgba(205,205,205,1); - font-size: 16px; - text-align: center; - cursor: pointer; -} - -.modal div.function button:hover { - filter: brightness(110%); -} - -.r-exclamation:before { - content: '!'; - color: #3bc4f1; - font-style: normal; -} diff --git a/Frontend/assets/css/tools/mock/r11popup.css b/Frontend/assets/css/tools/mock/r11popup.css deleted file mode 100644 index 296349a..0000000 --- a/Frontend/assets/css/tools/mock/r11popup.css +++ /dev/null @@ -1,83 +0,0 @@ -.popup-flex:not(.hiddable-container){ - animation: blur 0.5s ease-in-out ; - animation-fill-mode: forwards; -} -.popup-flex{ - display: flex; - align-items: center; - width: 100%; - height: 100%; - z-index: 50; - flex-direction: column; - gap: 2%; - position: fixed; - justify-content: center; -} - -.popup-body{ - min-width: 33%; - max-width: 60%; - max-height: 70%; - background-color: white; - box-shadow: 10px 10px 5px lightblue; - min-height: 45%; - border-radius: 1em; - text-align: center; - padding: 10px 15px 15px 15px; - color: black; - border: 1px #2A93B0 solid; - display: flex; - flex-direction: column; - position: fixed; -} - -.popup-button-close-container{ - text-align: right; - margin-right: 2%; - margin-top: 1%; - font-size: xx-large; - font-weight: bold; - position: sticky; - top:0 -} - -.hiddable-popup-option{ - flex-grow: 1; - overflow: auto; - padding: 1.5%; -} - -.popup-button-close{ - background: padding-box; - border: 0; -} - -.popup-button-close:hover{ - color: #2A93B0; -} - -.hiddable-container{ - display:none; -} - -.hidden-popup-type{ - display: none; -} - -#history-request-body{ - text-align: justify; -} - -@keyframes blur { - 0% { - backdrop-filter: blur(0px); - } - - 50% { - backdrop-filter: blur(5px); - } - - 100% { - backdrop-filter: blur(10px); - } - } diff --git a/Frontend/assets/css/tools/mock/r11tables.css b/Frontend/assets/css/tools/mock/r11tables.css deleted file mode 100644 index c78730b..0000000 --- a/Frontend/assets/css/tools/mock/r11tables.css +++ /dev/null @@ -1,96 +0,0 @@ -.table-map { - width: 60%; -} - -.table-map input{ - font-size: 16px; - padding: 7px; - border: 1px solid rgba(145, 146, 146, 0.849); - border-radius: 5px; -} - -.table-map input.key { - background: #f0f0f0; -} - -.modification-button.btn-add { - font-size: 16px; - color: #00000030; - margin: auto 0 auto 0; -} - -.modification-button.btn-add:hover { - color:#58ac43; -} - -.modification-button.btn-hashmap { - font-size: 16px; - color: #00000030; - margin: auto 0 auto 0; -} - -.modification-button.btn-hashmap:hover { - color: #ca1111; -} - -.table-default { - width: 80%; - border-collapse: collapse; - border-spacing: 0; -} - -.table-default tr { - background: #f0f0f02d; -} - -.table-default tr.bottom-border { - border-bottom: 1px solid black; -} - -.table-default th { - background: #ffffff; -} - -.table-default tr.even { - background: #f0f0f0; -} - -.table-doc td, .table-doc th{ - border-spacing: 0px; - padding: 0px 10px; -} - -.table-doc td { - background-color: rgba(155, 165, 160, 0.342); -} - -.table-doc th { - background-color: #3bc4f1; - text-align: left; - color: white; -} - -.table-default td{ - text-align: center; -} - -#header-table tr td { - border: 1px black solid; - padding: 1.5%; - -} - -#header-table{ - border-collapse: collapse; - width: 100%; - height: 100%; -} - -.history-header-name{ - min-width: 10vw; -} - -#historyTable, td{ - padding: 1%; - overflow-x: scroll; -} \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/r11tool.css b/Frontend/assets/css/tools/mock/r11tool.css deleted file mode 100644 index 098cfe0..0000000 --- a/Frontend/assets/css/tools/mock/r11tool.css +++ /dev/null @@ -1,322 +0,0 @@ -@font-face { - font-family: "Nunito"; - src: url('font/Nunito-VariableFont_wght.ttf') format('truetype'); -} - -input { - box-sizing: border-box; -} - -.hyperlink, .hyperlink:visited, .hyperlink:active { - color: rgb(47, 125, 146); - cursor: pointer; -} - -.hyperlink:hover { - filter: brightness(120%); -} - -.bordered-field { - background-color: #FFFFFF; - border: 2px solid rgba(93, 99, 96, 0.705); - border-radius: 5px; - padding: 8px; - display: block; - -} - -.bordered-field:focus { - outline: none; - box-shadow: 0 0 5px rgba(81, 203, 238); - border: 2px solid #00000070; -} - -.bordered-field:disabled { - background: #eeeeeed2; -} - -.vertically-resizeable { - resize: vertical; -} - -body { - font-family: 'Nunito', sans-serif; -} - -.container { - display: flex; - justify-content: left; - width: 100%; -} - -.tool { - width: 55%; - display: flex; - justify-content: space-evenly; -} - -.tool.extended { - width: 65%; -} - -.tool .tool-context { - width: 90%; -} - -.tool.extended .tool-extention { - width: 20%; - padding-top: 2%; - display: block; -} - -.tool .tool-extention { - display: none; -} - -.tool-extention { - opacity: 0; - pointer-events: none; -} - -.tool-extention.active { - opacity: 100%; - pointer-events: all; -} - -.clickable-text { - padding: 0; - outline: none; - background: none; - border: none; - font-weight: 300; - cursor: pointer; -} - -.clickable-text.highlight:hover { - color: #3bc4f1; -} - -.clickable-text.switch { - font-size: 18px; - font-weight: 300; -} - -.clickable-text.switch span.toggleIndicator:before { - content: '>'; -} - -.clickable-text.switch span.toggleIndicator.active:before { - content: 'v'; -} - -.modification-button { - padding: 0; - outline: none; - background: none; - border: none; - font-weight: 300; -} - -.text-aligned-to-right { - text-align: right; -} - -.centered-vertically { - margin-top: auto; - margin-bottom: auto; -} - -.display-space-between { - width: 100%; - display: flex; - justify-content: space-between; -} - -.display-space-evenly { - display: flex; - justify-content: space-evenly; -} - -.float-left { - display: flex; - justify-content: left; - width: 100%; -} - -.version-span { - font-size: 13px; - font-weight: 400; - color: rgba(85,85,85,0.555); -} - -.block-display { - display: block; -} - -.block-label { - display: block; - margin: 0 0 0 5px; -} - -.tabmenu { - display: flex; - flex-direction: row; - text-align: center; - border-bottom: 1px solid rgba(185, 185, 185, 0.5); -} - -.tabitem { - flex-grow: 1; - cursor: pointer; - padding: 5px 0; -} - -.tabitem:hover { - font-weight: 700; -} - -.tabitem.active { - background: rgba(33, 34, 34, 0.705); - color: white; - font-weight: 700; - cursor:default; - flex-grow: 1; -} - -.big-font { - font-size: 20px; -} - -.action-button.active { - background: #2A93B0; - border: 1px solid #7ed0eb; - cursor: pointer; - -} - -.action-button.active:hover { - filter: brightness(110%); -} - -.action-button { - background: #CCD1CF; - border:1px solid rgba(186, 197, 191, 0.507); - border-radius: 5px; - color: white; - padding: 10px 20px; - font-weight: 700; - margin: 3px 0; -} - -.quater-width { - width: 25%; -} - -.half-width { - width: 50%; -} - -.tree-fourth-width { - width: 75%; -} - -.half-width.with-padding { - width: 45%; -} - -.max-width { - width: 100%; -} - -.max-width.with-padding { - width: 94%; -} - -.max-height { - height: 100%; -} - -.height-300 { - height: 300px; -} - -.max-height.with-padding { - height: 90%; -} - -.small-margins { - margin: 3%; -} - -.small-vertical-margin { - margin-top: 10px; - margin-bottom: 10px; -} - -.medium-vertical-margin { - margin-top: 30px; - margin-bottom: 30px; -} - -.large-vertical-margin { - margin-top: 50px; - margin-bottom: 50px; -} - -.textarea-300 { - height: 300px; -} - -.centered-content { - display: flex; - justify-content: center; -} - - -.tabcontent { - display: none; -} - -.tabcontent.active { - display: flex; - justify-content: center; -} - -.hiddable { - display: none; -} - -.hiddable.active { - display: inherit; -} - -/* In case of collision with classes that use 'active' */ -.hidden { - display: none; -} - -h1 { - font-weight: 400; -} - -h2 { - font-weight: 400; -} - -h3 { - font-weight: 400; -} - - - -/* TODO: Add proper class */ -/* textarea { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} */ - -/* TODO: Add proper class */ -/* code{ - line-height: 150%; -} */ \ No newline at end of file diff --git a/Frontend/assets/css/tools/mock/r11tooltip.css b/Frontend/assets/css/tools/mock/r11tooltip.css deleted file mode 100644 index 63e70f6..0000000 --- a/Frontend/assets/css/tools/mock/r11tooltip.css +++ /dev/null @@ -1,76 +0,0 @@ -.tooltip-window { - position: fixed; - right: 0; - background: #FFFFFF; - padding: 15px 30px; - font-family: 'Nunito', sans-serif; - width: 40%; - height: 100%; - overflow: scroll; -} - -.tooltip-window.lite { - width: 30%; -} - -.tip { - display: none; -} - -.tip.active { - display: block; -} - -/* TODO: Remove !important. It's bad practice and it can cause errors in future */ -.section-button { - width: 100%; - padding: 15px 0; - font-size: 18px; - background: #b4b4b4c5; - cursor: pointer; - border-bottom: darkgray 2px solid !important; -} - -.section-button:hover { - backdrop-filter: brightness(110%); -} - -.section-button .active { - background: #00000030; -} - -.List .collapsibleContent { - border-left: #bdc5c9 2px solid; - overflow: hidden; - background: #ffffff50; -} - -/* TODO: .section class is to generic. It should be renamed */ -.section{ - padding: 10px 0px 20px 0px ; -} - -/* TODO: content subclass already in use. Creating content class overrides the subclass. -Make .content a subclass of .content */ -/* .content { - padding: 0px 15px 0px 15px ; - text-align: justify; - overflow: hidden; - transition: max-height .2s ease-out; - max-height: 0px; - border-left: #c0c2c3 2px solid; - -} */ - -.collapsibleMini::before{ - content: "►"; -} - -.collapsibleMini.active::before{ - content: "▼"; -} - -/* TODO: Add proper class */ -/* button:hover{ - filter: brightness(110%); -} */ \ No newline at end of file diff --git a/Frontend/assets/css/tools/r11form.css b/Frontend/assets/css/tools/r11form.css deleted file mode 100644 index d73a294..0000000 --- a/Frontend/assets/css/tools/r11form.css +++ /dev/null @@ -1,520 +0,0 @@ -@import url('https://necolas.github.io/normalize.css/8.0.1/normalize.css'); -@import url('fontello.css'); - -@font-face { - font-family: "Nunito"; - src: url('../../fonts/Nunito-VariableFont_wght.ttf') format('truetype'); -} - -body { - font-weight: 300; -} - -.hyperlink, .hyperlink:visited, .hyperlink:active { - color: rgb(47, 125, 146); - cursor: pointer; -} - -.hyperlink:hover { - filter: brightness(120%); -} - -.tooltip-window { - position: fixed; - right: 0; - /* filter: drop-shadow(-2px 0px 2px black); */ - background: #FFFFFF; - padding: 15px 30px; - font-family: 'Nunito', sans-serif; - width: 30%; - height: calc(100% - 25px); - overflow: scroll; -} - -.tooltip-window.lite { - width: 30%; -} -/* .hyperlink.collapseTrigger::before{ - content: "▼"; -} */ - -.bordered-field { - border: 2px solid rgba(93, 99, 96, 0.705); - border-radius: 5px; - padding: 8px; - -} - -.bordered-field:focus { - outline: none; - box-shadow: 0 0 5px rgba(81, 203, 238); - border: 2px solid #00000070; -} - -.bordered-field:disabled { - background: #eeeeeed2; -} - -.vertically-resizeable { - resize: vertical; -} - -.container { - font-family: 'Nunito', sans-serif; - - - display: flex; - justify-content: left; - width: 100%; -} - -.tool { - width: 65%; - display: flex; - justify-content: space-evenly; -} - -.tool.extended { - width: 65%; -} - -.tool .tool-context { - width: 90%; -} - -.tool.extended .tool-context { - width: 75%; -} - -.tool.extended .tool-extention { - width: 20%; - padding-top: 2%; - display: block; -} - -.tool .tool-extention { - display: none; -} - -.tool-extention { - opacity: 0; - pointer-events: none; -} - -.tool-extention.active { - opacity: 100%; - pointer-events: all; -} - -.clickable-text { - padding: 0; - outline: none; - background: none; - border: none; - font-weight: 300; - cursor: pointer; -} - -.clickable-text.highlight:hover { - color: #3bc4f1; -} - -.modification-button { - padding: 0; - outline: none; - background: none; - border: none; - font-weight: 300; -} - -.modification-button.btn-add { - font-size: 16px; - color: #00000030; - margin: auto 0 auto 0; -} - -.modification-button.btn-add:hover { - color:#58ac43; -} - -.modification-button.btn-tile:hover { - color: #ca1111; -} - -.modification-button.btn-hashmap { - font-size: 16px; - color: #00000030; - margin: auto 0 auto 0; -} - -.modification-button.btn-hashmap:hover { - color: #ca1111; -} - -.modification-button.btn-tile { - width: 10%; - margin: 20% 0 0 0; - font-size: 14px; - color: #00000020 -} - -.tile { - width: 90%; - padding-top: 40%; - border: 1px solid gray; - border-radius: 3px; - position: relative; - background: #f0f0f095; - margin-bottom: 10px; - cursor: default; -} - -.tile:hover { - filter: brightness(110%); -} - -.tile.active { - background: #00000070; - color: white; - filter: none; -} - -.tile .content { - position: absolute; - left: 0; - top: 0; - bottom: 0; - right: 0; - padding: 0 2% 0 7%; - display: flex; -} - -.text-aligned-to-right { - text-align: right; -} - -.centered-vertically { - margin-top: auto; - margin-bottom: auto; -} - -.display-space-between { - width: 100%; - display: flex; - justify-content: space-between; -} - -.content p { - margin: 0; - padding: 0; -} - - -.float-left { - display: flex; - justify-content: left; - width: 100%; -} - -.version-span { - font-size: 13px; - font-weight: 400; - color: rgba(85,85,85,0.555); -} - -.block-display { - display: block; -} - -.block-label { - display: block; - margin: 0 0 0 5px; -} - -.tabmenu { - display: flex; - flex-direction: row; - text-align: center; - border-bottom: 1px solid rgba(185, 185, 185, 0.5); -} - -.tabitem { - flex-grow: 1; - cursor: pointer; - padding: 5px 0; -} - -.tabitem:hover { - font-weight: 700; -} - -.tabitem.active { - background: rgba(33, 34, 34, 0.705); - color: white; - font-weight: 700; - cursor:default; - flex-grow: 1; -} - -.big-font { - font-size: 20px; -} - -.action-button.active { - background: #2A93B0; - border: 1px solid #7ed0eb; - cursor: pointer; - border-radius: 5px; -} - -.action-button.active:hover { - filter: brightness(110%); - transition-duration: 0.3s; -} - -.action-button { - background: rgba(155, 165, 160, 0.507); - border:1px solid rgba(186, 197, 191, 0.507); - color: white; - padding: 10px 20px; - font-weight: 700; - margin: 3px 0; -} - -.quater-width { - width: 25%; -} - -.half-width { - width: 50%; -} - -.half-width.with-padding { - width: 45%; -} - -.max-width { - width: 100%; -} - -.half-width { - width: 50%; -} - -.max-width.with-padding { - width: 94%; -} - -.max-height { - height: 100%; -} - -.height-300 { - height: 300px; -} - -.max-height.with-padding { - height: 90%; -} - -.small-margins { - margin: 3%; -} - -.small-vertical-margin { - margin-top: 10px; - margin-bottom: 10px; -} - -.medium-vertical-margin { - margin-top: 30px; - margin-bottom: 30px; -} - -.large-vertical-margin { - margin-top: 50px; - margin-bottom: 50px; -} - -.textarea-300 { - height: 300px; -} - -.textarea-700 { - height: 700px; -} - -.centered-content { - display: flex; - justify-content: center; -} - -.table-map { - width: 60%; -} - -.table-map input{ - font-size: 16px; - padding: 7px; - border: 1px solid rgba(145, 146, 146, 0.849); - border-radius: 5px; -} - -.table-map input.key { - background: #f0f0f0; -} - -.table-default { - width: 80%; - border-collapse: collapse; - border-spacing: 0; -} - -.table-default tr { - background: #f0f0f02d; -} - -.table-default tr.bottom-border { - border-bottom: 1px solid black; -} - -.table-default th { - background: #ffffff; -} - -.table-default tr.even { - background: #f0f0f0; -} - -.tip { - display: none; -} - -.tip.active { - display: block; -} - -.tabcontent { - display: none; -} - -.tabcontent.active { - display: flex; - justify-content: center; -} - -.section-button { - width: 100%; - padding: 15px 0; - margin: 5px 0px; - font-size: 18px; - background: #D5D7E6; - cursor: pointer; - border-bottom: darkgray 2px solid !important; - border-radius: 5px; -} - -.section-button:hover { - /* border-bottom: #3bc4f1 2px solid; */ - backdrop-filter: brightness(100%); - transition-duration: 0.3s; -} - -.section-button .active { - background: #00000030; -} - -.List .collapsibleContent { - /* display: none; */ - border-left: #bdc5c9 2px solid; - - /* max-height: 0px; */ - /* border-left: #ededed solid 1px; */ - overflow: hidden; - background: #ffffff50; -} - -.section{ - padding: 10px 0px 20px 0px ; -} - -.content { - padding: 0px 15px 0px 15px ; - text-align: left; - overflow: hidden; - transition: max-height .2s ease-out; - max-height: 0px; - border-left: #c0c2c3 2px solid; -} - -.collapsibleMini::before{ - content: "►"; -} - -.collapsibleMini.active::before{ - content: "▼"; -} - -.hiddable { - display: none; -} - -.hiddable.active { - display: inherit; -} - -/* In case of collision with classes that use 'active' */ -.hidden { - display: none; -} - -button:hover{ - filter: brightness(110%); -} - -.table-doc td, .table-doc th{ - border-spacing: 0px; - padding: 0px 10px; -} - -.table-doc td { - background-color: rgba(155, 165, 160, 0.342); -} - -.table-doc th { - background-color: #3bc4f1; - text-align: left; - color: white; -} - -textarea { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -code { - line-height: 150%; -} - -h1 { - font-weight: 400; -} - -h2 { - font-weight: 300; -} - -pre { - margin: 0px; -} - -@media only screen and (max-width: 1024px) { - .rwd-hideable { - display: none; - } - - .rwd-expandable { - width: 100%; - } -} \ No newline at end of file diff --git a/Frontend/assets/fonts/Nunito-Italic-VariableFont_wght.ttf b/Frontend/assets/fonts/Nunito-Italic-VariableFont_wght.ttf deleted file mode 100644 index 6a58fbfd3c484cb7cf919992cec7bd053802c23c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280276 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 diff --git a/Frontend/assets/fonts/Nunito-VariableFont_wght.ttf b/Frontend/assets/fonts/Nunito-VariableFont_wght.ttf deleted file mode 100644 index 87c50a8b1a5015d8484a347d1d2081564b73bfaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275644 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�nfCD=ctx>ii{U{Xa8M|9rdc1U$w{VG!^E? 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 XV!2s*0^!JHz-6gRM#eobCJ_GxrehU3 diff --git a/Frontend/assets/images/background.jpg b/Frontend/assets/images/background.jpg deleted file mode 100644 index 3cbefc4f54631c8fcdb11d538a2be367210e5c94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297790 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%0A^ z4{%Qa9o~KZy+zd3CKiv|t{_{z-3K=CPc@OQEhKT*DS~zPN3joIQ@_!ZgNA0T+hiCL zC5NuqzAvg=d-Y|nS_OW)(bc2Plp^h7!;@4rX(Dsr#PheIAjc*O&9D zwf-+-xAVv0uD^_3e4Yb;{vi%*)-LdudGmBvgV5pYXasd-fGn%3?HAv6X?HSj$(qR> zdtmn-GwGl1EB>4-tnp82p}-^g7CW#~%_!)&E=BhA<|(%rkpdaR8Q&1NL*Lx|8py6t@Oes0;gT6?0)2&#!4BsA4SU7J4>p~n zPmYCxBqdPkm5?^UQSEC}cApf-5rWg7lgE0fXLv3m8h(aHD6hFJ>8%x4ykAZ#+7?|q z5Nz31M)z9mQRp`%iCD*F{>B&t;=+!gVtmCjlUw;LB~>{!pW7J}zP z!9SB3h2gw7Nb$`d;0U#JBkBHPHn@(0s@UCx8nN6Y&QdN>vW9r0xV`5~75hG%l4Nd} zyI1kk^9=A05fgOI4d%BGQ6?ppWIhuPdF90ls7b&`M*D|Hu*STXl>W-Aq;6IfbGHJ# zS=`Jl9MRHfMqTJNg3B_lm}i zN1%gIWI6(PJ^{M|bbY@K7081F(^pD7Y5>R93SuC=X~+ROwlLP^&50xaf=b)nJPHT= zhKk{pV8Lz^VyS%LNoXU~nhJVlo02}{_2xJI0H-$4S)eP&fIe_!)yQfu+pRSFt4-^6 zI7B5p(?Bo#DcX+@ny!ScHtlBEfInj1mR!3}o55Tb92Y>f|-h zS4i>v7R@h+NU&~d9I|UjQR5CrHDy>5Se>_)^|IBQJA;QTCk=wX5hw|_L@^nVrfg}i zE~Ptr(gm|_9S=dp^T+9eJu!O6CGqHtPo;>uE*i2jlmLTHfgPdG7foEdMt87uTy}cr zi_Uj`3Gsm!BTygBz$z3dg_>x*I!G`u{4_c?;JYd&#u7@(bCEM&_#}iFt1wKsfp))Y z`KBmIw+h`F2&o}>y$PVldI$do>h=(v7Ss*^(NR#%a8>$2bnFVl7excIa~%j;otB7l zBSZg~neB?`i_BdBewWf)Y=PK0;jN6*k%K|o;jG3zR$g>(FlO=Uv{n{Bl!%kcGrNRe z?klL6Z);j^Jj?%4ruVkWvnQyd28089-A0rdK*oKd?p>q!$G^&%Xoz}R?ud4{w|CQ8VvjK!XghPniM^yHx3bqdcueV`C|{lvlRQ7AVCD0$+NJh> zsdfwU4ziqlGLm$A|I-Jw|a#wpsDZQigP`X_wkAa|}8M*JQL|Dw# zU5j@V5AZD8;M1tp2%h}>PF1`2uwSvv+-c@zx<4=f(^#vlXOUKmp}2mCPrJExSDp*6 z!a2uO#ABa6#EbRKj&gRxEPUNCY#G%X)fztL#_XGEnl#hj+5p>fkaO%1bNaUAKAPis zax}}d=cD>Xq8RITD%vBa+3l%AVuGdb|50I=6kB zM9d|Vd;8L)b}I^ZT(7w;6JNO99oY_+RL35Pe3DDKsmLjpfZMi@OxqmA*Xn5R;fUx& zl_v~(!Pkm9NKKy1;m1>ig{g1apW$6sqUU@!-zhKOqpTsxBV+Ie8m3 zm9cl}hwskG>6XKOf^BhnEEPH@1=?Vz`aC6>$NKfrVAN~aYg~5=urRjVhy>TK%8t(F zTs4t0o&@%(&7&_ib5wqq924vgMm_%gc5weH&$`0>;GxfFJU@LmJouh9JISQV7WZ=e zU_xAc$I<+(eEgT>GQ$8cWhMlL{-g`7Y7){c!u`@P(W#p;=l|UJtoAJA1pA(_cNLur zDa(ZL{fianZwQ3DHSRPlSCgp!d>-FjNgVGV<5Q$u;VgM%hR50h9nL*$!&UFY8BIQY z(nW6bEXkLxZ!2@Yd+$8@4c8v)=Xir*^dP>8d0+ggc>1^h7{lo2=g-h9{bA%q*he@ zTAz^UxqkTcT&mm5e&1lpWh^8%u>n>5@x9}1=S(>byLlI*(i{M^k5$5aBh<$ROJ^hL zcNvWud1`0&y~LZiQxV5kz5y%e!?Z1Y9$7X`HnCV?(VuKhai<2;Z1c<8Grab}c0jJs z)dI-t%!m%jkTxZ-#3GTXMudqzKX4m^Z9qnQOo@mxdz4aa82D*<)eUV-=%?Hn4Qf*q z%mn8XZ<_E&1I1Y8o`C6d)8AXlC*DGexw@EGkR`Z%UFJlG$N@3Zl(B6jDas+?elW{# zUjqZ|zev}9v+Cnx>-7$9&U~v>Hx(%b3tI_h)rPVs`^*JVb$`fqK@IGk6=-%(?af% zT-LwRf%FthKt~?F1)-7t2bmL158!setsspXM0zLUNbX=E^pgxSz)Euz&5g7jY6%>88UPOVnh)qYjJ5?r0eL}K z??TRm({TK-)O?dyr7$tg`3IWWUMdmTC}!BA2qe%*EFcVmxXk%@xGD! zd-2cR6s`G`>Vdk;q&J>Q&%bwU=6-Iy`P%l%As_d2R{jmnrj=Q1QKi&;kPBKbHpX@Juf7gCXT%*CmynFY@d;z#e+x;$C z+ui9fXJSnKa?q4~{%!ZnL|h6k@y{f&dB5>s*w5G1{w}Jp#5SwIaVStiwQ0FHxiK{IMMsPt%Eu$^ROlQZ&*3X*$)6(+8I#! zZq3*#+s~oOw$Hd}V&kq*$9(SE;L)Y&ZQ;q8j(+*di=t(z;pYX<{W!Aees!(y=pFn6 zj!$L}KkvHkV_h+l&NudYw7Oz<;TbMT^4B!!2Z<*rbOWP<>y5~%rArqIBk~w==qmU1 zJ2TJ(%bFQ>AhCO%B{Sr|G;Nw3+AAaWkBYs|a1KeT(AV4uDcW*Z=6e9OE%NbQ~csp)CugcnK^ZHmY>bdN-4Vi@dDFUXt7gx)@%r6|-S$IqF*|YC$kD_FL zcyOu%Yt~Ana^=)J-M+&e;vb0tUlZgZQ)!MsdxXY?ls9K_G1sdw61dfTRsy^NT}Y?} zYP$rwgK76BZlGrTI1ZqDf7v(s!a8{%>~TaFf+`U`h8#iw@H=TB6C)Yu|nnIgGih?<7Z3s6rrX$<<{-! zy7|?ygPo^7{LZ5*_m+a{h$BRllmu4Z=r&8sBw8N%xKT~j8=0n zQ1BX@NmM3kS`1ZKbo{C|tXJJL;3IbHWgOf6-YDbyo~KkeGUC~sCjL~)_EQj=F;QR; zK^4;n`^1e&a%wP`_r#>4U!gp;CQ39uYOc;Pj|T_1KB$T-Ef5t5*}P;RiBiDTjm9^j ze^(U!vYe`Lm5&DYOkIN%CESw+SA7qHU|j_eUj^|Px;bh#H3S~zGxrG45G%zNqm;kH zK(PuQXAnnpA@qct>Z=>dJ`l5=>L!9^!{U_;zY2j44(@nZ9_d&6_2h)UN78;)!|zZ; zj;nnGgBDi$;Sx??Hh)lZ?_q^~K#1h;jir1%u!z{HUy!z3F?^E!3k33_J^@RB*UL@= zYle(4rqUALVp&VvKPZ|dED6Buux0^ZTzLw-l_XmJsKfkE2r!5RAtYZ)yW@LZc?Mqr z2deO1kJuo+e3O=6*_9)`I0=&09DH$YsPd<;PYekS&-M{ir<1(X&P(u2A?}6=O#?ZT z>5{`|+!HTD7r%5_&TYl^Y);kp$jMqb7*=F@_2dHh|D>_lr`vU$wfco#Vks(nrWT)e zHI?lKtO^Hr_m+Nro%)(PkUh+ev~~04k~QvX`J{irhaYs2m#``)a^;P& z%kN=|?zxe+_K)uECl<2rFB4B%6K?322RabDqct(%oSvaUs`St?+N{p&OkGcF!5xkY zwi7yg6A|N7+ZWN%FM^jfg z-U{i*_ccoYlJ+S{av9Nv{HkBMb}Do99qzrBTh@X3gxPQ&o4(vFa)xEDdU{Hs-sXsx zE4FFzY%Wtlb#^_=M@aV^tbSKk24M*bs#)>N|51NFs)kiT$t(|;pI3b}e9btGoj-1| zUaCHfU&_)(tVQoo^n;H5C+>3jH*Mr4ajOV}`SJ`d`g5Hw4h;p0}fu6fgc* z3lL5gp{JY4K4ZL)pA-*15w9Tn9DhGG6T_sAGD&9WiP|F#zDK{hH{z@xAH+@|#98}} zURMkBO*ON)IR|AN-N9GGyAb76Cs{xE6;i~Zm$@;44Qggu-uk0@Z$PNrwP8S2AU5O&;fj_ntJ?qHmWf7SEH0H+B}cLpHR`SXAbwP%k>Nl{H;ftz54j5 zW}YDPRO3Pow@~Dhpp)HqT3bLO0~~){1UkKZWBP+zNCf5}IYe+R(HL}2Z%+UG&aN){ zHRJW|=N#9DNgIxpRYms&%gr_e4t+ER2asY=?z00HKtX*1qYKxfxDCCo?K-F)FmjXN4A$0v> zU7UjFRe>-> zl94UvNZ}(Xl~wlUAlt#G%p6IQ%nmx)J1Tn~4*FP;y_+&J%WT<{6;A)#_xHc9uDY%| zmoqx=_x-x>`}ur4jREeq;Yhs<4U1n+WhA}Bu@{z6c*6(;PnZ!P_b2k2Sh0O_7E7~4 zepWYKKxc#j0=YTf78{II_RdG$Dw;=-8S;^eEwBc$M0r^@L#{a=}OygXN)Q zObzcl)(oXmuQJZzYl{x(nQ41b_T@&mT4^ka*+I;Oi_gYJ>5DS|MRgEz$Vla3lcC$O zqN9w?u`-n??~%6D*Q!5>SmavWwFC=RExQ+|)8Tv`NU9$<^^q{P(HW`RTL~XGeIb7H zq4HU=fmOFe?P95zWfr;ZNo0{CcbAI)MdDMkYTebyqC|<^6zu&0FdH~Wj~lM0bbXAI zxyGipgX4Cyuo``A{IQNCGyzs6x7^bO3DgKF4=@5qwLd9w19yA0MWOa20yVrzn>0Yb zl;~0t`O3;~o@n0Q&C=d29Z3&+Do0T2c1uH7d9?Z>|Nq|rDl333$9$54E}<$x&Z7P@ z15!qqy?C|T;t9=fq2MDy=-WWR7+KrKSbXC7QjFkBjNprnio}@jnSCWZHeYZ9LX|{P zv3G>iL*dk8EnwN-=n^KozfR?UvHYOtQhH`rvNuN~MGQf0mML~(I`>DAPk1f>Z!@^Y#>S%_aJnCL)&=H2=5S- z%#$ez6NJ;n&}M30ycIqo^Xb*g8>KmaUWX5lr+gee%sy}*r{y~16|O0e@nH1p2(#j^ zl^IZ?^A{hQy^dp_gL%{}RZv6_$4;Wzx9Ke-u|3~6zo@ww6Rh|?$QFmk??OuMx0sBf zois+Xsbg7}5p0)CQPWL=Frj+!wnSAcIrhSn+vZ7A8>fTK*V1h0{<%glb$eA$M;_z} ztQKE|qf7N$=VH3agntrWJlPy+I4l;@hS8wBN}AB1>t1-=Pz_HVtCNLDsp)UpTbnJc zPlbg$ZvUgnZ)LXs^I8z6ugbc^jnj3tiqDx^8;Ql;??M(bX9{xG?AG#SUkB5UtDZQa z%B7z#dR~u#z+#N{4N`<3?wkE4a!sI2C&%V$&A+!#g^E6=)OT*L2T%w3<|#xchFSP% zHNeAsVyMt>b#J*`2z)e};cK^U@hc%)7 zOV_v6YlY=_@5cv*4!lg8ZvULhJaa}rmRI>O*XUMlvSV7^6W(05{s}{wOuEZ9Nldcvg9T+kv6PB2Dh^j=Va#No~l(`JnH?fQr-MV;@-&%itJ~4OIOsE zWv$&HNwvZFTU){>%tzkBvKYi#C&~+;d@{#oi48H>JXwj)z{)ZOYb#`vcUuDRq5*aw zp93BB%#Ro}&PSxXCR{ql2uPLYDyYNG8KT1<6fJo9| ztEE>|dAAY#9w`Hu*3+h|&+ry4Rsg!Fh{4P;p_UEltqt&cF3+0{rF_8L`#njc@!207 z;Vn`yRuic}MLv|3!0Yk_xFmWIq|Se7sK!%8v>aCJW}w>oeUM88mXyRH7F1iFrrZzN&6MS# zaUo}1bGbJ!hHlV=yZ#*4RW$eE^8ZyyZLK8S9^C1P~YGn_`6%k>V&i9NMYifRniI&96%l;=}G8KY`tIbnhK!4XJ&9(B6ybl%VsOqS{B`?&v`de#<2!QO=>ruaGI=y{F5q)7B zHMneUr3PD}0(|lsxC;g?y~i<*x`Umq`cl3JR@gi0GuWFWQwPG?`P434auS0lHD*hS z7TDrchvYoc-cnoK5t7-M(wO7Mq8+c+_n@^_!QZ8ByBJqGy)VL1H;J zibN;R5?GjdjjJMvJbbg*!m3;+CHQ6BP+#=Q$YN<(RzfW^@`f zoZoBY=4$`KERE3W@gQt67S$5Tva3#|Lae!mMW{Q>0@J*+^c_to!nFaG1K z=N@_U-+kvt8!NG#S@gOA)^dI9dULYjT}1W3FH{RZ33ZZ;Fp0f{%<|MOyGNzQTT!>j zxF+U~UYQ9=M<%RlX03(UXwBQJX2#b4z-!+ukqgp2e`|#J+xWiU6)_1*z%e>Sj;QN_+s{PN^IJ6Y6)LCN!uUe% zralXmEf}DzD{V+7ta;tyS*VGcoaOaQHTFo#QhzMej0u^^;y_Gr<2JLuaQ9Bl7S^&u z%&}QOuP3vcqniPz_xV$xr*=f!zORateL!BDhoCm_MbS&JHG}HqpJ|lkQ2ZZVj&CLV zJy#2a+k_MDJDJ;xE!`Bpz2AN~uCnRcIF3s))3LA5Uxit z-Z7=aXB*fdOn$16Q@ukPy(zmhE;t-eKp%LfhL(dXH*ILlqw0V+y2y$kZauhw%D`&p zGU6#7#M}ZS1LCv84Q$gLr6Z@X4-ya>62CT#^IM$1DWF?9Khr$!BM837g?XzfWYWzj z#fH9JM|Vn&T9RQbO9N6+fW@ZuAuH~#ce8+p45<(t!2J=~ZD&7LI606wfQt<4mWi-6 zo+Sc;7hz)?>YLBaI8D&)aF>;6+i3$7${vnHpjQ);0Wgjgz_}YUjOSz};JbN5aG0?a zF#WjRMRNUclHZu`aCiDzVGWtCF`@-CTX#goH=fqVjJSo_fv~mv3~yN;F+Ociwyomd zBNOa7ee4L}C-xn67es5$&D-@YMVl_(DK;F-1*Gk!*wI4(IX^Z>B zv{O$e{!p30o7R7YX_txpb7*(Aq4(KYg3U&Y2oM}(%Sy!H3sfoIZrE_*JhAS2KnYEZ zw3$QgK`Y1dj75~eI?4QqeqK)$G#o1&E|R)yumQ+3K(+kvMSIsy)*;U*XAWiy8Mf%(}}%F7L`W{Vva*$`j?V6~o}{OWF-+?>nt8pOuh z4g%cPA=C{DQE!yK@d_-2^)WM$jZ(V}46ii;BBBG3H0Cx{sM}q@ENoUk({}p`B)}SC zT4Umvm8FWSfNHUDcj~E>xp@&%8Z$Hv%Z6jbe3@lFEISj6nb|>3@X&&OsY1nR;+r3x zH5$Dnq3=Pei^jTR1Ib<9MovlUXj5goFY%`~DX-zfpjc>R-V>d3<~#Itcog?BV(Kqd ztIDwcqg5B>ft-JmR!luigYQYQl`uN8;jw?jlohZb;;<}eIuM|^GJzjlV^v;V@{ zCbGTJ|86BWNBG%YF)#tlYgY|4C`BgR3WoP!BQy z+qm7bS&SRry zNj_f*4zU4TO;x0?&JqD(7tHe$I(X+&vlis(1u9TLnB5>F&uYo%#&1U+wIGu0I^QBI z0$nmN;@ueb#lRS3f_3VND+-qqeyePdoDk{>!NVQh2A_dIE@3*czqqg=5C#SfT7G?3 zy=J}p@wNNK8_OY|dVT5;Pd}}3F1#+!e%lb??yMbHqD*r|OT61uIj@y9D<8V(%qq@A z$$m^g>VE5-RpG6&X13s`ZeFIoQlSBsYi-=-8QZL~xl@xUtIfpWW3j@isal}cMR;*P zYv=WHD+;Zgu#4CCLXOq@?@QOmDQ23<(y8!=Ew^%Y-Ym+{%qx4<45#&;hO&preI2QD zmyUZ1iw;aL;U{66N+kvbEeM!Xn^T}_D!Eu^MaijK#0D(No*!n&z16oEDf5ej= zZ3Kra&O z+2`^a*h=buJ1sIPjblV~ZcDH*zWeWLYMs1nBG&#e^Ar~U*GqJ{M3#Lq@ z9oVNZBI-wx%BT=9IAB3;MMf#9rwe|tHLeH3ZATQk*eFdzFA`z`Y&9{9?7eHCV&yY7 ztp#zSPmU6{apy8#BPjNKr-y-H6=q%+ac7OdW)22z07mqa;e||tM!4Gs=(E*zfIT&D zj6z<_@dR{FDFHclYm_*Ih3VcL#4*^+rEOrX^4zey?6$`fRbDe_v)~M560rv6BieK! z@5b0)pTDlpeD@8&e_MmF!$oL+DO&~|cF>7`q_rsLiE!WP=J|*ew`iG1`Gf9xY#Mn+ zs?E2kw*}sstqrV6!_M#;f0l!M&^l%@ApRf(ukU|9G~74naZPC=OaFQ54z?KRG&tKavgseYLj zvo-bGD^T5W9&mYtqp2?w6OdV2J^b(|yYD66n!yg{y453{dj_HgPy>3hm##4DCW(2h zif>InDWP>W84G?r!;k(PBri|88cF<1bu(ayTKh7WtcHE+l|w4nThIk1baD?@+cn-* z`K75oF7>!5-p~2BIh@1LXRg1Wj^pIi!{>z59e9i(o*GBrbT)RjnrZ+9GRFbYX!rA` z;u}K87wZQJ`ClR^r(!G6HJB??)s=%*f2le^Qms14PF~prvCAW;&;GU&QQM-GP3I4W z!ii(HXRo7wmYuBvr$%+*oVmRId~#pF!Ow_)ZE{&dpBL;ueRghQ?Yj9EBka}c-)l6O z?ckakY~R=yH4NBbelm+C*Is_FInGoj`VZ%$Q=&bg90EL<*D*Eh&JQy9xE^|U5yx|U z%C?rmFrhBjrOSN2Xc#$-ioQ-ip+{s(Z^LET2}H`D2#l~>M@Hx^B=mJpmY$m|qC$&L zWdCDrDgLn2P~rCG>xFT8?z>{sh~o_1SR`-_v2o5PKdUXWBU}*0obxFTx;wnwHRt1` zZ26I8p!eu>)SUq@3m!WHwjUgc6ehFTZNmnK4rKisl#eH(q&TVzk~$k+BZhy20o=RO z$L&uQ30tT=(Y%2rgyGbRBat$vS-9Ca;xNMx<;D(`a`k03#a8YJ`sCIn-U}~|`;0dz zPs8S*7PNv?)i6Qrt3J8pCR$=?t=5W@hUN`NF*-iMS3ZL>gD;UF(Ks}uDm2If?*6qW zhC0M)qqMG-v3U<&@28mZyG8uY+P*>Z`j*k3Q8x;anY62NEsyQ2U&iq1X1li1?(0Qk z)H#!20(TzO9{qeVFk)a%JwliKxOe!m-+|>pT3-QyL3j%yCFU44lIj%ZCQT#0hgqum ztY_wm^#aARy6dsF!XtSbeW~fj5Uy=s{>XR4l(Y}*D~-=%&YMN9#G3BHKK&`$^vZj< zc{+tI_j%`U*MUG=hqyNq@sHFci_qi&7d01kfl{wd8hQVYOsOx7ph;0EBz3EiF=S`_ zHbrPF{=g%#&b&58)ja8Y8v@rPle7{|WfDL{tkwT{_mJ*{$o0=HXx^vE^pbeHcMM2$ z&7%Pt_;{R8iLF1C)_cHH$#;Ku-b2qGll_?A+VmzU9Xj2M*4cmej1*U275FA3E@<>; zx-VlxMq)<}H0A?-v^hcx3mu%kHi=0!BF``4%49g#h~~h1?&bFilZw^RBHQex+N_=6 z?8}u3oYl~McZ|^>gD)ZslP-5UVo45xR=6WnHT_FtM)!EU?r)%hulz4E!M(W}yWYpu z$+iC5X*u{4{dElQROt%Q!bfnMmvr;ssO-lBlL=djn{CW2{ej1p4&zead+=8Nt3skF z*OaSrs^-P|^-;4o^W($JONq9yi7olS`2?}ElKTFV+EdpK(|Yx&#|VLT(Wh-*?c@G* zF=`_2A9-wE?zxV=taVw4%_(kiRazB8Ha^XYE`AFogiKdkM}Ox&j!YL(hZ*%WT}*I? zB3VR_?>>{$Z4JO=a1H=!y`ixA4=(Z%nXclB689LtlLgdNmMC2(4LiKW=f`|2vyj*G zmf5|gEv<2`0+ttWcO_kQ)C=vlgKMJ*sgw|it8mowE8XdcV#RjNk&+tjFS3t+A1`l1$SN8&jK{&NkQ?!PR>n1Vx@{TbFf(^cr@*T|`k-zbxUNKg{;dvD={&I#p_50P zi);gh!~>sPrK&-mfQK&YGekVEtH?!mkJ$Y7S0S z;d67SVoL{R>FICAixZ5&?@qWMVC_HitR6b@x3Gu#b#3EJOA1v+53JwiDECz6ulC&^ zTD7!Ma#oXg!>NqfQu%%`rWCJfez82wNtoJ_$WD|E?MkiI{G~*^JYFrC!gBSqHc#3B zpdYi64^}7#a0HbXd-dY-Yeen7mV~ECl~`hzIeMAiBQ@zQ-K~)V?Ea;o6VbMW|7MNv z`>4Fil-s-%e{hE1SvR<_T*Y1Mma9O>+;y4PifsJ*E}umun?JXHdm5m-K_9SI;P42` zxzDjj62&D-{5Nf9sB@1ud6X#{;i4-Tv7@}dka6y3t)3_gJgl7W z^)7A`V9~qa!_efUCBcwVuTdYTn^D{MRLUNsY(|6SxqdNx`XaDE<^&F|3O&bwUitSQ zL&cg`l?cv`mfj*3gEQZBO3$4tZL4cgL}MSF*b!tj4Rk~!mW1Q?n?L*#+8q^r%R?~y zPE*M-i6qm-M$%O>G;lXnY7q1N4j-wU9Zg7fG3Vv%y8kp8we&xaiRuXanfk+BQ4D2i zdA(({gK|0k&)5a|Z$mUukB~|vr)q2)sO108?FZ$klLl%KnT);zuAwSv=LeCPS3#FA zQp!!MpEu+Np48Tg+%3el3Z+M4=1n$4CXq7o5!+Fp!LvR4#!r~?O3Lc3X0P)av0UDa z40KhaNaX3WAUeE*0`Yihb+@exBYC%MQ2lHP!*?g>RuqvUdmB?uxRV(yu|C$h|=)mF;xb=Fg6 zpFlRyjhph3Bku}Ct1yE$ zgrD))8E$jd+gJhX8!G3=$%##zR|(MY9erdNA@m&%ISCNR&$ zUdR7P?%HL~`b$NMUNduc<=({0lbHIMiH6!M8plRR!bI>b%+r~hiV-J#?a~< z;2tT~L}reaV%owlMkLWQ=?Hg}ad7b#Ud!*sRwk9Q?DlF4^=) zNN@N<6s(0gE28m&64u7=vetoTL*aiXqDRXTt6?%u`&w+dlg7NNtl%`0)Ms{jvpX2w z=lRHr?KZMC4|Ob0UO@nk^xDowl@fk`_%}64IS`Y!xFr zk?3J$%Y3Uy%Ep%2tqK|00Ta|&`08ei4GesYrCv5vsQYLy9x>^O9hpSkjBlc`Ey1|NgR!$TGNn&lL!66yjk*%DzId zGis%2Oo2gJSsEP#?nawh3*z+xavKMZyo)vK&kRId?fK;e^tcYdIGS(k@ z9UllgLfa~KL@wDkB}0XA(x~gUq(KZ&D%Nwo>FT71y@>qCjK%p=}NAc zcdoCKvZ$-`h@8uxN*>_YtU9JkpYQz4JlZRzflg?vj}o$5DXev0_I~0&(;4GW8lG4U zmmLyRHkw?nn!2R-&8hX5y$!7HkEB0Q>}F=)SkEm&=j*>~&apKqh8~jY7`OXeSW!!& z3LeaUL@%Y1DkP^S{!&wzj&#+=|CYJxApVX?-=@IiUSbGNVR!TG!=2iB+GnCU<#Mme z2PO~v7R=HSLc|kXt?t+Q1piV!Q*^%dt=-U0)%sG$^{&(Jl|;j&F_h8v!-#|56U zMIJ+%T=c8f5O}&^HT8o25?y50uer*^wB;OC%SZO@5{cnY9?r>Y)8UI1XDTR%eaYRF z)C2*QpDDHMvbJxK_obZGz@s@EHyg7pg-0(c_M0&r8VAW0khhvb8CwA7)KH;Q`4PDL zGfo=DQ@jP&Z!()1bLfj(N9ev#{-QgWa6GY;%2Q>;HhR(}+oX2bDyp^R(#L)$9O%WD z14ki!)Wn{`%T2c1-6*_5eEL{2ReL4!qizbhlg16}41U0SFDWKaNa|Q>M$X*0F3RY5Kro?5e${7o z;3qh0m#oU6ZLN-(RIRsF{I7+p6M_~Fur;a9`iRyHAp}HW4)wLVUb_Svh^JM#raYx$ zlhoQ~%G{S^bIGo3pj+QaE_ydhEa52{GcJ*&#uyj`3b7)ytgZ_ccm4wEi?5i}PY3)% z5q6_EoyWESnVY-}X4OD!osc2gETg6;$Md2Szwm0LQ`cG&?p3%}XVpeqnY^4`BxiVm z9+%l93+nNindBC}Yh?<#9~k!S;*VnglI;i(gmB3x*V=N6)1X=N9sEbuF=#y)DA?IQ zCEnhG1$U;e^40bsGWZz^AGtDUm!P-PI}Zwh9z~^4U>*PIL>{MCyG?>{kj(W4ED<$Xhh=8e##uk>r%hCCKiVD$->N<=vMn>I`|*aLdB3kXn5m|`&%*L@? zKi;*P_~O-F*I(k=AX?%?D2%v z&u~PrJctP}>B^~Gw0Nd$?z9l+aaopqKVs%QkU(EpjXD-^Y(;XKmt^@@=%6;>?+Rs_ zlCH;#-rwp#44%|8^_f7k$W#kz>V8V7WI$rHpL#h5(sqyE-PwI{`MN|mdPtm5p0XQv z5J^`eKcidtDp%v0jK0z6K{DmQ_7Q8CNn>3Ae?)wuAQQ#4H#2t(QpYXMsZG+58B$9a zT2wYpV@*GYIrBeAM^?5jJEBd5b4BWeS7k|8Euok-piI#;BPRi8}g_`?m0b9BL zHZ5I%*~SbAiHryV15IGJK->+?*sJ`zv8HBi9Y$?$nYUHmB{SyJTr3CSX4%A~&RwZ+ zVV2sP%v7Ei9u)8Tgxwd_B&5ngKx6Q;%NrWz8?bGY8A9-%nJ!OzAya{fJCFTb6Ch?2m!io=D8JE#}oj1lrzalg^7` z#46<$Ck4HAIymmD+=zmss5^>#vzA`Xcj0Ml)I0b+eVi709Q=4VmXv zB&hAc7*CnRU7U*y1CB5rBzXiIx-(KhRw3P(gnk-VLD+!#ZWt`R3eR7LxGTu^GI8Fo zR1VFz~?|Uk&tt}(QnVCG`39QX?*K`fKpm2&vdLFCpxx5W{YF_ zaMuk{x6v>6d%*lz|79wQC!;G<)n!-Nwst3ndXdS*zf>yKCpFR)ZHM1=TxIp&qTS9o z`a)zLV{=e&@KqeuO~Y=DU&V)9Du!WYwL`6>>W6%}lcdGG*qq{-e`s!-5iOAM`s%N1_J%$D0ir{$t$-dAczD?C2b^XibS8=NrnknJ!QNmV1dZ#$P>C;(XEj5&GU#eNAt`ytgsIkH? zjA>6Kux}T71$r%t&CLva98Fu=w!269bc|m$RZM2h8})%x;vN(3#66G_JHZ&N^|&zZ z1T#`0uKSHn-%Ihj$PLDkQm{*E9q_K^<#E<-hp>19XgjU-bFm z`rsr^cQtUXEb?pLyfud>vhHIh2zzWiMm!Y=8)?pU^h~wFY%f?R&-CUhm6e;+L_FCw z>zb(vbDvYqOGH?1w*v9+ozjWZ2-)05Ggy3qwTO29$o`7VV;%UT%cY%GoOqe3@1rX& z?GZXwrYVDriL1F4n!PzBY$IAIceoVvp0le#Nf58Qt_9v&D9app7`ToG?-o{R(qoBc zC(8a()q|^ojB@>QIsRzFBr9*l4?ep$H1)4D3VnjGKH?ypcqxDlq?zVYu>VeDbFWN^ z{02t8A3}FjBIzo=aRfU5DMckue8O-w=ZW=+#z(< zLPHY>3S-6-+I{Xt871~_lR^S&u87f?zsvQS7m1pJ+psfDD@TxV^H|qY4zrgk8)WoC zF-wmQM?XRNv#UGRB-*C&Q6%{iapPAg{z8Isq=x=)O9)flUFqb_t z24z|>+|{|x6tFGEca0=p*mpXVnPEA5<5d8(?vayqI*;{1*4~53%bFwTIlf4;I*^7H zSEkCiqq4Yn{-s#4bVsdF!PfqMI>FJY2=w)fjK;x<+f{5yciqpLo;#f?_bD=ergC%6 zoFT^Ttj5o5+U<~;)*JlR^}G{o8JtG=A^zI3yCt2-Ndxp{AbqAwC|ic4A z+P<~S%YKe2&;ikZ45Xxf+W04Uqu+dEHDtI=SJmB8UdX^-)qk3D0$dnOYM-6dn}|Yq zxZeM~yK*wajpu7>$|mE_p0r`!QIaKs?;F)5Vq##vMd7hWr8>t4WVz4%*bQ@qXbzJk zOD0-tZN}xs`swwV=Fzrh=GxN_s-&-m{7YBcyWWi@hx+`-F}XykYD-bXeC)RM=PeT*X^)*x zUgmPxG6?=elX59B;~mFa&{5xX_k%vIo!@TV@|mFSj<(hOuIE!Q=$N89?fRWN>FxTSYdYbRSSEckpw!F$1UW*d@+F@lD@ zh`RHWNJY1!I>CK;qo&3Ov$#8}0fSips2Ptr4q>$ zwg`d^AkGG#`LB0G_Ds%2(I~@5)NKP3R^wS1m$HPx-?zb@klKX663#7mjm)H7>4_;9 z#k>lgs39Yz)x6)|6AT4$#RthLvGM!QzjJbVSX}(wFL!OCjnGT7S3Z2+fKV5e*1U|b zE$~w`?>ixx>VjsNuEFz{j(eK43cp!@xdA(LS^{(U_+&qqi-5PgRKZ97z1H!+REen@ zLcgwuO8?Q;aZYuA!Npq%L)3RK9IK?RQ-7TbtAZZTT3R#XA^*v?-^IV`uD*UkeRGFv zQtM~+CH|^?UwAC%!i5(L<&D=y-u^rHgXO+C#c4q3Yt%~p{v`oN&&#H+ZHC{6P%49I zpOme%`g`~5pskUd*;iUm-V%#u*VcRd@~p#fW6H~&6-pW9y*^^0E9+Zox$KU$+7QWr^KfU04PP}@FSo(yMT3u(Y zUjMZ1U~jLtEom4Ab*VQlFA*%#N=ucDKf_2JfS%whuqvAwL!IE9fin66QTBELW1h{* zY$+hNA98FrxDU{udsU~B3P0sa%xXxPvdnWl4R1f90|21Cd9nDIamNLBUH zklD=Ch*)4$GI}z5a?OMK#X2$M!?ix1_I|HU(;I)OtmZf^!h>YX*8fK-3#_B7WYYju z2W6hdmcJ8G#wffNhV6QDX3+C<7R96O^@>Mi%*U39d1CDwl&2zwBoHe2=e_{51*5m= zgKYNiH0EDSDQ$kdZagyqaaxr}<4GLp!W{W4vGxPXK8Z^0a<%!@*Gzkm!pTY$2$$El zhItYv`-oE6mNGv1&Y{ENjPAIoxc~{f0W|xtrZ8f|=u41A0o1|jTh1AP##icYRqg@x zId8M;yMO-4UW!M@W8;MW6Q$N1UOhUGZfaZk|6#!74dtzv1_!vsmT#e2-j5j%`ReZM z(4tJ_&HkNwuxmB(?ROtNfl)UCK<&6fHAz|R7n*m?Oib!@D`E$KlAq7UWZjl5VE;?C zI75@<>Mo5w6_hGhW8GxLY_dI6cptJd6Ba&Xs3jWw)X$=?y)3P7Ts;pbsyKdYPhX?h zi}AD?VOR^Jig0sk*~R7yAtZ`DyZ+1E&+(eb3zE_SHRWPjEp`mJh(U-?+$6He2YDQ(ArkU zvrJd71#M8}Fqn<4%1bJ~)lILC45{9)Uq5wg`)owgFOz`6*ph|H4{UjvXoE%Q!A3Zu z_t#0TnHeZ2A2w~3V5Br>BJs7Aq3Z0)YEvEjZ3IlJ@_0xCW@Rk}O{p?X+ zjfgEO3v(!j4VQ$d0K9I**^gmTxyRfQsJjg?9}z=_yzSd${MUAHcRUX->iOCo!Zymz zFkk8~6;BS6L4+Chf}XklWM0h`Q4*yJ>i7$^I*i|Dur*M$yn2>Z`jrYjAyz6S`$jdz zEX@2f>y5{EcnkCYRAaBfjCh#O`@SM3uPwrG-jn$zj;svRM_7|JKE-yKwV-bfZ?%yD z7CCB*?J~!u`%Ti+;4R|gZJ9k#pd>saJ{MU9(hmKu%sE|E-%#zZL#=OU>QpN`hw6~Z zldu7^Ii~_rXPwKzR?zN|;#<&n-yjvoQlS%T#8u!(ZwpE^bZLx?gf^=t(5_6mE8xJ5 zfhVSct)Jf2BZeih2GZ$Z$-NK7zAf!Ty#|5(Cx|UTGWZE9ilZKwr=B)F+c%T1$jbyn z=|svR9{YsHU^qs~J9X@q839Q3veK?Ez5Vx`YKxDCt_3^5BRnb+pa0B4`51rcPZR!3 zHYt=JY4Ym;MC}1{q=Dm(H5Ea!u>=0rs^rh`N$W>S9-l=ee7W*0Rz^qCjO&)275i>FSQ|j#_9d%XFqo;SJfX z$^qxb23}Y0q$PYtN5y$WPVYfg?pWDk@^4&}7r|}_c@g6Mpm^a(>$!K~Ch+c<1TErN z%dUw>c=n2taY=zpzyS#=S#~jk3$IS~ZD9kNoybeZFQ@vekS3E%Otn8bPD^R3c{l{o zRY=N?58Y0XcqYb;GFeHe8O*Z7Hgs=?Wc41}rnB&ya;BX-%pdYpBwE;W3HFN38ID~j zPU^pvR*Pk&oPtm%i%X(X5(O`hi^Wch1~RMM45>KSm@QkV5BivJ&v(_GiI^~1DpaGA zou<0L8Yyp`u(18Fft11|QSRr(pTxaA`zeRl zl_*OT##0vO|59o9ET#YPD>=Pms$Jyx#?VyTDy4W2s-)uAI!4XLQ)R!0B>%M4QR^ie zw!-b{_!Wo#UPeIB(fZ|!JLy;mb864!73I%%Aeg-QPd(8a5mQwq)neXlA3KK8j;&{Z za{BGZq!R4mKW~RX)BAu-d(nhN|JF)|-5+6-7G&uLZT!URIe!<;-??|aKP8`gRd8HG zqjyed{kpKHHB-K}=CgrirTv}$A)fhqw=1IBWEzXq2TY^Bfx${L3f~fKTqa?i{I2Uh zt?n*}*!25&2NkF0b@O^6pB--MTlj(`=_$5xE)voaBf=6N;I0NmiC)||Br9hcK}`m%(MLJOUl#~N7?(HM2|f$KD^dv zgK_&N>=T2xr<^+cw^PqU6(LPLp8FNZ7ghTk*uE1P7-IE$x9wZ=4G!xSJbtmesUb`_%0) z={@|TWI{_>kPZwy zfwm&6XUz7&)0j-tftjlu3ka!*$U39PN{E*{*Fosl*bsUlD^Zl3SPFJc*ib(|AM-H` zHH{ofHKe!eJL@n)B*}fR4IT^@qcP62z7N^sYsM!FaD?NG7W1U$Fkmy5njDg`dL6RxQHn5IK^&4o#UDdMPqvGR=Y2 z&C7E3&JH7uxh`=bWAGETVV95(9)j@9=1tTu#tUr@F{yc<=%{j4j-eArd8GXAyJ=uj zFZ9b0JPh^X(z>lROjj;ooV_g^zELtrrd{Sc7CT)i5z=?U3G1O`s=UI+Nccwd{3$2p zEj+tr5raN|APomUdB-w?i5{67Cy)h|lZ|H&KJ9|1hC9D2Vs{~BIP6 zPU^J}t6vpe8Ki0bWvHp2m-E(qunANjBN@XW1o&?XA;gOL>J0pPQR#jpemr^41|J%! zS~-&xKXt%%5aSP7Tf4{JscTOt7KBGlfyzEw@A_ql47_VXDuScid>Ms3*Q3&lBcoC=m(5c2O4994uk1eKtht?Od@R@}U?6enhDAVsp;4JpOczH+p z6$vMkRe5=3`RLEA#zTQzbMpGeo0CIx{7&>pLO}nb^k%<^T3$ygvoINx`?JPVkd4=y zBXEvHcDg=1r75Mg^LQp?`Y}agA?S%PD=w;c9RenT+`^>QFdC&(e52DemY;ig3_Z48 z1fqtv(bBNDoNM{zBYg+;Y^7+X7p?mS`>4Htllt3Z;IJ7p0SskN1l1 zmI>NsL^(*f*xx7_Z~az|CQpSgnEPn2Z8UFF!8W{U=fgVv|WrPblWL^dKREWCP&yK!l@Tw;koEL^Y5i zfxRp1&@lo_$EM0C0!3p+ z?ww{q;yS8A2k(fvu7=E?+9Y2Z$=%<4jIGm2gqQ!ZFTr* zt{mF|x#2>n^G$#M+v=113ki>E23N^^3AtbAd?i)oxg>-npE%#xaKHUTAfz!5bdoPZ z#`>6#{f@L1exMVZo;82%Pk~7wQ!tl?8AapL6Wi)Lo+kq3_M~Onx5k~*3J%mu`$Ae( zKD~L#mKm5g;VjWx${JnyW8-e|>dTOp*~93+R5Jm$`z$8^QeAkq_9FlEZH13CIsFJ) z2{gZMR95|;7a@u)1;4PzjkSDK7p7Tt-l?Q2{b}{shMh>XW4?a5!yj|;1c`S;ni5Rq zZ&k1Gw|4a(j7#TqlvfS~mlr+@IKdgma;gIp^7-Atm-J1?)FOqLp?AFf;wArbtVfQS zXA|d_DZePvef=rMnO((8@*5PKv~9`-*>nXyLz=z<{oK^+8d*jt@6`HqdK67PDpypz*fpkXeE? zN8d`Flzp7>uwW0`?n5uimds(Ffik-#z-%8Dud2PKW@|db<}pcwO}aWJRIopzEuHb= zmSMB31aBN${e0+k{y6eN;n4g+I9r8uf%0P<+wDD$1ze<{G{tD~hO3)VUj6;2$ zkwY_8^)WLW*{lQ4A>^ye390Vw4<+#0FgN! zj+Jd^WY^p?bArmHSii*h18ng6U-swqZbpCK<@)(CS_z$6s{cSyY#R1_E|;ZSJ*8@k zjD(^oye96Cd_Iy8w0*{DE0iLHK}o(WKOYBNY-zgZ6$7~jGb$>#oSuG?>oH;vYaMC7 zDidCC!^5va>RlCM3FTk#VHQZ;O&Lf|TIkK(mMhw-tV5ffM-_LDg1!5VEWUd| z3spG@jRdn=O&-jKJ+qEpc%kZ8f)4Dzk{rceidw$Ak;^*$xs~Avep;5{ofc-A$ryTY zQ*}Ay+p_Q^H(FbzqwQclZ|XnxnS+hOdbzdgKXTYt(eCk)8D)FC7t`mBz6otK;*j+o zmS*0?m0eNot;vVaX}=^+<%s*<)Gk?MDwNm0U7`6~=rlroG$DbrI_HOU9a8Foeec`~ z0kK_G%et8zrZStgZ7HfJe32BGU2x^Z56Q!Hei+7x>I)f3I#?{e zEt0ZUhiR;ZLlrji>sJQ(3!2UM4xvH35lS@nGFLEE8n5RLj2h26)S?(|`rIGCpCTat z9I|INz=JVgIyPHlnpHth&(3LL80Vx;mJ?B&I3 zRq0&;7J=?>uJS@|6FB9nHd__OH5ZY zHc<5M6{>IdNr*oV$SNjg?@Z1ia;~!@%h9ze0*IHEBZU0J5{krLNYio3`Mxx5(@S{W zPpCH1O8pb`d}yIs7+w5xv`00>29!xNBgGOO#-0CCad|SEI`#$Bb>S-V*UzmC?8jhB z#b*3}+!Z>_Y~= zWF?Z_QLh`8+ih!`K&{N4F);*%7Dl-sGHWnhMtp>==PJN!C&9KbxZn)eT_2kaTYa~* z<{0a-=MOjjFwFLlbsw7~ZdEf6R!J4;hmS9Ibj>ORVD-Fs_1FhqBE68=~^}&qr z8*+M@7;tU$jCIEv!wmd>hS^YfvBTgM@sYlPh>XOH3j)EL1c&jZ6@n#4Cqm$ooQ755 zD*%t?2pRzhBxnQP?_AW8*8#cFLFN}QZu5#%B%e~{*|Wj+8QpS#q> zS@jZiHVzX4BJYay>r_E$!s8T+s7`T$c}(jE1Q*)q9`O-v{(P*<(`%BPC67?ID2xgR<`!cjqB zf$ldY!FOFdxw-XQm~W)90H~4u$>0!_NF@I88I7K3uHUy}%+w>4Cvtoa@5##M*m~AN z*Rz7s&3sTc_5MO>L+y8aMq3%CWnyB284zpnowklijnG^(}{~a99 z!=z?62UxGBvk+-G?;ur9D-fQSoQg*Bx|uL@6u&BtURF8U%$)%IphuzWY@cWdW(@)x z4}cd~^+#+uDcG6)$GGG6G=e{0v1@>RtU`3sAW7NvRmkdsIJ(kQrN3|EmVS&j520v( zVXTr>*%AA1>JxQ7ynV_^B@%%NatdkkiZZZ)%~a%Xt>4#Ybe+7&wl?NhRq2f5M58F) zeY`a9|B+jGxW(o_E#7@sNGD zH+<{A)06D=`$y-GwzBFT7X{Os=V2kpO7u60M17f*zzNlap|{_xxh;E6=c9v^?9rj`Po(8;!*?R zmHr<`X93mZ+lFyErhwpvbb~NL;SY!+-6c7O14Jq5QbI&W$D~_Sx<@zCT?P`;A|q5v zK)?~3-@|wG91otk3ETTVcU;%+T2d|&cJUItx1EgmY;H}oqfs#?>xhTSNrl~02MBrf zTP6IzL;O%Pm+nR39~CurSv=@ArQ=%&E>PUMC!gc;5Dr@~*7+y|X6&8}M|)nA5~8Y~ zrIVVe$zNu#3Xn4yt;cqdEC}?y$iFvNXfhoi!A< z=rq{{qMFZ%E(q9#f8C1Ixu2KdA*#wu3lKP7*$a ze>y{h?|2!B076NNwP#n4q9)m$LMUu0CZ=qP5y5{P z^~XL$gXaNXNippH)l7SaDe|tdng6)Cu1Y6O7-3`;Ht;ucS%D z30G-a3(jeM$j&~}Y;yK!K!TkE;X%<72h#IGP}e(wkhH=Cr_&8+B=7xutH4leYQA9s zgz2q=cp-q(trB)6L!E%;yJ{;0IMu88fu?rWwu*~z=PIUYirUV27MBO$30NR}>k4O^ zDCk}RL*jcN8cCyw`eIK|c?%H2Y^#dlUjP@fNckt&vxW>K}I0GsTOPy&A;mb zH{x~ovkf&+|M11B>UrViqXo%zn5GI4TQ}3l z5X6(89ugv+?2QDrm5VbOm@`&EmIvtWfv6^~7EGf5%E!+l>b%uD0}vhHa0=9P z{vZ``~01{Q$2O!5q)w+vBuhP!&7y; zHNNeX5yrH?yUyKX;AHis(Ju*U3s?KKL+^>re+ zy95uX=m$5@EiDyNW%$S(1`{F(izNR@`in+_4Q~LzQJbyy)|Scx*Q-lBF|%6NoC-Lg z=x##S@iX2lEU!@ys@Z;b)r_&o!Zzfeo|E*9+?__OMsMHF;R>UcK6uKjvhm~8)=WtD z8iYMe#?C!E6r+^XHTr$dD(t4^^f#Sd>mTrmZ3f1nT*5NPqnbIX#of>&?g$o0eD-Z2 zh|9+_^%XO9ru=y6Jfd5Sw%L6%agpC9-bD@fQVX`cbI5I4>>Wl@pXIJ`lz;aXDqIV@ zCQ|&v8*hv4tYgpzx|o#owH5PxjkNBhUO|5sA22}YlOg_ru*1uTB6MeL{RGgdEil&) zfsB!9g>?Ls4@zvEjd(WmWU#x2zuF+lfL2+kZoYm`zNL*=m zs(T+#=oPw`Uw-{gP%xNf)eIo9jdHaQJEFkG4;vzy^y^y`Ov7?$8YMvaAva(O@S^euUmy4cbKp7n; zVPa&2!={FT0nHK<1IBux4m}NW1E^&Yx;K0TW!yi5I|_Lm-`DzUvxK!3HBD^2NoM&s z*E9Ju+scO2*(!L9Ztm%nIdRX8mQa1b zeqMplEHVsXDL)ZjohGjunyZ1w0f{O2RcYD>VreH~ew4mC1E}uw1nXM!sY&0hPIyyh z(JZV9I-BUX6G7@}b@^S0m08H>o2S$;XKH>`CrJpv$yNigR0OJeDMSL8J)pmqf$CIG zs~ElsTs$mT#D%}!l?=qiEyKLQfnDi|vF?QL7H4ABO#yVQg=rJXX5LW?dfrfPq#qbA z0|bFT5U%Pb(+>gp9B^_fC~Rdk%7bx1llFxp#S1hwig>_}X`F$1^^3SYQgeZOlj=P@ z-s_F>1id~G05iPIRAm>_DI1&ya;KnX06v2>Pc{j=O}aeo#j2cp!B>GZW(F#=0EjTx z%p0oRgk6h8+=%T)%lD!nEw)ucB`@)Lvqk9A?L1mR^9JhN>iIr5=L(bWp#S#;^9lI! zXQ&M7ycT)c$9Yzn0|?(t8>x6GwK#RGN&@oTgW z+WqPZr05KNj59l2=MHsOM!1WTKMNkcm2*t{nNN0Y_#|)VV}<*Nyo|n#?wma(&-klO z(5xYMG@2D1`E3fE$tCy6o$bldM&Z2JLMkUoo)}}v|P=O zP+l1}RW4|vz>3|?OuZf#_%^OMZ8eUZ*)w5ryOrs_Ni&PpHHgB1!Oi=+d{5&~7j>h6 zEcv4df)E9O@$u?xB7D7+w$a%#3jScb0f_B(x*lchrfJR-`CWT0#<~yk%*$6)_t>)W zMRMa36Cw^sjl>3nfzR7l6ek=^=@O;W_}pmE4#r%IKGMqXI?sYD((?-ak?{=pmO&gr zTDQV&B+M+LLx*IIsbuHY9QV2`<!#*9H4OOo6iX1wYj$?vjf z_P0_LLb-PTZ2gf`uH}_sj7tL(&r~~o2T@C3*C!sNnZ_1m4ChPX9s>|m$DQYZ!q6&k zC+|HQP^Vw+a%~c}s%*9?fVQQOBewqHB0kxx4JxaEMX(&+a}`r1LqdLNTbbsN_fSJ~ z8UW<1L0&+T$dmpnijHAq4V9}AmJFRkWaZ>m2sD)$6QhPu@ORzyI6>GQu{kLw^%$fjA6n&B*Ao|SU>cNcKE6v{Cr5)EoyJCG<3qQ{#% zAqG_d(^K69{uC-Se}zF(i7Q(^nhb)pNQD`jf=L@R5q<-!*msOPutQ~2a_j{S=a!OH(9{XD0@)so_&Dl#n6*)1$UXzxL&SJ# zENjkoiSqL%L0*Q<(Eg^im12q4J?@>uzrsaKnQnMnIWxbPFNyhF@;)0o7j>csfbAW* zsjT9sCY9XgHb>~!Ue-?xYy{ZT)%r!&cY*#Pa-;^uK`2IX7~!^;>us{(^v#`ywr&RY+ z5Io;trCWqX`h<^KWJH3mj18W9uBYYR0CLku_{TNYlsvd=^NI5Xr)euw;{%ylX#kN) z1XaEL$L2ti3X}9mbIG9mh2x5=n)c8uw9;wPiv0E!*~QWxFWYw>7PJA)d^B@it3ph& zh2)x3yM?!yI!1ZS>>j`wV8Gu)vtZBp*GQP)H1(I=K1o+Yhq5#vzGLW|8D4XRe(7f3 z&Bk~7j+fr8ut##c+#yZ?c_dL&IX*8_0eDz?pZe(W@P^UHw*0v?T+xNV_$T;?8rzWX zOGvI2+4J4E5U`&*?k`n8T}DX9Qm3@hzxqF-ZKFNTQnZLVlPz1bqX$s)r^eV00s6#c z*98cV>Qt3~>%+@D{n;!PTBDgAFAETgO134)ZZ(88iU}1L9N{8ARJ2`f20$6Id)Px< zIk6rd{^oDleA~@`BqsW=1iK18biuHo80S4kpL8)?3zU1FSopqHt2}8oHU)NWpvd3+ z*^Snpnp0Q{q?MtZ82Uv{YgN~irCwfmkR^Pu$3qWRAV5*I|S8g%X82t zSV}=wd8+1^`9_ZPf-2=F_Rn~9tBnl5q{~dqG}`Tp)62HQc^b6b69U&-YuDzIIMIQ* z0XKhzNT^>@y~Pa&1L77z>?92J{mQknJ$c3mvu~en2dVV+W2|LjOa5LBy{>|&-nnsr zu0GGCcpsj5C}Ne~LwFNy)o0_f#65H$`Xj!4c#(H`yQ%*nB3aW; z(9nY@SL7)2K4htB{-GjPJ9!1`GJ zyZNWS9}y^-lFww|vESeTFpPwGUla>9*mz1bu*E_bZn*jZgn_pz$bfuETFUSJplgh1 zuKNq-Dkb6;;0sECYEXv4ry0Q0`sMz{w4C88V?n?g3-*O1!s*d{CM}6lBQogMD%YXO zg!AeJd`)nFmPs|>gS#HCApMswxIX&>Rw7d?=3C29nTu8(SY`Hr4`=rL`6IQ*7u)ZC z92mhD&m#H(2m)mGEW8!=g-fd06~nw`NUq2NU3TRy7O-Wvzyf(RNGBix@kB-){ME{+ z(2@n{Et8iISmCy%wfLPsy|2s=oXxj|gu@|rIOJ;OGi39D7f9{3!0q*h`>3XWzq@oQ zyt({G_2EXj&!<0GP2FxJKb59ONcG)KXx?UP>z>8cFy*nrTC5}0Qwx#@@Tc)|)qiB? z=!MMILs=DXv%Eh>%o(13KC@U77uE6Q;gh=-8W8siU3V7bg$#6;e5KctCAVPW5dRIn z|6?ziVSa_Uo5I^qJ@Gj_+bIRB@%T#oCobJC+O#Pu+m~a3=syp%B2TKXa3otUwC);~ zJzY--`9@=@}Wn`s^4)#>uNl_wDNiOY3l=D2rO{ag9%B=RqG0q6lA z^gw3+yuFA{S0JhBLeSmJ$#5YTIEFrr^QN^>k}bDxwBign4tU+ln0SN>(tn&2N2>?t zK#b7y9NjnI=(YqiI@_GuIPu)I7H9UM4cU?4!7t26LyElRZSIJW-I5)9?S?Sj6cmf2 z(<^3970xL_0dG+Vtfh2)TM8V)2KnUOFXh~=e~#R<+*c57L{AUU?8v-+;VADN z(ZwCbEA)t(Jy|s?;bkkBQXWY+LL-Fx%EVFsNN)8Vdl&M0csjnfoyeMs3kH*bU@IPz z=9`cyZb*pQ@NX;H`JzxD0`h^Wz^ZLno4c0 ztGaCT0;cCVv!FQ36zzC1d{u_ zlcrFpy;yFhwAla2ODie1(UZUV8{bSNQD9Z&a`5SZDWz#<)`7~J{0Xj#?y#29Q*VTw zZ?BRTCX`O^<(D3vrs>$!*%aWWXM?#7*ca%{J->1Kk7V8cS^Zkx$0AP?bAgoBV&=Ou z)kXVUTAuabO|>5Y0@!$~nf2X{3=|CU`a`^0#IxY(h1Klxd%v6e2u z6|-qHevT;{K#F}gOR~upb-(5~|K_=EDORpB6QuOC8U@{C|2h1ue96Frd&0#2RsBnF z_?0g=29qVLrfrS!GL3%AHwlS~I_IrR`jY3L`-VpK^HI{3hJ=u;Y{f$%+bfJTb6S=Q;5 z?5{oJIUMn^``A{d#%&<_Yp6!?`f<(`Xd20yI1Nt>}pJ z)V9)Wllm}~D#d}ysR`AJ(3HY~8#`9xy4>QlVQ(K$S44D|h5LW@mHNaXJ|BmD-vZp0 ziRBA;)}`O)PM1d3vmBpAa32Rl!2?HvyR(nvs?3+dYwOAGqBqikYVmSXb~u1Rsj279 zMJvvh_r99GP5!4B11#0%LdB^iPxMt2BOWKG`hpFG(!z)&s*YmuHg#_%BA`Wj%jT$g zc*5O8Ua0k(^urg;R#axgn$wzZWb)QG3$@ORK^+o-ukl6&I4h0=OVe7mM(W|(wK(+f z590QyBYW=irE-npO(s6pc@dI1zh9985s8!m2lE=Pf))RjN>SQ=AStWf{YT<@;-e_| z#xP1XJ&w-;CGTmiza6>=|?8v?YyDyjM@~O^BWmkSk{iF>0^Jg@va;rU1$yFqA z9}jBtyKf6=AF(7t8$QbJGXA_RO@ou`S~46)x9z8fsPk!#T>H7ueGBEVs8SMM9C*K_ zAy!YuoMz0JQdGW%`0F3Za&%Yo=d;4mb*=qF+1{bmEmzHSL_F>jh-+)t*A3}-$-TS4 zdMF&S!PuOA{~3S0@?d$Y&>JqL$AlaXa(@0eUY!Rx6=ydHHj7zalIWOnVrRHEM!%4r z*V%LR^fuEo_YXM~JoPtG$@w`;1H>`@fyVlkZ&~hAlDrQd2fzBd20Z|8F-zBS&YE3+ zJI(#d@T&rjM*K;Lz8XHv^6%l!nY)RyEJ+66N~V51_wzZY6V*jBc5Z60-KQ?#|B7_5 zVe|P%65gN7?^vr{tR24k>bk6$NdJo}#hkPKjBR`M_Scy+2+>#eQIl!34r$LsMEj3c z_Jyt(sdDL<-)Nw@-p3$)N1Vtz9JCLIU6RCSUR|+*)M#HaI{;Mz9CPhJSI!FlK44~* z`_Cl5^@r+?$5Ru5Z;;}+LSyjepqDZ|TJx)uAE30~L<{(yyTHy;tRhir|2o%muWUu6JgmMRswP(E`k(9f=4U@-VXUh`XsJ^K;&m7(%O zRB8Qq8SMC1+ywk9%Y!?qzrMXw`pyn8Eg7d6Am5iM>5>kmY2!QrJy8X z2i+rP3>9%ri5^;i&}qa@N(-f+w`g~&Z>z_(x{)IO06zU)FZx2K2PK(7Gq@qDEKQrO zAkAdfGj70LCC&kvHgLvRfniH`r3Xk=xo~6cVJ%>@MY*DwYQ`M>VeMS$qL)B}<&1k+M8VpTL!P|&wpuz{XGA;#?7EpqLH8s`>QRA%!fIfXy@K$Y- zP`IJmN;psBZ%or2P!MJx^;XstgKZC|E~rTXxCK57{*B$<06mNau`GsYH=6z1TP1+B zvjS=pka7E>tdm)^6nLt31)GYYH)xP$CDFha)Xp_3l3Xl0E!w)3tdS2BHFOg*23y1b zC}Pc4M~vfZ=YrsBV~ZES-H#SjTO*fseD25TY~C}#-1&SjYt>g(E9O^XY8j7EjNN5R z13|+BV7u8nLBi^a3#XZ8R+{3>@HsIx(aSQpDqW%59&1ci2g#ael5wBUXTgQQSDoee zo?kuh_gl*wA^0NC1G|uygQi149R}?R#5BW+BnuG(2}Q95Rt}%ketkWAoTcxg=2IH&=ado18{dOjI zq}Gy+mA0-;G>feAuXd#lxLOC|RXLzTq*k?BUw|r+O3aEonRfYqO%KF1m@b9>H{5#Cwzv zmfK`}G-UJ6Z2ovq6(pwVeKY1uzEi^2S798}C6t81)udZ) z6(%f@siz~7$mY9h=^9T4gR{<+*2}Bs(MNlNPYk4cjK<5i%c;*@x}5)!j1EBd;k-1% z0;z|naR&Scp#P#QGM2er34#z}v6`;!fP^v(Lx zVHD%OATYUFz#CqsDK_M{O?@KAoX$_;qM_UyZXH*6?cTEwHKj1IeG6XRd8_p(Jnk$hBU}ap zaa%$<&4GU69#(gS6ap$5Rv`(Y@M@GlOZnO(n`pM@fYNNDS=uvE<=p>|M1rFEvZFsO z+jK&tz(m}aF9wuvyiBaY{if$kX>9=Pde-1`OCtB@4FlGc-!7C@Dy_N+Oppi~l!K%_ zK?9m9_6DB= zmt*4Un2LY@CN_Wt@-1Vvp}c;Gi97Y@mPg69t(U%H)eMF=B@y?89!@YDX&%ZW2^!sL zO@FDb^m89emp7lzCb`hTPcO;+@O)rBesm${{202G<#HnYUy(LhZU7MaI2Gi?luD`! zIqM3TYPu}y5|-D#Uw-B9gB{}7yb~|f^`V8t#K^$wM_EbD$RxY5#9ja1!7sk24R^bF z*P&dzXy>lEwP$r}VLuFF$OQ&xPA`9niGZZ&GBh^-xpA=SQYZ}EW8uh|D)+B3ypV-G zYEL`|6yg>xy7=F&tCjTNy!l$duEk+7%v|qK?{QN=YOPC@lC#fU`2`8_vXPg~{1dGL zjCG?_t3)aE9lJiO49rQXjX;uA0USe@`4lWclz}=EvSwtG`xnq;zPxij>#^~kVYBq- znPN0o*#@|pDmRbUr0^?b{(hH$tFfp5YOh&bgAVb~`uYgzleoW>RR^)@qo1bXTl|LS z$uEDeC^_m!CyB)>t2X6+*}1G8)=#fRsq!xhC17{E#maXsZmg5XruCOA?Og=!}g9rGW8vby0 zypP_^k{hO8G2Z-5Y@_F9*6QojZ`a+3diBYxl#f#KEX^ED#vjQgN)?xF+%u*vz?N|{ zIyiuG=2GJK$2d`m0#AijS9_heQ!-Xmd1pHN_WIgl;Sp{T&tJ*3IiuzZl5;M%yQ&#B z?ma5dvmO8KUr_m_RpN^ktfU+f{DVkXC04PenX<>t$1QcfE*<6cNSWfH_HiCgSisHk zX#WhQcwaFU^xji~%}D~5tY#!kr}UWRQ1uU!+%M%`(%L(B$&@Q~8;kt(Q$bU-DYdOyJh&VS7v^>p&^&{;3Qw}4 ztR)!r&P1Mf7*5sp6I9UM`>AeKGvE;nX?tNz)@? z&a#1_Glu!Tfp6^!!%~9{4)VSulGY>2OMcyH>a8g6*pzMWBC8S{{^e?jv3bHL*40NX zMhnk5C=->(%cRex+}O2NYp=r)Vl1JQ4AI>g|8XUY0{|1V@|~x*MeTI$z2#TbA{XM~ z;niEAS_&OQAiS}0K#h=c(Bm?msIGQ%(SM6L#2|CupRDw%24T{VXifyF=MnNKNhkJ# zxUR3Fp#(>}!b;=}hmu5%dCNR1o{(Utn}z zc^SFB0*oNNT^yE-9T!3)q8kSJ`_^w$XR5V;e3}#$ zyaQrX=1?wGf6CX)sDTq zrCReXeMBGRJqY8Z<$M_n--fhQUgT4{H2eYxgkqR~CwzlTDIUBosMs#dCNR%M+sL!C zN64TyFg?51lGlyHzJma^Q?Q?+oJ*?51ZDq;?>6)>j=7;I{fiCB+X`=Rl;*sZ} zbZyRIx&`5V^EntkXYH@lDrEa{y#a^{|Sh*BOk-d5F_nbf@-MsygQ)339cn3tTHDnFgK zEHjXjbYtJS4eGU{VnV_(i`P6$CSz6};B;YbUGRJsLjt528G(z%9rNUk4yStTaxUMSHxK1`p z9SfcFJKpae@y0=0A1I%VKSUe}YDw92lkNd@nc$;jM#7$8yQl{Do)R8@W9Q^TvFyE1 zc>(27oTEdw@}t%k7_FISLg;4LKIg|H=*yf_GSe|KLB8 z-NtU6pNUt#EK2)A7}%1jw-Zj<1R@p{v`@;7k!3_6d1uFAEbNn)e(sMa)hJRQ*OY&A zh_HMZB#E$?QwV3Q=jCrUbv? zFlSyGCqIDQqZ9LeSh!!d`TUV;L2xWW+l&4Kxb0v=tZ07M3?SB9k^=*)KKC2DxT>6E zF_mj_6L0Xi@-KNsTKcpGZtYzP=P%1|()d*od|K@p-QxcfG;lSPU3MQ5&>)cjmCyYy zI|@Npxru8gi3hPEsQy;rd~L=1LNsrbu=U&(!(W2wAoQ9obcgnAhfzhFSa%c~u9R?7 zVN#5qG{nFndwIK#Y3{8?L1VN*18(9YSw${q88|#G3CFE0zgr!|n`m#xOfhLgrTP1S zTrz&IMKa@ZAXg?+TDY7Z+)GYb^fA>ZNN@I1-$qDU^UbQ<@* zO91Cm+BaAX})^BcWS@yBS-qd^&gmKZ*i`O2rVzkA{P<5`{<7i8m?AlC@hd7sJ<+a$g3OuI5n_`9na2itkirMX*@655qXvEWMJF(XSd$ z(GqX-N~Ba$?Alz5+`czlDp81;)qZo=a}nvtBI<{%dwcJ3a}u=~@6hC4=XKkV7PXsX z5pgf-^bz9u_c=14aaux(%YXdHOvpxdUp$sDApLoldV7T|(V*=07HC zXES9dl{Wr5e7p~R|5TRH&_-P0qx-BVyZdy{09sNXdf&g7>; z!izd(e6QTNZ)>sE5;VJ<{5C6X3_|_=E)-1TqgPgFaByCMcWilYr?`GF2t0X^~Yv=<*)!`S-@eQt`;oPuMtr<~_D^ z34NZzAND?%RPP^2MOQtS=E$s6?k)H&w#N4A5B>Jrr0%I`cs}7RpP+uKB?9tH4QkA_ z%)lQN!Ex`-(NCBdU{A8hkp+x$S^j7_^ECa#FF+|NG#@#!`TeV)BbNg8IXg}pLMpsq zE2eWpf&Kl!e$Hu0qWqz~tofZr@Mzv-^u7a+%a}2qV_;JH z+60aTALZcwP?O#w%Sq3OC?kMjx1Tk=2fGvUhoxLbrY$#AQgrV@XdA=vZ7!0r=!5&P zlNf@%^pmNa`F|ufC$%7#%fPlvZwjv{L{+#*_6+_1b)X70Ssh-6^g)uQ=rMj(HR{^p1=-GS%e z&3gv#l!PC8ER3F}Xe(&1C7d_Pl$_IF=P@RWn|@kAad+2jWC+VRsEby*QTLBz`#>^9 zL_@3wY-eXSF0p^*s_NSTr!M@)QJv2_$yjj)*GG*1wNKOycpm>GePVuCpiannMVrFN zeJorw@n(w*n#ywdWp$~B84Y?#Qbl9m}6#}SmWuG9Z~S3y}qiSnYP_M*bI@r&(Qj-6Uuia z@6<5yr9j`>fYcrmnd3QuUKsA*mr7hgwAJf5_1qBEMi}Ul!YrN~60FoK9oSUNsu!qU z3qkZTerkr`AYcPFk=)NiD~U!cYOR#evv}w&4qS_fa1Ub^COA3Jv`X_=8tSc-G`+dX zsO%ij#(!mOS3Wx?|3AWJa+s ze4A&0PCy|ZkDwIqiiD|28U4n%YgY%o5`3!|7MkK3o~Fcz>pSk+Xosemye+Q~v1y<- z#DC;I_e|2I9M6Lg-UR{)%7ECLcwujzGHo6PqR5{>WxQ9qk91fti2$JUe09u8ppmob0f=b^Lxe$E4 zPaU9V!Pe>ll{9cS*9dl6k~V(^zAQim!9^i~-D-S|^|_@RNzpCtA*SHXFkq=_dTH$q z#)S*8C#5D%E|Ty|A;lmL`C^jEHET4>f^`h50;y!2t!8KrXZH$P-&?sLG4l9gNJzQ~ zhKRst1#(#4&ev5+nMDMwJd@S9zIHP&{TCPN8uP;k6cKt)q$F{NXNp-jb~f&o zXgLlK4sM#>UkL0nZhk6R_7fH68MBd-Fm#K4=NTG-NC6Urm^6Mc_ray8OP74j_#!&F z4W~V$2*3lJ+O(EA--gtCa?qZ%e|DjpO^^>NuvS*}pE|7$-;%t8W2$lNfoEkWx zsChnW=OFBu$dDjL@`cX+6(wq7etxg-iT90)-4Bc}c-bay zJ}^XFJ+D5w9-J(DIhZQOwBxH#*63~Zu$1~ieJ6gT8E)jfGh18Bk4aXXq*=FKIpgmo z@h(BaxX4o-j$=IWU%~XT7w4gA;E zN#IFT-5>JcRgTEm(IHy$tx-59$zs&w<@xyIUh6N}bTOXCgq43CL0&(iR$fASMz|8e z47#zSzp3stvF37q@cx45!UJ?;%o6X6l%eo{i-?n5)}aLex<5}il0=ZRU*oy8R5LjJ z)TOP+Me9i?yqd#-NP&L?@)o`Wju`9JA-6*LKX$X+piSzZ?)TT(jWV^#~W9fi>{~yT> z#*LB@gV=KfKAYlPW`RiQmAB~OKoLy)cW=nS7@ryR6bh20oFC&Lpo28}Vk~ra84*+$ z7+Eo0+*iZBiNgjU%LeEs-c0SRL|9GUtBL*;?f%VR|geW`w?%1BrBTt&xUM)#_ zJ6W3yBYK|sj2B@AKZqTF9!u*vCGj@IQS`WJ7A*lHTknKdwX4;jOoAubERoY2inYp9 z_^Y-r>Ta%$S}jc3bGLpA?{68fk31TKS3AtQcj~-y7ANIFy4MzI{`zXHTkKja*-O>$ z`{X>jm6mJ6n{#u*g)$$E5KV-5yoL)^!Bd*E_vfko+U?55U#ZJsK>G5Ouv*FwDNnm+jBktgVliUir96j24CPZnyQ zZz2_Fq!$S0!>m`H{THjko?4D$FnDctpdr0>(NUyR)j_i!6AG+^8>!zN*5=vnk>``D-w`Eka1=`v}8SA1{d=EJ}gb^ zuOa7fyLA)|^_(A$k&;wp*|~N$62?vQwQFzIEkDdM&O~ z2k%xNQXO0Eu6y=Ih1VgFv7cV3Yiz*FE8ZD*H?i4!NmX?zFuLD7UVA}+=5C@2$JdXK zpFqS8G<#)#4*1FRYjdXd$9*xLZ!C1&T)8xypGSf>dikMQX$+LC2Lj)E5@GKxWyTh7 zr<b+T>QECz&Oh(_&*)w2DQ}y*EM2x4M+tIMD4xMuSU?h>R zt9*2)sZB~U^5n89!(ZD<^x9LK=6@utS1J94&ZZ;|$6AJcRYwEwkRd>#Ok$!+jPuj6 zIqJTvVK@y*+@)RwQoRG+6!K!Mv}f>Ic=4SV%|BOeeAQ?>E$hQQ3_z#ntlJBCrr2u; zPN3#R=6^xaDZ@Et~xNo3!7xFUjs zU^m#+&u-p2kL4%wCy+kiDZSfcC-KoG?hh}>zX}VEFT-(;WtdL}(l9Fh$RYS9&|1;mK$=x9Iv-6+$L}eot@y}i(fsR^*Hps)<5hdh?zdI|BCnV6nyJowo zmVbB)09EqG71g0q-u60LxyO;^2bj8Zjh3PPbDu)jy)~@u;9vH<#y3Y!s|_(YyQ}iI zireiTXki9({zx7eC79i_W|~_$&5LP`JYuxRqa91OZ=F25>0W`k=UJV$Q=%ggF{wXn z$37iED6`ijuCx%hLLI!>55Bu!_Xu()JX62QS~bu+LZhDGHQJZJZNj~~dfIiiulP-- zO9Ix>x-TeOeN`7L!gnWL-Ix6Mwa>)FHLGY7$19RfA$XnHr1M2DinJ8fio5}aF&bfB znn&;#2}>zW(lwgXa`Pgv$IoQ2F?_c1@(DpP7ojG`LemO+f)7}eGQOnPU$;9iIjMn0 z3^KwMu$VjNdWSEnl(vd*Syn#P+fd_dQBZz@kImfZ(c2>Feh6t4A4^lbadaD;FyFo& z7xE81cw?U!nS4_VtO+BMAvqlI+;L6DS64rnMsq5S{s`fPXo{FP^ypVUeIosoQyE;G zRX)$Xj_}|4v)PT8GigDu}c(sO;NUDpEBtqx@uih>bV(S7x54g!rNQ|x{A@^ z1;KnS{pBmT{GvE#;8;1X6;xfXPg=jZ%>qf8&vB(JqQjII)%vcnn1@IF);I%=gGa!V z%Y`As@!wy(6*e9aXXAk2!1NggnhM}A$-^{VI6qL-&=#T`49u~yz<`4E3=#L;0(HFq zXPCc1Et2!1QvqL%!JH<^-goTlg`9gMflE&I;x`J6ncX-L`J$NjY2B4bK$ZX#=l}DP zc#sQHZ0}G{yQ`qoAY~ndTf)4Tt1o|+$ZUBDbbUD?X2g`;Mb|uL5=MuFxtX+JTe8faR^G(EhxiXz@WUY3jWh5uYibwQoOO=N=WEC^tP4Lo28(HCD|Gu)o024; z(CHmO@HZL$NCY?HgcB@;aewF+$%mxgPVs$Ek0RK~stE$CE6tVY*Ilb-HX%3n{^oyu zncQL+VU@J_ZWH~6>&h$B=J)B;KN$HmORG&>W0-R%94D+kY&_qEC$PkYWifT_qqNRG z-M1#KdHlG1MCQ`X=_|CUJSrd35Flhr?%WC}$+?)Cu0FriHp1}hQi}Enl^oUZ;!CKb z;ok{#-?|Bj+lQ+kgOKqko$G@Ad96$V`6*|5XWUd|%uB8>WMUr~B^KvO;{7~BvXs{K zg=F*1D(-$(sAZyJYT(Dz2nZ?;afuU%T78rm(Wk=GTh*A6JJ?tSb3UG6kla}nK6Xphc#&L^K*{kSb|)tT=wo!`t%moNF5 zyf;3LpwC0WWHf_HdXLbg!4%eLPw_>1Hk~UuFVn>Fym@Lnwi*9%ll_xg979jvG5GnX z#s4Kx&UY1t9gV(7q~)aZqduwAN2P0J{z)5a49xk1uQd?UR}zchrb|yiCL4JkraFhMb!|`lbU@ zxG2MrWPUL1KG(!H_Z_31>pD3XZrJA>hSqawUkwbF8hzwmIhsKot?)CD`>3|a<$0Ju zcEJ@xTf^Rh6T5y&6CK{9v3uLdZg-o5XOC2Q29s`;_p9gB1vC91Xn5k^d~cX6=z>bZ zVQMo(SM+>RZBc{ClA2@B&U6g<@ysKlIi%Co$?loJz&i(QcEbW4ul{Hovk&_Mq-kbH zIsU`wogghXOH?uyMJcY6x(Z%%M-Cz=+Tj#viya|JoM4g%l&Qg4tXn^c*%WsWqNR$F zJTUAHql$^LDX2EqaacANBhIar$RwAhKWRxe6ZFupapSnskERwcR5IT3-Ryvg7#`ne z8GNm49(`q1tRbDWVnaJml>9 z3aU&<{?i@B-)0#T4Ql+PCX^&4ryr99w6c`1Cx_LWo|K1;@>jL0A?Wpj5%`g1t49CHQ>Z2Ny`5eKL zs3u{pEvjZQvbfNMK7M-rA0Ov4W}C&2U+~tPta4!`qSX`2VJfx!K2rKu9VWRx&E5Dt zb?V{FMqh!(E&rW&2r_q)-5ak9&)(n7s$=tm$U>CTe3VVe-1Ao~qow(O4Inl98%1@u z@4+*jlTpeakA?{rXGY_1V?%z9O5ZNEmiFWgusg(EUqPi99tVU&4H}z^dr~9)V6o<5 z=Vk0f>EU;Caf!8KYRF&T-n<2XV)sR3OR*;^Qez`7y>Ie}`q8qVR9l5#7o?Ij#u8^D z+3Z|+KdYG90CodvQ%VJzz6mW1^U+)-SjEs%(g$BP2@Lo*R%Lh_y?lv50k|?2S6HV!+Ij7;p z1Eo8*rAu6B-8GVSwa^Yfd3$@=$K-AK@$4m3({fhiHu~@47|zOSJZ@JFB|q{nR%l3g zK9sbHoxy=XTxH#3M?1@+8fR3*LU3)e1)+ErU75~G@|925Hj8c>^7Z$f!6-jYmEnNk z-MN*dy8ZPAEt;VzTeyK!Ll5poWcmC1G3j!Qio6Ji2WkWlAHrLX|Iu{TQBl2bv?oP6 z2kCAEgfAr`LwCba1JX#BqJY8>f^>({9Yc2sgVG=>-BJTe3MdWZef`~g|8p%ouqMuX zp4j`dHP#LdKQzDRw>DJqjIb2&ctfMk{)FDa29GlJ8$H)nDoRoUy;JjxU4Qs&v}Hq6 ze*(4Yk4KT_W-H?hskT5RwH~+`Y49T1{P;^e=-1uArRwRWir zPc(BSsK$P71dcw<=XdRi*-FPfJiIWcx+Mu!bZ7+n>HNroY}QXQ*VfK{NiQw4&jNk1 z!@&=wK|FlEJ$C$W2X4#MhqXFehdE_N+{NDnB?m^^em(XN9z9B31M9z3L7X?JoTbl0 zmz7Qh4d3Bk{qUNggdypU90}H$gd4_~Uy1WzT$IYo98cTfd7o=EU7TpM29gZY%LKPWdwUD|N@j%Ws)~vBLG5+vBgw*TQ7bAqJe$ z!Rq8UTHL)u(e!TH@aUo9XS|fxVtm-e;CEv76FF=x-xJnk8_YCcV!OoNS!QV%ZVw?^ zAo37!eY%#^_wY8-ey8om9x*?(qbA<7K`)d)*TvjAMC)>0TW-a_Ac$b{nLvqp7|-oG6Ydugjb8+`d(jmVh+Wm(owq!@_C_2 z%$h7$7b~BgRs;1BA~z=aXkm3C1=v`bFCe@O=sI471ScA0jBiu$!l;w(AwY@X~4a< zwHyll>Bvu>ppN9qc<`0O+)9_7154IEcs3D1#2NEX+JkE82?_7`i1JyB@0d&^i~Djp z&WAYrx80B**uIJ3r3kHW)QVzZn>`qmEHJv>Ml?5FC1Uns&r&a;_FOuw8}hW!2$n28 zMon^!;gFQHJ*GT?{Yhve+;m+w&_-~vK#`%Y-w{L%Oj~pKk zg*(;{>?}Uaz>1;{qbi?C@jBl?E&iDTLG`=+x!)dgE3Wqz3u89kyIHtq+TOP?=S-+p zc2MaC8^y9cZP(C4R4NcIf%+fzg-_@9=-b4YS&wTu{O1%30vSHMZ9<( zBWAC&DN@qLT~+r`W3?8<=0sYRFZp&8@d0Bccyy#sTL1QMKIJP$M8GIAd1TqMF`}pL)8Wn`kfXOpQSS79Bw!Fu?&6U6bYkNcQ*z_;T(rr0HuSVE8Q)SmFDZ zIgH$;{g>1h{(?o?gJxs7^U#N9wsHoAumXx`^`-crJ#b+qM>-c- zcq^Z?5e0Dl1N_W231Fnxgy{CY*8kqOyso4?7r2ozK=&GDLL(`)6VpzV+csbtl$Yz> zVA=4Wr;J@|XH>49h;0PvGoho}zFu3HN=q7MoFICM#-bqf-oY?*J_eoa_AxY2Q0i(h z|CmX9z+9O1b{3h>4sJt9&3Bp9Ts8eo50Cazuwz7@A5(1keuAE;9wO$0zep`3W1ly8 zxaUB}pg^%P{?4tNwn&3Fl_3wkuE@g};DB$Z*neAmEdb5TTmWco>(f{M2vlk|;{L0@ zSRb{{ysc^^{ix|S-HX^aq!5=3^K*fVX+Ao>S_MxFs-$e7W2xladewj29!aO1T*1DcKPuyOOXZd?U;!$!kJz2V+#x$}U`su*b`p zPt!_TPl+TAzZFUJrgNXl29&x1Lg0E6QLV^QegS^5NQfX1mK#u>FUdoggh)#b43 zYl54Zu-W7Rdl(INP=qUV!GT^fW3OMrSx+RBsDUEm? z%WC7Q8a+{PU3t0Bmn{~Tg@-3ZK?04u~PGGp}>^@ZlNDt9PdUaJo9V)4RXVY`BUPS z^~J)Gz+j$=t7P9`I`3_Ucx%?;Jyfe3udn*WdgX21QUqd?NB*FTy=TNF8d)WxIUzqr zH~F6l7gwXDI7mpF_vZrAExM7x6*zbr^*4K&dS8rZ)JTWH7 zF28XY9yD#@S8dZ=v^cExzc?SG6Y&!$>`P(nIL5#*uVEjt<}j24v@E9!Xi^3ABb} zrX-4|AY8d(?arDyZXu^nOoxM^hQ|$`5A1kFgH+jbBDG<|#oz`-CSIkCzJ3KFPzyvq zq^1ANUCiF7%t%GX3+5yVjBv)l<}xWUih$3rs1(gM8M|O9(Y8a#=_QY%S_-Q6kC^n= zv0#GWrVx?$VTic~>c`nDYSiAk^I38c9K@t9ufdeDI&oC!67wx#kg87N9R-i@mn;i( zzK+7qu^V49nn}zz3zljx2#m*ykZDuo{mPkENrzxqG48u|g+ikAPLsaA6dEZRn4i9R zl>7Chd>@T`w;2u))~ckiHcu*-jw z+yS~4^XD3hgk=uu?@rMVe9A*@rc%@KCMYdP!KW0_*PlRRg~_ycry24kEblKd#jqz+ z@fLGZ$P{ozPV*Ug52z{hqpKSVzn6a+{qI8xYf9XsV#l3OSaRVb8ONpX|)<|gxDL64vQc2L$J`TRyx%HX#`B;KoMrpdvq;pJBgbeoOu9SR$X zhCcu9Hd!Bj;Yg(HkRWmU0};_^IJ6vv{^j-O!*5q>(*ozX=KBh)ccHXo6r64YzGXGP zo=(@QXUK^355Ad;x&_N-k;?~395mD%RXbMJUy@oXl}oYF!FZszjlTAm#5s7$Q>g`O z^S8G)8K0%8(0m+-nf`!SNsN^Hqjy#5&}zV0Z3vgi#0uYiE$-F$d9^8nFra?@MD@E8 z4Q)&#`~%NJHHa!JGr{#FFz;oOpKr@E$}SA+qbpyLc7Bvi`N-wv{ZpN+)*}DI(`bYf z6D7~kA0sxtzgQZ)vDz&ievvCrPZ@3a$}hIcl%K7;QWB(06%Fma!+!60C&Hh<5ZJAT z5|Pp}JTE%&ls6aESx<4*Nr>&CS5>-(ZhMcgQp z=AW~?qT_xv4a3rn4PfOZvN)(VVkbL0Vk?=4@Ow!N?~pZ7g8hT3?g`79PWZba1IlCr zb9zeZ=(A)fciPyXbJpjpR}0z^lKqRe2uib$Br&6|(xD30V4@QX9UG2x#P<^S)!uDA ze$Q2oyivcOzty&|g(;){B`-C>-!}Vv)BB9?7ytV>TgR9#>f5=+#5HipWzaFSHn2Z0 zX8d_}9xsvR^BG@X*$lsK9vv<6yNA_)v3QbfbO($et7qL9czC3=kdjk*jFjk`m@&L3Hc@Nu!HQ)4wZ_t*ZE?_6H<6Y-U)mW}$B)>oXy zewyKM(QbM2ZsGSA&vqHZ&nW%d%Ekl{oze)u<8_Y2>#slA7+Di*;;ZA?E0enXseI2e zeG-(+X~R31eJp&`GxwR_zJ}Fwev=BJs|v+C2@1JQ^3ig8F}(h%iX68cRQ2%!@7t3* zSvbMEy|M_tvS_A;RFP&{E-x!T56f@kaC||y{#2RRqO;i)ZrwM6$_*v}!vQ!80|-Ew zlS^m*Rulf#3+)xAcR_o>$|A7+L25+x(awHob9Y>`TD3>RU#urQnAZ}o-dMSt=#?Mo zRl`{g=g%MO|HbOrwg$^DYf9k=7Yk;!xZwE3t9pN_e_sRNppsrSUl02om&XoMt24OI z=of+H71{1zl_l7Ly(jKau`3h4#I5d~MkETo7a^+D{nXw_)2`~0H}azNJJPN)KE66Q zf6lY@4TC^@mI+1~Jp3~y*sD^p;L6|XyGaCIX|%}OY++Xm zo2%weCZtRuNd!Lq!KbKAZLt+x$E4kq46i4RgFuo3I^}+7^0DX>E|r1Lt@V+i21Smd z(f*S#qqBl^R6geZaHxB25~{3J^vafVt8eO*|N0B-uO7ti4ZSd)kJQtbFJLtjIaQ%Y zC(x#w{CjF(d^zBh+YMY}Otl6;i7cx`rszo9*6;ljqZLrqnvLk}e#=Ioms&MPOoF^Am z*F>3G^l7$fF;!1zXawXzfOGmG)p&#($1T=|5Tnc^xNk6_&f__ZOP{05q=g79S4W0{ zGHmueq%0{bA{sq9g+-UkoVUSKc!AQvU;wYL#Ohca#54n$X+v;gaQYkuEa?wKalW81o18;<`FNr`AIvy?38ROj>*FQ zlB2eG(JnIh!8^}{;^8FKu5^i$bI-UQ3;ZAzKia6dDQxG>GfrBrnY3fd0@m-S-!{qY zqO@-qWLnza6{dA~H`~0y!>EG_w=sB*9R2BOXVm^sNmTq*TuWHENaP)p>Xa*Yw=>-z z7(nf_O)9Chgn!F;QtV3*dfN=Xdbn)*%X%OKz+z0dogTl$Mk_HvVB+zSAdIfGuw%f| zn;UsMUj?_(>IR`1f>kjfJtLCePZl&nuoAmW!*^A!y)`6Ym6Kf~7}HfI@D1R&qmKc> z8`e|26;pH8Ta$aWZVLJ$X{uS!74J=%UT6O>V7zB3b%I2#&?P?iw*zs46VKc{j5f&`BAjv6)f*`nE z|66ayQQ@cVe=0P8*fgdccp*LxkcOYHo9wiJZmV_vn_=F(CeB2t(7MU=5!;1bcxUy5 zgaWY&oBjp3quvxi)c4VzA@Rr;-}86ZRgg7Z0>5GN!BdEF=|X#z5v2|%>l4*^*k?Q& zO8UZ|7UdA{Jf)+`@(=^<6h>zUk>1FyH4xF!EmjuCr{Q47Y1o$<5pAB^ zrTwN@xTS0Yaq9Q{{8;3d^3(b3GoEfWWb9i}*3d$Binab8}Nz1tl?iBa#rCK5a`xCK& zuB%sAo5-$2asX~pSc84JQ5~ye6l`ea^bC?Hl#ym?16>6zP3PR@$$N&Y;MU>T?ac3% zE&VlIM71g+UZ_x#sEOtk`l8hp?p0|b| z5Fy3H2WxLtr&o?Mh`RIUwK4SAdLNM-He;{Bg2`2jcq!34qWVFt|0VdFEfE$j-74$x z0(<`5=F0qvy5EU0ZIZV+nq_lTyd|@pukhor_q3j{)Lm7bQL&x`FQeL$nYVP8lOi|u zTA~Sxn!d7Ef(;G~#O1u*d75_ca_Kx#UQLAP`;;kNv=6Zy5SN26X{s8apbZzF$G5zq4 z1rFA)7$yosBo_4ZlIblBEI(n^u^W$fz#>)?Sz*+1n_6ZczMy>UcvbNY7YdRL{C)qZvniH>#4?b6&sW2fKpMG4+{x%^mS{srZit z_Keq)d(#wepm<(Kt^K%jx9%`{;H^5>@OErZU{!g@ z=W(k9thT>@0H1Z5y^Axa8OgBk$hhF~h}sWE!@UP{c_C*SQehcyPgDHX-x( z6o#NZQA?vCVKZcqW#Ayf;@EW4;~#mV!x| zEB_aC9ubhC>99X{7rXQHL)hZU;X@Api2(5w-;2!T3x{aa%`L&#(i3bvy<*nFU2b?2 zvrwg7q3M=Fvd|^;QxqPaOe+C z`DAz%rp8i5sCpXy`!@CSl<>OChC=t6{n?9iFwe|tG#;G2bwKn?-|}Ky2Qy|ell5S> zPjKy~=YyqbC!#CvC*LiDZRFb+t%FK2JR*~-P(vHXFIw8v_YPSl*d|dZFCT8G#?OX_ zK#Xq2L;CYHsBp8Wwl~BB;q@tUEduv2+;8xxsu0Lt1N+uD?B)G~Z!@pjIU!>5nw}Kj zA{b55n8ltC&Wblh#SMm-q!;ulco@!zI5DLi>F)o54QCP3!YmFSDfRm1DXjF+4PCRg z@DMexu;&|fclxl(m=@3&vmQPC2SrYanmH^pRNF85+>oadlduUuZ0Zf^6`v5o>c z5tPdXV>aO_m+0G~;$Eg)(KeL;HvEUVXN4ekqP6`+!Sa-S$6&_PIPPcF0iEWu;5nzDRs0m=5$n+IqG8$#T=RvI1?+TW`9`*o-OY110lPcaXKO*yA_-J^CB-AY8? zFE^X)yBXcy_8~xb`0GQ&bAZZW`|=lybx1r_zawKOLf$OXK?Mx!wm-CTWJNdM(`|mp zCFI1yxKW+8NF#aE0$uqige!7guW@~k5}ZMonD6?!n2a^a6@ph4D=tQXw4?QdT_IAZ z_b$eZCswo#l1=nY>0z2E8ZJOJt$<_1d+qx={o7k%C+MTm1Jaex8NVP7 zXzQoMX9xaTXVy2(7e@}vA2VcRr|o{n56zLHCpasGjeQ`7eQ}8HYwJ6_6i9>2S4s=J zFN*xP^S-f=Fs`{izvvl5$LTz?yL+fMZ#_TYd(QO3h|jy%>-NXubHCf>+nhI{$fs1o zGoFXq^=fX8K1|W{_VAczcB@T8iFBKmSYA(W!%|zw&ou9u=nzIa-@j}uYHHT8&?LXE zOYG~rEA_b&GR)`7&}n7SQq$|tTzX0@uC;zMfefBISdZhIS1z^7>Y{yFuSQy35@i_6 zDq(y|e%>@(cRd&Y$2j-iXP%xQgqvBh@u<5J9FRw`UXV2Q5h*>YWTh*=5vJk4BA(7N zZFuaxIECocjZu-+yHUewp5o?1stPP##qr@oi8iYA>COvje(BUB=aQH=Ysf8$(5~Is zTqH0FR-r`tv7(})@`-h~Y4iD+Ef06Xuk@QuGM>RZJFzP|&Zy@ZR8sj9gsLf$gCjM3!{hCdG-EQIyOBZV% zqp@FP&Ii(!h0;cr@B{VLU*PGy`Er>4IZ22Cswd<4vc4!(Sz+Sd<-LD7U`o>!Oo9eW z?VlpEem=Zim;Guu1Jq8SZw%Uc2tnuJwx@7NK767&%=X+xNrU@M%ld;g!G*c&vJtKB zxK~NKilQ3W_!RRaz1{*)GH_Xht4FVg+Dp;K zjNd!J3FZSH7;v`Ve89@9*~i+N}>Y)aE7<*Ulxy46wPGo0Cw7xm8_2Kaco4Tyswm^g$g54G>JmW6OyC&0fWa{H#hZ%TFfC>y!<{)(PrO-e=eTOJzmG{2z8up#xq7jfqP5KoXR%NeZCUnb}i)#s{dYf9G;*0 zV@8&^2lt39{53?eCj$Orz1kHy@VRzL6f5{$`uRW!BeV1v5Jj0sEJK;6Zn?K8S@k_i}|>%#`x^@qq9@1zMl`zx50N7XroE3jngI zH@tXQZowszCHR32b@*4*q*J>;vor-^*5kgOLIFuLyud-v5Uj1RjTSr6?dGc!FbsRgFwK&74c*TsYVp!jHmx8%Hr+QplMV){ zeYyn-ZHx9w7$o{zjhL*@vB#x;MonN)n)Rvo8;jDkME5_g*c_+gk67zh(Y72D&arS8 zUXB$7mmotN%`&5 zYmZdyh!!swiNWJa&W@kZg-5nLNp+`g&Qf{09yeg#GB_nkYyuKx8_6U`>+7Oc{$ios z?5*}(iAdtiN6HOfZPfgCBJuMPISH)S6k^rn`2rWm;7ros_-f_L?5;Dx|3432hd!pl z**Prj%FfoWrvYObzkbwkyFlu=;X`{0Spl5ZLu*nwo1}LQN8n<{9}?@-!h;0;-_w; zV$1(6hO?90J#`HrKbg8lV?61k9-H+39H?b>2-XZ$voOxT$g>zw5&rD%a3^tdJ=Ek; zm@6HG5l8Z$g9J&)o^+&1l;zdpW9+f0M0DR^w6O{GYS{iMoTe`hdXy=)77p|w!y262o>WnNoCONen=>nRPMWi1*)V6 zi&)y?m+l^KE1!qG+{aBX#5lP}_r#@nvIHqOb^k#;FY)!&0mU9W`r22LvUT{;;j+o3 z<(2nRMu5Z5*qLmwUZG~JbyHE@Ac%BoN~(M=E-s5i%=HDqDj5zZIgbO?$2-IO+fHr> zkB>h#=&nDP*;=-b^E~nY&Ghz$c*E{qRHv0z=766EP2R3F>jl?f#v*ws)P=+T+W{Zz zzR$`FZSh}%@h1Awehl1%)fM*86Or{{`YBOjty*!$;Z}-hEH2;paMPQ*@XJO;g+wAw z&8frMfE`0l-in8+a8D|ctJNmn`9ak-eGvz}cYi7mp6aX7P!`b>Ubqr0e8hE0Du@3x z45S*vSL%;g7#HkE0B;JYV$s{UkEi7)2{b3XPGK${SOTO1Xc4J$sIDC1yGBY{e?XBa zZ_3_dv5m_R{gTKHr3dlR7-RDX@39J~st7WEd6r~I#uY>zb0yJq`&S27flgeSq}KpP zzph|cf^YWZw~>;;`n6!n=G}FH*&f&oFIS)~PE6Ayfe6;ECf2tczF5gPFvO?D#96s& zP6OUc!y58SgxmE8{~?Jr*`%)pmP(vT|MkX^GBlD#^$ik9!-Sf#|AV-_<10dWmC5=| z_#5BJ_7vQGqSO{*A9<6kOKajv%vdkKtL&iw+yviX5zl`P&XK_vMJ~Jmm9nX)p{(M& z#=H0dO4UcTV^8*U?8ho!$?Pxo6&0qcrl++=gz2;Hkyk7O&Wzl`W>vQkX=Wx%PA(~B7^Kle({ z2^tUQ4fHB8$E3ZpR*|BK^WGSx0lMNI18C=;lgd0wog^mJ1Hx^3r?3MC$e+y+a-F2t zoM$~`&^vl`c%FUiYzH^|?rlx3!pS#}Ok*mDicr)j$X~3tuj`dns)t9OoEuQxU5m-F z1B7Z_chuq6%VJKtQ|;1M9P3&K9z+S)f~Mlc<8KeNhOP&Pv%*E6Ehrgwb%jWj>=(YJ zSe8eBM0A}x-nM9`$v=t|OGX=}@|=z_tn3mQ)%EcE{xjql-h2Ds(5EgN;~&}yq zNf3?*{&dYN$-z#f4#KWx@JmDTwNl|2+SkeZh1gjLwHEk$zT{wXjVKUlhT>QAB}*52%RtB!_ryJgU@Azna75a*i?Qkkdb z2ejQLt&XVauMYzUzyTPoo`2Y0|7?-}cZ&I|ijg3Z8t#WLSQ`mWiqQQop^_0U@WO{& z0t@rw0Y)sta#O9ts69zs0d?BgtCiOLmUmQR-<=rAFFw*LMsJVyq9Y=IHdlKxHI5y1 z@FGsEZzI(c&=z8>e_CW5rwomu9nV0yl8q5eJrg7F(sz)WFPS71LJQ1jP~5V`wPoW4 z7u+c%-?`g+N*m_K0&VcYRAFX8njL4)jmq8zpr&Y79EXc5{cDOxm?-Z$hMpz3*76ymGA+8IWieyLk)L6ES15`RC`(oObHy@EGk)#3P`^F|+7gIPDvb9SMthzJ;_j4)=U4F%wrm#BI z+`+3d-+f6-#xOIAy#(s~kY1JF`fe#NA%mH<`G3-`S{82GF*HeFM9cbn>(x-I)1>R% z82QWRtrMD|gzPy7eO~7dP`8c#FJV#US|;Xy#xm6%AgTiD*TUGFW8pz1uk#-aB`fWP4GD_iz zK^gEM$zS?}&z5aKC3QgbYF$Z({aHKX%UX!b)>b{u`L3w()adVYlqMfmBwpN`OR={S zq$d0}-RbsLeKXE37>o7j1%j-ydInqOt2_?dW86gmdGl855c{Q267NB12MrMJyVYAl zoCOHGn-YjF`u=>P_fhpR%w!Jcs8?l`XtI0;b%BmWfc?vz$0Jmp8^gVLN6A7>%q3Qp z809g{UMhu2((HMS3vVSMdnZFyCF}6sO}l!t6-P;^aA-&4X6vteC%|*`mHb8te|A9P zb&}Go{b(2ZU2Xi;?_yRIjsb1TLiK+^ZrSQ%*LinBtuIS^y^2))lSi25KkIW$Sec}*hK`QPgn&sl$cy{y9*(@$0| z&LW}&02}vw^qMAfPwc-Xjso(9Nfx24|?Y7Sv;s`el-*fq3=n!GE?EO0qc^d>U(V){}gQ1=fII zWIsy>kKkfNG)@SJScw=FQ;0TgZOT}iZw=S=oyiT|%q5HBODd9K_Tu|K4|Gs>_?A{-Ov%G<-yrOX3bNEKsQTNGx~szk z2fnxEuVKU-I0A$DvW9QXv0ROf`q4>=lj4Py&Be0`l)x_YokeyBv!{2`D3&f3=b<=G z>m;CAvEgdAkNRziLfhVl5z**#(i}^ypk^_k)aPWhP=W6})4=XM1O0Prur18Z=nt0dVGYSy*% z8=lR6gR7ej`F?LuY^F?Qik3x<-78CRD3#B~xX~?O6W?j@xl%k_`x5lXFU#0s-z;Bu z>DE)OT$bk%R>(_kCCyuoEl&!@`EV?QoNyz|;h%|#3&cP^=tbo;VPik-8GoG0oDA;i zPnWjU=V^?ouTr|=Uh5nqULJusj3_o@ezsHv(z2hER%2|b)6N`E3#6)B1!XmQtR-(fGrsc(2Ok-@4o-c7ol; z`H?_CU`;|c{BGsGQ9qz=G=%XRzIy)Wd* z6IM0Ypc&fdtxCC?Q|C|KTf;4KGGH8W)6Q?K#xIGNI{OYVxB}eKR0Y^Wx{9cynndyY zF6PUlOAQiG=&28E>dPFNL!j{mi9j<6%=dbuGA~?E1wpusv&P`>zzfp)sx123Eb5gB zVzqT|oyqUxO&j8;$rX#{?V9VUzPR_Uf*+9+MU7*fu{;Za!0Uy5_r`;&lOx>H4|T#k!{ z=~H&vlDrT*P}xj;f>2pKh|u$D{&5?r6m$9C`Y#W!Nr70ppK7LFU{SgK+21Sc*pw#) zK7ju|msTe>FAdn28A#lVTgI|u;eJyALtJb)^x%z0F5Jb^qkc$5K+F9U^L zR-<{k z43R8#eR4k(GLj@UPW>`KsOxTvvc_~`m_ic-<6N%Sl8kdH#@lV!r`9&@_V~k%jgcA^ znGnDS6lU(LA4I3~#n<%A)d`jS5oRZL?cx%aV}X870TX`2Sid|(Ob}w%!_>T8bsqY4 z;4hYJ{_Rqtu-n%Zlix>n38iL!MoYH|y6+ZOEhR?_Hd^N@DIP@d%tkwgg{`7uw9*5td67WK9|^J|QUsf`3Pcgo{k=KcO+g^o1n zIEoZSIVG5tz~5cUy1IhFTF|oE&86Ate{$*n*}A=m_p#AYJs>~ey#xvhlwF_Sc)T?i zY4=EI-zRmO7lHthh>mKu;zTD1saR+keXBkEs@FmA_yaGAiGx&*Vgpkl~$Od^Tl1}LMUFYvvks}cle9&m#hHgcm@ zy2>VoAtv?PT$#Yc>MAI_;rGp^bB~*iRDo4IF;ZZ?M_?8Y=#chd&)yVlTAUNKQmfN8 z;lTeHGv;srbDj{G$YcK1><9p<#}#pN!)c3vKX$RIFZ^fOm}j$9iUbz}dq%yelHb48 zfnDTLRVN_LXZs&%>APMqjJI*K9EJZbI!^^3xl2INa-^d+3^O=*Ejj zBOX~ddrBUmb~t2vGzi_)eso75*3E<9{Oj(6+o&rK zEPMpdM@U0j$Q)9i0>*PoM~!XbMSS|>Hx0*6jP!V~fAjNn1nGoWq;IWv*x+3Gu$4H= zjUr|=P^*biG$|gMi_Qg}&-i`TbVw1S|2l_4A}jM)vD2R|1$CF!Xoq)|i!JSTbL^-`;^`^^VOm3JNY`S9JI%)=DInWyJgag5EvRRr9Y=jv{z zB8b;R{zI}=<$eE)H5OC#)s~40?Oscjz)2GIj`_*p0y)@b% zz>Wd9pE3xi3|BvVp9( z=$?+n?@ZZu0ZlS={$FBy?DRIV7O}mV-AeZDCGUX_0NyroekeI-gAm3}i|;8IfqbV@ zkBbwwSDvCUOfso@$8^FHb;RAMCjpwp_`z1Vp-X2Sx79QmeekYO5iYE6X|fT}X?Oh` zp6ZM>;q1ZKvj7%SK!!;7ww_)Xvewji#`ImoB*zQ^f9acsGIL^K=1j-zE5jl8fzX&LaD5l{yd0e-2oP&IeFXw+sq_WX0WT8ZW5vi${iW78gZL_3sL(j6uKrf z5i4+`^5ygDzAwjBWeLUnTq(JB3T0qW!?ZBf0^^jh%ShrU=xnc!XOa+O)lRue_aEk4 zT>+woWeIOpOT{U^qb&I`+(-W@R*%XgNscVx(-;nhBQgZqOYz-e>Wucu1mY)*St7OYx8>>X3}n20h7o-ZBnl2(id|YR zyN3RYiw50B8`hUJ^I-LC{z!@}=DZQPG{zLOk8R^Jh-%|PxKYb&7u_2nu3V6O|Kcp} z<0$1Z*;`L@zOg6^ZWe0wCl03|4p|i|!Ah_PUwgYfayQwmH{j1=xqF1E*q2{P7Vhh< z-_JCqt`DKns0FEcZO=;~Q^{;oK56rUi2ti4`?Jq#M{-rY zZzhm?perXE@~TTPn=NvSi11#DY5Q6x8sOoE`Gh{hPS|4P?hlj~?N!cv z>XeEc!YD(xfO;yaR%ExahbFh=zLsd^qZHrSyJJ=orFzwt4rFq{=jWcQ({I52NRWnu(hhe$Lyy~^D`R9FN zlEQ7}gYQzKUK<`h?YXGxnDVQD%EHD)gmO$*d+?38UzrlMHbKrW*EH)M-rKMtMUW7c zIgy{WUfPx#i5Zm%w7swKft9a9JRdUrXEtKAuRdUKw3j(?!|`%+ZIuEnM~2@;TB^{q zzAsgLSmKG8SqJm-6IsFyQ#r?$)b-9bxj*bE^pAn$HU15&y`T3U0~CmY^+h80&@^?E z+E~U*r`9&N;WIAQ%W`shX39R-X902;k@_*VGjTBKx8J~D6IgW0e*r0&=0H?bpwWq7 z_xzw1b-0X|kZ&0JJ$&vmO%=2?{`Z`Fmq7cKnf@0GfiA|3P$^oty_6i=N#TmU$RN157k zexTK}vd*EsMbs>)lHdOe5*zgInRIxQq)5rd>3zv1+16Mk7`aRlycw1O3a$UNIJta< zZyX#~OX=>9q6p->KqS#%d)jv>WZCL6Pt|c=5!# z>6134hRL*_`JrP5y_JJiy4I;7id?$%+6=2C)x|x`kA~eWFHTI`e7&VM>81{7>SA4k0(D=adv2o%X;5HLVQ7rnD8J^o^ zoY0Wp44uZjzNa;=qOqgjAB1NMQ{X@J&+me$EDebd?<36(bK+%8@gqv*6v(b|udURs z@2AjUYN*>JXzZ5?pj*O>iYy!bod+|4uNzu48MsaOdFMS*zpbyvQjA+S77j`_0^>h2 z5A8Q@jtgjqX*R}R|0`<6haor*#LQGxQsv1msG8R_mq87=J_llyrf6D>LM;Y_S8>{b zqyy+j8bEc551>TvAnVP1@hP&m_J1n+eVA{|{)0D=zgR>uxnDFAB_d+|KDv~J4)8@Z zKkK^TTqPA1v*e0ot$)}S{V9f97aq+GrC;j9FCjA8nWHJnplQ?p9n-J^TKxDD;5R2` zY~km2u};nXBJfQd&+k*@PU{7X-m6?o?CK3(Y*)hu>h}v;$=Z02I}`kQx&sl^w{g}k zf3X(Ol`+lrmO854J`87|d=NVTv?XNsOcr3fd>mD-<7c|<{EIcf`gHvhhrVX^vWC=o z_5T|b-#mOkw>W^`dN4gjL`g^|Xs$;$q_C2B3HmQa2M^=z_LLV}g0yT{4;j9ZH@3@{ zZa21r_ykk7f>Uy@rbEQ`a*TmR`o2`k{iILzSTWT|4RqhZ=VeqrC#80Y2mbF7QQc+* z*^uL;J~x(=`U^Mfb8Crz%n(p@=NP`ZKc3+^VMpuaK!`CE;Eb8>>5nx;>Qj`OWM*2NCJ>-5RFX%cj-eY3Qa zchqZiqV$6VkVQM}&E^EybxvH8R3L2iCd}CYyVQF74Xq%W%Fq$H`PP2iU|g)#=5!GM zgu3LqtJwRq$&>E4+9rIH>N+m#kvS8%1n5Gk%mZcgr*N9i$+9zwivaX-9=sV&OJXs~ zi66x^C(q!Y*;Qv)eRRs^l8>*O56*pj=fcL(%d2!W-<-hPHt<&1JJ|ZRLF4q zUl6~QLbQ*?wS`>6#E!O!k&?PPTAl%;qe%NY&)Gw90@lj-ms-WC2N)kAe~j+~DPc0Q z?;%DnR*_X2F+2(-0Q2+A)M)?ZrUJ5&;TfqH!E6e$I=a?Kl|y&lR|XB!Yq2z+Hc2SG zr+y6pvE~Ws1=z>bp4bdJ-X?2qYyGj=T*L@2SN(VaEN=dN;UD zydptv^wKA9lU4{C6Q8Ir)eCp8o@TZBQ!s>sKEKvZLj6Js_rq!@x>Vb6o?9B$cm2K4!RiFlq6Vcm1-!Y=((VcTC$J0B^UbV za0SzPZ8{UusWnjwfw!oaGf{sE()fd{P%ZdIW2mQqta*8;k)XoSpXdgEE_##S<30Iw z8N^=*ZalOs!?Y(G2Y;E|&JUe`4BSOc&|0>1CCWS5Hz1d`a9M2!ZqFudUfX7STuz@Y6bc z%%>k`x=a!utWa;XR<|BE!A;*}>Mz)#4(IDUWAu<$Uo#xene$khOly@^*anQEE`hMX z=Yb`g$IGJw&3_E5vGs@*IiEr@*yytxY%}VP@7Dd&O@wweo;}ilHKvDZlQk>~TNt@^ z%VXSf^r?_0cwNN73wHaD3YvLa8r=8AP7{CNYtFMCsxuDKjT(zQAyRYCeo zJ|@O7MecplcsZlzwXUJZ`$(7Fu*wt~C{VD^fVRzESWtce{Sy8GnSaK3T+ec|B{`|2 zvpS3cvMkWyJOn#7#D7&zVRa_Z@ZV7Wpl4!qlpXx#I_5uuM{KOJ_^<%Mb9I5nKr04& zq8nhcO+s}ceG$k(&#V60*-$`fsD0Ach9%i<^yM?|DK-7;&`!D|4VJLc+eXNSDnq%4 zrVtw$8fjt=rFn?a?fU7c8Y^d0NnRzvd$iYdVPC}HL|7_lVnz_O29h(tI37oR-TlJ0 zvE+@2$DOf{3H<#r1>2t!RIReqavZh&q-pXh9wyEt8sOj?>9|<+0>#mL=U5}=oR6~U;2ftNJcWPsGgz)2tS7OA=;6ZotyY= zy<;{{uE7jRL5kmXsXA;u55@DqQXZF`O1VT8+N_`25@Wqna`BjdsgdGm%!Z+2d*f79 zhe5|A#eV3tdjG`-ytqpErocKXz1r+kwHZbQb6m?)v;*pzTzKIu#zk;3imtVj_3ax5 z$kX8872T0j8OP1XU1@#q#={}z#**MA)Xs&AKYUZRQ5PgaI*rqXnU-F{mfEq)*c6Uu zoA1aQXmug#kMx=}Gb_bu{d%oF$^U5XwNxhd`0>iF+AI06Oo&Wv)A@yLx_KVIJtS?I z8V%b53bYP4SGC+`01M9t8jl=k%bF!#I1T%5@8;7CM$_TQ3?->+Y5iC(Aa zhHxD8RXkfP1=G#^(`tEe-^wkKGRV!mP0(!rTV*rZ`5|2Zu{0`7b$J+%cp?6C_CWCC z@pzT*dka!{eyc%O{^>WTrA8nb*R3pDG+eJL{am^^NLQyVNu_^~f*ZBNB~j17x@=b0_kK9ws3gw5;UbmB*a4o=_@C)*Eb1yKr}PLCA( zEXhbQy22kH&cq^8<1eUC*GE+Zv$&?p69TNqk-xWx!3Hh3p6NmHlKDVXf;fhoxF1Tb zP;j?T<5tX6JROddPLRO)?+(&hzpxD4Y7oM^Al=UOF*NSHLD=!A$g9wsk4iD0#^&Ti zDE_ZD#?`2?<(_6eLV%Q8rN9DD2>D$8!`0vbM*EXQlO&WGL>R)ueieER>kp5{5%WCA ze(m}vV59+>(mybw)DB*!wmUehN;9EBVxDC0>kS3fJ?`3dVUoNWAWf2YhZBcA+sfbl zf;81~5!gS3IYw!_t9vDwjU_X-G=IN_Js-RXfZuYoz4hZ^u8^tHOKB4bX%Mu^!eI2k zU`p@%HKGbRFGCfFTh_rudUG{%Xl@MNl!2C3f z-x2529__+b0hTmWDLGjvJvrH-Ar9CrOme{=z=d65MLxC^WY{7}N-bUU*p#rQTDG_R?-f!$RMkb^za{_o@fF7VqC zw@QHp1N=+N@Rf%iOMXoD?*HbWHc26!1l1??HDv17Duu)T3L0H;-<_jwBh1W>qm7pE z9-m!JM>Kxq`veEjk_gRr5?2${k&|d_iy2$ff7>xA+uH(1q@)(geuVssRl57&LN1xt zJb6*UM6ux3kg{0*_h7(O@NbHpCYtJ|kO6@z#^gsE zVJ+JqJ4_)|ufINi1NLpD3yz7Iezu0`_hg!(7SK%d!eBxzRo4AyDF^o$N-7-J{AMXb zj=L}qZifm)zAMe?6Xts5)hEc6KgV_is+Ffcyv9kwAj8#TpsB$|cUrU_`|qLWY26;7 zWhyGOze+PjNtj*_Q*M?Pp>K428YFkx+`GRPU^05=@qPP5|pnc{uH9=vI9$7vmc zt1eVCi7Mv1Ck8*!rObGq&eJ-xOFfHbm2*-Hg8NWcZ3&#;f=;B`I$dJHu_XNzF6Q&u z@%`CNXA^A$9kN&qYr#fbKEm<>CnG6DUq@%)A{?=&~j_@Oz8R3CW<9IS)H-*^gXjZ zUgbPRsDWM=_D`oWvmrHwEFTZE&+G&@1~qMNP^_@0HVLK+(G-&?F}QELm&`%=-cz7s z+G{RhZc`;Zq@n|A&RaM5Vw_&P4^>J6Y;Vb)+2s4U!xI%Ms&(eXQ=Y!*)Y$y`TR$S{ zpfY0A`lI8Gq!5d~wv?-ZjIq%YMEmeA?Qg5B9k*^qqB}g_sDT2nYDBX>BqqL=L0(bj zg)q?xW7n>4e9j%hPta?uUX81RkL@pD$B-ZjxqitHVoJ41!$+;KaSIwZCOO~1^c)!L zMpBD>o+w7G4CoSB()FpzzNOUr{^;c5z|A1rD@=pPYQQe>tZPl}OwJ3U-SF+6MxmC# zM7dG|$E@*a@S>_d?fQ_o*jn0x)!+**o%?r^N3>YWcuB-moz!sm*hqktfg&lNyFZ)r z#fH;ZO`rofHezg<2Q!q5rOc)~^mqyKI`-kOorvqHbvSi?w3A*=F4cu(t5c46A5{?5 zd}2a!o>HAv?GvTu=(|*~Z+jIie(Gj z=Q1nn1oZ}msrh9E{9rw=yg1PqY=i!dD`=K(D&eJ5xLWaHem7oMnXGJh+4nsj2uFhc zW$mrJLNb(EcTbu>vtZvyo7>_6S6{<37EdmXs2CO-yeh9!SgZKTU*m-7uUl2_0x?nB zS`)Z9OnmZ)6NKz=IL8yI%md2`2BK1!Hm7_=3?=(7kC8z?*mIE4Y_i#-$~Gs1J~g+G zog{uiYU^!$AI4=AVfu>JBvtay0ow=?J;c;Lzz+5?0t>(;FP!(k;e{s#;+#@~^tNg;Gt`4;yL(HwwHV`}nILw#1*TLz>R(Tfw z=e_0knj0bH>U7S|mzRhY#v9$uLM0-hH?u7)`7;bWb#(tQ;PdVzGcV1zJ z@=YU@?;$vkVEaII^t_P>7uUkoyIGR<6BX??w&h^>Uv840Q!|y2_JS{ih=BPS@J@EN zN>Tds^6#)2GWm`#+*>Ou-yaw-EAAO(Qifm6 zxuxlLZiX3OXu5{HjX0@8%b-Me*H|*}Qi-^5TM|w8=Z@ZGW<0p>80Q)Hu5!<4w%E7@ z*z;{ihcKr%-flDn&o@vu-gMuEzqh*^92W(Djk?6kWgcB;c?T>zic1zd#6Pf0K8Q9B z&(jHpya;YzEiy)4VY_N>zh09`yDCW#*5fzp4)TV|tjOD@g=-1yHD@Xmu0qPEZ28F; z;DD3$Y6bHa!`gN2Z>Ys> z05BfYJ>KSxIQ@9YWgjX~cH<~Nft|B`w}UGOr*|?r$Ew|05-U_I%N?yGP(b?33Pn>J z7>1uTnch-{4IAm51|{AQsE@aiTN3+^Kr4Z4^T#S7_UGzp{bL3_M#sn2{~TU@rm&2a zyvNqCfc3-vc{OKMpp%?dpYumnYyN?4hzU$*EMsFmFVC3rKIh_tGV8&z0p3UjmYgzP zU8@H{RG|148vKudG|Pv6wP%8>4U6jCX_T?~L&Q%GPPYl#OCB{-+?Hg0@ShWG`%s}s z|Hbt|roxDSaVOL~9pMB2IM^(NerKFu|H|2HDN$YO-4dI*?9o2-czq^G$-3e!LNZxW z_$)S&&_%F6mwbtWJAVODg#SwowE^X7Fv>0X(T%}|wj5#Fm0mlqq1q8aFA4GcK8Ir< za?7s?q%>Y0aGDD0QL1Lf+$3Oe{=1q*c{576<(-hSUj~`0Pcz|~2#7~4rx$I+ZF_5c zn*_SLs6fV}`J!Qmpl14PM|=s@G}G({LdNJIgzHqgOkj`z{@by*?0`yIh(m_U9aARv zPm!DWHg~UBcG0P^{w@%M2Jd!QZJ8gP5k`{#(}`0%!bl$pUnI^aUdCkLr3YjDYdPQ| zPdg1r{&*#;aOL0~_3&zE0S9aC(>5D-{G{rZzC!HNh6Kum4K9cA7d_gyHN@C0t{3nV z*1THF#0aKu!%U!~?6AH@$Z5#;qRae)I>nAP{rN$4?%S%LQML2-7qn#;)eg9J#e$om z77bkFHNsCin$7kFkx0KwQpfmlq$)5UD zQo7uON>;p#my>@L+a4_i(lN#meVfT^c}^0Y@n)pgTOTSucMTqVB9YEDrDqj-GgMV| z{~P{a%3sC{B|Lb@u;OwlBRUz$+@1%2@FPCj&NueB!;!R=Q6+LdCJ`K5-;;;mZ>YIt zNb#>_iBLldxHhh1_pgJ?a^OIdDPRiE3br$yyCD>>?T_Bx=f|xi#swsv{JorsmZ%^; zE}`NEBjO_;m$E?%XW@No}qMAN4tC7dvzOeQZ zr!;9>b@q6Bu@bS@{ZA%A%tQvwQ>-O#cx_1UdlI6D9oX)&c;!Yzj3=tR#I?C5vWzKE zoWzsHCP1NJShk6!pin`VyvKd7g#8-c*8<(~&dfzSiu$iFwcWDzINN;c4F0-M(hZ~Z zb<4!R49T-E4e+12uhEALMoN`qPc$G@+@AHZc*Ij5?s0jO&Pn2*mKI@611^LY zx=VjIvBOidj4LwM2kFJZ+>MKUH)!bNiO7r)Ed?Y;hu4f9q5kOQ}g&#+`2Y?wctSl;s}H&tZmqk>WnY&L&i#p?=~MhZGM3v=CRkwxc6+`)@$;CEB-g808& zAN38b)R)L4j;*mPU{$AUi}2YK?bmg)h%2>nUn}c6{@smTy-N@t)7(f~VfUEkLV1E& zF*9B(h&_z~oyA^ZLHn9!o}B(V_bZnU@G@(2u!jyNujX!-7kR*%w}x#Z_IQYUBM7(> z6ClP>x+ouH(Zy#KzGa&uyy%I=Pm`LL%dP@34(0?B>sUK%WB*wliNJ0_$$SpKPReZ- z-y_~6Z{6oRLarB9h=GByR}}?=30^hw8vC$)q3qj__zc4J65uEpd@&VrikJkr19AE! zXOZN^=gtA~-{kp=F4L?~jCX6&((%*ZSC|`$#tjuOhSH}DW=e9MsU56U?tk3JTXaBY@<{C*JBTzEfpFQ@(K<;# z!r)cuMC+4;x>fZ*`4_#E!IZYSX2ne;SO?SWg#uLMN)>dV&ZmN=u0&23`tiCL2#6uM zHMI+1jqtb~G1Q8kR&w2r6bU&XWR0fJSuCVwsz^7xe~ z6o89$)RCl3c{#mtm7>XNgn?b#UQ%TQa`)`@QBt>CSg!TCnAmL?&X#gG!k* zog+t$>C&$;kA|Z4Z@j<@k?FUBTn`Ae^ya;ag7bqf=4-}hdUE? zxOu!_)LA~KqvdsZK}f!djqVR+dV>>t6}EkcD*R3cS3@Aq`8N*E^~SR-NJ{YQlYcV6 z>P>_Hc7E!V=juBsn68=@+eUBS%KbORw$zdwG;+PQ(D74@Rhn%*n#w6VVxZ)PRV<9g3$i*Q{YhOl^8HeiTNB5c#RR(h^^ja)Gd20l* z&`)TgU5VNN90C!5;)Yi%b)KRHb?Z=g8{LQe2Bt5L4G?+S#N+Y}s%7OE_75LOgpDWj zB29pmK?9JBc?lk-qSEP4sx@M*)ho7~v2KQ0f#EvgTCMcc8G`<7Bz9X;B-kH;H#E=c zlZvZbr9^J3uG+66%V@S}T#)ROmT%u1hyVjqpKQ&^3L+y3y*BhWo7S3XU*s{Gx;@Hw z^&>cTg9UMU3;|&ROid;hfhGUQc4ZZ#mPzqXM8u`^xTiQ8DJ@nuUJ0wO7%7k=L6tjV zrtGZIFf)|*w6&=NDNyz-G+MD3mlS-<72Kl-_Y=Mpal4OviA4yv$I#kvI1Tt#O7kxP zYs}w@cfns`lB=?wYIKP73Z_fa>{p08m-MWx9Z+9EzXrs%`OeZ*6 z8fz3dpx< z>10RZDa_WZ=>0tu-!J?{khZaAcH0!w@e8@b8tMXqLTLFaodMr=p$N4A@%KN>pWOK{ zgeyNjZKxfnXQq+GWm{RGvxE@-lF-q+Q`nVZ@O@_m0=Q*%r>5VU7Q+XuaIX%{e*`XE zm(|$6m5-mk*^nKPdVS|`o!OW2LI{>8HArSjE1*mwE9%B?J@X1D*-H+Gd$g@3q4l5< zf0sDZ7PB_3Ytd3uTHi+q3IsJwH%=V@dSD>W`NnN7@6+_6dG1~n9`D_IXi3L4f}Lc| zwdXNC$xPyhGU$dqmEcITbX4_jI9^u;ulA2`+xB{jNkp?sTz0m5qqqur;m?ZG7!N!# zqW+U+R=@vIXrJj%Ts|I+c&u8HhE7fAunb{7vwlT`*Sj2xFHGIwwvfE>n30=cR7|QsXr-kx0wFrPQByK^1)|e^}fJUn9Y5@A3?)$rg z<7RhF5WH&v+{NHm$nS;<=K@B^;v}mK#`vTf`Zw=NijJ@(Dt+gQgb+nsSSHUmU+@l! zHR@^1zK~GacgL<-*hO|Fz@l%do#mH-v)r-~Wkr9oSEF|<5MM*yYnqzvArt5U8Q@9v0aA0wp43%5hh^%a5qiu-+j9W#}j@?ty&Cau89Y^mYlVD{ATK&-HQ7m-0G(VyeV-2IE2#ae@y zwdZM@f;ab3cVwL=pYFu^53k* ziCDL=B@{NFlNdONB&U6+=XW8apS@+OKdfG;Y__6bkQQ(Nwu);mm)2f%RRj{db;TLx z%sP!(cYCn@;z)S(ONi3+jH@|u=Z7wUOayPiPS%yP)ycH$`$xj)mn{Tr=_ZcNvFmaC zHg2dN>a|@I18e*zeA_D(O*JJJn1 z*6?2?(#XtRluX~fepw1dj(1kvoiubot`DRP@O_sJf^7%>Oq(8zf3h+B=%MV~8fqRj zFPO*CIYW!^%m3pwplQXClt`mDq0p#~ks+Y$s)8a``tVj|J;I#~#hlLc&7r8Tx-U}d z4-+qIPFb3x3O|;z86?8R4th zmw06PsL$R&gs0W^X(B^Nn3edM znC(jp$arc_TJ4CM{1(|PB;p*H=fhMd`F;bof<5w?rhMTVLrS=RdI+-c?m%=orgnCO z^C(Kr7d~lr_hNmiL>n(^z*iZTWEhnYuyR|xxwL< zscv7kdm9h!UT(@eAB!GSKJx~U8NN%qD0Y%v^V?QQFMenUi|{5%L@iTX7M<108?ic> z#_bc+C`Fi%hpRxUp-YnXYO?`x&<^eZMn?k`Npf{ige~Ju_)R9sud5{7ro4U`Zw?&k zU1+P!5FK^US4%A$f882iVIV%Ce&up_V`K>j|72U5N_wvCFt8OSR*UyM@+!Dy1z%_f zNyB>~BiLT1LeQKqg;FDQp(+>6aN zW!DQm>J5mg6shzQy`};y-p2Mz3#vp#wVE$w!|}a!C5^DkA^>b+c>HHC|E!3Fr<>nV zB7P{Jlx_c`UF1kgIdASayC~qAQh)QQVD@5J@xBg?U{+~?@lp(~CM6W@jSWCr>XL|LC#6H6JJ&z968!)wOIYkvlBLoC5M?YgzPLq@Zo-&{;RQ%)!?a z5xwp1--7wPUgqm$f-kx7>Z5NY)@Pp%(rOuJ@3d}<_mRc@V^$w&k<5zvdjpq@Keai_ zNn);-6|SFH+a&QAUjhgB5Y3lY|%opQ_XNVDD{d48Uh7x-?``b_?->XPt5OIxrZecGncV*Wo} zGk!7Iie7e$$c@)_5j_MC`aho37~nghSvESQ!VTUQ6@k%}34TQg=$gvnrhp+b+hH^& zjGtWH(TCe$j{wT>)8xmqq%uq`%pote*MO74vC;V*M$(DyWmmaVAXU6Tv&Axee||*B z9V)<&bqcNh#0bT;CxFYxvp_;+zRveB^`n;)Y`bkyeX zR-NBB-;`AKm2sqw@?RL*f-O%xv(Q`R4+EBLW2xDVKGK-YoMBRXgZR z6;qJ^d-cI%;nfQos?(3!(V(u@9XKmK`ItIWOh!o)JR}0f{yv|WY;_9GYHo1{!T+EX zyYKWv%)AvB+w9WUV+z?NrI#Syt-PXI$fG|x`-({gTh0+yH>z>>c)q9vvt|PGp9LRX zl`yh_n_o$w=$gK_vC1AT$w!@Zy#`oX|GdqyjVGrpN?&<~`|UbC(*n`lw{r)rize9a zB-?Hjz_;Hy7XPq`$2@koG=(>x$L{zO@N&MYPy8!vd0B#s)180sS+6%?KVPjAtGrTm z8`)sdQX-yqSX5G2IC!o%DL07!3;ey0*?z4_V>iUVV@uQ4G8@6P*~{f+uc=0}fnGYa zzG1;Gy)`dw9^%r_YtdC6OF`!O>+orr<_EU=*bBqQM9%CMq6XMVna%=Rz4w&X7hjgX zEbW^fh+I|oX$M@T8pyT8q#E{nJnriAZqSAVSr(9V@2+4+qagH(5cHpJALXQwJW~#0 zrrzX1hRx?oe{-WC2aeVo<(Cuco$u`qw{MhC(GE`l;m5jvO@Z5LccXL<>y(d_x5v9(Y82 z#D<+yyuPavoup>m^2oUE)V>8DfF158@u1%!v#oc^*lG@mUZ8u%jOqK2fJ(yiJ3ffd zyZ-u+Mch4$ug9oxV_6sy{~1wl#s2+!rZquMU%`&p8&Xim*nD;J>&; zA=-~~sV*mqgD*4~6h}6FR(;WlUxipD%lw_v*Jy)DAsTmzsLn8FDIoKeoRelM)R5{2s=@GtU9!-kq+>m+q8FGl@Tf_Ir=7d$? zS8XMTQQx%}eiq?oRJz=!nBgF6gi+^~&$cr(}ryx$L zEsp=mSWHS!jYke*qy?RO&q|NIDTYZE=IGoCgyG*kNz(eFj?*X5O1q5hcklG{5rdw; zwbkJi!}hnS)i|b$fMg?ZFYImMZa0=T=s$u#xu}vCimp#ii|Ou*C`Ufkj<2}#cEs`k zoVd0?6A1;NQ(Ps$qF2&mYMMyA03dvRvlsX>W--QH8CNvC1mGav3>B%SlO?j&!OTOv zH=M6BTmc&+;WPPNkPAz7mBR#TWMKK21wXyK1HzLgR)3y4?s)t`HeCny=A|a+YUfqV zQOd&6XD4ssyZa!h3BdQhK|H}^I+?!A_LV#MbZ{TzzA@EVWdVW1Pq^gvD4gfXB0YV> zP~CP2U+ZZO-bow!euCEJ@l4FZntPf6O857R(3Id=K$C~zqS3q3ea?_vzzy= zA2FI6=rADz5q&Zf$N3brMzI}STeTP$zOAO>OB()PT>0zZY;HReYb=(_&X`=KeCqZz z=A#z7B;pwHoLoS-<$MzT!HN{Lr;eG_WjMXrZu$!6rgRDOyNm|-VF-sMP8C;~WH?GU zXhdv1l`$1v6hjSYbNf{fB!aL@$@oQ@j})HIIKG61%xx&W-q&*K3l31TJ-9Q;16o#PA-$5wq7r zs@tK^CYWjVCdt2g`7e*u3`{8Sia+I=)c+Y<()jxw9}8Jf_h4F9fgSFn=h~^4HRXi$ zP;+x#CBmQ{|C8y1KQNyCN3eoDSqKQ7e4i>LMlS=G%|50JqX^(M!%@Yo!ES4D1<&J$ zl=FAX51>(RbXU~Y9!o7u)(C(5o|3o&I}4~{|J8z8@pwV+XFuuDmkEDSlpr_qz=QCQ z-cj&06!V3r)ey<}vF=9~-exT}PY%G)6VF=Tm}3Esb#Tyum2b6e46k!?=~ zjd<=$TFkU>I(8lX>gyrfUpd%r+v{L}fZO~DWeTm99PU-EVe-JpC-=dIGJYn2xk&JE z;&^t0WOuAq$mqj5L(R0)RHNVIak7oa8{s>V4DGPvMVbP|^iG0!HeyNdhJ(OXRniAE~-BzOirJR75PFu4yYc zklnzGZP;|Lk#qa7_oJwdxt4k=06{}Ch( z&Rpp%g|OYfr-P!~4iCyu`eeAgJYeIdC4G{KQ4XK*Mz#!?T^v?JlozbIYq`Z#>3Dy& zfp=06Vq{L;XFkkGLUd~gmO}?E`6vF$C*k#E%4GiB8W?B;K1<tIXjK^$5SR&(}X0{~rBYwd%YcUFjlir*d6conDojr+96)8l|g=CeSDKD7!4} zH6aIlpF(G3<1hqnB412n@`x%D`hmRKkdSy+P7MA$tJJ&pZpd9R#S4tR+X6$Fdi5+( z^Zi@2xD*-p52$hMdK zE9lLaQve=U8fmI>NdFl0ICZcYEzg&DIeA7C_aj~PwOb!g%QL%ghQBM^zgp|K8hUUx zF1%zYxc$7!YVMP812=L0&JOm19+yjO;Z9h_t1lLzehxlMiKPz|UW zdV50wy;G|O$?Ce=^s^x)U3t?N+8QM;4wl~X{gWHr?_hIw=xGDX5oUok55$kBUbF>| z$B)b#2!{<{@Np=3IE?^zHuJG~mRjs4s6xL}QNa$&EpfX2CVGo^8VXMB4TeOI-uWo< z!X^~h|07VLa4vgdF(gtcv*3+avN`4NoK_#W8%uNh3!gO&~YLHg6v2JBf%s|k za-BFKCwJldgQ*`~sRAmm{Z{#(k<$T(Ip6F+ZV0!0YNxA!ZB|to3%Bn3+)U{a$WR*wW(RR!1O$!cmr$1sZGr8D}_>+JVtM;+h zaE62A1~C~V^Y-N!*Nab#;e*;Y)-%>-8-S+XYyAykVF|GSTk>@#39}`)9kzZ|6-#J< zXlxtY^cihZ#7hUeIQ}80-~j!#7tEwasz&;1_Q*1$y2(`>kL#ZGXC-LOt2a47j9-6d zA~l!)Xi`!_YeN;|Az;+!%XTFNFP-*_FznRdx+vjZo2>-EUXbce3`G8bIBGImF;hB& z$;%34l~B?4bW6!oJKzJmy5KOi(2lg+=7}5Z5c|nvgNrNi<|o+pERv*{ty+2L8(L|z zJ16_)Gv48NVGx0`41xCSFq1@Blxs$Jb$ zFMpOk``txcxvgJeGq3Mq5QCkYP*_@ed7)^9jR0!$5Fe0uaR4SdSpn+1@&XC1wtaof zhfkq=yV(k38Mx5{1a~ZM-oehlR9S3FSE(9LDr7rh9K@}^QdJLuz=BE4fxYVbPe1k* z%v7vjImm9o@&iQ$aNqnS%R)CJjAS3#NyS;%gmYipuEig)o%Sp>vt1g_5j~7FL2_@# z_8|`6J@kl+a`}(oA)-^n2zL^mf0Rb?!u3d=FQUWp`Gp8JE253{bZ9YuZORTbdZZRHhl4q;<}{h>Pj zA*Pil_1^b1^@O2-QL+(j{#i(m%UaA6PClkjwR;NNaRAA&q3TYhsP76w?tKcQiDzYG zKL{cG$V296qlr{cPEoznZ=he{`&WHSV?9EvG$i5?+3fKHs3OO&YcK6je!?vSi=P|o zHRw)C$mnP0BnvG2$P7pwkzS5i#ryM4f7EbMsztM|`f@QhqOHlCawXiF83}gzeQtg-vxg95I~chtKWku> z=*lrqc35eO}M9=M}xoh;!T)TN-b~t_XW#1?V8w~3b6yE5rWA{#fyoGbvkF5){KQlJ_M$aB;r*Vky z7otzkP_T8N9bt;jiCHxl#G8J)kYTi-n=1=ky#y2fh&yX>;i{o4w9IKF;SfRwB;WjR zzHR9PTb(K#^Rpzf;ue=$bSTZ{6Bu1?OPT0wuQ8J>ot$|I-<&*9KI+wptM$rne=_v9 zA0=w3-fkP*-=tqG&Oi_D^Aij}fw-XttFO8|y|HWWKT;!m7OCNYq##vyXP_Apj=HqV zhU0#NH{(ZU5AV4DeW@J3l&lUfPH{#=n^+`J32F{>jvp^wlua&&V{F&5T)yN*4Bbl_ zX8Lp#GIhvk8dkIMAHm54F0uJ|_2|t_n)Nc&EkBg?!wq#_b9kXRS-eq1z`UCCB?_#+ zFJCZOVBHNxuufDm_Y z_*l(--4GAGkgjT!{Cc<}Ga(ZF-D3DPe!Wfm8v_?(*{#Em|m4h76W;`=5sDdR;GFPbmiX3-@L z-9OIgOxc5=-GybixzES*XJT+mSE<~{the6AJ}+7cz*fV`g(3C~ltL9x=09XsavuI9 z;1}IjpTxB?AHPvOJ>?~QV_X2qEr@UlWJ5+ROW@M+ZqVq+Bh!-%vGXobhS6+(wqNx@ zRz_!H#{4j|SJVNaV~B6dR{RdhfBd~RR(fe=l4t`{_VbU~8s-c_c;|@+==zx?_#Xru z*e?Jf*zA+4^PMcQ1g<9N#=zEm{!O^}L^Z+f2-hk0>)GQ*e#UCnuWy-BZMk^kMnc=r`EIGykv zzZVyV+W!$W?L?FR=xEAyueR9o*UFq^pfO$c!<8WZ>HQu+c|Nlx|G}9y*X+^C3%&Vf zUsJ$0Yqic@>K^8Hvow2ptn~lPw9rSz@X?Kq;2etoEJJ^F}AiCx}_AR+$K6G0Z;-ijM!4SX_rGU%B3>faD}*fn7@YC7^MVApAiul{9blAAeRW(ym7hD+-z->ekj7FQu+ zj;>Pc=T`b@fWP$rjh+c16o#!e=*|Bn27N^n`uAMe$vS=w~QEvGZdid>#&|4j9C z2)8U>beXwRPgO0(Fa5Jk^zs%byN^aPKjSlVLMWC7CeJnmKDk8oWUoms++xvewIVq% z;3ix-J9`C_n&by033$?2C@JI#P0Nee zQ%I_zcx%AvXT`}pInySxniS#~tV<;0!3!JG8x6<142es9;%HP^@$?|EC*HR?S;bYu zwnQ&J2tOL}NRWM}YiDo7mDd0e$WwPHL)s@w$0ab#Jb4FegMmZwo;26P@#2V{wV~4( z**8L`@@(TKW0$MvP(|COXl1`u&F1qFUh)3k5hC9~p{XO4Ns+bIcw!BX8p4$5_gy)L zX;tIghq14g8ZTSm6x>xDYwN`)-4Tu5)nHt5<<6!att z&oWY2>IHG}mM~3)B!1)4CD-ACwLR$e)X-O*{(sEMQuyp!-*ly>-QBmieVfuXlnzXe zERi*^@C%F+p6WP2yK?C;vq!&Xqd3?y!s6F%Uaqj6vx`4V)Gp}%Q8nL02K;J%H!1-g zNUUWlN2>#Qe@iBv&!>@R;v}~i?B7kfkvbE{uNYqrFj%Y5;P>5^)$X3{U$FgIP0TnO zx5@<{8F`(-1LujBujb>86w|*5?q^$HO{p{Kjvse?^QmF@d2>wFs%5&-ZQ4E!e(WZh zP%ayu{}A63XtwS-wdp1ofp}m9H||6pZ@KEBb%>)CPFwG*2Ml|{D)zMaE?VEn(R`2C zFSVSjzAk0a;d7i;yn+FD+EuyVpbOfGbnv$&QQ_|VA2H$43&j||Z@3xJ%fo^ACQTYM z@|4rHq?+gDlBvVqH;QUHdk|cpB@KyHm&gr=v<0VpfYj&zY~087xD_HP!a zeK|g2q+=-{uSQ9cV9@+e0CdRW-cmhCg&PlEI-Z%5(=(U>&pZGQ(*ZTX43lrK4R`m} zYPAE;|B9EO8CrZ;qaDjy(xAH^N$ybARf$+ay-DkGAX3&)UR+dhq?y>ZOha^L`X+%Z zY89w3cQ{FQ4gEC5-7KmF+_K~J8*&Zf>&8VyLz4;AO?T9PBdLyUnv=zgLy+gc60#am zI6H6rZc-2haN%%(0%?haHc!KPWMRhVRr4+DZ$5~X2kZjm@ZMY1SN~00x1bnTU*X~~ zCx)ULMcAqv%lN>drLf=^)97YHW+_Q=G*!gNV|ri%fAc|lUb|Yk=YBM4PGuGG^kTM; zLw%dQVZ-CBn_FM=>yE{EoJC^3);R3F+Z7(xV2f4N6DS0Z0)!{eAj|kuL&168-lRY+ zxTQe$_svI^%r!qWE2&u3E?Ob@p`rM+FP1XdN?RXAr*InES{k0rkR+P@ZUk!eGI1^C zM#iffnl$k)g=K#SIRb*8zrmV7KdNhyhY;NLhVwC35$Kz4n_up#ov+M3YWWu+Ecm+KHU zYu7t>=&3gosFggv3@DBbdY-Ih(J)D+2-0=(IX4{K0)tL`x8C_#B77r?cJg%DuCoZ@ zVg4jHS;3ayxsD6Z{w)ITVJGz@H#fW&8fmKN2WzGq#kDxkdy?sf}A`OgTtzY zF&K_Yqzn0Si3%g-xx{||$Hc{6;0rzlKo!K=z=56wQFE^uRPBHj`|sP?ft$toA1-54 zk2F9wA6mSahPce^$v_w>|H<>W^}VXt@Pb#3i}RzFAAHY`d021(Yz2I{v#>we&MLF& zR3bmT3f`loADy$EwUN`jP&jJ5Upn#rwA~DWz2d!zl8gtI%y6d_qbY7h=Kt>Jek+hr z$@uE%ZURJ0QcyLJAsLJ$W58I2?z<_El=bmG+g^)6lE<_7xkr-h6Dt*4OJA_V$)%cv zE!)BQL9ski1*{Ad>|5;@Bj7@P+A)48aYakQjpQzFhEiXrAtzTAtj9NPzmYol9WbNq@-(v zf;5t2``)L&|LcA-AArQTuJiiDalDU3qs;#EAX6$}E^R#-yo;0jp{`QiculJntRQ~T zdVz>b=*0h^-aY@#Y+$^%TWxFls(*sa)49slLCfG{Q{rbP*QmEaxmgvGvpU|>eGfQr+o2@maD6>8l{TuB5r|gi`L)da4)TIUH7R>LTo|)x2rkS_E z=CXcS_wt4DuUw)76WdOTA33kJrHw!o%YAOcm2+wBNr<@X9YjBSW{o zle=zW_ae35gq4P3vSBE&JPYlM;LO?%N^5 zx3<}Q4H8$@K5Kq#-IyR893%Xy0DC%pBZjCSN_lGmj}1!gMer?;quGFx=S511)azu) zn6m^+*h|-UBO89DC#RTlwsRvIT7lT~j&zEU1AKNc>E^?}z`pQU91Mh-TMm>KR0 z0d@~|2v%JvaGIxNQ?3{mm(IN_T{@28vrkDU1a9^iaN16R^3guNwjXb?B-@SIU{T#l z>$Q#mCM{>@-BrjeX*|#DAF0_#hu3ZcRll<0_4hgwJbu^C>75)?;-#eMiI<>eCgNPz zMhyn=zLa7->LZB_7uDl;AOh*MwvYHR;CU%9g?()po2hjsI5??FCBZ>jvp53E^Oiqo z#MUbWzO<0O;u0j%t&rudC3L4R12e**+SjqJ2vciJ{+h~mpdWH}P70=gpPv509=zML z*D(I>!Zzut<9*WaDn#+h^KKQ>IW2Yx4Ax|O#*=w~1IH(P@@YZz+~3i9Rfexy+G*;A z=Ft2@@F?pDS;{K7Ey6Q*KFA+2>*x23ZulKVPpALK6U1c&Y%T$I*+^lMx!_dk<$hsm z_)4@^6#*>Cob=eG6OI3HZoMIMYTPkMFm-`wSXG|$V@-(gCeqZIe=O8wvNV-te0LD@ zkbi`LZcsa`aBQ{)kQ3dDy_^#$s|AJ#jM{8?T0nBe#pcf%jrE}BMDxSx*W&89;iz>c{ zo@7RKy996TxQL6wXbXP9(#0Uu_qeYb+F3)X@WK`cubh`wdrCgK}=qtxrB-i0UeV+WSSK5-U@8s~AFg!HecX3!%qficce}{7;SE7# z$Hpq1qUj<6u9C!$Qjz5k0oHsSOlBI4Y@JR9O&M9Mqy`BwGM1fFwmAzcstGcY8+d+ps2n8Pw0}r&j>HY7SKsFC*BvXJxOHw}{$2c5Q1t+$6+5EU( z%S&yyhe8pZ+QMh%$Q0ar<5^Ky_=QowN#TMNt_^|!3zLREXO@AgKgA?Hw!Qo@=zNa` zEzI>(|2~5+nc?UuAzPa56xz=RN!lf(bEf)f{idt^j|Q#i4SPlN54_+(?FG(UB+Aym z$_Mq=P!(bRILMz}E|CWN<%*v?8 z(J_BuK2hT%Q&Qi#v0FxVl&htRmWBv(JQGX2J9sPAHd<>m$!iOKCT1Ht?E~+@ zmG6bUz~>>-M#&qto!C<-{(ToaOf|aODDv^99Nn~Wj2MzSVjY_KYUW3+2-uJTAI;^SB-6|5)?JAxiCaUTW4h zGaML05_Q?;Rpt@%h#uho{RqaT#-FB>=7yh9%(3biO!TCC;RUJWuSd5D^Q-)cB-*bt zvsEb9fe!1Nun$zjX1NAje|KccoMpO(r%q6muq(O{C?x+lj<^{AGL^>&lmnXB;1f_3-@)7ri3dRvb&l)Rx3{Dc&+dV=h? zM)6a>&EA`pg4T}6az+{x4tz?Ocw0LGbFic(fK2Qpf|6|W0|rI zGJ>Y5$iLdpi90_+Rk|QeW`V`-Ct%RI(3&>3nZ2*dTb4!vt^^vfcb_7u*o(wsWI_u5 z__f+z3k6)Wt$?X`*Tx{}lzA=5D;buJ*lrpbv0!(Sl62H}s#>bvuAKjhZ~zrCX!CxK z*x3Btt1M(q(jdv&GJllIMfoGHK0Kl`$Y{=I(EQBUmll}v87NNlqAw|t<*7ZIwm>Uo z4l)pF3z4<0tr@%UC|bciKRm!y;B7VE`~(mGEh&}}znHf7hz?Vh4}QpX%(e;SMRX&o zK-*u?#Y?)l0#z0(AP~FrSjJvBC~uzaPtUw1{-l$r=+1)m38lX`?3vzyKHxg?qFW*D zdR%};V%*jPne~VWPGbTEOgZa6Z9P?+K5Drh-UbLDAh8}qK{me}bk++6)PVdSBJYVb zuc1=pkXMLfkwnMqe{K5vVXDJicruozw!hZ@rvrjL+pXCIP#afg`_KfN+ z4P(deX!vMDEIQ8}95)>|4Qr|tOy=UTV>R|sVL87gsjRF-1Lg}_mBf=n%^GSiJWFq0 zWJUxMepLuZB^Kpga3tmtyaize5*1}st5(;SzWO|O=fmRwf6{mG!G z({)tM%Xp9`p1lz!6MdkaESMfWEh2JZ1gs}<)oF$5Bth9iMN|Wt>W`T7B>A_}b^@@~ zS!V8Y2J5h;CGv&!n-oNHl8hLkkdlt7N$$M5F{~^4Kb$}!(9eSXiwIC_i9{}N*fc%< zw3+p>ApOOiyaZ_0@8h@G)rlGtshG^gL@X18E22A65*P;TlRDicr3;EfWPnw!$lDqH z16aliTGG2&#^27nLMt3x98hJ(Xe6qvGT3Zj>^>s?m669Kcdw$GXy)$q$ELbr4f(2Q z*yat}=0A)r#Qwt%Hv*O-{h0%AlR>ZW&{`^*zmO6dX^&M}lh(9>&u?~Ssmcr5G!hxk zy(Zx-Jud)bXQY_yaZ{c9Tf6mhCO`=<USo(;8LDt%QHLnP&I-M`O31q=J7ox*~kuEe`vK|$!dild?FA=srC z6Y}HeFw!v7T88pX7S!I}DZM;>#7MxuMEc$)l#CzDo73Nr@n=60+7yZ?T^=D>!*MNPr0|+7s%05e&7X5MOL*ZM;l8(iz11Fi zu7)69wfeTG$?$7&^PcSEH0Drdhifnou|0wBAfpT0ee3W#3pc6?XBX^++z3 zVg7ed8rKXv+qNtR1w2zKbF!oX!u$YqWV;UXS%@Xu-QSZ1UThliwwwmj zt>&b|OQ_Rvb9%w%e$!+ED9)5&$EM)(Kjh+>vQ)2^=p^Y| z%-W>u419BRJ%#9a4#tjy#C|)w_wRHDCC_3Kugr>*oTi>McbL`j3sz&+FSEfu#Harz zw-jBET}7W>NEZm@X(@=dwrqK^=U2qHOYH$D{MAG7#${D38)-AT#QJ2;B-I`Uu)VQ4 zck9x-2vWlW^?~o&ok{bj@@5D0BM@^=yrbd}Vc8y3NUjD6)pQQ=!E)3u8Zm)t)~$?{ zLAL=C1zijEt;E5Xe*2h7ME4XYaoX_L7$^7Sou4c3=%-(69DS79S3f*{JdjQJWI3(H zPNzh@UTC1VNIQfYt#`A61V7D{9o^v}XLf)Z@j#_~k^7R`9s=l@4**R|NJg!DhNL=9 zhu`3s^^Mx~K3XR<>0uGcW)0SOdIo>;V?P7_%pBRnna+lV;)^n(1X23Sa%(k=Ce7=$XXYkA$f z`xts!P4~eCs|)>7!+vJqlf|Xd=CI|nIiVsaqEL+Kh8?V)oIrwSQyI);$V>2=V%{kf%D-_b&ze;M4M^-jThV{<{7k{G0E6{xKiq7 z3R!lbwmWFbtx&Ol;AL#=JtTLBxxzo>7sgV*l5BiNJ39J(-ct+j@S8YzImchN4^{8K z99X(3VO60m5+B}lES15isi#pDhK-tob4HoV$ZCDvHJ`qk=fZ)kr8F|hrBphyq9)7f z-6Q$*mG-3+1lE@oOYnMaxF>Tw!E1O6vmPVJFtT3R-*>hv<)NvKx~&%Iy)blufy}T> zPDcrk{%pFG8y5+OaJoD9>4em3=@GcoAh*TdqKEe5wVwxPQKA3eTr~y0DL0VAOue`I3 z{4BrQ{~IuTQ|^Z5WtTt~+HGm&@pD{7O^bB45fhRWm}eS+tMLk@z2RXa^GFVdk&XNT z3!7;-5sXujle9YhklE2Qv;Y|3E()*VOL$Qjktuz*c~TEo#$Ee*uryw-!hu+g8NSG~ z!wQV3vCw&sK4bIUuJlL3UxZmeSlFBXj`*bH5lEC4-}`tozx@ln6g`9(#|A+}u^y*X zSrTLTQ`_Gt}e&q7arl+Z&`(cA{MLpJQI zka0ArvPaIUx9P}-aT~A`tF07VvZHcqFesMiMsSc9a^()iZ8ff-fSBxFT796%{xvJl$HM&t#$o(lmq_D31Sw{mtJs) zEJFc?H8b2v8rZerS_ag5j7#-qT5lkHmH4%X46wO1ISs-OegcFZ_KBLw#Z5G8-=_DE z!Bo0`4Bx%g0os)|hjCuaLpP8mb|M;9Psdob_2Hue^~SS0({>J$_ugVy75VzB^w89$ zHy%kzy9{^}OjTxDFPStqFv3f>gka0yiT|mV8Y?w2FsW`AXm=;!-}>V!Sh{$c!0T@u zSkagqL4Q9>L8<)fUmS4`kwzAk5fd9O0w!dheW{uuLHeBSbOJk_ z6WER=ULBrP@*m_BcdpH< zhr^|K!Qa4Z4W%P7rrwMe5Sj{TJpg$_`y1^h@4lK6N}CJ%0Tl#o?I7r|EH;KC-Gp;c zT2WgM8e3zjJPU%mFyCr^o^%Gyu5)?B5L2V$^~c;>i}8P+uu4(1?rC8`a1wS}uEkV4 z`JA;G`#~b%oy;fivqHn+p9%8Po#Z`-?8&h8BbN9KQz!2$fEOhiQi;+CyMAt(&~RK@ zGBSR11M}bYJiCASEC9r4Ts06$@0=_sRzaU8-)7)uV+Q8?U)bwk=VD@E$|DT z?M)pyD*>xXROJr8(AK3ztE}p=^5XC2caC>6MORK*b9R^?@IC9>B%e#+4;cXC%t*fN zA&-3t5)GSKq?wLxFXaF=X5mvvANIQ$pJt5Rb!ub9t1Y zH2|-bxT-aH`WJ4H zsdeqeduM`?_wc(cN{kthV}j^ zB8|AlhZ2QpIl+?o6?49G{40oA)?Ly)E>StKm6sSi{I|ZC$=KgczcSnvyH2 z*hx%r(CjsNW8&p9B1O5+EK*=m<@w(d{pFdrZ%@~6Yo`5>C1Fxqc2xKskhfr|V9bD8 zrNS+}0?PM?TZRJuQxy@oG)W ztg@>fctWb+bH$Cia|H#uXjBaWu6Ye~1C-KMCw)a=QR-! z+nu4R0i?vy?Za@HW6aGrAQU@A;SyQ%B#;#_zq^`4jDmOk1zELuxQu$>L$2JSvq5Oa z&q*tFj%aw|5-dCKCVlXpdgWMJ0<3%?XMoHKK)kANR*z#~%K`cnO0NxE89;sicqWSt%Pn7)Kwgp$ow316=aHcB91im0X{ueLqO8 zek@L+Kh)ECW^pcU->MiX=E^ikRu4Qq#@Bl&@(LoRA6w&*A*?pz!&h~tCZ-e0&lF2( zpHi`F`Hw6ZFKaSNS;AT9${$WGYAGw-EB`~cf$o*xz+9mJK>E8HPzy=)W)=Mu63G|v zeH6k$RI|!c>m|F2;iPCjj(=}?asP19(9euLvVNov-#!Q!{|R1r?MLD-^mv_KG3wl# z^;lXoLr(0NX1~1&nj6OMA%10|%REy;8QU#<);QGS>I4H>o6)R5S_cJ)Et~yr8mN_Z z*HCL?PR54Yf8>Of45f1*C$_{I zET{2f)C|t8H9&8b?Svf{YAIrgBbR*-F@357^XrU(HL{)X&{%Ly-n2U=56U&H!b4LW zzoADHPn6g$ax+hX5(JE{^4J|F1w#*YYJES*eRoJ4JKx!rAgCTr#lxbT;{i_)D>yR5 zg>j7wy*4sA*7rCO4G7Z z#=I~-({r&otysTuwYTR?;7b2jIJHk6rDJ1_bmXRlJ+Y)%=^t@U>*GW<66Z{q-I7yl+2y1M&} ze%Qu5J2yA#-pfG2voouep0D648)*1RXo#gRw(g_!_hM=HjaJ_+Ufe6zTTH!qk3adw zao=RXDHG&XmrKV@P3tu*dIKMKeM~*zHKq!&s)ulCOM}28zYr2Jcmv`o6S{SI{ zkg#$%+e)d#3|B6-N*oj)$AT*pB6{+YtnEtcx|Zidr4dTwYg7?_m#3Jabg^Uuo@Og! zL^y_1UgcA6|M>y1ZrJOh#Wc0(xa!M!iY_-YxEj2kotvZsZ2N0L9EC2a8fcEw0_m(PxkS9vShBOdb~(E_;|^yFkGQ+Hso#Ez zBH8;E=xPaOkN_mhloeJ6_qA2}s{9r>g`Mg`58)m9ucK(4i$Q8%>lDqu6X&Bj#{HT; zh_3ufWN4m&kuN{8`~!abw|`9ftQ(Y6Jbb{J2SbzBXLt+h zKV4Vy?W+bjHZPMu|I7eEwr`0^;c(t$xv{z{>acW5*4iMp`CJ9;7y+S9n&MTezI6lG zPd!oi+)F(Ge5KL9JPsj|SjYRGyfLdKLaXRSX}vF%ZzC=WV@LZgv=FV%f3Q_qd>7Rb z?#XnizJW9bG5rsW626jOiC|TU%t#BByBPkCY1xx|I^SL5Kl%@+GAqL}=T`KtdF+^| z7D=qVvNPXfKTKZi+89daGDqXUMk2R3_?bWVw*miJKE-+nQeFws#m08=`rgHBj*+li zw7(sc!*5(}8VgqDR1rQV7FnB{zlyw|c?yAu#{;WuH+I_I>TIV*30#QW(AJ($O>J61 zA_fQB0!*65Rfw@874&P^hZAp{1M>~Lr(r*NGQYkWpD`G#2-&gv6up7PZUJLOQ9Iu? z#6`riyyt-x_e^nWUnhr+x%A*8)wpstk&{*QSNcJ!cCyf6mrMyUE572Aggj7~`# z-y}3Mt;%JTGjZy&OW18!Crv95?saWZ*yMhBPd-!9^i$-wej?%gRxvK5B#)jBc1!P~|&RlDGJk4X<@s z(@R~Ot0&d%ZHK#|m1KXYVju zU^4FhHHjDTyi$kjx@^%I>sH3+;;FzDToAgd{IOXp)`h?Qx4+mc@mf5aOSV|{ zTQGflonStNDv~~x!A>!x@|1*?~>*C(JYx4*_gzO><(v5=xKF;T~UP$nX-SS zq3b9CDy{$p3QZlFGw|$K&N#%D(7#h4(ikmpQvg<5=$rt6Jg(x_BuHfs7=(ej;@u)t zdDAJ+TZWd|WO+M3!7UZepHg4SUbYYraseoAS%KJymlI>BYj z=A*xN?zOSiml(b9=^Xu)+dz198b#ANo>5LG|-EUrzemdFhoQ?+GF;n@6BV=UZB}2WM!1 z89_=8CKFtxskH7yr7;7e^1wGnr-A!W=v?73fdaCXrA-OW(>+(g$s|s@8Z!vTm*6sW z_Uo-^5qn%z>BYeOW8Xku?W6%a?S>BcF!KPEGHRa~hu#rCj7#Niym5YbSFXsinDoVY?|NI~2}+aa<^6kPnqAQl%m>Z$fX#I68H;ze3b;kFr_e*(erW>ou8 z0992((DF|`2ar`Y03P)(ysQVLDg2YhQ3F7_`kzQkQB$`mS~r8N2?bt8l|r|wT^+~4 zSF`9QP-LtAiw=kI;Nfx4-kYwlNHv)+l6ingWkYWZ;uql)IFpioSf#ZNp}Bg`w{3ze zv!?Yt{8uD#vixcA8x=M^ zS|o4!fLGX8a5P=Q*}ORCRbAKEM^;y*fnte9dG)Xf)AOruIQKVhT-qifffoQXtlcjN z0J*y5MK1?QsPb_?b`U4VA~$!!1{v5X%8JTKOCsC}L3mTn_i*FrWmVWDP*ADuCtf+} zU42Mqfh29R8`ly>rd#!JN5 zammY7%xfZ}(kgT)kxc3=t@fda(DofdeFaw{j#rHm(x*8#7cL-GkZp4$Qo&;9==-Wm zG;TNWy>>zIUV-zoF<}2$933ebJq+tDpF43UgL4{jSar{$+T5Y+>a~+3rOpdn)06YeQpRl_$ib-oTpw*(Qf`c4W5 zTph{wZMMBWM|f8dn>m}y;S@WKy@j+#RdnZ4l(!ve%J^_nOu(LJkh}ke?!4anaue;n zc8iG9Oq$rNjNBY2kWpm8o#@yTtM_XZ`anC-P06Mgn^{6gZZ0ZxbS?P@Fwwg_=Cp~N z7fqbrGlgx-B^dt%N>3!_1@>?n)7q=3puOkX^yg>F?tad~cj$zvpCF>6C8h^Rf84b- zIBqep<*f{j{S8TX&-i@{S26Ih-om>?^jXiBk@tSC4b<%Vc1AWDFL^6H_aT$-vrfdZ zmi5)tE@c|-ed=a~@o!jEp2e~ogcDU|ha*>zTh^x~~sKU6-p;hD3C!k1$ce7%JJeq2z98!3F%P`2HD9G4VX>I)<=xmT^rM7gmc$n%QIX!PO znXwq6!;t*qSLr#UCB#?Lpvd&2n-aJv_JwWZxv5%*`a;hDj?6Lhm9iLZPt1W8vcf|F zi`d$92&R(#k^8hcYSAEr$({4Q>PR4HVN-WQezMOQ7TW!3iWE|MK#At81q85EvX9lt zyO|5$5@L78h89*#)*yc#%9qlN zoD1kJ5kuNlL*H76^o!zdZ?sE{F)kE8LS<|eJL~WxnbZo6kpTE=0~PcsDF1`3Y3s~b zy9F^8QJAx>U`JI0k_T~1e(U@yt?}Qi;0lqiAYq+l6ee=jLF4H9=m({6ZJ4=DY{tY;Qf6vo2K6$Sf^q_X0 zY~Xd~+US7mK-s)yY@pKp3dYJrkkv{=7y74+tf>S#P2TX@7!x(Xq+nPB*v^%{z16eC zt^fDM|JPX*%nVu#0u_qrWRuewPnBJq@A5bZtolArq?t{)5ae5Ke&x>7G9~ZQLKCRF zh1lM!!h1X>77)lO;ikJUZuVnDJCDc@Q#gK86(^6zs6;UR08V%AF zMz{f4sJ9x0psFE_Pmjc^*;4gDiuh+|&H7#Sjj_xdIR-m?Lx>nzv&Z(b;&PV?pUqVp zjz8Ll3gs2{(H`Rd`c!CBRLLJ#9m189s;F@p!geACp=BaX(4sN6pZ3vu=a=I0Tq`Qc zC_JxGFTN+0Omo7kSj*)b=^~Rr0qmpAwDtS+^3Pb<#ZvkC5v4#~l8S-py>lZQt$k@}atq0)`1VPSS;vE>*&4c_ zr_G+b3Ud)KZGfA^-@J-@6U{SEM8Pkxm15iaL5hhP+SJaOMHOAwsih`-T$PVBsOM80 zS*w4_N3O7rgcoQy*Prm!^hNCJozzwGO`Wx#U>41Gd#!qJlkfjvTTIMb_~O9IVfW*^ zSdC-eeW!&-i^9e3mE4{2dds;~1+a1QxsidfWbN{}50CnOVYWUIBQl;1V_8C&TSm6~ z!Xk&lgK>WCoa$}Iy=6PfQtmrSYwo62ox5adP`3b=7yKUiHM~8%DjA--j99Km3|&6t zzH^sGhSoPIK6(e)urGWdAY&oXillZf*2=#G6@FaaG3;_QDb8{6q2?erzC#?{n#qQ0au~bd zS4W&(U4A_--yaZBRVACY!n!5JQp_ydjaAZhwzv9xFPj{IbU<92p41r4CPfPkKjE4~ zj7y*m?X|OUq90Y)0sDk+1IuwNbss|YB|iBbd=jq8(K7*<>D zQj9JAi{ddzWCT!49Fp};3*U0z?GG;fG>(K z+B}}0|BarDhU{}CR;v~0X5?%p%I~KTlKp7%+hWXjy6wWHgqdgTxp`fC60&-IbxSCl z{$OHqT`T6&gBiX)dTHcq{Xip;?sI^@eDRyJtroKnPkxthrvmMKHkfky4G*I`x%QnO z*2gQ(xcv%9N~sv&modgm*-p2DP70KWK6=1f^||dxZ^2jZ!Y6Oj!FxW-cY zYVF?L-XB9W-mz0}F{`^E;z%WnNO)u4H7Jo(ziG`LIBIr~mbctL)GI0Bnh#pu=N_i@ z95e?-G+-3e2?P`j(=`7ZRMeaL0Rmo)bn(DH4vv2}P=ifuvd+J>uo5+WeXLbiU_wv& z?yn6sU|Rz#G=)%1Is_6=`H;#`_}4jDdyJmAY!`ZYKgShkwqv0|4E=}m{gUK9KiQs? z+(SCu66kt2^pjO0YriY^t+tPWiS&cI_^F!HQIyAd2H@li=>_?dV0?~=(n#3SeX`GkLOA}w5ilJQA_td)+!K!xP> z%EOIoOxZ_j4GP4kRczTPnt|dKw@BZhkE8w5*lASSMANAgv8HBJQVLyj2n4gri{1u{ zT`;BW;2JS+XI5b#EuBF`62a`*7L?I?4={0XvQO=Cxc1dJhn7U{G-5rt>!#;ffB!`$ z6+xntM4t}5K{zH}&SubRud8)s?oNDcIx$eEQPwAzx49g=IecTJY!S?GyA#$ky~*?m z6YGUVM`n$v6%saTK+9-Ijb%VRrZ?&dESuiDd$_nVaLq)n0C%7(0dPIT%KZK2y^F3{ian55f6S z_Zv3qB==pwIX5k}PM@#HB+uRpkkQbvV_7G+caG*<;~z(I;wBcI;HQyee6yP+$H1)V!vcc3|~)nO&<@p<hh;2#_l&~BIa@oz!~K=$2jSKup4%XsjDsRev@?~)#Okg-g7m}TSz|o zm~8UsO><1qU!_Kok`#3f%Kva=6!Tt84-}|`ixIHAVhpmas7O&}6w71se~g%0H(uK5 zDTE|!ioeu0O;s&SiePKx?#JW?Qs}2=2pQgz0KjblooVy_v@ZwEG`J6jN`dX<%8PSq zRQl9;Wyx&b+A@rDU18+LGI4P1?UhziB(A)Jz+484&>bD*n9DwAdmFS7)H?SMN;oWtG;Cc~1Qx z*ealWA4yXbrS+l^DTbx5sNSj`aBijE-#uvF^)xSdwXRtNqkf|c7snf>5q{5RP*K3= zG~hP~ud=7m*v%Sv6U3UgSFdD5{m|(fUFlvN{Hd||iNs@&25y;jub9fytE6!0%R}KIo6+<~z{1pKEnZ?QHr8 zIAQGwxb?%h&WtwGIx=mC%a29{%qq66Rr$QN6KmNHgf-=|G4C+jY@As|w$v%_IOLoc+i10;N3x zt@}UeSF0sxE2_%`70b9jgtF*DbLSmhNJM580vCN+jgAquV5^vXo)}rYe%SbGdYVQQ;!T0kPop9fP*Ms4kP#ea5`k@LK)7yMF*}&Qyr$p(t+I zE4)SG>ablGyDtRxu+5yOoHMMlgPt4l3u>M{TV-HZ0ii~X99@W^TxKSPLl(4LSNMXJ zfw9sf_RhMW|8Gh;Fa^=UYRIx-?`Q{f{7g!jx8AAYO5s&3$xjB%h4ngjrA;CWo1#&p`J&9WlZOq1hj5NRhZ zR8G-!aZWxM0d&6b0l~i11s`Gr6z*hW!Ws_e1&>d!Glk90!E>-I&%s;XP{_9?+cyw< zIxv2y)3a7bt%-a8w}wX-=BoiBrF0r`N%I-Z=KX*ARN5Ro3yNZE=129M@QW_hj5(aL z>@af(;35Qp3yW=kqmOQ~oux?jeTE#@EEu4Jdf2x5sn-Ag1;6u8fETJj0WpMO^$UOQ z_oH5vg#~37SO;*9hem2kymQ3k-Y?_F{||?1>YN!7NRB4xrLwB5ovoe%Lb844zgREK z((38_eXrwVW*nDRn(8`1qsin0Yys#g{D7fVrY3k5m?}cY7fA;D2+ak4&yOl zeV?q|<7TdRnQIs<)H$gq7O1B^@$7}Dx|MYvbyAVk)d?_rH#}%*SA93d8*4Jf_nbOh9B$WBcg`K=%^RDGO09}Tg9^Wzu#^NW zZ9A8&Vx-)P;rGd?QTFmpzdlMl&r3WF89;2UCFf@i%|7l*Gfi2r%tj9F#q30G4@i;6 zPRn{Vnlyjf57J8ba=gF)UBo(S^PIuMV}R>QUCq&<1`g`ElS z@NJ=T3Qsy+ltsxU)lX3DF9!mp|*m?`N&HMk!q-+G? z%c7>fJHTyk1^o1ny|kjhSn|Kgjk8kg>>!I!z!O{g;S0#-x1+t&4sUu+O>d@BE4F*T zTye4{<6PjqdM)~Q5i9ghRdYqJVT()UwDP?2b?6?!Nr~$G8%>*SPcc96y-ZeklPkhA zS-y$MizXZYwTt-aSBc=vyL!mGx1r@fYTqitc|-%6)bv+~2COSxKEDx72d!nkhmlT8 zABB0fsPO`oj}O(~j^vPASdg!`4`v*Q3-fimZvsmP&KkR3_HCqsnnyC5y|$W1V%orm zaSPcLZV!gfUG_`KRx)7wO;pWZ@*<$taMI<+x zQpXEOn+~OI6&2(y7Mp642i|AZ-FlU2cMgFM63t-Ka%f_iQ>tbYU;#15f^bZt1!fU; zV~3`{)s(C;lo;fe|Ii}htme77taHGTUNbXmDZ2VYPuF^~T#3@;+gYEqNmhX?T4PJ9 zRnz!HiXNBAjE#K_uvf7E{8Wh{W4+jqIKQ(R4Z&&*<&A+889+_hd(KDxD?RB;#UM@S*ITF}Os>bdX@-F2 zbE6a$ArX)ij!Jhd`rB%?INXm*YwpAR#CgE|>nf}v3vOXCD=g7b80hDGqgcj5Yy6t9 z4X3F1rXK#=vmnW_TCN}v{}z6g9DN~VjcrQ|OyJLtKiO$C%W!ewQK4^~gs%2&F|P zIBe%-sKet8z4=y~lU2-o()M_YvgyHSy_qRZbqPO+SG280Ma_K4DK8i_c-ilR)LLn-R{Rxv;%%W;eL6j8>4OjY=G{uX!hw z$(Xap-oR+e`91XivGkQuQGRdNpdhW%EnPz+r6Nc-Lk+D+DUEapj?&$&ba!`miAr}3 z@slpeVaE6Pf8H;;mdhpJJ@+}+-q(&+EoKG{J>flh_@)WWLf|mG0^scd{rgMg_8>gm zxDc`;P*xJ&FhwTvZw?3Z%8IjYpL~OHS-n2`5OM?`fyQ7(VSWB)`nt~M+@x{*8H|Bl zvg+>ZM(lkLxr0FkgPwMn(Ai;mQ){GXHTffM=j(CGFot%Z^D&D{%dyYpnOt#I^?Pz_ zOv%(Cnr#MRt2U{f3FLxkUPXSTG_MH195ALm4A12|NdNWuAiug2;Fuf$G72Y*Y#j1O zTv-o9h}lSJeA%SFqH!*7ws_Y5Q2(mh&EXN=y};qdz1BZ`wm^yU7$H@ARgV}8B=OT% zx@R2j>&YWY#?Y_}=hOSR_1&B4*j?$6{LtQ@t?OzI=THfrEDDa-4dPB~_7=u+;g%|C z_gtASTm1!`ySaFwLPjIc9H^DUM>;*#z2-9EBT-DnyN^R4?ZL{WR_r|uHUak1>XI$V z=s;R?hjP`SWoRz3rwzT!Ai)OiB=e}spuvN;5SZO*7sHu8re@6C;UA>&V1!EQPkVAD z*SodGZ^hqg1z4jNlrTJ0?GnrZBGLz1D*b!hU23rEJ0lSF?(o`kdyQPfP5sF}tgbcr zK_px4x#PP?k8NbvHC?3+@p~#~R*NtV*jgXY+s5WHOY#@%dgI2M_X5c3A96Ym@IFa} zIoN!Gv9zX3)v#2JMBgKch;@Fr-M?RsW-}IHQr^4u&b*p8Z&+J?`=8UBb zF4+43q{1HJL;D9u>d3KT4VA)hoh+fWVYF&E{or@_UyQxhMhP=76`I#1Xx`OT=_87+ zQ?OUCaeJPbXI3i_E|v6!`!B|QcGi21GG;avJ;ebwa3|V?Qx=Y+r7R#E<3AQ+7a55a z4ZN*Paz%YVb_7K*kTcU8s#Nv`~Vv3W;d zp+Um%A3xOj{Dm*vxo~%J;NE%DzOCndmVEU}puCx7%rn6|XGvUf(l%S*XySO1qr zR_o0R`RP<6T|kuT+r^q#~AV@OExK(WUsFp6l;0DVFUAdXXMuGAYQzY8)i z#><6Eid7-cL0|RfDB5>c<{(M~Yfd49U2lp{ojJ=5^!tK=bq%GDd=&R`m&nEirLdz) z+cU@ocjrXwp!ZYI-kofm1Y?S|8Hd|QC7W|Jc*m`R@B&%(Z|!EfZK8P^0sSkFRv;))KFRTQ>IoqF z?L)_@r>~zF`&H~92EH{wST|;xW2Ma7aBuefv2Iz+O4HeM^h(EfhuFB6)ELhT#PsGo zta-x>%`C=g54nmC6&5V8p07&il2j;eet~3}z8UY2yEJg{Pck==8=WYvp!2nTP6Ow- zF@Oo2HS|+7MLp-niXu>HJ1V=RM8S0qELpz`jr|l?E!!<~38l9%XAl3D6^az%=if4& zAHBA&L)3TvG^!28j#riDEmeesW%CpmX`TALn?lX8z&-cj?CfleId@GTczZ`4W(Ny0 zCj9amDh5+qvN!8BV>A5754wfgc}h9)SU9O-d@zf5W#xb{Mp!#^SbLN;^$y-?3QX>< zdzPWCxC9bSk{M)Ar9^|TV|lkNg>WxX=lqYZJdyupUBOq`sqg8r$B+4mO}E{)pCtxG z=$Yq71xSfTb@Ioss$qh?TDzy6g)(B7frOMHa zZ1aeq9NTwS1+t3QqQX*j=&_p*Z0_w*j(EZGavHzY#Xv4}XWxcQWRt|#)Uc#B?Kb$h zSE&_y1zWx7o_DP0sQ9Sz1u(&YWOELmmg8Q<0PnwA4^PniK|Wv5*&&cqI(5%P5ReF< z%;UxtTgl7@+E-1l0l0nP%0va?rDzxWvNg7m5J}r$xq2k41h6^J=-dGjMjAL52W)@w z42&C0XSPrb?gM8Vj6s9T9bzqZa@AWLQ-<5rEFnP#&d-ZuRHpDCGNoaON1pjfdP`2x zA|qTPRm(VstKq{_C$bk{=6Qh#9>-bfBxBc`sEAbce(t|hNcIw>TOdrYOQcrdKZ9a~ zvEn6uOe(3qpo#y87-@AI5i}_a#3BjxUp18VQTbl_OpMqF6X}4~P!6A=7U-`63Zr6& z{8sC?U%Zu>5P1V(*ZP>k*+ye+hW0xj?SeLV>|rTA!HkP>Dj-&GK+DKdQ{A2BbsbyF zTlz$ow_RI&3W^T#5(|1E@b}rvKcu}=vW{%AS&HVn;-t0#bMAhH}rTnG@mFK7T8_Ct=!;1~xzKbiSkr92hg+AhhuT275HVTQF zC1Yuz7g|yS=cbBzQ>7x+b02U(bvfR^hsKAHl~P-%%`L|%WqTJ{4R@!&J2j~dvzWW0 z!I`IsMTvK3a@%e@5n3m&9xVV8jh_yn_?oz#Ocf&+Orf71{Y6Z}q;2RqN~g0fCmurl zk5$X7t9vA`d91WqF=hFwvSp+^FS}MI(W9VDRRB|&ef}_MeDK?joeYJ7w!e&+_Fs%u zAGNiWE{3c3OEE-D)SlVpE<;Y1gyl77aozJxOL1Mp!TeV{oDC=Qs$}kF15}QFHO3m* z6aO`OePh&%)sqB5gUMZ_pd$JWfwbb{u9j_dtf7mlm$FS|s;|onU#V8;zwi6WDcD4Q z9t+93Rd{6-+)-j^9g4sxJpK}l+p~RP{qt&0%mtOwnRO$zV)z(OuzX%JIVi8nI&ccK99r;2>Ga9Ff$_PgipH0)mQj( zNwwV7nppSszHq*u3X@hj#ph1+` zRg1|^SKEC645y|EF%*mpL^5cp`u?m?bj3<{DAkO|k^YOpdS;NVSX?tE;Kvj!U$DyC zuS#e+VpO=K`)O_9t|h_oIR*O2o7LjQS*!>+F%kuJiTVqb30im#r!$*je&y%J$&ZyL zT$6VmiJe~c@tWY6cDnEbSHt|oRQ&|^FTX#U3GGro$#1f6#Fh#H=O0%R7zc*o`( z&!RaB2|Vg8MfAmG1=wHXy+Xcu|#JsvXDcUX!+hA zjXu5Re_+Fzqe9-9`6i#nv}76TvhV8AvohG%ZH~>mNa{bKv=Va=30W!|wxx`c_`oe| zad~yQhTm94GmXtN)DI3D@zM!y{)ODTV93-9sYTYiQ+>_JjvCogjTL8@)9OOCQ|&bH zN~Ap1RxS}Q{R4BJ4Ozo4T{e8#nkR@eP5!TJ-71_cS3~1*x)-7}>fvFZ`V?%2^iFOXCVJXCZ6Jb=TZh()+C>ER5Del{@H}>7B|3L%tdD&(trl(JH$k$o^tz z!hII*w^&V(?ywU}JK0N(x&k*&0+yb#Kx4wxh0TfAcBJkpY)4y5FA-sXZ}S0mMX3IIKBK2%~HXMV;e#nGE1@CZ4+2+6>cHkfDt7)`4+oNzh<&)HJ;BA2U!9= znnOQTMta$2s#Z&z+ImuM`HY`bf!HQWltEkODE_1`PKG@m956N)vew}scV%IF zb`Ju9;1>U*usO(Gj@QVIG_Y-(wfEM64#b+qDM&At>d$~le$fJ}ZHT)6bcBvJ|{2#{x^!1lEbnZ|iSztmX<-e5+``60s%NEKsH>pg% zk`bIiVxa0qITI1X#q`dRfh_*h)m1F80Z+kK-{P1x_BWueWus5WStU{c8 zX23|i0LX@QRLo1pFGP$5KXo0;F|uyn0M9r04rwIi?2{{@yQQU>zCet#U@ zcVI56%bwse>&Ycfmq;Uis&H*-!fM33*qP~uEDE@^8+jBiHb84mR2r4^=TgY0@c`C# zEr2#8y__QCC%McIm*}q_T?XrMce1!ZX2dku7ocNL>!p|iWq`EU>Y+k%yPwNW~e{>Q@OTpnObsd z_2Z&I?1oS~D3$Al+f{c3kL}~O46s@>Q?cP$)0xt~U!S6w_Of3UH3{0Z;4w_!YxT}% z`pdX`Xrr|sD!~!`*GaG8h-uW41slG89kfuRX_ilqx>Ub40DaV$^l9v5C=;|ZTa}aO z2W2dv5>Vem?vlX{##?Gba4XZ+S-E7FBc%9Lr!-*%ilo@4EfmJ*OBzaLYQ1*i&C>(h zyDqTWWnsC_8%%6u^4~;$P5l9s9ix7LK#2=O77b3Qi0M_>K2s&&?|4=MVv1|P7LuHA z!>qBd4{g(%FGAnLGYBjiR>lWYcOdwmTa|^!`E*kbO$3vxJ1jWVU$ppdL`}q&8Izad?w*YQWa+3~OdvAaSwv_N zX3Gj&XS<*e8&SciNb~;e3McHy@aIEDLRn$d(4{CKG73E%p`XvoZ;GE8u6=7!A!k*J zpA|+!{b||sG+GT~QEQfx^e0_`xi?ebgCyu8a1a4m%Uj_%+xS6opD<-6$(J!V@Z+Xl z0+Pou_|*@BTUfbtVwztnMnh88c6XkXdOi8hHTT#-BK}2$EAdua)eWlL@LrG=eJz&g zz3SOSU`(i=Og#R=Z4;*&#rfzH$Y#NF{^vb9zyqec8vVDbz{uC2@~?`-9h7$gU4mX1 zXfeUxL!=PZ=o7+*$l-sdxAE+YpZ)NP?rZs;erzptWJ)vQvuu&?99`}K18%&UHlzDr zwU_fDW{vao06N%o?F51+jXi05lf$*tDWBjcP}X?d2&v@dy#L)#SW?Ow810_WSoANn z5J!uS_1)#QWnG#cbzM@exy+o)9({U$pY7a!8J^;FQ-=4-hWK01o1(|O%7rzmAx*xT zdrqB@R6}D$I{520@=zLPc$eu7d=nquMoT~v+|m-ir^7Q??)&`Fw)|fVrVpjLhDyI^ zbD+uwOd{mqQ^j&<1`~N*3re%S=+D%&D6VvjaUQoZ#(8y-YN*~tp*2+E>@dJsNd`%Q zgpMjPrh`bmx@5N0c&PRV?i!hGqfOfkfA6e2EZxS5b}73*_X|JW^r&&mRz`7*2++nJ}as392C1SI!w$k zNtMy>H}uZ8UFsOnkZwb9J7e)0j{N)+u(5hA5^v%Y?q}EAPV*O*Bf(sQ$!_C(mgzV7 zsW}ht;Xjl`7@(!Vr;}m~h(Av`)qM|lc11v27s~@GUDu7fqfZR5uCL*~f?G@vDYVn# z3DjyEnzh*TSUC0QEab~-Q6-XV-DzfThmSA%GX)qw%R6@Ak{6?$R^eTiPG@J#oN<5io-;AQ2jUAKyqce|qYu^}Mko&-z@IQOnt53+FyUYEPo- zL?H}~93B)(;8J0^b$R>5>^x&;FO~7$;#vx0+<`LMh7A;-q!U&IteEH?#%q#X*{;7M z8|fZ#0C58(2b@m$l>-k8$=E48&y9`8u@oa+HI-gnr#`w;Y2-94-eWMa!lRKT;e^RO zVK^G0MJ+rMRz!8NH>FI&RX(7YD=B5 z%V^g1f7kee``QeVY`s-YNc>7ey-ukQ@g699y~Wq`>RwYoOU6IC@0$(}=XiZO-k^i8 zIiI2;<>b7%k_ucy-+k+-cQd-f_uNHl!;|9ivlFO}B{6|V@(>#xDu26 zScTPihI-?7@a-_#L(2k)Id-;)I?28YTw_BruJtcQ4}$d(Yn(Az&2*eee6cDi@BgMX zF0H${Anp2L3B70a8E^0=r$Np`|9=+1;va2vIvDyQu&rVI}XnJQTl%WBgrC{b5|v=siF zQ&4L@@0a1#ff$@V2}lEj*43%$pcOPp2KO2We9)6?uaV($7$F}pvU8mc&fedC)|C4!<Bd+ zPfre$1x$I%t4r%kVa7QxPhq4Qpi!rz&seFB113@wiYfq5C=5@-edz_k3pL$rY1Fg)kg0~B&Ac3Q0zgenCz59t4dD6>4TB7cb!jIC2iE^oNFY$_hS zO!=>va@1+7Tb+|)c=C2~5+U4d_HuUEvgimcEfG5W3{H7Y)`td*wB88(A!lP_rc0*R{{c3siyaNU^a8+GEuW1tz3)V{G3>(n zMJWov)yT=MexGF40&h{?Idb(p$>7MtRd0V3UhLk_++)5w=!dNF`|IfgoI2HGRAS(c z@_?)YvKo=^zC>1fYfI+yuIh^}O@qkV8o9Mo^?-@TfXTm0P5=MoV9hi%QK84-Wh-y| zEcuxfwN#=(nXY-U-gS_m?wrXv+iG()+x#ou1pg0jL>L|cKzhQkXUT&3L~Z*iYZ?1M z>7g2|99Gw4g5LzbZW);>Bw;K9a}6}i{QhK;^_`oujx)xIL2Son7#;_#X?~G`h0H$$ z5K8+dUva=bOiNFQi`R)M-{sJB+v!R-6<>xzX_1{15m^}caRa2H8stzG+G^X>-JW82 z7(Hv4JAVQ>q>;m5Xcc;9bCq8L_TxHH_&Y z8O`3S-669#IXSwwxcc8d)bqI#4uz?@X4`qoMc3vb3aWYqKk;V7lbVrc#9oX{W*^`w zcVaOhmmLmbC4s(_6wPSRM7QSSdRUx+Q?s(74<0T$YXf| zR_E`OSw&3Oj2(Zv>_YB1mWGE(s1?2_*wSQF`%e;-bSaGy?kKZjb~RtafBAV|t4o!f zj@-przIrj2lg30^VtaXr{rlt3iXm5MSx-+$?sCA;Q=W)jBR?aCWgibfdi|?zCf=@9 z3m~qv6n=3JP^jR!9{yC*o&_R^ene%34=^Br;xrqCA|aW}l? z@ZoXdhr*CgRG-c!VYg2xLGbBj&$v;uS%J^3Z)mMN+Y>G+8%1QPLDpTtHLF@IkCM9K zpK;Sy7i>gN3asS*Gb)cuIB^}0ieMQDqf4jwhNqrA6TgAoSXihuIL3*-lma8rJjko{ zB}<}3u^nncN%1Pa9*lNK%_PBBprM?qsFPAx@;}dW3H;OUcy1CPzCX;R7DRlafP0% zy|o(g%o6^n{^Z)os0??Mo8g_*2v|T_;5ic*4h2q;@PwVzMm1G%o5WKr8g~}C#m*hl zBeih)577gH?C~_yRU~J-+q+cP7Ef@yu)HvoWu;#jk0uP&C=g0ULPj_;F<&exLrc~$ zAta*F|7-*Nx3za9mLx-!u)};i@A&B8K+8C#B?spY{<1d%`@N#{`Ovc*`1KSvo5sF! z66wB2;5gI{b*XG&Rg@I5p0 z5;I)yyeQE!OlT1vr~K;oCNYu}%)}P((7O?2mCdc;s#Z}5A|Aynm#W_HT@4PNXw(M! zch(`Iv~f;PzdF{A>~hobwc7ie*YGu`J76_>{oa*2>T9|HMv|?|eU#~SFd2mPC+2^c zrGG?@(Q2vZifl&ZV?Qu##lXOA1K(soo=JGK;eV&?dK1DrFsDDYqPk~Nld?h3br!SG z&5XmE;5*qi#t+?uhKmA!FO4J_>lMZFBi7$9yv)Coi_|6?yxE|enH8$3>reksYSx8 zLVaOUbzLigg4}qO|5g5*+lqUG_m{{OcRjS!)(kq#ljCCPV(QmU)uc|}aW=eEIp24s ze4T3=EOJmR*$Y@oFHLNw&m)lBsawkcl6Jxb@@~u2N-9{p<{qLn5dHh3Aj%*IO4iu+ z4cAK2c&Z-hPI)^fu1A+0g#E_$2@ya0HA|4`IvDHQ0jBl72bHh9vh|5f4`?sisE{dQ z-UqAFPQ+h~2ys+VFE->2?!v1gvn70DeHw?A$j+!ys@2cGE)Z+)QEITbd1>BhZp#9r zQ{Cq@E?Z&9{>B!N;fVZs^DIs>@!XX!>!l|T^jkOD))X9fvvdA zwc{==_@-KjsBb(@TeKnJS#sRSmSJ1gg^QB>&*E_&;_k^z@{5;DwE;*Xj&n(+9BPLm zja~ZhWpb&Rgj<{+vR0+e+3MkEIvCPw7hgL>cNy&zJ)6ytXZx>k5yjQuhdA84M&p7| zD=*BK+IG1f>Gb&tENd!_dP<+OT~z@r%!Gs63Z?fKBM^Ng@!<7pKIUp#(^t0_0s$J0 zHZ<7W3{pYZpO)7s2PeCb=Z9P3tlr5cuUzmvivAlzZV8@0E~#RA0xs!y3BI5-;U1Y+1IRogz)_PEWvMCiq@#s&|lEL#J7;aMXKwgeB6X1o^Y!^uzGr zZEX@;(ukn0LLmhkIaz)005x5Zl9W>KfN=QXHd*Xh;kw5XKJ|l)0+apA3Vs0-G2+)r z`Zr%8iT&QSk%TP}TS>$Eh9*5_b)CbO1tnl95F#G4sx>G!(i2`a=d{-Sv4$sQU3G(p zeCA0CBYV>2P6j`E3PmGCub0~6;fZS_PcZmhh7W6Lb_VRVs97r}mWzL9oqH&UxBJvj zm<({bsQKLjWq9Cck5>yB){Cgd;tKjbe$1(?J0~PpYTZy@yGf`eVo{kg^^f}V-@=P# z1(3P2mj0^`5b?-9GzOGrN;brFE;;AE^ux8S4PEj5MyyipfJ#n1EFcwws4E`_5xfgkkO?MgvWIEU8ua9^-@bJk zs)T5sk$XzU=3Y`2Jpbiy(!(1XrWVzlh#v0N)E+7KqZCXbr_!5)N)TZ9vq|jhS%ACK z1g5ZPu(`d*&#bUIUz)CPmd*%#%|jG_R^{2wL&X4(CR+mOh zHJNBPcty?YlbgP`pHit;aIf6(`34g`yDOZ%G;Zz*=Oj)A!|WKH>4`VBi<<9r>NcC%t6j(Ea1`s~<(vLQ?Xnl!*Ha$L331=n`{rHOf|cv}|! zxW2bS^Ma~WasYda*LpBIDIUBJ9Jye&IpeU*emLZq#>yAvU5z!_@dL6PO59vh)d|V4 zZY4Zxn&m)EW0306Hr<)UFkAf+y5FIr*&*1=d!U#@keSuQaicx*S+N5oCgtDQ?GuZP zpWb$qzemJHJp(N12e>4jMk9l^oRiy|oc|b9_)B(Ql|wkGyLL?Ar;V5~CCXW@PnxF- zn+f(Z6+IVdMKv^9HXh;r&JstFgNuak zt?Tw8p=k%@6}cGk!7|({KVH#~35go!7^~WS`lTUW6D|$SBfMee;<2q~ic$MYuAuv; zhry2A^0|KUpZ)olhE;_gg=jS!99cac z^r<=YS7>3y8hag}Fd5tPcJSlp?(*ztZnP|1RN;YQx+TWe(D4PH)3U^LG1 z`XFRJ&7TTMe+p{={V;kM(?^2(N*n2=oPw~1f2kM$Of0}OlKTOYV?FvAb9*yLzap_R zSZRoj-o}6CRUW3cXm6SF0I-xSwYchh(bFe)Xj}qgtb<|7LA+>APJ!YXB1I5OzmwD2 zykd&nIub_dicZ39Mb+mj1JMjXiBUpauf9Ph#9^iDx@%+KIlRjm4weUB0e9Xf@mir{ zOA;6SOx|gG7d3rZXSTZA*ct`;=_#^8sY3I%Yj;k$5Y%-RR@S*(8qJYR%fe|Wot{_(T;o}kkcEkBMvJE9Z{eu`QIi9{4&es?yS2x*7>ga z>?WgPQtY;0f&Bv8`q3fB-NdC3Nerp@XuKv@qjG@z0Izun9UvIy%M|amfmNjku ztw)i%({WzeQr6822lUTNAr31?$X@aTQuH4~fBgaQ$@NeK`!M4tDj~m)CJAB_;I0CK zBj~bEb4Z+C7~V(QOV^iesC;v&odeO5kkpDlp=_bnb;`mDY(mu7xCxgNpTH_mYH3(5 zv%KInNxJ1cbGbY90bM(eMIF})9h@iZb6{RnQe(yG?w|0@k|v8f_;;SHb8Z~g0uqG@ z!RS}86m#4hYE}*!$7YI^`lZu7BPm(rho*zE`|!b3F1oC-=`sK85Fy;f{JD zq}mehsxGPrC74sw3~Li?79|!NhHLeRM|BfPd?liueE{P|)}=s3lBGar%6o~ka8(v6 z(#5P})v7yLX74(@*STG#Sg)SKxqh#0ZT-?Q=I4IBC+cFW*X^T~0INh~*|xcOE!gXW{Fy_!xI0hLT|JhvUMYtz#FEq1`x~k=W98(H zTnW3WJj*2QA3LhvLEp87nvbM5ovy3yEjs`BaYur`w9+Ia)dK9zVs~v_ckB;U$7Oig zCwTdS^LXNH@%4X2;tz46n*O_lZ=8ub)V(EnM$WQS<~brr+gLWN6^fBjokK~$oAa=) zw)(ez)g2$F9JHc6KOzXYN@uuxy4C@BAah$0TEADT?7&p`<5|%ijjz{HW3#vQS3`OO ziIGzlIq&ia1K5uQFOu14uQv}Bkqz&0<{v7Dy^thc?shuzZkYWVI#?vi^SdV`CHDW|&a{Km5wvG?t-`YT+r~`ZX=+1V& z^xh?wRk=dQWpW$CS;~C@?OS_UOT&`Z!wz|_I3E8S62_X^8llJDyj(*!;=tA{A5Z;- zV;OagFY~+mYWWfz2sOC8nDQ?L^H=xYGmi{`530E`TN|3pS$pr74JSbo{(8asUn{$)0oGlyb) z?Fwg=deLLP-=arDR;HH*ucWzeWFJm^VSzt=6bS57P3WIwj=EM!g^t=J(5^eXfUk^P zZ&3zie&Ea~&3gCz%HsObO&jY_X{LNaNlkAViluKFl|Ho#U|$3Qe?<+Cmn>CzG~5zC zqlk*sROjpLxE;}r@{)csQ516HbT`>`xS`1o-!D!tutmi`Mn0@*x}$l^ z1y!$a`kgSmnqSv~$gp%Z4fpO!Nw_0E|2G#u;Iy1TzgfY;O(6Htv$fB=oMg4S{?8Is zb@c`YW+uYItLMB)&B~5?q6uc&kY|sse7m-X5| zaN}b(h0Q#ph5|I2fKT89YFhK;LNNMwyd+Y+WA<&Mu~qoac1Fs#dvVOZk{RFbyzaml z5BQWpexOL`pO8A9l>zpe(5k1jM9e?Nh4V?Eq^%tz&<1Ab3*)N@a?a9 zNb{nELewl_g|yRX_8y1HB+FEGL;8#2BckuV3#8?Ws4M;(bl(dF<^;%N)9>;Xq2AkxNbZs+CpIlw=G zHT<3jsu3+W+{;Qd#r%k!Y;LOO{?ZT&Zh?q91Fnx>CcJ(u!Mv($d4;W0k5*90JFpnjV4aMbzxWP`92?f80UqdHL?R2;6ONPa5w#I$EykU* z%5^?gmR>$_^>0CG1N;i;)q`4mpbKEs*d36eL~HOC-XV91ekMV%n0Y{UuL>XN;6xv3DXz&*{ICyzZf;c zDx$G=AIki8XzdD#gsr+ozv8KPEe*@ccoyqQN&eSG^R`}abp=JYrNR5 zux2wdPgT27nCW()i@jh^fFN{#`3huT17TKe(iRy6)Lqps>lYEzam%^2`?D39#CUE z*p9ICIs8#4_H60OuHHE+4(Em|SwVuwid$xpho6IbDIB=VN^A9+zh4oKWMsSn)ZYEtlUWT8*#;;3phL-tc%A0J!i3 z3*G*e5E?~l_-{$>>aHeg!~W}}gLU8W%}@_dTiwjJ~n_FNUqreLEwwAvykk&}X3=A3b0P*~fh{yKe`bWouai6>tkzyWV zp7Os?#H0z8)8`}9h&^d64;FGLpJSx9eB~lOj;%^Sb^>ZK>oj^pz#H<&sNUE+F!tC< z{DMVt=2qPgoi@F2TiZ;ytrFL{ktX$YwpR&#fmK?iT!g}Fx&e``ZBiMKemS^G^Z6!}36d1QrZ1~|Q6HOE}hMV@}D zw>;3VVgAq3P1mRir`mCQ@9lSr#`yjUS8NtTg&%wHHbbdR3dQ7I>6`EkBWD|8_80E! z5Ib;Lcmn)}^I3@NIY~MGMdboJSJX^nLH-PfvO{2fv54kceb+vMsDk6Ud+0CuyUmJbWyb!6!oE*V%rw#g5x^PC{~STb2=w1|BSqWKECddT8L+eK+dy4uS}P^ zd7>uVJX9qX@{EmE35qp`-hZS@XMQj|ez|FSU6iT9rb^{*txiQQ$_9ogH#OUI@Cc|uAb9W~j^4?3a;sXl*wALl9)?e;x{Nim3jCJN8Jvxq*msRn{ajak z$Ovx0xUAK;1#;4G%i6Gw3tlUFeDtZ*jHT1+hXF%WQDTMT!5cI~)K)}<&wH!?&^J-F zmF&Je_rxvgIz+EbMhCYI*njlhMZ?Ea+!jhirt2r@8YhegPfSdR)?J4S@0b&&ui@@O zpU&?hBdu0PwT|Q@lis;=f8=~NLbw-L4O)0={JKBLrDqy~JV>;%x8%Ym#!Rx> zn$SmVYPf-$=H`yBRz6f?Fy)@QZG7G$>TRa;@bZFQyIGng&<`;%oTOp0C|;+fM&M>R z{t%xOuhdqx`I`KFdF5WFpxRHQvudRJnIXP%W#8axA_}_T{43^q!R6O%u)?3cXh;!w z{81@nOqGW+G*Q!kB*hDOS|XwkfBlhU*y_CZos6aA_17Z%2m#$xO9FwqLev?T^*s-I zjd_x#JcR)|t>Aw1vWHmU4JB(bB?M6Z5D@!_%7NEk_`s@F-+dpn)&1MJnpb>&v?xqA zVET7%OH1bbiD0y1r>VN-WCv5zzOv;B!&`VQn4`?LhSDRa+SjZPo@3U=TJ%{0>vPi zSkUV)AOoqA>&>I1uk(@k5e-urEfRhHgTVS3R&`}tb~gzhzph~;#V=F1(rGPLf$(dO zBL!b&HSD5VSkcGivR`lLcwq1HNXnML&R3t-NbR8hW0^mj*N8Aqg0J8gq=X@w4y%Iw zGFi0O^v~DW@9=lTrZ?0dt{1qgeK->Sd?j#uUYZ?^eQohxV#{3eLE6$K98o;QH4L3x zihNX3;W;j=o8cDqEDe?(KPr{z*APL~7vd5Ijdk^HPs=q#yGk$C%axR+lF#B}K+Mo7?`v#%g za@AtIH+=IcDiG;~WusQ1LGe|;JwZ2hh|bzinR>Rym&MAg!4L=;c0?2W$#DU+xH>xLAc=28)|^dWqIedG8-2yvv!*RVe}=5@#sm%;qbOpi5w z?I*ejS%n))n?0QLBH~Xxu6dNWGL;!ibS;TDIG~vmHhO_uOXP>%xC0?^&z|$eYwl4E z28%W_SOocq9Lq5JBEuT|En60Tv zf5vIz0l+}-(^_>$}T%Hr5%ZwQ&fX- zEH;?|tS&4*Gd6TnTP=ivf8Jv}5)RS(!kiH(6H4^J;F*BR8d-^X(&XqQP38($R55{| zs#i`;c&>SCytok?BlpE=?_iSKP4YvvacPZ!k^vQlX(p6BXe5X1NNQ29LL)O$T7cr2 zjK$5t=Rc))AN6p5aK1^hg(rOe>|Mo1Td5u3%JVI4+*5>uHSm7C{KvN{Y5&S(fjJnk zo0U|W?K0bhU!a&ZFKb}OJnzWmjl@NGH^UpShy=3-jB-i{Iw29Y$;$$i_$pU9AX*@j z^4*`ol~1zwO1V9#a=z|9QBOusz9_h#WJ}TIm^GfH${AK@K^c9@;vKl&NI<^SglZlrtVZ9ewF{g z5p|LncgujL3zN2DFeKMb1^hYq0%S$$PvS(&98Veiu_b2pkdVH^!K|Nq>@wPguZ-3v zOYG2Lc}#>$!ufiJQsBAz6^i)IB9r(W!YBPa-aW`7#P?Q$&;7;l-9U6ImF`5^)z~<) zwMi4=cvX1f0Oul&99Op~l_2#jEHHE^}NpH}U+LRbO z1|7`GSr>MgH6xQL-GYBtqs!*}PrH9_FrX4Lfkgx2nLyAdlhNI4LA})Q!zr@nnwNH9 z7YvyJa!Q!1{qM{?`xoXxPvkDv$m;v`fe+;$NxX*uEH~`FVs|i3mPL5U1C~$MWnmm- zm8HLQ4uS9Bi*Y5S*}Nnv>Uai9DG|G#=)gExx34s+TOfTp421uj8F8tJWTu2Q;Wbjm zja7zk8BVm|bKmIVzw`!&0b04FeQh^g&E?{w{yKb<_D&0A&R9O9P<}QdX!N0=9RC28 z*U6<|XgjCJ63Kt!sqinH{ikTRd_`{Lt;5yTu!EIU1H%CIUkoFL`m6&1N0K7v922?B zdWrWS!%zZnkcWk$^~wM8djO9Hrq~pq1_G4*ztMIckPHT;MFqMSn2Yr+efYc@_2MM0 zhJ=v@pYcuxUKxJjijMk7$2U7Cbu7FIfKWVq1z=I|#bE;Bql(IIU<&LEOklpVa$w%_);p ze#Pdhku%F6YEq0YK5yOWEalQ!hA7lAH;V_)fGVdnUQk5}I$Kc7swwPr`71o{FGdx^ zontd@gM4F(Q^|eFSnG9IMe3ae+H4KAn9A2uyAwk4`gdK~=i!4clIL;5pC(ml;a+LX zyrEp9rFM;BHs-|mT>>$e8@wpQ(ir-nE&+9g-s^E6SAzZWZF8nI8Mff{w$Y5cvUzj> zPa1&xq_WBkJdpVM(b?LGH>M0SJ?7|c8{c*uPV8u z4ndY=p}?Coe65_%asd}n^>eaw;HG8{QV~+(9?d#+x^oI8YgD1sn0Bb2b*Ux@Wh3)i z^T|OgORabk!&`UyBeceeD~E{waFr~=Vn6LBtLI}&0pic}3f|!V!hX2K=Js0?MOKaz zO=I~?Xyc(16B?j^WN%PkhfvgAly`R!sgH7EMEq9bHUjJ9gdoi}B~PRQ=}1*H-+#Xc zysP}Z9kxh&w@o}>M{}tWHl~-Lj%n=@kQT_aM|Vb9M=4;BeDGG~!P%r8^-Hd~u*3Df z8!%cp(aJNGbAGvI z$rI_N=u$#tK7UJ4&=QqRf_afm)l`8(+(sY^(eo8yn0TTK5 z)^y$9@}re;c~+|i`qt4$;?1WU!7sN-j_{#u-}Je6apIS;w+OT%bguT|Il+w#_l&1h zQ#Z1B*o0kYT#kE8-`19;8~q*(=$?J+5kNof4j*WFLTfdk;+Y<(-9umgB#+g8{D(F{ zCj6*j;}Yz5qt3MG4H72su*$1?omP#BTc4D|Get)zAjg(9zSiE|8bhsF+fG~d4ocdB zLD&W^kw-Su@Z{!FQ`dLq!cO6$3|?rf-V*tKUi)Qee@M<{_jku&O9Z4XhVTnvj}D_w zrF?ppS_FF->-4&6Ny7(jx$BF66S3O>FCG4jpx!A^l2x;{!&a~V)t8Bvb$XQ<>wuse z_}^dK>U&*Bdn_2I_|IJcp6nX)9k!Nm3gJKPX-h$m&*DCZKNDE@Y(Ud%vuH z*_W>F4ess@+7pr{7*q~t9&lJih_t^`B6y?~3-d=$F>gq!(6kWq{NNq2mVJU9L{)Y0 zwCddav2KlQjmitn$*4$*t0(o^C@X?fS-t3x0~0vQ7G|RyqmY``>@51*JLTZ<|3}kR zM>XBPeMC?JF@VwCjUc64vfS-aNna z{^L1%(BtBJ-`DlY&Jx0i*UmXxe+XF&BMYJE`xE@E>pjUNR&w3Fa|H9SG==)LmiKoR ztC3{9pHQooot2%nOS&r=?Y29n^+o~^`{JpRyE9)Q?`%?^c(2cD=vH~TF}>QN2NHOc zEoQZ2rarUF&+U_w##Z6SrE5I;=|F46gOB#7JB5A}e-Y&TxC z#9Nno^$}0;q#ZRnv6?~rY0CS7yG#`JjO8ECN(mLDNN%g!s_jmaY&Agpu0HQ+ikL$= zzHuTct*>=qv8A!HoUtXe#v(;h*L(w?q0;s3unrCUXh8b4CnZty${dVI-ySD zgpKAT{3+jt0^RvR5}8zUPSApfqkZwG)J!D>B8nbXm2CX<8=&(|{7Gxni$QiE{C%n=%uPVBG9I%ZkprEba3epVYOA^3mjAa_y*VtEKCXF{e0}ruKE2D;Sjf^T0GUH^RbNIHJ#o_o!fS5Mf5&zvPp5eFV0U8SnppF za|v|>_9t=hQ-AiMjesU&2geX*+{FB&SG5|Rh zb9o}d{WDxQ{zt}^F6>bi1}c$tgi2xXJn5UD*nBVpKC9fw?Deq zOTcyZg%!vBu?)P@fD-jZyIKn2iViuG5ZfHD4Dj(=%lPe?-bXVGZ!4vqbv5MX)L3$C z!)Iq^y6A?|62*j57I!spHwTvxRcuA+`BW}FG^F`1By^cR11pP!)5QRfWX3=jCT=fq zz6}2DAtVFWU*cYe^A9_&(W)!%b?7G+rc&ClYFBZkD)<_*;)Y8%jimHE#KQMwLZ(*`Vw_70q1THJR`shh zr+mwgExxkSo-qSaEVy^WQf{#%NxcAbOAxd}=e*D1E)!G{hc8}=r=D*Q7mTe>r7)$J zl|bqlf|HI@^Q8lf&ZER~CQe+36TLwnqxWa~1D^zSZ~XH%h*E8ed`l8CuYyCo1NAMS z2FcG>^EL+*rM^A%|G+9a!>Ab|3y~hWIcDEDs*6K|6mo~81rVQY5z{c0@aPfN(IB@} zhcxK1Ml|O>Yzq0ujBg6bqqL9HNr>QmuCX-fF#WS`B^CrC);@~7TD*vo#VNF>iB~&_ zryW?t_;*Ge%#6P17rD~&)p_^pdP3Z=XD32pq5JOL7UqOoO!E8sLoR-Y9uKgC9D2qQ z9y#1ib(ud6Ns!8QMXZNd4%TLmw)D_olX0cy8T3i~`4g{WGY8SryCtjTtNsY&J%S^6&GxHy`y-bt~VKfx_bYp-24w|F*D zdXHOqBI4W{42P1oXZ6>XleL0*zQs!QigEeyHJr~R5vQXfuomL5ojh0-pwr7;WO!YlCXVZB6P7GH zUA}SpR%{H0uUJs_#6h7>gTnav1i3}&)oI8M7QR@vST5>vA+4V*StFGx^M(yuv?6cE zf$gar6aa(e0VEh115t}>BUO{>BPlE#wCLTj3a&CzVK-5@QVkZ4QVju{u4D-7NlAJj zqg`2x7qUzQS?Yu}p0UVsf$M*|56U4t?$9&@6NPH>?p7{GoF{?zX%TYMLU5c^=e)5) zBfkn!^PEBV$bKoBOY}&A-;rOlzLSwHy_drUYX-usFS4^i`zXvr)UnRX;HrZcMDjCC z94|(?Ivv9?h&zIY>K<8F@v5Shaz%Q67xvY}FGET42muWnvFj%_xNsV28 zF(f%G)hI;fD~@5T)Ff5obPF2p;mJaB8#JLi2>A0<` z!)RGOa%pkqh==WGH|W9IU8GOdu`iZrWeh8I<4%(_j*aNp6Z^`END{)gx*jQPE1Y(l z#v6E(q=t{LQa^rYQn9CX4y4Q);o{}3>bygj_ZbgdcGtFPo?XMWnRph9)?Q*zEpB!)*js2PZ?` zzSXLzp_x+`vg|)?#ZI0#vH)F%?%BeaoQx8!1JUI_=U2q0u%@JwgtLajx zZ-o5@61wO2`Hpv%uPw~py>cW#x$=HINx+u_63@S)^P}=&90y4NUGnTRjD>11FeO

    hB^x%3k~RR3dFxg^!5h^wLn1pXo2VR*ahU>DqadJ^7;toiQe; z0n6S8-mv}`t2Z$KIN4(g(nR#S8x&T1qm9{of#ai^DL+dm5%X7!|1T)WjDjxPoikAX zOh8rToM3c2ZH=bwe4>?}72yS^9t9qzih+_de}orTFG{tu?lHu~;^bGo(RvDJ3OyzR z(;ft4al}Y!9KH;rp2Hfjr*V`UM4_4Ff)QlcxLI~&^2u!^!UZ zoCcPEs*Um?DT|ewR}0cEOy{N#9@Nbd$M|2+qc;bs^sGAFiPMv1wx$j!$ z(^BVYQ1&A+myT=^E7?bEms0zwQ(hICB9}_eo{tpAnt1j7bcHUD@FFx!_j1W*6ZbLMl?TH*d5LoHt36rD6(o@-6W2 zg~WG)b^1*rOp7>E`u^w_eNxp7RvFTQeTVbgSVIq<9C%7m)-bUIOmmN_0k^P6^@L5T z>)LY6psTambj+68S@ySduTQZYbZ_#wUhM2Z2kFj-!VLcQvqGC+MfiAjwD0EG8ihJr zUFG^(e#K@w@lpd5bChGRdbwi8bce*nxbu1PeVd8i4+B4z9RrU%q*+Bc=|vLOwmWR> z0wDIQ7yN-WpCM-%DI}>w)`eLA8(N`w7Bib){@voz{Q0}KY4mj+9o^s^315C+h`aRY z$K9^6@a1vh>X#KubAla1oVlp=QN{#eL4|JVT zY!5o$#LIlFU@1%?KwA)FL?g=YrW+4P&Xh>abO!dfj;T3P2`M(5NgT23Ic?PEt!-az zF)BHq3w4mYVU!aWL3^#RN-{~N>`O>$CND9oK~;WEI39hI93TKe9*MPuseupETqH!6 zf3~pnD0J~$-qa8-+wCRfA_Cs{RHj?IDXyw9+K?|w?6u$gNzOK%LKyr)_yTRw_SYkS zlxqoJunT|}pueli-+DD#{S5!M1LI{=XG;H7PX5u3q8eS=>6R>_*%shf`yFpNzyI+s zJYWIpK3ykf?gYP+APb=Nv_6FGUUT#_^BEn^Z@Bb;T46^|HDXg^?JOHITd6|WAp9Qf z4X15iKXdpiRn;Ke*EiHtR_ok~@ZJqF91z3Rojm<5v+=ZV`I<)*P1wH167wBRXrLQc z$dKDkH@Vn3Jo_f#g)YS?a>GjHOT~tN%1K`_CLBhc+|JriY#;pcaGsfaLi)0=PDNYV zih53ceH7m)msy0j6$CifGbX^Qu=0VqkbCefc9@uLBA~D!fahDh{Farml#^%v%At;c zJblJ8vlgAc-=~L|Hi&oJRkj!xwopw`i^ zmVt{j5;+zjVQjY`gF!Se`SlBw4A;ldF0hz;>C~9i zUFd~_h|0mB|E6%ix)a(5X84}klPV>Q3*CMn;ujsE#1=N6pRbbxi$tJgz~C6WyBO}V z^2u&VeMr>P@nN2<{N*GNBZ9MDaePK=O8m9LCpv5GdQyV#N3$Sygy70+L*kxa`7-1hX4qe@`lYc~ZlHecAunr%LeUj!ip&dQ;VReCe^!jecW$wOq$9sFm z4M|51i6gkurgcE@?=&nA|Cz_YqDU8@S+f(76zI)& zU7SUe+sKFFrR)PXjOOt3D62;u@3^6!kb}KPsocETmLtMt<){u*2O00kP6;Afk#V(D zjVA9#)I+vEgm*3pxdAnm_eAUVjiPCWW@o-|NmYz3+0vKMMSv_>#M~}G?$Xn_bz&g4 zqs(<^gVEyT=aN>xAtK+RxxZC(*>J4E+do_g5G|cX&0J9{HfUv9pa|% zs0n}eY9p}Z!v6>+3}%6g!)y*{=*kwudR8daECfG2}RN3Hw8_%`h=%s6I|UQ>`H-KRcG{S@k`vP*y_uu^qPBo z&)>SE32!KyUAne)Gs24oqcI+gYS#5Lh&IAQum$xjB=@QQ!Bd8^$FJq+bfe{BIkb;O z@S7v}6oQvlT1UEWW^5A=YQV9uDG=|wkME!vkV>>qiALy7Gk%i3eqbf_2?LA_lhOY*t0~IQM0R z<)q6=HZ$(d;&2SI@Thxe=yy`#TlsMA1h$}#*%f2bqW;-L$ zGBZ8H#?e9)+s7ztRVBjTEO3(#%Eg~nFd0F%-aofIR1>t6ToQ^FpG*JiQOI)Nlp=Xs*}J}0Q@$u zvTaqIrX|8YST&{41`D4{$aJ$Ib?NpHWp9tG_I%q{XX5XuFj{wgXf-D@^0tGbEW{(@ zdAL8gP{1BNh@%k}v4DBJv`f|rn;7Fcl#Q^8DH{sErKfZ^>Dy1M(NabMk+y=DjD&S% z2;3Iz1b<)6qZ5eU49FQDq}QhvyE2lF2Bs9;o=H#>>XTmC>B**LP#s|~xcg{K^kIw8 zoc=G2&ePat@d}W-_&0!?pdIsu-AK%10`Au~l3pV&x+8NO1@e#D=c_;%NTg)GNW4J= zT;Hqs19in$mM;KEH%5Thh)v%!YThC%<+<~{)_df0{BKo!ZLc|_5*?&W2J4c?C(^?v z?;$xWbJL4+fZ-$|{OSr)zj;|fG}sx@+^8>jiC}yjP3X{$)Zr+7@}bYMF)~PN^1v47 z-EelIZm!~*sax3p+#Nbp#0-cIZg79Fd+p_YzU>m&iD|jB40Tv2;IS3djR$>I0xpeg z)z{A4LPV%^ttLxsj*f3B(4r}jRC?8n@}BKgPqSAlj=hd}IzRexdKicVQ$lSo&csPq%A*Vq`flNYsFjpbaMh8KK#*Oe2uN(OaWgzh2c zn`n|*(MA0Qvvswj#edYM9HDl~K$TQ&Ged5m=s(dAltkkDKJX|he>d}fc8c02@8#yg z`!Rqn%!>VH=WKCB4JYx`>!j+{1l!&YNeZMsTuIARVaNEy9F!ePYfcV#tA#c873j9n z7#zCutEmprTz=ZQxey{W@y?x9LMiqOeThS&5_-56xx885_nY820K({c_H-qy)sn9? ze9D3GD1~4Fk(NgNY7n;vJ-Lpesmq(w6w)tBd-p;>Xt)#iRQ-kNI^fr;VrX35LYtoV&(Q#0meQ;~~$%(9oifZ^1x zj2Siw0``9jE`eMdv;R##5Vvvwybmv}M9pre)wK{?YF?0xfRDqV!^mqg*|cBi>lPhV zrgD86%6E@3jr4v@p}AL1Qs}N4%XW!y)OZq)TLJXcHziOcE1$&bqE{$jIRPd!l;U|3 z?M}``=ZvU-G53eB&yj`Ve~eWE2D|2VKlR$kfZ!*0dhQfK&(ZlZJ zria=dL7DlqbgFI=$NH+Rw~J=7fD3F4jC`Vqt%_xw|0M$kW!maB-=lqt0t$@9AlG|P ztT1<5@KvYaKuU%+F4adv*souXp*(4fx7PZ1V%s3}q(p2oUf4~zT?q*lHX8_j(N-|) zO5gPm+Ya5bPa;@>T#1IY6{aDF)a<~!6{ zp*eKPUiV10K(r-X%jLS^4be|VhiuFB!l4nuWJck?I%X#-+Sqg7OD)$BRg1H~xH`Wn zEuE>9`nfMPDMSc7^A}cTfR4kgrm4L-JM)RVQtsXPoar##Y4+;<*T+NM6>`O4m$A75Rby_2EBz(kAhFu4zwRb-QU>Fl3nCnltJE&Y(=W?{(=6=qA{x&vaa?9fi4D{jD+kGWUUcv)RBYFeP|El)5)q|qKU66{IFHHksw*t z@A~p~Y{?Ks)zo9KnQXXu+AQoQ9aR}!GXPG^MsQ7ovJCJEEWo??VF&$ClG%6sDuH^D z*W|Qs9Ad9MWz`M5ZqPhEt(8H`-`xrRN|LgjZ_J^g60%m>>=&%A12amCCI)(PbGRAf zAqa{?=1FeCJ?>?EEU@tAj_anm)jXor+J-bQ<_zG72(VP`CDdPLXSjw6_k}^PET)^} zy^!fcvD8lukuiJokEr`o%Oye$ zVe{GDEk~LV#=M{`5@qT$wS@WKNV>q53CLp+Nms$a;%CZURaD4+u`@K`uXaeE$P#Sz30bbPb$1t?s%ubJA8x zyZ7L27PR)wCIAZXt&v+AkE%qDVqH**iE@i&%`{M2!KMr{K+PGJiNm{AKgeRT79@AD zhQV6Lj2`b;W|E86>rIU9bY3$IK0Q8k!59pXfE+~fo?111GtogP!Y@n(TNJ4l(k{?k2w>rrfusN}a zD<&u!HH4GYsuuxaQ0=goSmJVR)T+ru(hlTT`?pE5%bAaAZ^`OS$zqf*(kL6iaSsBK z!2p@k;=fon*jML)--U(X?9$|}NHN*{XPhMU@rDg){%B03WYAF+P`2)DeY@+yoR`4X zH~(L~R6S9#HrSlrLC>5L%EmU?z>E^}EI9jwuIHIB${o}U{Ku2!S1_EAK_-703qB*6 z0C8%jNOK};B~azgf03cqLYyaj_!7g>AyfLKM5Z$WNZ~p7cmh5Y}a;)@OL;*P4)a=mv;-djOsu68#ibP1sy z1mz+a?=ANe^-0Rfi9DV^ctOYfBsn~a&Fiu4QLq4X@!Q+_Id)7ygW{;9TEmzp*TITw zV3?mZ4B?e_Zk`x*)geK3&F3hIH}3`OXJS#qF_khwu(R@=YM$~}ruK-aX_$!QwKh2U z&nzTJ4CN#T7v}?}`A)IYh6iM-B1p$Pj%(gD{2bqs27+ zNN(~FK+~5Y^R~_PM!?rg)e>f7#{=VXP2B0H01SKa+>2887i01G8Q*}0S`9pyjt13w z4xLi4cRLr=Co!VG;_}F;5#?sXJA7P)M(i>vXr~VjctJ<5I=F=nn{@JpM_z7c+ni#HJ_mFKv<8^^(Gt#8cxoBEh zQtAjRbUD=ZA@$}6lZx13dXO^lgZd&Ivoz8OtfV%90D{h}+*e(&8dT4;8BRUeRGUdS zfG&goTT6aVbzNE}GM#{SE|hz9he0gC;W#r+V$vVY>#9 zf)T0}?X%|$G@e7*+lF``z=!s0>!l2B?4~TryCH!9gDBi?9vP&4w;Uffrr&= zGBKo`h;7LtLXLyi3PBslsvD8!8fIjpn4G-JsCvoeBv<^Yke%Xl&rO7rU4?+imlrH< z41_bW|8i^Da~~FU2y9xP0EtGA57|fjl>Er4If&f-+RF9ZEb+sV=nhr`o^?^7bMGPy@}^gcS)vT{i}^-$EG0qH0Q` zDuv8zh^$_EdD#6pKkd}NV5FB~BB+RMi`U9nica89Ux4{e6na)NNmW-j6UHnOYF_l# z4UCdp=Evz}?5wIOO+8vNQBtz7XP&+tpFctOj+KT>YkPwR(1gPr`?VZ4atIVKb2a^9 zU)XTl0vX&to-ksB{fru$N8hYZpaNrbD0Mq1*yg6Ogzh8gJfgM#bs?r!>ixO5ats&T zfBEpHNatIG9~;|beKg_5ldoW-CC(;C@J^*Ui_%<51DBYK{}s3XBOPPEul?Srr`Lrs&6TV3#odO zCrV>wO$gBmyvk(cx9>ypEi%u3!I=WZi*dSy^=JacQc%bPhATRO$C)La$AS(4lXv4@ ztG3UYBfd?^+TRkP;*S-aS&up1=kYSxtqn6iipMqcLsKC*Dh+_3-0AlfhmBX{4%e~` zoxQ%Qml5+JUCO};x~;PuP1ssWi5-Y9sNCSk>q<5?m79G@JhdK-U7*sf6)rF5MDsk$M+%x%;WmJSnh)cQ2w99Oz*@*IDO5NwQ zi|*?GPHfm8td5!mM-=(4MXP&xcuc!P+?0^L76r;xM`JddSx8IEMsr~DhiA|g6%@yd zQ*`g=*dPl48iwKgbH}(E8dj_JTr4B?Zh1rakc2&L!)C{dHNRJ8EoZTv`rTr;4zG@# zn4dR*6X%Zdbo#K4@ZL8!A==Y-C|d81XrDVgqo9n3M$|~yKel%bNj(68Uqx*;#0^p0 z+$-=3m5(hg-{&^-H0p{yTn^zUHjH+8&%p>!(BvQHokD7e|^>SL{IZeuNqG=D;OyCyEmC(KQVqeY{D=X?>V(0ePmhblVYxAZ>`Aq zDy~&=ql~0=&)9a209QA@{cI1txHukyf?DC!8BZs;?$-(YaA)Ph$^3rz%kpo3y1MrJxVBP zc<8xU_`ZF-mzIN~!Qy(F3V+P_>+B$Yi!?DtNw=Zq#oDTCEZ)Y?Kp7IU@cyf+VlxG) zly@6RlVXm2My+w4_|h%F?SEeuN)P+hs;)M zJk}vQ=Ue|^m3SsK_F11$YQOl8D7^19)sjl8w@TS`df+8{_?(u^FKC}H{+&hv#?d$M zL0dfAxF`###9P9HPcz*aF*od}3jao~;A-U}uPsefj7QG|WD|;u&YHwok9akh$x-_O zCKKIF_wIaYVIuP(3kH_1b0UJDJIU~)+I5|$e^NIKT~O5hxHYxsIQ=gK-P3?uV$b^i zqExr4S>HWkuqW-|IykNnTr4h=dQ&r1b;3KzMt1dB7vwQH=msiMnFrYNI2hzJGM+3a ztckF4Q`O0SNH1ZD4Fn;L|HHUmi|xeak8ESf1~aD9+=vgtxpfP(X%(3>H28X}yypuA zvrh97MOO&UdC>6x{*(#SiT8RB5E~W+!CK^c-Iu94oWJH^;W~1&eGUm@v)jlL%P9>P zU4!gf#X04I5m?c3!6gtF>C5lgMo%@w4Mu)s#r0N~`EK&k&t-NPyu#O5ncWLJpp_lR zgU8(v)wMu80fp+e7l?XdB|&tl800A)v7NU@MaoZ+-R>pjR=p#CZH61G3-Ol4m=tv0 z)?5s)(z5xnSk`heT9$^?wlI0niaeU*PNQyuH_)uGO`o)9FW}n{gDFu=g-)DhagB>E zsdvl)fA0p;Eb5SX?k11Roc<9tG=nz}Z-k>K{}^kO;LBxq2LrNj-Wj6aptqp6f| zgQ%=oo5<*6UHA&P%Zr)PAQ)D*R`8f|8p!CjcDpyjaBIzdYQn`d8Jh&^-5b`-h=IhY zPhSPdwQfWlzP5gx;(2v1I797x&#R8`mB-zniOV@X|25{uM*lCg6GXdl5+Z4LL7CZC!M-Ky2tS|RL(J5kifz;(LYVo&ub9k4bitbzTQNf#0Cs5pWoP^M= z*W+TOD>FUWb4YIcFVw%ZUpu`mq!GJJPEEmLx=Fph&!0Kf3~sGmeslcj$+gfWM%Ll(E?|&+qn)fzWA$9CwBm~n$=Y!fgmiBKjMXoB+B|U zm+hp6$6WwZrW&k~LNCY}A42VDebSY^J^#D+3J)1i{eeeT)oxcZja-hBQevUaOm51e zH@5?({MQ@BJ3KO>i!;V4T&?+rHT=~4C+3Kg(g-d!bA{Jz*+zOwHz*PP#9r%e?f<{Ow6Gw zLzGJnUGeP|nB}WGOopY8xK01E_Ot(H*yx+zSDWmhAf{n?Ee9_ueo(Cr3){)LTi^PD zlyeGM#iCYEOe37R_i}8(yXk>{9OXYEqm?dH+XD%bn6n$#+emg1Cs%OR8{)Ok%|cDy zqk^+mIMRX zk7vm165)UApw|T(h|Mp+kuq;%ayECMc>?YNfcO0yUFsIK*??7+JvNeDvksDs_5~h0 zpgD*{X?FL8Xx)-tQ^A)ekw&}Po$u2EMY=DK0I;3W21)(iBS!An~k z!@p(l^)1rML^O$7LhLL0ypIIyRqIv6$p=Qe@HkU=>K6sc+~<&m!Oi;sOx7S+Z{I25 z(@k2Zmiz-*h6ynw+>BUp4_XYMbhgFh**h3^je`6K|!{eq^8V=Kkr6pl}xUU3dM12(DyelD& z+ETcEjVjPW&30ErjrCU127*^}%<)s!?EUUrXl|lU8hodfLNYosL(uZC&VA?$PTWiZlr_+0@40bd+ppWlMl55|)qBn0Z(Fz56IVRSuCn z`8w3{&xb~R4@i+V%!`@Aa|t;UC7tk*yaC+WLu)6J zo;dduDK}H@vx0mrLzdZ(9l$!_36t@K|J9E$=+!J%5{htB_>3&AS4L`uB=8R zkpGooAX0|F=UZ~N09uswel9s-UD{RHaE0@y=Jr6SXBQ?Dn4xPO!7&|`G(&eaK+(jT5KzMc3staj~<)>{wP zY=+&$wtLTRZ#!~_f7)|)V6_8CNo{47+|!6LTY^zh_PLr+yg^Tk@?Py(Cf?5Qk6B!` z^cdT&l|%}EY@xB0ZPl>-Sz%mA&tHx;>s1gR`Se;+lZI3;``PdDxz)C3o4VocyCsA! z6H=-7KVUm+$lTgFX-iGr$AYAmbAwX~=Yto0p|P!Fc6Bk6Yjr>@-@=1$ia&RwCAy!S zG@ClWpK(e`E`P=33w2Sx$on-1;QovQvA@{2~i;FF^{o6U4avX zQn_hoG7P4-b{ARyInRk}xS?28bPQ^AfWL+R?R8!0DfQdEuUo2U_}o9CweJ{^LFlPQ zOBtg1Kki_S&b*KnYI^)CZejYsLs!;`E^EiK+HVm&rA6gu9I2ZM)%hX*4CeZP=X31 zU1}>SNO1!59{6nw8Vmb5mH0sOT(%@!@KefX$QrV&P;i~uV2B25wy0j=4)YY8GyvfU z$maLEu$5DGvlrVJT(!?r9$;w$^Jgs?Q(PWRo*4RRw13{_xx`H{_Q5_wNW;wI;9=v+ zI86mM@eo5@@vg#UOSL0WJ|79e6HZBCkjN^iBvQ`F) z#GT}s{`Q)h!x~b&MV-IkUj&ti6rmIU-WYm^nLiPB4P2~6UngW%C+aP}4`f^IAWvxP+Az}?7;-eY z=IHsB?IhZcl08~&a`=1S%Q2dOsBn&7MT?Dy6Sg<(e!?j4FtBYg(4|O9jpn;$sG&)# zDCIR>`0`(k{s6XwBAmZxdh*t|m*84ve+?OLmE*_aWt!{;=BT6h(D?vrto5+IF&+Yy z9bCaZrw;IW&!>66**FT0(`yimPe!bOu;_4UHMESHL+*@GTmVT7{O1bx-pDa^{PEl@ zw2IJ1%s?DIdcdirDK;_#;ID(-9u5L!nUbR2CjS-?vFjHLvnlTGOO3Q|=m2*%tt zi`XC7@wWQb=<*5P;QPas#q2{&``;o^()?XmSP@PMfs2(SQ10&3X{p zNLMRL);jJ{xji!bxwMGPNhkmd=!O%R{67}S6 zP8hgL=ezz`z>rem@#OSy?#4ZF-nOfO3wG053Ti*wWJB})q&P1(FDiy2hwM$oY*@aI z#vi_tzaIT@EI;f$J(-O!PadMC38z88A@-7phx68|=FnL>Jm?n1`JWYM+1m$LgF*XI zU~DX@PkT0{-EfQXK4bi85k&V;PTeOOF`R0Ly1AXl3LT7Q)%H5H>%AMIvy%0wC^-SH zy!#8$9*>VdPB-~DZ18yX<8p|dA}4Q7PVXHZ;m{r#$&YInQthyJF`kepsWn40FcT8o zVVF%bUWKcdcwGfOm7>$hzm0x`w^Gj)|`};VXaf z`pt%YUZ%R`lwLMA@1;bJO31?uTAc~R^Z6>QxpM?#Z2VKi;D${BsRt}sjPbTvUEnW= zqHfn^Lr->F<2x+%pN%AC8h&g0+n+!3^w-C?B1gcvMxzdoy;`*KEDDIah(eURb|$Lgpi`3B*-WYeU6zdx1$89-RsvTmmld) zSs@0(NTJqftW*6DG*tsueskhHON+kUNeZMsX#XQ(u0~+}AK4gP-#z0m;qTLsn#Vu3 z-d6+eByyS+Kblt#O(#)n6X%3+0VC8MqRiDg8`-Y=yKMGpxOI8*_wm9SH$QrwQhbtF5k-z-neG-KSn`T|yJ+AuHHHRc50CmVUzHV~MBLcWBK$5_7 z2}CnM%~>^&gOc-R1AZ)9+4Pr+tM>Ha0y{!8(|lhkORcv)Abz%qlTeOUm1s$Jzc+*P z*3E*WOy<-d_Tdz&OFeU$ij<>AqH6sBzdYOSBxHiH$Dbx-Xsf{;{Yw6vy+9O@pCv2M z=uV6+5dPM|!IN{IjVsNKnrdE@39wFY#Xc`nXWgvV+=+eFfdB)!)T*}Kue|3~a7uyq7IjmQogO~mp9|KR-3XuF7-Bk2?67jiQNRuAp53CHp2N(rc zF4qVV7>`)N%sIx7Q6Ias^vz#)zB>Jz_cHsvj}$5<0cOFV{)0CE@}_o2lmbrU{N%f$ z{5X3*DxmC@mAUEK>d|-Kg!13-X>Jo#jjz``*CflT;I%0eVk4#c(}n+r7|MwdFD{D9 zCnKrbr6nhW3yr?Gf(DGcXsdjS*P*#ZU+5OysZw}3hbHP%o6BZVd9-G`)};D7ysABp z@X&oq9JW}4hDp#{pU~;utL)yHKXDgxxha4Qa}O|3&(yCOJiTik0uoX$Sg|UlN^mhZ zAagfK%F9%lX^g^WZGl(v`g?_#llUmauUF$FjWZAK@pZKcwV%%+G3GO$`mcr2+{i!b zFu{CJ4OQ@BkXM_21=M!Nw+gQ8hQM_zZ*-G0nO>^^mi{0ZqU1Y~z21GhFnvWLeKVhq zx8sWn0i=rAZ+3bvsU%7#Y3a!xGf0w*d?U*h`IIv>4S!d3rXKj?0o?|WZx4@KCT0_$2mlU@8oi3KqDz$f#o!T0W^pEd8m>B2w znlneIlt9xq#Lih2RX9lHf^9Q>eZ;tEZLOJ6439%rS}dLOKV*>Ug-wa*F$PM zAw6e$N^Iw*LdykfOu^dr>vH+jYuBgqTvFR_A7)Bb*xZ~(033p8<(;`Xd5tE)VWhNl z%T9~do+Ke}-{WsjwT8@D_Eo4Z7qR+W@@G;7o-zR9`96;b*h4Mrp5Zpv-si z-%$8QD(LB2f&^Fg?%j{7J*OUXvN3d^X&E(|9E5*TIfy zn@d@Gee82bl7fn%{J89E3@B#1xr$MzPa-b{SPC~3kxd^@ICPg?%zqt1=K>h0hmwPa zGGpJDrqZ6pzSF&w`6PPS@9?tsQkTDjquNq0o&nL{qnwrdT_0l0RJJBP?RuZd{LNZI zwmJHCYx~y9f&bI9c5rCLf4KJTL;EVPJ`tkLzJ^B3WSvgbMa^{fOaFSeb0M?IhXKOh zB>bCYhlJNn#!=r4$R!xr@+eC}K*`BF7~PZWf)Cu@7_n8~f5$;lUfc95M2vy_i-7zM z!I-_lFWx-;FGA_O^5cY3dfyp@c};Im2;21^T-jSU>3vw#TOLTlwp*@fVcamBi}B@q zVJ{(*XGQWsYNt0xa-xmjJ-dtO;Zj08+>vh$Ww$&z)UsIeqx8-|7a~evhMb1=U6j@P zN**r-WPORrCbDh>@Ey~cjEk7%^rjtF`jYnm82L)?3C;<(bCBwrXg@Tofo11$c>U1QoHun`RA7mKv>VzN_)uvJCQGxdh#uxIzn zK{RF2sYarJT0s4vW=;DY=W6--_1uE9D5wW4!w|J>qrp_2@gmqrQt8);;Cp zJ0Ct}Eky;PnErz`>q3BF9@w?qAnxK<^2!AlT>;=40u$NdZt&(-#@skjFc5K(ns4J* zRVnP3s%nZ}BzHCn&WX(-H$vx;vjqv(#*nF+xzWL+*YcjlH_NU@;G=EwOHxO?+I~o* zJ}fPP1-*)}Cwx6wwAMV!=g^4E7P#J311fN$P%4|cN0-Aa?v(rzSNzqe*C;CNf%Vq> z8X}z5@Auc6p*m~P0ls*1vvYnPXjv->N5WB>;RSZ{MlYWQXgIhQoo+7U01zfWb1U_M zg&>B6(wiOmV5<2#2g&f1y}t!Oa491nc*FBlQ^qABPVASqp7PwC;Jw|K`ZRlPx`If} z4`&yfN}2b;%WxknH$nO-H_dPYoDf7}PDOR9puu2r zOF@c6?*hGpDc8xccx!gq%`jg_i;wtBxu0P9B{~W}8ZYVYl`Z4r4KlE(^J8ntp-omE$AVy4K2Q@FN~n7z)79lL2J5!l51G$ z#%f!#64COUZfN}P#CF>|Lfj*DOy)EmynL%b^xQq@yn@fhAh2FX+-Wr8S&{jnaHOpo zoFn9~g@EA<#5J92lBJoM-$zb*6l?MDww_9mxRpyo8qY1OXz=WKktlvEOn+QtMX{efv87R0Kc82A)oqL9P1`?{Gu z@kYe4N0vJJ5vMniIaNkZ@g;3p(BhVysfkX+fLn;V+TUph8%o7~e>UICM{YQ`e?*Xm z^Q0htQo*{Wm-kSM4@=y1Zv(k+KLkE1f?{X_60bM!o}4G)p!Kvu@H4A0w7%5{H#ak=zEbx)mn2rJEprq?rcS*oe4 zZ}>pA6i{T~@FpiFell_9w3WAYbaj5F z18X2E^Xzq1W%iLa7ht0j*&1GNBxESLu(q>}D)Bd)oq7B~pg9|`tdBOnd3O24QY~qD z-o0_ITSb7wdoMeeJSxoe=|ysY_i3{&BchBVrr-_!u&!&N8mZ z1X%hm+uhI+^(M(CHPR@QN@Cv?!=Z`IygdL+b`9tFxZ99_Nm&Zqbu6R2Nr$thl`et& zY{Zy@Y-8YehgS+!!Mn8uLD}rT@s-=IX^Fv6?-14ZeCmF{88^38p90OZV8gjv_)rHE z;}@@O_K<%>lir}v(cZ0NdY$&k=Cs%VOT_tDY;Nn!%>vmuz8IWD!?_kqQVaCFZSQ+Z zai^ypkn%||+%md!#0dzc*O@A2R|o3v;Dadd&xxw*kpvyZBpp%p`h!9XyRdz&xv4b@ z=b>~nh7;2WPbIOhq(>TkHOcqb8u~X0T{l=ZnavHx z9L>bc$h{VyY2U6lbBGlrZ3wWOkMaI-t{kL0c-r0%B>Y&zPuBg!ss@ zy#(lUzgXz+x2CuJQ7WA0pI#nnIBNMA@P>SAzj@zq@#G2O*cH)YjsFdZb5U)H*iuIg zqeQHSq)h3DynWJ7sv_&qX<$*BLxDF0y4-uKQ@DLX%KFYvK`v?z{IDARB1HG=nsPKj zce*DwgJl>!IXT$-F0ccmBK7O)7yKe&;w*!kZ<;m9nNcPyxyFL1{;1D++q%K;CExi= zvx+@LfGDwx>PBA&rNowj51GBR@8BPE#qcPukiK=t*oOiH=-i3{_cJFV`AKM2YnPPJ zDYv0|(y_OgqYBvcrg}f?*>gD}2mQ?pHE7=WiA-D;G?Zl!mSq4=u{>lQSQ`G59yrHx zEWWPVA#N<;ItW4viJL^6sv%BDPj+(WwA7o^l5s&4VEg!GIemuX{ZZ1rMQTo<+^s7h z;||ajpszZX!iro%HfZzzr#&;6#F9s&u9Lgux@?zN^5i?cYtFv(wlA#ec8zw|OI&nu z_W#jzmT^t~f4E1w6oG*tAl=<4F}h*2G}4_42m+&#(Ich1M|VqysC0v*(jh(A@7(^+ zIS+U=;03$y-QQ1K*ZY!dmWqq0Jhu|L!bJvTUElR6(h+Ij?=+;#TowyDrF(_Ab7eEe zIeO%NTWec1PpN#`@tmq(SIZ=e_^&zaVEKMtf z*~_eN{vW9S?oe*N=do7=ZF9BV_J($cQcWJCDYK%HX#9X|s2ebKNBhOn!x zicb0EAUGD-@8f@Hkm9_*COdwBgrL}x)XRw!nEe~&r3xn(7;03k@}7LTHOWUR$~|6I zOS>6AGUt|K}l-DrHE`0UwgH;uUH!>fey+Kp?4aFMZrz_vvp&k=irvx zzGrHJ9glLl;S zX|o#w)ZQeXdfwZCZfkBME2>Jo4`b<%Y4R>99qr7nw+W4xTM=!Q3~Ece(eHe%U%FLl z4&YDQS{i=HYVRB!0|xfdA_jg9)bL<07qim{eN2G{N?CYVl@CRwb=4~aaw3#m?Wz~X z7aJWfARxwWcY(|_t3pdETc1A=TgFNl%bQI@Y#~6~(Kz0WU-i#oMgD;g5DMwa1iHfF zoFUUbRo7{^=E9??mtEchphW*8Ggu+QG}{1t*^XBf{K!*(PJqOuhRxVh|Ier}sa&*}qVk<$*Q8iR~VE%|dfX$a}!&SJzX^)OFZd3{99lnelBWEFo3Ft7iZ&woLCGWrMpDd9%1_q-HK1^{SJc-79w zRp+g(7JPpA0fZIaQ8II;u|zDhE+wXd6;%j4IDyak|7=xOHGTi{z5ZjD!l)>;YTZ4# zJH4V|xtBwPSsL?~hlwrs#m>{Y`LyReuhEIbir?xLnK#upXT(Xl8whUC+Kgn9j6|o( z#Zn?^Ze)KhfU8f2o2ma}awAXTkrWoi6qO4-ESkH}0XStv{D7VEqbh z7(tAiiO?S}{^@3yNw%pNJv{WIv=p9!K(-Mv=Dj6UXuprbnjsgP?^GGJrrd=_@IH|a znv~Jk17!j%KZnh61HW9X6kDd;{*xcMLmUk*9dgI0(OTkd%ehk$emE8j*k-iXRq4S!@;HQS zjMCi^`^$SzKf+K4?x+(R413?(cfdG517D^ocUtUsV)bcX9TWflkB8o?v$%N^`umsE zG0cAm>hxE0g8PSz=xkD$`pU?+=2ifCG$*bsav#v{AH6N*3?!{ z7>t;;-=g^f%_En9nNXd1TmO9SAp&xpo4roA+QaW3#5OQ%C)z`q3ds8jP*ELP2&%o* z7+%oVkz|j$(IrM50+P|d);m877Uk|w7keLB;lF1MH_OVesMx@u7$W4&Lo8Y?i#W|( z_YY1gKZEaMdX1x30&0*wLlipzxL-54Rk6YGpV=*Q9z|HCzGN@Fnl^qeN%rhQ`RrfS zr0{19S$j*EKt5JHp);jf=Irig&pK}lU7KZBOk_9o8zV)nn$BeBjeSndhp7m2OD&Iv z!}eLdz2F>0yd+YyNu3XZ11R(7u1uV(4)YVX%varusn#DfSy&U2!AHYC&QQmsvjOrc z;YEOQNGfb1a*J)?dyKD;qJt%eio-&3zz)lWl-uLKzShg0Ib{_3DC)% z-)Pqbd4~Pr&p-XzyP*L@3;l`>jVR<#7)N;rq3G{T0=ay{>Pe<<;r4+|nU zcv9Irs?A%6E7vCJynuj{R4FrtI(2$W@{OfOIOKILU(k3xGQb9S^F{ERcVKhPx5D}K zJqBwsS5F?dlFn*{AKU71r_~X>(Y8O2_dfXz40w_%9#j}G_jdlP4;_&KcRR{0obg2PdZX--Qt5LzLNxZFA! znTL_W}7Uz6gmS7L=9)5^yi1l!|O z6Jq@>TF=E%8xJgsUzl&=UII8=$brYsP%vG9(zV||JxB?jy8g;m4NK?EDXa~^#b;ER zd2o8y+yaUdKyR|Jz4RXEpMz<3$n4Tmjun2fEz_C+X-XWD2%FEYIE7p~fPZH`_;Fb7 zr5)@{GWn<2%>VLYq8Y3@n>>dikl#Rw+MIijZx4F4(yWEB?o!ilQiV1LZUCl>v~Gt0 zMEI*8!N_~3`Uws$9S9zSQk>X%Tv76k#Yx-U+3n6|xPl8J`naUtRch)N#}W0HFeOnw zN^9HXyg3wBfbd)#V)oUQYfUjXzM*^)=+N`uR`j zw-Z#X5jgxB#Ef3lJ^Q32_h$@ccis zp--GBw0}nCDz5YM$TfFcp{3*pT@|1KA&yge2%4DKw74y$y>VGggow}u$NrS~me@Hu zUTSBdi4)XR%Wez3nU(1E<3--93q(}g_orAu+^bgK=jBX<`g^A*42`Wk&JiIGaD#AX zxG?N6D;U?!7>$+pUsUgt0Bn(mq853JdQ7jN3ya?Y!m10IP0rlt7wgM_1jx}SJLxPm zh`ANA1XmBYwOSh0E*12v$oe$)>U+zffxaG?q~aFbjWk`8T33PD9;~p$-^hX@$)r*{ za(3G?fa32xBeci02p|^+0bJ9ymJXrO%~_j>*TUp%pD5CicXrUGAD-8*cbE^BQhe43 zcuHg4uG$Js-m~+6efgMTN89u9KeRc>Z2;Mn=v++GI;DtE@eflYoqv%lRr2rDN1pIO>)sL~k4*z3#VM+D^TC$^hy#Rp!hhu6HwtkkjqTbsKde@OxMec-U+YJ(YYo z5{vxRgDaMBYif`<=sT2L$Ei1D0t~oMjasI*nwwmC9GTlb9(vWV0aq^#9CgoMR*3ER`anR>y z_j129r%X^TOhWAru+Xz`X`;k*fNU6jU?j=YSJPk97kT!7ZE$i#$t%n*%G#110;Vw2bBY3D!s>X&UA>cM+aQiL?%E3FgRsE>HK0wpu9ux_ zNeu9un)NjU-0kVdmil0=h4cWn5}#R`qRa1C#f&2CM(z7B0NBVn0BRc7n~Hb_(5rwd zipr`oT9_&s|9FPrrG88ICp%sW>iD@KM@^O2Cs=%ytqXQvFtN&WDTtMQBo%xpN*spR zvIxRl`7+qt0LMAm!cE*K_AkL?M|^B@80tW=_nb-YMQPRB6Hi$-)rDayVeRn(C0giS zfQlAb*GS;u8U-V`Js3BU=ptwZ`gO;O62y{Prc$w5Qf+2>0!@Xwo+Ybdl`cO%c7NNN zW>j-lxZJ{Mr(IV;jnzqW!L;rDxKk!PpA;38-_VY3?6fGySmC?-D&spF+YeCDMngAr zf~KM68}&&z1?mxH%igGhs(~wnLv@Q88Fhe{=!4dVBXnUjsat{Wrery~Wr14BnJ%Pg ziMx0S=fNudsBw!&V)kT&m#c=$Vy0a-YNG&HO<(l6#=SW)G_45v_|yGwf0T*I4{mcb z2(gZmi=(SDa}WS66WG>i%LO&3_WHh9G8KWzVxK0dRc%KY_m$_o*|bb7?p;$A1CIg^ z`@e(X5mZ?|EvW@Tm5vs)7xnl>5x93vpFVS^T_`Y!EVmW@G;DylvEJtk(^t>hoCma5QD>oNBd9_HdN7^`#5TYyi`Cz@7IEMw%#oYZZmFhfbTnm6j_a zC$~UmtXDIr3%m}$U>#!# zK%&w&OTC3}4z+L0|H)}oP!mVM;OJ=*o+@9#BG4iLZNfi1Gk|6u;sJCnRm|-iDnfL6 z7#mOdn@womY&|rru={9_hRlbNv7{KO0usk@fnY(N2W*18opvwq=mSEMyU+>4J=vO18esA9mx$oYc%=;8IGqdyC|=Bo9hd(2&VHx zxY%Vg?)|v|fSwtC)ON_I=H?l7m4a$Y%MeeVWda0*_m7do`(*Br87RN& zDofs;GgSE}k$!r%I`m6#divi|9nY(ncX=wz;0#?q=s^`thU|BzTG}Jp`?56a-Yv&e zi;_LjYcHcVl~3iij798^C1b@P%F#y6fZA%Fy!ZQ%?ye1ju%B-?-;SmMk6ckl>@{-j z-jXxYhp9Z+8ZhyM`hI33e2Z_)l2Pei`5#)rid-2{6HXQH{psT}^oQ6PhjzrP{QdvRBaFNHC3kQS&k-`w_66FB4`qzIB0~u!i~Ma9a(mb`hl+b9j%DMIHU@a zG~{;@-7>{ncALfkqFF*={f8D75Z9n+zPSIhjbx1^*cD_w3y{mfCde9zI(UI=TDxPZ zX7ZA8q>b>d;Ct{H0kV0tBva#>)V6kFxb5MI>Bc_uk6|3W&i3@1n z5_Is0PQr_!9a6lP?j|VCEIc;c=+h5=&7Gg37gyG+g@c|w?JzC3ZEdxOgo^cyAgC?= z{D*c@d$T9o;?jI!VY0ljzwmdhuhpZSR56$-C?e>U){1{x-H&s%Nh{RfU&$}`T1xiT z$PY|J=(jqEJipHsvZ=}`-49xHZX;`g5^(Eb@ZshOKW;7;ms`HA1feDzt zouWYovqZ69#*X)(Cn;q}(}I?-r*`NC@-*sr2LT$te5!QtQ?A^cz`(@8Mn19kUK*4{ z-*{gJhPmrltbY56Iw88TGmzuc52z2CpBI@jk$4qiFWS=>0q4krJW}PI0u$URa7X6E zO#|fm93Ck_B6f)^ZDkt#Tgl3uQF!rT7X^5!e~3Ex-n+tApQtrjCEvmrlGH;p$aY@vIrs4OcwY(N)N3LFe;WP`C%Z z#`x3Oyc1L_EwY~K@h&tK<5QWMy`sN_#r8E#M__Ru z2p#^|GY5E&en@bsnn(yZ+^BHb!xvIqA108>8@oY+6(Q-u9dR8pV6oOn?eE|uU|X`c zf&Dx_z6HBWY4A-1_`F74I8~`r0;kwu=~JE z6M5N_{9vcvDiCPYFqeS)oWBA|2L%e7^JpjlW_a3Cr%fmkC=MlCZG9LNUD*XvqhWJR z)}W`9gi!@F0_tW0Uh;0?dT)EkOlVdH9oF9HdD9+2U7@3c057}|<|XybZNoO|Mh7~_ z4jvty;dA87q@#+*D$YaPS?S z;RME>CPTV1pQp=Ddi*be1^_GaEUEHVnzy?jrRB znveS)hwApAeG(g~=^;#ZX&Q4~EsVz@2Sccigmu=3%b4fd zOik_)+?#Us`p(XWF}j9KHc}%f;jhlh12vQ_U6Jhnp^cZ}09&G@cg>s5@#&t|uhi_$ zJP%kOUIzUoTWj1!MwbPHhvFxtTl=;|3@i562 z*Aa+B(z88VP^#-X$|zdlZ|_>q-S)$)<oVt9JId++NL$5U}*|#g`pV!P)dj{>< z8X#@?BXOd(TjI#P>}N@U z#Ll^<#ho$+=(avMezsMCaB%|p^%x+YQjm~>hWPC})rS3<)V)5%9vaycQJV;sZmJWJx#6DIf8NTF8M4}D|Jvcti8+iK3K&f(Zhh1`gjTV2Zf7EOak z*vbS}s_yrS>s0pj;iOOAnRN&iLkFz})Jcq_Sh%pB0C<=Tqd%<}bhNlawLSQ@PDbRw zpN|9L#lfe-!6&}%ND5`d=f-=ixpi7Z_)&hA>3p&xHhmI0agIj04fnU_y18O-U9Jrh^;6~J(MKLk4wtAp0>g>wLTNqQN%~! z`UVB&tzV!H=?C4uXcZ?>aAGqw9j9SqicHsA4FK@lCY|N2)KTeLE-e!k%BOmX0g9Ze z8z#S-#%VW>S|7;Sd`scb4@h7x=JIcCz){2?VHb}pbz7Ph>8@Iu%H$djdfxIHUkv*6 zj44WuK6Rp1H(D9gNajxFUdraHuCEI}FFUrBE0kgMWCBPzr|t*QV985$}9Fp%k4 zb~KOM#k1j*3VF!jnOFNQ9qqTILy88zTcF_;y^)nAx*ZklJ$Mbd)J&gaHb1QOLUF5B;~D&?HG z3FMc}y)E&2#`KyDgG^6fWtSO6CZ;bs^PzE%-Lf@${xt?}&PrJs>L9guXZ|f?|96I; z#wYRj!bdHH{T9kInU85J=?^ddZbsKTBo-3qyB_d=4jS8sTdPw4DM34gm7?s5 z-^;nYk;CVm4q_QqNK)|`D^0Y8<2Os@S?jlLnD)vhz{c=u^fm6z7 z6@Sw9uk*}1U_ajs+j?udHq5Sow}n6DA$i<#44-FYd!QC zuyPhT$`8H;fdD-Go9_vq3V&Ql%7Qhu3M#am%8nX30$x*$zEUrFDgBmds2YE>hs-5; z1HBE1V;Opj&FDF6si*5i@~w+W_|2}}lgj_LCxi^5&~@;0wTV4G)l;XjBVv$FouE2)y0iboFbMa>i%W<$c#M4R#t`Wsr1cTJ6;ImmLR)xsoY+d#Vz{N)7yvCkyXo!jpXC zWhMc4&v*HVW~D#@qb=FOZgcRW`&FS!$dV!RAdx$x99@tA2iQd~~=o~NQD2v9ef&(7r)e+ZJOs2@dKR?+PRwGZbCL6pGVIn=`FSs>AHfGe zgOdd9+3hQ4c@v)ss(bYM-YOE+hC=aPSUf&dp$w?3NXQ#2|F$wHj~EjHH5=2%hMr5i zgg5Gl(r+J&OY3`)Cl_mfgQ-Uk>^_~R}PDMiKN_qd7%0uBIoR|7l}1di+24Tspyx} zvw(m8DsL%0UL;;cJ(K1^ZLGj6XFMKy;f|lb6Fcb8SM`xN!r+3HtmNw`S*ZxjJ*Zpq ztN<`wk8&nbd%hFd0Ve@gb+We&-D%TRluxMw+wwlRUxUwk@HMKMV?}$rX7G&OzQ>^b z3{7=qMYf_eZFC*})G*F*uZt(@FCeEN(Nsr|{zCtumA3&qqf)k=(#!z3$yn)koLVf~ z@Prk)$AjUG-P%)Ke0b_0T^fk8ZiP}LboxY&8V(6zq*}BQJvBCqIxg? z%m+iQDw-vWI9w@V+KcxfoysQ7hXSdX+$tpNV?0??AYuJ!BldBd@V}%DAxo?|{K2^C`<(Nv`8~?hG|6-SV?NRhecA~P9`H7U=Kj=gmuhSoayC5!^Uj3xK zfa2}%TN^dLrudQa{Sda8sNhs$&L@L<^%c8FsQu$Y1Js$kfXn9^Q7u*y}5l9i9Vo>jv1UXQ6ob6N2 zV*&KxU(fRCfY@h_X#jcz>?uv3K9wn;8D>|1w@_)x zWLN~;jG>EC9)nxSI=dGc&DX6KjV)6`eW1Uq0u!z&Tq6W(+4pB08zyR;Jkw0{(Vt7v z{RIz@j0`+3;6q2dFxS6IBWB5Jnxjp$da@PJn3@NB?TQ}f9A6-NUKd{ia{Gjb=mAFgzc#qk8F4om?x#$Grr)PuA3z>vuJygF z?bw_jy-xl^o4NlMF(~_)NP!mU&ahz9$Ig>)BAW-z)r}Z2LZ2o%UI!8V2Fz-FPt@TP zOJM(z;i$7AN1FGjZ7zjYl@n>d00Z6|b@1Pr;~l?7ttqtV;#nqItcE$I*toO4-t!)2 zol+k!qc}sj%8giwm;6adN&x5Vt))WcS7)Y;wF>vd{up&qxkTcFv6tj@Ps}wet{73K zu7s76qB7H5p7fp#`kC8j*eu37@n@ z$Jmk(xvO2VlOB^ZD~~Q5k@s!x>#uQ(NpPUI)IwRhSyBDZeGXT5RIMuPB|J#JXHSaY zl+r6VGsvMsmRZTvKYYpna`Y}XC1tZlXk(xfc{@BLA_^z1Z|7O&YU0+uVtqz?*7pwW zY3PYx=|Zc)8@IHUG$_qvAGQ(EQSGr}+o{81FD;aEggO;Cr78k66)n$0XFZ$ZiA9-?LyYVice5sW6(cmn zIw@_XfMF1DQ&}frk1y*N{7E)bZ5S<<$1Q<6_U>)8EZR6SdV~3$WbglkgF8NZK>P#S z!AmXtpb}0>Cf1f~k3Z*#_57~imWKJ@3;%7D!>HMX?HEUQcjmpWr^jke&o6K)I8{Je z7eFGn#~(13m}M&N)d71B?=ip#zti_=`gu~erF zG&2}5c8p%LZg{r0WzzogQ>1|MUNzuaM%ndYF=Z((9xfO-|Cv=I`nW@#{+Mv_j=#Cd zqM+0Xx+*&R8(gy8FZm$ehJh_zRCNp-dof8Rwnw|GMgCLL z{@-&k*SNB`K{BnOeddT!yAsvd;G9hJv|)tMpWPgWT!Cz8dZj!h^n7M}x zfrEe4eR)8-t<{-@oA;F{hd&zhN3Q%yBK(jC)riCBmU2?I^%m&<;GM?B)xQk%cglr2 z``^uiySOC5UIGG4PvKZO(;EJ^?XzXxV7$bT3yUy9#c{2|Wr5;!w2-p;Dyf`TN&iJ=IYxybCN*MB%emmFX`8Oj}=TXaITM z)cVAZp8K!3uOX&ddIM}MowrsgW)a;@_4PToZB&GEB)tmFEo~_=Wn1|#t>EF8MUF5G zg&Ke{(vv6LfhV&)7-@jxpU?;kjp&&@X=b0Cyo?hneliw+No(sxrz_w}_zkZd5DZk~ z{{!R!q1bM10AaK$nA+Lwfv<8C19SzpC)4RGZz~`jmJMkQV3SEwC(NwjSP_Oq0=R)T zT{4d$fKJ+xGGu}sS!5le58u;=>Kk6roXgpr$f6JqzkA4vZEKo^*rwV@I6wX}))kpD z>-bDW?v{UvgOBK%;o&kZ{-e}u9pXwb+*VoA73az@-mQ0ePTSO0(uvfMR2}Kkd`*81 zaD4~RRCy=hmFBoisFO`~4Pe3!9ry*8HInQ!8UNY4tOyj291R&-i*XrxPb1lzqtL6C zRKr8BYAr zmwLb%fnV9FwG~k+7-5h)WTt9qP!(d#ivD(a17f#&yq0)VCWmTx%qElV=$_HkXV^w+fK zEgTtT>9IBhOIyLo*Upo`-i~pIyl3~rF^?Q^q{^ZWWTQaq$8tWum zUX*MtXuJ{1`=BrSkep6H^+(6Z%;?+Oa_dwL0=6OyfQdE)fInE+Yj)0s5@xn2U+O6t z7?x#K`rB{DUqE&*QG;D)WOyviWh12<8up+Gk0eoIj=*%lnuWIZMS9cfNMCR+h`?E_ zVj5VMoVmin$+~Cf_v$)QQDYB~SRWzQos9I+om$n9^yqtGEo8S1a(f$tqD7x!xvyw3tYNVI z*lw_FdCt&_Y=pF-4DEmi@q5%MmDNb|&~sB!%xzE@JZ#SSdK2gm$W)TCKq-_F(o`1* zO@O5Q7jq(vYl*p>s2pB=QqOx62LQ~#8^Ab~D0EsPh39l#ivf)Zqu6=oF%S8#XC8qE z=fltUds{?`MQm3EjFa2UHv~&?wy0peY#gnesyvnMOLzi% z5hv41@+_}OltOE-gET<+8TiLPvl>c~Q(0P_HQU}T1$<6Eq{kGMbmdxEBg*k6;iB+A zG}edgkf*^nh^xYO6!I7JH-}+&;DOB1vue75$;nD&!ju3GCv%mjBS?2c;?@YXOQ`ITsqXU+&(Uncy;* zw4@&-393#F`+iy3jDJmaG~_;kBElmde92*4n?q}mp7YqHqu5NGUwN;FLPjj0Sd%tu z)Y}j|_S0@bgYXs6umo-JubJ)P@t-=$^6j4EQ$_6-w}=q%1$&Rg$253WcpCP$Km#o{ zrVYYTJ*Qr8MYCC@=ILbLe`rb}`KQu|&C+v8(SKI6AHzaw{lRyy;(>0Ur z|MW@BWlouPeSBn-dIMR02S%Pq;5A{svFfZ=l>WZaNDKTZHZTe=<#b-!3QN)E$Yn|O z*){kNjrqlmABVNGeOuD@ZAm!-y|y1b?uLgHo8}Hg3@j=g@{%0a)jTNug-(hkS<0;8 z+6qXT&P7+S;-{@U%;8eiOF}H;%JFTd6woTpzdDv~wSEdE=QCFn!WR{rcFWAAr@}&L zh%)Ab$9oR|)A=vbw7#UxEl z*%#G5qYhYTCnI+oAi5PRnbie`F+kC8gKgaKEZ;?Cpy6bjk&jc8-CUaJ)>LacS$o7q z3-O#Eb@q}>Jm5l^9hFqRI)phR(IoJUK4Ugv&n22X*pa?7hZ=Vaq)_v_iWKP{o)R4H z67$Z;G=}+1);^V92SXeSGZVjl`&{&5tD@}7LpwOFHa^emd~{R)PSL5!{i=uAg;)g6 z&OXNP!_m>E)x*rwhXEn|#aGYKU?xZt2Xet_p;F*!jlLoX4+)x$1?fIvM^AeBxV&mE zF!VSpEuVK#Ht=r~O$Z;~)LYSdoX@g<@z)DNY{*t0O1O}UT%X4^mw4MYL~^8GbW zgTu{;XEpz0$O7dKrIi(lWO`Y-BE4tWXaZS>dS;D1v0mJt-u zkyWKTm7>G1gj|kR{KDgAoMu(I##e|90upXbp|q2CpAk$o4j}wSQY1$kHyuxB>nBHb zfg;5}4&(i?We+6-KCn_m=_OSTN8q^(0TDZ%SP3cDnLokH(CM(wpzmxY3;y0iO~k9} zZ19t?6|yFBcD<+&*4ce^dMtN!JUiO-mmdV32z>pierlT3+F@+k1HhvTQl_VALK+~^ zjE5O-#D)r1CwZ$t(sS^*6vf@<=lo)Khlxkm<7zn)j;nYMUv1RoD$vNGP9&(umt4FXi8vMmvu7%*EC^ z5Yu!Pj*q~`KvMTUXk`X`8bENCcXMfd4c_MRd#2uAydH-8s9T4Syl?>xFP3-*WozZ^ zo0~gs->)qZuhi^yL+-1PhKBI5(!W>nIruWga^Ie`Cm$_5s)t1URc2zk@o#!%>8AVr zdL}m{femusdsf^X z_S3yL%Pgf8c4$v<1jJk9D4E>8OJg+1ZtSOJ_pY@dX)g-FS1NTEve*={2+j4^Of0!3 z3Tk^9j~R@8#;cTB+fvaHmN9GaR!qoYy?^P^~Za*Kn$+P5$BmF4hzeQ8P@R(>ZQpW%pBP!Ym$ zCJ8DL71Jsn*GhG3D`{RKGe?u;mt+3|y%5R8M9t31!reyP|w?@M?|7*A*&?0;HiS8JMB)w6E@k3=?E4-&k~H z$7EU+57hh_a?0m$x zGG#08<7EABhPYn|l^t7E25RsLIF69YMgJSE&JF46PoGvFThFayi+G7X-w7aurUM=H z785tN$n$gv=EaMMKt83Vn=x{Rek$PJfYqvVsajK+bhqLdtC!i+j9j#+6@exnO3F*B zeJ5xuFheURdV$4QQ-g^;EL4F*bE|E7nQ}UVB+JiQZRW~3p~6Dlbtl=O_%YsMg5?z~ zb2Z3ZI4yr!<8mMLE&Er>F?G?M6z|DSA1=cTC!yMb3(wQ)STaDB)B6-UKb-u@IN}?( zJEQ#NPH8H3(PO;)(KjmX8q9XHq_6^xfdVROJX>R$w4yyu=P#KQCxwlgI^=GoPZXi6 zqrISneo>?!DTi{5-~}Wd;Z4J!#u>Z^c)A%?qDV<=j~P)5RY}aU8ow=AmE1jA-E5wx z;?~P%kB8F|kw2#P<3Ae(^9+@ZAA*ccx*Sy6JKF3X$DzH23Xk7{;6Zz~ z$IN~n@%#s-sK1X(`=V@C&>QEoF+7*1s=Y6p8kQMK-`5NT>N|x$3NXb`H}alB-I?$h zeLy(OnbSr})-LBO+}+-alsu?nVLV&CppGgAFM`)m!79AuTR>ciV3wVRKwCR z)Nz|oRJbP}I7vR6XGe!cCgS$%Wkfo~L;fYex+RTr_eoeGY!{=go`ScdZ-x z_uCWv(ZoBKMf%b`Wh38te095Wv+;mJd;_z1oIZB77SHS>#ce$`)iE>C4FsiQv&jCx zOi!zS7!+X7Qo(JJZC^78^mD1_GURzp*UMet-tu4Iu0tm9c^1mp6}4 z=e2JOqKhxuig)<2VzHA%;~}tDQDwA@V`TX_tNTowZw)*FQveEW6;i7ZN7L&Ind{+^ z0xICcs(-F5QmnaHBKQ|)zynwfY{o&K8Kz)1{!=lEBZ2fF#KL|*qGAg;3t_}{2RDhj zv9%EVS?Iu~0%wksk;oVN4Bwq#(Fag~XNhUL0g0YuJck7OM!DupYS+`>RlOQ&1!ZgcwfeoUpMx|4}EZ2<$x-@$bWhab)Uu?b`(I{ z4QS}leC-N6X~OpH_FcaTN`#6*Dt}A_{|2I286Fd0LKe66=Ld)`AKnrb-z#hCu6ec$ z)yZ+lsT<9fH|iK@o8a(L@#WGND2tXbbE1^rUy2RwCjgbBQ$Hc)!)* zY=W?Bp3>Yo^ir9P>Zf5Lk|%yWGXUBJR{?uRGqI7AIQ(XMCQL>{G+4&tMDNuhda{P8 z(2-jNdfiV~>^iYg17ZicG014ksm23R4GVO=Y`h<~$tO>NH9(Ji3x*nfTiRkOtzBmk zFyYVg5>@|RAJY|cuzHkhl%giO* zJ!phulEgLEcg)HSmC0UkIhboQAo`%4%>TNzSf+AZ`F@HtwcQCZH#r%Q;-OCVy@x!s z<1@6gwk8Y30bFZf8^4XZR!>^0LD)4`;3i*6R)-vOufh+f{dxw|H6G4uZwz|R-`?M9 zt8l8B8l=q# zz+mr250P2nb}lvB&5Cy8{zf8%jRn)C7~tjFy*eHOEv zC(aSM>6rWP$(n9_pJlIu_1Y3J|Kc4bUV5QQ<A-Ux zSw!<-+UhcCyRqO$jBuB*4vOavM4ETlP76|B+}A?O+0Y~*cSh{|uz6!Nl?ur&el`zQ zGV?cjn^w&kxoyh^{G$y7czt8lz!=^I?#oiP@xMWS$EIu}t%ewC<|Huv`t4&Hi2W^k z={@~@vEYGHwe$W6FgIYjg>I6Pshq1NsOyXVeQ~lAy7730PE^wC2Se8eNW#DZ0K^;W z$Gu}zU#_Wqr>vx`#^GF zDs5fwk+#R6!8aRM(Z8bUK(;*QWr?6E*nO$&uZ=Z>Kiz`d;Lw*C@39g$j+*I7Zv`tu zx_q3vA?g%cm#svq?LSOha&s2AW`JUd)QV@{cwSFDdN^)YWrqO;&Is{%E2VAm4r+nQwe`TT>h zj)bS)p}}V-^8e6^kAtbEKaL!Mkw_H(SQ3>>W>ew(v`Ne6^NO+H!4%oS7Im{fMo@cv z^7VuF8+DFZ@7O>t`OqrZH0Yh0_mDQgRq`%7#(2Q_UjRxZIyYU>yaunHkmnWq56>

    Mdzh=G^>lL`&}ItwszP()J5G(C@=0evl7hp4_Fcn)|Oy;!s8k~Iiq zr6n(HVY_L(kSN-O5i+N}*_HE(T6$Au)p#sTp^la>0XPJexEDyikm5Yb&52*-{Zdg%wqQ=&ai1 zb?XYfDrIASHYFg;q!ZP*RXGKF)mA`j&s##5h^G99NS#f;U8i=H-4zgb{K?5u zcr+uquC{I{{PWxulrw4IqU^Y_Nj4`wTVL6&!u4jriz z(_RI2wBC2D7LK=USQYtOZZ z;uMrFR=V!GYObjEs%8BNzuqDHAbtdOCMkJR+1-`y)tz5VIGBG%QLYtg6PxQqL99+! z96_3716X!|EA=6B?lMiSr0csYqnpZ$Bf#w_@>MR=6(a&~=yzHzSJSO`*bt&rh_JNF zd2=C~BJK>^G#nfTG*jwOVkg8bv`h z@W~r`4L-e}&I0NZ>(uYm8i{!XTz{WsmH0Jk3NCip>FJzz9QoXKQ|fYr$7-mwXvanj zZ6)*T$UPk%5m1xX_QGAMVK?ZRt2vz(J1KU=l#L#pEk~IfE=x<3b2)IR+-u4=KB2*m zf_`|-r2gVA@0Z0byMRclZjlLqmFZ6RtT?HkR|LowxBMo)^FmqBlLENUc~TqiLremw zMPkYizsVq%+%Aqk?d=mwh@ggjoeg!o;rg& zlFnvr4=SjzSqP|=9JWG@nsT^DFwMECm_JsIjIE^PT@6#f@YT#MXKdzp3GY8CaS>2^ z4r2s=wU&=T0_7-gEuAO^QjPyUCJzGu(l=)POnk z7WjFkU-njAJ0fe

    k2m-(?jjMY&IQ$u=24WD`dZ-fBZ!_!0hMV>%P`n+4+}NfW7)bq2fOA z$SoE8VW9sS@R@%uSvwfvnV`sHXFPtOHcum&dskvk4RBZgPeDSX(k~*P%wHH-nJ|cQ z7tq(NNZX?xlP8L#mW5H>S(jo$0$({cQ(B$$mT?Ly296m zA}~7*-n?mErZ92JOW&n>W`h!o^NO!HKV`ua(^B>=rIv( z+w^CQF9kY4hK!=MbUV_gqI^B;Rvb*EUthcEN|!Hx!BzG?wEVA}XKU++W}G#kR+CCZ zDbdcx^dAh~jcUG#G9Yf#5RxyLl-n-2vA7Q)8v3Ti95m(Q z!O@b%3N_{0F#9_#QswL)WCcwlJb&=XDMQsYZoqX+}k zA8^Za+(ZTWHOr)l?jOq0S-uzKU(k-hcxNR+5fg^oJRYSKjXIycl~s4!&Y00#CU`^7 zrHabv(59RM&*q5_1943hJM!-N3!nQ0CJCoAN5TNyljLge&9pAO^a^?f2HY%>2gom( z3tltKQI33`QyBitmFmjJH~ITpG~tc=+FZD=qz)SsTj1wLc)ac9)jz4GF=c{3KzAHa zL*!V*yn3>MYr35?znXI9dL&kwml`y_cul{S#3@l&_!i5tyGkwwv;8-{m#xt)0h+X`U`(Vq`;dQ+OHVk|L$WGX6xhWniBDGv>SACDpY@IcSJo|ANDE}S)=NnfM?R_5- zEQp;jF3&8Lru$2Zf#j-Dx=K-x3#)s`DRBFp$5ZO*49vWoTvo?eD2h&s4Ecfwtw-2; zp^+CY#3y|44jJ^AN_uEnP1JsWt|Zvc$P=8V3aV|RRdHVz??@lMmU3=SFH#8!$yZqeDWrqo^2VVhjE=dGYZ3oF z%r5G?TKu0S4gVCb804e`AiEQJWpC#ZTE$O>MX z64H{7Xa;4^2dw9QCWc|HQ?z3hte-rp>VgOGe);p~6bUyXp~Z7{);5@>+{0{aiS($R z_?Byu^;M%kx}2>s$QCb%qy+781G~kUX~NDB@4e?q?{J-8e7C6`EWUc!7IGGic#sq? zEYd`0wU|TEN)qP7@l@o4v{Pnc|% zzP`u>zZUU(bQ+>FQJoZNxX+K-zYL(No+|Z6lpaF;kXrC909jx+X(Zmp&^Mor{&w{d9kw?dFY!K706xx z70Fy|jltI2IbEjFv=*{@*66{c;;?`zvoC>tPD-)G*t+FT0PhxC?}8Zi~e6m>NQXI zJ)#(0*&ByQXf^kO3F(`Bu<8V^nxQKLt=V1r_%WwX4=KPyG|a0$f}DbG^jY$?m06}6 z_<**B&`(x|vsl*jQQ}+OFT#r?zIwfc(Wj7O5^lV&7I%7$?xt}dYyoNJ^)bd?&eJf>KT#D4O1=SP5JIwq9hBv>(Q`{KzQyG1NqzjWzbu@82PlYb=u_ zkJB4nYg)wxLaHUJo=ZbT1yL4`q($tiu?)KHvZsK12G)(aI~t~Uqr4@x>_-utY1=rl z{vsVdtAlB=>chDo__Se^RVP3|7w)+z{&4H3lD8xqOYf{uL0Y`qQni`3)`;| zS`(T-G6WA4Y1y>o1Xg)l2!V6N??cp+KA zIYBbG=Tn#$>hBOC%@}0Z(pGW2gr&waor3+F8&-{(5Dg5irs2DXV~(OHgXFtQ?OVF; zut?fN9mBYm6m&8^xO)qq7GWEWxcDlCr}~b&mc2>7+{YF|ep#ywyxM-dWZIFyu1|eWKbs`xr$=G2)uJTK++0=x4R1PsyDvg@FrwwazD=1vcE;QQ zG-)X|OEYc75hPlLTa>MR+#v(K1Di;%Xs|X< zl`N*p7;}HrySbspd+AVSh)ef?r^MT77PI+m&IAJrb@@HVNGx(O>E!3nyOqy<-1{%wZ|6PeW%b)gyY(o! z=FfT4A}nL*ChvFgHosWJdzC3yzOBXZx8Gg6T8yS@i`25-^x_EBu<5RmK3RKyUxbZM z%2V^o48_ReG=equsoxVibpi| z9OH|;EfY_PeSkkM@x-pEcur!D>S^Q15vpFYm}rW;MOcX!(jJa0KWQ`_6Nv+y1y*Ug z!b#1%?>5ai$iB!8cguh2RZ=tg}7Ywpe)M{UF2PWu|6nmmp-nqqDSKg?bJwuAmk z1S07(Y^2d3d4q?5v#lwQE-|v~vh-&6Vv3>(r_|~Ri`}$m^<|WqZ7RKi#>^T2IXAba z`mH%^o<#Sd#iZ?J!FT!G=Z=ykA5iPyaSrVbiNU^go3Hspt6H>rB)j!&0bny{dc5w5 zndg{>^;qe2$cuIO`ili|?O%26t*9GLNOtanq;qPDE}mI{RJT-(d>&8gohF&4$ICUh z9p%ewt|wXXv%R$1ytbD6Q5~7cHf7M5_^ss-YL_dxM&8~k`$YXVXc3r^8802|v=j@} z_x6ZcUnh~u&s^1&TZ(@?;>-I;s`h<2_D%l0SJV52$sd*Kau`6B%`xAlmq?T+8>G2SUBj_eK_EqzXe&5zvcW4<6pI$ zs)n!l(>_JH=6GF`G4Pbibq4SpgJkt_^s9KO~@n4@b_!dy1qpRkVSbTlh5o#{sa0f%{kD>NtWpvZLjVW*)BGBqyJ=wr-mojbyPym7c{N^El|T>d!6UCWIikJ+K#3GjFmmz6oT|Nk04qPu=&^adV8Dlv76{Qp>Iasc_$8aQnS|f@-uc#v-_<{bJvXdUH?6I{FrGy~&7u`VaHe-(O8& zy%fj;{SZC;M*jB8NJQ0SP@8jeQ^(CW-G`f95RCj4wYQm4V3BPGM&IaIY$}!GN!1FQ z=9$el#?D$Sn zQ7?Tvz1vljZ>K2lisGSr&@PFhLMUzhp8IVZaBzv~VLU;r%Z(MUH~E&Uz*&A65rNUl z0`lzos>6&F=O~QRPB54evcZcek3n<@c?s>qf@K?)QRJkly8Kq@Fbt33=A_n>t=+R` z;5Pc;u2_&eGqaF%Pw3t_=wKe+9K^zUDOfF<0&=eE5#M=Afd>kFalo;+!X8HcCuRd- zVCHUciPJv-Eh?6MQ6~V@sjDci{??MpKJdWMeEzY}UKO0Q1%scNtjb*?dwI%c6<+=b z4fmsU=0Qb45N{}+A&?`KLB59RiD_RdT=59jYVuIxQu0&5!1-NtMI>JRl8i&>tsFMc zh3~<*{}Z-{g3NqDWZ0mE_?Vuix-G>j3K!(zm#u>YO#g~!+xsSMU1q6>HpO(5CQ#~A z*SK-3^YX=;-<%7#il5iyHwZ46e}HcQEh%~=RTE?O`t3L2N8LSH4a6kHf4;!+2B}V! zU%O~fXS3QRoY&XC*h!BieBf1sCt(xZ}46{fg4|F!h{ z>{)Q}Z*?`J3n$z2289JY+BSWV!0W>xX;N=A6=Y(`{nEvwvHMFE`nP~D4#$S`&@Q4}gh*tn$?}8RhO~KT6{!CsE=2z1 zg(lMm1q7tyyS;1p5YRzwfzLU$woU?5!4w?WkocPt(1vVxMxF5vzgcwJcheal;i$@c zB7TC@EhK4t!BC!6c#i5kuRRJ@%|`{?*xpwzC6nvod!v|l$ez$QVgIZxN$`l}2@Y_K zbDOQJA_89Z?pS;b6w&3hZhSnmRj*8^RF|fTN5b~EhsZ)>Y7L11-)dcS##k1AoRPc>T46e|goEAU`-spg-x zy#8P+;Y@mByAXx%XKHKXD!-h6)K#Md{DI%uNp?Ua^mK1L>sC4AENh}mcObNQkgD{8 zEOYTM+$;Y9aRZs0d)M@dEuNlsfOI_weJ%c@7IY*+usQ&s{_ zTC(^*i?xaVT;v;vNEy5X!@F{KkV$Yy4xdOz2){kfE2Oh{0;1L1bqQWn{IVPRXhdP$ zoX+atWTT}<9A2bRUaEuZmM2M3$HN7DtBaxFvP= z{_|9yz95`EgVhw2R`NN7#ZYQu)PLlxQOy?ApYY@heQhzIs(jJs5XP(hT{YEYkl*eu z;E5CC&ggolBOcsc53vLN`pOWxlsCUkxvXkq=+$q@Ho;6Ao{RbP(e2K zb4a0Oa9Z|um-&tRKQs(DrF7-9Z<9lkKL-iGlZ@SM^;AU172l(|w(5~U*$)w+g{lxT z)G#OQ17}wqScOYe4>dkhLEzStR=Nng0b_r95Nq$KpQ`tslonK|Vu3s!*Sr7Ie+{Fr z9%by|De$E>w{H*tSaQiR62z;7<^I$#K`ZXnCa2 z(I7#EDYQp8j9~#tTaZwJSzeJs)G|*R|Mp2w>w?tQz25A^s~`i7#1o4CLvQ*=M5mh+ zAkIZk(x7i{m*BDOQMDu^b#CI7*`TQ9U(pyp&60?#$JmU=1{dymvquXa0w_L0vLV`k9X-rI49{DGo1Zmv)p2msf%=Vji@jQz1`Y0ybGU zIvc0N$fGFOOJ79PnT@1#P?GW9txPao?RK{O<=$G85M8BI)wYlo_Y-U{F!kh6YFypc zmv?FV9LwlSXgV`wLq|r1n@)8KCP`R`g7>Z2c^;4me*~h>`P|fc44=Xu>u1l{e^8D; z?>2dg$Cj)UR~5pTh?1Q{27&V4ox&XgUaJ;(s#b@f%tV<(-OM;Iq4u!~oCqP>%l0)g zf!KH)Mlx*=Dh{mq43!mm8c6S<^`#qK*lr**22BL`YWS6!PGsx{jXTn}NkO{f;B3Vj@M zhR%q zE%H>ir_jr1w-Aiwmr6;->Gn!s)=u>;)zRMr57wmYsE5-|uzT8u0o<#r#Nq8uOb7n? zLEm^R#MB5V9tiq1*3lnHeJQn>`_aR!qnTp2lwS3XSFgR!fo;3mGmUU4!iZ(;-|Qw*WCyoN zVfTW47%|~@TnZbs1qA-D&RZG|`Y#x3ku2;8F7Cgm6?XN&g!|yYv!yaZfh}A)7$P@n zN_cW@z!B1AR(_EdXvEN4dua&2IoWEj>rkMfWHMwZt-O@qgR(euU6-TBb1ZH~CA+7H z91#0*yr1N!On%w^_fVY&gCbG4XX#p?Q+T)I0mADj`DvxQhuC7E=^kikG$ZG*HE5iI zZ+_ye6hv&W0?6YR_^Ak+NLRn!@JC`|(0N@>L-F#jMpiv_xQe-dCYMVVGQMLXUjjtk zfxIK=eRaxob1+vrC~7q8WW1WgYA70pY&+xcLApvW^@&aw55dSe1bVoozqw?r#3#8m z;oKv__FB>YisIXbMbarf7rhpUnp|SkdbApPRho(t?H$E0NBhHR+sG1i17d8}8dTpY z6`sg3om10LY2^ADnaC3IJp58Y95mX$l_*x&>ttBIC-RnB)aau7RHLTCL+fw~L)o_) zZIF;{GP;Flp&f0?ZPQ)1%GYpfoNz@_!O*nQTdWr^**)SL+0=cQt{$Dm-n)(uY$`BJ zo_7+Ql@ezy8aeaA_qrY4o8J3UV)**l0Ia?2^e!5rbjO2ugm=1fT1_&XG;OEU>}Ymv z@F2sSjHe=O4d{=~#6LKf*ow8}_y`=%7{_2ePCgkv4k8%F)IBpKT{U^{1-H+zwB{E) z9$#yk%#xz?Fr#pd)MaY@pzeiyUME@!O6J%uc+LW5#k?fa#*$3c-U)2yPEejy2`;F6{i49RbCTc z#COf3$2eo=fOI4xV(`a3`?9|n;1hbCAaynM87@Bl3#`X z`LQ(`WAVV18f7qzDWaDb7lU^O)id#-IyhZ>FWKi$eh^eyvHF>Prn~cf0cIm(bm_rR z?TOYuw5<{{A!1gyY-s9vutIAwx{85m08TvBb$}-4nZr|zcMJRZ?0d5f)TJ@T=a?NQ zOvp_2?Gp|byN^Q|V8vQ9yy$QCi>ZGArmDO(y0V}><&753La~~zz<*(e&8TvGZd!k8 z<(GW3aX}HAUqX{e;VQo>+ywVHrkPaX$A4M0n_<}9J@&1@e7=$^@rC-qI%Wo&VI~2= zVaK(s)> zak}v>&QYZ?t%~F8jx_q~j+1OiH6K&3S;QMJ$5u!rdtwc)zGm z0iQ$Di}kG4{4@1o_BT^_3lk`tY0z?YY_k#q9%AXxS( zt}`iynXgxARiCu0Q_3T)(cP)q1>{r^lu*YKBYS_fkfXU7wy?W==qOA)-r!Ryvr;Nx zOSFiP!U-o_&wa<7_@4EU2gwvyUtL>~Ix!B~a|SJL(n>#KZ}pQ`yGsopi1U=#CkIv% zecY&Y)$4SqDZBG_kcn#4S8`Ve#_=gpuQ}cI!yTCTV)3q0*u>@BKUpPb6_Y%~sGY%e z)cR1DhS|z8WoH9>wXQl zPw{UYs>|+Cm?)`TePVPo552#3F)GZxT$Hj%Y@8-H%+}jY^%WIh8fg!g?>5l09eY33 zACyy=JDkmf_@1H0(okNQCt7x#r#Twg85N?{*)FizW^6ZH!+Ugenvv_#41QJB;V z<3~I?q?XQQ)`Het_wG@?)k_dHA3xZiiPG8)jir*hKU)X(I8{LTo&`UVij6dnn&dZr zT|%8iwEED`a+u)OqJSgO-5$kws(4O^x-Vn8{6nqfccWD+{Ld81eb9{aJ)3gh5RP4~ z5>+bn^JoOVqEQc$Tcj#eO-&uacDG;Yy_FK6lu^_Vur>M{Y>&%@&6D^*G(jjGBxH$C z%E0AnF((&^Ezn0(I@3|kgE69orSppX0~j~9S_|st6!pbDV*b144#6W+x-g2m9Yv6F5KTB4!F8hFe7F>_2TJ>TZ$_&<8*hg+= z#)1gm?JEcZ7v33UI_^g~xzLI`UHE1rozG;R6x`}SrG|f{ajlg}kWZIdeIxe;n?u>} zuFqvETpUjs2u_H=V6RnbEdoFm@nh|y;V@9E5sSyY&tN#)gcuX!M~Wm>K^vCZfXXXz zxP_x{=q2<+)F`bbLF##yI*mPgX*}FxA|E_?hGdv=WpAvtOIE&$eQQk}rESV9V_}bZ zC?9}5h&mrcH2uw!l$Bhuh2$xfwY+r|Nc8h|EU~t&Y9MNK$Jz3aN_%AWxESg%Lx)mZ zXZ6JkG0C$u%f6C+S5@!`>w!|1rnv_dEdLU5lYjOD7+_0cp$~4J|EM106V~>Lu)CdsMiUufrm@?2x8(mV9_){BeoFA=(Wrkzr7~;C>XE}b>lv~u zS8aszm0+gm=kk>*PbqcUrkanT){gW@9B|@ya(FGTu`7A~qJ&4Cen;&}ew#fJ2}ifl zu#9tO96VM>G_5DYv@$va_?uH*FDIKWr@jerV4hNLVQ*sJ4r=cKI`0OGDZ?6lh>YUq zd&cp3_^upy8&)cDDRRGcW=+)3Mi8KuWNWFJx6X<9Bufc-E3%#wHcN&oKe0~%aPNUq zMs`B3siJd88flhwiALgL9d)?8^<${q0b+n3HZi=&cy5Huqf_+T3+v3eXC(ET)L2Dc+p4HDK?0S@=9!bu4@caC#8@%VwBYwf$nYS4 z^*6M?GuNKZS()^_uk?Pnh%|bq_ymMR@Klr2XHF-bBn|`FnL~z2m|bkr6RTe?I|N4n zn^=a8k(?BMZPoK2m8`+s!O0x+weTOY>4TH4aOqwCUR-R2LunSq~p9|aLx{!L1~ zs1-0fRQDi-zRv%1IjB!X3&r<-Rq}3Z03$^3Z1ZFkL4u59VG=A?~*X((;# z9LlvX)@m>v#s8kM6IWsDXI5+$E_>q3IjoX&etz0hr`A}%mypbB+k+RMWTRZ3O;bf9 zhV3Gw;Y63uZl)l~T1v9kN}C?rSpfWzET*XW9xvG%f!bMC(LRD4If1Pb2M_VuO-9oZ znHdtC4P#dZGemPQVJ7@v&hVLwoNjFeuPbpJOuXX2QgI^eFVs2F6wv&n#+X9vy6RSx z*>26NCS)5A?>qGQB)LD6~KAcfh z2va|kta!FVV{FA=WV^h`6$h=7@A0~l(I>4kT;bAfT3vRXYlI4E3?o>-lCw)19^ip< z^A61V|6ssf;t6eU#{Pd%XPp#QLZ7<0z>XVQ_6K8nsvnPgai}+MK0r{k@5mx$KZb`~ zP(g?wNwsMXKkz&aXPTf)L^0m*eg#8p-H8;XyHhEDym|sV^Ha>$yN=X4@QA-Vr08))^P5M@H;wJZXMPV0!7CU#)H;0)i41f<0y4{1{IOXyGoH`D41>Kl;5mbOVeIjGqzoj%&HX z(HurQscCjnBrUpcwYI56vW3JjUrSO*cPmy~K2&1DnpVIa4;e@10PrvV^xjjeNuI6w zW>|}`u}#j`eeU6MJE4yS&6h-hql}6QXsgiE7hI}}MT_$+OKv;q%S^T{t0$Sri!8bx zor>AfeFN>>WQWc{;zdZ0oJh4u>h~UR zjqhzl4MKEGUK!pz?e;ca{PF{}l>`;?zKn}&7r|8~rF|?dn{^NJ+B##^I@ebwR_DQ~-+Z9Wwe!#&b^ZKKj(AyAqKL|=Pic8XArBhMk zGt)lOXTl9{54_oxV!5@6t8Wi=_(w&JP79T;Z6=7$#006m&h)v|`3LseK8ePA3Jv*|;*VMsvL@yf+?~ z^b`A4g_@beh-CR;($n$sd51{DY7+E8URX(>%p>ciBJsZ3X(C!s5|G$4?G*6k@v*Zg zZ$yUZcJ~(78wZ%R*lrTq(8pJOP4TT~9^mR~(dnbaRob!T@)BS!R331gTWiW?xYy|mdwuB_4MTJo5go_4D{`-x0wFb&8YQi`05=0U$y)*8=j*R z+-P@Rf4j@gG5FfnpevSd#R~Xz=%c#hYV2FQjkJftcgIG$7#&IEgGiYf*4_NVr|501 zqK?zfq0Q8urS3b2S|gY+NQ7zVA1>%K7C#7{B_03r;8W&%A4Y!jMtB;&#xHh#wY$um zl(3Y9ESBF}ljb^SUQifSwy}`|>%5}Zy`#MtF0ZkBxK$OQ{0;AMf068!`htaykCJik z(4~@adD*-ZO=KJC0Uns@?-EG<=hUu_Y+U%4tg=I^?L0 zGo(dUUA@0P<8s-|PZU!7(R&sfm%jx+wJ!?aCwRKiCmtp%#r*n#V>)Kcw;*1TqI?HE zNt~weNp~uiTQ{Hf0Hnf!uABhpfj8=C3YkDJE8}X>)fH`+r};|}f8=0B@i<65lTjV; z$$6C0t?V<~U3J!!n2Qm_ZRlw@KP2I!SI~`bc@ip-Y}};&J>-OZ13=9eBtTGS<;&{4)LFJgV4PKXvZ;I ztnN8d>RFuIYdC3LW%3df4iZX0=| z&K!WgUfmZ&RHB$8>C<+?HH_lIqceu<%a9q!D$&sAWg%S;GKDem7z@b-p13Ln#)-eB z__CP&>hdniYAHHu`M4mH1fl$C5Z|(f8&9WcB*U(Hi8lV-QLX+HHb#_*T2r89U|oYlw#w(*hFrlzPWX z1u4n5$2-VSSO3s5t)!b_(0}7QsYDaAEK44;BSf6ALDX(6Di9EonawY`@DoG%STFqK z_ZhECaY5%&x0P#i^xr3GiJHM)runPT&R_<{KUJYlnTZTpY+_2ouyD=e-t=)$7+Hz~ z=1naomAYFayjCz^Rlq@6 z81Ytr>d2Qsh1siWd8yk?VrTdeerpf;g#|a4^`HfN3%6;RsrZ}@Oc>;F`bZ2NvFM#GZ zkt+E;QV)faq;#360SEFXP1(C1Xrmm3SBsP#yRswPRM*0ZM?k-RhFowUHWj>KNQ0<% z1`=HjGTzQ{aPJ*5B1yTMIrgdlZU9xk7GZlfDr}gxk*1q5c>}3SBA18EgQaxez^5_w zzQFi8_MUkY;nOqMRhxLGg|_kfVcJ+m+xR8qy@<4wz-}w|pZ$kJ#2C+e7Mo zU>rp8ZAKbzkVHQ9aYr!ugZ!Hm@_~hPA8uc7ZC`*`R>O<{v&iAt((5Zn!$hprJlLkG zB5V>VsX4}m#xQ` z&Q@2f9JOmub@Go97f>Hizm^}3m_+0DdjyADQGUsoW67x3zH6WbAqjvyExmMwEQIs` z4NGEuYdAX(6jzp@Yz^?gmVrb#rT!JQD`qP$ZX;obC#?={koH0TyL-JOq8d=AHMlp# z4hiLY+;^!T%HWHEZT$bi2YVZ3A4J^!1=h1K9*K24&SJeEInJ0MqowrdTWfak#V58K z9gdZW@}WluauS;-FLqYzL%Fq1ffMS^TIYpF*B5=iZGt>uqvB;l{&gTzvd$?EP+ z#jo!S%?*ppP}n%4Z|Rg%jf}!l@9H${P3w5pUi?ok-z%5XR_f_ShF;^1v{4zj54Lnl z#_lF7P?JaCt?{2;So6#s(g@@%Ub+G)Q`n4ANSk`ynf~=YO5qB=<$h~ES$qaz@At{d z`VmXJuH;diKQU{#r;FU2<&t}b_z9hN(%ZF$T8n(<1C5}&Y{PA~AUX1+ht=0);&z6; zk!KlbH6~duPO4s!6W2i!#84SSuph$vA&kE}E47{ctVv%*moy><9ijbOb&xq3?nNC+ zs#{D&)o4{@@NF=KVx1agQd>TZB4|)B#8ur5vFn~RNg12DH!WsBofIpp zGSjra3GD$6r!s_SIfwzCYPzGZo2|ZJi9df8@<2z?fagh>t<|1@r@(w?64q-pt}8>y z2|1ii$d*nL`M{UCz3is!{7-vmvN(nmm$(SsaN(knh4ku!jEY^70xdLOlwIjG>+u9W6)HKt%Yz`hxapDfJYn^Ue>Fx)sR)CuW>4q+i% zz)g+S^eX^i1Oq(1#Kfk5_$15V?vZhqLz{s~h4%Pr6+|Iq;&Tnha9RGM93sXho4)*N zQLb|%msA|AW73J=`0VAwUSu@(Z)8=>a*|3w)U?IwNcjc*neDml=4bM>R<_7dX053n zE=v#x&Cl@oL;Fc!@FuH(Cf@68?`biyIy3WcjpTq=bao4wa?r)spfr&gE)WkZ(=HW_ z6;8;feI*ku--sZDx5ha;%o-Fmv~v(-vgv2X@yxv7RRKp7KRu|PEN}(WTwr|BCm zA#TD-Q$FeoD)I;3+94GrMx;~o$??p!hWBPgfO`BbGth4)olPgco!iHZh;#$^$K*xz@K=M-r$eW6ir zj--M~dj#ff>&Sw|Uyg?c(c|9DuTs7&Y8tA)>vz%X>aL8xzwPD7)clxX825qJ2jsVf z^nuI+?mgOU`y%F9ulyer&ws$kol-Nca1HzpeE8m)w#u8ONdfU$#(0e{{MpXp3%00p z3C&Hqs|KJCwBs~7{^E!%3Y)_)xH0{}J~*JJ!IrZ0I12+tnvUEnY(0F@tECjY6HKP# zewnG4%y$5*rc~p*Ek~@7n5vunL$f{=?x~8wPJ!rBu2$;4>hDV~y`76B{D($dMfb!~ znW&usa1ft0VUwi$=G~nOuDOY5F7j(e6bkwD+`jHp7#$z~{@+5ai|0W9PA&iMb{`7* zPQ6VQhqT&m2pKeX-m3>Vy&7)uAL%5daXK)&rXx5Q7+5Y2xIa_}5X=9LR4{YGI{y<@ z|7UD8ujp<*xQME2*AGmnfX+f1VaYD}RZo_oAyHH)|4SoO7vnhuPXeEPvc%-vp2cPO zP`z7zE)g*>lre68C!SU`S80ldOW1|}b)1B6I~DN9#q;qPCk4jgJ|}v>tpb`0z!QFlwAP+MbK$IFZqORWj5;wPH(aUYl{TINVCMmWM?k1wf7 zNBS*SPV#<6)_k%kjQ^B>oeW7*O|e{YldF>KOR5%7Ek6&c*RcfXHqtdb*+Osc zhn{1A_tl7axbXALT8B}a4OF#kS2-kbiz_iti9zue?DauY)YWoufxsYNShz>U4 zysFlP_%8wh`G@@FA3Vz%7egFTX_CczocCarD#Vwc7!!2FzAObE&Qa(H@*VP59oBgK zQE43eIupu$pF!R+6}2jZRun;?NI@fxZ|9(p*_{O(a>bVhwA9x>E!)8E?Rtt%)r`HN*G@FERv+6N)gq?tH|mr?n@0X|>2>Y3 zB(4T|$HEh4FH`xSbXP{#;CG;u`EO!7(Pz$#)JD6ThzB}acE%){w?$JfCad@B9=o{# zO=!}I-cGtG_@+1yG>zEov>vI<*1Y1Kp5}wa6xK2*CtXF~zp`XfZ8R`V*?U5NYbehl zO1^Zfi>lG%V{1)WJVCZVY!v(Xyc7-x2j6V~Ezx#o2jS>+ze@zhd(|0cWpw>SB>jI`tWL-j% z$c#+@*+zh~R|~2D`YOK_xs?xm^0`%oqPxy$Ga`8N`X3i+!FzJN1B?!=~{2>uYkCJ6WpORR=s7N7re0`Jhuf~K$c z%B-r}M2$LIPYb|{1P=bna_bLT`*9e_hveF8Z`Tr0_=oGNhPCh6?r&KPc376hxGp6g z$*&a+DhK|g{7RV({}Z{**;RX@349-@As*5?4KeC+&p0CHxf)uNH^&e1Dv()dP&oM8 z>EF;N$4|kypk8qG#H>*-?OQD0lize68duiK4gUPwTi>i;0)PC&Z=&Z(TW`mns@@Tq z*05Tvq;R!mmlvmwV*N zVaomY$!`9n2Zj@ard$7AcFl`B-hwL6wu&MxT)tIjKS13Rhu1H)^MT(Q`h2Cy5s>^> ze_Onw{J{49W-_Sf8-8S>Xd!ts45)wNGf-b=XY6YNz(PIsR?u>X-7SPbLIMbfyW{fi z3dn&l2+p?ZjcQQn^WWHLWdfxQu7=xC3jBgJw!(u2W4$KKczZ7*(_;z;dEesM%ryNp}?tWpaU3%iRTzX5iIB1djjY`Jf^0*a(6G?O% zhwz^)u4UB-km6fmn_f4K;(Bfm0)d`&rt@zsFGVuy@r=^g<($Mp&L5C-SOU-qm>gFXG2^QVq&|+cYX(l>l+MC^$n~JO^c(_5Q zW&J8DKIdZYHjYXwrJ;ee3dg=4yKI!XJ`$&05HqPt#j~4`QZ!n1%hkdmO(nU=(FeD0 zP&q#evtVbo_F0Q14ae&i)2({5HSFuQwd%w4Lk*sFWfSlKD6tSPYKa@SN-%9C6cLO* z{g%HyoXpG&F`ly2%b9c>rS^#*R#(2T#1RjNP5phu2es_>Qko8#KtNDBxS{FA+ROeo zYF{C?O4H}}0N`%?NX%idZU^05-mv)cAvaAf-#} z_fg=`ThYuvB4oq!NMT14p{sr5=2ci7Im6Z}&C1x^dTo9@`@8dJ+{wLr z>?a1gLBcpTbApB@@35CPDhs=_s7Vjhe_#}zKUAOQnt0CL=KRpd5FP!w#lR>{V#M>( z!56&3r^FL~Sp3gb8xt!JdyrsmyJZ2vfz=t=Z+2Z?7K{uxFx1J zDsxBIX3wc1GDWS;SAi|w3S$+!e>4PhbcE0awrplx_ju7N=T*uqS+82CTEqL{()};x zh({2_E*bLj*bZ${bJ@(&Q7##4?7%?z4c|cj?#Gzy+58pV2ew4T;4h%7L4FAQi;N@L zNrBaMv`#a%Z@ZH}Hm2MTpkOF#+eF2U1|SdSTB+ozijk|I5cEP1Q~INIPiLF@RoYzy zpneZte%p*tvUs8H)hK~0?{fgJ-$(7UvPE24Pi@?wK6sR|y;%A}wjaerDFQr^9qAT= zf1yTTJGnaQg{Zv1{CEcx&a!P5#l+ zJ8tHP?J-@4%5;1Th3dzfT0kpW;j*Sf>uuS@Q6zvfs3+=ZMXdCHnOjK67cY1FwBCw3 zHrrr4cu~Kx%nmGH>f|*l{D$3XR}rL@-Y@2$U1{zNw_w?QMNiMymS~$4Y*baSXTdpc5L;#)a)c=aMD*<>By(u ziV%VNI4>mV#aapTb@C*{tGh#6tzj)fpF}1}ziZO+?p1UoCCJ+YANupv6B~2d?O=w) z>o;2y)j!q!FY)%tx^!{%RpniSA+5J5gGm{B50jV&(gO;H_g{2_b#<+|-UOFNw)Sh8 zf~$XM?&G5>mSpvg0vVI4d@q?3TzZ#Y?a1#~{d}xCxmbU0NrFeh-aW`>yOW@LA&Rw&SjQSI17&E0@K$;Z@S~4>G{>$jJ7xRp%sS0=@;JA@r;aW_Wr>Q+`vO z*ebnxvw19WsRMO}J41Kk_;89+P<_^qUpMC(WWwJeGp&rq@IVe_+M)`4s%o>{5@B1_ zR8J9cy7_w)1teKsbX;w_rSw0>aY+uw*Ux1EBug%kVLx<0dF*{Le6xDAB(Vak(TqIY z5KpCuGd*F{QhWJ2e?`*kQs*Dq5&Xh-%dRLqCC;$jHu!jvlq#s_fa|%uz=szLI9944 zU+k0V#l^;DOnY*XaGA=M`ylpw{9S<`uTll&HQ^Pv_#gY%5ICJhk9)y;^v}awx4d99 zwx46N(HUU^G3(#t)+B0|Qs5t&YtOR-Xm5?}Xqi_Br=}&u zq!`XQ8Lzn}H=T&uyXzb@!Dc;WFNdJ7N2H_cWN#UEaOtFrZ4_2Ayd@^jHYE#XkPM;V zaRWsIvtVSqjROJa{rANBd+n8(TW6Uk`4+zS30=NS5LrqdsmQ0-6j9={DXrGZfKLEo^{4rL@;0veGQroG*lALKQ< zhB`3VZaGOcpp#fX=C_bOe8QHa*LGit_|~ZoLEp|PsOHstvf-Jf%GTZeL`vDML|XsA z0J6Z8|8}1g+WC-d9r#xHU{>Cyb?l5~E}09@^?wB5t3Ld47IXI;&%a_DnoW|_Uw|d? zYF!@pl`oIz@(fSC%eOc%PMubg-|GaoZ+kwq+i97e0x6sG;m^+_!TUEqobf6Mm$%7~ zR;??SNN=9T^0uAmQfu{Wir`~JjjP2oS0}NjY^i@-rpC6WF3Xr2qqO=kW!x+10ppQ;Dhq##^@G`qv%s)mRf9Uu!`s6Q zTK8quZ0*q&3O{M|x7h)F861({yc!AHk~Qzo#^L4eT9|ZY#$rt+$Vdre+qqr@I7b*6 zq&(p%OAhz^m>pF2h(1-9@hjCrpJ+?Dv0f3FSntJr8lzfD>v+Kq(RU4FD$jk80p>}= zS)N))nb(&j5K#y7P2Z<+e|@o2RaW=cxYe)oO`1W*k075%#v~QKMn+m0BiSvz5m?Bx zqW#n|YX5&sy>(QS-TOUEiKKKZ-60{RfFs@A3?-p-sg%G75;FAApdj7dB}k_VNSCCN z0@5(!d&cMU{jK+pSxX0J81FgvIs4kz-us%hi!T%G!jW(MiFChg!hiBx4;<~q9lRsE z=bj6w5&D`#T{Ms;gyUP3tpxfXs1D3>zLO>k!aLF-eFZjLbI^Cryi7W3Rk^K_69c(p zV$#RmCx8Z_=7x`_q-!&R5**72iwm4{Wy69NVTUU~3}~Z4C2xhRqs-ho)`RS0CEi#h zj`c-VVJzlN10aZw?@Qw~1wL1AKyA@9yKf~OSzS`56%@?~R`L+to-`80CpfCQgxvnk zL@;5+`{<$RTYStMVx2BP6pyU+8O{7JcFdiCqJs@NFt1*caNUpmj(yXJI@Ug;Bd>58 zIC)j>ZnOQZ9{kSCm-~X6pH4)b z-@bDHY|_F!{&ha?yB05~SV2LY5XqHc$HP8UV;(zR{gT7P4R1Eu@R5bmf-#nW_W6s6 zD383Vo8F=u_k@k&d&=tBS{`)-Wr3*{;{%r@2;6ZM4FL7$#Qr6mH^J$_1rJks>i1rm zKE-<$gI9~{*}O$ZMLAEA(`fCIaT1=7Nhb2#lk2$i*j~9^#CAT)%4#Xit@D$9FPEbB zv8{O{TT3v{RDVPf)DcW-OPW+8R3qh^R#vVg5zKCt<(+6qhA`c_+51~*dR<8x zjtsr3a|7#Pa3*Xp(Cx^mpW8!p(Wc~mQ}@|I^hUbA{iR)+A!ThkwHr=MKks-~`CHlX zmu=UCBbmFO-953UX&aHNMaNBjToTBcgHHnsgDUafE*N^slmTb1F(T8slPYG(`!R*7 zUqyy7u|jRsFmwy2x`qISQ_43S#W~!Iq-Fz^oc3exJp}pg@5W+xtzC$SKRv<(} zVrTCzi>w*rMX&>Byy0>L>yVFSvrda#9geMb0PkXZFt6s5-;u^_q~cwbdQxj)N?w04 z91^uD%ne@}O)N^_>3)c_r|Qxpb1js0;)8L68ai;`sPmfhnry>uQcb%o>J`sZ`YuS? zjULnGuN7NlIDux-W79t|i$1~&=0^#3dT^jaTFBDcMjRW1?MCrz1dpLY^{yA`GclDI_|Cj zDpzVFU*Mf+-p3*PTYGv=PqUWr`AZ*qSwmh{zE4cDtUB-9u;r^jJS=l=BDEZxaee`~ z!kD8!QIi-!UyH7X9^-&SjcZ!A+N7Ym*9DgH_c|(i#}^g~Sl@K>?2uh=7bQQt*vhgx z_aQkz5n+%HCKajFH?;a09V|eo*L~4lJs|X9tZhAfF49!O+CybE5e_-GLMt@clk8Cq z&cxA;DX9_?u96D4p1raJ*@ih*%j!Ft?C_{z$kLTB#u9tY`%IkQ!$C&Pe>B%kp{jQ^ zYSQuJ_hk={EFlzu<>aFA0z4f1`Mx{6`6W5UqS8Us=)NW^y05*bS8=btHYb5H*)rdI z2-AhAMC9A)$dZ_S$b^+9r`|p7ITvA&?rK6d;}ZFd`Yzm@Ha2a363r@>qg6lX22GgrY>zr%i70!J`2_3}`SJAhF|n$68&mnOP7acvYaf3CxIxeU;;2!y z!&RVC)0G`GMSiz<1M6w#o;c;}Z!_W(3lO^aoX23&G8Lh0C24Qr6<7MJdzc?i=AxBk zl^Cd;0<*zg?+DAprw&8eA=cEtTCS%)Okgkht$TJvq%&4-wzuT4BV z##a*~W*FD5m}{zVf;pe%L4LO-A;Y^e)hXlsu;oC|mp=FDwuORmX_Ii=`OgKW9j(sx zZn(uM1L4Yftd){HYB#g!=1;R#1h7)H%35yEP%EX9CEw23DMFgk{OF2zeIfmgS76b_ z)_&vtXFcP~AIY7zC<+FBs={&mi;B$D%iGVLdP5#?V^Jh#4?!djDP zSCGaRen2=ahi5!dzra!&CGhN7Q=^eRLXnE~?K$i#a^3Ud!dgm%pP zK3^r$<`Cg_Tm|l~KI0y#uEjNJZBSoADGkd|Yr7RJK*luK2%6WBBO>YXW}S@NAf*6L zrsFThlnZ6NtAi8$s+l>hL`{#2qi@Of3;`7Z4(iW7j2nobs&ka|pjB=?g$lKVdh!gn zDNExO75!o2iW!Z0ft-0SI2J!sZHTeZz~fHYtm;CNm3X2pcl_UeTg8o6%xxgP?<}5I zVigJ@m*r(x)2_Rgobh@KEU|wlH;6W8+g@=N-FJ3sE;H=o9l|5r(bOsW$mG~Lg@(iJ z=q#!cVZ>W|-En2vH%Y;o3XlJFhXJ6+!5oB2vVe63T>P^i0 z2(r{Sa3-wCJ$h>qV%nUr@gWjIR&o1kWizlvM>F;`+#};se$2giO=i1 zy5_^j?1cRswmMNaH9rdERt*M}Yt>siU)Kwh=ouX!L=rY1uGoXA{$eqTYf|_ zE99;=JQ{8eLb!^SqDCHJ&2jS&h3JROBvXJWw=8T>e?Ii!(F`dxof_7Fzj=T`1-&HoLBV0fFN!p4%$%_R)UEla@oX~J ziENmxbQf=m$zCMx{DJzy8~upiXklfM9k#*sn+Zj++UL4rFSoC6spvj8JkS=eh&f&bqiTXyPx`~5`x9BX0AID6#;Oe06 zaa-X1yqA>fJUF40y0V`QVY6$uc*NhJH4f1L8dkWvo$KY35wykUZTFeV3Pr^Ry43f5 z1a%-Mn7NZqWivxV@`CRxPgx7U_E+{&;1UC|y5O=HeASxH8Yiyb;cRekU;tY^FZlPb z8nLL%c9m4~B>bUtISjQ-zimPL4&n+M?w{fYQC9#pTY!jOaFLh_9Utsy1U}+-KHG3j zfX!KRrX+Gr37qtbUuhk9zYb>tH$^nlU>e3JXGb-|I95&7iq|tpmrSg&6N~%WV$k-Z zEQ#q6IoL|cHPfFNW^HWVH5+43O`PaD<7A&olP;D(5ubgyQO%wZ@AkeKB{663S+`tB zZY_pvVGov(a7iVP(yyjY-46JRGkM+4Dfi%7b~E{g*Y3qjWA2)7$vbzlBZWfpnT3r2 zH6%etc_9Re<5{1U*cah%Yl{4uA4NcTiMg;G=kTkhB$X#l-Vd2|6iX?=;P-cL zZe87Z%jmF?=jk?mU>lT&iI2O0n9GZ?tB`-14^5dHzxA1k*t4KPBv5(5>AhbOf=h3r za1tIFu|RbjQ^)mA3{Bx@)QSslfq4|W0a^FAhwi^`YsB05<;Zpoy-?Xdi-c&2!yV0Y zHi`mV^}q7^m9CFS6kg#?7`^0{zn~aFfSG2YdA(mmR%I=PV)Y-@)+9s;F<_V+Ul?C{ z%@>x{yY@FxA>$j<9a&$pePZOZ?NQ`g+ok1pwyf_OQf5t2-uTT2i>##o4klzr z9p+AyeONz!5+k-T`N|P%L=XEkhmLLJS)*8mKt+32Ov#jv~v|0x&9zC{q|l_4=rR<{o3!|u>M~RZmWeIpB~Lm`P35x zyaR`DP?mAc_m?G->ny{L;eKx0L8XiPn^cw?FvM){5uxhrBv~>&q@KqzO-(Li(B>)Y zsUF^y2)b8ohr4H9G~28gA20~Ww$)k|gm#!2T3FLn$#B=OKXe~1|AwoO+nKT<_YPXoW9`F}_)7N-pafT4Geu1P8v^k(v}$qbU>VtLTd zFH=fk)hnX4=wPb}wQnqvCfxom4eC1%P)Iz-Ho z+*hjna%bdjXsCYxN9umj)$B2}UPPUp9G{Kjo~A4VSv-Fa^W$W0=9&pf>cKS-1~tc zkW?6WXN&!GHUEehsS?KvEAL!Z4s#{C-=AHB5qWx7BOgSNtrOr!tPfP(}&l}*Z^zI z%*hfWm{-R_L5k_p0gUrHtl6xiW&QBT+U|#Me1Ndpb+9V!>s9W%Nyk8=HO-?S?>$~s z*d+}cUOCDG`pJ;qFnNc>Sfl)!-*nfuNUL*@v^66tk|S2x^@{5j=akHoY@+Ax;4^G3 zCfAg?+lY6EmsrH|=69!4yIQNq^0wI9S^vnA@9=D3`TKpnce9)UtBrW5&+ww+(*d^X zO=oTAQQ~FhO>`=!^mmJSIny!K-@yVlC7)t8cRN&WutOx*=+20=ulIw#r! z$B0Al3-#rtLvqXhV(=d#W2HM?k1PWw+D3MxexADJJ2KSR!X34^k@9j57$uLf@u))_ zU#ro&S3_zcNr6d2Pn%zmfcxIIMMq5w$c$QS zyLJ0#q&nZkOOy8Ta&@=ov4qYlyT-`k)wTCDNMMIi7>;M{6Z}nowx%AAY!p2MIqip% zrkH9}|Cs+uBVPGCAHhh^^BoyW=QBG@U_9ttJxmeSp(TG;SDyl0GEI8NgL0*@8yj!Q z9h0p5Eb%t3!peg;8bQNE7}918SRDt*I@68RX2Mc&Rta(Rk=bA>@e!rRlQaF16c)~L zGgSN4{$8pNYw#~hl3DCMpxcP4WyY-5`stOVLO{=Sc1ZnH<2@XTn^t;pz{p{*+2Rsp zBAZV;pX?!G-oWLeqni;R{#%&Fy<1Gr=~3b}cZ;3!YxBs8_^z4FV1(<7EvdGO#{xWQ zgbtc=!D`vZ3wIW0r#OQ7QoE0r;5!^-bS6j?^W|d+-yhD z62TgH&cSKaNKL<~Hq)k680-fHl`Li$bk?R43^hY1lKiV(!6ya3Tx#544mwn#SIe~6 zC2i;4xQi;ps&IDW&y7=yo|(MZf{gLOrljTa^8kYgcGnvD>M~nEB=XKLjX5%BEWssz zDc`ul^)u$3JA4-`vyiNyq!}#{kxu4ntIrsgC+<%21a)qI=NO_vw~u%gXuq^7UOMdO z(fHTVu1S^4Uk^dR&s!(i0*7;ocSWqYgDDkVI-hZD1EB-tL-m^w9VZbDUHUC-$g6;V8eiG6@Ky%NSo9XY-ty!#968q3aeIhM>^<>S+p_58VY# zBZ!Sj9r9r>wLxZ_3@!+f_EPQE4AvSof6CZ2d}i}m@z(3799W_em5PY`yXtR{cSu7% zslWIF=kAClCnboa6n%)E%?MPuKo($A`lnqBPO2MWp1?0>yNP@za9{aBFK4Xcn(RJG zZ}nDmo&(_=8{(O780iUZQdr;v4899_Dh}FL3CPC5c}EJ5l=+8uSs$o=mu};_#)E9NtH>BoSG6w%29o6QVLUPn zy4RTsU&U=9)j?=xhx!DEi^$)PQ^g}t;3f24NIG=IlWA8DRogN0w{JfLFFVpLDO z8nU0tk&%@#AMhzr2!&Q>+dL4{p%LUN@QaEQyTLpR}Bbthn)E-h=1O7pB0dYM_K>H zNc5vwizrULlOB=OW&@F*O4mOyUm0%e> zB41qX#imab(x#uwZDoC!fcbDkmI`*N&L2ozpJNgblDE}meEGjyx;OPQm32%W3xrqc zEpI`MPno@y?|q-7($K0RUY?I;`Fec@3DHI;90@D>h_^mTyUH-{R${6KZwk`D&j79c z6fW37Q;^`zIZ+kg$6q!?pY*siK>ds0{8r~sm{XI=R)cS9)@b%Q<1ZshZplx zUV0hhxmG%QDslUQH?F8__tTn!22o}hkzDe|+v*`R@3NK0`hsfF{u;I?^f5yr zs*G3yxoK7Y1+s)7P%1+4zC8mGI)&U@xnj;Oc79n#BDBLZmxiBcOn^cFMsoZVj|H#t zBhJ&qxB6N|czl|wdQ+^)%URguIYtj{!^4z0F(x|rZpKiB449N^cQX#Wh!$^ol$lV8 z!A|xiA*QY*6u&8uahFt_lwLeWIF&dUud`<5sDG$iPkM&w%aAY8D|Iweg)F{sKh8u> zl3Yvl-NJt5b?(*CTUfb~7|atM9#qcto#Z+PPy1qs>j3n+g0D^FDHdn0dkO(8eC@lU z5((KUZ!Ss)n9rM10$vqg`5CwCmCP6NUOs*uftrNb^e9~&Z>9#ejbc6ih0OEDkLQsk zs6N!!o5zYW29JO^Py74kWRy(JI^P}X0mIw-SFl~X&xPbM#e|Vmrr4xaXJJ7zSF`gI z!$0clwRj4Kf5Z|`)}YK?9c_8^DWKx2fsow)z_008?jdZ*=t3AEbPebNtX+Jt=yC%c|35~X zoAAl%&vHS|N?@ScXdi(`;-1cp)$O8za3#690lSbj@0RqR{~QNQQ5m3nboAZyB7%-(SqW|ylEbG zMoZe8pHT3EEu)TH^;}YK8mtktZwmbm68}(!!SbY;DI0Z0M*2r4`_82rfFLB01>m4( zQ!6TVsB+0RZF(wG_A=o$EKvm3x`4+UT345GCQIC!`eGK=n|bLmPXV9%1$iDbcKCam zJMLyQk!_4eX6$>DS9&FFTUP!?2z7DyXH#PWy4xxBX_a{y2dmBbta-ifaVE&G+Xg-i z*_aqRUD$ntPlzd1ry0BmL(#Fx(80C}1``}{(*=GeFd9Llo{>GGT%C%Owxa3mclmhMsiV@2ec~a{n!dq@P;g@=xA(xvE#t$X4#T zukc4r-5kJ(@kN`Y-O+)hZ;(IGfj2B1-6>Pe85cI;OD*(k^-Yuje4$U9aBzKh*20dG zRjT*TczPzcghKEC>v{(jI z&IxwvoX5|TBGTE@E#T}tgVjCOFRWF64IKQqs{c*w+?!yoq9RU4uUYToqv|dps2RJd zsM5_>nzR5tUaE}q>~~HUN-)GfQc=F@JZQ%`XZI`7_6Aa+>PTCX38g%6pNI}bM08Lm zTLwPmAU79&4k2Zqp)bIlr1}oEXbWNZ!kbK>t=XB$;oaXX2f~!H!HgV+DAKxmex@k5 zn1uN1>V!6x2Bh6?Mrdo4QgynDG{wh{tEi!cvlSLHxlDFfeffz={j_d7GDh~0CBBqi zs6hvi`a#!)D2iWQ)T=~~p)`9AApulA z@9j0cVv77pGIPdH$pWhRWO@C4NIy(H7s>K$ez+)(n`w6Je6t22BIpGu!9y4 zj@PEhXDs(J%Rg(%Wru^t7YItKLxwZVCk*D;OVEh0-zl2Hen*+dbnIEjQTporxw!su zRFDaBOrZ{^}#c}dKju0`$fgTC0Pn2TG=oSC+Jz&n=H zc@etYqWcbyc_`wp(i~N*KU^m6_-oEvUIyu$8S@Nwt1Fir1fV01 zIIi`)rB7E% z3Apyqdx1v=(<7s)M&;p_68LmD{2}@JmmH`g;d+lkvx0&s^Q)_X{@F$D1U=1l=}(J6 zO;_OKE}9hhv^w{6^ae%B+zaA{A`yYndIVNt?eUXovnOn?AUmH3?1&4OEv8u;e-`av zG=zPbxO3EWU3tKCyw;~8=bRxuFEiAX6s~{77FWm0bg&hN3{VRRO?(-BO?G~l13Lqa zWz;sK8#l%SwCHVJQ!(^p+O=QARQQzqP=`tLmJs*GOGu89z_0<0H7%ZR##wE_6dphL z8rBL}87|}>U)w}dC4h)}yf~ZZ72NUNO>kDM zCj~nN9*E{E@|KpOjdd@5~RD914FTUJ%TUq~8`ec#?XZE*q@*>pcMAtx?}Q>Vqh{aAALk6O{jf@0KQDyq&B8H!Ki)rQOP+}S=FRrZ6P zL4Lwl0W%^iNyk+De+bV+1P;V0wi{gW6~_um!M$3pZq9gnI}f7Xq) z)KO*|9BnMM7B3!sl}7Z3i1|D-xJN3yQNwkW&fMD~($!T*%zLgKrQxe9W1-|8<^<5l zmQhc~%3%Y2{zT95vguO_O>Scu8kE!U7ah82yF#Ot6vdP}bDT4*B8vCi-TE`fZec~U zQWo5l`l@$tG*&h$i^GwYP7Gdn4Ewmv`+>d9O&KN31$cnB0lK3Fv;~lf@V8f-zfU5{ zuCzLTEjo7tQsK=tY{kE`2Dz;KGT&5OfFfAmS#ZfwLhn3bJsLLD-*-DhKZ*-59Dw+3 zBLGDjIzC_6sEezRny)yo5^!<6lfqIjX{l4zQi%+gG;x1YX$YL~&CR51YeF*QyTC9` zsNq#%rZeh9YqImWo4fP);bERnP$o36+&Y%&IP)AZ2{;!O%x+bc_s87WpI?6H{NbsF zK92WmiL2^pKBgSs9khJFq}}ccYhz>ZAJJ}axwXi?6hS&q@|zCT6So11 zfTfrO9?eQO*H^UkDD)%#v zzwB%Xzsu*^i)M)$Z_j*D*ym&u^Ia@xXg67d`p!*vV@>;nk;;<7JEvPd5AXUso6E@2 zzALp^{ymd*kY5rV0+B@SAZ+Y*=c4pyVj6Z2xz4ReoU)cdv|)UF!MuofXTpiU%@dxu zsQDhz&hs$j$2<{sm2Um6o5skeeY~>wW352=c1GT3dlz+!VK72MixVB9h+Sbs`_Nt;znqa!90ORlpzsb%3vHl9(IRbvD^Xw zvueFkf*)tL4@EfZV{4&(r3(gTKM}lp&n9<#5@qMiCpUsP24m(v-r<45EdYNFqNULW z12l*T{ueEbrZqkP0~NK9`wkhFCAKf!?$e2JFq?JfT~8?YTtnJV*^w*r+Uom17BleK zF&(Lv-cRe*)9~skit_qLCs6h>Y~%zB)E-@VvdBUK=k-q%^Z!?i8=Q|wWN?&P5IZgX z^ns^r5=*Lf&R-J5Qr8cYWFapYXv9VQs=dFU1VjvvHA-fRC%dQ zJZV=9OjtZ0{_PgNGe{FrCO8ks5+2w}HGnJ$F1O-d zbpii-4X}&5(q0{;jh`aMTSzW?|6(k|23v&k5@hFge8izoHh6Z5Kx7A)aAK`W9T%ln zn^h+IY$;Bkb`#u>(J56R@EG z5m7`Hw;!Onx`0ekM?5U|x$iV9z^u23?*VeGiODpN3?|LT*C))V;9GoEW*qTpF}~Db zETSsP?8hx`6G2mDkWI{rG6H&BAk~>kycG;@nle({bn^R)5g!CjiPAEJZQxGpa-?U@ zB2w#DP7nc5?!KUWIua-Na}e9*U4BhC521$$?C;E0yC_oPy63cI;AuTCY#7!gZa&qb z;Fvm{QL&>~HF`LUu^`vRQ*@AQV+fl^R+79)d7`Jt{A7=fy+E7Xn*;Vdh4R@K7J*#pTH2Rm${OQPL$cEOWg`|rmM?E^bgy95we{}6t^I~Hg!Z^b-*9%_vCNsu zJrXyf$;w5vaZNFZF^#Gh;p8J(R%XsSpJVO7ds~0?9d%Uxq%Opw4t`x$bYOo4X--5U zY;?rcdZRxUixSVQFxaaLafpxWx+b4KR5T*ayM0#Z4*0tbtMfF#w*dHTL#C3P{dPm$JvU2U6^y=!@ zn&iDdCjv;NkS8?ls?m%-I-myAWjnLX_Yi6K=S(8iBjebpab|Vb_}=$l|KR zX(q@Z0-L?HKBf2_O5QTNx8zhG6Y|_t9FzmnoLR)1W`3_q=cV@rexXnd(}NXUwr=&? z`bhathX-%1Q=5cUiQh`>H zF()B8g$#}IZaKs9X+JcZ)f=VsD`%cdVtVRwb{ zN)3bW)BejDZnaf;1r!hJP6e$tjZ0MizptuuUa7lY*u<&~zHEH8(f^i{b^2MZ%gER- zMWe?HYqo7H0tttHW>=0lE;vszuvtJAhJSX9!xgD_u2DU{DYR6dI1I7BjRS1QF-Nv) z#K-ceEMH{??z|>OW-r(!11C@Zr?o9;%BECZHnmt+GC%PAyb=P6UkkIfN=Y;!{jag} zA36QMQn3k6(?htZ@{f}VKJYZM5Uts+N!Rz?8^|NM^dUx_XrrZ^EDcS6t0Q}c$Ne{uOOYnk;$LEi;0yD zv-LbC=~#2xa;TVvW-6uhnx5i?IF zhUI-N5<2A`Z<SbjAb-KSv39i%70;}5;kc~6&ZJ3bNf1{bHu!SZ_sUky_j9Rm!8y1 z4Lt-4u(eHk68DrfKr4rqqMknFq&eCc`Ram+m5O7Cug2h~@kKem6^hUPI#z*K6XY*f z_8D?1nt2`wr7)LR+wBo7Q#ri>7y|h14?TuoduaaAj8UXGFRwP0-ilv z4XtcGnZwcxXtsHaM5@852}Uo0F~0b_e#E@7OB9z7Ukx}7L3|46*!+7>H2wz2q5MB= znQ8;_zro`_y2PEzs4kZ0naWR?mN@f+iFR4!CrNoauen#JO;cRH4{!hYPSj~1fsXL6 z2!)$uQb&K=H#=7S82x4pJDwy6!gN=TJ<#spef23!$5L%K8D{yuo7jhfHxhH8aT3gd z_%+j*VL$e%!YPnBh$iNfWaioPhQzb=t?Z?ZcXMGSmtU1bCVuW-=?WAr#;R-fYNHMs zf*>Pj>z~Q}^J`kt)nc(D3uwI|n|5%l^ZHnmT%o4^DWZrv641wvPMgYCOFn@KnL8>^ zI<<=};V;3~DT2OUr9+>K&I5L+ae7^%RhKbmDe)s0Qv2K>`!J1qJ5rrOVN2qcg*Q6H zUZ4=5%)Aq5Lqn@R*SWUIA}k)9&Nd+to%POqkph{ZQWw4^22TYu&!f}mzGCCE+C)p0 zTG~J0j?#~G(|PG$1DqU5iJaoGGzGAT`c4tYU0;Zw7n>~G&|zBz#AhVpV0o3| z$0=kf?bzmzh5JZTtKB}iEO&7J$%I_dy6u_GY0v=VRG1@;x^484>xbly+#7gr4IndqsEJ291N4A{j4nYoL27$QJGM3D68kOA-F9b||7HYBJBw)h2u0jY9^j z66{_%6yA7C$KzbftCAv2Kj6~-*!>L5Tp+kT?cJQ%KKFNm9Q{_;%7W zvI@9aBUaB$AVsV&e{niv$Z!=+@nTGeJL$kV`L*>7ZCm4 zkk-Dig_HG*c7JIKD>etRwP(Yvcc*(!c?*&n(2_Uzr;ebBGnfpTdM!REr|`#~8S^AH zNt~mab6)U@onlA1+<2gdt#m5EI%p# zAEApY&;!o!IQ+KcTfP@!GXH#)JVho1{=T>o2OW3yM)l>8OO}W@Fr4uONxOpVpCU8Y zVQAqQauIf_PeNwfogXmrf|l=DiAxdk?6Ke_{R$(lLHag5ao<^{=ay2t;%jBp{+Pw5 zk-$o;+mEe)!9U2FB6qO68(OiWU1^CQc>xbTx6ilYOuLfP+x-mBnlmN-IKK#}7fB#& zMq8aN%>R|2vtYi%Y!1l3A(%#Yr@(WwrLfI5<7lyC_>h$v<~kqf*a0RHY;Q9M@q>*z z^gS+;GnX5Xl`#-X4i7E*=eq+vF)*tZ#0eOs0d?m98>wEk#ba?sC~k(vUv0q zrGqRSE>3rA#PPmL^De?PGDth#Hy^YnZ!7L~m7T=23)fN2J@8c5yTcml9&A`)xTfzF z*Y|D8ak_b8UP?bk%=b=-8xQZkCoR~gQbPY?uynffF}Tde8?&R2-}`;~#gIu+KbxJi zN_M6lNDrrSX?_cbQGJ61zX2&X-zQRmNYV5ibxq#Mo74m^8B?585Ww9Oc4rq55r8!K z-{}o_A){S51E>}WrVoca)+A-0%U}%Qa@hrzGXd!N`!+7)L(bblD$YZrwFph)Mh<4~ z`cdP_sxB$(#wYwD!gp0?t-%Nq^q}oB6A*M`{%%47@AEU6HvqX}=KEuRxQW6*Spm%- zMwas#Y;G;e{p3A$rilVJtdsp>1qp}wF!BaBx1?;geA!&+eXmypzxTiOKnhj>_#UeC zHLGisOfAYWlV=c(8uT`D?LSaxV?%IMZMG(dFXKbBnMoP1Bv6y`*Rw@VS2v+`i%9sP;fAGsvG!fBm# zr17<%>TDCP7+-3EB2T1>{&QwGO=%JFFNt48E+79HNq}m5AGIzOiT!Xgws#W*9n#11 z0d$yr&lK6ERfejYKvkeYFiu;LE5woaubYIv#Ar=Fx|;;TOe(q2e^?l_13?t3^_c2j zJpZ+s{vR0okC3sV07I^DF-~L-K^?sGfbXH*U4s)w+GIv&k^g%ETEGuxnSpSWKHUr{ z&$cJT4-H{Ig3Vc?TiEsk#$b;5nz;%ir=}}OZz?Q1N#+tSttK??%INovxxB7YZ2ixz`UDh9jD$%_&VJfCx;y$F$=BpV zG{>;VY87E^IsgsEd@90kj2B|8w>^K>`AjKp@6i3Cj7>3(x$H7=*eo0#<@|`h>yGCb z^$mbAiDxJxETfD<_F>bK<<3~FK`N+v%gJ_!iAn!1IA${}yhKMbd19d?;se`b>aR~3 zB%Xt3Yx#zvSALy8dezm?Vo9Wl4Ky&rKSK#MbKIC6?t&w)Fw{noTRc}u5#b7YD24N~ zK@y(V>9A?5gKXq`Uv;v^AuU|3zWWBxSquykpGd3rnW|rA?8>X0WP0CXL7gOwth@g< zgbYQTc~qCl%m37L*D|bE4;hzdNucWT9J~Rh7T@+x=PZSAd5?AM+92X1zN2Pk;7giXZEZMjoNPHZ|B>eKzGO7Pi<}@ z3VPylcCX9>waWvo&LQsL0QX*3OIAFUea=Ae@gf^3rqjf;>UkbR z#PaVwJvtcZFnF)*K(5OeonHbU)cD3s%7a-o>sF=MCzyG62GB);i2cWEUP+zk&I!Sn z-(vg-dzto9D1qO37ab6Gi0xRIt=tj&-Kze+KnxEH(;YCyzUeCF24HpuGg+JB;O%$A zh5P;GLD|(UkE0*u?8ZOaGo&c&sI^d-8UE^WPop$ETCcO+pwF;jh@Yb~{UqOaZzO2j zeCkcneqhx?FE1Vsb2Y=AB4XBguurz;(^u*EU#}&7HN)CaEG|-=j@#!A5P^LL!K$G( zab8G4<|Mu0HKsg)gawpL-YMQubM|!@*a(FK z{2psc&z7)fX|_lu#=Cm+wy025{%j--ndY69G_+ja-2ck`^#q80hOjk=Tva~ohD>Tw zz;&sWGevJBXY)x;BL)~*Zg=3DM~PSSRsUllb^)7P*2C}Fzhj)(*!36Vz6vQe7XJOn zsR+8q-zfFL9Jx=-CB%znVB^V-?0nwbZL3aaw!tZe74misxE@tpx(>?hol;4@tRf}b znqX&q(YCLXlgg~q#)?d#rh&elTnX?#8h?`WfXc{Letm@X3xdW_& zobxkR_ZmLEe>_oD#&vZZn0UdF4-J#B5hjCUN%|uy^q;3IF$Ubie2ITGH}}A{L8ZaZSiVHMsRuQ5vct-|BRx zGu9xb^Hn)ck62ILj|*W7-6hWe^3rUtaV=bO67DM>d|D^A)#JK--S8Y4_6*q`UD>E% zAZAj*+L0k6Gn!Jmp|C%dcn0NQ5*N{nwws6ZidCvc+CSE)7qRsJn9%3VHh|M2T)(0p zvaEFS%s%9(i5Ru};`(vbaifAO(#WT8ENX{3m5@dKo1X0Cr3%X7*m{9JUo0|2Dp}%f z5?e8CiGouqwa3Wtkaz!gcKsCZt+ix8=Sa1FKhgil5p6UoCd^^x*5`}@_dPFgGfRt< zN+79sDG`pX(HSmlzUTMow3YSG@>~+Ad---B1$Z2_*Dp^5PTqtgo0*UrvTDX*7Vu^_ zPlNT5+FYwZi@1XWs$9t4r-2)Bd~UU8kslLsVD-@kNZNvYH_m1q)BBk(o>P5ze--`A z+2kN|N_HwK?#~6pokd_y*{*6d)huv1PxMMdi9v}igmEFjb>Qq_=XDkB@sfzThz7b> z38tU?2W!h%swZEnzT}G<$xPAIWK58si|85nv3~tke;xS~vSf!ZK8mUFn)5R_<3UE6 z&XP08lH2`R{lSgxS{=l%4VrPDn>b&N_3r8^G1#!F<{vp8|9W>+eKk>2{9A(`Q+&WK za$RRs+$|mVo52@cwRnvhqq5;Vb^^SH1eMYs)fdjeDw?M%llmWEO1)}f7bV|7%XM#~ z(4@;)RJgXT4#)~QPVd56*H%z>V0Foj0*R&x#*=l1P4YL{E`KqqBo_J{@7wC@x5#_} z%XSS-eyxQYZpI1D?lw+zTTQmf8gk`;`ZHGhS-MI{|G|EKefq~F-EZGEw8lQpM^g6P z-wyugGc?AIqO_>UPi0VSv+HWasTE+5e_cX!ALjqo{-M3GcnRfK<;kbv*E?4wC-Db& zxQ6a7x8+&Pay0PYl~#Go{Adg3GnbFx-8T%4nnzq~e-Rd{DHAcnxK$y=Fyw?2p?v zi;C3w86=xpR?jIHTFALQY6^`vK&#i(FMNJ$SyhH_aOSV+mQusbXwX@t#tel+8QaJQxiY3pXd0w$N zZ>n9yQ_=C+$X@0H3401;Gk|%LfvRq3H;~2c5mMCsiy{1zWQ%Zj#G(9v9rCN| zN??2<+ldi2k}^rD6nB@=CJDNdq)NzpwemDVFqqx@n)nFW9wXA~KK2;eQQskc?CH0L zsd6pA8hqX2i;VPBzDY~B+-7hYI6z8rZ4%THxW&}*Aj?%TW_9rKmp^PtR$9{sHGit8 znd1Q4nsV}_D0RnX%gMLw_xb$=&&>0Dm+QXn z>%K0vMF8#LW8nJ54RB6mdgi`a}PShW5qtC?4puh=qV!;9U%7As#CGcjh z?S{L-8;Z*XKCzI11o`*VoKXNljYfqP>5n*=`V2VmI=DH&yPOq{80^Wtv}f?hp=B+X zcSQO*7?XvZ$*^p=?PFA#0zPAEE8QcY%Sdt`{1X0!ffjYd>&knEX%X_Bqo2Jy|B6o6 zxbLyrnY?`^JjV%+`9WVDP`2Hb?MtVyL0skA=#y99K9K6@OZ`4g7KDh{5wB^)vskq?M71d%)D;KfO!Ii4T1r zLQ_RgkFv16pnVrj>p|0dMG--`mZ9pLkq@Qj+aHl@1BJUz4nptuiyzfA<++{azY(ad z0#n=slu1F_Gc(;g(HYkan|N~4`)1uc^Jz8*vu8X+8@!g18yo_jjDg>^38;+Sj{@Q; zdN80MKhbp7f#DcdFz4IS#@Q~W^!Cw883)n5spijU33rTFW$(f)H)rCjEM;kPt!9ar z+@)Nr#ybv-5e60&K{K=h_TIwj`KWT{D%Hk2CgZ}{6CL3uOSPPsj-Pbw8EZ8u+eAZ- zmvn-G;1R>3XTKF!XgLUL0%S&|P7y11?h?xpL!z2#zMv`ljpEg4`LT4pf865_xd<)L z*N5&&LD^CjA-(=)jkuT__#dg84vTUb8cbp^Z$+TxMQxug6e6^%Ql(+J-uR_4pG;%h z)SZU2Q{TK49Hj8#S}>A1y!ee*-NsIO^u<|GtNSpl*(06K%x~2N?j8U zdNT#)&T>{oxrmX&R0SrdEG0Wv(|920xfyPz)3wHdQb{In6?NF=6S@kJeEg)jsMz-} zJ|JdWQxV)rO^tcKwp;%y*Xg|{XA*EeM?yGn<$6*~W-ODf4c*5W1pvHH{6qsz{)zq$ zse(;vs4uI^M+FpIHX+KZqUvLPwI{ zq&GU#9tsNM@=nW@AIB|+%6$0skSk9^53XF| z*<89E^V3YYD2dFc_W^}v3Pz$}tWhrr5HO0B3s@RbG$oj{=C6GQb>@M=M09Rp)5=V`^y4tTe_4;}nQt;96OS^ER2Qkxr?S5kD!k?_VTAkh+kE`Kya%Cw-&^cpR#RGfax=Jk;I|Un{3U%&6+vIrvO#P<{|G7H z^6vTdio=^arv#UD@BE5z)XkXreW;k+Ula6qL>Vv|@a!`!_S7|T_buFKyDk-i!Ldd1T5Vhn~|T2NX~L#9$p)al0n80+7LK9NQG%1!keBZ~>KM7jZn|V&4qUYqcWb)pXC47I6CV zd=WC@*=?W0?1r+L)IFpqM9mm$MV?8Z21&@&lMv`L@wPu$;BL%N*qYs$8@e++Z{ZNF zcur~e06mexcPH8!M^L6Uuq({XK+T(PEkqLTwb|So5ehG#D%ILI8|4@vi3)`^rhe$a z@fhCC?W^d2n zXkRP51vSnMGL0r~d}A5?UN6q8imd8+0x6m*Fi<#Q`T)jY1Q*CL6$K3iis%!c zt%7`az$p%KU%gZo`d7(UtxYkTwzE3DRQNwL0dhLd)L(>+Lo!vEu^ascP<=bi*S zBEWKPP6Fx@_pJR-|uvBew`#Mt;Zsh zX^6x^V(4B7ihTBkF_w2y9YHE9Qx*l}Yg{CUtP%T2Tm%|{N#9C$8X3;8Qz%_E;tXcp zuF~z@BkXA-ckqW>+ls9IK4G8%MdFBkCT;in>j<{z*KECt{S8-LYY)NnHlu|P12WeR2IRFVn}d^fN{O0^SCUmL)dNAtp@z-0ve&tSYG%ViLe5&Z z}{%kPq?u(eE{`1R^-l#$~L%kPCB@D1}Z?eoLhQsVa z0ORlBLCF&RvfWZnGVIpWj}Qg9-wr?z3f?dg009669~%}|bOmqckR2%!$J?+)OEd6J zmFj{W^wA3(8*P7~uE=2=^seDn$d>odKJC;{{Gub4QwT@WVPcvx3Aq^a$W0=l#{3}s zl`MUY0y|$vr~RaC{v2TSyxl=lCo98i$+M+&L4odm_>30jnDxp=+3lk?YeSpL+AJ%x zzK^Y90pHxWd+QhhfRpN^*8pwZ39h@wpm16rM{r;m!BNte|HMUX3%^_$ZOpR zlZ%)H#eJXiJDRi<6OX}D(V1d9KIN+*FZeU#i{+0P7}Y<6Jp`c&cU-+i^Pzn6$r+~m zzITXK19LjZ&pP%~ant}KVH4F7^OVG}h-%mYE0s^A?|~E$B^=*Q-yj-u|8~toWoiLR zdO*3;=}UJ;L|GlXw~6jYCiK!4AET-MnNxZD&0w@;^gkdZViqbtgnPM2IEef#{+k~@ z(q^wu?D&ZQSoxy1KX(#Q-6cDq&8$lMSwY9G&&3Q$@|J@PPR5g+JB<@SAq=eawu7hl zD!*QiS6;~04pUcXR;6s4)HO_JQkL$+2Q5)^fw`6eSDORiZj9KKJ$19$ttx@Y1Zq}) zaDzm_PmC6mO#Kz7#48{bqnl+yV`{2L42Gg%(iA5=-2pSX5MC|>PH_;x z_R0l#B8d>j>ARU^AOxkN_gp*}%i3%-!O&W&cz<~K2>yRk;o}i&Fy#hz$p0%|!BS?Q zOAwGD=9dQ0xl-<&iG4wvw4w~}`D5wogO7qIxC`VXo0-R-5w#6SGH`E9Ck0;LE37Cf zqIi8b^Df5z6mHdLIBA355A^2|y({zzD)H0&qYi1CwfCyXH@im+$e*}Yg~B!XOqd6R z2@vs4{+^%Y# zI_XXP(p)xa^}xNYT8ifMv9p>zQsG+RL7=8~E}I_woDsgtB_h=zr>l9dCpMs>3K@eA z63BJ6@gQlc*X(s|#c~^Y2f_6)N*oF4^M4nh)^uQvphKKz?zVbAQs585UMFg>Pg#ac zSXQh?k0)%%Xl(d8aoXcynX|G1EaR=qv|G4wFaxN4>4;$ry#Zz_(plsp-g4il1+~Ak zvYC~O{L@FgckR^`6B4V?R0Rt;$-!lp+_ePbo8k3x%>t}SK9YOwrC1p3K>btwIEh%| zgq^2d!%n}MFuiM~$!!6lRnvHDj7|v+V^pVT1z6(KDa8%s`5LA0w1m0Lu~b10;DF1a ziQNPA^z#^LEwDNJC(3J2z9j(C$JWxvLS)BCc;jt1DRx(oAUaWF^nW}AXu@7N39%~% z(V*Zk`Bxo$vJh(M3e1Q1i5|@*B$v$`EZ&5=99yFG9H6k<(_cvNU}tM>EqIV5e^>6O znnx9Dsjouc7lSYY*!seAD`wK6!Cn&T-QjvG%?kI}chYcmJpfxp(Y}mOGFYa@Dv!s@ zoVV2J!EB(BY5gm1Nn)|dIn~_>&blu^Zyz`<3{YM^86i(Hk&*gBTBtuRjO$n*(BN^( zM)|xu*WWfD_&G6RE-?Vvj?d@;9c+N~Fedj&%&Vz=qF}+hsSl)X(Gf2XQVbM6zX3yz zT2o-4h0zL7euxw-4NHmV@|2J3i)@!*O??DW0c^s3pdp#?%m_&Lo69_6Xe$-Qx25gZ zN?EuxQ;-z+X6Nr5CTn!rJ{tRq{CXrz_e}!bC|m(lILw0jEfU?qH?ei0hjZ1fS){yzYxoMq>G^o$G;x8muRs$Jv<<=NS}75O20JL2 zUZFshMed>Mj~ITB6(U&A{U~LjFJ{kxDj_Ks+%Ck844{?}RW{QeR4Zx`s%r2xuILlD hfduV{r5Y|_RtZe*rZYUB3VT diff --git a/Frontend/assets/samples/XSLTTemplate.xslt b/Frontend/assets/samples/XSLTTemplate.xslt deleted file mode 100644 index 3ce05e2..0000000 --- a/Frontend/assets/samples/XSLTTemplate.xslt +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/Frontend/assets/samples/sampleXMLForXSD.xml b/Frontend/assets/samples/sampleXMLForXSD.xml deleted file mode 100644 index 2ba2458..0000000 --- a/Frontend/assets/samples/sampleXMLForXSD.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - City library - 345123 - - - 7321 - Adam - Choke - - - 5123 - Lauren - Wong - - - - - 6422 - Harry Potter - 7542 - - - 1234 - Macbeth - 5123 - - - 9556 - Romeo and Juliet - - - \ No newline at end of file diff --git a/Frontend/assets/samples/sampleXSD.xsd b/Frontend/assets/samples/sampleXSD.xsd deleted file mode 100644 index 6993ce3..0000000 --- a/Frontend/assets/samples/sampleXSD.xsd +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Frontend/assets/scripts/common/hljs.min.js b/Frontend/assets/scripts/common/hljs.min.js deleted file mode 100644 index 4cbf349..0000000 --- a/Frontend/assets/scripts/common/hljs.min.js +++ /dev/null @@ -1,1202 +0,0 @@ -/*! - Highlight.js v11.7.0 (git: 82688fad18) - (c) 2006-2022 undefined and other contributors - License: BSD-3-Clause - */ -var hljs=function(){"use strict";var e={exports:{}};function n(e){ -return e instanceof Map?e.clear=e.delete=e.set=()=>{ -throw Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=()=>{ -throw Error("set is read-only") -}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((t=>{var a=e[t] -;"object"!=typeof a||Object.isFrozen(a)||n(a)})),e} -e.exports=n,e.exports.default=n;class t{constructor(e){ -void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} -ignoreMatch(){this.isMatchIgnored=!0}}function a(e){ -return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") -}function i(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n] -;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t} -const r=e=>!!e.scope||e.sublanguage&&e.language;class s{constructor(e,n){ -this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){ -this.buffer+=a(e)}openNode(e){if(!r(e))return;let n="" -;n=e.sublanguage?"language-"+e.language:((e,{prefix:n})=>{if(e.includes(".")){ -const t=e.split(".") -;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ") -}return`${n}${e}`})(e.scope,{prefix:this.classPrefix}),this.span(n)} -closeNode(e){r(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ -this.buffer+=``}}const o=(e={})=>{const n={children:[]} -;return Object.assign(n,e),n};class l{constructor(){ -this.rootNode=o(),this.stack=[this.rootNode]}get top(){ -return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ -this.top.children.push(e)}openNode(e){const n=o({scope:e}) -;this.add(n),this.stack.push(n)}closeNode(){ -if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ -for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} -walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){ -return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n), -n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){ -"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ -l._collapse(e)})))}}class c extends l{constructor(e){super(),this.options=e} -addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())} -addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root -;t.sublanguage=!0,t.language=n,this.add(t)}toHTML(){ -return new s(this,this.options).value()}finalize(){return!0}}function d(e){ -return e?"string"==typeof e?e:e.source:null}function g(e){return m("(?=",e,")")} -function u(e){return m("(?:",e,")*")}function b(e){return m("(?:",e,")?")} -function m(...e){return e.map((e=>d(e))).join("")}function p(...e){const n=(e=>{ -const n=e[e.length-1] -;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} -})(e);return"("+(n.capture?"":"?:")+e.map((e=>d(e))).join("|")+")"} -function _(e){return RegExp(e.toString()+"|").exec("").length-1} -const h=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ -;function f(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t -;let a=d(e),i="";for(;a.length>0;){const e=h.exec(a);if(!e){i+=a;break} -i+=a.substring(0,e.index), -a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0], -"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)} -const E="[a-zA-Z]\\w*",y="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",N="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",v="\\b(0b[01]+)",O={ -begin:"\\\\[\\s\\S]",relevance:0},k={scope:"string",begin:"'",end:"'", -illegal:"\\n",contains:[O]},x={scope:"string",begin:'"',end:'"',illegal:"\\n", -contains:[O]},M=(e,n,t={})=>{const a=i({scope:"comment",begin:e,end:n, -contains:[]},t);a.contains.push({scope:"doctag", -begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", -end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) -;const r=p("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) -;return a.contains.push({begin:m(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),a -},S=M("//","$"),A=M("/\\*","\\*/"),C=M("#","$");var T=Object.freeze({ -__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:E,UNDERSCORE_IDENT_RE:y, -NUMBER_RE:w,C_NUMBER_RE:N,BINARY_NUMBER_RE:v, -RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", -SHEBANG:(e={})=>{const n=/^#![ ]*\// -;return e.binary&&(e.begin=m(n,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:n, -end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)}, -BACKSLASH_ESCAPE:O,APOS_STRING_MODE:k,QUOTE_STRING_MODE:x,PHRASAL_WORDS_MODE:{ -begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ -},COMMENT:M,C_LINE_COMMENT_MODE:S,C_BLOCK_COMMENT_MODE:A,HASH_COMMENT_MODE:C, -NUMBER_MODE:{scope:"number",begin:w,relevance:0},C_NUMBER_MODE:{scope:"number", -begin:N,relevance:0},BINARY_NUMBER_MODE:{scope:"number",begin:v,relevance:0}, -REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//, -end:/\/[gimuy]*/,illegal:/\n/,contains:[O,{begin:/\[/,end:/\]/,relevance:0, -contains:[O]}]}]},TITLE_MODE:{scope:"title",begin:E,relevance:0}, -UNDERSCORE_TITLE_MODE:{scope:"title",begin:y,relevance:0},METHOD_GUARD:{ -begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:e=>Object.assign(e,{ -"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{ -n.data._beginMatch!==e[1]&&n.ignoreMatch()}})});function R(e,n){ -"."===e.input[e.index-1]&&n.ignoreMatch()}function D(e,n){ -void 0!==e.className&&(e.scope=e.className,delete e.className)}function I(e,n){ -n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", -e.__beforeBegin=R,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, -void 0===e.relevance&&(e.relevance=0))}function L(e,n){ -Array.isArray(e.illegal)&&(e.illegal=p(...e.illegal))}function B(e,n){ -if(e.match){ -if(e.begin||e.end)throw Error("begin & end are not supported with match") -;e.begin=e.match,delete e.match}}function $(e,n){ -void 0===e.relevance&&(e.relevance=1)}const z=(e,n)=>{if(!e.beforeMatch)return -;if(e.starts)throw Error("beforeMatch cannot be used with starts") -;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n] -})),e.keywords=t.keywords,e.begin=m(t.beforeMatch,g(t.begin)),e.starts={ -relevance:0,contains:[Object.assign(t,{endsParent:!0})] -},e.relevance=0,delete t.beforeMatch -},F=["of","and","for","in","not","or","if","then","parent","list","value"] -;function U(e,n,t="keyword"){const a=Object.create(null) -;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{ -Object.assign(a,U(e[t],n,t))})),a;function i(e,t){ -n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|") -;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){ -return n?Number(n):(e=>F.includes(e.toLowerCase()))(e)?0:1}const P={},K=e=>{ -console.error(e)},H=(e,...n)=>{console.log("WARN: "+e,...n)},q=(e,n)=>{ -P[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),P[`${e}/${n}`]=!0) -},Z=Error();function G(e,n,{key:t}){let a=0;const i=e[t],r={},s={} -;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=_(n[e-1]) -;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function W(e){(e=>{ -e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, -delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ -_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope -}),(e=>{if(Array.isArray(e.begin)){ -if(e.skip||e.excludeBegin||e.returnBegin)throw K("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), -Z -;if("object"!=typeof e.beginScope||null===e.beginScope)throw K("beginScope must be object"), -Z;G(e,e.begin,{key:"beginScope"}),e.begin=f(e.begin,{joinWith:""})}})(e),(e=>{ -if(Array.isArray(e.end)){ -if(e.skip||e.excludeEnd||e.returnEnd)throw K("skip, excludeEnd, returnEnd not compatible with endScope: {}"), -Z -;if("object"!=typeof e.endScope||null===e.endScope)throw K("endScope must be object"), -Z;G(e,e.end,{key:"endScope"}),e.end=f(e.end,{joinWith:""})}})(e)}function Q(e){ -function n(n,t){ -return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":"")) -}class t{constructor(){ -this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} -addRule(e,n){ -n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]), -this.matchAt+=_(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) -;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(f(e,{joinWith:"|" -}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex -;const n=this.matcherRe.exec(e);if(!n)return null -;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t] -;return n.splice(0,t),Object.assign(n,a)}}class a{constructor(){ -this.rules=[],this.multiRegexes=[], -this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ -if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t -;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))), -n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){ -return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){ -this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){ -const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex -;let t=n.exec(e) -;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{ -const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)} -return t&&(this.regexIndex+=t.position+1, -this.regexIndex===this.count&&this.considerAll()),t}} -if(e.compilerExtensions||(e.compilerExtensions=[]), -e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") -;return e.classNameAliases=i(e.classNameAliases||{}),function t(r,s){const o=r -;if(r.isCompiled)return o -;[D,B,W,z].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))), -r.__beforeBegin=null,[I,L,$].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null -;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), -l=r.keywords.$pattern, -delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=U(r.keywords,e.case_insensitive)), -o.keywordPatternRe=n(l,!0), -s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), -r.end&&(o.endRe=n(o.end)), -o.terminatorEnd=d(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)), -r.illegal&&(o.illegalRe=n(r.illegal)), -r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>i(e,{ -variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?i(e,{ -starts:e.starts?i(e.starts):null -}):Object.isFrozen(e)?i(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o) -})),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new a -;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin" -}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end" -}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){ -return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{ -constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}} -const J=a,Y=i,ee=Symbol("nomatch");var ne=(n=>{ -const a=Object.create(null),i=Object.create(null),r=[];let s=!0 -;const o="Could not find the language '{}', did you forget to load/include a language module?",l={ -disableAutodetect:!0,name:"Plain text",contains:[]};let d={ -ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, -languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", -cssSelector:"pre code",languages:null,__emitter:c};function _(e){ -return d.noHighlightRe.test(e)}function h(e,n,t){let a="",i="" -;"object"==typeof n?(a=e, -t=n.ignoreIllegals,i=n.language):(q("10.7.0","highlight(lang, code, ...args) has been deprecated."), -q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), -i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};x("before:highlight",r) -;const s=r.result?r.result:f(r.language,r.code,t) -;return s.code=r.code,x("after:highlight",s),s}function f(e,n,i,r){ -const l=Object.create(null);function c(){if(!k.keywords)return void M.addText(S) -;let e=0;k.keywordPatternRe.lastIndex=0;let n=k.keywordPatternRe.exec(S),t="" -;for(;n;){t+=S.substring(e,n.index) -;const i=w.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,k.keywords[a]);if(r){ -const[e,a]=r -;if(M.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(A+=a),e.startsWith("_"))t+=n[0];else{ -const t=w.classNameAliases[e]||e;M.addKeyword(n[0],t)}}else t+=n[0] -;e=k.keywordPatternRe.lastIndex,n=k.keywordPatternRe.exec(S)}var a -;t+=S.substring(e),M.addText(t)}function g(){null!=k.subLanguage?(()=>{ -if(""===S)return;let e=null;if("string"==typeof k.subLanguage){ -if(!a[k.subLanguage])return void M.addText(S) -;e=f(k.subLanguage,S,!0,x[k.subLanguage]),x[k.subLanguage]=e._top -}else e=E(S,k.subLanguage.length?k.subLanguage:null) -;k.relevance>0&&(A+=e.relevance),M.addSublanguage(e._emitter,e.language) -})():c(),S=""}function u(e,n){let t=1;const a=n.length-1;for(;t<=a;){ -if(!e._emit[t]){t++;continue}const a=w.classNameAliases[e[t]]||e[t],i=n[t] -;a?M.addKeyword(i,a):(S=i,c(),S=""),t++}}function b(e,n){ -return e.scope&&"string"==typeof e.scope&&M.openNode(w.classNameAliases[e.scope]||e.scope), -e.beginScope&&(e.beginScope._wrap?(M.addKeyword(S,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), -S=""):e.beginScope._multi&&(u(e.beginScope,n),S="")),k=Object.create(e,{parent:{ -value:k}}),k}function m(e,n,a){let i=((e,n)=>{const t=e&&e.exec(n) -;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new t(e) -;e["on:end"](n,a),a.isMatchIgnored&&(i=!1)}if(i){ -for(;e.endsParent&&e.parent;)e=e.parent;return e}} -if(e.endsWithParent)return m(e.parent,n,a)}function p(e){ -return 0===k.matcher.regexIndex?(S+=e[0],1):(R=!0,0)}function _(e){ -const t=e[0],a=n.substring(e.index),i=m(k,e,a);if(!i)return ee;const r=k -;k.endScope&&k.endScope._wrap?(g(), -M.addKeyword(t,k.endScope._wrap)):k.endScope&&k.endScope._multi?(g(), -u(k.endScope,e)):r.skip?S+=t:(r.returnEnd||r.excludeEnd||(S+=t), -g(),r.excludeEnd&&(S=t));do{ -k.scope&&M.closeNode(),k.skip||k.subLanguage||(A+=k.relevance),k=k.parent -}while(k!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:t.length} -let h={};function y(a,r){const o=r&&r[0];if(S+=a,null==o)return g(),0 -;if("begin"===h.type&&"end"===r.type&&h.index===r.index&&""===o){ -if(S+=n.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`) -;throw n.languageName=e,n.badRule=h.rule,n}return 1} -if(h=r,"begin"===r.type)return(e=>{ -const n=e[0],a=e.rule,i=new t(a),r=[a.__beforeBegin,a["on:begin"]] -;for(const t of r)if(t&&(t(e,i),i.isMatchIgnored))return p(n) -;return a.skip?S+=n:(a.excludeBegin&&(S+=n), -g(),a.returnBegin||a.excludeBegin||(S=n)),b(a,e),a.returnBegin?0:n.length})(r) -;if("illegal"===r.type&&!i){ -const e=Error('Illegal lexeme "'+o+'" for mode "'+(k.scope||"")+'"') -;throw e.mode=k,e}if("end"===r.type){const e=_(r);if(e!==ee)return e} -if("illegal"===r.type&&""===o)return 1 -;if(T>1e5&&T>3*r.index)throw Error("potential infinite loop, way more iterations than matches") -;return S+=o,o.length}const w=v(e) -;if(!w)throw K(o.replace("{}",e)),Error('Unknown language: "'+e+'"') -;const N=Q(w);let O="",k=r||N;const x={},M=new d.__emitter(d);(()=>{const e=[] -;for(let n=k;n!==w;n=n.parent)n.scope&&e.unshift(n.scope) -;e.forEach((e=>M.openNode(e)))})();let S="",A=0,C=0,T=0,R=!1;try{ -for(k.matcher.considerAll();;){ -T++,R?R=!1:k.matcher.considerAll(),k.matcher.lastIndex=C -;const e=k.matcher.exec(n);if(!e)break;const t=y(n.substring(C,e.index),e) -;C=e.index+t} -return y(n.substring(C)),M.closeAllNodes(),M.finalize(),O=M.toHTML(),{ -language:e,value:O,relevance:A,illegal:!1,_emitter:M,_top:k}}catch(t){ -if(t.message&&t.message.includes("Illegal"))return{language:e,value:J(n), -illegal:!0,relevance:0,_illegalBy:{message:t.message,index:C, -context:n.slice(C-100,C+100),mode:t.mode,resultSoFar:O},_emitter:M};if(s)return{ -language:e,value:J(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:k} -;throw t}}function E(e,n){n=n||d.languages||Object.keys(a);const t=(e=>{ -const n={value:J(e),illegal:!1,relevance:0,_top:l,_emitter:new d.__emitter(d)} -;return n._emitter.addText(e),n})(e),i=n.filter(v).filter(k).map((n=>f(n,e,!1))) -;i.unshift(t);const r=i.sort(((e,n)=>{ -if(e.relevance!==n.relevance)return n.relevance-e.relevance -;if(e.language&&n.language){if(v(e.language).supersetOf===n.language)return 1 -;if(v(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,c=s -;return c.secondBest=o,c}function y(e){let n=null;const t=(e=>{ -let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"" -;const t=d.languageDetectRe.exec(n);if(t){const n=v(t[1]) -;return n||(H(o.replace("{}",t[1])), -H("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"} -return n.split(/\s+/).find((e=>_(e)||v(e)))})(e);if(_(t))return -;if(x("before:highlightElement",{el:e,language:t -}),e.children.length>0&&(d.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), -console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), -console.warn("The element with unescaped HTML:"), -console.warn(e)),d.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML) -;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a) -;e.innerHTML=r.value,((e,n,t)=>{const a=n&&i[n]||t -;e.classList.add("hljs"),e.classList.add("language-"+a) -})(e,t,r.language),e.result={language:r.language,re:r.relevance, -relevance:r.relevance},r.secondBest&&(e.secondBest={ -language:r.secondBest.language,relevance:r.secondBest.relevance -}),x("after:highlightElement",{el:e,result:r,text:a})}let w=!1;function N(){ -"loading"!==document.readyState?document.querySelectorAll(d.cssSelector).forEach(y):w=!0 -}function v(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]} -function O(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ -i[e.toLowerCase()]=n}))}function k(e){const n=v(e) -;return n&&!n.disableAutodetect}function x(e,n){const t=e;r.forEach((e=>{ -e[t]&&e[t](n)}))} -"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ -w&&N()}),!1),Object.assign(n,{highlight:h,highlightAuto:E,highlightAll:N, -highlightElement:y, -highlightBlock:e=>(q("10.7.0","highlightBlock will be removed entirely in v12.0"), -q("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{d=Y(d,e)}, -initHighlighting:()=>{ -N(),q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, -initHighlightingOnLoad:()=>{ -N(),q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") -},registerLanguage:(e,t)=>{let i=null;try{i=t(n)}catch(n){ -if(K("Language definition for '{}' could not be registered.".replace("{}",e)), -!s)throw n;K(n),i=l} -i.name||(i.name=e),a[e]=i,i.rawDefinition=t.bind(null,n),i.aliases&&O(i.aliases,{ -languageName:e})},unregisterLanguage:e=>{delete a[e] -;for(const n of Object.keys(i))i[n]===e&&delete i[n]}, -listLanguages:()=>Object.keys(a),getLanguage:v,registerAliases:O, -autoDetection:k,inherit:Y,addPlugin:e=>{(e=>{ -e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{ -e["before:highlightBlock"](Object.assign({block:n.el},n)) -}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{ -e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)} -}),n.debugMode=()=>{s=!1},n.safeMode=()=>{s=!0 -},n.versionString="11.7.0",n.regex={concat:m,lookahead:g,either:p,optional:b, -anyNumberOfTimes:u};for(const n in T)"object"==typeof T[n]&&e.exports(T[n]) -;return Object.assign(n,T),n})({});const te=e=>({IMPORTANT:{scope:"meta", -begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{ -scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/}, -FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/}, -ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", -contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ -scope:"number", -begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", -relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/} -}),ae=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],ie=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],re=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],se=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],oe=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),le=re.concat(se) -;var ce="\\.([0-9](_*[0-9])*)",de="[0-9a-fA-F](_*[0-9a-fA-F])*",ge={ -className:"number",variants:[{ -begin:`(\\b([0-9](_*[0-9])*)((${ce})|\\.)?|(${ce}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` -},{begin:`\\b([0-9](_*[0-9])*)((${ce})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ -begin:`(${ce})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{ -begin:`\\b0[xX]((${de})\\.?|(${de})?\\.(${de}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` -},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${de})[lL]?\\b`},{ -begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], -relevance:0};function ue(e,n,t){return-1===t?"":e.replace(n,(a=>ue(e,n,t-1)))} -const be="[A-Za-z$_][0-9A-Za-z$_]*",me=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],pe=["true","false","null","undefined","NaN","Infinity"],_e=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],he=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],fe=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],Ee=["arguments","this","super","console","window","document","localStorage","module","global"],ye=[].concat(fe,_e,he) -;function we(e){const n=e.regex,t=be,a={begin:/<[A-Za-z0-9\\._:-]+/, -end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ -const t=e[0].length+e.index,a=e.input[t] -;if("<"===a||","===a)return void n.ignoreMatch();let i -;">"===a&&(((e,{after:n})=>{const t="",k={ -match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(O)], -keywords:"async",className:{1:"keyword",3:"title.function"},contains:[_]} -;return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{ -PARAMS_CONTAINS:p,CLASS_REFERENCE:f},illegal:/#(?![$_A-z])/, -contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ -label:"use_strict",className:"meta",relevance:10, -begin:/^\s*['"]use (strict|asm)['"]/ -},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,u,{match:/\$\d+/},o,f,{ -className:"attr",begin:t+n.lookahead(":"),relevance:0},k,{ -begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", -keywords:"return throw case",relevance:0,contains:[u,e.REGEXP_MODE,{ -className:"function",begin:O,returnBegin:!0,end:"\\s*=>",contains:[{ -className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{ -className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, -excludeEnd:!0,keywords:i,contains:p}]}]},{begin:/,/,relevance:0},{match:/\s+/, -relevance:0},{variants:[{begin:"<>",end:""},{ -match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin, -"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{ -begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},E,{ -beginKeywords:"while if switch catch for"},{ -begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", -returnBegin:!0,label:"func.def",contains:[_,e.inherit(e.TITLE_MODE,{begin:t, -className:"title.function"})]},{match:/\.\.\./,relevance:0},N,{match:"\\$"+t, -relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, -contains:[_]},y,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, -className:"variable.constant"},h,v,{match:/\$[(.]/}]}} -const Ne=e=>m(/\b/,e,/\w$/.test(e)?/\b/:/\B/),ve=["Protocol","Type"].map(Ne),Oe=["init","self"].map(Ne),ke=["Any","Self"],xe=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","distributed","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Me=["false","nil","true"],Se=["assignment","associativity","higherThan","left","lowerThan","none","right"],Ae=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],Ce=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Te=p(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),Re=p(Te,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),De=m(Te,Re,"*"),Ie=p(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),Le=p(Ie,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),Be=m(Ie,Le,"*"),$e=m(/[A-Z]/,Le,"*"),ze=["autoclosure",m(/convention\(/,p("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",m(/objc\(/,Be,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],Fe=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] -;var Ue=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={ -begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]} -;Object.assign(t,{className:"variable",variants:[{ -begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={ -className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={ -begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, -end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/, -contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$?\(\(/, -end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] -},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 -}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, -contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ -name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, -keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"], -literal:["true","false"], -built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] -},contains:[l,e.SHEBANG(),c,o,e.HASH_COMMENT_MODE,r,{match:/(\/[a-z._-]+)+/},s,{ -className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}}, -grmr_c:e=>{const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}] -}),a="[a-zA-Z_]\\w*::",i="(decltype\\(auto\\)|"+n.optional(a)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",r={ -className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ -match:/\batomic_[a-z]{3,6}\b/}]},s={className:"string",variants:[{ -begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ -begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", -end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ -begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={ -className:"number",variants:[{begin:"\\b(0b[01']+)"},{ -begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" -},{ -begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" -}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ -keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" -},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:"string"}),{ -className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},c={ -className:"title",begin:n.optional(a)+e.IDENT_RE,relevance:0 -},d=n.optional(a)+e.IDENT_RE+"\\s*\\(",g={ -keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], -type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"], -literal:"true false NULL", -built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" -},u=[l,r,t,e.C_BLOCK_COMMENT_MODE,o,s],b={variants:[{begin:/=/,end:/;/},{ -begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], -keywords:g,contains:u.concat([{begin:/\(/,end:/\)/,keywords:g, -contains:u.concat(["self"]),relevance:0}]),relevance:0},m={ -begin:"("+i+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, -keywords:g,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)", -keywords:g,relevance:0},{begin:d,returnBegin:!0,contains:[e.inherit(c,{ -className:"title.function"})],relevance:0},{relevance:0,match:/,/},{ -className:"params",begin:/\(/,end:/\)/,keywords:g,relevance:0, -contains:[t,e.C_BLOCK_COMMENT_MODE,s,o,r,{begin:/\(/,end:/\)/,keywords:g, -relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,s,o,r]}] -},r,t,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C",aliases:["h"],keywords:g, -disableAutodetect:!0,illegal:"=]/,contains:[{ -beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:l, -strings:s,keywords:g}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{ -contains:[{begin:/\\\n/}] -}),a="[a-zA-Z_]\\w*::",i="(?!struct)(decltype\\(auto\\)|"+n.optional(a)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",r={ -className:"type",begin:"\\b[a-z\\d_]*_t\\b"},s={className:"string",variants:[{ -begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ -begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", -end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ -begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={ -className:"number",variants:[{begin:"\\b(0b[01']+)"},{ -begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" -},{ -begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" -}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ -keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" -},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:"string"}),{ -className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},c={ -className:"title",begin:n.optional(a)+e.IDENT_RE,relevance:0 -},d=n.optional(a)+e.IDENT_RE+"\\s*\\(",g={ -type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], -keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], -literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], -_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] -},u={className:"function.dispatch",relevance:0,keywords:{ -_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] -}, -begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/)) -},b=[u,l,r,t,e.C_BLOCK_COMMENT_MODE,o,s],m={variants:[{begin:/=/,end:/;/},{ -begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], -keywords:g,contains:b.concat([{begin:/\(/,end:/\)/,keywords:g, -contains:b.concat(["self"]),relevance:0}]),relevance:0},p={className:"function", -begin:"("+i+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, -keywords:g,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)", -keywords:g,relevance:0},{begin:d,returnBegin:!0,contains:[c],relevance:0},{ -begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[s,o]},{ -relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:g, -relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,s,o,r,{begin:/\(/,end:/\)/, -keywords:g,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,s,o,r]}] -},r,t,e.C_BLOCK_COMMENT_MODE,l]};return{name:"C++", -aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:g,illegal:"",keywords:g,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:g},{ -match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], -className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={ -keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]), -built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], -literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{ -begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{ -begin:"\\b(0b[01']+)"},{ -begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ -begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" -}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] -},r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/, -keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/, -end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ -},e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{ -begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/, -contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]}) -;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE], -o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{ -illegal:/\n/})];const g={variants:[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] -},u={begin:"<",end:">",contains:[{beginKeywords:"in out"},t] -},b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={ -begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], -keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, -contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ -begin:"\x3c!--|--\x3e"},{begin:""}]}] -}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", -end:"$",keywords:{ -keyword:"if else elif endif define undef warning error line region endregion pragma checksum" -}},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, -illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" -},t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", -relevance:0,end:/[{;=]/,illegal:/[^\s:]/, -contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ -beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, -contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", -begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ -className:"string",begin:/"/,end:/"/}]},{ -beginKeywords:"new return throw await else",relevance:0},{className:"function", -begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, -end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ -beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", -relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, -contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params", -begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, -contains:[g,a,e.C_BLOCK_COMMENT_MODE] -},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{ -const n=e.regex,t=te(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{ -name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{ -keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"}, -contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ -},t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 -},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 -},t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ -begin:":("+re.join("|")+")"},{begin:":(:)?("+se.join("|")+")"}] -},t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+oe.join("|")+")\\b"},{ -begin:/:/,end:/[;}{]/, -contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{ -begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" -},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0, -excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]", -relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ -},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ -$pattern:/[a-z-]+/,keyword:"and or not only",attribute:ie.join(" ")},contains:[{ -begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{ -className:"selector-tag",begin:"\\b("+ae.join("|")+")\\b"}]}},grmr_diff:e=>{ -const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{ -className:"meta",relevance:10, -match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) -},{className:"comment",variants:[{ -begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), -end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ -className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, -end:/$/}]}},grmr_go:e=>{const n={ -keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], -type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], -literal:["true","false","iota","nil"], -built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] -};return{name:"Go",aliases:["golang"],keywords:n,illegal:"{const n=e.regex;return{name:"GraphQL",aliases:["gql"], -case_insensitive:!0,disableAutodetect:!1,keywords:{ -keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"], -literal:["true","false","null"]}, -contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ -scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation", -begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/, -end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{ -scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)), -relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={ -className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{ -begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/, -end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{ -begin:/\$\{(.*?)\}/}]},r={className:"literal", -begin:/\bon|off|true|false|yes|no\b/},s={className:"string", -contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{ -begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}] -},o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0 -},l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ -name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, -contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{ -begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)), -className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{ -const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+ue("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={ -keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"], -literal:["false","true","null"], -type:["char","boolean","long","float","int","byte","short","double"], -built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{ -begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/, -end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} -;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, -contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, -relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ -begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 -},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, -className:"string",contains:[e.BACKSLASH_ESCAPE] -},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ -match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{ -1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ -begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type", -3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword", -3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ -beginKeywords:"new throw return else",relevance:0},{ -begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ -2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, -end:/\)/,keywords:i,relevance:0, -contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,ge,e.C_BLOCK_COMMENT_MODE] -},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},ge,r]}},grmr_javascript:we, -grmr_json:e=>{const n=["true","false","null"],t={scope:"literal", -beginKeywords:n.join(" ")};return{name:"JSON",keywords:{literal:n},contains:[{ -className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{ -match:/[{}[\],:]/,className:"punctuation",relevance:0 -},e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], -illegal:"\\S"}},grmr_kotlin:e=>{const n={ -keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", -built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", -literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" -},a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={ -className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", -variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'", -illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, -contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={ -className:"meta", -begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" -},o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, -end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}] -},l=ge,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={ -variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, -contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g], -{name:"Kotlin",aliases:["kt","kts"],keywords:n, -contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", -begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword", -begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", -begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$", -returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ -begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, -contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, -keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, -endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, -endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0 -},e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{ -begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{ -3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, -illegal:"extends implements",contains:[{ -beginKeywords:"public protected internal private constructor" -},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, -excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/, -excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env", -end:"$",illegal:"\n"},l]}},grmr_less:e=>{ -const n=te(e),t=le,a="([\\w-]+|@\\{[\\w-]+\\})",i=[],r=[],s=e=>({ -className:"string",begin:"~?"+e+".*?"+e}),o=(e,n,t)=>({className:e,begin:n, -relevance:t}),l={$pattern:/[a-z-]+/,keyword:"and or not only", -attribute:ie.join(" ")},c={begin:"\\(",end:"\\)",contains:r,keywords:l, -relevance:0} -;r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s("'"),s('"'),n.CSS_NUMBER_MODE,{ -begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", -excludeEnd:!0} -},n.HEXCOLOR,c,o("variable","@@?[\\w-]+",10),o("variable","@\\{[\\w-]+\\}"),o("built_in","~?`[^`]*?`"),{ -className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0 -},n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const d=r.concat({ -begin:/\{/,end:/\}/,contains:i}),g={beginKeywords:"when",endsWithParent:!0, -contains:[{beginKeywords:"and not"}].concat(r)},u={begin:a+"\\s*:", -returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/ -},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+oe.join("|")+")\\b", -end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:r}}] -},b={className:"keyword", -begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", -starts:{end:"[;{}]",keywords:l,returnEnd:!0,contains:r,relevance:0}},m={ -className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{ -begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:d}},p={variants:[{ -begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:a,end:/\{/}],returnBegin:!0, -returnEnd:!0,illegal:"[<='$\"]",relevance:0, -contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,o("keyword","all\\b"),o("variable","@\\{[\\w-]+\\}"),{ -begin:"\\b("+ae.join("|")+")\\b",className:"selector-tag" -},n.CSS_NUMBER_MODE,o("selector-tag",a,0),o("selector-id","#"+a),o("selector-class","\\."+a,0),o("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{ -className:"selector-pseudo",begin:":("+re.join("|")+")"},{ -className:"selector-pseudo",begin:":(:)?("+se.join("|")+")"},{begin:/\(/, -end:/\)/,relevance:0,contains:d},{begin:"!important"},n.FUNCTION_DISPATCH]},_={ -begin:`[\\w-]+:(:)?(${t.join("|")})`,returnBegin:!0,contains:[p]} -;return i.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,b,m,_,u,p,g,n.FUNCTION_DISPATCH), -{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:i}}, -grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"] -},i=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[",t,{contains:[a], -relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE, -literal:"true false nil", -keyword:"and break do else elseif end for goto if in local not or repeat return then until while", -built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" -},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)", -contains:[e.inherit(e.TITLE_MODE,{ -begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", -begin:"\\(",endsWithParent:!0,contains:i}].concat(i) -},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", -begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={ -className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", -contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{ -const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={ -className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/, -contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] -},r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{ -className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={ -endsWithParent:!0,illegal:/`]+/}]}]}]};return{ -name:"HTML, XML", -aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], -case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{ -className:"meta",begin://,contains:[i,r,o,s]}]}] -},e.COMMENT(//,{relevance:10}),{begin://, -relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, -relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", -begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{ -end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", -begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{ -end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ -className:"tag",begin:/<>|<\/>/},{className:"tag", -begin:n.concat(//,/>/,/\s/)))), -end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{ -className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{ -className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]} -},grmr_markdown:e=>{const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml", -relevance:0},t={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{ -begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, -relevance:2},{ -begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), -relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ -begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/ -},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, -returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", -excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", -end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[], -variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}] -},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{ -begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[] -}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r) -;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o) -})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ -className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{ -begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", -contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", -end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o, -end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ -begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ -begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", -contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ -begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ -className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ -className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}},grmr_objectivec:e=>{ -const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n, -keyword:["@interface","@class","@protocol","@implementation"]};return{ -name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], -keywords:{"variable.language":["this","super"],$pattern:n, -keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], -literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], -built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"], -type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"] -},illegal:"/,end:/$/,illegal:"\\n" -},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", -begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t, -contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, -relevance:0}]}},grmr_perl:e=>{const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={ -$pattern:/[\w.]+/, -keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" -},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/, -end:/\}/},s={variants:[{begin:/\$\d/},{ -begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") -},{begin:/[$%@][^\s\w{]/,relevance:0}] -},o=[e.BACKSLASH_ESCAPE,i,s],l=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],c=(e,a,i="\\1")=>{ -const r="\\1"===i?i:n.concat(i,a) -;return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t) -},d=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),g=[s,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ -endsWithParent:!0}),r,{className:"string",contains:o,variants:[{ -begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", -end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ -begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", -relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", -contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", -contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ -begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number", -begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", -relevance:0},{ -begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", -keywords:"split return print reverse grep",relevance:0, -contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ -begin:c("s|tr|y",n.either(...l,{capture:!0}))},{begin:c("s|tr|y","\\(","\\)")},{ -begin:c("s|tr|y","\\[","\\]")},{begin:c("s|tr|y","\\{","\\}")}],relevance:2},{ -className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ -begin:d("(?:m|qr)?",/\//,/\//)},{begin:d("m|qr",n.either(...l,{capture:!0 -}),/\1/)},{begin:d("m|qr",/\(/,/\)/)},{begin:d("m|qr",/\[/,/\]/)},{ -begin:d("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub", -end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{ -begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$", -subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}] -}];return i.contains=g,r.contains=g,{name:"Perl",aliases:["pl","pm"],keywords:a, -contains:g}},grmr_php:e=>{ -const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r={ -scope:"variable",match:"\\$+"+a},s={scope:"subst",variants:[{begin:/\$\w+/},{ -begin:/\{\$/,end:/\}/}]},o=e.inherit(e.APOS_STRING_MODE,{illegal:null -}),l="[ \t\n]",c={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ -illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(s) -}),o,e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/, -contains:e.QUOTE_STRING_MODE.contains.concat(s)})]},d={scope:"number", -variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{ -begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ -begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ -begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" -}],relevance:0 -},g=["false","null","true"],u=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],b=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],m={ -keyword:u,literal:(e=>{const n=[];return e.forEach((e=>{ -n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase()) -})),n})(g),built_in:b},p=e=>e.map((e=>e.replace(/\|\d+$/,""))),_={variants:[{ -match:[/new/,n.concat(l,"+"),n.concat("(?!",p(b).join("\\b|"),"\\b)"),i],scope:{ -1:"keyword",4:"title.class"}}]},h=n.concat(a,"\\b(?!\\()"),f={variants:[{ -match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{2:"variable.constant" -}},{match:[/::/,/class/],scope:{2:"variable.language"}},{ -match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{1:"title.class", -3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))], -scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class", -3:"variable.language"}}]},E={scope:"attr", -match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},y={relevance:0, -begin:/\(/,end:/\)/,keywords:m,contains:[E,r,f,e.C_BLOCK_COMMENT_MODE,c,d,_] -},w={relevance:0, -match:[/\b/,n.concat("(?!fn\\b|function\\b|",p(u).join("\\b|"),"|",p(b).join("\\b|"),"\\b)"),a,n.concat(l,"*"),n.lookahead(/(?=\()/)], -scope:{3:"title.function.invoke"},contains:[y]};y.contains.push(w) -;const N=[E,f,e.C_BLOCK_COMMENT_MODE,c,d,_];return{case_insensitive:!1, -keywords:m,contains:[{begin:n.concat(/#\[\s*/,i),beginScope:"meta",end:/]/, -endScope:"meta",keywords:{literal:g,keyword:["new","array"]},contains:[{ -begin:/\[/,end:/]/,keywords:{literal:g,keyword:["new","array"]}, -contains:["self",...N]},...N,{scope:"meta",match:i}] -},e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{ -scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, -keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, -contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ -begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{ -begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},r,w,f,{ -match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},_,{ -scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, -excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" -},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", -begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:m, -contains:["self",r,f,e.C_BLOCK_COMMENT_MODE,c,d]}]},{scope:"class",variants:[{ -beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", -illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ -beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ -beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, -contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ -beginKeywords:"use",relevance:0,end:";",contains:[{ -match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},c,d]} -},grmr_php_template:e=>({name:"PHP template",subLanguage:"xml",contains:[{ -begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*", -end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0 -},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null, -skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null, -contains:null,skip:!0})]}]}),grmr_plaintext:e=>({name:"Plain text", -aliases:["text","txt"],disableAutodetect:!0}),grmr_python:e=>{ -const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={ -$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a, -built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], -literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], -type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] -},r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/, -end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={ -className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ -begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, -contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ -begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, -contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ -begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, -contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, -end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/, -relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ -begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, -end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, -contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, -contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] -},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g="\\b|"+a.join("|"),u={ -className:"number",relevance:0,variants:[{ -begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{ -begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{ -begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})` -},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})` -}]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i, -contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ -className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, -end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i, -contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{ -name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i, -illegal:/(<\/|->|\?)|=>/,contains:[r,u,{begin:/\bself\b/},{beginKeywords:"if", -relevance:0},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{ -1:"keyword",3:"title.function"},contains:[m]},{variants:[{ -match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}], -scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ -className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}}, -grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt", -starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{ -begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_r:e=>{ -const n=e.regex,t=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) -;return{name:"R",keywords:{$pattern:t, -keyword:"function if in break next repeat else for while", -literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", -built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" -},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/, -starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), -endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{ -scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 -}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}] -}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE], -variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ -}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/ -}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/ -}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/ -}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ -}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', -relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{ -1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"}, -match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{ -2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"}, -match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{ -match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`", -contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{ -const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={ -"variable.constant":["__FILE__","__LINE__","__ENCODING__"], -"variable.language":["self","super"], -keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"], -built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"], -literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={ -begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s] -}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10 -}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/, -end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c], -variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{ -begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{ -begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//, -end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{ -begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{ -begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ -begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ -begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ -begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), -contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, -contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number", -relevance:0,variants:[{ -begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{ -begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" -},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ -begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ -begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{ -className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0, -keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{ -match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class", -4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{ -2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{ -1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, -className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{ -match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{ -begin:e.IDENT_RE+"::"},{className:"symbol", -begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", -begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable", -begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ -className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0, -relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*", -keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c], -illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{ -begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[", -end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l) -;c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m} -},{className:"meta.prompt", -begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", -starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby", -aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/, -contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}}, -grmr_rust:e=>{const n=e.regex,t={className:"title.function.invoke",relevance:0, -begin:n.concat(/\b/,/(?!let\b)/,e.IDENT_RE,n.lookahead(/\s*\(/)) -},a="([ui](8|16|32|64|128|size)|f(32|64))?",i=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],r=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"] -;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:r, -keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"], -literal:["true","false","Some","None","Ok","Err"],built_in:i},illegal:""},t]}}, -grmr_scss:e=>{const n=te(e),t=se,a=re,i="@[a-z-]+",r={className:"variable", -begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS", -case_insensitive:!0,illegal:"[=/|']", -contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{ -className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ -className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 -},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", -begin:"\\b("+ae.join("|")+")\\b",relevance:0},{className:"selector-pseudo", -begin:":("+a.join("|")+")"},{className:"selector-pseudo", -begin:":(:)?("+t.join("|")+")"},r,{begin:/\(/,end:/\)/, -contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute", -begin:"\\b("+oe.join("|")+")\\b"},{ -begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" -},{begin:/:/,end:/[;}{]/,relevance:0, -contains:[n.BLOCK_COMMENT,r,n.HEXCOLOR,n.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.IMPORTANT,n.FUNCTION_DISPATCH] -},{begin:"@(page|font-face)",keywords:{$pattern:i,keyword:"@page @font-face"}},{ -begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, -keyword:"and or not only",attribute:ie.join(" ")},contains:[{begin:i, -className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" -},r,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE] -},n.FUNCTION_DISPATCH]}},grmr_shell:e=>({name:"Shell Session", -aliases:["console","shellsession"],contains:[{className:"meta.prompt", -begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, -subLanguage:"bash"}}]}),grmr_sql:e=>{ -const n=e.regex,t=e.COMMENT("--","$"),a=["true","false","unknown"],i=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],r=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=r,l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!r.includes(e))),c={ -begin:n.concat(/\b/,n.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}} -;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ -$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:n,when:t}={})=>{const a=t -;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?e+"|0":e)) -})(l,{when:e=>e.length<3}),literal:a,type:i, -built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] -},contains:[{begin:n.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/, -keyword:l.concat(s),literal:a,type:i}},{className:"type", -begin:n.either("double precision","large object","with timezone","without timezone") -},c,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{ -begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{ -begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:"operator", -begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}, -grmr_swift:e=>{const n={match:/\s+/,relevance:0},t=e.COMMENT("/\\*","\\*/",{ -contains:["self"]}),a=[e.C_LINE_COMMENT_MODE,t],i={match:[/\./,p(...ve,...Oe)], -className:{2:"keyword"}},r={match:m(/\./,p(...xe)),relevance:0 -},s=xe.filter((e=>"string"==typeof e)).concat(["_|0"]),o={variants:[{ -className:"keyword", -match:p(...xe.filter((e=>"string"!=typeof e)).concat(ke).map(Ne),...Oe)}]},l={ -$pattern:p(/\b\w+/,/#\w+/),keyword:s.concat(Ae),literal:Me},c=[i,r,o],d=[{ -match:m(/\./,p(...Ce)),relevance:0},{className:"built_in", -match:m(/\b/,p(...Ce),/(?=\()/)}],u={match:/->/,relevance:0},b=[u,{ -className:"operator",relevance:0,variants:[{match:De},{match:`\\.(\\.|${Re})+`}] -}],_="([0-9a-fA-F]_*)+",h={className:"number",relevance:0,variants:[{ -match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{ -match:`\\b0x(${_})(\\.(${_}))?([pP][+-]?(([0-9]_*)+))?\\b`},{ -match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},f=(e="")=>({ -className:"subst",variants:[{match:m(/\\/,e,/[0\\tnr"']/)},{ -match:m(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),E=(e="")=>({className:"subst", -match:m(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),y=(e="")=>({className:"subst", -label:"interpol",begin:m(/\\/,e,/\(/),end:/\)/}),w=(e="")=>({begin:m(e,/"""/), -end:m(/"""/,e),contains:[f(e),E(e),y(e)]}),N=(e="")=>({begin:m(e,/"/), -end:m(/"/,e),contains:[f(e),y(e)]}),v={className:"string", -variants:[w(),w("#"),w("##"),w("###"),N(),N("#"),N("##"),N("###")]},O={ -match:m(/`/,Be,/`/)},k=[O,{className:"variable",match:/\$\d+/},{ -className:"variable",match:`\\$${Le}+`}],x=[{match:/(@|#(un)?)available/, -className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:Fe, -contains:[...b,h,v]}]}},{className:"keyword",match:m(/@/,p(...ze))},{ -className:"meta",match:m(/@/,Be)}],M={match:g(/\b[A-Z]/),relevance:0,contains:[{ -className:"type", -match:m(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,Le,"+") -},{className:"type",match:$e,relevance:0},{match:/[?!]+/,relevance:0},{ -match:/\.\.\./,relevance:0},{match:m(/\s+&\s+/,g($e)),relevance:0}]},S={ -begin://,keywords:l,contains:[...a,...c,...x,u,M]};M.contains.push(S) -;const A={begin:/\(/,end:/\)/,relevance:0,keywords:l,contains:["self",{ -match:m(Be,/\s*:/),keywords:"_|0",relevance:0 -},...a,...c,...d,...b,h,v,...k,...x,M]},C={begin://,contains:[...a,M] -},T={begin:/\(/,end:/\)/,keywords:l,contains:[{ -begin:p(g(m(Be,/\s*:/)),g(m(Be,/\s+/,Be,/\s*:/))),end:/:/,relevance:0, -contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:Be}] -},...a,...c,...b,h,v,...x,M,A],endsParent:!0,illegal:/["']/},R={ -match:[/func/,/\s+/,p(O.match,Be,De)],className:{1:"keyword",3:"title.function" -},contains:[C,T,n],illegal:[/\[/,/%/]},D={ -match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, -contains:[C,T,n],illegal:/\[|%/},I={match:[/operator/,/\s+/,De],className:{ -1:"keyword",3:"title"}},L={begin:[/precedencegroup/,/\s+/,$e],className:{ -1:"keyword",3:"title"},contains:[M],keywords:[...Se,...Me],end:/}/} -;for(const e of v.variants){const n=e.contains.find((e=>"interpol"===e.label)) -;n.keywords=l;const t=[...c,...d,...b,h,v,...k];n.contains=[...t,{begin:/\(/, -end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:l, -contains:[...a,R,D,{beginKeywords:"struct protocol class extension enum actor", -end:"\\{",excludeEnd:!0,keywords:l,contains:[e.inherit(e.TITLE_MODE,{ -className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...c] -},I,L,{beginKeywords:"import",end:/$/,contains:[...a],relevance:0 -},...c,...d,...b,h,v,...k,...x,M,A]}},grmr_typescript:e=>{ -const n=we(e),t=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],a={ -beginKeywords:"namespace",end:/\{/,excludeEnd:!0, -contains:[n.exports.CLASS_REFERENCE]},i={beginKeywords:"interface",end:/\{/, -excludeEnd:!0,keywords:{keyword:"interface extends",built_in:t}, -contains:[n.exports.CLASS_REFERENCE]},r={$pattern:be, -keyword:me.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]), -literal:pe,built_in:ye.concat(t),"variable.language":Ee},s={className:"meta", -begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},o=(e,n,t)=>{ -const a=e.contains.findIndex((e=>e.label===n)) -;if(-1===a)throw Error("can not find mode to replace");e.contains.splice(a,1,t)} -;return Object.assign(n.keywords,r), -n.exports.PARAMS_CONTAINS.push(s),n.contains=n.contains.concat([s,a,i]), -o(n,"shebang",e.SHEBANG()),o(n,"use_strict",{className:"meta",relevance:10, -begin:/^\s*['"]use strict['"]/ -}),n.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(n,{ -name:"TypeScript",aliases:["ts","tsx"]}),n},grmr_vbnet:e=>{ -const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={ -className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ -begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ -begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}] -},o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] -}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) -;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, -classNameAliases:{label:"symbol"},keywords:{ -keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", -built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", -type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", -literal:"true false nothing"}, -illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ -className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, -end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0, -variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ -},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ -begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ -className:"label",begin:/^\w+:/},o,l,{className:"meta", -begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, -end:/$/,keywords:{ -keyword:"const disable else elseif enable end externalsource if region then"}, -contains:[l]}]}},grmr_wasm:e=>{e.regex;const n=e.COMMENT(/\(;/,/;\)/) -;return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/, -keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"] -},contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/], -className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{ -match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{ -begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword", -3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/, -className:"type"},{className:"keyword", -match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/ -},{className:"number",relevance:0, -match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/ -}]}},grmr_yaml:e=>{ -const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={ -className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ -},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", -variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{ -variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),r={ -end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},s={begin:/\{/, -end:/\}/,contains:[r],illegal:"\\n",relevance:0},o={begin:"\\[",end:"\\]", -contains:[r],illegal:"\\n",relevance:0},l=[{className:"attr",variants:[{ -begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{ -begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$", -relevance:10},{className:"string", -begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ -begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, -relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type", -begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t -},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", -begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", -relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ -className:"number", -begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" -},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,o,a],c=[...l] -;return c.pop(),c.push(i),r.contains=c,{name:"YAML",case_insensitive:!0, -aliases:["yml"],contains:l}}});const je=ne;for(const e of Object.keys(Ue)){ -const n=e.replace("grmr_","").replace("_","-");je.registerLanguage(n,Ue[e])} -return je}() -;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); \ No newline at end of file diff --git a/Frontend/assets/scripts/common/jquery-3.6.0.slim.min.js b/Frontend/assets/scripts/common/jquery-3.6.0.slim.min.js deleted file mode 100644 index 7556941..0000000 --- a/Frontend/assets/scripts/common/jquery-3.6.0.slim.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.0 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(g,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,v=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),m={},b=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},w=g.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function C(e,t,n){var r,i,o=(n=n||w).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector",E=function(e,t){return new E.fn.init(e,t)};function d(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!b(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(W),X=new RegExp("^"+B+"$"),Q={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){C()},ae=xe(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(t=P.call(d.childNodes),d.childNodes),t[d.childNodes.length].nodeType}catch(e){O={apply:t.length?function(e,t){q.apply(e,P.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(u=Z.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return O.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&p.getElementsByClassName&&e.getElementsByClassName)return O.apply(n,e.getElementsByClassName(i)),n}if(p.qsa&&!k[t+" "]&&(!v||!v.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===d&&(U.test(t)||_.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&p.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=A)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+be(l[o]);c=l.join(",")}try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){k(t,!0)}finally{s===A&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>x.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[A]=!0,e}function ce(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)x.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},C=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:d;return r!=T&&9===r.nodeType&&r.documentElement&&(a=(T=r).documentElement,E=!i(T),d!=T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),p.scope=ce(function(e){return a.appendChild(e).appendChild(T.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),p.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=ce(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=J.test(T.getElementsByClassName),p.getById=ce(function(e){return a.appendChild(e).id=A,!T.getElementsByName||!T.getElementsByName(A).length}),p.getById?(x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),x.find.TAG=p.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=p.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(p.qsa=J.test(T.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+A+"-]").length||v.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+A+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==d&&y(d,e)?-1:t==T||t.ownerDocument==d&&y(d,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==T?-1:t==T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]==d?-1:s[r]==d?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(C(e),p.matchesSelector&&E&&!k[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){k(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return b(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:w,!0)),k.test(r[1])&&E.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=w.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,L=E(w);var q=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=w.createDocumentFragment().appendChild(w.createElement("div")),(ce=w.createElement("input")).setAttribute("type","radio"),ce.setAttribute("checked","checked"),ce.setAttribute("name","t"),le.appendChild(ce),m.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="",m.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="",m.option=!!le.lastChild;var he={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var ye=/<|&#?\w+;/;function me(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p\s*$/g;function ke(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Le(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function je(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n

    ",2===lt.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(m.createHTMLDocument?((r=(t=w.implementation.createHTMLDocument("")).createElement("base")).href=w.location.href,t.head.appendChild(r)):t=w),o=!n&&[],(i=k.exec(e))?[t.createElement(i[1])]:(i=me([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),b(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=Me(m.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0/g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); - } - - - /* plugin itself */ - - /** @type {HLJSPlugin} */ - const mergeHTMLPlugin = { - // preserve the original HTML token stream - "before:highlightElement": ({ el }) => { - originalStream = nodeStream(el); - }, - // merge it afterwards with the highlighted token stream - "after:highlightElement": ({ el, result, text }) => { - if (!originalStream.length) { - return; - } - - const resultNode = document.createElement('div'); - resultNode.innerHTML = result.value; - result.value = mergeStreams(originalStream, nodeStream(resultNode), text); - el.innerHTML = result.value; - } - }; - - /** - * @param {Node} node - */ - function tag(node) { - return node.nodeName.toLowerCase(); - } - - /** - * @param {Node} node - */ - function nodeStream(node) { - /** @type Event[] */ - const result = []; - (function _nodeStream(node, offset) { - for (let child = node.firstChild; child; child = child.nextSibling) { - if (child.nodeType === 3) { - offset += child.nodeValue.length; - } else if (child.nodeType === 1) { - result.push({ - event: 'start', - offset: offset, - node: child - }); - offset = _nodeStream(child, offset); - - if (!tag(child).match(/br|hr|img|input/)) { - result.push({ - event: 'stop', - offset: offset, - node: child - }); - } - } - } - return offset; - })(node, 0); - return result; - } - - /** - * @param {any} original - the original stream - * @param {any} highlighted - stream of the highlighted source - * @param {string} value - the original source itself - */ - function mergeStreams(original, highlighted, value) { - let processed = 0; - let result = ''; - const nodeStack = []; - - function selectStream() { - if (!original.length || !highlighted.length) { - return original.length ? original : highlighted; - } - if (original[0].offset !== highlighted[0].offset) { - return (original[0].offset < highlighted[0].offset) ? original : highlighted; - } - - return highlighted[0].event === 'start' ? original : highlighted; - } - - /** - * @param {Node} node - */ - function open(node) { - /** @param {Attr} attr */ - function attributeString(attr) { - return ' ' + attr.nodeName + '="' + escapeHTML(attr.value) + '"'; - } - - // @ts-ignore - result += '<' + tag(node) + [].map.call(node.attributes, attributeString).join('') - + '>'; - } - - /** - * @param {Node} node - */ - function close(node) { - result += ''; - } - - /** - * @param {Event} event - */ - function render(event) { - (event.event === 'start' ? open : close)(event.node); - } - - while (original.length || highlighted.length) { - let stream = selectStream(); - result += escapeHTML(value.substring(processed, stream[0].offset)); - processed = stream[0].offset; - if (stream === original) { - /* - On any opening or closing tag of the original markup we first close - the entire highlighted node stack, then render the original tag along - with all the following original tags at the same offset and then - reopen all the tags on the highlighted stack. - */ - nodeStack.reverse().forEach(close); - do { - render(stream.splice(0, 1)[0]); - stream = selectStream(); - } while (stream === original && stream.length && stream[0].offset === processed); - nodeStack.reverse().forEach(open); - } else { - if (stream[0].event === 'start') { - nodeStack.push(stream[0].node); - } else { - nodeStack.pop(); - } - render(stream.splice(0, 1)[0]); - } - } - return result + escapeHTML(value.substr(processed)); - } - - return mergeHTMLPlugin; - -}()); - -function formatAndValidateJson(errorElement) { - const input = document.querySelector('#jsonBlock'); - const processInfo = document.getElementById(errorElement); - - const address = window.location.protocol + "//" + window.location.hostname + ":" + 8081 + "/json/formatting" - - fetch(address, { - method: 'POST', - body: input.textContent - }) - .then(async (response) => { - const promise = response.json(); - if (!response.ok) { - throw Error(await promise); - } - - return promise; - }) - .then((data) => { - input.innerText = data.data; - processInfo.innerText = ""; - hljs.highlightElement(input); - - processInfo.innerHTML = "Computed in " + data.time + "ms"; - }) - .catch((error) => { - processInfo.innerHTML = "" + error.data + ""; - console.error('Error:', error); - }); -} - -function minimizeJson(errorElement) { - const input = document.querySelector('#jsonBlock'); - const processInfo = document.getElementById(errorElement); - - const address = window.location.protocol + "//" + window.location.hostname + ":" + 8081 + "/json/minimize" - - fetch(address, { - method: 'POST', - body: input.textContent - }) - .then(async (response) => { - const promise = response.json(); - if (!response.ok) { - throw Error(await promise); - } - - return promise; - }) - .then((data) => { - input.innerText = data.data; - processInfo.innerText = ""; - hljs.highlightElement(input); - - processInfo.innerHTML = "Computed in " + data.time + "ms"; - }) - .catch((error) => { - processInfo.innerHTML = "" + error.data + ""; - console.error('Error:', error); - }); -} - -function clearJsonData() { - const input = document.querySelector('#jsonBlock'); - input.textContent = ""; -} - -function insertDefaultJson() { - const input = document.querySelector('#jsonBlock'); - input.textContent = "{\"enter\": \"your\", \"json\": \"here\"}"; - hljs.highlightElement(input); -} - -/** - * This function is executed after the page is loaded. - * - * @function - * @name init - * @kind function - */ -function init() { - // Make sure that only plain text is pasted - configurePastingInElement("jsonBlock"); - - hljs.addPlugin(mergeHTMLPlugin); -} - diff --git a/Frontend/assets/scripts/tools/mock/datatransfer.js b/Frontend/assets/scripts/tools/mock/datatransfer.js deleted file mode 100644 index 7269faf..0000000 --- a/Frontend/assets/scripts/tools/mock/datatransfer.js +++ /dev/null @@ -1,254 +0,0 @@ -var clientUUID = ''; -var advancedDisplayed = false; -var json = {}; -var jsonIndex = 0; -var host = window.location.protocol + "//" + window.location.hostname + "/mock"; - -const C_UUID = 'mock-uuid'; -const C_ADV = 'advanced-mode'; - -const color_red = "#ff8f8f"; -const color_grey = "#6b6b6b"; - -const setModified = function(){ - setDataModified(); -} - -const getUpdate = function(){ - updateData(); -} -const dataRefresh = function(){ - getData(); -} - -/* - Listeners segment -*/ - -$(document).on('change', '.data-field', setModified); - -$('#btn-save').click( - () => { - disableSaveButton(); - } - ); - -$('#btn-newRow').click( - ()=> { - newRowInput(); - setDataModified(); - } - ); - -/* - Functions segment -*/ - -function disableSaveButton(){ - $('#btn-save').removeClass('active'); - $('#btn-save').off(); -} - -function createLink(uuid){ - var link = host + '/api/mock/r/'+uuid; - return link; -} - - -function onLoad(){ - loadCookies(); - getData(); -} - -function getData(){ - $.getJSON(host + '/api/mock/'+clientUUID, function(data) { - json = data; - loadFetchedMessage(); - initializeUUID(); - }); -} - -function loadCookies(){ - clientUUID = getCookie(C_UUID); - advancedDisplayed = getCookie(C_ADV) == 'true'; -} - -function setCookie(){ - document.cookie = C_UUID + '=' +clientUUID; - document.cookie = C_ADV + '=' + advancedVisibility; -} - -function initializeUUID(){ - if(clientUUID == null || clientUUID == undefined || clientUUID == ''){ - clientUUID = json.clientUUID; - setCookie(); - } -} - -function httpStatusInvalid(){ - value = $('#httpStatus').val(); - return value == ''; -} - -function setDataModified(){ - if(httpStatusInvalid()){ - $('#btn-save').removeClass('active'); - $('#btn-save').off(); - document.getElementById("httpStatus").style.backgroundColor = color_red; - return; - } - $('#btn-save').addClass('active'); - $('#btn-save').click(getUpdate); - document.getElementById("httpStatus").style.backgroundColor = null; -} - -function getCookie(cname) { - var name = cname + '='; - var decodedCookie = decodeURIComponent(document.cookie); - var ca = decodedCookie.split(';'); - for(var i = 0; i '+link+''; - $('#messageLink').html(linkHtml); - $('#httpStatus').val(httpStatus); - $('#typeSelector').val(contentType); - $('#bodyEditor').val(body); -} - -function fillHeaderTable(headers){ - var innerHTML = buildHeaderMapHtml(headers); - refreshHeaderTable(innerHTML); -} - -function refreshHeaderTable(html){ - $('#headerMapTable').html(html); - $('.btn-hashmap').click(function(){ - setDataModified(); - $(this).closest('tr').remove(); - }) -} - -function buildHeaderMapHtml(headers){ - var innerHTML = ''; - for(var key in headers){ - innerHTML += buildRowHtml(key, headers[key]); - } - return innerHTML; -} - -function addRow(key, value){ - var headerMap = $('#headerMapTable'); - var headersMapHtml = headerMap.html(); - headersMapHtml += buildRowHtml(key, value); - refreshHeaderTable(headersMapHtml); -} - -function newRowInput(){ - const hName = $('#headerKeyInput'); - const hValue = $('#headerValueInput'); - if(checkIfInputValid(hName.val()) && checkIfInputValid(hValue.val())){ - addRow(hName.val(), hValue.val()); - hName.val(null); - hValue.val(null); - } -} - -function checkIfInputValid(input){ - return !(input == '' || input == null || input == undefined); -} - -function checkIfHeaderEssential(key){ - - if( key == "Connection" || key == "Keep-Alive" || key == "Date" ){ - return true; - } - return false; - -} - -function buildRowHtml(key, value){ - - if(checkIfHeaderEssential(key)){ - return '' + - '' + - '' + - '' + - ''; - } - return '' + - '' + - '' + - '' + - '' + - ''; -} - -function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); -} - -function createRequestBody(){ - var newJson = - { - clientUUID: json.clientUUID, - contentType: $('#typeSelector').val(), - messageBody: $('#bodyEditor').val(), - httpStatus: $('#httpStatus').val(), - httpHeaders: {}, - }; - newJson['httpHeaders'] = convertTableToJson(); - - json = newJson; - return newJson; -} - - -function convertTableToJson(){ - const rows = $('#headerMapTable').children(); - - var obj = {}; - var key; - for(let i=0; i' + - '' + parseTimeStamp(historyJson[i].dateTimeStamp) + '' + - '' + historyJson[i].httpMethod + '' + - '' + parseRequestBody(historyJson[i].requestBody, i) + '' + - ' ' + - ''; - } - return innerHTML; -} - -function parseRequestBody(requestBody,i){ - return requestBody.length == 0 ? - "No request body" : - '' -} - -function parseTimeStamp(timeStamp){ - return timeStamp.substring(0,19).replace('T',' '); -} - -function parseHeaders(pos){ - parsedJson = new Map(); - headers = historyJson[pos].headers - Object.keys( headers ).forEach( - (jsonKey) => { - parsedJson.set( jsonKey , headers[jsonKey] ); - } - ) - return parsedJson; -} - -function displayHistory(){ - $('#historyTable tbody').html(historyToHtml()); -} diff --git a/Frontend/assets/scripts/tools/mock/modal.js b/Frontend/assets/scripts/tools/mock/modal.js deleted file mode 100644 index c20804b..0000000 --- a/Frontend/assets/scripts/tools/mock/modal.js +++ /dev/null @@ -1,53 +0,0 @@ -var modalDisplayed = false; -var methodToCall = { - name: null, - id: null -}; - -const overlay = $('#overlay'); -const savedModal = $('#modal-confirm'); -const dataLossModal = $('#modal-query'); -const dataLossModalYes = dataLossModal.children().eq(2).children().eq(0); -const dataLossModalNo = dataLossModal.children().eq(2).children().eq(1); -const allModals = $('.modal'); -const btnModalClose = $('.modal button'); -const closeModals = function() { - hideModal(allModals); -} -const savedModalDisplay = function() { - - showModal(savedModal); - setTimeout(closeModals, 2000); -} -const dataLossModalDisplay = function(){ - showModal(dataLossModal); -} - -btnModalClose.click(closeModals); -overlay.click(closeModals); -dataLossModalNo.click(closeModals); -dataLossModalYes.click(dropChangesAndClose); - -function setMethodToCall(name, id){ - methodToCall.name = name; - methodToCall.id = id; -} - -const dropChangesAndClose = function(){ - callMethodByName(methodToCall) - hideModal(dataLossModal); -} - -function showModal(jmodal){ - if(modalDisplayed) return; - overlay.addClass('active'); - jmodal.addClass('active'); - modalDisplayed = true; -} - -function hideModal(jmodal){ - if(!modalDisplayed) return; - overlay.removeClass('active'); - jmodal.removeClass('active'); - modalDisplayed = false; -} diff --git a/Frontend/assets/scripts/tools/mock/popup.js b/Frontend/assets/scripts/tools/mock/popup.js deleted file mode 100644 index 0d2b91f..0000000 --- a/Frontend/assets/scripts/tools/mock/popup.js +++ /dev/null @@ -1,34 +0,0 @@ - -function switchPopups (neededPopupOption) { - $('.hiddable-popup-option').addClass('hidden-popup-type'); - $('#'+neededPopupOption).removeClass('hidden-popup-type'); - } - -function showPopup(){ - $('.popup-flex').removeClass('hiddable-container'); -} - -function hidePopup(){ - $('.popup-flex').addClass('hiddable-container'); - $('.hiddable-popup-option').addClass('hidden-popup-type'); -} - -/* -* Event listener that's close the popup when user clicks out of a popup. -*/ - -window.addEventListener( - 'click' , - (clickedElement) => { - if(!document.getElementById('popup-body').contains(clickedElement.target) && clickedElement.target.className == 'popup-flex' ) { - hidePopup(); - } - } -); - -$('.popup-button-close').click( - () => { - hidePopup(); - $('.hiddable-popup-option').addClass('hidden-popup-type') - } -); \ No newline at end of file diff --git a/Frontend/assets/scripts/tools/mock/uianimation.js b/Frontend/assets/scripts/tools/mock/uianimation.js deleted file mode 100644 index 1871bdf..0000000 --- a/Frontend/assets/scripts/tools/mock/uianimation.js +++ /dev/null @@ -1,165 +0,0 @@ -var advancedVisibility = false; -var focusedField = false; -/* -Listeners -*/ -$("#optional").click(changeAdvancedVisibility); - -$('#historyTab').click(showHistory); - -$('.tooltipped').on("mouseenter" , (event) => {showTip(event.currentTarget.id+'Tip')}) - .on( "mouseleave", (event) => {hideTip(event.currentTarget.id+'Tip')}); - -/* -Functions -*/ - -function changeAdvancedVisibility(){ - if(advancedVisibility){ - $("#advanced").removeClass('active'); - advancedVisibility = false; - } - else { - $('#advanced').addClass('active'); - advancedVisibility = true; - } - setCookie(); -} - -const tabitem = $('.tabitem'); -function showHistory(){ - $('#headersTab').click(showHeaders); - tabitem.removeClass('active'); - $('.tabcontent').removeClass('active'); - $('#history').addClass('active'); - $('#historyTab').addClass('active'); - $('#historyTab').off('click'); - getHistoryData(); -} - -function showHeaders(){ - $('#historyTab').click(showHistory); - tabitem.removeClass('active'); - $('.tabcontent').removeClass('active'); - $('#headers').addClass('active'); - $('#headersTab').addClass('active'); - $('#headersTab').off('click'); -} - -function showHeadersHistory(record){ - historyTable = ''; - headers = parseHeaders(record.id) - headers.forEach( - (value,key) => { - historyTable += - '' + - ''+ key + '' + - ''+ value + '' + - '' - } - ); - document.getElementById('header-history-table-body').innerHTML = historyTable; - switchPopups('history-headers-table'); - showPopup(); -} - -async function formatJSON(json) { - const backend = "java"; - const address = window.location.protocol + "//" + window.location.hostname + "/" + backend + "/json/formatting"; - - var init = { - body: json, - method: "POST" - }; - var request = new Request(address, init); - - var result = await fetch(request).then(response => { - return response.text().then(function (text) { - var json = JSON.parse(text); - json.status = response.status; - return json; - }); - - }); - return result; -} - -async function formatXML(xml) { - const backend = "libxml"; - const address = window.location.protocol + "//" + window.location.hostname + "/" + backend + "/prettify"; - var data = { - data: xml, - process: "", - processor: "libxml", - version: "1.0" - } - - var init = { - body: JSON.stringify(data), - method: "POST" - }; - var request = new Request(address, init); - - var result = await fetch(request).then(response => { - return response.text().then(function (text) { - return JSON.parse(text); - }); - - }); - return result; -} - -function showRequestBody(element){ - var historyRequestBody = historyJson[element.id].requestBody; - const popupContent = document.getElementById('code-highlight-content') - - document.getElementById('code-highlight-content').innerText = "Loading..."; - switch(historyJson[element.id].headers["content-type"]){ - case "application/json":{ - formatJSON(historyRequestBody).then(function(result) { - - if (result.status == "200") { - popupContent.innerText = result.data; - highlightSyntax('code-highlight-content'); - } - else { - popupContent.innerText = historyRequestBody; - } - }); - break; - } - case "application/xml": { - formatXML(historyRequestBody).then(function(result) { - if (result.status == "OK") { - popupContent.innerText = result.result; - highlightSyntax('code-highlight-content'); - } - else { - popupContent.innerText = historyRequestBody; - } - - }); - - break; - } - default:{ - popupContent.innerText = historyRequestBody; - highlightSyntax('code-highlight-content'); - } - } - switchPopups('history-request-body'); - showPopup(); -} - -function refreshHistoryRecords(){ - getHistoryData(); -} - -function hideTip(element){ - $('#'+element).removeClass('active'); -} - -function showTip(element){ - $('.tip').removeClass('active'); - $('#'+element).addClass('active'); -} diff --git a/Frontend/assets/scripts/tools/scripts.js b/Frontend/assets/scripts/tools/scripts.js deleted file mode 100644 index 729ee8e..0000000 --- a/Frontend/assets/scripts/tools/scripts.js +++ /dev/null @@ -1,414 +0,0 @@ -var defaultStrings = []; -const color_grey = "#6b6b6b"; -const color_red = "#ff8f8f"; - -/** -* It clears default content of the element and sets it's color to black. -* -* @function -* @name clearDefaultContent -* @kind function -* @param {any} element to set -* @param {any} text to set -* @returns {void} -*/ -function clearDefaultContent(element, text) { - if (element.innerText == text) { - element.innerText = ""; - element.style.color = "#000000"; - element.style.backgroundColor = "#ffffff"; - } -} - -/** -* It returns the value of the element with id "processors". -* -* @function -* @name getProcessor -* @kind function -* @returns {any} -*/ -function getProcessor() { - return document.getElementById("processors").value; -} - - -/** - * It returns the value of the element with id "versions". - * - * @function - * @name getVersion - * @kind function - * @returns {any} - */ -function getVersion() { - return document.getElementById("versions").value; -} - -/** -* It clears all data fields. -* -* @function -* @name clearDataField -* @kind function -*/ -function clearDataField() { - document.getElementById("xmlArea").innerHTML = ""; - document.getElementById("xmlArea").style.color = null; - document.getElementById("xmlArea").style.backgroundColor = null; - - document.getElementById("transformArea").innerHTML = ""; - document.getElementById("transformArea").style.color = null; - document.getElementById("transformArea").style.backgroundColor = null; - - document.getElementById("resultArea").innerHTML = ""; -} - - -/** -* It fills the XML area with a sample XML. -* -* @function -* @name fillDefaultXML -* @kind function -* @param {any} element -* @returns {void} -*/ -function fillDefaultXML(element) { - if (element.classList.contains("active")) { - const serverAddress = window.location.protocol + "//" + window.location.hostname; - clearDefaultContent(document.getElementById("xmlArea"), "Insert XML here"); - fetch(serverAddress + "/assets/samples/sampleXml.xml") - .then(response => response.text()) - .then((exampleData) => { - document.getElementById("xmlArea").innerText = exampleData; - highlightSyntax("xmlArea"); - document.getElementById("xmlArea").style.backgroundColor = null; - - }) - } -} - - -/** -* It fills the XSD area with a sample XSD and XML area with matching XML. -* -* @function -* @name fillDefaultXSD -* @kind function -* @param {any} element -* @returns {void} -*/ -function fillDefaultXSD(){ - const serverAddress = window.location.protocol + "//" + window.location.hostname; - fetch(serverAddress + "/assets/samples/sampleXSD.xsd") - .then( response => response.text() ) - .then( (XSDSchema) => { - document.getElementById('transformArea').innerText = XSDSchema; - highlightSyntax("transformArea"); - } ) - fetch(serverAddress + "/assets/samples/sampleXMLForXSD.xml") - .then( response => response.text() ) - .then( (XMLSample) => { - document.getElementById('xmlArea').innerText = XMLSample; - highlightSyntax("xmlArea"); - } ) - -} - - -/** - * The `fillDefaultXSLT()` function fetches a default XSLT template from the server and sets the value of the element with id "transformArea" to the fetched template. - * - * @function - * @name fillDefaultXSLT - * @kind function - * @returns {void} - */ -function fillDefaultXSLT() { - const serverAddress = window.location.protocol + "//" + window.location.hostname; - fetch(serverAddress + "/assets/samples/XSLTTemplate.xslt") - .then( response => response.text() ) - .then( (XSTLTemplate) => { - document.getElementById('transformArea').innerText = XSTLTemplate; - highlightSyntax("transformArea"); - } ) -} - -/** -* It sets default content for the element an changes it's color to grey -* -* @function -* @name setDefaultContent -* @kind function -* @param {any} element to set -* @param {any} text to set -*/ -function setDefaultContent(element, text) { - if (element.value == "") { - var id = element.getAttribute('id'); - if (!defaultStrings.includes(text)) { - defaultStrings.push(text); - } - if (id == "xmlArea") { - element.style.color = color_grey; - element.value = text; - } - if (id == "transformArea") { - element.style.color = color_grey; - element.value = text; - } - if (id == "jsonArea") { - element.style.color = color_grey; - element.value = text; - } - } -} - -/** -* It hides list for specified version of XPath -* -* @function -* @name hideList -* @kind function -* @param {any} collList class name of list to hide -* @returns {void} -*/ -function hideList(collList) { - for (i = 0; i < collList.length; i++) { - if (collList[i].nextElementSibling !== null) { - collList[i].nextElementSibling.style.maxHeight = null; - collList[i].nextElementSibling.classList.toggle("collapsibleDataExpanded", false); - } - collList[i].style.display = 'none'; - collList[i].classList.remove("collapsibleActive"); - } -} - -/** -* It checks if the text is a default text. -* -* @function -* @name checkDefault -* @kind function -* @param {any} text -* @returns {boolean} -*/ -function checkDefault(text) { - return defaultStrings.includes(text); -} - -/** -* It show list for specified version of XPath -* -* @function -* @name showList -* @kind function -* @param {any} collList class name of list to hide -* @returns {void} -*/ -function showList(collList) { - for (i = 0; i < collList.length; i++) { - collList[i].style.display = 'block'; - } -} - -/** -* A function that is used to fold/unfold collapsible elements. -* -* @function -* @name smoothFoldElement -* @kind function -* @param {any} element -* @param {any} toogleState -* @param {any} toggleParrent -* @returns {void} -*/ -function smoothFoldElement(element, toogleState, toggleParrent) { - if (toogleState) { - if (toggleParrent) { - element.parentElement.style.maxHeight = "0px"; - } - - element.classList.toggle("active", false); - var subLists = collapsibleData.getElementsByClassName("collapsibleData"); - for (j = 0; j < subLists.length; j++) { - subLists[j].style.maxHeight = null; - } - } else { - collapsibleData.parentElement.style.maxHeight = (collapsibleData.parentElement.scrollHeight) + "px"; - collapsibleData.classList.toggle("active", true); - if (collapsibleData.parentElement.classList.contains("collapsibleData") && collapsibleData.parentElement.classList.contains("active")) { - collapsibleData.parentElement.style.maxHeight = (collapsibleData.parentElement.scrollHeight + collapsibleData.scrollHeight) + "px"; - } - } -} - -/** -* Set tooltip info, function is called by onClick handlers -* -* @function -* @name refreshTooltip -* @kind function -* @returns {void} -*/ -function refreshTooltip() { - var resizeList = document.getElementsByClassName("collapsibleData"); - document.getElementById("processorTooltipInfo").innerText = procInfo; - document.getElementById("xsltelementsheader").innerText = XSLTheader; -} - - - -/** -* A function that performs a request to the server. -* -* @function -* @name performRequest -* @kind function -* @param {any} endpoint of target service -* @param {any} checkXML enable checking for empty XML -* @param {any} checkTransform enable checking for empty transform data -* @returns {false | undefined} -*/ -function performRequest(endpoint, checkXML, checkTransform) { - const sourceId = "xmlArea"; - const transformId = "transformArea"; - var xmlData = document.getElementById(sourceId).innerText.trim(); - var transformData = document.getElementById(transformId).innerText.trim(); - - var backend = "java"; - if (getProcessor() == "libxml") { - backend = "libxml"; - } - - var empty = false; - if (defaultStrings.includes(xmlData) && checkXML) { - document.getElementById(sourceId).style.backgroundColor = color_red; - xmlData = ""; - empty = true; - } - if (defaultStrings.includes(transformData) && checkTransform) { - document.getElementById(transformId).style.backgroundColor = color_red; - empty = true; - } - if (!empty) { - restRequest(backend, endpoint, xmlData, transformData).then(function (result) { - document.getElementById("resultArea").innerText = result.result; - highlightSyntax("resultArea"); - document.getElementById("procinfo").innerText = ' Computed using ' + result.processor; - - - if (result.status == "OK") { - document.getElementById("procinfo").innerText += " (" + result.time + "ms)"; - if (result.type) - document.getElementById("procinfo").innerText += ". Returned: " + result.type; - else - document.getElementById("procinfo").innerText += ". Engine doesn't support return of data types."; - procinfo.style.color = "#30aa58"; - } else { - procinfo.style.color = "#aa3030"; - } - }); - } else { - document.getElementById("resultArea").innerHTML = "No data provided!"; - return false; - } - -} - -/** -* Function that prepares data to send and handles response -* -* @function -* @name performFormatRequest -* @kind function -* @param {any} endpoint of target service -* @param {any} checkXML enable checking for empty XML -* @param {any} sourceId ID of element to get XML from -* @param {any} targetId ID of element to write formatted XML -* @returns {void} -*/ -function performFormatRequest(endpoint, checkXML, sourceId, targetId) { - const sourceElement = document.getElementById(sourceId); - const targetElement = document.getElementById(targetId); - const infoElement = document.getElementById("formatinfo"); - const backend = "libxml"; - var xmlData = sourceElement.innerText.trim(); - - var empty = false; - if (defaultStrings.includes(xmlData) && checkXML) { - sourceElement.style.backgroundColor = color_red; - xmlData = ""; - empty = true; - } - - if (!empty) { - restRequest(backend, endpoint, xmlData, "").then(function (result) { - if (result.status == "OK") { - targetElement.innerText = result.result.trim(); - highlightSyntax(targetElement.id); - - targetElement.style.backgroundColor = null; - infoElement.innerText = ' Computed'.concat(" in ", result.time, "ms."); - infoElement.style.color = "#30aa58"; - - } - else { - targetElement.style.backgroundColor = color_red; - infoElement.innerText = result.result; - infoElement.style.color = "#aa3030"; - } - - }); - } - - -} - - -/** -* Form REST request, send and return received data -* -* @async -* @function -* @name restRequest -* @kind function -* @param {any} backend target backend -* @param {any} endpoint of target service -* @param {any} xmlData XML that will be sent -* @param {any} transformData data used to transform given XML -* @returns {Promise} -*/ -async function restRequest(backend, endpoint, xmlData, transformData) { - - const addr = window.location.protocol + "//" + window.location.hostname + "/" + backend + "/" + endpoint; - - if (defaultStrings.includes(xmlData)) { - xmlData = ""; - } - - var jsonData = JSON.stringify({ - "data": xmlData, - "process": transformData, - "processor": getProcessor(), - "version": getVersion() - }); - var init = { - headers: new Headers({ - }), - body: jsonData, - // body: data, - method: "POST" - }; - var request = new Request(addr, init); - - - var result = await fetch(request).then(response => { - return response.text().then(function (text) { - return JSON.parse(text); - }); - - }); - return result; -} \ No newline at end of file diff --git a/Frontend/assets/scripts/tools/xmlFormatter.js b/Frontend/assets/scripts/tools/xmlFormatter.js deleted file mode 100644 index fef7d28..0000000 --- a/Frontend/assets/scripts/tools/xmlFormatter.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * This function is executed after the page is loaded. - * - * @function - * @name init - * @kind function - */ -function init() { - configurePastingInElement("xmlArea"); -} - -/** - * Function returns processor that will be used to transform XML. - * This solution allows to use one function for sending request from every tool - * - * @function - * @name getProcessor - * @kind function - */ -function getProcessor() { - return "libxml"; -} - -/** - * Function returns version of XML processor that will be used to transform XML. - * This solution allows to use one function for sending request from every tool - * - * @function - * @name getVersion - * @kind function - */ -function getVersion() { - return "1.0" -} \ No newline at end of file diff --git a/Frontend/assets/scripts/tools/xpath.js b/Frontend/assets/scripts/tools/xpath.js deleted file mode 100644 index ab5bff6..0000000 --- a/Frontend/assets/scripts/tools/xpath.js +++ /dev/null @@ -1,174 +0,0 @@ - -/** - * The `processVersionSelector()` function is responsible for updating the display of the web page - * based on the selected processor and version. - * - * @function - * @name processVersionSelector - * @kind function - * @returns {void} - */ -function processVersionSelector() { - var processor = getProcessor(); - var hideableOptions = document.getElementsByClassName("hideable"); - for (let i = 0; i < hideableOptions.length; i++) { - hideableOptions[i].style = "display: none;"; - } - if (processor == "xalan" || processor == "libxml") { - var xalanOptions = document.getElementsByClassName("xalan"); - for (let i = 0; i < xalanOptions.length; i++) { - xalanOptions[i].style = ""; - } - document.getElementById("versions").selectedIndex = 0; - } - else { - var saxonOptions = document.getElementsByClassName("saxon"); - for (let i = 0; i < saxonOptions.length; i++) { - saxonOptions[i].style = ""; - } - document.getElementById("versions").selectedIndex = 3; - - } - processTooltip(); - -} - -/** - * The `processTooltip()` function is responsible for updating the display of the tooltip based on the selected version of the processor. - * It shows or hides different sections of the tooltip based on the selected version. - * It also handles the click event on the form and updates the tooltip accordingly. - * - * @function - * @name processTooltip - * @kind function - */ -function processTooltip() { - var filter = "collapse" + getVersion(); - var collList; - - - if (filter == "collapse3.0") { - document.getElementById("tooltipFunctionInfo").innerText = "XPath 3.0 functions"; - hideList(document.getElementsByName("collapse10")); - hideList(document.getElementsByName("collapse20")); - showList(document.getElementsByName("collapse30")); - hideList(document.getElementsByName("collapse31")); - - } else if (filter == "collapse3.1") { - document.getElementById("tooltipFunctionInfo").innerText = "XPath 3.1 functions"; - hideList(document.getElementsByName("collapse10")); - hideList(document.getElementsByName("collapse20")); - hideList(document.getElementsByName("collapse30")); - showList(document.getElementsByName("collapse31")); - } else if (filter == "collapse2.0") { - document.getElementById("tooltipFunctionInfo").innerText = "XPath 2.0 functions"; - hideList(document.getElementsByName("collapse10")); - showList(document.getElementsByName("collapse20")); - hideList(document.getElementsByName("collapse30")); - hideList(document.getElementsByName("collapse31")); - } else { - document.getElementById("tooltipFunctionInfo").innerText = "XPath 1.0 functions"; - showList(document.getElementsByName("collapse10")); - hideList(document.getElementsByName("collapse20")); - hideList(document.getElementsByName("collapse30")); - hideList(document.getElementsByName("collapse31")); - - } -} - - - -/** - * This function is executed after the page is loaded. - * - * @function - * @name init - * @kind function - */ -function init() { - - // Make sure that only plain text is pasted - configurePastingInElement("xmlArea"); - configurePastingInElement("transformArea"); - - //Handle clicks in whole form and set info in tooltip - setDefaultContent(document.getElementById("xmlArea"), 'Insert XML here'); - setDefaultContent(document.getElementById("transformArea"), 'Insert XPath expression here'); - - processVersionSelector(); - processTooltip(); - tool.addEventListener('change', event => { - //Check if script was called from textarea or selector - var targetID = event.target.getAttribute('id'); - if (targetID == "processors") { - processVersionSelector(); - processTooltip(); - } - else if (targetID == "versions") { - processTooltip(); - } - - - }) - tool.addEventListener('click', event => { - //Check if script was called from textarea or selector - var targetID = event.target.getAttribute('id'); - if (targetID !== "xmlArea" && targetID !== "transformArea") { - return; - } - processTooltip(); - - }) - tool.addEventListener('change', event => { - //Check if script was called from textarea or selector - var targetID = event.target.getAttribute('id'); - if (targetID !== "xmlArea" && targetID !== "transformArea") { - return; - } - processTooltip(); - }) - - var triggerList = document.getElementsByClassName("collapseTrigger"); - for (i = 0; i < triggerList.length; i++) { - - triggerList[i].addEventListener("click", function () { - var collapsible = this.parentElement; - if (this.tagName == "A") { - var collapsibleData = this.nextElementSibling; - } else { - var collapsibleData = this.parentElement.nextElementSibling; - - } - - - if (collapsibleData.style.maxHeight > "0px") { - collapsibleData.style.maxHeight = "0px"; - - this.classList.toggle("active", false); - if (!this.classList.contains("collapsibleMini")) { - collapsible.classList.toggle("active", false); - } - - var subLists1 = collapsibleData.getElementsByClassName("content"); - var subLists2 = collapsibleData.getElementsByClassName("active"); - for (j = 0; j < subLists1.length; j++) { - subLists1[j].style.maxHeight = "0px"; - } - for (j = 0; j < subLists2.length; j++) { - subLists2[j].classList.toggle("active", false); - } - } else { - collapsibleData.style.maxHeight = (collapsibleData.scrollHeight) + "px"; - - this.classList.toggle("active", true); - if (!this.classList.contains("collapsibleMini")) { - collapsible.classList.toggle("active", true); - } else { - var parentContent = this.closest(".content"); - parentContent.style.maxHeight = (parentContent.scrollHeight + collapsibleData.scrollHeight) + "px"; - } - } - }); - } -} - diff --git a/Frontend/assets/scripts/tools/xsd.js b/Frontend/assets/scripts/tools/xsd.js deleted file mode 100644 index 62e5612..0000000 --- a/Frontend/assets/scripts/tools/xsd.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * This function is executed after the page is loaded. - * - * @function - * @name init - * @kind function - */ -function init() { - // Make sure that only plain text is pasted - configurePastingInElement("xmlArea"); - configurePastingInElement("transformArea"); - - //Handle clicks in whole form and set info in tooltip - setDefaultContent(document.getElementById("xmlArea"), 'Insert XML here'); - setDefaultContent(document.getElementById("transformArea"), 'Insert XSD here'); - - // refreshTooltip(); - processTooltip(); - tool.addEventListener('click', event => { - //Check if script was called from textarea or selector - var targetID = event.target.getAttribute('id'); - if (targetID !== "processors" && targetID !== "xmlArea" && targetID !== "transformArea" && targetID !== "versions") { - return; - } - - processTooltip(); - - }) -} - -/** - * The `processTooltip()` function is responsible for updating the display of the tooltip based on the selected version of the processor. - * It shows or hides different sections of the tooltip based on the selected version. - * It also handles the click event on the form and updates the tooltip accordingly. - * - * @function - * @name processTooltip - * @kind function - */ -function processTooltip() { - - if (getProcessor() == "xalan") { - document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0 functions"; - document.getElementById("processorTooltipInfo").innerText = "Supports XSLT 1.0"; - hideList(document.getElementsByName("collapse30")); - } else { - document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0, 2.0 & 3.0 functions"; - document.getElementById("processorTooltipInfo").innerText = "Supports XSLT up to 3.0"; - showList(document.getElementsByName("collapse30")); - } -} \ No newline at end of file diff --git a/Frontend/assets/scripts/tools/xslt.js b/Frontend/assets/scripts/tools/xslt.js deleted file mode 100644 index 4e61cb1..0000000 --- a/Frontend/assets/scripts/tools/xslt.js +++ /dev/null @@ -1,100 +0,0 @@ -/** - * The `processTooltip()` function is responsible for updating the display of the tooltip based on the selected version of the processor. - * It shows or hides different sections of the tooltip based on the selected version. - * It also handles the click event on the form and updates the tooltip accordingly. - * - * @function - * @name processTooltip - * @kind function - */ -function processTooltip() { - - if (getProcessor() == "xalan" || getProcessor() == "libxml") { - document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0 functions"; - document.getElementById("processorTooltipInfo").innerText = "Supports XSLT 1.0"; - hideList(document.getElementsByName("collapse30")); - } else { - document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0, 2.0 & 3.0 functions"; - document.getElementById("processorTooltipInfo").innerText = "Supports XSLT up to 3.0"; - showList(document.getElementsByName("collapse30")); - } -} - - -/** - * This function is executed after the page is loaded. - * - * @function - * @name init - * @kind function - */ -function init() { - // Make sure that only plain text is pasted - configurePastingInElement("xmlArea"); - configurePastingInElement("transformArea"); - - //Handle clicks in whole form and set info in tooltip - setDefaultContent(document.getElementById("xmlArea"), 'Insert XML here'); - setDefaultContent(document.getElementById("transformArea"), 'Insert XSLT here'); - - // refreshTooltip(); - processTooltip(); - tool.addEventListener('click', event => { - //Check if script was called from textarea or selector - var targetID = event.target.getAttribute('id'); - if (targetID !== "processors" && targetID !== "xmlArea" && targetID !== "transformArea" && targetID !== "versions") { - return; - } - - processTooltip(); - }) - - tool.addEventListener('change', event => { - //Check if script was called from textarea or selector - var targetID = event.target.getAttribute('id'); - if (targetID !== "processors") { - return; - } - - processTooltip(); - - }) - - var triggerList = document.getElementsByClassName("collapseTrigger"); - for (i = 0; i < triggerList.length; i++) { - - triggerList[i].addEventListener("click", function () { - - var collapsible = this.parentElement; - var collapsibleData = this.nextElementSibling; - if (collapsibleData.style.maxHeight > "0px") { - collapsibleData.style.maxHeight = "0px"; - - this.classList.toggle("active", false); - if (!this.classList.contains("collapsibleMini")) { - collapsible.classList.toggle("active", false); - } - - var subLists1 = collapsibleData.getElementsByClassName("content"); - var subLists2 = collapsibleData.getElementsByClassName("active"); - for (j = 0; j < subLists1.length; j++) { - subLists1[j].style.maxHeight = "0px"; - } - for (j = 0; j < subLists2.length; j++) { - subLists2[j].classList.toggle("active", false); - } - } else { - collapsibleData.style.maxHeight = (collapsibleData.scrollHeight) + "px"; - - this.classList.toggle("active", true); - if (!this.classList.contains("collapsibleMini")) { - collapsible.classList.toggle("active", true); - } else { - var parentContent = this.closest(".content"); - parentContent.style.maxHeight = (parentContent.scrollHeight + collapsibleData.scrollHeight) + "px"; - } - } - }); - } - -} \ No newline at end of file diff --git a/Frontend/common.css b/Frontend/common.css deleted file mode 100644 index 492ef0f..0000000 --- a/Frontend/common.css +++ /dev/null @@ -1,6 +0,0 @@ -@import url('https://necolas.github.io/normalize.css/8.0.1/normalize.css'); -@import url('Frontend/css/r11addons.css'); -@import url('Frontend/css/r11tables.css'); -@import url('Frontend/css/r11tool.css'); -@import url('Frontend/css/r11tooltip.css'); -@import url('Frontend/css/r11modal.css'); diff --git a/Frontend/env.d.ts b/Frontend/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/Frontend/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/Frontend/index.html b/Frontend/index.html index d8aeaa6..4e362b1 100644 --- a/Frontend/index.html +++ b/Frontend/index.html @@ -1,57 +1,13 @@ - - - - - - - - - Release11 Web Tools - - + + - - - - - -
    -
    -
    - - -
    - -
    - - - + + + Release11 Tools + + +
    + + diff --git a/Frontend/insert_version.sh b/Frontend/insert_version.sh deleted file mode 100644 index 9962202..0000000 --- a/Frontend/insert_version.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -input="$(date +'%Y-%m-%d %H:%M')" - -sed -i "s/\[\:VERSION\:\]/$input/g" /usr/share/nginx/html/index.html \ No newline at end of file diff --git a/Frontend/lawful/privacy-policy.html b/Frontend/lawful/privacy-policy.html deleted file mode 100644 index a3c4061..0000000 --- a/Frontend/lawful/privacy-policy.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - -
    -

    Lorem ipsum

    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nullam ac tortor vitae purus. Felis imperdiet proin fermentum leo. Donec adipiscing tristique risus nec feugiat in fermentum. Etiam dignissim diam quis enim lobortis. Amet dictum sit amet justo donec. Leo integer malesuada nunc vel risus commodo. Scelerisque purus semper eget duis at tellus. In ornare quam viverra orci sagittis. Ultrices tincidunt arcu non sodales neque sodales.

    - -

    Congue nisi vitae

    -

    Congue nisi vitae suscipit tellus mauris a diam. Ullamcorper velit sed ullamcorper morbi tincidunt ornare massa eget egestas. Scelerisque eu ultrices vitae auctor eu augue. Sit amet mauris commodo quis imperdiet massa tincidunt nunc pulvinar. Et magnis dis parturient montes nascetur. Imperdiet dui accumsan sit amet nulla facilisi morbi tempus. Quisque non tellus orci ac auctor. Tempor orci eu lobortis elementum nibh tellus molestie nunc. Purus in massa tempor nec feugiat nisl. Ultrices eros in cursus turpis. Feugiat scelerisque varius morbi enim nunc faucibus a pellentesque sit. Diam sit amet nisl suscipit adipiscing bibendum est ultricies. Egestas quis ipsum suspendisse ultrices gravida dictum fusce ut placerat. Et molestie ac feugiat sed. Ut tortor pretium viverra suspendisse potenti. Malesuada bibendum arcu vitae elementum curabitur vitae nunc.

    - -

    Interdum posuere lorem ipsum dolor sit amet. Amet porttitor eget dolor morbi non. Nulla pellentesque dignissim enim sit amet. Volutpat lacus laoreet non curabitur. Lectus quam id leo in vitae turpis massa. Facilisis sed odio morbi quis commodo odio aenean. Posuere lorem ipsum dolor sit. Tempor commodo ullamcorper a lacus. Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. Aliquam sem fringilla ut morbi tincidunt augue interdum. Tellus mauris a diam maecenas sed enim ut sem. Placerat in egestas erat imperdiet sed euismod nisi porta lorem. Pellentesque id nibh tortor id aliquet lectus proin. A cras semper auctor neque vitae. Non curabitur gravida arcu ac. Netus et malesuada fames ac turpis. Nulla porttitor massa id neque aliquam. Aliquam nulla facilisi cras fermentum odio eu. Cras ornare arcu dui vivamus arcu felis bibendum ut. Non enim praesent elementum facilisis leo.

    - -

    Lectus arcu bibendum at varius. Vestibulum lectus mauris ultrices eros in cursus turpis massa tincidunt. Libero nunc consequat interdum varius sit amet mattis vulputate enim. Facilisis leo vel fringilla est. Eros in cursus turpis massa tincidunt dui ut ornare. In mollis nunc sed id semper risus. Morbi tincidunt ornare massa eget egestas purus. Libero volutpat sed cras ornare. Sit amet commodo nulla facilisi nullam vehicula ipsum a. Viverra suspendisse potenti nullam ac tortor. Cursus vitae congue mauris rhoncus aenean vel elit scelerisque mauris. Vitae semper quis lectus nulla. Nunc sed blandit libero volutpat sed cras. Morbi tristique senectus et netus et malesuada fames. Pretium quam vulputate dignissim suspendisse in. A iaculis at erat pellentesque adipiscing commodo elit at imperdiet.

    - -

    Nec sagittis aliquam malesuada bibendum. In ante metus dictum at tempor commodo ullamcorper. Nec sagittis aliquam malesuada bibendum arcu vitae elementum. Diam phasellus vestibulum lorem sed risus. Diam maecenas ultricies mi eget mauris pharetra et ultrices neque. Amet volutpat consequat mauris nunc congue nisi vitae suscipit tellus. Quam nulla porttitor massa id neque. Dictum non consectetur a erat nam. At consectetur lorem donec massa sapien faucibus. Sagittis nisl rhoncus mattis rhoncus urna neque viverra justo nec. Non enim praesent elementum facilisis leo vel. Rhoncus urna neque viverra justo nec ultrices dui sapien eget.

    - -

    Amet facilisis

    -

    Amet facilisis magna etiam tempor. Vestibulum rhoncus est pellentesque elit. Fames ac turpis egestas integer eget. Dapibus ultrices in iaculis nunc. Sed turpis tincidunt id aliquet risus feugiat in. Et netus et malesuada fames ac. Amet massa vitae tortor condimentum lacinia. Felis eget nunc lobortis mattis aliquam faucibus purus. Nibh sed pulvinar proin gravida hendrerit lectus. Varius morbi enim nunc faucibus a pellentesque sit. Aliquam sem fringilla ut morbi. Sed nisi lacus sed viverra tellus in hac. Quis eleifend quam adipiscing vitae proin sagittis nisl rhoncus. Enim blandit volutpat maecenas volutpat blandit aliquam etiam. Fermentum iaculis eu non diam phasellus vestibulum lorem sed risus. Massa id neque aliquam vestibulum morbi. Enim diam vulputate ut pharetra. Orci sagittis eu volutpat odio facilisis.

    - -

    Sit amet cursus sit amet. Odio ut enim blandit volutpat maecenas volutpat blandit aliquam etiam. Amet est placerat in egestas erat imperdiet sed euismod nisi. Mattis vulputate enim nulla aliquet porttitor. At risus viverra adipiscing at in tellus integer. Sed viverra ipsum nunc aliquet. Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Euismod elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Placerat in egestas erat imperdiet sed. Eleifend donec pretium vulputate sapien nec. Ipsum dolor sit amet consectetur adipiscing.

    - -

    Morbi tristique senectus et netus et malesuada fames ac. Feugiat nibh sed pulvinar proin gravida hendrerit lectus. Amet purus gravida quis blandit turpis cursus in hac. Nulla aliquet enim tortor at auctor. Nulla facilisi etiam dignissim diam. Consequat nisl vel pretium lectus quam id leo. Enim neque volutpat ac tincidunt vitae semper. Tristique nulla aliquet enim tortor at. Eu mi bibendum neque egestas congue quisque egestas diam. Est ante in nibh mauris cursus. Felis bibendum ut tristique et. Tristique nulla aliquet enim tortor at. Non curabitur gravida arcu ac tortor dignissim convallis aenean. Eleifend donec pretium vulputate sapien nec. Massa tempor nec feugiat nisl pretium fusce id. Nulla facilisi morbi tempus iaculis urna id. Ornare suspendisse sed nisi lacus sed viverra tellus in.

    - -

    Morbi non arcu risus quis varius quam. Rhoncus est pellentesque elit ullamcorper dignissim cras. Gravida rutrum quisque non tellus orci ac auctor augue. Consequat semper viverra nam libero justo laoreet sit amet. Pellentesque habitant morbi tristique senectus et netus et malesuada. Ullamcorper eget nulla facilisi etiam dignissim diam quis enim. Quisque sagittis purus sit amet volutpat consequat mauris nunc congue. Sed tempus urna et pharetra pharetra massa massa ultricies mi. Quis lectus nulla at volutpat diam ut venenatis. Amet porttitor eget dolor morbi non arcu. Massa tincidunt dui ut ornare lectus sit amet est placerat. Odio tempor orci dapibus ultrices in iaculis nunc sed augue. Vitae turpis massa sed elementum tempus egestas sed. Velit egestas dui id ornare arcu odio. Scelerisque felis imperdiet proin fermentum leo vel orci porta non. Arcu bibendum at varius vel pharetra. Sapien eget mi proin sed libero enim. Tempus imperdiet nulla malesuada pellentesque elit eget. Semper auctor neque vitae tempus. Dolor magna eget est lorem ipsum.

    - -

    Augue neque gravida in fermentum et sollicitudin ac orci phasellus. Est placerat in egestas erat imperdiet sed euismod nisi. Aliquet risus feugiat in ante metus dictum at tempor commodo. Ultricies integer quis auctor elit sed vulputate. Aliquet risus feugiat in ante metus dictum. Accumsan lacus vel facilisis volutpat est velit. Augue mauris augue neque gravida in fermentum et sollicitudin. Vel quam elementum pulvinar etiam. Amet aliquam id diam maecenas ultricies mi. Elit pellentesque habitant morbi tristique senectus et. Habitant morbi tristique senectus et netus et malesuada fames. Nisl nisi scelerisque eu ultrices. Morbi tristique senectus et netus. Et malesuada fames ac turpis egestas. Magna ac placerat vestibulum lectus mauris ultrices eros in cursus. Dis parturient montes nascetur ridiculus.

    -
    - - - diff --git a/Frontend/lawful/terms-of-service.html b/Frontend/lawful/terms-of-service.html deleted file mode 100644 index a3c4061..0000000 --- a/Frontend/lawful/terms-of-service.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - -
    -

    Lorem ipsum

    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nullam ac tortor vitae purus. Felis imperdiet proin fermentum leo. Donec adipiscing tristique risus nec feugiat in fermentum. Etiam dignissim diam quis enim lobortis. Amet dictum sit amet justo donec. Leo integer malesuada nunc vel risus commodo. Scelerisque purus semper eget duis at tellus. In ornare quam viverra orci sagittis. Ultrices tincidunt arcu non sodales neque sodales.

    - -

    Congue nisi vitae

    -

    Congue nisi vitae suscipit tellus mauris a diam. Ullamcorper velit sed ullamcorper morbi tincidunt ornare massa eget egestas. Scelerisque eu ultrices vitae auctor eu augue. Sit amet mauris commodo quis imperdiet massa tincidunt nunc pulvinar. Et magnis dis parturient montes nascetur. Imperdiet dui accumsan sit amet nulla facilisi morbi tempus. Quisque non tellus orci ac auctor. Tempor orci eu lobortis elementum nibh tellus molestie nunc. Purus in massa tempor nec feugiat nisl. Ultrices eros in cursus turpis. Feugiat scelerisque varius morbi enim nunc faucibus a pellentesque sit. Diam sit amet nisl suscipit adipiscing bibendum est ultricies. Egestas quis ipsum suspendisse ultrices gravida dictum fusce ut placerat. Et molestie ac feugiat sed. Ut tortor pretium viverra suspendisse potenti. Malesuada bibendum arcu vitae elementum curabitur vitae nunc.

    - -

    Interdum posuere lorem ipsum dolor sit amet. Amet porttitor eget dolor morbi non. Nulla pellentesque dignissim enim sit amet. Volutpat lacus laoreet non curabitur. Lectus quam id leo in vitae turpis massa. Facilisis sed odio morbi quis commodo odio aenean. Posuere lorem ipsum dolor sit. Tempor commodo ullamcorper a lacus. Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. Aliquam sem fringilla ut morbi tincidunt augue interdum. Tellus mauris a diam maecenas sed enim ut sem. Placerat in egestas erat imperdiet sed euismod nisi porta lorem. Pellentesque id nibh tortor id aliquet lectus proin. A cras semper auctor neque vitae. Non curabitur gravida arcu ac. Netus et malesuada fames ac turpis. Nulla porttitor massa id neque aliquam. Aliquam nulla facilisi cras fermentum odio eu. Cras ornare arcu dui vivamus arcu felis bibendum ut. Non enim praesent elementum facilisis leo.

    - -

    Lectus arcu bibendum at varius. Vestibulum lectus mauris ultrices eros in cursus turpis massa tincidunt. Libero nunc consequat interdum varius sit amet mattis vulputate enim. Facilisis leo vel fringilla est. Eros in cursus turpis massa tincidunt dui ut ornare. In mollis nunc sed id semper risus. Morbi tincidunt ornare massa eget egestas purus. Libero volutpat sed cras ornare. Sit amet commodo nulla facilisi nullam vehicula ipsum a. Viverra suspendisse potenti nullam ac tortor. Cursus vitae congue mauris rhoncus aenean vel elit scelerisque mauris. Vitae semper quis lectus nulla. Nunc sed blandit libero volutpat sed cras. Morbi tristique senectus et netus et malesuada fames. Pretium quam vulputate dignissim suspendisse in. A iaculis at erat pellentesque adipiscing commodo elit at imperdiet.

    - -

    Nec sagittis aliquam malesuada bibendum. In ante metus dictum at tempor commodo ullamcorper. Nec sagittis aliquam malesuada bibendum arcu vitae elementum. Diam phasellus vestibulum lorem sed risus. Diam maecenas ultricies mi eget mauris pharetra et ultrices neque. Amet volutpat consequat mauris nunc congue nisi vitae suscipit tellus. Quam nulla porttitor massa id neque. Dictum non consectetur a erat nam. At consectetur lorem donec massa sapien faucibus. Sagittis nisl rhoncus mattis rhoncus urna neque viverra justo nec. Non enim praesent elementum facilisis leo vel. Rhoncus urna neque viverra justo nec ultrices dui sapien eget.

    - -

    Amet facilisis

    -

    Amet facilisis magna etiam tempor. Vestibulum rhoncus est pellentesque elit. Fames ac turpis egestas integer eget. Dapibus ultrices in iaculis nunc. Sed turpis tincidunt id aliquet risus feugiat in. Et netus et malesuada fames ac. Amet massa vitae tortor condimentum lacinia. Felis eget nunc lobortis mattis aliquam faucibus purus. Nibh sed pulvinar proin gravida hendrerit lectus. Varius morbi enim nunc faucibus a pellentesque sit. Aliquam sem fringilla ut morbi. Sed nisi lacus sed viverra tellus in hac. Quis eleifend quam adipiscing vitae proin sagittis nisl rhoncus. Enim blandit volutpat maecenas volutpat blandit aliquam etiam. Fermentum iaculis eu non diam phasellus vestibulum lorem sed risus. Massa id neque aliquam vestibulum morbi. Enim diam vulputate ut pharetra. Orci sagittis eu volutpat odio facilisis.

    - -

    Sit amet cursus sit amet. Odio ut enim blandit volutpat maecenas volutpat blandit aliquam etiam. Amet est placerat in egestas erat imperdiet sed euismod nisi. Mattis vulputate enim nulla aliquet porttitor. At risus viverra adipiscing at in tellus integer. Sed viverra ipsum nunc aliquet. Dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu. Euismod elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Placerat in egestas erat imperdiet sed. Eleifend donec pretium vulputate sapien nec. Ipsum dolor sit amet consectetur adipiscing.

    - -

    Morbi tristique senectus et netus et malesuada fames ac. Feugiat nibh sed pulvinar proin gravida hendrerit lectus. Amet purus gravida quis blandit turpis cursus in hac. Nulla aliquet enim tortor at auctor. Nulla facilisi etiam dignissim diam. Consequat nisl vel pretium lectus quam id leo. Enim neque volutpat ac tincidunt vitae semper. Tristique nulla aliquet enim tortor at. Eu mi bibendum neque egestas congue quisque egestas diam. Est ante in nibh mauris cursus. Felis bibendum ut tristique et. Tristique nulla aliquet enim tortor at. Non curabitur gravida arcu ac tortor dignissim convallis aenean. Eleifend donec pretium vulputate sapien nec. Massa tempor nec feugiat nisl pretium fusce id. Nulla facilisi morbi tempus iaculis urna id. Ornare suspendisse sed nisi lacus sed viverra tellus in.

    - -

    Morbi non arcu risus quis varius quam. Rhoncus est pellentesque elit ullamcorper dignissim cras. Gravida rutrum quisque non tellus orci ac auctor augue. Consequat semper viverra nam libero justo laoreet sit amet. Pellentesque habitant morbi tristique senectus et netus et malesuada. Ullamcorper eget nulla facilisi etiam dignissim diam quis enim. Quisque sagittis purus sit amet volutpat consequat mauris nunc congue. Sed tempus urna et pharetra pharetra massa massa ultricies mi. Quis lectus nulla at volutpat diam ut venenatis. Amet porttitor eget dolor morbi non arcu. Massa tincidunt dui ut ornare lectus sit amet est placerat. Odio tempor orci dapibus ultrices in iaculis nunc sed augue. Vitae turpis massa sed elementum tempus egestas sed. Velit egestas dui id ornare arcu odio. Scelerisque felis imperdiet proin fermentum leo vel orci porta non. Arcu bibendum at varius vel pharetra. Sapien eget mi proin sed libero enim. Tempus imperdiet nulla malesuada pellentesque elit eget. Semper auctor neque vitae tempus. Dolor magna eget est lorem ipsum.

    - -

    Augue neque gravida in fermentum et sollicitudin ac orci phasellus. Est placerat in egestas erat imperdiet sed euismod nisi. Aliquet risus feugiat in ante metus dictum at tempor commodo. Ultricies integer quis auctor elit sed vulputate. Aliquet risus feugiat in ante metus dictum. Accumsan lacus vel facilisis volutpat est velit. Augue mauris augue neque gravida in fermentum et sollicitudin. Vel quam elementum pulvinar etiam. Amet aliquam id diam maecenas ultricies mi. Elit pellentesque habitant morbi tristique senectus et. Habitant morbi tristique senectus et netus et malesuada fames. Nisl nisi scelerisque eu ultrices. Morbi tristique senectus et netus. Et malesuada fames ac turpis egestas. Magna ac placerat vestibulum lectus mauris ultrices eros in cursus. Dis parturient montes nascetur ridiculus.

    -
    - - - diff --git a/Frontend/nginx.conf b/Frontend/nginx.conf index 74e93e6..144dee5 100644 --- a/Frontend/nginx.conf +++ b/Frontend/nginx.conf @@ -8,6 +8,7 @@ server { location / { root /usr/share/nginx/html; index index.html index.htm; + try_files $uri $uri/ /index.html; expires -1; add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; } @@ -17,6 +18,11 @@ server { proxy_set_header Host $host; } + location /api/mock { + proxy_pass http://xmltools-mocked-services:8097/api/mock; + proxy_set_header Host $host; + } + location /libxml/ { proxy_pass http://xmltools-libxml-backend/; proxy_set_header Host $host; diff --git a/Frontend/package-lock.json b/Frontend/package-lock.json new file mode 100644 index 0000000..1734b18 --- /dev/null +++ b/Frontend/package-lock.json @@ -0,0 +1,8055 @@ +{ + "name": "new-frontend", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "new-frontend", + "version": "0.0.0", + "dependencies": { + "@codemirror/lang-html": "^6.4.5", + "@codemirror/lang-json": "^6.0.1", + "@codemirror/lang-xml": "^6.0.2", + "@codemirror/theme-one-dark": "^6.1.2", + "codemirror": "^6.0.1", + "vue": "^3.3.4", + "vue-codemirror": "^6.1.1", + "vue-router": "^4.2.2" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.2.0", + "@tsconfig/node18": "^2.0.1", + "@types/node": "^18.16.17", + "@vitejs/plugin-vue": "^4.2.3", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.3", + "@vue/tsconfig": "^0.4.0", + "autoprefixer": "^10.4.14", + "eslint": "^8.39.0", + "eslint-plugin-vue": "^9.11.0", + "npm-run-all": "^4.1.5", + "postcss": "^8.4.24", + "prettier": "^2.8.8", + "tailwindcss": "^3.3.2", + "typescript": "~5.0.4", + "vite": "^4.3.9", + "vue-tsc": "^1.6.5" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.8.1.tgz", + "integrity": "sha512-HpphvDcTdOx+9R3eUw9hZK9JA77jlaBF0kOt2McbyfvY0rX9pnMoO8rkkZc0GzSbzhIY4m5xJ0uHHgjfqHNmXQ==", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.6.0", + "@lezer/common": "^1.0.0" + }, + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.2.4.tgz", + "integrity": "sha512-42lmDqVH0ttfilLShReLXsDfASKLXzfyC36bzwcqzox9PlHulMcsUOfHXNo2X2aFMVNUoQ7j+d4q5bnfseYoOA==", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.2.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-css": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.2.0.tgz", + "integrity": "sha512-oyIdJM29AyRPM3+PPq1I2oIk8NpUfEN3kAM05XWDDs6o3gSneIKaVJifT2P+fqONLou2uIgXynFyMUDQvo/szA==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-html": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.5.tgz", + "integrity": "sha512-dUCSxkIw2G+chaUfw3Gfu5kkN83vJQN8gfQDp9iEHsIZluMJA0YJveT12zg/28BJx+uPsbQ6VimKCgx3oJrZxA==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.2.2", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.0" + } + }, + "node_modules/@codemirror/lang-javascript": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.1.9.tgz", + "integrity": "sha512-z3jdkcqOEBT2txn2a87A0jSy6Te3679wg/U8QzMeftFt+4KA6QooMwfdFzJiuC3L6fXKfTXZcDocoaxMYfGz0w==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz", + "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-xml": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.0.2.tgz", + "integrity": "sha512-JQYZjHL2LAfpiZI2/qZ/qzDuSqmGKMwyApYmEUUCTxLM4MWS7sATUEfIguZQr9Zjx/7gcdnewb039smF6nC2zw==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/xml": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.8.0.tgz", + "integrity": "sha512-r1paAyWOZkfY0RaYEZj3Kul+MiQTEbDvYqf8gPGaRvNneHXCmfSaAVFjwRUPlgxS8yflMxw2CTu6uCMp8R8A2g==", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.3.0.tgz", + "integrity": "sha512-tzxOVQNoDhhwFNfcTO2IB74wQoWarARcH6gv3YufPpiJ9yhcb7zD6JCkO5+FWARskqRFc8GFa6E+wUyOvADl5A==", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.0.tgz", + "integrity": "sha512-64/M40YeJPToKvGO6p3fijo2vwUEj4nACEAXElCaYQ50HrXSvRaK+NHEhSh73WFBGdvIdhrV+lL9PdJy2RfCYA==", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz", + "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==" + }, + "node_modules/@codemirror/theme-one-dark": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz", + "integrity": "sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@codemirror/view": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.14.0.tgz", + "integrity": "sha512-I263FPs4In42MNmrdwN2DfmYPFMVMXgT7o/mxdGp4jv5LPs8i0FOxzmxF5yeeQdYSTztb2ZhmPIu0ahveInVTg==", + "dependencies": { + "@codemirror/state": "^6.1.4", + "style-mod": "^4.0.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@lezer/common": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.3.tgz", + "integrity": "sha512-JH4wAXCgUOcCGNekQPLhVeUtIqjH0yPBs7vvUdSjyQama9618IOKFJwkv2kcqdhF0my8hQEgCTEJU0GIgnahvA==" + }, + "node_modules/@lezer/css": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.2.tgz", + "integrity": "sha512-5TKMAReXukfEmIiZprDlGfZVfOOCyEStFi1YLzxclm9H3G/HHI49/2wzlRT6bQw5r7PoZVEtjTItEkb/UuZQyg==", + "dependencies": { + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/highlight": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.6.tgz", + "integrity": "sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/html": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.4.tgz", + "integrity": "sha512-HdJYMVZcT4YsMo7lW3ipL4NoyS2T67kMPuSVS5TgLGqmaCjEU/D6xv7zsa1ktvTK5lwk7zzF1e3eU6gBZIPm5g==", + "dependencies": { + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/javascript": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.3.tgz", + "integrity": "sha512-k7Eo9z9B1supZ5cCD4ilQv/RZVN30eUQL+gGbr6ybrEY3avBAL5MDiYi2aa23Aj0A79ry4rJRvPAwE2TM8bd+A==", + "dependencies": { + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.0.tgz", + "integrity": "sha512-zbAuUY09RBzCoCA3lJ1+ypKw5WSNvLqGMtasdW6HvVOqZoCpPr8eWrsGnOVWGKGn8Rh21FnrKRVlJXrGAVUqRw==", + "dependencies": { + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.7.tgz", + "integrity": "sha512-ssHKb3p0MxhJXT2i7UBmgAY1BIM3Uq/D772Qutu3EVmxWIyNMU12nQ0rL3Fhu+MiFtiTzyTmd3xGwEf3ON5PSA==", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-jMDXrV953sDAUEMI25VNrI9dz94Ai96FfeglytFINhhwQ867HKlCE2jt3AwZTCT7M528WxdDWv/Ty8e9wizwmQ==", + "dependencies": { + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", + "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==", + "dev": true + }, + "node_modules/@tsconfig/node18": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-2.0.1.tgz", + "integrity": "sha512-UqdfvuJK0SArA2CxhKWwwAWfnVSXiYe63bVpMutc27vpngCntGUZQETO24pEJ46zU6XM+7SpqYoMgcO3bM11Ew==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.16.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", + "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", + "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/type-utils": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", + "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", + "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", + "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", + "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.7.9.tgz", + "integrity": "sha512-U6GMPDNqfGFqVRv4npUN2hEDW4/6EwL4YHd6qggapcvTzRrYAodTTbOTZs4PDzmw7NSZ2Cdrmd54SjzCCMXbZw==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.7.9" + } + }, + "node_modules/@volar/source-map": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.7.9.tgz", + "integrity": "sha512-bLizh8HIAzbq7OdxfyoG18dXJJF9FNXBcaiRj7eqg2Bq+DkgkYHabaY+xobgaXeKFOp93Tg1KfMM7qyR2KXHmQ==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.7.9.tgz", + "integrity": "sha512-cXGg7lgvdjpRjYfz52cXKo6ExBi8k3pWeBe6Gckf4+9zmTfEwEFfKWMj0H/IyUYO+S2rjyE9jytdsu1Imk+Azw==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.7.9" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + }, + "peerDependencies": { + "eslint": ">= 7.28.0", + "prettier": ">= 2.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", + "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "vue-eslint-parser": "^9.1.1" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.2.tgz", + "integrity": "sha512-QJujhmp89TRoWwzjn2sPMezG97+mNyaCTfznGHWNCE3LBsillZCBqAO7M7cxO8ee1V3r+qHjWytkoh3M4YkRJw==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.7.9", + "@volar/source-map": "1.7.9", + "@vue/compiler-dom": "^3.3.0", + "@vue/reactivity": "^3.3.0", + "@vue/shared": "^3.3.0", + "minimatch": "^9.0.0", + "muggle-string": "^0.3.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "dependencies": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "dependencies": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "dependencies": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + }, + "peerDependencies": { + "vue": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + }, + "node_modules/@vue/tsconfig": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.4.0.tgz", + "integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==", + "dev": true + }, + "node_modules/@vue/typescript": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.2.tgz", + "integrity": "sha512-5q2gpCBIfGlygfJupyjAQbc82r5J6qQuhupPeX3NlHvDK+mR6m5n4jVGknSacsp+7gtgs4RKYDq+tysoto+npA==", + "dev": true, + "dependencies": { + "@volar/typescript": "1.7.9", + "@vue/language-core": "1.8.2" + } + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.442", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz", + "integrity": "sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz", + "integrity": "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.3.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.3.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-mod": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz", + "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" + }, + "node_modules/sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", + "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/vue-codemirror": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vue-codemirror/-/vue-codemirror-6.1.1.tgz", + "integrity": "sha512-rTAYo44owd282yVxKtJtnOi7ERAcXTeviwoPXjIc6K/IQYUsoDkzPvw/JDFtSP6T7Cz/2g3EHaEyeyaQCKoDMg==", + "dependencies": { + "@codemirror/commands": "6.x", + "@codemirror/language": "6.x", + "@codemirror/state": "6.x", + "@codemirror/view": "6.x" + }, + "peerDependencies": { + "codemirror": "6.x", + "vue": "3.x" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz", + "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-router": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.2.tgz", + "integrity": "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.2.tgz", + "integrity": "sha512-iLS+z7jzxEAZRGLo4bYWfzZeBNVA71uXKmT2+5bQSsOJBtGLniR45sVpR+X7sa0m3J8iMEIU5+phLB7FnMLS0A==", + "dev": true, + "dependencies": { + "@vue/language-core": "1.8.2", + "@vue/typescript": "1.8.2", + "semver": "^7.3.8" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true + }, + "@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==" + }, + "@codemirror/autocomplete": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.8.1.tgz", + "integrity": "sha512-HpphvDcTdOx+9R3eUw9hZK9JA77jlaBF0kOt2McbyfvY0rX9pnMoO8rkkZc0GzSbzhIY4m5xJ0uHHgjfqHNmXQ==", + "requires": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.6.0", + "@lezer/common": "^1.0.0" + } + }, + "@codemirror/commands": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.2.4.tgz", + "integrity": "sha512-42lmDqVH0ttfilLShReLXsDfASKLXzfyC36bzwcqzox9PlHulMcsUOfHXNo2X2aFMVNUoQ7j+d4q5bnfseYoOA==", + "requires": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.2.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + } + }, + "@codemirror/lang-css": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.2.0.tgz", + "integrity": "sha512-oyIdJM29AyRPM3+PPq1I2oIk8NpUfEN3kAM05XWDDs6o3gSneIKaVJifT2P+fqONLou2uIgXynFyMUDQvo/szA==", + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.0.0" + } + }, + "@codemirror/lang-html": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.5.tgz", + "integrity": "sha512-dUCSxkIw2G+chaUfw3Gfu5kkN83vJQN8gfQDp9iEHsIZluMJA0YJveT12zg/28BJx+uPsbQ6VimKCgx3oJrZxA==", + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.2.2", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.0" + } + }, + "@codemirror/lang-javascript": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.1.9.tgz", + "integrity": "sha512-z3jdkcqOEBT2txn2a87A0jSy6Te3679wg/U8QzMeftFt+4KA6QooMwfdFzJiuC3L6fXKfTXZcDocoaxMYfGz0w==", + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "@codemirror/lang-json": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz", + "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==", + "requires": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "@codemirror/lang-xml": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.0.2.tgz", + "integrity": "sha512-JQYZjHL2LAfpiZI2/qZ/qzDuSqmGKMwyApYmEUUCTxLM4MWS7sATUEfIguZQr9Zjx/7gcdnewb039smF6nC2zw==", + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/xml": "^1.0.0" + } + }, + "@codemirror/language": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.8.0.tgz", + "integrity": "sha512-r1paAyWOZkfY0RaYEZj3Kul+MiQTEbDvYqf8gPGaRvNneHXCmfSaAVFjwRUPlgxS8yflMxw2CTu6uCMp8R8A2g==", + "requires": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "@codemirror/lint": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.3.0.tgz", + "integrity": "sha512-tzxOVQNoDhhwFNfcTO2IB74wQoWarARcH6gv3YufPpiJ9yhcb7zD6JCkO5+FWARskqRFc8GFa6E+wUyOvADl5A==", + "requires": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "@codemirror/search": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.0.tgz", + "integrity": "sha512-64/M40YeJPToKvGO6p3fijo2vwUEj4nACEAXElCaYQ50HrXSvRaK+NHEhSh73WFBGdvIdhrV+lL9PdJy2RfCYA==", + "requires": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "@codemirror/state": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz", + "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==" + }, + "@codemirror/theme-one-dark": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz", + "integrity": "sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==", + "requires": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "@codemirror/view": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.14.0.tgz", + "integrity": "sha512-I263FPs4In42MNmrdwN2DfmYPFMVMXgT7o/mxdGp4jv5LPs8i0FOxzmxF5yeeQdYSTztb2ZhmPIu0ahveInVTg==", + "requires": { + "@codemirror/state": "^6.1.4", + "style-mod": "^4.0.0", + "w3c-keyname": "^2.2.4" + } + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } + } + }, + "@lezer/common": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.3.tgz", + "integrity": "sha512-JH4wAXCgUOcCGNekQPLhVeUtIqjH0yPBs7vvUdSjyQama9618IOKFJwkv2kcqdhF0my8hQEgCTEJU0GIgnahvA==" + }, + "@lezer/css": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.2.tgz", + "integrity": "sha512-5TKMAReXukfEmIiZprDlGfZVfOOCyEStFi1YLzxclm9H3G/HHI49/2wzlRT6bQw5r7PoZVEtjTItEkb/UuZQyg==", + "requires": { + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "@lezer/highlight": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.6.tgz", + "integrity": "sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==", + "requires": { + "@lezer/common": "^1.0.0" + } + }, + "@lezer/html": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.4.tgz", + "integrity": "sha512-HdJYMVZcT4YsMo7lW3ipL4NoyS2T67kMPuSVS5TgLGqmaCjEU/D6xv7zsa1ktvTK5lwk7zzF1e3eU6gBZIPm5g==", + "requires": { + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "@lezer/javascript": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.3.tgz", + "integrity": "sha512-k7Eo9z9B1supZ5cCD4ilQv/RZVN30eUQL+gGbr6ybrEY3avBAL5MDiYi2aa23Aj0A79ry4rJRvPAwE2TM8bd+A==", + "requires": { + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "@lezer/json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.0.tgz", + "integrity": "sha512-zbAuUY09RBzCoCA3lJ1+ypKw5WSNvLqGMtasdW6HvVOqZoCpPr8eWrsGnOVWGKGn8Rh21FnrKRVlJXrGAVUqRw==", + "requires": { + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "@lezer/lr": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.7.tgz", + "integrity": "sha512-ssHKb3p0MxhJXT2i7UBmgAY1BIM3Uq/D772Qutu3EVmxWIyNMU12nQ0rL3Fhu+MiFtiTzyTmd3xGwEf3ON5PSA==", + "requires": { + "@lezer/common": "^1.0.0" + } + }, + "@lezer/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-jMDXrV953sDAUEMI25VNrI9dz94Ai96FfeglytFINhhwQ867HKlCE2jt3AwZTCT7M528WxdDWv/Ty8e9wizwmQ==", + "requires": { + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rushstack/eslint-patch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", + "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==", + "dev": true + }, + "@tsconfig/node18": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-2.0.1.tgz", + "integrity": "sha512-UqdfvuJK0SArA2CxhKWwwAWfnVSXiYe63bVpMutc27vpngCntGUZQETO24pEJ46zU6XM+7SpqYoMgcO3bM11Ew==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "@types/node": { + "version": "18.16.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", + "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==", + "dev": true + }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", + "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/type-utils": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", + "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", + "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", + "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vitejs/plugin-vue": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", + "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", + "dev": true, + "requires": {} + }, + "@volar/language-core": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.7.9.tgz", + "integrity": "sha512-U6GMPDNqfGFqVRv4npUN2hEDW4/6EwL4YHd6qggapcvTzRrYAodTTbOTZs4PDzmw7NSZ2Cdrmd54SjzCCMXbZw==", + "dev": true, + "requires": { + "@volar/source-map": "1.7.9" + } + }, + "@volar/source-map": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.7.9.tgz", + "integrity": "sha512-bLizh8HIAzbq7OdxfyoG18dXJJF9FNXBcaiRj7eqg2Bq+DkgkYHabaY+xobgaXeKFOp93Tg1KfMM7qyR2KXHmQ==", + "dev": true, + "requires": { + "muggle-string": "^0.3.1" + } + }, + "@volar/typescript": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.7.9.tgz", + "integrity": "sha512-cXGg7lgvdjpRjYfz52cXKo6ExBi8k3pWeBe6Gckf4+9zmTfEwEFfKWMj0H/IyUYO+S2rjyE9jytdsu1Imk+Azw==", + "dev": true, + "requires": { + "@volar/language-core": "1.7.9" + } + }, + "@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "requires": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "requires": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "requires": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "requires": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + }, + "@vue/eslint-config-prettier": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", + "dev": true, + "requires": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + } + }, + "@vue/eslint-config-typescript": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", + "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "vue-eslint-parser": "^9.1.1" + } + }, + "@vue/language-core": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.2.tgz", + "integrity": "sha512-QJujhmp89TRoWwzjn2sPMezG97+mNyaCTfznGHWNCE3LBsillZCBqAO7M7cxO8ee1V3r+qHjWytkoh3M4YkRJw==", + "dev": true, + "requires": { + "@volar/language-core": "1.7.9", + "@volar/source-map": "1.7.9", + "@vue/compiler-dom": "^3.3.0", + "@vue/reactivity": "^3.3.0", + "@vue/shared": "^3.3.0", + "minimatch": "^9.0.0", + "muggle-string": "^0.3.1", + "vue-template-compiler": "^2.7.14" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "requires": { + "@vue/shared": "3.3.4" + } + }, + "@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "requires": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "requires": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "requires": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "requires": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "@vue/shared": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + }, + "@vue/tsconfig": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.4.0.tgz", + "integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==", + "dev": true + }, + "@vue/typescript": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.2.tgz", + "integrity": "sha512-5q2gpCBIfGlygfJupyjAQbc82r5J6qQuhupPeX3NlHvDK+mR6m5n4jVGknSacsp+7gtgs4RKYDq+tysoto+npA==", + "dev": true, + "requires": { + "@volar/typescript": "1.7.9", + "@vue/language-core": "1.8.2" + } + }, + "acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "electron-to-chromium": { + "version": "1.4.442", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz", + "integrity": "sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-vue": { + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz", + "integrity": "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.3.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.3.0", + "xml-name-validator": "^4.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, + "postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + } + }, + "postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.11" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + } + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "style-mod": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz", + "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" + }, + "sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tailwindcss": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", + "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", + "dev": true, + "requires": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "vue": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "requires": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "vue-codemirror": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vue-codemirror/-/vue-codemirror-6.1.1.tgz", + "integrity": "sha512-rTAYo44owd282yVxKtJtnOi7ERAcXTeviwoPXjIc6K/IQYUsoDkzPvw/JDFtSP6T7Cz/2g3EHaEyeyaQCKoDMg==", + "requires": { + "@codemirror/commands": "6.x", + "@codemirror/language": "6.x", + "@codemirror/state": "6.x", + "@codemirror/view": "6.x" + } + }, + "vue-eslint-parser": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz", + "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "dependencies": { + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "vue-router": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.2.tgz", + "integrity": "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==", + "requires": { + "@vue/devtools-api": "^6.5.0" + } + }, + "vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "vue-tsc": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.2.tgz", + "integrity": "sha512-iLS+z7jzxEAZRGLo4bYWfzZeBNVA71uXKmT2+5bQSsOJBtGLniR45sVpR+X7sa0m3J8iMEIU5+phLB7FnMLS0A==", + "dev": true, + "requires": { + "@vue/language-core": "1.8.2", + "@vue/typescript": "1.8.2", + "semver": "^7.3.8" + } + }, + "w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/Frontend/package.json b/Frontend/package.json new file mode 100644 index 0000000..a6ecef8 --- /dev/null +++ b/Frontend/package.json @@ -0,0 +1,43 @@ +{ + "name": "new-frontend", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite --host", + "build": "run-p type-check build-only", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "format": "prettier --write src/" + }, + "dependencies": { + "@codemirror/lang-html": "^6.4.5", + "@codemirror/lang-json": "^6.0.1", + "@codemirror/lang-xml": "^6.0.2", + "@codemirror/theme-one-dark": "^6.1.2", + "codemirror": "^6.0.1", + "vue": "^3.3.4", + "vue-codemirror": "^6.1.1", + "vue-router": "^4.2.2" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.2.0", + "@tsconfig/node18": "^2.0.1", + "@types/node": "^18.16.17", + "@vitejs/plugin-vue": "^4.2.3", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.3", + "@vue/tsconfig": "^0.4.0", + "autoprefixer": "^10.4.14", + "eslint": "^8.39.0", + "eslint-plugin-vue": "^9.11.0", + "npm-run-all": "^4.1.5", + "postcss": "^8.4.24", + "prettier": "^2.8.8", + "tailwindcss": "^3.3.2", + "typescript": "~5.0.4", + "vite": "^4.3.9", + "vue-tsc": "^1.6.5" + } +} diff --git a/Frontend/postcss.config.js b/Frontend/postcss.config.js new file mode 100644 index 0000000..586f6d9 --- /dev/null +++ b/Frontend/postcss.config.js @@ -0,0 +1,7 @@ +/* eslint-disable no-undef */ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/Frontend/src/App.vue b/Frontend/src/App.vue new file mode 100644 index 0000000..f61c09b --- /dev/null +++ b/Frontend/src/App.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/Frontend/assets/images/favicon.ico b/Frontend/src/assets/favicon.ico similarity index 100% rename from Frontend/assets/images/favicon.ico rename to Frontend/src/assets/favicon.ico diff --git a/Frontend/assets/images/logo_biale.svg b/Frontend/src/assets/logo_biale.svg similarity index 100% rename from Frontend/assets/images/logo_biale.svg rename to Frontend/src/assets/logo_biale.svg diff --git a/Frontend/assets/images/logo_czarne.svg b/Frontend/src/assets/logo_czarne.svg similarity index 100% rename from Frontend/assets/images/logo_czarne.svg rename to Frontend/src/assets/logo_czarne.svg diff --git a/Frontend/src/assets/sampleHtml.html b/Frontend/src/assets/sampleHtml.html new file mode 100644 index 0000000..676a15d --- /dev/null +++ b/Frontend/src/assets/sampleHtml.html @@ -0,0 +1,14 @@ + + + + + + + Example Page + + +

    Hello World!

    +

    That's paragraph

    +
    + + \ No newline at end of file diff --git a/Frontend/src/assets/sampleXQuery.xquery b/Frontend/src/assets/sampleXQuery.xquery new file mode 100644 index 0000000..4c518d5 --- /dev/null +++ b/Frontend/src/assets/sampleXQuery.xquery @@ -0,0 +1,5 @@ +declare default element namespace "http://www.release11.com/schemas/Sample.xsd"; +declare namespace u = "http://www.release11.com/schemas/Sample.xsd"; + +for $x in /u:root/u:UserList[@Id = 'a']/u:User +return string($x/u:Name) \ No newline at end of file diff --git a/Frontend/src/assets/sampleXml.xml b/Frontend/src/assets/sampleXml.xml new file mode 100644 index 0000000..04a2632 --- /dev/null +++ b/Frontend/src/assets/sampleXml.xml @@ -0,0 +1,62 @@ + + + + + John + Wick + 2023-10-10 + + + Martha + Whane + 1970-06-13 + + + Bruce + Lee + 1985-01-24 + + + John + Rambo + 2024-06-19 + + FirstList + + + + Jack + Wicker + 2023-10-10 + + SecondList + + + + New + Folder + 2023-11-10 + + + Newer + Folder + 2023-11-11 + + + Newest + Folder + 2023-11-12 + + + New + Folder2 + 2023-11-13 + + + New + Folder-Final + 2023-11-14 + + ThirdList + + \ No newline at end of file diff --git a/Frontend/src/assets/sampleXsd.xml b/Frontend/src/assets/sampleXsd.xml new file mode 100644 index 0000000..43f7cc6 --- /dev/null +++ b/Frontend/src/assets/sampleXsd.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Frontend/src/assets/sampleXslt.xml b/Frontend/src/assets/sampleXslt.xml new file mode 100644 index 0000000..37cb8ae --- /dev/null +++ b/Frontend/src/assets/sampleXslt.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Frontend/src/assets/tooltips/xpath/xpath1.json b/Frontend/src/assets/tooltips/xpath/xpath1.json new file mode 100644 index 0000000..6b5bb1e --- /dev/null +++ b/Frontend/src/assets/tooltips/xpath/xpath1.json @@ -0,0 +1,537 @@ +[ + { + "entries": [ + { + "arguments": [ + { + "type": "object", + "description": "The object to convert to a boolean" + } + ], + "description": "The boolean function converts its argument to a boolean", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Boolean-Functions", + "examples": [ + { + "command": "boolean('Release11')", + "output": "true" + }, + { + "command": "boolean('')", + "output": "false" + }, + { + "command": "boolean(2334)", + "output": "true" + } + ], + "name": "boolean()", + "output": "boolean" + }, + { + "arguments": [], + "description": "The true function returns false.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Boolean-Functions", + "examples": [ + { + "output": "false", + "command": "false()" + } + ], + "name": "false()", + "output": "boolean" + }, + { + "arguments": [], + "description": "The not function returns true if its argument is false, and false otherwise.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Boolean-Functions", + "examples": [ + { + "output": "false", + "command": "not('text')" + }, + { + "command": "not('')", + "output": "true" + } + ], + "name": "not()", + "output": "boolean" + }, + { + "arguments": [], + "description": "The true function returns true.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Boolean-Functions", + "examples": [ + { + "output": "true", + "command": "true()" + } + ], + "name": "true()", + "output": "boolean" + } + ], + "name": "Boolean" + }, + { + "entries": [ + { + "arguments": [ + { + "type": "node-set", + "description": "Node-set to count nodes in" + } + ], + "description": "Returns the number of nodes in the node-set", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Node-Set-Functions", + "examples": [ + { + "output": "10", + "command": "count(/u:root/u:UserList/u:User)" + }, + { + "output": "1", + "command": "count(/u:root/u:UserList[@Id = 'b']/u:User)" + } + ], + "name": "count()", + "output": "number" + }, + { + "arguments": [], + "description": "Returns the element specified by it's unique id, requires DTD", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Node-Set-Functions", + "examples": [], + "name": "id()", + "output": "node-set" + }, + { + "arguments": [ + { + "description": "Language that will be looked for in context node", + "type": "string" + } + ], + "description": "The lang function returns true or false depending on whether the language of the context node as specified by xml:lang attributes is the same as or is a sublanguage of the language specified by the argument string.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Boolean-Functions", + "examples": [], + "name": "lang()", + "output": "boolean" + }, + { + "arguments": [], + "description": "The position function returns a number equal to the context position from the expression evaluation context.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Node-Set-Functions", + "examples": [], + "name": "last()", + "output": "number" + }, + { + "arguments": [ + { + "description": "Extract first node and return its local name", + "type": "node-set" + } + ], + "description": "Returns the number of nodes in the node-set", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Node-Set-Functions", + "examples": [ + { + "command": "local-name(/u:root)", + "output": "root" + }, + { + "command": "local-name(/u:root/u:UserList)", + "output": "UserList" + } + ], + "name": "local-name()", + "output": "string" + }, + { + "arguments": [ + { + "description": "Extract first node and return QName", + "type": "node-set? (Optional)" + } + ], + "description": "Returns the number of nodes in the node-set", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Node-Set-Functions", + "examples": [ + { + "command": "name(/u:root)", + "output": "u:root" + }, + { + "command": "name(/u:root/u:UserList)", + "output": "u:UserList" + } + ], + "name": "name()", + "output": "string" + }, + { + "arguments": [ + { + "description": "Extract first node and return the namespace URI", + "type": "node-set" + } + ], + "description": "Returns the namespace-uri for the first node in the node-set", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Node-Set-Functions", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri(/u:root)" + } + ], + "name": "namespace-uri()", + "output": "string" + }, + { + "arguments": [], + "description": "Returns the position of the current context node.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Node-Set-Functions", + "examples": [ + { + "output": "3", + "command": "position()" + } + ], + "name": "position()", + "output": "number" + } + ], + "name": "Node-Set" + }, + { + "entries": [ + { + "arguments": [ + { + "type": "number", + "description": "Number to round" + } + ], + "description": "The floor function returns the largest (closest to positive infinity) number that is not greater than the argument and that is an integer.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Number-Functions", + "examples": [ + { + "output": "3", + "command": "floor(3.1)" + }, + { + "output": "3", + "command": "floor(3.9)" + }, + { + "output": "3", + "command": "floor(3.5)" + } + ], + "name": "floor()", + "output": "number" + }, + { + "arguments": [ + { + "type": "object", + "description": "The object to convert to a number" + } + ], + "description": "The number function converts its argument to a number", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Number-Functions", + "examples": [ + { + "output": "10", + "command": "number(10)" + }, + { + "output": "NaN", + "command": "number('')" + } + ], + "name": "number()", + "output": "number" + }, + { + "arguments": [ + { + "type": "number", + "description": "Number to round" + } + ], + "description": "The round function returns the number that is closest to the argument and that is an integer. If there are two such numbers, then the one that is closest to positive infinity is returned. If the argument is NaN, then NaN is returned. If the argument is positive infinity, then positive infinity is returned. If the argument is negative infinity, then negative infinity is returned. If the argument is positive zero, then positive zero is returned. If the argument is negative zero, then negative zero is returned. If the argument is less than zero, but greater than or equal to -0.5, then negative zero is returned.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Number-Functions", + "examples": [ + { + "output": "3", + "command": "round(3.1)" + }, + { + "output": "4", + "command": "round(3.9)" + }, + { + "output": "4", + "command": "round(3.5)" + } + ], + "name": "round()", + "output": "number" + }, + { + "arguments": [ + { + "description": "Node set to sum", + "type": "node-set" + } + ], + "description": "The sum function returns the sum, for each node in the argument node-set, of the result of converting the string-values of the node to a number.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-Number-Functions", + "examples": [ + { + "output": "78", + "command": "sum(/someNode/value)" + } + ], + "name": "sum()", + "output": "number" + } + ], + "name": "Number" + }, + { + "entries": [ + { + "arguments": [ + { + "type": "string* (One or More)", + "description": "Strings to concatenate" + } + ], + "description": "The concat function returns the concatenation of its arguments.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "command": "concat('Release', 11)", + "output": "Release11" + } + ], + "name": "concat()", + "output": "string" + }, + { + "arguments": [ + { + "type": "string", + "description": "String to test" + }, + { + "type": "string", + "description": "String that first string has to contain" + } + ], + "description": "The contains function returns true if the first argument string contains the second argument string, and otherwise returns false.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "command": "contains('Release11', 'eas')", + "output": "true" + } + ], + "name": "contains()", + "output": "boolean" + }, + { + "arguments": [ + { + "description": "String to normalize", + "type": "string? (Optional)" + } + ], + "description": "The normalize-space function returns the argument string with whitespace normalized by stripping leading and trailing whitespace and replacing sequences of whitespace characters by a single space.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "output": "abc def", + "command": "normalize-space(' abc def ')" + } + ], + "name": "normalize-space(()", + "output": "string" + }, + { + "arguments": [ + { + "type": "string", + "description": "String to test" + }, + { + "type": "string", + "description": "String that first string has to start from" + } + ], + "description": "Returns true if the first argument string starts with the second argument string, and otherwise returns false.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "command": "starts-with('Release11', 'Rel'))", + "output": "true" + }, + { + "output": "false", + "command": "starts-with('Release11', 'ease'))" + } + ], + "name": "starts-with()", + "output": "boolean" + }, + { + "arguments": [ + { + "type": "object", + "description": "The object to convert to a string" + } + ], + "description": "The string function converts an object to a string", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "output": "10", + "command": "string(10)" + }, + { + "output": "Release11", + "command": "string('Release11')" + } + ], + "name": "string()", + "output": "string" + }, + { + "arguments": [ + { + "description": "String to test", + "type": "string? (Optional)" + } + ], + "description": "The string-length returns the number of characters in the string.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "output": "6", + "command": "string-length('abcdef')" + } + ], + "name": "string-length()", + "output": "number" + }, + { + "arguments": [ + { + "type": "string", + "description": "String to split" + }, + { + "type": "number", + "description": "Starting index" + }, + { + "description": "Length of target substring", + "type": "number? (Optional)" + } + ], + "description": "The substring function returns the substring of the first argument starting at the position specified in the second argument with length specified in the third argument.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "output": "2345", + "command": "substring('12345',2)" + }, + { + "output": "234", + "command": "substring('12345',2,3)" + } + ], + "name": "substring()", + "output": "string" + }, + { + "arguments": [ + { + "type": "string", + "description": "String to split" + }, + { + "type": "string", + "description": "String that splits first string" + } + ], + "description": "The substring-after function returns the substring of the first argument string that follows the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "output": "ase11", + "command": "substring-after('Release11', 'le')" + } + ], + "name": "substring-after()", + "output": "string" + }, + { + "arguments": [ + { + "type": "string", + "description": "String to split" + }, + { + "type": "string", + "description": "String that splits first string" + } + ], + "description": "The substring-before function returns the substring of the first argument string that precedes the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "output": "Release", + "command": "substring-before('Release11', '11')" + } + ], + "name": "substring-before()", + "output": "string" + }, + { + "arguments": [ + { + "type": "string", + "description": "String to process" + }, + { + "description": "Characters to remove", + "type": "string" + }, + { + "type": "string", + "description": "String to insert characters from second argument" + } + ], + "description": "The translate function returns the first argument string with occurrences of characters in the second argument string replaced by the character at the corresponding position in the third argument string. If there is a character in the second argument string with no character at a corresponding position in the third argument string (because the second argument string is longer than the third argument string), then occurrences of that character in the first argument string are removed.", + "documentationReferenceURL": "https://www.w3.org/TR/1999/REC-xpath-19991116/#section-String-Functions", + "examples": [ + { + "output": "BAr", + "command": "translate('bar','abc','ABC')" + }, + { + "output": "AAA", + "command": "translate('--aaa--','abc-','ABC')" + } + ], + "name": "translate()", + "output": "string" + } + ], + "name": "String" + } +] \ No newline at end of file diff --git a/Frontend/src/assets/tooltips/xpath/xpath2.json b/Frontend/src/assets/tooltips/xpath/xpath2.json new file mode 100644 index 0000000..1cd384f --- /dev/null +++ b/Frontend/src/assets/tooltips/xpath/xpath2.json @@ -0,0 +1,2522 @@ +[ + { + "entries": [ + { + "arguments": [ + { + "description": "$arg", + "type": "item()*" + } + ], + "description": "Computes the effective boolean value of the sequence $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-boolean", + "examples": [ + { + "command": "boolean(1)", + "output": "true" + }, + { + "command": "boolean(())", + "output": "false" + }, + { + "command": "boolean(0)", + "output": "false" + } + ], + "name": "boolean()", + "output": "xs:boolean?" + }, + { + "arguments": [], + "description": "Returns the xs:boolean value false. Equivalent to xs:boolean('0').", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-false", + "examples": [ + { + "output": "false", + "command": "false()" + } + ], + "name": "false()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "item()" + } + ], + "description": "$arg is first reduced to an effective boolean value by applying the fn:boolean() function. Returns true if the effective boolean value is false, and false if the effective boolean value is true.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-not", + "examples": [ + { + "output": "false", + "command": "not(true())" + }, + { + "command": "not(false())", + "output": "true" + } + ], + "name": "not()", + "output": "xs:boolean" + }, + { + "arguments": [], + "description": "Returns the xs:boolean value true. Equivalent to xs:boolean('1').", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-true", + "examples": [ + { + "output": "true", + "command": "true()" + } + ], + "name": "true()", + "output": "xs:boolean" + } + ], + "name": "Boolean" + }, + { + "entries": [ + { + "arguments": [ + { + "description": "$arg", + "type": "xs:string?" + } + ], + "description": "This function takes an xs:string as argument and returns a sequence of nodes obtained by interpreting $arg as an xs:anyURI and resolving it", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-collection", + "examples": [ + { + "output": "()", + "command": "collection('')" + } + ], + "name": "collection()", + "output": "node()*" + }, + { + "arguments": [ + { + "type": "item*", + "description": "Items to convert." + } + ], + "description": "Takes a sequence of items and returns a sequence of atomic values.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-data", + "examples": [ + { + "output": "('John', 'Wick', '2023-10-10')", + "command": "data(/u:root/u:UserList[1]/u:User[1])" + } + ], + "name": "data()", + "output": "xs:anyAtomicType*" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$parameter2", + "type": "item*" + }, + { + "description": "$parameter1", + "type": "item*" + } + ], + "description": "This function assesses whether two sequences are deep-equal to each other. To be deep-equal, they must contain items that are pairwise deep-equal; and for two items to be deep-equal, they must either be atomic values that compare equal, or nodes of the same kind, with the same name, whose children are deep-equal.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-deep-equal", + "examples": [ + { + "command": "deep-equal(/u:root/u:UserList[1], /u:root/u:UserList[1])", + "output": "true" + }, + { + "command": "deep-equal(/u:root/u:UserList[1], /u:root/u:UserList[2])", + "output": "false" + } + ], + "name": "deep-equal()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$arg", + "type": "xs:anyAtomicType*" + } + ], + "description": "Returns the sequence that results from removing from $arg all but one of a set of values that are eq to one other. Values of type xs:untypedAtomic are compared as if they were of type xs:string.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-distinct-values", + "examples": [ + { + "output": "(1, 3, 2.0)", + "command": "distinct-values((1, 2.0, 3, 2))" + } + ], + "name": "distinct-values()", + "output": "xs:anyAtomicType*" + }, + { + "arguments": [ + { + "description": "$uri", + "type": "xs:string" + } + ], + "description": "Retrieves a document using a URI supplied as an xs:string, and returns the corresponding document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-doc", + "examples": [ + { + "output": "", + "command": "doc('test.xml')" + } + ], + "name": "doc()", + "output": "document-node()?" + }, + { + "arguments": [ + { + "description": "$uri", + "type": "xs:string" + } + ], + "description": "The function returns true if and only if the function call fn:doc($uri) would return a document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-doc-available", + "examples": [ + { + "command": "doc('test.xml')", + "output": "true " + } + ], + "name": "doc-available()", + "output": "item()*" + }, + { + "arguments": [ + { + "description": "$length", + "type": "xs:double?" + }, + { + "description": "$startingLoc", + "type": "xs:double?" + }, + { + "description": "$arg", + "type": "xs:string?" + } + ], + "description": "Returns the sequence of element nodes that have an ID value matching the value of one or more of the IDREF values supplied in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-subsequence", + "examples": [ + { + "output": "('b', 'c', 'd')", + "command": "subsequence( ('a', 'b', 'c', 'd', 'e'), 2, 3)" + }, + { + "output": "('d', 'e')", + "command": "subsequence( ('a', 'b', 'c', 'd', 'e') , 4)" + } + ], + "name": "element-with-id()", + "output": "node()*" + }, + { + "arguments": [ + { + "description": "arg", + "type": "item*" + } + ], + "description": "If the value of $arg is the empty sequence, the function returns true; otherwise, the function returns false.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-empty", + "examples": [ + { + "command": "empty(())", + "output": "true" + }, + { + "command": "empty(('hello', 'world'))", + "output": "false" + } + ], + "name": "empty()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "item*" + } + ], + "description": "Returns $arg if it contains exactly one item. Otherwise, raises an error [err:FORG0005].", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-exactly-one", + "examples": [ + { + "output": "A sequence of more than one item is not allowed as the first argument of fn:exactly-one() ('a', 'b')", + "command": "exactly-one(('a', 'b'))" + }, + { + "output": "('a')", + "command": "exactly-one(('a'))" + } + ], + "name": "exactly-one()", + "output": "item()?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "item*" + } + ], + "description": "If the value of $arg is not the empty sequence, the function returns true; otherwise, the function returns false.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-exists", + "examples": [ + { + "command": "exists(remove(('hello'), 1))", + "output": "false" + } + ], + "name": "exists()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$startingLoc", + "type": "node()*" + }, + { + "description": "$arg", + "type": "xs:string*" + } + ], + "description": "Returns the sequence of element nodes that have an ID value matching the value of one or more of the IDREF values supplied in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-id", + "examples": [], + "name": "id()", + "output": "element()*" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$node", + "type": "node()*" + }, + { + "description": "$arg", + "type": "xs:string*" + } + ], + "description": "Returns the sequence of element or attribute nodes with an IDREF value matching the value of one or more of the ID values supplied in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-idref", + "examples": [], + "name": "idref()", + "output": "node()*" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$srchParam", + "type": "xs:anyAtomicType" + }, + { + "description": "$seqParam", + "type": "xs:anyAtomicType" + } + ], + "description": " Returns a sequence of positive integers giving the positions within the sequence $seqParam of items that are equal to $srchParam.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-index-of", + "examples": [ + { + "output": "(1, 4)", + "command": "index-of(('a', 'sport', 'and', 'a', 'pastime'), 'a')" + }, + { + "output": "(2, 5)", + "command": "index-of((10, 20, 30, 30, 20, 10), 20)" + }, + { + "output": "()", + "command": "index-of((10, 20, 30, 40), 35)" + } + ], + "name": "index-of()", + "output": "xs:integer*" + }, + { + "arguments": [ + { + "description": "$$inserts", + "type": "item()*" + }, + { + "description": "$position", + "type": "xs:integer" + }, + { + "description": "$target", + "type": "item*" + } + ], + "description": "Returns a new sequence constructed from the value of $target with the value of $inserts inserted at the position specified by the value of $position.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-insert-before", + "examples": [ + { + "output": "('a', 'z', 'b', 'c')", + "command": "insert-before($x, 2, 'z')" + }, + { + "output": "('z', 'a', 'b', 'c')", + "command": "insert-before($x, 1, 'z')" + }, + { + "output": "('z', 'a', 'b', 'c')", + "command": "insert-before($x, 0, 'z')" + } + ], + "name": "insert-before()", + "output": "item()*" + }, + { + "arguments": [], + "description": "Returns the sequence of element nodes that have an ID value matching the value of one or more of the IDREF values supplied in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-last", + "examples": [ + { + "output": "(3, 3, 3)", + "command": "/u:root/u:UserList/last()" + } + ], + "name": "last()", + "output": "xs:integer" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "item*" + } + ], + "description": "Returns $arg if it contains one or more items. Otherwise, raises an error [err:FORG0004].", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-one-or-more", + "examples": [ + { + "output": "('a', 'b')", + "command": "one-or-more(('a', 'b'))" + }, + { + "output": "('a')", + "command": "one-or-more(('a'))" + } + ], + "name": "one-or-more()", + "output": "item()?" + }, + { + "arguments": [], + "description": "Returns the context position from the dynamic context. (See Section C.2 Dynamic Context ComponentsXP.) If the context item is undefined, an error is raised: [err:XPDY0002]XP.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-position", + "examples": [ + { + "command": "/u:root/u:UserList[@Id = 'b']/position()", + "output": "1" + } + ], + "name": "position()", + "output": "xs:integer" + }, + { + "arguments": [ + { + "description": "$position", + "type": "xs:integer" + }, + { + "description": "$target", + "type": "item*" + } + ], + "description": "Returns a new sequence constructed from the value of $target with the item at the position specified by the value of $position removed.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-remove", + "examples": [ + { + "output": "('a', 'b', 'c')", + "command": "remove($x, 6)" + }, + { + "output": "('b', 'c')", + "command": "remove($x, 1)" + }, + { + "output": "('a', 'b', 'c')", + "command": "remove($x, 0)" + } + ], + "name": "remove()", + "output": "item()*" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "item*" + } + ], + "description": "Reverses the order of items in a sequence. If $arg is the empty sequence, the empty sequence is returned.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-reverse", + "examples": [ + { + "output": "('')", + "command": "reverse( ('') )" + }, + { + "output": "('hello')", + "command": "reverse( ('hello') )" + }, + { + "output": "('c', 'b', 'a')", + "command": "reverse( ('a', 'b', 'c') )" + } + ], + "name": "reverse()", + "output": "item()*" + }, + { + "arguments": [ + { + "description": "$length", + "type": "xs:double?" + }, + { + "description": "$startingLoc", + "type": "xs:double?" + }, + { + "description": "$sourceSeq", + "type": "item*" + } + ], + "description": "Returns the contiguous sequence of items in the value of $sourceSeq beginning at the position indicated by the value of $startingLoc and continuing for the number of items indicated by the value of $length.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-subsequence", + "examples": [ + { + "output": "('b', 'c', 'd')", + "command": "subsequence( ('a', 'b', 'c', 'd', 'e'), 2, 3)" + }, + { + "output": "('d', 'e')", + "command": "subsequence( ('a', 'b', 'c', 'd', 'e') , 4)" + } + ], + "name": "subsequence()", + "output": "item()*" + }, + { + "arguments": [ + { + "description": "$sourceSeq", + "type": "item*" + } + ], + "description": "Returns the items of $sourceSeq in an implementation dependent order.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-unordered", + "examples": [], + "name": "unordered()", + "output": "item()*" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "item*" + } + ], + "description": "Returns $arg if it contains zero or one items. Otherwise, raises an error [err:FORG0003].", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-zero-or-one", + "examples": [ + { + "output": "A sequence of more than one item is not allowed as the first argument of fn:zero-or-one() ('a', 'b')", + "command": "zero-or-one(('a', 'b'))" + }, + { + "output": "('a')", + "command": "zero-or-one(('a'))" + } + ], + "name": "zero-or-one()", + "output": "item()*" + } + ], + "name": "Collections" + }, + { + "entries": [ + { + "arguments": [ + { + "description": "$timezone", + "type": "xs:dayTimeDuration?" + }, + { + "description": "$arg", + "type": "xs:date?" + } + ], + "description": "Adjusts an xs:date value to a specific timezone, or to no timezone at all. If $timezone is the empty sequence, returns an xs:date without a timezone. Otherwise, returns an xs:date with a timezone. For purposes of timezone adjustment, an xs:date is treated as an xs:dateTime with time 00:00:00.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-adjust-date-to-timezone", + "examples": [ + { + "output": "2002-03-07-10:00", + "command": "adjust-date-to-timezone(xs:date('2002-03-07'), xs:dayTimeDuration('-PT10H'))" + }, + { + "output": "2002-03-07-05:00", + "command": "adjust-date-to-timezone(xs:date('2002-03-07'))" + } + ], + "name": "adjust-date-to-timezone()", + "output": "xs:date?" + }, + { + "arguments": [ + { + "description": "$timezone", + "type": "xs:dayTimeDuration?" + }, + { + "description": "$arg", + "type": "xs:time?" + } + ], + "description": "Adjusts an xs:time value to a specific timezone, or to no timezone at all. If $timezone is the empty sequence, returns an xs:time without a timezone. Otherwise, returns an xs:time with a timezone.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-adjust-time-to-timezone", + "examples": [ + { + "output": "10:00:00-10:00", + "command": "adjust-time-to-timezone(xs:time('10:00:00'), xs:dayTimeDuration('-PT10H'))" + }, + { + "output": "10:00:00-05:00", + "command": "adjust-time-to-timezone(xs:time('10:00:00'))" + } + ], + "name": "adjust-time-to-timezone()", + "output": "xs:time?" + }, + { + "arguments": [ + { + "description": "$timezone", + "type": "xs:dayTimeDuration?" + }, + { + "description": "$arg", + "type": "xs:time?" + } + ], + "description": "Adjusts an xs:time value to a specific timezone, or to no timezone at all. If $timezone is the empty sequence, returns an xs:time without a timezone. Otherwise, returns an xs:time with a timezone.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-adjust-time-to-timezone", + "examples": [ + { + "output": "2002-03-07-10:00", + "command": "adjust-time-to-timezone(xs:time('10:00:00'), xs:dayTimeDuration('-PT10H'))" + }, + { + "output": "2002-03-07-05:00", + "command": "adjust-time-to-timezone(xs:time('10:00:00'))" + } + ], + "name": "adjust-time-to-timezone()", + "output": "xs:time?" + }, + { + "arguments": [], + "description": "Returns the current date (with timezone) from the dynamic context.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-current-date", + "examples": [ + { + "output": "", + "command": "current-date()" + } + ], + "name": "current-date()", + "output": "xs:date" + }, + { + "arguments": [], + "description": "Returns the current dateTime (with timezone) from the dynamic context.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-current-dateTime", + "examples": [ + { + "output": "", + "command": "current-dateTime()" + } + ], + "name": "current-dateTime()", + "output": "xs:dateTime" + }, + { + "arguments": [], + "description": "Returns the current time (with timezone) from the dynamic context.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-current-time", + "examples": [ + { + "output": "", + "command": "current-time()" + } + ], + "name": "current-time()", + "output": "xs:time" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:date?" + } + ], + "description": "Returns an xs:integer between 1 and 31, both inclusive, representing the day component in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-day-from-date", + "examples": [ + { + "output": "01", + "command": "day-from-date(xs:date('2000-01-01+05:00'))" + }, + { + "output": "31", + "command": "day-from-date(xs:date('1999-05-31'))" + } + ], + "name": "day-from-date()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:dateTime?" + } + ], + "description": "Returns an xs:integer between 1 and 31, both inclusive, representing the day component in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-day-from-dateTime", + "examples": [ + { + "output": "1", + "command": "day-from-dateTime(xs:dateTime('1999-12-31T24:00:00'))" + }, + { + "output": "31", + "command": "day-from-dateTime(xs:dateTime('1999-12-31T19:20:00'))" + }, + { + "output": "31", + "command": "day-from-dateTime(xs:dateTime('1999-05-31T13:20:00-05:00'))" + } + ], + "name": "day-from-dateTime()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:duration?" + } + ], + "description": "Returns an xs:integer representing the days component in the value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-days-from-duration", + "examples": [ + { + "output": "0", + "command": "days-from-duration(xs:yearMonthDuration('P3Y5M')" + }, + { + "output": "5", + "command": "days-from-duration(xs:yearMonthDuration('P3DT55H'))" + }, + { + "output": "3", + "command": "days-from-duration(xs:yearMonthDuration('P3DT10H')" + } + ], + "name": "days-from-duration()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:dateTime?" + } + ], + "description": "Returns an xs:integer between 0 and 23, both inclusive, representing the hours component in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-hours-from-dateTime", + "examples": [ + { + "output": "0", + "command": "hours-from-dateTime(xs:dateTime('1999-12-31T24:00:00'))" + }, + { + "output": "19", + "command": "hours-from-dateTime(xs:dateTime('1999-12-31T19:20:00'))" + }, + { + "output": "13", + "command": "hours-from-dateTime(xs:dateTime('1999-05-31T13:20:00-05:00'))" + } + ], + "name": "hours-from-dateTime()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:duration?" + } + ], + "description": "Returns an xs:integer representing the hours component in the value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-hours-from-duration", + "examples": [ + { + "output": "0", + "command": "hours-from-duration(xs:yearMonthDuration('-PT123H')" + }, + { + "output": "12", + "command": "hours-from-duration(xs:yearMonthDuration('P3DT12H32M12S'))" + }, + { + "output": "10", + "command": "hours-from-duration(xs:yearMonthDuration('P3DT10H')" + } + ], + "name": "hours-from-duration()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:time?" + } + ], + "description": "Returns an xs:integer between 0 and 23, both inclusive, representing the value of the hours component in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-hours-from-time", + "examples": [ + { + "output": "0", + "command": "hours-from-time(xs:time('24:00:00'))" + }, + { + "output": "11", + "command": "hours-from-time(xs:time('11:23:00'))" + } + ], + "name": "hours-from-time()", + "output": "xs:integer?" + }, + { + "arguments": [], + "description": "Returns the value of the implicit timezone property from the dynamic context.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-implicit-timezone", + "examples": [ + { + "command": "implicit-timezone()", + "output": "PT0S" + } + ], + "name": "implicit-timezone()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:dateTime?" + } + ], + "description": "Returns an xs:integer value between 0 and 59, both inclusive, representing the minute component in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-minutes-from-dateTime", + "examples": [ + { + "output": "0", + "command": "minutes-from-dateTime(xs:dateTime('1999-12-31T24:00:00'))" + }, + { + "output": "20", + "command": "minutes-from-dateTime(xs:dateTime('1999-12-31T19:20:00'))" + }, + { + "output": "20", + "command": "minutes-from-dateTime(xs:dateTime('1999-05-31T13:20:00-05:00'))" + } + ], + "name": "minutes-from-dateTime()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:duration?" + } + ], + "description": "Returns an xs:integer representing the minutes component in the value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-minutes-from-duration", + "examples": [ + { + "output": "-30", + "command": "minutes-from-duration(xs:yearMonthDuration('-PT1P5DT12H30M23H')" + }, + { + "output": "0", + "command": "minutes-from-duration(xs:yearMonthDuration('P3DT10H')" + } + ], + "name": "minutes-from-duration()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:time?" + } + ], + "description": "Returns an xs:integer between 0 and 23, both inclusive, representing the value of the hours component in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-minutes-from-time", + "examples": [ + { + "output": "0", + "command": "minutes-from-time(xs:time('24:00:00'))" + }, + { + "output": "23", + "command": "hourminutess-from-time(xs:time('11:23:00'))" + } + ], + "name": "minutes-from-time()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:date?" + } + ], + "description": "Returns an xs:integer between 1 and 12, both inclusive, representing the month component in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-month-from-date", + "examples": [ + { + "output": "01", + "command": "month-from-date(xs:date('2000-01-01+05:00'))" + }, + { + "output": "05", + "command": "month-from-date(xs:date('1999-05-31'))" + } + ], + "name": "month-from-date()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:dateTime?" + } + ], + "description": "Returns an xs:integer between 1 and 12, both inclusive, representing the month component in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-month-from-dateTime", + "examples": [ + { + "output": "1", + "command": "month-from-dateTime(xs:dateTime('1999-12-31T24:00:00'))" + }, + { + "output": "12", + "command": "month-from-dateTime(xs:dateTime('1999-12-31T19:20:00'))" + }, + { + "output": "05", + "command": "month-from-dateTime(xs:dateTime('1999-05-31T13:20:00-05:00'))" + } + ], + "name": "month-from-dateTime()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:duration?" + } + ], + "description": "Returns an xs:integer representing the months component in the value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-months-from-duration", + "examples": [ + { + "output": "0", + "command": "months-from-duration(xs:yearMonthDuration('-P2DT15H0M0S')" + }, + { + "output": "-6", + "command": "months-from-duration(xs:yearMonthDuration('-P20Y18M'))" + }, + { + "output": "3", + "command": "months-from-duration(xs:yearMonthDuration('P20Y15M')" + } + ], + "name": "months-from-duration()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:dateTime?" + } + ], + "description": "Returns an xs:decimal value greater than or equal to zero and less than 60, representing the seconds and fractional seconds in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-seconds-from-dateTime", + "examples": [ + { + "output": "0", + "command": "seconds-from-dateTime(xs:dateTime('1999-12-31T24:00:00'))" + }, + { + "output": "0", + "command": "seconds-from-dateTime(xs:dateTime('1999-05-31T13:20:00-05:00'))" + } + ], + "name": "seconds-from-dateTime()", + "output": "xs:decimal?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:duration?" + } + ], + "description": "Returns an xs:integer representing the seconds component in the value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-seconds-from-duration", + "examples": [ + { + "output": "16", + "command": "seconds-from-duration(xs:yearMonthDuration('-PT256S')" + }, + { + "output": "12.5", + "command": "seconds-from-duration(xs:yearMonthDuration('P3DT10H12.5S')" + } + ], + "name": "seconds-from-duration()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:time?" + } + ], + "description": "Returns an xs:decimal value greater than or equal to zero and less than 60, representing the seconds and fractional seconds in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-seconds-from-time", + "examples": [ + { + "output": "0", + "command": "seconds-from-time(xs:time('24:00:00'))" + }, + { + "output": "30", + "command": "seconds-from-time(xs:time('11:23:30'))" + } + ], + "name": "seconds-from-time()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:date?" + } + ], + "description": " Returns the timezone component of $arg if any. If $arg has a timezone component, then the result is an xs:dayTimeDuration that indicates deviation from UTC; its value may range from +14:00 to -14:00 hours, both inclusive. Otherwise, the result is the empty sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-timezone-from-date", + "examples": [ + { + "output": "PT0S", + "command": "timezone-from-date(xs:date('2000-01-01+05:00'))" + }, + { + "output": "-PT5H", + "command": "timezone-from-date(xs:date('1999-05-31'))" + } + ], + "name": "timezone-from-date()", + "output": "xs:dayTimeDuration?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:dateTime?" + } + ], + "description": " Returns an xs:decimal value greater than or equal to zero and less than 60, representing the seconds and fractional seconds in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-timezone-from-dateTime", + "examples": [ + { + "output": "()", + "command": "timezone-from-dateTime(xs:dateTime('2004-08-27T00:00:00'))" + }, + { + "output": "PT0S", + "command": "timezone-from-dateTime(xs:dateTime('1999-12-31T24:00:00'))" + }, + { + "output": "PT5H", + "command": "timezone-from-dateTime(xs:dateTime('1999-05-31T13:20:00-05:00'))" + } + ], + "name": "timezone-from-dateTime()", + "output": "xs:dayTimeDuration?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:time?" + } + ], + "description": "Returns an xs:decimal value greater than or equal to zero and less than 60, representing the seconds and fractional seconds in the localized value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-hours-from-time", + "examples": [ + { + "output": "0", + "command": "hours-from-time(xs:time('24:00:00'))" + }, + { + "output": "11", + "command": "hours-from-time(xs:time('11:23:00'))" + } + ], + "name": "timezone-from-time()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:date?" + } + ], + "description": "Returns an xs:integer representing the year in the localized value of $arg. The value may be negative.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-year-from-date", + "examples": [ + { + "output": "2000", + "command": "year-from-date(xs:date('2000-01-01+05:00'))" + }, + { + "output": "1999", + "command": "year-from-date(xs:date('1999-05-31'))" + } + ], + "name": "year-from-date()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:dateTime?" + } + ], + "description": "Returns an xs:integer representing the year component in the localized value of $arg. The result may be negative.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-year-from-dateTime", + "examples": [ + { + "output": "2000", + "command": "year-from-dateTime(xs:dateTime('1999-12-31T24:00:00'))" + }, + { + "output": "1999", + "command": "year-from-dateTime(xs:dateTime('1999-12-31T19:20:00'))" + }, + { + "output": "1999", + "command": "year-from-dateTime(xs:dateTime('1999-05-31T13:20:00-05:00'))" + } + ], + "name": "year-from-dateTime()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:duration?" + } + ], + "description": "Returns an xs:integer representing the years component in the value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-years-from-duration", + "examples": [ + { + "output": "0", + "command": "years-from-duration(xs:yearMonthDuration('-P2DT15H')" + }, + { + "output": "-1", + "command": "years-from-duration(xs:yearMonthDuration('-P15M'))" + }, + { + "output": "21", + "command": "years-from-duration(xs:yearMonthDuration('P20Y15M')" + } + ], + "name": "years-from-duration()", + "output": "xs:integer?" + } + ], + "name": "Date / Time" + }, + { + "entries": [ + { + "arguments": [], + "description": "The fn:error function is a general function that may be invoked as above but may also be invoked from XQuery or XPath applications with, for example, an xs:QName argument.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-error", + "examples": [], + "name": "error()", + "output": "N/A" + }, + { + "arguments": [ + { + "description": "$label", + "type": "xs:string" + }, + { + "description": "$arg", + "type": "item()*" + } + ], + "description": "Provides an execution trace intended to be used in debugging queries. The input $value is returned, unchanged, as the result of the function. In addition, the inputs $value, converted to an xs:string, and $label may be directed to a trace data set. The destination of the trace output is ·implementation-defined·. The format of the trace output is ·implementation dependent·. The ordering of output from invocations of the fn:trace() function is ·implementation dependent·.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-trace", + "examples": [], + "name": "trace()", + "output": "item" + } + ], + "name": "Error" + }, + { + "entries": [ + { + "arguments": [ + { + "description": "$paramQName", + "type": "xs:string" + }, + { + "description": "$paramURI", + "type": "xs:string?" + } + ], + "description": "Returns an xs:QName with the namespace URI given in $paramURI.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-QName", + "examples": [ + { + "command": "QName('http://www.release11.com/schemas/Sample.xsd', 'u:UserList')", + "output": "u:UserList" + } + ], + "name": "QName()", + "output": "xs:QName" + }, + { + "arguments": [ + { + "description": "$element", + "type": "element()" + } + ], + "description": "Returns the prefixes of the in-scope namespaces for $element. For namespaces that have a prefix, it returns the prefix as an xs:NCName. For the default namespace, which has no prefix, it returns the zero-length string.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-in-scope-prefixes", + "examples": [ + { + "output": "('u', 'xsi', 'xml')", + "command": "in-scope-prefixes(/u:root)" + } + ], + "name": "in-scope-prefixes()", + "output": "xs:string*" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:QName?" + } + ], + "description": "Returns an xs:NCName representing the prefix of $arg. The empty sequence is returned if $arg is the empty sequence or if the value of $arg contains no prefix.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-local-name-from-QName", + "examples": [ + { + "command": "local-name-from-QName(resolve-QName('u:UserList', /u:root/u:UserList))", + "output": "UserList" + } + ], + "name": "local-name-from-QName()", + "output": "xs:NCName?" + }, + { + "arguments": [ + { + "description": "$element", + "type": "element()" + }, + { + "description": "$prefix", + "type": "xs:string?" + } + ], + "description": "Returns the namespace URI of one of the in-scope namespaces for $element, identified by its namespace prefix.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-namespace-uri-for-prefix", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri-for-prefix('u', /u:root)" + } + ], + "name": "namespace-uri-for-prefix()", + "output": "xs:anyURI?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:QName?" + } + ], + "description": "Returns the namespace URI for $arg as an xs:anyURI. If $arg is the empty sequence, the empty sequence is returned. If $arg is in no namespace, the zero-length xs:anyURI is returned.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-namespace-uri-from-QName", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri-from-QName(resolve-QName('u:UserList', /u:root/u:UserList[1]))" + } + ], + "name": "namespace-uri-from-QName()", + "output": "xs:anyURI?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:QName?" + } + ], + "description": "Returns an xs:NCName representing the prefix of $arg. The empty sequence is returned if $arg is the empty sequence or if the value of $arg contains no prefix.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-prefix-from-QName", + "examples": [ + { + "command": "prefix-from-QName(resolve-QName('u:UserList', /u:root/u:UserList))", + "output": "u" + } + ], + "name": "prefix-from-QName()", + "output": "xs:NCName?" + }, + { + "arguments": [ + { + "description": "$element", + "type": "element" + }, + { + "description": "$qname", + "type": "xs:string?" + } + ], + "description": "Returns an xs:QName value (that is, an expanded-QName) by taking an xs:string that has the lexical form of an xs:QName (a string in the form 'prefix:local-name' or 'local-name') and resolving it using the in-scope namespaces for a given element.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-resolve-QName", + "examples": [ + { + "output": "l:libraryID", + "command": "resolve-QName('l:libraryID', /l:library/l:libraryName)" + }, + { + "output": "hello", + "command": "resolve-QName('hello', /l:library/l:libraryName)" + } + ], + "name": "resolve-QName()", + "output": "xs:QName?" + }, + { + "arguments": [ + { + "description": "$base", + "type": "xs:string" + }, + { + "description": "$relative", + "type": "xs:string?" + } + ], + "description": "This function enables a relative URI reference to be resolved against an absolute URI. If $relative is a relative URI reference, it is resolved against $base, or against the base-uri property from the static context, using an algorithm such as those described in RFC 2396 or RFC 3986, and the resulting absolute URI reference is returned. If $relative is an absolute URI reference, it is returned unchanged.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-resolve-uri", + "examples": [], + "name": "resolve-uri()", + "output": "xs:anyURI?" + }, + { + "arguments": [], + "description": "Returns the value of the Base URI property from the static context. If the Base URI property is undefined, the empty sequence is returned. Components of the static context are discussed in Section C.1 Static Context ComponentsXP.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-static-base-uri", + "examples": [ + { + "output": "()", + "command": "static-base-uri()" + } + ], + "name": "static-base-uri()", + "output": "xs:QName?" + } + ], + "name": "Misc" + }, + { + "entries": [ + { + "arguments": [ + { + "description": "Node which URI is looked for", + "type": "node?" + } + ], + "description": "Returns the value of the base-uri URI property for $arg as defined by the accessor function dm:base-uri() for that kind of node in Section 5.2 base-uri AccessorDM.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-base-uri", + "examples": [ + { + "output": "", + "command": "base-uri(/u:root/u:UserList[1])" + } + ], + "name": "base-uri()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$arg (Look description)", + "type": "item()*" + } + ], + "description": "Returns the number of items in the value of $arg. Returns 0 if $arg is the empty sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-root", + "examples": [ + { + "output": "10", + "command": "count(//u:UserList/u:User)" + }, + { + "output": "3", + "command": "count(//u:UserList)" + } + ], + "name": "count()", + "output": "number" + }, + { + "arguments": [ + { + "description": "Node which document-uri value needs to be returned.", + "type": "node?" + } + ], + "description": "Returns the value of the document-uri property for $arg as defined by the dm:document-uri accessor function defined in Section 6.1.2 AccessorsDM.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-document-uri", + "examples": [ + { + "command": "document-uri(/library/fiction:book[1])", + "output": "http://example.com/library.xml (assuming the document URI of the first fiction:book element is 'http://example.com/library.xml')" + }, + { + "output": "", + "command": "document-uri(/u:root)" + } + ], + "name": "document-uri()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$node (Look description)", + "type": "node?" + }, + { + "description": "$testlang (Look description)", + "type": "xs:string?" + } + ], + "description": "This function tests whether the language of $node, or the context item if the second argument is omitted, as specified by xml:lang attributes is the same as, or is a sublanguage of, the language specified by $testlang.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-lang", + "examples": [ + { + "command": "document-uri(/library/fiction:book[1])", + "output": "http://example.com/library.xml (assuming the document URI of the first fiction:book element is 'http://example.com/library.xml')" + }, + { + "output": "", + "command": "document-uri(/u:root)" + } + ], + "name": "lang()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "Node to display local-name", + "type": "node?" + } + ], + "description": "Returns the local part of the name of $arg as an xs:string that will either be the zero-length string or will have the lexical form of an xs:NCName. If the argument is omitted, it defaults to the context item (.). The behavior of the function if the argument is omitted is exactly the same as if the context item had been passed as the argument.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-local-name", + "examples": [ + { + "command": "name(/u:root)", + "output": "root" + } + ], + "name": "local-name()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "Node to display name", + "type": "node?" + } + ], + "description": "Returns the name of a node, as an xs:string that is either the zero-length string, or has the lexical form of an xs:QName. If the argument is omitted, it defaults to the context item (.). The behavior of the function if the argument is omitted is exactly the same as if the context item had been passed as the argument.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-name", + "examples": [ + { + "command": "name(/u:root)", + "output": "u:root" + } + ], + "name": "name()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "Node to test", + "type": "node?" + } + ], + "description": "Returns an xs:boolean indicating whether the argument node is 'nilled'. If the argument is not an element node, returns the empty sequence. If the argument is the empty sequence, returns the empty sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-nilled", + "examples": [ + { + "output": "false", + "command": "nilled(/u:root)" + } + ], + "name": "nilled()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$arg (Look description)", + "type": "node?" + } + ], + "description": "Returns the root of the tree to which $arg belongs. This will usually, but not necessarily, be a document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-root", + "examples": [ + { + "output": "", + "command": "root(//u:UserList[1])" + } + ], + "name": "root()", + "output": "node" + } + ], + "name": "Node-Set" + }, + { + "entries": [ + { + "arguments": [ + { + "description": "$arg", + "type": "numeric?" + } + ], + "description": "Returns the absolute value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-abs", + "examples": [ + { + "output": "25", + "command": "abs(-25)" + }, + { + "output": "25", + "command": "abs(25)" + } + ], + "name": "abs()", + "output": "numeric?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:anyAtomicType*" + } + ], + "description": "Returns the number of items in the value of $arg. Returns 0 if $arg is the empty sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-avg", + "examples": [ + { + "output": "2.6", + "command": "avg(//u:User/@Id)" + } + ], + "name": "avg()", + "output": "xs:anyAtomicType" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "numeric?" + } + ], + "description": "Returns the smallest (closest to negative infinity) number with no fractional part that is not less than the value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-ceiling", + "examples": [ + { + "output": "11", + "command": "ceiling(10.1)" + }, + { + "output": "10", + "command": "ceiling(-10.5)" + }, + { + "output": "11", + "command": "ceiling(10.5)" + } + ], + "name": "ceiling()", + "output": "numeric?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "numeric?" + } + ], + "description": "Returns the largest (closest to positive infinity) number with no fractional part that is not greater than the value of $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-floor", + "examples": [ + { + "output": "10", + "command": "floor(10.1)" + }, + { + "output": "-11", + "command": "floor(-10.5)" + }, + { + "output": "10", + "command": "floor(10.5)" + } + ], + "name": "floor()", + "output": "numeric?" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$arg", + "type": "xs:anyAtomicType*" + } + ], + "description": "Selects an item from the input sequence $arg whose value is greater than or equal to the value of every other item in the input sequence. If there are two or more such items, then the specific item whose value is returned is ·implementation dependent·.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-max", + "examples": [ + { + "output": "5", + "command": "max(//u:User/@Id)" + } + ], + "name": "max()", + "output": "xs:anyAtomicType" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$arg", + "type": "xs:anyAtomicType*" + } + ], + "description": "Selects an item from the input sequence $arg whose value is less than or equal to the value of every other item in the input sequence. If there are two or more such items, then the specific item whose value is returned is ·implementation dependent·.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-min", + "examples": [ + { + "output": "1", + "command": "min(//u:User/@Id)" + } + ], + "name": "min()", + "output": "xs:anyAtomicType" + }, + { + "arguments": [ + { + "description": "Value to convert to number", + "type": "xs:anyAtomicType?" + } + ], + "description": "Returns the value indicated by $arg or, if $arg is not specified, the context item after atomization, converted to an xs:double.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-number", + "examples": [ + { + "output": "NaN", + "command": "number('Release11')" + }, + { + "output": "123", + "command": "number(123)" + } + ], + "name": "number()", + "output": "xs:double" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "numeric?" + } + ], + "description": "Returns the number with no fractional part that is closest to the argument.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-round", + "examples": [ + { + "output": "10", + "command": "round(10.1)" + }, + { + "output": "-10", + "command": "round(-10.5)" + }, + { + "output": "11", + "command": "round(10.5)" + } + ], + "name": "round()", + "output": "numeric?" + }, + { + "arguments": [ + { + "description": "$precision", + "type": "numeric?" + }, + { + "description": "$arg", + "type": "numeric?" + } + ], + "description": "The value returned is the nearest (that is, numerically closest) value to $arg that is a multiple of ten to the power of minus $precision. If two such values are equally near (e.g. if the fractional part in $arg is exactly .500...), the function returns the one whose least significant digit is even.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#round-half-to-even", + "examples": [ + { + "output": "3", + "command": "round-half-to-even(2.6)" + }, + { + "output": "2", + "command": "round-half-to-even(2.5)" + }, + { + "output": "2", + "command": "round-half-to-even(1.5)" + }, + { + "output": "0", + "command": "round-half-to-even(0.5)" + } + ], + "name": "round-half-to-even()", + "output": "numeric?" + }, + { + "arguments": [ + { + "description": "$zero", + "type": "xs:anyAtomicType?" + }, + { + "description": "$arg", + "type": "xs:anyAtomicType*" + } + ], + "description": "Returns a value obtained by adding together the values in $arg. If $zero is not specified, then the value returned for an empty sequence is the xs:integer value 0. If $zero is specified, then the value returned for an empty sequence is $zero. Any values of type xs:untypedAtomic in $arg are cast to xs:double. The items in the resulting sequence may be reordered in an arbitrary order. The resulting sequence is referred to below as the converted sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-sum", + "examples": [ + { + "output": "26", + "command": "sum(//u:User/@Id)" + } + ], + "name": "sum()", + "output": "xs:anyAtomicType" + } + ], + "name": "Number" + }, + { + "entries": [ + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string" + }, + { + "description": "$comparand2", + "type": "xs:string?" + }, + { + "description": "$comparand1", + "type": "xs:string?" + } + ], + "description": "Returns true or false depending on whether the value of $comparand1 is equal to the value of $comparand2, according to the Unicode code point collation.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-codepoint-equal", + "examples": [ + { + "command": "codepoint-equal('asdf', 'asdf ')", + "output": "false" + }, + { + "command": "codepoint-equal('asdf', 'asdf')", + "output": "true" + } + ], + "name": "codepoint-equal()", + "output": "xs:boolean?" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:integer*" + } + ], + "description": "Creates an xs:string from a sequence of The Unicode Standard code points. Returns the zero-length string if $arg is the empty sequence. If any of the code points in $arg is not a legal XML character, an error is raised [err:FOCH0001].", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-codepoints-to-string", + "examples": [ + { + "output": "( ͡° ͜ʖ ͡°)", + "command": "codepoints-to-string((40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41))" + }, + { + "command": "codepoints-to-string((2309, 2358, 2378, 2325))", + "output": "अशॊक" + } + ], + "name": "codepoints-to-string()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$comparand2", + "type": "xs:string?" + }, + { + "description": "$comparand1", + "type": "xs:string?" + } + ], + "description": "Returns -1, 0, or 1, depending on whether the value of the $comparand1 is respectively less than, equal to, or greater than the value of $comparand2, according to the rules of the collation that is used.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-compare", + "examples": [ + { + "output": "1", + "command": "compare('abc', 'acc')" + }, + { + "output": "-1", + "command": "compare('abc', 'acc')" + }, + { + "output": "0", + "command": "compare('abc', 'abc')" + } + ], + "name": "compare()", + "output": "xs:integer?" + }, + { + "arguments": [ + { + "description": "$arg..", + "type": "xs:anyAtomicType?" + }, + { + "description": "$arg2", + "type": "xs:anyAtomicType?" + }, + { + "description": "$arg1", + "type": "xs:anyAtomicType?" + } + ], + "description": " Accepts two or more xs:anyAtomicType arguments and casts them to xs:string. Returns the xs:string that is the concatenation of the values of its arguments after conversion. If any of the arguments is the empty sequence, the argument is treated as the zero-length string.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-concat", + "examples": [ + { + "output": "Ciao!", + "command": "concat('Ciao!',())" + }, + { + "command": "concat('Thy ', (), 'old ', 'groans', '', ' ring', ' yet', ' in', ' my', 'ancient',' ears.')", + "output": "Thy old groans ring yet in my ancient ears." + }, + { + "command": "concat('un', 'grateful')", + "output": "ungrateful" + } + ], + "name": "concat()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$arg2", + "type": "xs:string?" + }, + { + "description": "$arg1", + "type": "xs:string?" + } + ], + "description": "Returns an xs:boolean indicating whether or not the value of $arg1 contains (at the beginning, at the end, or anywhere within) at least one sequence of collation units that provides a minimal match to the collation units in the value of $arg2, according to the collation that is used.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-contains", + "examples": [ + { + "command": "contains ( '', ())", + "output": "true" + }, + { + "command": "contains( 'tattoo', 'ttt')", + "output": "false" + }, + { + "command": "contains( 'tattoo', 'tat')", + "output": "true" + } + ], + "name": "contains()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$uri-part", + "type": "xs:string?" + } + ], + "description": "This function encodes reserved characters in an xs:string that is intended to be used in the path segment of a URI. It is invertible but not idempotent.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-encode-for-uri", + "examples": [ + { + "command": "concat('http://www.example.com/', encode-for-uri('100% organic'))", + "output": "http://www.example.com/100%25%20organic" + }, + { + "command": "concat('http://www.example.com/', encode-for-uri('~bébé'))", + "output": "http://www.example.com/~b%C3%A9b%C3%A9" + }, + { + "command": "encode-for-uri('https://www.google.com')", + "output": "https%3A%2F%2Fwww.google.com" + } + ], + "name": "encode-for-uri()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$arg2", + "type": "xs:string?" + }, + { + "description": "$arg1", + "type": "xs:string?" + } + ], + "description": "Returns an xs:boolean indicating whether or not the value of $arg1 starts with a sequence of collation units that provides a match to the collation units of $arg2 according to the collation that is used.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-ends-with", + "examples": [ + { + "command": "ends-with ( '', ())", + "output": "true" + }, + { + "command": "ends-with( 'tattoo', 'tatoo')", + "output": "false" + }, + { + "command": "ends-with('tattoo', 'too')", + "output": "true" + } + ], + "name": "ends-with(()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$uri", + "type": "xs:string?" + } + ], + "description": "This function escapes all characters except printable characters of the US-ASCII coded character set, specifically the octets ranging from 32 to 126 (decimal). The effect of the function is to escape a URI in the manner html user agents handle attribute values that expect URIs.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-escape-html-uri", + "examples": [ + { + "command": "escape-html-uri('http://www.example.com/00/Weather/CA/Los Angeles#ocean')", + "output": "http://www.example.com/00/Weather/CA/Los Angeles#ocean'" + } + ], + "name": "escape-html-uri()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$iri", + "type": "xs:string?" + } + ], + "description": "This function converts an xs:string containing an IRI into a URI according to the rules spelled out in Section 3.1 of [RFC 3987]. It is idempotent but not invertible.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-iri-to-uri", + "examples": [ + { + "output": "http://www.example.com/~b%C3%A9b%C3%A9", + "command": "iri-to-uri ('http://www.example.com/~bébé')" + }, + { + "output": "http://www.example.com/00/Weather/CA/Los%20Angeles#ocean", + "command": "iri-to-uri ('http://www.example.com/00/Weather/CA/Los%20Angeles#ocean')" + } + ], + "name": "iri-to-uri()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$flags", + "type": "xs:string?" + }, + { + "description": "$pattern", + "type": "xs:string?" + }, + { + "description": "$input", + "type": "xs:string?" + } + ], + "description": "The function returns true if $input matches the regular expression supplied as $pattern as influenced by the value of $flags, if present; otherwise, it returns false.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-matches", + "examples": [ + { + "output": "false", + "command": "matches('abracadabra', '^a.*a$')" + }, + { + "command": "matches('abracadabra', 'bra')", + "output": "true" + } + ], + "name": "matches()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:string?" + } + ], + "description": "Returns the value of $arg with whitespace normalized by stripping leading and trailing whitespace and replacing sequences of one or more than one whitespace character with a single space.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-normalize-space", + "examples": [ + { + "output": "''", + "command": "normalize-space(())" + }, + { + "command": "normalize-space(' The wealthy curled darlings of our nation. ')", + "output": "The wealthy curled darlings of our nation.'" + } + ], + "name": "normalize-space()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$normalizationForm", + "type": "xs:string?" + }, + { + "description": "$arg", + "type": "xs:string?" + } + ], + "description": "Returns the value of $arg normalized according to the normalization criteria for a normalization form identified by the value of $normalizationForm. The effective value of the $normalizationForm is computed by removing leading and trailing blanks, if present, and converting to upper case.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-normalize-unicode", + "examples": [ + { + "output": "'test'", + "command": "normalize-unicode('test ')" + } + ], + "name": "normalize-unicode()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$flags", + "type": "xs:string?" + }, + { + "description": "$replacement", + "type": "xs:string" + }, + { + "description": "$startingLoc", + "type": "xs:string" + }, + { + "description": "$comparand1", + "type": "xs:string?" + } + ], + "description": "The function returns the xs:string that is obtained by replacing each non-overlapping substring of $input that matches the given $pattern with an occurrence of the $replacement string.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-replace", + "examples": [ + { + "output": "b", + "command": "replace('AAAA', 'A+', 'b')" + }, + { + "output": "ada", + "command": "replace('abracadabra', 'a.*a, '*')" + }, + { + "output": "a*cada*", + "command": "replace('abracadabra', 'bra', '*')" + } + ], + "name": "replace()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$arg2", + "type": "xs:string?" + }, + { + "description": "$arg1", + "type": "xs:string?" + } + ], + "description": "Returns an xs:boolean indicating whether or not the value of $arg1 starts with a sequence of collation units that provides a match to the collation units of $arg2 according to the collation that is used.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-starts-with", + "examples": [ + { + "command": "starts-with ( '', ())", + "output": "true" + }, + { + "output": "false", + "command": "starts-with('tattoo', 'ttt')" + }, + { + "command": "starts-with('tattoo', 'tat')", + "output": "true" + } + ], + "name": "starts-with(()", + "output": "xs:boolean" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "item()?" + } + ], + "description": "Returns the value of $arg represented as a xs:string. If no argument is supplied, the context item (.) is used as the default argument.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-string", + "examples": [ + { + "output": "0.11", + "command": "string(.11)" + }, + { + "output": "false", + "command": "string((1<0))" + } + ], + "name": "string()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string" + }, + { + "description": "$arg2", + "type": "xs:string" + }, + { + "description": "$arg1", + "type": "xs:string*" + } + ], + "description": "Returns a xs:string created by concatenating the members of the $arg1 sequence using $arg2 as a separator. If the value of $arg2 is the zero-length string, then the members of $arg1 are concatenated without a separator.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-string-join", + "examples": [ + { + "output": "Blow, blow, thou winter wind!", + "command": "string-join(('Blow, ', 'blow, ', 'thou ', 'winter ', 'wind!'), '')" + }, + { + "output": "Now is the time ...", + "command": "string-join(('Now', 'is', 'the', 'time', '...'), ' ')" + } + ], + "name": "string-join()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:string?" + } + ], + "description": "Returns the portion of the value of $sourceString beginning at the position indicated by the value of $startingLoc and continuing for the number of characters indicated by the value of $length. The characters returned do not extend beyond $sourceString.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-string-length", + "examples": [ + { + "output": "0", + "command": "string-length(())" + }, + { + "output": "45", + "command": "string-length('Harp not on that string, madam; that is past.')" + } + ], + "name": "string-length()", + "output": "xs:integer" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:string*" + } + ], + "description": "Returns the sequence of The Unicode Standard code points that constitute an xs:string. If $arg is a zero-length string or the empty sequence, the empty sequence is returned.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-min", + "examples": [ + { + "output": "https://www.w3.org/TR/xquery-operators/#func-string-to-codepoints", + "command": "string-to-codepoints('Thérèse')" + } + ], + "name": "string-to-codepoints()", + "output": "xs:integer*" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:string?" + } + ], + "description": "Returns the value of $arg after translating every character to its lower-case correspondent as defined in the appropriate case mappings section in the Unicode standard.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-lower-case", + "examples": [ + { + "output": "abcd0", + "command": "lower-case('abCd0')" + } + ], + "name": "substring()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$length", + "type": "xs:double?" + }, + { + "description": "$startingLoc", + "type": "xs:double" + }, + { + "description": "$comparand1", + "type": "xs:string?" + } + ], + "description": "Returns the portion of the value of $sourceString beginning at the position indicated by the value of $startingLoc and continuing for the number of characters indicated by the value of $length. The characters returned do not extend beyond $sourceString.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-substring", + "examples": [ + { + "output": "ada", + "command": "substring('metadata', 4, 3)" + }, + { + "output": "' car'", + "command": "substring('motor car', 6)" + } + ], + "name": "substring()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$arg2", + "type": "xs:string?" + }, + { + "description": "$arg1", + "type": "xs:string?" + } + ], + "description": "Returns the substring of the value of $arg1 that follows in the value of $arg1 the first occurrence of a sequence of collation units that provides a minimal match to the collation units of $arg2 according to the collation that is used.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-substring-after", + "examples": [ + { + "command": "substring-after( 'tattoo', 'tat')", + "output": "too" + }, + { + "output": "''", + "command": "substring-after( 'tattoo', 'too')" + } + ], + "name": "substring-after()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$collation", + "type": "xs:string?" + }, + { + "description": "$arg2", + "type": "xs:string?" + }, + { + "description": "$arg1", + "type": "xs:string?" + } + ], + "description": "Returns the substring of the value of $arg1 that precedes in the value of $arg1 the first occurrence of a sequence of collation units that provides a minimal match to the collation units of $arg2 according to the collation that is used.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-substring-before", + "examples": [ + { + "output": "''", + "command": "substring-before( 'tattoo', 'tat')" + }, + { + "command": "substring-before( 'tattoo', 'too')", + "output": "tat" + } + ], + "name": "substring-before(()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$flags", + "type": "xs:string?" + }, + { + "description": "$pattern", + "type": "xs:string" + }, + { + "description": "$comparand1", + "type": "xs:string?" + } + ], + "description": "This function breaks the $input string into a sequence of strings, treating any substring that matches $pattern as a separator. The separators themselves are not returned.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-tokenize", + "examples": [ + { + "output": "('1', '15', '24', '50')", + "command": "tokenize('1, 15, 24, 50', '\\s*')" + }, + { + "output": "('The', 'cat', 'sat', 'on', 'the', 'mat')", + "command": "tokenize('The cat sat on the mat', '\\s+')" + } + ], + "name": "tokenize()", + "output": "xs:string*" + }, + { + "arguments": [ + { + "description": "$mapString", + "type": "xs:string" + }, + { + "description": "$mapString", + "type": "xs:string" + }, + { + "description": "$arg", + "type": "xs:string?" + } + ], + "description": "Returns the value of $arg modified so that every character in the value of $arg that occurs at some position N in the value of $mapString has been replaced by the character that occurs at position N in the value of $transString.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-translate", + "examples": [ + { + "output": "ABdAB", + "command": "translate('abcdabc', 'abc', 'AB')" + }, + { + "output": "AAA", + "command": "translate('--aaa--','abc-','ABC')" + }, + { + "output": "BAr", + "command": "translate('bar','abc','ABC')" + } + ], + "name": "translate()", + "output": "xs:string" + }, + { + "arguments": [ + { + "description": "$arg", + "type": "xs:string?" + } + ], + "description": "Returns the value of $arg after translating every character to its upper-case correspondent as defined in the appropriate case mappings section in the Unicode standard.", + "documentationReferenceURL": "https://www.w3.org/TR/xquery-operators/#func-upper-case", + "examples": [ + { + "output": "ABCD0", + "command": "upper-case('abCd0')" + } + ], + "name": "upper-case()", + "output": "xs:string" + } + ], + "name": "String" + } +] \ No newline at end of file diff --git a/Frontend/src/assets/tooltips/xpath/xpath3.json b/Frontend/src/assets/tooltips/xpath/xpath3.json new file mode 100644 index 0000000..810702f --- /dev/null +++ b/Frontend/src/assets/tooltips/xpath/xpath3.json @@ -0,0 +1,3109 @@ +[ + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence of arguments" + } + ], + "description": "Computes the effective boolean value of the sequence $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-boolean", + "examples": [ + { + "command": "boolean(\"true\")", + "output": "true" + } + ], + "name": "boolean()", + "output": "boolean" + }, + { + "arguments": [], + "description": "Returns the xs:boolean value false.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-false", + "examples": [ + { + "output": "false", + "command": "false()" + } + ], + "name": "false()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence of arguments" + } + ], + "description": "Returns true if the effective boolean value of $arg is false, or false if it is true", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-not", + "examples": [ + { + "output": "false", + "command": "not(\"true\")" + } + ], + "name": "not()", + "output": "boolean" + }, + { + "arguments": [], + "description": "Returns the xs:boolean value true.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-true", + "examples": [ + { + "output": "true", + "command": "true()" + } + ], + "name": "true()", + "output": "boolean" + } + ], + "name": "Boolean" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "sequence" + } + ], + "description": "Returns the average of the values in the input sequence $arg, that is, the sum of the values divided by the number of values.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-avg", + "examples": [ + { + "output": "10", + "command": "avg( (5,10,15) )" + } + ], + "name": "avg()", + "output": "any?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence" + } + ], + "description": "Returns the number of items in a sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-count", + "examples": [ + { + "output": "2", + "command": "count( ('release','11') )" + } + ], + "name": "count()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "collation", + "type": "string?" + }, + { + "name": "$parameter1", + "description": "first sequence", + "type": "item()*" + }, + { + "name": "$parameter2", + "type": "item()*", + "description": "second sequence" + } + ], + "description": "This function assesses whether two sequences are deep-equal to each other. To be deep-equal, they must contain items that are pairwise deep-equal", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-deep-equal", + "examples": [ + { + "command": "deep-equal( ('release','11') , ('release','11') )", + "output": "true" + } + ], + "name": "deep-equal()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "base sequence" + }, + { + "name": "$collation", + "description": "collation", + "type": "string?" + } + ], + "description": "Returns the values that appear in a sequence, with duplicates eliminated.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-distinct-values", + "examples": [ + { + "output": "('release','11','tools')", + "command": "distinct-values(('release','release','11','tools'))" + } + ], + "name": "distinct-values()", + "output": "any()*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input items", + "type": "item()*" + } + ], + "description": "Returns true if the argument is the empty sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-empty", + "examples": [ + { + "command": "empty(//u:UserList[1]/u:User[1111])", + "output": "true" + } + ], + "name": "empty()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence" + } + ], + "description": "Returns $arg if it contains exactly one item. Otherwise, raises an error.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-exactly-one", + "examples": [ + { + "command": "exactly-one( ('release','11') )", + "output": "Raises an error" + } + ], + "name": "exactly-one()", + "output": "item" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input items", + "type": "item()*" + } + ], + "description": "Returns true if the argument is a non-empty sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-empty", + "examples": [ + { + "command": "exists(//u:UserList[1]/u:User[1111])", + "output": "false" + } + ], + "name": "exists()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input items", + "type": "item()*" + } + ], + "description": "Returns the first item in a sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-head", + "examples": [ + { + "output": "First item in UserList with childrens", + "command": "head(//u:UserList)" + } + ], + "name": "head()", + "output": "item()?" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "collation", + "type": "string?" + }, + { + "name": "$search", + "type": "any", + "description": "item to find" + }, + { + "name": "$seq", + "type": "any()*", + "description": "base sequence" + } + ], + "description": "Returns a sequence of positive integers giving the positions within the sequence $seq of items that are equal to $search.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-index-of", + "examples": [ + { + "output": "(1,2)", + "command": "index-of(('release','release','11','tools'),'release')" + } + ], + "name": "index-of()", + "output": "integer*" + }, + { + "arguments": [ + { + "name": "$nodes", + "description": "input nodes", + "type": "node()*" + } + ], + "description": "Returns every node within the input sequence that is not an ancestor of another member of the input sequence; the nodes are returned in document order with duplicates eliminated.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-innermost", + "examples": [ + { + "command": "innermost(//u:UserList[1])", + "output": "node with childrens" + } + ], + "name": "innermost()", + "output": "node()*" + }, + { + "arguments": [ + { + "name": "$inserts", + "type": "item()*", + "description": "itemst to insert" + }, + { + "name": "$position", + "type": "integer", + "description": "position where insert data" + }, + { + "name": "$target", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Returns a sequence constructed by inserting an item or a sequence of items at a given position within an existing sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-insert-before", + "examples": [ + { + "output": "First UserList with 'hello' on the start", + "command": "insert-before(//u:UserList[1],1,\"hello\")" + } + ], + "name": "insert-before()", + "output": "item()*" + }, + { + "arguments": [], + "description": "Returns the context size from the dynamic context", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-last", + "examples": [ + { + "command": "//u:UserList[last()]", + "output": "Last UserList" + } + ], + "name": "last()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "sequence" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns a value that is equal to the highest value appearing in the input sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-max", + "examples": [ + { + "output": "15", + "command": "max( (5,10,15) )" + } + ], + "name": "max()", + "output": "any?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "sequence" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns a value that is equal to the lowest value appearing in the input sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-min", + "examples": [ + { + "output": "5", + "command": "min( (5,10,15) )" + } + ], + "name": "min()", + "output": "any?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence" + } + ], + "description": "Returns $arg if it contains one or more items. Otherwise, raises an error.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-one-or-more", + "examples": [ + { + "output": "('release','11')", + "command": "one-or-more( ('release','11') )" + } + ], + "name": "one-or-more()", + "output": "item+" + }, + { + "arguments": [ + { + "name": "$nodes", + "description": "input nodes", + "type": "node()*" + } + ], + "description": "Returns every node within the input sequence that has no ancestor that is itself a member of the input sequence; the nodes are returned in document order with duplicates eliminated.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-outermost", + "examples": [ + { + "output": "node with childrens", + "command": "outermost(//u:UserList[1]/u:User[1])" + } + ], + "name": "outermost()", + "output": "node()*" + }, + { + "arguments": [], + "description": "Returns the context position from the dynamic context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-position", + "examples": [ + { + "command": "//u:UserList[position() = 2]", + "output": "UserList with index 2" + } + ], + "name": "position()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$position", + "type": "integer", + "description": "position where insert data" + }, + { + "name": "$target", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Returns a new sequence containing all the items of $target except the item at position $position.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-remove", + "examples": [ + { + "output": "First UserList witout second User", + "command": "remove(//u:UserList[1]/*,2)" + } + ], + "name": "remove()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Reverses the order of items in a sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-reverse", + "examples": [ + { + "command": "reverse(//u:UserList[1]/*)", + "output": "Users from first UserList, but in reversed order(from Id=4 to Id=1)" + } + ], + "name": "reverse()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$length", + "type": "double", + "description": "lenght to subsequence" + }, + { + "name": "$startingLoc", + "type": "double", + "description": "starting location" + }, + { + "name": "$surceSeq", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Returns the contiguous sequence of items in the value of $sourceSeq beginning at the position indicated by the value of $startingLoc and continuing for the number of items indicated by the value of $length.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-subsequence", + "examples": [ + { + "command": "subsequence(//u:UserList[1]/*,3,1)", + "output": "User on position 3" + } + ], + "name": "subsequence()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "sequence" + }, + { + "name": "$zero", + "type": "any?", + "description": "value to return when sum is 0" + } + ], + "description": "Returns a value obtained by adding together the values in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-sum", + "examples": [ + { + "output": "30", + "command": "sum( (5,10,15) )" + } + ], + "name": "sum()", + "output": "any?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input items", + "type": "item()*" + } + ], + "description": "Returns all but the first item in a sequence", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-tail", + "examples": [ + { + "command": "tail(//u:UserList)", + "output": "UserList items without first element" + } + ], + "name": "tail()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$surceSeq", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Returns the items of $sourceSeq in an implementation dependent order.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-unordered", + "examples": [ + { + "command": "unordered(//u:UserList[1]/*)", + "output": "Users from UserList" + } + ], + "name": "unordered()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence" + } + ], + "description": "Returns $arg if it contains zero or one items. Otherwise, raises an error.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-zero-or-one", + "examples": [ + { + "output": "raises an error", + "command": "zero-or-one( ('release','11') )" + } + ], + "name": "zero-or-one()", + "output": "item?" + } + ], + "name": "Collections" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + }, + { + "name": "$timezone", + "type": "dayTimeDuration?", + "description": "timezone" + } + ], + "description": "Adjusts an xs:date value to a specific timezone, or to no timezone at all; the result is the date in the target timezone that contains the starting instant of the supplied date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-adjust-date-to-timezone", + "examples": [ + { + "output": "2002-03-07-10:00", + "command": "adjust-date-to-timezone(xs:date(\"2002-03-07\"), $tz-10)" + } + ], + "name": "adjust-date-to-timezone()", + "output": "date?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "datetime", + "type": "datetime?" + }, + { + "name": "$timezone", + "type": "dayTimeDuration?", + "description": "timezone" + } + ], + "description": "Adjusts an xs:dateTime value to a specific timezone, or to no timezone at all.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-adjust-dateTime-to-timezone", + "examples": [ + { + "command": "adjust-dateTime-to-timezone(xs:dateTime('2002-03-07T10:00:00'), $tz-10)", + "output": "dateTime('2002-03-07T10:00:00-10:00')" + } + ], + "name": "adjust-dateTime-to-timezone()", + "output": "dateTime?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + }, + { + "name": "$timezone", + "type": "dayTimeDuration?", + "description": "timezone" + } + ], + "description": "Adjusts an xs:time value to a specific timezone, or to no timezone at all.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-adjust-time-to-timezone", + "examples": [ + { + "output": "10:00:00-10:00", + "command": "adjust-time-to-timezone(xs:time(\"10:00:00\"), $tz-10)" + } + ], + "name": "adjust-time-to-timezone()", + "output": "time?" + }, + { + "arguments": [], + "description": "Returns the current date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-current-date", + "examples": [ + { + "output": "2023-08-17Z", + "command": "current-date()" + } + ], + "name": "current-date()", + "output": "date" + }, + { + "arguments": [], + "description": "Returns the current date and time (with timezone).", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-current-dateTime", + "examples": [ + { + "output": "2023-08-17T10:34:53.526001419Z", + "command": "current-dateTime()" + } + ], + "name": "current-dateTime()", + "output": "dateTimeStamp" + }, + { + "arguments": [], + "description": "Returns the current time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-current-time", + "examples": [ + { + "output": "10:36:53.154103936Z", + "command": "current-time()" + } + ], + "name": "current-time()", + "output": "time" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + }, + { + "name": "$arg2", + "description": "time", + "type": "time?" + } + ], + "description": "Returns an xs:dateTime value created by combining an xs:date and an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-dateTime", + "examples": [ + { + "output": "1999-12-31T12:00:00", + "command": "dateTime(xs:date(\"1999-12-31\"), xs:time(\"12:00:00\"))" + } + ], + "name": "dateTime()", + "output": "dateTime" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + } + ], + "description": "Returns the day component of an xs:date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-day-from-date", + "examples": [ + { + "output": "31", + "command": "day-from-date(xs:date(\"1999-05-31\"))" + } + ], + "name": "day-from-date()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the day component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-day-from-dateTime", + "examples": [ + { + "output": "31", + "command": "day-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "day-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of days in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-days-from-duration", + "examples": [ + { + "output": "3", + "command": "days-from-duration(xs:yearMonthDuration(\"P3DT10H\"))" + } + ], + "name": "days-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$calendar", + "description": "calendar", + "type": "string?" + }, + { + "name": "$language", + "description": "language", + "type": "string?" + }, + { + "name": "$picture", + "description": "picture", + "type": "string?" + }, + { + "name": "$place", + "description": "place", + "type": "string?" + }, + { + "name": "$value", + "description": "date", + "type": "date?" + } + ], + "description": "Returns a string containing an xs:date value formatted for display.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-format-date", + "examples": [], + "name": "format-date()", + "output": "string?" + }, + { + "arguments": [ + { + "name": "$calendar", + "description": "calendar", + "type": "string?" + }, + { + "name": "$language", + "description": "language", + "type": "string?" + }, + { + "name": "$picture", + "description": "picture", + "type": "string?" + }, + { + "name": "$place", + "description": "place", + "type": "string?" + }, + { + "name": "$value", + "description": "datetime", + "type": "dateTime?" + } + ], + "description": "Returns a string containing an xs:dateTime value formatted for display.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-format-dateTime", + "examples": [], + "name": "format-dateTime()", + "output": "string?" + }, + { + "arguments": [ + { + "name": "$calendar", + "description": "calendar", + "type": "string?" + }, + { + "name": "$language", + "description": "language", + "type": "string?" + }, + { + "name": "$picture", + "description": "picture", + "type": "string?" + }, + { + "name": "$place", + "description": "place", + "type": "string?" + }, + { + "name": "$value", + "description": "time", + "type": "time?" + } + ], + "description": "RReturns a string containing an xs:time value formatted for display.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-format-time", + "examples": [], + "name": "format-time()", + "output": "string?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the hours component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-hours-from-dateTime", + "examples": [ + { + "output": "13", + "command": "hours-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "hours-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of hours in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-days-from-duration", + "examples": [ + { + "output": "10", + "command": "days-from-duration(xs:yearMonthDuration(\"P3DT10H\"))" + } + ], + "name": "hours-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + } + ], + "description": "Returns the hours component of an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-hours-from-time", + "examples": [ + { + "output": "21", + "command": "hours-from-time(xs:time(\"21:37:37\"))" + } + ], + "name": "hours-from-time()", + "output": "integer?" + }, + { + "arguments": [], + "description": "Returns the value of the implicit timezone property from the dynamic context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-implicit-timezone", + "examples": [ + { + "command": "implicit-timezone()", + "output": "PT0S" + } + ], + "name": "implicit-timezone()", + "output": "dayTimeDuration" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the minutes component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-minutes-from-dateTime", + "examples": [ + { + "output": "20", + "command": "minutes-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "minutes-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of minutes in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-minutes-from-duration", + "examples": [ + { + "output": "0", + "command": "minutes-from-duration(xs:yearMonthDuration(\"P3DT10H\"))" + } + ], + "name": "minutes-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + } + ], + "description": "Returns the minutes component of an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-minutes-from-time", + "examples": [ + { + "output": "37", + "command": "minutes-from-time(xs:time(\"21:37:37\"))" + } + ], + "name": "minutes-from-time()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + } + ], + "description": "Returns the month component of an xs:date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-month-from-date", + "examples": [ + { + "output": "5", + "command": "month-from-date(xs:date(\"1999-05-31\"))" + } + ], + "name": "month-from-date()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the month component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-month-from-dateTime", + "examples": [ + { + "output": "5", + "command": "month-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "month-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of months in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-months-from-duration", + "examples": [ + { + "output": "3", + "command": "months-from-duration(xs:yearMonthDuration(\"P20Y15M\"))" + } + ], + "name": "months-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the seconds component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-seconds-from-dateTime", + "examples": [ + { + "output": "1", + "command": "seconds-from-dateTime(xs:dateTime(\"1999-05-31T13:20:01-05:00\"))" + } + ], + "name": "seconds-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of seconds in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-seconds-from-duration", + "examples": [ + { + "output": "12.5", + "command": "seconds-from-duration(xs:yearMonthDuration(\"P3DT10H12.5S\"))" + } + ], + "name": "seconds-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + } + ], + "description": "Returns the seconds component of an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-seconds-from-time", + "examples": [ + { + "output": "37", + "command": "seconds-from-time(xs:time(\"21:37:37\"))" + } + ], + "name": "seconds-from-time()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + } + ], + "description": "Returns the timezone component of an xs:date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-timezone-from-date", + "examples": [ + { + "output": "-PT5H", + "command": "timezone-from-date(xs:date(\"1999-05-31-05:00\"))" + } + ], + "name": "timezone-from-date()", + "output": "dayTimeDuration?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the timezone component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-timezone-from-dateTime", + "examples": [ + { + "output": "-PT5H", + "command": "timezone-from-dateTime(xs:dateTime(\"1999-05-31T13:20:01-05:00\"))" + } + ], + "name": "timezone-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + } + ], + "description": "Returns the timezone component of an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-timezone-from-time", + "examples": [ + { + "output": "-PT5H", + "command": "timezone-from-time(xs:time(\"21:37:37-05:00\"))" + } + ], + "name": "timezone-from-time()", + "output": "dayTimeDuration?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + } + ], + "description": "Returns the year component of an xs:date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-year-from-date", + "examples": [ + { + "output": "1999", + "command": "year-from-date(xs:date(\"1999-05-31\"))" + } + ], + "name": "year-from-date()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the year component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-year-from-dateTime", + "examples": [ + { + "output": "1999", + "command": "year-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "year-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of years in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-years-from-duration", + "examples": [ + { + "output": "21", + "command": "years-from-duration(xs:yearMonthDuration(\"P20Y15M\"))" + } + ], + "name": "years-from-duration()", + "output": "integer" + } + ], + "name": "Date/Time" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$code", + "description": "Error code", + "type": "QName" + }, + { + "name": "$description", + "description": "Error description", + "type": "string" + }, + { + "name": "$eror-object", + "description": "Arbitrary value used to convey additional information about the error", + "type": "item()*" + } + ], + "description": "Calling the error function raises an application-defined error.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-error", + "examples": [ + { + "output": "Error signalled by application call on error()", + "command": "error()" + } + ], + "name": "error()", + "output": "Throws an error" + }, + { + "arguments": [ + { + "name": "$label", + "type": "string", + "description": "The label to put in tracing data" + }, + { + "name": "$value", + "type": "item()*", + "description": "The value to returns unchanged" + } + ], + "description": "Provides an execution trace intended to be used in debugging queries.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-trace", + "examples": [ + { + "output": "Returns data, if something changes returns label with value", + "command": "trace(//u:UserList[1]/u:User[last()]/u:DateOfDeath, 'the value is:')" + } + ], + "name": "trace()", + "output": "item()*" + } + ], + "name": "Error" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on every item in source collection", + "type": "function(item()*)" + }, + { + "name": "$seq", + "type": "item()*", + "description": "source collection" + } + ], + "description": "Returns those items from the sequence $seq for which the supplied function $f returns true.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-filter", + "examples": [ + { + "output": "(2, 4, 6, 8, 10)", + "command": "filter(1 to 10, function($a) {$a mod 2 = 0})" + } + ], + "name": "filter()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on item in squence", + "type": "function(item()*)" + }, + { + "name": "$seq", + "type": "item()*", + "description": "source collection" + }, + { + "name": "$zero", + "description": "if source collection is empty", + "type": "item()*" + } + ], + "description": "Processes the supplied sequence from left to right, applying the supplied function repeatedly to each item in turn, together with an accumulated result value.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-fold-left", + "examples": [ + { + "output": "210", + "command": "fold-left((2,3,5,7), 1, function($a, $b) { $a * $b })" + } + ], + "name": "fold-left()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on item in squence", + "type": "function(item()*)" + }, + { + "name": "$seq", + "type": "item()*", + "description": "source collection" + }, + { + "name": "$zero", + "description": "if source collection is empty", + "type": "item()*" + } + ], + "description": "Processes the supplied sequence from right to left, applying the supplied function repeatedly to each item in turn, together with an accumulated result value.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-fold-right", + "examples": [ + { + "output": "210", + "command": "fold-right((2,3,5,7), 1, function($a, $b) { $a * $b })" + } + ], + "name": "fold-right()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on every item in source collection", + "type": "function(item()*)" + }, + { + "name": "$seq", + "type": "item()*", + "description": "source collection" + } + ], + "description": "Applies the function item $f to every item from the sequence $seq in turn, returning the concatenation of the resulting sequences in order.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-for-each", + "examples": [ + { + "output": "(1, 4, 9, 16, 25)", + "command": "for-each(1 to 5, function($a) { $a * $a })" + } + ], + "name": "for-each()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on items in squence", + "type": "function(item()*)" + }, + { + "name": "$seq1", + "description": "first sequence", + "type": "item()*" + }, + { + "name": "$seq2", + "type": "item()*", + "description": "second sequence" + } + ], + "description": "Applies the function item $f to successive pairs of items taken one from $seq1 and one from $seq2, returning the concatenation of the resulting sequences in order.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-for-each-pair", + "examples": [ + { + "output": "(\"ax\", \"by\", \"cz\")", + "command": "for-each-pair((\"a\", \"b\", \"c\"), (\"x\", \"y\", \"z\"), concat#2)" + } + ], + "name": "for-each-pair()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$func", + "description": "function", + "type": "function(*)" + } + ], + "description": "Returns the arity of the function identified by a function item.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-function-arity", + "examples": [ + { + "output": "2", + "command": "function-arity(substring#2)" + } + ], + "name": "function-arity()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arity", + "type": "integer", + "description": "number of arguments" + }, + { + "name": "$name", + "description": "function Name", + "type": "QName" + } + ], + "description": "Returns the function having a given name and arity, if there is one.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-function-lookup", + "examples": [], + "name": "function-lookup()", + "output": "function(*)?" + }, + { + "arguments": [ + { + "name": "$func", + "description": "function", + "type": "function(*)" + } + ], + "description": "Returns the name of the function identified by a function item.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-function-name", + "examples": [ + { + "output": "fn:substring", + "command": "function-name(substring#2)" + } + ], + "name": "function-name()", + "output": "QName?" + } + ], + "name": "Loop/Conditional" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$paramQName", + "type": "QName parameter" + }, + { + "name": "$paramURI", + "type": "string?", + "description": "URI Parameter" + } + ], + "description": "Constructs an xs:QName value given a namespace URI and a lexical QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-QName", + "examples": [ + { + "command": "QName(\"http://www.release11.com/schemas/Sample.xsd\", \"u:User\")", + "output": "u:User" + } + ], + "name": "QName()", + "output": "QName" + }, + { + "arguments": [], + "description": "Returns a list of environment variable names that are suitable for passing to environment-variable()", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-available-environment-variables", + "examples": [ + { + "output": "('PATH','HOSTNAME','JAVA_HOME','PWD','JAVA_VERSION','LANG','HOME')", + "command": "available-environment-variables()" + } + ], + "name": "available-environment-variables()", + "output": "string()*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "collection uri", + "type": "string()?" + } + ], + "description": "Returns a sequence of nodes representing a collection of documents indentified by a collection URI; or a default collection if no URI is supplied.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-collection", + "examples": [ + { + "command": "collection()", + "output": "No default collection has been defined" + } + ], + "name": "collection()", + "output": "boolean" + }, + { + "arguments": [], + "description": "Returns the value of the default collation property from the static context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-default-collation", + "examples": [ + { + "command": "default-collation()", + "output": "http://www.w3.org/2005/xpath-functions/collation/codepoint" + } + ], + "name": "default-collation()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$uri", + "type": "string()?", + "description": "URI" + } + ], + "description": "Retrieves a document using a URI supplied as an xs:string, and returns the corresponding document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-doc", + "examples": [ + { + "command": "doc(\"\")", + "output": "xml source" + } + ], + "name": "doc()", + "output": "document-node?" + }, + { + "arguments": [ + { + "name": "$uri", + "type": "string()?", + "description": "URI" + } + ], + "description": "The function returns true if and only if the function call fn:doc($uri) would return a document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-doc-available", + "examples": [ + { + "command": "doc-available(\"http://api.nbp.pl/api/cenyzlota/today\")", + "output": "false" + } + ], + "name": "doc-available()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$uri-part", + "type": "string?", + "description": "uri part" + } + ], + "description": "Encodes reserved characters in a string that is intended to be used in the path segment of a URI.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-encode-for-uri", + "examples": [ + { + "command": "encode-for-uri(\"release 11 tools\")", + "output": "release%2011%20tools" + } + ], + "name": "encode-for-uri()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$name", + "description": "enviroment variable name", + "type": "string" + } + ], + "description": "Returns the value of a system environment variable, if it exists.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-environment-variable", + "examples": [ + { + "output": "C.UTF-8", + "command": "environment-variable(\"LANG\")" + } + ], + "name": "environment-variable()", + "output": "string()?" + }, + { + "arguments": [ + { + "name": "$uri", + "type": "string?", + "description": "uri" + } + ], + "description": "Escapes a URI in the same way that HTML user agents handle attribute values expected to contain URIs.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-escape-html-uri", + "examples": [ + { + "command": "escape-html-uri (\"http://www.example.com/00/Weather/CA/Los Angeles#ocean\")", + "output": "http://www.example.com/00/Weather/CA/Los Angeles#ocean" + } + ], + "name": "escape-html-uri()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$element", + "type": "element()", + "description": "scope to get prefix from" + } + ], + "description": "Returns the prefixes of the in-scope namespaces for an element node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-in-scope-prefixes", + "examples": [ + { + "output": "('u','xsi','xml')", + "command": "in-scope-prefixes(//u:UserList[1])" + } + ], + "name": "in-scope-prefixes()", + "output": "string*" + }, + { + "arguments": [ + { + "name": "$iri", + "description": "iri", + "type": "string?" + } + ], + "description": "Converts a string containing an IRI into a URI", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-iri-to-uri", + "examples": [ + { + "output": "http://tools.release11.com/?xpath&%20some%20additional%20data", + "command": "iri-to-uri(\"http://tools.release11.com/?xpath& some additional data\")" + } + ], + "name": "iri-to-uri()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$node", + "description": "node to test", + "type": "node()?" + }, + { + "name": "$testlang", + "description": "language", + "type": "string()?" + } + ], + "description": "This function tests whether the language of $node, or the context item if the second argument is omitted, as specified by xml:lang attributes is the same as, or is a sublanguage of, the language specified by $testlang.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-lang", + "examples": [ + { + "output": "false", + "command": "lang('pl',//u:UserList[1])" + } + ], + "name": "lang()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "QName", + "type": "QName?" + } + ], + "description": "Returns the local part of the supplied QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-local-name-from-QName", + "examples": [ + { + "command": "local-name-from-QName(xs:QName(\"u:User\"))", + "output": "User" + } + ], + "name": "local-name-from-QName()", + "output": "NCName" + }, + { + "arguments": [ + { + "name": "$element", + "description": "element where namespace exist", + "type": "element()" + }, + { + "name": "$prefix", + "description": "namespace prefix", + "type": "string?" + } + ], + "description": "Returns the namespace URI of one of the in-scope namespaces for $element, identified by its namespace prefix.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-namespace-uri-for-prefix", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri-for-prefix(\"u\",//u:UserList[1])" + } + ], + "name": "namespace-uri-for-prefix()", + "output": "URI?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "QName", + "type": "QName?" + } + ], + "description": "Returns the namespace URI part of the supplied QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-namespace-uri-from-QName", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri-from-QName(xs:QName(\"u:User\"))" + } + ], + "name": "namespace-uri-from-QName()", + "output": "URI?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "string?", + "description": "XML String" + } + ], + "description": "This function takes as input an XML document represented as a string, and returns the document node at the root of an XDM tree representing the parsed document.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-parse-xml", + "examples": [ + { + "command": "parse-xml(unparsed-text('http://api.nbp.pl/api/cenyzlota/today?format=xml'))", + "output": "Parsed as XML data from NBP Api" + } + ], + "name": "parse-xml()", + "output": "document-node(element(*))?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "string?", + "description": "XML Fragment String" + } + ], + "description": "This function takes as input an XML external entity represented as a string, and returns the document node at the root of an XDM tree representing the parsed document fragment.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-parse-xml-fragment", + "examples": [ + { + "output": "data XML, but as XML Document", + "command": "parse-xml-fragment('hello')" + } + ], + "name": "parse-xml-fragment()", + "output": "document-node()?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "QName", + "type": "QName?" + } + ], + "description": "Returns the prefix component of the supplied QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-prefix-from-QName", + "examples": [ + { + "command": "prefix-from-QName(xs:QName(\"u:User\"))", + "output": "u" + } + ], + "name": "prefix-from-QName()", + "output": "NCName" + }, + { + "arguments": [ + { + "name": "$element", + "type": "element" + }, + { + "name": "$qname", + "description": "qname", + "type": "string?" + } + ], + "description": "Returns an xs:QName value (that is, an expanded-QName) by taking an xs:string that has the lexical form of an xs:QName", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-resolve-QName", + "examples": [ + { + "output": "hello", + "command": "resolve-QName(\"hello\", //u:UserList[1]/u:User[1]/u:Name)" + } + ], + "name": "resolve-QName()", + "output": "QName" + }, + { + "arguments": [ + { + "name": "$relative", + "description": "Source string", + "type": "string?" + } + ], + "description": "Resolves a relative IRI reference against an absolute IRI.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-resolve-uri", + "examples": [ + { + "command": " resolve-uri(\"u:User/u:Name\") ", + "output": "u:User/u:Name" + } + ], + "name": "resolve-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input sequence", + "type": "item()*" + }, + { + "name": "$params", + "type": "element()?", + "description": "parameters" + } + ], + "description": "This function serializes the supplied input sequence $arg, returning the serialized representation of the sequence as a string.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-serialize", + "examples": [ + { + "output": "first users serialized to String", + "command": "serialize(//u:User[1])" + } + ], + "name": "serialize()", + "output": "string" + }, + { + "arguments": [], + "description": "This function returns the value of the Static Base URI property from the static context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-static-base-uri", + "examples": [ + { + "output": "", + "command": "static-base-uri()" + } + ], + "name": "static-base-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$encoding", + "description": "resource encoding", + "type": "string()?" + }, + { + "name": "$href", + "description": "external resource href", + "type": "string()?" + } + ], + "description": "Reads an external resource (for example, a file) and returns a string representation of the resource.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-unparsed-text", + "examples": [ + { + "command": "unparsed-text(\"https://api.nbp.pl/api/cenyzlota/today?format=xml\")", + "output": "XML data from nbp API" + } + ], + "name": "unparsed-text()", + "output": "string()?" + }, + { + "arguments": [ + { + "name": "$encoding", + "description": "resource encoding", + "type": "string()?" + }, + { + "name": "$href", + "description": "external resource href", + "type": "string()?" + } + ], + "description": "Because errors in evaluating the unparsed-text() function are non-recoverable, these two functions are provided to allow an application to determine whether a call with particular arguments would succeed", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-available", + "examples": [ + { + "output": "true", + "command": "unparsed-text-available(\"https://api.nbp.pl/api/cenyzlota/today?format=xml\")" + } + ], + "name": "unparsed-text-available()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$encoding", + "description": "resource encoding", + "type": "string()?" + }, + { + "name": "$href", + "description": "external resource href", + "type": "string()?" + } + ], + "description": "reads an external resource (for example, a file) and returns its contents as a sequence of strings, one for each line of text in the string representation of the resource.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-lines", + "examples": [ + { + "command": "unparsed-text-lines(\"https://api.nbp.pl/api/cenyzlota/today?format=xml\")", + "output": "XML data from nbp API" + } + ], + "name": "unparsed-text-lines()", + "output": "string()*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "collection uri", + "type": "string()?" + } + ], + "description": "Returns a sequence of xs:anyURI values representing the URIs in a resource collection.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-uri-collection", + "examples": [ + { + "output": "No default collection has been defined", + "command": "uri-collection()" + } + ], + "name": "uri-collection()", + "output": "URI*" + } + ], + "name": "Misc" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "description": "node to read base URI", + "type": "node()?" + } + ], + "description": "Returns the base URI of a node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-base-uri", + "examples": [ + { + "output": "", + "command": "base-uri()" + } + ], + "name": "base-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "items to get data from" + } + ], + "description": "Returns the result of atomizing a sequence, that is, replacing all nodes in the sequence by their typed values.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-data", + "examples": [ + { + "command": "data(//u:UserList[last()]/*[1])", + "output": "New \n \t Folder \n \t 2023-11-10" + } + ], + "name": "data()", + "output": "any" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read base URI", + "type": "node()?" + } + ], + "description": "Returns the URI of a resource where a document can be found, if available.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-document-uri", + "examples": [ + { + "output": "", + "command": "document-uri()" + } + ], + "name": "document-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "ID Value", + "type": "string*" + }, + { + "name": "$node", + "description": "node", + "type": "node?" + } + ], + "description": "Returns the sequence of element nodes that have an ID value matching the value of one or more of the IDREF values supplied in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-element-with-id", + "examples": [], + "name": "element-with-id()", + "output": "element*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Node to generate id", + "type": "node?" + } + ], + "description": "This function returns a string that uniquely identifies a given node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-generate-id", + "examples": [ + { + "output": "d0e3", + "command": "generate-id(//u:UserList[1])" + } + ], + "name": "generate-id()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$node", + "description": "node to check children", + "type": "node()?" + } + ], + "description": "Returns true if the supplied node has one or more child nodes (of any kind).", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-has-children", + "examples": [ + { + "command": "has-children(//u:UserList[1])", + "output": "true" + } + ], + "name": "has-children()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "ID Value", + "type": "string*" + }, + { + "name": "$node", + "description": "node", + "type": "node?" + } + ], + "description": "Returns the sequence of element nodes that have an ID value matching the value of one or more of the IDREF values supplied in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-id", + "examples": [], + "name": "id()", + "output": "element*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "ID Value", + "type": "string*" + }, + { + "name": "$node", + "description": "node", + "type": "node?" + } + ], + "description": "Returns the sequence of element or attribute nodes with an IDREF value matching the value of one or more of the ID values supplied in $arg", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-idref", + "examples": [], + "name": "idref()", + "output": "node*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read local name from", + "type": "node()?" + } + ], + "description": "Returns the local part of the name of $arg as an xs:string that is either the zero-length string, or has the lexical form of an xs:NCName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-local-name", + "examples": [ + { + "command": "local-name(//u:UserList[1])", + "output": "UserList" + } + ], + "name": "local-name()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read name from", + "type": "node()?" + } + ], + "description": "Returns the name of a node, as an xs:string that is either the zero-length string, or has the lexical form of an xs:QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-name", + "examples": [ + { + "command": "name(//u:UserList[1])", + "output": "u:UserList" + } + ], + "name": "name()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read namespace uri from", + "type": "node()?" + } + ], + "description": "Returns the namespace URI part of the name of $arg, as an xs:anyURI value.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-namespace-uri", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri(//u:UserList[1])" + } + ], + "name": "namespace-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "node", + "description": "Node to check if nilled" + } + ], + "description": "Returns true for an element that is nilled", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-nilled", + "examples": [ + { + "output": "false", + "command": "nilled(/u:root)" + } + ], + "name": "nilled()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "node", + "description": "Node to getName from" + } + ], + "description": "Returns the name of a node", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-node-name", + "examples": [ + { + "command": "node-name(/u:root)", + "output": "u:root" + } + ], + "name": "node-name()", + "output": "QNname" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read path from", + "type": "node()?" + } + ], + "description": "Returns a path expression that can be used to select the supplied node relative to the root of its containing document.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-path", + "examples": [ + { + "output": "/Q{http://www.release11.com/schemas/Sample.xsd}root[1]/Q{http://www.release11.com/schemas/Sample.xsd}UserList[1]", + "command": "path(//u:UserList[1])" + } + ], + "name": "path()", + "output": "string()?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read namespace uri from", + "type": "node()?" + } + ], + "description": "Returns the root of the tree to which $arg belongs. This will usually, but not necessarily, be a document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-root", + "examples": [], + "name": "root()", + "output": "node()?" + } + ], + "name": "Node-Set" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "description": "Number to get absolute value from", + "type": "numeric?" + } + ], + "description": "Returns the absolute value of argument", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-abs", + "examples": [ + { + "output": "10.5", + "command": "abs(-10.5)" + } + ], + "name": "abs()", + "output": "numeric?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Number to round upwards", + "type": "numeric?" + } + ], + "description": "Rounds argument upwards to a whole number.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-ceiling", + "examples": [ + { + "output": "11", + "command": "ceiling(10.5)" + } + ], + "name": "ceiling()", + "output": "numeric?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Number to round downwards", + "type": "numeric?" + } + ], + "description": "Rounds argument downwards to a whole number.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-floor", + "examples": [ + { + "output": "10", + "command": "floor(10.5)" + } + ], + "name": "floor()", + "output": "numeric?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any?", + "description": "Data to parse as number" + } + ], + "description": "Returns the value indicated by argument or, if argument is not specified, the context item after atomization, converted to an double.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-number", + "examples": [ + { + "output": "NaN", + "command": "number(//u:UserList[1]/u:User[1]/u:Name)" + }, + { + "output": "2137", + "command": "number(\"2137\")" + } + ], + "name": "number()", + "output": "double" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Number to round", + "type": "numeric?" + }, + { + "name": "$precision", + "type": "integer?", + "description": "precision for rounding" + } + ], + "description": "Rounds a value to a specified number of decimal places, rounding upwards if two such values are equally near.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-round", + "examples": [ + { + "output": "2", + "command": "round(2.49999)" + }, + { + "output": "1.13", + "command": "round(1.125,2)" + } + ], + "name": "round()", + "output": "numeric?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Number to round", + "type": "numeric?" + }, + { + "name": "$precision", + "type": "integer?", + "description": "precision for rounding" + } + ], + "description": "Rounds a value to a specified number of decimal places, rounding to make the last digit even if two such values are equally near.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-round-half-to-even", + "examples": [ + { + "output": "0", + "command": "round-half-to-even(0.5)" + }, + { + "output": "35600", + "command": "round-half-to-even(35612.25, -2)" + } + ], + "name": "round-half-to-even()", + "output": "numeric?" + } + ], + "name": "Numeric" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$flags", + "type": "string", + "description": "string to replace searched fragment with" + }, + { + "name": "$input", + "description": "Source string", + "type": "string?" + }, + { + "name": "$pattern", + "description": "regex", + "type": "string" + } + ], + "description": "Analyzes a string using a regular expression, returning an XML structure that identifies which parts of the input string matched or failed to match the regular expression, and in the case of matched substrings, which substrings matched each capturing group in the regular expression.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-analyze-string", + "examples": [ + { + "command": " analyze-string(\"A1,C15,,D24, X50,\", \"([A-Z])([0-9]+)\") ", + "output": "A1,C15,,D24, X50," + } + ], + "name": "analyze-string()", + "output": "element" + }, + { + "arguments": [ + { + "name": "$comparand1", + "description": "First comparand", + "type": "string?" + }, + { + "name": "$comparand2", + "description": "Second comparand", + "type": "string?" + } + ], + "description": "Returns true if two strings are equal, considered codepoint-by-codepoint.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-codepoint-equal", + "examples": [ + { + "command": "codepoint-equal(\"abcd\", \"abcd\")", + "output": "true" + }, + { + "command": "codepoint-equal(\"abcd\", \"abcd \")", + "output": "false" + } + ], + "name": "codepoint-equal()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Codepoints", + "type": "integer*" + } + ], + "description": "Creates an String from a sequence of codepoints.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-codepoints-to-string", + "examples": [ + { + "command": "codepoints-to-string(0)", + "output": "FOCH0001" + }, + { + "output": "( ͡° ͜ʖ ͡°)", + "command": "codepoints-to-string((40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41))" + } + ], + "name": "codepoints-to-string()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "Rules of collation", + "type": "string?" + }, + { + "name": "$comparand1", + "description": "First comparand", + "type": "string?" + }, + { + "name": "$comparand2", + "description": "Second comparand", + "type": "string?" + } + ], + "description": "Returns -1, 0, or 1, depending on whether $comparand1 collates before, equal to, or after $comparand2 according to the rules of a selected collation.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-compare", + "examples": [ + { + "output": "0", + "command": "compare('abc', 'abc')" + }, + { + "output": "1", + "command": "compare('Strassen', 'Straße')" + } + ], + "name": "compare()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg1", + "type": "any?", + "description": "First element to concat" + }, + { + "name": "$arg1", + "type": "any?", + "description": "Second element to concat" + }, + { + "name": "...", + "type": "any*", + "description": "Other elements to concat" + } + ], + "description": "Returns the concatenation of the string values of the arguments.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-concat", + "examples": [ + { + "command": "concat('un', 'grateful')", + "output": "ungrateful" + }, + { + "command": "concat('release11',' web',' tools')", + "output": "release11 web tools" + } + ], + "name": "concat()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns true if the string $arg1 contains $arg2 as a substring, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-contains", + "examples": [ + { + "command": "contains(\"release11Tools\",\"Tools\")", + "output": "true" + } + ], + "name": "contains()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns true if the string $arg1 contains $arg2 as a trailing substring, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-ends-with", + "examples": [ + { + "command": "ends-with(\"release11Tools\",\"ols\")", + "output": "true" + } + ], + "name": "ends-with()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$lang", + "description": "language to represent number", + "type": "string?" + }, + { + "name": "$picture", + "description": "format to represent number", + "type": "string" + }, + { + "name": "$value", + "description": "integer value to format", + "type": "integer?" + } + ], + "description": "Formats an integer according to a given picture string, using the conventions of a given natural language if specified.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-format-integer", + "examples": [ + { + "command": "format-integer(123, 'w')", + "output": "one hundred and twenty-three" + }, + { + "output": "21st", + "command": "format-integer(21, '1;o', 'en')" + } + ], + "name": "format-integer()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$decimal-format-name", + "description": "language to represent number", + "type": "string?" + }, + { + "name": "$picture", + "description": "format to represent number", + "type": "string" + }, + { + "name": "$value", + "description": "numeric value to format", + "type": "numeric?" + } + ], + "description": "Returns a string containing a number formatted according to a given picture string, taking account of decimal formats specified in the static context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-format-number", + "examples": [ + { + "output": "12,345.60", + "command": "format-number(12345.6, '#,###.00')" + }, + { + "output": "-006", + "command": "format-number(-6, '000')" + } + ], + "name": "format-integer()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + } + ], + "description": "Converts a string to lower case.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-lower-case", + "examples": [ + { + "command": "lower-case(\"RELEASE11 TOOLS\")", + "output": "release11 tools" + } + ], + "name": "lower-case()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$flags", + "description": "regex flags", + "type": "string" + }, + { + "name": "$input", + "description": "Source string", + "type": "string?" + }, + { + "name": "$pattern", + "description": "regex", + "type": "string" + } + ], + "description": "Returns true if the supplied string matches a given regular expression.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-matches", + "examples": [ + { + "command": "matches(\"release11Tools\",\"^.*11T.*$\")", + "output": "true" + } + ], + "name": "matches()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + }, + { + "name": "$normalizationForm", + "description": "Normalization form", + "type": "string" + } + ], + "description": "Returns the value of $arg after applying Unicode normalization.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-normalize-unicode", + "examples": [ + { + "command": "normalize-unicode(\"release11Tools\",\"NFC\")", + "output": "release11Tools" + } + ], + "name": "normalize-unicode()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$input", + "description": "Source string", + "type": "string?" + }, + { + "name": "$pattern", + "description": "fragment to replace", + "type": "string" + }, + { + "name": "$replacement", + "type": "string", + "description": "string to replace searched fragment with" + } + ], + "description": "Returns a string produced from the input string by replacing any substrings that match a given regular expression with a supplied replacement string.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-replace", + "examples": [ + { + "output": "release 11 WebTools", + "command": "replace(\"release11Tools\",\"11T.*\",\" 11 WebTools\")" + } + ], + "name": "replace()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns true if the string $arg1 contains $arg2 as a leading substring, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-starts-with", + "examples": [ + { + "command": "starts-with(\"release11Tools\",\"rel\")", + "output": "true" + } + ], + "name": "starts-with()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item", + "description": "Item to represent as String" + } + ], + "description": "Returns the string value of an item", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-string", + "examples": [ + { + "output": "\"23\"", + "command": "string(23)" + }, + { + "output": "John", + "command": "string(/u:root/u:UserList[1]/u:User[last()]/u:Name)" + } + ], + "name": "string()", + "output": "String" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Stings to join", + "type": "string*" + }, + { + "name": "$arg2", + "description": "Separator", + "type": "string" + } + ], + "description": "Returns a string created by concatenating the items in a sequence, with a defined separator between adjacent items.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-concat", + "examples": [ + { + "output": "Now is the time ...", + "command": "string-join(('Now', 'is', 'the', 'time', '...'), ' ')" + }, + { + "output": "release11%%web%%tools", + "command": "string-join(('release11','web','tools'),'%%')" + } + ], + "name": "string-join()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + } + ], + "description": "Returns the number of characters in a string.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-string-length", + "examples": [ + { + "output": "45", + "command": "string-length(\"Harp not on that string, madam; that is past.\")" + }, + { + "output": "16", + "command": "string-length(\"Release 11 tools\")" + } + ], + "name": "string-length()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "String value", + "type": "string?" + } + ], + "description": "Returns the sequence of codepoints that constitute an string value.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-string-to-codepoints", + "examples": [ + { + "output": "(72, 101, 108, 108, 111)", + "command": "string-to-codepoints('Hello')" + }, + { + "output": "(40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41)", + "command": "string-to-codepoints('( ͡° ͜ʖ ͡°)')" + } + ], + "name": "string-to-codepoints()", + "output": "integer*" + }, + { + "arguments": [ + { + "name": "$length", + "type": "double", + "description": "length to substring" + }, + { + "name": "$sourceString", + "description": "Source string", + "type": "string?" + }, + { + "name": "$start", + "type": "double", + "description": "start index" + } + ], + "description": "Returns the portion of the value of $sourceString beginning at the position indicated by the value of $start and continuing for the number of ·characters· indicated by the value of $length.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-substring", + "examples": [ + { + "output": "car", + "command": "substring(\"motor car\", 6)" + }, + { + "output": "Release 11 tools <3", + "command": "substring(\"Release 11 tools <3 unnecesary words\",1,19)" + } + ], + "name": "substring()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns the part of $arg1 that follows the first occurrence of $arg2, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-substring-after", + "examples": [ + { + "output": "ease11Tools", + "command": "substring-after(\"release11Tools\",\"rel\")" + } + ], + "name": "substring-after()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns the part of $arg1 that precedes the first occurrence of $arg2, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-substring-before", + "examples": [ + { + "output": "release11To", + "command": "substring-before(\"release11Tools\",\"ols\")" + } + ], + "name": "substring-before()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$flags", + "type": "string", + "description": "string to replace searched fragment with" + }, + { + "name": "$input", + "description": "Source string", + "type": "string?" + }, + { + "name": "$pattern", + "description": "fragment to replace", + "type": "string" + } + ], + "description": "Returns a sequence of strings constructed by splitting the input wherever a separator is found; the separator is any substring that matches a given regular expression.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-tokenize", + "examples": [ + { + "output": "release\nTools", + "command": "tokenize(\"release11Tools\",\"11\")" + } + ], + "name": "tokenize()", + "output": "string*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + }, + { + "name": "$mapString", + "type": "string", + "description": "string to map" + }, + { + "name": "$transString", + "type": "string", + "description": "transition string" + } + ], + "description": "Returns the value of $arg modified by replacing or removing individual characters.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-translate", + "examples": [ + { + "output": "BAr", + "command": "translate(\"bar\",\"abc\",\"ABC\")" + } + ], + "name": "translate()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + } + ], + "description": "Converts a string to upper case.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-30/#func-upper-case", + "examples": [ + { + "output": "RELEASE11 TOOLS", + "command": "upper-case(\"release11 tools\")" + } + ], + "name": "upper-case()", + "output": "string" + } + ], + "name": "String" + } +] \ No newline at end of file diff --git a/Frontend/src/assets/tooltips/xpath/xpath31.json b/Frontend/src/assets/tooltips/xpath/xpath31.json new file mode 100644 index 0000000..1f3d91f --- /dev/null +++ b/Frontend/src/assets/tooltips/xpath/xpath31.json @@ -0,0 +1,3328 @@ +[ + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence of arguments" + } + ], + "description": "Computes the effective boolean value of the sequence $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-boolean", + "examples": [ + { + "command": "boolean(\"true\")", + "output": "true" + } + ], + "name": "boolean()", + "output": "boolean" + }, + { + "arguments": [], + "description": "Returns the xs:boolean value false.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-false", + "examples": [ + { + "output": "false", + "command": "false()" + } + ], + "name": "false()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence of arguments" + } + ], + "description": "Returns true if the effective boolean value of $arg is false, or false if it is true", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-not", + "examples": [ + { + "output": "false", + "command": "not(\"true\")" + } + ], + "name": "not()", + "output": "boolean" + }, + { + "arguments": [], + "description": "Returns the xs:boolean value true.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-true", + "examples": [ + { + "output": "true", + "command": "true()" + } + ], + "name": "true()", + "output": "boolean" + } + ], + "name": "Boolean" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "sequence" + } + ], + "description": "Returns the average of the values in the input sequence $arg, that is, the sum of the values divided by the number of values.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-avg", + "examples": [ + { + "output": "10", + "command": "avg( (5,10,15) )" + } + ], + "name": "avg()", + "output": "any?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence" + } + ], + "description": "Returns the number of items in a sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-count", + "examples": [ + { + "output": "2", + "command": "count( ('release','11') )" + } + ], + "name": "count()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "collation", + "type": "string?" + }, + { + "name": "$parameter1", + "description": "first sequence", + "type": "item()*" + }, + { + "name": "$parameter2", + "type": "item()*", + "description": "second sequence" + } + ], + "description": "This function assesses whether two sequences are deep-equal to each other. To be deep-equal, they must contain items that are pairwise deep-equal", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-deep-equal", + "examples": [ + { + "command": "deep-equal( ('release','11') , ('release','11') )", + "output": "true" + } + ], + "name": "deep-equal()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "base sequence" + }, + { + "name": "$collation", + "description": "collation", + "type": "string?" + } + ], + "description": "Returns the values that appear in a sequence, with duplicates eliminated.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-distinct-values", + "examples": [ + { + "output": "('release','11','tools')", + "command": "distinct-values(('release','release','11','tools'))" + } + ], + "name": "distinct-values()", + "output": "any()*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input items", + "type": "item()*" + } + ], + "description": "Returns true if the argument is the empty sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-empty", + "examples": [ + { + "command": "empty(//u:UserList[1]/u:User[1111])", + "output": "true" + } + ], + "name": "empty()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence" + } + ], + "description": "Returns $arg if it contains exactly one item. Otherwise, raises an error.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-exactly-one", + "examples": [ + { + "command": "exactly-one( ('release','11') )", + "output": "Raises an error" + } + ], + "name": "exactly-one()", + "output": "item" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input items", + "type": "item()*" + } + ], + "description": "Returns true if the argument is a non-empty sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-empty", + "examples": [ + { + "command": "exists(//u:UserList[1]/u:User[1111])", + "output": "false" + } + ], + "name": "exists()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input items", + "type": "item()*" + } + ], + "description": "Returns the first item in a sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-head", + "examples": [ + { + "output": "First item in UserList with childrens", + "command": "head(//u:UserList)" + } + ], + "name": "head()", + "output": "item()?" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "collation", + "type": "string?" + }, + { + "name": "$search", + "type": "any", + "description": "item to find" + }, + { + "name": "$seq", + "type": "any()*", + "description": "base sequence" + } + ], + "description": "Returns a sequence of positive integers giving the positions within the sequence $seq of items that are equal to $search.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-index-of", + "examples": [ + { + "output": "(1,2)", + "command": "index-of(('release','release','11','tools'),'release')" + } + ], + "name": "index-of()", + "output": "integer*" + }, + { + "arguments": [ + { + "name": "$nodes", + "description": "input nodes", + "type": "node()*" + } + ], + "description": "Returns every node within the input sequence that is not an ancestor of another member of the input sequence; the nodes are returned in document order with duplicates eliminated.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-innermost", + "examples": [ + { + "command": "innermost(//u:UserList[1])", + "output": "node with childrens" + } + ], + "name": "innermost()", + "output": "node()*" + }, + { + "arguments": [ + { + "name": "$inserts", + "type": "item()*", + "description": "itemst to insert" + }, + { + "name": "$position", + "type": "integer", + "description": "position where insert data" + }, + { + "name": "$target", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Returns a sequence constructed by inserting an item or a sequence of items at a given position within an existing sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-insert-before", + "examples": [ + { + "output": "First UserList with 'hello' on the start", + "command": "insert-before(//u:UserList[1],1,\"hello\")" + } + ], + "name": "insert-before()", + "output": "item()*" + }, + { + "arguments": [], + "description": "Returns the context size from the dynamic context", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-last", + "examples": [ + { + "command": "//u:UserList[last()]", + "output": "Last UserList" + } + ], + "name": "last()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "sequence" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns a value that is equal to the highest value appearing in the input sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-max", + "examples": [ + { + "output": "15", + "command": "max( (5,10,15) )" + } + ], + "name": "max()", + "output": "any?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "sequence" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns a value that is equal to the lowest value appearing in the input sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-min", + "examples": [ + { + "output": "5", + "command": "min( (5,10,15) )" + } + ], + "name": "min()", + "output": "any?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence" + } + ], + "description": "Returns $arg if it contains one or more items. Otherwise, raises an error.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-one-or-more", + "examples": [ + { + "output": "('release','11')", + "command": "one-or-more( ('release','11') )" + } + ], + "name": "one-or-more()", + "output": "item+" + }, + { + "arguments": [ + { + "name": "$nodes", + "description": "input nodes", + "type": "node()*" + } + ], + "description": "Returns every node within the input sequence that has no ancestor that is itself a member of the input sequence; the nodes are returned in document order with duplicates eliminated.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-outermost", + "examples": [ + { + "output": "node with childrens", + "command": "outermost(//u:UserList[1]/u:User[1])" + } + ], + "name": "outermost()", + "output": "node()*" + }, + { + "arguments": [], + "description": "Returns the context position from the dynamic context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-position", + "examples": [ + { + "command": "//u:UserList[position() = 2]", + "output": "UserList with index 2" + } + ], + "name": "position()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$position", + "type": "integer", + "description": "position where insert data" + }, + { + "name": "$target", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Returns a new sequence containing all the items of $target except the item at position $position.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-remove", + "examples": [ + { + "output": "First UserList witout second User", + "command": "remove(//u:UserList[1]/*,2)" + } + ], + "name": "remove()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Reverses the order of items in a sequence.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-reverse", + "examples": [ + { + "command": "reverse(//u:UserList[1]/*)", + "output": "Users from first UserList, but in reversed order(from Id=4 to Id=1)" + } + ], + "name": "reverse()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "collation", + "type": "string?" + }, + { + "name": "$input", + "type": "item()*", + "description": "source collection" + }, + { + "name": "$key", + "type": "function(item())*", + "description": "key sort function" + } + ], + "description": "Sorts a supplied sequence, based on the value of a sort key supplied as a function.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-sort", + "examples": [ + { + "output": "(1,-2,5,8,10,-10,10)", + "command": "sort((1, -2, 5, 10, -10, 10, 8), (), abs#1)" + } + ], + "name": "sort()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$length", + "type": "double", + "description": "lenght to subsequence" + }, + { + "name": "$startingLoc", + "type": "double", + "description": "starting location" + }, + { + "name": "$surceSeq", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Returns the contiguous sequence of items in the value of $sourceSeq beginning at the position indicated by the value of $startingLoc and continuing for the number of items indicated by the value of $length.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-subsequence", + "examples": [ + { + "command": "subsequence(//u:UserList[1]/*,3,1)", + "output": "User on position 3" + } + ], + "name": "subsequence()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any()*", + "description": "sequence" + }, + { + "name": "$zero", + "type": "any?", + "description": "value to return when sum is 0" + } + ], + "description": "Returns a value obtained by adding together the values in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-sum", + "examples": [ + { + "output": "30", + "command": "sum( (5,10,15) )" + } + ], + "name": "sum()", + "output": "any?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input items", + "type": "item()*" + } + ], + "description": "Returns all but the first item in a sequence", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-tail", + "examples": [ + { + "command": "tail(//u:UserList)", + "output": "UserList items without first element" + } + ], + "name": "tail()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$surceSeq", + "description": "base sequence", + "type": "item()*" + } + ], + "description": "Returns the items of $sourceSeq in an implementation dependent order.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-unordered", + "examples": [ + { + "command": "unordered(//u:UserList[1]/*)", + "output": "Users from UserList" + } + ], + "name": "unordered()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "sequence" + } + ], + "description": "Returns $arg if it contains zero or one items. Otherwise, raises an error.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-zero-or-one", + "examples": [ + { + "output": "raises an error", + "command": "zero-or-one( ('release','11') )" + } + ], + "name": "zero-or-one()", + "output": "item?" + } + ], + "name": "Collections" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + }, + { + "name": "$timezone", + "type": "dayTimeDuration?", + "description": "timezone" + } + ], + "description": "Adjusts an xs:date value to a specific timezone, or to no timezone at all; the result is the date in the target timezone that contains the starting instant of the supplied date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-adjust-date-to-timezone", + "examples": [ + { + "output": "2002-03-07-10:00", + "command": "adjust-date-to-timezone(xs:date(\"2002-03-07\"), $tz-10)" + } + ], + "name": "adjust-date-to-timezone()", + "output": "date?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "datetime", + "type": "datetime?" + }, + { + "name": "$timezone", + "type": "dayTimeDuration?", + "description": "timezone" + } + ], + "description": "Adjusts an xs:dateTime value to a specific timezone, or to no timezone at all.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-adjust-dateTime-to-timezone", + "examples": [ + { + "command": "adjust-dateTime-to-timezone(xs:dateTime('2002-03-07T10:00:00'), $tz-10)", + "output": "dateTime('2002-03-07T10:00:00-10:00')" + } + ], + "name": "adjust-dateTime-to-timezone()", + "output": "dateTime?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + }, + { + "name": "$timezone", + "type": "dayTimeDuration?", + "description": "timezone" + } + ], + "description": "Adjusts an xs:time value to a specific timezone, or to no timezone at all.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-adjust-time-to-timezone", + "examples": [ + { + "output": "10:00:00-10:00", + "command": "adjust-time-to-timezone(xs:time(\"10:00:00\"), $tz-10)" + } + ], + "name": "adjust-time-to-timezone()", + "output": "time?" + }, + { + "arguments": [], + "description": "Returns the current date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-current-date", + "examples": [ + { + "output": "2023-08-17Z", + "command": "current-date()" + } + ], + "name": "current-date()", + "output": "date" + }, + { + "arguments": [], + "description": "Returns the current date and time (with timezone).", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-current-dateTime", + "examples": [ + { + "output": "2023-08-17T10:34:53.526001419Z", + "command": "current-dateTime()" + } + ], + "name": "current-dateTime()", + "output": "dateTimeStamp" + }, + { + "arguments": [], + "description": "Returns the current time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-current-time", + "examples": [ + { + "output": "10:36:53.154103936Z", + "command": "current-time()" + } + ], + "name": "current-time()", + "output": "time" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + }, + { + "name": "$arg2", + "description": "time", + "type": "time?" + } + ], + "description": "Returns an xs:dateTime value created by combining an xs:date and an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-dateTime", + "examples": [ + { + "output": "1999-12-31T12:00:00", + "command": "dateTime(xs:date(\"1999-12-31\"), xs:time(\"12:00:00\"))" + } + ], + "name": "dateTime()", + "output": "dateTime" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + } + ], + "description": "Returns the day component of an xs:date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-day-from-date", + "examples": [ + { + "output": "31", + "command": "day-from-date(xs:date(\"1999-05-31\"))" + } + ], + "name": "day-from-date()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the day component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-day-from-dateTime", + "examples": [ + { + "output": "31", + "command": "day-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "day-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of days in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-days-from-duration", + "examples": [ + { + "output": "3", + "command": "days-from-duration(xs:yearMonthDuration(\"P3DT10H\"))" + } + ], + "name": "days-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$calendar", + "description": "calendar", + "type": "string?" + }, + { + "name": "$language", + "description": "language", + "type": "string?" + }, + { + "name": "$picture", + "description": "picture", + "type": "string?" + }, + { + "name": "$place", + "description": "place", + "type": "string?" + }, + { + "name": "$value", + "description": "date", + "type": "date?" + } + ], + "description": "Returns a string containing an xs:date value formatted for display.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-format-date", + "examples": [], + "name": "format-date()", + "output": "string?" + }, + { + "arguments": [ + { + "name": "$calendar", + "description": "calendar", + "type": "string?" + }, + { + "name": "$language", + "description": "language", + "type": "string?" + }, + { + "name": "$picture", + "description": "picture", + "type": "string?" + }, + { + "name": "$place", + "description": "place", + "type": "string?" + }, + { + "name": "$value", + "description": "datetime", + "type": "dateTime?" + } + ], + "description": "Returns a string containing an xs:dateTime value formatted for display.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-format-dateTime", + "examples": [], + "name": "format-dateTime()", + "output": "string?" + }, + { + "arguments": [ + { + "name": "$calendar", + "description": "calendar", + "type": "string?" + }, + { + "name": "$language", + "description": "language", + "type": "string?" + }, + { + "name": "$picture", + "description": "picture", + "type": "string?" + }, + { + "name": "$place", + "description": "place", + "type": "string?" + }, + { + "name": "$value", + "description": "time", + "type": "time?" + } + ], + "description": "RReturns a string containing an xs:time value formatted for display.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-format-time", + "examples": [], + "name": "format-time()", + "output": "string?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the hours component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-hours-from-dateTime", + "examples": [ + { + "output": "13", + "command": "hours-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "hours-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of hours in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-days-from-duration", + "examples": [ + { + "output": "10", + "command": "days-from-duration(xs:yearMonthDuration(\"P3DT10H\"))" + } + ], + "name": "hours-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + } + ], + "description": "Returns the hours component of an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-hours-from-time", + "examples": [ + { + "output": "21", + "command": "hours-from-time(xs:time(\"21:37:37\"))" + } + ], + "name": "hours-from-time()", + "output": "integer?" + }, + { + "arguments": [], + "description": "Returns the value of the implicit timezone property from the dynamic context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-implicit-timezone", + "examples": [ + { + "command": "implicit-timezone()", + "output": "PT0S" + } + ], + "name": "implicit-timezone()", + "output": "dayTimeDuration" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the minutes component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-minutes-from-dateTime", + "examples": [ + { + "output": "20", + "command": "minutes-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "minutes-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of minutes in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-minutes-from-duration", + "examples": [ + { + "output": "0", + "command": "minutes-from-duration(xs:yearMonthDuration(\"P3DT10H\"))" + } + ], + "name": "minutes-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + } + ], + "description": "Returns the minutes component of an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-minutes-from-time", + "examples": [ + { + "output": "37", + "command": "minutes-from-time(xs:time(\"21:37:37\"))" + } + ], + "name": "minutes-from-time()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + } + ], + "description": "Returns the month component of an xs:date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-month-from-date", + "examples": [ + { + "output": "5", + "command": "month-from-date(xs:date(\"1999-05-31\"))" + } + ], + "name": "month-from-date()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the month component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-month-from-dateTime", + "examples": [ + { + "output": "5", + "command": "month-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "month-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of months in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-months-from-duration", + "examples": [ + { + "output": "3", + "command": "months-from-duration(xs:yearMonthDuration(\"P20Y15M\"))" + } + ], + "name": "months-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the seconds component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-seconds-from-dateTime", + "examples": [ + { + "output": "1", + "command": "seconds-from-dateTime(xs:dateTime(\"1999-05-31T13:20:01-05:00\"))" + } + ], + "name": "seconds-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of seconds in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-seconds-from-duration", + "examples": [ + { + "output": "12.5", + "command": "seconds-from-duration(xs:yearMonthDuration(\"P3DT10H12.5S\"))" + } + ], + "name": "seconds-from-duration()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + } + ], + "description": "Returns the seconds component of an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-seconds-from-time", + "examples": [ + { + "output": "37", + "command": "seconds-from-time(xs:time(\"21:37:37\"))" + } + ], + "name": "seconds-from-time()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + } + ], + "description": "Returns the timezone component of an xs:date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-timezone-from-date", + "examples": [ + { + "output": "-PT5H", + "command": "timezone-from-date(xs:date(\"1999-05-31-05:00\"))" + } + ], + "name": "timezone-from-date()", + "output": "dayTimeDuration?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the timezone component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-timezone-from-dateTime", + "examples": [ + { + "output": "-PT5H", + "command": "timezone-from-dateTime(xs:dateTime(\"1999-05-31T13:20:01-05:00\"))" + } + ], + "name": "timezone-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "time", + "type": "time?" + } + ], + "description": "Returns the timezone component of an xs:time.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-timezone-from-time", + "examples": [ + { + "output": "-PT5H", + "command": "timezone-from-time(xs:time(\"21:37:37-05:00\"))" + } + ], + "name": "timezone-from-time()", + "output": "dayTimeDuration?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "date?" + } + ], + "description": "Returns the year component of an xs:date.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-year-from-date", + "examples": [ + { + "output": "1999", + "command": "year-from-date(xs:date(\"1999-05-31\"))" + } + ], + "name": "year-from-date()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "date", + "type": "dateTime?" + } + ], + "description": "Returns the year component of an xs:dateTime.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-year-from-dateTime", + "examples": [ + { + "output": "1999", + "command": "year-from-dateTime(xs:dateTime(\"1999-05-31T13:20:00-05:00\"))" + } + ], + "name": "year-from-dateTime()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "duration", + "type": "duration()" + } + ], + "description": "Returns the number of years in a duration.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-years-from-duration", + "examples": [ + { + "output": "21", + "command": "years-from-duration(xs:yearMonthDuration(\"P20Y15M\"))" + } + ], + "name": "years-from-duration()", + "output": "integer" + } + ], + "name": "Date/Time" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$code", + "description": "Error code", + "type": "QName" + }, + { + "name": "$description", + "description": "Error description", + "type": "string" + }, + { + "name": "$eror-object", + "description": "Arbitrary value used to convey additional information about the error", + "type": "item()*" + } + ], + "description": "Calling the error function raises an application-defined error.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-error", + "examples": [ + { + "output": "Error signalled by application call on error()", + "command": "error()" + } + ], + "name": "error()", + "output": "Throws an error" + }, + { + "arguments": [ + { + "name": "$label", + "type": "string", + "description": "The label to put in tracing data" + }, + { + "name": "$value", + "type": "item()*", + "description": "The value to returns unchanged" + } + ], + "description": "Provides an execution trace intended to be used in debugging queries.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-trace", + "examples": [ + { + "output": "Returns data, if something changes returns label with value", + "command": "trace(//u:UserList[1]/u:User[last()]/u:DateOfDeath, 'the value is:')" + } + ], + "name": "trace()", + "output": "item()*" + } + ], + "name": "Error" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$array", + "description": "array of arguments", + "type": "array(*)" + }, + { + "name": "$function", + "description": "function to make call", + "type": "function(*)" + } + ], + "description": "Makes a dynamic call on a function with an argument list supplied in the form of an array. ", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-apply", + "examples": [ + { + "output": "abc", + "command": "apply(fn:concat#3, [\"a\", \"b\", \"c\"])" + } + ], + "name": "apply()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on every item in source collection", + "type": "function(item()*)" + }, + { + "name": "$seq", + "type": "item()*", + "description": "source collection" + } + ], + "description": "Returns those items from the sequence $seq for which the supplied function $f returns true.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-filter", + "examples": [ + { + "output": "(2, 4, 6, 8, 10)", + "command": "filter(1 to 10, function($a) {$a mod 2 = 0})" + } + ], + "name": "filter()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on item in squence", + "type": "function(item()*)" + }, + { + "name": "$seq", + "type": "item()*", + "description": "source collection" + }, + { + "name": "$zero", + "description": "if source collection is empty", + "type": "item()*" + } + ], + "description": "Processes the supplied sequence from left to right, applying the supplied function repeatedly to each item in turn, together with an accumulated result value.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-fold-left", + "examples": [ + { + "output": "210", + "command": "fold-left((2,3,5,7), 1, function($a, $b) { $a * $b })" + } + ], + "name": "fold-left()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on item in squence", + "type": "function(item()*)" + }, + { + "name": "$seq", + "type": "item()*", + "description": "source collection" + }, + { + "name": "$zero", + "description": "if source collection is empty", + "type": "item()*" + } + ], + "description": "Processes the supplied sequence from right to left, applying the supplied function repeatedly to each item in turn, together with an accumulated result value.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-fold-right", + "examples": [ + { + "output": "210", + "command": "fold-right((2,3,5,7), 1, function($a, $b) { $a * $b })" + } + ], + "name": "fold-right()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on every item in source collection", + "type": "function(item()*)" + }, + { + "name": "$seq", + "type": "item()*", + "description": "source collection" + } + ], + "description": "Applies the function item $f to every item from the sequence $seq in turn, returning the concatenation of the resulting sequences in order.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-for-each", + "examples": [ + { + "output": "(1, 4, 9, 16, 25)", + "command": "for-each(1 to 5, function($a) { $a * $a })" + } + ], + "name": "for-each()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$f", + "description": "function to apply on items in squence", + "type": "function(item()*)" + }, + { + "name": "$seq1", + "description": "first sequence", + "type": "item()*" + }, + { + "name": "$seq2", + "type": "item()*", + "description": "second sequence" + } + ], + "description": "Applies the function item $f to successive pairs of items taken one from $seq1 and one from $seq2, returning the concatenation of the resulting sequences in order.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-for-each-pair", + "examples": [ + { + "output": "(\"ax\", \"by\", \"cz\")", + "command": "for-each-pair((\"a\", \"b\", \"c\"), (\"x\", \"y\", \"z\"), concat#2)" + } + ], + "name": "for-each-pair()", + "output": "item()*" + }, + { + "arguments": [ + { + "name": "$func", + "description": "function", + "type": "function(*)" + } + ], + "description": "Returns the arity of the function identified by a function item.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-function-arity", + "examples": [ + { + "output": "2", + "command": "function-arity(substring#2)" + } + ], + "name": "function-arity()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arity", + "type": "integer", + "description": "number of arguments" + }, + { + "name": "$name", + "description": "function Name", + "type": "QName" + } + ], + "description": "Returns the function having a given name and arity, if there is one.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-function-lookup", + "examples": [], + "name": "function-lookup()", + "output": "function(*)?" + }, + { + "arguments": [ + { + "name": "$func", + "description": "function", + "type": "function(*)" + } + ], + "description": "Returns the name of the function identified by a function item.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-function-name", + "examples": [ + { + "output": "fn:substring", + "command": "function-name(substring#2)" + } + ], + "name": "function-name()", + "output": "QName?" + } + ], + "name": "Loop/Conditional" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$paramQName", + "type": "QName parameter" + }, + { + "name": "$paramURI", + "type": "string?", + "description": "URI Parameter" + } + ], + "description": "Constructs an xs:QName value given a namespace URI and a lexical QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-QName", + "examples": [ + { + "command": "QName(\"http://www.release11.com/schemas/Sample.xsd\", \"u:User\")", + "output": "u:User" + } + ], + "name": "QName()", + "output": "QName" + }, + { + "arguments": [], + "description": "Returns a list of environment variable names that are suitable for passing to environment-variable()", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-available-environment-variables", + "examples": [ + { + "output": "('PATH','HOSTNAME','JAVA_HOME','PWD','JAVA_VERSION','LANG','HOME')", + "command": "available-environment-variables()" + } + ], + "name": "available-environment-variables()", + "output": "string()*" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "Collation", + "type": "string?" + }, + { + "name": "$key", + "description": "Collation key string value", + "type": "string" + } + ], + "description": "Given a string value and a collation, generates an internal value called a collation key", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-collation-key", + "examples": [ + { + "output": "AAByAABhAABuAABkAABvAABtAABrAABlAAB5", + "command": "collation-key(\"randomkey\")" + } + ], + "name": "collation-key()", + "output": "base64binary" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "collection uri", + "type": "string()?" + } + ], + "description": "Returns a sequence of nodes representing a collection of documents indentified by a collection URI; or a default collection if no URI is supplied.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-collection", + "examples": [ + { + "command": "collection()", + "output": "No default collection has been defined" + } + ], + "name": "collection()", + "output": "boolean" + }, + { + "arguments": [], + "description": "Returns the value of the default collation property from the static context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-default-collation", + "examples": [ + { + "command": "default-collation()", + "output": "http://www.w3.org/2005/xpath-functions/collation/codepoint" + } + ], + "name": "default-collation()", + "output": "string" + }, + { + "arguments": [], + "description": "Returns the value of the default language property from the dynamic context. ", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-default-language", + "examples": [ + { + "command": "default-language()", + "output": "en" + } + ], + "name": "default-language()", + "output": "language" + }, + { + "arguments": [ + { + "name": "$uri", + "type": "string()?", + "description": "URI" + } + ], + "description": "Retrieves a document using a URI supplied as an xs:string, and returns the corresponding document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-doc", + "examples": [ + { + "command": "doc(\"\")", + "output": "xml source" + } + ], + "name": "doc()", + "output": "document-node?" + }, + { + "arguments": [ + { + "name": "$uri", + "type": "string()?", + "description": "URI" + } + ], + "description": "The function returns true if and only if the function call fn:doc($uri) would return a document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-doc-available", + "examples": [ + { + "command": "doc-available(\"http://api.nbp.pl/api/cenyzlota/today\")", + "output": "false" + } + ], + "name": "doc-available()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$uri-part", + "type": "string?", + "description": "uri part" + } + ], + "description": "Encodes reserved characters in a string that is intended to be used in the path segment of a URI.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-encode-for-uri", + "examples": [ + { + "command": "encode-for-uri(\"release 11 tools\")", + "output": "release%2011%20tools" + } + ], + "name": "encode-for-uri()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$name", + "description": "enviroment variable name", + "type": "string" + } + ], + "description": "Returns the value of a system environment variable, if it exists.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-environment-variable", + "examples": [ + { + "output": "C.UTF-8", + "command": "environment-variable(\"LANG\")" + } + ], + "name": "environment-variable()", + "output": "string()?" + }, + { + "arguments": [ + { + "name": "$uri", + "type": "string?", + "description": "uri" + } + ], + "description": "Escapes a URI in the same way that HTML user agents handle attribute values expected to contain URIs.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-escape-html-uri", + "examples": [ + { + "command": "escape-html-uri (\"http://www.example.com/00/Weather/CA/Los Angeles#ocean\")", + "output": "http://www.example.com/00/Weather/CA/Los Angeles#ocean" + } + ], + "name": "escape-html-uri()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$element", + "type": "element()", + "description": "scope to get prefix from" + } + ], + "description": "Returns the prefixes of the in-scope namespaces for an element node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-in-scope-prefixes", + "examples": [ + { + "output": "('u','xsi','xml')", + "command": "in-scope-prefixes(//u:UserList[1])" + } + ], + "name": "in-scope-prefixes()", + "output": "string*" + }, + { + "arguments": [ + { + "name": "$iri", + "description": "iri", + "type": "string?" + } + ], + "description": "Converts a string containing an IRI into a URI", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-iri-to-uri", + "examples": [ + { + "output": "http://tools.release11.com/?xpath&%20some%20additional%20data", + "command": "iri-to-uri(\"http://tools.release11.com/?xpath& some additional data\")" + } + ], + "name": "iri-to-uri()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$href", + "description": "href to external JSON document", + "type": "string?" + }, + { + "name": "$options", + "description": "additional options", + "type": "map(*)" + } + ], + "description": "Reads an external resource containing JSON, and returns the result of parsing the resource as JSON.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-json-doc", + "examples": [ + { + "output": "[map{\"data\":\"2023-08-18\",\"cena\":2.5055e2}]", + "command": "json-doc('http://api.nbp.pl/api/cenyzlota/today?format=json')" + } + ], + "name": "json-doc()", + "output": "item()?" + }, + { + "arguments": [ + { + "name": "$json-text", + "description": "JSON string value", + "type": "string?" + }, + { + "name": "$options", + "description": "additional options", + "type": "map(*)" + } + ], + "description": "Parses a string supplied in the form of a JSON text, returning the results in the form of an XML document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-json-to-xml", + "examples": [ + { + "output": "2023-08-182.5055e2", + "command": "json-to-xml('{\"data\":\"2023-08-18\",\"cena\":2.5055e2}')" + } + ], + "name": "json-to-xml()", + "output": "document-node()?" + }, + { + "arguments": [ + { + "name": "$node", + "description": "node to test", + "type": "node()?" + }, + { + "name": "$testlang", + "description": "language", + "type": "string()?" + } + ], + "description": "This function tests whether the language of $node, or the context item if the second argument is omitted, as specified by xml:lang attributes is the same as, or is a sublanguage of, the language specified by $testlang.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-lang", + "examples": [ + { + "output": "false", + "command": "lang('pl',//u:UserList[1])" + } + ], + "name": "lang()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "QName", + "type": "QName?" + } + ], + "description": "Returns the local part of the supplied QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-local-name-from-QName", + "examples": [ + { + "command": "local-name-from-QName(xs:QName(\"u:User\"))", + "output": "User" + } + ], + "name": "local-name-from-QName()", + "output": "NCName" + }, + { + "arguments": [ + { + "name": "$element", + "description": "element where namespace exist", + "type": "element()" + }, + { + "name": "$prefix", + "description": "namespace prefix", + "type": "string?" + } + ], + "description": "Returns the namespace URI of one of the in-scope namespaces for $element, identified by its namespace prefix.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-namespace-uri-for-prefix", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri-for-prefix(\"u\",//u:UserList[1])" + } + ], + "name": "namespace-uri-for-prefix()", + "output": "URI?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "QName", + "type": "QName?" + } + ], + "description": "Returns the namespace URI part of the supplied QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-namespace-uri-from-QName", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri-from-QName(xs:QName(\"u:User\"))" + } + ], + "name": "namespace-uri-from-QName()", + "output": "URI?" + }, + { + "arguments": [ + { + "name": "$json-text", + "type": "string?", + "description": "XML document" + }, + { + "name": "$options", + "description": "additional options", + "type": "map(*)?" + } + ], + "description": "Parses a string supplied in the form of a JSON text, returning the results typically in the form of a map or array.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-parse-json", + "examples": [], + "name": "parse-json()", + "output": "item()?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "string?", + "description": "XML String" + } + ], + "description": "This function takes as input an XML document represented as a string, and returns the document node at the root of an XDM tree representing the parsed document.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-parse-xml", + "examples": [ + { + "command": "parse-xml(unparsed-text('http://api.nbp.pl/api/cenyzlota/today?format=xml'))", + "output": "Parsed as XML data from NBP Api" + } + ], + "name": "parse-xml()", + "output": "document-node(element(*))?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "string?", + "description": "XML Fragment String" + } + ], + "description": "This function takes as input an XML external entity represented as a string, and returns the document node at the root of an XDM tree representing the parsed document fragment.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-parse-xml-fragment", + "examples": [ + { + "output": "data XML, but as XML Document", + "command": "parse-xml-fragment('hello')" + } + ], + "name": "parse-xml-fragment()", + "output": "document-node()?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "QName", + "type": "QName?" + } + ], + "description": "Returns the prefix component of the supplied QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-prefix-from-QName", + "examples": [ + { + "command": "prefix-from-QName(xs:QName(\"u:User\"))", + "output": "u" + } + ], + "name": "prefix-from-QName()", + "output": "NCName" + }, + { + "arguments": [ + { + "name": "$element", + "type": "element" + }, + { + "name": "$qname", + "description": "qname", + "type": "string?" + } + ], + "description": "Returns an xs:QName value (that is, an expanded-QName) by taking an xs:string that has the lexical form of an xs:QName", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-resolve-QName", + "examples": [ + { + "output": "hello", + "command": "resolve-QName(\"hello\", //u:UserList[1]/u:User[1]/u:Name)" + } + ], + "name": "resolve-QName()", + "output": "QName" + }, + { + "arguments": [ + { + "name": "$relative", + "description": "Source string", + "type": "string?" + } + ], + "description": "Resolves a relative IRI reference against an absolute IRI.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-resolve-uri", + "examples": [ + { + "command": " resolve-uri(\"u:User/u:Name\") ", + "output": "u:User/u:Name" + } + ], + "name": "resolve-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "input sequence", + "type": "item()*" + }, + { + "name": "$params", + "type": "element()?", + "description": "parameters" + } + ], + "description": "This function serializes the supplied input sequence $arg, returning the serialized representation of the sequence as a string.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-serialize", + "examples": [ + { + "output": "first users serialized to String", + "command": "serialize(//u:User[1])" + } + ], + "name": "serialize()", + "output": "string" + }, + { + "arguments": [], + "description": "This function returns the value of the Static Base URI property from the static context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-static-base-uri", + "examples": [ + { + "output": "", + "command": "static-base-uri()" + } + ], + "name": "static-base-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$options", + "type": "map(*)", + "description": "XSLT transformation" + } + ], + "description": "Invokes a transformation using a dynamically-loaded XSLT stylesheet.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-transform", + "examples": [], + "name": "transform()", + "output": "map(*)" + }, + { + "arguments": [ + { + "name": "$encoding", + "description": "resource encoding", + "type": "string()?" + }, + { + "name": "$href", + "description": "external resource href", + "type": "string()?" + } + ], + "description": "Reads an external resource (for example, a file) and returns a string representation of the resource.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-unparsed-text", + "examples": [ + { + "command": "unparsed-text(\"https://api.nbp.pl/api/cenyzlota/today?format=xml\")", + "output": "XML data from nbp API" + } + ], + "name": "unparsed-text()", + "output": "string()?" + }, + { + "arguments": [ + { + "name": "$encoding", + "description": "resource encoding", + "type": "string()?" + }, + { + "name": "$href", + "description": "external resource href", + "type": "string()?" + } + ], + "description": "Because errors in evaluating the unparsed-text() function are non-recoverable, these two functions are provided to allow an application to determine whether a call with particular arguments would succeed", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-unparsed-text-available", + "examples": [ + { + "output": "true", + "command": "unparsed-text-available(\"https://api.nbp.pl/api/cenyzlota/today?format=xml\")" + } + ], + "name": "unparsed-text-available()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$encoding", + "description": "resource encoding", + "type": "string()?" + }, + { + "name": "$href", + "description": "external resource href", + "type": "string()?" + } + ], + "description": "reads an external resource (for example, a file) and returns its contents as a sequence of strings, one for each line of text in the string representation of the resource.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-unparsed-text-lines", + "examples": [ + { + "command": "unparsed-text-lines(\"https://api.nbp.pl/api/cenyzlota/today?format=xml\")", + "output": "XML data from nbp API" + } + ], + "name": "unparsed-text-lines()", + "output": "string()*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "collection uri", + "type": "string()?" + } + ], + "description": "Returns a sequence of xs:anyURI values representing the URIs in a resource collection.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-uri-collection", + "examples": [ + { + "output": "No default collection has been defined", + "command": "uri-collection()" + } + ], + "name": "uri-collection()", + "output": "URI*" + }, + { + "arguments": [ + { + "name": "$input", + "type": "node()?", + "description": "XML document" + }, + { + "name": "$options", + "description": "additional options", + "type": "map(*)" + } + ], + "description": "Converts an XML tree, whose format corresponds to the XML representation of JSON defined in this specification, into a string conforming to the JSON grammar.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-xml-to-json", + "examples": [], + "name": "xml-to-json()", + "output": "document-node()?" + } + ], + "name": "Misc" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "description": "node to read base URI", + "type": "node()?" + } + ], + "description": "Returns the base URI of a node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-base-uri", + "examples": [ + { + "output": "", + "command": "base-uri()" + } + ], + "name": "base-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item()*", + "description": "items to get data from" + } + ], + "description": "Returns the result of atomizing a sequence, that is, replacing all nodes in the sequence by their typed values.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-data", + "examples": [ + { + "command": "data(//u:UserList[last()]/*[1])", + "output": "New \n \t Folder \n \t 2023-11-10" + } + ], + "name": "data()", + "output": "any" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read base URI", + "type": "node()?" + } + ], + "description": "Returns the URI of a resource where a document can be found, if available.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-document-uri", + "examples": [ + { + "output": "", + "command": "document-uri()" + } + ], + "name": "document-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "ID Value", + "type": "string*" + }, + { + "name": "$node", + "description": "node", + "type": "node?" + } + ], + "description": "Returns the sequence of element nodes that have an ID value matching the value of one or more of the IDREF values supplied in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-element-with-id", + "examples": [], + "name": "element-with-id()", + "output": "element*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Node to generate id", + "type": "node?" + } + ], + "description": "This function returns a string that uniquely identifies a given node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-generate-id", + "examples": [ + { + "output": "d0e3", + "command": "generate-id(//u:UserList[1])" + } + ], + "name": "generate-id()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$node", + "description": "node to check children", + "type": "node()?" + } + ], + "description": "Returns true if the supplied node has one or more child nodes (of any kind).", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-has-children", + "examples": [ + { + "command": "has-children(//u:UserList[1])", + "output": "true" + } + ], + "name": "has-children()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "ID Value", + "type": "string*" + }, + { + "name": "$node", + "description": "node", + "type": "node?" + } + ], + "description": "Returns the sequence of element nodes that have an ID value matching the value of one or more of the IDREF values supplied in $arg.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-id", + "examples": [], + "name": "id()", + "output": "element*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "ID Value", + "type": "string*" + }, + { + "name": "$node", + "description": "node", + "type": "node?" + } + ], + "description": "Returns the sequence of element or attribute nodes with an IDREF value matching the value of one or more of the ID values supplied in $arg", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-idref", + "examples": [], + "name": "idref()", + "output": "node*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read local name from", + "type": "node()?" + } + ], + "description": "Returns the local part of the name of $arg as an xs:string that is either the zero-length string, or has the lexical form of an xs:NCName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-local-name", + "examples": [ + { + "command": "local-name(//u:UserList[1])", + "output": "UserList" + } + ], + "name": "local-name()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read name from", + "type": "node()?" + } + ], + "description": "Returns the name of a node, as an xs:string that is either the zero-length string, or has the lexical form of an xs:QName.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-name", + "examples": [ + { + "command": "name(//u:UserList[1])", + "output": "u:UserList" + } + ], + "name": "name()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read namespace uri from", + "type": "node()?" + } + ], + "description": "Returns the namespace URI part of the name of $arg, as an xs:anyURI value.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-namespace-uri", + "examples": [ + { + "output": "http://www.release11.com/schemas/Sample.xsd", + "command": "namespace-uri(//u:UserList[1])" + } + ], + "name": "namespace-uri()", + "output": "URI" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "node", + "description": "Node to check if nilled" + } + ], + "description": "Returns true for an element that is nilled", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-nilled", + "examples": [ + { + "output": "false", + "command": "nilled(/u:root)" + } + ], + "name": "nilled()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "node", + "description": "Node to getName from" + } + ], + "description": "Returns the name of a node", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-node-name", + "examples": [ + { + "command": "node-name(/u:root)", + "output": "u:root" + } + ], + "name": "node-name()", + "output": "QNname" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read path from", + "type": "node()?" + } + ], + "description": "Returns a path expression that can be used to select the supplied node relative to the root of its containing document.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-path", + "examples": [ + { + "output": "/Q{http://www.release11.com/schemas/Sample.xsd}root[1]/Q{http://www.release11.com/schemas/Sample.xsd}UserList[1]", + "command": "path(//u:UserList[1])" + } + ], + "name": "path()", + "output": "string()?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "node to read namespace uri from", + "type": "node()?" + } + ], + "description": "Returns the root of the tree to which $arg belongs. This will usually, but not necessarily, be a document node.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-root", + "examples": [], + "name": "root()", + "output": "node()?" + } + ], + "name": "Node-Set" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$arg", + "description": "Number to get absolute value from", + "type": "numeric?" + } + ], + "description": "Returns the absolute value of argument", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-abs", + "examples": [ + { + "output": "10.5", + "command": "abs(-10.5)" + } + ], + "name": "abs()", + "output": "numeric?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Number to round upwards", + "type": "numeric?" + } + ], + "description": "Rounds argument upwards to a whole number.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-ceiling", + "examples": [ + { + "output": "11", + "command": "ceiling(10.5)" + } + ], + "name": "ceiling()", + "output": "numeric?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Number to round downwards", + "type": "numeric?" + } + ], + "description": "Rounds argument downwards to a whole number.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-floor", + "examples": [ + { + "output": "10", + "command": "floor(10.5)" + } + ], + "name": "floor()", + "output": "numeric?" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "any?", + "description": "Data to parse as number" + } + ], + "description": "Returns the value indicated by argument or, if argument is not specified, the context item after atomization, converted to an double.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-number", + "examples": [ + { + "output": "NaN", + "command": "number(//u:UserList[1]/u:User[1]/u:Name)" + }, + { + "output": "2137", + "command": "number(\"2137\")" + } + ], + "name": "number()", + "output": "double" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Number to round", + "type": "numeric?" + }, + { + "name": "$precision", + "type": "integer?", + "description": "precision for rounding" + } + ], + "description": "Rounds a value to a specified number of decimal places, rounding upwards if two such values are equally near.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-round", + "examples": [ + { + "output": "2", + "command": "round(2.49999)" + }, + { + "output": "1.13", + "command": "round(1.125,2)" + } + ], + "name": "round()", + "output": "numeric?" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Number to round", + "type": "numeric?" + }, + { + "name": "$precision", + "type": "integer?", + "description": "precision for rounding" + } + ], + "description": "Rounds a value to a specified number of decimal places, rounding to make the last digit even if two such values are equally near.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-round-half-to-even", + "examples": [ + { + "output": "0", + "command": "round-half-to-even(0.5)" + }, + { + "output": "35600", + "command": "round-half-to-even(35612.25, -2)" + } + ], + "name": "round-half-to-even()", + "output": "numeric?" + } + ], + "name": "Numeric" + }, + { + "entries": [ + { + "arguments": [ + { + "name": "$flags", + "type": "string", + "description": "string to replace searched fragment with" + }, + { + "name": "$input", + "description": "Source string", + "type": "string?" + }, + { + "name": "$pattern", + "description": "regex", + "type": "string" + } + ], + "description": "Analyzes a string using a regular expression, returning an XML structure that identifies which parts of the input string matched or failed to match the regular expression, and in the case of matched substrings, which substrings matched each capturing group in the regular expression.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-analyze-string", + "examples": [ + { + "command": " analyze-string(\"A1,C15,,D24, X50,\", \"([A-Z])([0-9]+)\") ", + "output": "A1,C15,,D24, X50," + } + ], + "name": "analyze-string()", + "output": "element" + }, + { + "arguments": [ + { + "name": "$comparand1", + "description": "First comparand", + "type": "string?" + }, + { + "name": "$comparand2", + "description": "Second comparand", + "type": "string?" + } + ], + "description": "Returns true if two strings are equal, considered codepoint-by-codepoint.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-codepoint-equal", + "examples": [ + { + "command": "codepoint-equal(\"abcd\", \"abcd\")", + "output": "true" + }, + { + "command": "codepoint-equal(\"abcd\", \"abcd \")", + "output": "false" + } + ], + "name": "codepoint-equal()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Codepoints", + "type": "integer*" + } + ], + "description": "Creates an String from a sequence of codepoints.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-codepoints-to-string", + "examples": [ + { + "command": "codepoints-to-string(0)", + "output": "FOCH0001" + }, + { + "output": "( ͡° ͜ʖ ͡°)", + "command": "codepoints-to-string((40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41))" + } + ], + "name": "codepoints-to-string()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "Rules of collation", + "type": "string?" + }, + { + "name": "$comparand1", + "description": "First comparand", + "type": "string?" + }, + { + "name": "$comparand2", + "description": "Second comparand", + "type": "string?" + } + ], + "description": "Returns -1, 0, or 1, depending on whether $comparand1 collates before, equal to, or after $comparand2 according to the rules of a selected collation.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-compare", + "examples": [ + { + "output": "0", + "command": "compare('abc', 'abc')" + }, + { + "output": "1", + "command": "compare('Strassen', 'Straße')" + } + ], + "name": "compare()", + "output": "integer?" + }, + { + "arguments": [ + { + "name": "$arg1", + "type": "any?", + "description": "First element to concat" + }, + { + "name": "$arg1", + "type": "any?", + "description": "Second element to concat" + }, + { + "name": "...", + "type": "any*", + "description": "Other elements to concat" + } + ], + "description": "Returns the concatenation of the string values of the arguments.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-concat", + "examples": [ + { + "command": "concat('un', 'grateful')", + "output": "ungrateful" + }, + { + "command": "concat('release11',' web',' tools')", + "output": "release11 web tools" + } + ], + "name": "concat()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns true if the string $arg1 contains $arg2 as a substring, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-contains", + "examples": [ + { + "command": "contains(\"release11Tools\",\"Tools\")", + "output": "true" + } + ], + "name": "contains()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$collation", + "description": "collation", + "type": "string" + }, + { + "name": "$input", + "description": "Source strings", + "type": "string*" + }, + { + "name": "$token", + "description": "regex", + "type": "string" + } + ], + "description": "Determines whether or not any of the supplied strings, when tokenized at whitespace boundaries, contains the supplied token, under the rules of the supplied collation.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-contains-token", + "examples": [ + { + "command": " contains-token(\"red green blue \", \"red\") ", + "output": "true" + } + ], + "name": "contains-token()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns true if the string $arg1 contains $arg2 as a trailing substring, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-ends-with", + "examples": [ + { + "command": "ends-with(\"release11Tools\",\"ols\")", + "output": "true" + } + ], + "name": "ends-with()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$lang", + "description": "language to represent number", + "type": "string?" + }, + { + "name": "$picture", + "description": "format to represent number", + "type": "string" + }, + { + "name": "$value", + "description": "integer value to format", + "type": "integer?" + } + ], + "description": "Formats an integer according to a given picture string, using the conventions of a given natural language if specified.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-format-integer", + "examples": [ + { + "command": "format-integer(123, 'w')", + "output": "one hundred and twenty-three" + }, + { + "output": "21st", + "command": "format-integer(21, '1;o', 'en')" + } + ], + "name": "format-integer()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$decimal-format-name", + "description": "language to represent number", + "type": "string?" + }, + { + "name": "$picture", + "description": "format to represent number", + "type": "string" + }, + { + "name": "$value", + "description": "numeric value to format", + "type": "numeric?" + } + ], + "description": "Returns a string containing a number formatted according to a given picture string, taking account of decimal formats specified in the static context.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-format-number", + "examples": [ + { + "output": "12,345.60", + "command": "format-number(12345.6, '#,###.00')" + }, + { + "output": "-006", + "command": "format-number(-6, '000')" + } + ], + "name": "format-integer()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + } + ], + "description": "Converts a string to lower case.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-lower-case", + "examples": [ + { + "command": "lower-case(\"RELEASE11 TOOLS\")", + "output": "release11 tools" + } + ], + "name": "lower-case()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$flags", + "description": "regex flags", + "type": "string" + }, + { + "name": "$input", + "description": "Source string", + "type": "string?" + }, + { + "name": "$pattern", + "description": "regex", + "type": "string" + } + ], + "description": "Returns true if the supplied string matches a given regular expression.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-matches", + "examples": [ + { + "command": "matches(\"release11Tools\",\"^.*11T.*$\")", + "output": "true" + } + ], + "name": "matches()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + }, + { + "name": "$normalizationForm", + "description": "Normalization form", + "type": "string" + } + ], + "description": "Returns the value of $arg after applying Unicode normalization.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-normalize-unicode", + "examples": [ + { + "command": "normalize-unicode(\"release11Tools\",\"NFC\")", + "output": "release11Tools" + } + ], + "name": "normalize-unicode()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$input", + "description": "Source string", + "type": "string?" + }, + { + "name": "$pattern", + "description": "fragment to replace", + "type": "string" + }, + { + "name": "$replacement", + "type": "string", + "description": "string to replace searched fragment with" + } + ], + "description": "Returns a string produced from the input string by replacing any substrings that match a given regular expression with a supplied replacement string.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-replace", + "examples": [ + { + "output": "release 11 WebTools", + "command": "replace(\"release11Tools\",\"11T.*\",\" 11 WebTools\")" + } + ], + "name": "replace()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns true if the string $arg1 contains $arg2 as a leading substring, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-starts-with", + "examples": [ + { + "command": "starts-with(\"release11Tools\",\"rel\")", + "output": "true" + } + ], + "name": "starts-with()", + "output": "boolean" + }, + { + "arguments": [ + { + "name": "$arg", + "type": "item", + "description": "Item to represent as String" + } + ], + "description": "Returns the string value of an item", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-string", + "examples": [ + { + "output": "\"23\"", + "command": "string(23)" + }, + { + "output": "John", + "command": "string(/u:root/u:UserList[1]/u:User[last()]/u:Name)" + } + ], + "name": "string()", + "output": "String" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Stings to join", + "type": "string*" + }, + { + "name": "$arg2", + "description": "Separator", + "type": "string" + } + ], + "description": "Returns a string created by concatenating the items in a sequence, with a defined separator between adjacent items.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-concat", + "examples": [ + { + "output": "Now is the time ...", + "command": "string-join(('Now', 'is', 'the', 'time', '...'), ' ')" + }, + { + "output": "release11%%web%%tools", + "command": "string-join(('release11','web','tools'),'%%')" + } + ], + "name": "string-join()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + } + ], + "description": "Returns the number of characters in a string.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-string-length", + "examples": [ + { + "output": "45", + "command": "string-length(\"Harp not on that string, madam; that is past.\")" + }, + { + "output": "16", + "command": "string-length(\"Release 11 tools\")" + } + ], + "name": "string-length()", + "output": "integer" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "String value", + "type": "string?" + } + ], + "description": "Returns the sequence of codepoints that constitute an string value.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-string-to-codepoints", + "examples": [ + { + "output": "(72, 101, 108, 108, 111)", + "command": "string-to-codepoints('Hello')" + }, + { + "output": "(40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41)", + "command": "string-to-codepoints('( ͡° ͜ʖ ͡°)')" + } + ], + "name": "string-to-codepoints()", + "output": "integer*" + }, + { + "arguments": [ + { + "name": "$length", + "type": "double", + "description": "length to substring" + }, + { + "name": "$sourceString", + "description": "Source string", + "type": "string?" + }, + { + "name": "$start", + "type": "double", + "description": "start index" + } + ], + "description": "Returns the portion of the value of $sourceString beginning at the position indicated by the value of $start and continuing for the number of ·characters· indicated by the value of $length.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-substring", + "examples": [ + { + "output": "car", + "command": "substring(\"motor car\", 6)" + }, + { + "output": "Release 11 tools <3", + "command": "substring(\"Release 11 tools <3 unnecesary words\",1,19)" + } + ], + "name": "substring()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns the part of $arg1 that follows the first occurrence of $arg2, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-substring-after", + "examples": [ + { + "output": "ease11Tools", + "command": "substring-after(\"release11Tools\",\"rel\")" + } + ], + "name": "substring-after()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg1", + "description": "Source string", + "type": "string?" + }, + { + "name": "$arg2", + "description": "searched string", + "type": "string?" + }, + { + "name": "$collation", + "description": "collation", + "type": "string" + } + ], + "description": "Returns the part of $arg1 that precedes the first occurrence of $arg2, taking collations into account.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-substring-before", + "examples": [ + { + "output": "release11To", + "command": "substring-before(\"release11Tools\",\"ols\")" + } + ], + "name": "substring-before()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$flags", + "description": "string to replace searched fragment with", + "type": "string?" + }, + { + "name": "$input", + "description": "Source string", + "type": "string?" + }, + { + "name": "$pattern", + "description": "fragment to replace", + "type": "string?" + } + ], + "description": "Returns a sequence of strings constructed by splitting the input wherever a separator is found; the separator is any substring that matches a given regular expression.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-tokenize", + "examples": [ + { + "output": "release\nTools", + "command": "tokenize(\"release11Tools\",\"11\")" + } + ], + "name": "tokenize()", + "output": "string*" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + }, + { + "name": "$mapString", + "type": "string", + "description": "string to map" + }, + { + "name": "$transString", + "type": "string", + "description": "transition string" + } + ], + "description": "Returns the value of $arg modified by replacing or removing individual characters.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-translate", + "examples": [ + { + "output": "BAr", + "command": "translate(\"bar\",\"abc\",\"ABC\")" + } + ], + "name": "translate()", + "output": "string" + }, + { + "arguments": [ + { + "name": "$arg", + "description": "Source string", + "type": "string?" + } + ], + "description": "Converts a string to upper case.", + "documentationReferenceURL": "https://www.w3.org/TR/xpath-functions-31/#func-upper-case", + "examples": [ + { + "output": "RELEASE11 TOOLS", + "command": "upper-case(\"release11 tools\")" + } + ], + "name": "upper-case()", + "output": "string" + } + ], + "name": "String" + } +] \ No newline at end of file diff --git a/Frontend/src/assets/tooltips/xpath/xpathdiffs.json b/Frontend/src/assets/tooltips/xpath/xpathdiffs.json new file mode 100644 index 0000000..91e0030 --- /dev/null +++ b/Frontend/src/assets/tooltips/xpath/xpathdiffs.json @@ -0,0 +1,48 @@ +{ + "universalInfo": + [ + { + "category":"What is XPath", + "description":"XPath is a query language used for selecting nodes from XML and processing them. It may perform operations on strings, numbers and boolean values." + }, + { + "category":"What's new in XPath?" + } + ], + "VersionDiffs": + [ + { + "version":"2.0", + "diffs": + [ + "Added support for all XML simple types", + "Many new functions (tripled instruction count)", + "All expressions evaluate to sequence", + "Introduces conditional expressions and for-loops" + ] + }, + { + "version":"3.0", + "diffs": + [ + "Dynamic function calls (function may be called without being referenced by name (find function in collection and call)", + "Inline functions", + "Namespace literals - Namespace may be embedded into function name", + "Support for union types - collections containing elements of different types", + "Mapping operator - '!' performs evaluation for each element in sequence and concatenates results", + "Introduced maps" + ] + }, + { + "version":"3.1", + "diffs": + [ + "New operator for function chaining '=>'", + "Introduced maps that store data in pair 'key:value' - 'map{ key : value, key : value }'", + "Introduced arrays - they differ from sequences in that they can be nested 'array{1, 5, 7, (10 to 20)}'" + ] + } + ] + + +} \ No newline at end of file diff --git a/Frontend/src/assets/tooltips/xslt/xslt1.json b/Frontend/src/assets/tooltips/xslt/xslt1.json new file mode 100644 index 0000000..edb41de --- /dev/null +++ b/Frontend/src/assets/tooltips/xslt/xslt1.json @@ -0,0 +1,845 @@ +[ + { + "name": "Templates", + "entries": [ + { + "name": "", + "description": "Defines an output producing template. This element must have either the match attribute or the name attribute set.", + "attributes": + [ + { + "type":"optional", + "name":"match", + "description":"Specifies a pattern that determines the elements for which this template should be used. It is a required attribute if there is no name attribute." + }, + { + "type":"optional", + "name":"name", + "description":"Specifies a name for this template" + }, + { + "type":"optional", + "name":"mode", + "description":"Specifies a particular mode for this template, which can be matched by an attribute of the element" + }, + { + "type":"optional", + "name":"priority", + "description":"Specifies a numeric priority for this template." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/template", + "output": "XML Tree" + },{ + "name": "", + "description": "Selects a set of nodes in the input tree and instructs the processor to apply the proper templates to them.", + "attributes": + [ + { + "type":"optional", + "name":"mode", + "description":"Specifies a particular mode for this template, which can be matched by an attribute of the element" + }, + { + "type":"optional", + "name":"select", + "description":"XPath expression that specifies the nodes to be processed. If this attribute is not set, all child nodes of the current node are selected." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/apply-templates", + "output": "XML Nodes" + },{ + "name": "", + "description": "Import precedence requires that template rules in main stylesheets have higher precedence than template rules in imported stylesheets", + "attributes": + [ + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/apply-imports", + "output": "Imported output from another XSLT" + },{ + "name": "", + "description": "Invokes a named template", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the name of the template you wish to invoke." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/call-template", + "output": "Called template XML" + } + ] + }, + { + "name":"Loops and conditional processing", + "entries": + [ + { + "name": "", + "description": "Selects a set of nodes and processes each of them in the same way", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"XPath expression that specifies the nodes to be processed." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/for-each", + "output": "Processed set of nodes" + }, + { + "name": "", + "description": "Element contains a test attribute and a template. If the test evaluates to true, the template is processed.", + "attributes": + [ + { + "type":"required", + "name":"test", + "description":"Contains an XPath expression that can be evaluated to a Boolean value." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/if", + "output": "Depending on test processed template or not." + }, + { + "name": "", + "description": "Element defines a choice among a number of alternatives. It behaves like a switch statement in procedural languages.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/choose", + "output": "Choosed XML template" + }, + { + "name": "", + "description": "Element always appears within an element, acting like a case statement.", + "attributes": + [ + { + "type":"required", + "name":"test", + "description":"Boolean expression to be evaluated. If true, the contents of the element are processed; if false, they are ignored." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/when", + "output": "Processed or not XML Template" + }, + { + "name": "", + "description": "Element is used to define the action that should be taken when none of the conditions apply.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/otherwise", + "output": "processed XML Template" + } + ] + }, + { + "name":"Creating Result Tree", + "entries": + [ + { + "name": "", + "description": "Creates an attribute in the output document, using any values that can be accessed from the stylesheet. The element must be defined before any other output document element inside the output document element for which it establishes attribute values", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the name of the attribute to be created in the output document." + } , + { + "type":"optional", + "name":"namespace", + "description":"Defines the namespace URI for this attribute in the output document." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/attribute", + "output": "XML Element with provided attribute" + },{ + "name": "", + "description": "Creates a named set of attributes, which can then be applied as whole to the output document, in a manner similar to named styles in CSS", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the name of the attribute set." + } , + { + "type":"optional", + "name":"use-attribute-sets", + "description":"Builds an attribute set from other attribute sets. The names of the contributing sets must be separated with whitespace characters" + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/attribute-set", + "output": "Named set of attributes" + },{ + "name": "", + "description": "Transfers a shallow copy (the node and any associated namespace node) of the current node to the output document.", + "attributes": + [ + { + "type":"optional", + "name":"use-attribute-sets", + "description":"Lists attribute sets that should be applied to the output node, if it is an element" + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/copy", + "output": "Copy of XML node" + },{ + "name": "", + "description": "Counts things sequentially. It can also be used to quickly format a number.", + "attributes": + [ + { + "type":"optional", + "name":"count", + "description":"Specifies what in the source tree should be numbered sequentially. It uses an XPath expression." + }, + { + "type":"optional", + "name":"level", + "description":"Defines how levels of the source tree should be considered in generating sequential numbers. It has three valid values: single, multiple, and any." + }, + { + "type":"optional", + "name":"from", + "description":"Specifies where the numbering should start or start over." + }, + { + "type":"optional", + "name":"value", + "description":"Applies a given format to a number." + }, + { + "type":"optional", + "name":"format", + "description":"Defines the format of the generated number." + }, + { + "type":"optional", + "name":"lang", + "description":"Specifies which language's alphabet should be used in letter-based numbering formats." + }, + { + "type":"optional", + "name":"letter-value", + "description":"Disambiguates between numbering sequences that use letters. Some languages have more than one numbering system that use letters." + }, + { + "type":"optional", + "name":"grouping-separator", + "description":"Specifies what character should be used as the group (e.g. thousands) separator." + }, + { + "type":"optional", + "name":"grouping-size", + "description":"Indicates the number of digits that make up a numeric group." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/number", + "output": "Formatted number" + },{ + "name": "", + "description": "Evaluates an XPath expression, converts it to a string, and writes that string to the result tree.", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"Specifies the XPath expression to be evaluated and written to the output tree." + }, + { + "type":"optional", + "name":"disable-output-escaping", + "description":"Specifies whether special characters are escaped when written to the output." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/value-of", + "output": "Value from XML nodes" + },{ + "name": "", + "description": "Writes literal text to the output tree.", + "attributes": + [ + { + "type":"optional", + "name":"disable-output-escaping", + "description":"Specifies whether special characters are escaped when written to the output." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/text", + "output": "XML Node with writed text" + },{ + "name": "", + "description": "Writes a comment to the output document. It must include only text.", + "attributes": + [ + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/comment", + "output": "XML Node with writed comment" + }, + { + "name": "", + "description": "Writes a processing instruction to the output document.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the name of this processing instruction." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/processing-instruction", + "output": "XML Node with output of processed instruction" + }, + { + "name": "", + "description": "Declares a named key which can be used elsewhere in the stylesheet with the key( ) function.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies a name for this key. Must be a QName." + }, + { + "type":"required", + "name":"match", + "description":"Defines the nodes for which this key is applicable." + }, + { + "type":"required", + "name":"use", + "description":"Specifies an XPath expression that will be used to determine the value of the key for each of the applicable nodes." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/key", + "output": "key to use in stylesheet" + }, + { + "name": "", + "description": "Declares a named key which can be used elsewhere in the stylesheet with the key( ) function.", + "attributes": + [ + { + "type":"optional", + "name":"name", + "description":"Specifies a name for this format." + }, + { + "type":"optional", + "name":"decimal-separator", + "description":"Specifies the decimal point character." + }, + { + "type":"optional", + "name":"grouping-separator", + "description":"Specifies the thousands separator character." + }, + { + "type":"optional", + "name":"infinity", + "description":"Specifies the string used to represent infinity." + }, + { + "type":"optional", + "name":"minus-sign", + "description":"Specifies the minus sign character." + }, + { + "type":"optional", + "name":"NaN", + "description":"Specifies the string used when the value is not a number." + }, + { + "type":"optional", + "name":"percent", + "description":"Specifies the percentage sign character." + }, + { + "type":"optional", + "name":"per-mille", + "description":"Specifies the per thousand character." + }, + { + "type":"optional", + "name":"zero-digit", + "description":"Specifies the digit zero character." + }, + { + "type":"optional", + "name":"digit", + "description":"Specifies the character used in the format pattern to stand for a digit." + }, + { + "type":"optional", + "name":"pattern-separator", + "description":"Specifies the character separating positive and negative subpatterns in a format pattern." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/decimal-format", + "output": "decimal format" + }, + { + "name": "", + "description": "Defines the elements in the source document for which whitespace should be preserved.", + "attributes": + [ + { + "type":"required", + "name":"elements", + "description":"Specifies the elements for which whitespace should be preserved." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/preserve-space", + "output": "preserved space" + }, + { + "name": "", + "description": "Defines the elements in the source document for which whitespace should be removed.", + "attributes": + [ + { + "type":"required", + "name":"elements", + "description":"Specifies the elements for which whitespace should be preserved." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/strip-space", + "output": "elements with removed whitespace" + }, + { + "name": "", + "description": "Defines a sort key for nodes selected by or and determines the order in which they are processed.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"Uses an XPath expression to specify the nodes to be sorted." + }, + { + "type":"optional", + "name":"order", + "description":"Specifies whether the nodes should be processed in \"ascending\" or \"descending\" order." + }, + { + "type":"optional", + "name":"case-order", + "description":"Indicates whether upper- or lowercase letters are to be ordered first." + }, + { + "type":"optional", + "name":"lang", + "description":"Specifies which language is to be used by the sort." + }, + { + "type":"optional", + "name":"data-type", + "description":"Defines whether items are to be ordered alphabetically or numerically." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/sort", + "output": "sorted elements" + }, + { + "name": "", + "description": "Controls the characteristics of the output document.", + "attributes": + [ + { + "type":"optional", + "name":"method", + "description":"Specifies output format." + }, + { + "type":"optional", + "name":"version", + "description":"Specifies the value of the version attribute of the XML or HTML declaration in the output document." + }, + { + "type":"optional", + "name":"encoding", + "description":"Specifies the value of the encoding attribute in the output document." + }, + { + "type":"optional", + "name":"omit-xml-declaration", + "description":"Indicates whether or not to include an XML declaration in the output." + }, + { + "type":"optional", + "name":"doctype-public", + "description":"Specifies the value of the PUBLIC attribute of the DOCTYPE declaration in the output document." + }, + { + "type":"optional", + "name":"doctype-system", + "description":"Specifies the value of the SYSTEM attribute of the DOCTYPE declaration in the output document." + }, + { + "type":"optional", + "name":"cdata-section-elements", + "description":"Lists elements whose text contents should be written as CDATA sections." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/output", + "output": "changed document prefix" + } + ] + }, + { + "name":"Stylesheet structure", + "entries": + [ + { + "name": "", + "description": "Is the outermost element of a stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"version", + "description":"Specifies the version of XSLT required by this stylesheet." + }, + { + "type":"optional", + "name":"exclude-result-prefixes", + "description":"Specifies any namespace used in this document that should not be sent to the output document." + }, + { + "type":"optional", + "name":"extension-element-prefixes", + "description":"Specifies a space-separated list of any namespace prefixes for extension elements in this document." + }, + { + "type":"optional", + "name":"default-collation", + "description":"Specifies the default collation used by all XPath expressions appearing in attributes or text value templates that have the element as an ancestor" + }, + { + "type":"optional", + "name":"default-mode", + "description":"Defines the default value for the mode attribute of all and elements within its scope." + }, + { + "type":"optional", + "name":"default-validation", + "description":"Defines the default value of the validation attribute of all relevant instructions appearing within its scope." + }, + { + "type":"optional", + "name":"expand-text", + "description":"Determines whether descendant text nodes of the element are treated as text value templates." + }, + { + "type":"optional", + "name":"id", + "description":"Specifies an id for this stylesheet. This is most often used when the stylesheet is embedded in another XML document." + }, + { + "type":"optional", + "name":"input-type-annotations", + "description":"Specifies whether type annotations are stripped from the element so the same results are produced whether the source documents have been validated against a schema or not." + }, + { + "type":"optional", + "name":"use-when", + "description":"Determines whether the element and all the nodes that have it as ancestor are excluded from the stylesheet." + }, + { + "type":"optional", + "name":"xpath-default-namespace", + "description":"Specifies the namespace that will be used if the element name is unprefixed or an unprefixed type name within an XPath expression." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/stylesheet", + "output": "XSLT Stylesheet" + }, + { + "name": "", + "description": "Exactly equivalent to the element.", + "attributes": + [ + { + "type":"required", + "name":"version", + "description":"Specifies the version of XSLT required by this stylesheet." + }, + { + "type":"optional", + "name":"exclude-result-prefixes", + "description":"Specifies any namespace used in this document that should not be sent to the output document." + }, + { + "type":"optional", + "name":"extension-element-prefixes", + "description":"Specifies a space-separated list of any namespace prefixes for extension elements in this document." + }, + { + "type":"optional", + "name":"default-collation", + "description":"Specifies the default collation used by all XPath expressions appearing in attributes or text value templates that have the element as an ancestor" + }, + { + "type":"optional", + "name":"default-mode", + "description":"Defines the default value for the mode attribute of all and elements within its scope." + }, + { + "type":"optional", + "name":"default-validation", + "description":"Defines the default value of the validation attribute of all relevant instructions appearing within its scope." + }, + { + "type":"optional", + "name":"expand-text", + "description":"Determines whether descendant text nodes of the element are treated as text value templates." + }, + { + "type":"optional", + "name":"id", + "description":"Specifies an id for this stylesheet. This is most often used when the stylesheet is embedded in another XML document." + }, + { + "type":"optional", + "name":"input-type-annotations", + "description":"Specifies whether type annotations are stripped from the element so the same results are produced whether the source documents have been validated against a schema or not." + }, + { + "type":"optional", + "name":"use-when", + "description":"Determines whether the element and all the nodes that have it as ancestor are excluded from the stylesheet." + }, + { + "type":"optional", + "name":"xpath-default-namespace", + "description":"Specifies the namespace that will be used if the element name is unprefixed or an unprefixed type name within an XPath expression." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/transform", + "output": "XSLT Stylesheet" + }, + { + "name": "", + "description": "Top-level element that serves to import the contents of one stylesheet into another stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"href", + "description":"Specifies the URI of the stylesheet to import." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/import", + "output": "XSLT Stylesheet from another file" + }, + { + "name": "", + "description": "Merges the contents of one stylesheet with another. Unlike the case of , the contents of an included stylesheet have exactly the same precedence as the contents of the including stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"href", + "description":"Specifies the URI of the stylesheet to import." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/include", + "output": "XSLT Stylesheet with XSLT from another file." + }, + { + "name": "", + "description": "Maps a namespace in the stylesheet to a different namespace in the output tree. The most common use for this element is in generating a stylesheet from another stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"stylesheet-prefix", + "description":"Specifies the temporary namespace." + }, + { + "type":"required", + "name":"result-prefix", + "description":"Specifies the desired namespace for the output tree." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/namespace-alias", + "output": "XML Tree with changed namespaces" + }, + { + "name": "", + "description": "Creates an element in the output document.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the desired name of the output element. The name must be a valid QName." + }, + { + "type":"optional", + "name":"namespace", + "description":"Specifies the namespace of the output element." + }, + { + "type":"optional", + "name":"use-attribute-sets", + "description":"A whitespace-separated list of attribute-set element names to be applied to the element element's output element." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/namespace-alias", + "output": "XML with provided element" + } + ] + }, + { + "name":"Variables and parameters", + "entries": + [ + { + "name": "", + "description": "Establishes a parameter by name and, optionally, a default value for that parameter. When used as a top-level element, the parameter is global. When used inside an element, the parameter is local to that template.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Names the parameter. This must be a QName." + }, + { + "type":"optional", + "name":"select", + "description":"Uses an XPath expression to provide a default value if none is specified." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/param", + "output": "XML parameter" + }, + { + "name": "", + "description": "Declares a global or local variable in a stylesheet and gives it a value.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Gives the variable a name." + }, + { + "type":"optional", + "name":"select", + "description":"Defines the value of the variable through an XPath expression. If the element contains a template, this attribute is ignored." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/variable", + "output": "XML Variable" + }, + { + "name": "", + "description": "Sets the value of a parameter to be passed into a template.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Gives this parameter a name." + }, + { + "type":"optional", + "name":"select", + "description":"Defines the value of the parameter through an XPath expression. If the element contains a template, this attribute is ignored." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/with-param", + "output": "XML Parameter" + }, + { + "name": "", + "description": "Makes a deep copy (including descendant nodes) of whatever the select attribute specifies to the output document.", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"Uses an XPath expression that specifies what is to be copied." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/copy-of", + "output": "Copy of Selected node" + } + ] + }, + { + "name":"Misc", + "entries": + [ + { + "name": "", + "description": "Outputs a message (to the JavaScript Console in NS) and optionally terminates execution of the stylesheet.", + "attributes": + [ + { + "type":"optional", + "name":"terminate", + "description":"Set to \"yes\", indicates that execution should be terminated. The default value is \"no\", in which case the message is output and execution continues." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/message", + "output": "Message in console" + }, + { + "name": "", + "description": "specifies what template to use if a given extension (or, eventually, newer version) element is not supported.", + "attributes": + [ + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/fallback", + "output": "Fallbacks" + } + ] + } +] \ No newline at end of file diff --git a/Frontend/src/assets/tooltips/xslt/xslt3.json b/Frontend/src/assets/tooltips/xslt/xslt3.json new file mode 100644 index 0000000..e532802 --- /dev/null +++ b/Frontend/src/assets/tooltips/xslt/xslt3.json @@ -0,0 +1,2064 @@ +[ + { + "name": "Templates", + "entries": [ + { + "name": "", + "description": "Defines an output producing template. This element must have either the match attribute or the name attribute set.", + "attributes": + [ + { + "type":"optional", + "name":"match", + "description":"Specifies a pattern that determines the elements for which this template should be used. It is a required attribute if there is no name attribute." + }, + { + "type":"optional", + "name":"name", + "description":"Specifies a name for this template" + }, + { + "type":"optional", + "name":"mode", + "description":"Specifies a particular mode for this template, which can be matched by an attribute of the element" + }, + { + "type":"optional", + "name":"priority", + "description":"Specifies a numeric priority for this template." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/template", + "output": "XML Tree" + },{ + "name": "", + "description": "Selects a set of nodes in the input tree and instructs the processor to apply the proper templates to them.", + "attributes": + [ + { + "type":"optional", + "name":"mode", + "description":"Specifies a particular mode for this template, which can be matched by an attribute of the element" + }, + { + "type":"optional", + "name":"select", + "description":"XPath expression that specifies the nodes to be processed. If this attribute is not set, all child nodes of the current node are selected." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/apply-templates", + "output": "XML Nodes" + },{ + "name": "", + "description": "Import precedence requires that template rules in main stylesheets have higher precedence than template rules in imported stylesheets", + "attributes": + [ + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/apply-imports", + "output": "Imported output from another XSLT" + },{ + "name": "", + "description": "Invokes a named template", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the name of the template you wish to invoke." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/call-template", + "output": "Called template XML" + },{ + "name": "", + "description": "Chooses the next template to execute.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/next-match.html", + "output": "Choosed XML template" + },{ + "name": "", + "description": "Allows properties of a mode to be defined.", + "attributes": + [ + { + "type":"optional", + "name":"name", + "description":"Identifies the name of this mode" + }, + { + "type":"optional", + "name":"streamable", + "description":"The value yes indicates that template rules using this mode must be capable of being evaluated in a streaming manner." + }, + { + "type":"optional", + "name":"use-accumulators", + "description":"Relevant only when this mode is the initial mode of the transformation." + }, + { + "type":"optional", + "name":"on-no-match", + "description":"Indicates what action is taken when a node being processed by xsl:apply-templates in this mode matches no template rule." + }, + { + "type":"optional", + "name":"on-no-match", + "description":"Indicates what action is taken when a node being processed by xsl:apply-templates in this mode matches no template rule." + }, + { + "type":"optional", + "name":"on-multiple-match", + "description":"Indicates what action is taken when a node being processed by xsl:apply-templates in this mode matches more than one template rule." + }, + { + "type":"optional", + "name":"warning-on-no-match", + "description":"The value yes causes a run-time warning when a node is matched by no template rules." + }, + { + "type":"optional", + "name":"warning-on-multiple-match", + "description":"The value yes causes a run-time warning when a node is matched by multiple template rules." + }, + { + "type":"optional", + "name":"typed", + "description":"Informs the processor whether the nodes to be processed by template rules in this mode are to be typed or untyped." + }, + { + "type":"optional", + "name":"visibility", + "description":"Informs the processor whether the nodes to be processed by template rules in this mode are to be typed or untyped." + }, + { + "type":"optional", + "name":"saxon:trace", + "description":"Causes tracing of all template rules executed in the mode, showing the nodes selected by xsl:apply-templates and the rules used to process them." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/mode.html", + "output": "Choosed XML template" + },{ + "name": "", + "description": "Allows a using package to override selected components from a used package.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/override.html", + "output": "Appears as a child of xsl:use-package." + },{ + "name": "", + "description": "Defines a set of stylesheet modules that can be compiled as a unit, independently of other packages.", + "attributes": + [ + { + "type":"required", + "name":"version", + "description":"Specifies the version of XSLT required by this stylesheet." + }, + { + "type":"optional", + "name":"id", + "description":"Optional identifier, not used by the XSLT processor; may be used to identify a package within a larger XML document." + }, + { + "type":"optional", + "name":"name", + "description":"The name of the package, as an absolute URI, to be used by xsl:use-package declarations." + }, + { + "type":"optional", + "name":"package-version", + "description":"Version identifier, used to distinguish between different versions of a package." + }, + { + "type":"optional", + "name":"input-type-annotations", + "description":"Used to request stripping of type annotations." + }, + { + "type":"optional", + "name":"declared-modes", + "description":"Determines whether of not modes that are referenced within the package must be explicitly declared." + }, + { + "type":"optional", + "name":"default-mode", + "description":"Defines the default value for the mode attribute of all xsl:template and xsl:apply-templates elements within its scope." + }, + { + "type":"optional", + "name":"default-validation", + "description":"Defines the default value for the validation attribute of all relevant instructions appearing within its scope." + }, + { + "type":"optional", + "name":"default-collation", + "description":"Specifies the default collation used by all XPath expressions" + }, + { + "type":"optional", + "name":"extension-element-prefixes", + "description":" Used to declare the use of extension instructions in a particular namespace." + }, + { + "type":"optional", + "name":"exclude-result-prefixes", + "description":"Used to designate namespaces as excluded." + }, + { + "type":"optional", + "name":"expand-text", + "description":"If set to yes, enables the use of text value templates - expressions enclosed in curly braces within text nodes, behaving the same way as attribute value templates in attribute nodes." + }, + { + "type":"optional", + "name":"use-when", + "description":"Used to conditionally include or exclude elements. The value is an XPath expression that can be evaluated statically." + }, + { + "type":"optional", + "name":"xpath-default-namespace", + "description":"Determines the namespace used for any unprefixed element name or type name within an XPath expression." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/package.html", + "output": "Appears as a child of xsl:use-package." + },{ + "name": "", + "description": "Defines a set of stylesheet modules that can be compiled as a unit, independently of other packages.", + "attributes": + [ + { + "type":"required", + "name":"component", + "description":"Identifies the kind of component selected." + }, + { + "type":"required", + "name":"names", + "description":"Identifies a subset of the specified components, by name." + }, + { + "type":"required", + "name":"visibility", + "description":"Determines the potential visibility of the selected components." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/accept.html", + "output": "Appears as a child of xsl:use-package." + },{ + "name": "", + "description": "Used to declare whether a global context item is required, and if so, to declare its required type.", + "attributes": + [ + { + "type":"optional", + "name":"as", + "description":"The required type of the global context item; the default is item()." + }, + { + "type":"optional", + "name":"use", + "description":"Specifies whether a stylesheet module requires a global context item; the default is optional." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/global-context-item.html", + "output": "Global context item" + } + ] + }, + { + "name":"Loops and conditional processing", + "entries": + [ + { + "name": "", + "description": "Selects a set of nodes and processes each of them in the same way", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"XPath expression that specifies the nodes to be processed." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/for-each", + "output": "Processed set of nodes" + }, + { + "name": "", + "description": "Element contains a test attribute and a template. If the test evaluates to true, the template is processed.", + "attributes": + [ + { + "type":"required", + "name":"test", + "description":"Contains an XPath expression that can be evaluated to a Boolean value." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/if", + "output": "Depending on test processed template or not." + }, + { + "name": "", + "description": "Element defines a choice among a number of alternatives. It behaves like a switch statement in procedural languages.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/choose", + "output": "Choosed XML template" + }, + { + "name": "", + "description": "Element always appears within an element, acting like a case statement.", + "attributes": + [ + { + "type":"required", + "name":"test", + "description":"Boolean expression to be evaluated. If true, the contents of the element are processed; if false, they are ignored." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/when", + "output": "Processed or not XML Template" + }, + { + "name": "", + "description": "Element is used to define the action that should be taken when none of the conditions apply.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/otherwise", + "output": "processed XML Template" + }, + { + "name": "", + "description": "Selects a sequence of nodes and/or atomic values and organizes them into subsets called groups.", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"Expression to select nodes/values." + }, + { + "type":"optional", + "name":"group-by", + "description":"Groups together all items having the same value for a grouping key." + }, + { + "type":"optional", + "name":"group-adjacent", + "description":"Groups together all items having the same value for a grouping key, provided that they are also adjacent in the input sequence." + }, + { + "type":"optional", + "name":"group-starting-with", + "description":"Processes the items in the supplied sequence in turn, starting a new group whenever one of the items matches a specified pattern." + }, + { + "type":"optional", + "name":"group-ending-with", + "description":"Processes the items in the supplied sequence in turn, closing the current group whenever one of the items matches a specified pattern." + }, + { + "type":"optional", + "name":"break-when", + "description":" The value of the attribute is an expression, which must return a boolean." + }, + { + "type":"optional", + "name":"composite", + "description":"Can be used when grouping using either group-by or group-adjacent. If set to yes, then the group-by and group-adjacent expressions may evaluate to a sequence, and grouping is done by comparing the entire sequence." + }, + { + "type":"optional", + "name":"collation", + "description":"The name of a collating sequence, used when comparing grouping keys. Can be used when grouping using either group-by or group-adjacent." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/for-each-group.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "Used to iterate over a sequence, with the option to set parameters for use in the next iteration.", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"Expression to select nodes/values." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/iterate.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "The xsl:break instruction is used within xsl:iterate, and causes premature completion before the entire input sequence has been processed.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"The effect of the instruction may be defined either by a select attribute, or by an enclosed sequence constructor. " + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/break.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "The xsl:next-iteration instruction occurs within xsl:iterate. The contents are a set of xsl:with-param elements defining the values of the iteration parameters to be used on the next iteration.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/next-iteration.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "Occurs within xsl:iterate to define processing to be carried out when the input sequence is exhausted.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"The effect of the instruction may be defined either by an expression within the optional select attribute, or by the enclosed sequence constructor." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/on-completion.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "The result of the xsl:fork instruction is the sequence formed by concatenating the results of evaluating each of its contained instructions, in order.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/fork.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "Used to allow conditional content construction to be made streamable. Outputs the enclosed content only if the containing sequence generates no \"ordinary\" content.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"The value to be output when the containing sequence constructor would otherwise deliver an empty result." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/on-empty.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "Used to allow conditional content construction to be made streamable. Outputs the enclosed content only if the containing sequence also generates \"ordinary\" content.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"The value to be output when the containing sequence constructor delivers a non-empty result." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/on-non-empty.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "Allows recovery from dynamic errors occurring within the expression it wraps.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"The expression to be evaluated by the instruction may be defined either by a select attribute, or by an enclosed sequence constructor. " + }, + { + "type":"optional", + "name":"rollback-output", + "description":"The value no is used to relax the requirement to recover result trees when failures occur in the course of evaluating the xsl:try instruction." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/try.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "In conjunction with xsl:try, the xsl:catch instruction allows recovery from dynamic errors.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"The expression to be evaluated by the instruction may be defined either by a select attribute, or by an enclosed sequence constructor. " + }, + { + "type":"optional", + "name":"rollback-output", + "description":"The value no is used to relax the requirement to recover result trees when failures occur in the course of evaluating the xsl:try instruction." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/try.html", + "output": "processed XML Template" + }, + { + "name": "", + "description": "Used to declare the initial context item for a template: whether the template requires a context item, and if so, what its expected type is.", + "attributes": + [ + { + "type":"optional", + "name":"as", + "description":"The required type of the context item; the default is item()." + }, + { + "type":"optional", + "name":"use", + "description":"Specifies whether a template requires a context item; the default is optional." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/context-item.html", + "output": "processed XML Template" + } + ] + }, + { + "name":"Creating Result Tree", + "entries": + [ + { + "name": "", + "description": "Creates an attribute in the output document, using any values that can be accessed from the stylesheet. The element must be defined before any other output document element inside the output document element for which it establishes attribute values", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the name of the attribute to be created in the output document." + } , + { + "type":"optional", + "name":"namespace", + "description":"Defines the namespace URI for this attribute in the output document." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/attribute", + "output": "XML Element with provided attribute" + },{ + "name": "", + "description": "Creates a named set of attributes, which can then be applied as whole to the output document, in a manner similar to named styles in CSS", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the name of the attribute set." + } , + { + "type":"optional", + "name":"use-attribute-sets", + "description":"Builds an attribute set from other attribute sets. The names of the contributing sets must be separated with whitespace characters" + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/attribute-set", + "output": "Named set of attributes" + },{ + "name": "", + "description": "Transfers a shallow copy (the node and any associated namespace node) of the current node to the output document.", + "attributes": + [ + { + "type":"optional", + "name":"use-attribute-sets", + "description":"Lists attribute sets that should be applied to the output node, if it is an element" + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/copy", + "output": "Copy of XML node" + },{ + "name": "", + "description": "Counts things sequentially. It can also be used to quickly format a number.", + "attributes": + [ + { + "type":"optional", + "name":"count", + "description":"Specifies what in the source tree should be numbered sequentially. It uses an XPath expression." + }, + { + "type":"optional", + "name":"level", + "description":"Defines how levels of the source tree should be considered in generating sequential numbers. It has three valid values: single, multiple, and any." + }, + { + "type":"optional", + "name":"from", + "description":"Specifies where the numbering should start or start over." + }, + { + "type":"optional", + "name":"value", + "description":"Applies a given format to a number." + }, + { + "type":"optional", + "name":"format", + "description":"Defines the format of the generated number." + }, + { + "type":"optional", + "name":"lang", + "description":"Specifies which language's alphabet should be used in letter-based numbering formats." + }, + { + "type":"optional", + "name":"letter-value", + "description":"Disambiguates between numbering sequences that use letters. Some languages have more than one numbering system that use letters." + }, + { + "type":"optional", + "name":"grouping-separator", + "description":"Specifies what character should be used as the group (e.g. thousands) separator." + }, + { + "type":"optional", + "name":"grouping-size", + "description":"Indicates the number of digits that make up a numeric group." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/number", + "output": "Formatted number" + },{ + "name": "", + "description": "Evaluates an XPath expression, converts it to a string, and writes that string to the result tree.", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"Specifies the XPath expression to be evaluated and written to the output tree." + }, + { + "type":"optional", + "name":"disable-output-escaping", + "description":"Specifies whether special characters are escaped when written to the output." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/value-of", + "output": "Value from XML nodes" + },{ + "name": "", + "description": "Writes literal text to the output tree.", + "attributes": + [ + { + "type":"optional", + "name":"disable-output-escaping", + "description":"Specifies whether special characters are escaped when written to the output." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/text", + "output": "XML Node with writed text" + },{ + "name": "", + "description": "Writes a comment to the output document. It must include only text.", + "attributes": + [ + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/comment", + "output": "XML Node with writed comment" + }, + { + "name": "", + "description": "Writes a processing instruction to the output document.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the name of this processing instruction." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/processing-instruction", + "output": "XML Node with output of processed instruction" + }, + { + "name": "", + "description": "Declares a named key which can be used elsewhere in the stylesheet with the key( ) function.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies a name for this key. Must be a QName." + }, + { + "type":"required", + "name":"match", + "description":"Defines the nodes for which this key is applicable." + }, + { + "type":"required", + "name":"use", + "description":"Specifies an XPath expression that will be used to determine the value of the key for each of the applicable nodes." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/key", + "output": "key to use in stylesheet" + }, + { + "name": "", + "description": "Declares a named key which can be used elsewhere in the stylesheet with the key( ) function.", + "attributes": + [ + { + "type":"optional", + "name":"name", + "description":"Specifies a name for this format." + }, + { + "type":"optional", + "name":"decimal-separator", + "description":"Specifies the decimal point character." + }, + { + "type":"optional", + "name":"grouping-separator", + "description":"Specifies the thousands separator character." + }, + { + "type":"optional", + "name":"infinity", + "description":"Specifies the string used to represent infinity." + }, + { + "type":"optional", + "name":"minus-sign", + "description":"Specifies the minus sign character." + }, + { + "type":"optional", + "name":"NaN", + "description":"Specifies the string used when the value is not a number." + }, + { + "type":"optional", + "name":"percent", + "description":"Specifies the percentage sign character." + }, + { + "type":"optional", + "name":"per-mille", + "description":"Specifies the per thousand character." + }, + { + "type":"optional", + "name":"zero-digit", + "description":"Specifies the digit zero character." + }, + { + "type":"optional", + "name":"digit", + "description":"Specifies the character used in the format pattern to stand for a digit." + }, + { + "type":"optional", + "name":"pattern-separator", + "description":"Specifies the character separating positive and negative subpatterns in a format pattern." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/decimal-format", + "output": "decimal format" + }, + { + "name": "", + "description": "Defines the elements in the source document for which whitespace should be preserved.", + "attributes": + [ + { + "type":"required", + "name":"elements", + "description":"Specifies the elements for which whitespace should be preserved." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/preserve-space", + "output": "preserved space" + }, + { + "name": "", + "description": "Defines the elements in the source document for which whitespace should be removed.", + "attributes": + [ + { + "type":"required", + "name":"elements", + "description":"Specifies the elements for which whitespace should be preserved." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/strip-space", + "output": "elements with removed whitespace" + }, + { + "name": "", + "description": "Defines a sort key for nodes selected by or and determines the order in which they are processed.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"Uses an XPath expression to specify the nodes to be sorted." + }, + { + "type":"optional", + "name":"order", + "description":"Specifies whether the nodes should be processed in \"ascending\" or \"descending\" order." + }, + { + "type":"optional", + "name":"case-order", + "description":"Indicates whether upper- or lowercase letters are to be ordered first." + }, + { + "type":"optional", + "name":"lang", + "description":"Specifies which language is to be used by the sort." + }, + { + "type":"optional", + "name":"data-type", + "description":"Defines whether items are to be ordered alphabetically or numerically." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/sort", + "output": "sorted elements" + }, + { + "name": "", + "description": "Controls the characteristics of the output document.", + "attributes": + [ + { + "type":"optional", + "name":"method", + "description":"Specifies output format." + }, + { + "type":"optional", + "name":"version", + "description":"Specifies the value of the version attribute of the XML or HTML declaration in the output document." + }, + { + "type":"optional", + "name":"encoding", + "description":"Specifies the value of the encoding attribute in the output document." + }, + { + "type":"optional", + "name":"omit-xml-declaration", + "description":"Indicates whether or not to include an XML declaration in the output." + }, + { + "type":"optional", + "name":"doctype-public", + "description":"Specifies the value of the PUBLIC attribute of the DOCTYPE declaration in the output document." + }, + { + "type":"optional", + "name":"doctype-system", + "description":"Specifies the value of the SYSTEM attribute of the DOCTYPE declaration in the output document." + }, + { + "type":"optional", + "name":"cdata-section-elements", + "description":"Lists elements whose text contents should be written as CDATA sections." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/output", + "output": "changed document prefix" + }, + { + "name": "", + "description": "Used to direct output to a secondary output destination.", + "attributes": + [ + { + "type":"optional", + "name":"format", + "description":"If present, it gives the name of an xsl:output element that describes the serialization format for this output document" + }, + { + "type":"optional", + "name":"href", + "description":"The URI for the result document. If this is a relative URI, it is interpreted relative to the base output URI." + }, + { + "type":"optional", + "name":"validation", + "description":"Requests strict or lax validation of the contents of the document against the element declaration of its top-level element" + }, + { + "type":"optional", + "name":"validation", + "description":"Requests strict or lax validation of the contents of the document against the element declaration of its top-level element; this also invokes document-level validation" + }, + { + "type":"optional", + "name":"validation", + "description":"Requests strict or lax validation of the contents of the document against the element declaration of its top-level element; this also invokes document-level validation" + }, + { + "type":"optional", + "name":"type", + "description":"Requests validation of the constructed document against a specified XSD type" + }, + { + "type":"optional", + "name":"method", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"allow-duplicate-names", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"build-tree", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"byte-order-mark", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"cdata-section-elements", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"doctype-public", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"doctype-system", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"encoding", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"escape-uri-attributes", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"html-version", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"include-content-type", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"indent", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"item-separator", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"json-node-output-method", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"media-type", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"normalization-form", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"omit-xml-declaration", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"parameter-document", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"standalone", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"suppress-indentation", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"undeclare-prefixes", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"use-character-maps", + "description":"Serialization attribute" + }, + { + "type":"optional", + "name":"output-version", + "description":"Overrides the version attribute specified on the output definition." + }, + { + "type":"optional", + "name":"saxon:asynchronous", + "description":"The default for Saxon-EE is yes, which causes the instruction to be evaluated in a separate thread" + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/result-document.html", + "output": "XML Document" + },{ + "name": "", + "description": "Used to direct output to a secondary output destination.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"The name of the character map, which can be referenced from the use-character-maps attribute of xsl:output." + }, + { + "type":"optional", + "name":"use-character-maps", + "description":"Character maps may be assembled from other character maps using the use-character-maps attribute." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/character-map.html", + "output": "named character map" + },{ + "name": "", + "description": "Used to define the output representation of a given Unicode character, in an xsl:character-map.", + "attributes": + [ + { + "type":"required", + "name":"character", + "description":"A single XML character, to be replaced during serialization." + }, + { + "type":"required", + "name":"string", + "description":"Any string, that replaces the specified character during serialization." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/output-character.html", + "output": "defined character" + },{ + "name": "", + "description": "The purpose of the instruction is to allow merging of two or more pre-sorted input files, optionally using streamed processing of any or all of the inputs.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/merge.html", + "output": "merged files" + },{ + "name": "", + "description": "Used within an xsl:merge instruction to define the processing to be carried out on each group of input items sharing a value for the merge key.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/merge-action.html", + "output": "merged files" + },{ + "name": "", + "description": "Used to define the merge keys on which the input sequences of a merging operation are sorted.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"The merge key can be defined either by a string expression in a select attribute, or by an enclosed sequence constructor." + }, + { + "type":"optional", + "name":"lang", + "description":"Declares the algorithm used for alphabetic collating." + }, + { + "type":"optional", + "name":"order", + "description":"Declares the sort order." + }, + { + "type":"optional", + "name":"collation", + "description":"Declares the collation, by the name of a collating sequence." + }, + { + "type":"optional", + "name":"case-order", + "description":"It declares whether uppercase letters are sorted before their lowercase equivalents, or vice-versa" + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/merge-key.html", + "output": "merged files" + },{ + "name": "", + "description": "Describes the input source for an xsl:merge instruction.", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"For each anchor node, this selects the descendant nodes that make up the stream of data to be merged." + }, + { + "type":"optional", + "name":"name", + "description":"Name of the merge source." + }, + { + "type":"optional", + "name":"for-each-item", + "description":"XPath expression returning a set of nodes." + }, + { + "type":"optional", + "name":"for-each-source", + "description":"XPath expression returning a set of URIs" + }, + { + "type":"optional", + "name":"streamable", + "description":"Streamed merging requires Saxon-EE." + }, + { + "type":"optional", + "name":"use-accumulators", + "description":"Defines the set of accumulators that are applicable to the streamed document." + }, + { + "type":"optional", + "name":"sort-before-merge", + "description":"Specifies whether each input sequence will first be sorted to ensure that it is in the correct order." + }, + { + "type":"optional", + "name":"validation", + "description":"Determines whether validation is applied to the input read from this merge source." + }, + { + "type":"optional", + "name":"type", + "description":"If specified, data read from this merge source is validated against the named schema type." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/merge-source.html", + "output": "merged files" + } + ] + }, + { + "name":"Stylesheet structure", + "entries": + [ + { + "name": "", + "description": "Is the outermost element of a stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"version", + "description":"Specifies the version of XSLT required by this stylesheet." + }, + { + "type":"optional", + "name":"exclude-result-prefixes", + "description":"Specifies any namespace used in this document that should not be sent to the output document." + }, + { + "type":"optional", + "name":"extension-element-prefixes", + "description":"Specifies a space-separated list of any namespace prefixes for extension elements in this document." + }, + { + "type":"optional", + "name":"default-collation", + "description":"Specifies the default collation used by all XPath expressions appearing in attributes or text value templates that have the element as an ancestor" + }, + { + "type":"optional", + "name":"default-mode", + "description":"Defines the default value for the mode attribute of all and elements within its scope." + }, + { + "type":"optional", + "name":"default-validation", + "description":"Defines the default value of the validation attribute of all relevant instructions appearing within its scope." + }, + { + "type":"optional", + "name":"expand-text", + "description":"Determines whether descendant text nodes of the element are treated as text value templates." + }, + { + "type":"optional", + "name":"id", + "description":"Specifies an id for this stylesheet. This is most often used when the stylesheet is embedded in another XML document." + }, + { + "type":"optional", + "name":"input-type-annotations", + "description":"Specifies whether type annotations are stripped from the element so the same results are produced whether the source documents have been validated against a schema or not." + }, + { + "type":"optional", + "name":"use-when", + "description":"Determines whether the element and all the nodes that have it as ancestor are excluded from the stylesheet." + }, + { + "type":"optional", + "name":"xpath-default-namespace", + "description":"Specifies the namespace that will be used if the element name is unprefixed or an unprefixed type name within an XPath expression." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/stylesheet", + "output": "XSLT Stylesheet" + }, + { + "name": "", + "description": "Exactly equivalent to the element.", + "attributes": + [ + { + "type":"required", + "name":"version", + "description":"Specifies the version of XSLT required by this stylesheet." + }, + { + "type":"optional", + "name":"exclude-result-prefixes", + "description":"Specifies any namespace used in this document that should not be sent to the output document." + }, + { + "type":"optional", + "name":"extension-element-prefixes", + "description":"Specifies a space-separated list of any namespace prefixes for extension elements in this document." + }, + { + "type":"optional", + "name":"default-collation", + "description":"Specifies the default collation used by all XPath expressions appearing in attributes or text value templates that have the element as an ancestor" + }, + { + "type":"optional", + "name":"default-mode", + "description":"Defines the default value for the mode attribute of all and elements within its scope." + }, + { + "type":"optional", + "name":"default-validation", + "description":"Defines the default value of the validation attribute of all relevant instructions appearing within its scope." + }, + { + "type":"optional", + "name":"expand-text", + "description":"Determines whether descendant text nodes of the element are treated as text value templates." + }, + { + "type":"optional", + "name":"id", + "description":"Specifies an id for this stylesheet. This is most often used when the stylesheet is embedded in another XML document." + }, + { + "type":"optional", + "name":"input-type-annotations", + "description":"Specifies whether type annotations are stripped from the element so the same results are produced whether the source documents have been validated against a schema or not." + }, + { + "type":"optional", + "name":"use-when", + "description":"Determines whether the element and all the nodes that have it as ancestor are excluded from the stylesheet." + }, + { + "type":"optional", + "name":"xpath-default-namespace", + "description":"Specifies the namespace that will be used if the element name is unprefixed or an unprefixed type name within an XPath expression." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/transform", + "output": "XSLT Stylesheet" + }, + { + "name": "", + "description": "Top-level element that serves to import the contents of one stylesheet into another stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"href", + "description":"Specifies the URI of the stylesheet to import." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/import", + "output": "XSLT Stylesheet from another file" + }, + { + "name": "", + "description": "Merges the contents of one stylesheet with another. Unlike the case of , the contents of an included stylesheet have exactly the same precedence as the contents of the including stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"href", + "description":"Specifies the URI of the stylesheet to import." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/include", + "output": "XSLT Stylesheet with XSLT from another file." + }, + { + "name": "", + "description": "Maps a namespace in the stylesheet to a different namespace in the output tree. The most common use for this element is in generating a stylesheet from another stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"stylesheet-prefix", + "description":"Specifies the temporary namespace." + }, + { + "type":"required", + "name":"result-prefix", + "description":"Specifies the desired namespace for the output tree." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/namespace-alias", + "output": "XML Tree with changed namespaces" + }, + { + "name": "", + "description": "Creates an element in the output document.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Specifies the desired name of the output element. The name must be a valid QName." + }, + { + "type":"optional", + "name":"namespace", + "description":"Specifies the namespace of the output element." + }, + { + "type":"optional", + "name":"use-attribute-sets", + "description":"A whitespace-separated list of attribute-set element names to be applied to the element element's output element." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/namespace-alias", + "output": "XML with provided element" + } + ] + }, + { + "name":"Variables and parameters", + "entries": + [ + { + "name": "", + "description": "Establishes a parameter by name and, optionally, a default value for that parameter. When used as a top-level element, the parameter is global. When used inside an element, the parameter is local to that template.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Names the parameter. This must be a QName." + }, + { + "type":"optional", + "name":"select", + "description":"Uses an XPath expression to provide a default value if none is specified." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/param", + "output": "XML parameter" + }, + { + "name": "", + "description": "Declares a global or local variable in a stylesheet and gives it a value.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Gives the variable a name." + }, + { + "type":"optional", + "name":"select", + "description":"Defines the value of the variable through an XPath expression. If the element contains a template, this attribute is ignored." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/variable", + "output": "XML Variable" + }, + { + "name": "", + "description": "Sets the value of a parameter to be passed into a template.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Gives this parameter a name." + }, + { + "type":"optional", + "name":"select", + "description":"Defines the value of the parameter through an XPath expression. If the element contains a template, this attribute is ignored." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/with-param", + "output": "XML Parameter" + }, + { + "name": "", + "description": "Makes a deep copy (including descendant nodes) of whatever the select attribute specifies to the output document.", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"Uses an XPath expression that specifies what is to be copied." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/copy-of", + "output": "Copy of Selected node" + }, + { + "name": "", + "description": "Creates a new document node.", + "attributes": + [ + { + "type":"optional", + "name":"validation", + "description":"Used to perform document-level validation." + }, + { + "type":"optional", + "name":"type", + "description":"Determines what happens to any type annotations on element or attribute nodes" + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/document.html", + "output": "Document Node" + }, + { + "name": "", + "description": "Creates a namespace node.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Defines the name of the namespace node (that is, the namespace prefix)." + }, + { + "type":"optional", + "name":"select", + "description":"The string value of the namespace node" + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/namespace.html", + "output": "Namespace Node" + }, + { + "name": "", + "description": "A top-level element used to control the mapping between a namespace URI used in the stylesheet and the corresponding namespace URI used in the result document.", + "attributes": + [ + { + "type":"required", + "name":"stylesheet-prefix", + "description":"The namespace prefix used in the stylesheet." + }, + { + "type":"required", + "name":"result-prefix", + "description":"The namespace prefix used in the result document." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/namespace-alias.html", + "output": "Document with changed namespaces" + }, + { + "name": "", + "description": "Used to construct arbitrary sequences. It may select any sequence of nodes and/or atomic values, and essentially adds these to the result sequence.", + "attributes": + [ + { + "type":"optional", + "name":"select", + "description":"Specifies the input." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/sequence.html", + "output": "Sequence" + } + ] + }, + { + "name":"Regular Expressions", + "entries": + [ + { + "name": "", + "description": "Applies a regular expression to a supplied string value.", + "attributes": + [ + { + "type":"required", + "name":"select", + "description":"XPath expression whose value is the string to be analyzed. " + }, + { + "type":"required", + "name":"regex", + "description":"The regular expression, which may be given as an attribute value template." + }, + { + "type":"optional", + "name":"flags", + "description":"One or more Perl-like flags to control the way in which regular expression matching is performed, for example the value m indicates multi-line mode." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/analyze-string.html", + "output": "XML Node" + }, + { + "name": "", + "description": "Used within an xsl:analyze-string element to indicate the default action to be taken with substrings that match a regular expression.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/matching-substring.html", + "output": "XML Node" + }, + { + "name": "", + "description": "Used within an xsl:analyze-string element to indicate the default action to be taken with substrings that do not match a regular expression.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/non-matching-substring.html", + "output": "XML Node" + } + ] + }, + { + "name":"Callable", + "entries": + [ + { + "name": "", + "description": "Defines a function within a stylesheet. The function is written in XSLT but it may be called from any XPath expression in the stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Name of the function" + }, + { + "type":"optional", + "name":"as", + "description":"Defines the return type of the function." + }, + { + "type":"optional", + "name":"visibility", + "description":"Determines the visibility of the function in other packages." + }, + { + "type":"optional", + "name":"streamability", + "description":"Defines whether (and in what way) the function is streamable" + }, + { + "type":"optional", + "name":"override-extension-function", + "description":"Determines what happens if this function has the same name and arity as another provided by the implementation or made available in the static context by an implementation-defined mechanism" + }, + { + "type":"optional", + "name":"new-each-time", + "description":"Assigns the function to one of three categories regarding the determinism of functions (relevant to optimization)." + }, + { + "type":"optional", + "name":"cache", + "description":"Indicates whether the function is to cache its results." + }, + { + "type":"optional", + "name":"saxon:as", + "description":"Allows additional type information to be supplied using Saxon extension syntax." + }, + { + "type":"optional", + "name":"saxon:memo-function", + "description":"Specifying yes indicates that Saxon should remember the results of calling the function in a cache, and if the function is called again with the same arguments, the result is retrieved from the cache rather than being recalculated." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/function.html", + "output": "Function" + }, + { + "name": "", + "description": "Defines a function within a stylesheet. The function is written in XSLT but it may be called from any XPath expression in the stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"xpath", + "description":"An XPath expression which is evaluated to return the target expression as a string." + }, + { + "type":"optional", + "name":"as", + "description":"Defines the required type of the result of the XPath expression. Defaults to item()*." + }, + { + "type":"optional", + "name":"base-uri", + "description":"The base URI for the target expression. Defaults to the base URI of the stylesheet instruction." + }, + { + "type":"optional", + "name":"with-params", + "description":"Defines whether (and in what way) the function is streamable" + }, + { + "type":"optional", + "name":"context-item", + "description":"An XPath expression which is evaluated to determine the context item, position, and size, for evaluation of the target expression." + }, + { + "type":"optional", + "name":"namespace-context", + "description":"An expression returning a node; the in-scope namespaces of this node define the namespace context for the XPath expression." + }, + { + "type":"optional", + "name":"schema-aware", + "description":"If yes, the XPath expression has access to the schema components imported into the stylesheet." + }, + { + "type":"optional", + "name":"saxon:options", + "description":"The value of the attribute is an expression that evaluates to a map." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/evaluate.html", + "output": "String" + }, + { + "name": "", + "description": "Defines a function within a stylesheet. The function is written in XSLT but it may be called from any XPath expression in the stylesheet.", + "attributes": + [ + { + "type":"required", + "name":"test", + "description":"XPath expression to be asserted. " + }, + { + "type":"optional", + "name":"select", + "description":"Can be used to specify (part of) the content of the error message produced when the assertion is false." + }, + { + "type":"optional", + "name":"error-code", + "description":"Specifies the error code associated with the error message produced when the assertion is false." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/assert.html", + "output": "Error or nothing" + } + ] + }, + { + "name":"Misc", + "entries": + [ + { + "name": "", + "description": "Outputs a message (to the JavaScript Console in NS) and optionally terminates execution of the stylesheet.", + "attributes": + [ + { + "type":"optional", + "name":"terminate", + "description":"Set to \"yes\", indicates that execution should be terminated. The default value is \"no\", in which case the message is output and execution continues." + } + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/message", + "output": "Message in console" + }, + { + "name": "", + "description": "specifies what template to use if a given extension (or, eventually, newer version) element is not supported.", + "attributes": + [ + ], + "examples": [], + "documentationReferenceURL": "https://developer.mozilla.org/en-US/docs/Web/XSLT/Element/fallback", + "output": "Fallbacks" + }, + { + "name": "", + "description": "Used to construct a new map.", + "attributes": + [ + { + "type":"optional", + "name":"on-duplicates", + "description":" If the attribute is present, then when a duplicate key value is encountered, the function is called supplying the old and new values for the key, and the old value for the key is replaced with the result of the function call." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/map.html", + "output": "Map" + }, + { + "name": "", + "description": "Used to construct a singleton map (one key and one value).", + "attributes": + [ + { + "type":"required", + "name":"key", + "description":"Expression which defines the key of the entry in the new map." + }, + { + "type":"optional", + "name":"select", + "description":"The associated value can be defined either by a select attribute or by an enclosed sequence constructor." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/map-entry.html", + "output": "Singleton Map" + }, + { + "name": "", + "description": "Used to modify the visibility of selected components within a package.", + "attributes": + [ + { + "type":"required", + "name":"component", + "description":"Identifies the kind of component that is selected. " + }, + { + "type":"required", + "name":"names", + "description":"Identifies a subset of the specified components, by name. " + }, + { + "type":"required", + "name":"visibility", + "description":"Determines the external visibility of the selected components." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/expose.html", + "output": "Element with changed visibility" + }, + { + "name": "", + "description": "Used to modify the visibility of selected components within a package.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"Defines a name for the accumulator." + }, + { + "type":"required", + "name":"initial-value", + "description":"Defines the initial value of the accumulator." + }, + { + "type":"optional", + "name":"as", + "description":"Defines the type of the accumulator variable; default is item()*." + }, + { + "type":"optional", + "name":"streamable", + "description":"Requests streamed evaluation of the accumulator if set to yes." + }, + { + "type":"optional", + "name":"saxon:trace", + "description":"Causes a trace message to be output (to the Configuration's Logger) whenever the value of the accumulator changes." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/accumulator.html", + "output": "Accumulator" + }, + { + "name": "", + "description": "Defines a rule for an xsl:accumulator.", + "attributes": + [ + { + "type":"required", + "name":"match", + "description":"Pattern defining the set of nodes to which the accumulator rule applies. " + }, + { + "type":"optional", + "name":"phase", + "description":"Determines whether the rule fires before or after descendants are processed, by specifying phase=\"start\" (the default) or phase=\"end\" respectively. " + }, + { + "type":"optional", + "name":"select", + "description":"The expression to be evaluated by the rule may be given either by a select attribute, or by an enclosed sequence constructor. " + }, + { + "type":"optional", + "name":"saxon:capture", + "description":"The value \"yes|true|1\" on a phase=\"end\" rule for a streaming accumulator removes the requirement for the select attribute (or sequence constructor) to be motionless." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/accumulator-rule.html", + "output": "Accumulator" + }, + { + "name": "", + "description": "Used to initiate streamed or unstreamed processing of a source document.", + "attributes": + [ + { + "type":"required", + "name":"href", + "description":"The URI of a source document. It can be written as an attribute value template if the URI is not known statically." + }, + { + "type":"optional", + "name":"streamable", + "description":"Used to request streamed processing (the default is no)." + }, + { + "type":"optional", + "name":"use-accumulators", + "description":"Defines the set of accumulators that are applicable to the document." + }, + { + "type":"optional", + "name":"type", + "description":"Requests validation of the source document against a specified XSD type. The value will typically be a user-defined complex type defined in an imported schema." + }, + { + "type":"optional", + "name":"saxon:dtd-validation", + "description":"Controls whether DTD validation takes place." + }, + { + "type":"optional", + "name":"saxon:expand-attribute-defaults", + "description":"Controls whether attribute defaults defined in the schema or DTD are expanded." + }, + { + "type":"optional", + "name":"saxon:line-numbering", + "description":"Used to enable line numbering for the document being read." + }, + { + "type":"optional", + "name":"saxon:strip-space", + "description":"Used to specify whitespace stripping" + }, + { + "type":"optional", + "name":"saxon:xinclude", + "description":"Controls whether XInclude processing takes place." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/source-document.html", + "output": "Processed Document" + }, + { + "name": "", + "description": "Used to allow components of one package to be referenced within another.", + "attributes": + [ + { + "type":"required", + "name":"name", + "description":"The name of the package to be used, as an absolute URI." + }, + { + "type":"optional", + "name":"package-version", + "description":"The version of the named package to be used. The default is *, which matches any version. " + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/use-package.html", + "output": "Package" + }, + { + "name": "", + "description": "Used to allow conditional content construction to be made streamable. Used to avoid outputting a wrapper element if it would have no children.", + "attributes": + [ + + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/where-populated.html", + "output": "checks for children" + }, + { + "name": "", + "description": "Allows a package to restrict the visibility of components exposed by a package that it uses.", + "attributes": + [ + { + "type":"required", + "name":"component", + "description":"Identifies the kind of component selected" + }, + { + "type":"required", + "name":"names", + "description":"Identifies a subset of the specified components, by name. " + }, + { + "type":"required", + "name":"visibility", + "description":"Determines the potential visibility of the selected components." + } + ], + "examples": [], + "documentationReferenceURL": "https://www.saxonica.com/html/documentation12/xsl-elements/accept.html", + "output": "restricts visibility" + } + ] + } +] \ No newline at end of file diff --git a/Frontend/src/assets/tooltips/xslt/xsltdiffs.json b/Frontend/src/assets/tooltips/xslt/xsltdiffs.json new file mode 100644 index 0000000..a55215b --- /dev/null +++ b/Frontend/src/assets/tooltips/xslt/xsltdiffs.json @@ -0,0 +1,52 @@ +{ + "universalInfo": + [ + { + "category":"What is XSLT", + "description":"XSLT (Extensible Stylesheet Language Transformations) is a language for converting and manipulating XML data into various formats. It uses rules defined in stylesheets to transform XML documents into HTML, XML, or other text-based outputs." + }, + { + "category":"What's differences between XSLT versions" + } + ], + "VersionDiffs": + [ + { + "version":"2.0", + "diffs": + [ + "Introduced a richer data model with support for various data types and sequences, allowing more flexible handling of data.", + "Added native support for regular expressions, making text processing and pattern matching more powerful.", + "Introduced the concept of higher-order functions, enabling functions to be used as arguments and returned as results, enhancing the language's functional capabilities.", + "Expanded the set of built-in string functions, making string manipulation and formatting more versatile.", + "Introduced the concept of sequences, where nodes could be processed without relying solely on their order in the source document.", + "Provided improved error handling and reporting mechanisms, making it easier to diagnose and fix issues in transformations.", + "Allowed variable and function parameters to have type annotations, enhancing clarity and enabling better optimization.", + "Refined the handling of namespaces and introduced features for dealing with namespaces more effectively.", + "Introduced more advanced grouping capabilities, allowing grouping based on multiple criteria.", + "Expanded sorting options, making it possible to sort data based on multiple keys and in different directions." + ] + }, + { + "version":"3.0", + "diffs": + [ + "Extended the support for higher-order functions by introducing new functions like map and filter, enabling more functional programming patterns.", + "Introduced streaming capabilities, allowing processing of large documents without loading the entire document into memory, which improves performance and memory usage.", + "Introduced functions to parse and serialize JSON data, enabling transformations between XML and JSON formats.", + "Enhanced type annotations, allowing for more precise typing of variables and parameters, aiding both readability and optimization.", + "Introduced new standard functions, expanding the range of operations and calculations that can be performed within transformations.", + "Introduced a new data structure called maps, allowing for efficient key-value pair storage and manipulation.", + "Introduced tunnel parameters, which can pass data through templates without explicitly listing them in the template's parameter list", + "Introduced a try-catch construct for better error handling, allowing you to catch and handle errors more gracefully.", + "Introduced the ability to execute multiple templates concurrently, improving performance in multi-core environments.", + "Integrated new features from XPath 3.1, including support for higher-order functions and enhanced string manipulation functions.", + "Enhanced grouping capabilities, making it more powerful and flexible for complex grouping scenarios.", + "Allowed dynamic function calls using the xsl:evaluate element, enabling more dynamic transformations." + ] + } + + ] + + +} \ No newline at end of file diff --git a/Frontend/src/components/CodeEditorComponent.vue b/Frontend/src/components/CodeEditorComponent.vue new file mode 100644 index 0000000..1b57d4b --- /dev/null +++ b/Frontend/src/components/CodeEditorComponent.vue @@ -0,0 +1,69 @@ + + + diff --git a/Frontend/src/components/common/InsertTemplateComponent.vue b/Frontend/src/components/common/InsertTemplateComponent.vue new file mode 100644 index 0000000..6548764 --- /dev/null +++ b/Frontend/src/components/common/InsertTemplateComponent.vue @@ -0,0 +1,49 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/formatter/HtmlButtonFormatterComponent.vue b/Frontend/src/components/formatter/HtmlButtonFormatterComponent.vue new file mode 100644 index 0000000..3a64814 --- /dev/null +++ b/Frontend/src/components/formatter/HtmlButtonFormatterComponent.vue @@ -0,0 +1,54 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/formatter/JsonButtonFormatterComponent.vue b/Frontend/src/components/formatter/JsonButtonFormatterComponent.vue new file mode 100644 index 0000000..f368077 --- /dev/null +++ b/Frontend/src/components/formatter/JsonButtonFormatterComponent.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/Frontend/src/components/formatter/XMLButtonFormatterComponent.vue b/Frontend/src/components/formatter/XMLButtonFormatterComponent.vue new file mode 100644 index 0000000..21a79cc --- /dev/null +++ b/Frontend/src/components/formatter/XMLButtonFormatterComponent.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/Frontend/src/components/landing/LandingComponent.vue b/Frontend/src/components/landing/LandingComponent.vue new file mode 100644 index 0000000..c8b12a8 --- /dev/null +++ b/Frontend/src/components/landing/LandingComponent.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/Frontend/src/components/mock/BodyDetailComponent.vue b/Frontend/src/components/mock/BodyDetailComponent.vue new file mode 100644 index 0000000..1975c24 --- /dev/null +++ b/Frontend/src/components/mock/BodyDetailComponent.vue @@ -0,0 +1,18 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/mock/HeadersComponent.vue b/Frontend/src/components/mock/HeadersComponent.vue new file mode 100644 index 0000000..cd0ce2b --- /dev/null +++ b/Frontend/src/components/mock/HeadersComponent.vue @@ -0,0 +1,74 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/mock/HeadersDetailComponent.vue b/Frontend/src/components/mock/HeadersDetailComponent.vue new file mode 100644 index 0000000..ce1ad41 --- /dev/null +++ b/Frontend/src/components/mock/HeadersDetailComponent.vue @@ -0,0 +1,23 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/mock/HistoryComponent.vue b/Frontend/src/components/mock/HistoryComponent.vue new file mode 100644 index 0000000..de600b4 --- /dev/null +++ b/Frontend/src/components/mock/HistoryComponent.vue @@ -0,0 +1,42 @@ + + + + \ No newline at end of file diff --git a/Frontend/src/components/mock/HistoryRecords.vue b/Frontend/src/components/mock/HistoryRecords.vue new file mode 100644 index 0000000..ae5a2e4 --- /dev/null +++ b/Frontend/src/components/mock/HistoryRecords.vue @@ -0,0 +1,68 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/mock/MockedMessageToastComponent.vue b/Frontend/src/components/mock/MockedMessageToastComponent.vue new file mode 100644 index 0000000..d3d17d3 --- /dev/null +++ b/Frontend/src/components/mock/MockedMessageToastComponent.vue @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/Frontend/src/components/mock/RestMockMessageComponent.vue b/Frontend/src/components/mock/RestMockMessageComponent.vue new file mode 100644 index 0000000..c12813d --- /dev/null +++ b/Frontend/src/components/mock/RestMockMessageComponent.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/Frontend/src/components/mock/SaveComponent.vue b/Frontend/src/components/mock/SaveComponent.vue new file mode 100644 index 0000000..4639250 --- /dev/null +++ b/Frontend/src/components/mock/SaveComponent.vue @@ -0,0 +1,46 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/sidebar/FooterComponent.vue b/Frontend/src/components/sidebar/FooterComponent.vue new file mode 100644 index 0000000..02b0ee6 --- /dev/null +++ b/Frontend/src/components/sidebar/FooterComponent.vue @@ -0,0 +1,15 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/sidebar/SidebarComponent.vue b/Frontend/src/components/sidebar/SidebarComponent.vue new file mode 100644 index 0000000..4f63d94 --- /dev/null +++ b/Frontend/src/components/sidebar/SidebarComponent.vue @@ -0,0 +1,55 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/sidebar/SidebarMenuElementComponent.vue b/Frontend/src/components/sidebar/SidebarMenuElementComponent.vue new file mode 100644 index 0000000..9eed53b --- /dev/null +++ b/Frontend/src/components/sidebar/SidebarMenuElementComponent.vue @@ -0,0 +1,28 @@ + + + + \ No newline at end of file diff --git a/Frontend/src/components/sidebar/SidebarToolLinkComponent.vue b/Frontend/src/components/sidebar/SidebarToolLinkComponent.vue new file mode 100644 index 0000000..5a1b5c4 --- /dev/null +++ b/Frontend/src/components/sidebar/SidebarToolLinkComponent.vue @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/Frontend/src/components/xml/XmlInputFieldComponent.vue b/Frontend/src/components/xml/XmlInputFieldComponent.vue new file mode 100644 index 0000000..295b421 --- /dev/null +++ b/Frontend/src/components/xml/XmlInputFieldComponent.vue @@ -0,0 +1,56 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/xml/XmlInputFieldToolbarComponent.vue b/Frontend/src/components/xml/XmlInputFieldToolbarComponent.vue new file mode 100644 index 0000000..f0722ea --- /dev/null +++ b/Frontend/src/components/xml/XmlInputFieldToolbarComponent.vue @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/xml/XmlOutputFieldComponent.vue b/Frontend/src/components/xml/XmlOutputFieldComponent.vue new file mode 100644 index 0000000..e0d140d --- /dev/null +++ b/Frontend/src/components/xml/XmlOutputFieldComponent.vue @@ -0,0 +1,151 @@ + + + diff --git a/Frontend/src/components/xml/XmlToolComponent.vue b/Frontend/src/components/xml/XmlToolComponent.vue new file mode 100644 index 0000000..e9bd4cf --- /dev/null +++ b/Frontend/src/components/xml/XmlToolComponent.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/Frontend/src/components/xml/tooltips/TooltipCategoryComponent.vue b/Frontend/src/components/xml/tooltips/TooltipCategoryComponent.vue new file mode 100644 index 0000000..ba854df --- /dev/null +++ b/Frontend/src/components/xml/tooltips/TooltipCategoryComponent.vue @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/xml/tooltips/TooltipComponent.vue b/Frontend/src/components/xml/tooltips/TooltipComponent.vue new file mode 100644 index 0000000..d25760f --- /dev/null +++ b/Frontend/src/components/xml/tooltips/TooltipComponent.vue @@ -0,0 +1,73 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/xml/tooltips/TooltipDiffsComponent.vue b/Frontend/src/components/xml/tooltips/TooltipDiffsComponent.vue new file mode 100644 index 0000000..bb07ed7 --- /dev/null +++ b/Frontend/src/components/xml/tooltips/TooltipDiffsComponent.vue @@ -0,0 +1,71 @@ + + + \ No newline at end of file diff --git a/Frontend/src/components/xml/tooltips/TooltipEntryComponent.vue b/Frontend/src/components/xml/tooltips/TooltipEntryComponent.vue new file mode 100644 index 0000000..4add829 --- /dev/null +++ b/Frontend/src/components/xml/tooltips/TooltipEntryComponent.vue @@ -0,0 +1,110 @@ + + + \ No newline at end of file diff --git a/Frontend/src/main.ts b/Frontend/src/main.ts new file mode 100644 index 0000000..112fb9b --- /dev/null +++ b/Frontend/src/main.ts @@ -0,0 +1,6 @@ +import { createApp } from 'vue'; +import router from "./router"; +import App from './App.vue'; +import '@/style.css' + +createApp(App).use(router).mount('#app') diff --git a/Frontend/src/router/index.ts b/Frontend/src/router/index.ts new file mode 100644 index 0000000..a4af1bd --- /dev/null +++ b/Frontend/src/router/index.ts @@ -0,0 +1,70 @@ +import { createRouter, createWebHistory } from 'vue-router' + +const landingPage = import("@views/LandingView.vue") +const restMock = import("@views/RestMockView.vue") + +const jsonFormatter = import("@views/JsonFormatterView.vue") +const xmlFormatter = import("@views/XmlFormatterView.vue") +const HtmlFormatterView = import("@views/HtmlFormatterView.vue") + +const xsltTool = import("@views/XSLTView.vue") +const xsdTool = import("@views/XSDView.vue") +const xpathTool = import("@views/XPathView.vue") +const xqueryTool = import("@views/XQueryView.vue") + +const routes = [ + { + path: '/', + name: 'landing', + component: () => landingPage + }, + { + path: '/format/xml', + name: 'xmlFormatter', + component: () => xmlFormatter + }, + { + path: '/format/json', + name: 'jsonFormatter', + component: () => jsonFormatter + }, + { + path: '/format/html', + name: 'htmlFormatter', + component: () => HtmlFormatterView + }, + { + path: '/xml/xpath', + name: 'xpath', + component: () => xpathTool + }, + { + path: '/xml/xquery', + name: 'xquery', + component: () => xqueryTool + }, + { + path: '/xml/xsd', + name: 'xsd', + component: () => xsdTool + }, + { + path: '/xml/xslt', + name: 'xslt', + component: () => xsltTool + }, + { + path: '/rest/mock', + name: 'restmock', + component: () => restMock + } +] + + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: routes +}) + + +export default router; \ No newline at end of file diff --git a/Frontend/src/shims-svg.d.ts b/Frontend/src/shims-svg.d.ts new file mode 100644 index 0000000..de2752d --- /dev/null +++ b/Frontend/src/shims-svg.d.ts @@ -0,0 +1,5 @@ +declare module '*.svg' { + import Vue, {VueConstructor} from 'vue'; + const content: VueConstructor; + export default content; + } \ No newline at end of file diff --git a/Frontend/src/shims-vue.d.ts b/Frontend/src/shims-vue.d.ts new file mode 100644 index 0000000..cd04b72 --- /dev/null +++ b/Frontend/src/shims-vue.d.ts @@ -0,0 +1 @@ +declare module '*.vue'; \ No newline at end of file diff --git a/Frontend/src/style.css b/Frontend/src/style.css new file mode 100644 index 0000000..2133826 --- /dev/null +++ b/Frontend/src/style.css @@ -0,0 +1,15 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.inactive-button { + @apply py-2 px-4 h-fit text-slate-400 border border-slate-400 rounded-full +} + +.tool-button { + @apply hover:brightness-110 py-2 px-4 h-fit rounded-full bg-gradient-to-r from-blue-400 to-sky-300 dark:text-white dark:from-sky-600 dark:to-sky-800 hover:bg-blue-400 +} + +.text-field { + @apply w-full font-mono dark:text-slate-100 bg-slate-50 dark:bg-gray-600 border border-slate-400 p-2 rounded-lg +} \ No newline at end of file diff --git a/Frontend/src/views/HtmlFormatterView.vue b/Frontend/src/views/HtmlFormatterView.vue new file mode 100644 index 0000000..4e16a32 --- /dev/null +++ b/Frontend/src/views/HtmlFormatterView.vue @@ -0,0 +1,34 @@ + + + \ No newline at end of file diff --git a/Frontend/src/views/JsonFormatterView.vue b/Frontend/src/views/JsonFormatterView.vue new file mode 100644 index 0000000..8303489 --- /dev/null +++ b/Frontend/src/views/JsonFormatterView.vue @@ -0,0 +1,37 @@ + + + \ No newline at end of file diff --git a/Frontend/src/views/LandingView.vue b/Frontend/src/views/LandingView.vue new file mode 100644 index 0000000..ad7bd57 --- /dev/null +++ b/Frontend/src/views/LandingView.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/Frontend/src/views/RestMockView.vue b/Frontend/src/views/RestMockView.vue new file mode 100644 index 0000000..82584b9 --- /dev/null +++ b/Frontend/src/views/RestMockView.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/Frontend/src/views/XPathView.vue b/Frontend/src/views/XPathView.vue new file mode 100644 index 0000000..0c9e103 --- /dev/null +++ b/Frontend/src/views/XPathView.vue @@ -0,0 +1,29 @@ + + + \ No newline at end of file diff --git a/Frontend/src/views/XQueryView.vue b/Frontend/src/views/XQueryView.vue new file mode 100644 index 0000000..972192f --- /dev/null +++ b/Frontend/src/views/XQueryView.vue @@ -0,0 +1,20 @@ + + + \ No newline at end of file diff --git a/Frontend/src/views/XSDView.vue b/Frontend/src/views/XSDView.vue new file mode 100644 index 0000000..6aca08b --- /dev/null +++ b/Frontend/src/views/XSDView.vue @@ -0,0 +1,20 @@ + + + \ No newline at end of file diff --git a/Frontend/src/views/XSLTView.vue b/Frontend/src/views/XSLTView.vue new file mode 100644 index 0000000..f8f19b1 --- /dev/null +++ b/Frontend/src/views/XSLTView.vue @@ -0,0 +1,28 @@ + + + \ No newline at end of file diff --git a/Frontend/src/views/XmlFormatterView.vue b/Frontend/src/views/XmlFormatterView.vue new file mode 100644 index 0000000..9149a44 --- /dev/null +++ b/Frontend/src/views/XmlFormatterView.vue @@ -0,0 +1,37 @@ + + + \ No newline at end of file diff --git a/Frontend/tailwind.config.js b/Frontend/tailwind.config.js new file mode 100644 index 0000000..ff48818 --- /dev/null +++ b/Frontend/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{vue,js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} \ No newline at end of file diff --git a/Frontend/tools/jsonFormatter.html b/Frontend/tools/jsonFormatter.html deleted file mode 100644 index 59eee48..0000000 --- a/Frontend/tools/jsonFormatter.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Online JSON Formatter

    -
    - -
    -
    -
    - Insert your JSON: -
    - -
    - - -
    -
    -
    -              {"enter": "your", "json": "here"}
    -          
    - - - - -
    -
    - -
    -

    What is this?

    -

    This tool has 2 main functions: -

      -
    • Prettify JSON to make it human-readable (add indentation etc.)
    • -
    • Minimize JSON to make it more compact (exactly opposite to above)
    • -
    -

    -
    - -
    - - diff --git a/Frontend/tools/mock.html b/Frontend/tools/mock.html deleted file mode 100644 index e41c7cc..0000000 --- a/Frontend/tools/mock.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - R11 MockedServices - - - - - - - - -
    -
    -
    -
    -

    MockedServices

    -
    -
    - -

    Your Message

    - - -
    - - - -
    -
    - -
    - -
    - - - - -
    - -
    - - - - -
    -
    -
    - -
    -
    - -
    - - -
    - - - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    NameValue
    -
    - -
    -
    - - -
    - - - - - - - - - - - -
    TimestampMethodRequest BodyHeaders
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    What's this?

    -

    MockedServices is a tool that allows developer to create, in easy and simple way, http server mocked endpoints for integration tests.

    -

    Help

    -

    When cursor hovers over an item. It's description is displayed below.

    -
    -
    -

    Link

    -

    Link is an url representing an endpoint at which you can receive your mocked response by simply sending get request.

    -
    -
    -
    -
    -

    Save button!

    -

    To save message, the message must be changed!

    -
    -
    - -
    -
    -
    -
    -

    Http Status

    -

    Value of the field is corresponding to status value that server will return.

    -
    -
    -
    -
    -

    Content Type

    -

    Value of the field describes content of body payload contained in the response. For example if content is in xml format the value should be "application/xml" or "text/xml"

    -
    -
    -
    -
    -

    Body

    -

    Value of the field describes content of response body. It's basicly the message we want server to return. If it's simple response like 200 OK or 404 not found then field might be left empty.

    -
    -
    -
    -
    -

    Headers

    -

    Content of this tab allows to set and modify headers that will be included in the response.

    -
    -
    -
    -
    -

    History

    -

    Content of this tab displays the history of requests or responses received/sent to the endpoint

    -
    -
    -
    -
    -

    New header

    -

    Insert value in the field and press the plus icon to add a new header to the message.

    -
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - diff --git a/Frontend/tools/xmlFormatter.html b/Frontend/tools/xmlFormatter.html deleted file mode 100644 index a200e44..0000000 --- a/Frontend/tools/xmlFormatter.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Online XML Formatter

    -
    - - -
    -
    -
    - -
    -
    - - -
    - -
    - -
    -

    - - - -
    -
    -
    -

    What is this?

    -

    This tool has 2 main functions: -

      -
    • Prettify XML to make it human-readable (add indentation etc.)
    • -
    • Minimize XML to make it more compact (exactly opposite to above)
    • -
    -

    -
    - - - -
    - - - - diff --git a/Frontend/tools/xpath.html b/Frontend/tools/xpath.html deleted file mode 100644 index 6a6fc3c..0000000 --- a/Frontend/tools/xpath.html +++ /dev/null @@ -1,17121 +0,0 @@ - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Online XPath tester

    -
    - -
    -
    - -
    - - -
    -
    - - - -
    -
    -
    - -
    -
    - -
    -
    - -
    - -
    - -
    -
    -
    -

    What is XPath?

    -

    - XPath is a query language used for selecting nodes from XML and processing them.
    - It may perform operations on strings, numbers and boolean values.
    -

    -

    -

    Semantics legend:

    -

    - "+" - 1 or more elements -

    -

    - "*" - 0 or more elements -

    -

    - "?" - optional element -

    -

    - - -
    - - - -
    -

    XPath 2.0 introduced many new features XQuery-cośtam:
    - - Added support for all XML simple types
    - - Many new functions (tripled instruction count)
    - - All expressions evaluate to sequence
    - - Introduces conditional expressions and for-loops
    -

    -

    XPath 3.0
    - - Dynamic function calls (function may be called without being referenced by name (find - function in collection and call)
    - - Inline functions
    - - Namespace literals - Namespace may be embedded into function name
    - - Support for union types - collections containing elements of different types
    - - Mapping operator - '!' performs evaluation for each element in sequence and - concatenates results
    - - Introduced maps
    -

    -

    XPath 3.1
    - - New operator for function chaining '=>'
    - - Introduced maps that store data in pair 'key:value' - 'map{ key : value, key : value - }'
    - - Introduced arrays - they differ from sequences in that they can be nested 'array{1, 5, 7, - (10 to 20)}'
    - -

    -
    -
    - -

    XPath 1.0 & 2.0 functions

    - - - - -
    - - - -
    - fn:position() -
    - Returns the position of the current context node.
    -
    - W3C Documentation reference: Node-Set-Functions -
    - - fn:last() -
    - The last function returns a number equal to the context size from the expression evaluation context.
    -
    - W3C Documentation reference: Node-Set-Functions -
    - - - fn:count() -
    - Returns the number of nodes in the node-set
    - Arguments: - - - - - - - - - -
    TypeDescription
    node-setNode-set to count nodes in
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    count(//b:book)5
    count(//person[@id>5])17

    - W3C Documentation reference: Node-Set-Functions -
    - - - - fn:id() -
    - Returns the element specified by it's unique id, requires DTD
    -
    - W3C Documentation reference: Node-Set-Functions -
    - - - - fn:local-name() -
    - Returns the local-name for the first node in the node-set
    - Arguments: - - - - - - - - - -
    TypeDescription
    node-setExtract first node and return its local name
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    local-name(//b:books)b:book
    local-name(//b:book)b:title

    - W3C Documentation reference: Node-Set-Functions -
    - - - fn:namespace-uri() -
    - Returns the namespace-uri for the first node in the node-set
    - Arguments: - - - - - - - - - -
    TypeDescription
    node-setExtract first node and return the namespace URI
    Examples:
    - - - - - - - - - -
    ExpressionResult
    namespace-uri(//b:book)http://www.book.com

    - W3C Documentation reference: Node-Set-Functions -
    - - - fn:name() -
    - Returns the name for the first node in the node-set
    - Arguments: - - - - - - - - - -
    TypeDescription
    node-set (Optional)Extract first node and return QName
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    name(//b:books/*)b:book
    name(//b:book/*)b:title

    - W3C Documentation reference: Node-Set-Functions -
    - -
    -
    -
    - - - -
    - - - fn:boolean() -
    - The boolean function converts its argument to a boolean as follows: -
      -
    • a number is true if and only if it is neither positive or negative zero nor NaN
    • -
    • a node-set is true if and only if it is non-empty
    • -
    • a string is true if and only if its length is non-zero
    • -
    • an object of a type other than the four basic types is converted to a boolean in a way that is dependent on that type
    • -
    - - Arguments: - - - - - - - - - -
    TypeDescription
    objectThe object to convert to a boolean
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    boolean("Release11")true
    boolean("")false

    - W3C Documentation reference: Boolean-Functions -
    - - fn:not() -
    - The not function returns true if its argument is false, and false otherwise.
    -
    - W3C Documentation reference: Boolean-Functions -
    - - - fn:true() -
    - The true function returns true.
    -
    - W3C Documentation reference: Boolean-Functions -
    - - - fn:false() -
    - The true function returns false.
    -
    - W3C Documentation reference: Boolean-Functions -
    - - fn:lang() -
    - The lang function returns true or false depending on whether the language of the context node as specified by xml:lang attributes is the same as or is a sublanguage of the language specified by the argument string. The language of the context node is determined by the value of the xml:lang attribute on the context node, or, if the context node has no xml:lang attribute, by the value of the xml:lang attribute on the nearest ancestor of the context node that has an xml:lang attribute. If there is no such attribute, then lang returns false. If there is such an attribute, then lang returns true if the attribute value is equal to the argument ignoring case, or if there is some suffix starting with - such that the attribute value is equal to the argument ignoring that suffix of the attribute value and ignoring case.
    - Arguments: - - - - - - - - - -
    TypeDescription
    stringLanguage that will be looked for in context node
    Examples: Look W3C documentation
    -
    - W3C Documentation reference: Boolean-Functions -
    - - -
    -
    -
    - - - -
    - - fn:string() -
    - The string function converts an object to a string as follows: A node-set is converted to a string by returning the string-value of the node in the node-set that is first in document order. If the node-set is empty, an empty string is returned.
    - - Arguments: - - - - - - - - - -
    TypeDescription
    objectThe object to convert to a string
    Examples:
    - - - - - - - - - -
    ExpressionResult
    string(10)true

    - W3C Documentation reference: String-Functions -
    - - - fn:concat() -
    - The concat function returns the concatenation of its arguments.
    - - Arguments: - - - - - - - - - -
    TypeDescription
    string*Strings to concatenate
    Examples:
    - - - - - - - - - -
    ExpressionResult
    concat("Release", 11)Release11

    - W3C Documentation reference: String-Functions -
    - - fn:starts-with() -
    - Returns true if the first argument string starts with the second argument string, and otherwise returns false.
    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    stringString to test
    stringString that first string has to start from
    Examples:
    - - - - - - - - - -
    ExpressionResult
    starts-with("Release11", "Rel")true

    - W3C Documentation reference: String-Functions -
    - - fn:contains() -
    - The contains function returns true if the first argument string contains the second argument string, and otherwise returns false.
    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    stringString to test
    stringString that first string has to contain
    Examples:
    - - - - - - - - - -
    ExpressionResult
    contains("Release11", "eas")true

    - W3C Documentation reference: String-Functions -
    - - fn:substring-before() -
    - The substring-before function returns the substring of the first argument string that precedes the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string.
    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    stringString to test
    stringString that first string has to contain
    Examples:
    - - - - - - - - - -
    ExpressionResult
    substring-before("1999/04/01","/")1999

    - W3C Documentation reference: String-Functions -
    - - - fn:substring-after() -
    - The substring-after function returns the substring of the first argument string that follows the first occurrence of the second argument string in the first argument string, or the empty string if the first argument string does not contain the second argument string.
    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    stringString to test
    stringString that first string has to contain
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    substring-after("1999/04/01","/")04/01
    substring-after("1999/04/01","19")99/04/01

    - W3C Documentation reference: String-Functions -
    - - - fn:substring() -
    - The substring function returns the substring of the first argument starting at the position specified in the second argument with length specified in the third argument.
    - - Arguments: - - - - - - - - - - - - - - - - - -
    TypeDescription
    stringString to test
    numberStarting index
    number?Length of target substring
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    substring("12345",2)2345
    substring("12345",2,3)234

    - W3C Documentation reference: String-Functions -
    - - fn:string-length() -
    - The string-length returns the number of characters in the string. If the argument is omitted, it defaults to the context node converted to a string, in other words the string-value of the context node.
    - - Arguments: - - - - - - - - - -
    TypeDescription
    string?String to test
    Examples:
    - - - - - - - - - -
    ExpressionResult
    string-length("abcdef")6

    - W3C Documentation reference: String-Functions -
    - - fn:normalize-space() -
    - The normalize-space function returns the argument string with whitespace normalized by stripping leading and trailing whitespace and replacing sequences of whitespace characters by a single space. Whitespace characters are the same as those allowed by the S production in XML. If the argument is omitted, it defaults to the context node converted to a string, in other words the string-value of the context node.
    - - Arguments: - - - - - - - - - -
    TypeDescription
    string?String to test
    Examples:
    - - - - - - - - - -
    ExpressionResult
    normalize-space(" abc def ")abc def

    - W3C Documentation reference: String-Functions -
    - - - fn:translate() -
    - The translate function returns the first argument string with occurrences of characters in the second argument string replaced by the character at the corresponding position in the third argument string. If there is a character in the second argument string with no character at a corresponding position in the third argument string (because the second argument string is longer than the third argument string), then occurrences of that character in the first argument string are removed.
    - - Arguments: - - - - - - - - - - - - - - - - - -
    TypeDescription
    stringString to translate
    stringCharacters to remove
    stringString to insert characters from second argument
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    translate("bar","abc","ABC")BAr
    translate("--aaa--","abc-","ABC")AAA

    - W3C Documentation reference: String-Functions -
    - - -
    -
    -
    - - - -
    - - - fn:number() -
    - The number function converts its argument to a number as follows: -
      -
    • a string that consists of optional whitespace followed by an optional minus sign followed by a Number followed by whitespace is converted to the IEEE 754 number that is nearest (according to the IEEE 754 round-to-nearest rule) to the mathematical value represented by the string; any other string is converted to NaN
    • -
    • boolean true is converted to 1; boolean false is converted to 0
    • -
    • a node-set is first converted to a string as if by a call to the string function and then converted in the same way as a string argument
    • -
    • an object of a type other than the four basic types is converted to a number in a way that is dependent on that type
    • -
    - - Arguments: - - - - - - - - - -
    TypeDescription
    objectThe object to convert to a number
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    number(10)10
    number("")NaN

    - W3C Documentation reference -
    - - fn:sum() -
    - The sum function returns the sum, for each node in the argument node-set, of the result of converting the string-values of the node to a number.
    - - Arguments: - - - - - - - - - -
    TypeDescription
    node-setNode set to sum
    Examples:
    - - - - - - - - - -
    ExpressionResult
    sum(/l:library/l:readerList/p:person/p:readerID)12444

    - W3C Documentation reference -
    - - fn:floor() -
    - The floor function returns the largest (closest to positive infinity) number that is not greater than the argument and that is an integer.
    - - Arguments: - - - - - - - - - -
    TypeDescription
    node-setNode set to sum
    Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    floor(3.1)4
    floor(3.9)4
    floor(3.5)4

    - W3C Documentation reference -
    - - fn:ceiling() -
    - The ceiling function returns the smallest (closest to negative infinity) number that is not less than the argument and that is an integer.
    - - Arguments: - - - - - - - - - -
    TypeDescription
    node-setNode set to sum
    Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    floor(3.1)3
    floor(3.9)3
    floor(3.5)3

    - W3C Documentation reference -
    - - - fn:round() -
    - The round function returns the number that is closest to the argument and that is an integer. If there are two such numbers, then the one that is closest to positive infinity is returned. If the argument is NaN, then NaN is returned. If the argument is positive infinity, then positive infinity is returned. If the argument is negative infinity, then negative infinity is returned. If the argument is positive zero, then positive zero is returned. If the argument is negative zero, then negative zero is returned. If the argument is less than zero, but greater than or equal to -0.5, then negative zero is returned. - -

    NOTE

    - For these last two cases, the result of calling the round function is not the same as the result of adding 0.5 and then calling the floor function.
    - - Arguments: - - - - - - - - - -
    TypeDescription
    node-setNode set to sum
    Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    floor(3.1)3
    floor(3.9)4
    floor(3.5)3

    - W3C Documentation reference -
    - -
    -
    -
    - -
    - - - -
    - - - fn:name() -
    - Returns the name of a node, as an xs:string that is either the zero-length string, or - has the lexical form of an xs:QName.
    - - If the argument is omitted, it defaults to the context item (.). The behavior of the - function if the argument is omitted is exactly the same as if the context item had been - passed as the argument.
    - - The following errors may be raised: if the context item is undefined [err:XPDY0002]XP; - if the context item is not a node [err:XPTY0004]XP.
    - - If the argument is supplied and is the empty sequence, the function returns the - zero-length string.
    - - If the target node has no name (that is, if it is a document node, a comment, a text - node, or a namespace binding having no name), the function returns the zero-length - string.
    - - Otherwise, the value returned is fn:string(fn:node-name($arg)).
    -
    - Arguments: - - - - - - - - - -
    TypeDescription
    node?Node to display name.
    - Return type: xs:string

    - - Examples: - - - - - - - - - -
    QueryResult
    name(/l:library)l:library

    - W3C Documentation reference -
    - - fn:local-name() -
    - Returns the local part of the name of $arg as an xs:string that will either be the - zero-length string or will have the lexical form of an xs:NCName.
    - - If the argument is omitted, it defaults to the context item (.). The behavior of the - function if the argument is omitted is exactly the same as if the context item had been - passed as the argument.
    - - The following errors may be raised: if the context item is undefined [err:XPDY0002]XP; - if the context item is not a node [err:XPTY0004]XP.
    - - If the argument is supplied and is the empty sequence, the function returns the - zero-length string.
    - - If the target node has no name (that is, if it is a document node, a comment, or a text - node), the function returns the zero-length string.
    - - Otherwise, the value returned will be the local part of the expanded-QName of the target - node (as determined by the dm:node-name accessor in Section 5.11 node-name Accessor). - This will be an xs:string whose lexical form is an xs:NCName.
    - -
    - Arguments: - - - - - - - - - -
    TypeDescription
    node?Node to display local-name.
    - Return type: xs:string

    - Examples: - - - - - - - - - -
    QueryResult
    name(/l:library)library

    - - W3C Documentation reference -
    - - fn:nilled() -
    - Returns an xs:boolean indicating whether the argument node is "nilled". If the argument - is not an element node, returns the empty sequence. If the argument is the empty - sequence, returns the empty sequence.
    - -
    - Arguments: - - - - - - - - - -
    TypeDescription
    node?Node to test.
    - Return type: xs:boolean?

    - Examples: - - - - - - - - - -
    QueryResult
    nilled(/l:library)false

    - - W3C Documentation reference -
    - - fn:base-uri() -
    - Returns the value of the base-uri URI property for $arg as defined by the accessor - function dm:base-uri() for that kind of node in Section 5.2 base-uri AccessorDM. If $arg - is not specified, the behavior is identical to calling the function with the context - item (.) as argument. The following errors may be raised: if the context item is - undefined [err:XPDY0002]XP; if the context item is not a node [err:XPTY0004]XP.
    - - If $arg is the empty sequence, the empty sequence is returned.
    - - Document, element and processing-instruction nodes have a base-uri property which may be - empty. The base-uri property of all other node types is the empty sequence. The value of - the base-uri property is returned if it exists and is not empty. Otherwise, if the node - has a parent, the value of dm:base-uri() applied to its parent is returned, recursively. - If the node does not have a parent, or if the recursive ascent up the ancestor chain - encounters a node whose base-uri property is empty and it does not have a parent, the - empty sequence is returned.
    - -
    - Arguments: - - - - - - - - - -
    TypeDescription
    node?Node to find base URI of.
    - Return type: xs:anyURI?

    - Examples: - - - - - - - - - -
    QueryResult
    base-uri(/l:library/l:libraryName)<empty sequence>

    - - W3C Documentation reference -
    - - fn:document-uri() -
    - Returns the value of the document-uri property for $arg as defined by the - dm:document-uri accessor function defined in Section 6.1.2 AccessorsDM.
    - - If $arg is the empty sequence, the empty sequence is returned.
    - - Returns the empty sequence if the node is not a document node. Otherwise, returns the - value of the dm:document-uri accessor of the document node.
    - - In the case of a document node $D returned by the fn:doc function, or a document node at - the root of a tree containing a node returned by the fn:collection function, it will - always be true that either fn:document-uri($D) returns the empty sequence, or that the - following expression is true: fn:doc(fn:document-uri($D)) is $D. It is - implementation-defined whether this guarantee also holds for document nodes obtained by - other means, for example a document node passed as the initial context node of a query - or transformation.
    - -
    - Arguments: - - - - - - - - - -
    TypeDescription
    node?Node which document-uri value needs to be returned.
    - Return type: xs:anyURI?

    - Examples: - - - - - - - - - - - - - - - - - -
    QueryResult
    document-uri(/l:library/l:libraryName)<empty sequence>
    document-uri(/library/fiction:book[1])http://example.com/library.xml (assuming the document URI of the first - fiction:book element is "http://example.com/library.xml")
    document-uri(/library)http://example.com/library.xml (assuming the document URI of the library - element is "http://example.com/library.xml")

    - - W3C Documentation reference -
    - - fn:lang() -
    - This function tests whether the language of $node, or the context item if the second - argument is omitted, as specified by xml:lang attributes is the same as, or is a - sublanguage of, the language specified by $testlang. The behavior of the function if the - second argument is omitted is exactly the same as if the context item (.) had been - passed as the second argument. The language of the argument node, or the context item if - the second argument is omitted, is determined by the value of the xml:lang attribute on - the node, or, if the node has no such attribute, by the value of the xml:lang attribute - on the nearest ancestor of the node that has an xml:lang attribute. If there is no such - ancestor, then the function returns false

    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$testlang
    node()$node (Optional)
    - Return type: xs:boolean?

    - Examples: Look W3C documentation below. -
    - - W3C Documentation reference -
    - - fn:root() -
    - Returns the root of the tree to which $arg belongs. This will usually, but not - necessarily, be a document node.
    - - If $arg is the empty sequence, the empty sequence is returned.
    - - If $arg is a document node, $arg is returned.
    - - If the function is called without an argument, the context item (.) is used as the - default argument. The behavior of the function if the argument is omitted is exactly the - same as if the context item had been passed as the argument.
    - - The following errors may be raised: if the context item is undefined [err:XPDY0002]; if - the context item is not a node [err:XPTY0004].

    - - Arguments: - - - - - - - - - -
    TypeDescription
    node()$arg (Optional)
    - Return type: node()?

    - Examples: - - - - - - - - - -
    QueryResult
    root()<l:library>[...]</l:library>

    - - W3C Documentation reference -
    - - fn:count() -
    - Returns the number of items in the value of $arg. Returns 0 if $arg is the empty - sequence.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$arg
    - Return type: xs:integer

    - Examples: - - - - - - - - - - - - - -
    QueryResult
    count(/l:library/l:readerList/p:person)2
    count(/l:library/l:writers)0

    - - W3C Documentation reference -
    - - - fn:avg() -
    - Returns the number of items in the value of $arg. Returns 0 if $arg is the empty - sequence.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*$arg
    - Return type: xs:anyAtomicType

    - Examples: - - - - - - - - - -
    QueryResult
    avg(/l:library/l:readerList/p:person/p:readerID)6222

    - - W3C Documentation reference -
    - - - fn:max() -
    - Selects an item from the input sequence $arg whose value is greater than or equal to the - value of every other item in the input sequence. If there are two or more such items, - then the specific item whose value is returned is ·implementation dependent·.

    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*$arg
    xs:string$collation (Optional)
    - Return type: xs:anyAtomicType?

    - Examples: - - - - - - - - - - - - - -
    QueryResult
    max((3,4,5))5
    max((5, 5.0e0))5.0e0

    - - W3C Documentation reference -
    - - fn:min() -
    - Selects an item from the input sequence $arg whose value is less than or equal to the - value of every other item in the input sequence. If there are two or more such items, - then the specific item whose value is returned is ·implementation dependent·.

    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*$arg
    xs:string$collation (Optional)
    - Return type: xs:anyAtomicType?

    - Examples: - - - - - - - - - - - - - -
    QueryResult
    min((3,4,5))3
    min((5, 5.0e0))5.0e0

    - - W3C Documentation reference -
    - - - fn:sum() -
    - Returns a value obtained by adding together the values in $arg. If $zero is not - specified, then the value returned for an empty sequence is the xs:integer value 0. If - $zero is specified, then the value returned for an empty sequence is $zero.
    - - Any values of type xs:untypedAtomic in $arg are cast to xs:double. The items in the - resulting sequence may be reordered in an arbitrary order. The resulting sequence is - referred to below as the converted sequence.

    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*$arg
    xs:anyAtomicType?$zero (Optional)
    - Return type: xs:anyAtomicType?

    - Examples: - - - - - - - - - -
    QueryResult
    sum(/l:library/l:readerList/p:person/p:readerID)12444

    - - W3C Documentation reference -
    - -
    -
    -
    - - - -
    - - - fn:boolean() -
    - Computes the effective boolean value of the sequence $arg. See Section 2.4.3 Effective - Boolean ValueXP
    - - If $arg is the empty sequence, fn:boolean returns false.
    - - If $arg is a sequence whose first item is a node, fn:boolean returns true.
    - - If $arg is a singleton value of type xs:boolean or a derived from xs:boolean, fn:boolean - returns $arg.
    - - If $arg is a singleton value of type xs:string or a type derived from xs:string, - xs:anyURI or a type derived from xs:anyURI or xs:untypedAtomic, fn:boolean returns false - if the operand value has zero length; otherwise it returns true.
    - - If $arg is a singleton value of any numeric type or a type derived from a numeric type, - fn:boolean returns false if the operand value is NaN or is numerically equal to zero; - otherwise it returns true. - - In all other cases, fn:boolean raises a type error [err:FORG0006].
    - - The static semantics of this function are described in Section 7.2.4 The fn:boolean and - fn:not functionsFS.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$arg
    - Return type: xs:boolean?

    - Examples: - - - - - - - - - - - - - - - - - -
    QueryResult
    boolean("/l:library")true
    boolean(0)false
    boolean(())false

    - - W3C Documentation reference -
    - - - fn:true() -
    - Returns the xs:boolean value true. Equivalent to xs:boolean("1").

    - - Return type: xs:boolean

    - Examples:
    - - - - - - - - - -
    ExpressionResult
    true()true

    - W3C Documentation reference -
    - - fn:false() -
    - Returns the xs:boolean value false. Equivalent to xs:boolean("0").

    - - Return type: xs:boolean

    - Examples:
    - - - - - - - - - -
    ExpressionResult
    false()false

    - W3C Documentation reference -
    - - fn:not() -
    - $arg is first reduced to an effective boolean value by applying the fn:boolean() - function. Returns true if the effective boolean value is false, and false if the - effective boolean value is true.

    - - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item$arg
    - Return type: xs:boolean

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    not(false())true
    not(true())false

    - W3C Documentation reference -
    - - -
    -
    -
    - - - -
    - - fn:string(object) -
    - Returns the value of $arg represented as a xs:string. If no argument is supplied, the - context item (.) is used as the default argument. The behavior of the function if the - argument is omitted is exactly the same as if the context item had been passed as the - argument.
    - - If the context item is undefined, error [err:XPDY0002]XP is raised.
    - - If $arg is the empty sequence, the zero-length string is returned.
    - - If $arg is a node, the function returns the string-value of the node, as obtained using - the dm:string-value accessor defined in the Section 5.13 string-value AccessorDM.
    - - If $arg is an atomic value, then the function returns the same string as is returned by - the expression " $arg cast as xs:string " (see 17 Casting).
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    stringThe object to convert to a string
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    string((1<0))false
    string(.11)0.11

    - W3C Documentation reference -
    - - fn:codepoints-to-string() -
    - Creates an xs:string from a sequence of The Unicode Standard code points. Returns the - zero-length string if $arg is the empty sequence. If any of the code points in $arg is - not a legal XML character, an error is raised [err:FOCH0001].
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:integer*$arg
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    codepoints-to-string((2309, 2358, 2378, 2325))अशॊक
    codepoints-to-string((40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41)) - ( ͡° ͜ʖ ͡°)

    - W3C Documentation reference -
    - - fn:string-to-codepoints() -
    - Returns the sequence of The Unicode Standard code points that constitute an xs:string. - If $arg is a zero-length string or the empty sequence, the empty sequence is - returned.
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string*$arg
    - Return type: xs:integer*

    - Examples:
    - - - - - - - - - -
    ExpressionResult
    string-to-codepoints("Thérèse")(84, 104, 233, 114, 232, 115, 101)

    - W3C Documentation reference -
    - - fn:compare() -
    - Returns -1, 0, or 1, depending on whether the value of the $comparand1 is respectively - less than, equal to, or greater than the value of $comparand2, according to the rules of - the collation that is used.
    - - The collation used by the invocation of this function is determined according to the - rules in 7.3.1 Collations.
    - - If either argument is the empty sequence, the result is the empty sequence.
    - - This function, invoked with the first signature, backs up the "eq", "ne", "gt", "lt", - "le" and "ge" operators on string values.
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$comparand1
    xs:string?$comparand2
    xs:string$collation (Optional)
    - Return type: xs:integer*

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    compare('abc', 'abc')0
    compare('abc', 'acc')-1
    compare('abc', 'acc')1

    - W3C Documentation reference -
    - - fn:codepoint-equal() -
    - Returns true or false depending on whether the value of $comparand1 is equal to the - value of $comparand2, according to the Unicode code - point collation.
    - - If either argument is the empty sequence, the result is the empty sequence.
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$comparand1
    xs:string?$comparand2
    - Return type: xs:boolean?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    codepoint-equal("asdf", "asdf")true
    codepoint-equal("asdf", "asdf ")false

    - W3C Documentation reference -
    - - fn:concat() -
    - Accepts two or more xs:anyAtomicType arguments and casts them to xs:string. Returns the - xs:string that is the concatenation of the values of its arguments after conversion. If - any of the arguments is the empty sequence, the argument is treated as the zero-length - string.
    - - The fn:concat function is specified to allow two or more arguments, which are - concatenated together. This is the only function specified in this document that allows - a variable number of arguments. This capability is retained for compatibility with [XML - Path Language (XPath) Version 1.0].
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType?$arg1
    xs:anyAtomicType?$arg2
    xs:anyAtomicType?$arg... (Optional)
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    concat('un', 'grateful')ungrateful
    concat('Thy ', (), 'old ', "groans", "", ' ring', ' yet', ' in', ' my', ' - ancient',' ears.')Thy old groans ring yet in my ancient ears.
    fn:concat('Ciao!',())Ciao!

    - W3C Documentation reference -
    - - fn:string-join() -
    - Returns a xs:string created by concatenating the members of the $arg1 sequence using - $arg2 as a separator. If the value of $arg2 is the zero-length string, then the members - of $arg1 are concatenated without a separator.
    - - If the value of $arg1 is the empty sequence, the zero-length string is returned.
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string*$arg1
    xs:string$arg2
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    string-join(('Now', 'is', 'the', 'time', '...'), ' ')Now is the time ...
    string-join(('Blow, ', 'blow, ', 'thou ', 'winter ', 'wind!'), '')Blow, blow, thou winter wind!

    - W3C Documentation reference -
    - - fn:substring() -
    - Returns the portion of the value of $sourceString beginning at the position indicated by - the value of $startingLoc and continuing for the number of characters indicated by the - value of $length. The characters returned do not extend beyond $sourceString. If - $startingLoc is zero or negative, only those characters in positions greater than zero - are returned.
    - More specifically, the three argument version of the function returns the characters in - $sourceString whose position $p obeys:
    - fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
    - The two argument version of the function assumes that $length is infinite and returns - the characters in $sourceString whose position $p obeys:
    - fn:round($startingLoc) <= $p < fn:round(INF)
    - In the above computations, the rules for op:numeric-less-than() and - op:numeric-greater-than() apply.
    - If the value of $sourceString is the empty sequence, the zero-length string is - returned.
    - - Note:
    - The first character of a string is located at position 1, not position 0.
    - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$sourceString
    xs:double$startingLoc
    xs:double$length (Optional)
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    substring("motor car", 6)" car"
    substring("metadata", 4, 3)ada

    - W3C Documentation reference -
    - - fn:string-length() -
    - Returns an xs:integer equal to the length in characters of the value of $arg.
    - - If the value of $arg is the empty sequence, the xs:integer 0 is returned.
    - - If no argument is supplied, $arg defaults to the string value (calculated using - fn:string()) of the context item (.). If no argument is supplied and the context item is - undefined an error is raised: [err:XPDY0002].
    - - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?$arg (Optional)
    - Return type: xs:integer

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    string-length("Harp not on that string, madam; that is past.")45
    string-length(())0

    - W3C Documentation reference -
    - - fn:normalize-space() -
    - Returns the value of $arg with whitespace normalized by stripping leading and trailing - whitespace and replacing sequences of one or more than one whitespace character with a - single space, #x20.
    - - If the value of $arg is the empty sequence, returns the zero-length string.
    - - If no argument is supplied, then $arg defaults to the string value (calculated using - fn:string()) of the context item (.). If no argument is supplied and the context item is - undefined an error is raised: [err:XPDY0002].
    - - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?$arg (Optional)
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    normalize-space(" The wealthy curled darlings of our nation. ")The wealthy curled darlings of our nation.
    normalize-space(())""

    - W3C Documentation reference -
    - - fn:normalize-unicode() -
    - Returns the value of $arg normalized according to the normalization criteria for a - normalization form identified by the value of $normalizationForm. The effective value of - the $normalizationForm is computed by removing leading and trailing blanks, if present, - and converting to upper case.
    - - If the value of $arg is the empty sequence, returns the zero-length string.
    - - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$arg
    xs:string$normalizationForm (Optional)
    - Return type: xs:string

    - Examples:
    - - - - - - - - - -
    ExpressionResult
    normalize-unicode("test ")test

    - W3C Documentation reference -
    - - fn:upper-case() -
    - Returns the value of $arg after translating every character to its upper-case - correspondent as defined in the appropriate case mappings section in the Unicode - standard [The Unicode Standard]. For versions of Unicode beginning with the 2.1.8 - update, only locale-insensitive case mappings should be applied. Beginning with version - 3.2.0 (and likely future versions) of Unicode, precise mappings are described in default - case operations, which are full case mappings in the absence of tailoring for particular - languages and environments. Every lower-case character that does not have an upper-case - correspondent, as well as every upper-case character, is included in the returned value - in its original form.
    - - If the value of $arg is the empty sequence, the zero-length string is returned.
    - - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?$arg
    - Return type: xs:string

    - Examples:
    - - - - - - - - - -
    ExpressionResult
    upper-case("abCd0")ABCD0

    - W3C Documentation reference -
    - - fn:lower-case() -
    - Returns the value of $arg after translating every character to its lower-case - correspondent as defined in the appropriate case mappings section in the Unicode - standard [The Unicode Standard]. For versions of Unicode beginning with the 2.1.8 - update, only locale-insensitive case mappings should be applied. Beginning with version - 3.2.0 (and likely future versions) of Unicode, precise mappings are described in default - case operations, which are full case mappings in the absence of tailoring for particular - languages and environments. Every upper-case character that does not have a lower-case - correspondent, as well as every lower-case character, is included in the returned value - in its original form.
    - - If the value of $arg is the empty sequence, the zero-length string is returned.
    - - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?$arg
    - Return type: xs:string

    - Examples:
    - - - - - - - - - -
    ExpressionResult
    lower-case("abCd0")abcd0

    - W3C Documentation reference -
    - - fn:translate() -
    - Returns the value of $arg modified so that every character in the value of $arg that - occurs at some position N in the value of $mapString has been replaced by the character - that occurs at position N in the value of $transString.
    - - If the value of $arg is the empty sequence, the zero-length string is returned.
    - - Every character in the value of $arg that does not appear in the value of $mapString is - unchanged.
    - - Every character in the value of $arg that appears at some position M in the value of - $mapString, where the value of $transString is less than M characters in length, is - omitted from the returned value. If $mapString is the zero-length string $arg is - returned.
    - - If a character occurs more than once in $mapString, then the first occurrence determines - the replacement character. If $transString is longer than $mapString, the excess - characters are ignored.
    - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$arg
    xs:string$mapString
    xs:string$mapString
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    translate("bar","abc","ABC")BAr
    translate("--aaa--","abc-","ABC")AAA
    translate("abcdabc", "abc", "AB")ABdAB

    - W3C Documentation reference -
    - - fn:encode-for-uri() -
    - This function encodes reserved characters in an xs:string that is intended to be used in - the path segment of a URI. It is invertible but not idempotent. This function applies - the URI escaping rules defined in section 2 of [RFC 3986] to the xs:string supplied as - $uri-part. The effect of the function is to escape reserved characters. Each such - character in the string is replaced with its percent-encoded form as described in [RFC - 3986].
    - - If $uri-part is the empty sequence, returns the zero-length string.
    - - All characters are escaped except those identified as "unreserved" by [RFC 3986], that - is the upper- and lower-case letters A-Z, the digits 0-9, HYPHEN-MINUS ("-"), LOW LINE - ("_"), FULL STOP ".", and TILDE "~".
    - - Note that this function escapes URI delimiters and therefore cannot be used - indiscriminately to encode "invalid" characters in a path segment.
    - - Since [RFC 3986] recommends that, for consistency, URI producers and normalizers should - use uppercase hexadecimal digits for all percent-encodings, this function must always - generate hexadecimal values using the upper-case letters A-F.
    - - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?$uri-part
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    encode-for-uri("https://www.google.com")"https%3A%2F%2Fwww.
    google.com"
    concat("http://www.example.com/", encode-for-uri("~bébé"))http://www.example.com/
    ~b%C3%A9b%C3%A9
    concat("http://www.example.com/", encode-for-uri("100% organic"))http://www.example.com/
    100%25%20organic

    - W3C Documentation reference -
    - - fn:iri-to-uri() -
    - This function converts an xs:string containing an IRI into a URI according to the rules - spelled out in Section 3.1 of [RFC 3987]. It is idempotent but not invertible.
    - - If $iri contains a character that is invalid in an IRI, such as the space character (see - note below), the invalid character is replaced by its percent-encoded form as described - in [RFC 3986] before the conversion is performed.
    - - If $iri is the empty sequence, returns the zero-length string.
    - - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?$iri
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    iri-to-uri ("http://www.example.com/00/Weather/CA/Los%20Angeles#ocean")"http://www.example.com/00/
    Weather/CA/Los%20Angeles#ocean"
    iri-to-uri ("http://www.example.com/~bébé")http://www.example.com/
    ~b%C3%A9b%C3%A9

    - W3C Documentation reference -
    - - fn:escape-html-uri() -
    - This function escapes all characters except printable characters of the US-ASCII coded - character set, specifically the octets ranging from 32 to 126 (decimal). The effect of - the function is to escape a URI in the manner html user agents handle attribute values - that expect URIs. Each character in $uri to be escaped is replaced by an escape - sequence, which is formed by encoding the character as a sequence of octets in UTF-8, - and then representing each of these octets in the form %HH, where HH is the hexadecimal - representation of the octet. This function must always generate hexadecimal values using - the upper-case letters A-F.
    - If $uri is the empty sequence, returns the zero-length string. - -

    Note:

    - The behavior of this function corresponds to the recommended handling of non-ASCII - characters in URI attribute values as described in [HTML 4.0] Appendix B.2.1.

    - - - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?$uri
    - Return type: xs:string

    - Examples:
    - - - - - - - - - -
    ExpressionResult
    escape-html-uri("http://www.example.com/00/Weather/CA/Los Angeles#ocean") - http://www.example.com/00/Weather/CA/Los Angeles#ocean

    - W3C Documentation reference -
    - - fn:contains() -
    - Returns an xs:boolean indicating whether or not the value of $arg1 contains (at the - beginning, at the end, or anywhere within) at least one sequence of collation units that - provides a minimal match to the collation units in the value of $arg2, according to the - collation that is used. - - If the value of $arg1 or $arg2 is the empty sequence, or contains only ignorable - collation units, it is interpreted as the zero-length string.
    - - If the value of $arg2 is the zero-length string, then the function returns true.
    - - If the value of $arg1 is the zero-length string, the function returns false.
    - - The collation used by the invocation of this function is determined according to the - rules in 7.3.1 Collations. If the specified collation does not support collation units - an error ·may· be raised [err:FOCH0004].

    - - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$arg1
    xs:string?$arg2
    xs:string?$collation (Optional)
    - Return type: xs:boolean

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    contains( "tattoo", "tat")true
    contains( "tattoo", "ttt")false
    contains ( "", ())true

    - W3C Documentation reference -
    - - fn:starts-with() -
    - Returns an xs:boolean indicating whether or not the value of $arg1 starts with a - sequence of collation units that provides a match to the collation units of $arg2 - according to the collation that is used. - - If the value of $arg1 or $arg2 is the empty sequence, or contains only ignorable - collation units, it is interpreted as the zero-length string.
    - - If the value of $arg2 is the zero-length string, then the function returns true. If the - value of $arg1 is the zero-length string and the value of $arg2 is not the zero-length - string, then the function returns false.
    - - The collation used by the invocation of this function is determined according to the - rules in 7.3.1 Collations. If the specified collation does not support collation units - an error ·may· be raised [err:FOCH0004].

    - - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$arg1
    xs:string?$arg2
    xs:string?$collation (Optional)
    - Return type: xs:boolean

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    starts-with( "tattoo", "tat")true
    starts-with( "tattoo", "ttt")false
    starts-with ( "", ())true

    - W3C Documentation reference -
    - - fn:ends-with() -
    - Returns an xs:boolean indicating whether or not the value of $arg1 starts with a - sequence of collation units that provides a match to the collation units of $arg2 - according to the collation that is used.
    - - If the value of $arg1 or $arg2 is the empty sequence, or contains only ignorable - collation units, it is interpreted as the zero-length string.
    - - If the value of $arg2 is the zero-length string, then the function returns true. If the - value of $arg1 is the zero-length string and the value of $arg2 is not the zero-length - string, then the function returns false.
    - - The collation used by the invocation of this function is determined according to the - rules in 7.3.1 Collations. If the specified collation does not support collation units - an error ·may· be raised [err:FOCH0004].

    - - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$arg1
    xs:string?$arg2
    xs:string?$collation (Optional)
    - Return type: xs:boolean

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    ends-with( "tattoo", "too")true
    ends-with( "tattoo", "tatoo")false
    ends-with ((), ())true

    - W3C Documentation reference -
    - - fn:substring-before() -
    - Returns the substring of the value of $arg1 that precedes in the value of $arg1 the - first occurrence of a sequence of collation units that provides a minimal match to the - collation units of $arg2 according to the collation that is used.
    - - If the value of $arg1 or $arg2 is the empty sequence, or contains only ignorable - collation units, it is interpreted as the zero-length string.
    - - If the value of $arg2 is the zero-length string, then the function returns the - zero-length string.
    - - If the value of $arg1 does not contain a string that is equal to the value of $arg2, - then the function returns the zero-length string.
    - - The collation used by the invocation of this function is determined according to the - rules in 7.3.1 Collations If the specified collation does not support collation units an - error ·may· be raised [err:FOCH0004].

    - - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$arg1
    xs:string?$arg2
    xs:string?$collation (Optional)
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    substring-before( "tattoo", "too")tat
    substring-before( "tattoo", "tat")<empty string>

    - W3C Documentation reference -
    - - fn:substring-after() -
    - Returns the substring of the value of $arg1 that follows in the value of $arg1 the first - occurrence of a sequence of collation units that provides a minimal match to the - collation units of $arg2 according to the collation that is used.
    - - If the value of $arg1 or $arg2 is the empty sequence, or contains only ignorable - collation units, it is interpreted as the zero-length string.
    - - If the value of $arg2 is the zero-length string, then the function returns the value of - $arg1.
    - - If the value of $arg1 does not contain a string that is equal to the value of $arg2, - then the function returns the zero-length string.
    - - The collation used by the invocation of this function is determined according to the - rules in 7.3.1 Collations If the specified collation does not support collation units an - error ·may· be raised [err:FOCH0004].

    - - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$arg1
    xs:string?$arg2
    xs:string?$collation (Optional)
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    substring-after( "tattoo", "too")<empty string>
    substring-after( "tattoo", "tat")too

    - W3C Documentation reference -
    - - - fn:matches() -
    - The function returns true if $input matches the regular expression supplied as $pattern - as influenced by the value of $flags, if present; otherwise, it returns false.
    - - The effect of calling the first version of this function (omitting the argument $flags) - is the same as the effect of calling the second version with the $flags argument set to - a zero-length string. Flags are defined in 7.6.1.1 Flags.
    - - If $input is the empty sequence, it is interpreted as the zero-length string.
    - Unless the metacharacters ^ and $ are used as anchors, the string is considered to match - the pattern if any substring matches the pattern. But if anchors are used, the anchors - must match the start/end of the string (in string mode), or the start/end of a line (in - multiline mode).
    - - An error is raised [err:FORX0002] if the value of $pattern is invalid according to the - rules described in section 7.6.1 Regular Expression Syntax.
    - - An error is raised [err:FORX0001] if the value of $flags is invalid according to the - rules described in section 7.6.1 Regular Expression Syntax.

    - - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$input
    xs:string$pattern
    xs:string$flags (Optional)
    - Return type: xs:boolean

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    matches("abracadabra", "bra")true
    matches("abracadabra", "^a.*a$")false

    - W3C Documentation reference -
    - - fn:replace() -
    - The function returns the xs:string that is obtained by replacing each non-overlapping - substring of $input that matches the given $pattern with an occurrence of the - $replacement string.
    - - The effect of calling the first version of this function (omitting the argument $flags) - is the same as the effect of calling the second version with the $flags argument set to - a zero-length string. Flags are defined in 7.6.1.1 Flags.
    - - The $flags argument is interpreted in the same manner as for the fn:matches() - function.
    - - If $input is the empty sequence, it is interpreted as the zero-length string.
    - - If two overlapping substrings of $input both match the $pattern, then only the
    first - one (that is, the one whose first character comes first in the $input string) is - replaced. - - Within the $replacement string, a variable $N may be used to refer to the substring - captured by the Nth parenthesized sub-expression in the regular expression. For each - match of the pattern, these variables are assigned the value of the content matched by - the relevant sub-expression, and the modified replacement string is then substituted for - the characters in $input that matched the pattern. $0 refers to the substring captured - by the regular expression as a whole.

    - - - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$input
    xs:string$pattern
    xs:string$replacement
    xs:string$flags (Optional)
    - Return type: xs:string

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    replace("abracadabra", "bra", "*")a*cada*
    replace("abracadabra", "a.*a", "*")*
    replace("AAAA", "A+", "b")b

    - W3C Documentation reference -
    - - fn:tokenize() -
    - This function breaks the $input string into a sequence of strings, treating any - substring that matches $pattern as a separator. The separators themselves are not - returned.
    - - The effect of calling the first version of this function (omitting the argument $flags) - is the same as the effect of calling the second version with the $flags argument set to - a zero-length string. Flags are defined in 7.6.1.1 Flags.
    - - The $flags argument is interpreted in the same way as for the fn:matches() function.
    - - If $input is the empty sequence, or if $input is the zero-length string, the result is - the empty sequence.
    - - If the supplied $pattern matches a zero-length string, that is, if fn:matches("", - $pattern, $flags) returns true, then an error is raised: [err:FORX0003].
    - - If a separator occurs at the start of the $input string, the result sequence will start - with a zero-length string. Zero-length strings will also occur in the result sequence if - a separator occurs at the end of the $input string, or if two adjacent substrings match - the supplied $pattern.

    - - - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$input
    xs:string$pattern
    xs:string$flags (Optional)
    - Return type: xs:string*

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    tokenize("The cat sat on the mat", "\s+")("The", "cat", "sat", "on", "the", "mat")
    tokenize("1, 15, 24, 50", ",\s*")("1", "15", "24", "50")
    tokenize("1,15,,24,50,", ",")("1", "15", "", "24", "50", "")

    - W3C Documentation reference -
    - -
    -
    -
    - - - -
    - - fn:number() -
    - Returns the value indicated by $arg or, if $arg is not specified, the context item after - atomization, converted to an xs:double
    - - Calling the zero-argument version of the function is defined to give the same result as - calling the single-argument version with the context item (.). That is, fn:number() is - equivalent to fn:number(.).
    - - If $arg is the empty sequence or if $arg or the context item cannot be converted to an - xs:double, the xs:double value NaN is returned. If the context item is undefined an - error is raised: [err:XPDY0002]XP.
    - - If $arg is the empty sequence, NaN is returned. Otherwise, $arg, or the context item - after atomization, is converted to an xs:double following the rules of 17.1.3.2 Casting - to xs:double. If the conversion to xs:double fails, the xs:double value NaN is - returned.
    - -
    - Arguments: - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType?Value to convert to number
    - Return type: xs:double

    - W3C Documentation reference -
    - - fn:abs() -
    - Returns the absolute value of $arg. If $arg is negative returns -$arg otherwise returns - $arg. If type of $arg is one of the four numeric types xs:float, xs:double, xs:decimal - or xs:integer the type of the result is the same as the type of $arg. If the type of - $arg is a type derived from one of the numeric types, the result is an instance of the - base numeric type.
    - - For xs:float and xs:double arguments, if the argument is positive zero or negative zero, - then positive zero is returned. If the argument is positive or negative infinity, - positive infinity is returned.
    - - For detailed type semantics, see Section 7.2.3 The fn:abs, fn:ceiling, fn:floor, - fn:round, and fn:round-half-to-even functions.
    -
    - Arguments: - - - - - - - - - -
    TypeDescription
    numeric?$arg
    - Return type: numeric?

    - - Examples: - - - - - - - - - - - - - -
    QueryResult
    abs(-2)2
    abs(2137)2137

    - W3C Documentation reference -
    - - fn:ceiling() -
    - Returns the smallest (closest to negative infinity) number with no fractional part that - is not less than the value of $arg. If type of $arg is one of the four numeric types - xs:float, xs:double, xs:decimal or xs:integer the type of the result is the same as the - type of $arg. If the type of $arg is a type derived from one of the numeric types, the - result is an instance of the base numeric type.
    - - For xs:float and xs:double arguments, if the argument is positive zero, then positive - zero is returned. If the argument is negative zero, then negative zero is returned. If - the argument is less than zero and greater than -1, negative zero is returned.
    -
    - Arguments: - - - - - - - - - -
    TypeDescription
    numeric?$arg
    - Return type: numeric?

    - - Examples: - - - - - - - - - - - - - - - - - -
    QueryResult
    ceiling(10.5)11
    ceiling(-10.5)-10
    ceiling(10.1)11

    - W3C Documentation reference -
    - - fn:floor() -
    - Returns the largest (closest to positive infinity) number with no fractional part that - is not greater than the value of $arg. If type of $arg is one of the four numeric types - xs:float, xs:double, xs:decimal or xs:integer the type of the result is the same as the - type of $arg. If the type of $arg is a type derived from one of the numeric types, the - result is an instance of the base numeric type.
    - - For float and double arguments, if the argument is positive zero, then positive zero is - returned. If the argument is negative zero, then negative zero is returned.
    -
    - Arguments: - - - - - - - - - -
    TypeDescription
    numeric?$arg
    - Return type: numeric?

    - - Examples: - - - - - - - - - - - - - - - - - -
    QueryResult
    floor(10.5)10
    floor(-10.5)-11
    floor(10.8)10

    - W3C Documentation reference -
    - - fn:round() -
    - Returns the number with no fractional part that is closest to the argument. If there are - two such numbers, then the one that is closest to positive infinity is returned. If type - of $arg is one of the four numeric types xs:float, xs:double, xs:decimal or xs:integer - the type of the result is the same as the type of $arg. If the type of $arg is a type - derived from one of the numeric types, the result is an instance of the base numeric - type.
    - - For xs:float and xs:double arguments, if the argument is positive infinity, then - positive infinity is returned. If the argument is negative infinity, then negative - infinity is returned. If the argument is positive zero, then positive zero is returned. - If the argument is negative zero, then negative zero is returned. If the argument is - less than zero, but greater than or equal to -0.5, then negative zero is returned. In - the cases where positive zero or negative zero is returned, negative zero or positive - zero may be returned as [XML Schema Part 2: Datatypes Second Edition] does not - distinguish between the values positive zero and negative zero.
    - - For the last two cases, note that the result is not the same as fn:floor(x+0.5).
    -
    - Arguments: - - - - - - - - - -
    TypeDescription
    numeric?$arg
    - Return type: numeric?

    - - Examples: - - - - - - - - - - - - - - - - - -
    QueryResult
    round(10.5)11
    round(10.4999)10
    round(-10.5)-10

    - W3C Documentation reference -
    - - fn:round-half-to-even() -
    - The value returned is the nearest (that is, numerically closest) value to $arg that is a - multiple of ten to the power of minus $precision. If two such values are equally near - (e.g. if the fractional part in $arg is exactly .500...), the function returns the one - whose least significant digit is even.
    - - If the type of $arg is one of the four numeric types xs:float, xs:double, xs:decimal or - xs:integer the type of the result is the same as the type of $arg. If the type of $arg - is a type derived from one of the numeric types, the result is an instance of the base - numeric type.
    - - The first signature of this function produces the same result as the second signature - with $precision=0.
    - - For arguments of type xs:float and xs:double, if the argument is NaN, positive or - negative zero, or positive or negative infinity, then the result is the same as the - argument. In all other cases, the argument is cast to xs:decimal, the function is - applied to this xs:decimal value, and the resulting xs:decimal is cast back to xs:float - or xs:double as appropriate to form the function result. If the resulting xs:decimal - value is zero, then positive or negative zero is returned according to the sign of the - original argument.
    - - Note that the process of casting to xs:decimal may result in an error - [err:FOCA0001].
    - - If $arg is of type xs:float or xs:double, rounding occurs on the value of the mantissa - computed with exponent = 0.
    -
    - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    numeric?$arg
    numeric?$precision (Optional)
    - Return type: numeric?

    - - Examples: - - - - - - - - - - - - - - - - - - - - - -
    QueryResult
    round-half-to-even(0.5)0
    round-half-to-even(1.5)2
    round-half-to-even(2.5)2
    round-half-to-even(2.6)3

    - W3C Documentation reference -
    - -
    -
    -
    - - - -
    - - fn:data() -
    - fn:data takes a sequence of items and returns a sequence of atomic values.
    - - The result of fn:data is the sequence of atomic values produced by applying the - following rules to each item in $arg:
    -
      -
    • If the item is an atomic value, it is returned.
    • -
    • - If the item is a node: -
        -
      • If the node does not have a typed value an error is raised - [err:FOTY0012].
      • -
      • Otherwise, fn:data() returns the typed value of the node as defined by - the accessor function dm:typed-value in Section 5.15 typed-value - AccessorDM.
      • -
      -
    • -
    -
    - Arguments: - - - - - - - - - -
    TypeDescription
    item*Items to convert.
    - Return type: xs:anyAtomicType*

    - Examples: - - - - - - - - - -
    QueryResult
    data(/l:library/l:readerList/p:person[1])7321
    Adam
    Choke

    - - W3C Documentation reference -
    - - fn:index-of() -
    - Returns the root of the tree to which $arg belongs. This will usually, but not - necessarily, be a document node.
    - - If $arg is the empty sequence, the empty sequence is returned.
    - - If $arg is a document node, $arg is returned.
    - - If the function is called without an argument, the context item (.) is used as the - default argument. The behavior of the function if the argument is omitted is exactly the - same as if the context item had been passed as the argument.
    - - The following errors may be raised: if the context item is undefined [err:XPDY0002]; if - the context item is not a node [err:XPTY0004].

    - - Arguments: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType$seqParam
    xs:anyAtomicType$srchParam
    xs:string$collation (Optional)
    - Return type: xs:integer*

    - Examples: - - - - - - - - - - - - - - - - - -
    QueryResult
    index-of((10, 20, 30, 40), 35)()
    index-of((10, 20, 30, 30, 20, 10), 20)(2, 5)
    index-of(("a", "sport", "and", "a", "pastime"), "a")(1, 4)

    - - W3C Documentation reference -
    - - - fn:empty() -
    - If the value of $arg is the empty sequence, the function returns true; otherwise, the - function returns false.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$arg
    - Return type: xs:boolean

    - Examples: - - - - - - - - - -
    QueryResult
    empty(fn:remove(("hello", "world"), 1))false

    - - W3C Documentation reference -
    - - - fn:exists() -
    - If the value of $arg is not the empty sequence, the function returns true; otherwise, - the function returns false.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$arg
    - Return type: xs:boolean

    - Examples: - - - - - - - - - -
    QueryResult
    exists(fn:remove(("hello"), 1))true

    - - W3C Documentation reference -
    - - - fn:distinct-values() -
    - Returns the sequence that results from removing from $arg all but one of a set of values - that are eq to one other. Values of type xs:untypedAtomic are compared as if they were - of type xs:string. Values that cannot be compared, i.e. the eq operator is not defined - for their types, are considered to be distinct. The order in which the sequence of - values is returned is ·implementation dependent·.

    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*$arg
    xs:string$collation (Optional)
    - Return type: xs:anyAtomicType*

    - Examples: - - - - - - - - - -
    QueryResult
    distinct-values((1, 2.0, 3, 2))(1, 3, 2.0)

    - - W3C Documentation reference -
    - - fn:insert-before() -
    - Returns a new sequence constructed from the value of $target with the value of $inserts - inserted at the position specified by the value of $position. (The value of $target is - not affected by the sequence construction.)
    - - If $target is the empty sequence, $inserts is returned. If $inserts is the empty - sequence, $target is returned.
    - - The value returned by the function consists of all items of $target whose index is less - than $position, followed by all items of $inserts, followed by the remaining elements of - $target, in that sequence.
    - - If $position is less than one (1), the first position, the effective value of $position - is one (1). If $position is greater than the number of items in $target, then the - effective value of $position is equal to the number of items in $target plus 1.

    - - Arguments: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*$target
    xs:integer$position
    item()*$inserts
    - Return type: item()*

    - Examples:
    - let $x := ("a", "b", "c") - - - - - - - - - - - - - - - - - -
    QueryResult
    insert-before($x, 0, "z")("z", "a", "b", "c")
    insert-before($x, 1, "z")("z", "a", "b", "c")
    insert-before($x, 2, "z")("a", "z", "b", "c")

    - - W3C Documentation reference -
    - - fn:remove() -
    - Returns a new sequence constructed from the value of $target with the item at the - position specified by the value of $position removed.
    - - If $position is less than 1 or greater than the number of items in $target, $target is - returned. Otherwise, the value returned by the function consists of all items of $target - whose index is less than $position, followed by all items of $target whose index is - greater than $position. If $target is the empty sequence, the empty sequence is - returned.

    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    item()*$target
    xs:integer$position
    - Return type: item()*

    - Examples:
    - let $x := ("a", "b", "c") - - - - - - - - - - - - - - - - - -
    QueryResult
    remove($x, 0) ("a", "b", "c")
    remove($x, 1)("b", "c")
    remove($x, 6)("a", "b", "c")

    - - W3C Documentation reference -
    - - - fn:reverse() -
    - Reverses the order of items in a sequence. If $arg is the empty sequence, the empty - sequence is returned.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$arg
    - Return type: item()*

    - Examples:
    - let $x := ("a", "b", "c") - - - - - - - - - - - - - - - - - -
    QueryResult
    reverse($x)("c", "b", "a")
    reverse(("hello")) ("hello")
    reverse(())()

    - - W3C Documentation reference -
    - - - fn:subsequence() -
    - Returns the contiguous sequence of items in the value of $sourceSeq beginning at the - position indicated by the value of $startingLoc and continuing for the number of items - indicated by the value of $length. - If $sourceSeq is the empty sequence, the empty sequence is returned.
    - - If $startingLoc is zero or negative, the subsequence includes items from the beginning - of the $sourceSeq.
    - - If $length is not specified, the subsequence includes items to the end of - $sourceSeq.
    - - If $length is greater than the number of items in the value of $sourceSeq following - $startingLoc, the subsequence includes items to the end of $sourceSeq.
    - - The first item of a sequence is located at position 1, not position 0.

    - - Arguments: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*$sourceSeq
    xs:double$startingLoc (Optional)
    xs:double$length (Optional)
    - Return type: item()*

    - Examples:
    - let $seq = ($item1, $item2, $item3, $item4, ...) - - - - - - - - - - - - - -
    QueryResult
    subsequence($seq, 4)($item4, ...)
    subsequence($seq, 3, 2)($item3, $item4)

    - - W3C Documentation reference -
    - - - fn:unordered() -
    - Returns the items of $sourceSeq in an implementation dependent order.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$sourceSeq
    - Return type: item()*

    - - W3C Documentation reference -
    - - fn:zero-or-one() -
    - Returns $arg if it contains zero or one items. Otherwise, raises an error - [err:FORG0003].

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$arg
    - Return type: item()?

    - Examples: - - - - - - - - - - - - - -
    QueryResult
    zero-or-one(("a"))a
    zero-or-one(("a", "b"))A sequence of more than one item is not allowed as the first argument of - fn:zero-or-one() ("a", "b")

    - - W3C Documentation reference -
    - - - fn:one-or-more() -
    - Returns $arg if it contains one or more items. Otherwise, raises an error - [err:FORG0004].

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$arg
    - Return type: item()?

    - Examples: - - - - - - - - - - - - - -
    QueryResult
    one-or-more(("a"))a
    one-or-more(("a", "b"))a
    b

    - - W3C Documentation reference -
    - - - fn:exactly-one() -
    - Returns $arg if it contains exactly one item. Otherwise, raises an error - [err:FORG0005].

    - - Arguments: - - - - - - - - - -
    TypeDescription
    item()*$arg
    - Return type: item()?

    - Examples: - - - - - - - - - - - - - -
    QueryResult
    exactly-one(("a"))a
    exactly-one(("a", "b"))A sequence of more than one item is not allowed as the first argument of - fn:exactly-one() ("a", "b")

    - - W3C Documentation reference -
    - - - fn:deep-equal() -
    - This function assesses whether two sequences are deep-equal to each other. To be - deep-equal, they must contain items that are pairwise deep-equal; and for two items to - be deep-equal, they must either be atomic values that compare equal, or nodes of the - same kind, with the same name, whose children are deep-equal. This is defined in more - detail below. The $collation argument identifies a collation which is used at all levels - of recursion when strings are compared (but not when names are compared), according to - the rules in 7.3.1 Collations.
    - - If the two sequences are both empty, the function returns true.
    - - If the two sequences are of different lengths, the function returns false.
    - - If the two sequences are of the same length, the function returns true if and only if - every item in the sequence $parameter1 is deep-equal to the item at the same position in - the sequence $parameter2. The rules for deciding whether two items are deep-equal - follow. - - For more in-depth description look into W3C Documentation

    - - Arguments: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*$parameter1
    item()*$parameter2
    xs:string$collation (Optional)
    - Return type: xs:boolean

    - Examples: - - - - - - - - - - - - - -
    QueryResult
    deep-equal(/l:library/p:person[0], /l:library/p:person[1])true
    deep-equal(/l:library/p:person[0], /l:library)false

    - - W3C Documentation reference -
    - - - fn:id() -
    - Returns the sequence of element nodes that have an ID value matching the value of one or - more of the IDREF values supplied in $arg. - -

    Note:

    - - This function does not have the desired effect when searching a document in which - elements of type xs:ID are used as identifiers. To preserve backwards compatibility, a - new function fn:element-with-id is therefore being introduced; it behaves the same way - as fn:id in the case of ID-valued attributes. -

    - - Arguments: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string*$arg
    node()*$node
    xs:string$collation (Optional)
    - Return type: element()*

    - - W3C Documentation reference -
    - - fn:idref() -
    - Returns the sequence of element or attribute nodes with an IDREF value matching the - value of one or more of the ID values supplied in $arg.

    - - Arguments: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string*$arg
    node()*$node
    xs:string$collation (Optional)
    - Return type: node()*

    - - W3C Documentation reference -
    - - - fn:doc() -
    - Returns the sequence of element or attribute nodes with an IDREF value matching the - value of one or more of the ID values supplied in $arg.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:string$uri
    - Return type: document-node()?

    - Examples: - - - - - - - - - -
    QueryResult
    doc("test.xml")Contents of test.xml file returned as node

    - - W3C Documentation reference -
    - - - fn:doc-available() -
    - Retrieves a document using a URI supplied as an xs:string, and returns the corresponding - document node.
    - - If $uri is the empty sequence, the result is an empty sequence.
    - - If $uri is not a valid URI, an error may be raised [err:FODC0005].
    - - If $uri is a relative URI reference, it is resolved relative to the value of the base - URI property from the static context. The resulting absolute URI is promoted to an - xs:string.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:string$uri
    - Return type: xs:boolean

    - Examples: - - - - - - - - - -
    QueryResult
    doc("test.xml")true (If document is available)

    - - W3C Documentation reference -
    - - - fn:collection() -
    - This function takes an xs:string as argument and returns a sequence of nodes obtained by - interpreting $arg as an xs:anyURI and resolving it according to the mapping specified in - Available collections described in Section C.2 Dynamic Context ComponentsXP. If - Available collections provides a mapping from this string to a sequence of nodes, the - function returns that sequence. If Available collections maps the string to an empty - sequence, then the function returns an empty sequence. If Available collections provides - no mapping for the string, an error is raised [err:FODC0004].
    - If $arg is not specified, the function returns the sequence of the nodes in the default - collection in the dynamic context. See Section C.2 Dynamic Context ComponentsXP. If the - value of the default collection is undefined an error is raised [err:FODC0002].

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:string?$arg (Optional)
    - Return type: node()*

    - Examples: - - - - - - - - - -
    QueryResult
    collection("")<empty sequence>

    - - W3C Documentation reference -
    - - fn:element-with-id() -
    - Returns the sequence of element nodes that have an ID value matching the value of one or - more of the IDREF values supplied in $arg.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:string?$arg (Optional)
    - Return type: node()*

    - - W3C Documentation reference -
    - - fn:position() -
    - Returns the context position from the dynamic context. (See Section C.2 Dynamic Context - ComponentsXP.) If the context item is undefined, an error is raised: - [err:XPDY0002]XP.

    - - Return type: xs:integer

    - Examples: - - - - - - - - - -
    QueryResult
    /l:library/l:readerList/position()1

    - - W3C Documentation reference -
    - - - fn:last() -
    - Returns the context size from the dynamic context. (See Section C.2 Dynamic Context - ComponentsXP.) If the context item is undefined, an error is raised: - [err:XPDY0002]XP.

    - - Return type: xs:integer

    - Examples: - - - - - - - - - -
    QueryResult
    /l:library/l:readerList/p:person/last()2
    2

    - - W3C Documentation reference -
    - -
    -
    -
    - - - -
    - - fn:years-from-duration() -
    - Returns an xs:integer representing the years component in the value of $arg. The result - is obtained by casting $arg to an xs:yearMonthDuration (see 17.1.4 Casting to duration - types) and then computing the years component as described in 10.3.1.3 Canonical - representation.
    - - The result may be negative.
    - - If $arg is an xs:dayTimeDuration returns 0.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    years-from-duration(xs:yearMonthDuration("P20Y15M"))21
    years-from-duration(xs:yearMonthDuration("-P15M"))-1
    years-from-duration(xs:dayTimeDuration("-P2DT15H"))0

    - W3C Documentation reference -
    - - fn:months-from-duration() -
    - Returns an xs:integer representing the months component in the value of $arg. The result - is obtained by casting $arg to an xs:yearMonthDuration (see 17.1.4 Casting to duration - types) and then computing the months component as described in 10.3.1.3 Canonical - representation.
    - - The result may be negative.
    - - If $arg is an xs:dayTimeDuration returns 0.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    months-from-duration(xs:yearMonthDuration("P20Y15M"))3
    months-from-duration(xs:yearMonthDuration("-P20Y18M"))-6
    months-from-duration(xs:dayTimeDuration("-P2DT15H0M0S"))0

    - W3C Documentation reference -
    - - fn:days-from-duration() -
    - Returns an xs:integer representing the days component in the value of $arg. The result - is obtained by casting $arg to an xs:dayTimeDuration (see 17.1.4 Casting to duration - types) and then computing the days component as described in 10.3.2.3 Canonical - representation.
    - - The result may be negative.
    - - If $arg is an xs:yearMonthDuration returns 0.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    days-from-duration(xs:dayTimeDuration("P3DT10H"))3
    days-from-duration(xs:dayTimeDuration("P3DT55H"))5
    days-from-duration(xs:yearMonthDuration("P3Y5M"))0

    - W3C Documentation reference -
    - - fn:hours-from-duration() -
    - Returns an xs:integer representing the hours component in the value of $arg. The result - is obtained by casting $arg to an xs:dayTimeDuration (see 17.1.4 Casting to duration - types) and then computing the hours component as described in 10.3.2.3 Canonical - representation.
    - - The result may be negative.
    - - If $arg is an xs:yearMonthDuration returns 0.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    hours-from-duration(xs:dayTimeDuration("P3DT10H"))10
    hours-from-duration(xs:dayTimeDuration("P3DT12H32M12S"))12
    hours-from-duration(xs:dayTimeDuration("PT123H"))0

    - W3C Documentation reference -
    - - - fn:minutes-from-duration() -
    - Returns an xs:integer representing the minutes component in the value of $arg. The - result is obtained by casting $arg to an xs:dayTimeDuration (see 17.1.4 Casting to - duration types) and then computing the minutes component as described in 10.3.2.3 - Canonical representation. - - The result may be negative. - - If $arg is an xs:yearMonthDuration returns 0. - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    minutes-from-duration(xs:dayTimeDuration("P3DT10H"))0
    minutes-from-duration(xs:dayTimeDuration("-P5DT12H30M"))-30

    - W3C Documentation reference -
    - - - fn:seconds-from-duration() -
    - Returns an xs:decimal representing the seconds component in the value of $arg. The - result is obtained by casting $arg to an xs:dayTimeDuration (see 17.1.4 Casting to - duration types) and then computing the seconds component as described in 10.3.2.3 - Canonical representation.
    - - The result may be negative.
    - - If $arg is an xs:yearMonthDuration returns 0.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?$arg
    - Return type: xs:decimal?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    seconds-from-duration(xs:dayTimeDuration("P3DT10H12.5S"))12.5
    seconds-from-duration(xs:dayTimeDuration("-PT256S"))-16.0

    - W3C Documentation reference -
    - - - fn:year-from-dateTime() -
    - Returns an xs:integer representing the year component in the localized value of $arg. - The result may be negative.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    year-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))1999
    year-from-dateTime(xs:dateTime("1999-12-31T19:20:00"))1999
    year-from-dateTime(xs:dateTime("1999-12-31T24:00:00"))2000

    - W3C Documentation reference -
    - - - fn:month-from-dateTime() -
    - Returns an xs:integer between 1 and 12, both inclusive, representing the month component - in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    month-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))5
    month-from-dateTime(xs:dateTime("1999-12-31T19:20:00"))12
    month-from-dateTime(xs:dateTime("1999-12-31T24:00:00"))1

    - W3C Documentation reference -
    - - fn:day-from-dateTime() -
    - Returns an xs:integer between 1 and 31, both inclusive, representing the day component - in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    day-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))31
    day-from-dateTime(xs:dateTime("1999-12-31T19:20:00"))31
    day-from-dateTime(xs:dateTime("1999-12-31T24:00:00"))1

    - W3C Documentation reference -
    - - - fn:hours-from-dateTime() -
    - Returns an xs:integer between 0 and 23, both inclusive, representing the hours component - in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    hours-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))13
    hours-from-dateTime(xs:dateTime("1999-12-31T19:20:00"))19
    hours-from-dateTime(xs:dateTime("1999-12-31T24:00:00"))0

    - W3C Documentation reference -
    - - - fn:minutes-from-dateTime() -
    - Returns an xs:integer value between 0 and 59, both inclusive, representing the minute - component in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    minutes-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))20
    minutes-from-dateTime(xs:dateTime("1999-05-31T13:30:00+05:30"))30

    - W3C Documentation reference -
    - - fn:seconds-from-dateTime() -
    - Returns an xs:decimal value greater than or equal to zero and less than 60, representing - the seconds and fractional seconds in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?$arg
    - Return type: xs:decimal?

    - Examples:
    - - - - - - - - - -
    ExpressionResult
    seconds-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))0

    - W3C Documentation reference -
    - - fn:timezone-from-dateTime() -
    - Returns an xs:decimal value greater than or equal to zero and less than 60, representing - the seconds and fractional seconds in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?$arg
    - Return type: xs:dayTimeDuration?

    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    timezone-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))-PT5H
    timezone-from-dateTime(xs:dateTime("2000-06-12T13:20:00Z")) PT0S
    timezone-from-dateTime(xs:dateTime("2004-08-27T00:00:00"))()

    - W3C Documentation reference -
    - - - fn:year-from-date() -
    - Returns an xs:integer representing the year in the localized value of $arg. The value - may be negative.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    year-from-date(xs:date("1999-05-31"))1999
    year-from-date(xs:date("2000-01-01+05:00"))2000

    - W3C Documentation reference -
    - - fn:month-from-date() -
    - Returns an xs:integer between 1 and 12, both inclusive, representing the month component - in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    month-from-date(xs:date("1999-05-31-05:00"))5
    month-from-date(xs:date("2000-01-01+05:00"))1

    - W3C Documentation reference -
    - - fn:day-from-date() -
    - Returns an xs:integer between 1 and 31, both inclusive, representing the day component - in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    day-from-date(xs:date("1999-05-31-05:00"))31
    day-from-date(xs:date("2000-01-01+05:00"))1

    - W3C Documentation reference -
    - - - fn:timezone-from-date() -
    - Returns the timezone component of $arg if any. If $arg has a timezone component, then - the result is an xs:dayTimeDuration that indicates deviation from UTC; its value may - range from +14:00 to -14:00 hours, both inclusive. Otherwise, the result is the empty - sequence.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?$arg
    - Return type: xs:dayTimeDuration?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    timezone-from-date(xs:date("1999-05-31-05:00"))-PT5H
    timezone-from-date(xs:date("2000-06-12Z"))PT0S

    - W3C Documentation reference -
    - - - fn:hours-from-time() -
    - Returns an xs:integer between 0 and 23, both inclusive, representing the value of the - hours component in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    hours-from-time(xs:time("11:23:00"))11
    hours-from-time(xs:time("24:00:00"))0

    - W3C Documentation reference -
    - - - fn:minutes-from-time() -
    - Returns an xs:integer between 0 and 23, both inclusive, representing the value of the - hours component in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?$arg
    - Return type: xs:integer?

    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    hours-from-time(xs:time("11:23:00"))11
    hours-from-time(xs:time("24:00:00"))0

    - W3C Documentation reference -
    - - fn:seconds-from-time() -
    - Returns an xs:decimal value greater than or equal to zero and less than 60, representing - the seconds and fractional seconds in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?$arg
    - Return type: xs:decimal?

    - Examples:
    - - - - - - - - - - -
    ExpressionResult
    seconds-from-time(xs:time("13:20:10.5"))10.5

    - W3C Documentation reference -
    - - - fn:timezone-from-time() -
    - Returns an xs:decimal value greater than or equal to zero and less than 60, representing - the seconds and fractional seconds in the localized value of $arg.
    - - If $arg is the empty sequence, returns the empty sequence.

    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?$arg
    - Return type: xs:dayTimeDuration?

    - Examples:
    - - - - - - - - - - - - - - -
    ExpressionResult
    timezone-from-time(xs:time("13:20:00-05:00"))-PT5H
    timezone-from-time(xs:time("13:20:00"))()

    - W3C Documentation reference -
    - - - fn:adjust-date-to-timezone() -
    - Adjusts an xs:date value to a specific timezone, or to no timezone at all. If $timezone - is the empty sequence, returns an xs:date without a timezone. Otherwise, returns an - xs:date with a timezone. For purposes of timezone adjustment, an xs:date is treated as - an xs:dateTime with time 00:00:00.
    - - If $timezone is not specified, then $timezone is the value of the implicit timezone in - the dynamic context.
    - - If $arg is the empty sequence, then the result is the empty sequence.
    - - A dynamic error is raised [err:FODT0003] if $timezone is less than -PT14H or greater - than PT14H or if does not contain an integral number of minutes.
    - - If $arg does not have a timezone component and $timezone is the empty sequence, then the - result is the value of $arg.
    - - If $arg does not have a timezone component and $timezone is not the empty sequence, then - the result is $arg with $timezone as the timezone component.
    - - If $arg has a timezone component and $timezone is the empty sequence, then the result is - the localized value of $arg without its timezone component.
    - - If $arg has a timezone component and $timezone is not the empty sequence, then: -
      -
    • Let $srcdt be an xs:dateTime value, with 00:00:00 for the time component and - date and timezone components that are the same as the date and timezone - components of $arg.
    • -
    • Let $r be the result of evaluating fn:adjust-dateTime-to-timezone($srcdt, - $timezone)
    • -
    • The result of this function will be a date value that has date and timezone - components that are the same as the date and timezone components of $r.
    • -
    -

    - - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:date?$arg
    xs:dayTimeDuration?$timezone
    - Return type: xs:date?

    - Examples:
    - - - - - - - - - - - - - - -
    ExpressionResult
    adjust-date-to-timezone(xs:date("2002-03-07"))2002-03-07-05:00
    adjust-date-to-timezone(xs:date("2002-03-07"), xs:dayTimeDuration("-PT10H")) - 2002-03-07-10:00

    - W3C Documentation reference -
    - - fn:adjust-time-to-timezone() -
    - Adjusts an xs:time value to a specific timezone, or to no timezone at all. If $timezone - is the empty sequence, returns an xs:time without a timezone. Otherwise, returns an - xs:time with a timezone.
    - - If $timezone is not specified, then $timezone is the value of the implicit timezone in - the dynamic context.
    - - If $arg is the empty sequence, then the result is the empty sequence.
    - - A dynamic error is raised [err:FODT0003] if $timezone is less than -PT14H or greater - than PT14H or if does not contain an integral number of minutes.
    - - If $arg does not have a timezone component and $timezone is the empty sequence, then the - result is $arg.
    - - If $arg does not have a timezone component and $timezone is not the empty sequence, then - the result is $arg with $timezone as the timezone component.
    - - If $arg has a timezone component and $timezone is the empty sequence, then the result is - the localized value of $arg without its timezone component.
    - - If $arg has a timezone component and $timezone is not the empty sequence, then: -
      -
    • Let $srcdt be an xs:dateTime value, with an arbitrary date for the date - component and time and timezone components that are the same as the time and - timezone components of $arg.
    • -
    • Let $r be the result of evaluating fn:adjust-dateTime-to-timezone($srcdt, - $timezone)
    • -
    • The result of this function will be a time value that has time and timezone - components that are the same as the time and timezone components of $r.
    • -
    -

    - - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:time?$arg
    xs:dayTimeDuration?$timezone
    - Return type: xs:time?

    - Examples:
    - - - - - - - - - - - - - - -
    ExpressionResult
    adjust-time-to-timezone(xs:time("10:00:00"))10:00:00-05:00
    adjust-time-to-timezone(xs:time("10:00:00"), xs:dayTimeDuration("-PT10H")) - 10:00:00-10:00

    - W3C Documentation reference -
    - - fn:current-dateTime() -
    - Returns the current dateTime (with timezone) from the dynamic context. (See Section C.2 - Dynamic Context ComponentsXP.) This is an xs:dateTime that is current at some time - during the evaluation of a query or transformation in which fn:current-dateTime() is - executed. This function is ·stable·. The precise instant during the query or - transformation represented by the value of fn:current-dateTime() is ·implementation - dependent·.

    - - Return type: xs:dateTime

    - Examples:
    - - - - - - - - - - -
    ExpressionResult
    current-dateTime()xs:dateTime corresponding to the current date and time

    - W3C Documentation reference -
    - - fn:current-date() -
    - Returns xs:date(fn:current-dateTime()). This is an xs:date (with timezone) that is - current at some time during the evaluation of a query or transformation in which - fn:current-date() is executed. This function is ·stable·. The precise instant during the - query or transformation represented by the value of fn:current-date() is ·implementation - dependent·.

    - - Return type: xs:date

    - Examples:
    - - - - - - - - - - -
    ExpressionResult
    current-date()xs:date corresponding to the current date

    - W3C Documentation reference -
    - - - fn:current-time() -
    - Returns xs:date(fn:current-dateTime()). This is an xs:date (with timezone) that is - current at some time during the evaluation of a query or transformation in which - fn:current-date() is executed. This function is ·stable·. The precise instant during the - query or transformation represented by the value of fn:current-date() is ·implementation - dependent·.

    - - Return type: xs:time

    - Examples:
    - - - - - - - - - - -
    ExpressionResult
    current-time()xs:date corresponding to the current time

    - W3C Documentation reference -
    - - fn:implicit-timezone() -
    - Returns the value of the implicit timezone property from the dynamic context. Components - of the dynamic context are discussed in Section C.2 Dynamic Context - ComponentsXP.

    - - Return type: xs:string

    - Examples:
    - - - - - - - - - - -
    ExpressionResult
    implicit-timezone()PT0S

    - W3C Documentation reference -
    -
    -
    -
    - - - -
    - - fn:error() -
    - The fn:error function is a general function that may be invoked as above but may also be - invoked from [XQuery 1.0: An XML Query Language] or [XML Path Language (XPath) 2.0] - applications with, for example, an xs:QName argument. -
    - W3C Documentation reference -
    - - - fn:trace() -
    - Provides an execution trace intended to be used in debugging queries.
    - - The input $value is returned, unchanged, as the result of the function. In addition, the - inputs $value, converted to an xs:string, and $label may be directed to a trace data - set. The destination of the trace output is ·implementation-defined·. The format of the - trace output is ·implementation dependent·. The ordering of output from invocations of - the fn:trace() function is ·implementation dependent·.
    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    item*$value
    xs:string$label
    - Return type: item

    -
    - W3C Documentation reference -
    - - -
    -
    -
    - - - -
    - - fn:resolve-uri() -
    - This function enables a relative URI reference to be resolved against an absolute URI. - - The first form of this function resolves $relative against the value of the base-uri - property from the static context. If the base-uri property is not initialized in the - static context an error is raised [err:FONS0005].
    - - If $relative is a relative URI reference, it is resolved against $base, or against the - base-uri property from the static context, using an algorithm such as those described in - [RFC 2396] or [RFC 3986], and the resulting absolute URI reference is returned.
    - If $relative is an absolute URI reference, it is returned unchanged.
    - - If $relative is the empty sequence, the empty sequence is returned.
    - - If $relative is not a valid URI according to the rules of the xs:anyURI data type, or if - it is not a suitable relative reference to use as input to the chosen resolution - algorithm, then an error is raised [err:FORG0002].
    - - If $base is not a valid URI according to the rules of the xs:anyURI data type, if it is - not a suitable URI to use as input to the chosen resolution algorithm (for example, if - it is a relative URI reference, if it is a non-hierarchic URI, or if it contains a - fragment identifier), then an error is raised [err:FORG0002].
    - - If the chosen resolution algorithm fails for any other reason then an error is raised - [err:FORG0009].
    - -

    Note:

    - - Resolving a URI does not dereference it. This is merely a syntactic operation on two - character strings. -

    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$relative
    xs:string$base
    - Return type: xs:anyURI?

    -
    - W3C Documentation reference -
    - - fn:resolve-QName() -
    - Returns an xs:QName value (that is, an expanded-QName) by taking an xs:string that has - the lexical form of an xs:QName (a string in the form "prefix:local-name" or - "local-name") and resolving it using the in-scope namespaces for a given element.
    - - If $qname does not have the correct lexical form for xs:QName an error is raised - [err:FOCA0002].
    - - If $qname is the empty sequence, returns the empty sequence.
    - - More specifically, the function searches the namespace bindings of $element for a - binding whose name matches the prefix of $qname, or the zero-length string if it has no - prefix, and constructs an expanded-QName whose local name is taken from the supplied - $qname, and whose namespace URI is taken from the string value of the namespace - binding.
    - - If the $qname has a prefix and if there is no namespace binding for $element that - matches this prefix, then an error is raised [err:FONS0004].
    - - If the $qname has no prefix, and there is no namespace binding for $element - corresponding to the default (unnamed) namespace, then the resulting expanded-QName has - no namespace part.
    - - The prefix (or absence of a prefix) in the supplied $qname argument is retained in the - returned expanded-QName, as discussed in Section 2.1 TerminologyDM.

    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$qname
    element$element
    - Return type: xs:QName?

    - Examples: - - - - - - - - - - - - - -
    QueryResult
    resolve-QName("hello", /l:library/l:libraryName)hello
    resolve-QName("l:libraryID", /l:library/l:libraryName)l:libraryID

    - - W3C Documentation reference -
    - - fn:QName() -
    - Returns an xs:QName with the namespace URI given in $paramURI. If $paramURI is the - zero-length string or the empty sequence, it represents "no namespace"; in this case, if - the value of $paramQName contains a colon (:), an error is raised [err:FOCA0002]. The - prefix (or absence of a prefix) in $paramQName is retained in the returned xs:QName - value. The local name in the result is taken from the local part of $paramQName.
    - - If $paramQName does not have the correct lexical form for xs:QName an error is raised - [err:FOCA0002].
    - - Note that unlike xs:QName this function does not require a xs:string literal as the - argument.

    - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$paramURI
    xs:string$paramQName
    - Return type: xs:QName

    - Examples: - - - - - - - - - -
    QueryResult
    QName("http://www.release11.com/library", "l:libraryName")l:libraryName
    - For more extensive examples see W3C documentation below.
    - - W3C Documentation reference -
    - - fn:prefix-from-QName() -
    - Returns an xs:NCName representing the prefix of $arg. The empty sequence is returned if - $arg is the empty sequence or if the value of $arg contains no prefix.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:QName?$arg
    - Return type: xs:NCName?

    - Examples: - - - - - - - - - -
    QueryResult
    prefix-from-QName(resolve-QName("l:library", /l:library))l
    - - W3C Documentation reference -
    - - fn:local-name-from-QName() -
    - Returns an xs:NCName representing the local part of $arg. If $arg is the empty sequence, - returns the empty sequence.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:QName?$arg
    - Return type: xs:NCName?

    - Examples: - - - - - - - - - -
    QueryResult
    prefix-from-QName(resolve-QName("l:library", /l:library))library
    - - W3C Documentation reference -
    - - - fn:prefix-from-QName() -
    - Returns an xs:NCName representing the prefix of $arg. The empty sequence is returned if - $arg is the empty sequence or if the value of $arg contains no prefix.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:QName?$arg
    - Return type: xs:NCName?

    - Examples: - - - - - - - - - -
    QueryResult
    prefix-from-QName(resolve-QName("l:library", /l:library))l
    - - W3C Documentation reference -
    - - fn:namespace-uri-from-QName() -
    - Returns the namespace URI for $arg as an xs:anyURI. If $arg is the empty sequence, the - empty sequence is returned. If $arg is in no namespace, the zero-length xs:anyURI is - returned.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    xs:QName?$arg
    - Return type: xs:anyURI?

    - Examples: - - - - - - - - - -
    QueryResult
    prefix-from-QName(resolve-QName("l:library", /l:library))http://www.release11.com/library
    - - W3C Documentation reference -
    - - - fn:namespace-uri-for-prefix() -
    - Returns the namespace URI of one of the in-scope namespaces for $element, identified by - its namespace prefix.
    - - If $element has an in-scope namespace whose namespace prefix is equal to $prefix, it - returns the namespace URI of that namespace. If $prefix is the zero-length string or the - empty sequence, it returns the namespace URI of the default (unnamed) namespace. - Otherwise, it returns the empty sequence.
    - - Prefixes are equal only if their Unicode code points match exactly.

    - - Arguments: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?$prefix
    element()$element
    - Return type: xs:anyURI?

    - Examples: - - - - - - - - - -
    QueryResult
    namespace-uri-for-prefix("l", /l:library)http://www.release11.com/library
    - - W3C Documentation reference -
    - - - fn:in-scope-prefixes() -
    - Returns the prefixes of the in-scope namespaces for $element. For namespaces that have a - prefix, it returns the prefix as an xs:NCName. For the default namespace, which has no - prefix, it returns the zero-length string.

    - - Arguments: - - - - - - - - - -
    TypeDescription
    element()$element
    - Return type: xs:string*

    - Examples: - - - - - - - - - -
    QueryResult
    in-scope-prefixes(/l:library)b
    l
    p
    xsi
    xml
    - - W3C Documentation reference -
    - - fn:static-base-uri() -
    - Returns the value of the Base URI property from the static context. If the Base URI - property is undefined, the empty sequence is returned. Components of the static context - are discussed in Section C.1 Static Context ComponentsXP.

    - - Return type: xs:anyURI?

    - Examples:
    - - - - - - - - - - -
    ExpressionResult
    static-base-uri()()<empty sequence>

    - W3C Documentation reference -
    - -
    -
    -
    - -
    - - - -
    - - fn:outermost(node()*) -
    - Returns the outermost nodes of the input sequence that are not ancestors of any other - node in the input sequence
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()*Sequence of nodes
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:outermost(//chapter)Sequence of outermost chapter nodes
    fn:outermost(/book//*)Sequence of outermost nodes in the book

    - W3C Documentation reference: outermost -
    - - - fn:innermost(node()*) -
    - Returns the innermost nodes of the input sequence that are not descendants of any other - node in the input sequence
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()*Sequence of nodes
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:innermost(//chapter)Sequence of innermost chapter nodes
    fn:innermost(/book//*)Sequence of innermost nodes in the book

    - W3C Documentation reference: innermost -
    - - - fn:has-children(node()?) -
    - Returns true if the specified node has one or more children, otherwise returns false
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:has-children(/book/chapter[1])true
    fn:has-children(/book/chapter[1]/title)false

    - W3C Documentation reference: has-children -
    - - - fn:path(node()?) -
    - Returns a string that represents the path of the specified node within the XML - document
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:path(/book/chapter[1])/book/chapter[1]
    fn:path(/book/chapter[2]/title)/book/chapter[2]/title

    - W3C Documentation reference: path -
    - - - fn:root(node()?) -
    - Returns the root node of the tree that contains the specified node
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:root(/book/chapter)<book> element (root node)
    fn:root(/book/chapter[1])<book> element (root node)

    - W3C Documentation reference: root -
    - - - fn:namespace-uri(node()?) -
    - Returns the namespace URI of the specified node
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:namespace-uri(/example:root)"http://www.example.com/ns"
    fn:namespace-uri(/a/b)""

    - W3C Documentation reference: namespace-uri -
    - - - fn:local-name(node()?) -
    - Returns the local part of the name of the specified node
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:local-name(/a/b)"b"
    fn:local-name(/example:root)"root"

    - W3C Documentation reference: local-name -
    - - fn:name(node()?) -
    - Returns the expanded QName of the specified node as a string
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:name(/a/b)"b"
    fn:name(/example:root)"example:root"

    - W3C Documentation reference: name -
    - - - - fn:document-uri(node?) -
    - Returns the document URI of the given node or the context item
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node?Returns the document URI of the specified node or the context item (if no - argument is provided)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:document-uri(/library/fiction:book[1])http://example.com/library.xml (assuming the document URI of the first - fiction:book element is "http://example.com/library.xml")
    fn:document-uri(/library)http://example.com/library.xml (assuming the document URI of the library - element is "http://example.com/library.xml")

    - W3C Documentation reference: Document-URI -
    - - - fn:base-uri(node?) -
    - Returns the base URI of the node or the context item
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node?Returns the base URI of the specified node or the context item (if no - argument is provided)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:base-uri(/library/fiction:book[1])http://example.com/library.xml (assuming the base URI of the first - fiction:book element is "http://example.com/library.xml")
    fn:base-uri(/library)http://example.com/library.xml (assuming the base URI of the library element - is "http://example.com/library.xml")

    - W3C Documentation reference: Base-URI -
    - - - fn:node-name(node?) -
    - - Returns the name of a node as an xs:QName
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node?Returns the name of the specified node or the context item if the argument - is omitted
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:node-name(/library/*[1])fiction:book
    fn:node-name(/library/fiction:book[1]/title)title

    - W3C Documentation reference: Node-Name -
    - -
    -
    -
    - - - -
    - - fn:not(item()*) -
    - Returns the negation of the effective boolean value of the argument
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item()*Argument whose effective boolean value is to be negated
    - Examples:
    - - - - - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:not(1)false
    fn:not(0)true
    fn:not('')true
    fn:not('true')false

    - W3C Documentation reference: Not -
    - - - fn:false() -
    - Returns the boolean value false
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    NoneReturns the boolean value false
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:false()false
    //item[fn:false()]Returns an empty node-set

    - W3C Documentation reference: False -
    - - - fn:true() -
    - Returns the boolean value true
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    NoneReturns the boolean value true
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:true()true
    //item[fn:true()]Returns all <item> elements

    - W3C Documentation reference: True -
    - - - fn:boolean(item()*) -
    - Converts the argument to a boolean value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item()*Argument to be converted to a boolean value
    - Examples:
    - - - - - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:boolean(1)true
    fn:boolean(0)false
    fn:boolean('')false
    fn:boolean('true')true

    - W3C Documentation reference: Boolean -
    - - -
    -
    -
    - - - -
    - - fn:unparsed-text-available(xs:string?, xs:string?) -
    - Determines if an unparsed text resource identified by a URI can be read using the given - encoding
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the unparsed text resource
    xs:string?The encoding to be used for reading the resource
    xs:booleanIndicates if the resource can be read using the given encoding
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:unparsed-text-available("http://www.example.com/text.txt", "UTF-8")Returns true if the text resource identified by the specified URI can be - read using the specified encoding, otherwise false

    - W3C Documentation reference: unparsed-text-available -
    - - - fn:unparsed-text-lines(xs:string?, xs:string?) -
    - Returns the contents of an unparsed text resource identified by a URI, split into - lines
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the unparsed text resource
    xs:string?The encoding to be used for reading the resource
    xs:string*The lines of the unparsed text resource
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:unparsed-text-lines("http://www.example.com/text.txt", "UTF-8")Returns the lines of the text resource identified by the specified URI, - using the specified encoding

    - W3C Documentation reference: unparsed-text-lines -
    - - - fn:unparsed-text(xs:string?, xs:string?) -
    - Returns the contents of an unparsed text resource identified by a URI
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the unparsed text resource
    xs:string?The encoding to be used for reading the resource
    xs:string?The contents of the unparsed text resource
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:unparsed-text("http://www.example.com/text.txt", "UTF-8")Returns the contents of the text resource identified by the specified URI, - using the specified encoding

    - W3C Documentation reference: unparsed-text -
    - - - fn:escape-html-uri(xs:string?) -
    - Escapes special characters in a URI to be used in HTML
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?URI to be escaped for use in HTML
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:escape-html-uri('https://example.com/search?q=test&lang=en')https://example.com/search?q=test&lang=en
    fn:escape-html-uri('https://example.com/page?id=1§ion=2')https://example.com/page?id=1&section=2

    - W3C Documentation reference: Escape-HTML-URI -
    - - - fn:iri-to-uri(xs:string?) -
    - Converts an IRI to a URI by escaping non-ASCII characters
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?IRI to be converted to a URI
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:iri-to-uri('https://example.com/ümlaut')https://example.com/%C3%BCmlaut
    fn:iri-to-uri('https://example.com/日本語')https://example.com/%E6%97%A5%E6%9C%AC%E8%AA%9E

    - W3C Documentation reference: IRI-to-URI -
    - - - fn:encode-for-uri(xs:string?) -
    - Encodes a string for use in a URI by escaping special characters
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?String to be encoded for use in a URI
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:encode-for-uri('hello world')hello%20world
    fn:encode-for-uri('example?query=value¶m=value2')example%3Fquery%3Dvalue%26param%3Dvalue2

    - W3C Documentation reference: Encode-for-URI -
    - - - fn:resolve-uri(xs:string?, xs:string?) -
    - Resolves a relative URI using a base URI
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Relative URI to resolve
    xs:string?Base URI to use for resolving (optional)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:resolve-uri('example.html', 'https://www.example.com/folder/')https://www.example.com/folder/example.html
    fn:resolve-uri('../images/pic.jpg', - 'https://www.example.com/folder/page.html')https://www.example.com/images/pic.jpg

    - W3C Documentation reference: Resolve-URI -
    - - fn:analyze-string(xs:string?, xs:string, xs:string?) -
    - Analyzes the input string and returns an XML fragment containing match and non-match - elements
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to analyze
    xs:stringRegular expression pattern to match
    xs:string?Flags to control the regular expression matching (optional)
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:analyze-string('red,green,blue', ',') - <fn:analyze-string-result><fn:non-match>red</fn:non-match><fn:match>, - <fn:non-match>green</fn:non-match><fn:match>, - <fn:non-match>blue</fn:non-match></fn:analyze-string-result> -

    - W3C Documentation reference: Analyze-String -
    - - - fn:tokenize(xs:string?, xs:string, xs:string?) -
    - Splits the input string into a sequence of substrings using the pattern as a delimiter -
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to tokenize
    xs:stringRegular expression pattern to use as delimiter
    xs:string?Flags to control the regular expression matching (optional)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:tokenize('XPath 3.0, XQuery 3.0, XSLT 3.0', ',\\s*')('XPath 3.0', 'XQuery 3.0', 'XSLT 3.0')
    fn:tokenize('apple,orange,banana', ',')('apple', 'orange', 'banana')

    - W3C Documentation reference: Tokenize -
    - - - fn:replace(xs:string?, xs:string, xs:string, xs:string?) -
    - Replaces occurrences of the pattern in the input string with the replacement string
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:stringRegular expression pattern to match
    xs:stringReplacement string
    xs:string?Flags to control the regular expression matching (optional)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:replace('XPath 3.0 is great', '3.0', '3.1')'XPath 3.1 is great'
    fn:replace('Hello, World!', 'World', 'XPath')'Hello, XPath!'

    - W3C Documentation reference: Replace -
    - - - fn:matches(xs:string?, xs:string, xs:string?) -
    - Returns true if the input string matches the regular expression pattern, otherwise false -
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:stringRegular expression pattern to match
    xs:string?Flags to control the regular expression matching (optional)
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:matches('XPath 3.0', '\\d\\.\\d')true
    fn:matches('Hello, World!', '[A-Z][a-z]*')true
    fn:matches('example123', '\\d+', 'q')false

    - W3C Documentation reference: Matches -
    - - - fn:substring-after(xs:string?, xs:string?) -
    - Returns the part of the first string that follows the first occurrence of the second - string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:string?Substring to search for
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:substring-after('Hello, World!', ',')' World!'
    fn:substring-after('XPath 3.0 is awesome!', '3.0')' is awesome!'

    - W3C Documentation reference: Substring-After -
    - - - fn:substring-before(xs:string?, xs:string?) -
    - Returns the part of the first string that precedes the first occurrence of the second - string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:string?Substring to search for
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:substring-before('Hello, World!', ',')'Hello'
    fn:substring-before('XPath 3.0 is awesome!', '3.0')'XPath '

    - W3C Documentation reference: Substring-Before -
    - - - fn:ends-with(xs:string?, xs:string?) -
    - Returns true if the first string ends with the second string, otherwise false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to check
    xs:string?Substring to check for at the end of the first string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:ends-with('Hello, World!', 'World!')true
    fn:ends-with('Hello, World!', 'Hello')false
    fn:ends-with('XPath 3.0', '3.0')true

    - W3C Documentation reference: Ends-With -
    - - - fn:starts-with(xs:string?, xs:string?) -
    - Returns true if the first string starts with the second string, otherwise false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to check
    xs:string?Substring to check for at the beginning of the first string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:starts-with('Hello, World!', 'Hello')true
    fn:starts-with('Hello, World!', 'World')false
    fn:starts-with('XPath 3.0', 'XPath')true

    - W3C Documentation reference: Starts-With -
    - - - fn:contains(xs:string?, xs:string?) -
    - Returns true if the first string contains the second string, otherwise false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:string?Substring to search for
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:contains('Hello, World!', 'World')true
    fn:contains('Hello, World!', 'world')false
    fn:contains('XPath 3.0', '3.0')true

    - W3C Documentation reference: Contains -
    - - - fn:translate(xs:string?, xs:string, xs:string) -
    - Returns the input string with specified characters replaced
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to be translated
    xs:stringMap string with characters to replace
    xs:stringTranslate string with replacement characters
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:translate('apple', 'aeiou', '12345')'1ppl2'
    fn:translate('Hello, World!', 'HW', 'hw')'hello, world!'

    - W3C Documentation reference: Translate -
    - - - fn:lower-case(xs:string?) -
    - Returns the input string with all characters converted to lowercase
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string to convert to lowercase
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:lower-case('HELLO, WORLD!')'hello, world!'
    fn:lower-case('XPath 3.0')'xpath 3.0'
    fn:lower-case('BANANA')'banana'

    - W3C Documentation reference: Lower-Case -
    - - - fn:upper-case(xs:string?) -
    - Returns the input string with all characters converted to uppercase
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string to convert to uppercase
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:upper-case('Hello, World!')'HELLO, WORLD!'
    fn:upper-case('XPath 3.0')'XPATH 3.0'
    fn:upper-case('banana')'BANANA'

    - W3C Documentation reference: Upper-Case -
    - - - fn:normalize-unicode(xs:string?, xs:string) -
    - Returns the input string with Unicode normalization applied
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to normalize
    xs:stringNormalization form to apply (NFC, NFD, NFKC, NFKD)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:normalize-unicode('Café', 'NFC')'Café'
    fn:normalize-unicode('Café', 'NFD')'Café'

    - W3C Documentation reference: Normalize-Unicode -
    - - - fn:normalize-space(xs:string?) -
    - Returns the input string with whitespace normalized
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string to normalize whitespace
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:normalize-space(' Hello, World! ')'Hello, World!'
    fn:normalize-space(' XPath 3.0 ')'XPath 3.0'
    fn:normalize-space('\tbanana\t')'banana'

    - W3C Documentation reference: Normalize-Space -
    - - - fn:string-length(xs:string?) -
    - Returns the length of the input string
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string to calculate length
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:string-length('Hello, World!')13
    fn:string-length('XPath 3.0')8
    fn:string-length('banana')6

    - W3C Documentation reference: String-Length -
    - - - fn:substring(xs:string?, xs:double) -
    - Returns a substring of the source string, starting from a specific location
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input source string
    xs:doubleStarting location to extract the substring
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:substring('Hello, World!', 1, 5)'Hello'
    fn:substring('XPath 3.0', 7)'3.0'
    fn:substring('banana', 2, 3)'ana'

    - W3C Documentation reference: Substring -
    - - fn:string-join(xs:string*, xs:string) -
    - Joins a sequence of strings with a specified separator, returning a single string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string*Input sequence of strings to join
    xs:stringSeparator string to insert between joined strings
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:string-join(('apple', 'banana', 'orange'), ', ')'apple, banana, orange'
    fn:string-join(('XPath', '3.0', 'Functions'), ' - ')'XPath - 3.0 - Functions'
    fn:string-join(('A', 'B', 'C'), '')'ABC'

    - W3C Documentation reference: String-Join -
    - - - fn:concat(xs:anyAtomicType?, xs:anyAtomicType?, ...) -
    - Concatenates two or more strings or atomic values, returning a single string
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType?Input strings or atomic values to concatenate
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:concat('Hello', ' ', 'World')'Hello World'
    fn:concat('I have ', 3, ' apples')'I have 3 apples'
    fn:concat('XPath ', '3.0')'XPath 3.0'

    - W3C Documentation reference: Concat -
    - - - fn:codepoint-equal(xs:string?, xs:string?) -
    - Compares two strings on a codepoint-by-codepoint basis and returns true if they are - equal, false otherwise
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?First string to compare
    xs:string?Second string to compare
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:codepoint-equal('Hello', 'Hello')true
    fn:codepoint-equal('Hello', 'hello')false
    fn:codepoint-equal('apple', 'banana')false

    - W3C Documentation reference: Codepoint-Equal -
    - - - fn:compare(xs:string?, xs:string?) -
    - Compares two strings and returns -1, 0, or 1 if the first string is less than, equal to, - or greater than the second string, respectively
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?First string to compare
    xs:string?Second string to compare
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:compare('apple', 'banana')-1
    fn:compare('apple', 'apple')0
    fn:compare('banana', 'apple')1

    - W3C Documentation reference: Compare -
    - - - fn:string-to-codepoints(xs:string?) -
    - Returns a sequence of Unicode code points for a given string
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:string-to-codepoints('Hello')(72, 101, 108, 108, 111)
    fn:string-to-codepoints('( ͡° ͜ʖ ͡°)')(40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41)
    fn:string-to-codepoints('😊')(128522)

    - W3C Documentation reference: String-To-Codepoints -
    - - - fn:codepoints-to-string(xs:integer*) -
    - Constructs a string from a sequence of Unicode code points
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:integer*Sequence of Unicode code points
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:codepoints-to-string((72, 101, 108, 108, 111))Hello
    codepoints-to-string((40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41)) - ( ͡° ͜ʖ ͡°)
    fn:codepoints-to-string((128522))😊

    - W3C Documentation reference: Codepoints-To-String -
    - - - - fn:string(object) -
    - Returns the string representation of the object argument
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    stringThe object to convert to a string
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    string((1<0))false
    string(.11)0.11

    - W3C Documentation reference: String-Functions -
    - - -
    -
    -
    - - - -
    - - - fn:format-number(numeric?, xs:string, $decimal-format-name) -
    - Formats a numeric value according to the supplied picture string and optional decimal - format name
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    numeric?Numeric value to be formatted
    xs:stringPicture string defining the format
    xs:string?Optional decimal format name
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:format-number(1234.567, '0.00')1,234.57
    fn:format-number(-1234.567, '0.00')-1,234.57
    fn:format-number(0.12345, '0.00%')12.35%

    - W3C Documentation reference: Format-Number -
    - - - fn:format-integer(xs:integer?, xs:string) -
    - Formats an integer value according to the supplied picture string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:integer?Integer value to be formatted
    xs:stringPicture string defining the format
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:format-integer(12345, '0,0')12,345
    fn:format-integer(-1234, '0,0')-1,234
    fn:format-integer(1234, '00-00-00')01-23-45

    - W3C Documentation reference: Format-Integer -
    - - - fn:round-half-to-even(numeric?) -
    - Returns the closest integer to the given numeric value, rounding half-way cases to the - nearest even integer (also known as "bankers' rounding")
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the rounded value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:round-half-to-even(3.5)4
    fn:round-half-to-even(2.5)2
    fn:round-half-to-even(-1.5)-2
    fn:round-half-to-even(xs:decimal('1.25'), 1)1.2

    - W3C Documentation reference: Round-Half-To-Even -
    - - - fn:round(numeric?) -
    - Returns the closest integer to the given numeric value, rounding half-way cases away - from zero
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the rounded value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:round(3.14)3
    fn:round(-4.7)-5
    fn:round(xs:decimal('2.5'))3

    - W3C Documentation reference: Round -
    - - - fn:floor(numeric?) -
    - Returns the largest integer less than or equal to the given numeric value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the floor value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:floor(3.14)3
    fn:floor(-4.7)-5
    fn:floor(xs:decimal('2.5'))2

    - W3C Documentation reference: Floor -
    - - - - fn:ceiling(numeric?) -
    - Returns the smallest integer greater than or equal to the given numeric value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the ceiling value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:ceiling(3.14)4
    fn:ceiling(-4.7)-4
    fn:ceiling(xs:decimal('2.5'))3

    - W3C Documentation reference: Ceiling -
    - - - fn:abs(numeric?) -
    - Returns the absolute value of the given numeric value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the absolute value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:abs(-42)42
    fn:abs(3.14)3.14
    fn:abs(xs:decimal('-5.5'))5.5

    - W3C Documentation reference: Abs -
    - - fn:number(item?) -
    - Converts the given value to a number
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item?Returns the numeric value of the specified expression or the context item - (if no argument is provided)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:number(/library/fiction:book[1]/@id)1 (if the first fiction:book element's id attribute is "1")
    fn:number(/library/fiction:book[1]/price)19.99 (if the first fiction:book element's price element contains "19.99") -

    - W3C Documentation reference: Number -
    - - - - -
    -
    -
    - - - -
    - - fn:fold-right(item()*, item()*, function(item(), item()*)) -
    - Applies a processing function cumulatively to the items of a sequence from right to - left, so as to reduce the sequence to a single value
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The input sequence of items
    item()*The initial value, also known as the zero value
    function(item(), item()*)The processing function used to accumulate the items
    item()*The resulting single value after applying the processing function
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fold-right((1, 2, 3, 4), 0, function($current, $accumulator) { $accumulator - - $current })Returns the result of subtracting each number in the input sequence from - right to left: -2

    - W3C Documentation reference: fold-right -
    - - - fn:fold-left(item()*, item()*, function(item()*, item())) -
    - Applies a processing function cumulatively to the items of a sequence from left to - right, so as to reduce the sequence to a single value
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The input sequence of items
    item()*The initial value, also known as the zero value
    function(item()*, item())The processing function used to accumulate the items
    item()*The resulting single value after applying the processing function
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fold-left((1, 2, 3, 4), 0, function($accumulator, $current) { $accumulator + - $current })Returns the sum of the numbers in the input sequence: 10

    - W3C Documentation reference: fold-left -
    - - - - - fn:last() -
    - Returns the position of the last item in the current context sequence
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    NoneReturns the position of the last item in the current context sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    /library/fiction:book[position() = last()]Returns the last fiction:book element in the library
    /library/fiction:book[last()]Returns the last fiction:book element in the library

    - W3C Documentation reference: Last -
    - - fn:position() -
    - Returns the context position of the context item in the sequence currently being - processed
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:integerThe position of the context item in the sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    <items><item>Item 1</item><item>Item - 2</item></items>/item[position()=2]Returns '<item>Item 2</item>'
    <items><item>Item 1</item><item>Item - 2</item></items>/item[position()=1]Returns '<item>Item 1</item>'

    - W3C Documentation reference: position -
    - - - fn:collection(xs:string?) -
    - Returns a sequence of documents in a collection identified by a URI
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the collection of documents
    xs:anyAtomicType*A sequence of documents in the collection
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:collection("http://www.example.com/collection/")Returns a sequence of documents in the collection identified by the - specified URI
    fn:collection()Returns a sequence of documents in the default collection, if one is defined -

    - W3C Documentation reference: collection -
    - - - fn:sum(xs:anyAtomicType*, xs:anyAtomicType?) -
    - Returns the sum of a sequence of numeric values
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of numeric values
    xs:anyAtomicType?Value to return if the sequence is empty (optional)
    xs:anyAtomicType?Sum of the input sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:sum((10, 20, 30, 40, 50))150
    fn:sum((), 0)0

    - W3C Documentation reference: sum -
    - - - fn:min(xs:anyAtomicType*, xs:string) -
    - Returns the minimum value from a sequence of values
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of values
    xs:stringCollation to use when comparing strings
    xs:anyAtomicType?Minimum value in the input sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:min((10, 20, 30, 40, 50))10
    fn:min(("apple", "banana", "cherry"), - "http://www.w3.org/2005/xpath-functions/collation/codepoint")"apple"
    fn:min(())empty sequence

    - W3C Documentation reference: min -
    - - - fn:max(xs:anyAtomicType*, xs:string) -
    - Returns the maximum value from a sequence of values
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of values
    xs:stringCollation to use when comparing strings
    xs:anyAtomicType?Maximum value in the input sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:max((10, 20, 30, 40, 50))50
    fn:max(("apple", "banana", "cherry"), - "http://www.w3.org/2005/xpath-functions/collation/codepoint")"cherry"
    fn:max(())empty sequence

    - W3C Documentation reference: max -
    - - - fn:avg(xs:anyAtomicType*) -
    - Computes the average of the numeric values in the input sequence
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of numeric values
    xs:anyAtomicType?Average of the numeric values in the input sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:avg((10, 20, 30, 40, 50))30
    fn:avg((2.5, 3.5, 4.5))3.5
    fn:avg(())empty sequence

    - W3C Documentation reference: avg -
    - - - fn:count(item()*) -
    - Returns the number of items in the input sequence
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    xs:integerNumber of items in the input sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:count(('apple', 'banana', 'orange'))3
    fn:count(())0
    fn:count((1, 2, 3, 4, 5))5

    - W3C Documentation reference: count -
    - - - fn:exactly-one(item()*) -
    - Returns the single item in the input sequence or raises an error if the sequence is - empty or contains more than one item
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()Single item from the input sequence, otherwise an error is raised
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:exactly-one(('apple'))'apple'
    fn:exactly-one(('apple', 'banana'))Error (more than one item)
    fn:exactly-one(())Error (empty sequence)

    - W3C Documentation reference: exactly-one -
    - - - fn:one-or-more(item()*)+ -
    - Returns the input sequence if it contains one or more items, otherwise raises an - error
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()+Sequence containing one or more items, otherwise an error is raised
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:one-or-more(('apple', 'banana'))('apple', 'banana')
    fn:one-or-more(('pear'))('pear')

    - W3C Documentation reference: one-or-more -
    - - - fn:zero-or-one(item()*) -
    - Returns the input sequence if it contains zero or one items, otherwise raises an - error
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()?Sequence containing zero or one item, otherwise an error is raised
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:zero-or-one(('apple'))('apple')
    fn:zero-or-one(())()

    - W3C Documentation reference: zero-or-one -
    - - - fn:deep-equal(item()* , item()*) -
    - Returns true if the two input sequences are deep-equal, meaning that they have the same - structure and atomic values
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*First input sequence
    item()*Second input sequence
    xs:booleanTrue if the input sequences are deep-equal, otherwise false
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:deep-equal((1, 2, 3), (1, 2, 3))true
    fn:deep-equal((1, 2, 3), (1, 2, 4))false

    - W3C Documentation reference: deep-equal -
    - - - fn:index-of(xs:anyAtomicType*, xs:anyAtomicType) -
    - Returns a sequence of integers indicating the positions of items in the input sequence - that are equal to the search item
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of atomic values
    xs:anyAtomicTypeSearch item to find in the input sequence
    xs:integer*Sequence of integers representing the positions of the search item in the - input sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:index-of((3, 1, 4, 1, 5, 9, 2, 2, 3), 1)(2, 4)
    fn:index-of(('apple', 'banana', 'orange', 'apple', 'grape', 'orange'), - 'apple')(1, 4)

    - W3C Documentation reference: index-of -
    - - - fn:distinct-values(xs:anyAtomicType*) -
    - Returns a sequence of distinct atomic values from the input sequence
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of atomic values
    xs:anyAtomicType*Distinct sequence of atomic values
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:distinct-values((3, 1, 4, 1, 5, 9, 2, 2, 3))(3, 1, 4, 5, 9, 2)
    fn:distinct-values(('apple', 'banana', 'orange', 'apple', 'grape', - 'orange'))('apple', 'banana', 'orange', 'grape')

    - W3C Documentation reference: distinct-values -
    - - - fn:unordered(item()*) -
    - Returns the items of a sequence in an implementation-dependent order
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()*Unordered sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:unordered((3, 1, 4, 1, 5, 9, 2))(1, 2, 3, 4, 5, 9, 1) (example result; actual order may vary)
    fn:unordered(('apple', 'banana', 'orange', 'grape'))('banana', 'apple', 'orange', 'grape') (example result; actual order may - vary)

    - W3C Documentation reference: unordered -
    - - - fn:subsequence(item()*, xs:double, xs:double) -
    - Returns a subsequence of a given sequence starting at a specified position with a - specified length
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    xs:doubleStarting position
    xs:doubleLength of subsequence
    item()*Subsequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:subsequence((1, 2, 3, 4, 5), 2, 3)(2, 3, 4)
    fn:subsequence(('apple', 'banana', 'orange', 'grape'), 1, 2)('apple', 'banana')
    fn:subsequence(('red', 'blue', 'green', 'yellow'), 3)('green', 'yellow')

    - W3C Documentation reference: subsequence -
    - - - fn:reverse(item()*) -
    - Reverses the order of items in a sequence
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()*Reversed sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:reverse((1, 2, 3, 4))(4, 3, 2, 1)
    fn:reverse(('apple', 'banana', 'orange'))('orange', 'banana', 'apple')
    fn:reverse(('red', 'blue', 'green'))('green', 'blue', 'red')

    - W3C Documentation reference: reverse -
    - - - fn:remove(item()*, xs:integer) -
    - Removes an item from a sequence at the specified position
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*Target sequence
    xs:integerPosition of the item to remove
    item()*New sequence with the item removed
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:remove((1, 2, 3, 4), 2)(1, 3, 4)
    fn:remove(('apple', 'banana', 'orange'), 3)('apple', 'banana')
    fn:remove((10, 20, 30), 1)(20, 30)

    - W3C Documentation reference: remove -
    - - - fn:insert-before(item()*, xs:integer, item()*) -
    - Inserts items from the specified sequence into another sequence at a given position
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*Target sequence
    xs:integerPosition at which to insert the items
    item()*Sequence of items to insert
    item()*New sequence with items inserted
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:insert-before((1, 3, 4), 2, (2))(1, 2, 3, 4)
    fn:insert-before(('apple', 'orange'), 1, ('banana'))('banana', 'apple', 'orange')
    fn:insert-before((10, 20, 30), 4, (40))(10, 20, 30, 40)

    - W3C Documentation reference: insert-before -
    - - - fn:tail(item()*) -
    - Returns all items of the input sequence except the first one, or an empty sequence if - the input is empty or contains only one item
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Sequence of items
    item()*All items except the first one, or an empty sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:tail((1, 2, 3))(2, 3)
    fn:tail((1))()
    fn:tail(/books/book/author)All authors in the "books" element except the first one

    - W3C Documentation reference: tail -
    - - - fn:head(item()*) -
    - Returns the first item of the input sequence, or an empty sequence if the input is - empty
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Sequence of items
    item()?The first item of the sequence, or an empty sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:head((1, 2, 3))1
    fn:head(())()
    fn:head(/books/book[1]/author)The first author of the first book in the "books" element

    - W3C Documentation reference: head -
    - - - fn:exists(item()*) -
    - Returns true if the input sequence is not empty, otherwise returns false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Sequence of items
    xs:booleanResult of the test (true or false)
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:exists((1, 2, 3))true
    fn:exists(())false
    fn:exists(//chapter[5])true if there are at least 5 chapters, otherwise false

    - W3C Documentation reference: exists -
    - - - fn:empty(item()*) -
    - Returns true if the input sequence is empty, otherwise returns false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Sequence of items
    xs:booleanResult of the test (true or false)
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:empty((1, 2, 3))false
    fn:empty(())true
    fn:empty(//chapter[100])true if there are less than 100 chapters, otherwise false

    - W3C Documentation reference: empty -
    - - - - - fn:data(item*) -
    - Returns the simple value of an item or a sequence of items
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item?Returns the simple value of the specified item or the context item (if no - argument is provided)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:data(/library/fiction:book[1]/title)The Catcher in the Rye
    fn:data(/library/fiction:book[2]/author)Harper Lee

    - W3C Documentation reference: Data -
    - - -
    -
    -
    - - - -
    - fn:implicit-timezone() -
    - Returns the implicit timezone as an xs:dayTimeDuration
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:dayTimeDurationThe implicit timezone as a dayTimeDuration
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    implicit-timezone()Returns the implicit timezone as an xs:dayTimeDuration, e.g., '-PT7H' -

    - W3C Documentation reference: implicit-timezone -
    - - - fn:current-time() -
    - Returns the current time with timezone
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:timeThe current time with timezone
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    current-time()Returns the current time with timezone, e.g., '13:45:30.123-07:00'

    - W3C Documentation reference: current-time -
    - - - fn:current-date() -
    - Returns the current date with timezone
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:dateThe current date with timezone
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    current-date()Returns the current date with timezone, e.g., '2023-03-29-07:00'

    - W3C Documentation reference: current-date -
    - - - fn:current-dateTime() -
    - Returns the current date and time with timezone
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:dateTimeThe current date and time with timezone
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    current-dateTime()Returns the current date and time with timezone, e.g., - '2023-03-29T12:34:56.789-07:00'

    - W3C Documentation reference: current-dateTime -
    - - - fn:format-time(xs:time?, xs:string, xs:string?, xs:string?, xs:string?) -
    - Formats a time value using the provided picture string and optional language, - calendar, and country settings
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    xs:stringPicture string
    xs:string?Language
    xs:string?Calendar
    xs:string?Country
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:format-time(xs:time('14:30:15'), '[H01]:[m01]:[s01]')14:30:15
    fn:format-time(xs:time('14:30:15'), '[h01] [P] [ZN,*-3]')02 PM UTC

    - W3C Documentation reference: Format-Time -
    - - - fn:format-date(xs:date?, xs:string, xs:string?, xs:string?, xs:string?) -
    - Formats a date value using the provided picture string and optional language, - calendar, and country settings
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    xs:stringPicture string
    xs:string?Language
    xs:string?Calendar
    xs:string?Country
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:format-date(xs:date('2023-04-01'), '[Y0001]-[M01]-[D01]')2023-04-01
    fn:format-date(xs:date('2023-04-01'), '[MNn,*-3] [D], [Y]')Apr 1, 2023

    - W3C Documentation reference: Format-Date -
    - - - fn:format-dateTime(xs:dateTime?, xs:string, xs:string?, xs:string?, xs:string?) -
    - Formats a dateTime value using the provided picture string and optional language, - calendar, and country settings
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    xs:stringPicture string
    xs:string?Language
    xs:string?Calendar
    xs:string?Country
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:format-dateTime(xs:dateTime('2023-04-01T12:00:00'), - '[Y0001]-[M01]-[D01] [H01]:[m01]:[s01]')2023-04-01 12:00:00
    fn:format-dateTime(xs:dateTime('2023-04-01T12:00:00'), '[MNn,*-3], [D], - [Y]')Apr, 1, 2023

    - W3C Documentation reference: Format-DateTime -
    - - - fn:adjust-time-to-timezone(xs:time?, xs:dayTimeDuration?) -
    - Adjusts the timezone of a time value
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    xs:dayTimeDuration?Timezone adjustment
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:adjust-time-to-timezone(xs:time('10:00:00-07:00'), - xs:dayTimeDuration('PT2H'))12:00:00-05:00
    fn:adjust-time-to-timezone(xs:time('10:00:00Z'), - xs:dayTimeDuration('-PT3H'))07:00:00-03:00

    - W3C Documentation reference: Adjust-Time-To-Timezone -
    - - - - - fn:adjust-date-to-timezone(xs:date?, xs:dayTimeDuration?) -
    - Adjusts the timezone of a date value
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    xs:dayTimeDuration?Timezone adjustment
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:adjust-date-to-timezone(xs:date('2023-01-01-07:00'), - xs:dayTimeDuration('PT2H'))2023-01-01-05:00
    fn:adjust-date-to-timezone(xs:date('2023-01-01Z'), - xs:dayTimeDuration('-PT3H'))2022-12-31-03:00

    - W3C Documentation reference: Adjust-Date-To-Timezone -
    - - - fn:adjust-dateTime-to-timezone(xs:dateTime?, xs:dayTimeDuration?) -
    - Adjusts the timezone of a dateTime value
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    xs:dayTimeDuration?Timezone adjustment
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:adjust-dateTime-to-timezone(xs:dateTime('2023-01-01T12:00:00-07:00'), - xs:dayTimeDuration('PT2H'))2023-01-01T17:00:00-05:00
    fn:adjust-dateTime-to-timezone(xs:dateTime('2023-01-01T12:00:00Z'), - xs:dayTimeDuration('-PT3H'))2023-01-01T09:00:00-03:00

    - W3C Documentation reference: Adjust-DateTime-To-Timezone -
    - - - fn:timezone-from-time(xs:time?) -
    - Extracts the timezone component from an xs:time value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:timezone-from-time(xs:time('12:00:00-07:00'))-PT7H
    fn:timezone-from-time(xs:time('14:30:00+02:30'))PT2H30M

    - W3C Documentation reference: Timezone-From-Time -
    - - - fn:seconds-from-time(xs:time?) -
    - Extracts the seconds component from an xs:time value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:seconds-from-time(xs:time('21:45:30.5'))30.5
    fn:seconds-from-time(xs:time('04:15:12.1'))12.1

    - W3C Documentation reference: Seconds-From-Time -
    - - - fn:minutes-from-time(xs:time?) -
    - Extracts the minutes component from an xs:time value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:minutes-from-time(xs:time('21:45:30'))45
    fn:minutes-from-time(xs:time('04:15:12'))15

    - W3C Documentation reference: Minutes-From-Time -
    - - - fn:hours-from-time(xs:time?) -
    - Extracts the hours component from an xs:time value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:hours-from-time(xs:time('21:45:30'))21
    fn:hours-from-time(xs:time('04:15:12'))4

    - W3C Documentation reference: Hours-From-Time -
    - - - fn:timezone-from-date(xs:date?) -
    - Extracts the timezone component from an xs:date value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:timezone-from-date(xs:date('2023-03-29+02:00'))PT2H
    fn:timezone-from-date(xs:date('1980-12-15-05:00'))-PT5H

    - W3C Documentation reference: Timezone-From-Date -
    - - - fn:day-from-date(xs:date?) -
    - Extracts the day component from an xs:date value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:day-from-date(xs:date('2023-03-29'))29
    fn:day-from-date(xs:date('1980-12-15'))15

    - W3C Documentation reference: Day-From-Date -
    - - - fn:month-from-date(xs:date?) -
    - Extracts the month component from an xs:date value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:month-from-date(xs:date('2023-03-29'))3
    fn:month-from-date(xs:date('1980-12-15'))12

    - W3C Documentation reference: Month-From-Date -
    - - - fn:year-from-date(xs:date?) -
    - Extracts the year component from an xs:date value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:year-from-date(xs:date('2023-03-29'))2023
    fn:year-from-date(xs:date('1980-12-15'))1980

    - W3C Documentation reference: Year-From-Date -
    - - - fn:timezone-from-dateTime(xs:dateTime?) -
    - Extracts the timezone component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:timezone-from-dateTime(xs:dateTime('2023-03-29T12:30:45-07:00'))-PT7H
    fn:timezone-from-dateTime(xs:dateTime('2023-12-15T18:45:30+03:30'))PT3H30M

    - W3C Documentation reference: Timezone-From-DateTime -
    - - - fn:seconds-from-dateTime(xs:dateTime?) -
    - Extracts the seconds component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:seconds-from-dateTime(xs:dateTime('2023-03-29T12:30:45'))45
    fn:seconds-from-dateTime(xs:dateTime('2023-12-15T18:45:30.5-08:00')) - 30.5

    - W3C Documentation reference: Seconds-From-DateTime -
    - - - fn:minutes-from-dateTime(xs:dateTime?) -
    - Extracts the minutes component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:minutes-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))30
    fn:minutes-from-dateTime(xs:dateTime('2023-12-15T18:45:00-08:00'))45

    - W3C Documentation reference: Minutes-From-DateTime -
    - - - fn:hours-from-dateTime(xs:dateTime?) -
    - Extracts the hours component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:hours-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))12
    fn:hours-from-dateTime(xs:dateTime('2023-12-15T18:45:00-08:00'))18

    - W3C Documentation reference: Hours-From-DateTime -
    - - - fn:day-from-dateTime(xs:dateTime?) -
    - Extracts the day component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:day-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))29
    fn:day-from-dateTime(xs:dateTime('2023-12-15T18:45:00-08:00'))15

    - W3C Documentation reference: Day-From-DateTime -
    - - - fn:month-from-dateTime(xs:dateTime?) -
    - Extracts the month component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:month-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))3
    fn:month-from-dateTime(xs:dateTime('2023-12-15T18:45:00-08:00'))12

    - W3C Documentation reference: Month-From-DateTime -
    - - - fn:year-from-dateTime(xs:dateTime?) -
    - Extracts the year component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:year-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))2023
    fn:year-from-dateTime(xs:dateTime('2023-03-29T12:30:00-08:00'))2023

    - W3C Documentation reference: Year-From-DateTime -
    - - - - - fn:dateTime(xs:date?, xs:time?) -
    - Constructs an xs:dateTime value from an xs:date and an xs:time value
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:dateTime(xs:date('2023-03-29'), xs:time('12:30:00'))2023-03-29T12:30:00
    fn:dateTime(xs:date('2023-03-29+05:00'), xs:time('12:30:00-08:00'))2023-03-29T12:30:00-08:00

    - W3C Documentation reference: DateTime -
    - - - fn:seconds-from-duration(xs:duration?) -
    - Returns the seconds component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the seconds component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:seconds-from-duration(xs:dayTimeDuration('PT1H30M15.5S'))15.5
    fn:seconds-from-duration(xs:dayTimeDuration('-PT2M10.3S'))-10.3

    - W3C Documentation reference: Seconds-From-Duration -
    - - - fn:minutes-from-duration(xs:duration?) -
    - Returns the minutes component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the minutes component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:minutes-from-duration(xs:dayTimeDuration('PT2H30M'))30
    fn:minutes-from-duration(xs:dayTimeDuration('-PT1H45M'))-45

    - W3C Documentation reference: Minutes-From-Duration -
    - - - fn:hours-from-duration(xs:duration?) -
    - Returns the hours component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the hours component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:hours-from-duration(xs:dayTimeDuration('PT36H'))36
    fn:hours-from-duration(xs:dayTimeDuration('-PT12H30M'))-12

    - W3C Documentation reference: Hours-From-Duration -
    - - - fn:days-from-duration(xs:duration?) -
    - Returns the days component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the days component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:days-from-duration(xs:dayTimeDuration('P5DT12H30M'))5
    fn:days-from-duration(xs:dayTimeDuration('-P2DT6H'))-2

    - W3C Documentation reference: Days-From-Duration -
    - - - - fn:months-from-duration(xs:duration?) -
    - Returns the months component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the months component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:months-from-duration(xs:duration('P2Y3M4DT5H6M7S'))3
    fn:months-from-duration(xs:duration('-P2Y3M4DT5H6M7S'))-3

    - W3C Documentation reference: Months-From-Duration -
    - - - fn:years-from-duration(xs:duration?) -
    - Returns the years component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the years component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:years-from-duration(xs:duration('P2Y3M4DT5H6M7S'))2
    fn:years-from-duration(xs:duration('-P2Y3M4DT5H6M7S'))-2

    - W3C Documentation reference: Years-From-Duration -
    -
    -
    -
    - - - -
    - - fn:trace(item()*, xs:string) -
    - Outputs the provided label and value for diagnostic purposes and returns the value - unchanged
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Value to be traced
    xs:stringLabel to be output along with the value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:trace(42, 'The value is:')Outputs "The value is: 42" for diagnostic purposes and returns 42
    fn:trace(/library/book/title, 'Book title:')Outputs "Book title: [book title]" for diagnostic purposes and returns - the book title

    - W3C Documentation reference: Trace -
    - - - fn:error(xs:QName?, xs:string?, $error-object) -
    - Raises an error with the specified error code, description, and error object
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:QName?Error code (optional)
    xs:string?Description of the error (optional)
    item()*Error object (optional)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:error(xs:QName('err:FOER0000'))Raise error with the code err:FOER0000
    fn:error(xs:QName('err:FOER0000'), 'Invalid value')Raise error with the code err:FOER0000 and description "Invalid value" -

    - W3C Documentation reference: Error -
    - -
    -
    -
    - - - -
    - - fn:function-arity(function(*)) -
    - Returns the arity (number of arguments) of the specified function
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    function(*)The function to obtain the arity for
    xs:integerThe arity (number of arguments) of the specified function
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    function-arity(fn:substring)Returns the arity of the substring function: 2 (since - substring accepts two required arguments: the input string and the - starting index)

    - W3C Documentation reference: function-arity -
    - - - fn:function-name(function(*)) -
    - Returns the QName of the specified function
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    function(*)The function to obtain the QName for
    xs:QName?The QName of the specified function, or an empty sequence if the - function is anonymous
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    function-name(fn:substring)Returns the QName of the substring function: - QName("http://www.w3.org/2005/xpath-functions", "substring") -

    - W3C Documentation reference: function-name -
    - - - fn:function-lookup(xs:QName, xs:integer) -
    - Returns a function with the specified QName and arity if available, otherwise - returns an empty sequence
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:QNameFunction name as QName
    xs:integerArity of the function
    function(*)?A function with the specified QName and arity if available, otherwise an - empty sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    function-lookup(QName('http://www.w3.org/2005/xpath-functions', - 'substring'), 2)Returns the substring function with arity 2, if available

    - W3C Documentation reference: function-lookup -
    - - - fn:static-base-uri() -
    - Returns the static base URI as an xs:anyURI, if available
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:anyURI?The static base URI, if available; otherwise, an empty sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    static-base-uri()Returns the static base URI as an xs:anyURI, if available, e.g., - 'https://www.example.com/base/'

    - W3C Documentation reference: static-base-uri -
    - - - fn:default-collation() -
    - Returns the default collation URI as an xs:string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:stringThe default collation URI as a string
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    default-collation()Returns the default collation URI as an xs:string, e.g., - 'http://www.w3.org/2005/xpath-functions/collation/codepoint'

    - W3C Documentation reference: default-collation -
    - - - fn:serialize(item()?, item()?) -
    - Serializes an XML node, producing a string representation of the node
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()?An XML node to serialize
    item()?Serialization options as a map, with key-value pairs defining the - serialization parameters (optional)
    xs:string?A string representation of the serialized XML node or an empty sequence - if the input is an empty sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:serialize(<item>Item 1</item>)Returns '<item>Item 1</item>'
    fn:serialize(<item>Item 1</item>, map{'method': 'xml', 'indent': - 'yes'})Returns an indented XML string representation of the input node

    - W3C Documentation reference: serialize -
    - - - fn:parse-xml-fragment(xs:string?) -
    - Parses a string containing an XML fragment and returns a corresponding document - node
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?A string containing an XML fragment
    document-node(element(*))?A document node containing the parsed XML fragment or an empty sequence - if the input is an empty sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:parse-xml-fragment('<item>Item 1</item><item>Item - 2</item>')Returns a document node containing the parsed XML fragment

    - W3C Documentation reference: parse-xml-fragment -
    - - - fn:parse-xml(xs:string?) -
    - Parses a string containing an XML document and returns a corresponding document - node
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?A string containing an XML document
    document-node(element(*))?A document node containing the parsed XML content or an empty sequence - if the input is an empty sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:parse-xml('<root><item>Item 1</item></root>')Returns a document node containing the parsed XML content

    - W3C Documentation reference: parse-xml -
    - - - fn:available-environment-variables() -
    - Retrieves a sequence of the names of all available environment variables
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneNo argument is required
    xs:string*A sequence of the names of all available environment variables
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:available-environment-variables()Returns a sequence of the names of all available environment variables -

    - W3C Documentation reference: available-environment-variables -
    - - - fn:environment-variable(xs:string) -
    - Retrieves the value of an environment variable
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:stringThe name of the environment variable
    xs:string?The value of the environment variable, or an empty sequence if the - variable is not set
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:environment-variable("PATH")Returns the value of the PATH environment variable, or an empty sequence - if the variable is not set

    - W3C Documentation reference: environment-variable -
    - - - fn:uri-collection(xs:string?) -
    - Returns a sequence of URIs in a collection identified by a URI
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the collection of URIs
    xs:anyURI*A sequence of URIs in the collection
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:uri-collection("http://www.example.com/collection/")Returns a sequence of URIs in the collection identified by the specified - URI -
    fn:uri-collection()Returns a sequence of URIs in the default collection, if one is defined -

    - W3C Documentation reference: uri-collection -
    - - fn:doc-available(xs:string?) -
    - Tests whether an XML document is available at a given URI
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI of the XML document to be tested
    xs:booleanTrue if the XML document is available, otherwise false
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:doc-available("http://www.example.com/books.xml")Returns true if the XML document located at the specified URI is - available, otherwise false
    fn:doc-available("")Returns true if the XML document containing the context item is - available, otherwise false

    - W3C Documentation reference: doc-available -
    - - - fn:doc(xs:string?) -
    - Loads an XML document from a URI and returns the document node
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI of the XML document to be loaded
    document-node()?The document node of the loaded XML document
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:doc("http://www.example.com/books.xml")Loads the XML document located at the specified URI and returns its - document node
    fn:doc("")Returns the document node of the XML document containing the context - item

    - W3C Documentation reference: doc -
    - - - fn:generate-id(node()?) -
    - Returns a unique identifier for the specified node
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    node()?Input node for which the unique identifier is to be generated
    xs:stringUnique identifier for the specified node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:generate-id(/bookstore/book[1])A unique identifier for the first <book> element in the - <bookstore>
    fn:generate-id(.)A unique identifier for the context node

    - W3C Documentation reference: generate-id -
    - - - fn:idref(xs:string*) -
    - Returns a sequence of nodes that are referenced by the specified IDREF attribute - values
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string*Input sequence of IDREF attribute values
    node()*Sequence of nodes referenced by the specified IDREF attribute values -
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:idref("reference42")Nodes referenced by the IDREF attribute value "reference42"
    fn:idref(("ref1", "ref2", "ref3"))Nodes referenced by the IDREF attribute values "ref1", "ref2", and - "ref3"

    - W3C Documentation reference: idref -
    - - - fn:id(xs:string*) -
    - Returns a sequence of elements with the specified ID attribute values
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string*Input sequence of ID attribute values
    element()*Sequence of elements with the specified ID attribute values
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:id("item42")Element with the ID attribute value "item42"
    fn:id(("item1", "item2", "item3"))Elements with the ID attribute values "item1", "item2", and "item3"

    - W3C Documentation reference: id -
    - - - fn:lang(xs:string, node()?) -
    - Returns true if the language of the specified node or its nearest ancestor matches - the given language code
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:stringLanguage code to test
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:lang("en", /book/title)true
    fn:lang("fr", /book/title)false

    - W3C Documentation reference: lang -
    - - - - fn:in-scope-prefixes(element()) -
    - Returns a sequence of strings representing the prefixes of the in-scope namespaces - for the specified element
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    element()Element node
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:in-scope-prefixes(/*)("xml", "x")

    - W3C Documentation reference: in-scope-prefixes -
    - - - fn:namespace-uri-for-prefix(xs:string?, element()) -
    - Returns the namespace URI associated with the given prefix, using the in-scope - namespaces for the specified element
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Prefix
    element()Element node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:namespace-uri-for-prefix('x', /*)"http://www.example.com/ns"
    fn:namespace-uri-for-prefix('', /*)""

    - W3C Documentation reference: namespace-uri-for-prefix -
    - - - fn:namespace-uri-from-QName(xs:QName?) -
    - Returns the namespace URI of the given QName value, or an empty sequence if there's - no namespace URI
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:QName?QName value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:namespace-uri-from-QName(fn:QName('http://www.example.com/ns', - 'x:local'))"http://www.example.com/ns"
    fn:namespace-uri-from-QName(fn:QName('', 'local'))""

    - W3C Documentation reference: namespace-uri-from-QName -
    - - - fn:local-name-from-QName(xs:QName?) -
    - Returns the local name of the given QName value, or an empty sequence if there's no - local name
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:QName?QName value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:local-name-from-QName(fn:QName('http://www.example.com/ns', - 'x:local'))"local"
    fn:local-name-from-QName(fn:QName('', 'local'))"local"

    - W3C Documentation reference: local-name-from-QName -
    - - - fn:prefix-from-QName(xs:QName?) -
    - Returns the prefix of the given QName value, or an empty sequence if there's no - prefix
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:QName?QName value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:prefix-from-QName(fn:QName('http://www.example.com/ns', 'x:local')) - "x"
    fn:prefix-from-QName(fn:QName('', 'local'))()

    - W3C Documentation reference: prefix-from-QName -
    - - - fn:QName(xs:string?, xs:string) -
    - Constructs an xs:QName value from a namespace URI and a lexical QName
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Namespace URI
    xs:stringLexical QName
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:QName('http://www.example.com/ns', 'x:local')QName("http://www.example.com/ns", "x:local")
    fn:QName('', 'local')QName("", "local")

    - W3C Documentation reference: QName -
    - - - fn:resolve-QName(xs:string?, element()) -
    - Resolves a QName by expanding a prefix using the in-scope namespaces of a given - element
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?QName to resolve
    element()Element with in-scope namespaces
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:resolve-QName('x:local', $element)QName("http://www.example.com/ns", "local")
    fn:resolve-QName('local', $element)QName("", "local")

    - W3C Documentation reference: Resolve-QName -
    - - - - fn:nilled(node) -
    - Returns a Boolean value indicating whether the argument node is nilled
    -
    - W3C Documentation reference: #func-nilled - -
    - - - - - -
    -
    -
    - - - -
    - - fn:for-each-pair(item()*, item()*, function(item(), item())) -
    - Applies a processing function to pairs of items from two input sequences in a - pairwise fashion, resulting in a sequence of the same length as the shorter input - sequence
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The first input sequence of items
    item()*The second input sequence of items
    function(item(), item())The processing function used to process pairs of items from the input - sequences
    item()*The resulting sequence after applying the processing function to pairs - of items
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    for-each-pair((1, 2, 3), ("a", "b"), function($item1, $item2) { - concat($item1, $item2) })Returns a sequence with the concatenated pairs of items: - ("1a", "2b") -

    - W3C Documentation reference: for-each-pair -
    - - - - - fn:filter(item()*, function(item()) -
    - Filters a sequence of items based on a given predicate function
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The input sequence of items
    function(item())The predicate function used to filter the items
    item()*The resulting sequence after applying the predicate function
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    filter((1, 2, 3, 4), function($x) { $x mod 2 = 0 })Returns a new sequence containing only the even numbers from the input - sequence: (2, 4)

    - W3C Documentation reference: filter -
    - - - fn:for-each(item()*, function(item())) -
    - Applies a specified function to each item in a sequence, returning a new - sequence
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The input sequence of items
    function(item())The function to apply to each item in the sequence
    item()*The new sequence created by applying the function to each item in the - input sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    for-each((1, 2, 3, 4), function($x) { $x * 2 })Returns a new sequence with the result of doubling each number in the - input sequence: (2, 4, 6, 8)

    - W3C Documentation reference: for-each -
    - -
    -
    -
    - -
    - - - -
    - - fn:apply(function(item()*), array(*)) -
    - Applies a function to a sequence of arguments
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    function(item()*) as item()*The function to be applied
    SequenceSequence of arguments to pass to the function
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:apply(fn:concat#2, ('Hello', ' World'))'Hello World'
    fn:apply(fn:substring#2, ('Hello World', 7))'World'

    - W3C Documentation reference: Apply -
    - - - fn:outermost(node()*) -
    - Returns the outermost nodes of the input sequence that are not ancestors of any other - node in the input sequence
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()*Sequence of nodes
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:outermost(//chapter)Sequence of outermost chapter nodes
    fn:outermost(/book//*)Sequence of outermost nodes in the book

    - W3C Documentation reference: outermost -
    - - - fn:innermost(node()*) -
    - Returns the innermost nodes of the input sequence that are not descendants of any other - node in the input sequence
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()*Sequence of nodes
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:innermost(//chapter)Sequence of innermost chapter nodes
    fn:innermost(/book//*)Sequence of innermost nodes in the book

    - W3C Documentation reference: innermost -
    - - - fn:has-children(node()?) -
    - Returns true if the specified node has one or more children, otherwise returns false
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:has-children(/book/chapter[1])true
    fn:has-children(/book/chapter[1]/title)false

    - W3C Documentation reference: has-children -
    - - - fn:path(node()?) -
    - Returns a string that represents the path of the specified node within the XML - document
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:path(/book/chapter[1])/book/chapter[1]
    fn:path(/book/chapter[2]/title)/book/chapter[2]/title

    - W3C Documentation reference: path -
    - - - fn:root(node()?) -
    - Returns the root node of the tree that contains the specified node
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:root(/book/chapter)<book> element (root node)
    fn:root(/book/chapter[1])<book> element (root node)

    - W3C Documentation reference: root -
    - - - fn:namespace-uri(node()?) -
    - Returns the namespace URI of the specified node
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:namespace-uri(/example:root)"http://www.example.com/ns"
    fn:namespace-uri(/a/b)""

    - W3C Documentation reference: namespace-uri -
    - - - fn:local-name(node()?) -
    - Returns the local part of the name of the specified node
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:local-name(/a/b)"b"
    fn:local-name(/example:root)"root"

    - W3C Documentation reference: local-name -
    - - fn:name(node()?) -
    - Returns the expanded QName of the specified node as a string
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:name(/a/b)"b"
    fn:name(/example:root)"example:root"

    - W3C Documentation reference: name -
    - - - - fn:document-uri(node?) -
    - Returns the document URI of the given node or the context item
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node?Returns the document URI of the specified node or the context item (if no - argument is provided)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:document-uri(/library/fiction:book[1])http://example.com/library.xml (assuming the document URI of the first - fiction:book element is "http://example.com/library.xml")
    fn:document-uri(/library)http://example.com/library.xml (assuming the document URI of the library - element is "http://example.com/library.xml")

    - W3C Documentation reference: Document-URI -
    - - - fn:base-uri(node?) -
    - Returns the base URI of the node or the context item
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node?Returns the base URI of the specified node or the context item (if no - argument is provided)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:base-uri(/library/fiction:book[1])http://example.com/library.xml (assuming the base URI of the first - fiction:book element is "http://example.com/library.xml")
    fn:base-uri(/library)http://example.com/library.xml (assuming the base URI of the library element - is "http://example.com/library.xml")

    - W3C Documentation reference: Base-URI -
    - - - fn:node-name(node?) -
    - - Returns the name of a node as an xs:QName
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    node?Returns the name of the specified node or the context item if the argument - is omitted
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:node-name(/library/*[1])fiction:book
    fn:node-name(/library/fiction:book[1]/title)title

    - W3C Documentation reference: Node-Name -
    - -
    -
    -
    - - - -
    - - fn:not(item()*) -
    - Returns the negation of the effective boolean value of the argument
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item()*Argument whose effective boolean value is to be negated
    - Examples:
    - - - - - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:not(1)false
    fn:not(0)true
    fn:not('')true
    fn:not('true')false

    - W3C Documentation reference: Not -
    - - - fn:false() -
    - Returns the boolean value false
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    NoneReturns the boolean value false
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:false()false
    //item[fn:false()]Returns an empty node-set

    - W3C Documentation reference: False -
    - - - fn:true() -
    - Returns the boolean value true
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    NoneReturns the boolean value true
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:true()true
    //item[fn:true()]Returns all <item> elements

    - W3C Documentation reference: True -
    - - - fn:boolean(item()*) -
    - Converts the argument to a boolean value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item()*Argument to be converted to a boolean value
    - Examples:
    - - - - - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:boolean(1)true
    fn:boolean(0)false
    fn:boolean('')false
    fn:boolean('true')true

    - W3C Documentation reference: Boolean -
    - - -
    -
    -
    - - - -
    - - fn:unparsed-text-available(xs:string?, xs:string?) -
    - Determines if an unparsed text resource identified by a URI can be read using the given - encoding
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the unparsed text resource
    xs:string?The encoding to be used for reading the resource
    xs:booleanIndicates if the resource can be read using the given encoding
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:unparsed-text-available("http://www.example.com/text.txt", "UTF-8")Returns true if the text resource identified by the specified URI can be - read using the specified encoding, otherwise false

    - W3C Documentation reference: unparsed-text-available -
    - - - fn:unparsed-text-lines(xs:string?, xs:string?) -
    - Returns the contents of an unparsed text resource identified by a URI, split into - lines
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the unparsed text resource
    xs:string?The encoding to be used for reading the resource
    xs:string*The lines of the unparsed text resource
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:unparsed-text-lines("http://www.example.com/text.txt", "UTF-8")Returns the lines of the text resource identified by the specified URI, - using the specified encoding

    - W3C Documentation reference: unparsed-text-lines -
    - - - fn:unparsed-text(xs:string?, xs:string?) -
    - Returns the contents of an unparsed text resource identified by a URI
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the unparsed text resource
    xs:string?The encoding to be used for reading the resource
    xs:string?The contents of the unparsed text resource
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:unparsed-text("http://www.example.com/text.txt", "UTF-8")Returns the contents of the text resource identified by the specified URI, - using the specified encoding

    - W3C Documentation reference: unparsed-text -
    - - - fn:escape-html-uri(xs:string?) -
    - Escapes special characters in a URI to be used in HTML
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?URI to be escaped for use in HTML
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:escape-html-uri('https://example.com/search?q=test&lang=en')https://example.com/search?q=test&lang=en
    fn:escape-html-uri('https://example.com/page?id=1§ion=2')https://example.com/page?id=1&section=2

    - W3C Documentation reference: Escape-HTML-URI -
    - - - fn:iri-to-uri(xs:string?) -
    - Converts an IRI to a URI by escaping non-ASCII characters
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?IRI to be converted to a URI
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:iri-to-uri('https://example.com/ümlaut')https://example.com/%C3%BCmlaut
    fn:iri-to-uri('https://example.com/日本語')https://example.com/%E6%97%A5%E6%9C%AC%E8%AA%9E

    - W3C Documentation reference: IRI-to-URI -
    - - - fn:encode-for-uri(xs:string?) -
    - Encodes a string for use in a URI by escaping special characters
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?String to be encoded for use in a URI
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:encode-for-uri('hello world')hello%20world
    fn:encode-for-uri('example?query=value¶m=value2')example%3Fquery%3Dvalue%26param%3Dvalue2

    - W3C Documentation reference: Encode-for-URI -
    - - - fn:resolve-uri(xs:string?, xs:string?) -
    - Resolves a relative URI using a base URI
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Relative URI to resolve
    xs:string?Base URI to use for resolving (optional)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:resolve-uri('example.html', 'https://www.example.com/folder/')https://www.example.com/folder/example.html
    fn:resolve-uri('../images/pic.jpg', - 'https://www.example.com/folder/page.html')https://www.example.com/images/pic.jpg

    - W3C Documentation reference: Resolve-URI -
    - - - - fn:analyze-string(xs:string?, xs:string, xs:string?) -
    - Analyzes the input string and returns an XML fragment containing match and non-match - elements
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to analyze
    xs:stringRegular expression pattern to match
    xs:string?Flags to control the regular expression matching (optional)
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:analyze-string('red,green,blue', ',') - <fn:analyze-string-result><fn:non-match>red</fn:non-match><fn:match>, - <fn:non-match>green</fn:non-match><fn:match>, - <fn:non-match>blue</fn:non-match></fn:analyze-string-result> -

    - W3C Documentation reference: Analyze-String -
    - - - fn:tokenize(xs:string?, xs:string, xs:string?) -
    - Splits the input string into a sequence of substrings using the pattern as a delimiter -
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to tokenize
    xs:stringRegular expression pattern to use as delimiter
    xs:string?Flags to control the regular expression matching (optional)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:tokenize('XPath 3.0, XQuery 3.0, XSLT 3.0', ',\\s*')('XPath 3.0', 'XQuery 3.0', 'XSLT 3.0')
    fn:tokenize('apple,orange,banana', ',')('apple', 'orange', 'banana')

    - W3C Documentation reference: Tokenize -
    - - - fn:replace(xs:string?, xs:string, xs:string, xs:string?) -
    - Replaces occurrences of the pattern in the input string with the replacement string
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:stringRegular expression pattern to match
    xs:stringReplacement string
    xs:string?Flags to control the regular expression matching (optional)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:replace('XPath 3.0 is great', '3.0', '3.1')'XPath 3.1 is great'
    fn:replace('Hello, World!', 'World', 'XPath')'Hello, XPath!'

    - W3C Documentation reference: Replace -
    - - - fn:matches(xs:string?, xs:string, xs:string?) -
    - Returns true if the input string matches the regular expression pattern, otherwise false -
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:stringRegular expression pattern to match
    xs:string?Flags to control the regular expression matching (optional)
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:matches('XPath 3.0', '\\d\\.\\d')true
    fn:matches('Hello, World!', '[A-Z][a-z]*')true
    fn:matches('example123', '\\d+', 'q')false

    - W3C Documentation reference: Matches -
    - - - fn:substring-after(xs:string?, xs:string?) -
    - Returns the part of the first string that follows the first occurrence of the second - string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:string?Substring to search for
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:substring-after('Hello, World!', ',')' World!'
    fn:substring-after('XPath 3.0 is awesome!', '3.0')' is awesome!'

    - W3C Documentation reference: Substring-After -
    - - - fn:substring-before(xs:string?, xs:string?) -
    - Returns the part of the first string that precedes the first occurrence of the second - string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:string?Substring to search for
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:substring-before('Hello, World!', ',')'Hello'
    fn:substring-before('XPath 3.0 is awesome!', '3.0')'XPath '

    - W3C Documentation reference: Substring-Before -
    - - - fn:ends-with(xs:string?, xs:string?) -
    - Returns true if the first string ends with the second string, otherwise false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to check
    xs:string?Substring to check for at the end of the first string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:ends-with('Hello, World!', 'World!')true
    fn:ends-with('Hello, World!', 'Hello')false
    fn:ends-with('XPath 3.0', '3.0')true

    - W3C Documentation reference: Ends-With -
    - - - fn:starts-with(xs:string?, xs:string?) -
    - Returns true if the first string starts with the second string, otherwise false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to check
    xs:string?Substring to check for at the beginning of the first string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:starts-with('Hello, World!', 'Hello')true
    fn:starts-with('Hello, World!', 'World')false
    fn:starts-with('XPath 3.0', 'XPath')true

    - W3C Documentation reference: Starts-With -
    - - - fn:contains(xs:string?, xs:string?) -
    - Returns true if the first string contains the second string, otherwise false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to search within
    xs:string?Substring to search for
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:contains('Hello, World!', 'World')true
    fn:contains('Hello, World!', 'world')false
    fn:contains('XPath 3.0', '3.0')true

    - W3C Documentation reference: Contains -
    - - - fn:translate(xs:string?, xs:string, xs:string) -
    - Returns the input string with specified characters replaced
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to be translated
    xs:stringMap string with characters to replace
    xs:stringTranslate string with replacement characters
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:translate('apple', 'aeiou', '12345')'1ppl2'
    fn:translate('Hello, World!', 'HW', 'hw')'hello, world!'

    - W3C Documentation reference: Translate -
    - - - fn:lower-case(xs:string?) -
    - Returns the input string with all characters converted to lowercase
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string to convert to lowercase
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:lower-case('HELLO, WORLD!')'hello, world!'
    fn:lower-case('XPath 3.0')'xpath 3.0'
    fn:lower-case('BANANA')'banana'

    - W3C Documentation reference: Lower-Case -
    - - - fn:upper-case(xs:string?) -
    - Returns the input string with all characters converted to uppercase
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string to convert to uppercase
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:upper-case('Hello, World!')'HELLO, WORLD!'
    fn:upper-case('XPath 3.0')'XPATH 3.0'
    fn:upper-case('banana')'BANANA'

    - W3C Documentation reference: Upper-Case -
    - - - fn:normalize-unicode(xs:string?, xs:string) -
    - Returns the input string with Unicode normalization applied
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input string to normalize
    xs:stringNormalization form to apply (NFC, NFD, NFKC, NFKD)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:normalize-unicode('Café', 'NFC')'Café'
    fn:normalize-unicode('Café', 'NFD')'Café'

    - W3C Documentation reference: Normalize-Unicode -
    - - - fn:normalize-space(xs:string?) -
    - Returns the input string with whitespace normalized
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string to normalize whitespace
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:normalize-space(' Hello, World! ')'Hello, World!'
    fn:normalize-space(' XPath 3.0 ')'XPath 3.0'
    fn:normalize-space('\tbanana\t')'banana'

    - W3C Documentation reference: Normalize-Space -
    - - - fn:string-length(xs:string?) -
    - Returns the length of the input string
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string to calculate length
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:string-length('Hello, World!')13
    fn:string-length('XPath 3.0')8
    fn:string-length('banana')6

    - W3C Documentation reference: String-Length -
    - - - fn:substring(xs:string?, xs:double) -
    - Returns a substring of the source string, starting from a specific location
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Input source string
    xs:doubleStarting location to extract the substring
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:substring('Hello, World!', 1, 5)'Hello'
    fn:substring('XPath 3.0', 7)'3.0'
    fn:substring('banana', 2, 3)'ana'

    - W3C Documentation reference: Substring -
    - - fn:string-join(xs:string*, xs:string) -
    - Joins a sequence of strings with a specified separator, returning a single string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string*Input sequence of strings to join
    xs:stringSeparator string to insert between joined strings
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:string-join(('apple', 'banana', 'orange'), ', ')'apple, banana, orange'
    fn:string-join(('XPath', '3.0', 'Functions'), ' - ')'XPath - 3.0 - Functions'
    fn:string-join(('A', 'B', 'C'), '')'ABC'

    - W3C Documentation reference: String-Join -
    - - - fn:concat(xs:anyAtomicType?, xs:anyAtomicType?, ...) -
    - Concatenates two or more strings or atomic values, returning a single string
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType?Input strings or atomic values to concatenate
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:concat('Hello', ' ', 'World')'Hello World'
    fn:concat('I have ', 3, ' apples')'I have 3 apples'
    fn:concat('XPath ', '3.0')'XPath 3.0'

    - W3C Documentation reference: Concat -
    - - - fn:codepoint-equal(xs:string?, xs:string?) -
    - Compares two strings on a codepoint-by-codepoint basis and returns true if they are - equal, false otherwise
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?First string to compare
    xs:string?Second string to compare
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:codepoint-equal('Hello', 'Hello')true
    fn:codepoint-equal('Hello', 'hello')false
    fn:codepoint-equal('apple', 'banana')false

    - W3C Documentation reference: Codepoint-Equal -
    - - - fn:compare(xs:string?, xs:string?) -
    - Compares two strings and returns -1, 0, or 1 if the first string is less than, equal to, - or greater than the second string, respectively
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?First string to compare
    xs:string?Second string to compare
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:compare('apple', 'banana')-1
    fn:compare('apple', 'apple')0
    fn:compare('banana', 'apple')1

    - W3C Documentation reference: Compare -
    - - - fn:string-to-codepoints(xs:string?) -
    - Returns a sequence of Unicode code points for a given string
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?Input string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:string-to-codepoints('Hello')(72, 101, 108, 108, 111)
    fn:string-to-codepoints('( ͡° ͜ʖ ͡°)')(40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41)
    fn:string-to-codepoints('😊')(128522)

    - W3C Documentation reference: String-To-Codepoints -
    - - - fn:codepoints-to-string(xs:integer*) -
    - Constructs a string from a sequence of Unicode code points
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:integer*Sequence of Unicode code points
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:codepoints-to-string((72, 101, 108, 108, 111))Hello
    codepoints-to-string((40, 32, 865, 176, 32, 860, 662, 32, 865, 176, 41)) - ( ͡° ͜ʖ ͡°)
    fn:codepoints-to-string((128522))😊

    - W3C Documentation reference: Codepoints-To-String -
    - - - - fn:string(object) -
    - Returns the string representation of the object argument
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    stringThe object to convert to a string
    Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    string((1<0))false
    string(.11)0.11

    - W3C Documentation reference: String-Functions -
    - - -
    -
    -
    - - - -
    - - - fn:format-number(numeric?, xs:string, item()?) -
    - Returns a string that represents a formatted version of a number using a formatting - pattern and an optional - set of properties
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    numeric?The number to format
    xs:stringThe formatting pattern
    item()?Optional: the set of properties for formatting the number
    xs:stringThe formatted number as a string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    format-number(12345.678, "#,##0.00")Returns the formatted number: "12,345.68"
    format-number(12345.678, "#,##0")Returns the formatted number: "12,346"
    format-number(12345.678, "0.000")Returns the formatted number: "12345.678"

    - W3C Documentation reference: format-number -
    - - - - fn:format-integer(xs:integer?, xs:string) -
    - Formats an integer value according to the supplied picture string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:integer?Integer value to be formatted
    xs:stringPicture string defining the format
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:format-integer(12345, '0,0')12,345
    fn:format-integer(-1234, '0,0')-1,234
    fn:format-integer(1234, '00-00-00')01-23-45

    - W3C Documentation reference: Format-Integer -
    - - - fn:round-half-to-even(numeric?) -
    - Returns the closest integer to the given numeric value, rounding half-way cases to the - nearest even integer (also known as "bankers' rounding")
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the rounded value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:round-half-to-even(3.5)4
    fn:round-half-to-even(2.5)2
    fn:round-half-to-even(-1.5)-2
    fn:round-half-to-even(xs:decimal('1.25'), 1)1.2

    - W3C Documentation reference: Round-Half-To-Even -
    - - - fn:round(numeric?) -
    - Returns the closest integer to the given numeric value, rounding half-way cases away - from zero
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the rounded value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:round(3.14)3
    fn:round(-4.7)-5
    fn:round(xs:decimal('2.5'))3

    - W3C Documentation reference: Round -
    - - - fn:floor(numeric?) -
    - Returns the largest integer less than or equal to the given numeric value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the floor value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:floor(3.14)3
    fn:floor(-4.7)-5
    fn:floor(xs:decimal('2.5'))2

    - W3C Documentation reference: Floor -
    - - - - fn:ceiling(numeric?) -
    - Returns the smallest integer greater than or equal to the given numeric value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the ceiling value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:ceiling(3.14)4
    fn:ceiling(-4.7)-4
    fn:ceiling(xs:decimal('2.5'))3

    - W3C Documentation reference: Ceiling -
    - - - fn:abs(numeric?) -
    - Returns the absolute value of the given numeric value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    numeric?Numeric value for which the absolute value will be calculated
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:abs(-42)42
    fn:abs(3.14)3.14
    fn:abs(xs:decimal('-5.5'))5.5

    - W3C Documentation reference: Abs -
    - - fn:number(item?) -
    - Converts the given value to a number
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item?Returns the numeric value of the specified expression or the context item - (if no argument is provided)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:number(/library/fiction:book[1]/@id)1 (if the first fiction:book element's id attribute is "1")
    fn:number(/library/fiction:book[1]/price)19.99 (if the first fiction:book element's price element contains "19.99") -

    - W3C Documentation reference: Number -
    - - - - -
    -
    -
    - - - -
    - - fn:sort(item()*) -
    - Sorts an array of items based on their atomic values
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    ArrayThe array of items to be sorted
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:sort([10, 5, 20])[5, 10, 20]
    fn:sort(['banana', 'apple', 'cherry'])['apple', 'banana', 'cherry']

    - W3C Documentation reference: Sort -
    - - - fn:fold-right(item()*, item()*, function(item(), item()*)) -
    - Applies a processing function cumulatively to the items of a sequence from right to - left, so as to reduce the sequence to a single value
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The input sequence of items
    item()*The initial value, also known as the zero value
    function(item(), item()*)The processing function used to accumulate the items
    item()*The resulting single value after applying the processing function
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fold-right((1, 2, 3, 4), 0, function($current, $accumulator) { $accumulator - - $current })Returns the result of subtracting each number in the input sequence from - right to left: -2

    - W3C Documentation reference: fold-right -
    - - - fn:fold-left(item()*, item()*, function(item()*, item())) -
    - Applies a processing function cumulatively to the items of a sequence from left to - right, so as to reduce the sequence to a single value
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The input sequence of items
    item()*The initial value, also known as the zero value
    function(item()*, item())The processing function used to accumulate the items
    item()*The resulting single value after applying the processing function
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fold-left((1, 2, 3, 4), 0, function($accumulator, $current) { $accumulator + - $current })Returns the sum of the numbers in the input sequence: 10

    - W3C Documentation reference: fold-left -
    - - - - - fn:last() -
    - Returns the position of the last item in the current context sequence
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    NoneReturns the position of the last item in the current context sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    /library/fiction:book[position() = last()]Returns the last fiction:book element in the library
    /library/fiction:book[last()]Returns the last fiction:book element in the library

    - W3C Documentation reference: Last -
    - - fn:position() -
    - Returns the context position of the context item in the sequence currently being - processed
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:integerThe position of the context item in the sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    <items><item>Item 1</item><item>Item - 2</item></items>/item[position()=2]Returns '<item>Item 2</item>'
    <items><item>Item 1</item><item>Item - 2</item></items>/item[position()=1]Returns '<item>Item 1</item>'

    - W3C Documentation reference: position -
    - - - fn:collection(xs:string?) -
    - Returns a sequence of document nodes obtained from the collection identified by the - argument URI, or the - default collection if no argument is supplied.
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI of the collection to retrieve (Optional)
    document-node()*A sequence of document nodes obtained from the collection
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    collection()Returns the sequence of document nodes from the default collection
    collection("http://example.com/collection")Returns the sequence of document nodes from the collection identified by the - specified URI
    count(collection())Returns the number of document nodes in the default collection

    - W3C Documentation reference: collection -
    - - - fn:sum(xs:anyAtomicType*, xs:anyAtomicType?) -
    - Returns the sum of a sequence of numeric values
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of numeric values
    xs:anyAtomicType?Value to return if the sequence is empty (optional)
    xs:anyAtomicType?Sum of the input sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:sum((10, 20, 30, 40, 50))150
    fn:sum((), 0)0

    - W3C Documentation reference: sum -
    - - - fn:min(xs:anyAtomicType*) -
    - Returns the minimum value of a sequence of atomic values, according to the ordering - rules for the value's - type
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*The input sequence of atomic values
    xs:anyAtomicType?The minimum value of the input sequence, or the empty sequence if the input - sequence is empty -
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    min((5, 1, 9, 3))Returns the minimum value: 1
    min(())Returns the empty sequence: ()
    min(("apple", "banana", "cherry"))Returns the minimum value (alphabetical order): "apple"

    - W3C Documentation reference: min -
    - - - fn:max(xs:anyAtomicType*) -
    - Returns the maximum value of a sequence of atomic values, according to the ordering - rules for the value's - type
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*The input sequence of atomic values
    xs:anyAtomicType?The maximum value of the input sequence, or the empty sequence if the input - sequence is empty -
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    max((5, 1, 9, 3))Returns the maximum value: 9
    max(())Returns the empty sequence: ()
    max(("apple", "banana", "cherry"))Returns the maximum value (alphabetical order): "cherry"

    - W3C Documentation reference: max -
    - - - - fn:avg(xs:anyAtomicType*) -
    - Computes the average of the numeric values in the input sequence
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of numeric values
    xs:anyAtomicType?Average of the numeric values in the input sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:avg((10, 20, 30, 40, 50))30
    fn:avg((2.5, 3.5, 4.5))3.5
    fn:avg(())empty sequence

    - W3C Documentation reference: avg -
    - - - fn:count(item()*) -
    - Returns the number of items in the input sequence
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    xs:integerNumber of items in the input sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:count(('apple', 'banana', 'orange'))3
    fn:count(())0
    fn:count((1, 2, 3, 4, 5))5

    - W3C Documentation reference: count -
    - - - fn:exactly-one(item()*) -
    - Returns the single item in the input sequence or raises an error if the sequence is - empty or contains more than one item
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()Single item from the input sequence, otherwise an error is raised
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:exactly-one(('apple'))'apple'
    fn:exactly-one(('apple', 'banana'))Error (more than one item)
    fn:exactly-one(())Error (empty sequence)

    - W3C Documentation reference: exactly-one -
    - - - fn:one-or-more(item()*)+ -
    - Returns the input sequence if it contains one or more items, otherwise raises an - error
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()+Sequence containing one or more items, otherwise an error is raised
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:one-or-more(('apple', 'banana'))('apple', 'banana')
    fn:one-or-more(('pear'))('pear')

    - W3C Documentation reference: one-or-more -
    - - - fn:zero-or-one(item()*) -
    - Returns the input sequence if it contains zero or one items, otherwise raises an - error
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()?Sequence containing zero or one item, otherwise an error is raised
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:zero-or-one(('apple'))('apple')
    fn:zero-or-one(())()

    - W3C Documentation reference: zero-or-one -
    - - - fn:deep-equal(item()* , item()*) -
    - Returns true if the two input sequences are deep-equal, meaning that they have the same - structure and atomic values
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*First input sequence
    item()*Second input sequence
    xs:booleanTrue if the input sequences are deep-equal, otherwise false
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:deep-equal((1, 2, 3), (1, 2, 3))true
    fn:deep-equal((1, 2, 3), (1, 2, 4))false

    - W3C Documentation reference: deep-equal -
    - - - fn:index-of(xs:anyAtomicType*, xs:anyAtomicType) -
    - Returns a sequence of integers indicating the positions of items in the input sequence - that are equal to the search item
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of atomic values
    xs:anyAtomicTypeSearch item to find in the input sequence
    xs:integer*Sequence of integers representing the positions of the search item in the - input sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:index-of((3, 1, 4, 1, 5, 9, 2, 2, 3), 1)(2, 4)
    fn:index-of(('apple', 'banana', 'orange', 'apple', 'grape', 'orange'), - 'apple')(1, 4)

    - W3C Documentation reference: index-of -
    - - - fn:distinct-values(xs:anyAtomicType*) -
    - Returns a sequence of distinct atomic values from the input sequence
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:anyAtomicType*Input sequence of atomic values
    xs:anyAtomicType*Distinct sequence of atomic values
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:distinct-values((3, 1, 4, 1, 5, 9, 2, 2, 3))(3, 1, 4, 5, 9, 2)
    fn:distinct-values(('apple', 'banana', 'orange', 'apple', 'grape', - 'orange'))('apple', 'banana', 'orange', 'grape')

    - W3C Documentation reference: distinct-values -
    - - - fn:unordered(item()*) -
    - Returns the items of a sequence in an implementation-dependent order
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()*Unordered sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:unordered((3, 1, 4, 1, 5, 9, 2))(1, 2, 3, 4, 5, 9, 1) (example result; actual order may vary)
    fn:unordered(('apple', 'banana', 'orange', 'grape'))('banana', 'apple', 'orange', 'grape') (example result; actual order may - vary)

    - W3C Documentation reference: unordered -
    - - - fn:subsequence(item()*, xs:double, xs:double) -
    - Returns a subsequence of a given sequence starting at a specified position with a - specified length
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    xs:doubleStarting position
    xs:doubleLength of subsequence
    item()*Subsequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:subsequence((1, 2, 3, 4, 5), 2, 3)(2, 3, 4)
    fn:subsequence(('apple', 'banana', 'orange', 'grape'), 1, 2)('apple', 'banana')
    fn:subsequence(('red', 'blue', 'green', 'yellow'), 3)('green', 'yellow')

    - W3C Documentation reference: subsequence -
    - - - fn:reverse(item()*) -
    - Reverses the order of items in a sequence
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Input sequence
    item()*Reversed sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:reverse((1, 2, 3, 4))(4, 3, 2, 1)
    fn:reverse(('apple', 'banana', 'orange'))('orange', 'banana', 'apple')
    fn:reverse(('red', 'blue', 'green'))('green', 'blue', 'red')

    - W3C Documentation reference: reverse -
    - - - fn:remove(item()*, xs:integer) -
    - Removes an item from a sequence at the specified position
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*Target sequence
    xs:integerPosition of the item to remove
    item()*New sequence with the item removed
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:remove((1, 2, 3, 4), 2)(1, 3, 4)
    fn:remove(('apple', 'banana', 'orange'), 3)('apple', 'banana')
    fn:remove((10, 20, 30), 1)(20, 30)

    - W3C Documentation reference: remove -
    - - - fn:insert-before(item()*, xs:integer, item()*) -
    - Inserts items from the specified sequence into another sequence at a given position
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*Target sequence
    xs:integerPosition at which to insert the items
    item()*Sequence of items to insert
    item()*New sequence with items inserted
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:insert-before((1, 3, 4), 2, (2))(1, 2, 3, 4)
    fn:insert-before(('apple', 'orange'), 1, ('banana'))('banana', 'apple', 'orange')
    fn:insert-before((10, 20, 30), 4, (40))(10, 20, 30, 40)

    - W3C Documentation reference: insert-before -
    - - - fn:tail(item()*) -
    - Returns all items of the input sequence except the first one, or an empty sequence if - the input is empty or contains only one item
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Sequence of items
    item()*All items except the first one, or an empty sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:tail((1, 2, 3))(2, 3)
    fn:tail((1))()
    fn:tail(/books/book/author)All authors in the "books" element except the first one

    - W3C Documentation reference: tail -
    - - - fn:head(item()*) -
    - Returns the first item of the input sequence, or an empty sequence if the input is - empty
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Sequence of items
    item()?The first item of the sequence, or an empty sequence
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:head((1, 2, 3))1
    fn:head(())()
    fn:head(/books/book[1]/author)The first author of the first book in the "books" element

    - W3C Documentation reference: head -
    - - - fn:exists(item()*) -
    - Returns true if the input sequence is not empty, otherwise returns false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Sequence of items
    xs:booleanResult of the test (true or false)
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:exists((1, 2, 3))true
    fn:exists(())false
    fn:exists(//chapter[5])true if there are at least 5 chapters, otherwise false

    - W3C Documentation reference: exists -
    - - - fn:empty(item()*) -
    - Returns true if the input sequence is empty, otherwise returns false
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Sequence of items
    xs:booleanResult of the test (true or false)
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    fn:empty((1, 2, 3))false
    fn:empty(())true
    fn:empty(//chapter[100])true if there are less than 100 chapters, otherwise false

    - W3C Documentation reference: empty -
    - - - - - fn:data(item*) -
    - Returns the simple value of an item or a sequence of items
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item?Returns the simple value of the specified item or the context item (if no - argument is provided)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:data(/library/fiction:book[1]/title)The Catcher in the Rye
    fn:data(/library/fiction:book[2]/author)Harper Lee

    - W3C Documentation reference: Data -
    - - -
    -
    -
    - - - -
    - - - - fn:implicit-timezone() -
    - Returns the implicit timezone as an xs:dayTimeDuration
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:dayTimeDurationThe implicit timezone as a dayTimeDuration
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    implicit-timezone()Returns the implicit timezone as an xs:dayTimeDuration, e.g., '-PT7H' -

    - W3C Documentation reference: implicit-timezone -
    - - - fn:current-time() -
    - Returns the current time with timezone
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:timeThe current time with timezone
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    current-time()Returns the current time with timezone, e.g., '13:45:30.123-07:00'

    - W3C Documentation reference: current-time -
    - - - fn:current-date() -
    - Returns the current date with timezone
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:dateThe current date with timezone
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    current-date()Returns the current date with timezone, e.g., '2023-03-29-07:00'

    - W3C Documentation reference: current-date -
    - - - fn:current-dateTime() -
    - Returns the current date and time with timezone
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:dateTimeThe current date and time with timezone
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    current-dateTime()Returns the current date and time with timezone, e.g., - '2023-03-29T12:34:56.789-07:00'

    - W3C Documentation reference: current-dateTime -
    - - - fn:format-time(xs:time?, xs:string, xs:string?, xs:string?, xs:string?) -
    - Formats a time value according to a formatting picture string, with optional language, - calendar, and - country parameters.
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:time?The time value to be formatted (Optional)
    xs:stringThe formatting picture string
    xs:string?The language for formatting (Optional)
    xs:string?The calendar for formatting (Optional)
    xs:string?The country for formatting (Optional)
    xs:stringThe formatted time value as a string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    format-time(xs:time("14:30:00"), "[H]:[m]")"14:30"
    format-time(xs:time("14:30:00"), "[H]:[m]:[s]")"14:30:00"
    format-time(xs:time("14:30:00.456"), "[H]:[m]:[s].[f]")"14:30:00.456"

    - W3C Documentation reference: format-time -
    - - - - fn:format-date(xs:date?, xs:string, xs:string?, xs:string?, xs:string?) -
    - Formats a date value using the provided picture string and optional language, - calendar, and country settings
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    xs:stringPicture string
    xs:string?Language
    xs:string?Calendar
    xs:string?Country
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:format-date(xs:date('2023-04-01'), '[Y0001]-[M01]-[D01]')2023-04-01
    fn:format-date(xs:date('2023-04-01'), '[MNn,*-3] [D], [Y]')Apr 1, 2023

    - W3C Documentation reference: Format-Date -
    - - - fn:format-dateTime(xs:dateTime?, xs:string, xs:string?, xs:string?, xs:string?) -
    - Formats a dateTime value according to a formatting picture string, with optional - language, calendar, and - country parameters.
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:dateTime?The dateTime value to be formatted (Optional)
    xs:stringThe formatting picture string
    xs:string?The language for formatting (Optional)
    xs:string?The calendar for formatting (Optional)
    xs:string?The country for formatting (Optional)
    xs:stringThe formatted dateTime value as a string
    - Examples:
    - - - - - - - - - - - - - - - - - -
    ExpressionResult
    format-dateTime(xs:dateTime("2023-04-12T14:30:00"), "[Y]-[M]-[D]T[H]:[m]") - "2023-04-12T14:30"
    format-dateTime(xs:dateTime("2023-04-12T14:30:00"), "[FNn, Nn] [D] [MNn] - [Y]")"Wednesday, 12 April 2023"
    format-dateTime(xs:dateTime("2023-04-12T14:30:00.123"), - "[Y]-[M]-[D]T[H]:[m]:[s].[f]")"2023-04-12T14:30:00.123"

    - W3C Documentation reference: format-dateTime -
    - - - - fn:adjust-time-to-timezone(xs:time?, xs:dayTimeDuration?) -
    - Adjusts the timezone of a time value
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    xs:dayTimeDuration?Timezone adjustment
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:adjust-time-to-timezone(xs:time('10:00:00-07:00'), - xs:dayTimeDuration('PT2H'))12:00:00-05:00
    fn:adjust-time-to-timezone(xs:time('10:00:00Z'), - xs:dayTimeDuration('-PT3H'))07:00:00-03:00

    - W3C Documentation reference: Adjust-Time-To-Timezone -
    - - - - - fn:adjust-date-to-timezone(xs:date?, xs:dayTimeDuration?) -
    - Adjusts the timezone of a date value
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    xs:dayTimeDuration?Timezone adjustment
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:adjust-date-to-timezone(xs:date('2023-01-01-07:00'), - xs:dayTimeDuration('PT2H'))2023-01-01-05:00
    fn:adjust-date-to-timezone(xs:date('2023-01-01Z'), - xs:dayTimeDuration('-PT3H'))2022-12-31-03:00

    - W3C Documentation reference: Adjust-Date-To-Timezone -
    - - - fn:adjust-dateTime-to-timezone(xs:dateTime?, xs:dayTimeDuration?) -
    - Adjusts the timezone of a dateTime value
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    xs:dayTimeDuration?Timezone adjustment
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:adjust-dateTime-to-timezone(xs:dateTime('2023-01-01T12:00:00-07:00'), - xs:dayTimeDuration('PT2H'))2023-01-01T17:00:00-05:00
    fn:adjust-dateTime-to-timezone(xs:dateTime('2023-01-01T12:00:00Z'), - xs:dayTimeDuration('-PT3H'))2023-01-01T09:00:00-03:00

    - W3C Documentation reference: Adjust-DateTime-To-Timezone -
    - - - fn:timezone-from-time(xs:time?) -
    - Extracts the timezone component from an xs:time value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:timezone-from-time(xs:time('12:00:00-07:00'))-PT7H
    fn:timezone-from-time(xs:time('14:30:00+02:30'))PT2H30M

    - W3C Documentation reference: Timezone-From-Time -
    - - - fn:seconds-from-time(xs:time?) -
    - Extracts the seconds component from an xs:time value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:seconds-from-time(xs:time('21:45:30.5'))30.5
    fn:seconds-from-time(xs:time('04:15:12.1'))12.1

    - W3C Documentation reference: Seconds-From-Time -
    - - - fn:minutes-from-time(xs:time?) -
    - Extracts the minutes component from an xs:time value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:minutes-from-time(xs:time('21:45:30'))45
    fn:minutes-from-time(xs:time('04:15:12'))15

    - W3C Documentation reference: Minutes-From-Time -
    - - - fn:hours-from-time(xs:time?) -
    - Extracts the hours component from an xs:time value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:hours-from-time(xs:time('21:45:30'))21
    fn:hours-from-time(xs:time('04:15:12'))4

    - W3C Documentation reference: Hours-From-Time -
    - - - fn:timezone-from-date(xs:date?) -
    - Extracts the timezone component from an xs:date value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:timezone-from-date(xs:date('2023-03-29+02:00'))PT2H
    fn:timezone-from-date(xs:date('1980-12-15-05:00'))-PT5H

    - W3C Documentation reference: Timezone-From-Date -
    - - - fn:day-from-date(xs:date?) -
    - Extracts the day component from an xs:date value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:day-from-date(xs:date('2023-03-29'))29
    fn:day-from-date(xs:date('1980-12-15'))15

    - W3C Documentation reference: Day-From-Date -
    - - - fn:month-from-date(xs:date?) -
    - Extracts the month component from an xs:date value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:month-from-date(xs:date('2023-03-29'))3
    fn:month-from-date(xs:date('1980-12-15'))12

    - W3C Documentation reference: Month-From-Date -
    - - - fn:year-from-date(xs:date?) -
    - Extracts the year component from an xs:date value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:year-from-date(xs:date('2023-03-29'))2023
    fn:year-from-date(xs:date('1980-12-15'))1980

    - W3C Documentation reference: Year-From-Date -
    - - - fn:timezone-from-dateTime(xs:dateTime?) -
    - Extracts the timezone component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:timezone-from-dateTime(xs:dateTime('2023-03-29T12:30:45-07:00'))-PT7H
    fn:timezone-from-dateTime(xs:dateTime('2023-12-15T18:45:30+03:30'))PT3H30M

    - W3C Documentation reference: Timezone-From-DateTime -
    - - - fn:seconds-from-dateTime(xs:dateTime?) -
    - Extracts the seconds component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:seconds-from-dateTime(xs:dateTime('2023-03-29T12:30:45'))45
    fn:seconds-from-dateTime(xs:dateTime('2023-12-15T18:45:30.5-08:00')) - 30.5

    - W3C Documentation reference: Seconds-From-DateTime -
    - - - fn:minutes-from-dateTime(xs:dateTime?) -
    - Extracts the minutes component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:minutes-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))30
    fn:minutes-from-dateTime(xs:dateTime('2023-12-15T18:45:00-08:00'))45

    - W3C Documentation reference: Minutes-From-DateTime -
    - - - fn:hours-from-dateTime(xs:dateTime?) -
    - Extracts the hours component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:hours-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))12
    fn:hours-from-dateTime(xs:dateTime('2023-12-15T18:45:00-08:00'))18

    - W3C Documentation reference: Hours-From-DateTime -
    - - - fn:day-from-dateTime(xs:dateTime?) -
    - Extracts the day component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:day-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))29
    fn:day-from-dateTime(xs:dateTime('2023-12-15T18:45:00-08:00'))15

    - W3C Documentation reference: Day-From-DateTime -
    - - - fn:month-from-dateTime(xs:dateTime?) -
    - Extracts the month component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:month-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))3
    fn:month-from-dateTime(xs:dateTime('2023-12-15T18:45:00-08:00'))12

    - W3C Documentation reference: Month-From-DateTime -
    - - - fn:year-from-dateTime(xs:dateTime?) -
    - Extracts the year component from an xs:dateTime value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:dateTime?DateTime value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:year-from-dateTime(xs:dateTime('2023-03-29T12:30:00'))2023
    fn:year-from-dateTime(xs:dateTime('2023-03-29T12:30:00-08:00'))2023

    - W3C Documentation reference: Year-From-DateTime -
    - - - - - fn:dateTime(xs:date?, xs:time?) -
    - Constructs an xs:dateTime value from an xs:date and an xs:time value
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:date?Date value
    xs:time?Time value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:dateTime(xs:date('2023-03-29'), xs:time('12:30:00'))2023-03-29T12:30:00
    fn:dateTime(xs:date('2023-03-29+05:00'), xs:time('12:30:00-08:00'))2023-03-29T12:30:00-08:00

    - W3C Documentation reference: DateTime -
    - - - fn:seconds-from-duration(xs:duration?) -
    - Returns the seconds component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the seconds component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:seconds-from-duration(xs:dayTimeDuration('PT1H30M15.5S'))15.5
    fn:seconds-from-duration(xs:dayTimeDuration('-PT2M10.3S'))-10.3

    - W3C Documentation reference: Seconds-From-Duration -
    - - - fn:minutes-from-duration(xs:duration?) -
    - Returns the minutes component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the minutes component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:minutes-from-duration(xs:dayTimeDuration('PT2H30M'))30
    fn:minutes-from-duration(xs:dayTimeDuration('-PT1H45M'))-45

    - W3C Documentation reference: Minutes-From-Duration -
    - - - fn:hours-from-duration(xs:duration?) -
    - Returns the hours component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the hours component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:hours-from-duration(xs:dayTimeDuration('PT36H'))36
    fn:hours-from-duration(xs:dayTimeDuration('-PT12H30M'))-12

    - W3C Documentation reference: Hours-From-Duration -
    - - - fn:days-from-duration(xs:duration?) -
    - Returns the days component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the days component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:days-from-duration(xs:dayTimeDuration('P5DT12H30M'))5
    fn:days-from-duration(xs:dayTimeDuration('-P2DT6H'))-2

    - W3C Documentation reference: Days-From-Duration -
    - - - - fn:months-from-duration(xs:duration?) -
    - Returns the months component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the months component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:months-from-duration(xs:duration('P2Y3M4DT5H6M7S'))3
    fn:months-from-duration(xs:duration('-P2Y3M4DT5H6M7S'))-3

    - W3C Documentation reference: Months-From-Duration -
    - - - fn:years-from-duration(xs:duration?) -
    - Returns the years component of the duration
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:duration?Duration from which to extract the years component
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:years-from-duration(xs:duration('P2Y3M4DT5H6M7S'))2
    fn:years-from-duration(xs:duration('-P2Y3M4DT5H6M7S'))-2

    - W3C Documentation reference: Years-From-Duration -
    -
    -
    -
    - - - -
    - - fn:trace(item()*, xs:string) -
    - Outputs the provided label and value for diagnostic purposes and returns the value - unchanged
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    item()*Value to be traced
    xs:stringLabel to be output along with the value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:trace(42, 'The value is:')Outputs "The value is: 42" for diagnostic purposes and returns 42
    fn:trace(/library/book/title, 'Book title:')Outputs "Book title: [book title]" for diagnostic purposes and returns - the book title

    - W3C Documentation reference: Trace -
    - - - fn:error(xs:QName?, xs:string?, $error-object) -
    - Raises an error with the specified error code, description, and error object
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:QName?Error code (optional)
    xs:string?Description of the error (optional)
    item()*Error object (optional)
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:error(xs:QName('err:FOER0000'))Raise error with the code err:FOER0000
    fn:error(xs:QName('err:FOER0000'), 'Invalid value')Raise error with the code err:FOER0000 and description "Invalid value" -

    - W3C Documentation reference: Error -
    - -
    -
    -
    - - - -
    - - fn:xml-to-json(node(), map(*)) -
    - Converts an XML representation of a JSON value to its JSON serialization
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    node()XML representation of a JSON value
    map(*)Options for the JSON serialization
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:xml-to-json('<map><string - key="name">John</string><number - key="age">30</number></map>')'{"name": "John", "age": 30}'
    fn:xml-to-json('<array><number>1</number><number>2</number><number>3</number></array>') - '[1, 2, 3]'

    - W3C Documentation reference: XML-to-JSON -
    - - - fn:json-to-xml(item()) -
    - Converts a JSON value to its XML representation
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    item()JSON value to be converted
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:json-to-xml(map{"name": "John", "age": 30}) - <map> - <string key="name">John</string> - <number key="age">30</number> - </map> -
    fn:json-to-xml([1, 2, 3]) - <array> - <number>1</number> - <number>2</number> - <number>3</number> - </array> -

    - W3C Documentation reference: JSON-to-XML -
    - - - fn:json-doc(xs:string) -
    - Parses a JSON document from a URI and returns the corresponding value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:stringURI of the JSON document to be parsed
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:json-doc('https://example.com/data.json')Parsed JSON value from the specified URI

    - W3C Documentation reference: JSON-Doc -
    - - - fn:parse-json(xs:string?) -
    - Parses a JSON string and returns the corresponding value
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:string?JSON string to be parsed
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:parse-json('{"name": "John", "age": 30}')map{"name": "John", "age": 30}
    fn:parse-json('[1, 2, 3]')[1, 2, 3]

    - W3C Documentation reference: Parse-JSON -
    - - - fn:function-arity(function(*)) -
    - Returns the arity (number of arguments) of the specified function
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    function(*)The function to obtain the arity for
    xs:integerThe arity (number of arguments) of the specified function
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    function-arity(fn:substring)Returns the arity of the substring function: 2 (since - substring accepts two required arguments: the input string and the - starting index)

    - W3C Documentation reference: function-arity -
    - - - fn:function-name(function(*)) -
    - Returns the QName of the specified function
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    function(*)The function to obtain the QName for
    xs:QName?The QName of the specified function, or an empty sequence if the - function is anonymous
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    function-name(fn:substring)Returns the QName of the substring function: - QName("http://www.w3.org/2005/xpath-functions", "substring") -

    - W3C Documentation reference: function-name -
    - - - fn:function-lookup(xs:QName, xs:integer) -
    - Returns a function with the specified QName and arity if available, otherwise - returns an empty sequence
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    xs:QNameFunction name as QName
    xs:integerArity of the function
    function(*)?A function with the specified QName and arity if available, otherwise an - empty sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    function-lookup(QName('http://www.w3.org/2005/xpath-functions', - 'substring'), 2)Returns the substring function with arity 2, if available

    - W3C Documentation reference: function-lookup -
    - - - fn:static-base-uri() -
    - Returns the static base URI as an xs:anyURI, if available
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:anyURI?The static base URI, if available; otherwise, an empty sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    static-base-uri()Returns the static base URI as an xs:anyURI, if available, e.g., - 'https://www.example.com/base/'

    - W3C Documentation reference: static-base-uri -
    - - - fn:default-collation() -
    - Returns the default collation URI as an xs:string
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneFunction takes no arguments
    xs:stringThe default collation URI as a string
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    default-collation()Returns the default collation URI as an xs:string, e.g., - 'http://www.w3.org/2005/xpath-functions/collation/codepoint'

    - W3C Documentation reference: default-collation -
    - - - fn:serialize(item()?, item()?) -
    - Serializes an XML node, producing a string representation of the node
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()?An XML node to serialize
    item()?Serialization options as a map, with key-value pairs defining the - serialization parameters (optional)
    xs:string?A string representation of the serialized XML node or an empty sequence - if the input is an empty sequence
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:serialize(<item>Item 1</item>)Returns '<item>Item 1</item>'
    fn:serialize(<item>Item 1</item>, map{'method': 'xml', 'indent': - 'yes'})Returns an indented XML string representation of the input node

    - W3C Documentation reference: serialize -
    - - - fn:parse-xml-fragment(xs:string?) -
    - Parses a string containing an XML fragment and returns a corresponding document - node
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?A string containing an XML fragment
    document-node(element(*))?A document node containing the parsed XML fragment or an empty sequence - if the input is an empty sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:parse-xml-fragment('<item>Item 1</item><item>Item - 2</item>')Returns a document node containing the parsed XML fragment

    - W3C Documentation reference: parse-xml-fragment -
    - - - fn:parse-xml(xs:string?) -
    - Parses a string containing an XML document and returns a corresponding document - node
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?A string containing an XML document
    document-node(element(*))?A document node containing the parsed XML content or an empty sequence - if the input is an empty sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:parse-xml('<root><item>Item 1</item></root>')Returns a document node containing the parsed XML content

    - W3C Documentation reference: parse-xml -
    - - - fn:available-environment-variables() -
    - Retrieves a sequence of the names of all available environment variables
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    NoneNo argument is required
    xs:string*A sequence of the names of all available environment variables
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:available-environment-variables()Returns a sequence of the names of all available environment variables -

    - W3C Documentation reference: available-environment-variables -
    - - - fn:environment-variable(xs:string) -
    - Retrieves the value of an environment variable
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:stringThe name of the environment variable
    xs:string?The value of the environment variable, or an empty sequence if the - variable is not set
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:environment-variable("PATH")Returns the value of the PATH environment variable, or an empty sequence - if the variable is not set

    - W3C Documentation reference: environment-variable -
    - - - fn:uri-collection(xs:string?) -
    - Returns a sequence of URIs in a collection identified by a URI
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI identifying the collection of URIs
    xs:anyURI*A sequence of URIs in the collection
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:uri-collection("http://www.example.com/collection/")Returns a sequence of URIs in the collection identified by the specified - URI -
    fn:uri-collection()Returns a sequence of URIs in the default collection, if one is defined -

    - W3C Documentation reference: uri-collection -
    - - fn:doc-available(xs:string?) -
    - Tests whether an XML document is available at a given URI
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI of the XML document to be tested
    xs:booleanTrue if the XML document is available, otherwise false
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:doc-available("http://www.example.com/books.xml")Returns true if the XML document located at the specified URI is - available, otherwise false
    fn:doc-available("")Returns true if the XML document containing the context item is - available, otherwise false

    - W3C Documentation reference: doc-available -
    - - - fn:doc(xs:string?) -
    - Loads an XML document from a URI and returns the document node
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?The URI of the XML document to be loaded
    document-node()?The document node of the loaded XML document
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:doc("http://www.example.com/books.xml")Loads the XML document located at the specified URI and returns its - document node
    fn:doc("")Returns the document node of the XML document containing the context - item

    - W3C Documentation reference: doc -
    - - - fn:generate-id(node()?) -
    - Returns a unique identifier for the specified node
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    node()?Input node for which the unique identifier is to be generated
    xs:stringUnique identifier for the specified node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:generate-id(/bookstore/book[1])A unique identifier for the first <book> element in the - <bookstore>
    fn:generate-id(.)A unique identifier for the context node

    - W3C Documentation reference: generate-id -
    - - - fn:idref(xs:string*) -
    - Returns a sequence of nodes that are referenced by the specified IDREF attribute - values
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string*Input sequence of IDREF attribute values
    node()*Sequence of nodes referenced by the specified IDREF attribute values -
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:idref("reference42")Nodes referenced by the IDREF attribute value "reference42"
    fn:idref(("ref1", "ref2", "ref3"))Nodes referenced by the IDREF attribute values "ref1", "ref2", and - "ref3"

    - W3C Documentation reference: idref -
    - - - fn:id(xs:string*) -
    - Returns a sequence of elements with the specified ID attribute values
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string*Input sequence of ID attribute values
    element()*Sequence of elements with the specified ID attribute values
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:id("item42")Element with the ID attribute value "item42"
    fn:id(("item1", "item2", "item3"))Elements with the ID attribute values "item1", "item2", and "item3"

    - W3C Documentation reference: id -
    - - - fn:lang(xs:string, node()?) -
    - Returns true if the language of the specified node or its nearest ancestor matches - the given language code
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:stringLanguage code to test
    node()?Optional node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:lang("en", /book/title)true
    fn:lang("fr", /book/title)false

    - W3C Documentation reference: lang -
    - - - - fn:in-scope-prefixes(element()) -
    - Returns a sequence of strings representing the prefixes of the in-scope namespaces - for the specified element
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    element()Element node
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    fn:in-scope-prefixes(/*)("xml", "x")

    - W3C Documentation reference: in-scope-prefixes -
    - - - fn:namespace-uri-for-prefix(xs:string?, element()) -
    - Returns the namespace URI associated with the given prefix, using the in-scope - namespaces for the specified element
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Prefix
    element()Element node
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:namespace-uri-for-prefix('x', /*)"http://www.example.com/ns"
    fn:namespace-uri-for-prefix('', /*)""

    - W3C Documentation reference: namespace-uri-for-prefix -
    - - - fn:namespace-uri-from-QName(xs:QName?) -
    - Returns the namespace URI of the given QName value, or an empty sequence if there's - no namespace URI
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:QName?QName value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:namespace-uri-from-QName(fn:QName('http://www.example.com/ns', - 'x:local'))"http://www.example.com/ns"
    fn:namespace-uri-from-QName(fn:QName('', 'local'))""

    - W3C Documentation reference: namespace-uri-from-QName -
    - - - fn:local-name-from-QName(xs:QName?) -
    - Returns the local name of the given QName value, or an empty sequence if there's no - local name
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:QName?QName value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:local-name-from-QName(fn:QName('http://www.example.com/ns', - 'x:local'))"local"
    fn:local-name-from-QName(fn:QName('', 'local'))"local"

    - W3C Documentation reference: local-name-from-QName -
    - - - fn:prefix-from-QName(xs:QName?) -
    - Returns the prefix of the given QName value, or an empty sequence if there's no - prefix
    - Arguments and return type: - - - - - - - - - -
    TypeDescription
    xs:QName?QName value
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:prefix-from-QName(fn:QName('http://www.example.com/ns', 'x:local')) - "x"
    fn:prefix-from-QName(fn:QName('', 'local'))()

    - W3C Documentation reference: prefix-from-QName -
    - - - fn:QName(xs:string?, xs:string) -
    - Constructs an xs:QName value from a namespace URI and a lexical QName
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?Namespace URI
    xs:stringLexical QName
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:QName('http://www.example.com/ns', 'x:local')QName("http://www.example.com/ns", "x:local")
    fn:QName('', 'local')QName("", "local")

    - W3C Documentation reference: QName -
    - - - fn:resolve-QName(xs:string?, element()) -
    - Resolves a QName by expanding a prefix using the in-scope namespaces of a given - element
    - Arguments and return type: - - - - - - - - - - - - - -
    TypeDescription
    xs:string?QName to resolve
    element()Element with in-scope namespaces
    - Examples:
    - - - - - - - - - - - - - -
    ExpressionResult
    fn:resolve-QName('x:local', $element)QName("http://www.example.com/ns", "local")
    fn:resolve-QName('local', $element)QName("", "local")

    - W3C Documentation reference: Resolve-QName -
    - - - - fn:nilled(node) -
    - Returns a Boolean value indicating whether the argument node is nilled
    -
    - W3C Documentation reference: #func-nilled - -
    - - - - - -
    -
    -
    - - - -
    - - fn:for-each-pair(item()*, item()*, function(item(), item())) -
    - Applies a processing function to pairs of items from two input sequences in a - pairwise fashion, resulting in a sequence of the same length as the shorter input - sequence
    - Arguments and return type: - - - - - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The first input sequence of items
    item()*The second input sequence of items
    function(item(), item())The processing function used to process pairs of items from the input - sequences
    item()*The resulting sequence after applying the processing function to pairs - of items
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    for-each-pair((1, 2, 3), ("a", "b"), function($item1, $item2) { - concat($item1, $item2) })Returns a sequence with the concatenated pairs of items: - ("1a", "2b") -

    - W3C Documentation reference: for-each-pair -
    - - - - - fn:filter(item()*, function(item()) -
    - Filters a sequence of items based on a given predicate function
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The input sequence of items
    function(item())The predicate function used to filter the items
    item()*The resulting sequence after applying the predicate function
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    filter((1, 2, 3, 4), function($x) { $x mod 2 = 0 })Returns a new sequence containing only the even numbers from the input - sequence: (2, 4)

    - W3C Documentation reference: filter -
    - - - fn:for-each(item()*, function(item())) -
    - Applies a specified function to each item in a sequence, returning a new - sequence
    - Arguments and return type: - - - - - - - - - - - - - - - - - -
    TypeDescription
    item()*The input sequence of items
    function(item())The function to apply to each item in the sequence
    item()*The new sequence created by applying the function to each item in the - input sequence
    - Examples:
    - - - - - - - - - -
    ExpressionResult
    for-each((1, 2, 3, 4), function($x) { $x * 2 })Returns a new sequence with the result of doubling each number in the - input sequence: (2, 4, 6, 8)

    - W3C Documentation reference: for-each -
    - -
    -
    -
    - -
    - - -
    - - - - - - \ No newline at end of file diff --git a/Frontend/tools/xsd.html b/Frontend/tools/xsd.html deleted file mode 100644 index 52e559a..0000000 --- a/Frontend/tools/xsd.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Online XSD tester

    -
    -
    -
    - - - -
    -
    - - - -
    -
    - - - - -
    -
    - - -
    -
    - -
    - - -
    - -
    -
    -
    -

    What is XSD?

    -

    XSD is a W3C recomedation that specifies how to describe the elements in XML document

    -

    XSD specifies data types, order and arity of elements in XML file.
    - Main components of XSD file are:
    - - Element declaration - declares properties of elements (names and namespaces)
    - - Attribute declarations - declares properties of attributes
    - - Simple and complex types:
    - - - XSD provides 19 simple data types
    - - - More complex types are declared using simple types and relationships
    -

    -
    - - - -
    - - - - \ No newline at end of file diff --git a/Frontend/tools/xslt.html b/Frontend/tools/xslt.html deleted file mode 100644 index e5dd2f0..0000000 --- a/Frontend/tools/xslt.html +++ /dev/null @@ -1,1153 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Online XSLT tester

    -
    -
    -
    - - - -
    -
    - - - -
    -
    - - procInfo
    -
    - - -
    -
    - -
    - -
    - -
    -
    -
    -
    - -
    - - -
    - -
    -
    -
    -

    What is XSLT?

    -

    XSLT is a language for transforming XML documents into other documents such as XML, HTML and many - other.

    - -
    - -
    -

    XSLT 2.0 introduced a host of new features:
    - - Strong typing and all XSD types
    - - The ability to define and write own functions
    - - node-set() - replaces XSLT's 1.0 Result Tree Fragment, creating fully functional tree
    - - New functions and operators:
    - - - XPath 2.0
    - - - String processing and regular expressions
    - - - Grouping (for-each-group function) - - - String processing
    - - - Sequence type
    -

    -

    XSLT 3.0 further improved the formula:
    - - Streaming tranformations (previously file had to be loaded to memory to be processed)
    - - Packages - improve the modularity of large stylesheets
    - - Improved error handling (for example <xsl:try>)
    - - Support for maps and arrays, enabling XSLT to handle JSON as well as XML
    - - Functions can now be arguments to other (higher-order) functions -

    -
    -
    - -

    XSLT 1.0, 2.0 & 3.0 functions

    - - - -
    - -
    - - - [1.0] xsl:template -
    -
    - defines a set of rules to be applied to specified node.
    -
    - W3C Documentation reference: Defining-Template-Rules -
    -
    - - - - [1.0] xsl:apply-templates -
    -
    - applies a template rule to the current element or to element's child nodes.
    -
    - W3C Documentation reference: Applying-Template-Rules -
    -
    - - - - [1.0] xsl:apply-imports -
    -
    - Applies a template rule from an imported style sheet
    -
    - W3C Documentation reference: #apply-imports -
    -
    - - - - [1.0] xsl:apply-templates -
    -
    - Applies a template rule to the current element or to the current element's child nodes -
    -
    - W3C Documentation reference: Applying-Template-Rules -
    -
    - - - - [1.0] xsl:call-template -
    -
    - Calls a named template
    -
    - W3C Documentation reference: #named-templates -
    -
    - - - - [2.0] xsl:next-match -
    -
    - overrides another template rule (considers all other template rules of lower import - precedence/priority)
    -
    - W3C Documentation reference: #element-next-match -
    -
    -
    - - - [3.0] xsl:mode -
    -
    - Allows properties of a mode to be defined
    -
    - W3C Documentation reference: #element-mode -
    -
    -
    - - - [3.0] xsl:override -
    -
    - Allows using package to override selected components from a used package
    -
    - W3C Documentation reference: #element-override -
    -
    -
    - - - [3.0] xsl:package -
    -
    - Defines a set of stylesheet modules that can be compiled as a unit
    -
    - W3C Documentation reference: #element-package -
    -
    -
    - - - [3.0] xsl:accept -
    -
    - Allows a package to restrict the visibility of components exposed by a package
    -
    - W3C Documentation reference: #element-accept -
    -
    -
    - - - [3.0] xsl:global-context-item -
    -
    - Declares whether a global context item is required, and if so, to declare its - required type
    -
    - W3C Documentation reference: #element-global-context-item -
    -
    -
    - - -
    -
    -
    - -
    - - - [1.0] xsl:for-each -
    -
    - Loops through each node in a specified node set
    -
    - W3C Documentation reference: #for-each -
    -
    - - - - [1.0] xsl:if -
    -
    - Contains a template that will be applied only if a specified condition is true
    -
    - W3C Documentation reference: Conditional-Processing -
    -
    - - - - [1.0] xsl:choose -
    -
    - Used in conjunction with <
    -
    - W3C Documentation reference: Conditional-Processing-with-xsl:choose -
    -
    - - - - [1.0] xsl:when -
    -
    - Specifies an action for the <
    -
    - W3C Documentation reference: Conditional-Processing-with-xsl:choose -
    -
    - - - - [1.0] xsl:otherwise -
    -
    - Specifies a default action for the <
    -
    - W3C Documentation reference: Conditional-Processing-with-xsl:choose -
    -
    - - - - [2.0] xsl:for-each-group -
    -
    - Groups elements and performs operations once for each group
    -
    - W3C Documentation reference: #element-for-each-group -
    -
    -
    - - - [3.0] xsl:iterate -
    -
    - Used to iterate over a sequence, with the option to set parameters for use in the - next iteration
    -
    - W3C Documentation reference: #element-iterate -
    -
    -
    - - - [3.0] xsl:break -
    -
    - Causes premature completion before the entire input sequence has been processed
    -
    - W3C Documentation reference: #element-break -
    -
    -
    - - - [3.0] xsl:next-iteration -
    -
    - The contents are a set of xsl:with-param elements defining the values of the - iteration parameters to be used on the next iteration
    -
    - W3C Documentation reference: #element-next-iteration -
    -
    -
    - - - [3.0] xsl:on-completion -
    -
    - Defines processing to be carried out when the input sequence is exhausted
    -
    - W3C Documentation reference: #element-on-completion -
    -
    -
    - - - [3.0] xsl:fork -
    -
    - The result of the xsl:fork instruction is the sequence formed by concatenating the - results of evaluating each of its contained instructions, in order
    -
    - W3C Documentation reference: #element-fork -
    -
    -
    - - - [3.0] xsl:on-empty -
    -
    - Outputs the enclosed content only if the containing sequence generates no "ordinary" - content
    -
    - W3C Documentation reference: #element-on-empty -
    -
    -
    - - - [3.0] xsl:on-non-empty -
    -
    - Outputs the enclosed content only if the containing sequence also generates - "ordinary" content
    -
    - W3C Documentation reference: #element-on-non-empty -
    -
    -
    - - - [3.0] xsl:try -
    -
    - Allows recovery from dynamic errors occurring within the expression it wraps
    -
    - W3C Documentation reference: #element-try -
    -
    -
    - - - [3.0] xsl:catch -
    -
    - http://www.w3.org/TR/xslt-30/#element-catchIn conjunction with xsl:try, handles - dynamic errors
    -
    - W3C Documentation reference: #element-catchIn conjunction with xsl:try, handles dynamic errors -
    -
    -
    - - - [3.0] xsl:context-item -
    -
    - Used to declare the initial context item for a template
    -
    - W3C Documentation reference: #element-context-item -
    -
    -
    - - -
    -
    -
    - -
    - - - [1.0] xsl:attribute -
    -
    - Adds an attribute
    -
    - W3C Documentation reference: #creating-attributes -
    -
    - - - - [1.0] xsl:attribute-set -
    -
    - Defines a named set of attributes
    -
    - W3C Documentation reference: #attribute-sets -
    -
    - - - - [1.0] xsl:copy -
    -
    - Creates a copy of the current node (without child nodes and attributes)
    -
    - W3C Documentation reference: #copying -
    -
    - - - - [1.0] xsl:number -
    -
    - Determines the integer position of the current node and formats a number
    -
    - W3C Documentation reference: #number -
    -
    - - - - [1.0] xsl:value-of -
    -
    - Extracts the value of a selected node
    -
    - W3C Documentation reference: #value-of -
    -
    - - - - [1.0] xsl:text -
    -
    - Writes literal text to the output
    -
    - W3C Documentation reference: Creating-Text -
    -
    - - - - [1.0] xsl:comment -
    -
    - Creates a comment node in the result tree
    -
    - W3C Documentation reference: Creating-Comments -
    -
    - - - - [1.0] xsl:processing-instruction -
    -
    - Writes a processing instruction to the output
    -
    - W3C Documentation reference: Creating-Processing-Instructions -
    -
    - - - - [1.0] xsl:key -
    -
    - Declares a named key that can be used in the style sheet with the key() function
    -
    - W3C Documentation reference: #key -
    -
    - - - - [1.0] xsl:decimal-format -
    -
    - Defines the characters and symbols to be used when converting numbers into strings, with - the format-number() function
    -
    - W3C Documentation reference: #format-number -
    -
    - - - - [1.0] xsl:preserve-space -
    -
    - Defines the elements for which white space should be preserved
    -
    - W3C Documentation reference: #strip -
    -
    - - - - [1.0] xsl:strip-space -
    -
    - Defines the elements for which white space should be removed
    -
    - W3C Documentation reference: #strip -
    -
    - - - - [1.0] xsl:sort -
    -
    - Sorts the output
    -
    - W3C Documentation reference: #sorting -
    -
    - - - - [1.0] xsl:output -
    -
    - Defines the format of the output document
    -
    - W3C Documentation reference: #output -
    -
    - - - - [2.0] xsl:for-each-group -
    -
    - Sorts given sequence
    -
    - W3C Documentation reference: #element-perform-sort -
    -
    -
    - - - [2.0] xsl:result-document -
    -
    - Creates a final result tree
    -
    - W3C Documentation reference: #element-result-document -
    -
    -
    - - - [2.0] xsl:character-map -
    -
    - Allows a specific character appearing in the final result tree to be substituted by - a specified string of characters
    -
    - W3C Documentation reference: #element-character-map -
    -
    -
    - - - [2.0] xsl:output-character -
    -
    - Defines characters and their replacements to be used by character-map
    -
    - W3C Documentation reference: #element-character-map -
    -
    -
    - - - [3.0] xsl:merge -
    -
    - Merges two or more pre-sorted input files
    -
    - W3C Documentation reference: #element-merge -
    -
    -
    - - - [3.0] xsl:merge-action -
    -
    - Defines action to be carried out on each merged group
    -
    - W3C Documentation reference: #element-merge-action -
    -
    -
    - - - [3.0] xsl:merge-key -
    -
    - Used to define the merge keys on which the input sequences are sorted
    -
    - W3C Documentation reference: #element-merge-key -
    -
    -
    - - - [3.0] xsl:merge-source -
    -
    - Describes the input source for an xsl:merge instruction
    -
    - W3C Documentation reference: #element-merge-source -
    -
    -
    - - -
    -
    -
    - -
    - - - [1.0] xsl:stylesheet -
    -
    - Defines the root element of a style sheet
    -
    - W3C Documentation reference: #stylesheet-element -
    -
    - - - - [1.0] xsl:transform -
    -
    - Defines the root element of a style sheet
    -
    - W3C Documentation reference: #stylesheet-element -
    -
    - - - - [1.0] xsl:import -
    -
    - Imports the contents of one style sheet into another. Note: An imported style sheet has - lower precedence than the importing style sheet
    -
    - W3C Documentation reference: #import -
    -
    - - - - [1.0] xsl:include -
    -
    - Includes the contents of one style sheet into another. Note: An included style sheet has - the same precedence as the including style sheet
    -
    - W3C Documentation reference: #include -
    -
    - - - - [1.0] xsl:namespace-alias -
    -
    - Replaces a namespace in the style sheet to a different namespace in the output
    -
    - W3C Documentation reference: #literal-result-element -
    -
    - - - - [1.0] xsl:element -
    -
    - Creates an element node in the output document
    -
    - W3C Documentation reference: Creating-Elements-with-xsl:element -
    -
    - - - -
    -
    -
    - -
    - - - [1.0] xsl:param -
    -
    - Declares a local or global parameter
    -
    - W3C Documentation reference: #variables -
    -
    - - - - [1.0] xsl:variable -
    -
    - Declares a local or global variable
    -
    - W3C Documentation reference: #variables -
    -
    - - - - [1.0] xsl:with-param -
    -
    - Defines the value of a parameter to be passed into a template
    -
    - W3C Documentation reference: Passing-Parameters-to-Templates -
    -
    - - - - [1.0] xsl:copy-of -
    -
    - Creates a copy of the current node (with child nodes and attributes)
    -
    - W3C Documentation reference: #copy-of -
    -
    - - - - [2.0] xsl:document -
    -
    - Creates a new document node
    -
    - W3C Documentation reference: #element-document -
    -
    -
    - - - [2.0] xsl:namespace -
    -
    - Creates a namespace node
    -
    - W3C Documentation reference: #element-namespace -
    -
    -
    - - - [2.0] xsl:namespace-alias -
    -
    - Declares that a literal namespace URI is being used as an alias for a target - namespace URI
    -
    - W3C Documentation reference: #element-namespace-alias -
    -
    -
    - - - [2.0] xsl:sequence -
    -
    - Constructs a sequence of nodes and/or atomic values
    -
    - W3C Documentation reference: #element-sequence -
    -
    -
    - - -
    -
    - -
    - -
    - - - [2.0] xsl:analyze-string -
    -
    - Identifies substrings that match given regex
    -
    - W3C Documentation reference: #element-analyze-string -
    -
    -
    - - - [2.0] xsl:matching-substring -
    -
    - Used in conjunction with analize-string, returns matching substrings
    -
    - W3C Documentation reference: #element-analyze-string -
    -
    -
    - - - [2.0] xsl:non-matching-substring -
    -
    - Used in conjunction with analize-string, returns substrings that didn't match the regex
    -
    - W3C Documentation reference: #element-analyze-string -
    -
    -
    - - -
    -
    - -
    - -
    - - - [2.0] xsl:function -
    -
    - Declares a function that can be called from any XPath expression in the stylesheet
    -
    - W3C Documentation reference: #element-function -
    -
    -
    - - - [3.0] xsl:evaluate -
    -
    - Allows dynamic evaluation of XPath expressions from a string
    -
    - W3C Documentation reference: #element-evaluate -
    -
    -
    - - - [3.0] xsl:assert -
    -
    - Asserts a XPath expression, optionally throwing a dynamic error
    -
    - W3C Documentation reference: #element-assert -
    -
    -
    - - -
    -
    -
    - -
    - - - [1.0] xsl:message -
    -
    - Writes a message to the output (used to report errors)
    -
    - W3C Documentation reference: #message -
    -
    - - - - [1.0] xsl:fallback -
    -
    - Specifies an alternate code to run if the processor does not support an XSLT element
    -
    - W3C Documentation reference: #fallback -
    -
    - - - - [3.0] xsl:map -
    -
    - Used to construct a new map
    -
    - W3C Documentation reference: #element-map -
    -
    -
    - - - [3.0] xsl:map-entry -
    -
    - Used to construct a singleton map (one key and one value)
    -
    - W3C Documentation reference: #element-map-entry -
    -
    -
    - - - [3.0] xsl:expose -
    -
    - Used to modify the visibility of selected components within a package
    -
    - W3C Documentation reference: #element-expose -
    -
    -
    - - - [3.0] xsl:accumulator -
    -
    - Defines a rule that is to be applied while the document is being sequentially processed
    -
    - W3C Documentation reference: #element-accumulator -
    -
    -
    - - - [3.0] xsl:accumulator-rule -
    -
    - Defines a rule for an xsl:accumulator
    -
    - W3C Documentation reference: #element-accumulator-rule -
    -
    -
    - - - [3.0] xsl:source-document -
    -
    - Initiates streamed or unstreamed processing of a source document
    -
    - W3C Documentation reference: #element-source-document -
    -
    -
    - - - [3.0] xsl:use-package -
    -
    - http://www.w3.org/TR/xslt-30/#element-use-package
    -
    - W3C Documentation reference: #element-use-package -
    -
    -
    - - - [3.0] xsl:where-populated -
    -
    - Allows conditional content construction to be made streamable
    -
    - W3C Documentation reference: #element-where-populated -
    -
    -
    - - - [3.0] xsl:accept -
    -
    - Allows a package to restrict the visibility of components exposed by a package that it uses
    -
    - W3C Documentation reference: #element-accept -
    -
    -
    -
    - - -
    - -
    - -
    - - - - \ No newline at end of file diff --git a/Frontend/tsconfig.app.json b/Frontend/tsconfig.app.json new file mode 100644 index 0000000..3e5b621 --- /dev/null +++ b/Frontend/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/Frontend/tsconfig.json b/Frontend/tsconfig.json new file mode 100644 index 0000000..877be66 --- /dev/null +++ b/Frontend/tsconfig.json @@ -0,0 +1,29 @@ +{ + "extends": "@vue/tsconfig/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"], + "@components/*":["./src/components/*"], + "@views/*":["./src/views/*"], + "@assets/*":["./src/assets/*"], + } + }, + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ], + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": ["node_modules"], +} diff --git a/Frontend/tsconfig.node.json b/Frontend/tsconfig.node.json new file mode 100644 index 0000000..bb67dfc --- /dev/null +++ b/Frontend/tsconfig.node.json @@ -0,0 +1,15 @@ +{ + "extends": "@tsconfig/node18/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "module": "ESNext", + "types": ["node"] + } +} diff --git a/Frontend/vite.config.ts b/Frontend/vite.config.ts new file mode 100644 index 0000000..adf0c13 --- /dev/null +++ b/Frontend/vite.config.ts @@ -0,0 +1,40 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + ], + server:{ + port: 80, + host: '0.0.0.0', + proxy : { + '/java': { + target:'http://xmltools-backend:8081/', + rewrite: (path) => path.replace(/^\/java/, ''), + }, + '/libxml': { + target:'http://xmltools-libxml-backend/', + rewrite: (path) => path.replace(/^\/libxml/, ''), + }, + '/mock': { + target:'http://xmltools-mocked-services:8097/', + rewrite: (path) => path.replace(/^\/mock/, ''), + }, + '/api/mock': { + target: 'http://xmltools-mocked-services:8097/' + } + }, + }, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + '@components': fileURLToPath(new URL('./src/components', import.meta.url)), + '@views': fileURLToPath(new URL('./src/views', import.meta.url)), + '@assets': fileURLToPath(new URL('./src/assets', import.meta.url)), + } + } +}) diff --git a/Frontend/assets/samples/sampleXml.xml b/Samples/xquery/sampleXML.xml similarity index 100% rename from Frontend/assets/samples/sampleXml.xml rename to Samples/xquery/sampleXML.xml diff --git a/Samples/xquery/xquery.curl b/Samples/xquery/xquery.curl new file mode 100644 index 0000000..2e4c4fc --- /dev/null +++ b/Samples/xquery/xquery.curl @@ -0,0 +1,4 @@ +url = "localhost/java/xquery" +#url = "localhost/libxml/xslt" +data = "@xquery.json" +request = POST diff --git a/Samples/xquery/xquery.json b/Samples/xquery/xquery.json new file mode 100644 index 0000000..f4d96bb --- /dev/null +++ b/Samples/xquery/xquery.json @@ -0,0 +1,6 @@ +{ + "data": "John67Anna69", + "process": "for $x in //person return string($x/name)", + "processor": "saxon", + "version": "3.1" +} diff --git a/Samples/xsd/sample.xsd b/Samples/xsd/sample.xsd new file mode 100644 index 0000000..2ea41fb --- /dev/null +++ b/Samples/xsd/sample.xsd @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/dev.sh b/dev.sh new file mode 100755 index 0000000..0a22208 --- /dev/null +++ b/dev.sh @@ -0,0 +1 @@ +docker-compose -f docker-compose.dev.yml up --build \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..8aa4ac8 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,75 @@ +version: "3" + +services: + redis: + container_name: xmltools-redis + build: ./Redis + restart: "no" + + xmltools-frontend: + build: + context: ./Frontend + target: dev + container_name: xmltools-frontend + image: xmltools-frontend + ports: + - 80:80 + volumes: + - ./Frontend:/app + - /app/node_modules + xmltools-backend: + build: ./Backend/tools-services + container_name: xmltools-backend + image: xmltools-backend + ports: + - 8081:8081 + + xmltools-libxml-backend: + build: ./Backend-libXML + container_name: xmltools-libxml-backend + image: xmltools-libxml-backend + ports: + - 8082:80 + + xmltools-mocked-services: + build: + context: ./Backend/mocked-services + dockerfile: Dockerfile + container_name: xmltools-mocked-services + restart: "no" + ports: + - "8097:8097" + depends_on: + - redis + environment: + SPRING_PROFILES_ACTIVE: DEV + TZ: Europe/Warsaw + + swagger: + image: "swaggerapi/swagger-ui:latest" + container_name: xmltools-swagger + ports: + - "8000:8080" + environment: + - BASE_URL=/swagger + - SWAGGER_JSON=/Swagger/swagger.json + volumes: + - ./Swagger:/Swagger + + filebeat: + build: ./Filebeat + container_name: xmltools-filebeat + user: root + volumes: + - "./Filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" + - "/var/lib/docker/containers:/var/lib/docker/containers:ro" + - "/var/run/docker.sock:/var/run/docker.sock:ro" + environment: + - ENV_TYPE + command: + - "-e" + - "--strict.perms=false" + +networks: + default: + name: tools_network diff --git a/docker-compose.yml b/docker-compose.yml index 4345161..01f9948 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,9 @@ services: restart: "no" xmltools-frontend: - build: ./Frontend + build: + context: ./Frontend + target: production-stage container_name: xmltools-frontend image: xmltools-frontend ports: diff --git a/readme.md b/readme.md index e0e9ba1..2d61997 100644 --- a/readme.md +++ b/readme.md @@ -41,6 +41,9 @@ within created container. ## How to run +Dev server(with hot-reload frontend): docker-compose -f docker-compose.dev.yml up --build +Prod: docker-compose up --build + ### Localy In order to run application use ```aidl