Holy Grail of Image File Management Is Here!

Posted on 12. Aug, 2008 by Terry Reinert in Featured

I few weeks back I posted about my desire to create the holy grail of image file management work flows. You can read the original post HERE. With Adobe Lightroom 2.0 insane features for image file management, we would be dumb to not figure out the best way to use them. After making that post I polled quite a few of the big time pro’s in the industry as well as opened it up for reader comments. Since my reader base at the time consisted of only a handful of people, I didn’t get too much feedback. Thats ok though… because what I did was put together a work flow from the responses I got as well as all the research I did and have been testing it out for the last few weeks.

Folder Structure

One of the most common folder structures used is highly dependant on dates. Basically, within the top most folder will be a folder for every year that you took photos. Within each year folder there would be folders for all the days that you took photos.  Many people took this concept a bit further and added a description to the inner folder name so that it was more apparent as to what type of content the folder contained. While this seemed like a good idea there was one thing that bothered me about it. How do I separate the images I take for myself from the images I take for clients? After coming up with different schemes, none of which I liked, the question turned into, “Do I need to separate these two types of images using folders?” Eventually I determined that the answer to that question is no. I decided that using a good tagging system would prevent me from having to separate these types of images at the folder level and a slight addition to the date folder structure defined above would keep burning images for clients to CD simple. You could use a different Lightroom Catalog to separate the two types but I found it to be more of a hassle than a help.

Thus, the folder structure for the IFMHG specification is as follows:

  1. The top-level image directory will contain folders for each of the years that photos were taken. These folders are referred to as “year folders”. The name will consist of the four-digit year and nothing else.
  2. Each year folder will contain folders for each day and each shoot that took place on that day. These folders are referred to as “shoot folders”. The name will consist of the date in the format MM-DD-Keyword. The keyword should be something unique about the shot such as the models name, client’s name, or an identifier. Multiple keywords can be used with a dash separating each.Some photographers (David Ziser for one) uses character codes in his description. You could develop your own character codes to use with the keywords… (For example: W for weddings, E for engagement portraits, F for a fashion shoot, G for a glamor shoot, N for a nude shoot, etc.)

Using the combination of date and description allows us to keep images divided by shoot but also categorized by date. If this separation were not present then burning all the files from a specific shoot that took place on the same day as other shoots would be much more difficult. The photo import feature within Adobe Lightroom 2.0 is already set up with defaults that match this format, which is why it was chosen.

File Name

In the past I did not rename my files. Since I always kept files separated by shoot type in folders, I never had any file name conflicts. However, once I started using large catalogs in Lightroom and saving photos from different shoots into a single folder (to hold all my portfolio images to copy to my iPod), I started to get conflicts. Many different photo importing software contains the ability to change the file names of images as they are imported to some pattern specified by the user. Lightroom and Bridge both have this feature and it works quite well. So, we are going to make use of it in the IFMHG specification.

Since the folders are already separated out by date we don’t really need to put the date in the file name. However, I decided to put the date into the file name for this specification to avoid conflicts and allow easy reference. Since all the mainstream operating systems can handle large file names, we really don’t have to worry about saving the space by removing the date. In the long run, having the date present will save a lot of time and headaches as well as ensure no future conflicts will occur. Each part of the file name should be separated using a dash instead of a space. While most of the operating systems being used today can support spaces in the file name, this practice is usually frowned upon. The reason is purely for compatibility purposes across all platforms.

Thus, the file name structure in the IFMHG specification is as follows:

  1. Each file name will consist of three parts each separated by a dash: the date the photo was taken in the format MMDDYY, one or more keywords, and the sequence number of the file in the set. Note that the file name will be followed by the image type extension. This could be .CR2, .JPG, .PSD, .TIF, or any other image format. This extension is determined by the camera, operating system, or creation software (Adobe Photoshop for example) and is not covered within this specification. Also note that the keyword that makes up the file name does not have to be the same keyword as in the folder name. While this would be preferred, it does not have to be. This detail is left to each individual to decide.
  2. When an image is edited it should be saved in a subfolder named “Edits” with the same name as the original file with the addition of a second description that tells what is different between it and the original is. This new description is separated from the original file name using a dash and can consist or multiple parts. The additional description should be simple and descriptive such as the image dimensions if you cropped it, character codes to state whether it is a black and white image, a color image, a high resolution image, a low resolution image, and so forth.

