function AJAXMAP(v, dF, fp, cq, cy) { this.logClientIP = null; this.logAddressID = null; this.logCustID = null; this.logMode = ''; this.v = v; this.bb = $(v); this.cg = null; this.fR = []; this.ah = 256; this.I = 0; this.F = 0; this.gi = 265960; this.ge = 6647720; this.dU = 265960; this.dT = 6647720; this.ax = { 'bottom': 0, 'left': 0, 'top': 0, 'right': 0 }; this.A = { 'bottom': 0, 'left': 0, 'top': 0, 'right': 0 }; this.bq = { 'bottom': 0, 'left': 0, 'top': 0, 'right': 0 }; this.am = 0; this.ao = 0; this.dC = fp; this.o = 4; this.bH = 19; this.bQ = 4; this.dF = dF; this.webatlasTileServerLowerBound = 11; this.webatlasTileServerUpperBound = 14; this.gh = 1; this.bs = 0; this.aH = null; this.dh = false; this.Q = { 'x': 0, 'y': 0 }; this.C = { 'x': 0, 'y': 0 }; this.av = null; this.dq = null; this.ev = 0; this.ag = null; this.bY = 0; this.ar = { 'x': 0, 'y': 0 }; this.fY = 4326; this.aw = 'EPSG:32633'; this.bz = false; this.bt = null; this.dH = null; this.V = null; this.ac = null; this.cA = false; this.aa = []; this.fV = 0; this.bd = null; this.cq = cq ? cq : 'test'; this.cy = cy ? cy : 'qt_basic'; this.aN = {}; this.aN['blank'] = new Image(); this.aN['loading'] = this.aN['blank']; this.bM = []; this.bO = []; this.aQ = []; this.cH = null; this.gd = null; this.trackCoords = null; this.cN = true; this.cn = WAAnnotationOpenBehaviour.Hover; this.dR = WAAnnotationCloseBehaviour.IconMouseOut; this.cl = false; this.et = 0; this.eg = 0; this.bR = true; this.ap = null; this.fW = { 'x': 0, 'y': 0 }; this.dA = true; this.cF = null; this.cB = false; this.H = []; this.cu = 'default'; this.eA = false; this.cI = [10, 25, 50, 100, 200, 400, 500, 750, 1000, 1500, 3000, 5000, 7500, 10000, 15000, 30000, 50000, 75000, 100000, 200000, 500000]; this.eQ = [59.81691, 59.81734, 59.81813, 59.82537, 59.82484, 59.82298, 59.82343, 59.82494, 59.82588, 59.82620, 59.82367, 59.82349, 59.82954, 59.83053, 59.83929, 59.85107, 59.87719, 59.87593, 59.88371, 59.88441, 59.89462, 59.90941, 59.91071, 59.91407, 59.91470, 59.91405, 59.91468, 59.91632, 59.91732, 59.91797, 59.91771, 59.91876, 59.92173, 59.92246, 59.92350, 59.92441, 59.92518, 59.92709, 59.92786, 59.92963, 59.93123, 59.93255, 59.93459, 59.93579, 59.93925, 59.94240, 59.94280, 59.94566, 59.94784, 59.95187, 59.95230, 59.95303, 59.95354, 59.95371, 59.95626, 59.95723, 59.95856, 59.96163, 59.96267, 59.96483, 59.96634, 59.97051, 59.97432, 59.97661, 59.97698, 59.97671, 59.97770, 59.97674, 59.97686, 59.97754, 59.97860, 59.98552, 59.99223, 59.99403, 59.99639, 59.99672, 59.99462, 59.99365, 59.99552, 59.99804, 60.00064, 60.00014, 59.99932, 59.99977, 59.99991, 59.99936, 60.00850, 60.01579, 60.01726, 60.02602, 60.03843, 60.05177, 60.06503, 60.07624, 60.07728, 60.08286, 60.09214, 60.09394, 60.10068, 60.10983, 60.11678, 60.12870, 60.13162, 60.13459, 60.13518, 60.13277, 60.13353, 60.12580, 60.12586, 60.12531, 60.12519, 60.12286, 60.12117, 60.11940, 60.11991, 60.11966, 60.12019, 60.12059, 60.12154, 60.12172, 60.12365, 60.12504, 60.12573, 60.12526, 60.12326, 60.12303, 60.12161, 60.12081, 60.11833, 60.11285, 60.11218, 60.11180, 60.10609, 60.10496, 60.10103, 60.09955, 60.09917, 60.09860, 60.09856, 60.09777, 60.09268, 60.08689, 60.08659, 60.08403, 60.07893, 60.07827, 60.07714, 60.07484, 60.07060, 60.06755, 60.06689, 60.06610, 60.06575, 60.06421, 60.06467, 60.06436, 60.06515, 60.06489, 60.06429, 60.05371, 60.04309, 60.04054, 60.03783, 60.03693, 60.03563, 60.03328, 60.03026, 60.02976, 60.02912, 60.02736, 60.02110, 60.01813, 60.01788, 60.01734, 60.01791, 60.02211, 60.02327, 60.02315, 60.02148, 60.01985, 60.01780, 60.00969, 60.00846, 60.00610, 59.99799, 59.99815, 59.99714, 59.99964, 60.00179, 59.99616, 59.99552, 59.99566, 59.99491, 59.99301, 59.98677, 59.98558, 59.98442, 59.98078, 59.98053, 59.98072, 59.98023, 59.98099, 59.98398, 59.98455, 59.98372, 59.97712, 59.97705, 59.96955, 59.96552, 59.96286, 59.95484, 59.95260, 59.95321, 59.94924, 59.94803, 59.94694, 59.94778, 59.94687, 59.94598, 59.94572, 59.94318, 59.94180, 59.94116, 59.93486, 59.92653, 59.92045, 59.91937, 59.91228, 59.91162, 59.91127, 59.90041, 59.89682, 59.88496, 59.87528, 59.86989, 59.86475, 59.86010, 59.85206, 59.84493, 59.83684, 59.83631, 59.83489, 59.83170, 59.83133, 59.82693, 59.82773, 59.82776, 59.82679, 59.82710, 59.82629, 59.82609, 59.82620, 59.82548, 59.82368, 59.82204, 59.82102, 59.81815, 59.81703, 59.81575, 59.81434, 59.81216, 59.81104, 59.81204, 59.81297, 59.81306, 59.81232, 59.80946, 59.81198, 59.81529, 59.81685, 59.81616, 59.81699, 59.81691]; this.eP = [10.83369, 10.83169, 10.81725, 10.81244, 10.80450, 10.79843, 10.78920, 10.78261, 10.78091, 10.77675, 10.77244, 10.77156, 10.76478, 10.76156, 10.74400, 10.73995, 10.73097, 10.68893, 10.66064, 10.65808, 10.65387, 10.64777, 10.64253, 10.63988, 10.63553, 10.63506, 10.63304, 10.63298, 10.63427, 10.63309, 10.63123, 10.63006, 10.62936, 10.62578, 10.62532, 10.62596, 10.62746, 10.62543, 10.62708, 10.62647, 10.63107, 10.63299, 10.63402, 10.63531, 10.63161, 10.63341, 10.63289, 10.63581, 10.63561, 10.63387, 10.63304, 10.63403, 10.63353, 10.63205, 10.63083, 10.63175, 10.62995, 10.62758, 10.62357, 10.62444, 10.62051, 10.61817, 10.61395, 10.61045, 10.60385, 10.60370, 10.59622, 10.59395, 10.59165, 10.59027, 10.59025, 10.57878, 10.56570, 10.55948, 10.55692, 10.55585, 10.55218, 10.54912, 10.54526, 10.54399, 10.53380, 10.52968, 10.52841, 10.52754, 10.52266, 10.51795, 10.50366, 10.49021, 10.48916, 10.50276, 10.52201, 10.54276, 10.56337, 10.58077, 10.59731, 10.59278, 10.59184, 10.59212, 10.58836, 10.57999, 10.57278, 10.59522, 10.60081, 10.61047, 10.61906, 10.64515, 10.68032, 10.69737, 10.69842, 10.69986, 10.70447, 10.70493, 10.70385, 10.70726, 10.71477, 10.71615, 10.71703, 10.71688, 10.71980, 10.72497, 10.73165, 10.73248, 10.73712, 10.74026, 10.74418, 10.74689, 10.74830, 10.75123, 10.75232, 10.76785, 10.76840, 10.76621, 10.75711, 10.75593, 10.75475, 10.75534, 10.75762, 10.75796, 10.75916, 10.76205, 10.76710, 10.77063, 10.77233, 10.77481, 10.77796, 10.77902, 10.77864, 10.78232, 10.78470, 10.78802, 10.79385, 10.79691, 10.80157, 10.80937, 10.81045, 10.81208, 10.81561, 10.81927, 10.81976, 10.81656, 10.81803, 10.81696, 10.81810, 10.81464, 10.81280, 10.81205, 10.81316, 10.81240, 10.81340, 10.81200, 10.81542, 10.81921, 10.82064, 10.82139, 10.82217, 10.82350, 10.82526, 10.82693, 10.82875, 10.82921, 10.83204, 10.83314, 10.83571, 10.83704, 10.83808, 10.83910, 10.84252, 10.84311, 10.84959, 10.85821, 10.86331, 10.86429, 10.86605, 10.86714, 10.87516, 10.87540, 10.88293, 10.89337, 10.90433, 10.90591, 10.90740, 10.91267, 10.91629, 10.91820, 10.92565, 10.93057, 10.93106, 10.93751, 10.93807, 10.93705, 10.94129, 10.94334, 10.94433, 10.95138, 10.94763, 10.94608, 10.94499, 10.94244, 10.94272, 10.94206, 10.94584, 10.94306, 10.94246, 10.92912, 10.92148, 10.91913, 10.91781, 10.91573, 10.91481, 10.91521, 10.91188, 10.91142, 10.90762, 10.90988, 10.90715, 10.90934, 10.91233, 10.92155, 10.92651, 10.93119, 10.93367, 10.93520, 10.93660, 10.93300, 10.92716, 10.92303, 10.91703, 10.91477, 10.91326, 10.91079, 10.91094, 10.90679, 10.90105, 10.89649, 10.89677, 10.89180, 10.89157, 10.88907, 10.88760, 10.88294, 10.88188, 10.87985, 10.87885, 10.87378, 10.86889, 10.86313, 10.85584, 10.84790, 10.84604, 10.84597, 10.83730, 10.83566, 10.83369]; this.fr = [57.17906, 57.16898, 57.16260, 57.14724, 57.13312, 57.12557, 57.12050, 57.11701, 57.10939, 57.05076, 57.00102, 56.94471, 56.94176, 56.93114, 56.93114, 56.90399, 56.89055, 56.88237, 56.87310, 56.86028, 56.85600, 56.85114, 56.83933, 56.83149, 56.82322, 56.81086, 56.78954, 56.78816, 56.78641, 56.75822, 56.74335, 56.74003, 56.72237, 56.71694, 56.71166, 56.71166, 56.70071, 56.70072, 56.70076, 56.70448, 56.70695, 56.71320, 56.72093, 56.72678, 56.72932, 56.73288, 56.73730, 56.74270, 56.77108, 56.77108, 56.79505, 56.79577, 56.80036, 56.81141, 56.81267, 56.82358, 56.83667, 56.85012, 56.85067, 56.86547, 56.87361, 56.88099, 56.88705, 56.89705, 57.00885, 57.10502, 57.19192, 57.35898, 57.43991, 57.51507, 57.57663, 57.67301, 57.84232, 57.85582, 57.85831, 57.87532, 57.89305, 57.91139, 57.91164, 57.93019, 57.93969, 57.94922, 57.96582, 57.97753, 57.98256, 57.99109, 57.99944, 58.00279, 58.01628, 58.03582, 58.04905, 58.05527, 58.07449, 58.08265, 58.09321, 58.10452, 58.11136, 58.11433, 58.12864, 58.13236, 58.14497, 58.16016, 58.16728, 58.17408, 58.17727, 58.18658, 58.19760, 58.20794, 58.20968, 58.21534, 58.22269, 58.24532, 58.26082, 58.26508, 58.27722, 58.28419, 58.29438, 58.31217, 58.31542, 58.33046, 58.34552, 58.34906, 58.35530, 58.36776, 58.37539, 58.38649, 58.39592, 58.40505, 58.42324, 58.44058, 58.44086, 58.44540, 58.45789, 58.45883, 58.47407, 58.48933, 58.49740, 58.50351, 58.51640, 58.53375, 58.53449, 58.54412, 58.54793, 58.55278, 58.55622, 58.56046, 58.56046, 58.57204, 58.57570, 58.59461, 58.59666, 58.59666, 58.59666, 58.59597, 58.59379, 58.58963, 58.58360, 58.57563, 58.56491, 58.56491, 58.55418, 58.54907, 58.54212, 58.53187, 58.52865, 58.52471, 58.51403, 58.49840, 58.48447, 58.48183, 58.46443, 58.45610, 58.44649, 58.42967, 58.42807, 58.40930, 58.40281, 58.39053, 58.37174, 58.35313, 58.33499, 58.32941, 58.31731, 58.30031, 58.29747, 58.29687, 58.26935, 58.25142, 58.24604, 58.23436, 58.22212, 58.21822, 58.20330, 58.19554, 58.18958, 58.18256, 58.17728, 58.17728, 58.13995, 58.12155, 58.12155, 58.11718, 58.10467, 58.10467, 58.09583, 58.08546, 58.07377, 58.06075, 58.05080, 58.04882, 58.03549, 58.00918, 58.00918, 58.00918, 57.99386, 57.98973, 57.98375, 57.98279, 57.97233, 57.95971, 57.94783, 57.93510, 57.90899, 57.89745, 57.89589, 57.88234, 57.87295, 57.85581, 57.82685, 57.81501, 57.81404, 57.80071, 57.74856, 57.73916, 57.73708, 57.72423, 57.72268, 57.71007, 57.70783, 57.69481, 57.68278, 57.67004, 57.65660, 57.64993, 57.62942, 57.61168, 57.60361, 57.59314, 57.58423, 57.57409, 57.56692, 57.55881, 57.55024, 57.54337, 57.53275, 57.52782, 57.51770, 57.51332, 57.51005, 57.49851, 57.48353, 57.47747, 57.46664, 57.44978, 57.44526, 57.44025, 57.42748, 57.41366, 57.39872, 57.41709, 57.42556, 57.43958, 57.45108, 57.45315, 57.46024, 57.46621, 57.49139, 57.61445, 57.62857, 57.63150, 57.64089, 57.64906, 57.65489, 57.66692, 57.68495, 57.69666, 57.70295, 57.70296, 57.71630, 57.72076, 57.72076, 57.77770, 57.82549, 57.82584, 57.96798, 57.99794, 58.16291, 58.22345, 58.26768, 58.28478, 58.30719, 58.31941, 58.33676, 58.35387, 58.37068, 58.38707, 58.39698, 58.39698, 58.39766, 58.39781, 58.39799, 58.41070, 58.41481, 58.45633, 58.47098, 58.47101, 58.47107, 58.48886, 58.51853, 58.51861, 58.52409, 58.52465, 58.52568, 58.53204, 58.54086, 58.55071, 58.55106, 58.56243, 58.61808, 58.61808, 58.62110, 58.62757, 58.63746, 58.64731, 58.79366, 58.85694, 58.92218, 58.93881, 58.93881, 59.04306, 59.05746, 59.15808, 59.15810, 59.18143, 59.20758, 59.22886, 59.23908, 59.24583, 59.24747, 59.25724, 59.26828, 59.26829, 59.28052, 59.29383, 59.30815, 59.30823, 59.45485, 59.47619, 59.47619, 59.50280, 59.53037, 59.55953, 59.61268, 59.70015, 59.71783, 59.73381, 59.75045, 59.76443, 59.77698, 59.78611, 59.81212, 59.82460, 59.83282, 59.85327, 59.91794, 59.98079, 59.99125, 60.00341, 60.01292, 60.02811, 60.04162, 60.05409, 60.05528, 60.05998, 60.07356, 60.09444, 60.23244, 60.24094, 60.24638, 60.24245, 60.23666, 60.26373, 60.29838, 60.32674, 60.34507, 60.35547, 60.37163, 60.37478, 60.37500, 60.37584, 60.37991, 60.37991, 60.44626, 60.44630, 60.57069, 60.63034, 60.63035, 60.64158, 60.64750, 60.65144, 60.65500, 60.65986, 60.66668, 60.66981, 60.67196, 60.67559, 60.67661, 60.67752, 60.67769, 60.67769, 60.67728, 60.67624, 60.67351, 60.67308, 60.75029, 60.80845, 60.85542, 60.85542, 60.85542, 60.90852, 60.93617, 61.08488, 61.13214, 61.17280, 61.17284, 61.24558, 61.37197, 61.52796, 61.57305, 61.62778, 61.66830, 61.70056, 61.70150, 61.79766, 61.81206, 61.81208, 61.98899, 62.08688, 62.08688, 62.30868, 62.41178, 62.41461, 62.41744, 62.46804, 62.48037, 62.59663, 62.59664, 62.63241, 62.68523, 62.68532, 62.68532, 62.83059, 62.83342, 62.83342, 63.06804, 63.07625, 63.08938, 63.10220, 63.10220, 63.13109, 63.13602, 63.14191, 63.14883, 63.16042, 63.16830, 63.16485, 63.16412, 63.16320, 63.16329, 63.16335, 63.25856, 63.26304, 63.30839, 63.30839, 63.33705, 63.33852, 63.37150, 63.39905, 63.39905, 63.44900, 63.44900, 63.45749, 63.46983, 63.46983, 63.47592, 63.48518, 63.49398, 63.49703, 63.50735, 63.50735, 63.52036, 63.53289, 63.53736, 63.54365, 63.54969, 63.56636, 63.57198, 63.58069, 63.59383, 63.59385, 63.59403, 63.60563, 63.63190, 63.63517, 63.63982, 63.64755, 63.65251, 63.66394, 63.68127, 63.69282, 63.69941, 63.70458, 63.71815, 63.73153, 63.73735, 63.74295, 63.75680, 63.77112, 63.77632, 63.79581, 63.81543, 63.83500, 63.92653, 63.93468, 63.95607, 64.04194, 64.11010, 64.17874, 64.19630, 64.20945, 64.21475, 64.22359, 64.23189, 64.23861, 64.24848, 64.25437, 64.30025, 64.32425, 64.37473, 64.45245, 64.45391, 64.45816, 64.49311, 64.54275, 64.54371, 64.55089, 64.56726, 64.58277, 64.59746, 64.64354, 64.64828, 64.66877, 64.66880, 64.78062, 64.83608, 64.83609, 64.86544, 64.89056, 64.89567, 64.90169, 64.93730, 64.95915, 64.96644, 64.98488, 64.98488, 65.03806, 65.04833, 65.08636, 65.09293, 65.10485, 65.12568, 65.13475, 65.13952, 65.15421, 65.17217, 65.17876, 65.18254, 65.18982, 65.19983, 65.20700, 65.21848, 65.22484, 65.24315, 65.26754, 65.28734, 65.28857, 65.28873, 65.30230, 65.32034, 65.32138, 65.32858, 65.32858, 65.35657, 65.35659, 65.36394, 65.46195, 65.48050, 65.52617, 65.52617, 65.52996, 65.57208, 65.60857, 65.66032, 65.66707, 65.69549, 65.72528, 65.77161, 65.77838, 65.78461, 65.79668, 65.80260, 65.81550, 65.84098, 65.84582, 65.84660, 65.84937, 65.85148, 65.85809, 65.86285, 65.86282, 65.86320, 65.86274, 65.86260, 65.86318, 65.86365, 65.87632, 65.88800, 65.89095, 65.89429, 65.89866, 65.90389, 65.90972, 65.91359, 65.91849, 65.92695, 65.93087, 65.93164, 65.92949, 65.92968, 65.92939, 65.93085, 65.93099, 65.93162, 65.93668, 65.94433, 65.94723, 65.94760, 65.94805, 65.94975, 65.95154, 65.95706, 65.96298, 65.96781, 65.96795, 65.96934, 65.96943, 65.96966, 65.97164, 65.97262, 65.97303, 65.97382, 65.97596, 65.97671, 65.98028, 65.99662, 66.00157, 66.00286, 66.00989, 66.02136, 66.02274, 66.02493, 66.03054, 66.03209, 66.03732, 66.04588, 66.04621, 66.04673, 66.05047, 66.05618, 66.06112, 66.06455, 66.06879, 66.06944, 66.07298, 66.07672, 66.08013, 66.09096, 66.09182, 66.09360, 66.10041, 66.10383, 66.10723, 66.10934, 66.11239, 66.11849, 66.12239, 66.12926, 66.13616, 66.13950, 66.14433, 66.14962, 66.15991, 66.16152, 66.16286, 66.16291, 66.16373, 66.16435, 66.16509, 66.16699, 66.16697, 66.16609, 66.16601, 66.16581, 66.16532, 66.16584, 66.16866, 66.16873, 66.17014, 66.17045, 66.17065, 66.17005, 66.17298, 66.17444, 66.17567, 66.17960, 66.18438, 66.18647, 66.18679, 66.18699, 66.18702, 66.18778, 66.18890, 66.19171, 66.19239, 66.19290, 66.19366, 66.19388, 66.19414, 66.19444, 66.19598, 66.19768, 66.19797, 66.19862, 66.19963, 66.20010, 66.20121, 66.21007, 66.21434, 66.21477, 66.21670, 66.21912, 66.22851, 66.23386, 66.23393, 66.23440, 66.23886, 66.23923, 66.24442, 66.25084, 66.25276, 66.25428, 66.25964, 66.26100, 66.26274, 66.26691, 66.27276, 66.27657, 66.27871, 66.28436, 66.28539, 66.28962, 66.29477, 66.29486, 66.29782, 66.30152, 66.31283, 66.31985, 66.32324, 66.32792, 66.33249, 66.33480, 66.33682, 66.34064, 66.34926, 66.35266, 66.35471, 66.35712, 66.35718, 66.35897, 66.36119, 66.36551, 66.36678, 66.37575, 66.38022, 66.38298, 66.38635, 66.38636, 66.38796, 66.39078, 66.39149, 66.39397, 66.39554, 66.39622, 66.39632, 66.39662, 66.39779, 66.39842, 66.39950, 66.40267, 66.41220, 66.41273, 66.41324, 66.41637, 66.41964, 66.42491, 66.42716, 66.42856, 66.43343, 66.43374, 66.43634, 66.43857, 66.44645, 66.45468, 66.45695, 66.45842, 66.45880, 66.45977, 66.46516, 66.47334, 66.47545, 66.47387, 66.47371, 66.47676, 66.47840, 66.47955, 66.48513, 66.49296, 66.49758, 66.50200, 66.50809, 66.50853, 66.50773, 66.50788, 66.50686, 66.50452, 66.50370, 66.50370, 66.50548, 66.50750, 66.50905, 66.51149, 66.51366, 66.51493, 66.51588, 66.51719, 66.51857, 66.52183, 66.52328, 66.52502, 66.52708, 66.52838, 66.52949, 66.53270, 66.53663, 66.54203, 66.55212, 66.55379, 66.55383, 66.55430, 66.55539, 66.55558, 66.55717, 66.55841, 66.56507, 66.56703, 66.56939, 66.57830, 66.58033, 66.58480, 66.58708, 66.59912, 66.60149, 66.60276, 66.60388, 66.61085, 66.61463, 66.61844, 66.62030, 66.62458, 66.62472, 66.62535, 66.62816, 66.62839, 66.62972, 66.63076, 66.63283, 66.63541, 66.63944, 66.64236, 66.64330, 66.64950, 66.65483, 66.67146, 66.67189, 66.67216, 66.67233, 66.67364, 66.67523, 66.67865, 66.68277, 66.68501, 66.69317, 66.69991, 66.71102, 66.71918, 66.72037, 66.72364, 66.73124, 66.73904, 66.74031, 66.74126, 66.74373, 66.74608, 66.74961, 66.75227, 66.75318, 66.75368, 66.76271, 66.76486, 66.76965, 66.77061, 66.77053, 66.77053, 66.77054, 66.77069, 66.77178, 66.77358, 66.78381, 66.78866, 66.79109, 66.79315, 66.79400, 66.79541, 66.79603, 66.79483, 66.79306, 66.79303, 66.79193, 66.78784, 66.78472, 66.78320, 66.78272, 66.78364, 66.78526, 66.78774, 66.78839, 66.79117, 66.79302, 66.79634, 66.79830, 66.80227, 66.80232, 66.80299, 66.80837, 66.80959, 66.80960, 66.81147, 66.81874, 66.82081, 66.82190, 66.82406, 66.83208, 66.83663, 66.83999, 66.84294, 66.84538, 66.84965, 66.85165, 66.85761, 66.86114, 66.86415, 66.86729, 66.87054, 66.87071, 66.87249, 66.87328, 66.87428, 66.87709, 66.87951, 66.88397, 66.88592, 66.88647, 66.88738, 66.88800, 66.88808, 66.88858, 66.88986, 66.89251, 66.89357, 66.89644, 66.90188, 66.90715, 66.90716, 66.90800, 66.90958, 66.91572, 66.91621, 66.91728, 66.91783, 66.91873, 66.91967, 66.92063, 66.92368, 66.92705, 66.92881, 66.92884, 66.92890, 66.93043, 66.93405, 66.93591, 66.93756, 66.93771, 66.94051, 66.94166, 66.94259, 66.94468, 66.94911, 66.95369, 66.95743, 66.95957, 66.95958, 66.96156, 66.96190, 66.96191, 66.96784, 66.97195, 66.97295, 66.97414, 66.97691, 66.97914, 66.98241, 66.98284, 66.98349, 66.98511, 66.98589, 66.98593, 66.98904, 66.99075, 67.00193, 67.00609, 67.01630, 67.02056, 67.03216, 67.03403, 67.03458, 67.03739, 67.03980, 67.04398, 67.04614, 67.05059, 67.05421, 67.05520, 67.05783, 67.06188, 67.06661, 67.07854, 67.08309, 67.08399, 67.09061, 67.09077, 67.09548, 67.10049, 67.10268, 67.10473, 67.11064, 67.11500, 67.11978, 67.12241, 67.12508, 67.12935, 67.13013, 67.13359, 67.13400, 67.13768, 67.13897, 67.13977, 67.14067, 67.14312, 67.14413, 67.14649, 67.14954, 67.15169, 67.15437, 67.15752, 67.16639, 67.16917, 67.17052, 67.17132, 67.17191, 67.17287, 67.17829, 67.18039, 67.18128, 67.18213, 67.18316, 67.18537, 67.18600, 67.18671, 67.18948, 67.18975, 67.19192, 67.19417, 67.19527, 67.19848, 67.19851, 67.19857, 67.20105, 67.20407, 67.20650, 67.20786, 67.20956, 67.21150, 67.21163, 67.21180, 67.21357, 67.21538, 67.22259, 67.22394, 67.22397, 67.22397, 67.22519, 67.22601, 67.22601, 67.22693, 67.22818, 67.22928, 67.23187, 67.23637, 67.23827, 67.24270, 67.24542, 67.24824, 67.24874, 67.25007, 67.25165, 67.25390, 67.25918, 67.26118, 67.26837, 67.27068, 67.27056, 67.27191, 67.27348, 67.27390, 67.27196, 67.27170, 67.27309, 67.27600, 67.27764, 67.27966, 67.28209, 67.28223, 67.28307, 67.28333, 67.28290, 67.28236, 67.28245, 67.28443, 67.29476, 67.30677, 67.31632, 67.32194, 67.32293, 67.32331, 67.32798, 67.33101, 67.33567, 67.34015, 67.34420, 67.34833, 67.34883, 67.34811, 67.34872, 67.35037, 67.35327, 67.35407, 67.35801, 67.36227, 67.36470, 67.36866, 67.37007, 67.37154, 67.37453, 67.37460, 67.37473, 67.37749, 67.38004, 67.38186, 67.38199, 67.38490, 67.38592, 67.39230, 67.39239, 67.39246, 67.39273, 67.39418, 67.39618, 67.39877, 67.40038, 67.40108, 67.40506, 67.40909, 67.41793, 67.41903, 67.42000, 67.42367, 67.42518, 67.42676, 67.42894, 67.43259, 67.43402, 67.43580, 67.43689, 67.44324, 67.44593, 67.44557, 67.44422, 67.44363, 67.44356, 67.44219, 67.44299, 67.44586, 67.44670, 67.44707, 67.45138, 67.45143, 67.45187, 67.45305, 67.45351, 67.45316, 67.45388, 67.45565, 67.45908, 67.45961, 67.46102, 67.46091, 67.45987, 67.45855, 67.45707, 67.45310, 67.45309, 67.45227, 67.44901, 67.44755, 67.44643, 67.44626, 67.44618, 67.44620, 67.44604, 67.45024, 67.45483, 67.45869, 67.45994, 67.46440, 67.46668, 67.46795, 67.46806, 67.46976, 67.46984, 67.46985, 67.46986, 67.47207, 67.47427, 67.47529, 67.47803, 67.47900, 67.48270, 67.48321, 67.48350, 67.48477, 67.48538, 67.48547, 67.48706, 67.48982, 67.49268, 67.49297, 67.50029, 67.50125, 67.50171, 67.50261, 67.50369, 67.50494, 67.50671, 67.50879, 67.51109, 67.51320, 67.51789, 67.52477, 67.52510, 67.52531, 67.52718, 67.52827, 67.52841, 67.52975, 67.53030, 67.53137, 67.53387, 67.53400, 67.53408, 67.53536, 67.53595, 67.53729, 67.53902, 67.53918, 67.54135, 67.54581, 67.54812, 67.54924, 67.54924, 67.54925, 67.54993, 67.56167, 67.56292, 67.56353, 67.56492, 67.56628, 67.56663, 67.56664, 67.56719, 67.56759, 67.56703, 67.56617, 67.56514, 67.56409, 67.56398, 67.56417, 67.56539, 67.56562, 67.56856, 67.57085, 67.57243, 67.57277, 67.57625, 67.57645, 67.57678, 67.57741, 67.57785, 67.57887, 67.57925, 67.58130, 67.58346, 67.58741, 67.58849, 67.58957, 67.59809, 67.60336, 67.60337, 67.60348, 67.60439, 67.61275, 67.61354, 67.61469, 67.61706, 67.61916, 67.62066, 67.62295, 67.62304, 67.62297, 67.62297, 67.62283, 67.62297, 67.62297, 67.62422, 67.62554, 67.62641, 67.62690, 67.62693, 67.62891, 67.63074, 67.63168, 67.63459, 67.63557, 67.63858, 67.64116, 67.64148, 67.64337, 67.64597, 67.64663, 67.64708, 67.64718, 67.64782, 67.64971, 67.66442, 67.66682, 67.66809, 67.66813, 67.67213, 67.67772, 67.68025, 67.68427, 67.68818, 67.69090, 67.69498, 67.69544, 67.69760, 67.69832, 67.69846, 67.69946, 67.70001, 67.70139, 67.70295, 67.70493, 67.70495, 67.70649, 67.70755, 67.70937, 67.71031, 67.71202, 67.71263, 67.71631, 67.72414, 67.72423, 67.72482, 67.72634, 67.72732, 67.72907, 67.73088, 67.73913, 67.74120, 67.74171, 67.74251, 67.74396, 67.74458, 67.74716, 67.75055, 67.75225, 67.75535, 67.75751, 67.76124, 67.76125, 67.76155, 67.76371, 67.76526, 67.77300, 67.77345, 67.77353, 67.77387, 67.77859, 67.77904, 67.77966, 67.78180, 67.78428, 67.78683, 67.78923, 67.79153, 67.79261, 67.79374, 67.79805, 67.80140, 67.81713, 67.82011, 67.82285, 67.82657, 67.84263, 67.84353, 67.84412, 67.84466, 67.84625, 67.84657, 67.85537, 67.85648, 67.86241, 67.86363, 67.86403, 67.86477, 67.86503, 67.86951, 67.87079, 67.87303, 67.87837, 67.88256, 67.88364, 67.88481, 67.88580, 67.88586, 67.88589, 67.88653, 67.88708, 67.88895, 67.88998, 67.89199, 67.89247, 67.89667, 67.89777, 67.89804, 67.89829, 67.89816, 67.89822, 67.89788, 67.89661, 67.89356, 67.89334, 67.89282, 67.89297, 67.89509, 67.89510, 67.89545, 67.89909, 67.89927, 67.89936, 67.90103, 67.90296, 67.90653, 67.90676, 67.90709, 67.90728, 67.90835, 67.90919, 67.90975, 67.91135, 67.91256, 67.91458, 67.91592, 67.91805, 67.92015, 67.92193, 67.92371, 67.92512, 67.92608, 67.92694, 67.92781, 67.92926, 67.93568, 67.93626, 67.93665, 67.93690, 67.93771, 67.93842, 67.93883, 67.94050, 67.94183, 67.94277, 67.94397, 67.94580, 67.94767, 67.94927, 67.95030, 67.95108, 67.95141, 67.95213, 67.95230, 67.95396, 67.95528, 67.95906, 67.95916, 67.96013, 67.96318, 67.96598, 67.96732, 67.96848, 67.96911, 67.97063, 67.97172, 67.97250, 67.97131, 67.97189, 67.97189, 67.97215, 67.97241, 67.97255, 67.97301, 67.97519, 67.97816, 67.98786, 67.98801, 67.99124, 67.99769, 67.99936, 68.00331, 68.00526, 68.00637, 68.00662, 68.00734, 68.00758, 68.00838, 68.00975, 68.01058, 68.01249, 68.01395, 68.01398, 68.01455, 68.01564, 68.01576, 68.01626, 68.01962, 68.02174, 68.02580, 68.02676, 68.02759, 68.02942, 68.03018, 68.03075, 68.03174, 68.03284, 68.03466, 68.03602, 68.03690, 68.03739, 68.03784, 68.04043, 68.04049, 68.04159, 68.04181, 68.04269, 68.04282, 68.04338, 68.04551, 68.04733, 68.04767, 68.04770, 68.04788, 68.04954, 68.05057, 68.05162, 68.05625, 68.05711, 68.05762, 68.05785, 68.05834, 68.05983, 68.06095, 68.06317, 68.06584, 68.06925, 68.07006, 68.07291, 68.07857, 68.08380, 68.08684, 68.08914, 68.09221, 68.09466, 68.09516, 68.09765, 68.09840, 68.09971, 68.10004, 68.10012, 68.10078, 68.10999, 68.11148, 68.11755, 68.12180, 68.12307, 68.12896, 68.13357, 68.13602, 68.13791, 68.14009, 68.14239, 68.14355, 68.14395, 68.14477, 68.14759, 68.14897, 68.14979, 68.14995, 68.14965, 68.14968, 68.14954, 68.15155, 68.15256, 68.15425, 68.15520, 68.15521, 68.15687, 68.15711, 68.15681, 68.15686, 68.15662, 68.15569, 68.15300, 68.15183, 68.15038, 68.14993, 68.14931, 68.14886, 68.14883, 68.14882, 68.14852, 68.14817, 68.14732, 68.14671, 68.14513, 68.14487, 68.14395, 68.14250, 68.14169, 68.14078, 68.13816, 68.13782, 68.13322, 68.13290, 68.13364, 68.13707, 68.15541, 68.15646, 68.16207, 68.17045, 68.17306, 68.17488, 68.17598, 68.17671, 68.17778, 68.18019, 68.18020, 68.18185, 68.18914, 68.19068, 68.19241, 68.19414, 68.19520, 68.19634, 68.19709, 68.19803, 68.19984, 68.20061, 68.20092, 68.20102, 68.20378, 68.20464, 68.20468, 68.20475, 68.20799, 68.21176, 68.21202, 68.21620, 68.21716, 68.21820, 68.21855, 68.21876, 68.21933, 68.22265, 68.22625, 68.22839, 68.23018, 68.23536, 68.23792, 68.23918, 68.24176, 68.24441, 68.24572, 68.24785, 68.24845, 68.24859, 68.24852, 68.24854, 68.24850, 68.24862, 68.24877, 68.24995, 68.24996, 68.25133, 68.25183, 68.25183, 68.25340, 68.25568, 68.25729, 68.25889, 68.26092, 68.26144, 68.26485, 68.26680, 68.26695, 68.26764, 68.26817, 68.26983, 68.27307, 68.27640, 68.27859, 68.28009, 68.28223, 68.29023, 68.29192, 68.29367, 68.29564, 68.30042, 68.30276, 68.30566, 68.30686, 68.30722, 68.30723, 68.30694, 68.30741, 68.30748, 68.30880, 68.31455, 68.31984, 68.32288, 68.32394, 68.32516, 68.32693, 68.32970, 68.33097, 68.33206, 68.33250, 68.33267, 68.33305, 68.33303, 68.33299, 68.33357, 68.33399, 68.33402, 68.33453, 68.33464, 68.33507, 68.33638, 68.33661, 68.33729, 68.33916, 68.34005, 68.34245, 68.34650, 68.34740, 68.34877, 68.35096, 68.35216, 68.35288, 68.35378, 68.35972, 68.36070, 68.36080, 68.36607, 68.36733, 68.36818, 68.37285, 68.37491, 68.37787, 68.37984, 68.38087, 68.38200, 68.38328, 68.38484, 68.38500, 68.38705, 68.38890, 68.38949, 68.38962, 68.39158, 68.39197, 68.39338, 68.39346, 68.39326, 68.39324, 68.39027, 68.38526, 68.38446, 68.38457, 68.38451, 68.38463, 68.38471, 68.38495, 68.38496, 68.38511, 68.38570, 68.38613, 68.38694, 68.38879, 68.39036, 68.39350, 68.39365, 68.39447, 68.39703, 68.39859, 68.40026, 68.40145, 68.40220, 68.40314, 68.40458, 68.40580, 68.40919, 68.40929, 68.41132, 68.41200, 68.41229, 68.41229, 68.41338, 68.41446, 68.41456, 68.41469, 68.41486, 68.41570, 68.41638, 68.41686, 68.42105, 68.42384, 68.42457, 68.42557, 68.43111, 68.43359, 68.43458, 68.43429, 68.43381, 68.43267, 68.43145, 68.42948, 68.42924, 68.42891, 68.42770, 68.42556, 68.42522, 68.42259, 68.42184, 68.42214, 68.42284, 68.42288, 68.42548, 68.42987, 68.43056, 68.43215, 68.43355, 68.43427, 68.43448, 68.43425, 68.43442, 68.43441, 68.43443, 68.43451, 68.43635, 68.43844, 68.44159, 68.44276, 68.44321, 68.44186, 68.44112, 68.44136, 68.44136, 68.44138, 68.44183, 68.44301, 68.44635, 68.44969, 68.45129, 68.45989, 68.46176, 68.46227, 68.46377, 68.46435, 68.46459, 68.46408, 68.46329, 68.46364, 68.46363, 68.46511, 68.46672, 68.46672, 68.46623, 68.46615, 68.46400, 68.45404, 68.44575, 68.44473, 68.44460, 68.44624, 68.45249, 68.45575, 68.46055, 68.46348, 68.46908, 68.47408, 68.47435, 68.47544, 68.47807, 68.48098, 68.48137, 68.48098, 68.48081, 68.48268, 68.48343, 68.48359, 68.48307, 68.48078, 68.48034, 68.47911, 68.47871, 68.47855, 68.47857, 68.47851, 68.47890, 68.47948, 68.48031, 68.48190, 68.48180, 68.47303, 68.47318, 68.47309, 68.47254, 68.47279, 68.47533, 68.47618, 68.47675, 68.47735, 68.47736, 68.47743, 68.47842, 68.47874, 68.48007, 68.48010, 68.47970, 68.47905, 68.47646, 68.47114, 68.47014, 68.47021, 68.47009, 68.47148, 68.47213, 68.47242, 68.47506, 68.47677, 68.48037, 68.48168, 68.48199, 68.48145, 68.47828, 68.47838, 68.48066, 68.48154, 68.48198, 68.48177, 68.48050, 68.48000, 68.47896, 68.47931, 68.48092, 68.48135, 68.48418, 68.48540, 68.48892, 68.48981, 68.49367, 68.49452, 68.49997, 68.50540, 68.51054, 68.51381, 68.52140, 68.52158, 68.52174, 68.52244, 68.52290, 68.52340, 68.52709, 68.52854, 68.52986, 68.53062, 68.53091, 68.53327, 68.53453, 68.53373, 68.53372, 68.53370, 68.53372, 68.53369, 68.53422, 68.53422, 68.53432, 68.53588, 68.53667, 68.54609, 68.54729, 68.55002, 68.55092, 68.55136, 68.55585, 68.55965, 68.56699, 68.56920, 68.57393, 68.57423, 68.57541, 68.57698, 68.57803, 68.58006, 68.58071, 68.58245, 68.58343, 68.58460, 68.58501, 68.58509, 68.58496, 68.58465, 68.58390, 68.58543, 68.58738, 68.58816, 68.58841, 68.58901, 68.59007, 68.59113, 68.59105, 68.59067, 68.58962, 68.58927, 68.58974, 68.58878, 68.58835, 68.58764, 68.58646, 68.58614, 68.58603, 68.58544, 68.58553, 68.58580, 68.58573, 68.58968, 68.58993, 68.59050, 68.59069, 68.59164, 68.59265, 68.59566, 68.59650, 68.59666, 68.59701, 68.59745, 68.59864, 68.59877, 68.60168, 68.60502, 68.61433, 68.61483, 68.61573, 68.61768, 68.61860, 68.61996, 68.62486, 68.62498, 68.62522, 68.63031, 68.63172, 68.63365, 68.63564, 68.63985, 68.64029, 68.64070, 68.64621, 68.64705, 68.64746, 68.65457, 68.65495, 68.65520, 68.65713, 68.65893, 68.65938, 68.66113, 68.66164, 68.66219, 68.66447, 68.66672, 68.66637, 68.66791, 68.67071, 68.67215, 68.67383, 68.67426, 68.67449, 68.67552, 68.67579, 68.67567, 68.67557, 68.67533, 68.67571, 68.67565, 68.67561, 68.67590, 68.67657, 68.67673, 68.67726, 68.67820, 68.68027, 68.68075, 68.68174, 68.68202, 68.68203, 68.68180, 68.68650, 68.68856, 68.68986, 68.69013, 68.69558, 68.69836, 68.70172, 68.70434, 68.70961, 68.71026, 68.71041, 68.71101, 68.71280, 68.71393, 68.71428, 68.71520, 68.71572, 68.72494, 68.72949, 68.73085, 68.73147, 68.73245, 68.73428, 68.73613, 68.73700, 68.74114, 68.74175, 68.74220, 68.74317, 68.74753, 68.74833, 68.75040, 68.75094, 68.75128, 68.75222, 68.75456, 68.75504, 68.75716, 68.76008, 68.76191, 68.76222, 68.76485, 68.76634, 68.76693, 68.76689, 68.76605, 68.76505, 68.76372, 68.76278, 68.76074, 68.76052, 68.76035, 68.76005, 68.75997, 68.75993, 68.75927, 68.75939, 68.75938, 68.76004, 68.76032, 68.76046, 68.76240, 68.76535, 68.76685, 68.77110, 68.77565, 68.78030, 68.78716, 68.78781, 68.78868, 68.78940, 68.79127, 68.79232, 68.79384, 68.79625, 68.79689, 68.79872, 68.79999, 68.80102, 68.80251, 68.80384, 68.80521, 68.80709, 68.80890, 68.81057, 68.81172, 68.81246, 68.81352, 68.81477, 68.81703, 68.81811, 68.81984, 68.81994, 68.82385, 68.82428, 68.82496, 68.82563, 68.82568, 68.82579, 68.82588, 68.82612, 68.82816, 68.82902, 68.83022, 68.83145, 68.83280, 68.83369, 68.83427, 68.83527, 68.83755, 68.83882, 68.84001, 68.84095, 68.84445, 68.84553, 68.84906, 68.85061, 68.85105, 68.85384, 68.85580, 68.85918, 68.85933, 68.85995, 68.86074, 68.86226, 68.86411, 68.86432, 68.86463, 68.86501, 68.86766, 68.86814, 68.86895, 68.87117, 68.87203, 68.87310, 68.87317, 68.87453, 68.87476, 68.87900, 68.88087, 68.88129, 68.88181, 68.88196, 68.88256, 68.88272, 68.88288, 68.88291, 68.88459, 68.88543, 68.88576, 68.89019, 68.89048, 68.89119, 68.89241, 68.89332, 68.89452, 68.89598, 68.89704, 68.89706, 68.89698, 68.89480, 68.89247, 68.89125, 68.89301, 68.89302, 68.89268, 68.89118, 68.89152, 68.89142, 68.89200, 68.89272, 68.89418, 68.89529, 68.89628, 68.89704, 68.89718, 68.89713, 68.89643, 68.89673, 68.89719, 68.89756, 68.89857, 68.89838, 68.89732, 68.89619, 68.89174, 68.89115, 68.89156, 68.89337, 68.89342, 68.89357, 68.89475, 68.89503, 68.89516, 68.89686, 68.89729, 68.89880, 68.89930, 68.90027, 68.90131, 68.90260, 68.90380, 68.90419, 68.90558, 68.90680, 68.90769, 68.90828, 68.90920, 68.90984, 68.91139, 68.91259, 68.91407, 68.91607, 68.91716, 68.91845, 68.91938, 68.92052, 68.92213, 68.92344, 68.93667, 68.93993, 68.94229, 68.94259, 68.94354, 68.94310, 68.94310, 68.94309, 68.94141, 68.94202, 68.94719, 68.94977, 68.95580, 68.95803, 68.96195, 68.97060, 68.97463, 68.98084, 68.98314, 68.98385, 68.98673, 68.98713, 68.99285, 68.99606, 68.99943, 69.00102, 69.00286, 69.00656, 69.00904, 69.01311, 69.01586, 69.01693, 69.02032, 69.02825, 69.03220, 69.03372, 69.03659, 69.03663, 69.03683, 69.03812, 69.04031, 69.04437, 69.04305, 69.04305, 69.04269, 69.04308, 69.04309, 69.04309, 69.04310, 69.04311, 69.04333, 69.04343, 69.04475, 69.04585, 69.04745, 69.04966, 69.05012, 69.04981, 69.05003, 69.05089, 69.05104, 69.05126, 69.05181, 69.05268, 69.05313, 69.05345, 69.05353, 69.05318, 69.05296, 69.05305, 69.05342, 69.05350, 69.05512, 69.05653, 69.05883, 69.05988, 69.05994, 69.05942, 69.05763, 69.05679, 69.05265, 69.04961, 69.04816, 69.04625, 69.04573, 69.02192, 69.01057, 68.98135, 68.95607, 68.94476, 68.92618, 68.91313, 68.89313, 68.85560, 68.82746, 68.80231, 68.78277, 68.76757, 68.74027, 68.71185, 68.68002, 68.66592, 68.64539, 68.60674, 68.59107, 68.58536, 68.55793, 68.53825, 68.53081, 68.52272, 68.50802, 68.49081, 68.48805, 68.40412, 68.40216, 68.38815, 68.37485, 68.35665, 68.35599, 68.51692, 68.50964, 68.50851, 68.50719, 68.50691, 68.53274, 68.55291, 68.55648, 68.55904, 68.58183, 68.57976, 68.56978, 68.56454, 68.55272, 68.53972, 68.53648, 68.50457, 68.48980, 68.46533, 68.45454, 68.43071, 68.42276, 68.40769, 68.40604, 68.40288, 68.37425, 68.34943, 68.34052, 68.30926, 68.29445, 68.27964, 68.25843, 68.24902, 68.22823, 68.19879, 68.18721, 68.17423, 68.14616, 68.11699, 68.10822, 68.09313, 68.09226, 68.08208, 68.07411, 68.05512, 68.04931, 67.98382, 67.96937, 67.96937, 67.96933, 68.02445, 68.03835, 68.05236, 68.11878, 68.05040, 67.98437, 67.94746, 67.94522, 67.93816, 67.91418, 67.90544, 67.89402, 67.86190, 67.84493, 67.82442, 67.80000, 67.76697, 67.74726, 67.73621, 67.71106, 67.68001, 67.64995, 67.64717, 67.59441, 67.54222, 67.53403, 67.53263, 67.52799, 67.52550, 67.51914, 67.43812, 67.43528, 67.39118, 67.37122, 67.34842, 67.30975, 67.28922, 67.26205, 67.23477, 67.20497, 67.20237, 67.19021, 67.19020, 67.04596, 67.04546, 67.04546, 67.04546, 67.04538, 67.03730, 67.01879, 67.00959, 67.00130, 66.98234, 66.91236, 66.87323, 66.87323, 66.87322, 66.87319, 66.80738, 66.77617, 66.77461, 66.77279, 66.72152, 66.70588, 66.68232, 66.68146, 66.59865, 66.59434, 66.56717, 66.55786, 66.55245, 66.55128, 66.52380, 66.48605, 66.48430, 66.46915, 66.43006, 66.42163, 66.39223, 66.37183, 66.36905, 66.34535, 66.34523, 66.30394, 66.28640, 66.28246, 66.28246, 66.28246, 66.27298, 66.26589, 66.24392, 66.23274, 66.21012, 66.19997, 66.18014, 66.15356, 66.15348, 66.14961, 66.14961, 66.14809, 66.14618, 66.14599, 66.14375, 66.14134, 66.13901, 66.13623, 66.13548, 66.13258, 66.13004, 66.09556, 66.07041, 65.95787, 65.92780, 65.90135, 65.88056, 65.81182, 65.81181, 65.81181, 65.77941, 65.75060, 65.70075, 65.65435, 65.65020, 65.65009, 65.61296, 65.58427, 65.55131, 65.53884, 65.52130, 65.49467, 65.49312, 65.44464, 65.44463, 65.35092, 65.35062, 65.30973, 65.29410, 65.26355, 65.24762, 65.24629, 65.12257, 65.11891, 65.11232, 64.98179, 64.97856, 64.95133, 64.93894, 64.93458, 64.84520, 64.82212, 64.81026, 64.77571, 64.76100, 64.73010, 64.71158, 64.68172, 64.64377, 64.63997, 64.61414, 64.61395, 64.58034, 64.50723, 64.48280, 64.47829, 64.46252, 64.43505, 64.41045, 64.39819, 64.38697, 64.37242, 64.31488, 64.28428, 64.25842, 64.22476, 64.19647, 64.19508, 64.19500, 64.16249, 64.14948, 64.13251, 64.10796, 64.09099, 64.06441, 64.05025, 64.02940, 64.00797, 64.01571, 64.01985, 64.02691, 64.03179, 64.03272, 64.03568, 64.04629, 64.04676, 64.08906, 64.08912, 64.09515, 64.09537, 64.08667, 64.07868, 64.06737, 64.05795, 64.04355, 63.99594, 63.97422, 63.96703, 63.94945, 63.91902, 63.91740, 63.89288, 63.87272, 63.86237, 63.85034, 63.83258, 63.81876, 63.79126, 63.77802, 63.76486, 63.74970, 63.72652, 63.71507, 63.68859, 63.67198, 63.64912, 63.63088, 63.61668, 63.60529, 63.59395, 63.58841, 63.47862, 63.47862, 63.47859, 63.47681, 63.35724, 63.35558, 63.34464, 63.28149, 63.26923, 63.26912, 63.20976, 63.13050, 63.12661, 63.11098, 63.08631, 63.05436, 63.02134, 63.00033, 62.96741, 62.95358, 62.94322, 62.91788, 62.90297, 62.90267, 62.76275, 62.74792, 62.70625, 62.68134, 62.67157, 62.65455, 62.64181, 62.62765, 62.61192, 62.60903, 62.27173, 62.26749, 62.25488, 62.19185, 62.17068, 62.13611, 62.12749, 62.09286, 62.06435, 62.06246, 62.04300, 62.01741, 62.00338, 61.97849, 61.94668, 61.93449, 61.90944, 61.89375, 61.87832, 61.87111, 61.85376, 61.83443, 61.82265, 61.79931, 61.76659, 61.74499, 61.72382, 61.71642, 61.69232, 61.64340, 61.64024, 61.62493, 61.61467, 61.60018, 61.58038, 61.56298, 61.56539, 61.56712, 61.56712, 61.56712, 61.56773, 61.56875, 61.53248, 61.50903, 61.49059, 61.46138, 61.44683, 61.42868, 61.40447, 61.37652, 61.35650, 61.32840, 61.30812, 61.28682, 61.26719, 61.25846, 61.24436, 61.22058, 61.19705, 61.18332, 61.17215, 61.16485, 61.14327, 61.12285, 61.10143, 61.07662, 61.06491, 61.06120, 61.06118, 61.05954, 61.05657, 61.05651, 61.05649, 61.05598, 61.05507, 61.05274, 61.05269, 61.04682, 61.04683, 61.04647, 61.04646, 61.04702, 61.04702, 61.04701, 61.04926, 61.04928, 61.05163, 61.05072, 61.05022, 61.04288, 61.04032, 61.03454, 61.02715, 61.02183, 61.02166, 61.01896, 61.01308, 61.01106, 60.89043, 60.88298, 60.88051, 60.85236, 60.83835, 60.81790, 60.79059, 60.77203, 60.75846, 60.73502, 60.73389, 60.72255, 60.72223, 60.68803, 60.68522, 60.66777, 60.64246, 60.62460, 60.60015, 60.59846, 60.55182, 60.55090, 60.51274, 60.51038, 60.50051, 60.44157, 60.40882, 60.40593, 60.40592, 60.40591, 60.40482, 60.38628, 60.37073, 60.34979, 60.34958, 60.34958, 60.34930, 60.34378, 60.34249, 60.34245, 60.32365, 60.31751, 60.28273, 60.28134, 60.28121, 60.28013, 60.25326, 60.25211, 60.23748, 60.22363, 60.19338, 60.19337, 60.19337, 60.11015, 60.10963, 60.10713, 60.10305, 60.09908, 60.09495, 60.09488, 60.09214, 60.07302, 60.05107, 60.04030, 60.03918, 60.02655, 60.01560, 60.00199, 59.99877, 59.99146, 59.96586, 59.96567, 59.94916, 59.94462, 59.93155, 59.93064, 59.92757, 59.88988, 59.88988, 59.88981, 59.88962, 59.88958, 59.88873, 59.88674, 59.88675, 59.88674, 59.88799, 59.89394, 59.89066, 59.88594, 59.88710, 59.88782, 59.88891, 59.89039, 59.89093, 59.89375, 59.89883, 59.90049, 59.90048, 59.89009, 59.89009, 59.88995, 59.88705, 59.88533, 59.88285, 59.88037, 59.87564, 59.87274, 59.87195, 59.87195, 59.87190, 59.87194, 59.87208, 59.87137, 59.87109, 59.87128, 59.87171, 59.87186, 59.87198, 59.87185, 59.87153, 59.87007, 59.86979, 59.86904, 59.86708, 59.86316, 59.86298, 59.86265, 59.86183, 59.85918, 59.85605, 59.85075, 59.85034, 59.84936, 59.84900, 59.84843, 59.84783, 59.84732, 59.84706, 59.84703, 59.84634, 59.84535, 59.84485, 59.84435, 59.84432, 59.84426, 59.84327, 59.84251, 59.84198, 59.84149, 59.83919, 59.83754, 59.83463, 59.83355, 59.83261, 59.83099, 59.82990, 59.82971, 59.82958, 59.82911, 59.82883, 59.82880, 59.82870, 59.82880, 59.82740, 59.82729, 59.82718, 59.82461, 59.82436, 59.82320, 59.82128, 59.81712, 59.81627, 59.81500, 59.81355, 59.81309, 59.81225, 59.81140, 59.81005, 59.80651, 59.80599, 59.80402, 59.80323, 59.80149, 59.79972, 59.79516, 59.79514, 59.79511, 59.79400, 59.79059, 59.78690, 59.78532, 59.78413, 59.77393, 59.76887, 59.76877, 59.76847, 59.76019, 59.75694, 59.75348, 59.75239, 59.75136, 59.74955, 59.74689, 59.74427, 59.74161, 59.74058, 59.73904, 59.73873, 59.73873, 59.73871, 59.73758, 59.73649, 59.73438, 59.73419, 59.73331, 59.73275, 59.73174, 59.73106, 59.73039, 59.72977, 59.72926, 59.72911, 59.72778, 59.72718, 59.72707, 59.72657, 59.72577, 59.72397, 59.71824, 59.71621, 59.71509, 59.71408, 59.71340, 59.70962, 59.70917, 59.70827, 59.70703, 59.70548, 59.70409, 59.70069, 59.70042, 59.69543, 59.69480, 59.69479, 59.69458, 59.69435, 59.69355, 59.69319, 59.69166, 59.68295, 59.67247, 59.66252, 59.65273, 59.65159, 59.64861, 59.64829, 59.64787, 59.64676, 59.64606, 59.64306, 59.62544, 59.62303, 59.62197, 59.61618, 59.61299, 59.60875, 59.58952, 59.51108, 59.49296, 59.49236, 59.49125, 59.47937, 59.47850, 59.46593, 59.45815, 59.42861, 59.41425, 59.39820, 59.38647, 59.37422, 59.37103, 59.35414, 59.35009, 59.34474, 59.33319, 59.33270, 59.31177, 59.30288, 59.30145, 59.24116, 59.23918, 59.23787, 59.23783, 59.23783, 59.23231, 59.23202, 59.23197, 59.22777, 59.22541, 59.22378, 59.22106, 59.21940, 59.21614, 59.20857, 59.20809, 59.20501, 59.20353, 59.19889, 59.19780, 59.19520, 59.19299, 59.19259, 59.18795, 59.18212, 59.17064, 59.17026, 59.16646, 59.16278, 59.16076, 59.15932, 59.15602, 59.15103, 59.13603, 59.12671, 59.11777, 59.11703, 59.11517, 59.11460, 59.11458, 59.11459, 59.11455, 59.11434, 59.11381, 59.11305, 59.11039, 59.11033, 59.10938, 59.10752, 59.10497, 59.10420, 59.10215, 59.10166, 59.10014, 59.09925, 59.09858, 59.09787, 59.09710, 59.09212, 59.09196, 59.08972, 59.08801, 59.08752, 59.08660, 59.07043, 59.06864, 59.06728, 59.06083, 59.05534, 59.05361, 59.05239, 59.04917, 59.04906, 59.04902, 59.03945, 59.03873, 59.03824, 59.03814, 59.03575, 59.03366, 59.03251, 59.01538, 59.01176, 59.01138, 59.00142, 58.99954, 58.99831, 58.99731, 58.99659, 58.99639, 58.99411, 58.99389, 58.99281, 58.99164, 58.99116, 58.99107, 58.99006, 58.98982, 58.98902, 58.98788, 58.98560, 58.98544, 58.98520, 58.98512, 58.98506, 58.98504, 58.98452, 58.98438, 58.97794, 58.97776, 58.97733, 58.97689, 58.97682, 58.97322, 58.97311, 58.97282, 58.97180, 58.96421, 58.95685, 58.95566, 58.95527, 58.95458, 58.95089, 58.95071, 58.94947, 58.94768, 58.94620, 58.94559, 58.94450, 58.94264, 58.94127, 58.93992, 58.93760, 58.93501, 58.93494, 58.93479, 58.93483, 58.93481, 58.93436, 58.93269, 58.93180, 58.92965, 58.92788, 58.92736, 58.90895, 58.90624, 58.90623, 58.90826, 58.90744, 58.90657, 58.90548, 58.90413, 58.90206, 58.90057, 58.90002, 58.89511, 58.89071, 58.89072, 58.89072, 58.89215, 58.89427, 58.89427, 58.89409, 58.89441, 58.89531, 58.89606, 58.89677, 58.89722, 58.89721, 58.89683, 58.89615, 58.89383, 58.89167, 58.88996, 58.88890, 58.88816, 58.88790, 58.88819, 58.88839, 58.88875, 58.88915, 58.88985, 58.89119, 58.89165, 58.89186, 58.89757, 58.89757, 58.89808, 58.89857, 58.89807, 58.89763, 58.89695, 58.89549, 58.89525, 58.89356, 58.89226, 58.89017, 58.88807, 58.88761, 58.88667, 58.88201, 58.88199, 58.88169, 58.88021, 58.88008, 58.87888, 58.87819, 58.87820, 58.87740, 58.87739, 58.87736, 58.87839, 58.87842, 58.87860, 58.87691, 58.87887, 58.87893, 58.87962, 58.87988, 58.88307, 58.88897, 58.88889, 58.88861, 58.88878, 58.89002, 58.89111, 58.89142, 58.89145, 58.88982, 58.88844, 58.88844, 58.88844, 58.88844, 58.88966, 58.91346, 58.91663, 58.93326, 58.93411, 58.95153, 58.95249, 58.97306, 58.98073, 58.98547, 58.98549, 58.98751, 58.98787, 58.98811, 58.99104, 58.99115, 58.99163, 58.99846, 59.00272, 59.01619, 59.02823, 59.02927, 59.03014, 59.03613, 59.03619, 59.03970, 59.04083, 59.04086, 59.05775, 59.06925, 59.07307, 59.09300, 59.09634, 59.09918, 59.10193, 59.10595, 59.11386, 59.11437, 59.11398, 59.11249, 59.10732, 59.10618, 59.10269, 59.09950, 59.09885, 59.09811, 59.09766, 59.09610, 59.09312, 59.09122, 59.08809, 59.08766, 59.08761, 59.08757, 59.08691, 59.07903, 59.07757, 59.01867, 59.01363, 59.00985, 58.99056, 58.98568, 58.98524, 58.98018, 58.97744, 58.97619, 58.97513, 58.97478, 58.97258, 58.96958, 58.96188, 58.96019, 58.94863, 58.94227, 58.89228, 58.79790, 58.76099, 58.51877, 58.51852, 58.50992, 58.50147, 58.48469, 58.46831, 58.46831, 58.44639, 58.44638, 58.29218, 58.29117, 58.25762, 58.17594, 58.17036, 58.08086, 58.04822, 58.04109, 58.03765, 57.98295, 57.91407, 57.86114, 57.83464, 57.82603, 57.80287, 57.67466, 57.67053, 57.65479, 57.65477, 57.50669, 57.50018, 57.48071, 57.45302, 57.41359, 57.38303, 57.21072, 57.20864, 57.17305, 57.14249, 57.05293, 56.97308, 56.96437, 56.67903, 56.65420, 56.63646, 56.55767, 56.47736, 56.44894, 56.38316, 56.32709, 56.30142, 56.30142, 56.27681, 56.26539, 56.25206, 56.25206, 56.24413, 56.23722, 56.23202, 56.21619, 56.16813, 56.14652, 56.14532, 56.14482, 56.14438, 56.14367, 56.14264, 56.14156, 56.13995, 56.13829, 56.13016, 56.12832, 56.12326, 56.11946, 56.11788, 56.11712, 56.11642, 56.11552, 56.11501, 56.11476, 56.11316, 56.10560, 56.09731, 56.09152, 56.09030, 56.08933, 56.08778, 56.08681, 56.08622, 56.08557, 56.07415, 56.07354, 56.07322, 56.07091, 56.07082, 56.07054, 56.06940, 56.06856, 56.06746, 56.06636, 56.06539, 56.06474, 56.06435, 56.06351, 56.06164, 56.06153, 56.06115, 56.06051, 56.06013, 56.05949, 56.05911, 56.05847, 56.05782, 56.05744, 56.05679, 56.05621, 56.05587, 56.05548, 56.04751, 56.04716, 56.04578, 56.04445, 56.04345, 56.04259, 56.04212, 56.04172, 56.04099, 56.04032, 56.03958, 56.03871, 56.03804, 56.03717, 56.03636, 56.03576, 56.03528, 56.03454, 56.03333, 56.03266, 56.03137, 56.03043, 56.02881, 56.02678, 56.02618, 56.02456, 56.02218, 56.01968, 56.01737, 56.01520, 56.01366, 56.01114, 56.00742, 56.00149, 56.00028, 55.99677, 55.98826, 55.98029, 55.97773, 55.97118, 55.96970, 55.96854, 55.96773, 55.96557, 55.96327, 55.96327, 55.95882, 55.95343, 55.92557, 55.90779, 55.90757, 55.90644, 55.90354, 55.90317, 55.90121, 55.89872, 55.89729, 55.89532, 55.89315, 55.89229, 55.89183, 55.89156, 55.89058, 55.87618, 55.87596, 55.87397, 55.87244, 55.87097, 55.86964, 55.86537, 55.83584, 55.82696, 55.82653, 55.78001, 55.69851, 55.66387, 55.64353, 55.62890, 55.61355, 55.54020, 55.53137, 55.49832, 55.48856, 55.44918, 55.43204, 55.33639, 55.33927, 55.34163, 55.34481, 55.33739, 55.32308, 55.31181, 55.31181, 55.29514, 55.24378, 55.14899, 55.15566, 55.15635, 55.15693, 55.16132, 55.16823, 55.16539, 55.16476, 55.16390, 55.16382, 55.16522, 55.16522, 55.16479, 55.15716, 55.15716, 55.15297, 55.15123, 55.14742, 55.14692, 55.14445, 55.14198, 55.14109, 55.13874, 55.13764, 55.13721, 55.13729, 55.13892, 55.14200, 55.14200, 55.14612, 55.14612, 55.15157, 55.15564, 55.15827, 55.16437, 55.16630, 55.16845, 55.17819, 55.17819, 55.18232, 55.18553, 55.19336, 55.19336, 55.19586, 55.19794, 55.19989, 55.20379, 55.20669, 55.21090, 55.21560, 55.21919, 55.21842, 55.21787, 55.21734, 55.21743, 55.21676, 55.20716, 55.19847, 55.19592, 55.19147, 55.18977, 55.18623, 55.18275, 55.18224, 55.18108, 55.18118, 55.18129, 55.17768, 55.17768, 55.17708, 55.17744, 55.17749, 55.22960, 55.23680, 55.31094, 55.35172, 55.60339, 55.60343, 55.62488, 55.64208, 55.66226, 55.68771, 55.68771, 55.69453, 55.69657, 55.70004, 55.70732, 55.71216, 55.72757, 55.73576, 55.74123, 55.74755, 55.75500, 55.79343, 55.79721, 55.79782, 55.80110, 55.80178, 55.80371, 55.80727, 55.80804, 55.81287, 55.81399, 55.82332, 55.86132, 55.86258, 55.87983, 55.89821, 55.89615, 55.89555, 55.88974, 55.83367, 55.79720, 55.78356, 55.75479, 55.75323, 55.75030, 55.75060, 55.75191, 55.76565, 55.77919, 55.78545, 55.79614, 55.81590, 55.85093, 55.91333, 55.91333, 55.92792, 55.99606, 55.99606, 56.00288, 56.00817, 56.01132, 56.02138, 56.02838, 56.02838, 56.07969, 56.08640, 56.12346, 56.18107, 56.18405, 56.18548, 56.21884, 56.29636, 56.34107, 56.37267, 56.38025, 56.39859, 56.43044, 56.44928, 56.44966, 56.46728, 56.46728, 56.46934, 56.48345, 56.50056, 56.53598, 56.54254, 56.55399, 56.56856, 56.56856, 56.59128, 56.59813, 56.60515, 56.61477, 56.63182, 56.63674, 56.65434, 56.66166, 56.66166, 56.67765, 56.72517, 56.76210, 56.78163, 57.11303, 57.12930, 57.14021, 57.14592, 57.14592, 57.17658, 57.17658, 57.22509, 57.22509, 57.23263, 57.24156, 57.17906, 59.96182]; this.fs = [17.64082, 17.65293, 17.66059, 17.68337, 17.70867, 17.72524, 17.73637, 17.74582, 17.76638, 17.78541, 17.77380, 17.76069, 17.76018, 17.75837, 17.75837, 17.75831, 17.76043, 17.76266, 17.76518, 17.77097, 17.77290, 17.77591, 17.78321, 17.78950, 17.79613, 17.80770, 17.83382, 17.83551, 17.83832, 17.88343, 17.91732, 17.92486, 17.99104, 18.01942, 18.04697, 18.04697, 18.16645, 18.17534, 18.21415, 18.27270, 18.28690, 18.32275, 18.35044, 18.37139, 18.38557, 18.40541, 18.42403, 18.44677, 18.52842, 18.52842, 18.58694, 18.58814, 18.59588, 18.61980, 18.62207, 18.64185, 18.66202, 18.67935, 18.68006, 18.69582, 18.70285, 18.70922, 18.71335, 18.72018, 18.86640, 18.99308, 19.11402, 19.35449, 19.37548, 19.34989, 19.30309, 19.42552, 19.65384, 19.67044, 19.67350, 19.69014, 19.70370, 19.71405, 19.71414, 19.72102, 19.72276, 19.72450, 19.73088, 19.73341, 19.73449, 19.73498, 19.73545, 19.73511, 19.73374, 19.73411, 19.73185, 19.73078, 19.72385, 19.71931, 19.71343, 19.70483, 19.69963, 19.69664, 19.68254, 19.67792, 19.66226, 19.63904, 19.62578, 19.61310, 19.60586, 19.58472, 19.55409, 19.57322, 19.57645, 19.58531, 19.59685, 19.62918, 19.64927, 19.65376, 19.66654, 19.67234, 19.68082, 19.69199, 19.69342, 19.70003, 19.70377, 19.70464, 19.70508, 19.70594, 19.70511, 19.70390, 19.70122, 19.69863, 19.68998, 19.67823, 19.67804, 19.67405, 19.66306, 19.66201, 19.64502, 19.62417, 19.61074, 19.60059, 19.57467, 19.53623, 19.53460, 19.51153, 19.50070, 19.48691, 19.47538, 19.46115, 19.46115, 19.41165, 19.38484, 19.24555, 19.20393, 19.20393, 19.20393, 19.15572, 19.11782, 19.08052, 19.04434, 19.00929, 18.97169, 18.97169, 18.94196, 18.93024, 18.91434, 18.89511, 18.88906, 18.88295, 18.86641, 18.84637, 18.83209, 18.82938, 18.81541, 18.81039, 18.80462, 18.79780, 18.79715, 18.79312, 18.79284, 18.79230, 18.79494, 18.80106, 18.81028, 18.81426, 18.82287, 18.83819, 18.84030, 18.84083, 18.85638, 18.87069, 18.87627, 18.88838, 18.90408, 18.90908, 18.93254, 18.94736, 18.95875, 18.97502, 18.98726, 18.98726, 18.73994, 18.61899, 18.61899, 18.59394, 18.53722, 18.53722, 18.50627, 18.47711, 18.44992, 18.42481, 18.40035, 18.39547, 18.36834, 18.32614, 18.32614, 18.32614, 18.27267, 18.26128, 18.24484, 18.24264, 18.21870, 18.19466, 18.17435, 18.15592, 18.12511, 18.11388, 18.11237, 18.10164, 18.09317, 18.07884, 18.05972, 18.04639, 18.04529, 18.03272, 17.95216, 17.93397, 17.92981, 17.90402, 17.90144, 17.88054, 17.87751, 17.85979, 17.84126, 17.82470, 17.80988, 17.80161, 17.77811, 17.76234, 17.75694, 17.74994, 17.74571, 17.74090, 17.73834, 17.73544, 17.73367, 17.73226, 17.73152, 17.73118, 17.72619, 17.72403, 17.72289, 17.71888, 17.71585, 17.71544, 17.71472, 17.71609, 17.71490, 17.71359, 17.68945, 17.66764, 17.64830, 17.47712, 17.47195, 17.46115, 17.45033, 17.44838, 17.44042, 17.43372, 17.40282, 17.25096, 17.25973, 17.26155, 17.26562, 17.26917, 17.27067, 17.27378, 17.27551, 17.27460, 17.27411, 17.27411, 17.27074, 17.26966, 17.26966, 17.25065, 17.23465, 17.23489, 17.33142, 17.35187, 17.46516, 17.50701, 17.53776, 17.54371, 17.54708, 17.54732, 17.54473, 17.53942, 17.53113, 17.52013, 17.56170, 17.56170, 17.56455, 17.56517, 17.56591, 17.61936, 17.63665, 17.81223, 17.87456, 17.87473, 17.87495, 17.95092, 18.07822, 18.07856, 18.10742, 18.11037, 18.11465, 18.14113, 18.17057, 18.19737, 18.19832, 18.22423, 18.36392, 18.36393, 18.37144, 18.38755, 18.41215, 18.43259, 18.78764, 18.94078, 19.07132, 19.10117, 19.10117, 19.26856, 19.29176, 19.45484, 19.45487, 19.51997, 19.59315, 19.65268, 19.68136, 19.70594, 19.71190, 19.74093, 19.76815, 19.76816, 19.79328, 19.81631, 19.83698, 19.83704, 19.94251, 19.95796, 19.95797, 19.96483, 19.97566, 19.99108, 19.91530, 19.78992, 19.72865, 19.68808, 19.65582, 19.63418, 19.61992, 19.60952, 19.58867, 19.58130, 19.57644, 19.57072, 19.47846, 19.38847, 19.37346, 19.30656, 19.26813, 19.22031, 19.18480, 19.15631, 19.15359, 19.14450, 19.11823, 19.10738, 19.06314, 19.05655, 19.05232, 19.07358, 19.10489, 19.11552, 19.12916, 19.13551, 19.13962, 19.14558, 19.15485, 19.15492, 19.15493, 19.15011, 19.12767, 19.12767, 19.10895, 19.10895, 19.10618, 19.10487, 19.10487, 19.07544, 19.05650, 19.04390, 19.02988, 19.01071, 18.97597, 18.95480, 18.94024, 18.90351, 18.88381, 18.86635, 18.82964, 18.82901, 18.81834, 18.79167, 18.75992, 18.75486, 18.46212, 18.23810, 18.10966, 18.10966, 18.10966, 17.96167, 17.88400, 17.81160, 17.78845, 17.76847, 17.76849, 17.79834, 17.83883, 17.88667, 17.91137, 17.94145, 17.95675, 17.96897, 17.96929, 18.00236, 18.00733, 18.00734, 18.06439, 18.11565, 18.11565, 18.23107, 18.28462, 18.28610, 18.28758, 18.38238, 18.40381, 18.59060, 18.59062, 18.64851, 18.73433, 18.73448, 18.73449, 18.98182, 18.98686, 18.98686, 19.40931, 19.42830, 19.51874, 19.60760, 19.60761, 19.80890, 19.83952, 19.86924, 19.89792, 19.94223, 19.97237, 20.01378, 20.03216, 20.05558, 20.07924, 20.09749, 20.20236, 20.20732, 20.29428, 20.29428, 20.36879, 20.37263, 20.45959, 20.51985, 20.51985, 20.60309, 20.60310, 20.62190, 20.64925, 20.64925, 20.66650, 20.69285, 20.74091, 20.75756, 20.83005, 20.83005, 20.90421, 20.95530, 20.97353, 20.99724, 21.02002, 21.07334, 21.09588, 21.13083, 21.19491, 21.19499, 21.19598, 21.25795, 21.35979, 21.37252, 21.37490, 21.37884, 21.38606, 21.40275, 21.42295, 21.43334, 21.43927, 21.44265, 21.45152, 21.45714, 21.45959, 21.46068, 21.46339, 21.46301, 21.46287, 21.46807, 21.46890, 21.46537, 21.41209, 21.40733, 21.39481, 21.50179, 21.65230, 21.80500, 21.84424, 21.87119, 21.88024, 21.89538, 21.90712, 21.91663, 21.92799, 21.93477, 21.98196, 22.00671, 22.05574, 22.09832, 22.09913, 22.09854, 22.09371, 22.06537, 22.06451, 22.05814, 22.03977, 22.01802, 21.99294, 21.95685, 21.95370, 21.93784, 21.93781, 21.85600, 21.81523, 21.81522, 21.86335, 21.90466, 21.92137, 21.94107, 22.05779, 22.12970, 22.16458, 22.25733, 22.25733, 22.50443, 22.54962, 22.74051, 22.77767, 22.84530, 22.91017, 22.93850, 22.95069, 22.98827, 23.01679, 23.02726, 23.03226, 23.04188, 23.05240, 23.05995, 23.06903, 23.07406, 23.08411, 23.10511, 23.12221, 23.13845, 23.14067, 23.32294, 23.56910, 23.58301, 23.68865, 23.68865, 23.85519, 23.85533, 23.89930, 24.04951, 24.05266, 24.06045, 24.06045, 24.12812, 24.14396, 24.15788, 24.17743, 24.17525, 24.16489, 24.17218, 24.13182, 24.12756, 24.12803, 24.13377, 24.14349, 24.15533, 24.14462, 24.13827, 24.13667, 24.12794, 24.12523, 24.12582, 24.13184, 24.13381, 24.13438, 24.13990, 24.15024, 24.15209, 24.15184, 24.13874, 24.13281, 24.12821, 24.11885, 24.11556, 24.11513, 24.11068, 24.11001, 24.11594, 24.11778, 24.11115, 24.10812, 24.09937, 24.09832, 24.09699, 24.09133, 24.09113, 24.08763, 24.08052, 24.07443, 24.06732, 24.06592, 24.06530, 24.06113, 24.05373, 24.05017, 24.04245, 24.04065, 24.04030, 24.03975, 24.04005, 24.03996, 24.04460, 24.04966, 24.05088, 24.05191, 24.05121, 24.05163, 24.04945, 24.04869, 24.04563, 24.04433, 24.03631, 24.01670, 24.01264, 24.00954, 24.00318, 24.00133, 23.99412, 23.98596, 23.98578, 23.98528, 23.98248, 23.97448, 23.96908, 23.96251, 23.96056, 23.95981, 23.94526, 23.93834, 23.93664, 23.93659, 23.93689, 23.93684, 23.93988, 23.94299, 23.94408, 23.94231, 23.93578, 23.94013, 23.93831, 23.92812, 23.91398, 23.91484, 23.92635, 23.92992, 23.92067, 23.91775, 23.91102, 23.91074, 23.90392, 23.90214, 23.89772, 23.89325, 23.88855, 23.88224, 23.87987, 23.87376, 23.86749, 23.86540, 23.86183, 23.86166, 23.85393, 23.84547, 23.83830, 23.83310, 23.82209, 23.81995, 23.81685, 23.80385, 23.79264, 23.78493, 23.78387, 23.78266, 23.78204, 23.77764, 23.77063, 23.75293, 23.74636, 23.73797, 23.73406, 23.73200, 23.73161, 23.73007, 23.72672, 23.72651, 23.72609, 23.72639, 23.72627, 23.72709, 23.72760, 23.72906, 23.72370, 23.72257, 23.71106, 23.70470, 23.69423, 23.69443, 23.69449, 23.69429, 23.69835, 23.69864, 23.69812, 23.68787, 23.68391, 23.67634, 23.66745, 23.66687, 23.66865, 23.66858, 23.67075, 23.66907, 23.66690, 23.66062, 23.66129, 23.66006, 23.65461, 23.65452, 23.64943, 23.64581, 23.65164, 23.65783, 23.65570, 23.65907, 23.65939, 23.66003, 23.66031, 23.65792, 23.65712, 23.66063, 23.66049, 23.66226, 23.66242, 23.66299, 23.66907, 23.67269, 23.67340, 23.67927, 23.68455, 23.68786, 23.68903, 23.68903, 23.68834, 23.68593, 23.68526, 23.68086, 23.67376, 23.67202, 23.67158, 23.67099, 23.66799, 23.66756, 23.66632, 23.66466, 23.65815, 23.65766, 23.65699, 23.65246, 23.64947, 23.64286, 23.64285, 23.64176, 23.64311, 23.64332, 23.64367, 23.64628, 23.64886, 23.65000, 23.65256, 23.65355, 23.65463, 23.65572, 23.67395, 23.68808, 23.69959, 23.70905, 23.71039, 23.71914, 23.72012, 23.71951, 23.71548, 23.71436, 23.72546, 23.72526, 23.72929, 23.73357, 23.73453, 23.73515, 23.73769, 23.73984, 23.74300, 23.74301, 23.75354, 23.75588, 23.75842, 23.76379, 23.77162, 23.77728, 23.78641, 23.79260, 23.79581, 23.79695, 23.79660, 23.79445, 23.79122, 23.78960, 23.78893, 23.78478, 23.78662, 23.80402, 23.83210, 23.83536, 23.83572, 23.83665, 23.84897, 23.85057, 23.85501, 23.85799, 23.86120, 23.86076, 23.86375, 23.87568, 23.87681, 23.87684, 23.87504, 23.87616, 23.87526, 23.87650, 23.87661, 23.88339, 23.88313, 23.88157, 23.87769, 23.87557, 23.87537, 23.87490, 23.87172, 23.87156, 23.86997, 23.87000, 23.86898, 23.87011, 23.87020, 23.87210, 23.87174, 23.86570, 23.86471, 23.87467, 23.87647, 23.87728, 23.87829, 23.88382, 23.88678, 23.88694, 23.88537, 23.88723, 23.88761, 23.89353, 23.89494, 23.90529, 23.90616, 23.90432, 23.89746, 23.88941, 23.88926, 23.88840, 23.88886, 23.88858, 23.88620, 23.87849, 23.87794, 23.87647, 23.87932, 23.88096, 23.89290, 23.89910, 23.90264, 23.90269, 23.90768, 23.91117, 23.91374, 23.91555, 23.91233, 23.90945, 23.90710, 23.90817, 23.90813, 23.91114, 23.91555, 23.92722, 23.93202, 23.93204, 23.93538, 23.94500, 23.95305, 23.95735, 23.96664, 23.97381, 23.97898, 23.98231, 23.98246, 23.98130, 23.97991, 23.97653, 23.97675, 23.98702, 23.98709, 23.98768, 23.98915, 23.98903, 23.98903, 23.98779, 23.99475, 23.99513, 23.99453, 23.99216, 23.98385, 23.97871, 23.97232, 23.97150, 23.97023, 23.96891, 23.96690, 23.95964, 23.95504, 23.95191, 23.95140, 23.94629, 23.94610, 23.94302, 23.94316, 23.94203, 23.94005, 23.93896, 23.93528, 23.92572, 23.91886, 23.91582, 23.91499, 23.91459, 23.91422, 23.91253, 23.91134, 23.91056, 23.90756, 23.89799, 23.88872, 23.88871, 23.88682, 23.88212, 23.87043, 23.86946, 23.86705, 23.86641, 23.86469, 23.86456, 23.86368, 23.86227, 23.86254, 23.86331, 23.86330, 23.86335, 23.86401, 23.86606, 23.86548, 23.86427, 23.86396, 23.86237, 23.86117, 23.86026, 23.85907, 23.86105, 23.85895, 23.85190, 23.83785, 23.83541, 23.82795, 23.82788, 23.82785, 23.82566, 23.81942, 23.81906, 23.81729, 23.81741, 23.81522, 23.80281, 23.80232, 23.79963, 23.79803, 23.79883, 23.79879, 23.80016, 23.79726, 23.76478, 23.75750, 23.74023, 23.73504, 23.72240, 23.71860, 23.71517, 23.71460, 23.71311, 23.71083, 23.70271, 23.69896, 23.69302, 23.69057, 23.68398, 23.67818, 23.67091, 23.66339, 23.66658, 23.66717, 23.66308, 23.66294, 23.65927, 23.65657, 23.65467, 23.65158, 23.63702, 23.62933, 23.62404, 23.62256, 23.61918, 23.61279, 23.60989, 23.60634, 23.60572, 23.59915, 23.59621, 23.59540, 23.59380, 23.59202, 23.59100, 23.58698, 23.58290, 23.57752, 23.57386, 23.56912, 23.55510, 23.55232, 23.55199, 23.55119, 23.55166, 23.55142, 23.55527, 23.55835, 23.55905, 23.56090, 23.56242, 23.56799, 23.56936, 23.57332, 23.58448, 23.58525, 23.58812, 23.58780, 23.58723, 23.58507, 23.58509, 23.58504, 23.58706, 23.59013, 23.59460, 23.59513, 23.59372, 23.58712, 23.58649, 23.58611, 23.58009, 23.57810, 23.56297, 23.55626, 23.55599, 23.55022, 23.54627, 23.54697, 23.54696, 23.54605, 23.54924, 23.55112, 23.55463, 23.55940, 23.55932, 23.55446, 23.55358, 23.55152, 23.55542, 23.55895, 23.56664, 23.56751, 23.56158, 23.56118, 23.57530, 23.58432, 23.59050, 23.60056, 23.60472, 23.61164, 23.61764, 23.61917, 23.63083, 23.64168, 23.64648, 23.66695, 23.67599, 23.67975, 23.68804, 23.69373, 23.70064, 23.71322, 23.71971, 23.72492, 23.73572, 23.74124, 23.74925, 23.74899, 23.75522, 23.75598, 23.75538, 23.76278, 23.77287, 23.77121, 23.76046, 23.75798, 23.75294, 23.74527, 23.74130, 23.73864, 23.73769, 23.73895, 23.73872, 23.73347, 23.73244, 23.72968, 23.73015, 23.72953, 23.73167, 23.73169, 23.73181, 23.73379, 23.73224, 23.72809, 23.72778, 23.71791, 23.71707, 23.72072, 23.72115, 23.72120, 23.72274, 23.72953, 23.73358, 23.73599, 23.73877, 23.73956, 23.74671, 23.75140, 23.75067, 23.75171, 23.75170, 23.75621, 23.75995, 23.76244, 23.76390, 23.76047, 23.75800, 23.75312, 23.74446, 23.72137, 23.70755, 23.69824, 23.69184, 23.68947, 23.68871, 23.68218, 23.66804, 23.66198, 23.65753, 23.64480, 23.61733, 23.61569, 23.61090, 23.60336, 23.59911, 23.59259, 23.58228, 23.57421, 23.56429, 23.56257, 23.54697, 23.54155, 23.53505, 23.53003, 23.52631, 23.51839, 23.51838, 23.51772, 23.51647, 23.51363, 23.50934, 23.50387, 23.50289, 23.50199, 23.49661, 23.48408, 23.45641, 23.44772, 23.43935, 23.43083, 23.41269, 23.41045, 23.40999, 23.40717, 23.40711, 23.40710, 23.40709, 23.40544, 23.40569, 23.40537, 23.40401, 23.40343, 23.39642, 23.39599, 23.39553, 23.39467, 23.39415, 23.39421, 23.39456, 23.39632, 23.39884, 23.39933, 23.40433, 23.40653, 23.40685, 23.41068, 23.41950, 23.42434, 23.43002, 23.43316, 23.43510, 23.43422, 23.43606, 23.45402, 23.45532, 23.45568, 23.46194, 23.46760, 23.46839, 23.47366, 23.47479, 23.47581, 23.47670, 23.47670, 23.47678, 23.47724, 23.47865, 23.48150, 23.48396, 23.48396, 23.48300, 23.47684, 23.46802, 23.46629, 23.46628, 23.46627, 23.46522, 23.45577, 23.45971, 23.46030, 23.46394, 23.47092, 23.47914, 23.47925, 23.48452, 23.48749, 23.49085, 23.49463, 23.49626, 23.49839, 23.50367, 23.50815, 23.51345, 23.51385, 23.51828, 23.52132, 23.52503, 23.52575, 23.52771, 23.52861, 23.52894, 23.53128, 23.53490, 23.53949, 23.54013, 23.54268, 23.54451, 23.54381, 23.54307, 23.54343, 23.54194, 23.53834, 23.53835, 23.53826, 23.53920, 23.54611, 23.54747, 23.54851, 23.55268, 23.55692, 23.55788, 23.55250, 23.55217, 23.54805, 23.54747, 23.54430, 23.54400, 23.54397, 23.54029, 23.53960, 23.53864, 23.53889, 23.53888, 23.53989, 23.53995, 23.53937, 23.53636, 23.53515, 23.53010, 23.52559, 23.52495, 23.52065, 23.51582, 23.51457, 23.51367, 23.51355, 23.51235, 23.51043, 23.49224, 23.49117, 23.49234, 23.49234, 23.49524, 23.49708, 23.49819, 23.49643, 23.48961, 23.48929, 23.49244, 23.49219, 23.48923, 23.48696, 23.48644, 23.48249, 23.48172, 23.47739, 23.47746, 23.48091, 23.48092, 23.48266, 23.48339, 23.48362, 23.48356, 23.48305, 23.48261, 23.47754, 23.47846, 23.47864, 23.47869, 23.48081, 23.48451, 23.48599, 23.48627, 23.47505, 23.47658, 23.47749, 23.47809, 23.48150, 23.48260, 23.48569, 23.48842, 23.48970, 23.49143, 23.49073, 23.48912, 23.48914, 23.48900, 23.49078, 23.49088, 23.48396, 23.48346, 23.48348, 23.48318, 23.48477, 23.48617, 23.48675, 23.49015, 23.49204, 23.49252, 23.49332, 23.49373, 23.49312, 23.49237, 23.48289, 23.47947, 23.47241, 23.47303, 23.47836, 23.48192, 23.47747, 23.48003, 23.48046, 23.48320, 23.48769, 23.48806, 23.49122, 23.49101, 23.49261, 23.49419, 23.49434, 23.49566, 23.49599, 23.50270, 23.50420, 23.50422, 23.50581, 23.51295, 23.51542, 23.51734, 23.52038, 23.52051, 23.52066, 23.52260, 23.52583, 23.53395, 23.54076, 23.54541, 23.54581, 23.54819, 23.54911, 23.55195, 23.55255, 23.55329, 23.55394, 23.55687, 23.56076, 23.56944, 23.57116, 23.57501, 23.57953, 23.58680, 23.58685, 23.58731, 23.59014, 23.59024, 23.59035, 23.59165, 23.59492, 23.60854, 23.61010, 23.61085, 23.61358, 23.62084, 23.62332, 23.62450, 23.62648, 23.63085, 23.63820, 23.64134, 23.64412, 23.64551, 23.64590, 23.64542, 23.64492, 23.64454, 23.64540, 23.64593, 23.64767, 23.65397, 23.65484, 23.65505, 23.65581, 23.65701, 23.66044, 23.66172, 23.66373, 23.66434, 23.66351, 23.66186, 23.65905, 23.65680, 23.65302, 23.65121, 23.65099, 23.65052, 23.65069, 23.65064, 23.64993, 23.65142, 23.65229, 23.65226, 23.65100, 23.64566, 23.63668, 23.62888, 23.61936, 23.61469, 23.60954, 23.60324, 23.59226, 23.58002, 23.57664, 23.57632, 23.57512, 23.57364, 23.57337, 23.57129, 23.56537, 23.55824, 23.54490, 23.54475, 23.53983, 23.53474, 23.53561, 23.53601, 23.53469, 23.53126, 23.53028, 23.52626, 23.52444, 23.51893, 23.51289, 23.50795, 23.50189, 23.49650, 23.49625, 23.48977, 23.48380, 23.48330, 23.47966, 23.46900, 23.46546, 23.46346, 23.46440, 23.46429, 23.46595, 23.46573, 23.46486, 23.46165, 23.45756, 23.45202, 23.44741, 23.44300, 23.43936, 23.43049, 23.41594, 23.41543, 23.40912, 23.40820, 23.40329, 23.40174, 23.39831, 23.39322, 23.38912, 23.38870, 23.38864, 23.38845, 23.38643, 23.38562, 23.38452, 23.38606, 23.38531, 23.38149, 23.38003, 23.37625, 23.37368, 23.37082, 23.36974, 23.37062, 23.37157, 23.37091, 23.36796, 23.36016, 23.35826, 23.35690, 23.35403, 23.35088, 23.34647, 23.34514, 23.34088, 23.33977, 23.33741, 23.33731, 23.33718, 23.33708, 23.33423, 23.33289, 23.32511, 23.32993, 23.33010, 23.32145, 23.32163, 23.32031, 23.31875, 23.31547, 23.31240, 23.31080, 23.30802, 23.30629, 23.30685, 23.30621, 23.30302, 23.30216, 23.29718, 23.29388, 23.29147, 23.28944, 23.28832, 23.28670, 23.28358, 23.28355, 23.27666, 23.27310, 23.26772, 23.26193, 23.25963, 23.25735, 23.25677, 23.25665, 23.25420, 23.25239, 23.25111, 23.24815, 23.24805, 23.24793, 23.24592, 23.22862, 23.22172, 23.21705, 23.20915, 23.20880, 23.20780, 23.20697, 23.20455, 23.20333, 23.19400, 23.18529, 23.17063, 23.16684, 23.16233, 23.15186, 23.14012, 23.14058, 23.14152, 23.14312, 23.14379, 23.14321, 23.14201, 23.14196, 23.14112, 23.14172, 23.14173, 23.14163, 23.14832, 23.14909, 23.15273, 23.15802, 23.16147, 23.16170, 23.16143, 23.16020, 23.15750, 23.15246, 23.15079, 23.14705, 23.14183, 23.14163, 23.14159, 23.14161, 23.14087, 23.14527, 23.14532, 23.14315, 23.14213, 23.14212, 23.14194, 23.14211, 23.14210, 23.14538, 23.14840, 23.14995, 23.15158, 23.15106, 23.14830, 23.14595, 23.14568, 23.14495, 23.14449, 23.14204, 23.13873, 23.13677, 23.13072, 23.13037, 23.12971, 23.12902, 23.12662, 23.12133, 23.12129, 23.11337, 23.11248, 23.11245, 23.10895, 23.10493, 23.10263, 23.09976, 23.09288, 23.09092, 23.07941, 23.07758, 23.07720, 23.07679, 23.07629, 23.07378, 23.07243, 23.06894, 23.06380, 23.06189, 23.06257, 23.06513, 23.06660, 23.06862, 23.06832, 23.06583, 23.06329, 23.05873, 23.05456, 23.05082, 23.05005, 23.03726, 23.03547, 23.03428, 23.02885, 23.00796, 22.98759, 22.98054, 22.97733, 22.97589, 22.97571, 22.97420, 22.97297, 22.96965, 22.96561, 22.96228, 22.94812, 22.93177, 22.92749, 22.91706, 22.91591, 22.91544, 22.91440, 22.91410, 22.91332, 22.91066, 22.91049, 22.90925, 22.90764, 22.90784, 22.90599, 22.89799, 22.89521, 22.89277, 22.88342, 22.87712, 22.87522, 22.87135, 22.85702, 22.85196, 22.84578, 22.83493, 22.83507, 22.83428, 22.83573, 22.83657, 22.84006, 22.84304, 22.84429, 22.84464, 22.84321, 22.83836, 22.83781, 22.82949, 22.81303, 22.81138, 22.81013, 22.80524, 22.80451, 22.80060, 22.79793, 22.79470, 22.79459, 22.77926, 22.76632, 22.75836, 22.74872, 22.74641, 22.74336, 22.73706, 22.73585, 22.73555, 22.73504, 22.73209, 22.73158, 22.72882, 22.72843, 22.72658, 22.72671, 22.72659, 22.72482, 22.71408, 22.69470, 22.68589, 22.68525, 22.68708, 22.68845, 22.69128, 22.69143, 22.68392, 22.68354, 22.67866, 22.67589, 22.67363, 22.66830, 22.66313, 22.65648, 22.65592, 22.65485, 22.65417, 22.64932, 22.64797, 22.64600, 22.63974, 22.64078, 22.64082, 22.64142, 22.64348, 22.64005, 22.63501, 22.62307, 22.62182, 22.61998, 22.61976, 22.61990, 22.61938, 22.61941, 22.61771, 22.60259, 22.58992, 22.58132, 22.57653, 22.57242, 22.57151, 22.57127, 22.56727, 22.56234, 22.56156, 22.55950, 22.55646, 22.55207, 22.54847, 22.53921, 22.53608, 22.53589, 22.53582, 22.53451, 22.52717, 22.51731, 22.50301, 22.49050, 22.48247, 22.47204, 22.46906, 22.46825, 22.46822, 22.46819, 22.46670, 22.46411, 22.45976, 22.45596, 22.45318, 22.43705, 22.43699, 22.43670, 22.43641, 22.43381, 22.42946, 22.42585, 22.42124, 22.42031, 22.41962, 22.41620, 22.41153, 22.41075, 22.40365, 22.40307, 22.39653, 22.37773, 22.35766, 22.35261, 22.34307, 22.34044, 22.34549, 22.34242, 22.34362, 22.34899, 22.34074, 22.34817, 22.34829, 22.34802, 22.34989, 22.34963, 22.34663, 22.33417, 22.32622, 22.30780, 22.30065, 22.29648, 22.29245, 22.28885, 22.28780, 22.28593, 22.28264, 22.28195, 22.28153, 22.28099, 22.26662, 22.26461, 22.26111, 22.25477, 22.24990, 22.22285, 22.22235, 22.22209, 22.21879, 22.21776, 22.21524, 22.21240, 22.20969, 22.20853, 22.20849, 22.20838, 22.20649, 22.20622, 22.20400, 22.20114, 22.19765, 22.18643, 22.17650, 22.15827, 22.15431, 22.15297, 22.15246, 22.12856, 22.12794, 22.12627, 22.12516, 22.12352, 22.12275, 22.11744, 22.11475, 22.11136, 22.10344, 22.10089, 22.09969, 22.09727, 22.08669, 22.07738, 22.06967, 22.06496, 22.05770, 22.04446, 22.04108, 22.03974, 22.03425, 22.03170, 22.02796, 22.02643, 22.02070, 22.01972, 22.01110, 22.00993, 22.00842, 22.00564, 21.99611, 21.99625, 21.99602, 21.99691, 21.99726, 21.99812, 22.00279, 22.00380, 22.00471, 22.00726, 22.00762, 22.00612, 22.00091, 21.99656, 21.99530, 21.99520, 21.99507, 21.99232, 21.99126, 21.99123, 21.99105, 21.98793, 21.98690, 21.97027, 21.97048, 21.96965, 21.96855, 21.96728, 21.94756, 21.93806, 21.92883, 21.92053, 21.90881, 21.90698, 21.90582, 21.90551, 21.90547, 21.90035, 21.89766, 21.89435, 21.89188, 21.88821, 21.88483, 21.88239, 21.87701, 21.86988, 21.86412, 21.86172, 21.86402, 21.86344, 21.86297, 21.85839, 21.84772, 21.84098, 21.83898, 21.83342, 21.82856, 21.82312, 21.81997, 21.80600, 21.80365, 21.80128, 21.79862, 21.78642, 21.78547, 21.78088, 21.77482, 21.77331, 21.77086, 21.73216, 21.72665, 21.72015, 21.71650, 21.71473, 21.71388, 21.70158, 21.70087, 21.70053, 21.70044, 21.70007, 21.70002, 21.69998, 21.69981, 21.69973, 21.69931, 21.70141, 21.70314, 21.71168, 21.71147, 21.70980, 21.71001, 21.70998, 21.70976, 21.70062, 21.69773, 21.68714, 21.68211, 21.66601, 21.66562, 21.66377, 21.65542, 21.65308, 21.65309, 21.62794, 21.62754, 21.62631, 21.62311, 21.62335, 21.62287, 21.62364, 21.62371, 21.62341, 21.61743, 21.60562, 21.59673, 21.58390, 21.57096, 21.56731, 21.56778, 21.56735, 21.56701, 21.56317, 21.55528, 21.54912, 21.53436, 21.52990, 21.51072, 21.51001, 21.50720, 21.50451, 21.50222, 21.50068, 21.49911, 21.49434, 21.48645, 21.48391, 21.47715, 21.47510, 21.47359, 21.46599, 21.45744, 21.44912, 21.43919, 21.43534, 21.42080, 21.41801, 21.42275, 21.42153, 21.41460, 21.41340, 21.41356, 21.41276, 21.41523, 21.41971, 21.42072, 21.42172, 21.42194, 21.40966, 21.41416, 21.41450, 21.41354, 21.41173, 21.40773, 21.40642, 21.40508, 21.40642, 21.40626, 21.40676, 21.40707, 21.41146, 21.41127, 21.40856, 21.40742, 21.40715, 21.40555, 21.40447, 21.40408, 21.40141, 21.39247, 21.39013, 21.39033, 21.38386, 21.37291, 21.36702, 21.36197, 21.35692, 21.35034, 21.34555, 21.33918, 21.33364, 21.33262, 21.33223, 21.33048, 21.33010, 21.32973, 21.32577, 21.32389, 21.31936, 21.31133, 21.30992, 21.30783, 21.29909, 21.29514, 21.29292, 21.28670, 21.27992, 21.26976, 21.26167, 21.26136, 21.26049, 21.26060, 21.25970, 21.26175, 21.25935, 21.25564, 21.25497, 21.25197, 21.25271, 21.25234, 21.25216, 21.25062, 21.24797, 21.24396, 21.24010, 21.23847, 21.23861, 21.23742, 21.23266, 21.22513, 21.21357, 21.20749, 21.20381, 21.20360, 21.19009, 21.18716, 21.18471, 21.18393, 21.18375, 21.18374, 21.18364, 21.18372, 21.18356, 21.18234, 21.17852, 21.17397, 21.17168, 21.16891, 21.16569, 21.16183, 21.15603, 21.15186, 21.14393, 21.14229, 21.14445, 21.14360, 21.13036, 21.13038, 21.12998, 21.12692, 21.12063, 21.10872, 21.10582, 21.10128, 21.09859, 21.08783, 21.08099, 21.07990, 21.07906, 21.07766, 21.07736, 21.07652, 21.07635, 21.07650, 21.07476, 21.07123, 21.07099, 21.06626, 21.06575, 21.05173, 21.04944, 21.04823, 21.04574, 21.04428, 21.03243, 21.03226, 21.02917, 21.02636, 21.02862, 21.02942, 21.02908, 21.01608, 21.01450, 21.01147, 21.00877, 21.00544, 21.00178, 20.99801, 20.99367, 20.99352, 20.99087, 20.99060, 20.98764, 20.98065, 20.97605, 20.97555, 20.96899, 20.96509, 20.96238, 20.96159, 20.95835, 20.95682, 20.95744, 20.95746, 20.95711, 20.95560, 20.95446, 20.95343, 20.94447, 20.94302, 20.94028, 20.93889, 20.93386, 20.93007, 20.91805, 20.91342, 20.90675, 20.90235, 20.88859, 20.88216, 20.88177, 20.88145, 20.87723, 20.87817, 20.87788, 20.87957, 20.88773, 20.89836, 20.90167, 20.90301, 20.90213, 20.89961, 20.89797, 20.89730, 20.89451, 20.89217, 20.89144, 20.89044, 20.89021, 20.88967, 20.88778, 20.88564, 20.88353, 20.88212, 20.88106, 20.87930, 20.87746, 20.87325, 20.86472, 20.85238, 20.84320, 20.85564, 20.86191, 20.86412, 20.86598, 20.87105, 20.87110, 20.87118, 20.89031, 20.89224, 20.89474, 20.89852, 20.90913, 20.91189, 20.91280, 20.90747, 20.90147, 20.88881, 20.88360, 20.88286, 20.87760, 20.86673, 20.84318, 20.83496, 20.83036, 20.82768, 20.82567, 20.82062, 20.81655, 20.81560, 20.81377, 20.81196, 20.80631, 20.78330, 20.77632, 20.76798, 20.74227, 20.74172, 20.74018, 20.72860, 20.71663, 20.70308, 20.68868, 20.68755, 20.68337, 20.67635, 20.66904, 20.66839, 20.66816, 20.66237, 20.65958, 20.65591, 20.64153, 20.62757, 20.61610, 20.60696, 20.60470, 20.60193, 20.60012, 20.59806, 20.59361, 20.59195, 20.59091, 20.59056, 20.58949, 20.58763, 20.58478, 20.57937, 20.57847, 20.57616, 20.57501, 20.57402, 20.56923, 20.55923, 20.55009, 20.54875, 20.54856, 20.52976, 20.46890, 20.44019, 20.30307, 20.19423, 20.14320, 20.07702, 20.06008, 20.10835, 20.13077, 20.18828, 20.23786, 20.26289, 20.30658, 20.30939, 20.31372, 20.32184, 20.32924, 20.33586, 20.31627, 20.30097, 20.27384, 20.24667, 20.21629, 20.20282, 20.16139, 20.08364, 20.05224, 20.03242, 19.93751, 20.00171, 20.02587, 20.06663, 20.14056, 20.22653, 20.21971, 20.01588, 20.01121, 19.97795, 19.95453, 19.92251, 19.92135, 18.98367, 18.71739, 18.68495, 18.63100, 18.62112, 18.55251, 18.49564, 18.48552, 18.47749, 18.40558, 18.39277, 18.33187, 18.29991, 18.22635, 18.14571, 18.12591, 18.12031, 18.11773, 18.11281, 18.11066, 18.10587, 18.10423, 18.10138, 18.10108, 18.10173, 18.10780, 18.11276, 18.11461, 18.12289, 18.12687, 18.13064, 18.13614, 18.13888, 18.14403, 18.15135, 18.13908, 18.12534, 18.09580, 18.06234, 18.05232, 18.03558, 18.03463, 18.02342, 18.01467, 17.99375, 17.98735, 17.91554, 17.89976, 17.89975, 17.89971, 17.71221, 17.66468, 17.59987, 17.28149, 17.18057, 16.95383, 16.84011, 16.83338, 16.81156, 16.73810, 16.73230, 16.72472, 16.70358, 16.69242, 16.67892, 16.66147, 16.63798, 16.62485, 16.61756, 16.60101, 16.58051, 16.55831, 16.55629, 16.49497, 16.41937, 16.40756, 16.37917, 16.28559, 16.24912, 16.15800, 16.09213, 16.08983, 16.15192, 16.17996, 16.21142, 16.26464, 16.29275, 16.32998, 16.36540, 16.40410, 16.40381, 16.40256, 16.40255, 16.38780, 16.38776, 16.38775, 16.38775, 16.38752, 16.36286, 16.30639, 16.27778, 16.25204, 16.19395, 16.03909, 15.99364, 15.99364, 15.99364, 15.99360, 15.90694, 15.86355, 15.86140, 15.85890, 15.78897, 15.76811, 15.73679, 15.73566, 15.62700, 15.62137, 15.55581, 15.53336, 15.52014, 15.51732, 15.45106, 15.38048, 15.37723, 15.38600, 15.40859, 15.41345, 15.43041, 15.44067, 15.44206, 15.45394, 15.45399, 15.47425, 15.48281, 15.48474, 15.48473, 15.48473, 15.45051, 15.42491, 15.34573, 15.30557, 15.22922, 15.19541, 15.12681, 15.03568, 15.03381, 14.95119, 14.95113, 14.91880, 14.86781, 14.86372, 14.80440, 14.74367, 14.68384, 14.61072, 14.59115, 14.51632, 14.51715, 14.52880, 14.53663, 14.57313, 14.57913, 14.58441, 14.59393, 14.62548, 14.62548, 14.62548, 14.60053, 14.57885, 14.54147, 14.53082, 14.52987, 14.52984, 14.52141, 14.51425, 14.50617, 14.50309, 14.49877, 14.49944, 14.49948, 14.50095, 14.50095, 14.50377, 14.50379, 14.50683, 14.47456, 14.41157, 14.37880, 14.37822, 14.32742, 14.32598, 14.31665, 14.13435, 14.12989, 14.09370, 14.07730, 14.07178, 13.95971, 13.93127, 13.91647, 13.87338, 13.85528, 13.81732, 13.79466, 13.75736, 13.71020, 13.70553, 13.68328, 13.68312, 13.65426, 13.89165, 14.05534, 14.08533, 14.11390, 14.11882, 14.12278, 14.12487, 14.12677, 14.12923, 14.13934, 14.14471, 14.14832, 14.15299, 14.15691, 14.15713, 14.15706, 14.12470, 14.11176, 14.09497, 14.07063, 14.05343, 14.02657, 14.01225, 13.99021, 13.96753, 13.91593, 13.88856, 13.84249, 13.81060, 13.80444, 13.78511, 13.71540, 13.71112, 13.27720, 13.27658, 13.21355, 13.21111, 13.14512, 13.08491, 12.99825, 12.92672, 12.88463, 12.74631, 12.68357, 12.67428, 12.65176, 12.61199, 12.60987, 12.57792, 12.55166, 12.53821, 12.52218, 12.49856, 12.48023, 12.44080, 12.42161, 12.40259, 12.38060, 12.34710, 12.33057, 12.31150, 12.29946, 12.25926, 12.22725, 12.19741, 12.17352, 12.14977, 12.15278, 12.21287, 12.21286, 12.21288, 12.21096, 12.08576, 12.08408, 12.07011, 11.99001, 11.97458, 11.97468, 12.02888, 12.10087, 12.10439, 12.11871, 12.14129, 12.16993, 12.19948, 12.21823, 12.17041, 12.15003, 12.13478, 12.09731, 12.07531, 12.07487, 12.13048, 12.13637, 12.11178, 12.09709, 12.09136, 12.08131, 12.07382, 12.06543, 12.05614, 12.05816, 12.29639, 12.29937, 12.29552, 12.27651, 12.27071, 12.26124, 12.25836, 12.24679, 12.23827, 12.23773, 12.23214, 12.22474, 12.22070, 12.21358, 12.20451, 12.20100, 12.19379, 12.18927, 12.18483, 12.18268, 12.17749, 12.17173, 12.16820, 12.16125, 12.15101, 12.14426, 12.13767, 12.14989, 12.18990, 12.27042, 12.27563, 12.31494, 12.34123, 12.36323, 12.39326, 12.41961, 12.43531, 12.44657, 12.44660, 12.44660, 12.49193, 12.56932, 12.62122, 12.65470, 12.68116, 12.72291, 12.74395, 12.77018, 12.80510, 12.84344, 12.87084, 12.86054, 12.85310, 12.84484, 12.83721, 12.83383, 12.82382, 12.80698, 12.79035, 12.76905, 12.75175, 12.74041, 12.70703, 12.70107, 12.69483, 12.68727, 12.68371, 12.68261, 12.68256, 12.68140, 12.67138, 12.67124, 12.67116, 12.67018, 12.66842, 12.65783, 12.65764, 12.61252, 12.61239, 12.60192, 12.60101, 12.59770, 12.59717, 12.59668, 12.54143, 12.54071, 12.48758, 12.44760, 12.44425, 12.39604, 12.37932, 12.34220, 12.29480, 12.25597, 12.25485, 12.23977, 12.22399, 12.22576, 12.33324, 12.33311, 12.33322, 12.33449, 12.34056, 12.34944, 12.36456, 12.37464, 12.38202, 12.39470, 12.39537, 12.41063, 12.41105, 12.45726, 12.46106, 12.48163, 12.51102, 12.51304, 12.51578, 12.51803, 12.58062, 12.58186, 12.60688, 12.60685, 12.60678, 12.60632, 12.60607, 12.60605, 12.60605, 12.60605, 12.60492, 12.58586, 12.56991, 12.54786, 12.54764, 12.54763, 12.54734, 12.53827, 12.53574, 12.53566, 12.49880, 12.49961, 12.50426, 12.50440, 12.50442, 12.50480, 12.51442, 12.51484, 12.52007, 12.52502, 12.54191, 12.54190, 12.54191, 12.50546, 12.50518, 12.50411, 12.50237, 12.50064, 12.49747, 12.49743, 12.49530, 12.48052, 12.45979, 12.44962, 12.44856, 12.42484, 12.39566, 12.38084, 12.37732, 12.36935, 12.34134, 12.34113, 12.29338, 12.28026, 12.24254, 12.23990, 12.23105, 12.17441, 12.17439, 12.17429, 12.17281, 12.17260, 12.16738, 12.15528, 12.15525, 12.15519, 12.15023, 12.12612, 12.09979, 12.05346, 12.04559, 12.04075, 12.03342, 12.02659, 12.02411, 12.01113, 11.98583, 11.98422, 11.98421, 11.94208, 11.94208, 11.94185, 11.93508, 11.92835, 11.92344, 11.92129, 11.92254, 11.91646, 11.91162, 11.91157, 11.91129, 11.90113, 11.89843, 11.89718, 11.89542, 11.89451, 11.89356, 11.89131, 11.89024, 11.88536, 11.88442, 11.88278, 11.88264, 11.88186, 11.88137, 11.88318, 11.88342, 11.88441, 11.88494, 11.88843, 11.88483, 11.87181, 11.87121, 11.86865, 11.86667, 11.86460, 11.86304, 11.86132, 11.85965, 11.85953, 11.85831, 11.85575, 11.85404, 11.85231, 11.85142, 11.84964, 11.84664, 11.84405, 11.84143, 11.84029, 11.84155, 11.84286, 11.84751, 11.84905, 11.85059, 11.85384, 11.85928, 11.86253, 11.86590, 11.86885, 11.87089, 11.87335, 11.87392, 11.87537, 11.87859, 11.87894, 11.87912, 11.88508, 11.88535, 11.88709, 11.89001, 11.89366, 11.89510, 11.89675, 11.89990, 11.90130, 11.90318, 11.90462, 11.90480, 11.90612, 11.90642, 11.90802, 11.90920, 11.91120, 11.91402, 11.92355, 11.92359, 11.92364, 11.92597, 11.92698, 11.92624, 11.92616, 11.92645, 11.93143, 11.93225, 11.93232, 11.93231, 11.93366, 11.93201, 11.92561, 11.92531, 11.92476, 11.92431, 11.92551, 11.92706, 11.93016, 11.93247, 11.93354, 11.93353, 11.93353, 11.93353, 11.93348, 11.93324, 11.93296, 11.93299, 11.93353, 11.93360, 11.93371, 11.93335, 11.93365, 11.93528, 11.93712, 11.93958, 11.94018, 11.93914, 11.93893, 11.93721, 11.93685, 11.93684, 11.93683, 11.93662, 11.93653, 11.93665, 11.93614, 11.93687, 11.93766, 11.93776, 11.93768, 11.93831, 11.93826, 11.94325, 11.94599, 11.94076, 11.94035, 11.94009, 11.93988, 11.93143, 11.90183, 11.88924, 11.88754, 11.87817, 11.87527, 11.87031, 11.86245, 11.86071, 11.85619, 11.85571, 11.84950, 11.83337, 11.82314, 11.78120, 11.72061, 11.71734, 11.71596, 11.70819, 11.70378, 11.69805, 11.69116, 11.72873, 11.74553, 11.74587, 11.74689, 11.75321, 11.75348, 11.75826, 11.75997, 11.76107, 11.77415, 11.77750, 11.77989, 11.79191, 11.78988, 11.80814, 11.81161, 11.81625, 11.81808, 11.81817, 11.82154, 11.82117, 11.82129, 11.83013, 11.82949, 11.82640, 11.82628, 11.82627, 11.81262, 11.81192, 11.81183, 11.80536, 11.80100, 11.79939, 11.79797, 11.79625, 11.79166, 11.78412, 11.78385, 11.78302, 11.78296, 11.78298, 11.78305, 11.78393, 11.78161, 11.78148, 11.78074, 11.77827, 11.77475, 11.77479, 11.77572, 11.77652, 11.77635, 11.77615, 11.77706, 11.77661, 11.77802, 11.76940, 11.76519, 11.76494, 11.76396, 11.76369, 11.76397, 11.76411, 11.76430, 11.76678, 11.76793, 11.76846, 11.77149, 11.77162, 11.77348, 11.77501, 11.77618, 11.77637, 11.77762, 11.77810, 11.78003, 11.78013, 11.78021, 11.77898, 11.77779, 11.77705, 11.77706, 11.77710, 11.77621, 11.77585, 11.77539, 11.75272, 11.75047, 11.74919, 11.74428, 11.74101, 11.73900, 11.73810, 11.73390, 11.73379, 11.73370, 11.72121, 11.72062, 11.71963, 11.71950, 11.71469, 11.71053, 11.71018, 11.70538, 11.70381, 11.70369, 11.70181, 11.69802, 11.69504, 11.69452, 11.69454, 11.69405, 11.69288, 11.69260, 11.69201, 11.68986, 11.68928, 11.68883, 11.68701, 11.68601, 11.68493, 11.68481, 11.69062, 11.69126, 11.69174, 11.69202, 11.69203, 11.69207, 11.69224, 11.69217, 11.69353, 11.69289, 11.69294, 11.69156, 11.69022, 11.68644, 11.68653, 11.68794, 11.68902, 11.68767, 11.68908, 11.68764, 11.68751, 11.68632, 11.68183, 11.68175, 11.68168, 11.68189, 11.68142, 11.67975, 11.67749, 11.67554, 11.67483, 11.67478, 11.67564, 11.67587, 11.67364, 11.67100, 11.66840, 11.66638, 11.66377, 11.66018, 11.65967, 11.65927, 11.65992, 11.65860, 11.65285, 11.65204, 11.65204, 11.63136, 11.62949, 11.62802, 11.62631, 11.62264, 11.61765, 11.61382, 11.61242, 11.60110, 11.59066, 11.59064, 11.59063, 11.58787, 11.58523, 11.58506, 11.58332, 11.58264, 11.58167, 11.58050, 11.57956, 11.57848, 11.57827, 11.57757, 11.57711, 11.57673, 11.57536, 11.57411, 11.57376, 11.57278, 11.57263, 11.57194, 11.57052, 11.56981, 11.56959, 11.56791, 11.56623, 11.56546, 11.56540, 11.55828, 11.55827, 11.55757, 11.55518, 11.55247, 11.55183, 11.55028, 11.54893, 11.54771, 11.54576, 11.54592, 11.54406, 11.54251, 11.54057, 11.53987, 11.53922, 11.53923, 11.53918, 11.53897, 11.53889, 11.53864, 11.53782, 11.53769, 11.53719, 11.53700, 11.53641, 11.53523, 11.53487, 11.53430, 11.52628, 11.52003, 11.51959, 11.51759, 11.51756, 11.51282, 11.50094, 11.49786, 11.49468, 11.49244, 11.48933, 11.48614, 11.48328, 11.48294, 11.46353, 11.45746, 11.45745, 11.45745, 11.45744, 11.45602, 11.45626, 11.45626, 11.46366, 11.46350, 11.45989, 11.45968, 11.46233, 11.45712, 11.45388, 11.45397, 11.45776, 11.45812, 11.45890, 11.46443, 11.46460, 11.46413, 11.45737, 11.45319, 11.43994, 11.43070, 11.42921, 11.42755, 11.41930, 11.41925, 11.41420, 11.41344, 11.41342, 11.40190, 11.39458, 11.39204, 11.37376, 11.37047, 11.36682, 11.36206, 11.35547, 11.34184, 11.33977, 11.33622, 11.32927, 11.30724, 11.30251, 11.29620, 11.28886, 11.28601, 11.27499, 11.27064, 11.25829, 11.24653, 11.23990, 11.22769, 11.22504, 11.22486, 11.22450, 11.22044, 11.15605, 11.15321, 11.11953, 11.11721, 11.11255, 11.09142, 11.08169, 11.08089, 11.07174, 11.06680, 11.06350, 11.05930, 11.05630, 11.04617, 11.03114, 10.99246, 10.98401, 10.94073, 10.91791, 10.63892, 10.60521, 10.59208, 10.63909, 10.63914, 10.64145, 10.64372, 10.65108, 10.66117, 10.66117, 10.67936, 10.67937, 10.81760, 10.81850, 10.84838, 10.89193, 10.89489, 10.94234, 10.95957, 10.96333, 10.96521, 10.98926, 11.06298, 11.11939, 11.14757, 11.15054, 11.15853, 11.20256, 11.20854, 11.23132, 11.23135, 11.44426, 11.45356, 11.48137, 11.52086, 11.55750, 11.58585, 11.66662, 11.66759, 11.68417, 11.73365, 11.87796, 12.00580, 12.01343, 12.26089, 12.28221, 12.29743, 12.24118, 12.18409, 12.16395, 12.11746, 12.26068, 12.32589, 12.32591, 12.33531, 12.34614, 12.36382, 12.36382, 12.37918, 12.39747, 12.38838, 12.36074, 12.43616, 12.46999, 12.47310, 12.47424, 12.47525, 12.47663, 12.47853, 12.48067, 12.48384, 12.48668, 12.50314, 12.50764, 12.51990, 12.52915, 12.53291, 12.53479, 12.53641, 12.53830, 12.53931, 12.53982, 12.54296, 12.55783, 12.57361, 12.58422, 12.58637, 12.58789, 12.59043, 12.59193, 12.59286, 12.59376, 12.61205, 12.61307, 12.61354, 12.61724, 12.61739, 12.61783, 12.61966, 12.62119, 12.62297, 12.62464, 12.62628, 12.62718, 12.62781, 12.62908, 12.63316, 12.63347, 12.63446, 12.63583, 12.63672, 12.63808, 12.63908, 12.64034, 12.64148, 12.64211, 12.64301, 12.64389, 12.64429, 12.64481, 12.65120, 12.65151, 12.65258, 12.65341, 12.65398, 12.65440, 12.65468, 12.65484, 12.65514, 12.65531, 12.65550, 12.65568, 12.65574, 12.65594, 12.65600, 12.65605, 12.65609, 12.65602, 12.65612, 12.65617, 12.65604, 12.65600, 12.65589, 12.65582, 12.65574, 12.65563, 12.65510, 12.65458, 12.65381, 12.65339, 12.65305, 12.65263, 12.65246, 12.65246, 12.65244, 12.65236, 12.65174, 12.65095, 12.65079, 12.65049, 12.65037, 12.65022, 12.65016, 12.64986, 12.64956, 12.64956, 12.64944, 12.64858, 12.64580, 12.66107, 12.66129, 12.66223, 12.66551, 12.66597, 12.66841, 12.67149, 12.67329, 12.67537, 12.67746, 12.67825, 12.67848, 12.67866, 12.67910, 12.68625, 12.68639, 12.68751, 12.68824, 12.68883, 12.68929, 12.69043, 12.69883, 12.70850, 12.70903, 12.75949, 12.84734, 12.87786, 12.89571, 12.88894, 12.88185, 12.72993, 12.72744, 12.71813, 12.71568, 12.64402, 12.61219, 12.64189, 12.65279, 12.66872, 12.69023, 12.68999, 12.69454, 12.70193, 12.70193, 12.72200, 12.79194, 12.92479, 12.95374, 12.95674, 12.95871, 12.97334, 12.99545, 13.02449, 13.03694, 13.05392, 13.08335, 13.11280, 13.11280, 13.11484, 13.14478, 13.14478, 13.16675, 13.17588, 13.20400, 13.20770, 13.24022, 13.27367, 13.28284, 13.31293, 13.33507, 13.34362, 13.37443, 13.40515, 13.43545, 13.43545, 13.46379, 13.46379, 13.49147, 13.50766, 13.51816, 13.53758, 13.54383, 13.55300, 13.58978, 13.58978, 13.60195, 13.61141, 13.68047, 13.68048, 13.69551, 13.70803, 13.71695, 13.73482, 13.74532, 13.76062, 13.77466, 13.78541, 13.79947, 13.80990, 13.82003, 13.85481, 13.85666, 13.88312, 13.91299, 13.92433, 13.94418, 13.95465, 13.97645, 14.00935, 14.01940, 14.04274, 14.05855, 14.07629, 14.12177, 14.12177, 14.14699, 14.16882, 14.17230, 14.23635, 14.24520, 14.33677, 14.38731, 14.70163, 14.70168, 14.69049, 14.67844, 14.65987, 14.63694, 14.63694, 14.62940, 14.62714, 14.62599, 14.62358, 14.62115, 14.61342, 14.60873, 14.60560, 14.60047, 14.59442, 14.78140, 14.79989, 14.81161, 14.87501, 14.88357, 14.90796, 14.93463, 14.94039, 14.96592, 14.97185, 15.00751, 15.10453, 15.10692, 15.13949, 15.15276, 15.21405, 15.23157, 15.29954, 15.40602, 15.46752, 15.49049, 15.59897, 15.61968, 15.65852, 15.67836, 15.76675, 15.83983, 15.88612, 15.90755, 15.93039, 15.97268, 16.01623, 16.21717, 16.21717, 16.26442, 16.49456, 16.49456, 16.52666, 16.54597, 16.55749, 16.58666, 16.60722, 16.60722, 16.71880, 16.72858, 16.78268, 16.83618, 16.83895, 16.84045, 16.87549, 16.91058, 16.92647, 16.93772, 16.94390, 16.95513, 16.96857, 16.98080, 16.98102, 16.99249, 16.99249, 16.99493, 17.01158, 17.02778, 17.05227, 17.05531, 17.06062, 17.06578, 17.06578, 17.06962, 17.07017, 17.07436, 17.08010, 17.08735, 17.08990, 17.09776, 17.10492, 17.10492, 17.12783, 17.16789, 17.19910, 17.21340, 17.42197, 17.43091, 17.43508, 17.43727, 17.43727, 17.44300, 17.44301, 17.48476, 17.48476, 17.49056, 17.49744, 17.64082, 15.69387]; this.fk = [69.11, 69.09, 69.04, 69.04, 69.09, 69.1, 69.12, 69.18, 69.19, 69.2, 69.22, 69.23, 69.26, 69.27, 69.28, 69.28, 69.31, 69.3, 69.27, 69.24, 69.24, 69.15, 69.13, 69.13, 69.12, 69.11, 69.09, 69.02, 69.01, 68.96, 68.96, 68.93, 68.93, 68.91, 68.85, 68.83, 68.82, 68.8, 68.79, 68.75, 68.74, 68.72, 68.72, 68.72, 68.73, 68.74, 68.74, 68.74, 68.73, 68.71, 68.7, 68.69, 68.69, 68.69, 68.68, 68.68, 68.63, 68.63, 68.63, 68.64, 68.64, 68.64, 68.66, 68.66, 68.67, 68.67, 68.68, 68.69, 68.7, 68.7, 68.7, 68.7, 68.71, 68.71, 68.75, 68.78, 68.82, 68.84, 68.83, 68.83, 68.83, 68.81, 68.8, 68.79, 68.76, 68.76, 68.75, 68.74, 68.73, 68.73, 68.73, 68.71, 68.69, 68.68, 68.66, 68.65, 68.65, 68.66, 68.64, 68.63, 68.63, 68.62, 68.61, 68.59, 68.56, 68.56, 68.56, 68.55, 68.55, 68.56, 68.57, 68.58, 68.59, 68.59, 68.6, 68.61, 68.61, 68.61, 68.61, 68.62, 68.62, 68.62, 68.62, 68.62, 68.62, 68.62, 68.62, 68.62, 68.63, 68.63, 68.64, 68.64, 68.65, 68.66, 68.66, 68.67, 68.68, 68.69, 68.69, 68.7, 68.7, 68.71, 68.71, 68.72, 68.73, 68.74, 68.75, 68.8, 68.8, 68.8, 68.81, 68.82, 68.83, 68.84, 68.84, 68.85, 68.85, 68.86, 68.86, 68.86, 68.87, 68.88, 68.88, 68.88, 68.88, 68.89, 68.89, 68.89, 68.89, 68.9, 68.9, 68.9, 68.9, 68.9, 68.9, 68.89, 68.89, 68.89, 68.89, 68.89, 68.88, 68.88, 68.88, 68.89, 68.89, 68.89, 68.9, 68.9, 68.92, 68.93, 68.94, 68.94, 68.95, 68.99, 69, 69.01, 69.01, 69.02, 69.11, 69.12, 69.14, 69.15, 69.17, 69.18, 69.19, 69.2, 69.22, 69.23, 69.23, 69.25, 69.26, 69.27, 69.27, 69.28, 69.28, 69.29, 69.3, 69.3, 69.31, 69.31, 69.34, 69.34, 69.35, 69.36, 69.36, 69.37, 69.38, 69.39, 69.39, 69.4, 69.41, 69.42, 69.42, 69.43, 69.43, 69.44, 69.45, 69.46, 69.47, 69.48, 69.49, 69.51, 69.52, 69.53, 69.55, 69.56, 69.57, 69.58, 69.59, 69.61, 69.63, 69.65, 69.65, 69.65, 69.66, 69.67, 69.68, 69.68, 69.69, 69.7, 69.71, 69.72, 69.73, 69.73, 69.74, 69.74, 69.75, 69.75, 69.77, 69.8, 69.81, 69.82, 69.83, 69.85, 69.86, 69.88, 69.89, 69.9, 69.91, 69.92, 69.94, 69.96, 69.96, 69.95, 69.95, 69.95, 69.94, 69.95, 69.95, 69.96, 69.96, 69.95, 69.95, 69.94, 69.93, 69.93, 69.93, 69.93, 69.94, 69.94, 69.94, 69.93, 69.93, 69.92, 69.91, 69.91, 69.91, 69.92, 69.93, 69.93, 69.93, 69.95, 69.95, 69.95, 69.95, 69.96, 69.96, 69.97, 69.98, 69.98, 69.99, 69.99, 69.99, 70, 70.01, 70.02, 70.02, 70.02, 70.02, 70.03, 70.03, 70.04, 70.05, 70.06, 70.06, 70.07, 70.08, 70.07, 70.06, 70.06, 70.07, 70.07, 70.08, 70.09, 70.09, 70.09, 70.05, 70.04, 70.04, 70, 69.92, 69.9, 69.89, 69.88, 69.87, 69.87, 69.86, 69.85, 69.83, 69.82, 69.79, 69.78, 69.69, 69.69, 69.68, 69.67, 69.57, 69.55, 69.53, 69.52, 69.51, 69.49, 69.48, 69.47, 69.46, 69.41, 69.4, 69.31, 69.28, 69.23, 69.22, 69.19, 69.18, 69.16, 69.14, 69.13, 69.12, 69.11, 69.1, 69.09, 69.08, 69.06, 69.05, 69.04, 69.04, 69.02, 69.02, 69.01, 69.02, 69.02, 69.03, 69.03, 69.06, 69.07, 69.11, 69.12, 69.15, 69.18, 69.21, 69.23, 69.24, 69.24, 69.25, 69.25, 69.26, 69.27, 69.29, 69.3, 69.31, 69.31, 69.31, 69.31, 69.33, 69.33, 69.31, 69.32, 69.32, 69.33, 69.35, 69.37, 69.37, 69.39, 69.39, 69.4, 69.4, 69.41, 69.42, 69.42, 69.42, 69.42, 69.41, 69.41, 69.4, 69.41, 69.41, 69.41, 69.42, 69.43, 69.43, 69.43, 69.44, 69.45, 69.46, 69.47, 69.47, 69.47, 69.49, 69.51, 69.52, 69.52, 69.53, 69.53, 69.55, 69.56, 69.58, 69.59, 69.6, 69.62, 69.63, 69.64, 69.64, 69.64, 69.64, 69.65, 69.66, 69.67, 69.67, 69.65, 69.63, 69.63, 69.63, 69.62, 69.61, 69.59, 69.54, 69.54, 69.54, 69.54, 69.54, 69.54, 69.54, 69.54, 69.53, 69.53, 69.53, 69.56, 69.56, 69.57, 69.58, 69.59, 69.61, 69.64, 69.65, 69.66, 69.67, 69.68, 69.67, 69.67, 69.68, 69.69, 69.69, 69.7, 69.7, 69.71, 69.72, 69.72, 69.73, 69.78, 69.78, 69.79, 69.78, 69.78, 69.77, 69.77, 69.76, 69.76, 69.76, 69.79, 69.79, 69.79, 69.98, 70.01, 70.12, 70.12, 70.11, 70.14, 70.24, 70.35, 70.36, 70.4, 70.44, 70.47, 70.5, 70.54, 70.65, 70.67, 70.83, 70.87, 70.94, 70.95, 71.02, 71.12, 71.28, 71.3, 71.32, 71.33, 71.35, 71.36, 71.38, 71.38, 71.34, 71.31, 71.31, 71.3, 71.29, 71.27, 71.19, 71.11, 70.99, 70.98, 70.9, 70.85, 70.79, 70.7, 70.63, 70.56, 70.48, 70.39, 70.35, 70.17, 70.07, 69.99, 69.81, 69.75, 69.71, 69.7, 69.65, 69.6, 69.52, 69.51, 69.39, 69.35, 69.32, 69.25, 69.25, 69.18, 69.08, 69.07, 69, 68.9, 68.85, 68.76, 68.73, 68.61, 68.54, 68.46, 68.46, 68.4, 68.39, 68.34, 68.29, 68.24, 68.15, 68.12, 68.1, 68.01, 67.87, 67.82, 67.78, 67.7, 67.7, 67.62, 67.59, 67.54, 67.47, 67.44, 67.39, 67.34, 67.02, 66.82, 66.71, 66.67, 66.4, 66.19, 65.97, 65.7, 65.57, 65.54, 65.5, 65.47, 65.35, 65.27, 65.05, 64.99, 64.87, 64.78, 64.73, 64.55, 64.36, 64.24, 64.14, 64.04, 63.77, 63.7, 63.58, 63.43, 63.34, 63.31, 63.27, 63.26, 63.25, 63.19, 63.18, 63.15, 63.09, 63.02, 63, 62.97, 62.93, 62.81, 62.75, 62.67, 62.62, 62.47, 62.43, 62.38, 62.29, 62.18, 62.15, 62.03, 61.85, 61.78, 61.71, 61.68, 61.55, 61.54, 61.49, 61.35, 61.23, 61.16, 61.07, 61, 60.83, 60.81, 60.72, 60.69, 60.57, 60.51, 60.44, 60.41, 60.39, 60.31, 60.23, 60.17, 60.1, 60.07, 60.05, 59.91, 59.87, 59.79, 59.76, 59.72, 59.68, 59.67, 59.56, 59.56, 59.5, 59.44, 59.36, 59.31, 59.27, 59.22, 59.18, 59.14, 59.12, 59.07, 59.04, 59, 58.96, 58.92, 58.81, 58.78, 58.76, 58.65, 58.62, 58.6, 58.55, 58.53, 58.5, 58.44, 58.4, 58.36, 58.33, 58.28, 58.16, 58.08, 58.07, 58.06, 58.03, 58.02, 57.97, 57.91, 57.88, 57.88, 57.82, 57.79, 57.77, 57.76, 57.76, 57.76, 57.76, 57.77, 57.78, 57.79, 57.8, 57.83, 57.85, 57.9, 57.92, 57.94, 57.98, 58.02, 58.04, 58.08, 58.13, 58.15, 58.17, 58.25, 58.39, 58.42, 58.43, 58.52, 58.6, 58.67, 58.72, 58.72, 58.73, 58.74, 58.76, 58.77, 58.77, 58.76, 58.76, 58.89, 58.94, 58.96, 58.98, 58.99, 59.01, 59.08, 59.08, 59.09, 59.09, 59.09, 59.09, 59.1, 59.1, 59.1, 59.1, 59.1, 59.1, 59.1, 59.08, 59.08, 59.07, 59.06, 59.06, 59.04, 59.04, 59.03, 59.02, 59.01, 58.99, 58.99, 58.98, 58.97, 58.95, 58.94, 58.93, 58.92, 58.89, 58.89, 58.89, 58.89, 58.89, 58.88, 58.88, 58.88, 58.88, 58.88, 58.88, 58.88, 58.89, 58.89, 58.89, 58.88, 58.88, 58.89, 58.89, 58.89, 58.89, 58.9, 58.9, 58.9, 58.9, 58.9, 58.91, 58.92, 58.92, 58.93, 58.93, 58.94, 58.95, 58.96, 58.98, 58.99, 59.01, 59.01, 59.03, 59.03, 59.04, 59.05, 59.06, 59.07, 59.09, 59.09, 59.1, 59.11, 59.12, 59.12, 59.13, 59.14, 59.15, 59.16, 59.17, 59.18, 59.19, 59.2, 59.21, 59.22, 59.22, 59.23, 59.23, 59.24, 59.25, 59.27, 59.29, 59.31, 59.32, 59.32, 59.33, 59.34, 59.34, 59.35, 59.38, 59.4, 59.41, 59.42, 59.42, 59.43, 59.44, 59.46, 59.47, 59.48, 59.5, 59.51, 59.54, 59.55, 59.56, 59.57, 59.58, 59.59, 59.6, 59.61, 59.61, 59.62, 59.62, 59.63, 59.63, 59.64, 59.64, 59.64, 59.64, 59.64, 59.64, 59.65, 59.65, 59.66, 59.67, 59.68, 59.69, 59.69, 59.69, 59.69, 59.69, 59.69, 59.7, 59.71, 59.72, 59.73, 59.75, 59.75, 59.76, 59.77, 59.78, 59.79, 59.8, 59.82, 59.83, 59.83, 59.83, 59.84, 59.84, 59.85, 59.85, 59.86, 59.87, 59.87, 59.87, 59.88, 59.89, 59.89, 59.9, 59.9, 59.89, 59.89, 59.89, 59.89, 59.89, 59.89, 59.89, 59.89, 59.89, 59.89, 59.89, 59.89, 59.9, 59.9, 59.9, 59.91, 59.93, 59.93, 59.94, 59.94, 59.95, 59.96, 59.96, 59.97, 59.98, 59.98, 59.99, 60, 60.01, 60.02, 60.02, 60.03, 60.04, 60.05, 60.06, 60.07, 60.09, 60.13, 60.14, 60.15, 60.16, 60.19, 60.22, 60.23, 60.24, 60.25, 60.26, 60.28, 60.3, 60.31, 60.32, 60.33, 60.33, 60.34, 60.35, 60.36, 60.36, 60.37, 60.38, 60.39, 60.39, 60.4, 60.41, 60.43, 60.44, 60.48, 60.51, 60.52, 60.53, 60.54, 60.55, 60.57, 60.59, 60.6, 60.61, 60.61, 60.62, 60.63, 60.64, 60.65, 60.66, 60.67, 60.68, 60.7, 60.71, 60.73, 60.75, 60.79, 60.83, 60.84, 60.85, 60.86, 60.87, 60.88, 60.89, 60.9, 60.91, 60.92, 60.92, 60.94, 60.97, 60.98, 60.99, 61, 61.01, 61.03, 61.04, 61.04, 61.04, 61.04, 61.05, 61.05, 61.05, 61.05, 61.05, 61.05, 61.05, 61.05, 61.05, 61.05, 61.05, 61.06, 61.06, 61.06, 61.07, 61.08, 61.09, 61.09, 61.1, 61.12, 61.14, 61.19, 61.22, 61.24, 61.26, 61.27, 61.29, 61.31, 61.32, 61.36, 61.37, 61.39, 61.4, 61.42, 61.43, 61.48, 61.53, 61.55, 61.57, 61.57, 61.57, 61.57, 61.57, 61.56, 61.56, 61.56, 61.58, 61.59, 61.6, 61.62, 61.62, 61.63, 61.69, 61.7, 61.72, 61.75, 61.75, 61.77, 61.8, 61.82, 61.83, 61.85, 61.87, 61.88, 61.89, 61.91, 62, 62.12, 62.15, 62.17, 62.18, 62.2, 62.22, 62.25, 62.26, 62.27, 62.27, 62.38, 62.39, 62.4, 62.41, 62.46, 62.52, 62.58, 62.59, 62.61, 62.62, 62.63, 62.66, 62.68, 62.69, 62.71, 62.71, 62.74, 62.76, 62.83, 62.84, 62.88, 62.9, 62.94, 62.96, 62.97, 62.98, 62.99, 63, 63, 63.01, 63.02, 63.04, 63.05, 63.12, 63.17, 63.26, 63.27, 63.28, 63.33, 63.33, 63.34, 63.34, 63.35, 63.35, 63.39, 63.48, 63.55, 63.56, 63.59, 63.63, 63.65, 63.72, 63.72, 63.73, 63.75, 63.76, 63.78, 63.79, 63.82, 63.83, 63.85, 63.85, 63.89, 63.93, 63.93, 63.96, 63.97, 63.99, 64, 64, 64.01, 64.03, 64.03, 64.04, 64.04, 64.05, 64.07, 64.08, 64.09, 64.09, 64.09, 64.09, 64.1, 64.07, 64.05, 64.05, 64.03, 64.03, 64.02, 64.01, 64.01, 64.03, 64.05, 64.06, 64.09, 64.11, 64.13, 64.15, 64.16, 64.19, 64.2, 64.2, 64.23, 64.3, 64.36, 64.37, 64.38, 64.38, 64.4, 64.44, 64.46, 64.48, 64.48, 64.5, 64.5, 64.55, 64.55, 64.57, 64.58, 64.61, 64.63, 64.71, 64.79, 64.81, 64.82, 64.84, 64.85, 64.86, 64.88, 64.91, 64.94, 64.96, 64.97, 64.98, 64.98, 65, 65.05, 65.07, 65.1, 65.12, 65.13, 65.14, 65.17, 65.19, 65.23, 65.25, 65.28, 65.3, 65.34, 65.36, 65.4, 65.43, 65.44, 65.45, 65.48, 65.49, 65.5, 65.51, 65.53, 65.58, 65.59, 65.63, 65.64, 65.66, 65.67, 65.69, 65.72, 65.73, 65.75, 65.79, 65.8, 65.81, 65.86, 65.87, 65.89, 65.9, 65.92, 65.95, 66.02, 66.07, 66.1, 66.13, 66.13, 66.14, 66.14, 66.14, 66.14, 66.14, 66.16, 66.18, 66.24, 66.24, 66.28, 66.32, 66.34, 66.35, 66.38, 66.4, 66.4, 66.43, 66.43, 66.45, 66.46, 66.47, 66.48, 66.5, 66.53, 66.53, 66.57, 66.58, 66.59, 66.61, 66.62, 66.62, 66.65, 66.66, 66.67, 66.68, 66.7, 66.78, 66.78, 66.85, 66.87, 66.88, 66.91, 66.93, 66.96, 66.96, 66.97, 66.98, 66.98, 66.99, 67.01, 67.02, 67.04, 67.04, 67.06, 67.14, 67.15, 67.16, 67.2, 67.2, 67.22, 67.24, 67.25, 67.27, 67.27, 67.28, 67.29, 67.35, 67.37, 67.41, 67.43, 67.45, 67.48, 67.49, 67.51, 67.52, 67.53, 67.53, 67.53, 67.56, 67.57, 67.57, 67.59, 67.6, 67.64, 67.66, 67.67, 67.69, 67.71, 67.73, 67.74, 67.74, 67.76, 67.77, 67.78, 67.79, 67.8, 67.81, 67.83, 67.84, 67.86, 67.87, 67.92, 67.93, 67.94, 67.94, 67.96, 67.96, 67.99, 68, 68.05, 68.05, 68.06, 68.07, 68.08, 68.08, 68.1, 68.11, 68.12, 68.12, 68.12, 68.11, 68.09, 68.08, 68.07, 68.05, 68.05, 68.01, 68.01, 68, 67.97, 67.97, 68.05, 68.06, 68.13, 68.15, 68.18, 68.19, 68.2, 68.22, 68.31, 68.32, 68.34, 68.36, 68.37, 68.41, 68.43, 68.52, 68.54, 68.55, 68.57, 68.58, 68.58, 68.54, 68.53, 68.51, 68.51, 68.52, 68.52, 68.52, 68.51, 68.5, 68.5, 68.5, 68.49, 68.47, 68.44, 68.42, 68.41, 68.38, 68.38, 68.37, 68.36, 68.35, 68.35, 68.39, 68.39, 68.4, 68.41, 68.42, 68.42, 68.44, 68.46, 68.49, 68.5, 68.52, 68.53, 68.55, 68.56, 68.57, 68.59, 68.59, 68.6, 68.61, 68.63, 68.67, 68.68, 68.7, 68.73, 68.74, 68.75, 68.76, 68.77, 68.77, 68.81, 68.85, 68.86, 68.88, 68.89, 68.91, 68.92, 68.92, 68.93, 68.93, 68.97, 69, 69, 69.03, 69.05, 69.06, 69.06, 69.06, 69.06, 69.06, 69.06, 69.05, 69.06, 69.06, 69.06, 69.06, 69.07, 69.11, 69.12, 69.1, 69.1]; this.fm = [20.78, 20.84, 21.06, 21.07, 21.13, 21.13, 21.07, 21.03, 21.03, 21.03, 21.03, 21.05, 21.11, 21.16, 21.18, 21.22, 21.29, 21.38, 21.65, 21.69, 21.7, 21.83, 21.87, 21.88, 21.89, 21.9, 21.95, 22.08, 22.09, 22.16, 22.17, 22.18, 22.19, 22.2, 22.3, 22.34, 22.34, 22.35, 22.35, 22.36, 22.37, 22.37, 22.38, 22.41, 22.44, 22.49, 22.52, 22.53, 22.57, 22.7, 22.73, 22.8, 23.02, 23.04, 23.06, 23.07, 23.16, 23.17, 23.2, 23.21, 23.22, 23.24, 23.31, 23.32, 23.34, 23.37, 23.39, 23.44, 23.51, 23.55, 23.59, 23.64, 23.64, 23.67, 23.72, 23.75, 23.77, 23.88, 23.93, 23.96, 24, 24.03, 24.05, 24.15, 24.14, 24.15, 24.19, 24.22, 24.24, 24.27, 24.31, 24.47, 24.62, 24.62, 24.67, 24.71, 24.72, 24.73, 24.78, 24.8, 24.79, 24.8, 24.81, 24.83, 24.85, 24.86, 24.87, 24.9, 24.91, 24.91, 24.91, 24.91, 24.91, 24.92, 24.92, 24.92, 24.93, 24.94, 24.95, 24.98, 24.99, 25, 25.01, 25.04, 25.05, 25.06, 25.07, 25.08, 25.08, 25.09, 25.12, 25.13, 25.13, 25.12, 25.13, 25.12, 25.11, 25.11, 25.12, 25.11, 25.12, 25.12, 25.14, 25.14, 25.13, 25.13, 25.13, 25.16, 25.17, 25.18, 25.21, 25.23, 25.24, 25.25, 25.26, 25.27, 25.29, 25.3, 25.31, 25.32, 25.36, 25.38, 25.39, 25.4, 25.41, 25.41, 25.42, 25.43, 25.45, 25.46, 25.47, 25.48, 25.49, 25.51, 25.52, 25.52, 25.53, 25.54, 25.55, 25.57, 25.58, 25.59, 25.61, 25.61, 25.63, 25.64, 25.65, 25.66, 25.68, 25.69, 25.69, 25.7, 25.71, 25.74, 25.76, 25.77, 25.78, 25.79, 25.74, 25.75, 25.76, 25.76, 25.74, 25.73, 25.72, 25.71, 25.72, 25.73, 25.72, 25.72, 25.73, 25.75, 25.74, 25.75, 25.76, 25.75, 25.76, 25.75, 25.76, 25.75, 25.76, 25.78, 25.79, 25.79, 25.81, 25.82, 25.82, 25.84, 25.85, 25.84, 25.83, 25.83, 25.81, 25.82, 25.81, 25.82, 25.83, 25.84, 25.85, 25.87, 25.86, 25.87, 25.89, 25.88, 25.86, 25.88, 25.92, 25.96, 25.97, 25.99, 25.98, 25.97, 25.95, 25.93, 25.92, 25.91, 25.92, 25.94, 25.95, 25.97, 25.99, 26, 26.05, 26.1, 26.13, 26.14, 26.16, 26.17, 26.2, 26.26, 26.26, 26.28, 26.31, 26.37, 26.4, 26.43, 26.43, 26.42, 26.45, 26.47, 26.47, 26.68, 26.69, 26.7, 26.71, 26.72, 26.72, 26.73, 26.74, 26.79, 26.85, 26.86, 26.85, 26.86, 26.86, 26.87, 26.88, 26.91, 26.93, 26.94, 26.96, 26.98, 27, 27.01, 27.02, 27.04, 27.06, 27.1, 27.15, 27.16, 27.17, 27.24, 27.28, 27.29, 27.3, 27.3, 27.29, 27.29, 27.28, 27.29, 27.3, 27.34, 27.36, 27.38, 27.4, 27.45, 27.46, 27.47, 27.53, 27.53, 27.54, 27.54, 27.56, 27.56, 27.57, 27.61, 27.67, 27.71, 27.74, 27.75, 27.76, 27.77, 27.89, 27.91, 27.95, 27.96, 27.98, 27.98, 27.99, 28.01, 28.16, 28.27, 28.3, 28.34, 28.34, 28.35, 28.35, 28.36, 28.42, 28.43, 28.62, 28.63, 29.13, 29.14, 29.14, 29.14, 29.25, 29.27, 29.29, 29.3, 29.32, 29.33, 29.34, 29.32, 29.31, 29.22, 29.2, 29.01, 28.94, 28.83, 28.83, 28.83, 28.83, 28.82, 28.82, 28.81, 28.81, 28.8, 28.82, 28.83, 28.86, 28.93, 28.95, 28.97, 29.01, 29.03, 29.04, 29.04, 29.05, 29.06, 29.08, 29.1, 29.16, 29.19, 29.24, 29.26, 29.28, 29.32, 29.32, 29.33, 29.33, 29.31, 29.31, 29.3, 29.31, 29.31, 29.31, 29.32, 29.35, 29.4, 29.43, 29.45, 29.49, 29.5, 29.55, 29.57, 29.58, 29.62, 29.67, 29.71, 29.72, 29.76, 29.77, 29.79, 29.81, 29.82, 29.84, 29.87, 29.89, 29.92, 29.93, 29.94, 29.95, 29.97, 29.98, 29.99, 30.02, 30.04, 30.05, 30.06, 30.07, 30.09, 30.12, 30.12, 30.13, 30.14, 30.15, 30.14, 30.15, 30.16, 30.18, 30.2, 30.2, 30.19, 30.19, 30.18, 30.16, 30.16, 30.16, 30.16, 30.15, 30.14, 30.11, 30.11, 30.12, 30.13, 30.15, 30.23, 30.3, 30.31, 30.32, 30.37, 30.36, 30.42, 30.51, 30.52, 30.54, 30.62, 30.67, 30.68, 30.72, 30.73, 30.72, 30.75, 30.82, 30.93, 30.94, 30.94, 30.95, 30.95, 30.95, 30.95, 30.94, 30.93, 30.93, 30.94, 30.94, 30.95, 30.95, 30.94, 30.93, 30.91, 30.9, 30.89, 30.88, 30.89, 30.9, 30.84, 30.83, 30.81, 30.8, 30.79, 30.77, 30.76, 30.72, 30.71, 30.69, 30.79, 30.83, 30.82, 31.11, 31.2, 31.51, 31.52, 31.52, 31.59, 31.64, 31.75, 31.76, 31.76, 31.75, 31.71, 31.66, 31.57, 31.22, 31.14, 30.61, 30.45, 30.05, 30.03, 29.57, 29.16, 28.47, 28.34, 27.98, 27.77, 27.06, 26.68, 25.96, 25.6, 24.92, 24.63, 24.34, 23.99, 23.77, 23.67, 23.25, 22.85, 22.3, 22.24, 21.91, 21.7, 21.17, 20.48, 19.88, 19.38, 18.82, 18.29, 18.18, 17.8, 17.61, 17.44, 17.16, 17.05, 16.9, 16.81, 16.57, 16.25, 15.79, 15.75, 15.29, 15.15, 15.02, 14.79, 14.78, 14.62, 14.37, 14.34, 14.19, 13.95, 13.84, 13.74, 13.7, 13.49, 13.39, 13.26, 13.23, 13.01, 13, 12.8, 12.67, 12.59, 12.47, 12.42, 12.39, 12.28, 12.16, 12.13, 11.99, 11.71, 11.7, 11.48, 11.41, 11.36, 11.31, 11.3, 11.31, 11.35, 11.66, 11.86, 11.63, 11.57, 11.3, 11.08, 10.95, 10.8, 10.67, 10.64, 10.61, 10.58, 10.45, 10.36, 10.15, 10.08, 10, 9.8, 9.7, 9.32, 8.94, 8.62, 8.36, 8.11, 7.65, 7.53, 7.36, 7.11, 6.97, 6.92, 6.86, 6.84, 6.8, 6.62, 6.6, 6.5, 6.34, 6.13, 6.06, 5.98, 5.89, 5.64, 5.51, 5.34, 5.25, 4.94, 4.89, 4.81, 4.68, 4.58, 4.55, 4.44, 4.28, 4.22, 4.17, 4.15, 4.13, 4.13, 4.13, 4.11, 4.1, 4.09, 4.09, 4.09, 4.18, 4.19, 4.24, 4.26, 4.33, 4.36, 4.4, 4.42, 4.43, 4.47, 4.51, 4.52, 4.55, 4.55, 4.56, 4.6, 4.62, 4.64, 4.65, 4.66, 4.67, 4.67, 4.61, 4.6, 4.57, 4.53, 4.48, 4.46, 4.45, 4.47, 4.5, 4.55, 4.6, 4.72, 4.8, 4.89, 4.96, 5.01, 5.05, 5.07, 5.08, 5.14, 5.16, 5.18, 5.22, 5.25, 5.28, 5.34, 5.4, 5.47, 5.52, 5.61, 5.87, 6.04, 6.07, 6.08, 6.15, 6.16, 6.27, 6.39, 6.48, 6.49, 6.77, 6.93, 7.1, 7.16, 7.26, 7.47, 7.59, 7.69, 7.77, 7.84, 7.88, 8.01, 8.09, 8.3, 8.37, 8.46, 8.54, 8.63, 8.68, 8.75, 8.85, 8.9, 8.94, 9.07, 9.3, 9.36, 9.37, 9.53, 9.67, 9.79, 9.97, 9.99, 10.01, 10.06, 10.15, 10.29, 10.36, 10.58, 10.59, 10.64, 10.92, 10.98, 11.07, 11.09, 11.12, 11.15, 11.21, 11.24, 11.26, 11.28, 11.3, 11.31, 11.32, 11.33, 11.34, 11.35, 11.36, 11.37, 11.38, 11.39, 11.39, 11.39, 11.4, 11.41, 11.42, 11.42, 11.43, 11.44, 11.46, 11.45, 11.46, 11.46, 11.46, 11.46, 11.46, 11.45, 11.45, 11.46, 11.47, 11.48, 11.49, 11.5, 11.51, 11.52, 11.53, 11.54, 11.55, 11.56, 11.55, 11.56, 11.57, 11.57, 11.58, 11.58, 11.59, 11.61, 11.62, 11.62, 11.63, 11.64, 11.65, 11.66, 11.66, 11.66, 11.67, 11.67, 11.68, 11.69, 11.69, 11.7, 11.7, 11.71, 11.71, 11.72, 11.72, 11.73, 11.74, 11.75, 11.76, 11.76, 11.78, 11.79, 11.79, 11.78, 11.77, 11.78, 11.79, 11.79, 11.79, 11.79, 11.79, 11.79, 11.8, 11.8, 11.8, 11.8, 11.81, 11.82, 11.83, 11.84, 11.84, 11.84, 11.83, 11.83, 11.84, 11.83, 11.83, 11.83, 11.82, 11.82, 11.8, 11.79, 11.79, 11.78, 11.77, 11.77, 11.77, 11.77, 11.77, 11.76, 11.75, 11.74, 11.72, 11.72, 11.71, 11.71, 11.7, 11.7, 11.71, 11.71, 11.72, 11.72, 11.73, 11.74, 11.75, 11.76, 11.77, 11.79, 11.82, 11.83, 11.84, 11.86, 11.87, 11.88, 11.88, 11.89, 11.9, 11.91, 11.92, 11.93, 11.94, 11.95, 11.95, 11.94, 11.94, 11.94, 11.94, 11.95, 11.95, 11.94, 11.95, 11.94, 11.94, 11.9, 11.9, 11.88, 11.87, 11.86, 11.85, 11.86, 11.87, 11.89, 11.89, 11.91, 11.92, 11.92, 11.93, 11.94, 11.98, 11.99, 12.02, 12.03, 12.04, 12.05, 12.07, 12.08, 12.11, 12.13, 12.15, 12.16, 12.17, 12.18, 12.19, 12.2, 12.21, 12.22, 12.24, 12.25, 12.26, 12.28, 12.31, 12.32, 12.34, 12.35, 12.36, 12.37, 12.38, 12.38, 12.39, 12.41, 12.43, 12.44, 12.45, 12.46, 12.47, 12.48, 12.5, 12.52, 12.52, 12.53, 12.53, 12.54, 12.53, 12.52, 12.52, 12.52, 12.52, 12.51, 12.5, 12.5, 12.5, 12.5, 12.52, 12.54, 12.55, 12.56, 12.57, 12.58, 12.58, 12.59, 12.6, 12.6, 12.61, 12.62, 12.62, 12.62, 12.62, 12.61, 12.61, 12.6, 12.59, 12.57, 12.55, 12.53, 12.53, 12.52, 12.52, 12.52, 12.52, 12.52, 12.51, 12.5, 12.48, 12.46, 12.43, 12.41, 12.4, 12.37, 12.35, 12.35, 12.34, 12.34, 12.34, 12.34, 12.33, 12.33, 12.33, 12.32, 12.31, 12.29, 12.28, 12.26, 12.26, 12.25, 12.23, 12.32, 12.37, 12.38, 12.4, 12.41, 12.44, 12.45, 12.47, 12.49, 12.54, 12.6, 12.61, 12.64, 12.65, 12.66, 12.67, 12.67, 12.68, 12.69, 12.69, 12.7, 12.7, 12.71, 12.71, 12.71, 12.71, 12.79, 12.81, 12.83, 12.84, 12.84, 12.85, 12.85, 12.86, 12.88, 12.86, 12.84, 12.82, 12.79, 12.78, 12.71, 12.64, 12.6, 12.58, 12.55, 12.52, 12.49, 12.47, 12.47, 12.46, 12.43, 12.39, 12.39, 12.36, 12.34, 12.33, 12.3, 12.2, 12.18, 12.14, 12.14, 12.15, 12.15, 12.16, 12.17, 12.17, 12.18, 12.18, 12.19, 12.19, 12.19, 12.22, 12.27, 12.28, 12.28, 12.29, 12.29, 12.3, 12.31, 12.32, 12.32, 12.31, 12.23, 12.22, 12.22, 12.21, 12.17, 12.13, 12.08, 12.07, 12.06, 12.06, 12.07, 12.09, 12.1, 12.1, 12.11, 12.12, 12.13, 12.14, 12.11, 12.11, 12.09, 12.08, 12.13, 12.18, 12.18, 12.2, 12.21, 12.22, 12.23, 12.22, 12.22, 12.2, 12.19, 12.13, 12.08, 12, 11.98, 12, 12.05, 12.06, 12.06, 12.07, 12.08, 12.07, 12.12, 12.22, 12.18, 12.18, 12.15, 12.24, 12.27, 12.34, 12.35, 12.35, 12.38, 12.4, 12.42, 12.44, 12.48, 12.5, 12.52, 12.51, 12.57, 12.62, 12.63, 12.66, 12.69, 12.74, 12.75, 12.76, 12.77, 12.84, 12.86, 12.88, 12.89, 12.92, 13.04, 13.09, 13.15, 13.16, 13.17, 13.2, 13.2, 13.5, 13.65, 13.66, 13.81, 13.83, 13.92, 13.92, 13.97, 13.99, 14.01, 14.03, 14.06, 14.07, 14.1, 14.11, 14.13, 14.16, 14.16, 14.14, 14.13, 14.13, 14.12, 14.12, 14.12, 14.13, 14.13, 14.12, 14.12, 14.09, 14.06, 13.95, 13.92, 13.78, 13.76, 13.7, 13.66, 13.69, 13.7, 13.8, 13.9, 13.92, 13.93, 13.96, 13.98, 13.99, 14.01, 14.06, 14.09, 14.11, 14.13, 14.14, 14.15, 14.17, 14.26, 14.28, 14.32, 14.35, 14.35, 14.36, 14.37, 14.37, 14.39, 14.4, 14.46, 14.52, 14.52, 14.51, 14.51, 14.51, 14.51, 14.51, 14.51, 14.51, 14.51, 14.51, 14.52, 14.52, 14.53, 14.53, 14.53, 14.54, 14.54, 14.54, 14.57, 14.58, 14.59, 14.62, 14.62, 14.63, 14.61, 14.6, 14.6, 14.59, 14.59, 14.58, 14.56, 14.54, 14.53, 14.52, 14.65, 14.83, 14.85, 14.95, 15, 15.03, 15.08, 15.14, 15.36, 15.37, 15.5, 15.49, 15.48, 15.47, 15.45, 15.44, 15.43, 15.42, 15.41, 15.4, 15.4, 15.39, 15.38, 15.42, 15.49, 15.5, 15.59, 15.61, 15.63, 15.65, 15.66, 15.67, 15.71, 15.72, 15.73, 15.75, 15.78, 15.88, 15.89, 15.98, 16.01, 16.02, 16.06, 16.11, 16.16, 16.17, 16.2, 16.23, 16.24, 16.26, 16.3, 16.32, 16.41, 16.4, 16.4, 16.41, 16.41, 16.41, 16.42, 16.41, 16.4, 16.36, 16.35, 16.33, 16.32, 16.31, 16.3, 16.22, 16.19, 16.14, 16.11, 16.12, 16.15, 16.15, 16.17, 16.17, 16.38, 16.4, 16.43, 16.46, 16.47, 16.49, 16.5, 16.52, 16.56, 16.58, 16.59, 16.61, 16.61, 16.62, 16.63, 16.64, 16.65, 16.65, 16.66, 16.66, 16.67, 16.68, 16.69, 16.7, 16.71, 16.72, 16.75, 16.77, 16.81, 16.85, 16.92, 16.93, 16.99, 17.03, 17.15, 17.16, 17.17, 17.19, 17.21, 17.22, 17.25, 17.27, 17.28, 17.29, 17.3, 17.33, 17.41, 17.48, 17.52, 17.63, 17.64, 17.76, 17.78, 17.82, 17.9, 17.91, 17.99, 18.01, 18.08, 18.09, 18.13, 18.15, 18.16, 18.16, 18.14, 18.13, 18.13, 18.13, 18.12, 18.11, 18.11, 18.13, 18.13, 18.21, 18.33, 18.38, 18.42, 18.52, 18.56, 18.62, 18.68, 18.95, 18.98, 18.99, 19.04, 19.08, 19.09, 19.1, 19.14, 19.29, 19.44, 19.54, 19.59, 19.76, 19.78, 19.82, 19.92, 19.96, 19.97, 20, 20.02, 20.05, 20.08, 20.09, 20.12, 20.17, 20.22, 20.27, 20.21, 20.1, 20.08, 20.01, 19.98, 20.01, 20.06, 20.07, 20.09, 20.11, 20.14, 20.21, 20.22, 20.23, 20.26, 20.27, 20.28, 20.29, 20.3, 20.31, 20.35, 20.35, 20.35, 20.34, 20.35, 20.35, 20.35, 20.34, 20.34, 20.33, 20.25, 20.2, 20.18, 20.13, 20.09, 20.07, 20.08, 20.11, 20.29, 20.31, 20.4, 20.41, 20.44, 20.47, 20.55, 20.56, 20.59, 20.69, 20.72, 20.77, 20.78]; }; AJAXMAP.ZOOMLEVELS = [56, 128, 256, 512, 1024, 2048, 5120, 10240, 20480, 40960, 81920, 131072, 262144, 524288, 1000000]; var WAAnnotationOpenBehaviour = { Disable: 1, Hover: 2, Click: 4, Manual: 8 }; var WAAnnotationCloseBehaviour = { IconMouseOut: 16, Manual: 32 }; AJAXMAP.prototype = { init: function (M, ae, dG) { if (M) M = this.aO(M); if (ae) { this.o = parseInt(ae); } var latlon = M.transform('EPSG:4326'); var pX = NGTools.ay(latlon.y, latlon.x, ae)[0]; var pY = NGTools.ay(latlon.y, latlon.x, ae)[1]; if (dG) { this.bs = dG; } this.bY = AJAXMAP.ZOOMLEVELS[this.o] / 256; if (M) { var fv = new Coordinate(M.x, M.y, M.srs); } this.eV(); tileLayer = new Layer({ 'type': 'webatlastile', 'visible': true, 'name': 'Tile Webatlas', 'WATilePath': this.cy }); this.addLayer(tileLayer); Event.observe(this.v + 'mouselayer', 'mousemove', this.fa.bindAsEventListener(this)); Event.observe(this.v + 'mouselayer', 'click', this.db.bindAsEventListener(this)); Event.observe(this.v + 'mouselayer', 'mousedown', this.dr.bindAsEventListener(this)); Event.observe(this.v + 'mouselayer', 'mouseup', this.dk.bindAsEventListener(this)); Event.observe(this.v + 'mouselayer', 'mouseout', this.dm.bindAsEventListener(this)); Event.observe(this.v + 'mouselayer', 'mouseover', this.dj.bindAsEventListener(this)); Event.observe(this.v + 'mouselayer', 'dblclick', this.eW.bindAsEventListener(this)); Event.observe(this.v + 'mouselayer', 'contextmenu', this.fi.bindAsEventListener(this)); if (this.dC) { Event.observe(window, 'resize', this.resizeEventHandler.bindAsEventListener(this)); } Event.observe($(this.v), "mousewheel", this.dO.bindAsEventListener(this)); Event.observe($(this.v), "DOMMouseScroll", this.dO.bindAsEventListener(this)); Event.observe(this.v, 'map:resized', this.hideAnnotationPopup.bindAsEventListener(this)); Event.observe(this.v, 'map:moved', this.hideAnnotationPopup.bindAsEventListener(this)); Event.observe(this.v, 'map:dragBegin', this.hideAnnotationPopup.bindAsEventListener(this)); if (this.I == 0 && this.F == 0) { this.I = this.bb.offsetWidth; this.F = this.bb.offsetHeight; } if (this.I == 0 && this.F == 0) { this.fl(); } this.A = { 'bottom': pY + this.F / 2, 'left': pX - this.I / 2, 'top': pY - this.F / 2, 'right': pX + this.I / 2 }; if (this.dC) { this.eO(false); this.A = { 'bottom': pY + this.F / 2, 'left': pX - this.I / 2, 'top': pY - this.F / 2, 'right': pX + this.I / 2 }; } else { } if (M) this.bJ(fv); this.eA = true; }, bJ: function (M) { var latlon = M.transform('EPSG:4326'); var pX = NGTools.ay(latlon.y, latlon.x, this.o)[0]; var pY = NGTools.ay(latlon.y, latlon.x, this.o)[1]; this.A = { 'bottom': pY + this.F / 2, 'left': pX - this.I / 2, 'top': pY - this.F / 2, 'right': pX + this.I / 2 }; this.bT(false); this.bC(M, false); this.updateBB(); this.updateWMSLayers(); }, setLogExtra: function (clientip, url, addressid, custid, mode) { this.logClientIP = clientip; this.logAddressID = addressid; this.logCustID = custid; this.logMode = mode }, dr: function (K) { this.Q = this.ez(K); this.dq = new Coordinate(this.ax.left + (this.bY * this.Q.x), this.ax.top - (this.bY * this.Q.y), this.aw); var lat = NGTools.T(this.A.top + this.C.y, this.o); var lon = NGTools.U(this.A.left + this.C.x, this.o); this.dq = new Coordinate(lon, lat, 'EPSG:4326'); this.dh = true; if (this.dM(K) == "MIDDLE" && !this.cl) { this.cH.style.zIndex = '2'; this.cA = true; this.V.style.display = 'block'; this.V.style.top = this.C.y + "px"; this.V.style.left = this.C.x + "px"; this.V.style.width = "0px"; this.V.style.height = "0px"; } if (this.cu == 'DrawBoundingBox') { this.cH.style.zIndex = '2'; this.V.style.display = 'block'; this.V.style.top = this.C.y + "px"; this.V.style.left = this.C.x + "px"; this.V.style.width = "0px"; this.V.style.height = "0px"; } $(this.v).fire("map:grabbed", { 'mouseMapCoords': this.av, 'mouseCoords': this.C }); K.stop(); }, db: function (K) { $(this.v).fire("map:mouseClicked", { 'mouseMapCoords': this.av, 'mouseCoords': this.C }); }, fi: function (K) { }, eW: function (K) { if (this.bR) if (!this.cl) this.zoomIn(new Coordinate(this.av.x, this.av.y, this.aw)); }, dk: function (K) { this.release(this.ar); this.V.style.display = 'none'; var lat = NGTools.T(this.A.top + this.F / 2, this.o); var lon = NGTools.U(this.A.left + this.I / 2, this.o); this.ag = new Coordinate(lon, lat, 'EPSG:4326'); if (this.cA && this.ac != null) { this.zoomOnBoundingBox(this.ac); this.ac = null; this.cA = false; } if (this.cu == 'DrawBoundingBox' && this.ac != null) { var fc = { 'bottom': this.ac.y1, 'left': this.ac.x1, 'top': this.ac.y2, 'right': this.ac.x2 }; $(this.v).fire("map:boundingboxSelected", { 'boundingbox': fc }); this.ac = null; } $(this.v).fire("map:mouseUp", { 'button': this.dM(K), 'mouseMapCoords': this.av, 'mouseCoords': this.C }); }, dm: function (K) { this.release(this.ar); $(this.v).fire("map:mouseOut"); }, dj: function (K) { $(this.v).fire("map:mouseOver"); }, fa: function (K) { this.C = this.ez(K); if (this.bR) { if (this.dh) { this.ev++; if (this.ev % 3 == 0) { if (this.cA) { this.ac = { 'x1': 0, 'y1': 0, 'x2': 0, 'y2': 0 }; if (this.C.y < this.Q.y) { this.V.style.top = this.C.y + "px"; this.V.style.height = this.Q.y - this.C.y + "px"; this.ac.y1 = NGTools.T(this.A.top + this.Q.y, this.o); this.ac.y2 = NGTools.T(this.A.top + this.C.y, this.o); } else { this.V.style.top = this.Q.y + "px"; this.V.style.height = this.C.y - this.Q.y + "px"; this.ac.y1 = NGTools.T(this.A.top + this.C.y, this.o); this.ac.y2 = NGTools.T(this.A.top + this.Q.y, this.o); } if (this.C.x < this.Q.x) { this.V.style.left = this.C.x + "px"; this.V.style.width = this.Q.x - this.C.x + "px"; this.ac.x1 = NGTools.U(this.A.left + this.C.x, this.o); this.ac.x2 = NGTools.U(this.A.left + this.Q.x, this.o); } else { this.V.style.left = this.Q.x + "px"; this.V.style.width = this.C.x - this.Q.x + "px"; this.ac.x2 = NGTools.U(this.A.left + this.C.x, this.o); this.ac.x1 = NGTools.U(this.A.left + this.Q.x, this.o); } } else { this.ar = { 'x': this.C.x - this.Q.x, 'y': this.C.y - this.Q.y }; this.bv(this.ar, true); $(this.v).fire("map:dragging", { 'offsetCoords': this.ar }); if (!this.cB) { $(this.v).fire("map:dragBegin", { 'mouseMapCoords': this.av, 'mouseCoords': this.C, 'boundingBox': this.ax }); this.cB = true; } } } } else { var mouseLat = NGTools.T(this.A.top + this.C.y, this.o); var mouseLon = NGTools.U(this.A.left + this.C.x, this.o); var mouseMapCoord = new Coordinate(mouseLon, mouseLat, 'EPSG:4326'); mouseMapCoord = this.aO(mouseMapCoord); this.av = mouseMapCoord; } } if (this.cu == 'DrawBoundingBox') { this.ac = { 'x1': 0, 'y1': 0, 'x2': 0, 'y2': 0 }; if (this.C.y < this.Q.y) { this.V.style.top = this.C.y + "px"; this.V.style.height = this.Q.y - this.C.y + "px"; this.ac.y1 = NGTools.T(this.A.top + this.Q.y, this.o); this.ac.y2 = NGTools.T(this.A.top + this.C.y, this.o); } else { this.V.style.top = this.Q.y + "px"; this.V.style.height = this.C.y - this.Q.y + "px"; this.ac.y1 = NGTools.T(this.A.top + this.C.y, this.o); this.ac.y2 = NGTools.T(this.A.top + this.Q.y, this.o); } if (this.C.x < this.Q.x) { this.V.style.left = this.C.x + "px"; this.V.style.width = this.Q.x - this.C.x + "px"; this.ac.x1 = NGTools.U(this.A.left + this.C.x, this.o); this.ac.x2 = NGTools.U(this.A.left + this.Q.x, this.o); } else { this.V.style.left = this.Q.x + "px"; this.V.style.width = this.C.x - this.Q.x + "px"; this.ac.x2 = NGTools.U(this.A.left + this.C.x, this.o); this.ac.x1 = NGTools.U(this.A.left + this.Q.x, this.o); } } $(this.v).fire("map:mouseMoved", { 'mouseMapCoords': this.av, 'mouseCoords': this.C }); var mouseLat = NGTools.T(this.A.top + this.C.y, this.o); var mouseLon = NGTools.U(this.A.left + this.C.x, this.o); var mouseMapCoord = new Coordinate(mouseLon, mouseLat, 'EPSG:4326'); mouseMapCoord = this.aO(mouseMapCoord); this.av = mouseMapCoord; return false; }, setState: function (ej) { this.cu = ej; if (ej == 'DrawBoundingBox') { this.disallowMouseNavigation(); } else { this.allowMouseNavigation(); } }, getState: function () { return this.cu; }, move: function (ar, dw) { this.ar = ar; this.bv(this.ar, true); this.release(ar, dw); }, resizeEventHandler: function (e) { this.resize(); }, resize: function (F, I) { this.aV(); var user = false; var oldCenter = this.getCenterCoordinate(); if (F != null) { var P = I; var O = F; user = true; } else { var P = 0; var O = 0; if (window.innerWidth) { P = window.innerWidth; O = window.innerHeight; } else { P = document.compatMode == 'CSS1Compat' ? document.documentElement.clientWidth : document.body.clientWidth; O = document.compatMode == 'CSS1Compat' ? document.documentElement.clientHeight : document.body.clientHeight; } if (P % 2) { P--; } if (O % 2) { O--; } } this.I = P; this.F = O; if (user) { $(this.v).style.width = P + "px"; $(this.v).style.height = O + "px"; if (this.ap != null) { this.ap.element.width = P; this.ap.element.height = O; } } else { aU = this.cP($(this.v)); aT = this.cO($(this.v)); $(this.v).style.width = P - aT + "px"; $(this.v).style.height = O - aU + "px"; if (this.ap != null) { this.ap.element.width = P - aT; this.ap.element.height = O - aU; } } if (F == null) { this.I = P - aT; this.F = O - aU; } this.bT(true); this.centerOnCoords(oldCenter); $(this.v).fire("map:resized"); }, fl: function () { var P = 0; var O = 0; if (window.innerWidth) { P = window.innerWidth; O = window.innerHeight; } else { P = document.compatMode == 'CSS1Compat' ? document.documentElement.clientWidth : document.body.clientWidth; O = document.compatMode == 'CSS1Compat' ? document.documentElement.clientHeight : document.body.clientHeight; } if (P % 2) { P--; } if (O % 2) { O--; } aU = this.cP($(this.v)); aT = this.cO($(this.v)); this.I = P - aT; this.F = O - aU; }, eO: function (load, F, I) { this.aV(); var user = false; if (F != null) { var P = I; var O = F; user = true; } else { var P = 0; var O = 0; if (window.innerWidth) { P = window.innerWidth; O = window.innerHeight; } else { P = document.compatMode == 'CSS1Compat' ? document.documentElement.clientWidth : document.body.clientWidth; O = document.compatMode == 'CSS1Compat' ? document.documentElement.clientHeight : document.body.clientHeight; } if (P % 2) { P--; } if (O % 2) { O--; } } this.I = P; this.F = O; aU = this.cP($(this.v)); aT = this.cO($(this.v)); if (user) { $(this.v).style.width = P + "px"; $(this.v).style.height = O + "px"; if (this.ap != null) { this.ap.element.width = P - aT; this.ap.element.height = O - aU; } } else { $(this.v).style.width = P - aT + "px"; $(this.v).style.height = O - aU + "px"; if (this.ap != null) { this.ap.element.width = P - aT; this.ap.element.height = O - aU; } } if (F == null) { this.I = P - aT; this.F = O - aU; } this.bT(false); $(this.v).fire("map:resized"); }, cR: function () { for (var i = 0; i < this.H.length; i++) { if (this.H[i].type != 'wmsoverlay') { for (var c = 0; c < this.H[i].tiles.length; c++) { for (var r = 0; r < this.H[i].tiles[c].length; r++) { var B = this.H[i].tiles[c][r]; this.dQ(B); } } } } }, ez: function (K) { return { 'x': Event.pointerX(K) - this.cO($(this.v)), 'y': Event.pointerY(K) - this.cP($(this.v)) }; }, bT: function (da) { if (this.F == 0) this.F = 200; if (this.I == 0) this.I = 200; var rows = Math.ceil(this.F / this.ah) + 1; var cols = Math.ceil(this.I / this.ah) + 1; this.fZ = rows; this.gg = cols; for (var i = 0; i < this.H.length; i++) { this.H[i].tiles = []; if (this.H[i].visible == true) { for (var c = 0; c < cols; c++) { var dx = []; var tX = NGTools.ey(this.A.left, this.A.top)[0]; var tY = NGTools.ey(this.A.left, this.A.top)[1]; var remX = NGTools.eB(this.A.left, this.A.top)[0]; var remY = NGTools.eB(this.A.left, this.A.top)[1]; this.am = -remX; this.ao = -remY; for (var r = 0; r < rows; r++) { var B = { 'element': null, 'qk': 0, 'posx': 256 * c, 'posy': 256 * r, 'tx': tX + c, 'ty': tY + r, 'xIndex': c, 'yIndex': r, 'layer': this.H[i] }; dx.push(B); } this.H[i].tiles.push(dx); } } } this.bv({ 'x': 0, 'y': 0 }, da); }, bv: function (ab, da) { if (!ab) { ab = { 'x': 0, 'y': 0 }; } this.bt.style.top = ab.y + "px"; this.bt.style.left = ab.x + "px"; for (i = 0; i < this.bM.length; i++) { var overlay = this.bM[i]; } for (i = 0; i < this.bO.length; i++) { var overlay = this.bO[i]; overlay.style.left = ab.x + 'px'; overlay.style.top = ab.y + 'px'; } this.bd.style.top = this.et + ab.y + 'px'; this.bd.style.left = this.eg + ab.x + 'px'; for (i = 0; i < this.aa.length; i++) { var m = this.aa[i]; m.element.style.left = m.x + ab.x + 'px'; m.element.style.top = m.y + ab.y + 'px'; } for (var i = 0; i < this.H.length; i++) { if (this.H[i].type != 'wmsoverlay') { for (var c = 0; c < this.H[i].tiles.length; c++) { for (var r = 0; r < this.H[i].tiles[c].length; r++) { var B = this.H[i].tiles[c][r]; B.posx = (B.xIndex * this.ah) + this.am + ab.x; B.posy = (B.yIndex * this.ah) + this.ao + ab.y; var cj = true; if (B.posx > this.I) { do { B.xIndex -= this.H[i].tiles.length; B.tx -= this.H[i].tiles.length; B.posx = (B.xIndex * this.ah) + this.am + ab.x; } while (B.posx > this.I); if (B.posx + this.ah < 0) { cj = false; } } else { while (B.posx < -this.ah) { B.xIndex += this.H[i].tiles.length; B.tx += this.H[i].tiles.length; B.posx = (B.xIndex * this.ah) + this.am + ab.x; } if (B.posx > this.I) { cj = false; } } if (B.posy > this.F) { do { B.yIndex -= this.H[i].tiles[c].length; B.ty -= this.H[i].tiles[c].length; B.posy = (B.yIndex * this.ah) + this.ao + ab.y; } while (B.posy > this.F); if (B.posy + this.ah < 0) { cj = false; } } else { while (B.posy < -this.ah) { B.yIndex += this.H[i].tiles[c].length; B.ty += this.H[i].tiles[c].length; B.posy = (B.yIndex * this.ah) + this.ao + ab.y; } if (B.posy > this.F) { cj = false; } } if (da && cj) { this.dQ(B); } if (B.element) { B.element.style.top = B.posy + 'px'; B.element.style.left = B.posx + 'px'; } } } } } }, addNavigationGUI: function (gui) { gui.mapControl = this; this.aH.appendChild(gui.element); gui.element.style.zIndex = 2; }, addDrawCanvas: function (canvasIn) { this.ap = canvasIn; this.ap.parent = this; var an = this.v + 'canvas'; this.ap.element.setAttribute('id', an); this.bt.appendChild(this.ap.element); var P = 0; var O = 0; if (window.innerWidth) { P = window.innerWidth; O = window.innerHeight; } else { P = document.compatMode == 'CSS1Compat' ? document.documentElement.clientWidth : document.body.clientWidth; O = document.compatMode == 'CSS1Compat' ? document.documentElement.clientHeight : document.body.clientHeight; } this.ap.element.width = this.I; this.ap.element.height = this.F; if (/msie/i.test(navigator.userAgent)) { var hack = G_vmlCanvasManager.initElement(this.getDrawCanvas().element); this.getDrawCanvas().element = hack; this.getDrawCanvas().useex = true; } canvas = this.ap.element; this.ap.surface = canvas.getContext("2d"); }, getDrawCanvas: function () { return this.ap; }, bC: function (af, mouse) { var af = af.transform('EPSG:4326'); screenCoords = this.llToScreen(af); if (mouse) { var diffX = this.C.x; var diffY = this.C.y; var ab = { 'x': Math.floor((diffX - screenCoords.x)), 'y': Math.floor(diffY - screenCoords.y) }; } else { var diffX = this.I / 2; var diffY = this.F / 2; var ab = { 'x': Math.floor((diffX - screenCoords.x)), 'y': Math.floor(diffY - screenCoords.y) }; } this.er(); this.bv(ab, true); this.release(ab, false); }, centerOnCoords: function (af, mouse) { var af = af.transform('EPSG:4326'); screenCoords = this.llToScreen(af); if (mouse) { var diffX = this.C.x; var diffY = this.C.y; var ab = { 'x': Math.floor((diffX - screenCoords.x)), 'y': Math.floor(diffY - screenCoords.y) }; } else { var diffX = this.I / 2; var diffY = this.F / 2; var ab = { 'x': Math.floor((diffX - screenCoords.x)), 'y': Math.floor(diffY - screenCoords.y) }; } this.er(); this.bv(ab, true); this.release(ab, false); }, addAnnotation: function (m) { m.coordinate = this.aO(m.coordinate); screenCoords = this.llToScreen(m.coordinate); var div = document.createElement('div'); div.setAttribute('id', m.id); var img = document.createElement('img'); $(img).addClassName("annotationIcon"); m.element = div; m.parent = this; Event.observe(m.element, 'click', m.db.bindAsEventListener(m)); Event.observe(m.element, 'mouseover', m.dj.bindAsEventListener(m)); Event.observe(m.element, 'mouseout', m.dm.bindAsEventListener(m)); Event.observe(m.element, 'mouseup', m.dk.bindAsEventListener(m)); Event.observe(m.element, 'mousedown', m.dr.bindAsEventListener(m)); img.src = m.iconURL; div.style.position = "absolute"; div.style.left = screenCoords.x + m.xOffset + 'px'; div.style.top = screenCoords.y + m.yOffset + 'px'; m.x = screenCoords.x + m.xOffset; m.y = screenCoords.y + m.yOffset; div.appendChild(img); m.img = img; div.appendChild(img); if (m.upperbound < this.o || m.lowerbound > this.o) { m.element.style.display = 'none'; } else { m.element.style.display = 'block'; } this.aH.appendChild(m.element); m.element.style.zIndex = 1; this.aa.push(m); return m.id; }, llToScreen: function (M) { var latlon = M.transform('EPSG:4326'); var pX = NGTools.ay(latlon.y, latlon.x, this.o)[0]; var pY = NGTools.ay(latlon.y, latlon.x, this.o)[1]; pX = pX - this.A.left; pY = pY - this.A.top; return new Coordinate(pX, pY); }, removeAnnotation: function (id) { for (var i = 0; i < this.aa.length; i++) { var m = this.aa[i]; if (m.id == id) { this.aH.removeChild(m.element); this.aa.splice(i, 1); return; } } }, removeAnnotationGroup: function (fo) { var removed = 0; do { removed = 0; for (var i = 0; i < this.aa.length; i++) { var m = this.aa[i]; if (m.group == fo) { this.aH.removeChild(m.element); this.aa.splice(i, 1); removed = 1; break; } } } while (removed == 1); }, getAnnotation: function (id) { for (i = 0; i < this.aa.length; i++) { var m = this.aa[i]; if (m.id == id) { return m; } } }, getAnnotations: function () { return this.aa; }, hasValue: function (cG) { return (typeof cG != "undefined") && cG != null && (typeof cG == "string" ? cG != "" : true); }, showAnnotationPopup: function (m) { if ((this.cN && this.cn != WAAnnotationOpenBehaviour.Disable) && (this.hasValue(m.title) || this.hasValue(m.description))) { this.bd.innerHTML = m.title + '<p>' + m.description + '</p>'; var bB = 0; var bx = 0; if (m.x > this.I - 250) { bB = -275; } else { bB = 25; } if (m.y < 150) { bx = 0; } else { bx = -150; } this.bd.style.top = m.y + bx + 'px'; this.bd.style.left = m.x + bB + 'px'; this.eg = m.x + bB; this.et = m.y + bx; if (this.cn == WAAnnotationOpenBehaviour.Hover) { this.popupTimerId = setTimeout((function () { $(this.v + 'annotation_popup').style.display = 'block'; $(this.v).fire("map:annotationOpened", { 'annotation': m, 'element': this.bd }); }).bind(this), 700); } else { this.bd.style.display = "block"; $(this.v).fire("map:annotationOpened", { 'annotation': m, 'element': this.bd }); } } }, hideAnnotationPopup: function (m) { clearTimeout(this.popupTimerId); $(this.v + 'annotation_popup').style.display = 'none'; }, addLayer: function (bK) { bK.id = "layer_" + this.H.length; this.H.push(bK); if (this.eA == true) { this.aV(); this.bT(true); if (bK.type == "wmsoverlay") this.ee(); } return bK.id; }, removeLayer: function (fy) { for (var i = 0; i < this.H.length; i++) { if (this.H[i].id == fy) { this.H.splice(i, 1); return; } } }, showLayer: function (id, zindex) { for (var i = 0; i < this.H.length; i++) { if (this.H[i].id == id) { if (zindex) { this.H[i].zindex = zindex; } if (this.H[i].visible == false) { this.H[i].visible = true; this.aV(); this.bT(true); } } } }, hideLayer: function (id) { for (var i = 0; i < this.H.length; i++) { if (this.H[i].id == id) if (this.H[i].visible == true) { this.H[i].visible = false; this.aV(); this.bT(true); } } this.cR(); }, getLayers: function () { return this.H; }, fL: function (ab) { for (i = 0; i < this.aa.length; i++) { var m = this.aa[i]; m.x = m.x + ab.x; m.y = m.y + ab.y; } }, er: function () { for (var i = 0; i < this.aa.length; i++) { m = this.aa[i]; if (m.upperbound < this.o || m.lowerbound > this.o) { m.element.style.display = 'none'; } else { m.element.style.display = 'block'; } screenCoords = this.llToScreen(m.coordinate); m.x = screenCoords.x + m.xOffset; m.y = screenCoords.y + m.yOffset; m.element.style.left = m.x + 'px'; m.element.style.top = m.y + 'px'; } }, refreshAnnotations: function () { for (var i = 0; i < this.aa.length; i++) { var m = this.aa[i]; if (m.upperbound < this.o || m.lowerbound > this.o) { m.element.style.display = 'none'; } else { m.element.style.display = 'block'; } var screenCoords = this.llToScreen(m.coordinate); m.x = screenCoords.x + m.xOffset; m.y = screenCoords.y + m.yOffset; m.element.style.left = m.x + 'px'; m.element.style.top = m.y + 'px'; } }, ga: function (annotation) { var m = annotation; if (m.upperbound < this.o || m.lowerbound > this.o) { m.element.style.display = 'none'; } else { m.element.style.display = 'block'; } var screenCoords = this.geoToScreenCoordinates(m.coordinate); m.x = screenCoords.x + m.xOffset; m.y = screenCoords.y + m.yOffset; m.element.style.left = m.x + 'px'; m.element.style.top = m.y + 'px'; }, clearAnnotations: function () { for (var i = 0; i < this.aa.length; i++) { var m = this.aa[i]; this.aH.removeChild(m.element); } this.aa = []; }, disableZoom: function () { this.cl = true; }, enableZoom: function () { this.cl = false; }, zoomIn: function (M) { if (this.o < this.bH) { this.aV(); if (!this.ag) { lat = NGTools.T(this.A.top + this.F / 2, this.o); lon = NGTools.U(this.A.left + this.I / 2, this.o); this.ag = new Coordinate(lon, lat, 'EPSG:4326'); } if (M) { M = this.aO(M); this.ag = M; } this.am = 0; this.ao = 0; this.o = parseInt(this.o) + 1; this.bJ(this.ag); this.bC(this.ag, false); $(this.v).fire("map:zoomedIn", { 'boundingBox': this.ax }); $(this.v).fire("map:zoomed", { "zoomLevel": this.getZoomLevel() }); } }, zoomOut: function (M) { if (this.o > this.bQ) { this.aV(); if (!this.ag) { lat = NGTools.T(this.A.top + this.F / 2, this.o); lon = NGTools.U(this.A.left + this.I / 2, this.o); this.ag = new Coordinate(lon, lat, 'EPSG:4326'); } if (M) { M = this.aO(M); this.ag = M; } this.am = 0; this.ao = 0; this.o = parseInt(this.o) - 1; this.bJ(this.ag); this.bC(this.ag, false); $(this.v).fire("map:zoomedOut", { 'boundingBox': this.ax }); $(this.v).fire("map:zoomed", { "zoomLevel": this.getZoomLevel() }); } }, mouseZoomIn: function () { if (this.o < this.bH) { this.aV(); var ak = null; var lat; var lon; if (!this.ag && !this.bz) { lat = NGTools.T(this.A.top + this.F / 2, this.o); lon = NGTools.U(this.A.left + this.I / 2, this.o); ak = new Coordinate(lon, lat, 'EPSG:4326'); } if (this.bz) { lat = NGTools.T(this.A.top + this.C.y, this.o); lon = NGTools.U(this.A.left + this.C.x, this.o); ak = new Coordinate(lon, lat, 'EPSG:4326'); } this.am = 0; this.ao = 0; if (ak != null) { this.ag = ak; } this.o = parseInt(this.o) + 1; this.bJ(this.ag); this.bC(this.ag, this.bz); $(this.v).fire("map:zoomedIn", { 'boundingBox': this.ax }); $(this.v).fire("map:zoomed", { "zoomLevel": this.getZoomLevel() }); } }, mouseZoomOut: function () { if (this.o > this.bQ) { this.aV(); var ak = null; var lat; var lon; if (!this.ag && !this.bz) { lat = NGTools.T(this.A.top + this.F / 2, this.o); lon = NGTools.U(this.A.left + this.I / 2, this.o); ak = new Coordinate(lon, lat, 'EPSG:4326'); } if (this.bz) { lat = NGTools.T(this.A.top + this.C.y, this.o); lon = NGTools.U(this.A.left + this.C.x, this.o); ak = new Coordinate(lon, lat, 'EPSG:4326'); } this.am = 0; this.ao = 0; if (ak != null) { this.ag = ak; } this.o = parseInt(this.o) - 1; this.bJ(this.ag); this.bC(this.ag, this.bz); $(this.v).fire("map:zoomedOut", { 'boundingBox': this.ax }); $(this.v).fire("map:zoomed", { "zoomLevel": this.getZoomLevel() }); } }, zoom: function (level, M) { if (level >= this.bQ && level <= this.bH) { this.aV(); if (!this.ag) { lat = NGTools.T(this.A.top + this.F / 2, this.o); lon = NGTools.U(this.A.left + this.I / 2, this.o); this.ag = new Coordinate(lon, lat, 'EPSG:4326'); } if (M) { M = this.aO(M); this.ag = M; } this.am = 0; this.ao = 0; this.o = parseInt(level); this.bJ(this.ag); this.bC(this.ag, false); $(this.v).fire("map:zoomed", { "zoomLevel": this.getZoomLevel() }); } }, centerAndZoom: function (ak, level) { if (level == this.o) this.bC(ak, false); else this.zoom(level, ak); }, zoomOnBoundingBox: function (af, center, dz) { var eK = af.x2 - af.x1; var eN = af.y2 - af.y1; var gc = this.I / 2; var gb = this.F / 2; var aX = new Coordinate(af.x1 + (eK / 2), af.y1 + (eN / 2), 'EPSG:4326'); for (var i = this.bH; i >= this.bQ; i--) { var pX = NGTools.ay(aX.y, aX.x, i)[0]; var pY = NGTools.ay(aX.y, aX.x, i)[1]; var dY = { 'bottom': pY + this.F / 2, 'left': pX - this.I / 2, 'top': pY - this.F / 2, 'right': pX + this.I / 2 }; var bottomLeft = NGTools.ay(af.y1, af.x1, i); var upperRight = NGTools.ay(af.y2, af.x2, i); var dZ = { 'bottom': bottomLeft[1], 'left': bottomLeft[0], 'top': upperRight[1], 'right': upperRight[0] }; if (dY.left < dZ.left && dY.bottom > dZ.bottom) { if (this.o == i && !center) { return { 'zoom': i, 'coordinate': aX }; } if (!dz && this.o < this.bH) { this.zoom(i, aX); } return { 'zoom': i, 'coordinate': aX }; } } if (!dz) { this.zoom(i, aX); } return { 'zoom': i, 'coordinate': aX }; }, zoomOnAnnotations: function () { if (this.aa.length == 0) { return; } var x1 = this.aa[0].coordinate.transform('EPSG:4326').x; var y1 = this.aa[0].coordinate.transform('EPSG:4326').y; var x2 = this.aa[0].coordinate.transform('EPSG:4326').x; var y2 = this.aa[0].coordinate.transform('EPSG:4326').y; var tmpCoordinate = null; for (i = 0; i < this.aa.length; i++) { tmpCoordinate = this.aa[i].coordinate.transform('EPSG:4326'); if (tmpCoordinate.x > x2) { x2 = tmpCoordinate.x; } if (tmpCoordinate.x < x1) { x1 = tmpCoordinate.x; } if (tmpCoordinate.y > y2) { y2 = tmpCoordinate.y; } if (tmpCoordinate.y < y1) { y1 = tmpCoordinate.y; } } this.zoomOnBoundingBox({ 'x1': x1, 'y1': y1, 'x2': x2, 'y2': y2 }, true); }, eV: function () { this.bb.style.position = "absolute"; this.bb.style.zIndex = 10; this.bb.style.overflow = "hidden"; var bF = document.getElementById(this.v); var l = document.createElement('div'); var an = this.v + 'tilelayer'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); this.bb.appendChild(l); l.style.position = "absolute"; l.style.top = "0px"; l.style.left = "0px"; l.style.width = "100%"; l.style.height = "100%"; l.style.overflow = "hidden"; this.cg = l; var bF = document.getElementById(this.v); var l = document.createElement('div'); var an = this.v + 'staticdrawlayer'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); l.style.position = "absolute"; l.style.top = "0px"; l.style.left = "0px"; l.style.width = "100%"; l.style.height = "100%"; l.style.zIndex = 1000; this.bb.appendChild(l); this.dH = l; var bF = document.getElementById(this.v); var l = document.createElement('div'); var an = this.v + 'drawlayer'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); l.style.position = "absolute"; l.style.top = "0px"; l.style.left = "0px"; l.style.width = "100%"; l.style.height = "100%"; l.style.zIndex = 1000; this.bb.appendChild(l); this.bt = l; var bF = document.getElementById(this.v); var l = document.createElement('div'); var an = this.v + 'mouselayer'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); l.style.position = "absolute"; l.style.top = "0px"; l.style.left = "0px"; l.style.width = "100%"; l.style.height = "100%"; l.style.zIndex = 1000; l.style.overflow = "hidden"; this.bb.appendChild(l); this.aH = l; var bF = document.getElementById(this.v); var l = document.createElement('div'); var an = this.v + 'zoomBox'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); this.aH.appendChild(l); l.style.position = "absolute"; l.style.border = "solid 1px"; l.style.width = "0px"; l.style.height = "0px"; l.style.top = "0px"; l.style.left = "10px"; l.style.display = 'none'; l.style.zIndex = 2; this.V = l; var l = document.createElement('div'); var an = this.v + 'surface'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); l.style.position = "absolute"; l.style.top = "0px"; l.style.left = "0px"; l.style.width = "100%"; l.style.height = "100%"; l.style.zIndex = 0; l.style.background = "url(http://tsadm.webatlas.no/sh/2/v/090602/media/interface/default/blank_1px.gif)"; this.aH.appendChild(l); this.cH = l; var bF = document.getElementById(this.v); var l = document.createElement('div'); var an = this.v + 'annotation_popup'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); this.aH.appendChild(l); l.style.position = "absolute"; l.style.width = "250px"; l.style.height = "150px"; l.style.top = "29px"; l.style.left = "130px"; l.style.display = 'none'; l.style.padding = '10px'; l.style.zIndex = '1000'; l.style.backgroundColor = 'white'; l.style.border = 'solid 1px'; this.bd = l; }, dQ: function (B) { if (B.layer.lowerBound > this.o || B.layer.upperBound < this.o) return; var cf, bu; if (B.layer.type == 'webatlastile') { var qK = NGTools.fJ(B.tx, B.ty, this.o); B.qk = qK; var tsAddress = parseInt(qK.charAt(qK.length - 1)); cf = bu = 'http://cache' + (tsAddress + 1) + '.webatlas.no/' + B.layer.WATilePath + '/' + B.qk + '.png?s=' + this.bs; } if (B.layer.type == 'osmtile') { cf = bu = 'http://b.tile.openstreetmap.org/' + this.o + '/' + B.tx + '/' + B.ty + '.png'; } else if (B.layer.type == 'wms') { var x1 = NGTools.U(B.tx * 256, this.o); var x2 = NGTools.U(B.tx * 256 + 256, this.o); var y1 = NGTools.T(B.ty * 256 + 256, this.o); var y2 = NGTools.T(B.ty * 256, this.o); var m1 = this.toMercatorMeters(y1, x1); var m2 = this.toMercatorMeters(y2, x2); cf = bu = B.layer.wmsRequest.url + '?REQUEST=GetMap&SERVICE=' + B.layer.wmsRequest.service + '&SRS=EPSG:54004' + '&VERSION=' + B.layer.wmsRequest.version + '&FORMAT=' + B.layer.wmsRequest.format + '&LAYERS=' + B.layer.wmsRequest.layers + '&STYLES=' + B.layer.wmsRequest.styles + '&TRANSPARENT=' + B.layer.wmsRequest.transparent + '&BGCOLOR=' + B.layer.wmsRequest.bgColor + '&BBOX=' + m1.x + ',' + m1.y + ',' + m2.x + ',' + m2.y + '&WIDTH=256&HEIGHT=256&zoomlevel=' + this.o; } if (B.element != null && B.element.parentNode != null && B.element.relativeSrc != bu) { this.cg.removeChild(B.element); } var bw = this.aN[cf]; if (!bw) { bw = this.aN[cf] = this.fh(bu); } bw.onload = null; if (bw.image) { bw.image.onload = null; } if (!bw.parentNode) { B.element = this.cg.appendChild(bw); } if (B.element != null) { B.element.style.zIndex = B.layer.zIndex; } }, toMercatorMeters: function (lat, lon) { a = 6378137.0; f = 1 / 298.257223563; e = Math.sqrt(2 * f - Math.pow(f, 2)); ctrmerid = 0.0; px = lon * Math.PI / 180; py = lat * Math.PI / 180; pc = ctrmerid * Math.PI / 180; x = a * (px - pc); y = a * (Math.log(Math.tan((45.0 * Math.PI / 180) + py / 2.0) * Math.pow((1.0 - e * Math.sin(py)) / (1.0 + e * Math.sin(py)), e / 2.0))); return new Coordinate(x, y, "EPSG:54004"); }, toggleMapStyle: function () { if (this.bs == 0) { this.bs = 1; } else { this.bs = 0; } this.cR(); this.bv({ 'x': 0, 'y': 0 }); }, fh: function (bu) { var aq = document.createElement('img'); aq.src = bu; aq.alt = "Loading Tile..."; aq.relativeSrc = bu; aq.className = 'tile'; aq.style.width = this.ah + 'px'; aq.style.height = this.ah + 'px'; aq.style.top = "-256px"; aq.style.left = "-256px"; aq.style.position = 'absolute'; return aq; }, aV: function () { this.hideAnnotationPopup(); this.fR = null; for (fu in this.aN) { var aq = this.aN[fu]; aq.onload = null; aq.src = 'http://tsadm.webatlas.no/sh/2/v/090602/media/interface/blank.png'; if (aq.image) { aq.image.onload = null; } if (aq.parentNode != null) { this.cg.removeChild(aq); } } this.aN = {}; this.aN['blank'] = new Image(); this.aN['loading'] = this.aN['blank']; }, release: function (al, dw) { if (!(al.x + al.y) == 0) { this.bt.style.top = 0 + "px"; this.bt.style.left = 0 + "px"; this.am += al.x; this.ao += al.y; this.fL(al); this.ar = { 'x': 0, 'y': 0 }; this.A.left -= al.x; this.A.right -= al.x; this.A.top -= al.y; this.A.bottom -= al.y; var mouseLat = NGTools.T(this.A.top + this.C.y, this.o); var mouseLon = NGTools.U(this.A.left + this.C.x, this.o); this.av = new Coordinate(mouseLon, mouseLat, 'EPSG:4326'); this.av = this.av.transform(this.aw); this.updateBB(); $(this.v).fire("map:moved", { 'mouseMapCoords': this.av, 'mouseCoords': this.C, 'boundingBox': this.ax, 'move': al }); if (this.cB == true) $(this.v).fire("map:dragEnd", { 'mouseMapCoords': this.av, 'mouseCoords': this.C, 'boundingBox': this.ax }); this.cB = false; this.updateWMSLayers(); clearTimeout(this.cF); this.cF = setTimeout(this.dB.bind(this), 350); } this.dh = false; this.cH.style.zIndex = '0'; }, updateBB: function () { var eS = this.dT - this.F * this.bY; var eU = this.dU + this.I * this.bY; this.ax = { 'bottom': eS, 'left': this.dU, 'top': this.dT, 'right': eU }; var bottom = NGTools.T(this.A.bottom, this.o); var top = NGTools.T(this.A.top, this.o); var left = NGTools.U(this.A.left, this.o); var right = NGTools.U(this.A.right, this.o); var ll = new Coordinate(left, bottom, 'EPSG:4326'); var ur = new Coordinate(right, top, 'EPSG:4326'); var lr = new Coordinate(right, bottom, 'EPSG:4326'); var ul = new Coordinate(left, top, 'EPSG:4326'); var m1 = this.toMercatorMeters(ll.y, ll.x); var m2 = this.toMercatorMeters(ur.y, ur.x); this.bq = { 'bottom': m1.y, 'left': m1.x, 'top': m2.y, 'right': m2.x }; ll = this.aO(ll); ur = this.aO(ur); lr = this.aO(lr); ul = this.aO(ul); this.ax = { 'bottom': lr.y, 'left': ll.x, 'top': ul.y, 'right': ur.x, 'bottomleft': ll, 'bottomright': lr, 'upperleft': ul, 'upperright': ur }; clearTimeout(this.cF); this.cF = setTimeout(this.dB.bind(this), 350); }, dB: function () { if (this.dA == true) { var aq = document.createElement('img'); var extra = ''; if (this.logClientIP != null && this.logMode.length > 0) { extra = '&ATLASEXTRA=clientip~' + this.logClientIP + '_addressid~' + this.logAddressID + '_custid~' + this.logCustID + '_mode~' + this.logMode; } aq.src = "maphandlers/mapusage.ashx?" + "WMS-REQUEST=BBOX=" + this.ax.left + "," + this.ax.bottom + "," + this.ax.right + "," + this.ax.top + "&MAPSTYLE=" + this.bs + "&ZOOMLEVEL=" + AJAXMAP.ZOOMLEVELS[this.o] + "&PROVIDER=" + this.cq + "&CUSTOMER=" + this.cq + "&SERVER=" + this.webatlasTileServerLowerBound + extra; aq = null; } }, disableLogging: function () { this.dA = false; }, getOSMName: function (bG, bX, ae) { var ff = parseInt(Math.floor((bX + 180) / 360 * (Math.pow(2, ae)))); var fd = parseInt(Math.floor((1 - Math.log(Math.tan(bG * Math.PI / 180) + 1 / Math.cos(bG * Math.PI / 180)) / Math.PI) / 2 * (Math.pow(2, ae)))); return ("" + ae + "/" + ff + "/" + fd); }, addWMSLayer: function (bk, dJ, ea) { if (bk.id == null) { bk.id = this.aQ.length; } fB = dJ ? dJ : 0; fK = ea ? ea : 99; bk.lb = fB; bk.ub = fK; for (var i = 0; i < this.aQ.length; i++) { if (bk.id == this.aQ[i].id) { this.aQ[i] = bk; this.updateWMSLayers(); return bk.id; } } this.aQ.push(bk); this.updateWMSLayers(); return bk.id; }, removeWMSLayer: function (fU) { for (var i = 0; i < this.aQ.length; i++) { if (fU == this.aQ[i].id) { this.aQ.splice(i, 1); this.updateWMSLayers(); return; } } }, updateWMSLayers: function () { var tilelayer = this.bt; for (var i = 0; i < this.bM.length; i++) { tilelayer.removeChild(this.bM[i]); } this.bM = []; for (var i = 0; i < this.aQ.length; i++) { var req = this.aQ[i]; if (req.lb <= this.o && req.ub >= this.o) { var img = document.createElement('img'); var url = req.url; var aK = $H({ "REQUEST": "GetMap", "SERVICE": req.service, "VERSION": req.version, "SRS": req.srs, "FORMAT": req.format, "LAYERS": req.layers, "TRANSPARENT": "true", "STYLES": req.styles, "WIDTH": this.I, "HEIGHT": this.F, "BBOX": [this.bq.left, this.bq.bottom, this.bq.right, this.bq.top].join(',') }); if (typeof (req.sendPixelValues) != 'undefined') if (req.sendPixelValues == true) { aK.set('ZOOMLEVEL', this.o); aK.set('PIXELLEFT', parseInt(this.A.left)); aK.set('PIXELRIGHT', parseInt(this.A.right)); aK.set('PIXELBOTTOM', parseInt(this.A.bottom)); aK.set('PIXELTOP', parseInt(this.A.top)); } var bD = ""; if (url.indexOf("?") == -1) { bD = "?"; } else if (!(url.endsWith("?") || url.endsWith("&"))) { bD = "&"; } url = url + bD + aK.toQueryString(); img.src = url; img.alt = "Loading custom layer..."; img.relativeSrc = this.aQ[i].serverURL; img.className = 'overlay'; img.style.position = 'absolute'; img.style.top = 0 + 'px'; img.style.left = 0 + 'px'; tilelayer.appendChild(img); this.bM.push(img) } } this.ee(); }, ee: function () { var tilelayer = this.cg; for (var i = 0; i < this.bO.length; i++) { tilelayer.removeChild(this.bO[i]); } this.bO = []; for (var i = 0; i < this.H.length; i++) { if (this.H[i].type == 'wmsoverlay') { var req = this.H[i].wmsRequest; var img = document.createElement('img'); var url = req.url; var aK = $H({ "REQUEST": "GetMap", "SERVICE": req.service, "VERSION": req.version, "SRS": req.srs, "FORMAT": req.format, "LAYERS": req.layers, "TRANSPARENT": "true", "STYLES": req.styles, "WIDTH": this.I, "HEIGHT": this.F, "BBOX": [this.bq.left, this.bq.bottom, this.bq.right, this.bq.top].join(',') }); if (typeof (req.sendPixelValues) != 'undefined') if (req.sendPixelValues == true) { aK.set('ZOOMLEVEL', this.o); aK.set('PIXELLEFT', parseInt(this.A.left)); aK.set('PIXELRIGHT', parseInt(this.A.right)); aK.set('PIXELBOTTOM', parseInt(this.A.bottom)); aK.set('PIXELTOP', parseInt(this.A.top)); } var bD = ""; if (url.indexOf("?") == -1) { bD = "?"; } else if (!(url.endsWith("?") || url.endsWith("&"))) { bD = "&"; } url = url + bD + aK.toQueryString(); img.src = url; img.alt = "Loading custom layer..."; img.className = 'overlay'; img.style.position = 'absolute'; img.style.top = 0 + 'px'; img.style.left = 0 + 'px'; img.style.zIndex = this.H[i].zIndex; tilelayer.appendChild(img); this.bO.push(img) } } }, getDistancelatlon: function (af) { var dV = 0.0; var R = 6371; for (var i = 0; i < af.length - 1; i++) { var point1 = af[i]; var point2 = af[i + 1]; point1 = this.UTMToLatLon(point1); point2 = this.UTMToLatLon(point2); var distance = Math.acos(Math.sin(point1.y * Math.PI / 180) * Math.sin(point2.y * Math.PI / 180) + Math.cos(point1.y * Math.PI / 180) * Math.cos(point2.y * Math.PI / 180) * Math.cos((point2.x - point1.x) * Math.PI / 180)) * R; dV += distance; } return dV; }, getHeight: function () { return this.F; }, getWidth: function () { return this.I; }, getGroundResolutionAtZoom: function (M, ae) { return NGTools.di(M.lat, ae); }, getPixelCoordinateFromLatLonAtZoom: function (ak, ae) { ak = ak.transform('EPSG:4326'); dv = NGTools.ay(ak.lat, ak.lon, ae); return new Coordinate(dv[0], dv[1]); }, getLatLonFromPixelCoordinateAtZoom: function (ak, ae) { var bG = NGTools.T(ak.y, ae); var bX = NGTools.U(ak.x, ae); return new Coordinate(bX, bG, 'EPSG:4326'); }, getLongitudeFrompixelXAtZoom: function (fe, ae) { return NGTools.U(fe, ae); }, getLatitudeFrompixelYAtZoom: function (fj, ae) { return NGTools.T(fj, ae); }, getZoomlevelMax: function () { return this.bH; }, getZoomlevelMin: function () { return this.bQ; }, setZoomlevelMax: function (ae) { this.bH = ae; }, setZoomlevelMin: function (ae) { this.bQ = ae; }, setCRS: function (aw) { this.aw = aw; }, getCRS: function (aw) { return this.aw; }, getDrawLayer: function () { return this.bt; }, getStaticDrawLayer: function () { return this.dH; }, getMouseLayer: function () { return this.aH; }, getMapContainer: function () { return this.v; }, getTrackCoords: function () { tmpcoord = this.trackCoords; this.trackCoords = null; return tmpcoord; }, getCenterCoordinate: function () { var de = NGTools.T(this.A.top + this.F / 2, this.o); var fq = NGTools.U(this.A.left + this.I / 2, this.o); var fn = new Coordinate(fq, de, 'EPSG:4326'); return fn.transform(this.aw); }, getBoundingBox: function () { return this.ax; }, setMapStyle: function (fI) { this.bs = fI; this.cR(); this.bv({ 'x': 0, 'y': 0 }); }, disableAnnotationInfo: function () { this.cN = false; }, setAnnotationPopupBehaviour: function (ep, dL) { this.cn = ep; if (ep != WAAnnotationOpenBehaviour.Disable) { this.cN = true; } if (typeof dL != "undefined") this.dR = dL; }, enableAnnotationInfo: function () { this.cN = true; }, getMapStyle: function () { return this.bs; }, getCurrentMouseCoords: function () { return this.C; }, getMouseDownCoords: function () { return this.Q; }, getMouseDownMapCoords: function () { return this.dq.transform(this.aw); }, getMouseMapCoords: function () { return this.av.transform(this.aw); ; }, setMouseZoom: function (eG) { this.bz = eG; }, allowMouseNavigation: function () { this.bR = true; }, disallowMouseNavigation: function () { this.bR = false; }, getZoomLevel: function () { return this.o; }, cP: function (cp) { co = cp.offsetTop; aW = cp.offsetParent; while (aW != null) { co += aW.offsetTop; if (aW != null) { aW = aW.offsetParent; } } return co; }, cO: function (cp) { co = cp.offsetLeft; aW = cp.offsetParent; while (aW != null) { co += aW.offsetLeft; aW = aW.offsetParent; } return co; }, dM: function (K) { if (K.which == null) { dP = (K.button < 2) ? "LEFT" : ((K.button == 4) ? "MIDDLE" : "RIGHT"); } else { dP = (K.which < 2) ? "LEFT" : ((K.which == 2) ? "MIDDLE" : "RIGHT"); } return dP; }, aO: function (M) { return M.transform(this.aw); }, geoToScreenCoordinates: function (al) { var latlon = al.transform('EPSG:4326'); var am = NGTools.ay(latlon.y, latlon.x, this.o)[0]; var ao = NGTools.ay(latlon.y, latlon.x, this.o)[1]; return { 'x': am, 'y': ao }; }, geoToLocalScreenCoordinates: function (al) { var latlon = al.transform('EPSG:4326'); var am = NGTools.ay(latlon.y, latlon.x, this.o)[0]; var ao = NGTools.ay(latlon.y, latlon.x, this.o)[1]; am = am - this.A.left; ao = ao - this.A.top; return { 'x': am, 'y': ao }; }, getPixelLatLon: function (pixel) { var lon = NGTools.U(this.A.left + pixel.x, this.o); var lat = NGTools.T(this.A.top + pixel.y, this.o); latLon = new Coordinate(lon, lat, 'EPSG:4326'); return latLon; }, decimalDegreesToUTM: function (al) { return al.toUTM(al.x, al.y, al.epsgToZone(this.aw)); }, UTMToLatLon: function (dg) { return dg.fromUTM(dg.x, dg.y, '33'); }, getDistance: function (L) { var t = 0.0; for (var i = 0; i < L.length - 1; i++) { var point1 = L[i]; var point2 = L[i + 1]; var distance = Math.sqrt((point2.x - point1.x) * (point2.x - point1.x) + (point1.y - point2.y) * (point1.y - point2.y)); t += distance; } return this.cT(t, 0); }, getCircuit: function (L) { var t = 0.0; if (L.length > 2) { for (var i = 0; i < L.length - 1; i++) { var point1 = L[i]; var point2 = L[i + 1]; var distance = Math.sqrt((point2.x - point1.x) * (point2.x - point1.x) + (point1.y - point2.y) * (point1.y - point2.y)); t += distance; } } if (L.length > 2) { var distance = Math.sqrt((L[L.length - 1].x - L[0].x) * (L[L.length - 1].x - L[0].x) + (L[0].y - L[L.length - 1].y) * (L[0].y - L[L.length - 1].y)); t += distance; } return this.cT(t, 0); }, getArea: function (L) { var t = 0.0; if (L.length > 2) { var numt_points = L.length; t = (L[L.length - 1].x * L[0].y) - (L[0].x * L[L.length - 1].y); for (var i = 0; i < numt_points - 1; i++) { t = t + (L[i].x * L[i + 1].y) - (L[i + 1].x * L[i].y); } t = t / 2; } if (t < 0) { t = -t; } return this.cT(t, 0); }, cT: function (Num, Places) { if (Places > 0) { if ((Num.toString().length - Num.toString().lastIndexOf('.')) > (Places + 1)) { var Rounder = Math.pow(10, Places); return Math.round(Num * Rounder) / Rounder; } else return Num; } else return Math.round(Num); }, addRights: function () { var bF = document.getElementById(this.v); var l = document.createElement('div'); var an = this.v + 'copy'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); l.style.position = "absolute"; l.style.bottom = "0px"; l.style.left = "4px"; l.style.width = "100%"; l.style.height = "25px"; l.style.fontFamily = "verdana"; l.style.fontSize = "9px"; l.innerHTML = ""; l.style.overflow = "hidden"; l.style.zIndex = 1000; this.aH.appendChild(l); Event.observe(this.v, 'map:moved', this.cV.bindAsEventListener(this)); Event.observe(this.v, 'map:zoomed', this.cV.bindAsEventListener(this)); this.cV(); }, addDistanceBar: function () { var bF = document.getElementById(this.v); var l = document.createElement('div'); var an = this.v + 'scale_bar'; l.innerHTML = '<!-- -->'; l.setAttribute('id', an); l.style.position = "absolute"; l.style.bottom = "5px"; l.style.right = "260px"; l.style.width = "200px"; l.style.height = "3px"; l.style.background = "white"; l.innerHTML = ""; l.style.overflow = "hidden"; l.style.zIndex = 1000; l.style.borderColor = "#808080 #000000 #000000 #808080"; l.style.borderStyle = "solid"; l.style.borderWidth = "1px 2px 2px 1px"; this.aH.appendChild(l); var l = document.createElement('div'); var an = this.v + 'scale_number'; l.setAttribute('id', an); l.style.position = "absolute"; l.style.bottom = "17px"; l.style.right = "260px"; l.style.zIndex = 1000; l.style.backgroundPosition = "right center"; l.style.backgroundRepeat = "no-repeat"; l.style.height = "20px"; l.style.width = "200px"; this.aH.appendChild(l); Event.observe(this.v, 'map:moved', this.cU.bindAsEventListener(this)); Event.observe(this.v, 'map:zoomed', this.cU.bindAsEventListener(this)); this.cU(); }, cU: function () { aP = this.getCenterCoordinate().transform('EPSG:4326').y; o = this.getZoomLevel(); var eY = 200; var ew = NGTools.di(aP, o); var fM = ew * eY; var i, cC = this.cI.length; var df = cC - 1; for (i = cC - 1; i >= 0; i--) { df = i; if (this.cI[i] < fM) { break; } } var I = this.cI[df] / ew; $(this.v + 'scale_bar').style.width = I + "px"; $(this.v + 'scale_number').style.backgroundImage = "url(http://tsadm.webatlas.no/sh/2/v/latest/media/interface/dbar/" + this.cI[df] + ".gif)"; }, cV: function () { var at = this.getCenterCoordinate(); at = at.transform("EPSG:4326"); var o = this.getZoomLevel(); var fD = this.getMapStyle(); if (fD == 0) { $(this.v + 'copy').style.color = "black"; } else { $(this.v + 'copy').style.color = "white"; } var bG = [this.eQ]; var bX = [this.eP]; var cc = ["&copy; 2011 Norkart Geoservice AS / Map data: &copy; 2011 Plan- og bygningsetaten, Oslo kommune <br \> Map data: &copy; <a href='http://openstreetmap.org' target='_blank'>OpenStreetMap</a> (and) contributors, <a href='http://creativecommons.org/licenses/by-sa/2.0/' target='_blank'>CC-BY-SA</a>", "&copy; 2011 Norkart Geoservice AS / <br \> Map data: &copy;Statens kartverk. Lisens nr. 600086", "&copy; 2011 Norkart Geoservice AS / <br \> Map data: &copy; 2011 Lantm&auml;teriet", "&copy; 2011 Norkart Geoservice AS / Map data: &copy; <a href='http://openstreetmap.org' target='_blank'>OpenStreetMap</a> (and) contributors, <a href='http://creativecommons.org/licenses/by-sa/2.0/' target='_blank'>CC-BY-SA</a> <br\> Map data: &copy; METI, NASA, Skog og landskap", "&copy; 2011 Norkart Geoservice AS / Map data: &copy; <a href='http://openstreetmap.org' target='_blank'>OpenStreetMap</a> (and) contributors, <a href='http://creativecommons.org/licenses/by-sa/2.0/' target='_blank'>CC-BY-SA</a> <br\>Map data: &copy; EEA CLC2006"]; var bU = true; if (o >= 13) { var bI, cC = bG.length; for (bI = 0; bI < cC; bI++) { try { if (this.dc(at, bG[bI], bX[bI])) { $(this.v + 'copy').innerHTML = cc[bI]; bU = false; break; } } catch (e) { } if (bU != false) { $(this.v + 'copy').innerHTML = cc[1]; bU = false; } try { if (this._isSwedenInView()) { $(this.v + 'copy').innerHTML = cc[2]; bU = false; } } catch (e) { } } } if (o >= 8 && o <= 12) { try { if (this._isNorwayInView()) { $(this.v + 'copy').innerHTML = cc[3]; bU = false; } } catch (e) { } } if (bU) { try { $(this.v + 'copy').innerHTML = cc[4]; } catch (e) { } } }, _isNorwayInView: function () { var at = this.getCenterCoordinate(); at = at.transform("EPSG:4326"); return this.dc(at, this.fk, this.fm); }, _isSwedenInView: function () { var at = this.getCenterCoordinate(); at = at.transform("EPSG:4326"); return this.dc(at, this.fr, this.fs); }, dc: function (at, cv, bA) { var i, j = 0, ei = cv.length, cW = false; for (i = 0; i < ei; i++) { j++; if (j == ei) j = 0; if (bA[i] < at.lon && bA[j] >= at.lon || bA[j] < at.lon && bA[i] >= at.lon) { if (cv[i] + (at.lon - bA[i]) / (bA[j] - bA[i]) * (cv[j] - cv[i]) < at.y) { cW = !cW; } } } return cW; }, dO: function (K) { var bL = 0; if (!K) { K = window.event; } if (K.wheelDelta) { bL = K.wheelDelta / 120; } else if (K.detail) { bL = -K.detail / 3; } if (bL) { this.fS(bL); } if (K.preventDefault) { K.preventDefault(); } K.returnValue = false; }, fS: function (bL) { if (!this.cl) { if (bL < 0) { if (this.bR) this.mouseZoomOut(); } else { if (this.bR) this.mouseZoomIn(); } } } }; function Annotation(al, du, dK, dy, bB, bx, ek, ef, ed) { this.parent = null; this.id = ++annotationStatic.annotationCount; this.coordinate = al; this.title = du ? du : ""; this.description = dK ? dK : ""; this.lowerbound = ek ? ek : 0; this.upperbound = ef ? ef : 99; this.xOffset = bB ? parseInt(bB) : 0; this.yOffset = bx ? parseInt(bx) : 0; this.group = ed ? ed : 0; this.x = 0; this.y = 0; this.img = null; this.iconURL = dy ? dy : 'http://www.webatlas.no/webatlasapi/v/071009/media/interface/default/markers/flag_blue.gif'; this.element = null; }; var annotationStatic = { 'annotationCount': 0 }; Annotation.prototype = { db: function (K) { if (this.parent.cn == WAAnnotationOpenBehaviour.Click) { this.parent.showAnnotationPopup(this); } $(this.element).fire("annotation:mouseClicked", { 'annotation': this }); }, dk: function (K) { $(this.element).fire("annotation:mouseUp", { 'annotation': this, 'mouseMapCoords': this.parent.av, 'mouseCoords': this.parent.C }); }, dr: function (K) { $(this.element).fire("annotation:mouseDown", { 'annotation': this, 'mouseMapCoords': this.parent.av, 'mouseCoords': this.parent.C }); }, dm: function (K) { $(this.element).fire("annotation:mouseOut", { 'annotation': this }); if (this.parent.dR == WAAnnotationCloseBehaviour.IconMouseOut) { this.parent.hideAnnotationPopup(); } }, dj: function (K) { $(this.element).fire("annotation:mouseIn", { 'annotation': this }); if (this.parent.cn == WAAnnotationOpenBehaviour.Hover) { this.parent.showAnnotationPopup(this); } } }; function Layer(au) { this.type = au.type ? au.type : 'webatlastile'; this.name = au.name ? au.name : ''; this.zIndex = au.zIndex ? au.zIndex : 0; this.wmsRequest = au.wmsrequest ? au.wmsrequest : null; if (au.visible != 'undefined' && au.visible != null) this.visible = au.visible; else this.visible = true; this.lowerBound = au.lowerBound ? au.lowerBound : 0; this.upperBound = au.upperBound ? au.upperBound : 99; this.WATilePath = au.WATilePath ? au.WATilePath : 'qt_basic'; }; Layer.prototype = {}; function Coordinate(am, ao, aw) { this.x = am; this.y = ao; this.lat = ao; this.lon = am; this.srs = aw ? aw : 'EPSG:32633'; }; Coordinate.prototype = { toUTM: function (x, y, zone) { var dD = parseFloat(x); var de = parseFloat(y); var bN = Math.PI; var fX = bN / 4; var cE = bN / 180; var cJ = 180.0 / bN; var bP = 6378137; var J = 0.00669438; var cs = 0.9996; var bW; var bi; var cX; var be; var by; var ai; var bZ; var fw = (dD + 180) - parseInt((dD + 180) / 360) * 360 - 180; var aL = de * cE; var ft = fw * cE; var eu; var ck; ck = Math.abs(zone); bW = (ck - 1) * 6 - 180 + 3; eu = bW * cE; bi = (J) / (1 - J); cX = bP / Math.sqrt(1 - J * Math.sin(aL) * Math.sin(aL)); be = Math.tan(aL) * Math.tan(aL); by = bi * Math.cos(aL) * Math.cos(aL); ai = Math.cos(aL) * (ft - eu); bZ = bP * ((1 - J / 4 - 3 * J * J / 64 - 5 * J * J * J / 256) * aL - (3 * J / 8 + 3 * J * J / 32 + 45 * J * J * J / 1024) * Math.sin(2 * aL) + (15 * J * J / 256 + 45 * J * J * J / 1024) * Math.sin(4 * aL) - (35 * J * J * J / 3072) * Math.sin(6 * aL)); var eH = (cs * cX * (ai + (1 - be + by) * ai * ai * ai / 6 + (5 - 18 * be + be * be + 72 * by - 58 * bi) * ai * ai * ai * ai * ai / 120) + 500000.0); var eb = (cs * (bZ + cX * Math.tan(aL) * (ai * ai / 2 + (5 - be + 9 * by + 4 * by * by) * ai * ai * ai * ai / 24 + (61 - 58 * be + be * be + 600 * by - 330 * bi) * ai * ai * ai * ai * ai * ai / 720))); if (zone < 0) eb += 10000000.0; return new Coordinate(eH, eb, zone >= 0 ? "EPSG:326" + zone : "EPSG:327" + (-zone)); }, fromUTM: function (x, y, zone) { var bN = Math.PI; var cE = bN / 180; var cJ = 180.0 / bN; var cs = 0.9996; var bP = 6378137; var J = 0.00669438; var bi = (J) / (1 - J); var aJ = (1 - Math.sqrt(1 - J)) / (1 + Math.sqrt(1 - J)); var cY, ba, aR, eq, aj, bZ; var bW; var ca, eI, aI; var ck = zone; var y0 = 0; if (ck < 0) { y0 = 10000000.0; } bW = (ck - 1) * 6 - 180 + 3; bZ = (y - y0) / cs; ca = bZ / (bP * (1 - J / 4 - 3 * J * J / 64 - 5 * J * J * J / 256)); aI = ca + (3 * aJ / 2 - 27 * aJ * aJ * aJ / 32) * Math.sin(2 * ca) + (21 * aJ * aJ / 16 - 55 * aJ * aJ * aJ * aJ / 32) * Math.sin(4 * ca) + (151 * aJ * aJ * aJ / 96) * Math.sin(6 * ca); eI = aI * cJ; cY = bP / Math.sqrt(1 - J * Math.sin(aI) * Math.sin(aI)); ba = Math.tan(aI) * Math.tan(aI); aR = bi * Math.cos(aI) * Math.cos(aI); eq = bP * (1 - J) / Math.pow(1 - J * Math.sin(aI) * Math.sin(aI), 1.5); aj = (x - 500000.0) / (cY * cs); Lat = aI - (cY * Math.tan(aI) / eq) * (aj * aj / 2 - (5 + 3 * ba + 10 * aR - 4 * aR * aR - 9 * bi) * aj * aj * aj * aj / 24 + (61 + 90 * ba + 298 * aR + 45 * ba * ba - 252 * bi - 3 * aR * aR) * aj * aj * aj * aj * aj * aj / 720); Lat = Lat * cJ; Long = (aj - (1 + 2 * ba + aR) * aj * aj * aj / 6 + (5 - 2 * aR + 28 * ba - 3 * aR * aR + 8 * bi + 24 * ba * ba) * aj * aj * aj * aj * aj / 120) / Math.cos(aI); Long = bW + Long * cJ; return new Coordinate(Long, Lat, "EPSG:4326"); }, epsgToZone: function (epsg_code) { if (epsg_code.indexOf("EPSG:") == 0) { if (epsg_code.substr(5, 3) == "326") return parseInt(epsg_code.substr(8, 3)); if (epsg_code.substr(5, 3) == "327") return -parseInt(epsg_code.substr(8, 3)); } return 0; }, transform: function (to_srs) { if (this.srs == to_srs) return new Coordinate(this.x, this.y, this.srs); var from_zone = this.epsgToZone(this.srs); var to_zone = this.epsgToZone(to_srs); if (from_zone == 0 && this.srs != "EPSG:4326") throw "Unknown coordinate system: " + this.srs; if (to_zone == 0 && to_srs != "EPSG:4326") throw "Unknown coordinate system: " + to_srs; if (from_zone == 0 && to_zone != 0) return this.toUTM(this.x, this.y, to_zone); if (from_zone != 0 && to_zone == 0) return this.fromUTM(this.x, this.y, from_zone); if (from_zone != 0 && to_zone != 0) { var geo = this.fromUTM(this.x, this.y, from_zone); return geo.toUTM(geo.x, geo.y, to_zone); } throw "Unable to transform between " + this.srs + " and " + to_srs; } }; function Move(am, ao) { this.x = am; this.y = ao; }; Move.prototype = {}; function WMSRequest(fP, H, dN, dI, ds, ec, dW, dS) { this.id = ++WMSRequestStatic.WMSRequestCount; this.url = fP; this.layers = H; this.format = dN ? dN : 'image/png'; this.service = dI ? dI : 'WMS'; this.styles = ds ? ds : ''; this.version = ec ? ec : '1.1'; this.transparent = dW ? dW : 'true'; this.bgColor = dS ? dS : '0xFFFFFF'; this.srs = 'EPSG:54004'; }; var WMSRequestStatic = { 'WMSRequestCount': 0 }; WMSRequest.prototype = { addLayer: function (bK) { this.layers += ',' + bK; } }; function WAPICanvas() { var l = document.createElement('canvas'); l.setAttribute('width', 100); l.setAttribute('height', 100); l.style.position = "absolute"; l.style.top = "0px"; l.style.left = "0px"; l.style.width = "100%"; l.style.height = "100%"; l.style.zIndex = 1000; this.element = l; this.surface = null; this.lines = []; this.parent = null; this.D = { 'X': 0, 'Y': 0 }; this.G = { 'X': 200, 'Y': 200 }; this.useex = false; this.m_groups = new Hash(); this.m_defaultGroupName = "_default"; Event.observe(document, 'map:resized', this.redraw.bindAsEventListener(this)); Event.observe(document, 'map:moved', this.redraw.bindAsEventListener(this)); Event.observe(document, 'map:zoomed', this.redraw.bindAsEventListener(this)); }; WAPICanvas.prototype = { addPolyLine: function (fG, ad) { ad = this._parseOptions(ad); var aS = this.m_groups.get(ad.group); if (aS == null) { aS = []; this.m_groups.set(ad.group, aS); } aS.push(fG); if (typeof !ad.supressRedraw == 'undefined' || !ad.supressRedraw) this.redraw(); }, redraw: function () { this.surface.clearRect(0, 0, this.element.width, this.element.height); this.D = { 'X': 0, 'Y': 0 }; this.G = { 'X': this.parent.getWidth(), 'Y': this.parent.getHeight() }; var dX = this.m_groups.values(); for (var g = 0; g < dX.length; g++) { var aS = dX[g]; for (var i = 0; i < aS.length; i++) { this.surface.beginPath(); this.surface.strokeStyle = aS[i].rgba; this.surface.lineWidth = aS[i].lineWidth; this.surface.lineCap = 'round'; var cb = []; for (var j = 0; j < aS[i].coordinates.length; j++) { var cK = this.parent.geoToLocalScreenCoordinates(aS[i].coordinates[j]); cb.push(cK); } for (var j = 0; j < cb.length; j++) { if (j != cb.length - 1) { var cK = cb[j]; var es = cb[j + 1]; var lineSegment = { 'Start': { 'X': parseInt(cK.x), 'Y': parseInt(cK.y) }, 'End': { 'X': parseInt(es.x), 'Y': parseInt(es.y)} }; lineSegment.Dy = lineSegment.End.Y - lineSegment.Start.Y; lineSegment.Dx = lineSegment.End.X - lineSegment.Start.X; var intersects = true; var skipPoint = false; if (lineSegment.Start.X == lineSegment.End.X && lineSegment.Start.Y == lineSegment.End.Y) skipPoint = true; if (skipPoint == false) { if (this.surface.useex) intersects = this.clipLine(lineSegment); if (intersects == true) { this.surface.moveTo(lineSegment.Start.X, lineSegment.Start.Y); this.surface.lineTo(lineSegment.End.X, lineSegment.End.Y); } } } } this.surface.stroke(); } } }, clear: function (ad) { ad = this._parseOptions(ad); if (ad.group == this.m_defaultGroupName) { this.m_groups = new Hash(); } else this.m_groups.unset(ad.group); if (!ad.supressRedraw) this.redraw(); }, _parseOptions: function (ad) { var ct = false; var cL = this.m_defaultGroupName; var cx = typeof ad; if (cx != "undefined") { if (cx == "boolean") { ct = ad; } else if (cx == "string" && (ad == "true" || ad == "false")) { ct = ad == "true"; } else if (cx == "string") { cL = ad; } else { var cd = ad.supressRedraw; ct = typeof cd == "boolean" ? cd : ct; cd = ad.group; cL = typeof cd == "string" ? cd : cL; } } return { supressRedraw: ct, group: cL }; }, aD: function (line) { line.Start.X += line.Dx * (this.D.Y - line.Start.Y) / line.Dy; line.Start.Y = this.D.Y; }, aG: function (line) { line.Start.X += line.Dx * (this.G.Y - line.Start.Y) / line.Dy; line.Start.Y = this.G.Y; }, aA: function (line) { line.Start.Y += line.Dy * (this.G.X - line.Start.X) / line.Dx; line.Start.X = this.G.X; }, aF: function (line) { line.Start.Y += line.Dy * (this.D.X - line.Start.X) / line.Dx; line.Start.X = this.D.X; }, aB: function (line) { line.End.X += line.Dx * (this.D.Y - line.End.Y) / line.Dy; line.End.Y = this.D.Y; }, az: function (line) { line.End.X += line.Dx * (this.G.Y - line.End.Y) / line.Dy; line.End.Y = this.G.Y; }, aC: function (line) { line.End.Y += line.Dy * (this.G.X - line.End.X) / line.Dx; line.End.X = this.G.X; }, aE: function (line) { line.End.Y += line.Dy * (this.D.X - line.End.X) / line.Dx; line.End.X = this.D.X; }, clipt_line: function (k) { var bn = 0; if (k.End.Y < this.D.Y) bn += 8; else if (k.End.Y > this.G.Y) bn += 4; if (k.End.X > this.G.X) bn += 2; else if (k.End.X < this.D.X) bn += 1; if (k.Start.Y < this.D.Y) bn += 128; else if (k.Start.Y > this.G.Y) bn += 64; if (k.Start.X > this.G.X) bn += 32; else if (k.Start.X < this.D.X) bn += 16; switch (bn) { case 0: return true; case 1: this.aE(k); return true; case 2: this.aC(k); return true; case 4: this.az(k); return true; case 5: this.aE(k); if (k.End.Y > this.G.Y) this.az(k); return true; case 6: this.aC(k); if (k.End.Y > this.G.Y) this.az(k); return true; case 8: this.aB(k); return true; case 9: this.aE(k); if (k.End.Y < this.D.Y) this.aB(k); return true; case 10: this.aC(k); if (k.End.Y < this.D.Y) this.aB(k); return true; case 16: this.aF(k); return true; case 18: this.aF(k); this.aC(k); return true; case 20: this.aF(k); if (k.Start.Y > this.G.Y) return false; this.az(k); return true; case 22: this.aF(k); if (k.Start.Y > this.G.Y) return false; this.az(k); if (k.End.X > this.G.X) this.aC(k); return true; case 24: this.aF(k); if (k.Start.Y < this.D.Y) return false; this.aB(k); return true; case 26: this.aF(k); if (k.Start.Y < this.D.Y) return false; this.aB(k); if (k.End.X > this.G.X) this.aC(k); return true; case 32: this.aA(k); return true; case 33: this.aA(k); this.aE(k); return true; case 36: this.aA(k); if (k.Start.Y > this.G.Y) return false; this.az(k); return true; case 37: this.aA(k); if (k.Start.Y > this.G.Y) return false; this.az(k); if (k.End.X < this.D.X) this.aE(k); return true; case 40: this.aA(k); if (k.Start.Y < this.D.Y) return false; this.aB(k); return true; case 41: this.aA(k); if (k.Start.Y < this.D.Y) return false; this.aB(k); if (k.End.X < this.D.X) this.aE(k); return true; case 64: this.aG(k); return true; case 65: this.aG(k); if (k.Start.X < this.D.X) return false; this.aE(k); if (k.End.Y > this.G.Y) this.az(k); return true; case 66: this.aG(k); if (k.Start.X > this.G.X) return false; this.aC(k); return true; case 72: this.aG(k); this.aB(k); return true; case 73: this.aG(k); if (k.Start.X < this.D.X) return false; this.aE(k); if (k.End.Y < this.D.Y) this.aB(k); return true; case 74: this.aG(k); if (k.Start.X > this.G.X) return false; this.aC(k); if (k.End.Y < this.D.Y) this.aB(k); return true; case 80: this.aF(k); if (k.Start.Y > this.G.Y) this.aG(k); return true; case 82: this.aC(k); if (k.End.Y > this.G.Y) return false; this.aG(k); if (k.Start.X < this.D.X) this.aF(k); return true; case 88: this.aB(k); if (k.End.X < this.D.X) return false; this.aG(k); if (k.Start.X < this.D.X) this.aF(k); return true; case 90: this.aF(k); if (k.Start.Y < this.D.Y) return false; this.aC(k); if (k.End.Y > this.G.Y) return false; if (k.Start.Y > this.G.Y) this.aG(k); if (k.End.Y < this.D.Y) this.aB(k); return true; case 96: this.aA(k); if (k.Start.Y > this.G.Y) this.aG(k); return true; case 97: this.aE(k); if (k.End.Y > this.G.Y) return false; this.aG(k); if (k.Start.X > this.G.X) this.aA(k); return true; case 104: this.aB(k); if (k.End.X > this.G.X) return false; this.aA(k); if (k.Start.Y > this.G.Y) this.aG(k); return true; case 105: this.aE(k); if (k.End.Y > this.G.Y) return false; this.aA(k); if (k.Start.Y < this.D.Y) return false; if (k.End.Y < this.D.Y) this.aB(k); if (k.Start.Y > this.G.Y) this.aG(k); return true; case 128: this.aD(k); return true; case 129: this.aD(k); if (k.Start.X < this.D.X) return false; this.aE(k); return true; case 130: this.aD(k); if (k.Start.X > this.G.X) return false; this.aC(k); return true; case 132: this.aD(k); this.az(k); return true; case 133: this.aD(k); if (k.Start.X < this.D.X) return false; this.aE(k); if (k.End.Y > this.G.Y) this.az(k); return true; case 134: this.aD(k); if (k.Start.X > this.G.X) return false; this.aC(k); if (k.End.Y > this.G.Y) this.az(k); return true; case 144: this.aF(k); if (k.Start.Y < this.D.Y) this.aD(k); return true; case 146: this.aC(k); if (k.End.Y < this.D.Y) return false; this.aD(k); if (k.Start.X < this.D.X) this.aF(k); return true; case 148: this.az(k); if (k.End.X < this.D.X) return false; this.aF(k); if (k.Start.Y < this.D.Y) this.aD(k); return true; case 150: this.aF(k); if (k.Start.Y > this.G.Y) return false; this.aC(k); if (k.End.Y < this.D.Y) return false; if (k.Start.Y < this.D.Y) this.aD(k); if (k.End.Y > this.G.Y) this.az(k); return true; case 160: this.aA(k); if (k.Start.Y < this.D.Y) this.aD(k); return true; case 161: this.aE(k); if (k.End.Y < this.D.Y) return false; this.aD(k); if (k.Start.X > this.G.X) this.aA(k); return true; case 164: this.az(k); if (k.End.X > this.G.X) return false; this.aA(k); if (k.Start.Y < this.D.Y) this.aD(k); return true; case 165: this.aE(k); if (k.End.Y < this.D.Y) return false; this.aA(k); if (k.Start.Y > this.G.Y) return false; if (k.End.Y > this.G.Y) this.az(k); if (k.Start.Y < this.D.Y) this.aD(k); return true; } return false; } }; function PolyLine(af, ad) { this.coordinates = af ? af : []; if (ad) { this.rgba = ad.rgba ? ad.rgba : "rgba(0,0,0,1.0)"; this.lineWidth = ad.lineWidth ? ad.lineWidth : 2; } else { this.rgba = "rgba(0,0,0,1.0)"; this.lineWidth = 2; } }; PolyLine.prototype = { addPoint: function (ak) { this.coordinates.push(ak); } }; function GUI(aM) { this.bf = "http://www.webatlas.no/webatlasapi/v/latest/media/interface/default/"; this.aM = aM ? aM : 'small'; this.mapControl = null; this.element = document.createElement('div'); divIdName = 'guibackground'; this.element.style.position = "absolute"; this.element.style.left = "16px"; this.element.setAttribute('id', divIdName); Event.observe(this.element, 'mouseup', this.cQ.bindAsEventListener(this)); Event.observe(this.element, 'dblclick', this.cQ.bindAsEventListener(this)); Event.observe(this.element, 'mousedown', this.cQ.bindAsEventListener(this)); var bh = document.createElement('div'); bh.style.background = "url(" + this.bf + this.aM + "/east.jpg)"; bh.style.position = "absolute"; bh.style.width = "16px"; bh.style.height = "16px"; bh.style.left = "32px"; bh.style.top = "34px"; bh.setAttribute('id', 'eastButton'); this.element.appendChild(bh); Event.observe(bh, 'click', this.eE.bindAsEventListener(this)); var bm = document.createElement('div'); bm.style.background = "url(" + this.bf + this.aM + "/west.jpg)"; bm.style.position = "absolute"; bm.style.width = "16px"; bm.style.height = "16px"; bm.style.left = "0px"; bm.style.top = "34px"; bm.setAttribute('id', 'westButton'); this.element.appendChild(bm); Event.observe(bm, 'click', this.eD.bindAsEventListener(this)); var bg = document.createElement('div'); bg.style.background = "url(" + this.bf + this.aM + "/north.jpg)"; bg.style.position = "absolute"; bg.style.width = "16px"; bg.style.height = "16px"; bg.style.left = "16px"; bg.style.top = "17px"; bg.setAttribute('id', 'northButton'); this.element.appendChild(bg); Event.observe(bg, 'click', this.eR.bindAsEventListener(this)); var aZ = document.createElement('div'); aZ.style.background = "url(" + this.bf + this.aM + "/south.jpg)"; aZ.style.position = "absolute"; aZ.style.width = "16px"; aZ.style.height = "16px"; aZ.style.left = "16px"; aZ.style.top = "50px"; aZ.setAttribute('id', 'southButton'); this.element.appendChild(aZ); Event.observe(aZ, 'click', this.fx.bindAsEventListener(this)); var bl = document.createElement('div'); bl.style.background = "url(" + this.bf + this.aM + "/normal.jpg)"; bl.style.position = "absolute"; bl.style.width = "48px"; bl.style.height = "16px"; bl.style.left = "0px"; bl.style.top = "104px"; bl.setAttribute('id', 'style_normalButton'); this.element.appendChild(bl); Event.observe(bl, 'click', this.fF.bindAsEventListener(this)); var aY = document.createElement('div'); aY.style.background = "url(" + this.bf + this.aM + "/ortho.jpg)"; aY.style.position = "absolute"; aY.style.width = "48px"; aY.style.height = "16px"; aY.style.left = "0px"; aY.style.top = "122px"; aY.setAttribute('id', 'style_orthoButton'); this.element.appendChild(aY); Event.observe(aY, 'click', this.fC.bindAsEventListener(this)); var bc = document.createElement('div'); bc.style.background = "url(" + this.bf + this.aM + "/hybrid.jpg)"; bc.style.position = "absolute"; bc.style.width = "48px"; bc.style.height = "16px"; bc.style.left = "0px"; bc.style.top = "140px"; bc.setAttribute('id', 'style_hybridButton'); this.element.appendChild(bc); Event.observe(bc, 'click', this.fE.bindAsEventListener(this)); var bj = document.createElement('div'); bj.style.background = "url(" + this.bf + this.aM + "/zoom_In.jpg)"; bj.style.position = "absolute"; bj.style.width = "16px"; bj.style.height = "16px"; bj.style.left = "16px"; bj.style.top = "68px"; bj.setAttribute('id', 'zoomInButton'); this.element.appendChild(bj); Event.observe(bj, 'click', this.fb.bindAsEventListener(this)); var bo = document.createElement('div'); bo.style.background = "url(" + this.bf + this.aM + "/zoom_Out.jpg)"; bo.style.position = "absolute"; bo.style.width = "16px"; bo.style.height = "16px"; bo.style.left = "16px"; bo.style.top = "86px"; bo.setAttribute('id', 'zoomOutButton'); this.element.appendChild(bo); Event.observe(bo, 'click', this.eZ.bindAsEventListener(this)); }; GUI.prototype = { fx: function (as) { ar = new Move(0, parseInt(-this.mapControl.getHeight() / 3)); this.mapControl.move(ar); as.stop(); }, eR: function (as) { ar = new Move(0, parseInt(this.mapControl.getHeight() / 3)); this.mapControl.move(ar); as.stop(); }, eE: function (as) { ar = new Move(parseInt(-this.mapControl.getWidth() / 3), 0); this.mapControl.move(ar); as.stop(); }, eD: function (as) { ar = new Move(parseInt(this.mapControl.getHeight() / 3), 0); this.mapControl.move(ar); as.stop(); }, fF: function (as) { this.mapControl.setMapStyle(0); as.stop(); }, fC: function (as) { this.mapControl.setMapStyle(1); as.stop(); }, fE: function (as) { this.mapControl.setMapStyle(2); as.stop(); }, fb: function (as) { this.mapControl.zoomIn(); as.stop(); }, eZ: function (as) { this.mapControl.zoomOut(); as.stop(); }, cQ: function (as) { as.stop(); } }; var NGTools = Class.create(); NGTools.prototype = { cw: 6378137, cz: null, cZ: null, eo: -85.05112878, eC: 85.05112878, eF: -180, fH: 180, ah: 256, initialize: function () { this.cz = this.cw * 2.0 * Math.PI; this.cZ = this.cz / 2; }, cr: function (eT, fg, fN) { return Math.min(Math.max(eT, fg), fN); }, bE: function (bp) { return this.ah << bp; }, di: function (aP, bp) { aP = this.cr(aP, this.eo, this.eC); return Math.cos(aP * Math.PI / 180) * 2 * Math.PI * this.cw / this.bE(bp); }, gf: function (aP, bp, fT) { return di(aP, bp) * fT / 0.0254; }, ay: function (aP, dn, bp) { var aP = this.cr(aP, this.eo, this.eC); var dn = this.cr(dn, this.eF, this.fH); var x = (dn + 180) / 360; var dE = Math.sin(aP * Math.PI / 180); var y = 0.5 - Math.log((1 + dE) / (1 - dE)) / (4 * Math.PI); var bE = this.bE(bp); var bS = parseInt(this.cr(x * bE + 0.5, 0, bE - 1)); var bV = parseInt(this.cr(y * bE + 0.5, 0, bE - 1)); return [bS, bV]; }, ey: function (bS, bV) { var ci = bS / this.ah; var ce = bV / this.ah; return [parseInt(ci), parseInt(ce)]; }, eB: function (bS, bV) { var ci = parseInt(bS / this.ah); var ce = parseInt(bV / this.ah); var fO = ci * this.ah; var fQ = ce * this.ah; var fA = bS - fO; var fz = bV - fQ; return [parseInt(fA), parseInt(fz)]; }, fJ: function (ci, ce, bp) { var en = ""; for (var i = bp; i > 0; i--) { var cD = '0'; var el = 1 << (i - 1); if ((ci & el) != 0) { cD++; } if ((ce & el) != 0) { cD++; cD++; } en += cD; } return en; }, T: function (y, ae) { var dp = this.cz / ((1 << ae) * this.ah); var eL = this.cZ - (y * dp); var a = Math.exp(eL * 2 / this.cw); var cS = this.eh(Math.asin((a - 1) / (a + 1))); return cS; }, U: function (x, ae) { var dp = this.cz / ((1 << ae) * this.ah); var eJ = (x * dp) - this.cZ; var cS = this.eh(eJ / this.cw); return cS; }, eh: function (d) { return d / Math.PI * 180.0; } }; var NGTools = new NGTools();
