PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
El presente proyecto de grado tiene como objetivo desarrollar un prototipo de chatbot para realizar cotizaciones de servicios de energía solar, implementando la API de OpenAI. Se establecen objetivos específicos que incluyen la definición de requerimientos funcionales y no funcionales, el diseño de...
- Autores:
-
Ramírez Osorio, David Stiven
- Tipo de recurso:
- Trabajo de grado de pregrado
- Fecha de publicación:
- 2024
- Institución:
- Universidad Católica de Pereira
- Repositorio:
- Repositorio Institucional - RIBUC
- Idioma:
- spa
- OAI Identifier:
- oai:repositorio.ucp.edu.co:10785/16616
- Acceso en línea:
- https://hdl.handle.net/10785/16616
https://repositorio.ucp.edu.co/home
- Palabra clave:
- 2. Ingeniería y Tecnología
CHATBOT
ENERGÍA SOLAR
PNL
CHATBO
SOLAR ENERGY
- Rights
- openAccess
- License
- Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
id |
RepoRIBUC2_50e189c4f17c9b717668a91217969848 |
---|---|
oai_identifier_str |
oai:repositorio.ucp.edu.co:10785/16616 |
network_acronym_str |
RepoRIBUC2 |
network_name_str |
Repositorio Institucional - RIBUC |
repository_id_str |
|
dc.title.none.fl_str_mv |
PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR |
title |
PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR |
spellingShingle |
PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR 2. Ingeniería y Tecnología CHATBOT ENERGÍA SOLAR PNL CHATBO SOLAR ENERGY |
title_short |
PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR |
title_full |
PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR |
title_fullStr |
PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR |
title_full_unstemmed |
PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR |
title_sort |
PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR |
dc.creator.fl_str_mv |
Ramírez Osorio, David Stiven |
dc.contributor.advisor.none.fl_str_mv |
Rubiana Pavía, Rafael Ricardo |
dc.contributor.author.none.fl_str_mv |
Ramírez Osorio, David Stiven |
dc.contributor.corporatename.none.fl_str_mv |
Universidad Católica de Pereira |
dc.contributor.jury.none.fl_str_mv |
Quitero Prada, Andrés |
dc.contributor.none.fl_str_mv |
Rubiano Pavía, Rafael Ricardo |
dc.subject.ocde.none.fl_str_mv |
2. Ingeniería y Tecnología |
topic |
2. Ingeniería y Tecnología CHATBOT ENERGÍA SOLAR PNL CHATBO SOLAR ENERGY |
dc.subject.proposal.spa.fl_str_mv |
CHATBOT ENERGÍA SOLAR PNL |
dc.subject.proposal.eng.fl_str_mv |
CHATBO SOLAR ENERGY |
description |
El presente proyecto de grado tiene como objetivo desarrollar un prototipo de chatbot para realizar cotizaciones de servicios de energía solar, implementando la API de OpenAI. Se establecen objetivos específicos que incluyen la definición de requerimientos funcionales y no funcionales, el diseño de la arquitectura del sistema para integrar tecnologías complementarias, la programación del chatbot conforme a los requerimientos y el diseño establecidos, y la ejecución de pruebas exhaustivas que aseguren su correcta operación y usabilidad. El problema abordado radica en las limitaciones de los chatbots basados en reglas, que requieren el desarrollo previo de todas las opciones y presentan dificultades para comprender el lenguaje natural. Mediante el uso de capacidades avanzadas de procesamiento de lenguaje natural, el chatbot propuesto busca superar estos desafíos, proporcionando una herramienta eficiente y flexible para la cotización de servicios de energía solar. |
publishDate |
2024 |
dc.date.issued.none.fl_str_mv |
2024-11-29 |
dc.date.accessioned.none.fl_str_mv |
2025-04-09T14:43:38Z |
dc.date.available.none.fl_str_mv |
2025-04-09T14:43:38Z |
dc.type.none.fl_str_mv |
Trabajo de grado - Pregrado |
dc.type.coar.none.fl_str_mv |
http://purl.org/coar/resource_type/c_7a1f |
dc.type.coarversion.none.fl_str_mv |
http://purl.org/coar/version/c_970fb48d4fbd8a85 |
dc.type.content.none.fl_str_mv |
Text |
dc.type.driver.none.fl_str_mv |
info:eu-repo/semantics/bachelorThesis |
dc.type.redcol.none.fl_str_mv |
http://purl.org/redcol/resource_type/TP |
dc.type.version.none.fl_str_mv |
info:eu-repo/semantics/publishedVersion |
format |
http://purl.org/coar/resource_type/c_7a1f |
status_str |
publishedVersion |
dc.identifier.citation.none.fl_str_mv |
Ramírez Osorio, D. (2024). PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR. Universidad Católica de Pereira. Disponible en: https://hdl.handle.net/10785/16616 |
dc.identifier.uri.none.fl_str_mv |
https://hdl.handle.net/10785/16616 |
dc.identifier.instname.none.fl_str_mv |
Universidad Católica de Pereira |
dc.identifier.repourl.none.fl_str_mv |
https://repositorio.ucp.edu.co/home |
identifier_str_mv |
Ramírez Osorio, D. (2024). PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR. Universidad Católica de Pereira. Disponible en: https://hdl.handle.net/10785/16616 Universidad Católica de Pereira |
url |
https://hdl.handle.net/10785/16616 https://repositorio.ucp.edu.co/home |
dc.language.iso.none.fl_str_mv |
spa |
language |
spa |
dc.relation.references.none.fl_str_mv |
S. K. Freire, “Conversational Assistants in Knowledge-Intensive Contexts: Interactions with LLM- versus Intent-based Systems”, Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://deepmind.google/technologies/gemini-last T. Eloundou, S. Manning, P. Mishkin, y D. Rock, “GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models”, 2023. “Chatbot Evolution: ChatGPT Vs. Rule-based - Analytics Vidhya”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://www.analyticsvidhya.com/blog/2023/05/chatbot-evolution-chatgpt-vs-rule-based/ IBM, “IBM: empresas de Latinoamérica aceleraron el uso de Inteligencia Artificial en 67%”, https://latam.newsroom.ibm.com/2024-03-20-IBM-empresas-de-Latinoamerica-aceleraron-el-uso-de-Inteligencia-Artificial-en-67. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://latam.newsroom.ibm.com/2024-03-20-IBM-empresas-de-Latinoamerica-aceleraron-el-uso-de-Inteligencia-Artificial-en-67 P. Lewis et al., “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”, en Advances in Neural Information Processing Systems (NeurIPS), 2020, pp. 9459–9474. S. A. Florez Galeano y N. O. Escobar ceballos, “Diseño de una arquitectura conversacional por texto que consuma servicios cognitivos de NLP y Machine Learning para la interacción con Chatbots mediante el uso de lenguaje natural”. [En línea]. Disponible en: https://hdl.handle.net/11059/13862 H. A. Martínez Torres, “Propuesta de Chatbot para mejorar los servicios digitales de la Biblioteca Octavio Arizmendi Posada de la Universidad de La Sabana”, septiembre de 2022, Universidad de La Sabana. [En línea]. Disponible en: http://hdl.handle.net/10818/52557 N. Garcia Bocanegra y Presencial, “Implementación de un sistema virtual (chatbot) para la atención al cliente sobre la información de trámites al ciudadano por medio de interacciones conversacionales, para la Secretaría de Educación de la ciudad de Girardot en el año 2022”, may 2022, Consultado: el 20 de septiembre de 2024. [En línea]. Disponible en: http://repository.unipiloto.edu.co/handle/20.500.12277/11613 F. Andrei, G. Ornelas, A. : Maestro, R. Armando, y G. Castro, “INFOTEC CENTRO DE INVESTIGACIÓN E INNOVACIÓN EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN DIRECCIÓN ADJUNTA DE INNOVACIÓN Y CONOCIMIENTO GERENCIA DE CAPITAL HUMANO POSGRADOS ‘DISEÑO E IMPLEMENTACIÓN DE UN ASISTENTE VIRTUAL (CHATBOT) PARA OFRECER ATENCIÓN A LOS CLIENTES DE UNA AEROLÍNEA MEXICANA POR MEDIO DE SUS CANALES CONVERSACIONALES’”. A. Vaswani et al., “Attention Is All You Need”, jun. 2017. Russell S y Norvig P, Artificial Intelligence: A Modern Approach, 3rd ed. Prentice Hall, 2010. D. Jurafsky y J. Martin, Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition, vol. 2. 2008. B. Copeland et al., “The Essential Turing”, sep. 2004, doi: 10.1093/oso/9780198250791.001.0001. A. HODGES, Alan Turing: The Enigma., REV-Revised. Princeton University Press, 1983. doi: 10.2307/j.ctvc77913. I. Goodfellow, Y. Bengio, y A. Courville, Deep Learning. MIT Press, 2016. J. Weizenbaum, “ELIZA—a computer program for the study of natural language communication between man and machine”, Commun. ACM, vol. 9, núm. 1, pp. 36–45, ene. 1966, doi: 10.1145/365153.365168. “Jeopardy! - Wikipedia”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://en.wikipedia.org/wiki/Jeopardy! OpenAI, “GPT-4 Technical Report”, OpenAI, 2023. [En línea]. Disponible en: https://cdn.openai.com/papers/gpt-4.pdf C. Manning y H. Schütze, Foundations of Statistical Natural Language Processing. MIT Press, 1999. [En línea]. Disponible en: https://books.google.com.co/books?id=YiFDxbEX3SUC D. Jurafsky y J. Martin, Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition, vol. 2. 2008. S. , & N. P. Russell, “Artificial Intelligence: A Modern Approach (3ra ed.)”. A. Vaswani et al., “Attention Is All You Need”, jun. 2017. T. B. Brown et al., “Language Models are Few-Shot Learners”, Adv Neural Inf Process Syst, vol. 2020-December, may 2020, Consultado: el 26 de septiembre de 2024. [En línea]. Disponible en: https://arxiv.org/abs/2005.14165v4 S. Bird, E. Klein, y E. Loper, Natural Language Processing with Python: Analyzing Text with the Natural Language Toolkit. O’Reilly Media, 2009. [En línea]. Disponible en: https://books.google.com.co/books?id=KGIbfiiP1i4C J. Hirschberg y C. Manning, “Advances in natural language processing”, Science, vol. 349, pp. 261–266, jul. 2015, doi: 10.1126/science.aaa8685. T. Bolukbasi, K.-W. Chang, J. Zou, V. Saligrama, y A. Kalai, “Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings”, 2016. [En línea]. Disponible en: https://arxiv.org/abs/1607.06520 E. Strubell, A. Ganesh, y A. McCallum, “Energy and Policy Considerations for Deep Learning in NLP”, 2019. [En línea]. Disponible en: https://arxiv.org/abs/1906.02243 Y. Bengio, R. Ducharme, y P. Vincent, A Neural Probabilistic Language Model, vol. 3. 2000. doi: 10.1162/153244303322533223. C. Manning y H. Schütze, Foundations of Statistical Natural Language Processing. MIT Press, 1999. [En línea]. Disponible en: https://books.google.com.co/books?id=YiFDxbEX3SUC Y. Bengio, R. Ducharme, y P. Vincent, A Neural Probabilistic Language Model, vol. 3. 2000. doi: 10.1162/153244303322533223. I. Goodfellow, Y. Bengio, y A. Courville, Deep Learning. MIT Press, 2016. T. Mikolov, K. Chen, G. Corrado, y J. Dean, “Efficient Estimation of Word Representations in Vector Space”, 2013. [En línea]. Disponible en: https://arxiv.org/abs/1301.3781 D. Bahdanau, K. Cho, y Y. Bengio, “Neural Machine Translation by Jointly Learning to Align and Translate”, 2016. [En línea]. Disponible en: https://arxiv.org/abs/1409.0473 S. Hochreiter y J. Schmidhuber, “Long Short-term Memory”, Neural Comput, vol. 9, pp. 1735–1780, dic. 1997, doi: 10.1162/neco.1997.9.8.1735. J. Devlin, M.-W. Chang, K. Lee, K. T. Google, y A. I. Language, “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”, Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://github.com/tensorflow/tensor2tensor R. S. Pressman, “Software Engineering: A Practitioner’s Approach”, 1982. [En línea]. Disponible en: https://api.semanticscholar.org/CorpusID:109130516 “¿Qué es una aplicación web? - Explicación de las aplicaciones web - AWS”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://aws.amazon.com/es/what-is/web-application/ “Lenguajes de Programación”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://repositorio-uapa.cuaieed.unam.mx/repositorio/moodle/pluginfile.php/2655/mod_resource/content/1/UAPA-Lenguajes-Programacion/index.html M. Buttu, El gran libro de Python, 1st ed. Marcombo, 2020. [En línea]. Disponible en: https://www.perlego.com/book/2152364/el-gran-libro-de-python-pdf “¿Qué son las herramientas para desarrolladores?: Explicación sobre las herramientas para desarrolladores: AWS”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://aws.amazon.com/es/what-is/developer-tools/ “Framework: qué es y para qué sirve, significado, ejemplos, características y tipos”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://ebac.mx/blog/frameworks M. Grinberg, Flask Web Development: Developing Web Applications with Python. O’Reilly, 2018. [En línea]. Disponible en: https://books.google.com.co/books?id=cV34swEACAAJ “Documentation for Visual Studio Code”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://code.visualstudio.com/Docs “Qué es un IDE - Concepto, características y ejemplos”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://platzi.com/blog/que-es-ide-editor-de-texto/ “Git - git Documentation”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://git-scm.com/docs/git/es “GitHub · GitHub”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://github.com/github G. Coulouris, J. Dollimore, T. Kindberg, y G. Blair, Distributed Systems: Concepts and Design, 5th ed. USA: Addison-Wesley Publishing Company, 2011. L. Richardson, M. Amundsen, y S. Ruby, RESTful Web APIs. O’Reilly Media, Inc., 2013. W. E. Shotts, The Linux command line: a complete introduction. USA: No Starch Press, 2012. A. Stellman y J. Greene, Learning Agile: Understanding Scrum, XP, Lean, and Kanban. O’Reilly, 2014. [En línea]. Disponible en: https://books.google.com.co/books?id=T7BhngEACAAJ Notion, “Notion”, https://www.notion.so/. Voiceflow, “Voiceflow”, https://www.voiceflow.com/. OpenAI, “OpenAI”, https://openai.com/api/. Google, “Google Cloud”, https://cloud.google.com/. Airtable, “Airtable”, https://www.airtable.com/. OpenAI, “Vector embeddings”, https://platform.openai.com/docs/guides/embeddings. OpenAI, “Function Calling Documentation”, https://platform.openai.com/docs/assistants/tools/function-calling. OpenAI, “OpenAI Documentation: Assistants Tools”, https://platform.openai.com/docs/assistants/tools. Heroku, “Heroku”, https://www.heroku.com/. OpenAI, “OpenAI swarm”, https://github.com/openai/swarm. |
dc.rights.license.none.fl_str_mv |
Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0) |
dc.rights.accessrights.none.fl_str_mv |
info:eu-repo/semantics/openAccess |
dc.rights.coar.none.fl_str_mv |
http://purl.org/coar/access_right/c_abf2 |
rights_invalid_str_mv |
Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0) http://purl.org/coar/access_right/c_abf2 |
eu_rights_str_mv |
openAccess |
dc.format.extent.none.fl_str_mv |
210 |
dc.format.mimetype.none.fl_str_mv |
application/pdf |
dc.publisher.none.fl_str_mv |
Universidad Católica de Pereira |
dc.publisher.faculty.none.fl_str_mv |
Facultad de Ciencias Básicas e Ingeniería |
dc.publisher.place.none.fl_str_mv |
Pereira, Risaralda - Colombia |
dc.publisher.program.none.fl_str_mv |
Ingeniería de Sistemas y Telecomunicaciones |
publisher.none.fl_str_mv |
Universidad Católica de Pereira |
institution |
Universidad Católica de Pereira |
bitstream.url.fl_str_mv |
https://repositorio.ucp.edu.co/bitstreams/e234a4db-d80a-47f5-a08d-1efc788b86c7/download https://repositorio.ucp.edu.co/bitstreams/81340ffd-32b2-446b-a3ee-2ccdd93e105a/download https://repositorio.ucp.edu.co/bitstreams/73b61b7d-872e-418a-9418-0472d2277fc7/download https://repositorio.ucp.edu.co/bitstreams/c2aa296c-9fba-4bd0-8fd1-4ba9ff882887/download |
bitstream.checksum.fl_str_mv |
af4c420a0053ca2621ff29543bad7841 4d85c501cc4e844295f144d4c78d0831 21d96a2a564df95ab7eef0ddc82307ff 73a5432e0b76442b22b026844140d683 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositorio Institucional de la Universidad Católica de Pereira - RIBUC |
repository.mail.fl_str_mv |
bdigital@metabiblioteca.com |
_version_ |
1831929499587969024 |
spelling |
Rubiano Pavía, Rafael RicardoRubiana Pavía, Rafael RicardoRamírez Osorio, David StivenUniversidad Católica de PereiraQuitero Prada, Andrés2025-04-09T14:43:38Z2025-04-09T14:43:38Z2024-11-29Ramírez Osorio, D. (2024). PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR. Universidad Católica de Pereira. Disponible en: https://hdl.handle.net/10785/16616https://hdl.handle.net/10785/16616Universidad Católica de Pereirahttps://repositorio.ucp.edu.co/homeEl presente proyecto de grado tiene como objetivo desarrollar un prototipo de chatbot para realizar cotizaciones de servicios de energía solar, implementando la API de OpenAI. Se establecen objetivos específicos que incluyen la definición de requerimientos funcionales y no funcionales, el diseño de la arquitectura del sistema para integrar tecnologías complementarias, la programación del chatbot conforme a los requerimientos y el diseño establecidos, y la ejecución de pruebas exhaustivas que aseguren su correcta operación y usabilidad. El problema abordado radica en las limitaciones de los chatbots basados en reglas, que requieren el desarrollo previo de todas las opciones y presentan dificultades para comprender el lenguaje natural. Mediante el uso de capacidades avanzadas de procesamiento de lenguaje natural, el chatbot propuesto busca superar estos desafíos, proporcionando una herramienta eficiente y flexible para la cotización de servicios de energía solar.This thesis aims to develop a chatbot prototype for quoting solar energy services, implementing the OpenAI API. Specific objectives include defining functional and non-functional requirements, designing the system architecture to integrate complementary technologies, programming the chatbot according to the established requirements and design, and running exhaustive tests to ensure its correct operation and usability. The problem addressed lies in the limitations of rule-based chatbots, which require prior development of all options and present difficulties in understanding natural language. By using advanced natural language processing capabilities, the proposed chatbot seeks to overcome these challenges, providing an efficient and flexible tool for quoting solar energy services.CONTENIDO .................................................................................................................... 3 LISTA DE FIGURAS ......................................................................................................... 7 LISTA DE TABLAS ......................................................................................................... 11 RESUMEN ...................................................................................................................... 12 1. PLANTEAMIENTO DEL PROBLEMA ..................................................................... 13 1.1. Consecuencias: ................................................................................................ 13 1.2. Causas: ............................................................................................................ 14 2. FORMULACIÓN DEL PROBLEMA ......................................................................... 15 3. OBJETIVO GENERAL ............................................................................................. 16 3.1. Objetivos Específicos ....................................................................................... 16 4. MODALIDAD ........................................................................................................... 17 5. CONTEXTO ............................................................................................................. 18 6. ALCANCE ................................................................................................................ 19 7. ANTECEDENTES .................................................................................................... 20 7.1. Antecedentes Regionales ................................................................................. 20 7.2. Antecedentes Nacionales ................................................................................. 20 7.3. Antecedentes Internacionales .......................................................................... 24 8. MARCO TEÓRICO .................................................................................................. 25 8.1. Introducción a la Inteligencia Artificial y Procesamiento de Lenguaje Natural (PLN) 25 8.1.1. Historia y Evolución de la Inteligencia Artificial ......................................... 25 8.1.1.1. Orígenes de la IA ............................................................................... 25 8.1.1.2. Primeros Avances y Programas Pioneros ......................................... 27 8.1.1.3. Avances Modernos ............................................................................ 30 8.2. Componentes Principales del Procesamiento de Lenguaje Natural (PLN) ...... 32 8.3. Modelos de Lenguaje ....................................................................................... 38 8.3.1. Definición de Modelos de Lenguaje .......................................................... 39 8.3.2. Evolución de los Modelos de Lenguaje ..................................................... 42 8.3.3. Arquitectura de Transformadores .............................................................. 45 4 8.4. Elección del LLM .............................................................................................. 48 8.5. Ingeniería de software ...................................................................................... 48 8.5.1. Sistema web .............................................................................................. 48 8.5.2. Lenguaje de programación ........................................................................ 49 8.5.3. Python ....................................................................................................... 49 8.5.4. Herramientas para desarrollo web ............................................................ 50 8.5.5. Framework ................................................................................................ 50 8.5.6. Flask .......................................................................................................... 51 8.5.7. Visual studio code ..................................................................................... 51 8.5.8. IDE ............................................................................................................ 52 8.5.9. GIT ............................................................................................................ 52 8.5.10. GITHUB ..................................................................................................... 52 8.5.11. Log ............................................................................................................ 53 8.5.12. API ............................................................................................................. 53 8.5.13. JSON ......................................................................................................... 53 8.5.14. API KEY .................................................................................................... 53 8.5.15. Bash .......................................................................................................... 54 8.5.16. Script ......................................................................................................... 54 8.5.17. Shell .......................................................................................................... 54 8.5.18. Terminal .................................................................................................... 54 8.5.19. Agile .......................................................................................................... 54 8.5.20. Kanban ...................................................................................................... 55 9. METODOLOGÍA ...................................................................................................... 58 9.1. Aplicación de la Metodología ............................................................................ 58 9.1.1. Iteración 1 – Análisis y Diseño .................................................................. 59 9.1.2. Iteración 2 - Configuración de APIs y Servicios ........................................ 60 9.1.3. Iteración 3 - Desarrollo del Agente Conversacional .................................. 61 9.1.4. Iteración 4 – Desarrollo Backend .............................................................. 61 9.1.5. Iteración 5 - Despliegue ........................................................................... 62 10. DESARROLLO DEL PROYECTO ....................................................................... 64 10.1. Análisis .......................................................................................................... 64 10.1.1. Levantamiento de requerimientos ............................................................. 64 10.1.1.1. Especificación de casos de uso. ........................................................ 64 10.1.1.2. Recopilación de requisitos detallados ................................................ 67 10.2. Diseño ........................................................................................................... 67 10.2.1. Arquitectura general del sistema .............................................................. 68 10.2.2. Selección componentes del sistema ......................................................... 70 10.2.2.1. Detalle componentes del Sistema ...................................................... 71 10.2.2.2. Estructura del Proyecto ...................................................................... 77 10.2.3. Diseño de flujos de conversación .............................................................. 78 10.2.3.1. Consultas genéricas al Chatbot ......................................................... 79 10.2.3.2. Consulta relacionada a paneles solares ............................................ 80 5 10.2.3.3. Consulta a potencial Solar de una dirección ...................................... 82 10.2.3.4. Almacenar datos para posterior contacto .......................................... 83 10.3. Desarrollo del chatbot ................................................................................... 86 10.3.1. Implementación de diálogos y respuestas predeterminadas .................... 87 10.3.1.1. Diagrama del flujo .............................................................................. 88 10.3.1.2. Diagrama en VoiceFlow ..................................................................... 89 10.3.2. Configuración de APIs y obtención de API Keys ...................................... 90 10.3.2.1. Open-IA .............................................................................................. 91 10.3.2.2. Google Cloud ..................................................................................... 94 10.3.2.3. Solar API ............................................................................................ 96 10.3.2.4. Geocoding API ................................................................................... 97 10.3.2.5. Google Sheets ................................................................................... 98 10.3.3. Definición de servicios y URLs específicos para las APIs externas ........ 103 10.3.3.1. API OpenAI ...................................................................................... 103 10.3.3.2. Geocoding API ................................................................................. 104 10.3.3.3. Solar API: buildingInsights:findClosest ............................................ 104 10.3.3.4. Google Sheets API ........................................................................... 105 10.3.4. Configuración y entrenamiento el agente de GPT4-1106-preview ......... 108 10.3.5. Optimización de prompts para el caso de uso ........................................ 114 10.3.5.1. Versión 1 .......................................................................................... 117 10.3.5.2. Versión 2 .......................................................................................... 120 10.3.5.3. Versión 3 .......................................................................................... 123 10.3.5.4. Versión 4 .......................................................................................... 126 10.3.6. Configuración de ambientes .................................................................... 131 10.3.6.1. Configuración Ambiente local .......................................................... 132 10.3.6.2. Configuración del framework ........................................................... 132 10.3.6.3. Configuración ambiente productivo .................................................. 135 10.4. Desarrollo del Backend ............................................................................... 140 10.4.1. Desarrollo de los repositorios .................................................................. 140 10.4.1.1. Módulo de Geolocalización – geocoding_repository ........................ 141 10.4.1.2. Módulo de gestión de datos del usuario - google_sheets_respository 141 10.4.1.3. Módulo de procesamiento de lenguaje natural – openai_repository 142 10.4.1.4. Módulo de cotización solar - solarapi_repository ............................. 146 10.4.2. Desarrollo de Casos de uso .................................................................... 148 10.4.2.1. Obtener el potencial Solar – get_solar_potential ............................. 148 10.4.2.2. Procesamiento del potencial Solar - parse_financial_analysis ........ 152 10.4.2.3. Almacenamiento de datos del usuario - save_data_customer ........ 154 10.4.3. Desarrollo de servicios ............................................................................ 156 10.4.3.1. Servicio Chatbot – chatbot_service .................................................. 158 10.4.1. Desarrollo de controladores .................................................................... 165 10.5. Despliegue .................................................................................................. 171 10.5.1. Estableciendo fuente de datos ................................................................ 172 6 10.5.2. Estableciendo variables de entorno en Heroku ....................................... 174 10.5.3. Despliegue .............................................................................................. 177 11. PLANIFICACIÓN DEL PROYECTO .................................................................. 183 12. PRUEBAS Y RESULTADOS ............................................................................. 184 13. CONCLUSIONES .............................................................................................. 199 14. RECOMENDACIONES ...................................................................................... 201 15. BIBLIOGRAFIA .................................................................................................. 202 16. ANEXOS ............................................................................................................ 206 16.1. Anexo 1 ....................................................................................................... 206 16.2. Anexo. 2 ...................................................................................................... 210PregradoIngeniero de Sistemas y Telecomunicaciones210application/pdfspaUniversidad Católica de PereiraFacultad de Ciencias Básicas e IngenieríaPereira, Risaralda - ColombiaIngeniería de Sistemas y TelecomunicacionesPROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLARTrabajo de grado - Pregradohttp://purl.org/coar/resource_type/c_7a1fhttp://purl.org/coar/version/c_970fb48d4fbd8a85Textinfo:eu-repo/semantics/bachelorThesishttp://purl.org/redcol/resource_type/TPinfo:eu-repo/semantics/publishedVersionAtribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)info:eu-repo/semantics/openAccesshttp://purl.org/coar/access_right/c_abf2S. K. Freire, “Conversational Assistants in Knowledge-Intensive Contexts: Interactions with LLM- versus Intent-based Systems”, Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://deepmind.google/technologies/gemini-lastT. Eloundou, S. Manning, P. Mishkin, y D. Rock, “GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models”, 2023.“Chatbot Evolution: ChatGPT Vs. Rule-based - Analytics Vidhya”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://www.analyticsvidhya.com/blog/2023/05/chatbot-evolution-chatgpt-vs-rule-based/IBM, “IBM: empresas de Latinoamérica aceleraron el uso de Inteligencia Artificial en 67%”, https://latam.newsroom.ibm.com/2024-03-20-IBM-empresas-de-Latinoamerica-aceleraron-el-uso-de-Inteligencia-Artificial-en-67. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://latam.newsroom.ibm.com/2024-03-20-IBM-empresas-de-Latinoamerica-aceleraron-el-uso-de-Inteligencia-Artificial-en-67P. Lewis et al., “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”, en Advances in Neural Information Processing Systems (NeurIPS), 2020, pp. 9459–9474.S. A. Florez Galeano y N. O. Escobar ceballos, “Diseño de una arquitectura conversacional por texto que consuma servicios cognitivos de NLP y Machine Learning para la interacción con Chatbots mediante el uso de lenguaje natural”. [En línea]. Disponible en: https://hdl.handle.net/11059/13862H. A. Martínez Torres, “Propuesta de Chatbot para mejorar los servicios digitales de la Biblioteca Octavio Arizmendi Posada de la Universidad de La Sabana”, septiembre de 2022, Universidad de La Sabana. [En línea]. Disponible en: http://hdl.handle.net/10818/52557N. Garcia Bocanegra y Presencial, “Implementación de un sistema virtual (chatbot) para la atención al cliente sobre la información de trámites al ciudadano por medio de interacciones conversacionales, para la Secretaría de Educación de la ciudad de Girardot en el año 2022”, may 2022, Consultado: el 20 de septiembre de 2024. [En línea]. Disponible en: http://repository.unipiloto.edu.co/handle/20.500.12277/11613F. Andrei, G. Ornelas, A. : Maestro, R. Armando, y G. Castro, “INFOTEC CENTRO DE INVESTIGACIÓN E INNOVACIÓN EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN DIRECCIÓN ADJUNTA DE INNOVACIÓN Y CONOCIMIENTO GERENCIA DE CAPITAL HUMANO POSGRADOS ‘DISEÑO E IMPLEMENTACIÓN DE UN ASISTENTE VIRTUAL (CHATBOT) PARA OFRECER ATENCIÓN A LOS CLIENTES DE UNA AEROLÍNEA MEXICANA POR MEDIO DE SUS CANALES CONVERSACIONALES’”.A. Vaswani et al., “Attention Is All You Need”, jun. 2017.Russell S y Norvig P, Artificial Intelligence: A Modern Approach, 3rd ed. Prentice Hall, 2010.D. Jurafsky y J. Martin, Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition, vol. 2. 2008.B. Copeland et al., “The Essential Turing”, sep. 2004, doi: 10.1093/oso/9780198250791.001.0001.A. HODGES, Alan Turing: The Enigma., REV-Revised. Princeton University Press, 1983. doi: 10.2307/j.ctvc77913.I. Goodfellow, Y. Bengio, y A. Courville, Deep Learning. MIT Press, 2016.J. Weizenbaum, “ELIZA—a computer program for the study of natural language communication between man and machine”, Commun. ACM, vol. 9, núm. 1, pp. 36–45, ene. 1966, doi: 10.1145/365153.365168.“Jeopardy! - Wikipedia”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://en.wikipedia.org/wiki/Jeopardy!OpenAI, “GPT-4 Technical Report”, OpenAI, 2023. [En línea]. Disponible en: https://cdn.openai.com/papers/gpt-4.pdfC. Manning y H. Schütze, Foundations of Statistical Natural Language Processing. MIT Press, 1999. [En línea]. Disponible en: https://books.google.com.co/books?id=YiFDxbEX3SUCD. Jurafsky y J. Martin, Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition, vol. 2. 2008.S. , & N. P. Russell, “Artificial Intelligence: A Modern Approach (3ra ed.)”.A. Vaswani et al., “Attention Is All You Need”, jun. 2017.T. B. Brown et al., “Language Models are Few-Shot Learners”, Adv Neural Inf Process Syst, vol. 2020-December, may 2020, Consultado: el 26 de septiembre de 2024. [En línea]. Disponible en: https://arxiv.org/abs/2005.14165v4S. Bird, E. Klein, y E. Loper, Natural Language Processing with Python: Analyzing Text with the Natural Language Toolkit. O’Reilly Media, 2009. [En línea]. Disponible en: https://books.google.com.co/books?id=KGIbfiiP1i4CJ. Hirschberg y C. Manning, “Advances in natural language processing”, Science, vol. 349, pp. 261–266, jul. 2015, doi: 10.1126/science.aaa8685.T. Bolukbasi, K.-W. Chang, J. Zou, V. Saligrama, y A. Kalai, “Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings”, 2016. [En línea]. Disponible en: https://arxiv.org/abs/1607.06520E. Strubell, A. Ganesh, y A. McCallum, “Energy and Policy Considerations for Deep Learning in NLP”, 2019. [En línea]. Disponible en: https://arxiv.org/abs/1906.02243Y. Bengio, R. Ducharme, y P. Vincent, A Neural Probabilistic Language Model, vol. 3. 2000. doi: 10.1162/153244303322533223.C. Manning y H. Schütze, Foundations of Statistical Natural Language Processing. MIT Press, 1999. [En línea]. Disponible en: https://books.google.com.co/books?id=YiFDxbEX3SUCY. Bengio, R. Ducharme, y P. Vincent, A Neural Probabilistic Language Model, vol. 3. 2000. doi: 10.1162/153244303322533223.I. Goodfellow, Y. Bengio, y A. Courville, Deep Learning. MIT Press, 2016.T. Mikolov, K. Chen, G. Corrado, y J. Dean, “Efficient Estimation of Word Representations in Vector Space”, 2013. [En línea]. Disponible en: https://arxiv.org/abs/1301.3781D. Bahdanau, K. Cho, y Y. Bengio, “Neural Machine Translation by Jointly Learning to Align and Translate”, 2016. [En línea]. Disponible en: https://arxiv.org/abs/1409.0473S. Hochreiter y J. Schmidhuber, “Long Short-term Memory”, Neural Comput, vol. 9, pp. 1735–1780, dic. 1997, doi: 10.1162/neco.1997.9.8.1735.J. Devlin, M.-W. Chang, K. Lee, K. T. Google, y A. I. Language, “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”, Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://github.com/tensorflow/tensor2tensorR. S. Pressman, “Software Engineering: A Practitioner’s Approach”, 1982. [En línea]. Disponible en: https://api.semanticscholar.org/CorpusID:109130516“¿Qué es una aplicación web? - Explicación de las aplicaciones web - AWS”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://aws.amazon.com/es/what-is/web-application/“Lenguajes de Programación”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://repositorio-uapa.cuaieed.unam.mx/repositorio/moodle/pluginfile.php/2655/mod_resource/content/1/UAPA-Lenguajes-Programacion/index.htmlM. Buttu, El gran libro de Python, 1st ed. Marcombo, 2020. [En línea]. Disponible en: https://www.perlego.com/book/2152364/el-gran-libro-de-python-pdf“¿Qué son las herramientas para desarrolladores?: Explicación sobre las herramientas para desarrolladores: AWS”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://aws.amazon.com/es/what-is/developer-tools/“Framework: qué es y para qué sirve, significado, ejemplos, características y tipos”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://ebac.mx/blog/frameworksM. Grinberg, Flask Web Development: Developing Web Applications with Python. O’Reilly, 2018. [En línea]. Disponible en: https://books.google.com.co/books?id=cV34swEACAAJ“Documentation for Visual Studio Code”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://code.visualstudio.com/Docs“Qué es un IDE - Concepto, características y ejemplos”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://platzi.com/blog/que-es-ide-editor-de-texto/“Git - git Documentation”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://git-scm.com/docs/git/es“GitHub · GitHub”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://github.com/githubG. Coulouris, J. Dollimore, T. Kindberg, y G. Blair, Distributed Systems: Concepts and Design, 5th ed. USA: Addison-Wesley Publishing Company, 2011.L. Richardson, M. Amundsen, y S. Ruby, RESTful Web APIs. O’Reilly Media, Inc., 2013.W. E. Shotts, The Linux command line: a complete introduction. USA: No Starch Press, 2012.A. Stellman y J. Greene, Learning Agile: Understanding Scrum, XP, Lean, and Kanban. O’Reilly, 2014. [En línea]. Disponible en: https://books.google.com.co/books?id=T7BhngEACAAJNotion, “Notion”, https://www.notion.so/.Voiceflow, “Voiceflow”, https://www.voiceflow.com/.OpenAI, “OpenAI”, https://openai.com/api/.Google, “Google Cloud”, https://cloud.google.com/.Airtable, “Airtable”, https://www.airtable.com/.OpenAI, “Vector embeddings”, https://platform.openai.com/docs/guides/embeddings.OpenAI, “Function Calling Documentation”, https://platform.openai.com/docs/assistants/tools/function-calling.OpenAI, “OpenAI Documentation: Assistants Tools”, https://platform.openai.com/docs/assistants/tools.Heroku, “Heroku”, https://www.heroku.com/.OpenAI, “OpenAI swarm”, https://github.com/openai/swarm.2. Ingeniería y TecnologíaCHATBOTENERGÍA SOLARPNLCHATBOSOLAR ENERGYPublicationTEXTDDMIST300.txtDDMIST300.txtExtracted texttext/plain101539https://repositorio.ucp.edu.co/bitstreams/e234a4db-d80a-47f5-a08d-1efc788b86c7/downloadaf4c420a0053ca2621ff29543bad7841MD54THUMBNAILDDMIST300.jpgDDMIST300.jpgGenerated Thumbnailimage/jpeg6105https://repositorio.ucp.edu.co/bitstreams/81340ffd-32b2-446b-a3ee-2ccdd93e105a/download4d85c501cc4e844295f144d4c78d0831MD55ORIGINALDDMIST300DDMIST300application/pdf21765028https://repositorio.ucp.edu.co/bitstreams/73b61b7d-872e-418a-9418-0472d2277fc7/download21d96a2a564df95ab7eef0ddc82307ffMD52LICENSElicense.txtlicense.txttext/plain; charset=utf-815543https://repositorio.ucp.edu.co/bitstreams/c2aa296c-9fba-4bd0-8fd1-4ba9ff882887/download73a5432e0b76442b22b026844140d683MD5310785/16616oai:repositorio.ucp.edu.co:10785/166162025-04-10 03:00:44.546open.accesshttps://repositorio.ucp.edu.coRepositorio Institucional de la Universidad Católica de Pereira - RIBUCbdigital@metabiblioteca.comPHA+TEEgT0JSQSAoVEFMIFkgQ09NTyBTRSBERUZJTkUgTcOBUyBBREVMQU5URSkgU0UgT1RPUkdBIEJBSk8gTE9TIFRFUk1JTk9TIERFIEVTVEEgTElDRU5DSUEgUMOaQkxJQ0EgREUgQ1JFQVRJVkUgQ09NTU9OUyAo4oCcTFBDQ+KAnSBPIOKAnExJQ0VOQ0lB4oCdKS4gTEEgT0JSQSBFU1TDgSBQUk9URUdJREEgUE9SIERFUkVDSE9TIERFIEFVVE9SIFkvVSBPVFJBUyBMRVlFUyBBUExJQ0FCTEVTLiBRVUVEQSBQUk9ISUJJRE8gQ1VBTFFVSUVSIFVTTyBRVUUgU0UgSEFHQSBERSBMQSBPQlJBIFFVRSBOTyBDVUVOVEUgQ09OIExBIEFVVE9SSVpBQ0nDk04gUEVSVElORU5URSBERSBDT05GT1JNSURBRCBDT04gTE9TIFTDiVJNSU5PUyBERSBFU1RBIExJQ0VOQ0lBIFkgREUgTEEgTEVZIERFIERFUkVDSE8gREUgQVVUT1IuPC9wPgo8cD5NRURJQU5URSBFTCBFSkVSQ0lDSU8gREUgQ1VBTFFVSUVSQSBERSBMT1MgREVSRUNIT1MgUVVFIFNFIE9UT1JHQU4gRU4gRVNUQSBMSUNFTkNJQSwgVVNURUQgQUNFUFRBIFkgQUNVRVJEQSBRVUVEQVIgT0JMSUdBRE8gRU4gTE9TIFRFUk1JTk9TIFFVRSBTRSBTRcORQUxBTiBFTiBFTExBLiBFTCBMSUNFTkNJQU5URSBDT05DRURFIEEgVVNURUQgTE9TIERFUkVDSE9TIENPTlRFTklET1MgRU4gRVNUQSBMSUNFTkNJQSBDT05ESUNJT05BRE9TIEEgTEEgQUNFUFRBQ0nDk04gREUgU1VTIFRFUk1JTk9TIFkgQ09ORElDSU9ORVMuPC9wPgo8b2wgdHlwZT0iMSI+CiAgPGxpPgogICAgRGVmaW5pY2lvbmVzCiAgICA8b2wgdHlwZT1hPgogICAgICA8bGk+T2JyYSBDb2xlY3RpdmEgZXMgdW5hIG9icmEsIHRhbCBjb21vIHVuYSBwdWJsaWNhY2nDs24gcGVyacOzZGljYSwgdW5hIGFudG9sb2fDrWEsIG8gdW5hIGVuY2ljbG9wZWRpYSwgZW4gbGEgcXVlIGxhIG9icmEgZW4gc3UgdG90YWxpZGFkLCBzaW4gbW9kaWZpY2FjacOzbiBhbGd1bmEsIGp1bnRvIGNvbiB1biBncnVwbyBkZSBvdHJhcyBjb250cmlidWNpb25lcyBxdWUgY29uc3RpdHV5ZW4gb2JyYXMgc2VwYXJhZGFzIGUgaW5kZXBlbmRpZW50ZXMgZW4gc8OtIG1pc21hcywgc2UgaW50ZWdyYW4gZW4gdW4gdG9kbyBjb2xlY3Rpdm8uIFVuYSBPYnJhIHF1ZSBjb25zdGl0dXllIHVuYSBvYnJhIGNvbGVjdGl2YSBubyBzZSBjb25zaWRlcmFyw6EgdW5hIE9icmEgRGVyaXZhZGEgKGNvbW8gc2UgZGVmaW5lIGFiYWpvKSBwYXJhIGxvcyBwcm9ww7NzaXRvcyBkZSBlc3RhIGxpY2VuY2lhLiBhcXVlbGxhIHByb2R1Y2lkYSBwb3IgdW4gZ3J1cG8gZGUgYXV0b3JlcywgZW4gcXVlIGxhIE9icmEgc2UgZW5jdWVudHJhIHNpbiBtb2RpZmljYWNpb25lcywganVudG8gY29uIHVuYSBjaWVydGEgY2FudGlkYWQgZGUgb3RyYXMgY29udHJpYnVjaW9uZXMsIHF1ZSBjb25zdGl0dXllbiBlbiBzw60gbWlzbW9zIHRyYWJham9zIHNlcGFyYWRvcyBlIGluZGVwZW5kaWVudGVzLCBxdWUgc29uIGludGVncmFkb3MgYWwgdG9kbyBjb2xlY3Rpdm8sIHRhbGVzIGNvbW8gcHVibGljYWNpb25lcyBwZXJpw7NkaWNhcywgYW50b2xvZ8OtYXMgbyBlbmNpY2xvcGVkaWFzLjwvbGk+CiAgICAgIDxsaT5PYnJhIERlcml2YWRhIHNpZ25pZmljYSB1bmEgb2JyYSBiYXNhZGEgZW4gbGEgb2JyYSBvYmpldG8gZGUgZXN0YSBsaWNlbmNpYSBvIGVuIMOpc3RhIHkgb3RyYXMgb2JyYXMgcHJlZXhpc3RlbnRlcywgdGFsZXMgY29tbyB0cmFkdWNjaW9uZXMsIGFycmVnbG9zIG11c2ljYWxlcywgZHJhbWF0aXphY2lvbmVzLCDigJxmaWNjaW9uYWxpemFjaW9uZXPigJ0sIHZlcnNpb25lcyBwYXJhIGNpbmUsIOKAnGdyYWJhY2lvbmVzIGRlIHNvbmlkb+KAnSwgcmVwcm9kdWNjaW9uZXMgZGUgYXJ0ZSwgcmVzw7ptZW5lcywgY29uZGVuc2FjaW9uZXMsIG8gY3VhbHF1aWVyIG90cmEgZW4gbGEgcXVlIGxhIG9icmEgcHVlZGEgc2VyIHRyYW5zZm9ybWFkYSwgY2FtYmlhZGEgbyBhZGFwdGFkYSwgZXhjZXB0byBhcXVlbGxhcyBxdWUgY29uc3RpdHV5YW4gdW5hIG9icmEgY29sZWN0aXZhLCBsYXMgcXVlIG5vIHNlcsOhbiBjb25zaWRlcmFkYXMgdW5hIG9icmEgZGVyaXZhZGEgcGFyYSBlZmVjdG9zIGRlIGVzdGEgbGljZW5jaWEuIChQYXJhIGV2aXRhciBkdWRhcywgZW4gZWwgY2FzbyBkZSBxdWUgbGEgT2JyYSBzZWEgdW5hIGNvbXBvc2ljacOzbiBtdXNpY2FsIG8gdW5hIGdyYWJhY2nDs24gc29ub3JhLCBwYXJhIGxvcyBlZmVjdG9zIGRlIGVzdGEgTGljZW5jaWEgbGEgc2luY3Jvbml6YWNpw7NuIHRlbXBvcmFsIGRlIGxhIE9icmEgY29uIHVuYSBpbWFnZW4gZW4gbW92aW1pZW50byBzZSBjb25zaWRlcmFyw6EgdW5hIE9icmEgRGVyaXZhZGEgcGFyYSBsb3MgZmluZXMgZGUgZXN0YSBsaWNlbmNpYSkuPC9saT4KICAgICAgPGxpPkxpY2VuY2lhbnRlLCBlcyBlbCBpbmRpdmlkdW8gbyBsYSBlbnRpZGFkIHRpdHVsYXIgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yIHF1ZSBvZnJlY2UgbGEgT2JyYSBlbiBjb25mb3JtaWRhZCBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEuPC9saT4KICAgICAgPGxpPkF1dG9yIG9yaWdpbmFsLCBlcyBlbCBpbmRpdmlkdW8gcXVlIGNyZcOzIGxhIE9icmEuPC9saT4KICAgICAgPGxpPk9icmEsIGVzIGFxdWVsbGEgb2JyYSBzdXNjZXB0aWJsZSBkZSBwcm90ZWNjacOzbiBwb3IgZWwgcsOpZ2ltZW4gZGUgRGVyZWNobyBkZSBBdXRvciB5IHF1ZSBlcyBvZnJlY2lkYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGVzdGEgbGljZW5jaWE8L2xpPgogICAgICA8bGk+VXN0ZWQsIGVzIGVsIGluZGl2aWR1byBvIGxhIGVudGlkYWQgcXVlIGVqZXJjaXRhIGxvcyBkZXJlY2hvcyBvdG9yZ2Fkb3MgYWwgYW1wYXJvIGRlIGVzdGEgTGljZW5jaWEgeSBxdWUgY29uIGFudGVyaW9yaWRhZCBubyBoYSB2aW9sYWRvIGxhcyBjb25kaWNpb25lcyBkZSBsYSBtaXNtYSByZXNwZWN0byBhIGxhIE9icmEsIG8gcXVlIGhheWEgb2J0ZW5pZG8gYXV0b3JpemFjacOzbiBleHByZXNhIHBvciBwYXJ0ZSBkZWwgTGljZW5jaWFudGUgcGFyYSBlamVyY2VyIGxvcyBkZXJlY2hvcyBhbCBhbXBhcm8gZGUgZXN0YSBMaWNlbmNpYSBwZXNlIGEgdW5hIHZpb2xhY2nDs24gYW50ZXJpb3IuPC9saT4KICAgIDwvb2w+CiAgPC9saT4KICA8YnIvPgogIDxsaT4KICAgIERlcmVjaG9zIGRlIFVzb3MgSG9ucmFkb3MgeSBleGNlcGNpb25lcyBMZWdhbGVzLgogICAgPHA+TmFkYSBlbiBlc3RhIExpY2VuY2lhIHBvZHLDoSBzZXIgaW50ZXJwcmV0YWRvIGNvbW8gdW5hIGRpc21pbnVjacOzbiwgbGltaXRhY2nDs24gbyByZXN0cmljY2nDs24gZGUgbG9zIGRlcmVjaG9zIGRlcml2YWRvcyBkZWwgdXNvIGhvbnJhZG8geSBvdHJhcyBsaW1pdGFjaW9uZXMgbyBleGNlcGNpb25lcyBhIGxvcyBkZXJlY2hvcyBkZWwgYXV0b3IgYmFqbyBlbCByw6lnaW1lbiBsZWdhbCB2aWdlbnRlIG8gZGVyaXZhZG8gZGUgY3VhbHF1aWVyIG90cmEgbm9ybWEgcXVlIHNlIGxlIGFwbGlxdWUuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgQ29uY2VzacOzbiBkZSBsYSBMaWNlbmNpYS4KICAgIDxwPkJham8gbG9zIHTDqXJtaW5vcyB5IGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEsIGVsIExpY2VuY2lhbnRlIG90b3JnYSBhIFVzdGVkIHVuYSBsaWNlbmNpYSBtdW5kaWFsLCBsaWJyZSBkZSByZWdhbMOtYXMsIG5vIGV4Y2x1c2l2YSB5IHBlcnBldHVhIChkdXJhbnRlIHRvZG8gZWwgcGVyw61vZG8gZGUgdmlnZW5jaWEgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yKSBwYXJhIGVqZXJjZXIgZXN0b3MgZGVyZWNob3Mgc29icmUgbGEgT2JyYSB0YWwgeSBjb21vIHNlIGluZGljYSBhIGNvbnRpbnVhY2nDs246PC9wPgogICAgPG9sIHR5cGU9ImEiPgogICAgICA8bGk+UmVwcm9kdWNpciBsYSBPYnJhLCBpbmNvcnBvcmFyIGxhIE9icmEgZW4gdW5hIG8gbcOhcyBPYnJhcyBDb2xlY3RpdmFzLCB5IHJlcHJvZHVjaXIgbGEgT2JyYSBpbmNvcnBvcmFkYSBlbiBsYXMgT2JyYXMgQ29sZWN0aXZhcy48L2xpPgogICAgICA8bGk+RGlzdHJpYnVpciBjb3BpYXMgbyBmb25vZ3JhbWFzIGRlIGxhcyBPYnJhcywgZXhoaWJpcmxhcyBww7pibGljYW1lbnRlLCBlamVjdXRhcmxhcyBww7pibGljYW1lbnRlIHkvbyBwb25lcmxhcyBhIGRpc3Bvc2ljacOzbiBww7pibGljYSwgaW5jbHV5w6luZG9sYXMgY29tbyBpbmNvcnBvcmFkYXMgZW4gT2JyYXMgQ29sZWN0aXZhcywgc2Vnw7puIGNvcnJlc3BvbmRhLjwvbGk+CiAgICAgIDxsaT5EaXN0cmlidWlyIGNvcGlhcyBkZSBsYXMgT2JyYXMgRGVyaXZhZGFzIHF1ZSBzZSBnZW5lcmVuLCBleGhpYmlybGFzIHDDumJsaWNhbWVudGUsIGVqZWN1dGFybGFzIHDDumJsaWNhbWVudGUgeS9vIHBvbmVybGFzIGEgZGlzcG9zaWNpw7NuIHDDumJsaWNhLjwvbGk+CiAgICA8L29sPgogICAgPHA+TG9zIGRlcmVjaG9zIG1lbmNpb25hZG9zIGFudGVyaW9ybWVudGUgcHVlZGVuIHNlciBlamVyY2lkb3MgZW4gdG9kb3MgbG9zIG1lZGlvcyB5IGZvcm1hdG9zLCBhY3R1YWxtZW50ZSBjb25vY2lkb3MgbyBxdWUgc2UgaW52ZW50ZW4gZW4gZWwgZnV0dXJvLiBMb3MgZGVyZWNob3MgYW50ZXMgbWVuY2lvbmFkb3MgaW5jbHV5ZW4gZWwgZGVyZWNobyBhIHJlYWxpemFyIGRpY2hhcyBtb2RpZmljYWNpb25lcyBlbiBsYSBtZWRpZGEgcXVlIHNlYW4gdMOpY25pY2FtZW50ZSBuZWNlc2FyaWFzIHBhcmEgZWplcmNlciBsb3MgZGVyZWNob3MgZW4gb3RybyBtZWRpbyBvIGZvcm1hdG9zLCBwZXJvIGRlIG90cmEgbWFuZXJhIHVzdGVkIG5vIGVzdMOhIGF1dG9yaXphZG8gcGFyYSByZWFsaXphciBvYnJhcyBkZXJpdmFkYXMuIFRvZG9zIGxvcyBkZXJlY2hvcyBubyBvdG9yZ2Fkb3MgZXhwcmVzYW1lbnRlIHBvciBlbCBMaWNlbmNpYW50ZSBxdWVkYW4gcG9yIGVzdGUgbWVkaW8gcmVzZXJ2YWRvcywgaW5jbHV5ZW5kbyBwZXJvIHNpbiBsaW1pdGFyc2UgYSBhcXVlbGxvcyBxdWUgc2UgbWVuY2lvbmFuIGVuIGxhcyBzZWNjaW9uZXMgNChkKSB5IDQoZSkuPC9wPgogIDwvbGk+CiAgPGJyLz4KICA8bGk+CiAgICBSZXN0cmljY2lvbmVzLgogICAgPHA+TGEgbGljZW5jaWEgb3RvcmdhZGEgZW4gbGEgYW50ZXJpb3IgU2VjY2nDs24gMyBlc3TDoSBleHByZXNhbWVudGUgc3VqZXRhIHkgbGltaXRhZGEgcG9yIGxhcyBzaWd1aWVudGVzIHJlc3RyaWNjaW9uZXM6PC9wPgogICAgPG9sIHR5cGU9ImEiPgogICAgICA8bGk+VXN0ZWQgcHVlZGUgZGlzdHJpYnVpciwgZXhoaWJpciBww7pibGljYW1lbnRlLCBlamVjdXRhciBww7pibGljYW1lbnRlLCBvIHBvbmVyIGEgZGlzcG9zaWNpw7NuIHDDumJsaWNhIGxhIE9icmEgc8OzbG8gYmFqbyBsYXMgY29uZGljaW9uZXMgZGUgZXN0YSBMaWNlbmNpYSwgeSBVc3RlZCBkZWJlIGluY2x1aXIgdW5hIGNvcGlhIGRlIGVzdGEgbGljZW5jaWEgbyBkZWwgSWRlbnRpZmljYWRvciBVbml2ZXJzYWwgZGUgUmVjdXJzb3MgZGUgbGEgbWlzbWEgY29uIGNhZGEgY29waWEgZGUgbGEgT2JyYSBxdWUgZGlzdHJpYnV5YSwgZXhoaWJhIHDDumJsaWNhbWVudGUsIGVqZWN1dGUgcMO6YmxpY2FtZW50ZSBvIHBvbmdhIGEgZGlzcG9zaWNpw7NuIHDDumJsaWNhLiBObyBlcyBwb3NpYmxlIG9mcmVjZXIgbyBpbXBvbmVyIG5pbmd1bmEgY29uZGljacOzbiBzb2JyZSBsYSBPYnJhIHF1ZSBhbHRlcmUgbyBsaW1pdGUgbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEgbyBlbCBlamVyY2ljaW8gZGUgbG9zIGRlcmVjaG9zIGRlIGxvcyBkZXN0aW5hdGFyaW9zIG90b3JnYWRvcyBlbiBlc3RlIGRvY3VtZW50by4gTm8gZXMgcG9zaWJsZSBzdWJsaWNlbmNpYXIgbGEgT2JyYS4gVXN0ZWQgZGViZSBtYW50ZW5lciBpbnRhY3RvcyB0b2RvcyBsb3MgYXZpc29zIHF1ZSBoYWdhbiByZWZlcmVuY2lhIGEgZXN0YSBMaWNlbmNpYSB5IGEgbGEgY2zDoXVzdWxhIGRlIGxpbWl0YWNpw7NuIGRlIGdhcmFudMOtYXMuIFVzdGVkIG5vIHB1ZWRlIGRpc3RyaWJ1aXIsIGV4aGliaXIgcMO6YmxpY2FtZW50ZSwgZWplY3V0YXIgcMO6YmxpY2FtZW50ZSwgbyBwb25lciBhIGRpc3Bvc2ljacOzbiBww7pibGljYSBsYSBPYnJhIGNvbiBhbGd1bmEgbWVkaWRhIHRlY25vbMOzZ2ljYSBxdWUgY29udHJvbGUgZWwgYWNjZXNvIG8gbGEgdXRpbGl6YWNpw7NuIGRlIGVsbGEgZGUgdW5hIGZvcm1hIHF1ZSBzZWEgaW5jb25zaXN0ZW50ZSBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEuIExvIGFudGVyaW9yIHNlIGFwbGljYSBhIGxhIE9icmEgaW5jb3Jwb3JhZGEgYSB1bmEgT2JyYSBDb2xlY3RpdmEsIHBlcm8gZXN0byBubyBleGlnZSBxdWUgbGEgT2JyYSBDb2xlY3RpdmEgYXBhcnRlIGRlIGxhIG9icmEgbWlzbWEgcXVlZGUgc3VqZXRhIGEgbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEuIFNpIFVzdGVkIGNyZWEgdW5hIE9icmEgQ29sZWN0aXZhLCBwcmV2aW8gYXZpc28gZGUgY3VhbHF1aWVyIExpY2VuY2lhbnRlIGRlYmUsIGVuIGxhIG1lZGlkYSBkZSBsbyBwb3NpYmxlLCBlbGltaW5hciBkZSBsYSBPYnJhIENvbGVjdGl2YSBjdWFscXVpZXIgcmVmZXJlbmNpYSBhIGRpY2hvIExpY2VuY2lhbnRlIG8gYWwgQXV0b3IgT3JpZ2luYWwsIHNlZ8O6biBsbyBzb2xpY2l0YWRvIHBvciBlbCBMaWNlbmNpYW50ZSB5IGNvbmZvcm1lIGxvIGV4aWdlIGxhIGNsw6F1c3VsYSA0KGMpLjwvbGk+CiAgICAgIDxsaT5Vc3RlZCBubyBwdWVkZSBlamVyY2VyIG5pbmd1bm8gZGUgbG9zIGRlcmVjaG9zIHF1ZSBsZSBoYW4gc2lkbyBvdG9yZ2Fkb3MgZW4gbGEgU2VjY2nDs24gMyBwcmVjZWRlbnRlIGRlIG1vZG8gcXVlIGVzdMOpbiBwcmluY2lwYWxtZW50ZSBkZXN0aW5hZG9zIG8gZGlyZWN0YW1lbnRlIGRpcmlnaWRvcyBhIGNvbnNlZ3VpciB1biBwcm92ZWNobyBjb21lcmNpYWwgbyB1bmEgY29tcGVuc2FjacOzbiBtb25ldGFyaWEgcHJpdmFkYS4gRWwgaW50ZXJjYW1iaW8gZGUgbGEgT2JyYSBwb3Igb3RyYXMgb2JyYXMgcHJvdGVnaWRhcyBwb3IgZGVyZWNob3MgZGUgYXV0b3IsIHlhIHNlYSBhIHRyYXbDqXMgZGUgdW4gc2lzdGVtYSBwYXJhIGNvbXBhcnRpciBhcmNoaXZvcyBkaWdpdGFsZXMgKGRpZ2l0YWwgZmlsZS1zaGFyaW5nKSBvIGRlIGN1YWxxdWllciBvdHJhIG1hbmVyYSBubyBzZXLDoSBjb25zaWRlcmFkbyBjb21vIGVzdGFyIGRlc3RpbmFkbyBwcmluY2lwYWxtZW50ZSBvIGRpcmlnaWRvIGRpcmVjdGFtZW50ZSBhIGNvbnNlZ3VpciB1biBwcm92ZWNobyBjb21lcmNpYWwgbyB1bmEgY29tcGVuc2FjacOzbiBtb25ldGFyaWEgcHJpdmFkYSwgc2llbXByZSBxdWUgbm8gc2UgcmVhbGljZSB1biBwYWdvIG1lZGlhbnRlIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBlbiByZWxhY2nDs24gY29uIGVsIGludGVyY2FtYmlvIGRlIG9icmFzIHByb3RlZ2lkYXMgcG9yIGVsIGRlcmVjaG8gZGUgYXV0b3IuPC9saT4KICAgICAgPGxpPlNpIHVzdGVkIGRpc3RyaWJ1eWUsIGV4aGliZSBww7pibGljYW1lbnRlLCBlamVjdXRhIHDDumJsaWNhbWVudGUgbyBlamVjdXRhIHDDumJsaWNhbWVudGUgZW4gZm9ybWEgZGlnaXRhbCBsYSBPYnJhIG8gY3VhbHF1aWVyIE9icmEgRGVyaXZhZGEgdSBPYnJhIENvbGVjdGl2YSwgVXN0ZWQgZGViZSBtYW50ZW5lciBpbnRhY3RhIHRvZGEgbGEgaW5mb3JtYWNpw7NuIGRlIGRlcmVjaG8gZGUgYXV0b3IgZGUgbGEgT2JyYSB5IHByb3BvcmNpb25hciwgZGUgZm9ybWEgcmF6b25hYmxlIHNlZ8O6biBlbCBtZWRpbyBvIG1hbmVyYSBxdWUgVXN0ZWQgZXN0w6kgdXRpbGl6YW5kbzogKGkpIGVsIG5vbWJyZSBkZWwgQXV0b3IgT3JpZ2luYWwgc2kgZXN0w6EgcHJvdmlzdG8gKG8gc2V1ZMOzbmltbywgc2kgZnVlcmUgYXBsaWNhYmxlKSwgeS9vIChpaSkgZWwgbm9tYnJlIGRlIGxhIHBhcnRlIG8gbGFzIHBhcnRlcyBxdWUgZWwgQXV0b3IgT3JpZ2luYWwgeS9vIGVsIExpY2VuY2lhbnRlIGh1YmllcmVuIGRlc2lnbmFkbyBwYXJhIGxhIGF0cmlidWNpw7NuICh2LmcuLCB1biBpbnN0aXR1dG8gcGF0cm9jaW5hZG9yLCBlZGl0b3JpYWwsIHB1YmxpY2FjacOzbikgZW4gbGEgaW5mb3JtYWNpw7NuIGRlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBkZWwgTGljZW5jaWFudGUsIHTDqXJtaW5vcyBkZSBzZXJ2aWNpb3MgbyBkZSBvdHJhcyBmb3JtYXMgcmF6b25hYmxlczsgZWwgdMOtdHVsbyBkZSBsYSBPYnJhIHNpIGVzdMOhIHByb3Zpc3RvOyBlbiBsYSBtZWRpZGEgZGUgbG8gcmF6b25hYmxlbWVudGUgZmFjdGlibGUgeSwgc2kgZXN0w6EgcHJvdmlzdG8sIGVsIElkZW50aWZpY2Fkb3IgVW5pZm9ybWUgZGUgUmVjdXJzb3MgKFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcikgcXVlIGVsIExpY2VuY2lhbnRlIGVzcGVjaWZpY2EgcGFyYSBzZXIgYXNvY2lhZG8gY29uIGxhIE9icmEsIHNhbHZvIHF1ZSB0YWwgVVJJIG5vIHNlIHJlZmllcmEgYSBsYSBub3RhIHNvYnJlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBvIGEgbGEgaW5mb3JtYWNpw7NuIHNvYnJlIGVsIGxpY2VuY2lhbWllbnRvIGRlIGxhIE9icmE7IHkgZW4gZWwgY2FzbyBkZSB1bmEgT2JyYSBEZXJpdmFkYSwgYXRyaWJ1aXIgZWwgY3LDqWRpdG8gaWRlbnRpZmljYW5kbyBlbCB1c28gZGUgbGEgT2JyYSBlbiBsYSBPYnJhIERlcml2YWRhICh2LmcuLCAiVHJhZHVjY2nDs24gRnJhbmNlc2EgZGUgbGEgT2JyYSBkZWwgQXV0b3IgT3JpZ2luYWwsIiBvICJHdWnDs24gQ2luZW1hdG9ncsOhZmljbyBiYXNhZG8gZW4gbGEgT2JyYSBvcmlnaW5hbCBkZWwgQXV0b3IgT3JpZ2luYWwiKS4gVGFsIGNyw6lkaXRvIHB1ZWRlIHNlciBpbXBsZW1lbnRhZG8gZGUgY3VhbHF1aWVyIGZvcm1hIHJhem9uYWJsZTsgZW4gZWwgY2Fzbywgc2luIGVtYmFyZ28sIGRlIE9icmFzIERlcml2YWRhcyB1IE9icmFzIENvbGVjdGl2YXMsIHRhbCBjcsOpZGl0byBhcGFyZWNlcsOhLCBjb21vIG3DrW5pbW8sIGRvbmRlIGFwYXJlY2UgZWwgY3LDqWRpdG8gZGUgY3VhbHF1aWVyIG90cm8gYXV0b3IgY29tcGFyYWJsZSB5IGRlIHVuYSBtYW5lcmEsIGFsIG1lbm9zLCB0YW4gZGVzdGFjYWRhIGNvbW8gZWwgY3LDqWRpdG8gZGUgb3RybyBhdXRvciBjb21wYXJhYmxlLjwvbGk+CiAgICAgIDxsaT4KICAgICAgICBQYXJhIGV2aXRhciB0b2RhIGNvbmZ1c2nDs24sIGVsIExpY2VuY2lhbnRlIGFjbGFyYSBxdWUsIGN1YW5kbyBsYSBvYnJhIGVzIHVuYSBjb21wb3NpY2nDs24gbXVzaWNhbDoKICAgICAgICA8b2wgdHlwZT0iaSI+CiAgICAgICAgICA8bGk+UmVnYWzDrWFzIHBvciBpbnRlcnByZXRhY2nDs24geSBlamVjdWNpw7NuIGJham8gbGljZW5jaWFzIGdlbmVyYWxlcy4gRWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSBhdXRvcml6YXIgbGEgZWplY3VjacOzbiBww7pibGljYSBvIGxhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBkZSBsYSBvYnJhIHkgZGUgcmVjb2xlY3Rhciwgc2VhIGluZGl2aWR1YWxtZW50ZSBvIGEgdHJhdsOpcyBkZSB1bmEgc29jaWVkYWQgZGUgZ2VzdGnDs24gY29sZWN0aXZhIGRlIGRlcmVjaG9zIGRlIGF1dG9yIHkgZGVyZWNob3MgY29uZXhvcyAocG9yIGVqZW1wbG8sIFNBWUNPKSwgbGFzIHJlZ2Fsw61hcyBwb3IgbGEgZWplY3VjacOzbiBww7pibGljYSBvIHBvciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIGRpZ2l0YWwgZGUgbGEgb2JyYSAocG9yIGVqZW1wbG8gV2ViY2FzdCkgbGljZW5jaWFkYSBiYWpvIGxpY2VuY2lhcyBnZW5lcmFsZXMsIHNpIGxhIGludGVycHJldGFjacOzbiBvIGVqZWN1Y2nDs24gZGUgbGEgb2JyYSBlc3TDoSBwcmltb3JkaWFsbWVudGUgb3JpZW50YWRhIHBvciBvIGRpcmlnaWRhIGEgbGEgb2J0ZW5jacOzbiBkZSB1bmEgdmVudGFqYSBjb21lcmNpYWwgbyB1bmEgY29tcGVuc2FjacOzbiBtb25ldGFyaWEgcHJpdmFkYS48L2xpPgogICAgICAgICAgPGxpPlJlZ2Fsw61hcyBwb3IgRm9ub2dyYW1hcy4gRWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSByZWNvbGVjdGFyLCBpbmRpdmlkdWFsbWVudGUgbyBhIHRyYXbDqXMgZGUgdW5hIHNvY2llZGFkIGRlIGdlc3Rpw7NuIGNvbGVjdGl2YSBkZSBkZXJlY2hvcyBkZSBhdXRvciB5IGRlcmVjaG9zIGNvbmV4b3MgKHBvciBlamVtcGxvLCBsb3MgY29uc2FncmFkb3MgcG9yIGxhIFNBWUNPKSwgdW5hIGFnZW5jaWEgZGUgZGVyZWNob3MgbXVzaWNhbGVzIG8gYWxnw7puIGFnZW50ZSBkZXNpZ25hZG8sIGxhcyByZWdhbMOtYXMgcG9yIGN1YWxxdWllciBmb25vZ3JhbWEgcXVlIFVzdGVkIGNyZWUgYSBwYXJ0aXIgZGUgbGEgb2JyYSAo4oCcdmVyc2nDs24gY292ZXLigJ0pIHkgZGlzdHJpYnV5YSwgZW4gbG9zIHTDqXJtaW5vcyBkZWwgcsOpZ2ltZW4gZGUgZGVyZWNob3MgZGUgYXV0b3IsIHNpIGxhIGNyZWFjacOzbiBvIGRpc3RyaWJ1Y2nDs24gZGUgZXNhIHZlcnNpw7NuIGNvdmVyIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBkZXN0aW5hZGEgbyBkaXJpZ2lkYSBhIG9idGVuZXIgdW5hIHZlbnRhamEgY29tZXJjaWFsIG8gdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIHByaXZhZGEuPC9saT4KICAgICAgICA8L29sPgogICAgICA8L2xpPgogICAgICA8bGk+R2VzdGnDs24gZGUgRGVyZWNob3MgZGUgQXV0b3Igc29icmUgSW50ZXJwcmV0YWNpb25lcyB5IEVqZWN1Y2lvbmVzIERpZ2l0YWxlcyAoV2ViQ2FzdGluZykuIFBhcmEgZXZpdGFyIHRvZGEgY29uZnVzacOzbiwgZWwgTGljZW5jaWFudGUgYWNsYXJhIHF1ZSwgY3VhbmRvIGxhIG9icmEgc2VhIHVuIGZvbm9ncmFtYSwgZWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSBhdXRvcml6YXIgbGEgZWplY3VjacOzbiBww7pibGljYSBkaWdpdGFsIGRlIGxhIG9icmEgKHBvciBlamVtcGxvLCB3ZWJjYXN0KSB5IGRlIHJlY29sZWN0YXIsIGluZGl2aWR1YWxtZW50ZSBvIGEgdHJhdsOpcyBkZSB1bmEgc29jaWVkYWQgZGUgZ2VzdGnDs24gY29sZWN0aXZhIGRlIGRlcmVjaG9zIGRlIGF1dG9yIHkgZGVyZWNob3MgY29uZXhvcyAocG9yIGVqZW1wbG8sIEFDSU5QUk8pLCBsYXMgcmVnYWzDrWFzIHBvciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIGRpZ2l0YWwgZGUgbGEgb2JyYSAocG9yIGVqZW1wbG8sIHdlYmNhc3QpLCBzdWpldGEgYSBsYXMgZGlzcG9zaWNpb25lcyBhcGxpY2FibGVzIGRlbCByw6lnaW1lbiBkZSBEZXJlY2hvIGRlIEF1dG9yLCBzaSBlc3RhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBlc3TDoSBwcmltb3JkaWFsbWVudGUgZGlyaWdpZGEgYSBvYnRlbmVyIHVuYSB2ZW50YWphIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLjwvbGk+CiAgICA8L29sPgogIDwvbGk+CiAgPGJyLz4KICA8bGk+CiAgICBSZXByZXNlbnRhY2lvbmVzLCBHYXJhbnTDrWFzIHkgTGltaXRhY2lvbmVzIGRlIFJlc3BvbnNhYmlsaWRhZC4KICAgIDxwPkEgTUVOT1MgUVVFIExBUyBQQVJURVMgTE8gQUNPUkRBUkFOIERFIE9UUkEgRk9STUEgUE9SIEVTQ1JJVE8sIEVMIExJQ0VOQ0lBTlRFIE9GUkVDRSBMQSBPQlJBIChFTiBFTCBFU1RBRE8gRU4gRUwgUVVFIFNFIEVOQ1VFTlRSQSkg4oCcVEFMIENVQUzigJ0sIFNJTiBCUklOREFSIEdBUkFOVMONQVMgREUgQ0xBU0UgQUxHVU5BIFJFU1BFQ1RPIERFIExBIE9CUkEsIFlBIFNFQSBFWFBSRVNBLCBJTVBMw41DSVRBLCBMRUdBTCBPIENVQUxRVUlFUkEgT1RSQSwgSU5DTFVZRU5ETywgU0lOIExJTUlUQVJTRSBBIEVMTEFTLCBHQVJBTlTDjUFTIERFIFRJVFVMQVJJREFELCBDT01FUkNJQUJJTElEQUQsIEFEQVBUQUJJTElEQUQgTyBBREVDVUFDScOTTiBBIFBST1DDk1NJVE8gREVURVJNSU5BRE8sIEFVU0VOQ0lBIERFIElORlJBQ0NJw5NOLCBERSBBVVNFTkNJQSBERSBERUZFQ1RPUyBMQVRFTlRFUyBPIERFIE9UUk8gVElQTywgTyBMQSBQUkVTRU5DSUEgTyBBVVNFTkNJQSBERSBFUlJPUkVTLCBTRUFOIE8gTk8gREVTQ1VCUklCTEVTIChQVUVEQU4gTyBOTyBTRVIgRVNUT1MgREVTQ1VCSUVSVE9TKS4gQUxHVU5BUyBKVVJJU0RJQ0NJT05FUyBOTyBQRVJNSVRFTiBMQSBFWENMVVNJw5NOIERFIEdBUkFOVMONQVMgSU1QTMONQ0lUQVMsIEVOIENVWU8gQ0FTTyBFU1RBIEVYQ0xVU0nDk04gUFVFREUgTk8gQVBMSUNBUlNFIEEgVVNURUQuPC9wPgogIDwvbGk+CiAgPGJyLz4KICA8bGk+CiAgICBMaW1pdGFjacOzbiBkZSByZXNwb25zYWJpbGlkYWQuCiAgICA8cD5BIE1FTk9TIFFVRSBMTyBFWElKQSBFWFBSRVNBTUVOVEUgTEEgTEVZIEFQTElDQUJMRSwgRUwgTElDRU5DSUFOVEUgTk8gU0VSw4EgUkVTUE9OU0FCTEUgQU5URSBVU1RFRCBQT1IgREHDkU8gQUxHVU5PLCBTRUEgUE9SIFJFU1BPTlNBQklMSURBRCBFWFRSQUNPTlRSQUNUVUFMLCBQUkVDT05UUkFDVFVBTCBPIENPTlRSQUNUVUFMLCBPQkpFVElWQSBPIFNVQkpFVElWQSwgU0UgVFJBVEUgREUgREHDkU9TIE1PUkFMRVMgTyBQQVRSSU1PTklBTEVTLCBESVJFQ1RPUyBPIElORElSRUNUT1MsIFBSRVZJU1RPUyBPIElNUFJFVklTVE9TIFBST0RVQ0lET1MgUE9SIEVMIFVTTyBERSBFU1RBIExJQ0VOQ0lBIE8gREUgTEEgT0JSQSwgQVVOIENVQU5ETyBFTCBMSUNFTkNJQU5URSBIQVlBIFNJRE8gQURWRVJUSURPIERFIExBIFBPU0lCSUxJREFEIERFIERJQ0hPUyBEQcORT1MuIEFMR1VOQVMgTEVZRVMgTk8gUEVSTUlURU4gTEEgRVhDTFVTScOTTiBERSBDSUVSVEEgUkVTUE9OU0FCSUxJREFELCBFTiBDVVlPIENBU08gRVNUQSBFWENMVVNJw5NOIFBVRURFIE5PIEFQTElDQVJTRSBBIFVTVEVELjwvcD4KICA8L2xpPgogIDxici8+CiAgPGxpPgogICAgVMOpcm1pbm8uCiAgICA8b2wgdHlwZT0iYSI+CiAgICAgIDxsaT5Fc3RhIExpY2VuY2lhIHkgbG9zIGRlcmVjaG9zIG90b3JnYWRvcyBlbiB2aXJ0dWQgZGUgZWxsYSB0ZXJtaW5hcsOhbiBhdXRvbcOhdGljYW1lbnRlIHNpIFVzdGVkIGluZnJpbmdlIGFsZ3VuYSBjb25kaWNpw7NuIGVzdGFibGVjaWRhIGVuIGVsbGEuIFNpbiBlbWJhcmdvLCBsb3MgaW5kaXZpZHVvcyBvIGVudGlkYWRlcyBxdWUgaGFuIHJlY2liaWRvIE9icmFzIERlcml2YWRhcyBvIENvbGVjdGl2YXMgZGUgVXN0ZWQgZGUgY29uZm9ybWlkYWQgY29uIGVzdGEgTGljZW5jaWEsIG5vIHZlcsOhbiB0ZXJtaW5hZGFzIHN1cyBsaWNlbmNpYXMsIHNpZW1wcmUgcXVlIGVzdG9zIGluZGl2aWR1b3MgbyBlbnRpZGFkZXMgc2lnYW4gY3VtcGxpZW5kbyDDrW50ZWdyYW1lbnRlIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhcyBsaWNlbmNpYXMuIExhcyBTZWNjaW9uZXMgMSwgMiwgNSwgNiwgNywgeSA4IHN1YnNpc3RpcsOhbiBhIGN1YWxxdWllciB0ZXJtaW5hY2nDs24gZGUgZXN0YSBMaWNlbmNpYS48L2xpPgogICAgICA8bGk+U3VqZXRhIGEgbGFzIGNvbmRpY2lvbmVzIHkgdMOpcm1pbm9zIGFudGVyaW9yZXMsIGxhIGxpY2VuY2lhIG90b3JnYWRhIGFxdcOtIGVzIHBlcnBldHVhIChkdXJhbnRlIGVsIHBlcsOtb2RvIGRlIHZpZ2VuY2lhIGRlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBkZSBsYSBvYnJhKS4gTm8gb2JzdGFudGUgbG8gYW50ZXJpb3IsIGVsIExpY2VuY2lhbnRlIHNlIHJlc2VydmEgZWwgZGVyZWNobyBhIHB1YmxpY2FyIHkvbyBlc3RyZW5hciBsYSBPYnJhIGJham8gY29uZGljaW9uZXMgZGUgbGljZW5jaWEgZGlmZXJlbnRlcyBvIGEgZGVqYXIgZGUgZGlzdHJpYnVpcmxhIGVuIGxvcyB0w6lybWlub3MgZGUgZXN0YSBMaWNlbmNpYSBlbiBjdWFscXVpZXIgbW9tZW50bzsgZW4gZWwgZW50ZW5kaWRvLCBzaW4gZW1iYXJnbywgcXVlIGVzYSBlbGVjY2nDs24gbm8gc2Vydmlyw6EgcGFyYSByZXZvY2FyIGVzdGEgbGljZW5jaWEgbyBxdWUgZGViYSBzZXIgb3RvcmdhZGEgLCBiYWpvIGxvcyB0w6lybWlub3MgZGUgZXN0YSBsaWNlbmNpYSksIHkgZXN0YSBsaWNlbmNpYSBjb250aW51YXLDoSBlbiBwbGVubyB2aWdvciB5IGVmZWN0byBhIG1lbm9zIHF1ZSBzZWEgdGVybWluYWRhIGNvbW8gc2UgZXhwcmVzYSBhdHLDoXMuIExhIExpY2VuY2lhIHJldm9jYWRhIGNvbnRpbnVhcsOhIHNpZW5kbyBwbGVuYW1lbnRlIHZpZ2VudGUgeSBlZmVjdGl2YSBzaSBubyBzZSBsZSBkYSB0w6lybWlubyBlbiBsYXMgY29uZGljaW9uZXMgaW5kaWNhZGFzIGFudGVyaW9ybWVudGUuPC9saT4KICAgIDwvb2w+CiAgPC9saT4KICA8YnIvPgogIDxsaT4KICAgIFZhcmlvcy4KICAgIDxvbCB0eXBlPSJhIj4KICAgICAgPGxpPkNhZGEgdmV6IHF1ZSBVc3RlZCBkaXN0cmlidXlhIG8gcG9uZ2EgYSBkaXNwb3NpY2nDs24gcMO6YmxpY2EgbGEgT2JyYSBvIHVuYSBPYnJhIENvbGVjdGl2YSwgZWwgTGljZW5jaWFudGUgb2ZyZWNlcsOhIGFsIGRlc3RpbmF0YXJpbyB1bmEgbGljZW5jaWEgZW4gbG9zIG1pc21vcyB0w6lybWlub3MgeSBjb25kaWNpb25lcyBxdWUgbGEgbGljZW5jaWEgb3RvcmdhZGEgYSBVc3RlZCBiYWpvIGVzdGEgTGljZW5jaWEuPC9saT4KICAgICAgPGxpPlNpIGFsZ3VuYSBkaXNwb3NpY2nDs24gZGUgZXN0YSBMaWNlbmNpYSByZXN1bHRhIGludmFsaWRhZGEgbyBubyBleGlnaWJsZSwgc2Vnw7puIGxhIGxlZ2lzbGFjacOzbiB2aWdlbnRlLCBlc3RvIG5vIGFmZWN0YXLDoSBuaSBsYSB2YWxpZGV6IG5pIGxhIGFwbGljYWJpbGlkYWQgZGVsIHJlc3RvIGRlIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEgeSwgc2luIGFjY2nDs24gYWRpY2lvbmFsIHBvciBwYXJ0ZSBkZSBsb3Mgc3VqZXRvcyBkZSBlc3RlIGFjdWVyZG8sIGFxdcOpbGxhIHNlIGVudGVuZGVyw6EgcmVmb3JtYWRhIGxvIG3DrW5pbW8gbmVjZXNhcmlvIHBhcmEgaGFjZXIgcXVlIGRpY2hhIGRpc3Bvc2ljacOzbiBzZWEgdsOhbGlkYSB5IGV4aWdpYmxlLjwvbGk+CiAgICAgIDxsaT5OaW5nw7puIHTDqXJtaW5vIG8gZGlzcG9zaWNpw7NuIGRlIGVzdGEgTGljZW5jaWEgc2UgZXN0aW1hcsOhIHJlbnVuY2lhZGEgeSBuaW5ndW5hIHZpb2xhY2nDs24gZGUgZWxsYSBzZXLDoSBjb25zZW50aWRhIGEgbWVub3MgcXVlIGVzYSByZW51bmNpYSBvIGNvbnNlbnRpbWllbnRvIHNlYSBvdG9yZ2FkbyBwb3IgZXNjcml0byB5IGZpcm1hZG8gcG9yIGxhIHBhcnRlIHF1ZSByZW51bmNpZSBvIGNvbnNpZW50YS48L2xpPgogICAgICA8bGk+RXN0YSBMaWNlbmNpYSByZWZsZWphIGVsIGFjdWVyZG8gcGxlbm8gZW50cmUgbGFzIHBhcnRlcyByZXNwZWN0byBhIGxhIE9icmEgYXF1w60gbGljZW5jaWFkYS4gTm8gaGF5IGFycmVnbG9zLCBhY3VlcmRvcyBvIGRlY2xhcmFjaW9uZXMgcmVzcGVjdG8gYSBsYSBPYnJhIHF1ZSBubyBlc3TDqW4gZXNwZWNpZmljYWRvcyBlbiBlc3RlIGRvY3VtZW50by4gRWwgTGljZW5jaWFudGUgbm8gc2UgdmVyw6EgbGltaXRhZG8gcG9yIG5pbmd1bmEgZGlzcG9zaWNpw7NuIGFkaWNpb25hbCBxdWUgcHVlZGEgc3VyZ2lyIGVuIGFsZ3VuYSBjb211bmljYWNpw7NuIGVtYW5hZGEgZGUgVXN0ZWQuIEVzdGEgTGljZW5jaWEgbm8gcHVlZGUgc2VyIG1vZGlmaWNhZGEgc2luIGVsIGNvbnNlbnRpbWllbnRvIG11dHVvIHBvciBlc2NyaXRvIGRlbCBMaWNlbmNpYW50ZSB5IFVzdGVkLjwvbGk+CiAgICA8L29sPgogIDwvbGk+CiAgPGJyLz4KPC9vbD4K |