How to Replace MacBook Pro Keyboard

Mon, Mar 11, 2013

Apple, Computer Hardware, The Technician

For some silly reason, Apple products are very sensitive to water, at least more sensitive than their PC counterparts. I’ve never had problems with my HP and Dell laptops even after having used them for nearly a decade, at times in places with high humidity such as in the bathroom and by the swimming pool.

However, at the slight onset of moisture, iPhones, iPads and MacBooks will often start showing signs of trouble. Is it any wonder that Apple incorporate in their devices a Liquid Color Indicator (LCI) which turns red or pink when exposed or in contact with water?

“…the difficulty of this project is 4.5/5.0 and if you’re not into tinkering with electronics and microcomponents, this project is probably not going to be fun for you.”

Having said all that, my MacBook Pro recently failed on me, supposedly due to a moisture problem. And in case you’re wondering, no I did not spill water on it. I could only suspect that it was due to the screen-wipe aerosol which I had used, and some droplets could have found their way through the chassis via the keyboard openings.

On my MacBook Pro, one of the Shift key remained constantly depressed or activated, even when the key was not physically depressed. This created problems during startup – every startup was as if with the Shift key depressed, booting the computer into safe mode! While a key remap could solve this in the short run, it was not the ideal solution.

Seems there was no shortcut for this other than a complete replacement of the keyboard. So I thought this could be an interesting weekend afternoon project, and this is what we are going to explore in this article today.

Side Note and Caution

Replace MacBook Pro Keyboard

Keep the screws of various size and type into a tackle box, separated into compartments based on the hardware component they hold and secure. Draw on small pieces of paper the order and location of the screws by size with respect to the hardware.

NOTE: I have to warn you at this stage that the difficulty of this project is 4.5/5.0 and if you’re not into tinkering with electronics and microcomponents, this project is probably not going to be fun for you.

If you are not DIY-savvy, I would recommend that the repair and keyboard replacement be carried out by an authorised Apple service centre. However, if you’re OK with taking things apart, tinkering with small parts and putting everything back together, and if you’re keen to try the following procedure out on your own, you can give this one a try.

You will also need to prepare some precision tools before you start. You should already own a set if you often work with electronic devices – if not, see links to purchase this at the bottom of this page.

 

CAUTION: One very important thing that you must do is to separate the different types of screws that you will be removing. Placing these screws in different compartments in a tackle box as shown above is a good way to keep everything organised and in order.

If you’re ready, let’s begin!

macbook replacement keyboard

PART A: PURCHASING THE REPLACEMENT KEYBOARD

The first thing you’d need to do is to purchase a replacement MacBook Pro keyboard. For my unibody 13″ MacBook Pro 2010 model, the replacement keyboard model is listed as A1278, which you can easily find online or select from one of the following links:


Replace MacBook Pro Keyboard

A1. As mentioned before, the first thing to do is to get a new keyboard replacement for the MacBook Pro, model type A1278. I purchased this online for about USD30.00 excluding shipping and it arrived bundled in a box, which you can see towards the back of the table in the photo above. To buy this keyboard, click here.

Replace MacBook Pro Keyboard

A2. Flipping it around, this is how the keyboard looks like on the under side. Just to explain a little, the appendage at the top of the keyboard is actually the power button, and the other appendage at the bottom is the ribbon cable to the logic board. Most of the work will be carried out on this side during the installation, so no worries – we’ll see more of this later!

PART B: OPENING THE BOTTOM PANEL

Replace MacBook Pro Keyboard

B1. Grab the MacBook Pro and flip it around. Place it on a soft cloth to prevent damage to the top. I used a big orange micro-fibre cloth.

Replace MacBook Pro Keyboard

B2. Proceed to remove all 10 screws around the perimeter of the bottom panel with a precision phillips screwdriver as shown.

B3. You will notice that three of the screws are longer than the other seven. It is important that you remember which goes where in your reassembly later – you can either jot it down, or arrange it in the same fashion and order as I have done above. And in case you did not do either, there’s always online resource like this one to help you remember!

Replace MacBook Pro Keyboard

B4. Remove the bottom panel after having removed all the screws. No implements necessary – just a simple prying action with your finger!

Replace MacBook Pro Keyboard
In summary, the diagram above shows where the short and long screws are, to be driven out before the bottom panel can be removed to gain access to the inside of the MacBook Pro.

 

PART C: REMOVING THE RAM AND BATTERY

CAUTION: BEFORE REMOVING THE RAM, BE SURE TO FIRST DISCHARGE ANY STATIC ELECTRICITY FROM YOUR BODY BY TOUCHING A METAL SURFACE.

ALSO, NOTE THAT THE KEYBOARD REPLACEMENT PROCEDURE DOES NOT REQUIRE THE BATTERY AND HARD DISK TO BE PHYSICALLY REMOVED FROM THE CHASSIS. HOWEVER, THEY STILL NEED TO BE DISCONNECTED, AND I’VE SHOWN THEM COMPLETELY REMOVED IN THE FOLLOWING STEPS.

Replace MacBook Pro Keyboard

C1. Start by removing the RAM. If you have both like I do, remove both. To do this, just push the two prong holders on both sides wider or outwards, and the RAM will pop up like spring action. Gently pull it out from its holder. Do the same with the one below it.

Replace MacBook Pro Keyboard
The diagram from iFixit above summarises the steps involved in removing the RAM. Remember to discharge static electricity from your body by touching a metal surface before removing the RAM.

Replace MacBook Pro Keyboard

C2. Next, remove all screws holding the battery down. Note that all screws removed from this point onward may have different lengths, sometimes even for the same component, and it is important you remember which goes where on your way back here later. Make a note, and keep these screws in compartments in a box. Do not place the screws “all in one basket”!

Replace MacBook Pro Keyboard

C3. Unplug the battery connection to the motherboard, or more accurately known as the logic board. You may use a spudger to lift up the tab, but I used my finger to gently pry it up – worked fine!

Replace MacBook Pro Keyboard

C4. Remove the battery from its compartment and put it aside.
 

PART D: REMOVING THE HARD DISK DRIVE

Replace MacBook Pro Keyboard

D1. Next, remove the two screws to the plastic piece holding down the hard disk drive in place. This is the first screw…

Replace MacBook Pro Keyboard

D2. …and this is the second! The plastic piece is not detached and can be removed…

D3. …so let’s remove it.

Replace MacBook Pro Keyboard

D4. Disconnect the connector and remove the hard disk drive from its compartment.
 

PART E: REMOVING THE BUILT-IN OPTICAL SUPERDRIVE

