Ludhiana’s Leading Canada Immigration, Visa Consultants & IELTS/PTE Institute

Nanda and Associate Canadian Immigration Lawyers Delivers Professional Canadian Immigration Guidance

Nanda and Associate Canadian Immigration Lawyers (NACIL) is the best immigration and visa consultancy firm in Ludhiana, Punjab. Our Immigration Consultant Ludhiana help hundreds of students every year to pursue their academic or higher education abroad. NACIL is committed to providing effective and reliable Canada immigration solutions to individuals. Whether you are planning to study, work or settle in Canada, we have the knowledge and experience you require to achieve your goals. Our expert immigration consultants in Ludhiana, Punjab offer reliable information on Canadian PR, study and work visa for Canada and more.

Apart from being the leading visa consultants, we also have a team of talented IELTS teachers with proven credentials to help you clear IELTS and PTE exams. We provide quality education to our students. We help you score the highest bands in IELTS & PTE. We feel proud and happy to have prepared so many students for their IELTS exam with wonderful results. Our professionals offer personalized service to our clients to meet their unique immigration needs.

Our Core Immigration Services in Ludhiana

ilets-training

IELTS Training

The International English language testing system (IELTS) is an English language proficiency test for foreign studies. It assesses your English skills including – reading, writing, listening and speaking.
Read More
student-visa

Study Visa

Every country has their own set of rules and regulations for obtaining a study visa. NACIL is an education consultancy assisting students who are willing to pursue their higher education overseas.
Read More
Canada Work Permit Consultants

Canada Work Permit

Millions of people have got the work permit to live and work in Canada. The Canadian government’s work permit allows people to migrate to Canada and get PR under various work categories.
Read More
PTE-Exam

PTE Exam

Want to appear for PTE Academic? Our will prepare the right way to achieve success in the PTE exam and secure Canadian entry. Our PTE teachers in Ludhiana will help you in mastering English and pass PTE exam with flying colors.
Read More
Spousal Sponsorship

Spousal Sponsorship

So, you want to sponsor your foreign partner in Canada and get a permanent residency for him/her? Talk to our immigration consultants in Ludhiana and we will help you file a spousal sponsorship application in a timely and efficient manner.
Read More
Quebec-Investor

Quebec Investor

Want a Canada investor visa? Let NACIL help you get Canadian PR with Quebec Immigrant Investor Program (QIIP) 2017. Our Visa Consultant will provide best guidance for Canada investment immigration program.
Read More

Why Rely On Us For Overseas Education?

NACIL ensures a transparent student/study visa process
We provide coaching for IELTS & PTE in Ludhiana, Punjab
We offer complete student visa counseling for study in Canada
Track record of hundreds of successful study visa applications
University, courses and college admission guidance
  • Quick Query

Professional Immigration Services in Ludhiana

NACIL helps individuals by providing relevant and up to date Canadian immigration consulting services. Our Ludhiana based immigration consultants will be right there for you, right from application preparation, completion to submission.
When you choose us, you choose a team of experienced immigration consultants in Ludhiana who pay utmost attention to every detail. We answer all your questions and address all your concerns efficiently. Our experts make the entire transition smooth and hassle free for you.

Immigration Consultants Ludhiana

Our Team

