Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python
En este proyecto se desarrolla una interfaz basada en software que permite simular un sistema de modulación de señales utilizando el lenguaje de programación Python, a este se le añaden diferentes pasos para simular la transmisión y recepción de la señal modulada, obteniendo un sistema de comunicaci...
- 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/29127
- Acceso en línea:
- http://hdl.handle.net/11349/29127
- Palabra clave:
- Modulación digital
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radiocomunicación
Simulación
Tecnología en Electrónica - Tesis y disertaciones académicas
Modulación (Electrónica)
Modulación digital
Python (Lenguaje de programación de computadores)
Teoría de las señales (Telecomunicaciones)
Radiodifusión digital
Digital modulation
PSK (Phase Shift Keying)
Python
QAM (Quadrature Amplitude Modulation)
Radio communication
Simulation
- Rights
- License
- Atribución-NoComercial-SinDerivadas 4.0 Internacional
id |
UDISTRITA2_f00f7b2118959568a48db6feccf33b2a |
---|---|
oai_identifier_str |
oai:repository.udistrital.edu.co:11349/29127 |
network_acronym_str |
UDISTRITA2 |
network_name_str |
RIUD: repositorio U. Distrital |
repository_id_str |
|
dc.title.spa.fl_str_mv |
Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python |
dc.title.titleenglish.spa.fl_str_mv |
Development of an interface for simulation of digital modulations using python programming language |
title |
Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python |
spellingShingle |
Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python Modulación digital PSK (Phase Shift Keying) Python QAM (Quadrature Amplitude Modulation) Radiocomunicación Simulación Tecnología en Electrónica - Tesis y disertaciones académicas Modulación (Electrónica) Modulación digital Python (Lenguaje de programación de computadores) Teoría de las señales (Telecomunicaciones) Radiodifusión digital Digital modulation PSK (Phase Shift Keying) Python QAM (Quadrature Amplitude Modulation) Radio communication Simulation |
title_short |
Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python |
title_full |
Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python |
title_fullStr |
Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python |
title_full_unstemmed |
Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python |
title_sort |
Desarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación python |
dc.contributor.advisor.none.fl_str_mv |
Pedraza Martínez, Luis Fernando |
dc.subject.spa.fl_str_mv |
Modulación digital PSK (Phase Shift Keying) Python QAM (Quadrature Amplitude Modulation) Radiocomunicación Simulación |
topic |
Modulación digital PSK (Phase Shift Keying) Python QAM (Quadrature Amplitude Modulation) Radiocomunicación Simulación Tecnología en Electrónica - Tesis y disertaciones académicas Modulación (Electrónica) Modulación digital Python (Lenguaje de programación de computadores) Teoría de las señales (Telecomunicaciones) Radiodifusión digital Digital modulation PSK (Phase Shift Keying) Python QAM (Quadrature Amplitude Modulation) Radio communication Simulation |
dc.subject.lemb.spa.fl_str_mv |
Tecnología en Electrónica - Tesis y disertaciones académicas Modulación (Electrónica) Modulación digital Python (Lenguaje de programación de computadores) Teoría de las señales (Telecomunicaciones) Radiodifusión digital |
dc.subject.keyword.spa.fl_str_mv |
Digital modulation PSK (Phase Shift Keying) Python QAM (Quadrature Amplitude Modulation) Radio communication Simulation |
description |
En este proyecto se desarrolla una interfaz basada en software que permite simular un sistema de modulación de señales utilizando el lenguaje de programación Python, a este se le añaden diferentes pasos para simular la transmisión y recepción de la señal modulada, obteniendo un sistema de comunicación digital compuesto por las siguientes etapas: acondicionamiento de la señal a modular (en este caso la señal es un vector de tamaño N de números binarios aleatorios), codificación de la información, modulación de la señal, transmisión en un canal (en este caso se utiliza canales de ruido gaussiano blanco con diferente relación de Eb/No) , en la recepción un filtro acoplado al demodulador, y por último un decodificador. El desarrollo del proyecto se realizó con las librerías: NummPy para realizar los procesos matemáticos, SciPy y Commpy para calcular el modelo del modulador y demodulador, también para implementar filtros y añadir la señal modulada al canal de ruido gaussiano blanco. Además, con la librería WxPython se realizó la interfaz de usuario que permite seleccionar el tipo de modulación entre M-PSK Y M-QAM. Así, dentro del menú de cada modulación se permite variar el número de bits a transmitir, el factor de roll off (Este factor indica el porcentaje de ancho de banda que excede la señal de coseno realzado con respecto a el ancho de banda que ocuparía el pulso rectangular por referenciar) para los filtros, seleccionar el número de símbolos de la modulación (M-PSK y M-QAM) y por último con la librería Matplotlib se grafican las diferentes señales, como la señal binaria en transmisión y recepción, la señal modulada, la influencia de la señal de ruido gaussiano blanco en la señal modulada, filtros, diagramas de constelación en transmisión y recepción, la gráfica de la BER (Tasa de Error por Bit) vs Eb/No (Energía por bit / densidad espectral de potencia de ruido), y la comparación de la información binaria en el transmisor con la información binaria en el receptor. |
publishDate |
2021 |
dc.date.created.none.fl_str_mv |
2021-06-24 |
dc.date.accessioned.none.fl_str_mv |
2022-05-25T21:10:05Z |
dc.date.available.none.fl_str_mv |
2022-05-25T21:10:05Z |
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/29127 |
url |
http://hdl.handle.net/11349/29127 |
dc.language.iso.spa.fl_str_mv |
spa |
language |
spa |
dc.rights.*.fl_str_mv |
Atribución-NoComercial-SinDerivadas 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-nd/4.0/ |
dc.rights.acceso.spa.fl_str_mv |
Abierto (Texto Completo) |
rights_invalid_str_mv |
Atribución-NoComercial-SinDerivadas 4.0 Internacional http://creativecommons.org/licenses/by-nc-nd/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/29127/4/license_rdf http://repository.udistrital.edu.co/bitstream/11349/29127/5/GarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf http://repository.udistrital.edu.co/bitstream/11349/29127/7/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf http://repository.udistrital.edu.co/bitstream/11349/29127/6/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf http://repository.udistrital.edu.co/bitstream/11349/29127/8/license.txt http://repository.udistrital.edu.co/bitstream/11349/29127/9/GarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf.jpg http://repository.udistrital.edu.co/bitstream/11349/29127/10/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf.jpg http://repository.udistrital.edu.co/bitstream/11349/29127/11/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf.jpg |
bitstream.checksum.fl_str_mv |
217700a34da79ed616c2feb68d4c5e06 5c2f6f44aad2edad1c6d20a5944b1e85 e8edc216e754344ece01853880b58f2e 6ab4c4f1c7007ae4b96bb9c97fb2edff 997daf6c648c962d566d7b082dac908d cf44ce8cbb9a768ce4c8f10a549fc8fb 3e07a0a3f971ca246a2d347116a07aa6 327d6e4507f9dfae6bb868f18c82f5c0 |
bitstream.checksumAlgorithm.fl_str_mv |
MD5 MD5 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_ |
1814111129408897024 |
spelling |
Pedraza Martínez, Luis FernandoGerena Merchán, Carlos JoséGarcía Rivera, Cristian Camilo2022-05-25T21:10:05Z2022-05-25T21:10:05Z2021-06-24http://hdl.handle.net/11349/29127En este proyecto se desarrolla una interfaz basada en software que permite simular un sistema de modulación de señales utilizando el lenguaje de programación Python, a este se le añaden diferentes pasos para simular la transmisión y recepción de la señal modulada, obteniendo un sistema de comunicación digital compuesto por las siguientes etapas: acondicionamiento de la señal a modular (en este caso la señal es un vector de tamaño N de números binarios aleatorios), codificación de la información, modulación de la señal, transmisión en un canal (en este caso se utiliza canales de ruido gaussiano blanco con diferente relación de Eb/No) , en la recepción un filtro acoplado al demodulador, y por último un decodificador. El desarrollo del proyecto se realizó con las librerías: NummPy para realizar los procesos matemáticos, SciPy y Commpy para calcular el modelo del modulador y demodulador, también para implementar filtros y añadir la señal modulada al canal de ruido gaussiano blanco. Además, con la librería WxPython se realizó la interfaz de usuario que permite seleccionar el tipo de modulación entre M-PSK Y M-QAM. Así, dentro del menú de cada modulación se permite variar el número de bits a transmitir, el factor de roll off (Este factor indica el porcentaje de ancho de banda que excede la señal de coseno realzado con respecto a el ancho de banda que ocuparía el pulso rectangular por referenciar) para los filtros, seleccionar el número de símbolos de la modulación (M-PSK y M-QAM) y por último con la librería Matplotlib se grafican las diferentes señales, como la señal binaria en transmisión y recepción, la señal modulada, la influencia de la señal de ruido gaussiano blanco en la señal modulada, filtros, diagramas de constelación en transmisión y recepción, la gráfica de la BER (Tasa de Error por Bit) vs Eb/No (Energía por bit / densidad espectral de potencia de ruido), y la comparación de la información binaria en el transmisor con la información binaria en el receptor.In this project a software-based interface is developed to simulate a signal modulation system using the Python programming language, to which different steps are added to simulate the transmission and reception of the modulated signal, obtaining a telecommunication system composed of the following stages: conditioning of the signal to be modulated (in this case the signal is a vector of size N of random binary numbers), information coding, signal modulation, transmission in a channel (in this case white Gaussian noise channels with different Eb/No ratio are used), in reception a filter coupled to the demodulator, and finally a decoder. The reception, a filter coupled to the demodulator, and finally a decoder. The development of the project was done with the libraries: NummPy to perform the mathematical processes, SciPy and Commpy to calculate the model of the modulator and demodulator, also to implement filters and add the modulated signal to the white Gaussian noise channel. In addition, the WxPython library was used to create the user interface that allows selecting the modulation type between M-PSK, GMSK and M-QAM. Thus, within the menu of each modulation it is possible to vary the number of bits to transmit, the roll off factor for the filters, select the number of symbols of the modulation (M-PSK and M-QAM) and finally with the Matplotlib library the different graphs are plotted, such as the binary signal in transmission and reception, the modulated signal, the influence of the white Gaussian noise channel on the signal, filters, constellation diagrams in transmission and reception, the BER (Bit Error Rate) vs Eb/No (Energy per bit / noise power spectral density) plot, and the comparison of the binary information at the transmitter with the binary information at the receiver.pdfspaAtribución-NoComercial-SinDerivadas 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2Modulación digitalPSK (Phase Shift Keying)PythonQAM (Quadrature Amplitude Modulation)RadiocomunicaciónSimulaciónTecnología en Electrónica - Tesis y disertaciones académicasModulación (Electrónica)Modulación digitalPython (Lenguaje de programación de computadores)Teoría de las señales (Telecomunicaciones)Radiodifusión digitalDigital modulationPSK (Phase Shift Keying)PythonQAM (Quadrature Amplitude Modulation)Radio communicationSimulationDesarrollo de una interfaz para simulación de modulaciones digitales utilizando lenguaje de programación pythonDevelopment of an interface for simulation of digital modulations using python programming languageMonografíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fCC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8811http://repository.udistrital.edu.co/bitstream/11349/29127/4/license_rdf217700a34da79ed616c2feb68d4c5e06MD54open accessORIGINALGarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdfGarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdfapplication/pdf1509521http://repository.udistrital.edu.co/bitstream/11349/29127/5/GarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf5c2f6f44aad2edad1c6d20a5944b1e85MD55open accessGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdfGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdfapplication/pdf22174http://repository.udistrital.edu.co/bitstream/11349/29127/7/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdfe8edc216e754344ece01853880b58f2eMD57open accessGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdfGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdfapplication/pdf388349http://repository.udistrital.edu.co/bitstream/11349/29127/6/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf6ab4c4f1c7007ae4b96bb9c97fb2edffMD56metadata only accessLICENSElicense.txtlicense.txttext/plain; charset=utf-87167http://repository.udistrital.edu.co/bitstream/11349/29127/8/license.txt997daf6c648c962d566d7b082dac908dMD58open accessTHUMBNAILGarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf.jpgGarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf.jpgIM Thumbnailimage/jpeg15093http://repository.udistrital.edu.co/bitstream/11349/29127/9/GarciaRiveraCristianCamiloGerenaMerchanCarlosJose2021.pdf.jpgcf44ce8cbb9a768ce4c8f10a549fc8fbMD59open accessGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf.jpgGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf.jpgIM Thumbnailimage/jpeg10650http://repository.udistrital.edu.co/bitstream/11349/29127/10/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseAnexo1.pdf.jpg3e07a0a3f971ca246a2d347116a07aa6MD510open accessGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf.jpgGarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf.jpgIM Thumbnailimage/jpeg13147http://repository.udistrital.edu.co/bitstream/11349/29127/11/GarciaRiveraCristianCamiloGerenaMerchanCarlosJoseLICENCIAFIRMADA.pdf.jpg327d6e4507f9dfae6bb868f18c82f5c0MD511open access11349/29127oai:repository.udistrital.edu.co:11349/291272023-06-09 16:46:01.11open accessRepositorio Institucional Universidad Distrital - RIUDrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK |