xiongzhu 2 سال پیش
کامیت
3a5a3dd93b
26فایلهای تغییر یافته به همراه3788 افزوده شده و 0 حذف شده
  1. 41 0
      .gitignore
  2. 15 0
      .prettierrc.json
  3. 17 0
      111.puml
  4. 5 0
      README.md
  5. 240 0
      combine_flows.mjs
  6. 257 0
      combine_table.mjs
  7. 18 0
      er.json
  8. 73 0
      er.mjs
  9. 70 0
      flow.mjs
  10. 27 0
      flows.json
  11. 101 0
      index.ts
  12. 65 0
      llm.mjs
  13. 161 0
      outline.mjs
  14. 19 0
      package.json
  15. BIN
      paper.docx
  16. 0 0
      paper.md
  17. BIN
      plantuml-1.2023.12.jar
  18. 3 0
      plantuml.cfg
  19. 124 0
      react.ts
  20. 165 0
      response.md
  21. 58 0
      table.json
  22. 48 0
      table.mjs
  23. 58 0
      tables.json
  24. 3 0
      testuml.mjs
  25. 58 0
      upload.mjs
  26. 2162 0
      yarn.lock

+ 41 - 0
.gitignore

@@ -0,0 +1,41 @@
+# compiled output
+/dist
+/node_modules
+
+# Enviroment
+# .env
+# .env.dev
+# .env.stage
+# .env.prod
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# OS
+.DS_Store
+
+# Tests
+/coverage
+/.nyc_output
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+tags
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json

+ 15 - 0
.prettierrc.json

@@ -0,0 +1,15 @@
+{
+    "tabWidth": 4,
+    "trailingComma": "none",
+    "semi": false,
+    "printWidth": 120,
+    "importOrder": [
+        "^[./]",
+        "^langchain/(.*)$",
+        "<THIRD_PARTY_MODULES>",
+        "^@server/(.*)$",
+        "^@ui/(.*)$"
+    ],
+    "importOrderSeparation": true,
+    "importOrderSortSpecifiers": true
+}

+ 17 - 0
111.puml

@@ -0,0 +1,17 @@
+@startuml 示例E-R图
+entity 客户  {
+  name
+}
+
+entity 订单  {
+  date
+}
+
+entity 订单详情 {
+  price
+}
+
+客户 -right-o{ 订单
+订单 ||-right-|{ 订单详情
+
+@enduml

+ 5 - 0
README.md

@@ -0,0 +1,5 @@
+## 依赖
+
+- java
+- graphviz
+- plantuml

+ 240 - 0
combine_flows.mjs

@@ -0,0 +1,240 @@
+import { HumanMessage, SystemMessage } from "langchain/schema"
+import { llm, conversation } from "./llm.mjs"
+import fs from "fs"
+import dedent from "dedent"
+
+const flows = JSON.parse(fs.readFileSync("./flows.json").toString())
+const title = "《thinkphp5鲜花销售管理系统》"
+const desc = dedent`- 管理员:登录、个人中心、用户管理、鲜花分类管理、鲜花信息管理、鲜花信息、用户留言管理、特殊服务管理、系统管理、订单管理。
+                    - 用户:注册、登录、个人中心、鲜花信息、花语公告、后台管理、购物车、联系客服、我的订单、我的地址、我的收藏。`
+const chapters = [
+    {
+        title: "第一章概述",
+        content: dedent`# 第一章 概述
+                    
+                            ## 1.1 研究背景
+                            
+                            随着互联网的快速发展,电子商务已经成为了现代生活中不可或缺的一部分。鲜花销售作为传统的商业领域之一,也逐渐适应了电子商务的趋势,鲜花销售网站应运而生。然而,现有的鲜花销售网站存在一些问题,例如用户体验差、功能不完善、管理不便等,导致用户体验不佳与业务管理效率低下。
+                            
+                            为了解决这些问题,本毕业设计提出了一个基于thinkphp5框架的鲜花销售管理系统,旨在提供一个功能齐全、用户友好且管理便利的鲜花销售平台。
+                            
+                            ## 1.2 研究目标
+                            
+                            本毕业设计的目标是设计和实现一个完整的鲜花销售管理系统,该系统能够提供以下功能:
+                            - 管理员登录、个人中心、用户管理、鲜花分类管理、鲜花信息管理、用户留言管理、特殊服务管理、系统管理、订单管理等管理功能。
+                            - 用户注册、登录、个人中心、鲜花信息浏览、花语公告查看、后台管理、购物车操作、联系客服、我的订单管理、地址管理、收藏管理等用户功能。
+                            
+                            通过该系统,管理员可以方便地管理鲜花销售业务,用户可以享受到更好的购物体验。
+                            
+                            ## 1.3 研究方法
+                            
+                            本毕业设计将采用以下方法来实现研究目标:
+                            1. 调研和分析现有的鲜花销售网站,了解其功能和不足之处。
+                            2. 使用thinkphp5框架进行系统开发,该框架具有良好的开发效率和可维护性。
+                            3. 进行系统设计和数据库设计,确保系统的可扩展性和性能。
+                            4. 实现系统功能,并进行系统测试和调优,确保系统的稳定性和性能。
+                            5. 对系统进行实际应用测试和用户反馈收集,以评估系统的使用效果和满意度。
+                            
+                            ## 1.4 研究意义
+                            
+                            本毕业设计的完成具有以下几个意义:
+                            1. 提供了一个方便快捷的鲜花销售平台,方便用户进行鲜花订购和管理。
+                            2. 提升了鲜花销售网站的用户体验,使用户可以更加方便地浏览和购买鲜花。
+                            3. 提高了鲜花销售平台的管理效率,减少了人力成本和业务管理难度。
+                            4. 推动了thinkphp5框架在电子商务领域的应用和推广。
+                            
+                            通过本毕业设计的研究和实践,将进一步提升对鲜花销售管理系统的理解和应用能力,为相关学科的研究和发展做出贡献。
+                            
+                            ## 1.5 论文结构
+                            
+                            本论文共分为以下几个章节:
+                            
+                            - 第一章 概述:介绍本毕业设计的研究背景、目标、方法、意义和论文结构。
+                            - 第二章 关键技术介绍:介绍论文中用到的关键技术,包括thinkphp5框架、数据库设计等。
+                            - 第三章 系统分析:对鲜花销售管理系统进行需求分析和功能设计。
+                            - 第四章 系统设计:详细讨论系统的架构设计和数据库设计。
+                            - 第五章 系统实现:具体介绍系统的实现过程和关键代码。
+                            - 第六章 系统测试:对系统进行功能测试和性能测试。
+                            - 结论:总结全文并提出后续工作的展望。
+                            - 参考文献:列出本论文中所引用的相关文献。
+                            - 致谢:对为论文完成提供帮助和支持的人表示感谢。
+                            
+                            通过以上结构,全面而系统地介绍论文的研究内容,使读者能够全面了解和理解本毕业设计的研究成果。`
+    },
+    {
+        title: "第二章关键技术介绍",
+        content: dedent`# 第二章 关键技术介绍
+                    
+                            在本毕业设计中,我们将使用一些关键技术来实现鲜花销售管理系统。本章将介绍这些关键技术,并说明它们在系统设计和开发中的作用。
+                            
+                            ## 2.1 ThinkPHP5框架
+                            
+                            ThinkPHP5是一款基于PHP的开源Web应用框架,由于其高效、简便、灵活的特性而被广泛应用于PHP应用程序的开发。本项目选择ThinkPHP5作为开发框架,主要原因有以下几点:
+                            
+                            1. **高效性**:ThinkPHP5采用面向对象的开发方式,拥有一套强大且高效的MVC架构,能够快速进行开发。框架根据数据和控制器之间的映射关系,自动生成了一套高效且优雅的URL规则。
+                            
+                            2. **灵活性**:ThinkPHP5提供了丰富的扩展机制和插件支持,可以方便地进行二次开发和功能扩展。同时,框架还支持多种视图引擎,如PHP原生模板引擎、Smarty模板引擎等,开发者可以根据需要选择最合适的视图引擎。
+                            
+                            3. **安全性**:ThinkPHP5内置了一系列安全机制,如XSS过滤、CSRF防护、SQL注入防范等,能够有效保护网站的安全性。此外,框架还支持对用户输入进行验证和过滤,防止恶意用户的攻击。
+                            
+                            4. **易学易用**:ThinkPHP5的代码结构清晰、规范明确,具有很好的可读性和可维护性。同时,框架还提供了丰富的文档和示例,方便开发者学习和使用。
+                            
+                            ## 2.2 数据库设计
+                            
+                            在鲜花销售管理系统中,使用数据库存储和管理数据是必不可少的。在本项目中,我们将使用MySQL作为数据库管理系统,进行数据的存储和操作。
+                            
+                            数据库的设计是系统中最为重要的一环,合理的数据库设计能够提高系统的性能和扩展性。我们将设计以下几个主要的数据库表:
+                            
+                            1. **管理员表**(admin):存储系统管理员的相关信息,包括管理员ID、用户名、密码等。
+                            2. **用户表**(user):存储用户的注册信息,包括用户ID、用户名、密码、手机号码等。
+                            3. **鲜花分类表**(flower_category):存储鲜花的分类信息,包括分类ID、分类名称、分类描述等。
+                            4. **鲜花信息表**(flower):存储鲜花的详细信息,包括鲜花ID、鲜花名称、鲜花价格、鲜花分类ID等。
+                            5. **用户留言表**(message):存储用户留言信息,包括留言ID、用户ID、留言内容、留言时间等。
+                            6. **特殊服务表**(special_service):存储特殊服务的信息,包括服务ID、服务名称、服务价格等。
+                            7. **系统设置表**(system_config):存储系统的相关设置,包括系统ID、系统名称、系统参数等。
+                            8. **订单表**(order):存储用户的订单信息,包括订单ID、用户ID、下单时间、订单状态等。
+                            
+                            通过合理的数据库设计,能够提高系统数据的组织性和检索性能,便于数据的管理和操作。
+                            
+                            ## 2.3 其他技术
+                            
+                            除了上述两个关键技术外,还会使用到一些其他技术来实现鲜花销售管理系统:
+                            
+                            1. **HTML/CSS/JavaScript**:用于前端页面的布局和交互效果,提供用户友好的界面。
+                            2. **jQuery**:一个轻量级的JavaScript库,简化了JavaScript的开发过程,提供了丰富的插件和UI组件。
+                            3. **Bootstrap**:一个流行的前端开发框架,提供了响应式布局和丰富的页面组件,简化了前端开发的过程。
+                            4. **AJAX**:用于实现异步加载数据,提高系统的响应速度和用户体验。
+                            5. **Git**:用于版本控制和团队协作,方便多人开发时的代码管理和合并。
+                            
+                            通过使用这些关键技术和工具,能够使鲜花销售管理系统在功能、性能和用户体验上达到更好的效果。
+                            
+                            本章对本毕业设计中用到的关键技术进行了介绍,包括ThinkPHP5框架的特点和优势,数据库设计的重要性,以及其他技术的使用。这些技术将在后续章节中被具体应用于系统的设计和实现中。`
+    },
+    {
+        title: "第三章系统分析",
+        sections: [
+            {
+                title: "3.1 系统概述"
+            },
+            {
+                title: "3.2 需求分析"
+            },
+            {
+                title: "3.3 可行性分析"
+            },
+            {
+                title: "3.4 系统修成分析"
+            },
+            {
+                title: "3.5 本章小节"
+            }
+        ]
+    },
+    {
+        title: "第四章系统设计"
+    },
+    {
+        title: "第五章系统实现"
+    },
+    {
+        title: "第六章系统测试"
+    },
+    {
+        title: "结论"
+    },
+    {
+        title: "参考文献"
+    },
+    {
+        title: "致谢"
+    }
+]
+const { chain, memory } =
+    conversation(dedent`你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+                    我的毕业设计项目是${title}
+                    这个项目包含以下功能:${desc}
+                    现在我们已经为论文拟好了一个大纲:
+                    ${chapters.map((i) => `- ${i.title}`).join("\n")}
+                    现在我们来一步一步的编写这篇论文
+                    请严格按照markdown格式返回内容`)
+                  
+memory.saveContext(
+    { input: "现在我们来编写第二章关键技术介绍" },
+    {
+        response: dedent`# 第二章 关键技术介绍
+
+在本毕业设计中,我们将使用一些关键技术来实现鲜花销售管理系统。本章将介绍这些关键技术,并说明它们在系统设计和开发中的作用。
+
+## 2.1 ThinkPHP5框架
+
+ThinkPHP5是一款基于PHP的开源Web应用框架,由于其高效、简便、灵活的特性而被广泛应用于PHP应用程序的开发。本项目选择ThinkPHP5作为开发框架,主要原因有以下几点:
+
+1. **高效性**:ThinkPHP5采用面向对象的开发方式,拥有一套强大且高效的MVC架构,能够快速进行开发。框架根据数据和控制器之间的映射关系,自动生成了一套高效且优雅的URL规则。
+
+2. **灵活性**:ThinkPHP5提供了丰富的扩展机制和插件支持,可以方便地进行二次开发和功能扩展。同时,框架还支持多种视图引擎,如PHP原生模板引擎、Smarty模板引擎等,开发者可以根据需要选择最合适的视图引擎。
+
+3. **安全性**:ThinkPHP5内置了一系列安全机制,如XSS过滤、CSRF防护、SQL注入防范等,能够有效保护网站的安全性。此外,框架还支持对用户输入进行验证和过滤,防止恶意用户的攻击。
+
+4. **易学易用**:ThinkPHP5的代码结构清晰、规范明确,具有很好的可读性和可维护性。同时,框架还提供了丰富的文档和示例,方便开发者学习和使用。
+
+## 2.2 数据库设计
+
+在鲜花销售管理系统中,使用数据库存储和管理数据是必不可少的。在本项目中,我们将使用MySQL作为数据库管理系统,进行数据的存储和操作。
+
+数据库的设计是系统中最为重要的一环,合理的数据库设计能够提高系统的性能和扩展性。我们将设计以下几个主要的数据库表:
+
+1. **管理员表**(admin):存储系统管理员的相关信息,包括管理员ID、用户名、密码等。
+2. **用户表**(user):存储用户的注册信息,包括用户ID、用户名、密码、手机号码等。
+3. **鲜花分类表**(flower_category):存储鲜花的分类信息,包括分类ID、分类名称、分类描述等。
+4. **鲜花信息表**(flower):存储鲜花的详细信息,包括鲜花ID、鲜花名称、鲜花价格、鲜花分类ID等。
+5. **用户留言表**(message):存储用户留言信息,包括留言ID、用户ID、留言内容、留言时间等。
+6. **特殊服务表**(special_service):存储特殊服务的信息,包括服务ID、服务名称、服务价格等。
+7. **系统设置表**(system_config):存储系统的相关设置,包括系统ID、系统名称、系统参数等。
+8. **订单表**(order):存储用户的订单信息,包括订单ID、用户ID、下单时间、订单状态等。
+
+通过合理的数据库设计,能够提高系统数据的组织性和检索性能,便于数据的管理和操作。
+
+## 2.3 其他技术
+
+除了上述两个关键技术外,还会使用到一些其他技术来实现鲜花销售管理系统:
+
+1. **HTML/CSS/JavaScript**:用于前端页面的布局和交互效果,提供用户友好的界面。
+2. **jQuery**:一个轻量级的JavaScript库,简化了JavaScript的开发过程,提供了丰富的插件和UI组件。
+3. **Bootstrap**:一个流行的前端开发框架,提供了响应式布局和丰富的页面组件,简化了前端开发的过程。
+4. **AJAX**:用于实现异步加载数据,提高系统的响应速度和用户体验。
+5. **Git**:用于版本控制和团队协作,方便多人开发时的代码管理和合并。
+
+通过使用这些关键技术和工具,能够使鲜花销售管理系统在功能、性能和用户体验上达到更好的效果。
+
+本章对本毕业设计中用到的关键技术进行了介绍,包括ThinkPHP5框架的特点和优势,数据库设计的重要性,以及其他技术的使用。这些技术将在后续章节中被具体应用于系统的设计和实现中。`
+    }
+)
+
+console.log((await memory.chatHistory.getMessages())[0])
+process.exit()
+const { content } = await llm.call([
+    new SystemMessage(dedent`你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+    我的毕业设计项目是${title}
+    这个项目包含以下功能:${desc}
+    现在我们已经为论文拟好了一个大纲:
+    ${chapters.map((i) => `- ${i.title}`).join("\n")}
+    现在我们来一步一步的编写这篇论文
+    请严格按照markdown格式返回内容`),
+    new HumanMessage(dedent`现在我们来编写第三章系统分析,这一章节内容较多,我们可以分成几个小节来写
+    3.1 系统概述
+    3.2 需求分析
+    3.3 可行性分析
+    3.4 系统流程分析
+    3.5 本章小节
+    现在我们来编写第三章系统分析的第4小节: 3.4 系统流程分析
+    我已为你绘制好了以下几个流程图
+    ${flows
+        .map((i) => {
+            return dedent`- ![${i.name}](${i.url})
+        ${i.desc}`
+        })
+        .join("\n")}
+    请你帮我完成这个小节的内容, 请确保附上我提供的图片`)
+])
+
+console.log(response)

+ 257 - 0
combine_table.mjs

@@ -0,0 +1,257 @@
+import { HumanMessage, SystemMessage } from "langchain/schema"
+import { llm, conversation } from "./llm.mjs"
+import fs from "fs"
+import { createER } from "./er.mjs"
+import { createTable } from "./table.mjs"
+
+const flows = JSON.parse(fs.readFileSync("./flows.json").toString())
+const title = "《thinkphp5鲜花销售管理系统》"
+const desc = `- 管理员:登录、个人中心、用户管理、鲜花分类管理、鲜花信息管理、鲜花信息、用户留言管理、特殊服务管理、系统管理、订单管理。
+- 用户:注册、登录、个人中心、鲜花信息、花语公告、后台管理、购物车、联系客服、我的订单、我的地址、我的收藏。`
+const chapters = [
+    {
+        title: "第一章概述",
+        content: `# 第一章 概述
+
+## 1.1 研究背景
+
+随着互联网的快速发展,电子商务已经成为了现代生活中不可或缺的一部分。鲜花销售作为传统的商业领域之一,也逐渐适应了电子商务的趋势,鲜花销售网站应运而生。然而,现有的鲜花销售网站存在一些问题,例如用户体验差、功能不完善、管理不便等,导致用户体验不佳与业务管理效率低下。
+
+为了解决这些问题,本毕业设计提出了一个基于thinkphp5框架的鲜花销售管理系统,旨在提供一个功能齐全、用户友好且管理便利的鲜花销售平台。
+
+## 1.2 研究目标
+
+本毕业设计的目标是设计和实现一个完整的鲜花销售管理系统,该系统能够提供以下功能:
+- 管理员登录、个人中心、用户管理、鲜花分类管理、鲜花信息管理、用户留言管理、特殊服务管理、系统管理、订单管理等管理功能。
+- 用户注册、登录、个人中心、鲜花信息浏览、花语公告查看、后台管理、购物车操作、联系客服、我的订单管理、地址管理、收藏管理等用户功能。
+
+通过该系统,管理员可以方便地管理鲜花销售业务,用户可以享受到更好的购物体验。
+
+## 1.3 研究方法
+
+本毕业设计将采用以下方法来实现研究目标:
+1. 调研和分析现有的鲜花销售网站,了解其功能和不足之处。
+2. 使用thinkphp5框架进行系统开发,该框架具有良好的开发效率和可维护性。
+3. 进行系统设计和数据库设计,确保系统的可扩展性和性能。
+4. 实现系统功能,并进行系统测试和调优,确保系统的稳定性和性能。
+5. 对系统进行实际应用测试和用户反馈收集,以评估系统的使用效果和满意度。
+
+## 1.4 研究意义
+
+本毕业设计的完成具有以下几个意义:
+1. 提供了一个方便快捷的鲜花销售平台,方便用户进行鲜花订购和管理。
+2. 提升了鲜花销售网站的用户体验,使用户可以更加方便地浏览和购买鲜花。
+3. 提高了鲜花销售平台的管理效率,减少了人力成本和业务管理难度。
+4. 推动了thinkphp5框架在电子商务领域的应用和推广。
+
+通过本毕业设计的研究和实践,将进一步提升对鲜花销售管理系统的理解和应用能力,为相关学科的研究和发展做出贡献。
+
+## 1.5 论文结构
+
+本论文共分为以下几个章节:
+
+- 第一章 概述:介绍本毕业设计的研究背景、目标、方法、意义和论文结构。
+- 第二章 关键技术介绍:介绍论文中用到的关键技术,包括thinkphp5框架、数据库设计等。
+- 第三章 系统分析:对鲜花销售管理系统进行需求分析和功能设计。
+- 第四章 系统设计:详细讨论系统的架构设计和数据库设计。
+- 第五章 系统实现:具体介绍系统的实现过程和关键代码。
+- 第六章 系统测试:对系统进行功能测试和性能测试。
+- 结论:总结全文并提出后续工作的展望。
+- 参考文献:列出本论文中所引用的相关文献。
+- 致谢:对为论文完成提供帮助和支持的人表示感谢。
+
+通过以上结构,全面而系统地介绍论文的研究内容,使读者能够全面了解和理解本毕业设计的研究成果。`
+    },
+    {
+        title: "第二章关键技术介绍",
+        content: `# 第二章 关键技术介绍
+
+在本毕业设计中,我们将使用一些关键技术来实现鲜花销售管理系统。本章将介绍这些关键技术,并说明它们在系统设计和开发中的作用。
+
+## 2.1 ThinkPHP5框架
+
+ThinkPHP5是一款基于PHP的开源Web应用框架,由于其高效、简便、灵活的特性而被广泛应用于PHP应用程序的开发。本项目选择ThinkPHP5作为开发框架,主要原因有以下几点:
+
+1. **高效性**:ThinkPHP5采用面向对象的开发方式,拥有一套强大且高效的MVC架构,能够快速进行开发。框架根据数据和控制器之间的映射关系,自动生成了一套高效且优雅的URL规则。
+
+2. **灵活性**:ThinkPHP5提供了丰富的扩展机制和插件支持,可以方便地进行二次开发和功能扩展。同时,框架还支持多种视图引擎,如PHP原生模板引擎、Smarty模板引擎等,开发者可以根据需要选择最合适的视图引擎。
+
+3. **安全性**:ThinkPHP5内置了一系列安全机制,如XSS过滤、CSRF防护、SQL注入防范等,能够有效保护网站的安全性。此外,框架还支持对用户输入进行验证和过滤,防止恶意用户的攻击。
+
+4. **易学易用**:ThinkPHP5的代码结构清晰、规范明确,具有很好的可读性和可维护性。同时,框架还提供了丰富的文档和示例,方便开发者学习和使用。
+
+## 2.2 数据库设计
+
+在鲜花销售管理系统中,使用数据库存储和管理数据是必不可少的。在本项目中,我们将使用MySQL作为数据库管理系统,进行数据的存储和操作。
+
+数据库的设计是系统中最为重要的一环,合理的数据库设计能够提高系统的性能和扩展性。我们将设计以下几个主要的数据库表:
+
+1. **管理员表**(admin):存储系统管理员的相关信息,包括管理员ID、用户名、密码等。
+2. **用户表**(user):存储用户的注册信息,包括用户ID、用户名、密码、手机号码等。
+3. **鲜花分类表**(flower_category):存储鲜花的分类信息,包括分类ID、分类名称、分类描述等。
+4. **鲜花信息表**(flower):存储鲜花的详细信息,包括鲜花ID、鲜花名称、鲜花价格、鲜花分类ID等。
+5. **用户留言表**(message):存储用户留言信息,包括留言ID、用户ID、留言内容、留言时间等。
+6. **特殊服务表**(special_service):存储特殊服务的信息,包括服务ID、服务名称、服务价格等。
+7. **系统设置表**(system_config):存储系统的相关设置,包括系统ID、系统名称、系统参数等。
+8. **订单表**(order):存储用户的订单信息,包括订单ID、用户ID、下单时间、订单状态等。
+
+通过合理的数据库设计,能够提高系统数据的组织性和检索性能,便于数据的管理和操作。
+
+## 2.3 其他技术
+
+除了上述两个关键技术外,还会使用到一些其他技术来实现鲜花销售管理系统:
+
+1. **HTML/CSS/JavaScript**:用于前端页面的布局和交互效果,提供用户友好的界面。
+2. **jQuery**:一个轻量级的JavaScript库,简化了JavaScript的开发过程,提供了丰富的插件和UI组件。
+3. **Bootstrap**:一个流行的前端开发框架,提供了响应式布局和丰富的页面组件,简化了前端开发的过程。
+4. **AJAX**:用于实现异步加载数据,提高系统的响应速度和用户体验。
+5. **Git**:用于版本控制和团队协作,方便多人开发时的代码管理和合并。
+
+通过使用这些关键技术和工具,能够使鲜花销售管理系统在功能、性能和用户体验上达到更好的效果。
+
+本章对本毕业设计中用到的关键技术进行了介绍,包括ThinkPHP5框架的特点和优势,数据库设计的重要性,以及其他技术的使用。这些技术将在后续章节中被具体应用于系统的设计和实现中。`
+    },
+    {
+        title: "第三章系统分析",
+        sections: [
+            {
+                title: "3.1 系统概述"
+            },
+            {
+                title: "3.2 需求分析"
+            },
+            {
+                title: "3.3 可行性分析"
+            },
+            {
+                title: "3.4 系统修成分析"
+            },
+            {
+                title: "3.5 本章小节"
+            }
+        ]
+    },
+    {
+        title: "第四章系统设计",
+        sections: [
+            { title: "4.1 系统基本结构设计" },
+            {
+                title: "4.2 数据库设计",
+                sections: [{ title: "4.2.1 数据库E-R图设计" }, { title: "4.2.2 数据库表设计" }]
+            },
+            { title: "4.3 本章小节" }
+        ]
+    },
+    {
+        title: "第五章系统实现"
+    },
+    {
+        title: "第六章系统测试"
+    },
+    {
+        title: "结论"
+    },
+    {
+        title: "参考文献"
+    },
+    {
+        title: "致谢"
+    }
+]
+const { chain, memory } = conversation(`你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+我的毕业设计项目是${title}
+这个项目包含以下功能:${desc}
+现在我们已经为论文拟好了一个大纲:
+${chapters.map((i) => `- ${i.title}`).join("\n")}
+现在我们来一步一步的编写这篇论文
+请严格按照markdown格式返回内容`)
+
+memory.saveContext(
+    { input: "现在我们来编写第二章关键技术介绍" },
+    {
+        response: `# 第二章 关键技术介绍
+
+在本毕业设计中,我们将使用一些关键技术来实现鲜花销售管理系统。本章将介绍这些关键技术,并说明它们在系统设计和开发中的作用。
+
+## 2.1 ThinkPHP5框架
+
+ThinkPHP5是一款基于PHP的开源Web应用框架,由于其高效、简便、灵活的特性而被广泛应用于PHP应用程序的开发。本项目选择ThinkPHP5作为开发框架,主要原因有以下几点:
+
+1. **高效性**:ThinkPHP5采用面向对象的开发方式,拥有一套强大且高效的MVC架构,能够快速进行开发。框架根据数据和控制器之间的映射关系,自动生成了一套高效且优雅的URL规则。
+
+2. **灵活性**:ThinkPHP5提供了丰富的扩展机制和插件支持,可以方便地进行二次开发和功能扩展。同时,框架还支持多种视图引擎,如PHP原生模板引擎、Smarty模板引擎等,开发者可以根据需要选择最合适的视图引擎。
+
+3. **安全性**:ThinkPHP5内置了一系列安全机制,如XSS过滤、CSRF防护、SQL注入防范等,能够有效保护网站的安全性。此外,框架还支持对用户输入进行验证和过滤,防止恶意用户的攻击。
+
+4. **易学易用**:ThinkPHP5的代码结构清晰、规范明确,具有很好的可读性和可维护性。同时,框架还提供了丰富的文档和示例,方便开发者学习和使用。
+
+## 2.2 数据库设计
+
+在鲜花销售管理系统中,使用数据库存储和管理数据是必不可少的。在本项目中,我们将使用MySQL作为数据库管理系统,进行数据的存储和操作。
+
+数据库的设计是系统中最为重要的一环,合理的数据库设计能够提高系统的性能和扩展性。我们将设计以下几个主要的数据库表:
+
+1. **管理员表**(admin):存储系统管理员的相关信息,包括管理员ID、用户名、密码等。
+2. **用户表**(user):存储用户的注册信息,包括用户ID、用户名、密码、手机号码等。
+3. **鲜花分类表**(flower_category):存储鲜花的分类信息,包括分类ID、分类名称、分类描述等。
+4. **鲜花信息表**(flower):存储鲜花的详细信息,包括鲜花ID、鲜花名称、鲜花价格、鲜花分类ID等。
+5. **用户留言表**(message):存储用户留言信息,包括留言ID、用户ID、留言内容、留言时间等。
+6. **特殊服务表**(special_service):存储特殊服务的信息,包括服务ID、服务名称、服务价格等。
+7. **系统设置表**(system_config):存储系统的相关设置,包括系统ID、系统名称、系统参数等。
+8. **订单表**(order):存储用户的订单信息,包括订单ID、用户ID、下单时间、订单状态等。
+
+通过合理的数据库设计,能够提高系统数据的组织性和检索性能,便于数据的管理和操作。
+
+## 2.3 其他技术
+
+除了上述两个关键技术外,还会使用到一些其他技术来实现鲜花销售管理系统:
+
+1. **HTML/CSS/JavaScript**:用于前端页面的布局和交互效果,提供用户友好的界面。
+2. **jQuery**:一个轻量级的JavaScript库,简化了JavaScript的开发过程,提供了丰富的插件和UI组件。
+3. **Bootstrap**:一个流行的前端开发框架,提供了响应式布局和丰富的页面组件,简化了前端开发的过程。
+4. **AJAX**:用于实现异步加载数据,提高系统的响应速度和用户体验。
+5. **Git**:用于版本控制和团队协作,方便多人开发时的代码管理和合并。
+
+通过使用这些关键技术和工具,能够使鲜花销售管理系统在功能、性能和用户体验上达到更好的效果。
+
+本章对本毕业设计中用到的关键技术进行了介绍,包括ThinkPHP5框架的特点和优势,数据库设计的重要性,以及其他技术的使用。这些技术将在后续章节中被具体应用于系统的设计和实现中。`
+    }
+)
+const er = await createER(title, desc)
+const table = await createTable(title, desc)
+// fs.writeFileSync("./er.json", JSON.stringify(er, null, 4))
+// fs.writeFileSync("./table.json", JSON.stringify(table, null, 4))
+// const er = JSON.parse(fs.readFileSync("./er.json").toString())
+// const table = JSON.parse(fs.readFileSync("./table.json").toString())
+const i = 3
+const j = 1
+const { response } = await chain.call({
+    input: `现在我们来编写第四章系统设计,这一章节内容较多,我们可以分成几个小节来写:
+${chapters[i].sections.map((i) => `- ${i.title}`).join("\n")}
+现在我们来编写第四章系统设计的第${j + 1}小节: ${chapters[i].sections[j].title}
+本小节分为以下几个部分:
+${chapters[i].sections[j].sections.map((i) => `- ${i.title}`).join("\n")}
+ 
+我已为你绘制好了以下几个E-R图图
+${er
+    .map((i) => {
+        return `- ![${i.name}E-R图](${i.url})
+${i.desc}`
+    })
+    .join("\n")}
+
+这是我为你提供的数据库表:
+
+${table
+    .map((i) => {
+        return `- ${i.name}表:
+${i.desc}
+`
+    })
+    .join("\n\n")}
+
+请你帮我编写第${j + 1}小节: ${chapters[i].sections[j].title}的内容, 请确保附上我提供的E-R图和数据库表`
+})
+
+console.log(response)
+fs.writeFileSync("./response.md", response)

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 18 - 0
er.json


+ 73 - 0
er.mjs

@@ -0,0 +1,73 @@
+import { HumanMessage } from "langchain/schema"
+import { StructuredOutputParser } from "langchain/output_parsers"
+import { conversation, llm, logger } from "./llm.mjs"
+import { z } from "zod"
+import { uploadUml } from "./upload.mjs"
+import pRetry from "p-retry"
+
+async function genPlotNames(title, desc) {
+    const scheme = StructuredOutputParser.fromZodSchema(
+        z.array(
+            z.object({
+                title: z.string().describe("E-R图名称")
+            })
+        )
+    )
+
+    const res = await llm.call([
+        new HumanMessage(`${scheme.getFormatInstructions()}
+------
+你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+我的毕业设计项目是${title}
+这个项目包含以下功能:
+${desc}
+现在我们需要开始为这个系统设计数据库,首先我们分析一下系统中有哪些实体,我们需要绘制以下五个主要E-R图:`)
+    ])
+    return await scheme.parse(res.content)
+}
+
+async function plotER(title, desc, name) {
+    const { chain } = conversation(`你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+我的毕业设计项目是${title}
+这个项目包含以下功能:
+${desc}`)
+    const { response: descr } = await chain.call({
+        input: `现在我们需要在论文中附上一个E-R图:${name},请你先用文字描述一下这个实体关系`
+    })
+    let { response: code } = await chain.call({
+        input: `现在根据文字描述将它转换为plantuml语言
+这是一个plantuml描述E-R图的示例:
+\`\`\`
+@startuml 示例E-R图
+entity 客户  {
+name
+}
+
+entity 订单  {
+date
+}
+
+entity 订单详情 {
+price
+}
+
+客户 -right-o{ 订单
+订单 ||-right-|{ 订单详情
+
+@enduml
+\`\`\``
+    })
+    code = /\`\`\`(?:plantuml)?([\s\S]+)\`\`\`/.exec(code)[1]
+    const url = await uploadUml(code)
+    return {
+        name,
+        desc: descr,
+        url
+    }
+}
+
+async function createER(title, desc) {
+    const list = await pRetry(() => genPlotNames(title, desc), { retries: 5 })
+    return await Promise.all(list.map((item) => pRetry(() => plotER(title, desc, item.title), { retries: 5 })))
+}
+export { createER }

+ 70 - 0
flow.mjs

@@ -0,0 +1,70 @@
+import { HumanMessage } from "langchain/schema"
+import { StructuredOutputParser } from "langchain/output_parsers"
+import { conversation, llm, logger } from "./llm.mjs"
+import { z } from "zod"
+import { uploadUml } from "./upload.mjs"
+import pRetry from "p-retry"
+
+async function genPlotNames(title, desc) {
+    const scheme = StructuredOutputParser.fromZodSchema(
+        z.array(
+            z.object({
+                title: z.string().describe("流程图名称")
+            })
+        )
+    )
+    const { content } = await llm.call([
+        new HumanMessage(`${scheme.getFormatInstructions()}
+------
+你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+我的毕业设计项目是${title}
+这个项目包含以下功能:
+${desc}
+现在我们分析一下论文中需要用到的流程图,我们需要绘制以下五个主要流程图:`)
+    ])
+    return await scheme.parse(content)
+}
+
+async function plotFlow(title, desc, name) {
+    const { chain } = conversation(`你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+我的毕业设计项目是${title}
+这个项目包含以下功能:
+${desc}`)
+    const { response: descr } = await chain.call({
+        input: `现在我们需要在论文中附上${name},请你先用文字描述一下这个流程`
+    })
+    let { response: code } = await chain.call({
+        input: `现在根据文字描述将它转换为plantuml语言
+这是一个plantuml流程图的示例:
+\`\`\`
+@startuml 名称
+
+start
+
+if (Graphviz installed?) then (yes)
+:process all\ndiagrams;
+else (no)
+:process only
+__sequence__ and __activity__ diagrams;
+endif
+
+stop
+
+@enduml
+
+\`\`\``
+    })
+    code = /\`\`\`(?:plantuml)?([\s\S]+)\`\`\`/.exec(code)[1]
+    const url = await uploadUml(code)
+    return {
+        name,
+        desc: descr,
+        url
+    }
+}
+
+async function createFlow(title, desc) {
+    const list = await pRetry(() => genPlotNames(title, desc), { retries: 5 })
+    return await Promise.all(list.map((item) => pRetry(() => plotFlow(title, desc, item.title), { retries: 5 })))
+}
+export { createFlow }

+ 27 - 0
flows.json

@@ -0,0 +1,27 @@
+[
+    {
+        "name": "管理员登录流程图",
+        "desc": "管理员登录流程如下:\n\n1. 用户打开系统登录页面,输入管理员用户名和密码。\n2. 系统验证管理员输入的用户名和密码是否正确。\n3. 如果用户名和密码正确,则系统登录成功,跳转至管理员个人中心页面。\n4. 如果用户名和密码不正确,则系统提示用户重新输入。\n5. 管理员可以在个人中心页面进行相关操作,如用户管理、鲜花分类管理、鲜花信息管理、用户留言管理、特殊服务管理、系统管理及订单管理等。\n6. 管理员完成相关操作后,可以选择退出系统或者继续进行其他操作。\n\n以上即是管理员登录流程的简要描述。在论文中可以进一步完善流程图的具体细节,包括输入输出、条件判断、流程控制等等。",
+        "url": "https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698831387558.png"
+    },
+    {
+        "name": "用户注册流程图",
+        "desc": "用户注册流程如下:\n\n1. 用户进入鲜花销售管理系统首页,点击注册按钮。\n\n2. 系统显示注册页面,用户填写必要信息,如用户名、密码、邮箱等,并完成验证码验证。\n\n3. 用户点击提交按钮,系统对用户输入的信息进行验证。\n\n4. 如果用户输入的信息不符合要求,系统会给出相应的提示,并要求用户重新填写。\n\n5. 如果用户输入的信息符合要求,系统将保存用户的注册信息,并给用户发送一封确认邮件。\n\n6. 用户收到确认邮件后,点击邮件中的链接完成邮箱验证。\n\n7. 邮箱验证成功后,系统显示注册成功的提示信息,并自动跳转到登录页面。\n\n8. 用户可以使用注册时填写的用户名和密码登录系统。\n\n9. 登录成功后,用户可以访问个人中心页面,查看和修改个人信息。\n\n以上便是用户注册的基本流程。在实际开发中,还可以添加更多的功能和验证措施,以提高系统的安全性和用户体验。下面我将为您绘制一个用户注册的流程图。",
+        "url": "https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698831392132.png"
+    },
+    {
+        "name": "鲜花分类管理流程图",
+        "desc": "鲜花分类管理流程主要涉及管理员对于鲜花分类信息的管理和维护。以下是该流程的文字描述:\n\n1. 管理员登录系统后,进入个人中心,可以选择鲜花分类管理功能。\n\n2. 进入鲜花分类管理界面,管理员可以查看当前已有的鲜花分类列表,并进行相关操作。\n\n3. 如果管理员需要添加新的鲜花分类,可以点击添加按钮,进入添加鲜花分类界面。\n\n4. 在添加界面中,管理员需要填写鲜花分类的名称、描述等基本信息,并可以选择适用的地区和应用范围。\n\n5. 添加完毕后,管理员可以点击保存按钮,系统会进行验证,确保填写的信息完整且合法。\n\n6. 如果填写的信息有误,系统会给出相应提示,管理员需要进行修改。\n\n7. 如果填写的信息无误,系统会将新的鲜花分类保存至数据库,并提示管理员添加成功。\n\n8. 在鲜花分类管理界面,管理员可以对已有的鲜花分类进行编辑和删除操作。\n\n9. 管理员可以选择要编辑的鲜花分类,进入编辑界面进行相关修改。\n\n10. 在编辑界面中,管理员可以修改鲜花分类的名称、描述和其他相关信息,并进行保存操作。\n\n11. 如果管理员需要删除某个鲜花分类,可以选择要删除的鲜花分类,并点击删除按钮。\n\n12. 系统会弹出确认提示框,管理员需要确认是否删除该鲜花分类。\n\n13. 如果管理员确认删除,系统会将该鲜花分类从数据库中删除,并给出删除成功的提示。\n\n14. 管理员可以根据需要,进行查找、排序和筛选等操作,以便更好地管理鲜花分类信息。\n\n15. 整个鲜花分类管理流程完成后,管理员可以选择返回上一级功能或退出系统。\n\n以上为鲜花分类管理流程的文字描述,接下来可以将其转化为流程图形式插入论文中。",
+        "url": "https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698831404435.png"
+    },
+    {
+        "name": "用户购物流程图",
+        "desc": "用户购物流程大致如下:\n\n1. 用户注册并登录系统。\n2. 用户浏览鲜花信息或搜索相关鲜花。\n3. 用户选择心仪的鲜花并添加到购物车。\n4. 用户可以在购物车中修改鲜花数量或删除不需要的物品。\n5. 用户确认购物车中的商品和数量,并选择配送地址。\n6. 用户选择支付方式(如在线支付、货到付款等)。\n7. 用户提交订单并完成付款(若选择在线支付)。\n8. 系统生成订单并发送确认邮件给用户,同时更新库存信息。\n9. 用户可以在个人中心中查看订单状态和订单详情。\n10. 用户等待订单发货,或联系客服咨询。\n11. 鲜花配送完成后,用户收到订单并确认收货。\n12. 用户可以对购买的鲜花进行评价或留言。\n13. 用户可以在个人中心中管理自己的收货地址和收藏清单。\n\n这是一个简单的用户购物流程,其中涉及到了用户的注册、登录、浏览商品、下单支付、查看订单等环节。改进和扩展该流程可以提升用户体验,如增加购物优惠券、积分兑换等功能。",
+        "url": "https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698831394805.png"
+    },
+    {
+        "name": "订单管理流程图",
+        "desc": "订单管理流程如下:\n\n1. 用户浏览鲜花信息,选择心仪的商品,并加入购物车。\n\n2. 用户进入购物车页面,确认商品信息和数量,可以进行修改或删除操作。\n\n3. 用户选择结算,进入订单确认页面。\n\n4. 用户填写收货地址、联系方式等相关信息,确认订单细节。\n\n5. 用户选择支付方式,并完成支付。\n\n6. 系统生成订单号,并将订单信息保存至数据库。\n\n7. 管理员在后台系统中查看新生成的订单。\n\n8. 管理员确认订单信息,进行订单处理操作,如审核支付情况、确认库存情况。\n\n9. 如果订单需要特殊服务(如包装、配送等),管理员进行相应处理。\n\n10. 管理员将订单状态更新至已发货或已完成,同时更新库存信息。\n\n11. 用户可以在个人中心或订单管理页面查看订单状态和物流信息。\n\n12. 用户确认收货后,可以对购买的商品进行评价,系统更新评价信息。\n\n13. 管理员进行售后服务,处理用户的退货、换货、投诉等申请。\n\n14. 系统根据订单状态和售后服务情况进行统计和分析,提供数据报表给管理员参考。\n\n15. 订单管理流程结束。\n\n这个流程涵盖了用户下单、管理员处理订单、用户收货和评价、售后服务等关键步骤,保证了订单的正常流转和客户满意度的提升。接下来,我们将根据这个流程进行流程图的绘制。",
+        "url": "https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698831397114.png"
+    }
+]

+ 101 - 0
index.ts

@@ -0,0 +1,101 @@
+import { AIMessage, HumanMessage } from "langchain/schema";
+import { StructuredOutputParser } from "langchain/output_parsers";
+import { z } from "zod";
+import { PromptTemplate } from "langchain/prompts";
+import { llm, logger } from "./llm";
+
+async function main() {
+    const res = await llm.call([
+        new HumanMessage(`我正在设计一个thinkphp5鲜花销售管理系统
+这个项目包含以下功能:
+- 管理员:登录、个人中心、用户管理、鲜花分类管理、鲜花信息管理、鲜花信息、用户留言管理、特殊服务管理、系统管理、订单管理。
+- 用户:注册、登录、个人中心、鲜花信息、花语公告、后台管理、购物车、联系客服、我的订单、我的地址、我的收藏。
+
+请帮我设计这个系统的数据库表结构`),
+        new AIMessage(`我们一步一步的来设计这个系统的数据库表结构。`),
+        new AIMessage(`首先,我们需要两个主要的表,一个是用户表,一个是鲜花表。
+
+1. 用户表(user):
+   - id:用户id(主键)
+   - username:用户名
+   - password:密码
+   - email:邮箱
+   - phone:手机号码
+   - created_at:创建时间
+   - updated_at:更新时间
+
+2. 鲜花表(flower):
+   - id:鲜花id(主键)
+   - name:鲜花名称
+   - price:鲜花价格
+   - image:鲜花图片
+   - description:鲜花描述
+   - category_id:鲜花分类id
+   - created_at:创建时间
+   - updated_at:更新时间
+
+接下来,我们需要几个中间表来处理多对多关系。
+
+3. 鲜花分类表(category):
+   - id:分类id(主键)
+   - name:分类名称
+   - created_at:创建时间
+   - updated_at:更新时间
+
+4. 用户收藏表(user_favorite):
+   - user_id:用户id
+   - flower_id:鲜花id
+
+5. 用户地址表(user_address):
+   - id:地址id(主键)
+   - user_id:用户id
+   - address:地址
+   - created_at:创建时间
+   - updated_at:更新时间
+
+6. 用户留言表(user_message):
+   - id:留言id(主键)
+   - user_id:用户id
+   - content:留言内容
+   - created_at:创建时间
+   - updated_at:更新时间
+
+7. 特殊服务表(special_service):
+   - id:服务id(主键)
+   - name:服务名称
+   - price:服务价格
+   - created_at:创建时间
+   - updated_at:更新时间
+
+8. 购物车表(shopping_cart):
+   - id:购物车id(主键)
+   - user_id:用户id
+   - flower_id:鲜花id
+   - quantity:数量
+   - created_at:创建时间
+   - updated_at:更新时间
+
+9. 订单表(order):
+   - id:订单id(主键)
+   - user_id:用户id
+   - total_price:总价格
+   - created_at:创建时间
+   - updated_at:更新时间
+
+10. 订单详情表(order_detail):
+    - id:详情id(主键)
+    - order_id:订单id
+    - flower_id:鲜花id
+    - quantity:数量
+    - created_at:创建时间
+    - updated_at:更新时间
+
+这样,我们就设计了一个基本的ThinkPHP5鲜花销售管理系统的数据库表结构。请根据自己的实际需求来调整和添加必要的字段。`),
+        new HumanMessage(
+            `现在根据这个表结构,我们来绘制一个ER图,我知道你可能无法直接绘制,但是我们可以利用一些工具来帮助我们绘制,比如说PlantUML。现在请你使用PlantUML语言来描述这个ER图。`
+        ),
+    ]);
+    logger.log(res.content);
+}
+
+main();

+ 65 - 0
llm.mjs

@@ -0,0 +1,65 @@
+import { ChatOpenAI } from "langchain/chat_models/openai"
+import { CallbackManager } from "langchain/callbacks"
+import log4js from "log4js"
+import { ChatPromptTemplate, MessagesPlaceholder } from "langchain/prompts"
+import dedent from "dedent"
+import { ConversationChain } from "langchain/chains"
+import { BufferMemory, BufferWindowMemory } from "langchain/memory"
+
+const logger = log4js.getLogger("peper-gen")
+logger.level = "debug"
+const usage = { completionTokens: 0, promptTokens: 0, totalTokens: 0 }
+const llm = new ChatOpenAI({
+    openAIApiKey: "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",
+    modelName: "gpt-3.5-turbo-16k",
+    timeout: 1000 * 60 * 5,
+    callbackManager: CallbackManager.fromHandlers({
+        async handleLLMStart(llm, prompts) {
+            logger.log(`[LLM Start]LLM: ${JSON.stringify(llm)}`)
+            logger.log(`['LLM Start]Prompts: ${prompts.join("\n")}`)
+        },
+        async handleLLMEnd(output) {
+            logger.log(
+                `[LLM End]${output.generations
+                    .reduce((acc, cur) => acc.concat(cur), [])
+                    .map((i) => i.text)
+                    .join("\n")}`
+            )
+            logger.log(`[LLM End]${JSON.stringify(output.llmOutput)}`)
+            usage.completionTokens += output.llmOutput.tokenUsage.completionTokens
+            usage.promptTokens += output.llmOutput.tokenUsage.promptTokens
+            usage.totalTokens += output.llmOutput.tokenUsage.totalTokens
+        },
+        async handleLLMError(error) {
+            logger.error(error)
+        }
+    }),
+    onFailedAttempt(error) {
+        logger.error(error)
+    }
+
+    // configuration: {
+    //     baseURL: "https://openai.c8c.top/v1",
+    // },
+})
+
+function conversation(system) {
+    const chatPrompt = ChatPromptTemplate.fromMessages([
+        ["system", system],
+        new MessagesPlaceholder("history"),
+        ["human", "{input}"]
+    ])
+    const memory = new BufferWindowMemory({
+        k: 4,
+        memoryKey: "history",
+        returnMessages: true
+    })
+    const chain = new ConversationChain({
+        memory: memory,
+        prompt: chatPrompt,
+        llm: llm
+    })
+    return { memory, chain }
+}
+
+export { llm, logger, conversation, usage }