What People Say







  • CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfNScgPjxhIGlkPSdnZl81JyBjbGFzcz0nZ2Zvcm1fYW5jaG9yJyA+PC9hPjxmb3JtIG1ldGhvZD0ncG9zdCcgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YScgdGFyZ2V0PSdnZm9ybV9hamF4X2ZyYW1lXzUnIGlkPSdnZm9ybV81JyAgYWN0aW9uPScvI2dmXzUnPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9ib2R5Jz48dWwgaWQ9J2dmb3JtX2ZpZWxkc181JyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzVfMScgY2xhc3M9J2dmaWVsZCBnZmllbGRfaHRtbCBnZmllbGRfaHRtbF9mb3JtYXR0ZWQgZ2ZpZWxkX25vX2ZvbGxvd3NfZGVzYyBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlJyA+PGgzPkZyZWUgQ29uc3VsdGF0aW9uPC9oMz48L2xpPjxsaSBpZD0nZmllbGRfNV8yJyBjbGFzcz0nZ2ZpZWxkIGxlZnRfZmllbGQgZ2ZpZWxkX2NvbnRhaW5zX3JlcXVpcmVkIGZpZWxkX3N1YmxhYmVsX2JlbG93IGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5X3Zpc2libGUnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgZm9yPSdpbnB1dF81XzInID5OYW1lPHNwYW4gY2xhc3M9J2dmaWVsZF9yZXF1aXJlZCc+Kjwvc3Bhbj48L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl90ZXh0Jz48aW5wdXQgbmFtZT0naW5wdXRfMicgaWQ9J2lucHV0XzVfMicgdHlwZT0ndGV4dCcgdmFsdWU9JycgY2xhc3M9J2xhcmdlJyAgdGFiaW5kZXg9JzEnICAgYXJpYS1yZXF1aXJlZD0idHJ1ZSIgYXJpYS1pbnZhbGlkPSJmYWxzZSIgLz48L2Rpdj48L2xpPjxsaSBpZD0nZmllbGRfNV8zJyBjbGFzcz0nZ2ZpZWxkIHJpZ2h0X2ZpZWxkIGdmaWVsZF9jb250YWluc19yZXF1aXJlZCBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlJyA+PGxhYmVsIGNsYXNzPSdnZmllbGRfbGFiZWwnIGZvcj0naW5wdXRfNV8zJyA+RW1haWw8c3BhbiBjbGFzcz0nZ2ZpZWxkX3JlcXVpcmVkJz4qPC9zcGFuPjwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX2VtYWlsJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSdpbnB1dF8zJyBpZD0naW5wdXRfNV8zJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nJyBjbGFzcz0nbGFyZ2UnIHRhYmluZGV4PScyJyAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF81XzQnIGNsYXNzPSdnZmllbGQgbGVmdF9maWVsZCBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlJyA+PGxhYmVsIGNsYXNzPSdnZmllbGRfbGFiZWwnIGZvcj0naW5wdXRfNV80JyA+UGhvbmU8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl9waG9uZSc+PGlucHV0IG5hbWU9J2lucHV0XzQnIGlkPSdpbnB1dF81XzQnIHR5cGU9J3RleHQnIHZhbHVlPScnIGNsYXNzPSdsYXJnZScgdGFiaW5kZXg9JzMnICAgIGFyaWEtaW52YWxpZD0iZmFsc2UiIC8+PC9kaXY+PC9saT48bGkgaWQ9J2ZpZWxkXzVfNScgY2xhc3M9J2dmaWVsZCByaWdodF9maWVsZCBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlJyA+PGxhYmVsIGNsYXNzPSdnZmllbGRfbGFiZWwnIGZvcj0naW5wdXRfNV81JyA+Q291bnRyeTwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3NlbGVjdCc+PHNlbGVjdCBuYW1lPSdpbnB1dF81JyBpZD0naW5wdXRfNV81JyAgY2xhc3M9J2xhcmdlIGdmaWVsZF9zZWxlY3QnIHRhYmluZGV4PSc0JyAgIGFyaWEtaW52YWxpZD0iZmFsc2UiPjxvcHRpb24gdmFsdWU9Jycgc2VsZWN0ZWQ9J3NlbGVjdGVkJyBjbGFzcz0nZ2ZfcGxhY2Vob2xkZXInPlNlbGVjdCBDb3VudHJ5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ2FuYWRhJyA+Q2FuYWRhPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTmV3IFplYWxhbmQnID5OZXcgWmVhbGFuZDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0F1c3RyYWxpYScgPkF1c3RyYWxpYTwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF81XzYnIGNsYXNzPSdnZmllbGQgZnVsbF9maWVsZCBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlJyA+PGxhYmVsIGNsYXNzPSdnZmllbGRfbGFiZWwnIGZvcj0naW5wdXRfNV82JyA+Q29sbGVnZTwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3NlbGVjdCc+PHNlbGVjdCBuYW1lPSdpbnB1dF82JyBpZD0naW5wdXRfNV82JyAgY2xhc3M9J2xhcmdlIGdmaWVsZF9zZWxlY3QnIHRhYmluZGV4PSc1JyAgIGFyaWEtaW52YWxpZD0iZmFsc2UiPjxvcHRpb24gdmFsdWU9Jycgc2VsZWN0ZWQ9J3NlbGVjdGVkJyBjbGFzcz0nZ2ZfcGxhY2Vob2xkZXInPlNlbGVjdCBDb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQm93IFZhbGxleSBDb2xsZWdlJyA+Qm93IFZhbGxleSBDb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTGFrZWxhbmQgQ29sbGVnZScgPkxha2VsYW5kIENvbGxlZ2U8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdNZWRpY2luZSBIYXQgQ29sbGVnZScgPk1lZGljaW5lIEhhdCBDb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nU2FpdCBjb2xsZWdlJyA+U2FpdCBjb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTGV0aGJyaWRnZSBjb2xsZWdlJyA+TGV0aGJyaWRnZSBjb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ2FsZ2FyeSBCb2FyZCBvZiBFZHVjYXRpb24nID5DYWxnYXJ5IEJvYXJkIG9mIEVkdWNhdGlvbjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0NhbW9zdW4gQ29sbGVnZScgPkNhbW9zdW4gQ29sbGVnZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0NvbGxlZ2Ugb2YgTmV3IENhbGVkb25pYScgPkNvbGxlZ2Ugb2YgTmV3IENhbGVkb25pYTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0NvbGxlZ2Ugb2YgdGhlIFJvY2tpZXMnID5Db2xsZWdlIG9mIHRoZSBSb2NraWVzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ29sdW1iaWEgQ29sbGVnZScgPkNvbHVtYmlhIENvbGxlZ2U8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdLd2FudGxlbiBQb2x5dGVjaG5pYyBVbml2ZXJzaXR5JyA+S3dhbnRsZW4gUG9seXRlY2huaWMgVW5pdmVyc2l0eTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0xhU2FsbGUgQ29sbGVnZScgPkxhU2FsbGUgQ29sbGVnZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J05vcnRoIElzbGFuZCBDb2xsZWdlJyA+Tm9ydGggSXNsYW5kIENvbGxlZ2U8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdOb3J0aGVybiBMaWdodHMnID5Ob3J0aGVybiBMaWdodHM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdPa2FuYWdhbiBDb2xsZWdlJyA+T2thbmFnYW4gQ29sbGVnZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J1NlbGtpcmsgQ29sbGVnZScgPlNlbGtpcmsgQ29sbGVnZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J1VuaXZlcnNpdHkgb2YgVGhlIEZyYXNlciBWYWxsZXknID5Vbml2ZXJzaXR5IG9mIFRoZSBGcmFzZXIgVmFsbGV5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nVW5pdmVyc2l0eSBvZiBDYW5hZGEgV2VzdCcgPlVuaXZlcnNpdHkgb2YgQ2FuYWRhIFdlc3Q8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdTcHJvdHRzaGF3IENvbGxlZ2UsIFZhbmNvdXZlcicgPlNwcm90dHNoYXcgQ29sbGVnZSwgVmFuY291dmVyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nU3VycmV5IFNjaG9vbCBCb2FyZCcgPlN1cnJleSBTY2hvb2wgQm9hcmQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdBc3Npbmlib2luZSBDb21tdW5pdHkgQ29sbGVnZScgPkFzc2luaWJvaW5lIENvbW11bml0eSBDb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTWFuaXRvYmEgSW5zdGl0dXRlIG9mIFRyYWRlcyBhbmQgVGVjaG5vbG9necKgIChmb3JtZXJseSBXVEMpJyA+TWFuaXRvYmEgSW5zdGl0dXRlIG9mIFRyYWRlcyBhbmQgVGVjaG5vbG9necKgIChmb3JtZXJseSBXVEMpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTGVzdGVyIEIuIFBlYXJzb24gU2Nob29sIEJvYXJkJyA+TGVzdGVyIEIuIFBlYXJzb24gU2Nob29sIEJvYXJkPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nKicgPlRyaW9zIGNvbGxlZ2Ugb2YgQnVzaW5lc3MsIFRlY2hub2xvZ3kgYW5kIEhlYWx0aGNhcmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdOQkNDIEludGVybmF0aW9uYWwnID5OQkNDIEludGVybmF0aW9uYWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdUcmlvcyBjb2xsZWdlIG9mIEJ1c2luZXNzLCBUZWNobm9sb2d5IGFuZCBIZWFsdGhjYXJlKicgPlRyaW9zIGNvbGxlZ2Ugb2YgQnVzaW5lc3MsIFRlY2hub2xvZ3kgYW5kIEhlYWx0aGNhcmUqPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ2FtYnJpYW4gQ29sbGVnZSBvZiBBcHBsaWVkIEFydHMgJmFtcDsgVGVjaG5vbG9neScgPkNhbWJyaWFuIENvbGxlZ2Ugb2YgQXBwbGllZCBBcnRzICZhbXA7IFRlY2hub2xvZ3k8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdIdW1iZXIgQ29sbGVnZSBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSAmYW1wOyBBZHZhbmNlZCBMZWFybmluZycgPkh1bWJlciBDb2xsZWdlIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5ICZhbXA7IEFkdmFuY2VkIExlYXJuaW5nPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTW9oYXdrIENvbGxlZ2Ugb2YgQXBwbGllZCBBcnRzICZhbXA7IFRlY2hub2xvZ3knID5Nb2hhd2sgQ29sbGVnZSBvZiBBcHBsaWVkIEFydHMgJmFtcDsgVGVjaG5vbG9neTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J05pYWdhcmEgQ29sbGVnZScgPk5pYWdhcmEgQ29sbGVnZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J1NhdWx0IENvbGxlZ2UnID5TYXVsdCBDb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nU3QgQ2xhaXIgQ29sbGVnZSBvZiBBcHBsaWVkIEFydHMgJmFtcDsgVGVjaG5vbG9neScgPlN0IENsYWlyIENvbGxlZ2Ugb2YgQXBwbGllZCBBcnRzICZhbXA7IFRlY2hub2xvZ3k8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdTdCBMYXdyZW5jZSBDb2xsZWdlJyA+U3QgTGF3cmVuY2UgQ29sbGVnZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0Jyb2NrIFVuaXZlcnNpdHknID5Ccm9jayBVbml2ZXJzaXR5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ2VudHJlIG9mIEVkdWNhdGlvbiBUcmFpbmluZyAoIERMSSBudW1iZXIpJyA+Q2VudHJlIG9mIEVkdWNhdGlvbiBUcmFpbmluZyAoIERMSSBudW1iZXIpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nUGVlbCBEaXN0cmljdCBTY2hvb2wgYm9hcmQgKEJyYW1wdG9uLCBNaXNzaXNhdWdhICknID5QZWVsIERpc3RyaWN0IFNjaG9vbCBib2FyZCAoQnJhbXB0b24sIE1pc3Npc2F1Z2EgKTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J1B1cmVzIENvbGxlZ2UnID5QdXJlcyBDb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nWW9yayBSZWdpb24gRGlzdHJpY3QgU2Nob29sIEJvYXJkICggTm9ydGggWW9yayApJyA+WW9yayBSZWdpb24gRGlzdHJpY3QgU2Nob29sIEJvYXJkICggTm9ydGggWW9yayApPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTGFzYWxsZSBDb2xsZWdlJyA+TGFzYWxsZSBDb2xsZWdlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nUGFya2xhbmQgQ29sbGVnZScgPlBhcmtsYW5kIENvbGxlZ2U8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdTYXNrYXRjaGV3YW4gUG9seXRlY2huaWMgKGZvcm1lcmx5IFNJQVNUKScgPlNhc2thdGNoZXdhbiBQb2x5dGVjaG5pYyAoZm9ybWVybHkgU0lBU1QpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nVW5pdmVyc2l0eSBvZiBSZWdpbmEnID5Vbml2ZXJzaXR5IG9mIFJlZ2luYTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J1VuaXZlcnNpdHkgb2YgU2Fza2F0Y2hld2FuJyA+VW5pdmVyc2l0eSBvZiBTYXNrYXRjaGV3YW48L29wdGlvbj48b3B0aW9uIHZhbHVlPScnID48L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9mb290ZXIgdG9wX2xhYmVsJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgaWQ9J2dmb3JtX3N1Ym1pdF9idXR0b25fNScgY2xhc3M9J2dmb3JtX2J1dHRvbiBidXR0b24nIHZhbHVlPSdTdWJtaXQnIHRhYmluZGV4PSc2JyBvbmNsaWNrPSdpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNSJdKXtyZXR1cm4gZmFsc2U7fSAgd2luZG93WyJnZl9zdWJtaXR0aW5nXzUiXT10cnVlOyAgJyBvbmtleXByZXNzPSdpZiggZXZlbnQua2V5Q29kZSA9PSAxMyApeyBpZih3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNSJdKXtyZXR1cm4gZmFsc2U7fSB3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNSJdPXRydWU7ICBqUXVlcnkoIiNnZm9ybV81IikudHJpZ2dlcigic3VibWl0IixbdHJ1ZV0pOyB9JyAvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9hamF4JyB2YWx1ZT0nZm9ybV9pZD01JmFtcDt0aXRsZT0mYW1wO2Rlc2NyaXB0aW9uPSZhbXA7dGFiaW5kZXg9MScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0naXNfc3VibWl0XzUnIHZhbHVlPScxJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zdWJtaXQnIHZhbHVlPSc1JyAvPgogICAgICAgICAgICAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fdW5pcXVlX2lkJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdzdGF0ZV81JyB2YWx1ZT0nV3lKYlhTSXNJamM0TUdRNU1HSXhNVFZsWkRFeFpEWTVZemcwTnpNNVptWXhNR0U1WldNNUlsMD0nIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl81JyBpZD0nZ2Zvcm1fdGFyZ2V0X3BhZ2VfbnVtYmVyXzUnIHZhbHVlPScwJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNScgaWQ9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl81JyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZ2Zvcm1fZmllbGRfdmFsdWVzJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpZnJhbWUgc3R5bGU9J2Rpc3BsYXk6bm9uZTt3aWR0aDowcHg7aGVpZ2h0OjBweDsnIHNyYz0nYWJvdXQ6YmxhbmsnIG5hbWU9J2dmb3JtX2FqYXhfZnJhbWVfNScgaWQ9J2dmb3JtX2FqYXhfZnJhbWVfNSc+VGhpcyBpZnJhbWUgY29udGFpbnMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGhhbmRsZSBBSkFYIHBvd2VyZWQgR3Jhdml0eSBGb3Jtcy48L2lmcmFtZT4KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCQpe2dmb3JtSW5pdFNwaW5uZXIoIDUsICdodHRwczovL3d3dy5jaWlsLmNvLmluL3dwLWNvbnRlbnQvcGx1Z2lucy9ncmF2aXR5Zm9ybXMvaW1hZ2VzL3NwaW5uZXIuZ2lmJyApO2pRdWVyeSgnI2dmb3JtX2FqYXhfZnJhbWVfNScpLmxvYWQoIGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzUnKTt2YXIgaXNfY29uZmlybWF0aW9uID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnI2dmb3JtX2NvbmZpcm1hdGlvbl93cmFwcGVyXzUnKS5sZW5ndGggPiAwO3ZhciBpc19yZWRpcmVjdCA9IGNvbnRlbnRzLmluZGV4T2YoJ2dmb3JtUmVkaXJlY3QoKXsnKSA+PSAwO3ZhciBpc19mb3JtID0gZm9ybV9jb250ZW50Lmxlbmd0aCA+IDAgJiYgISBpc19yZWRpcmVjdCAmJiAhIGlzX2NvbmZpcm1hdGlvbjtpZihpc19mb3JtKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzUnKS5odG1sKGZvcm1fY29udGVudC5odG1sKCkpO2lmKGZvcm1fY29udGVudC5oYXNDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzUnKS5hZGRDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO30gZWxzZSB7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl81JykucmVtb3ZlQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9c2V0VGltZW91dCggZnVuY3Rpb24oKSB7IC8qIGRlbGF5IHRoZSBzY3JvbGwgYnkgNTAgbWlsbGlzZWNvbmRzIHRvIGZpeCBhIGJ1ZyBpbiBjaHJvbWUgKi8galF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl81Jykub2Zmc2V0KCkudG9wKTsgfSwgNTAgKTtpZih3aW5kb3dbJ2dmb3JtSW5pdERhdGVwaWNrZXInXSkge2dmb3JtSW5pdERhdGVwaWNrZXIoKTt9aWYod2luZG93WydnZm9ybUluaXRQcmljZUZpZWxkcyddKSB7Z2Zvcm1Jbml0UHJpY2VGaWVsZHMoKTt9dmFyIGN1cnJlbnRfcGFnZSA9IGpRdWVyeSgnI2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl81JykudmFsKCk7Z2Zvcm1Jbml0U3Bpbm5lciggNSwgJ2h0dHBzOi8vd3d3LmNpaWwuY28uaW4vd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFs1LCBjdXJyZW50X3BhZ2VdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfNSddID0gZmFsc2U7fWVsc2UgaWYoIWlzX3JlZGlyZWN0KXt2YXIgY29uZmlybWF0aW9uX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1zX2NvbmZpcm1hdGlvbl9tZXNzYWdlXzUnKS5odG1sKCk7aWYoIWNvbmZpcm1hdGlvbl9jb250ZW50KXtjb25maXJtYXRpb25fY29udGVudCA9IGNvbnRlbnRzO31zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl81JykucmVwbGFjZVdpdGgoJzwnICsgJ2RpdiBpZD1cJ2dmb3Jtc19jb25maXJtYXRpb25fbWVzc2FnZV81XCcgY2xhc3M9XCdnZm9ybV9jb25maXJtYXRpb25fbWVzc2FnZV81IGdmb3Jtc19jb25maXJtYXRpb25fbWVzc2FnZVwnJyArICc+JyArIGNvbmZpcm1hdGlvbl9jb250ZW50ICsgJzwnICsgJy9kaXYnICsgJz4nKTtqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybXNfY29uZmlybWF0aW9uX21lc3NhZ2VfNScpLm9mZnNldCgpLnRvcCk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9jb25maXJtYXRpb25fbG9hZGVkJywgWzVdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfNSddID0gZmFsc2U7fSwgNTApO31lbHNle2pRdWVyeSgnI2dmb3JtXzUnKS5hcHBlbmQoY29udGVudHMpO2lmKHdpbmRvd1snZ2Zvcm1SZWRpcmVjdCddKSB7Z2Zvcm1SZWRpcmVjdCgpO319alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wb3N0X3JlbmRlcicsIFs1LCBjdXJyZW50X3BhZ2VdKTt9ICk7fSApOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gaWYodHlwZW9mIGdmX2dsb2JhbCA9PSAndW5kZWZpbmVkJykgdmFyIGdmX2dsb2JhbCA9IHsiZ2ZfY3VycmVuY3lfY29uZmlnIjp7Im5hbWUiOiJVLlMuIERvbGxhciIsInN5bWJvbF9sZWZ0IjoiJCIsInN5bWJvbF9yaWdodCI6IiIsInN5bWJvbF9wYWRkaW5nIjoiIiwidGhvdXNhbmRfc2VwYXJhdG9yIjoiLCIsImRlY2ltYWxfc2VwYXJhdG9yIjoiLiIsImRlY2ltYWxzIjoyfSwiYmFzZV91cmwiOiJodHRwczpcL1wvd3d3LmNpaWwuY28uaW5cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3JtcyIsIm51bWJlcl9mb3JtYXRzIjpbXSwic3Bpbm5lclVybCI6Imh0dHBzOlwvXC93d3cuY2lpbC5jby5pblwvd3AtY29udGVudFwvcGx1Z2luc1wvZ3Jhdml0eWZvcm1zXC9pbWFnZXNcL3NwaW5uZXIuZ2lmIn07alF1ZXJ5KGRvY3VtZW50KS5iaW5kKCdnZm9ybV9wb3N0X3JlbmRlcicsIGZ1bmN0aW9uKGV2ZW50LCBmb3JtSWQsIGN1cnJlbnRQYWdlKXtpZihmb3JtSWQgPT0gNSkge2lmKHR5cGVvZiBQbGFjZWhvbGRlcnMgIT0gJ3VuZGVmaW5lZCcpewogICAgICAgICAgICAgICAgICAgICAgICBQbGFjZWhvbGRlcnMuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgfX0gfSApO2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9jb25kaXRpb25hbF9sb2dpYycsIGZ1bmN0aW9uKGV2ZW50LCBmb3JtSWQsIGZpZWxkcywgaXNJbml0KXt9ICk7PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wb3N0X3JlbmRlcicsIFs1LCAxXSkgfSApOyA8L3NjcmlwdD4=