(function($){
	$.pinosity = {
		
		// PUBLIC
		
		// map padding
		options: {
			padding: {
				desktop: {
					h: 60,
					v: 12
				},
				mobile: {
					h: 20,
					v: 6
				}
			},
			// the pins dimensions
			new_pins: {
				// the base pin dimensions
				desktop: {
					width: 116,
					height: 78
				},
				mobile: {
					width: 42,
					height: 29
				}
			},
			// pin's title padding
			title_padding: 2,
			time_to_stay: 5000, // 1000 = 1s

			// PRIVATE
			mobile_max_width: 769
		},
		
		// PRIVATE
		version: 1.4,
		
		device: {
			desktop: true,
			mobile: false
		},
		deviceType: 'desktop',
		
		// holds the #content dimensions
		contentH: 0,
		contentW: 0,
		// holds the header height
		headerH: 0,
		// holds the navigation height
		navigationH: 0,
		bottom_navigation_height: 0,
		// holds the top navigation bar height, if found
		top_navH: 0,

		// this will hold the currently shown pin's title
		shown_pin: null,
		
		// iphone specific variables
		standalone: false,
		orientation: false,
		screen_height: 0,
		screen_width: 0,
		
		section: 'somewhere',
		
		bar_items_start_at: 35,

		logo: {
			sections: false,
			setup: false,
			selection_made: false,
			current: false,
			reShuffle: true,
			currentSection: 0
		},
		
		// FUNCTIONS
		_init: function() {
			// setup the screen size and orientation handler
			this.standalone = ("standalone" in window.navigator) && window.navigator.standalone;
			this.screen_handler();

			// map image and pins handler
			this.headerH = parseInt($('#header').css('height'), 10) || 0;
			this.navigationH = parseInt($('#navigation').css('height'), 10) || 0;
			this.top_navH = parseInt($('#top-nav').css('height'), 10) || 0;

			this.bottom_navigation_height = this.navigationH;

			// resize and orientation change handler
			this.resize_handler();
			
			// menu handler
			this.menu_handler();
			
			// double search handler
			this.search_handler();
			
			// more button handler
			this.more_handler();
			
			// pinot grid handler
			if ($('#pino-grid').length > 0) {
				this.section = 'pino-grid';
				this.pinot_grid_handler();
				this.compare_handler();
			}
			
			// initial repositioning
			this.adjustStyle();
			this.map_handler();
			
			// this.contentH = $('#content').height();
			// this.contentW = $('#content').width();
			
			this.pin_depth_handler();
			
			this.iphone_specific();
			this.ie_specific();

			this.logo_handler();
		},
		
		ie_specific: function() {
			var self = this;

			if (!$.browser.webkit) {
				$('input[type=text]').each(function(i, element) {
					if (!$(this).attr('placeholder').length)
						return;

					$(element).focus(function() {
						if($(this).val() == $(this).attr('placeholder')) {
							$(this).val('').removeClass('placeholder');
						}
					}).blur(function() {
						if($(this).val() == '') {
							$(this).val($(this).attr('placeholder')).addClass('placeholder');
						}
					}).val($(this).attr('placeholder')).addClass('placeholder');
				});
			}

			if ($.browser.msie) {
				var menuH = 0;
				var ul = $('#submenu ul').first().css('position', 'relative');
				ul.children('li').each(function(i, element) {
					var el = $(element);
					if (el.css('display') == 'none')
						return;
					if (el.hasClass('test')) {
						el.find('li').each(function(i, element) {
							var el = $(element);
							var li_height = self.sum_styles(el, ['height', 'border-top', 'border-bottom']);
							el.css({ position: 'absolute', left: '0', top: menuH });
							menuH += li_height;
						});
					} else {
						var li_height = self.sum_styles(el, ['height', 'border-top', 'border-bottom']);
						el.css({ position: 'absolute', left: '0', top: menuH });
						menuH += li_height;
					}
				});
				ul.css('height', menuH + 'px');
			}
		},
		
		update_widths: function(selector_id) {
			var self = this;
			
			if (typeof selector_id == 'object') {
				self = selector_id.data.bind;
				selector_id = '';
			}
			
			$(selector_id + ' .bar-container').each(function(i, el) {
				var container_width = $(el).width();
				var container_left = $(el).offset().left;
				var padding = 35;
				
				var content_width = width = left_invisibles_width = right_invisibles_width = visibles_width = page_width = previous_page_width = 0;
				var left_invisible_items = new Array();
				
				$(el).find('li').each(function(i, element) {
					var el = $(element);
					width = el.outerWidth();
					var x_pos = el.offset().left - container_left;
					
					content_width += width;
					// console.log([x_pos, width, container_width]);
					
					if (x_pos < padding) {
						left_invisibles_width += width;
						left_invisible_items.push(width);
					} else
					if (x_pos + width > container_width - padding) {
						right_invisibles_width += width;
					} else {
						visibles_width += width;
					}
				});
				
				$.each(left_invisible_items.reverse(), function(i, width) {
					if (page_width + width < container_width) {
						page_width += width;
					}
				});
				previous_page_width = page_width;
				
				// console.log([previous_page_width, left_invisibles_width, right_invisibles_width, visibles_width]);
				
				$(el).data('widths', {
					content: content_width,
					prev_page: previous_page_width,
					left_inv: left_invisibles_width,
					right_inv: right_invisibles_width,
					vis: visibles_width
				});
			});
			
			self.show_or_hide_arrows(selector_id);
		},
		
		show_or_hide_arrows: function(selector_id) {
			if (selector_id == undefined)
				selector_id = '';
			$(selector_id + ' .bar-container').each(function(i, el) {
				var el = $(el);
				var widths = el.data('widths');
				var left_arrow = el.siblings('.bar-left');
				var right_arrow = el.siblings('.bar-right');
				
				// console.log(['show_or_hide_arrows>', widths.left_inv, widths.right_inv]);
				
				if (widths.left_inv > 0)
					left_arrow.show();
				else
					left_arrow.hide();
				if (widths.right_inv > 0)
					right_arrow.show();
				else
					right_arrow.hide();
			});
		},
		
		bar_arrow_handler: function(selector_id, left_or_right) {
			var selector_id = selector_id,
				self = this;
			$(selector_id + ' .bar-' + left_or_right).click(function(e) {
				var container = $(this).siblings('.bar-container');
				var widths = container.data('widths');
				var object = $(container.children('ul')[0]);
				
				if (!object.data('animating')) {
					object.data('animating', true);
					
					self.show_or_hide_arrows(selector_id);
				
					if (left_or_right == 'left') {
						object.stop().animate({ left: '+=' + widths.prev_page }, 'slow', function() { object.data('animating', false); self.update_widths(selector_id); });
					} else {
						object.stop().animate({ left: '-=' + widths.vis }, 'slow', function() { object.data('animating', false); self.update_widths(selector_id); });
					}
				}
					
				return false;
			});
		},
		
		setup_bar: function(selector_id, onTarget, onGridEntry, onBarEntry) {
			var self = this,
				selector_id = selector_id;
			
			$(selector_id + ' .bar-container ul a').click(function(e) {
				var el = $(this);
				var this_bar = el.parents('.bar');
				this_bar.data('current').removeClass('selected');
				this_bar.data('current', el.parent().addClass('selected'));
				
				var target = $(onTarget(el));
				
				if (self.compare_mode && target.length < 1) {
					self.current_compare_entry.hide();
					self.update_compare_entries();
				}
				
				if (target.hasClass('grid-entry')) {
					onGridEntry(target);
				} else if (target.hasClass('bar')) {
					onBarEntry(target);
				}
				target.show();
				
				self.update_widths(selector_id);
				
				return false;
			});

			this.update_widths(selector_id);

			this.bar_arrow_handler(selector_id, 'left');
			this.bar_arrow_handler(selector_id, 'right');
			this.show_or_hide_arrows(selector_id);
		
			$(selector_id + ' .sub-bars .bar').hide();

			this.the_current_entry_bar = $(selector_id + ' .sub-bars .bar:first').show();
			if (!this.compare_mode) // these are executed on setup
				this.current_entry_bar = this.the_current_entry_bar;
			else
				this.current_compare_entry_bar = this.the_current_entry_bar;

			$(selector_id + ' .bar').each(function(i, el) {
				$(el).data('current', $(el).find('ul li').removeClass('selected').first().addClass('selected'));
			});

		},
		
		create_compare_entry: function(current_bar_href, current_compare_bar_href) {
			/*
			the three players:
			- current_entry -- the original entry
			- the_compare_entry -- the reference comparison entry
			- current_compare_entry -- the resulting entry, containing both above data
			*/
			var compare_entry = $(current_bar_href).clone();
			compare_entry.attr('rel', current_bar_href).attr('id', current_bar_href.substring(1) + '---' + current_compare_bar_href);
			$('#compare-entries').append(compare_entry);

			var compare_rows = $('#' + current_compare_bar_href).find('.content-text');
			// var compare_rows = $('#' + current_compare_bar_href).find('tr td.content-text');

			compare_entry.find('.row').each(function(i, el) {
				var addon = 'div';
				if (el.tagName == 'TR')
					addon = 'td';
				$(el).append($(document.createElement(addon)).addClass('compare-text').html($(compare_rows[i]).html()));
			});

			this.current_compare_entry = compare_entry.show();
		},
/*
		find_compare_entry: function() {
			var first_entry = $('.sub-bars .bar:first').find('li:first a');
			the_compare_entry = $(first_entry.attr('href'));

			// just make sure we don't have the same entry to compare
			if (current_compare_entry.attr('rel') == the_compare_entry.attr('id')) {
				var first_entry = $('.sub-bars .bar:first').next().find('li:first a');
				the_compare_entry = $(first_entry.attr('href'));
			}

		},
*/		
		update_compare_entries: function() {
			var current_bar_href = this.current_entry_bar.find('li.selected a').attr('href');
			var current_compare_bar_href = this.current_compare_entry_bar.find('li.selected a').attr('rel');

			var compare_href;
			if (current_bar_href.substring(1) == current_compare_bar_href) {
				this.compare_same = true;
				compare_href = current_bar_href;
			} else {
				this.compare_same = false;
				compare_href = current_bar_href + '---' + current_compare_bar_href;
			}

			if ($(compare_href).length > 0) {
				this.current_compare_entry = $(compare_href).show();
			} else {
				this.create_compare_entry(current_bar_href, current_compare_bar_href);
			}
		},

		remove_compare_entries: function() {

		},

		setup_compare_mode: function(el) {
			var el = $(el).hide();
			$('#close-compare').show();
			$('#pino-grid').addClass('compare');
			this.compare_mode = true;

			this.current_entry.hide();

			var compare_nav = $('#top-nav').clone().attr('id', 'top-nav_compare');
			compare_nav.find('.bar').each(function(i, el) {
				var el = $(el);
				el.find('ul').css('left', 0);
				el.attr('id', el.attr('id') + '_compare');
				el.find('a').each(function(i, el) {
					var el = $(this);
					el.attr('href', el.attr('href').replace(/^.*?#/, '#'));
					el.attr('rel', el.attr('href').substring(1)).attr('href', el.attr('href') + '_compare');
				})
			});
			$('#top-nav').after(compare_nav);

			var self = this;
			
			this.setup_bar('#top-nav_compare', function(el) { //onTarget
				var target = $(el.attr('href'));
				if (target.hasClass('bar'))
					return el.attr('href');
				else
					return self.current_entry_bar.find('li.selected a').attr('href') + '---' + el.attr('rel');
			}, function(target) { //onGridEntry
				self.current_compare_entry.hide();
				self.current_compare_entry = target;
			}, function(target) { //onBarEntry
				self.current_compare_entry_bar.hide();
				self.current_compare_entry_bar = target;

				self.current_compare_entry.hide();
				self.update_compare_entries();
			});
			
			this.update_widths('#top-nav');

			this.update_compare_entries();
		},
		
		compare_handler: function(event) {
			var self = this;
			if (event)
				self = event.data.bind;
			
			if (self.section == 'pino-grid') {
				if (self.screen_width < 480) {
					if (self.compare_mode)
						self.remove_compare_mode();
						$('#compare').hide();
				} else {
					if (!self.compare_mode)
						$('#compare').show();
				}
			}
		},

		remove_compare_mode: function() {
			$('#close-compare').hide();
			$('#compare').show();
			$('#pino-grid').removeClass('compare');
			this.compare_mode = false;

			$('#top-nav_compare').remove();

			this.remove_compare_entries();

			if (!this.compare_same) {
				this.current_entry = $(this.current_entry_bar.find('li.selected a').attr('href')).show();
				this.current_compare_entry.hide();
			}
		},
		
		pinot_grid_handler: function() {
			// pinot-gird specific variables
			this.current_entry =
			this.current_entry_bar =
			this.current_compare_entry =
			this.current_compare_entry_bar =
			this.the_compare_entry =
			this.compare_same =
			this.compare_mode = false;
			
			var self = this;
			
			this.setup_bar('#top-nav', function(el) { //onTarget
				if (!self.compare_mode) {
					return el.attr('href');
				} else {
					var target = $(el.attr('href'));
					if (target.hasClass('bar'))
						return el.attr('href');
					else
						return self.current_entry_bar.find('li.selected a').attr('href') + '---' + el.attr('rel');
				}
			}, function(target) { //onGridEntry
				if (!self.compare_mode) {
					self.current_entry.hide();
					self.current_entry = target;
				} else {
					self.current_compare_entry.hide();
					self.current_compare_entry = target;
				}
			}, function(target) { //onBarEntry
					self.current_entry_bar.hide();
					self.current_entry_bar = target;

				if (!self.compare_mode) {
					self.current_entry.hide();
					self.current_entry = $(self.current_entry_bar.find('li.selected a').attr('href')).show();
				} else {
					self.current_compare_entry.hide();
					self.update_compare_entries();
				}
			});

			$('.grid-entry').hide();

			this.current_entry = $(this.current_entry_bar.find('li.selected a').attr('href')).show();

			$('#compare').click(function(e) {
				self.setup_compare_mode(this);
				return false;
			});

			$('#close-compare').click(function(e) {
				self.remove_compare_mode();
				return false;
			});

			// $('#compare a').trigger('click');
		},
		
		sum_styles: function(element, array) {
			var sum = 0;
			$.each(array, function(i, value) {
				sum += parseInt(element.css(value), 10) || 0;
			});
			return sum;
		},
		
		iphone_specific: function() {
			// $(document).bind('touchmove', function(event) { event.preventDefault(); }, true);
			// document.addEventListener('DOMContentLoaded', loaded, false);
			
			if (this.device.mobile)
				setTimeout(function() { window.scrollTo(0, 1); }, 100);
			
			/*
			var startY, startTime, endY, endTime;
			$('#content').bind('touchstart', function(event) {
				startY = event.touches[0].clientY;
				startTime = event.timeStamp;
			}, false);
			
			$('#content').bind('touchmove', function(event) {
				var posY = event.touches[0].pageY;
				$(this).css('webkitTransform', 'translateY(' + posY + 'px)');
				
				event.preventDefault();
			}, false);

			$('#content').bind('touchend', function(event) {
				// alert('touchend');
			}, false);
*/			
			
			var self = this;
			setTimeout(function() { self.iphone_scroll(); }, 100);
		},
		
		iphone_scroll: function(event) {
			var self = this;
			if (event)
				self = event.data.bind;

			if ($('#navigation').length > 0 && self.device.mobile) {
				var top = window.innerHeight - self.bottom_navigation_height + ($(window).scrollTop() || 0);
				$('#navigation').css('top', top);
			
				if (self.device.mobile)
					setTimeout(function() { self.iphone_scroll(); }, 100);
			} else {
				$('#navigation').css('top', 'auto');
			}
		},
		
		search_handler: function() {
			$('#search1, #search2').focus(function() {
				$(this).attr('name', 's').addClass('focused');
			}).blur(function() {
				$(this).attr('name', $(this).attr('id')).removeClass('focused');
			}).keypress(function(event) {  
				if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {  
					$('#searchform').submit();
				}
			});			

			// add the missing search item class... wordpress needs to refine the menu system
			$('#menu-item-search2').addClass('sub-search');
		},
		
		menu_handler: function() {
			// handle the menu item click and submenu fades
			/*
			$('#menu li.menu a').toggle(function(){
				$('#submenu').fadeIn('fast');
			},function(){
				$('#submenu').fadeOut('fast');
			});
			*/
			$('#menu-open').click(function(event) {
				var submenu = $('#submenu');

				if (submenu.is(":hidden"))
					submenu.fadeIn('fast');
				else
					submenu.fadeOut('fast');

				event.stopPropagation();

				$('body').bind('click', function(event) {
					if (!$('#search2').hasClass('focused')) {
						submenu.fadeOut('fast');
						$(this).unbind(event);
					}
				});
				
				return false;
			});
			
			var self = this;
			if ($('#header h1 a.logo').length) {
				var sections_nav = $('#sections-nav');
				sections_nav.css('marginTop', -sections_nav.outerHeight()).show();
				$('#header h1 a.logo').hover(function() {
					self.sections_nav_toggle();
				}, function() {
					self.sections_nav_toggle(true);
				});
				sections_nav.hover(function() {
					self.sections_nav_toggle();
				}, function() {
					self.sections_nav_toggle(true);
				});
			}
		},
		
		sections_nav_toggle: function(up) {
			var sections_nav = $('#sections-nav');
			var sections_wrapper = $('#sections-wrapper');
			sections_nav.stop().animate({ marginTop: up ? -sections_nav.outerHeight() : 0 });
			sections_wrapper.stop().animate({ height: up ? 0 : sections_nav.outerHeight() });
		},
		
		resize_handler: function(func) {
			// (iPhone only) set the resize handler
			var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';
			
			if (func == undefined) {
				this.resize_handler(this.screen_handler); // must be first
				// TODO: move to the proper inits
				this.resize_handler(this.map_handler);
				this.resize_handler(this.more_handler);
				this.resize_handler(this.adjustStyle);
				this.resize_handler(this.compare_handler);
				this.resize_handler(this.iphone_scroll);
				this.resize_handler(this.update_widths);
			} else {
				$(window).bind(resize, { bind: this }, func);
			}
		},
		
		screen_handler: function(event) {
			var self = this;
			if (event)
				self = event.data.bind;
			
			if ("orientation" in window) {
				self.orientation = window.orientation;
				
				switch (self.orientation) {
					case 90:
					case -90: self.screen_height = window.innerHeight == 208 ? (self.standalone ? 300 : 268) : window.innerHeight;
						break;
					default: self.screen_height = window.innerHeight == 356 ? (self.standalone ? 460 : 416) : window.innerHeight;
				}
				
				self.screen_width = window.innerWidth;
			} else {
				self.orientation = false;
				self.screen_width = window.innerWidth;
				self.screen_height = window.innerHeight;
			}
			
			if (self.screen_width < self.options.mobile_max_width) {
				self.deviceType = 'mobile';
				self.device.desktop = false;
				self.device.mobile = true;
			} else {
				self.deviceType = 'desktop';
				self.device.desktop = true;
				self.device.mobile = false;
			}
		},
		
		adjustStyle: function(event) {
			var self = this;
			if (event)
				self = event.data.bind;
			
			// only non-webkit
			if ($.browser.webkit)
				return;
			
		    var width = $(window).width();
			// var width = self.screen_width;
		    if (width < 1025) {
				$('head link[rel="stylesheet"].dynamic').each(function(i, el) {
					if (!$(el).data('media'))
						$(el).data('media', $(el).attr('media'));
					$(el).attr('media', '');
				});
		    } else {
				$('head link[rel="stylesheet"].dynamic').each(function(i, el) {
					if ($(el).data('media'))
						$(el).attr('media', $(el).data('media'));
				});
		    }
		},

		map_handler: function(event) {
			var self = this;
			if (event)
				self = event.data.bind;

			// depricated: moved to resize_handler
		    // adjustStyle($(window).width());
			
			// check to see if there is any change to the content dimensions at all
			var contentH = $('#content').height();
			var contentW = $('#content').width();

			if ((contentH == self.contentH && contentW == self.contentW) || $('#map-container').length == 0)
				return;

			var map_container = $('#map-container');

			// save the padding
			if (!map_container.data('padding-top'))
				map_container.data('padding-top', $('#map-container').css('padding-top'));
			
			// calc the content Height
			if (self.device.mobile) {
				setTimeout(function() { window.scrollTo(0, 1); }, 100);
				contentH = self.screen_height - self.headerH;// - self.bottom_navigation_height;
				$('#content').css('height', contentH);
			} else
				$('#content').css('height', 'auto');
			
			// get the maximum map height (without the top_nav if available)
			var map_max_height = contentH - self.bottom_navigation_height - self.top_navH;

			// work out the map image dimensions
			var map_image = $('#map-image img');

			// save original data if not yet saved
			if (!map_image.data('width')) {
				map_image.data('width', map_image.attr('width'));
				map_image.data('height', map_image.attr('height'));
			}

			// set the original dimensions
			var original_width = map_image.data('width');
			var original_height = map_image.data('height');

			// get the aspect ratio
			var ratio = original_width / original_height;

			// find out the new width
			var new_width = original_width;
			var padded_width = contentW - self.options.padding[self.deviceType].h;
			if (original_width > padded_width) {
				new_width = padded_width;
			}

			// find out the new height
			var new_height = Math.round(new_width / ratio);
			var padded_height = map_max_height - self.options.padding[self.deviceType].v;
			if (new_height > padded_height) {
				new_height = padded_height;
				new_width = Math.round(new_height * ratio);
			}
			
			// the map will be really small - total pixels is less than 25k -- expand to the width of the device
			if (new_width * new_height < 25000) {
				new_width = contentW - self.options.padding[self.deviceType].h;
				new_height = Math.round(new_width / ratio);
				$('#content').css('height', new_height + self.options.padding[self.deviceType].h + self.bottom_navigation_height + self.top_navH);
			}
			
			// set the map image new dimensions
			map_image.css({ width: new_width, height: new_height });
			
			// center the map vertically
			if (self.device.mobile) {
				if (new_height < map_max_height)
					map_container.css('padding-top', Math.round((map_max_height - new_height) / 2));
			} else
				map_container.css('padding-top', map_container.data('padding-top'));
			
			// get the new aspect ratio
			var new_ratio = new_width / original_width;

			// ...... reposition the pins
			// get the new pin aspect ratio
			var new_delta_width = self.options.new_pins[self.deviceType].width / 2;

			// position and re-size the pins container
			var pins_left = Math.round((contentW - new_width) / 2);
			$('#pins').width(new_width).css('left', pins_left).show();

			// reposition the pins
			$('#pins .pin').each(function(i, element) {
				var el = $(element);
				
				// save original positions
				if (!el.data('left')) {
					el.data('left', parseInt(el.css('left'), 10) + Math.round(self.options.new_pins.desktop.width / 2));
					el.data('top', parseInt(el.css('top'), 10) + self.options.new_pins.desktop.height);
				}
				// retrieve the original positions
				var el_left = el.data('left');
				var el_top = el.data('top');

				// calc the new location
				var pin_left = Math.round((el_left * new_ratio) - new_delta_width);
				var pin_top = Math.round((el_top * new_ratio) - self.options.new_pins[self.deviceType].height);
				
				// set the DOM style
				el.css({ left: pin_left, top: pin_top });
				
				if (!self.device.mobile)
					el.find('span').show().css('left', 0);
				else
					el.find('span').hide();
			});
			
			if ('ui' in $ && 'draggable' in $.ui) {
				$('#pins .pin').draggable({
					stop: function(e, ui) {
						var pos = $(this).position();
						if (console)
							console.log("left: " + pos.left + "px; top: " + pos.top + "px;");
					}
				});
			}
			
			// re set the defaults
			self.contentH = contentH;
			self.contentW = contentW;
		},

		more_handler: function(event) {
			var self = this;
			if (event) self = event.data.bind;

			// cancel if there is no #top-nav DOM element
			if (!$('#top-nav').length) return;
			
			// nav_length will hold the total true length of the ul, but we need to keep in mind the padding
			var nav_length = parseInt($('#top-nav .bar-container ul').first().css('padding-left'), 10) || 0;
			
			// get the window width
			var container_width = $('#top-nav .bar-container').first().width();
			
			// this will hold the hidden elements
			var hidden_elements = [];
			
			$('#top-nav li a').each(function(i, element) {
				nav_length += $(element).width();
				// fill in the array if there are elements off screen
				if (nav_length >= container_width)
					hidden_elements.push(element);
			});
			
			// fill in the list
			if (nav_length > container_width) {
				$('#more-listing .list-items ul').empty();
				
				var container = $('#more-listing .list-items ul');
				var last = hidden_elements.length - 1;

				$.each(hidden_elements, function(i, el) {
					// add the classes
					var Class = [];
					if (i == 0) Class.push('first');
					if (i == last) Class.push('last');
					if (i == 0 && i == last) Class.push('sole');

					var class_string = Class.length > 0 ? ' class="' + Class.join(' ') + '"' : '';
					
					// populate the listing
					var title_text = $(el).children().first().attr('title');
					if ('' == title_text)
						title_text = $(el).text();
					$('<li' + class_string + '><a href="' + $(el).attr('href') + '"><span>' + title_text + '</span></a></li>').appendTo(container);
				});
				
				// add the more click behaviour
				$('#more').unbind('click');
				$('#more').show().click(function(event) {
					var more = $('#more-listing');
					
					// handle the click-anywhere-to-hide as well
					var more_hide = function() { more.fadeOut('fast'); }
					
					if (more.is(":hidden")) {
						more.fadeIn('fast');
						event.stopPropagation();
						$('body').one('click', more_hide);
					} else {
						more_hide();
						event.stopPropagation();
						$('body').unbind('click', more_hide);
					}

					return false;
				});
			} else {
				$('#more').hide();
				$('#more-listing').fadeOut('fast');
			}
		},
		
		pin_depth_handler: function() {
			var self = this;
			
			// cancel if we are not on the map page
			if (!$('#pins .pin').length) return;
			
			// the list that will hold the y positions
			var depth_list = [];
			
			// gather all data
			$('#pins .pin').each(function(i) {
				$(this).delay(i*200).fadeIn('slow');
				depth_list.push({ element: this, y: parseInt($(this).css('top'), 10) || 0 });
			});
			
			// sort, based on the y axis
			depth_list.sort(function(a, b) { return (a.y > b.y) - (a.y < b.y); });

			// this will hold the currently shown pin
			self.shown_pin = false;
			
			// reposition the pins, based on the depth
			$.each(depth_list, function(i, obj) {
				var el = $(obj.element);
				el.data('z-index', i).css('z-index', i).hide();
				
				// hover handler (not applicable on touch based devices, but in case there is a pin on top of this we need to handle it)
				el.hover(function(event) {
					$(this).css('z-index', 990);
				}, function(event) {
					$(this).css('z-index', $(this).data('z-index'));
				});
				
				// show and hide handler
				el.find('a').click(function(event) {
					if (self.device.mobile) {
						// reposition the title
						var current_pin = $(this).find('span');
						
						if (self.shown_pin) {
							// double click - go to the damn link
							if (self.shown_pin.text() == current_pin.text())
								return true;
							self.shown_pin.hide();
						}
						self.shown_pin = current_pin;

						var title_width = current_pin.outerWidth();
						var full_width = parseInt($('#pins').css('left')) + parseInt(el.css('left')) + title_width + self.options.title_padding;
						
						if (full_width > self.contentW)
							current_pin.css('left', - (full_width - self.contentW));
						
						// show the pin and be ready to hide it after a while
						self.shown_pin.show().delay(self.options.time_to_stay).queue(function() {
							$(this).hide();
							if (self.shown_pin.text() == $(this).text())
								self.shown_pin = null;
							$(this).dequeue();
						});
						return false;
					}
				});
			});
		},
		
		center_logo: function(event) {
			var self = this;
			if (event) self = event.data.bind;

			if (self.logo.selection_made)
				return false;

			$('#content').css({ height: self.screen_height });

			var nav = $("#nav");
			nav.css({
				left: ($('#content').width() - parseInt(nav.css('width'), 10))/ 2,
				top: ($('#content').height() - parseInt(nav.css('height'), 10)) / 2
			});
		},
		
		logo_show_hide: function(element, show, callback, delay) {
			var el = $(element);
			var to_animate = { opacity: show ? 1 : 0 };

			if (!this.device.mobile) {
				var pos;
				if (el.data('at_side'))
					pos = el.data('at_right') ? 'left' : 'right';
				else
					pos = el.data('at_top') ? 'bottom' : 'top';

				if (show)
					to_animate[pos] = el.data(pos);
				else
					to_animate[pos] = el.data('at_side') ? (el.data('at_right') ? (el.data('left') - el.data('width')) : (el.data('right') - el.data('width'))) : 0;
			}

			if (delay > 0)
				el.delay(delay).animate(to_animate, 'slow', callback);
			else
				el.stop().animate(to_animate, 'slow', callback);
		},
		
		setup_letters_hovers: function() {
			var self = this;
			if (self.logo.setup)
				return;

			$(".letters a").hover(function() {
				if ((letter = $(this).data('letter')) == undefined) return;
				if ((el = $('.at_letter_' + letter)).length == 0) return;

				self.logo.current = $(this);
				self.logo_show_hide(el, true);

			}, function() {
				if ((letter = $(this).data('letter')) == undefined) return;
				if ((el = $('.at_letter_' + letter)).length == 0) return;

				self.logo.current = false;
				self.logo_show_hide(el, false);
			});

			self.logo.setup = true;
		},
		
		letter_click_handler: function(event) {
			var self = this;
			if (event)
				self = event.data.bind;

			if ((letter = $(this).data('letter')) == undefined)
				return;
				
			var href = $('.at_letter_' + letter).find('a').attr('href');
			if (href) {
				self.logo.selection_made = true;

				if (self.logo.current)
					self.logo.current.trigger('mouseleave');
				
				if (self.device.mobile)
					$(".sections li").fadeOut();

				$("#white").animate({ opacity: 0 }, 'slow', function() {
					$("#nav").stop().animate({ top: -1 }, 'slow').delay(10).animate({ left: 0 }, 'slow', function() {
						window.location = href;
					});
				});
			}

			return false;
		},
		
		logo_handler: function() {
			var letters,
				self = this;
			
			if ($('#logo').length == 0 || $('#white').length == 0 || $('#nav').length == 0 || (letters = $(".letters a")).length == 0) {
				return false;
			}
			
			letters.each(function(i, el) {
				var letter, at_letter;
				
				$(this).data('letter', letter = $(this).attr('href').split('_')[1]);
				
				if ((at_letter = $('.at_letter_' + letter)).length > 0) {
					at_letter.data({
						letter: letter,
						width: parseInt(at_letter.children('a').css('width'), 10) || 0,
						// height: parseInt(at_letter.css('height'), 10) || 0,
						top: parseInt(at_letter.css('top'), 10) || 0,
						bottom: parseInt(at_letter.css('bottom'), 10) || 0,
						left: parseInt(at_letter.css('left'), 10) || 0,
						right: parseInt(at_letter.css('right'), 10) || 0,
						at_top: at_letter.hasClass('at_top'),
						at_side: at_letter.hasClass('at_side'),
						at_right: at_letter.hasClass('at_right')
					});
					
					if (self.device.mobile) {
						at_letter.bind('click', { bind: self }, self.letter_click_handler);
					}
				} else {
					$(this).hide(); // no letter associated
				}
			}).bind('click', { bind: this }, this.letter_click_handler);
			
			this.resize_handler(this.center_logo);
			this.center_logo();

			this.logo.sections = $(".sections li").hide().css('visibility', 'visible');

			$('#logo').hide().css('visibility', 'visible');
			
			var self = this,
				count = 0;
			
			$(document).ready(function() {
				$('#logo').delay(1000).fadeIn('slow', function() { // show the logo with a delay
					$(".sections li").fadeIn(self.device.mobile ? 'fast' : 'slow', function() { // show the sections
						// return;
						var show = false;
						
						if (self.device.mobile)
							show = true;
						
						self.logo_show_hide($(this), show, function() { self.setup_letters_hovers(); }, (count++ * 600) + 1000); // hide the sections with a delay
					});
				});
			});
		},
		
		loadPage: function(url) {
			$('#content').load(url + ' #content', hijackLinks);
		},

		hijackLinks: function(selector) {
			if (selector == undefined)
				selector = '#content a';
			$(selector).click(function(e) {
				e.preventDefault();
				loadPage(e.target.href);
			});
		}
		
	}
})(typeof jQuery != "undefined" && jQuery || $);

$(document).ready(function() {
	$.pinosity._init();
});

/*
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
// ------------- dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy - dummy
*/