Ratings

The rating system contained in Adobe Lightroom 2.0 and Adobe Bridge is a very simple concept. An image is rated from 0 to 5 stars where 0 stars indicated a horrible image and 5 stars indicate an awesome image. The rating system is left up to the user to decide how they want to use it. A general idea for its use is provided below.

5-Star Rating: Perfect image. Minimal to no editing needed. This is the photo that invokes that “WOW” feeling right out of the camera.
4-Star Rating: Great image. Minimal editing needed. Not as good as the 5-Star photos but with a little editing will invoke that “WOW” feeling.
3-Star Rating: Not a bad image but requires a lot of editing.
2-Star Rating: That idea didn’t work at all.
1-Star Rating: What the heck was I thinking?
0-Star Rating: Total crap. Someone should be slapped.

Tags / Keywords

Tags and keywords are probably one of the most useful features in an image file management system. Some programs call them tags and others call them keywords. This specification will refer to them as keywords since Adobe Lightroom refers to them as such.

To avoid going into too much detail for such a simple concept, I will simply state that keywords should be nouns or verbs. In some cases adjectives could be used but only in specific cases where that keyword is the dominating feature of the image. In a general sense, the keywords for an image should answer the questions “who”, “what”, “where”, “why”, and then any descriptors for the image itself.

You can be as detailed as you want with your keywords. Each persons “happy medium” will be different. I like to be a little detailed (its the engineer side of me) but not so much that my keyword list for a single photo contains over 10 entries.

Color Labels

I have found that the best use for color labels is to drastically simply the digital workflow by allowing rapid filtering of images by action. In addition to this, I have also found them useful for finding certain images quickly. However, the use of them can get very confusing if you use Adobe Lightroom 2.0′s develop feature for some images, Adobe Photoshop for some images, and both for other. The reason is because if you set a color label stating that edit is complete, does that mean it is ready to be sent to the client or ready to be exported to Photoshop for more editing? You could use a different color for each program but then you are going to run out of colors if you use a lot of programs (I use Adobe Lightroom 2.0, Adobe Photoshop, and Photomatix Pro) and have a complex work flow.

So what I did was simplified it down to use a few colors and they are very generic in terms of what they specify. Feel free to adapt this however you want but this is what I found works best for me…

  1. Red (Need To Edit): All the images rated with 4 or 5 stars are reviewed and the ones that stand out from all the rest get the red label specifying that it is one that I am going to do a full edit on for my client.
  2. Green (Edit Complete): The editing is complete on the file. Note that this is the original file that has the label on it. I do this so that I know which files I have edited in ANY software title. As soon as my editing on the image is done, the label goes green and thats the end of it.
  3. Purple (Portfolio Piece): The purple label allows me to quickly bring up all the images that I consider part of my “digital portfolio” to show clients on the fly during meetings.

This leaves you with yellow and blue to apply however you like. As I said above, you could make red mean edit in Lightroom and yellow edit in Photoshop. This way you can make an edit using Lightroom, export it to a PSD file, and then label that PSD file yellow stating that you need to edit it in Photoshop later.

Conclusion

So there you have it. My own personal Holy Grail for Image File Management. This specification is meant to be altered… so please tweak it however you want to make it work for you. If you come up with any great tips or upgrades to this, please post a comment so that everyone in the industry can benefit from your knowledge!

Related posts:

  1. The Holy Grail of Image File Management
  2. Creating a Header Image for WordPress Blog
  3. True Speed of your Memory Card
  4. Shooting Tethered From Your Camera Into Lightroom (Canon Version)
  5. Recovering Photomatix Settings from a JPEG / TIFF

Tags: , , , , ,

One Response to “Holy Grail of Image File Management Is Here!”

  1. Kip

    16. Sep, 2009

    Terry and group:

    Thanks so much for your site. I’m a B & W photographer since the 60′s and since film quality has deteriorated so badly, I’m forced to get serious about digital photography (as in “sold my D200 and got a Canon 5DM2″, ouch $). I like both types of photography, but so far I can’t find anything (including current B&W film) that that “sees” an image the way B &W film used to. I was doing mug-shot style portraits with 8 X 10″ camera, Tri-X, Plus-X, etc. Anyway. I’m getting reved up to do some HDR and stitching, and noticed your Canon tethering and other info. I’ll probably get LR2 (using free trial now), but so far, can’t get it to show complete shooting info like available in ZoomBrowser EX. Do you know if there’s a way? I’ll also post to some LR groups and let you know what I find.

    Reply to this comment   More from author