+ 161 - 0
outline.mjs

@@ -0,0 +1,161 @@
+import { AIMessage, HumanMessage, SystemMessage } from "langchain/schema"
+import { StructuredOutputParser } from "langchain/output_parsers"
+import { z } from "zod"
+import { PromptTemplate } from "langchain/prompts"
+import { llm, logger, conversation, usage } from "./llm.mjs"
+import fs from "fs"
+import { createFlow } from "./flow.mjs"
+import { createER } from "./er.mjs"
+import { createTable } from "./table.mjs"
+const chapters = [
+    {
+        title: "第一章概述"
+    },
+    {
+        title: "第二章关键技术介绍"
+    },
+    {
+        title: "第三章系统分析",
+        sections: [
+            {
+                title: "3.1 系统概述"
+            },
+            {
+                title: "3.2 需求分析"
+            },
+            {
+                title: "3.3 可行性分析"
+            },
+            {
+                title: "3.4 系统流程分析"
+            },
+            {
+                title: "3.5 本章小节"
+            }
+        ]
+    },
+    {
+        title: "第四章系统设计",
+        sections: [
+            { title: "4.1 系统基本结构设计" },
+            {
+                title: "4.2 数据库设计",
+                sections: [{ title: "4.2.1 数据库E-R图设计" }, { title: "4.2.2 数据库表设计" }]
+            },
+            { title: "4.3 本章小节" }
+        ]
+    },
+    {
+        title: "第五章系统实现"
+    },
+    {
+        title: "第六章系统测试"
+    },
+    {
+        title: "结论"
+    },
+    {
+        title: "参考文献"
+    },
+    {
+        title: "致谢"
+    }
+]
+const title = "《thinkphp5鲜花销售管理系统》"
+const desc = `- 管理员:登录、个人中心、用户管理、鲜花分类管理、鲜花信息管理、鲜花信息、用户留言管理、特殊服务管理、系统管理、订单管理。
+- 用户:注册、登录、个人中心、鲜花信息、花语公告、后台管理、购物车、联系客服、我的订单、我的地址、我的收藏。`
+let paper = fs.createWriteStream("./paper.md")
+async function main(title, desc) {
+    const startTime = Date.now()
+    const { chain, memory } = conversation(`你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+我的毕业设计项目是${title}
+这个项目包含以下功能:${desc}
+现在我们已经为论文拟好了一个大纲:
+${chapters.map((i) => `- ${i.title}`).join("\n")}
+现在我们来一步一步的编写这篇论文
+请严格按照markdown格式返回内容`)
+
+    for (let i = 0; i < chapters.length; i++) {
+        if (i === 2) {
+            for (let j = 0; j < chapters[i].sections.length; j++) {
+                let input = ""
+                if (j === 0) {
+                    input += `现在我们来编写第三章系统分析,这一章节内容较多,我们可以分成几个小节来写:
+${chapters[i].sections.map((i) => i.title).join("\n")}\n`
+                }
+                input += `现在我们来编写${chapters[i].title}的第${j + 1}小节: ${chapters[i].sections[j].title}`
+
+                if (j === 3) {
+                    const flows = await createFlow(title, desc)
+                    input += `\n我已为你绘制好了以下几个流程图       
+${flows
+    .map((i) => {
+        return `- ![${i.name}](${i.url})
+${i.desc}`
+    })
+    .join("\n\n")}
+请你帮我完成第${j + 1}小节: ${chapters[i].sections[j].title}的内容,请确保附上我提供的图片`
+                }
+                let { response } = await chain.call({
+                    input: input
+                })
+                if (j !== 0) {
+                    response = response.replace(/# ?第三章 ?系统分析\n/, "")
+                }
+                paper.write("\n\n" + response)
+            }
+        } else if (i === 3) {
+            for (let j = 0; j < chapters[i].sections.length; j++) {
+                let input = ""
+                if (j === 0) {
+                    input += `现在我们来编写第四章系统设计,这一章节内容较多,我们可以分成几个小节来写:
+${chapters[i].sections.map((i) => i.title).join("\n")}\n`
+                }
+                input += `现在我们来编写${chapters[i].title}的第${j + 1}小节: ${chapters[i].sections[j].title}`
+
+                if (j === 1) {
+                    const er = await createER(title, desc)
+                    const table = await createTable(title, desc)
+                    input += `\n本小节分为以下几个部分:
+${chapters[i].sections[j].sections.map((i) => `- ${i.title}`).join("\n")}
+
+我已为你绘制好了以下几个E-R图图
+${er
+    .map((i) => {
+        return `- ![${i.name}E-R图](${i.url})
+${i.desc}`
+    })
+    .join("\n")}
+
+这是我为你提供的数据库表:
+
+${table
+    .map((i) => {
+        return `- ${i.name}表:
+${i.desc}
+`
+    })
+    .join("\n\n")}
+
+请你帮我编写第${j + 1}小节: ${chapters[i].sections[j].title}的内容, 请确保附上我提供的E-R图和数据库表`
+                }
+                let { response } = await chain.call({
+                    input: input
+                })
+                if (j !== 0) {
+                    response = response.replace(/# ?第四章 ?系统设计\n/, "")
+                }
+                paper.write("\n\n" + response)
+            }
+        } else {
+            const { response } = await chain.call({
+                input: `现在我们来编写${chapters[i].title}`
+            })
+            paper.write("\n\n" + response)
+        }
+    }
+
+    console.log(`usage: ${JSON.stringify(usage)}`)
+    console.log(`time: ${(Date.now() - startTime) / 1000}s`)
+}
+main(title, desc)

+ 19 - 0
package.json

@@ -0,0 +1,19 @@
+{
+  "dependencies": {
+    "@aws-sdk/client-s3": "^3.440.0",
+    "@aws-sdk/lib-storage": "^3.441.0",
+    "dedent": "^1.5.1",
+    "execa": "^8.0.0",
+    "langchain": "^0.0.174",
+    "log4js": "^6.9.1",
+    "node-plantuml": "^0.9.0",
+    "p-retry": "^6.1.0",
+    "stream-buffers": "^3.0.2",
+    "ts-node": "^10.9.1",
+    "typescript": "^5.2.2"
+  },
+  "devDependencies": {
+    "@trivago/prettier-plugin-sort-imports": "^4.2.1"
+  },
+  "type": "module"
+}

BIN
paper.docx


+ 0 - 0
paper.md


BIN
plantuml-1.2023.12.jar


+ 3 - 0
plantuml.cfg

@@ -0,0 +1,3 @@
+!theme materia
+skinparam dpi 72
+skinparam backgroundColor #FFFFFF

+ 124 - 0
react.ts

@@ -0,0 +1,124 @@
+import { AgentExecutor, ChatAgentOutputParser } from "langchain/agents";
+import { formatLogToString } from "langchain/agents/format_scratchpad/log";
+import { OpenAI } from "langchain/llms/openai";
+import { ChatPromptTemplate, PromptTemplate } from "langchain/prompts";
+import { AgentStep } from "langchain/schema";
+import { RunnableSequence } from "langchain/schema/runnable";
+import { SerpAPI } from "langchain/tools";
+import { Calculator } from "langchain/tools/calculator";
+import { renderTextDescription } from "langchain/tools/render";
+import { llm } from "./llm";
+(async function () {
+    /** Create a list of the tools we're providing to the agent */
+    const tools = [
+        new SerpAPI(
+            "03647385acfb9e816d2170d07ae7c84131aa4fb6f732b14ffaa34dc065a2f4f6",
+            {
+                location: "Austin,Texas,United States",
+                hl: "en",
+                gl: "us",
+            }
+        ),
+        new Calculator(),
+    ];
+
+    /**
+     * Define our output parser.
+     * In this case we'll use the default output parser
+     * for chat agents. `ChatAgentOutputParser`
+     */
+    const outputParser = new ChatAgentOutputParser();
+
+    /**
+     * Define our prompts.
+     * For this example we'll use the same default prompts
+     * that the `ChatAgent` class uses.
+     */
+    const PREFIX = `Answer the following questions as best you can. You have access to the following tools:
+{tools}`;
+    const FORMAT_INSTRUCTIONS = `The way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB
+Specifically, this $JSON_BLOB should have a "action" key (with the name of the tool to use) and a "action_input" key (with the input to the tool going here). 
+The $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:
+
+\`\`\`
+{{
+  "action": "calculator",
+  "action_input": "1 + 2"
+}}
+\`\`\`
+
+ALWAYS use the following format:
+
+Question: the input question you must answer
+Thought: you should always think about what to do
+Action: 
+\`\`\`
+$JSON_BLOB
+\`\`\`
+Observation: the result of the action
+... (this Thought/Action/Observation can repeat N times)
+Thought: I now know the final answer
+Final Answer: the final answer to the original input question`;
+    const SUFFIX = `Begin! Reminder to always use the exact characters \`Final Answer\` when responding.
+Thoughts: {agent_scratchpad}`;
+    const DEFAULT_HUMAN_MESSAGE_TEMPLATE = "Question: {input}";
+    /**
+     * Now we can combine all our prompts together, passing
+     * in the required input variables.
+     */
+    // The `renderTextDescription` util function combines
+    // all tool names and descriptions into a single string.
+    const toolStrings = renderTextDescription(tools);
+    const prefixTemplate = PromptTemplate.fromTemplate(PREFIX);
+    const formattedPrefix = await prefixTemplate.format({ tools: toolStrings });
+    const template = [formattedPrefix, FORMAT_INSTRUCTIONS, SUFFIX].join(
+        "\n\n"
+    );
+    // Add the template, and human message template to an array of messages.
+    const prompt = ChatPromptTemplate.fromMessages([
+        ["ai", template],
+        ["human", DEFAULT_HUMAN_MESSAGE_TEMPLATE],
+    ]);
+
+    /**
+     * Combine all our previous steps into a runnable agent.
+     * We'll use a `RunnableSequence` which takes in an input,
+     * and the previous steps. We then format the steps into a
+     * string so it can be passed to the prompt.
+     */
+    const runnableAgent = RunnableSequence.from([
+        {
+            input: (i: { input: string; steps: AgentStep[] }) => i.input,
+            agent_scratchpad: (i: { input: string; steps: AgentStep[] }) =>
+                formatLogToString(i.steps),
+        },
+        prompt,
+        llm,
+        outputParser,
+    ]);
+
+    /**
+     * The last step is to pass our agent into the
+     * AgentExecutor along with the tools.
+     * The AgentExecutor is responsible for actually
+     * running the iterations.
+     */
+    const executor = AgentExecutor.fromAgentAndTools({
+        agent: runnableAgent,
+        tools,
+    });
+
+    console.log("Loaded agent executor");
+
+    const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
+    console.log(`Calling agent with prompt: ${input}`);
+    const result = await executor.call({ input });
+    console.log(result);
+})();
+/**
+Loaded agent executor
+Calling agent with prompt: Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?
+{
+  output: "Jason Sudeikis is Olivia Wilde's boyfriend and his current age raised to the 0.23 power is approximately 1.7."
+}
+ */

+ 165 - 0
response.md

@@ -0,0 +1,165 @@
+## 4.2 数据库设计
+
+本节将对《thinkphp5鲜花销售管理系统》的数据库设计进行详细介绍,包括数据库的E-R图设计和数据库表设计。
+
+### 4.2.1 数据库E-R图设计
+
+以下是鲜花销售管理系统的数据库E-R图设计:
+
+#### 管理员E-R图
+
+![管理员E-R图](https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698920235964.png)
+
+E-R图展示了管理员实体与其他实体的关系。管理员可以登录系统、查看个人信息、管理用户、管理鲜花分类、管理鲜花信息、管理用户留言、管理特殊服务、管理系统配置、管理订单等。管理员实体与其他实体之间的关系包括:
+- 注册表:管理员与注册表之间的关系是一对多的关系,一个管理员可以有多个注册信息。
+- 鲜花分类表:管理员通过鲜花分类表可以管理不同的鲜花分类。
+- 鲜花信息表:管理员通过鲜花信息表可以管理鲜花的详细信息。
+- 用户表:管理员可以管理用户的相关信息。
+- 用户留言表:管理员可以管理用户的留言信息。
+- 特殊服务表:管理员可以管理特殊服务的信息。
+- 系统配置表:管理员可以管理系统的相关配置。
+- 订单表:管理员可以管理用户的订单信息。
+
+#### 用户E-R图
+
+![用户E-R图](https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698920225479.png)
+
+E-R图展示了用户实体与其他实体的关系。用户可以注册账号、登录系统、查看个人信息、浏览鲜花信息、查看花语公告、管理购物车、联系客服、查看订单、管理地址、管理收藏等。用户实体与其他实体之间的关系包括:
+- 注册表:用户与注册表之间的关系是一对多的关系,一个用户可以有多个注册信息。
+- 鲜花信息表:用户可以浏览鲜花的详细信息。
+- 用户留言表:用户可以发表留言并与系统管理员进行沟通。
+- 特殊服务表:用户可以选择并申请特殊服务。
+- 订单表:用户可以查看和管理自己的订单信息。
+- 购物车表:用户可以管理自己的购物车。
+- 联系客服表:用户可以通过联系客服表与客服进行沟通。
+- 我的地址表:用户可以管理自己的地址信息。
+- 我的收藏表:用户可以查看和管理自己的收藏。
+
+#### 鲜花分类E-R图
+
+![鲜花分类E-R图](https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698920225460.png)
+
+E-R图展示了鲜花分类实体与其他实体的关系。鲜花分类实体拥有分类ID和分类名称属性,包含多个下级分类。鲜花分类实体与其他实体之间的关系包括:
+- 一级分类:鲜花分类与自身的关系是一对多关系,一个鲜花分类可以有多个下级分类。
+- 鲜花信息表:鲜花分类与鲜花信息之间的关系是一对多关系,一个鲜花分类可以包含多个鲜花信息。
+
+#### 鲜花信息E-R图
+
+![鲜花信息E-R图](https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698920232153.png)
+
+E-R图展示了鲜花信息实体与其他实体的关系。鲜花信息实体拥有鲜花ID、鲜花名称、鲜花描述、鲜花价格、库存等属性。鲜花信息实体与其他实体之间的关系包括:
+- 鲜花分类表:鲜花信息与鲜花分类之间的关系是多对一的关系,一个鲜花分类可以包含多个鲜花信息。
+- 用户留言表:鲜花信息与用户留言之间的关系是一对多的关系,一个鲜花信息可以有多个用户留言。
+- 特殊服务表:鲜花信息与特殊服务之间的关系是多对多的关系,一个鲜花信息可以有多种特殊服务,一个特殊服务也可以应用于多种鲜花信息。
+- 订单表:鲜花信息与订单之间的关系是一对多的关系,一个鲜花信息可以被多个订单购买。
+
+#### 用户留言E-R图
+
+![用户留言E-R图](https://nebuai.oss-cn-hangzhou.aliyuncs.com/uml/1698920226514.png)
+
+E-R图展示了用户留言实体与其他实体的关系。用户留言实体拥有留言ID、用户ID、留言内容、留言时间等属性。用户留言实体与其他实体之间的关系包括:
+- 用户表:用户留言与用户表之间的关系是一对多的关系,一个用户可以有多个留言。
+- 鲜花信息表:用户留言与鲜花信息表之间的关系是多对一的关系,一个留言可以针对某个鲜花。
+
+### 4.2.2 数据库表设计
+
+#### 管理员表(admin)
+
+| 字段名称   | 类型      | 长度 | 字段说明        | 主键 | 默认值 |
+|------------|-----------|------|-----------------|------|--------|
+| id         | int       |      | 管理员ID         | 是   |        |
+| username   | varchar   | 50   | 用户名           |      |        |
+| password   | varchar   | 50   | 密码             |      |        |
+| email      | varchar   | 100  | 邮箱             |      |        |
+| avatar     | varchar   | 100  | 头像             |      |        |
+| last_login | datetime  |      | 最后登录时间     |      |        |
+| created_at | datetime  |      | 创建时间         |      |        |
+| updated_at | datetime  |      | 更新时间         |      |        |
+
+#### 用户表(user)
+
+| 字段名称        | 数据类型   | 字段长度 | 字段说明                 | 主键 | 默认值 |
+|-----------------|------------|----------|--------------------------|------|--------|
+| id              | int        |          | 用户ID                   | 是   |        |
+| username        | varchar    | 20       | 用户名                   |      |        |
+| password        | varchar    | 32       | 密码                     |      |        |
+| email           | varchar    | 50       | 邮箱                     |      |        |
+| phone           | varchar    | 15       | 手机号码                 |      |        |
+| register_time   | datetime   |          | 注册时间                 |      |        |
+| last_login_time | datetime   |          | 最后登录时间             |      |        |
+| status          | int        |          | 用户状态(0:禁用,1:启用)|      | 1      |
+
+#### 鲜花分类表(flower_category)
+
+| 字段名称        | 数据类型   | 字段长度 | 字段说明                 | 主键 | 默认值 |
+|-----------------|------------|----------|--------------------------|------|--------|
+| 分类ID          | int        |          | 分类的唯一标识           | 是   |        |
+| 分类名称        | varchar    | 50       | 分类的名称               |      |        |
+| 父分类ID        | int        |          | 父分类的ID               |      |        |
+| 创建时间        | datetime   |          | 分类的创建时间           |      |当前时间|
+
+#### 鲜花信息表(flower)
+
+| 字段名称        | 数据类型   | 字段长度 | 字段说明                 | 主键 | 默认值 |
+|-----------------|------------|----------|--------------------------|------|--------|
+| id              | int        |          | 鲜花信息ID               | 是   |        |
+| 分类ID           | int        |          | 鲜花分类ID               |      |        |
+| 名称            | varchar    | 50       | 鲜花名称                 |      |        |
+| 描述            | text       |          | 鲜花描述                 |      |        |
+| 价格            | decimal    |          | 鲜花价格                 |      |        |
+| 库存            | int        |          | 鲜花库存                 |      |        |
+| 图片链接          | varchar    | 255      | 鲜花图片链接              |      |        |
+| 创建时间          | datetime  |          | 鲜花信息创建时间          |      |        |
+| 更新时间          | datetime  |          | 鲜花信息更新时间          |      |        |
+
+#### 用户留言表(message)
+
+| 字段名称        | 数据类型   | 字段长度 | 字段说明                 | 主键 | 默认值 |
+|-----------------|------------|----------|--------------------------|------|--------|
+| message_id      | int(11)    |          | 留言ID                   | 是   |        |
+| user_id         | int(11)    |          | 用户ID                   |      |        |
+| content         | varchar(255) |       | 留言内容                 |      |        |
+| create_time     | datetime   |          | 创建时间                 |      |        |
+| is_read         | tinyint(1) |          | 是否已读(0/1)          |      | 0      |
+
+#### 特殊服务表(special_service)
+
+| 字段名称        | 数据类型   | 字段长度 | 字段说明                 | 主键 | 默认值 |
+|-----------------|------------|----------|--------------------------|------|--------|
+| id              | int        |          | 服务ID                   | 是   |        |
+| name            | varchar    | 50       | 服务名称                 |      |        |
+| price           | decimal    | 10,2     | 服务价格                 |      |        |
+| duration        | int        |          | 服务时长                 |      |        |
+| description     | text       |          | 服务描述                 |      |        |
+
+#### 系统表(system_config)
+
+| 字段名称        | 数据类型   | 字段长度 | 字段说明                 | 主键 | 默认值 |
+|-----------------|------------|----------|--------------------------|------|--------|
+| id              | int        | 11       | 系统ID                   | 是   | 无     |
+| name            | varchar    | 255      | 系统名称                 | 否   | 无     |
+| version         | varchar    | 50       | 系统版本                 | 否   | 无     |
+| created_at      | timestamp  |          | 创建时间                 | 否   | 当前时间 |
+| updated_at      | timestamp  |          | 更新时间                 | 否   | 当前时间 |
+
+#### 订单表(order)
+
+| 字段名称        | 数据类型   | 字段长度 | 字段说明                 | 主键 | 默认值 |
+|-----------------|------------|----------|--------------------------|------|--------|
+| 订单ID          | int        |          | 订单的唯一标识           | 是   |        |
+| 用户ID          | int        |          | 下单用户的ID             |      |        |
+| 商品ID          | int        |          | 购买商品的ID             |      |        |
+| 数量            | int        |          | 购买商品的数量           |      | 1      |
+| 总价            | decimal    |          | 订单总价                 |      | 0.00   |
+| 下单时间        | datetime   |          | 订单下单的时间           |      | 当前时间 |
+| 状态            | varchar    | 20       | 订单的状态               |      | 待支付 |
+| 支付方式        | varchar    | 20       | 订单的支付方式           |      |        |
+| 收货地址        | varchar    | 100      | 订单的收货地址           |      |        |
+| 联系电话        | varchar    | 20       | 收货人的联系电话         |      |        |
+| 备注            | varchar    | 200      | 订单的备注信息           |      |        |
+
+
+
+这些设计是根据系统需求和关键实体之间的关系进行的,提供了基本的数据存储结构和关系,以支持鲜花销售管理系统的功能实现。
+
+本节对《thinkphp5鲜花销售管理系统》的数据库设计进行了详细介绍,包括数据库的E-R图设计和数据库表设计。通过合理的数据库设计,可以满足系统的数据存储和操作需求,为后续的系统实现提供基础支持。

+ 58 - 0
table.json

@@ -0,0 +1,58 @@
+[
+    {
+        "name": "管理员",
+        "desc": "\n|字段名称|类型|长度|字段说明|主键|默认值|\n|--------|---|---|-------|----|-----|\n|id|int|11|管理员ID|是|自增|\n|username|varchar|50|管理员用户名|否|无|\n|password|varchar|255|管理员密码|否|无|\n|name|varchar|50|管理员姓名|否|无|\n|email|varchar|100|管理员邮箱|否|无|\n|phone|varchar|20|管理员手机号码|否|无|\n|created_at|timestamp|-|创建时间|否|当前时间|\n|updated_at|timestamp|-|更新时间|否|当前时间|\n"
+    },
+    {
+        "name": "用户",
+        "desc": "\n| 字段名称   | 类型      | 长度 | 字段说明     | 主键 | 默认值 |\n|-----------|----------|------|--------------|------|--------|\n| 用户ID    | int      | 10   | 用户的唯一标识 | 是   |        |\n| 用户名    | varchar  | 50   | 用户名       |      |        |\n| 密码      | varchar  | 50   | 密码         |      |        |\n| 姓名      | varchar  | 50   | 用户真实姓名 |      |        |\n| 性别      | varchar  | 10   | 用户性别     |      |        |\n| 手机号码  | varchar  | 20   | 用户手机号码 |      |        |\n| 邮箱      | varchar  | 50   | 用户邮箱     |      |        |\n| 地址      | varchar  | 100  | 用户地址     |      |        |\n| 注册时间  | datetime |      | 用户注册时间 |      |        |\n| 最后登录时间 | datetime |    | 用户最后登录时间 |      |        |\n| 状态      | int      |      | 用户状态     |      |        |\n"
+    },
+    {
+        "name": "鲜花分类",
+        "desc": "\n| 字段名称   | 类型    | 长度 | 字段说明       | 主键 | 默认值 |\n| --------- | ------- | ---- | -------------- | ---- | ------ |\n| 分类ID     | int     |      | 分类的唯一标识 | 是   |        |\n| 分类名称   | varchar | 50   | 分类的名称     |      |        |\n| 父级分类ID | int     |      | 父级分类的ID   |      |        |\n| 创建时间   | datetime|      | 记录创建的时间 |      | 空     |\n| 更新时间   | datetime|      | 记录更新的时间 |      | 空     |\n"
+    },
+    {
+        "name": "鲜花信息",
+        "desc": "\n| 字段名称   | 类型      | 长度 | 字段说明           | 主键 | 默认值   |\n|---------|---------|----|---------------|----|-------|\n| id      | int     |    | 鲜花信息唯一标识符     | 是  | 自增    |\n| name    | varchar | 100 | 鲜花名称           | 否  | 无     |\n| price   | decimal |    | 鲜花单价           | 否  | 无     |\n| stock   | int     |    | 鲜花库存数量         | 否  | 无     |\n| image   | varchar | 200 | 鲜花图片路径         | 否  | 无     |\n| details | text    |    | 鲜花详细介绍         | 否  | 无     |\n| created_at | datetime |    | 创建时间           | 否  | 当前时间 |\n| updated_at | datetime |    | 更新时间           | 否  | 当前时间 |\n"
+    },
+    {
+        "name": "用户留言",
+        "desc": "\n| 字段名称   | 类型     | 长度 | 字段说明       | 主键 | 默认值 |\n|--------|--------|----|-----------|----|------|\n| id     | int    |    | 留言ID        | 是 |      |\n| user_id | int    |    | 用户ID       |    |      |\n| content | text   |    | 留言内容       |    |      |\n| create_time | datetime |    | 留言时间       |    |      |\n| reply   | text   |    | 管理员回复内容   |    |      |\n| reply_time | datetime |    | 管理员回复时间   |    |      |\n"
+    },
+    {
+        "name": "特殊服务",
+        "desc": "\n| 字段名称 | 类型   | 长度 | 字段说明   | 主键 | 默认值 |\n|--------|-------|-----|----------|-----|-------|\n| id     | INT   |     | 主键     | 是   |       |\n| name   | VARCHAR | 100 | 服务名称  |     |       |\n| price  | DECIMAL | 10,2 | 服务价格  |     | 0.00  |\n| remark | VARCHAR | 255 | 服务描述  |     |       |\n"
+    },
+    {
+        "name": "系统管理",
+        "desc": "\n| 字段名称 | 类型   | 长度 | 字段说明       | 主键 | 默认值  |\n|----------|--------|------|----------------|------|---------|\n| id       | int    | -    | 自增主键       | 是   | 无      |\n| name     | varchar | 100  | 系统名称       | 否   | 无      |\n| slogan   | varchar | 200  | 系统口号       | 否   | 无      |\n| logo     | varchar | 200  | 系统logo       | 否   | 无      |\n| address  | varchar | 200  | 公司地址       | 否   | 无      |\n| phone    | varchar | 20   | 公司电话       | 否   | 无      |\n| email    | varchar | 100  | 公司邮箱       | 否   | 无      |\n| website  | varchar | 200  | 公司网址       | 否   | 无      |\n| about    | text   | -    | 关于我们       | 否   | 无      |\n| created_at | datetime | - | 创建时间       | 否   | 当前时间 |\n| updated_at | datetime | - | 更新时间       | 否   | 当前时间 |\n"
+    },
+    {
+        "name": "订单",
+        "desc": "\n| 字段名称       | 类型     | 长度 | 字段说明     | 主键 | 默认值 |\n| ------------ | -------- | ---- | ----------- | ---- | ------ |\n| order_id      | int      |      | 订单ID      | 是   |        |\n| user_id       | int      |      | 用户ID      |      |        |\n| flower_id     | int      |      | 鲜花ID      |      |        |\n| quantity      | int      |      | 购买数量    |      |        |\n| total_price   | decimal  |      | 订单总价    |      |        |\n| order_date    | datetime |      | 下单日期    |      |        |\n| delivery_date | datetime |      | 交货日期    |      |        |\n| status        | int      |      | 订单状态    |      |        |\n| address       | varchar  | 100  | 配送地址    |      |        |\n| recipient     | varchar  | 50   | 收件人      |      |        |\n| contact       | varchar  | 50   | 联系方式    |      |        |\n| remarks       | text     |      | 备注        |      |        |\n"
+    },
+    {
+        "name": "花语公告",
+        "desc": "\n| 字段名称 | 类型     | 长度 | 字段说明 | 主键 | 默认值 |\n|----------|----------|------|----------|------|--------|\n| id       | int      | 11   | 记录ID   | 是   | 无     |\n| title    | varchar  | 255  | 公告标题 | 否   | 无     |\n| content  | text     | 无   | 公告内容 | 否   | 无     |\n| publish_time  | datetime | 无   | 发布时间 | 否   | 无     |\n"
+    },
+    {
+        "name": "购物车",
+        "desc": "\n| 字段名称     | 类型        | 长度 | 字段说明   | 主键 | 默认值 |\n|-------------|------------|------|------------|------|--------|\n| id          | int        |      | 购物车ID   | 是   |        |\n| user_id     | int        |      | 用户ID     |      |        |\n| flower_id   | int        |      | 鲜花ID     |      |        |\n| quantity    | int        |      | 数量       |      | 1      |\n| price       | decimal    |      | 单价       |      | 0.00   |\n| created_at  | timestamp  |      | 创建时间   |      |        |\n| updated_at  | timestamp  |      | 更新时间   |      |        |\n"
+    },
+    {
+        "name": "联系客服",
+        "desc": "\n| 字段名称 | 类型    | 长度 | 字段说明   | 主键 | 默认值 |\n|---------|--------|-----|------------|-----|-------|\n| id      | int    |     | 主键       | Yes |       |\n| name    | varchar | 50  | 客服姓名   | No  |       |\n| email   | varchar | 100 | 客服邮箱   | No  |       |\n| phone   | varchar | 20  | 客服电话   | No  |       |\n| wechat  | varchar | 50  | 客服微信号 | No  |       |\n| qq      | varchar | 20  | 客服QQ号   | No  |       |\n| remark  | text   |     | 备注       | No  |       |\n"
+    },
+    {
+        "name": "我的订单",
+        "desc": "\n| 字段名称   | 类型   | 长度 | 字段说明    | 主键 | 默认值 |\n| ----------- | -------- | ------ | ------------ | ---- | ------ |\n| id         | int       |         | 订单ID        | 是   | 自增   |\n| user_id    | int       |         | 用户ID        | 否   |        |\n| flower_id  | int       |         | 鲜花ID        | 否   |        |\n| address_id | int       |         | 地址ID        | 否   |        |\n| quantity   | int       |         | 数量          | 否   |        |\n| total_price| decimal(8,2) |         | 总价          | 否   | NULL  |\n| status     | tinyint   |         | 订单状态      | 否   | 0      |\n| created_at | timestamp |         | 创建时间      | 否   |        |\n| updated_at | timestamp |         | 更新时间      | 否   |        |\n"
+    },
+    {
+        "name": "我的地址",
+        "desc": "\n| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |\n|---------|------|------|---------|------|-------|\n| id      | INT  |      | 地址ID  | 是   |       |\n| user_id | INT  |      | 用户ID  |      |       |\n| name    | VARCHAR | 50   | 收货人姓名 |      |       |\n| phone   | VARCHAR | 15   | 收货人电话号码 |      |       |\n| province | VARCHAR | 50  | 省份   |      |       |\n| city     | VARCHAR | 50  | 城市   |      |       |\n| district | VARCHAR | 50  | 区县   |      |       |\n| address  | TEXT   |      | 详细地址 |      |       |\n| is_default | TINYINT |      | 是否默认地址 |      | 0     |\n"
+    },
+    {
+        "name": "我的收藏",
+        "desc": "\n| 字段名称 | 类型     | 长度 | 字段说明   | 主键 | 默认值 |\n|----------|----------|------|------------|------|--------|\n| id       | 整数     |      | 主键ID     | 是   |        |\n| user_id  | 整数     |      | 用户ID     |      |        |\n| flower_id| 整数     |      | 鲜花ID     |      |        |\n| created_at| 日期时间 |      | 收藏时间   |      | 当前时间|\n"
+    }
+]

+ 48 - 0
table.mjs

@@ -0,0 +1,48 @@
+import { HumanMessage } from "langchain/schema"
+import { StructuredOutputParser } from "langchain/output_parsers"
+import { llm } from "./llm.mjs"
+import { z } from "zod"
+import pRetry from "p-retry"
+
+async function listTables(title, desc) {
+    const scheme = StructuredOutputParser.fromZodSchema(z.array(z.string().describe("表名")))
+    const res = await llm.call([
+        new HumanMessage(`${scheme.getFormatInstructions()}
+------
+你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+我的毕业设计项目是${title}
+这个项目包含以下功能:
+${desc}
+现在我们需要开始为这个系统设计数据库,首先请帮我列出我们需要哪些表:`)
+    ])
+    return await scheme.parse(res.content)
+}
+
+async function describeTable(title, desc, name) {
+    const res = await llm.call([
+        new HumanMessage(`
+你是一个计算机专业擅长写毕业论文的专家,你的任务是帮我的毕业设计撰写一篇论文
+我的毕业设计项目是${title}
+这个项目包含以下功能:
+${desc}
+现在我们需要开始为这个系统设计数据库,我们需要以下这些数据库表:
+${list.map((i) => `- ${i}`).join("\n")}
+现在我们一步一步设计这些表的具体字段,首先我们需要设计${name}表的字段,请你帮我设计一下这个表的字段,以表格的形式返回,包含字段名称、类型、长度、字段说明、主键、默认值`)
+    ])
+
+    return {
+        name,
+        desc: "\n" + new RegExp("\\|[\\s\\S]+\\|").exec(res.content)[0] + "\n"
+    }
+}
+
+async function createTable(title, desc) {
+    const list = await pRetry(() => listTables(title, desc), { retries: 5 })
+
+    const tables = []
+    for (const item of list) {
+        tables.push(await pRetry(() => describeTable(title, desc, item), { retries: 5 }))
+    }
+    return tables
+}
+export { createTable }

+ 58 - 0
tables.json

@@ -0,0 +1,58 @@
+[
+    {
+        "name": "管理员",
+        "desc": "| 字段名称   | 类型            | 长度 | 字段说明     | 主键 | 默认值 |\n| ---------- | --------------- | ---- | ------------ | ---- | ------ |\n| id         | int             |      | 主键ID       | 是   |        |\n| username   | varchar         | 50   | 用户名       |      |        |\n| password   | varchar         | 50   | 密码         |      |        |\n| email      | varchar         | 100  | 邮箱         |      |        |\n| status     | tinyint         |      | 状态         |      | 0      |\n| created_at | timestamp       |      | 创建时间     |      |        |\n| updated_at | timestamp       |      | 更新时间     |      |        |"
+    },
+    {
+        "name": "用户",
+        "desc": "| 字段名称   | 类型      | 长度 | 字段说明   | 主键 | 默认值 |\n|----------|---------|-----|-----------|-----|-------|\n| user_id  | int     |     | 用户ID     | 是  |       |\n| username | varchar | 50  | 用户名    |     |       |\n| password | varchar | 50  | 密码       |     |       |\n| email    | varchar | 100 | 邮箱       |     |       |\n| phone    | varchar | 20  | 手机号码  |     |       |\n| address  | varchar | 200 | 地址       |     |       |\n| created_at | datetime |   | 创建时间 |     |       |\n| updated_at | datetime |   | 更新时间 |     |       |"
+    },
+    {
+        "name": "鲜花分类",
+        "desc": "| 字段名称   | 类型       | 长度 | 字段说明   | 主键 | 默认值 |\n|------------|------------|------|------------|------|--------|\n| id         | int        |      | 分类ID     | 是   |        |\n| name       | varchar    | 50   | 分类名称   |      |        |\n| parent_id  | int        |      | 父分类ID   |      | 0      |\n| create_time| datetime   |      | 创建时间   |      |        |\n| update_time| datetime   |      | 更新时间   |      |        |"
+    },
+    {
+        "name": "鲜花信息",
+        "desc": "| 字段名称   |  类型        | 长度  | 字段说明     | 主键   | 默认值   |\n| -------- | --------- | ---- | -------- | ---- | ------ |\n| id       | int       |      | 主键       | 是   |        |\n| flower_name| varchar | 50   | 鲜花名称    |      |        |\n| flower_category_id | int |    | 鲜花分类ID |      |        |\n| language | varchar  | 50   | 花语        |      |        |\n| price    | decimal(10,2) |   | 价格      |      |        |\n| description  | text    |      | 描述     |      |        |\n| image    | varchar  | 255  | 图片       |      |        |\n| created_at| datetime |      | 创建时间   |      |        |\n| updated_at| datetime |      | 更新时间   |      |        |"
+    },
+    {
+        "name": "用户留言",
+        "desc": "| 字段名称   | 类型     | 长度 | 字段说明   | 主键 | 默认值   |\n|---------|-------|----|--------|----|-------|\n| id      | int   |     | 主键     | 是  | 无     |\n| user_id | int   |     | 用户ID   | 否  | 无     |\n| content | text  |     | 留言内容  | 否  | 无     |\n| time    | datetime |     | 留言时间  | 否  | 当前时间 |\n| status  | int   |     | 留言状态  | 否  | 1     |"
+    },
+    {
+        "name": "特殊服务",
+        "desc": "| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |\n| ------- | ---- | ---- | ------- | ---- | ------ |\n| service_id | int | 11 | 特殊服务ID | 是 | 无 |\n| service_name | varchar | 50 | 特殊服务名称 | 否 | 无 |\n| service_price | decimal | 10,2 | 特殊服务价格 | 否 | 0.00 |\n| service_description | text | 无限制 | 特殊服务描述 | 否 | 无 |\n| created_at | timestamp | 无限制 | 创建时间 | 否 | 当前时间 |\n| updated_at | timestamp | 无限制 | 更新时间 | 否 | 当前时间 |"
+    },
+    {
+        "name": "系统",
+        "desc": "| 字段名称     | 类型    | 长度 | 字段说明   | 主键 | 默认值 |\n| ---------- | ------ | ---- | --------- | ---- | ------ |\n| 系统ID      | int    |      | 系统ID    | 是   |        |\n| 系统名称    | varchar | 50   | 系统名称   |      |        |\n| 版本号      | varchar | 20   | 版本号     |      |        |\n| 创建时间    | datetime |      | 创建时间   |      |        |\n| 更新时间    | datetime |      | 更新时间   |      |        |"
+    },
+    {
+        "name": "订单",
+        "desc": "|字段名称|类型|长度|字段说明|主键|默认值|\n|-------|---|---|-------|---|-----|\n|order_id|int|10|订单ID|是|自增|\n|user_id|int|10|用户ID|否|-|\n|flower_id|int|10|鲜花ID|否|-|\n|quantity|int|10|数量|否|-|\n|price|decimal|10,2|单价|否|-|\n|total_price|decimal|10,2|总价|否|-|\n|order_time|datetime|-|下单时间|否|当前时间|\n|status|int|1|订单状态|否|0|\n|address|string|100|订单地址|否|-|\n|remark|string|255|备注|否|-|"
+    },
+    {
+        "name": "花语公告",
+        "desc": "| 字段名称 | 类型   | 长度 | 字段说明   | 主键 | 默认值 |\n|-----------|--------|------|-------------|-------|-------|\n| ID        | int    |      | 公告ID      | 是    |       |\n| 标题     | varchar | 50   | 公告标题   |       |       |\n| 内容     | text   |      | 公告内容   |       |       |\n| 创建时间 | datetime |      | 公告创建时间 |       |       |\n| 更新时间 | datetime |      | 公告更新时间 |       |       |"
+    },
+    {
+        "name": "购物车",
+        "desc": "| 类型   | 长度 | 字段说明      | 主键 | 默认值\n--------|------|-----|-----------|----|-------\nid      | int  | 11  | 主键        | 是  | \nuser_id | int  | 11  | 用户ID      |     | \nflower_id | int | 11  | 鲜花ID      |     | \nquantity | int  | 11  | 数量        |     | \ncreated_at | timestamp |    | 创建时间   |     | \nupdated_at | timestamp |    | 更新时间   |     |"
+    },
+    {
+        "name": "联系客服",
+        "desc": "| 字段名称 | 类型   | 长度 | 字段说明       | 主键 | 默认值 |\n|---------|--------|------|---------------|------|--------|\n| id      | int    |      | 联系客服ID     | 是   |        |\n| 用户名   | varchar | 50   | 用户名         |      |        |\n| 密码    | varchar | 50   | 密码           |      |        |\n| 姓名    | varchar | 50   | 姓名           |      |        |\n| 性别    | varchar | 10   | 性别           |      |        |\n| 手机号   | varchar | 20   | 手机号         |      |        |\n| 邮箱    | varchar | 50   | 邮箱           |      |        |\n| 地址    | varchar | 100  | 地址           |      |        |\n| 头像    | varchar | 100  | 头像           |      |        |\n| 状态    | int    |      | 状态(0-停用,1-启用) |      | 1      |\n| 创建时间  | datetime |      | 创建时间       |      |        |\n| 更新时间  | datetime |      | 更新时间       |      |        |"
+    },
+    {
+        "name": "我的订单",
+        "desc": "| 字段名称     | 类型       | 长度 | 字段说明       | 主键 | 默认值   |\n|-------------|------------|------|--------------|-----|----------|\n| id          | int        |      | 订单ID         | 是  | 自动生成  |\n| user_id     | int        |      | 用户ID         | 否  | 无       |\n| flower_id   | int        |      | 鲜花ID         | 否  | 无       |\n| quantity    | int        |      | 购买数量       | 否  | 无       |\n| total_price | decimal(9,2)|      | 总价           | 否  | 无       |\n| order_time  | datetime   |      | 下单时间       | 否  | 无       |\n| status      | varchar(20)|      | 订单状态       | 否  | 无       |\n| address     | varchar(100)|     | 收货地址       | 否  | 无       |\n| contact     | varchar(50)|      | 联系方式       | 否  | 无       |"
+    },
+    {
+        "name": "我的地址",
+        "desc": "| 类型    | 长度  | 字段说明         | 主键 | 默认值\n----------|---------|------|-----------------|-----|------\nid        | int     | 11   | 地址ID           | 是   | 自动生成\nuser_id   | int     | 11   | 用户ID           | 否   | 无\nprovince  | varchar | 255  | 省份             | 否   | 无\ncity      | varchar | 255  | 城市             | 否   | 无\ndistrict  | varchar | 255  | 区/县            | 否   | 无\naddress   | varchar | 255  | 详细地址         | 否   | 无\npostal_code | varchar | 20  | 邮政编码         | 否   | 无\nis_default | tinyint | 1    | 是否默认地址     | 否   | 0\ncreated_at | datetime | -   | 创建时间         | 否   | 当前时间\nupdated_at | datetime | -   | 更新时间         | 否   |"
+    },
+    {
+        "name": "我的收藏",
+        "desc": "| 字段名称   | 类型     | 长度 | 字段说明   | 主键 | 默认值 |\n|---------|--------|----|--------|----|------|\n| id      | int    |    | 主键     | 是  |      |\n| user_id | int    |    | 用户ID   | 否  |      |\n| flower_id | int   |    | 鲜花ID   | 否  |      |\n| create_time | datetime |    | 创建时间 | 否  | 当前时间 |"
+    }
+]

+ 3 - 0
testuml.mjs

@@ -0,0 +1,3 @@
+import { uploadUml } from "./upload.mjs"
+import fs from "fs"
+console.log(await uploadUml(fs.readFileSync("111.puml").toString()))

+ 58 - 0
upload.mjs

@@ -0,0 +1,58 @@
+import { execa } from "execa"
+import path from "path"
+import { fileURLToPath } from "url"
+import fs from "fs"
+import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"
+import { Upload } from "@aws-sdk/lib-storage"
+import { PassThrough, Readable } from "stream"
+import { WritableStreamBuffer } from "stream-buffers"
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = path.dirname(__filename)
+async function uploadUml(plantUml) {
+    const s3 = new S3Client({
+        region: "oss-cn-hangzhou",
+        endpoint: "https://oss-cn-hangzhou.aliyuncs.com",
+        credentials: {
+            accessKeyId: "PXzJyah5rZfWHIIH",
+            secretAccessKey: "e1MS6j0wypXJrw8CM0hObZu8qKbfah"
+        }
+    })
+    const stream = new PassThrough()
+    const key = `uml/${Date.now()}.png`
+
+    const upload = new Upload({
+        client: s3,
+        params: {
+            ACL: "public-read",
+            Bucket: "nebuai",
+            Key: key,
+            Body: stream
+        }
+    })
+
+    const p = execa("java", [
+        "-jar",
+        "-Djava.awt.headless=true",
+        "-DPLANTUML_LIMIT_SIZE=8192",
+        `${path.join(__dirname, "plantuml-1.2023.12.jar")}`,
+        "-config",
+        `${path.join(__dirname, "plantuml.cfg")}`,
+        "-tpng",
+        "-pipe",
+        "-fastfail",
+        "-noerror"
+    ])
+    Readable.from(plantUml).pipe(p.stdin)
+    const err = new WritableStreamBuffer()
+    p.pipeStdout(stream)
+    p.pipeStderr(err)
+    try {
+        await p
+    } catch (error) {
+        throw new Error(err.getContents().toString())
+    }
+    await upload.done()
+    return `https://nebuai.oss-cn-hangzhou.aliyuncs.com/${key}`
+}
+
+export { uploadUml }

+ 2162 - 0
yarn.lock

@@ -0,0 +1,2162 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@anthropic-ai/sdk@^0.6.2":
+  version "0.6.8"
+  resolved "https://registry.npmmirror.com/@anthropic-ai/sdk/-/sdk-0.6.8.tgz#670ecb3275e5f63f19f6decdd2ca94f4f8ac5f05"
+  integrity sha512-z4gDFrBf+W2wOVvwA3CA+5bfKOxQhPeXQo7+ITWj3r3XPulIMEasVT0KrD41G+anr5Yc3d2PKvXKB6b1LSon5w==
+  dependencies:
+    "@types/node" "^18.11.18"
+    "@types/node-fetch" "^2.6.4"
+    abort-controller "^3.0.0"
+    agentkeepalive "^4.2.1"
+    digest-fetch "^1.3.0"
+    form-data-encoder "1.7.2"
+    formdata-node "^4.3.2"
+    node-fetch "^2.6.7"
+    web-streams-polyfill "^3.2.1"
+
+"@aws-crypto/crc32@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa"
+  integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==
+  dependencies:
+    "@aws-crypto/util" "^3.0.0"
+    "@aws-sdk/types" "^3.222.0"
+    tslib "^1.11.1"
+
+"@aws-crypto/crc32c@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f"
+  integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==
+  dependencies:
+    "@aws-crypto/util" "^3.0.0"
+    "@aws-sdk/types" "^3.222.0"
+    tslib "^1.11.1"
+
+"@aws-crypto/ie11-detection@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688"
+  integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==
+  dependencies:
+    tslib "^1.11.1"
+
+"@aws-crypto/sha1-browser@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3"
+  integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==
+  dependencies:
+    "@aws-crypto/ie11-detection" "^3.0.0"
+    "@aws-crypto/supports-web-crypto" "^3.0.0"
+    "@aws-crypto/util" "^3.0.0"
+    "@aws-sdk/types" "^3.222.0"
+    "@aws-sdk/util-locate-window" "^3.0.0"
+    "@aws-sdk/util-utf8-browser" "^3.0.0"
+    tslib "^1.11.1"
+
+"@aws-crypto/sha256-browser@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766"
+  integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==
+  dependencies:
+    "@aws-crypto/ie11-detection" "^3.0.0"
+    "@aws-crypto/sha256-js" "^3.0.0"
+    "@aws-crypto/supports-web-crypto" "^3.0.0"
+    "@aws-crypto/util" "^3.0.0"
+    "@aws-sdk/types" "^3.222.0"
+    "@aws-sdk/util-locate-window" "^3.0.0"
+    "@aws-sdk/util-utf8-browser" "^3.0.0"
+    tslib "^1.11.1"
+
+"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2"
+  integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==
+  dependencies:
+    "@aws-crypto/util" "^3.0.0"
+    "@aws-sdk/types" "^3.222.0"
+    tslib "^1.11.1"
+
+"@aws-crypto/supports-web-crypto@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2"
+  integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==
+  dependencies:
+    tslib "^1.11.1"
+
+"@aws-crypto/util@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0"
+  integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==
+  dependencies:
+    "@aws-sdk/types" "^3.222.0"
+    "@aws-sdk/util-utf8-browser" "^3.0.0"
+    tslib "^1.11.1"
+
+"@aws-sdk/client-s3@^3.440.0":
+  version "3.440.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/client-s3/-/client-s3-3.440.0.tgz#13d28155dfa5c3c54a892e16182649b6a18762b7"
+  integrity sha512-BIALZvf7BNfiY68YwNhQv2OPHER6q+AMTXrpKNXUAL5xJid86FqXiLDB0JmJXjZM4DOf+QUYuT6Ee60LVQgmaQ==
+  dependencies:
+    "@aws-crypto/sha1-browser" "3.0.0"
+    "@aws-crypto/sha256-browser" "3.0.0"
+    "@aws-crypto/sha256-js" "3.0.0"
+    "@aws-sdk/client-sts" "3.438.0"
+    "@aws-sdk/core" "3.436.0"
+    "@aws-sdk/credential-provider-node" "3.438.0"
+    "@aws-sdk/middleware-bucket-endpoint" "3.433.0"
+    "@aws-sdk/middleware-expect-continue" "3.433.0"
+    "@aws-sdk/middleware-flexible-checksums" "3.433.0"
+    "@aws-sdk/middleware-host-header" "3.433.0"
+    "@aws-sdk/middleware-location-constraint" "3.433.0"
+    "@aws-sdk/middleware-logger" "3.433.0"
+    "@aws-sdk/middleware-recursion-detection" "3.433.0"
+    "@aws-sdk/middleware-sdk-s3" "3.440.0"
+    "@aws-sdk/middleware-signing" "3.433.0"
+    "@aws-sdk/middleware-ssec" "3.433.0"
+    "@aws-sdk/middleware-user-agent" "3.438.0"
+    "@aws-sdk/region-config-resolver" "3.433.0"
+    "@aws-sdk/signature-v4-multi-region" "3.437.0"
+    "@aws-sdk/types" "3.433.0"
+    "@aws-sdk/util-endpoints" "3.438.0"
+    "@aws-sdk/util-user-agent-browser" "3.433.0"
+    "@aws-sdk/util-user-agent-node" "3.437.0"
+    "@aws-sdk/xml-builder" "3.310.0"
+    "@smithy/config-resolver" "^2.0.16"
+    "@smithy/eventstream-serde-browser" "^2.0.12"
+    "@smithy/eventstream-serde-config-resolver" "^2.0.12"
+    "@smithy/eventstream-serde-node" "^2.0.12"
+    "@smithy/fetch-http-handler" "^2.2.4"
+    "@smithy/hash-blob-browser" "^2.0.12"
+    "@smithy/hash-node" "^2.0.12"
+    "@smithy/hash-stream-node" "^2.0.12"
+    "@smithy/invalid-dependency" "^2.0.12"
+    "@smithy/md5-js" "^2.0.12"
+    "@smithy/middleware-content-length" "^2.0.14"
+    "@smithy/middleware-endpoint" "^2.1.3"
+    "@smithy/middleware-retry" "^2.0.18"
+    "@smithy/middleware-serde" "^2.0.12"
+    "@smithy/middleware-stack" "^2.0.6"
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/node-http-handler" "^2.1.8"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/smithy-client" "^2.1.12"
+    "@smithy/types" "^2.4.0"
+    "@smithy/url-parser" "^2.0.12"
+    "@smithy/util-base64" "^2.0.0"
+    "@smithy/util-body-length-browser" "^2.0.0"
+    "@smithy/util-body-length-node" "^2.1.0"
+    "@smithy/util-defaults-mode-browser" "^2.0.16"
+    "@smithy/util-defaults-mode-node" "^2.0.21"
+    "@smithy/util-endpoints" "^1.0.2"
+    "@smithy/util-retry" "^2.0.5"
+    "@smithy/util-stream" "^2.0.17"
+    "@smithy/util-utf8" "^2.0.0"
+    "@smithy/util-waiter" "^2.0.12"
+    fast-xml-parser "4.2.5"
+    tslib "^2.5.0"
+
+"@aws-sdk/client-sso@3.438.0":
+  version "3.438.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/client-sso/-/client-sso-3.438.0.tgz#2a48cc7f03c5858796053b09cd0b1480e067a5ce"
+  integrity sha512-L/xKq+K78PShLku8x5gM6lZDUp7LhFJ2ksKH7Vll+exSZq+QUaxuzjp4gqdzh6B0oIshv2jssQlUa0ScOmVRMg==
+  dependencies:
+    "@aws-crypto/sha256-browser" "3.0.0"
+    "@aws-crypto/sha256-js" "3.0.0"
+    "@aws-sdk/core" "3.436.0"
+    "@aws-sdk/middleware-host-header" "3.433.0"
+    "@aws-sdk/middleware-logger" "3.433.0"
+    "@aws-sdk/middleware-recursion-detection" "3.433.0"
+    "@aws-sdk/middleware-user-agent" "3.438.0"
+    "@aws-sdk/region-config-resolver" "3.433.0"
+    "@aws-sdk/types" "3.433.0"
+    "@aws-sdk/util-endpoints" "3.438.0"
+    "@aws-sdk/util-user-agent-browser" "3.433.0"
+    "@aws-sdk/util-user-agent-node" "3.437.0"
+    "@smithy/config-resolver" "^2.0.16"
+    "@smithy/fetch-http-handler" "^2.2.4"
+    "@smithy/hash-node" "^2.0.12"
+    "@smithy/invalid-dependency" "^2.0.12"
+    "@smithy/middleware-content-length" "^2.0.14"
+    "@smithy/middleware-endpoint" "^2.1.3"
+    "@smithy/middleware-retry" "^2.0.18"
+    "@smithy/middleware-serde" "^2.0.12"
+    "@smithy/middleware-stack" "^2.0.6"
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/node-http-handler" "^2.1.8"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/smithy-client" "^2.1.12"
+    "@smithy/types" "^2.4.0"
+    "@smithy/url-parser" "^2.0.12"
+    "@smithy/util-base64" "^2.0.0"
+    "@smithy/util-body-length-browser" "^2.0.0"
+    "@smithy/util-body-length-node" "^2.1.0"
+    "@smithy/util-defaults-mode-browser" "^2.0.16"
+    "@smithy/util-defaults-mode-node" "^2.0.21"
+    "@smithy/util-endpoints" "^1.0.2"
+    "@smithy/util-retry" "^2.0.5"
+    "@smithy/util-utf8" "^2.0.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/client-sts@3.438.0":
+  version "3.438.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/client-sts/-/client-sts-3.438.0.tgz#d4a961d4a689035ca66cf2fd1f72ce89c6aca5c7"
+  integrity sha512-UBxLZKVVvbR4LHwSNSqaKx22YBSOGkavrh4SyDP8o8XOlXeRxTCllfSfjL9K5Mktp+ZwQ2NiubNcwmvUcGKbbg==
+  dependencies:
+    "@aws-crypto/sha256-browser" "3.0.0"
+    "@aws-crypto/sha256-js" "3.0.0"
+    "@aws-sdk/core" "3.436.0"
+    "@aws-sdk/credential-provider-node" "3.438.0"
+    "@aws-sdk/middleware-host-header" "3.433.0"
+    "@aws-sdk/middleware-logger" "3.433.0"
+    "@aws-sdk/middleware-recursion-detection" "3.433.0"
+    "@aws-sdk/middleware-sdk-sts" "3.433.0"
+    "@aws-sdk/middleware-signing" "3.433.0"
+    "@aws-sdk/middleware-user-agent" "3.438.0"
+    "@aws-sdk/region-config-resolver" "3.433.0"
+    "@aws-sdk/types" "3.433.0"
+    "@aws-sdk/util-endpoints" "3.438.0"
+    "@aws-sdk/util-user-agent-browser" "3.433.0"
+    "@aws-sdk/util-user-agent-node" "3.437.0"
+    "@smithy/config-resolver" "^2.0.16"
+    "@smithy/fetch-http-handler" "^2.2.4"
+    "@smithy/hash-node" "^2.0.12"
+    "@smithy/invalid-dependency" "^2.0.12"
+    "@smithy/middleware-content-length" "^2.0.14"
+    "@smithy/middleware-endpoint" "^2.1.3"
+    "@smithy/middleware-retry" "^2.0.18"
+    "@smithy/middleware-serde" "^2.0.12"
+    "@smithy/middleware-stack" "^2.0.6"
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/node-http-handler" "^2.1.8"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/smithy-client" "^2.1.12"
+    "@smithy/types" "^2.4.0"
+    "@smithy/url-parser" "^2.0.12"
+    "@smithy/util-base64" "^2.0.0"
+    "@smithy/util-body-length-browser" "^2.0.0"
+    "@smithy/util-body-length-node" "^2.1.0"
+    "@smithy/util-defaults-mode-browser" "^2.0.16"
+    "@smithy/util-defaults-mode-node" "^2.0.21"
+    "@smithy/util-endpoints" "^1.0.2"
+    "@smithy/util-retry" "^2.0.5"
+    "@smithy/util-utf8" "^2.0.0"
+    fast-xml-parser "4.2.5"
+    tslib "^2.5.0"
+
+"@aws-sdk/core@3.436.0":
+  version "3.436.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/core/-/core-3.436.0.tgz#d85ecde9ac524a8f3cfe7e29b9e16942d7291723"
+  integrity sha512-vX5/LjXvCejC2XUY6TSg1oozjqK6BvkE75t0ys9dgqyr5PlZyZksMoeAFHUlj0sCjhT3ziWCujP1oiSpPWY9hg==
+  dependencies:
+    "@smithy/smithy-client" "^2.1.12"
+
+"@aws-sdk/credential-provider-env@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz#7cceca1002ba2e79e10a9dfb119442bea7b88e7c"
+  integrity sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/property-provider" "^2.0.0"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-ini@3.438.0":
+  version "3.438.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.438.0.tgz#845b09d2996e235d125a148aa8eca2f448d0d48e"
+  integrity sha512-WYPQR3pXoHJjn9/RMWipUhsUNFy6zhOiII6u8LJ5w84aNqIjV4+BdRYztRNGJD98jdtekhbkX0YKoSuZqP+unQ==
+  dependencies:
+    "@aws-sdk/credential-provider-env" "3.433.0"
+    "@aws-sdk/credential-provider-process" "3.433.0"
+    "@aws-sdk/credential-provider-sso" "3.438.0"
+    "@aws-sdk/credential-provider-web-identity" "3.433.0"
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/credential-provider-imds" "^2.0.0"
+    "@smithy/property-provider" "^2.0.0"
+    "@smithy/shared-ini-file-loader" "^2.0.6"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-node@3.438.0":
+  version "3.438.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.438.0.tgz#dfe72b8d580c70ed5b807741111be09dfe5aa5ae"
+  integrity sha512-uaw3D2R0svyrC32qyZ2aOv/l0AT9eClh+eQsZJTQD3Kz9q+2VdeOBThQ8fsMfRtm26nUbZo6A/CRwxkm6okI+w==
+  dependencies:
+    "@aws-sdk/credential-provider-env" "3.433.0"
+    "@aws-sdk/credential-provider-ini" "3.438.0"
+    "@aws-sdk/credential-provider-process" "3.433.0"
+    "@aws-sdk/credential-provider-sso" "3.438.0"
+    "@aws-sdk/credential-provider-web-identity" "3.433.0"
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/credential-provider-imds" "^2.0.0"
+    "@smithy/property-provider" "^2.0.0"
+    "@smithy/shared-ini-file-loader" "^2.0.6"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-process@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz#dd51c92480ed620e4c3f989852ee408ab1209d59"
+  integrity sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/property-provider" "^2.0.0"
+    "@smithy/shared-ini-file-loader" "^2.0.6"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-sso@3.438.0":
+  version "3.438.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.438.0.tgz#871062ae67f7f73e0b8725d3a84a27b6f3c9708d"
+  integrity sha512-Xykli/64xR18cBV5P0XFxcH120omtfAjC/cFy/9nFU/+dPvbk0uu1yEOZYteWHyGGkPN4PkHmbh60GiUCLQkWQ==
+  dependencies:
+    "@aws-sdk/client-sso" "3.438.0"
+    "@aws-sdk/token-providers" "3.438.0"
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/property-provider" "^2.0.0"
+    "@smithy/shared-ini-file-loader" "^2.0.6"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-web-identity@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz#32403ba9cc47d3c46500f3c8e5e0041d20e4dbe8"
+  integrity sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/property-provider" "^2.0.0"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/lib-storage@^3.441.0":
+  version "3.441.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/lib-storage/-/lib-storage-3.441.0.tgz#3b048170021db978180156ea2164c9d0d907959d"
+  integrity sha512-Olj/kVIhJo9Cvw06dzn0uQ8M29L7Vu8tSj4MHCewH0goJ0GGIclOf83uVofMZO94zG7X/bv6+4CtNBJIhlokQw==
+  dependencies:
+    "@smithy/abort-controller" "^2.0.1"
+    "@smithy/middleware-endpoint" "^2.1.3"
+    "@smithy/smithy-client" "^2.1.12"
+    buffer "5.6.0"
+    events "3.3.0"
+    stream-browserify "3.0.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-bucket-endpoint@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.433.0.tgz#2ed355bc78491d093efbe69ad18fef43194a215f"
+  integrity sha512-Lk1xIu2tWTRa1zDw5hCF1RrpWQYSodUhrS/q3oKz8IAoFqEy+lNaD5jx+fycuZb5EkE4IzWysT+8wVkd0mAnOg==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@aws-sdk/util-arn-parser" "3.310.0"
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-config-provider" "^2.0.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-expect-continue@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.433.0.tgz#52139e80023a3560266de63e8fc68f517efa0f07"
+  integrity sha512-Uq2rPIsjz0CR2sulM/HyYr5WiqiefrSRLdwUZuA7opxFSfE808w5DBWSprHxbH3rbDSQR4nFiOiVYIH8Eth7nA==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-flexible-checksums@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.433.0.tgz#7fd27d903f539f46109afdbae5ff2a23bba36690"
+  integrity sha512-Ptssx373+I7EzFUWjp/i/YiNFt6I6sDuRHz6DOUR9nmmRTlHHqmdcBXlJL2d9wwFxoBRCN8/PXGsTc/DJ4c95Q==
+  dependencies:
+    "@aws-crypto/crc32" "3.0.0"
+    "@aws-crypto/crc32c" "3.0.0"
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/is-array-buffer" "^2.0.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-utf8" "^2.0.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-host-header@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz#3b6687ee4021c2b56c96cff61b45a33fb762b1c7"
+  integrity sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-location-constraint@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.433.0.tgz#d9085df0ff6c7a4cf4077c41ce39386b2acae5a4"
+  integrity sha512-2YD860TGntwZifIUbxm+lFnNJJhByR/RB/+fV1I8oGKg+XX2rZU+94pRfHXRywoZKlCA0L+LGDA1I56jxrB9sw==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-logger@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz#fcd4e31a8f134861cd519477b959c218a3600186"
+  integrity sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-recursion-detection@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz#5b4b7878ea46c70f507c9ea7c30ad0e5ee4ae6bf"
+  integrity sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-sdk-s3@3.440.0":
+  version "3.440.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.440.0.tgz#43d9028f557a579ff96515e46968deef430f3fed"
+  integrity sha512-DVTSr+82Z8jR9xTwDN3YHzxX7qvi0n96V92OfxvSRDq2BldCEx/KEL1orUZjw97SAXhINOlUWjRR7j4HpwWQtQ==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@aws-sdk/util-arn-parser" "3.310.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/smithy-client" "^2.1.12"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-sdk-sts@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz#9b30f17a922ecc5fd46b93f1edcd20d7146b814f"
+  integrity sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==
+  dependencies:
+    "@aws-sdk/middleware-signing" "3.433.0"
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-signing@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz#670557ace5b97729dbabb6a991815e44eb0ef03b"
+  integrity sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/property-provider" "^2.0.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/signature-v4" "^2.0.0"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-middleware" "^2.0.5"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-ssec@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.433.0.tgz#91a6d3d12362831e1187e9f81f499e10ee21229e"
+  integrity sha512-2AMaPx0kYfCiekxoL7aqFqSSoA9du+yI4zefpQNLr+1cZOerYiDxdsZ4mbqStR1CVFaX6U6hrYokXzjInsvETw==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/middleware-user-agent@3.438.0":
+  version "3.438.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.438.0.tgz#a1165134d5b95e1fbeb841740084b3a43dead18a"
+  integrity sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@aws-sdk/util-endpoints" "3.438.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/region-config-resolver@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.433.0.tgz#37eb5f40db8af7ba9361aeb28c62b45421e780f0"
+  integrity sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==
+  dependencies:
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-config-provider" "^2.0.0"
+    "@smithy/util-middleware" "^2.0.5"
+    tslib "^2.5.0"
+
+"@aws-sdk/signature-v4-multi-region@3.437.0":
+  version "3.437.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.437.0.tgz#4c95021a5617884c1fe2440466112a803c4540eb"
+  integrity sha512-MmrqudssOs87JgVg7HGVdvJws/t4kcOrJJd+975ki+DPeSoyK2U4zBDfDkJ+n0tFuZBs3sLwLh0QXE7BV28rRA==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/signature-v4" "^2.0.0"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/token-providers@3.438.0":
+  version "3.438.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/token-providers/-/token-providers-3.438.0.tgz#e91baa37c9c78cb5b21cae96a12e7e1705c931d3"
+  integrity sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww==
+  dependencies:
+    "@aws-crypto/sha256-browser" "3.0.0"
+    "@aws-crypto/sha256-js" "3.0.0"
+    "@aws-sdk/middleware-host-header" "3.433.0"
+    "@aws-sdk/middleware-logger" "3.433.0"
+    "@aws-sdk/middleware-recursion-detection" "3.433.0"
+    "@aws-sdk/middleware-user-agent" "3.438.0"
+    "@aws-sdk/region-config-resolver" "3.433.0"
+    "@aws-sdk/types" "3.433.0"
+    "@aws-sdk/util-endpoints" "3.438.0"
+    "@aws-sdk/util-user-agent-browser" "3.433.0"
+    "@aws-sdk/util-user-agent-node" "3.437.0"
+    "@smithy/config-resolver" "^2.0.16"
+    "@smithy/fetch-http-handler" "^2.2.4"
+    "@smithy/hash-node" "^2.0.12"
+    "@smithy/invalid-dependency" "^2.0.12"
+    "@smithy/middleware-content-length" "^2.0.14"
+    "@smithy/middleware-endpoint" "^2.1.3"
+    "@smithy/middleware-retry" "^2.0.18"
+    "@smithy/middleware-serde" "^2.0.12"
+    "@smithy/middleware-stack" "^2.0.6"
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/node-http-handler" "^2.1.8"
+    "@smithy/property-provider" "^2.0.0"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/shared-ini-file-loader" "^2.0.6"
+    "@smithy/smithy-client" "^2.1.12"
+    "@smithy/types" "^2.4.0"
+    "@smithy/url-parser" "^2.0.12"
+    "@smithy/util-base64" "^2.0.0"
+    "@smithy/util-body-length-browser" "^2.0.0"
+    "@smithy/util-body-length-node" "^2.1.0"
+    "@smithy/util-defaults-mode-browser" "^2.0.16"
+    "@smithy/util-defaults-mode-node" "^2.0.21"
+    "@smithy/util-endpoints" "^1.0.2"
+    "@smithy/util-retry" "^2.0.5"
+    "@smithy/util-utf8" "^2.0.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/types@3.433.0", "@aws-sdk/types@^3.222.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/types/-/types-3.433.0.tgz#0f94eae2a4a3525ca872c9ab04e143c01806d755"
+  integrity sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/util-arn-parser@3.310.0":
+  version "3.310.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz#861ff8810851be52a320ec9e4786f15b5fc74fba"
+  integrity sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==
+  dependencies:
+    tslib "^2.5.0"
+
+"@aws-sdk/util-endpoints@3.438.0":
+  version "3.438.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/util-endpoints/-/util-endpoints-3.438.0.tgz#fe79a0ad87fc201c8ecb422f6f040bd300c98df9"
+  integrity sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/util-endpoints" "^1.0.2"
+    tslib "^2.5.0"
+
+"@aws-sdk/util-locate-window@^3.0.0":
+  version "3.310.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz#b071baf050301adee89051032bd4139bba32cc40"
+  integrity sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==
+  dependencies:
+    tslib "^2.5.0"
+
+"@aws-sdk/util-user-agent-browser@3.433.0":
+  version "3.433.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz#b5ed0c0cca0db34a2c1c2ffc1b65e7cdd8dc88ff"
+  integrity sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/types" "^2.4.0"
+    bowser "^2.11.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/util-user-agent-node@3.437.0":
+  version "3.437.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.437.0.tgz#f77729854ddf049ccaba8bae3d8fa279812b4716"
+  integrity sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA==
+  dependencies:
+    "@aws-sdk/types" "3.433.0"
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@aws-sdk/util-utf8-browser@^3.0.0":
+  version "3.259.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff"
+  integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==
+  dependencies:
+    tslib "^2.3.1"
+
+"@aws-sdk/xml-builder@3.310.0":
+  version "3.310.0"
+  resolved "https://registry.npmmirror.com/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz#f0236f2103b438d16117e0939a6305ad69b7ff76"
+  integrity sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==
+  dependencies:
+    tslib "^2.5.0"
+
+"@babel/code-frame@^7.22.13":
+  version "7.22.13"
+  resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
+  integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
+  dependencies:
+    "@babel/highlight" "^7.22.13"
+    chalk "^2.4.2"
+
+"@babel/generator@7.17.7":
+  version "7.17.7"
+  resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad"
+  integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==
+  dependencies:
+    "@babel/types" "^7.17.0"
+    jsesc "^2.5.1"
+    source-map "^0.5.0"
+
+"@babel/generator@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
+  integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
+  dependencies:
+    "@babel/types" "^7.23.0"
+    "@jridgewell/gen-mapping" "^0.3.2"
+    "@jridgewell/trace-mapping" "^0.3.17"
+    jsesc "^2.5.1"
+
+"@babel/helper-environment-visitor@^7.22.20":
+  version "7.22.20"
+  resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
+  integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@babel/helper-function-name@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+  integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+  dependencies:
+    "@babel/template" "^7.22.15"
+    "@babel/types" "^7.23.0"
+
+"@babel/helper-hoist-variables@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+  integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.6":
+  version "7.22.6"
+  resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+  integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+  dependencies:
+    "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
+  integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+
+"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.22.20":
+  version "7.22.20"
+  resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+  integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@babel/highlight@^7.22.13":
+  version "7.22.20"
+  resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
+  integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.22.20"
+    chalk "^2.4.2"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.20.5", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
+  integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
+
+"@babel/template@^7.22.15":
+  version "7.22.15"
+  resolved "https://registry.npmmirror.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
+  integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
+  dependencies:
+    "@babel/code-frame" "^7.22.13"
+    "@babel/parser" "^7.22.15"
+    "@babel/types" "^7.22.15"
+
+"@babel/traverse@7.23.2":
+  version "7.23.2"
+  resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
+  integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
+  dependencies:
+    "@babel/code-frame" "^7.22.13"
+    "@babel/generator" "^7.23.0"
+    "@babel/helper-environment-visitor" "^7.22.20"
+    "@babel/helper-function-name" "^7.23.0"
+    "@babel/helper-hoist-variables" "^7.22.5"
+    "@babel/helper-split-export-declaration" "^7.22.6"
+    "@babel/parser" "^7.23.0"
+    "@babel/types" "^7.23.0"
+    debug "^4.1.0"
+    globals "^11.1.0"
+
+"@babel/types@7.17.0":
+  version "7.17.0"
+  resolved "https://registry.npmmirror.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b"
+  integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.16.7"
+    to-fast-properties "^2.0.0"
+
+"@babel/types@^7.17.0", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0":
+  version "7.23.0"
+  resolved "https://registry.npmmirror.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
+  integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
+  dependencies:
+    "@babel/helper-string-parser" "^7.22.5"
+    "@babel/helper-validator-identifier" "^7.22.20"
+    to-fast-properties "^2.0.0"
+
+"@cspotcode/source-map-support@^0.8.0":
+  version "0.8.1"
+  resolved "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
+  integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+  dependencies:
+    "@jridgewell/trace-mapping" "0.3.9"
+
+"@jridgewell/gen-mapping@^0.3.2":
+  version "0.3.3"
+  resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
+  integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
+
+"@jridgewell/set-array@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+  version "1.4.15"
+  resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@0.3.9":
+  version "0.3.9"
+  resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+  integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.0.3"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.20"
+  resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
+  integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.1.0"
+    "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@smithy/abort-controller@^2.0.1", "@smithy/abort-controller@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/abort-controller/-/abort-controller-2.0.12.tgz#62cd47c81fa1d7d6c2d6fde0c2f54ea89892fb6a"
+  integrity sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/chunked-blob-reader-native@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz#f6d0eeeb5481026b68b054f45540d924c194d558"
+  integrity sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==
+  dependencies:
+    "@smithy/util-base64" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/chunked-blob-reader@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz#c44fe2c780eaf77f9e5381d982ac99a880cce51b"
+  integrity sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/config-resolver@^2.0.16":
+  version "2.0.16"
+  resolved "https://registry.npmmirror.com/@smithy/config-resolver/-/config-resolver-2.0.16.tgz#f2abf65a21f56731fdab2d39d2df2dd0e377c9cc"
+  integrity sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==
+  dependencies:
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-config-provider" "^2.0.0"
+    "@smithy/util-middleware" "^2.0.5"
+    tslib "^2.5.0"
+
+"@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.0.18":
+  version "2.0.18"
+  resolved "https://registry.npmmirror.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz#9a5b8be3f268bb4ac7b7ef321f57b0e9a61e2940"
+  integrity sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==
+  dependencies:
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/property-provider" "^2.0.13"
+    "@smithy/types" "^2.4.0"
+    "@smithy/url-parser" "^2.0.12"
+    tslib "^2.5.0"
+
+"@smithy/eventstream-codec@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-2.0.12.tgz#99fab750d0ac3941f341d912d3c3a1ab985e1a7a"
+  integrity sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A==
+  dependencies:
+    "@aws-crypto/crc32" "3.0.0"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-hex-encoding" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/eventstream-serde-browser@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.12.tgz#46b578cf30ec4b91139800d89a752502d2b28a41"
+  integrity sha512-0pi8QlU/pwutNshoeJcbKR1p7Ie5STd8UFAMX5xhSoSJjNlxIv/OsHbF023jscMRN2Prrqd6ToGgdCnsZVQjvg==
+  dependencies:
+    "@smithy/eventstream-serde-universal" "^2.0.12"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/eventstream-serde-config-resolver@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.12.tgz#07871d226561394dfd6b468a7ede142b01491a76"
+  integrity sha512-I0XfwQkIX3gAnbrU5rLMkBSjTM9DHttdbLwf12CXmj7SSI5dT87PxtKLRrZGanaCMbdf2yCep+MW5/4M7IbvQA==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/eventstream-serde-node@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.12.tgz#9f27037b7c782f9cbde6cc10a054df37915b0726"
+  integrity sha512-vf1vMHGOkG3uqN9x1zKOhnvW/XgvhJXWqjV6zZiT2FMjlEayugQ1mzpSqr7uf89+BzjTzuZKERmOsEAmewLbxw==
+  dependencies:
+    "@smithy/eventstream-serde-universal" "^2.0.12"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/eventstream-serde-universal@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.12.tgz#59593439e153c576ab2d46f233c7bc4ddc364cb3"
+  integrity sha512-xZ3ZNpCxIND+q+UCy7y1n1/5VQEYicgSTNCcPqsKawX+Vd+6OcFX7gUHMyPzL8cZr+GdmJuxNleqHlH4giK2tw==
+  dependencies:
+    "@smithy/eventstream-codec" "^2.0.12"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/fetch-http-handler@^2.2.4":
+  version "2.2.4"
+  resolved "https://registry.npmmirror.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.4.tgz#405716581a5a336f2c162daf4169bff600fc47ce"
+  integrity sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==
+  dependencies:
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/querystring-builder" "^2.0.12"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-base64" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/hash-blob-browser@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.12.tgz#e030356ec480099db614adac8cc30f41a4f8a6ec"
+  integrity sha512-riLnV16f27yyePX8UF0deRHAeccUK8SrOxyTykSTrnVkgS3DsjNapZtTbd8OGNKEbI60Ncdb5GwN3rHZudXvog==
+  dependencies:
+    "@smithy/chunked-blob-reader" "^2.0.0"
+    "@smithy/chunked-blob-reader-native" "^2.0.0"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/hash-node@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/hash-node/-/hash-node-2.0.12.tgz#514586ca3f54840322273029eef66c41d9001e39"
+  integrity sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-buffer-from" "^2.0.0"
+    "@smithy/util-utf8" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/hash-stream-node@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/hash-stream-node/-/hash-stream-node-2.0.12.tgz#9ad95895e946998991890e1c6a5694d63ad40fde"
+  integrity sha512-x/DrSynPKrW0k00q7aZ/vy531a3mRw79mOajHp+cIF0TrA1SqEMFoy/B8X0XtoAtlJWt/vvgeDNqt/KAeaAqMw==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-utf8" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/invalid-dependency@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.12.tgz#de78a5e9457cc397aad0648e18c0260b522fe604"
+  integrity sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/is-array-buffer@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz#8fa9b8040651e7ba0b2f6106e636a91354ff7d34"
+  integrity sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/md5-js@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/md5-js/-/md5-js-2.0.12.tgz#9625cb33a894713fb6d8a817bafd4f84e23ea506"
+  integrity sha512-OgDt+Xnrw+W5z3MSl5KZZzebqmXrYl9UdbCiBYnnjErmNywwSjV6QB/Oic3/7hnsPniSU81n7Rvlhz2kH4EREQ==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-utf8" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/middleware-content-length@^2.0.14":
+  version "2.0.14"
+  resolved "https://registry.npmmirror.com/@smithy/middleware-content-length/-/middleware-content-length-2.0.14.tgz#ee1aa842490cee90b6ac208fb13a7d56d3ed84f2"
+  integrity sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==
+  dependencies:
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/middleware-endpoint@^2.1.3":
+  version "2.1.3"
+  resolved "https://registry.npmmirror.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz#ab7ebff4ecbc9b02ec70dd57179f47c4f16bf03f"
+  integrity sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==
+  dependencies:
+    "@smithy/middleware-serde" "^2.0.12"
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/shared-ini-file-loader" "^2.2.2"
+    "@smithy/types" "^2.4.0"
+    "@smithy/url-parser" "^2.0.12"
+    "@smithy/util-middleware" "^2.0.5"
+    tslib "^2.5.0"
+
+"@smithy/middleware-retry@^2.0.18":
+  version "2.0.18"
+  resolved "https://registry.npmmirror.com/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz#37982552a1d3815148797831df025e470423fc5e"
+  integrity sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==
+  dependencies:
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/service-error-classification" "^2.0.5"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-middleware" "^2.0.5"
+    "@smithy/util-retry" "^2.0.5"
+    tslib "^2.5.0"
+    uuid "^8.3.2"
+
+"@smithy/middleware-serde@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/middleware-serde/-/middleware-serde-2.0.12.tgz#edc93c400a5ffec6c068419163f9d880bdff5e5b"
+  integrity sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/middleware-stack@^2.0.6":
+  version "2.0.6"
+  resolved "https://registry.npmmirror.com/@smithy/middleware-stack/-/middleware-stack-2.0.6.tgz#c58d6e4ffc4498bf47fd27adcddd142395d3ba84"
+  integrity sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/node-config-provider@^2.1.3":
+  version "2.1.3"
+  resolved "https://registry.npmmirror.com/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz#bf4cee69df08d43618ad4329d234351b14d98ef7"
+  integrity sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==
+  dependencies:
+    "@smithy/property-provider" "^2.0.13"
+    "@smithy/shared-ini-file-loader" "^2.2.2"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/node-http-handler@^2.1.8":
+  version "2.1.8"
+  resolved "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-2.1.8.tgz#aad989d5445c43a677e7e6161c6fa4abd0e46023"
+  integrity sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==
+  dependencies:
+    "@smithy/abort-controller" "^2.0.12"
+    "@smithy/protocol-http" "^3.0.8"
+    "@smithy/querystring-builder" "^2.0.12"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/property-provider@^2.0.0", "@smithy/property-provider@^2.0.13":
+  version "2.0.13"
+  resolved "https://registry.npmmirror.com/@smithy/property-provider/-/property-provider-2.0.13.tgz#45ee47ad79d638082523f944c49fd2e851312098"
+  integrity sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/protocol-http@^3.0.8":
+  version "3.0.8"
+  resolved "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-3.0.8.tgz#0f7c114f6b8e23a57dff7a275d085bac97b9233c"
+  integrity sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/querystring-builder@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/querystring-builder/-/querystring-builder-2.0.12.tgz#d13e0eea08d43596bdbb182206ccdee0956d06fd"
+  integrity sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-uri-escape" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/querystring-parser@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz#d2c234031e266359716a0c62c8c1208a5bd2557e"
+  integrity sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/service-error-classification@^2.0.5":
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/@smithy/service-error-classification/-/service-error-classification-2.0.5.tgz#22c84fad456730adfa31cae91d47acd31304c346"
+  integrity sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+
+"@smithy/shared-ini-file-loader@^2.0.6", "@smithy/shared-ini-file-loader@^2.2.2":
+  version "2.2.2"
+  resolved "https://registry.npmmirror.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz#b52064c5254a01f5c98a821207448de439938667"
+  integrity sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/signature-v4@^2.0.0":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-2.0.12.tgz#4f9f5bba25e784d110fdc4a276b715feae82bb28"
+  integrity sha512-6Kc2lCZEVmb1nNYngyNbWpq0d82OZwITH11SW/Q0U6PX5fH7B2cIcFe7o6eGEFPkTZTP8itTzmYiGcECL0D0Lw==
+  dependencies:
+    "@smithy/eventstream-codec" "^2.0.12"
+    "@smithy/is-array-buffer" "^2.0.0"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-hex-encoding" "^2.0.0"
+    "@smithy/util-middleware" "^2.0.5"
+    "@smithy/util-uri-escape" "^2.0.0"
+    "@smithy/util-utf8" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/smithy-client@^2.1.12":
+  version "2.1.12"
+  resolved "https://registry.npmmirror.com/@smithy/smithy-client/-/smithy-client-2.1.12.tgz#a7f10ab846d41ce1042eb81f087c4c9eb438b481"
+  integrity sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==
+  dependencies:
+    "@smithy/middleware-stack" "^2.0.6"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-stream" "^2.0.17"
+    tslib "^2.5.0"
+
+"@smithy/types@^2.4.0":
+  version "2.4.0"
+  resolved "https://registry.npmmirror.com/@smithy/types/-/types-2.4.0.tgz#ed35e429e3ea3d089c68ed1bf951d0ccbdf2692e"
+  integrity sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/url-parser@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/url-parser/-/url-parser-2.0.12.tgz#a4cdd1b66176e48f10d119298f8f90b06b7e8a01"
+  integrity sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==
+  dependencies:
+    "@smithy/querystring-parser" "^2.0.12"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/util-base64@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/util-base64/-/util-base64-2.0.0.tgz#1beeabfb155471d1d41c8d0603be1351f883c444"
+  integrity sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==
+  dependencies:
+    "@smithy/util-buffer-from" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/util-body-length-browser@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz#5447853003b4c73da3bc5f3c5e82c21d592d1650"
+  integrity sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-body-length-node@^2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz#313a5f7c5017947baf5fa018bfc22628904bbcfa"
+  integrity sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-buffer-from@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz#7eb75d72288b6b3001bc5f75b48b711513091deb"
+  integrity sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==
+  dependencies:
+    "@smithy/is-array-buffer" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/util-config-provider@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz#4dd6a793605559d94267312fd06d0f58784b4c38"
+  integrity sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-defaults-mode-browser@^2.0.16":
+  version "2.0.16"
+  resolved "https://registry.npmmirror.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.16.tgz#7d60c4e1d00ed569f47fd6343b822c4ff3c2c9f8"
+  integrity sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==
+  dependencies:
+    "@smithy/property-provider" "^2.0.13"
+    "@smithy/smithy-client" "^2.1.12"
+    "@smithy/types" "^2.4.0"
+    bowser "^2.11.0"
+    tslib "^2.5.0"
+
+"@smithy/util-defaults-mode-node@^2.0.21":
+  version "2.0.21"
+  resolved "https://registry.npmmirror.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz#d10c887b3e641c63e235ce95ba32137fd0bd1838"
+  integrity sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==
+  dependencies:
+    "@smithy/config-resolver" "^2.0.16"
+    "@smithy/credential-provider-imds" "^2.0.18"
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/property-provider" "^2.0.13"
+    "@smithy/smithy-client" "^2.1.12"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/util-endpoints@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/@smithy/util-endpoints/-/util-endpoints-1.0.2.tgz#8be5b840c19661e3830ca10973f775b331bd94cd"
+  integrity sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==
+  dependencies:
+    "@smithy/node-config-provider" "^2.1.3"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/util-hex-encoding@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz#0aa3515acd2b005c6d55675e377080a7c513b59e"
+  integrity sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-middleware@^2.0.5":
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/@smithy/util-middleware/-/util-middleware-2.0.5.tgz#c63dc491de81641c99ade9309f30c54ad0e28fbd"
+  integrity sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==
+  dependencies:
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/util-retry@^2.0.5":
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/@smithy/util-retry/-/util-retry-2.0.5.tgz#1a93721da082301aca61d8b42380369761a7e80d"
+  integrity sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==
+  dependencies:
+    "@smithy/service-error-classification" "^2.0.5"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@smithy/util-stream@^2.0.17":
+  version "2.0.17"
+  resolved "https://registry.npmmirror.com/@smithy/util-stream/-/util-stream-2.0.17.tgz#4c980891b0943e9e64949d7afcf1ec4a7b510ea8"
+  integrity sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==
+  dependencies:
+    "@smithy/fetch-http-handler" "^2.2.4"
+    "@smithy/node-http-handler" "^2.1.8"
+    "@smithy/types" "^2.4.0"
+    "@smithy/util-base64" "^2.0.0"
+    "@smithy/util-buffer-from" "^2.0.0"
+    "@smithy/util-hex-encoding" "^2.0.0"
+    "@smithy/util-utf8" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/util-uri-escape@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz#19955b1a0f517a87ae77ac729e0e411963dfda95"
+  integrity sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==
+  dependencies:
+    tslib "^2.5.0"
+
+"@smithy/util-utf8@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-2.0.0.tgz#b4da87566ea7757435e153799df9da717262ad42"
+  integrity sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==
+  dependencies:
+    "@smithy/util-buffer-from" "^2.0.0"
+    tslib "^2.5.0"
+
+"@smithy/util-waiter@^2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/@smithy/util-waiter/-/util-waiter-2.0.12.tgz#a7348f9fd2bade5f2f3ee7ecf7c43ab86ed244ee"
+  integrity sha512-3sENmyVa1NnOPoiT2NCApPmu7ukP7S/v7kL9IxNmnygkDldn7/yK0TP42oPJLwB2k3mospNsSePIlqdXEUyPHA==
+  dependencies:
+    "@smithy/abort-controller" "^2.0.12"
+    "@smithy/types" "^2.4.0"
+    tslib "^2.5.0"
+
+"@trivago/prettier-plugin-sort-imports@^4.2.1":
+  version "4.2.1"
+  resolved "https://registry.npmmirror.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.2.1.tgz#a4f57df41a46803a75bd8e8ce371b29e78a27eb4"
+  integrity sha512-iuy2MPVURGdxILTchHr15VAioItuYBejKfcTmQFlxIuqA7jeaT6ngr5aUIG6S6U096d6a6lJCgaOwlRrPLlOPg==
+  dependencies:
+    "@babel/generator" "7.17.7"
+    "@babel/parser" "^7.20.5"
+    "@babel/traverse" "7.23.2"
+    "@babel/types" "7.17.0"
+    javascript-natural-sort "0.7.1"
+    lodash "^4.17.21"
+
+"@tsconfig/node10@^1.0.7":
+  version "1.0.9"
+  resolved "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
+  integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
+
+"@tsconfig/node12@^1.0.7":
+  version "1.0.11"
+  resolved "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
+  integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
+
+"@tsconfig/node14@^1.0.0":
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
+  integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
+
+"@tsconfig/node16@^1.0.2":
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
+  integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
+
+"@types/node-fetch@^2.6.4":
+  version "2.6.7"
+  resolved "https://registry.npmmirror.com/@types/node-fetch/-/node-fetch-2.6.7.tgz#a1abe2ce24228b58ad97f99480fdcf9bbc6ab16d"
+  integrity sha512-lX17GZVpJ/fuCjguZ5b3TjEbSENxmEk1B2z02yoXSK9WMEWRivhdSY73wWMn6bpcCDAOh6qAdktpKHIlkDk2lg==
+  dependencies:
+    "@types/node" "*"
+    form-data "^4.0.0"
+
+"@types/node@*":
+  version "20.8.9"
+  resolved "https://registry.npmmirror.com/@types/node/-/node-20.8.9.tgz#646390b4fab269abce59c308fc286dcd818a2b08"
+  integrity sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==
+  dependencies:
+    undici-types "~5.26.4"
+
+"@types/node@^18.11.18":
+  version "18.18.7"
+  resolved "https://registry.npmmirror.com/@types/node/-/node-18.18.7.tgz#bb3a7068dc4ba421b6968f2a259298b3a4e129e8"
+  integrity sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ==
+  dependencies:
+    undici-types "~5.26.4"
+
+"@types/retry@0.12.0":
+  version "0.12.0"
+  resolved "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
+  integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+
+"@types/retry@0.12.2":
+  version "0.12.2"
+  resolved "https://registry.npmmirror.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a"
+  integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==
+
+"@types/uuid@^9.0.1":
+  version "9.0.6"
+  resolved "https://registry.npmmirror.com/@types/uuid/-/uuid-9.0.6.tgz#c91ae743d8344a54b2b0c691195f5ff5265f6dfb"
+  integrity sha512-BT2Krtx4xaO6iwzwMFUYvWBWkV2pr37zD68Vmp1CDV196MzczBRxuEpD6Pr395HAgebC/co7hOphs53r8V7jew==
+
+abort-controller@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+  integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+  dependencies:
+    event-target-shim "^5.0.0"
+
+acorn-walk@^8.1.1:
+  version "8.3.0"
+  resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f"
+  integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==
+
+acorn@^8.4.1:
+  version "8.11.1"
+  resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.1.tgz#29c6f12c3002d884b6f8baa37089e1917425cd3d"
+  integrity sha512-IJTNCJMRHfRfb8un89z1QtS0x890C2QUrUxFMK8zy+RizcId6mfnqOf68Bu9YkDgpLYuvCm6aYbwDatXVZPjMQ==
+
+agentkeepalive@^4.2.1:
+  version "4.5.0"
+  resolved "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
+  integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==
+  dependencies:
+    humanize-ms "^1.2.1"
+
+ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+ansi-styles@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+  integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+arg@^4.1.0:
+  version "4.1.3"
+  resolved "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+base-64@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.npmmirror.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
+  integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==
+
+base64-js@^1.0.2, base64-js@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+binary-extensions@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+binary-search@^1.3.5:
+  version "1.3.6"
+  resolved "https://registry.npmmirror.com/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c"
+  integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==
+
+bowser@^2.11.0:
+  version "2.11.0"
+  resolved "https://registry.npmmirror.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f"
+  integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==
+
+buffer@5.6.0:
+  version "5.6.0"
+  resolved "https://registry.npmmirror.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
+  integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
+  dependencies:
+    base64-js "^1.0.2"
+    ieee754 "^1.1.4"
+
+camelcase@6:
+  version "6.3.0"
+  resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+  integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+chalk@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+charenc@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+  integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
+
+color-convert@^1.9.0:
+  version "1.9.3"
+  resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  dependencies:
+    color-name "1.1.3"
+
+color-name@1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+commander@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+  integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
+
+commander@^2.8.1:
+  version "2.20.3"
+  resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+create-require@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
+  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+crypt@0.0.2:
+  version "0.0.2"
+  resolved "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+  integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
+
+date-format@^4.0.14:
+  version "4.0.14"
+  resolved "https://registry.npmmirror.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400"
+  integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==
+
+debug@^4.1.0, debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+decamelize@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+
+dedent@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.npmmirror.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
+  integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+diff@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+  integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+digest-fetch@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661"
+  integrity sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==
+  dependencies:
+    base-64 "^0.1.0"
+    md5 "^2.3.0"
+
+escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+event-target-shim@^5.0.0:
+  version "5.0.1"
+  resolved "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+  integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
+eventemitter3@^4.0.4:
+  version "4.0.7"
+  resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@3.3.0:
+  version "3.3.0"
+  resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+execa@^8.0.0:
+  version "8.0.1"
+  resolved "https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c"
+  integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==
+  dependencies:
+    cross-spawn "^7.0.3"
+    get-stream "^8.0.1"
+    human-signals "^5.0.0"
+    is-stream "^3.0.0"
+    merge-stream "^2.0.0"
+    npm-run-path "^5.1.0"
+    onetime "^6.0.0"
+    signal-exit "^4.1.0"
+    strip-final-newline "^3.0.0"
+
+expr-eval@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/expr-eval/-/expr-eval-2.0.2.tgz#fa6f044a7b0c93fde830954eb9c5b0f7fbc7e201"
+  integrity sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==
+
+fast-xml-parser@4.2.5:
+  version "4.2.5"
+  resolved "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f"
+  integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==
+  dependencies:
+    strnum "^1.0.5"
+
+flat@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+  integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+flatted@^3.2.7:
+  version "3.2.9"
+  resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
+  integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
+
+form-data-encoder@1.7.2:
+  version "1.7.2"
+  resolved "https://registry.npmmirror.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040"
+  integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==
+
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
+formdata-node@^4.3.2:
+  version "4.4.1"
+  resolved "https://registry.npmmirror.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2"
+  integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==
+  dependencies:
+    node-domexception "1.0.0"
+    web-streams-polyfill "4.0.0-beta.3"
+
+fs-extra@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
+get-stream@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2"
+  integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==
+
+globals@^11.1.0:
+  version "11.12.0"
+  resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+  version "4.2.11"
+  resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+human-signals@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
+  integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
+
+humanize-ms@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+  dependencies:
+    ms "^2.0.0"
+
+ieee754@^1.1.4:
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+inherits@^2.0.3, inherits@~2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+is-any-array@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e"
+  integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==
+
+is-buffer@~1.1.6:
+  version "1.1.6"
+  resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-network-error@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/is-network-error/-/is-network-error-1.0.0.tgz#757d7af42263f18f616626e63af12abb19002bbc"
+  integrity sha512-P3fxi10Aji2FZmHTrMPSNFbNC6nnp4U5juPAIjXPHkUNubi4+qK7vvdsaNpAUwXslhYm9oyjEYTxs1xd/+Ph0w==
+
+is-stream@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
+  integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+javascript-natural-sort@0.7.1:
+  version "0.7.1"
+  resolved "https://registry.npmmirror.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59"
+  integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==
+
+js-tiktoken@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.npmmirror.com/js-tiktoken/-/js-tiktoken-1.0.7.tgz#56933fcd2093e8304060dfde3071bda91812e6f5"
+  integrity sha512-biba8u/clw7iesNEWLOLwrNGoBP2lA+hTaBLs/D45pJdUPFXyxD6nhcDVtADChghv4GgyAiMKYMiRx7x6h7Biw==
+  dependencies:
+    base64-js "^1.5.1"
+
+js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsonfile@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+  integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsonpointer@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
+  integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
+
+langchain@^0.0.174:
+  version "0.0.174"
+  resolved "https://registry.npmmirror.com/langchain/-/langchain-0.0.174.tgz#f25edcc51a1a173feb9509b4179965117b1c1a3b"
+  integrity sha512-nj2t7w/eKfbYGctZrBqOWQpPoeuIRVOSaiITufZ2Q8j+bX2BiZpPQso85n+7UtR8iKS1RwyivkJ6WHbYcdMfDw==
+  dependencies:
+    "@anthropic-ai/sdk" "^0.6.2"
+    ansi-styles "^5.0.0"
+    binary-extensions "^2.2.0"
+    camelcase "6"
+    decamelize "^1.2.0"
+    expr-eval "^2.0.2"
+    flat "^5.0.2"
+    js-tiktoken "^1.0.7"
+    js-yaml "^4.1.0"
+    jsonpointer "^5.0.1"
+    langchainhub "~0.0.6"
+    langsmith "~0.0.31"
+    ml-distance "^4.0.0"
+    object-hash "^3.0.0"
+    openai "~4.4.0"
+    openapi-types "^12.1.3"
+    p-queue "^6.6.2"
+    p-retry "4"
+    uuid "^9.0.0"
+    yaml "^2.2.1"
+    zod "^3.22.3"
+    zod-to-json-schema "^3.20.4"
+
+langchainhub@~0.0.6:
+  version "0.0.6"
+  resolved "https://registry.npmmirror.com/langchainhub/-/langchainhub-0.0.6.tgz#9d2d06e4ce0807b4e8a31e19611f57aef990b54d"
+  integrity sha512-SW6105T+YP1cTe0yMf//7kyshCgvCTyFBMTgH2H3s9rTAR4e+78DA/BBrUL/Mt4Q5eMWui7iGuAYb3pgGsdQ9w==
+
+langsmith@~0.0.31:
+  version "0.0.44"
+  resolved "https://registry.npmmirror.com/langsmith/-/langsmith-0.0.44.tgz#f8688f17a994c3ab04266837ece3796f7b5782ee"
+  integrity sha512-y0K3g6Lua7bvwxLB1Wn8kJR1LYp6cumRg8xX8TooLBmvK8srfv/tyCtlhZ+w1daOQmm1otVMKQ7CHJf83f9ryQ==
+  dependencies:
+    "@types/uuid" "^9.0.1"
+    commander "^10.0.1"
+    p-queue "^6.6.2"
+    p-retry "4"
+    uuid "^9.0.0"
+
+lodash@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log4js@^6.9.1:
+  version "6.9.1"
+  resolved "https://registry.npmmirror.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6"
+  integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==
+  dependencies:
+    date-format "^4.0.14"
+    debug "^4.3.4"
+    flatted "^3.2.7"
+    rfdc "^1.3.0"
+    streamroller "^3.1.5"
+
+make-error@^1.1.1:
+  version "1.3.6"
+  resolved "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+  integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+md5@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
+  integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
+  dependencies:
+    charenc "0.0.2"
+    crypt "0.0.2"
+    is-buffer "~1.1.6"
+
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+  version "2.1.35"
+  resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mimic-fn@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
+  integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
+
+ml-array-mean@^1.1.6:
+  version "1.1.6"
+  resolved "https://registry.npmmirror.com/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56"
+  integrity sha512-MIdf7Zc8HznwIisyiJGRH9tRigg3Yf4FldW8DxKxpCCv/g5CafTw0RRu51nojVEOXuCQC7DRVVu5c7XXO/5joQ==
+  dependencies:
+    ml-array-sum "^1.1.6"
+
+ml-array-sum@^1.1.6:
+  version "1.1.6"
+  resolved "https://registry.npmmirror.com/ml-array-sum/-/ml-array-sum-1.1.6.tgz#d1d89c20793cd29c37b09d40e85681aa4515a955"
+  integrity sha512-29mAh2GwH7ZmiRnup4UyibQZB9+ZLyMShvt4cH4eTK+cL2oEMIZFnSyB3SS8MlsTh6q/w/yh48KmqLxmovN4Dw==
+  dependencies:
+    is-any-array "^2.0.0"
+
+ml-distance-euclidean@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz#3a668d236649d1b8fec96380b9435c6f42c9a817"
+  integrity sha512-yC9/2o8QF0A3m/0IXqCTXCzz2pNEzvmcE/9HFKOZGnTjatvBbsn4lWYJkxENkA4Ug2fnYl7PXQxnPi21sgMy/Q==
+
+ml-distance@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/ml-distance/-/ml-distance-4.0.1.tgz#4741d17a1735888c5388823762271dfe604bd019"
+  integrity sha512-feZ5ziXs01zhyFUUUeZV5hwc0f5JW0Sh0ckU1koZe/wdVkJdGxcP06KNQuF0WBTj8FttQUzcvQcpcrOp/XrlEw==
+  dependencies:
+    ml-array-mean "^1.1.6"
+    ml-distance-euclidean "^2.0.0"
+    ml-tree-similarity "^1.0.0"
+
+ml-tree-similarity@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/ml-tree-similarity/-/ml-tree-similarity-1.0.0.tgz#24705a107e32829e24d945e87219e892159c53f0"
+  integrity sha512-XJUyYqjSuUQkNQHMscr6tcjldsOoAekxADTplt40QKfwW6nd++1wHWV9AArl0Zvw/TIHgNaZZNvr8QGvE8wLRg==
+  dependencies:
+    binary-search "^1.3.5"
+    num-sort "^2.0.0"
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.0.0:
+  version "2.1.3"
+  resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+node-domexception@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
+  integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
+
+node-fetch@^2.6.7:
+  version "2.7.0"
+  resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
+  integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-nailgun-client@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.npmmirror.com/node-nailgun-client/-/node-nailgun-client-0.1.2.tgz#c8ee2f8226664020192e4936cacaadf9aa13ae29"
+  integrity sha512-OC611lR0fsDUSptwnhBf8d3sj4DZ5fiRKfS2QaGPe0kR3Dt9YoZr1MY7utK0scFPTbXuQdSBBbeoKYVbME1q5g==
+  dependencies:
+    commander "^2.8.1"
+
+node-nailgun-server@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.npmmirror.com/node-nailgun-server/-/node-nailgun-server-0.1.4.tgz#80cbf1af37611030c60aa88be72d657994df50d4"
+  integrity sha512-e0Hbh6XPb/7GqATJ45BePaUEO5AwR7InRW/pGeMKHH1cqPMBFCeqdBNfvi+bkVLnsbYOOQE+pAek9nmNoD8sYw==
+  dependencies:
+    commander "^2.8.1"
+
+node-plantuml@^0.9.0:
+  version "0.9.0"
+  resolved "https://registry.npmmirror.com/node-plantuml/-/node-plantuml-0.9.0.tgz#7a6cd34c7c26fbdd3124b1f792974ed6446addcb"
+  integrity sha512-bUnntTGjbpYu1pvXZI/GS6ctcXf3AOMqJxBMO8vFzTT5RwH8Cj/J5Ca6Dy+PEfMiMDdSBCFKSGnvYyBvYnucXg==
+  dependencies:
+    commander "^2.8.1"
+    node-nailgun-client "^0.1.0"
+    node-nailgun-server "^0.1.4"
+    plantuml-encoder "^1.2.5"
+
+npm-run-path@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
+  integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
+  dependencies:
+    path-key "^4.0.0"
+
+num-sort@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b"
+  integrity sha512-1MQz1Ed8z2yckoBeSfkQHHO9K1yDRxxtotKSJ9yvcTUUxSvfvzEq5GwBrjjHEpMlq/k5gvXdmJ1SbYxWtpNoVg==
+
+object-hash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+  integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
+onetime@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
+  integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
+  dependencies:
+    mimic-fn "^4.0.0"
+
+openai@~4.4.0:
+  version "4.4.0"
+  resolved "https://registry.npmmirror.com/openai/-/openai-4.4.0.tgz#dbaab326eb044ddec479951b245850c482678031"
+  integrity sha512-JN0t628Kh95T0IrXl0HdBqnlJg+4Vq0Bnh55tio+dfCnyzHvMLiWyCM9m726MAJD2YkDU4/8RQB6rNbEq9ct2w==
+  dependencies:
+    "@types/node" "^18.11.18"
+    "@types/node-fetch" "^2.6.4"
+    abort-controller "^3.0.0"
+    agentkeepalive "^4.2.1"
+    digest-fetch "^1.3.0"
+    form-data-encoder "1.7.2"
+    formdata-node "^4.3.2"
+    node-fetch "^2.6.7"
+
+openapi-types@^12.1.3:
+  version "12.1.3"
+  resolved "https://registry.npmmirror.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3"
+  integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-queue@^6.6.2:
+  version "6.6.2"
+  resolved "https://registry.npmmirror.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
+  integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==
+  dependencies:
+    eventemitter3 "^4.0.4"
+    p-timeout "^3.2.0"
+
+p-retry@4:
+  version "4.6.2"
+  resolved "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
+  integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
+  dependencies:
+    "@types/retry" "0.12.0"
+    retry "^0.13.1"
+
+p-retry@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.npmmirror.com/p-retry/-/p-retry-6.1.0.tgz#ea5c188f9f818a5bfa89a27bdf043c74fa9be472"
+  integrity sha512-fJLEQ2KqYBJRuaA/8cKMnqhulqNM+bpcjYtXNex2t3mOXKRYPitAJt9NacSf8XAFzcYahSAbKpobiWDSqHSh2g==
+  dependencies:
+    "@types/retry" "0.12.2"
+    is-network-error "^1.0.0"
+    retry "^0.13.1"
+
+p-timeout@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.npmmirror.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
+  integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==
+  dependencies:
+    p-finally "^1.0.0"
+
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-key@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
+  integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
+
+plantuml-encoder@^1.2.5:
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz#7899302cf785de956bf1a167e15420feee5975f7"
+  integrity sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==
+
+readable-stream@^3.5.0:
+  version "3.6.2"
+  resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+retry@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
+  integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
+
+rfdc@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
+  integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
+
+safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+  integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+source-map@^0.5.0:
+  version "0.5.7"
+  resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+
+stream-browserify@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f"
+  integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==
+  dependencies:
+    inherits "~2.0.4"
+    readable-stream "^3.5.0"
+
+stream-buffers@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmmirror.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521"
+  integrity sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==
+
+streamroller@^3.1.5:
+  version "3.1.5"
+  resolved "https://registry.npmmirror.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff"
+  integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==
+  dependencies:
+    date-format "^4.0.14"
+    debug "^4.3.4"
+    fs-extra "^8.1.0"
+
+string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+strip-final-newline@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
+  integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
+
+strnum@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
+  integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
+
+supports-color@^5.3.0:
+  version "5.5.0"
+  resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+ts-node@^10.9.1:
+  version "10.9.1"
+  resolved "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
+  integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
+  dependencies:
+    "@cspotcode/source-map-support" "^0.8.0"
+    "@tsconfig/node10" "^1.0.7"
+    "@tsconfig/node12" "^1.0.7"
+    "@tsconfig/node14" "^1.0.0"
+    "@tsconfig/node16" "^1.0.2"
+    acorn "^8.4.1"
+    acorn-walk "^8.1.1"
+    arg "^4.1.0"
+    create-require "^1.1.0"
+    diff "^4.0.1"
+    make-error "^1.1.1"
+    v8-compile-cache-lib "^3.0.1"
+    yn "3.1.1"
+
+tslib@^1.11.1:
+  version "1.14.1"
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.3.1, tslib@^2.5.0:
+  version "2.6.2"
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+  integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
+typescript@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.npmmirror.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
+  integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
+
+undici-types@~5.26.4:
+  version "5.26.5"
+  resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+  integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+universalify@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+util-deprecate@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+uuid@^8.3.2:
+  version "8.3.2"
+  resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+  integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+uuid@^9.0.0:
+  version "9.0.1"
+  resolved "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
+  integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+
+v8-compile-cache-lib@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
+  integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
+
+web-streams-polyfill@4.0.0-beta.3:
+  version "4.0.0-beta.3"
+  resolved "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38"
+  integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==
+
+web-streams-polyfill@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6"
+  integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+which@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+yaml@^2.2.1:
+  version "2.3.3"
+  resolved "https://registry.npmmirror.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9"
+  integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==
+
+yn@3.1.1:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+  integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
+
+zod-to-json-schema@^3.20.4:
+  version "3.21.4"
+  resolved "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.21.4.tgz#de97c5b6d4a25e9d444618486cb55c0c7fb949fd"
+  integrity sha512-fjUZh4nQ1s6HMccgIeE0VP4QG/YRGPmyjO9sAh890aQKPEk3nqbfUXhMFaC+Dr5KvYBm8BCyvfpZf2jY9aGSsw==
+
+zod@^3.22.3:
+  version "3.22.4"
+  resolved "https://registry.npmmirror.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff"
+  integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است