Replace MacBook Pro Keyboard

E1. Use your finger and gently remove the pad connecting the optical SuperDrive to the logic board. You can find the right tab to detach from the logic board by tracing the ribbon cable back to the SuperDrive. Pry it off gently…very gently!

Replace MacBook Pro Keyboard

E2. Remove the first screw holding the SuperDrive to chassis…

Replace MacBook Pro Keyboard

E3. …and the second…

Replace MacBook Pro Keyboard

E4. …and the third!

Replace MacBook Pro Keyboard

E5. You can now remove the optical SuperDrive from the chassis. Put it aside safely.
 

PART F: REMOVING THE BUILT-IN SPEAKER AND FAN

Replace MacBook Pro Keyboard

F1. Remove both screws holding down the built-in speaker. The first one is located here…

Replace MacBook Pro Keyboard

F2. …and the second screw is located here. You can then remove the speaker from the chassis. Be sure to disconnect any cable connected to the logic board before that.

Replace MacBook Pro Keyboard

F3. Remove the three screws securing the fan down. The first two are on the left side of the fan, at positions 8 and 10 o’clock. Seen here is the latter screw at 10 o’clock position being removed. The former at 8 o’clock position had been removed.

Replace MacBook Pro Keyboard

F4. Then, remove the third screw on the right of the fan located at the 4 o’clock position. Remove any cable connected to the logic board. Connector should be gently lifted.

Replace MacBook Pro Keyboard

F5. Finally, detach the fan from the logic board it from the chassis. Simple so far. We haven’t got to the difficult bits yet…

PART G: REMOVING THE LOGIC BOARD AND GUIDE BAR

Replace MacBook Pro Keyboard

G1. Proceed to remove all the screws holding the logic board down. Note that these are not normal screws. You will need a Torx T6 screwdriver to remove these. Put them properly in the tackle box mentioned earlier.

Replace MacBook Pro Keyboard

G2. Disconnect any cable and slowly dislodge the logic board from the chassis. Pay special attention to areas such as USB and firewire ports, which may be positioned snugly into openings in the chassis. Be careful not to damage the unibody aluminum chassis.

Replace MacBook Pro Keyboard

G3. Once you’re certain that all connections are physically loose and free from the unibody chassis, proceed to remove the logic board entirely from the chassis. If there are any connected cables still not removed at this point as they were concealed earlier, you may do so now. This includes the ribbon cable connected to the keyboard hardware underneath it.

Replace MacBook Pro Keyboard

G4. You can now see the black sheet that conceals the keyboard hardware below it. The only thing holding it down now is the component guide bar running down the middle. Remove the two screws holding this.

Replace MacBook Pro Keyboard

G5. With the screws removed, detached the component guide bar from the chassis and put it aside safely.
 

PART H: REMOVING THE KEYBOARD HARDWARE AND POWER SWITCH

Replace MacBook Pro Keyboard

H1. Use a blunt putty knife to slowly pry off the black sheet, which is held down by adhesive at regular intervals around its perimeter. Be careful not to tear it.

Replace MacBook Pro Keyboard

H2. Peel of the black sheet gently to reveal the LED sheet and keyboard underneath it. Use your fingers and work your way slowly around it.

Replace MacBook Pro Keyboard

H3. With the black sheet completely removed, you can now see the LED sheet. As the LED sheet is not secured down by any components, simply lift it up and remove it from the chassis. Keep it aside with the black sheet.

Replace MacBook Pro Keyboard

H4. At this point, you can see the underside of the keyboard. Take a close look and you will realise that it is actually held down to the chassis by some 50 or so tiny screws. You will also notice that not every tiny hole is fitted with a screw.

Replace MacBook Pro Keyboard

H5. Remove each and every one of these tiny screws with a small or precision phillips screwdriver. These will be the tiniest screws you will ever encounter in your life. The size of ants, these screws are easy to lose and misplace, so be sure to put them directly into the tackle box compartment.

Replace MacBook Pro Keyboard

H6. Remove the screw holding the power switch to the chassis. As the power switch is connected to the keyboard directly and cannot be detached, this will need to be dismantled together with the keyboard.

Replace MacBook Pro Keyboard

H7. Dislodge the power switch from its opening in the chassis.

Replace MacBook Pro Keyboard

H8. With all the tiny keyboard screws removed and the power switch dislodged, remove the defective keyboard hardware from the unibody chassis.

Replace MacBook Pro Keyboard

H9. With the keyboard removed, you can now see through the keys opening and the glass monitor underneath it. What a sight, and what a journey so far!

NOTE: As the letter “I” resembles the number 1, I will skip this letter and use the letter “J” instead. As the steps involved from here onwards are the reverse order of what we’ve accomplished so far, I will skip some of the details and photos, and highlight only the major steps to be carried out. If something is not particularly clear in the steps below, please retrace the steps before and above this in the reverse order.

PART J: INSTALLING THE NEW KEYBOARD

Replace MacBook Pro Keyboard

J1. First, place the new power switch into its place on the chassis. You may need to use a pair of forceps as I did as shown above. As the power switch is connected to the keyboard and cannot be removed, you may need to hold the keyboard nearby while you screw the power switch down to the chassis.

Replace MacBook Pro Keyboard

J2. Install the new keyboard in its place, making sure that the keys sit into the openings of the chassis, and replace the tiny screws.

Replace MacBook Pro Keyboard

J3. Replace the LED sheet, making sure it is seated in its proper position, guided by little protrusions on the keyboard which should go through a number of reference holes on the LED sheet.

Replace MacBook Pro Keyboard

J4. Replace the black sheet, making sure that it is centred in its position. Press the perimeter sides down and ensure that the adhesive tapes are secure. Then, replace the component guide bar at the centre of the chassis and screw it down. We are now ready to reassemble the rest of the hardware.
 

PART K: REASSEMBLING ALL HARDWARE COMPONENTS

As this is mainly reassembly work, I’m going to go through this part pretty quickly. If you need the details, you could retrace the steps which have brought us this far, in the reverse order.

 

Replace MacBook Pro Keyboard

K1. Replace the logic board and screw down the screws with a Torx T6 screwdriver. Ensure that the ports sit nicely in the openings on the chassis. Reconnect all cables.

Replace MacBook Pro Keyboard

K2. Reinstall the fan. It takes all of three screws. Reconnect the cable.

Replace MacBook Pro Keyboard

K3. Reinstall the speaker and reconnect the cable.

Replace MacBook Pro Keyboard

K4. Reinstall the SuperDrive and reconnect the cable to the logic board.

Replace MacBook Pro Keyboard

K5. Reinstall the hard disk and connect the cable. If you are up to it, you may even take this opportunity to upgrade the hard disk to a larger capacity!

Replace MacBook Pro Keyboard

K6. Reinstall the battery reconnect the cable and tab to its connecting port.

Replace MacBook Pro Keyboard

K7. Reinstall the RAM chip (both if you have two) by slipping it into its slot at an easy entry angle and push it down into its holder – both sides of the chip.

Replace MacBook Pro Keyboard

K8. Take a look at the entire reassembly and make sure all components have been installed and all cables and connectors have been reconnected to their respective ports on the logic board.

Replace MacBook Pro Keyboard

K9. Replace the bottom panel and drive in the screws. Note the different screw lengths and make sure the right ones go into the right holes.

Conclusion

That’s it, you’re done! If you have done the entire reassembly correctly, the MacBook Pro should turn on as usual and the keyboard should now work as it should! For parts and tools, please see links below.

WARNING: NOT ALL PRECISION SCREWDRIVER SETS ARE CREATED EQUAL. THERE ARE SOME TRI-WING BITS WHICH YOU WILL REQUIRE TO REMOVE CERTAIN COMPONENTS IN THE MACBOOK PRO, SUCH AS THE BATTERY PACK. SOME PRECISION SCREWDRIVER SETS DO NOT INCLUDE THESE. TO BE CERTAIN THAT YOU HAVE THE COMPLETE SET OF REQUIRED TOOLS, PLEASE CHOOSE ONLY FROM THOSE WHICH I HAVE RECOMMENDED BELOW, UNDER TOOLS REQUIRED FOR THIS PROJECT.

PARTS USED FOR THIS PROJECT – only one required!
 


TOOLS REQUIRED FOR THIS PROJECT – only one required!


, ,

2
Leave a Reply

avatar
2 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
Gregory PappasKaitlyn Femeyer Recent comment authors

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
newest oldest most voted
Notify of
Kaitlyn Femeyer
Guest

Hi I did everything in this tutorial to a t but upon removing the black plastic sheet a small tear occurred on it right in the area beneath where the heat sink would be. I was going really slowly, but it was just bound to happen. I think that the heat sink may have overheated that specific are of the sheet which caused the tear. Regardless, it isn’t anywhere near the LED transmitter or the backlight ribbon or whatever on the black sheet, but I’m still worried about reusing the same sheet when installing my new keyboard. Do you think… Read more »

Gregory Pappas
Guest

Thanks for the article. It’s the only one I can find that has steps for installing a new keyboard.