Leave a Reply

Additional comments powered by BackType

PHVsPjxsaT48c3Ryb25nPndvb19hYm91dF9idXR0b248L3N0cm9uZz4gLSBSZWFkIE1vcmUuLi48L2xpPjxsaT48c3Ryb25nPndvb19hYm91dF9oZWFkZXI8L3N0cm9uZz4gLSBBYm91dCBUZXJyeSBSZWluZXJ0PC9saT48bGk+PHN0cm9uZz53b29fYWJvdXRfcGhvdG88L3N0cm9uZz4gLSBodHRwOi8vZmFybTUuc3RhdGljLmZsaWNrci5jb20vNDA0Ni80MjUyMjAyODY1XzdkZGEyNzNhMTJfcy5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hYm91dF90ZXh0PC9zdHJvbmc+IC0gVGVycnkgUmVpbmVydCBpcyBhIHBob3RvZ3JhcGhlciBiYXNlZCBvdXQgb2YgTWVsYm91cm5lLCBGbG9yaWRhLiBIZSBzaG9vdHMgYSB3aWRlIHZhcmlldHkgb2YgcGhvdG9ncmFwaGljIHN0eWxlcyBhbmQgaXMgYXZhaWxhYmxlIG9uIGEgbGltaXRlZCBiYXNpcyBmb3IgbW9kZWwgcG9ydGZvbGlvIGRldmVsb3BtZW50LCBjb21tZXJjaWFsIHByb2plY3RzLCBhbmQgZW5nYWdlbWVudCAmIHdlZGRpbmcgZXZlbnRzLjwvbGk+PGxpPjxzdHJvbmc+d29vX2Fkc19yb3RhdGU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fYWRfMjUwX2Fkc2Vuc2U8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19hZF8yNTBfaW1hZ2U8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0yNTB4MjUwLmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzI1MF91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF8zMDBfYWRzZW5zZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzMwMF9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cucGhvdG9zaG9wdXNlci5jb20vbWVtYmVycy9kb3dubG9hZHMvbmFwcC1yZWZlcnJhbC1iYW5uZXJzL25hcHAtMTYweDYwMC0wNDA4LmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzMwMF91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3LnBob3Rvc2hvcHVzZXIuY29tLz9haWQ9cm14dHp0PC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudDwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudF9hZHNlbnNlPC9zdHJvbmc+IC0gPGEgaHJlZj1cImh0dHA6Ly93d3cucGhvdG9zaG9wdXNlci5jb20vP2FpZD1ybXh0enRcIiB0aXRsZT1cIk15IGxpbmsgdG8gdGhlIE5hdGlvbmFsIEFzc29jaWF0aW9uIG9mIFBob3Rvc2hvcCBQcm9mZXNzaW9uYWxzXCI+PGltZyBzcmM9XCJodHRwOi8vd3d3LnBob3Rvc2hvcHVzZXIuY29tL21lbWJlcnMvZG93bmxvYWRzL25hcHAtcmVmZXJyYWwtYmFubmVycy83Mjh4OTAtcm9ja2V0bWFuLmpwZ1wiIGFsdD1cIldoZXJlIGV2ZXJ5b25lIGxlYXJucyBQaG90b3Nob3AgLSBOYXRpb25hbCBBc3NvY2lhdGlvbiBvZiBQaG90b3Nob3AgUHJvZmVzc2lvbmFsc1wiIC8+PC9hPjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2NvbnRlbnRfZGlzYWJsZTwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19hZF9jb250ZW50X2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy5waG90b3Nob3B1c2VyLmNvbS9tZW1iZXJzL2Rvd25sb2Fkcy9uYXBwLXJlZmVycmFsLWJhbm5lcnMvNzI4eDkwLXJvY2tldG1hbi5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hZF9jb250ZW50X3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cucGhvdG9zaG9wdXNlci5jb20vP2FpZD1ybXh0enQ8L2xpPjxsaT48c3Ryb25nPndvb19hZF9oZWFkZXI8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2hlYWRlcl9jb2RlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfaGVhZGVyX2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy80Njh4NjBhLmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2hlYWRlcl91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8xPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMTI1eDEyNS0xLmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzI8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0xMjV4MTI1LTIuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMzwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTEyNXgxMjUtMy5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV80PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMTI1eDEyNS00LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzU8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0xMjV4MTI1LTQuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfNjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTEyNXgxMjUtNC5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF90b3A8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2Rpc2FibGU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy5waG90b3Nob3B1c2VyLmNvbS9tZW1iZXJzL2Rvd25sb2Fkcy9uYXBwLXJlZmVycmFsLWJhbm5lcnMvNzI4eDkwLXJvY2tldG1hbi5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hZF90b3BfdXJsPC9zdHJvbmc+IC0gaHR0cDovL3d3dy5waG90b3Nob3B1c2VyLmNvbS8/YWlkPXJteHR6dDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8xPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzI8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMzwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF80PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzU8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfNjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FsdF9zdHlsZXNoZWV0PC9zdHJvbmc+IC0gZ3JleS5jc3M8L2xpPjxsaT48c3Ryb25nPndvb19hdXRvX2ltZzwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19ibG9nX2NhdDwvc3Ryb25nPiAtIDM3NzwvbGk+PGxpPjxzdHJvbmc+d29vX2Jsb2dfbmF2aWdhdGlvbjwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19ibG9nX3Blcm1hbGluazwvc3Ryb25nPiAtIC9jYXRlZ29yeS9ibG9nLzwvbGk+PGxpPjxzdHJvbmc+d29vX2Jsb2dfc3VibmF2aWdhdGlvbjwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19idXR0b25fbGluazwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL2Fib3V0PC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8xPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMTIzPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMTIzX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8xMjY8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8xMjZfaW1hZ2U8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzE5PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMTk2PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMTk2X2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8xOV9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMV9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMjE2PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMjE2X2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8yNTg8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8yNThfaW1hZ2U8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzI2Mjwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzI2Ml9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzM0MDwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzM0MF9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzcwPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzcwX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8zNzc8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8zNzdfaW1hZ2U8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzM4MTwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzM4MV9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzgzPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzgzX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8zX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF80PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDE0PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzQxNF9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNi1TdGFjaWEtMTkuanBnPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF80MTU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDE1X2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy84LUJvc3Rvbi0zNTAtMzUyLUZpbmFsLmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDE2PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzQxNl9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNy1EYW5pZWwtUG9ydHJhaXRzLVdlYi04LmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDE3PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzQxN19pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvOS1NR18xNjIyX0xvUmVzLmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDQxPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDQxX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF80X2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF84PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfOF9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9leDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbW1lbnRfcG9zdHM8L3N0cm9uZz4gLSBTZWxlY3QgYSBudW1iZXI6PC9saT48bGk+PHN0cm9uZz53b29fY29udGVudDwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jb250ZW50X2FyY2hpdmVzPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jb250ZW50X2ZlYXQ8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2N1c3RvbV9jc3M8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jdXN0b21fZmF2aWNvbjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNC1VU0ZsYWcuaWNvPC9saT48bGk+PHN0cm9uZz53b29fZmVhdHVyZWRfcG9zdHM8L3N0cm9uZz4gLSBTZWxlY3QgYSBudW1iZXI6PC9saT48bGk+PHN0cm9uZz53b29fZmVlZGJ1cm5lcl9pZDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlZWRidXJuZXJfdXJsPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fZ29vZ2xlX2FuYWx5dGljczwvc3Ryb25nPiAtIDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPg0KdmFyIGdhSnNIb3N0ID0gKChcImh0dHBzOlwiID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sKSA/IFwiaHR0cHM6Ly9zc2wuXCIgOiBcImh0dHA6Ly93d3cuXCIpOw0KZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoXCIlM0NzY3JpcHQgc3JjPVwnXCIgKyBnYUpzSG9zdCArIFwiZ29vZ2xlLWFuYWx5dGljcy5jb20vZ2EuanNcJyB0eXBlPVwndGV4dC9qYXZhc2NyaXB0XCclM0UlM0Mvc2NyaXB0JTNFXCIpKTsNCjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+DQp0cnkgew0KdmFyIHBhZ2VUcmFja2VyID0gX2dhdC5fZ2V0VHJhY2tlcihcIlVBLTkyNjkyMDMtMVwiKTsNCnBhZ2VUcmFja2VyLl90cmFja1BhZ2V2aWV3KCk7DQp9IGNhdGNoKGVycikge308L3NjcmlwdD48L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2FyYzwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2xpbms8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29faG9tZV9saW5rX2Rlc2M8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2xpbmtfdGV4dDwvc3Ryb25nPiAtIEhvbWU8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX3RodW1iX2hlaWdodDwvc3Ryb25nPiAtIDkyPC9saT48bGk+PHN0cm9uZz53b29faG9tZV90aHVtYl93aWR0aDwvc3Ryb25nPiAtIDI0NzwvbGk+PGxpPjxzdHJvbmc+d29vX2ltYWdlX2hlaWdodDwvc3Ryb25nPiAtIDIxMDwvbGk+PGxpPjxzdHJvbmc+d29vX2ltYWdlX3NpbmdsZTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2Vfd2lkdGg8L3N0cm9uZz4gLSA1NDA8L2xpPjxsaT48c3Ryb25nPndvb19sb2dvPC9zdHJvbmc+IC0gaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8xMS1TaXRlLUxvZ28tMi5wbmc8L2xpPjxsaT48c3Ryb25nPndvb19tYW51YWw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vc3VwcG9ydC90aGVtZS1kb2N1bWVudGF0aW9uL2J1c3ktYmVlLzwvbGk+PGxpPjxzdHJvbmc+d29vX25hdl9leGNsdWRlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fcG9wdWxhcl9wb3N0czwvc3Ryb25nPiAtIFNlbGVjdCBhIG51bWJlcjo8L2xpPjxsaT48c3Ryb25nPndvb19yZXNpemU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fc2Nyb2xsZXJfcG9zdHM8L3N0cm9uZz4gLSAxMDwvbGk+PGxpPjxzdHJvbmc+d29vX3Nob3J0bmFtZTwvc3Ryb25nPiAtIHdvbzwvbGk+PGxpPjxzdHJvbmc+d29vX3NpbmdsZV9oZWlnaHQ8L3N0cm9uZz4gLSAxMjA8L2xpPjxsaT48c3Ryb25nPndvb19zaW5nbGVfd2lkdGg8L3N0cm9uZz4gLSAxODA8L2xpPjxsaT48c3Ryb25nPndvb190YWJzPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX3RoZW1lbmFtZTwvc3Ryb25nPiAtIEJ1c3kgQmVlPC9saT48bGk+PHN0cm9uZz53b29fdGh1bWJfaGVpZ2h0PC9zdHJvbmc+IC0gODg8L2xpPjxsaT48c3Ryb25nPndvb190aHVtYl93aWR0aDwvc3Ryb25nPiAtIDg4PC9saT48bGk+PHN0cm9uZz53b29fdHdpdHRlcjwvc3Ryb25nPiAtIHRrcnBob3RvPC9saT48bGk+PHN0cm9uZz53b29fdXBsb2Fkczwvc3Ryb25nPiAtIGE6OTp7aTowO3M6NjU6Imh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMTEtU2l0ZS1Mb2dvLTIucG5nIjtpOjE7czo2MzoiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8xMC1TaXRlLUxvZ28ucG5nIjtpOjI7czo2NjoiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy85LU1HXzE2MjJfTG9SZXMuanBnIjtpOjM7czo3MzoiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy84LUJvc3Rvbi0zNTAtMzUyLUZpbmFsLmpwZyI7aTo0O3M6NzU6Imh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNy1EYW5pZWwtUG9ydHJhaXRzLVdlYi04LmpwZyI7aTo1O3M6NjI6Imh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNi1TdGFjaWEtMTkuanBnIjtpOjY7czo2NjoiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy81LU1HXzE3MTRfTG9SZXMuanBnIjtpOjc7czo1OToiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy80LVVTRmxhZy5pY28iO2k6ODtzOjY1OiJodHRwOi8vd3d3LnRrcnBob3RvLmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzMtTG9nb19XaGl0ZV8yLnBuZyI7fTwvbGk+PGxpPjxzdHJvbmc+d29vX3ZpZGVvX2NhdGVnb3J5PC9zdHJvbmc+IC0gU2VsZWN0IGEgY2F0ZWdvcnk6PC9saT48L3VsPg==