Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
La protección de las personas y sus bienes es un punto que se busca mejorar día tras día, el avance de la tecnología permite que el campo de la seguridad electrónica sea cada vez más efectiva para brindar un confort a los usuarios, quitando esa carga mental de estar pensando que ellos o sus bienes s...
- Autores:
- Tipo de recurso:
- Trabajo de grado de pregrado
- Fecha de publicación:
- 2021
- Institución:
- Universidad Distrital Francisco José de Caldas
- Repositorio:
- RIUD: repositorio U. Distrital
- Idioma:
- spa
- OAI Identifier:
- oai:repository.udistrital.edu.co:11349/26732
- Acceso en línea:
- http://hdl.handle.net/11349/26732
- Palabra clave:
- Reconocimiento facial
OpenCV
FaceRecognition
Video Vigilancia
Biometría
Procesamiento de Imagen
Ingeniería en Control - Tesis y disertaciones académicas
Reconocimiento de rostros humanos (Informática)
Identificación biométrica
Vigilancia electrónica
Videovigilancia - Seguridad ciudadana
Software libre - Implementación
Python (Lenguaje de programación de computadores)
Face recognition
OpenCV
Biometrics
Video surveillance
Image Processing
- Rights
- License
- Atribución-NoComercial 4.0 Internacional
id |
UDISTRITA2_d2bc381d450c225d51e08d4b22b34f65 |
---|---|
oai_identifier_str |
oai:repository.udistrital.edu.co:11349/26732 |
network_acronym_str |
UDISTRITA2 |
network_name_str |
RIUD: repositorio U. Distrital |
repository_id_str |
|
dc.title.spa.fl_str_mv |
Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados |
dc.title.titleenglish.spa.fl_str_mv |
Face detection, extraction and recognition system in scenes with a maximum of 4 people, for residential video surveillance applications using free software tools, indoors |
title |
Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados |
spellingShingle |
Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados Reconocimiento facial OpenCV FaceRecognition Video Vigilancia Biometría Procesamiento de Imagen Ingeniería en Control - Tesis y disertaciones académicas Reconocimiento de rostros humanos (Informática) Identificación biométrica Vigilancia electrónica Videovigilancia - Seguridad ciudadana Software libre - Implementación Python (Lenguaje de programación de computadores) Face recognition OpenCV Biometrics Video surveillance Image Processing |
title_short |
Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados |
title_full |
Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados |
title_fullStr |
Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados |
title_full_unstemmed |
Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados |
title_sort |
Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados |
dc.contributor.advisor.spa.fl_str_mv |
Pérez Pereira, Miguel Ricardo |
dc.subject.spa.fl_str_mv |
Reconocimiento facial OpenCV FaceRecognition Video Vigilancia Biometría Procesamiento de Imagen |
topic |
Reconocimiento facial OpenCV FaceRecognition Video Vigilancia Biometría Procesamiento de Imagen Ingeniería en Control - Tesis y disertaciones académicas Reconocimiento de rostros humanos (Informática) Identificación biométrica Vigilancia electrónica Videovigilancia - Seguridad ciudadana Software libre - Implementación Python (Lenguaje de programación de computadores) Face recognition OpenCV Biometrics Video surveillance Image Processing |
dc.subject.lemb.spa.fl_str_mv |
Ingeniería en Control - Tesis y disertaciones académicas Reconocimiento de rostros humanos (Informática) Identificación biométrica Vigilancia electrónica Videovigilancia - Seguridad ciudadana Software libre - Implementación Python (Lenguaje de programación de computadores) |
dc.subject.keyword.spa.fl_str_mv |
Face recognition OpenCV Biometrics Video surveillance Image Processing |
description |
La protección de las personas y sus bienes es un punto que se busca mejorar día tras día, el avance de la tecnología permite que el campo de la seguridad electrónica sea cada vez más efectiva para brindar un confort a los usuarios, quitando esa carga mental de estar pensando que ellos o sus bienes serán afectados por personas inescrupulosas, el desarrollo de sistemas de seguridad ha avanzado mucho, y uno de los campos más nuevos y que ha manifestado este avance es el reconocimiento facial, dicho campo, proporciona la capacidad de detectar y reconocer rostros humanos en video automáticamente, generando una señal de alarma o control, ya sea para alertar a la persona o permitirle el ingreso. Los desarrollos actuales que cuentan con la característica de reconocer múltiples rostros en video, suelen tener elevados costos, debido a que son implementados en plataformas que no están basadas en software libre, lo que aumenta el costo debido a licencias de pago por uso, Además de esto, se presenta una escasez de estudios que demuestren cuán eficiente es un sistema que esté desarrollado en software libre, y que cuente con la detección facial al interactuar con múltiples rostros, que sea confiable para la protección de bienes, y que cuente con la capacidad de identificar personas que deseen acceder a lugares de residencia sin contar con la respectiva autorización. En esta investigación se encontrará en primera instancia una contextualización teórica de los tipos de algoritmos y librerías para detección y reconocimiento facial que existen en Python, dichas librerías son las denominadas OpenCV y Face-Recognition, en vista de que no se tiene un estudio que muestre distancia máxima de detección, tiempos de ejecución y ángulos de operación, entre otros, en esta investigación se decidió hacer pruebas a ambos algoritmos para determinar cuál es más efectivo o cuál se ajusta mejor al sistemas de videovigilancia propuesto en esta investigación. A continuación, se mostrará el algoritmo propuesto por los investigadores el cual fusiona diferentes programas y librerías que permiten la detección, extracción y reconocimiento de múltiples rostros en tiempo real, además, se mostrará la interfaz gráfica de usuario (GUI) que permite la total manipulación de este sistema, por último, se mostrará las pruebas que realizaron al sistema en dos ambientes diferentes, uno residencial y uno comercial. Es de aclarar, que todo el sistema fue desarrollado en el lenguaje de programación Python el cual es libre. |
publishDate |
2021 |
dc.date.accessioned.none.fl_str_mv |
2021-09-30T17:32:47Z |
dc.date.available.none.fl_str_mv |
2021-09-30T17:32:47Z |
dc.date.created.spa.fl_str_mv |
2021-09-23 |
dc.type.degree.spa.fl_str_mv |
Monografía |
dc.type.driver.spa.fl_str_mv |
info:eu-repo/semantics/bachelorThesis |
dc.type.coar.spa.fl_str_mv |
http://purl.org/coar/resource_type/c_7a1f |
format |
http://purl.org/coar/resource_type/c_7a1f |
dc.identifier.uri.none.fl_str_mv |
http://hdl.handle.net/11349/26732 |
url |
http://hdl.handle.net/11349/26732 |
dc.language.iso.spa.fl_str_mv |
spa |
language |
spa |
dc.rights.*.fl_str_mv |
Atribución-NoComercial 4.0 Internacional |
dc.rights.coar.fl_str_mv |
http://purl.org/coar/access_right/c_abf2 |
dc.rights.uri.*.fl_str_mv |
http://creativecommons.org/licenses/by-nc/4.0/ |
dc.rights.acceso.spa.fl_str_mv |
Abierto (Texto Completo) |
rights_invalid_str_mv |
Atribución-NoComercial 4.0 Internacional http://creativecommons.org/licenses/by-nc/4.0/ Abierto (Texto Completo) http://purl.org/coar/access_right/c_abf2 |
dc.format.mimetype.spa.fl_str_mv |
pdf |
institution |
Universidad Distrital Francisco José de Caldas |
bitstream.url.fl_str_mv |
http://repository.udistrital.edu.co/bitstream/11349/26732/1/CortesMartinezCristianSteven2021.pdf http://repository.udistrital.edu.co/bitstream/11349/26732/5/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf http://repository.udistrital.edu.co/bitstream/11349/26732/6/license_rdf http://repository.udistrital.edu.co/bitstream/11349/26732/7/license.txt http://repository.udistrital.edu.co/bitstream/11349/26732/8/CortesMartinezCristianSteven2021.pdf.jpg http://repository.udistrital.edu.co/bitstream/11349/26732/9/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf.jpg |
bitstream.checksum.fl_str_mv |
7fde0e72168ba20863f3690c44df6146 68a8c170d25595327aeb3fd6068a1299 40513e59b5d1327fcca263d3c2a2e44a 997daf6c648c962d566d7b082dac908d 809a75485ec435d87e482abf4a94db2d 70bb0d6c6e1c565770ac7eb0d0b85662 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 MD5 MD5 MD5 MD5 |
repository.name.fl_str_mv |
Repositorio Institucional Universidad Distrital - RIUD |
repository.mail.fl_str_mv |
repositorio@udistrital.edu.co |
_version_ |
1814110982112280576 |
spelling |
Pérez Pereira, Miguel RicardoCortés Martínez, Cristian StevenVásquez Bohórquez, David Fernando2021-09-30T17:32:47Z2021-09-30T17:32:47Z2021-09-23http://hdl.handle.net/11349/26732La protección de las personas y sus bienes es un punto que se busca mejorar día tras día, el avance de la tecnología permite que el campo de la seguridad electrónica sea cada vez más efectiva para brindar un confort a los usuarios, quitando esa carga mental de estar pensando que ellos o sus bienes serán afectados por personas inescrupulosas, el desarrollo de sistemas de seguridad ha avanzado mucho, y uno de los campos más nuevos y que ha manifestado este avance es el reconocimiento facial, dicho campo, proporciona la capacidad de detectar y reconocer rostros humanos en video automáticamente, generando una señal de alarma o control, ya sea para alertar a la persona o permitirle el ingreso. Los desarrollos actuales que cuentan con la característica de reconocer múltiples rostros en video, suelen tener elevados costos, debido a que son implementados en plataformas que no están basadas en software libre, lo que aumenta el costo debido a licencias de pago por uso, Además de esto, se presenta una escasez de estudios que demuestren cuán eficiente es un sistema que esté desarrollado en software libre, y que cuente con la detección facial al interactuar con múltiples rostros, que sea confiable para la protección de bienes, y que cuente con la capacidad de identificar personas que deseen acceder a lugares de residencia sin contar con la respectiva autorización. En esta investigación se encontrará en primera instancia una contextualización teórica de los tipos de algoritmos y librerías para detección y reconocimiento facial que existen en Python, dichas librerías son las denominadas OpenCV y Face-Recognition, en vista de que no se tiene un estudio que muestre distancia máxima de detección, tiempos de ejecución y ángulos de operación, entre otros, en esta investigación se decidió hacer pruebas a ambos algoritmos para determinar cuál es más efectivo o cuál se ajusta mejor al sistemas de videovigilancia propuesto en esta investigación. A continuación, se mostrará el algoritmo propuesto por los investigadores el cual fusiona diferentes programas y librerías que permiten la detección, extracción y reconocimiento de múltiples rostros en tiempo real, además, se mostrará la interfaz gráfica de usuario (GUI) que permite la total manipulación de este sistema, por último, se mostrará las pruebas que realizaron al sistema en dos ambientes diferentes, uno residencial y uno comercial. Es de aclarar, que todo el sistema fue desarrollado en el lenguaje de programación Python el cual es libre.The protection of people and their property is a point that seeks to improve day after day, the advancement of technology allows the field of electronic security to be increasingly effective to provide comfort to users, removing that mental burden of be thinking that they or their property will be affected by unscrupulous people, the development of security systems has advanced a lot, and one of the newest fields and that has manifested this advance is facial recognition, said field, provides the ability to detect and recognize human faces on video automatically, generating an alarm or control signal, either to alert the person or allow entry. Current developments that have the feature of recognizing multiple faces on video tend to have high costs, because they are implemented on platforms that are not based on free software, which increases the cost due to pay-per-use licenses. This, there is a shortage of studies that demonstrate how efficient is a system that is developed in free software, and that has facial detection when interacting with multiple faces, that is reliable for the protection of assets, and that has the capacity to identify people who wish to access places of residence without having the respective authorization. In this research, a theoretical contextualization of the types of algorithms and libraries for facial detection and recognition that exist in Python will be found in the first instance, these libraries are called OpenCV and Face-Recognition, since there is no study that shows maximum detection distance, execution times and operating angles, among others, in this investigation it was decided to test both algorithms to determine which one is more effective or which one best fits the video surveillance systems proposed in this investigation. Next, the algorithm proposed by the researchers will be shown, which merges different programs and libraries that allow the detection, extraction and recognition of multiple faces in real time, in addition, the graphical user interface (GUI) that allows total manipulation will be displayed. of this system, finally, the tests carried out on the system in two different environments, one residential and one commercial, will be shown. It should be clarified that the entire system was developed in the Python programming language, which is free.pdfspaAtribución-NoComercial 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2Reconocimiento facialOpenCVFaceRecognitionVideo VigilanciaBiometríaProcesamiento de ImagenIngeniería en Control - Tesis y disertaciones académicasReconocimiento de rostros humanos (Informática)Identificación biométricaVigilancia electrónicaVideovigilancia - Seguridad ciudadanaSoftware libre - ImplementaciónPython (Lenguaje de programación de computadores)Face recognitionOpenCVBiometricsVideo surveillanceImage ProcessingSistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerradosFace detection, extraction and recognition system in scenes with a maximum of 4 people, for residential video surveillance applications using free software tools, indoorsMonografíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fORIGINALCortesMartinezCristianSteven2021.pdfCortesMartinezCristianSteven2021.pdfTrabajo de gradoapplication/pdf2763013http://repository.udistrital.edu.co/bitstream/11349/26732/1/CortesMartinezCristianSteven2021.pdf7fde0e72168ba20863f3690c44df6146MD51open accessLicencia y autorización de los autores para publicar.pdfLicencia y autorización de los autores para publicar.pdfapplication/pdf340221http://repository.udistrital.edu.co/bitstream/11349/26732/5/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf68a8c170d25595327aeb3fd6068a1299MD55metadata only accessCC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8920http://repository.udistrital.edu.co/bitstream/11349/26732/6/license_rdf40513e59b5d1327fcca263d3c2a2e44aMD56open accessLICENSElicense.txtlicense.txttext/plain; charset=utf-87167http://repository.udistrital.edu.co/bitstream/11349/26732/7/license.txt997daf6c648c962d566d7b082dac908dMD57open accessTHUMBNAILCortesMartinezCristianSteven2021.pdf.jpgCortesMartinezCristianSteven2021.pdf.jpgIM Thumbnailimage/jpeg7793http://repository.udistrital.edu.co/bitstream/11349/26732/8/CortesMartinezCristianSteven2021.pdf.jpg809a75485ec435d87e482abf4a94db2dMD58open accessLicencia y autorización de los autores para publicar.pdf.jpgLicencia y autorización de los autores para publicar.pdf.jpgIM Thumbnailimage/jpeg13139http://repository.udistrital.edu.co/bitstream/11349/26732/9/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf.jpg70bb0d6c6e1c565770ac7eb0d0b85662MD59open access11349/26732oai:repository.udistrital.edu.co:11349/267322023-12-19 12:23:00.914metadata only accessRepositorio Institucional Universidad Distrital - RIUDrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK |