Framework para el Aprendizaje de Redes Neuronales Profundas
El aprendizaje automático es un campo de la inteligencia artificial que se ha desarrollado exponencialmente en los últimos años gracias a la inmensa cantidad de datos disponibles, al enorme poder de procesamiento con el que ahora se cuenta y a las innovaciones tecnológicas que se han logrado en este...
- Autores:
-
Anzola Avila, Alejandro
Moreno Silva, Juan Andres
- Tipo de recurso:
- Trabajo de grado de pregrado
- Fecha de publicación:
- 2020
- Institución:
- Escuela Colombiana de Ingeniería Julio Garavito
- Repositorio:
- Repositorio Institucional ECI
- Idioma:
- spa
- OAI Identifier:
- oai:repositorio.escuelaing.edu.co:001/1236
- Acceso en línea:
- https://catalogo.escuelaing.edu.co/cgi-bin/koha/opac-detail.pl?biblionumber=22428
https://repositorio.escuelaing.edu.co/handle/001/1236
- Palabra clave:
- Inteligencia artificial
aprendizaje profundo
Modelos Hidrológicos
Framework
Programación Orientada a Objetos
Recursos de Aprendizaje
Artificial Intelligence
Deep Learning
Hidrology Model
Framework
Object Oriented Programming
Learning resources
- Rights
- openAccess
- License
- Derechos Reservados - Escuela Colombiana de Ingeniería Julio Garavito
id |
ESCUELAIG2_b4043dcdea47b31ad5086a60f55ffee3 |
---|---|
oai_identifier_str |
oai:repositorio.escuelaing.edu.co:001/1236 |
network_acronym_str |
ESCUELAIG2 |
network_name_str |
Repositorio Institucional ECI |
repository_id_str |
|
dc.title.spa.fl_str_mv |
Framework para el Aprendizaje de Redes Neuronales Profundas |
title |
Framework para el Aprendizaje de Redes Neuronales Profundas |
spellingShingle |
Framework para el Aprendizaje de Redes Neuronales Profundas Inteligencia artificial aprendizaje profundo Modelos Hidrológicos Framework Programación Orientada a Objetos Recursos de Aprendizaje Artificial Intelligence Deep Learning Hidrology Model Framework Object Oriented Programming Learning resources |
title_short |
Framework para el Aprendizaje de Redes Neuronales Profundas |
title_full |
Framework para el Aprendizaje de Redes Neuronales Profundas |
title_fullStr |
Framework para el Aprendizaje de Redes Neuronales Profundas |
title_full_unstemmed |
Framework para el Aprendizaje de Redes Neuronales Profundas |
title_sort |
Framework para el Aprendizaje de Redes Neuronales Profundas |
dc.creator.fl_str_mv |
Anzola Avila, Alejandro Moreno Silva, Juan Andres |
dc.contributor.advisor.spa.fl_str_mv |
Diaz Rozo, Maria Irma (dir) |
dc.contributor.author.spa.fl_str_mv |
Anzola Avila, Alejandro Moreno Silva, Juan Andres |
dc.subject.spa.fl_str_mv |
Inteligencia artificial aprendizaje profundo Modelos Hidrológicos Framework Programación Orientada a Objetos Recursos de Aprendizaje |
topic |
Inteligencia artificial aprendizaje profundo Modelos Hidrológicos Framework Programación Orientada a Objetos Recursos de Aprendizaje Artificial Intelligence Deep Learning Hidrology Model Framework Object Oriented Programming Learning resources |
dc.subject.keywords.spa.fl_str_mv |
Artificial Intelligence Deep Learning Hidrology Model Framework Object Oriented Programming Learning resources |
description |
El aprendizaje automático es un campo de la inteligencia artificial que se ha desarrollado exponencialmente en los últimos años gracias a la inmensa cantidad de datos disponibles, al enorme poder de procesamiento con el que ahora se cuenta y a las innovaciones tecnológicas que se han logrado en este campo. Dentro de las grandes fortalezas que ofrece esta tecnología es la de poder resolver una amplia cantidad de problemas de diferentes dominios y áreas del conocimiento, e incluso es posible reusar el conocimiento y el modelo obtenido al resolver un problema en problemas de dominios similares. Uno de los principales actores en esta revolución son las redes neuronales, que pertenecen al campo del aprendizaje automático. Esta tecnología nos permite resolver una infinidad de problemas, desde clasificar números hasta generar código dado una instrucción en lenguaje natural. Sin embargo, esta tecnología tiene una curva de aprendizaje elevada. Nuestra solución a este problema es ofrecer recursos de aprendizaje de redes neuronales para que el estudiante pueda aprender conceptos bases a través de la experimentación y la extensión de los mismos. Los recursos desarrollados son (i) un framework de aprendizaje (marco de trabajo) y (ii) un conjunto de casos problema-solución. El framework (marco de trabajo) permite que los estudiantes puedan construir y probar modelos de redes neuronales. Este framework está diseñado con el fin de ser una ayuda para la comprensión de conceptos claves a novatos interesadas en el campo, siguiendo lineamientos de buenas practicas de ingeniería de software. El framework está pensado para representar los conceptos base de inteligencia artificial, de manera suficientemente general como para poder extenderlo para implementar diferentes modelos de redes neuronales. Para esto, el framework cuenta con distintos componentes extensibles que corresponden a los principales conceptos de redes neuronales. Dentro de estos componentes se encuentran: los tipos de redes neuronales (profundas, recurrentes y convolucionales); las funciones de activación y costo; los mecanismos de regularización y optimización, entre otros. En el conjunto de casos problema-solución se trabajaron tres problemas clásicos y un problema especializado en el área de hidrología. Los problemas clásicos seleccionados fueron la clasificación de dígitos escritos a mano con redes densas y convolucionales y la clasificación de textos (positivos ó negativos) con redes recurrentes. El problema en hidrología fue la predicción de un caudal en el río Magdalena, en este trabajo se realizaron dos modelos con el fin de evaluarlas: un perceptrón multicapas (MLP por sus siglas en inglés (MultiLayerPerceptron) y un modelo secuencial de capas con memoria (LSTM por sus siglas en inglés (LongShort Term Memory) ) con el fin de evaluarlas. Los casos desarrollados nos permitieron, además de generar recursos de aprendizaje, probar la versatilidad del framework. En tres de los cuatro casos se comprobó el desempeño adecuado del framework. El caso que no fue posible implementar fue el de redes neuronales recurrentes por problemas de alcance; sin embargo, están consideradas en el diseño de la estructura del framework. En la implementación de los casos se evidenció que el framework trabaja alineado con la filosofía de buenas practicas de desarrollo de software. En particular, en la implementación del problema en hidrología, se demostró que esta especialmente diseñado para tener fácil extensibilidad. Una de las métricas de desempeño que se tomaron fueron los tiempos de entrenamiento, aunque no es parte de los objetivos, de forma que se tuviera una forma de comparación en ese aspecto. No fue inesperado encontrar que el desempeño en Keras supero considerablemente a la implementación hecha en el framework. Finalmente, uno de los aspectos claves del framework es que fue diseñado con modelos supervisados en mente, lo cual permite extenderlo con modelos supervisados diferentes a las redes neuronales. Como trabajo futuro se desea incluir las lineas de aprendizaje no-supervisado ó aprendizaje reforzado. |
publishDate |
2020 |
dc.date.accessioned.spa.fl_str_mv |
2020-08-08T03:14:06Z |
dc.date.available.spa.fl_str_mv |
2020-08-08T03:14:06Z |
dc.date.issued.spa.fl_str_mv |
2020 |
dc.date.accessioned.none.fl_str_mv |
2021-10-01T16:03:49Z |
dc.date.available.none.fl_str_mv |
2021-10-01T16:03:49Z |
dc.type.spa.fl_str_mv |
Trabajo de grado - Pregrado |
dc.type.coarversion.fl_str_mv |
http://purl.org/coar/version/c_970fb48d4fbd8a85 |
dc.type.version.spa.fl_str_mv |
info:eu-repo/semantics/publishedVersion |
dc.type.coar.spa.fl_str_mv |
http://purl.org/coar/resource_type/c_7a1f |
dc.type.content.spa.fl_str_mv |
Text |
dc.type.driver.spa.fl_str_mv |
info:eu-repo/semantics/bachelorThesis |
dc.type.redcol.spa.fl_str_mv |
http://purl.org/redcol/resource_type/TP |
format |
http://purl.org/coar/resource_type/c_7a1f |
status_str |
publishedVersion |
dc.identifier.uri.spa.fl_str_mv |
https://catalogo.escuelaing.edu.co/cgi-bin/koha/opac-detail.pl?biblionumber=22428 |
dc.identifier.uri.none.fl_str_mv |
https://repositorio.escuelaing.edu.co/handle/001/1236 |
url |
https://catalogo.escuelaing.edu.co/cgi-bin/koha/opac-detail.pl?biblionumber=22428 https://repositorio.escuelaing.edu.co/handle/001/1236 |
dc.language.iso.spa.fl_str_mv |
spa |
language |
spa |
dc.rights.spa.fl_str_mv |
Derechos Reservados - Escuela Colombiana de Ingeniería Julio Garavito |
dc.rights.coar.fl_str_mv |
http://purl.org/coar/access_right/c_abf2 |
dc.rights.uri.spa.fl_str_mv |
https://creativecommons.org/licenses/by-nc/4.0/ |
dc.rights.accessrights.spa.fl_str_mv |
info:eu-repo/semantics/openAccess |
dc.rights.creativecommons.spa.fl_str_mv |
Atribución-NoComercial 4.0 Internacional (CC BY-NC 4.0) |
rights_invalid_str_mv |
Derechos Reservados - Escuela Colombiana de Ingeniería Julio Garavito https://creativecommons.org/licenses/by-nc/4.0/ Atribución-NoComercial 4.0 Internacional (CC BY-NC 4.0) http://purl.org/coar/access_right/c_abf2 |
eu_rights_str_mv |
openAccess |
dc.format.mimetype.spa.fl_str_mv |
application/pdf |
dc.publisher.spa.fl_str_mv |
Escuela Colombiana de Ingeniería Julio Garavito |
dc.publisher.program.spa.fl_str_mv |
Ingeniería de Sistemas |
institution |
Escuela Colombiana de Ingeniería Julio Garavito |
bitstream.url.fl_str_mv |
https://repositorio.escuelaing.edu.co/bitstream/001/1236/1/Anzola%20Avila%2c%20Alejandro-2020.pdf https://repositorio.escuelaing.edu.co/bitstream/001/1236/2/Anexo%201.zip https://repositorio.escuelaing.edu.co/bitstream/001/1236/3/Autorizacion.pdf https://repositorio.escuelaing.edu.co/bitstream/001/1236/4/Anexo%202.%20zip https://repositorio.escuelaing.edu.co/bitstream/001/1236/5/license.txt https://repositorio.escuelaing.edu.co/bitstream/001/1236/8/Anzola%20Avila%2c%20Alejandro-2020.pdf.txt https://repositorio.escuelaing.edu.co/bitstream/001/1236/10/Autorizacion.pdf.txt https://repositorio.escuelaing.edu.co/bitstream/001/1236/9/Anzola%20Avila%2c%20Alejandro-2020.pdf.jpg https://repositorio.escuelaing.edu.co/bitstream/001/1236/11/Autorizacion.pdf.jpg |
bitstream.checksum.fl_str_mv |
a2feabdf8989ffb0607e65c4cbb55882 0a93ed7ea281a3171b21cb2e65f80ef2 eafc6321362cbc23e7bb9b28571c1ae8 8e573e3c986af97c38204b37a85c8a83 8a4605be74aa9ea9d79846c1fba20a33 3875a6edecab7465e4c184672cb30dc8 315449d571fa37015046fb849178657d 36d1bdd005b94f6062b2658674c96155 86c0142ada9b5d9e33fb7e817f299360 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 MD5 MD5 MD5 MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositorio Escuela Colombiana de Ingeniería Julio Garavito |
repository.mail.fl_str_mv |
repositorio.eci@escuelaing.edu.co |
_version_ |
1814355626166321152 |
spelling |
Diaz Rozo, Maria Irma (dir)854f4cab51c8f26a556d8f680cd24045300Anzola Avila, Alejandrof8aff2b2e8a0a334cad07f8d0513a218600Moreno Silva, Juan Andresf1a98bb6cdc29519cca4446b0a432f066002020-08-08T03:14:06Z2021-10-01T16:03:49Z2020-08-08T03:14:06Z2021-10-01T16:03:49Z2020https://catalogo.escuelaing.edu.co/cgi-bin/koha/opac-detail.pl?biblionumber=22428https://repositorio.escuelaing.edu.co/handle/001/1236El aprendizaje automático es un campo de la inteligencia artificial que se ha desarrollado exponencialmente en los últimos años gracias a la inmensa cantidad de datos disponibles, al enorme poder de procesamiento con el que ahora se cuenta y a las innovaciones tecnológicas que se han logrado en este campo. Dentro de las grandes fortalezas que ofrece esta tecnología es la de poder resolver una amplia cantidad de problemas de diferentes dominios y áreas del conocimiento, e incluso es posible reusar el conocimiento y el modelo obtenido al resolver un problema en problemas de dominios similares. Uno de los principales actores en esta revolución son las redes neuronales, que pertenecen al campo del aprendizaje automático. Esta tecnología nos permite resolver una infinidad de problemas, desde clasificar números hasta generar código dado una instrucción en lenguaje natural. Sin embargo, esta tecnología tiene una curva de aprendizaje elevada. Nuestra solución a este problema es ofrecer recursos de aprendizaje de redes neuronales para que el estudiante pueda aprender conceptos bases a través de la experimentación y la extensión de los mismos. Los recursos desarrollados son (i) un framework de aprendizaje (marco de trabajo) y (ii) un conjunto de casos problema-solución. El framework (marco de trabajo) permite que los estudiantes puedan construir y probar modelos de redes neuronales. Este framework está diseñado con el fin de ser una ayuda para la comprensión de conceptos claves a novatos interesadas en el campo, siguiendo lineamientos de buenas practicas de ingeniería de software. El framework está pensado para representar los conceptos base de inteligencia artificial, de manera suficientemente general como para poder extenderlo para implementar diferentes modelos de redes neuronales. Para esto, el framework cuenta con distintos componentes extensibles que corresponden a los principales conceptos de redes neuronales. Dentro de estos componentes se encuentran: los tipos de redes neuronales (profundas, recurrentes y convolucionales); las funciones de activación y costo; los mecanismos de regularización y optimización, entre otros. En el conjunto de casos problema-solución se trabajaron tres problemas clásicos y un problema especializado en el área de hidrología. Los problemas clásicos seleccionados fueron la clasificación de dígitos escritos a mano con redes densas y convolucionales y la clasificación de textos (positivos ó negativos) con redes recurrentes. El problema en hidrología fue la predicción de un caudal en el río Magdalena, en este trabajo se realizaron dos modelos con el fin de evaluarlas: un perceptrón multicapas (MLP por sus siglas en inglés (MultiLayerPerceptron) y un modelo secuencial de capas con memoria (LSTM por sus siglas en inglés (LongShort Term Memory) ) con el fin de evaluarlas. Los casos desarrollados nos permitieron, además de generar recursos de aprendizaje, probar la versatilidad del framework. En tres de los cuatro casos se comprobó el desempeño adecuado del framework. El caso que no fue posible implementar fue el de redes neuronales recurrentes por problemas de alcance; sin embargo, están consideradas en el diseño de la estructura del framework. En la implementación de los casos se evidenció que el framework trabaja alineado con la filosofía de buenas practicas de desarrollo de software. En particular, en la implementación del problema en hidrología, se demostró que esta especialmente diseñado para tener fácil extensibilidad. Una de las métricas de desempeño que se tomaron fueron los tiempos de entrenamiento, aunque no es parte de los objetivos, de forma que se tuviera una forma de comparación en ese aspecto. No fue inesperado encontrar que el desempeño en Keras supero considerablemente a la implementación hecha en el framework. Finalmente, uno de los aspectos claves del framework es que fue diseñado con modelos supervisados en mente, lo cual permite extenderlo con modelos supervisados diferentes a las redes neuronales. Como trabajo futuro se desea incluir las lineas de aprendizaje no-supervisado ó aprendizaje reforzado.Machine Learning is a field of artificial intelligence that has been developing exponentially in the last few years due to the immense amount of data, processing power, and technology innovations. Among the great strengths that this technology offers is the vast amount of problems from different domains and knowledge fields. It is even possible to reuse knowledge and models obtained after solving a problem from a similar field. One of the main actors in this revolution is the neural networks technology, which is part of the field of machine learning. This technology lets us solve an infinite amount of problems, from classifying written numbers to source code generation from natural language. However, this technology has a very steep learning curve. Our solution to this problem is to offer neural network learning resources to help students learn base concepts through experimentation and extension. The developed resources are (i) a learning framework and (ii) a set of problem-solution cases. The framework lets students build and test neural network models. This framework is designed to aid newcomers interested in the field to understand base concepts, following software engineering best practices. This framework is built to represent artificial intelligence base concepts, in a way general enough to be extensible to different neural network models. To achieve this, the framework has various extensible components that correspond to different main concepts of neural networks. Among these components are (i) neural network types (deep, recurrent, and convolutional); (ii) activation and loss functions; and (iii) regularization and optimization mechanisms. In the set of problem-solution cases, there are three classic problems and one specialized problem in the field of hydrology. The classic problems selected are handwritten digits with dense and convolutional networks, and positive-negative text classification with recurrent networks. The hydrology problem was the prediction of flow in the Magdalena river; in this work, we made two models to evaluate them: a multilayer perceptron (MLP for short) and a Long-short Term Memory (LSTM for short) for evaluation. The cases developed allowed us to test the versatility of our framework in addition to having learning resources. In three of the four cases, the performance of the framework was verified and deemed appropriate. The case that could not be implemented was the one that required recurrent neural networks due to encountered scope problems; however, recurrent neural networks are considered in the framework structure's design. In the implementation of the cases, it could be seen that the framework works aligned with the philosophy of good software development practices. In particular, in the implementation of the hydrology problem, it was shown that it is easy to extend. One of the performance metrics that were taken was training times to have a way of comparing them, although it is not part of our objectives. It was not unexpected to find that Keras' performance is considerably superior to the implementation made in our framework. Finally, one of our framework's key aspects is that it was designed with only supervised models in mind, which only allows it to be extended to supervised models other than neural networks. The addition of unsupervised learning or reinforced learning is future work.PregradoIngeniero(a) de Sistemasapplication/pdfspaEscuela Colombiana de Ingeniería Julio GaravitoIngeniería de SistemasDerechos Reservados - Escuela Colombiana de Ingeniería Julio Garavitohttps://creativecommons.org/licenses/by-nc/4.0/info:eu-repo/semantics/openAccessAtribución-NoComercial 4.0 Internacional (CC BY-NC 4.0)http://purl.org/coar/access_right/c_abf2Inteligencia artificialaprendizaje profundoModelos HidrológicosFrameworkProgramación Orientada a ObjetosRecursos de AprendizajeArtificial IntelligenceDeep LearningHidrology ModelFrameworkObject Oriented ProgrammingLearning resourcesFramework para el Aprendizaje de Redes Neuronales ProfundasTrabajo de grado - Pregradoinfo:eu-repo/semantics/publishedVersionhttp://purl.org/coar/resource_type/c_7a1fTextinfo:eu-repo/semantics/bachelorThesishttp://purl.org/redcol/resource_type/TPhttp://purl.org/coar/version/c_970fb48d4fbd8a85ORIGINALAnzola Avila, Alejandro-2020.pdfapplication/pdf9555466https://repositorio.escuelaing.edu.co/bitstream/001/1236/1/Anzola%20Avila%2c%20Alejandro-2020.pdfa2feabdf8989ffb0607e65c4cbb55882MD51open accessAnexo 1.zipCodigo fuenteapplication/octet-stream20649239https://repositorio.escuelaing.edu.co/bitstream/001/1236/2/Anexo%201.zip0a93ed7ea281a3171b21cb2e65f80ef2MD52open accessAutorizacion.pdfapplication/pdf193481https://repositorio.escuelaing.edu.co/bitstream/001/1236/3/Autorizacion.pdfeafc6321362cbc23e7bb9b28571c1ae8MD53metadata only accessAnexo 2. zipapplication/octet-stream3251695https://repositorio.escuelaing.edu.co/bitstream/001/1236/4/Anexo%202.%20zip8e573e3c986af97c38204b37a85c8a83MD54open accessLICENSElicense.txttext/plain1748https://repositorio.escuelaing.edu.co/bitstream/001/1236/5/license.txt8a4605be74aa9ea9d79846c1fba20a33MD55open accessTEXTAnzola Avila, Alejandro-2020.pdf.txtAnzola Avila, Alejandro-2020.pdf.txtExtracted texttext/plain179115https://repositorio.escuelaing.edu.co/bitstream/001/1236/8/Anzola%20Avila%2c%20Alejandro-2020.pdf.txt3875a6edecab7465e4c184672cb30dc8MD58open accessAutorizacion.pdf.txtAutorizacion.pdf.txtExtracted texttext/plain3826https://repositorio.escuelaing.edu.co/bitstream/001/1236/10/Autorizacion.pdf.txt315449d571fa37015046fb849178657dMD510metadata only accessTHUMBNAILAnzola Avila, Alejandro-2020.pdf.jpgAnzola Avila, Alejandro-2020.pdf.jpgGenerated Thumbnailimage/jpeg6458https://repositorio.escuelaing.edu.co/bitstream/001/1236/9/Anzola%20Avila%2c%20Alejandro-2020.pdf.jpg36d1bdd005b94f6062b2658674c96155MD59open accessAutorizacion.pdf.jpgAutorizacion.pdf.jpgGenerated Thumbnailimage/jpeg13574https://repositorio.escuelaing.edu.co/bitstream/001/1236/11/Autorizacion.pdf.jpg86c0142ada9b5d9e33fb7e817f299360MD511metadata only access001/1236oai:repositorio.escuelaing.edu.co:001/12362021-10-01 17:25:06.555open accessRepositorio Escuela Colombiana de Ingeniería Julio Garavitorepositorio.eci@escuelaing.edu.coTk9URTogUExBQ0UgWU9VUiBPV04gTElDRU5TRSBIRVJFClRoaXMgc2FtcGxlIGxpY2Vuc2UgaXMgcHJvdmlkZWQgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seS4KCk5PTi1FWENMVVNJVkUgRElTVFJJQlVUSU9OIExJQ0VOU0UKCkJ5IHNpZ25pbmcgYW5kIHN1Ym1pdHRpbmcgdGhpcyBsaWNlbnNlLCB5b3UgKHRoZSBhdXRob3Iocykgb3IgY29weXJpZ2h0Cm93bmVyKSBncmFudHMgdG8gRFNwYWNlIFVuaXZlcnNpdHkgKERTVSkgdGhlIG5vbi1leGNsdXNpdmUgcmlnaHQgdG8gcmVwcm9kdWNlLAp0cmFuc2xhdGUgKGFzIGRlZmluZWQgYmVsb3cpLCBhbmQvb3IgZGlzdHJpYnV0ZSB5b3VyIHN1Ym1pc3Npb24gKGluY2x1ZGluZwp0aGUgYWJzdHJhY3QpIHdvcmxkd2lkZSBpbiBwcmludCBhbmQgZWxlY3Ryb25pYyBmb3JtYXQgYW5kIGluIGFueSBtZWRpdW0sCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYXVkaW8gb3IgdmlkZW8uCgpZb3UgYWdyZWUgdGhhdCBEU1UgbWF5LCB3aXRob3V0IGNoYW5naW5nIHRoZSBjb250ZW50LCB0cmFuc2xhdGUgdGhlCnN1Ym1pc3Npb24gdG8gYW55IG1lZGl1bSBvciBmb3JtYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZhdGlvbi4KCllvdSBhbHNvIGFncmVlIHRoYXQgRFNVIG1heSBrZWVwIG1vcmUgdGhhbiBvbmUgY29weSBvZiB0aGlzIHN1Ym1pc3Npb24gZm9yCnB1cnBvc2VzIG9mIHNlY3VyaXR5LCBiYWNrLXVwIGFuZCBwcmVzZXJ2YXRpb24uCgpZb3UgcmVwcmVzZW50IHRoYXQgdGhlIHN1Ym1pc3Npb24gaXMgeW91ciBvcmlnaW5hbCB3b3JrLCBhbmQgdGhhdCB5b3UgaGF2ZQp0aGUgcmlnaHQgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb250YWluZWQgaW4gdGhpcyBsaWNlbnNlLiBZb3UgYWxzbyByZXByZXNlbnQKdGhhdCB5b3VyIHN1Ym1pc3Npb24gZG9lcyBub3QsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBpbmZyaW5nZSB1cG9uCmFueW9uZSdzIGNvcHlyaWdodC4KCklmIHRoZSBzdWJtaXNzaW9uIGNvbnRhaW5zIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8gbm90IGhvbGQgY29weXJpZ2h0LAp5b3UgcmVwcmVzZW50IHRoYXQgeW91IGhhdmUgb2J0YWluZWQgdGhlIHVucmVzdHJpY3RlZCBwZXJtaXNzaW9uIG9mIHRoZQpjb3B5cmlnaHQgb3duZXIgdG8gZ3JhbnQgRFNVIHRoZSByaWdodHMgcmVxdWlyZWQgYnkgdGhpcyBsaWNlbnNlLCBhbmQgdGhhdApzdWNoIHRoaXJkLXBhcnR5IG93bmVkIG1hdGVyaWFsIGlzIGNsZWFybHkgaWRlbnRpZmllZCBhbmQgYWNrbm93bGVkZ2VkCndpdGhpbiB0aGUgdGV4dCBvciBjb250ZW50IG9mIHRoZSBzdWJtaXNzaW9uLgoKSUYgVEhFIFNVQk1JU1NJT04gSVMgQkFTRUQgVVBPTiBXT1JLIFRIQVQgSEFTIEJFRU4gU1BPTlNPUkVEIE9SIFNVUFBPUlRFRApCWSBBTiBBR0VOQ1kgT1IgT1JHQU5JWkFUSU9OIE9USEVSIFRIQU4gRFNVLCBZT1UgUkVQUkVTRU5UIFRIQVQgWU9VIEhBVkUKRlVMRklMTEVEIEFOWSBSSUdIVCBPRiBSRVZJRVcgT1IgT1RIRVIgT0JMSUdBVElPTlMgUkVRVUlSRUQgQlkgU1VDSApDT05UUkFDVCBPUiBBR1JFRU1FTlQuCgpEU1Ugd2lsbCBjbGVhcmx5IGlkZW50aWZ5IHlvdXIgbmFtZShzKSBhcyB0aGUgYXV0aG9yKHMpIG9yIG93bmVyKHMpIG9mIHRoZQpzdWJtaXNzaW9uLCBhbmQgd2lsbCBub3QgbWFrZSBhbnkgYWx0ZXJhdGlvbiwgb3RoZXIgdGhhbiBhcyBhbGxvd2VkIGJ5IHRoaXMKbGljZW5zZSwgdG8geW91ciBzdWJtaXNzaW9uLgo= |