Do NOT follow this link or you will be banned from the site!
PHVsPjxsaT48c3Ryb25nPndvb19hYm91dDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2Fib3V0bGluazwvc3Ryb25nPiAtICM8L2xpPjxsaT48c3Ryb25nPndvb19hZF8zMDBfYWRzZW5zZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzMwMF9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTMwMHgyNTAtMi5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF8zMDBfdXJsPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMTwvc3Ryb25nPiAtIGh0dHBzOi8vcm92ZXIuZWJheS5jb20vYXIvMS83MTEtNTMyMDAtMTkyNTUtMjAwLzE/Y2FtcGlkPTUzMzc3MjgxNTkmdG9vbGlkPTcxMTUzMjAwMTkyNTUyMDAmY3VzdG9taWQ9Jm1wdD1bQ0FDSEVCVVNURVJdJmFkdHlwZT0xJnNpemU9MTI1eDEyNSZtcHZjPTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzI8L3N0cm9uZz4gLSBodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vYWRzL2FtYXpvbi1oYXJyeS1wb3R0ZXJfMTI1eDEyNS5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8zPC9zdHJvbmc+IC0gaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL2Fkcy9hbWF6b24tb3V0ZG9vci0xMjV4MTI1LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzQ8L3N0cm9uZz4gLSBodHRwczovL3VhLnNpdGVncm91bmQuY29tL2ltZy9iYW5uZXJzL2dlbmVyYWwvY29tZm9ydC8xMjV4MTI1LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzU8L3N0cm9uZz4gLSBodHRwczovL3d3dy5sZWRnZXJ3YWxsZXQuY29tL2ltYWdlcy9wcm9tby9sZWRnZXItMTI1eDEyNS0wMS5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV82PC9zdHJvbmc+IC0gaHR0cHM6Ly9yb3Zlci5lYmF5LmNvbS9hci8xLzcxMS01MzIwMC0xOTI1NS0yMDYvMT9jYW1waWQ9NTMzNzcyODE1OSZ0b29saWQ9NzExNTMyMDAxOTI1NTIwNiZjdXN0b21pZD0mbXB0PVtDQUNIRUJVU1RFUl0mYWR0eXBlPTEmc2l6ZT0xMjV4MTI1Jm1wdmM9PC9saT48bGk+PHN0cm9uZz53b29fYWRfcGFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8xPC9zdHJvbmc+IC0gaHR0cHM6Ly9yb3Zlci5lYmF5LmNvbS9yb3Zlci8xLzcxMS01MzIwMC0xOTI1NS0yMDAvMT9jYW1waWQ9NTMzNzcyODE1OSZ0b29saWQ9NzExNTMyMDAxOTI1NTIwMCZjdXN0b21pZD0mbXB2Yz08L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMjwvc3Ryb25nPiAtIGh0dHBzOi8vcmNtLW5hLmFtYXpvbi1hZHN5c3RlbS5jb20vZS9jbT9vPTEmcD0yMCZsPXVyMSZjYXRlZ29yeT1oYXJyeXBvdHRlciZiYW5uZXI9MFFCS1FZMTFQOTFQQVhQU0Y2UjImZj1pZnImbGlua0lEPTkxNTg0M2IzNTZiMzgxZDBkYjQwMDYyZmY3YmZlNDViJnQ9bW9jYmQtMjAmdHJhY2tpbmdfaWQ9bW9jYmQtMjA8L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMzwvc3Ryb25nPiAtIGh0dHBzOi8vcmNtLW5hLmFtYXpvbi1hZHN5c3RlbS5jb20vZS9jbT90PWh0dHB3d3dkZXZvbmItMjAmbz0xJnA9MjEmbD11cjEmY2F0ZWdvcnk9b3V0ZG9vcnJlY3JlYXRpb24mYmFubmVyPTE2NEpSRDdONEMyVktUQVpERkcyJmY9aWZyJmxpbmtJRD01SEZZWFIzSkpaRFlLT0hFPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzQ8L3N0cm9uZz4gLSBodHRwczovL3d3dy5zaXRlZ3JvdW5kLmNvbS9pbmRleC5odG0/YWZjb2RlPTc3M2U5MTAxMDBlNTY3ODIyNzBkOGIxMTFhMzVmMTUwPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzU8L3N0cm9uZz4gLSBodHRwczovL3d3dy5sZWRnZXJ3YWxsZXQuY29tL3IvYmVhYTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF82PC9zdHJvbmc+IC0gaHR0cHM6Ly9yb3Zlci5lYmF5LmNvbS9yb3Zlci8xLzcxMS01MzIwMC0xOTI1NS0yMDYvMT9jYW1waWQ9NTMzNzcyODE1OSZ0b29saWQ9NzExNTMyMDAxOTI1NTIwNiZjdXN0b21pZD0mbXB2Yz08L2xpPjxsaT48c3Ryb25nPndvb19hZHNfcm90YXRlPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19hbHRfc3R5bGVzaGVldDwvc3Ryb25nPiAtIDMtZ3JleS5jc3M8L2xpPjxsaT48c3Ryb25nPndvb19hcmNoaXZlczwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2FzaWRlc19jYXRlZ29yeTwvc3Ryb25nPiAtIFNlbGVjdCBhIGNhdGVnb3J5OjwvbGk+PGxpPjxzdHJvbmc+d29vX2F1dGhvcjwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fYXV0b19pbWc8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NlbnRlcmVkPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jb250ZW50PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jb250ZW50X2ZlYXQ8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbnRlbnRfbGVmdDwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY3VzdG9tX2Nzczwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2N1c3RvbV9mYXZpY29uPC9zdHJvbmc+IC0gaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMjYtZmF2aWNvbi1kYi5wbmc8L2xpPjxsaT48c3Ryb25nPndvb19jdXN0b21fc2VvX3RlbXBsYXRlPC9zdHJvbmc+IC0gYTozOntpOjA7YTo1OntzOjQ6Im5hbWUiO3M6MTA6InNlb19pbmZvXzEiO3M6Mzoic3RkIjtzOjA6IiI7czo1OiJsYWJlbCI7czo0OiJTRU8gIjtzOjQ6InR5cGUiO3M6NDoiaW5mbyI7czo0OiJkZXNjIjtzOjE5MDoiQWRkaXRpb25hbCBTRU8gY3VzdG9tIGZpZWxkcyBhdmFpbGFibGU6IDxzdHJvbmc+Q3VzdG9tIFBhZ2UgVGl0bGVzPC9zdHJvbmc+LiBHbyB0byA8YSBocmVmPSJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtYWRtaW4vYWRtaW4ucGhwP3BhZ2U9d29vdGhlbWVzX3NlbyI+U0VPIFNldHRpbmdzPC9hPiBwYWdlIHRvIGFjdGl2YXRlLiI7fWk6MTthOjU6e3M6NDoibmFtZSI7czoxMDoic2VvX2ZvbGxvdyI7czozOiJzdGQiO3M6NToiZmFsc2UiO3M6NToibGFiZWwiO3M6MTY6IlNFTyAtIFNldCBmb2xsb3ciO3M6NDoidHlwZSI7czo4OiJjaGVja2JveCI7czo0OiJkZXNjIjtzOjc3OiJNYWtlIGxpbmtzIGZyb20gdGhpcyBwb3N0L3BhZ2UgPHN0cm9uZz5mb2xsb3dhYmxlPC9zdHJvbmc+IGJ5IHNlYXJjaCBlbmdpbmVzLiI7fWk6MjthOjU6e3M6NDoibmFtZSI7czoxMToic2VvX25vaW5kZXgiO3M6Mzoic3RkIjtzOjU6ImZhbHNlIjtzOjU6ImxhYmVsIjtzOjEzOiJTRU8gLSBOb2luZGV4IjtzOjQ6InR5cGUiO3M6ODoiY2hlY2tib3giO3M6NDoiZGVzYyI7czo1NjoiU2V0IHRoZSBQYWdlL1Bvc3QgdG8gbm90IGJlIGluZGV4ZWQgYnkgYSBzZWFyY2ggZW5naW5lcy4iO319PC9saT48bGk+PHN0cm9uZz53b29fZmVhdF9pbWFnZV9oZWlnaHQ8L3N0cm9uZz4gLSAxOTU8L2xpPjxsaT48c3Ryb25nPndvb19mZWF0X2ltYWdlX3dpZHRoPC9zdHJvbmc+IC0gNTQwPC9saT48bGk+PHN0cm9uZz53b29fZmVhdHVyZWRfY2F0ZWdvcnk8L3N0cm9uZz4gLSBTZWxlY3QgYSBjYXRlZ29yeTo8L2xpPjxsaT48c3Ryb25nPndvb19mZWF0dXJlZF9wb3N0czwvc3Ryb25nPiAtIFNlbGVjdCBhIG51bWJlcjo8L2xpPjxsaT48c3Ryb25nPndvb19mZWVkYnVybmVyX2lkPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fZmVlZGJ1cm5lcl91cmw8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19mbGlja3JfZW50cmllczwvc3Ryb25nPiAtIFNlbGVjdCBhIE51bWJlcjo8L2xpPjxsaT48c3Ryb25nPndvb19mbGlja3JfaWQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19mbGlja3JfdXJsPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fZnJhbWV3b3JrX3RlbXBsYXRlPC9zdHJvbmc+IC0gYToxNzp7aTowO2E6Mzp7czo0OiJuYW1lIjtzOjE4OiJGcmFtZXdvcmsgU2V0dGluZ3MiO3M6NDoiaWNvbiI7czo3OiJnZW5lcmFsIjtzOjQ6InR5cGUiO3M6NzoiaGVhZGluZyI7fWk6MTthOjY6e3M6NDoibmFtZSI7czoyMToiU3VwZXIgVXNlciAodXNlcm5hbWUpIjtzOjQ6ImRlc2MiO3M6MjQ1OiJFbnRlciB5b3VyIDxzdHJvbmc+dXNlcm5hbWU8L3N0cm9uZz4gdG8gaGlkZSB0aGUgRnJhbWV3b3JrIFNldHRpbmdzIGFuZCBVcGRhdGUgRnJhbWV3b3JrIGZyb20gb3RoZXIgdXNlcnMuIENhbiBiZSByZXNldCBmcm9tIHRoZSA8YSBocmVmPSdodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtYWRtaW4vb3B0aW9ucy5waHAnPldQIG9wdGlvbnMgcGFnZTwvYT4gdW5kZXIgPGVtPmZyYW1ld29ya193b29fc3VwZXJfdXNlcjwvZW0+LiI7czoyOiJpZCI7czoyNDoiZnJhbWV3b3JrX3dvb19zdXBlcl91c2VyIjtzOjM6InN0ZCI7czowOiIiO3M6NToiY2xhc3MiO3M6NDoidGV4dCI7czo0OiJ0eXBlIjtzOjQ6InRleHQiO31pOjI7YTo1OntzOjQ6Im5hbWUiO3M6MjE6IkRpc2FibGUgU0VPIE1lbnUgSXRlbSI7czo0OiJkZXNjIjtzOjYxOiJEaXNhYmxlIHRoZSA8c3Ryb25nPlNFTzwvc3Ryb25nPiBtZW51IGl0ZW0gaW4gdGhlIHRoZW1lIG1lbnUuIjtzOjI6ImlkIjtzOjI1OiJmcmFtZXdvcmtfd29vX3Nlb19kaXNhYmxlIjtzOjM6InN0ZCI7czowOiIiO3M6NDoidHlwZSI7czo4OiJjaGVja2JveCI7fWk6MzthOjU6e3M6NDoibmFtZSI7czozMzoiRGlzYWJsZSBTaWRlYmFyIE1hbmFnZXIgTWVudSBJdGVtIjtzOjQ6ImRlc2MiO3M6NzM6IkRpc2FibGUgdGhlIDxzdHJvbmc+U2lkZWJhciBNYW5hZ2VyPC9zdHJvbmc+IG1lbnUgaXRlbSBpbiB0aGUgdGhlbWUgbWVudS4iO3M6MjoiaWQiO3M6MjU6ImZyYW1ld29ya193b29fc2JtX2Rpc2FibGUiO3M6Mzoic3RkIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjg6ImNoZWNrYm94Ijt9aTo0O2E6NTp7czo0OiJuYW1lIjtzOjI4OiJEaXNhYmxlIEJ1eSBUaGVtZXMgTWVudSBJdGVtIjtzOjQ6ImRlc2MiO3M6Njg6IkRpc2FibGUgdGhlIDxzdHJvbmc+QnV5IFRoZW1lczwvc3Ryb25nPiBtZW51IGl0ZW0gaW4gdGhlIHRoZW1lIG1lbnUuIjtzOjI6ImlkIjtzOjMyOiJmcmFtZXdvcmtfd29vX2J1eV90aGVtZXNfZGlzYWJsZSI7czozOiJzdGQiO3M6MDoiIjtzOjQ6InR5cGUiO3M6ODoiY2hlY2tib3giO31pOjU7YTo1OntzOjQ6Im5hbWUiO3M6MjQ6IkVuYWJsZSBDdXN0b20gTmF2aWdhdGlvbiI7czo0OiJkZXNjIjtzOjE4MToiRW5hYmxlIHRoZSBvbGQgPHN0cm9uZz5DdXN0b20gTmF2aWdhdGlvbjwvc3Ryb25nPiBtZW51IGl0ZW0uIFRyeSB0byB1c2UgPGEgaHJlZj0naHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWFkbWluL25hdi1tZW51cy5waHAnPldQIE1lbnVzPC9hPiBpbnN0ZWFkLCBhcyB0aGlzIGZ1bmN0aW9uIGlzIG91dGRhdGVkLiI7czoyOiJpZCI7czoyMDoiZnJhbWV3b3JrX3dvb193b29uYXYiO3M6Mzoic3RkIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjg6ImNoZWNrYm94Ijt9aTo2O2E6NTp7czo0OiJuYW1lIjtzOjI1OiJUaGVtZSBVcGRhdGUgTm90aWZpY2F0aW9uIjtzOjQ6ImRlc2MiO3M6MTAxOiJUaGlzIHdpbGwgZW5hYmxlIG5vdGljZXMgb24geW91ciB0aGVtZSBvcHRpb25zIHBhZ2UgdGhhdCB0aGVyZSBpcyBhbiB1cGRhdGUgYXZhaWxhYmxlIGZvciB5b3VyIHRoZW1lLiI7czoyOiJpZCI7czozNToiZnJhbWV3b3JrX3dvb190aGVtZV92ZXJzaW9uX2NoZWNrZXIiO3M6Mzoic3RkIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjg6ImNoZWNrYm94Ijt9aTo3O2E6NTp7czo0OiJuYW1lIjtzOjI5OiJEaXNhYmxlIFNob3J0Y29kZXMgU3R5bGVzaGVldCI7czo0OiJkZXNjIjtzOjc2OiJUaGlzIGRpc2FibGVzIHRoZSBvdXRwdXQgb2Ygc2hvcnRjb2Rlcy5jc3MgaW4gdGhlIEhFQUQgc2VjdGlvbiBvZiB5b3VyIHNpdGUuIjtzOjI6ImlkIjtzOjMyOiJmcmFtZXdvcmtfd29vX2Rpc2FibGVfc2hvcnRjb2RlcyI7czozOiJzdGQiO3M6MDoiIjtzOjQ6InR5cGUiO3M6ODoiY2hlY2tib3giO31pOjg7YTo1OntzOjQ6Im5hbWUiO3M6MjY6IlJlbW92ZSBHZW5lcmF0b3IgTWV0YSBUYWdzIjtzOjQ6ImRlc2MiO3M6ODE6IlRoaXMgZGlzYWJsZXMgdGhlIG91dHB1dCBvZiBnZW5lcmF0b3IgbWV0YSB0YWdzIGluIHRoZSBIRUFEIHNlY3Rpb24gb2YgeW91ciBzaXRlLiI7czoyOiJpZCI7czozMToiZnJhbWV3b3JrX3dvb19kaXNhYmxlX2dlbmVyYXRvciI7czozOiJzdGQiO3M6MDoiIjtzOjQ6InR5cGUiO3M6ODoiY2hlY2tib3giO31pOjk7YTo1OntzOjQ6Im5hbWUiO3M6MTc6IkltYWdlIFBsYWNlaG9sZGVyIjtzOjQ6ImRlc2MiO3M6MTUxOiJTZXQgYSBkZWZhdWx0IGltYWdlIHBsYWNlaG9sZGVyIGZvciB5b3VyIHRodW1ibmFpbHMuIFVzZSB0aGlzIGlmIHlvdSB3YW50IGEgZGVmYXVsdCBpbWFnZSB0byBiZSBzaG93biBpZiB5b3UgaGF2ZW4ndCBhZGRlZCBhIGN1c3RvbSBpbWFnZSB0byB5b3VyIHBvc3QuIjtzOjI6ImlkIjtzOjI3OiJmcmFtZXdvcmtfd29vX2RlZmF1bHRfaW1hZ2UiO3M6Mzoic3RkIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjY6InVwbG9hZCI7fWk6MTA7YTozOntzOjQ6Im5hbWUiO3M6ODoiQnJhbmRpbmciO3M6NDoiaWNvbiI7czo0OiJtaXNjIjtzOjQ6InR5cGUiO3M6NzoiaGVhZGluZyI7fWk6MTE7YTo1OntzOjQ6Im5hbWUiO3M6MjA6Ik9wdGlvbnMgcGFuZWwgaGVhZGVyIjtzOjQ6ImRlc2MiO3M6NTA6IkNoYW5nZSB0aGUgaGVhZGVyIGltYWdlIGZvciB0aGUgV29vVGhlbWVzIEJhY2tlbmQuIjtzOjI6ImlkIjtzOjM0OiJmcmFtZXdvcmtfd29vX2JhY2tlbmRfaGVhZGVyX2ltYWdlIjtzOjM6InN0ZCI7czowOiIiO3M6NDoidHlwZSI7czo2OiJ1cGxvYWQiO31pOjEyO2E6NTp7czo0OiJuYW1lIjtzOjE4OiJPcHRpb25zIHBhbmVsIGljb24iO3M6NDoiZGVzYyI7czo1NjoiQ2hhbmdlIHRoZSBpY29uIGltYWdlIGZvciB0aGUgV29yZFByZXNzIGJhY2tlbmQgc2lkZWJhci4iO3M6MjoiaWQiO3M6MjY6ImZyYW1ld29ya193b29fYmFja2VuZF9pY29uIjtzOjM6InN0ZCI7czowOiIiO3M6NDoidHlwZSI7czo2OiJ1cGxvYWQiO31pOjEzO2E6NTp7czo0OiJuYW1lIjtzOjIwOiJXb3JkUHJlc3MgbG9naW4gbG9nbyI7czo0OiJkZXNjIjtzOjUxOiJDaGFuZ2UgdGhlIGxvZ28gaW1hZ2UgZm9yIHRoZSBXb3JkUHJlc3MgbG9naW4gcGFnZS4iO3M6MjoiaWQiO3M6MzE6ImZyYW1ld29ya193b29fY3VzdG9tX2xvZ2luX2xvZ28iO3M6Mzoic3RkIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjY6InVwbG9hZCI7fWk6MTQ7YTozOntzOjQ6Im5hbWUiO3M6MTU6IkltcG9ydCAvIEV4cG9ydCI7czo0OiJpY29uIjtzOjQ6Im1pc2MiO3M6NDoidHlwZSI7czo3OiJoZWFkaW5nIjt9aToxNTthOjU6e3M6NDoibmFtZSI7czoxNDoiSW1wb3J0IE9wdGlvbnMiO3M6NDoiZGVzYyI7czo1OToiSW1wb3J0IHRoZSBvcHRpb25zIGZyb20gYW5vdGhlciBpbnN0YWxsYXRpb24gb2YgdGhpcyB0aGVtZS4iO3M6MjoiaWQiO3M6Mjg6ImZyYW1ld29ya193b29faW1wb3J0X29wdGlvbnMiO3M6Mzoic3RkIjtzOjA6IiI7czo0OiJ0eXBlIjtzOjg6InRleHRhcmVhIjt9aToxNjthOjU6e3M6NDoibmFtZSI7czoxNDoiRXhwb3J0IE9wdGlvbnMiO3M6NDoiZGVzYyI7czo5NDoiRXhwb3J0IHRoZSBvcHRpb25zIHRvIGFub3RoZXIgaW5zdGFsbGF0aW9uIG9mIHRoaXMgdGhlbWUsIG9yIHRvIGtlZXAgYSBiYWNrdXAgb2YgeW91ciBvcHRpb25zLiI7czoyOiJpZCI7czoyODoiZnJhbWV3b3JrX3dvb19leHBvcnRfb3B0aW9ucyI7czozOiJzdGQiO3M6MTUxMjoiWVRveU9EcDdjem81T2lKM2IyOWZZV0p2ZFhRaU8zTTZNRG9pSWp0ek9qRXpPaUozYjI5ZllXSnZkWFJzYVc1cklqdHpPakU2SWlNaU8zTTZNVFE2SW5kdmIxOWhaSE5mY205MFlYUmxJanR6T2pRNkluUnlkV1VpTzNNNk1UUTZJbmR2YjE5aFpGOXBiV0ZuWlY4eElqdHpPalExT2lKb2RIUndPaTh2ZDNkM0xtUmxkbTl1WW5WNUxtTnZiUzloWkhNdlltaGZNVEkxZURFeU5WOHdNaTVuYVdZaU8zTTZNVFE2SW5kdmIxOWhaRjlwYldGblpWOHlJanR6T2pReE9pSm9kSFJ3T2k4dmQzZDNMbmR2YjNSb1pXMWxjeTVqYjIwdllXUnpMekV5TlhneE1qVmlMbXB3WnlJN2N6b3hORG9pZDI5dlgyRmtYMmx0WVdkbFh6TWlPM002TkRFNkltaDBkSEE2THk5M2QzY3VkMjl2ZEdobGJXVnpMbU52YlM5aFpITXZNVEkxZURFeU5XSXVhbkJuSWp0ek9qRTBPaUozYjI5ZllXUmZhVzFoWjJWZk5DSTdjem8wTVRvaWFIUjBjRG92TDNkM2R5NTNiMjkwYUdWdFpYTXVZMjl0TDJGa2N5OHhNalY0TVRJMVlpNXFjR2NpTzNNNk1USTZJbmR2YjE5aFpGOTFjbXhmTVNJN2N6b3pOem9pYUhSMGNEb3ZMM2QzZHk1aWJIVmxhRzl6ZEM1amIyMHZkSEpoWTJzdmFXNWthV2R2ZENJN2N6b3hNam9pZDI5dlgyRmtYM1Z5YkY4eUlqdHpPakkwT2lKb2RIUndPaTh2ZDNkM0xuZHZiM1JvWlcxbGN5NWpiMjBpTzNNNk1USTZJbmR2YjE5aFpGOTFjbXhmTXlJN2N6b3lORG9pYUhSMGNEb3ZMM2QzZHk1M2IyOTBhR1Z0WlhNdVkyOXRJanR6T2pFeU9pSjNiMjlmWVdSZmRYSnNYelFpTzNNNk1qUTZJbWgwZEhBNkx5OTNkM2N1ZDI5dmRHaGxiV1Z6TG1OdmJTSTdjem94T0RvaWQyOXZYMkZzZEY5emRIbHNaWE5vWldWMElqdHpPamc2SW1keVlYa3VZM056SWp0ek9qRTBPaUozYjI5ZlkzVnpkRzl0WDJOemN5STdjem93T2lJaU8zTTZNVGc2SW5kdmIxOWpkWE4wYjIxZlptRjJhV052YmlJN2N6b3dPaUlpTzNNNk1UZzZJbmR2YjE5bVpXVmtZblZ5Ym1WeVgzVnliQ0k3Y3pvd09pSWlPM002TWpBNkluZHZiMTluYjI5bmJHVmZZVzVoYkhsMGFXTnpJanR6T2pBNklpSTdjem80T2lKM2IyOWZhRzl0WlNJN2N6bzFPaUptWVd4elpTSTdjem94TnpvaWQyOXZYMmh2YldWZllYSmphR2wyWlhNaU8zTTZNRG9pSWp0ek9qSXhPaUozYjI5ZmFHOXRaVjltYkdsamEzSmZZMjkxYm5RaU8zTTZNRG9pSWp0ek9qRTVPaUozYjI5ZmFHOXRaVjltYkdsamEzSmZkWEpzSWp0ek9qQTZJaUk3Y3pveU1Eb2lkMjl2WDJodmJXVmZabXhwWTJ0eVgzVnpaWElpTzNNNk1Eb2lJanR6T2pFNU9pSjNiMjlmYUc5dFpWOXNhV1psYzNSeVpXRnRJanR6T2pBNklpSTdjem94TkRvaWQyOXZYMmh2YldWZmNHOXpkSE1pTzNNNk1Eb2lJanR6T2pnNkluZHZiMTlzYjJkdklqdHpPakE2SWlJN2N6b3hNem9pZDI5dlgyMWhhVzV5YVdkb2RDSTdjem8xT2lKbVlXeHpaU0k3Y3pvM09pSjNiMjlmYm1GMklqdHpPalE2SW5SeWRXVWlPM002T0RvaWQyOXZYM1JoWW5NaU8zTTZOVG9pWm1Gc2MyVWlPM002T1RvaWQyOXZYM1pwWkdWdklqdHpPalE2SW5SeWRXVWlPMzA9IjtzOjQ6InR5cGUiO3M6ODoidGV4dGFyZWEiO319PC9saT48bGk+PHN0cm9uZz53b29fZnJhbWV3b3JrX3ZlcnNpb248L3N0cm9uZz4gLSA0LjEuMDwvbGk+PGxpPjxzdHJvbmc+d29vX2dvb2dsZV9hbmFseXRpY3M8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19ob21lPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2FyY2hpdmVzPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29faG9tZV9mbGlja3JfY291bnQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2ZsaWNrcl91cmw8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2ZsaWNrcl91c2VyPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29faG9tZV9saWZlc3RyZWFtPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29faG9tZV9vbmVfY29sPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX3Bvc3RzPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2VfZGlzYWJsZTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2VfaGVpZ2h0PC9zdHJvbmc+IC0gMTkwPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2Vfc2luZ2xlPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2ltYWdlX3dpZHRoPC9zdHJvbmc+IC0gMzUwPC9saT48bGk+PHN0cm9uZz53b29fbGF5b3V0PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19sb2dvPC9zdHJvbmc+IC0gaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMzItbG9nby1kZXZvbmJ1eS0yMDE2LnBuZzwvbGk+PGxpPjxzdHJvbmc+d29vX21haW5yaWdodDwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fbWFudWFsPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL3N1cHBvcnQvdGhlbWUtZG9jdW1lbnRhdGlvbi9mcmVzaC1uZXdzLzwvbGk+PGxpPjxzdHJvbmc+d29vX25hdjwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19vcHRpb25zPC9zdHJvbmc+IC0gYToyODp7czoxODoid29vX2FsdF9zdHlsZXNoZWV0IjtzOjEyOiI2LXdoaXRleS5jc3MiO3M6ODoid29vX2xvZ28iO3M6NTg6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzMtbG9nby5wbmciO3M6MTg6Indvb19jdXN0b21fZmF2aWNvbiI7czowOiIiO3M6MjA6Indvb19nb29nbGVfYW5hbHl0aWNzIjtzOjA6IiI7czoxODoid29vX2ZlZWRidXJuZXJfdXJsIjtzOjA6IiI7czoxNDoid29vX2N1c3RvbV9jc3MiO3M6MDoiIjtzOjg6Indvb19ob21lIjtzOjU6ImZhbHNlIjtzOjE0OiJ3b29faG9tZV9wb3N0cyI7czowOiIiO3M6MTk6Indvb19ob21lX2xpZmVzdHJlYW0iO3M6MDoiIjtzOjIwOiJ3b29faG9tZV9mbGlja3JfdXNlciI7czowOiIiO3M6MjE6Indvb19ob21lX2ZsaWNrcl9jb3VudCI7czowOiIiO3M6MTk6Indvb19ob21lX2ZsaWNrcl91cmwiO3M6MDoiIjtzOjE3OiJ3b29faG9tZV9hcmNoaXZlcyI7czowOiIiO3M6MTM6Indvb19tYWlucmlnaHQiO3M6NToiZmFsc2UiO3M6Nzoid29vX25hdiI7czo0OiJ0cnVlIjtzOjg6Indvb190YWJzIjtzOjU6ImZhbHNlIjtzOjk6Indvb192aWRlbyI7czo0OiJ0cnVlIjtzOjk6Indvb19hYm91dCI7czowOiIiO3M6MTM6Indvb19hYm91dGxpbmsiO3M6MToiIyI7czoxNDoid29vX2Fkc19yb3RhdGUiO3M6NDoidHJ1ZSI7czoxNDoid29vX2FkX2ltYWdlXzEiO3M6NDY6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS9hZHMvYmhfMTI1eDEyNV8wMi5naWYiO3M6MTI6Indvb19hZF91cmxfMSI7czozNzoiaHR0cDovL3d3dy5ibHVlaG9zdC5jb20vdHJhY2svaW5kaWdvdCI7czoxNDoid29vX2FkX2ltYWdlXzIiO3M6NDY6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS9hZHMvaWNvb2xzb2Z0aXBhZC5qcGciO3M6MTI6Indvb19hZF91cmxfMiI7czo2ODoiaHR0cHM6Ly93d3cucmVnbm93LmNvbS9jaGVja291dC9jYXJ0L2FkZC8yNzE0OC03P2FmZmlsaWF0ZV9pZD01OTMwMDEiO3M6MTQ6Indvb19hZF9pbWFnZV8zIjtzOjQxOiJodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzLzEyNXgxMjViLmpwZyI7czoxMjoid29vX2FkX3VybF8zIjtzOjI0OiJodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20iO3M6MTQ6Indvb19hZF9pbWFnZV80IjtzOjQxOiJodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzLzEyNXgxMjViLmpwZyI7czoxMjoid29vX2FkX3VybF80IjtzOjI0OiJodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20iO308L2xpPjxsaT48c3Ryb25nPndvb19vdGhlcl9lbnRyaWVzPC9zdHJvbmc+IC0gNjwvbGk+PGxpPjxzdHJvbmc+d29vX3BvcHVsYXJfcG9zdHM8L3N0cm9uZz4gLSBTZWxlY3QgYSBudW1iZXI6PC9saT48bGk+PHN0cm9uZz53b29fcmVzaXplPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19yc3NfdGh1bWI8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX3Nob3J0bmFtZTwvc3Ryb25nPiAtIHdvbzwvbGk+PGxpPjxzdHJvbmc+d29vX3Nob3dfdmlkZW88L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX3NpbmdsZV9oZWlnaHQ8L3N0cm9uZz4gLSAxMjA8L2xpPjxsaT48c3Ryb25nPndvb19zaW5nbGVfaW1hZ2VfaGVpZ2h0PC9zdHJvbmc+IC0gMTAwPC9saT48bGk+PHN0cm9uZz53b29fc2luZ2xlX2ltYWdlX3dpZHRoPC9zdHJvbmc+IC0gMTAwPC9saT48bGk+PHN0cm9uZz53b29fc2luZ2xlX3dpZHRoPC9zdHJvbmc+IC0gMjAwPC9saT48bGk+PHN0cm9uZz53b29fc3Vja2VyZmlzaDwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb190YWJzPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb190aGVtZW5hbWU8L3N0cm9uZz4gLSBGcmVzaCBOZXdzPC9saT48bGk+PHN0cm9uZz53b29fdGh1bWJfaGVpZ2h0PC9zdHJvbmc+IC0gMTAwPC9saT48bGk+PHN0cm9uZz53b29fdGh1bWJfaW1hZ2VfaGVpZ2h0PC9zdHJvbmc+IC0gNzU8L2xpPjxsaT48c3Ryb25nPndvb190aHVtYl9pbWFnZV93aWR0aDwvc3Ryb25nPiAtIDc1PC9saT48bGk+PHN0cm9uZz53b29fdGh1bWJfd2lkdGg8L3N0cm9uZz4gLSAxMDA8L2xpPjxsaT48c3Ryb25nPndvb191cGxvYWRzPC9zdHJvbmc+IC0gYTozMDp7aTowO3M6NzM6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzMyLWxvZ28tZGV2b25idXktMjAxNi5wbmciO2k6MTtzOjczOiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8zMS1sb2dvLWRldm9uYnV5LTIwMTYucG5nIjtpOjI7czo3MzoiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMzAtbG9nby1kZXZvbmJ1eS0yMDE1LnBuZyI7aTozO3M6NzM6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzI5LWxvZ28tZGV2b25idXktMjAxNS5wbmciO2k6NDtzOjczOiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8yOC1sb2dvLWRldm9uYnV5LTIwMTUucG5nIjtpOjU7czo3MzoiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMjctbG9nby1kZXZvbmJ1eS0yMDE1LnBuZyI7aTo2O3M6NjU6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzI2LWZhdmljb24tZGIucG5nIjtpOjc7czo2NjoiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMjUtZmF2aWNvbjIwMTQucG5nIjtpOjg7czo2NToiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMjQtaGVhZGVyMjAxNC5wbmciO2k6OTtzOjY1OiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8yMy1oZWFkZXIyMDE0LnBuZyI7aToxMDtzOjY1OiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8yMi1oZWFkZXIyMDE0LnBuZyI7aToxMTtzOjY1OiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8yMS1oZWFkZXIyMDEzLnBuZyI7aToxMjtzOjcwOiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8yMC1oZWFkZXIyMDEzdHlwZTIuanBnIjtpOjEzO3M6NzA6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzE5LWhlYWRlcjIwMTN0eXBlMi5qcGciO2k6MTQ7czo3MDoiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMTgtaGVhZGVyMjAxM3R5cGUyLmpwZyI7aToxNTtzOjcwOiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8xNy1oZWFkZXIyMDEzdHlwZTIuanBnIjtpOjE2O3M6NjU6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzE2LWhlYWRlcjIwMTMuanBnIjtpOjE3O3M6NjQ6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzE1LWxvZ29fY2FydC5wbmciO2k6MTg7czo2NDoiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMTQtbG9nb19jYXJ0LnBuZyI7aToxOTtzOjY0OiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8xMy1sb2dvX2NhcnQucG5nIjtpOjIwO3M6NjQ6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzEyLWxvZ29fY2FydC5wbmciO2k6MjE7czo2NDoiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMTEtbG9nb19jYXJ0LnBuZyI7aToyMjtzOjYxOiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8xMC1sb2dvXzMucG5nIjtpOjIzO3M6NjA6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzktbG9nb18zLnBuZyI7aToyNDtzOjYwOiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy84LWRiLWZhdi5wbmciO2k6MjU7czo2MDoiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNy1sb2dvXzIucG5nIjtpOjI2O3M6NjA6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzYtbG9nb18yLnBuZyI7aToyNztzOjYwOiJodHRwczovL3d3dy5kZXZvbmJ1eS5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy81LWxvZ29fMi5wbmciO2k6Mjg7czo2MDoiaHR0cHM6Ly93d3cuZGV2b25idXkuY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNC1sb2dvXzIucG5nIjtpOjI5O3M6NTg6Imh0dHBzOi8vd3d3LmRldm9uYnV5LmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzMtbG9nby5wbmciO308L2xpPjxsaT48c3Ryb25nPndvb192aWRlbzwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb192aWRlb19jYXRlZ29yeTwvc3Ryb25nPiAtIFNlbGVjdCBhIGNhdGVnb3J5OjwvbGk+PC91bD4=