diff --git a/build/webvr-polyfill.js b/build/webvr-polyfill.js index 3022be8..f9e42ad 100644 --- a/build/webvr-polyfill.js +++ b/build/webvr-polyfill.js @@ -2880,1006 +2880,1511 @@ Distortion.prototype.approximateInverse = function(maxRadius, numSamples) { module.exports = Distortion; },{}],11:[function(_dereq_,module,exports){ -/* - * Copyright 2015 Google Inc. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * DPDB cache. - */ -var DPDB_CACHE = { - "format": 1, - "last_updated": "2016-01-20T00:18:35Z", - "devices": [ - - { - "type": "android", - "rules": [ - { "mdmh": "asus/*/Nexus 7/*" }, - { "ua": "Nexus 7" } - ], - "dpi": [ 320.8, 323.0 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "asus/*/ASUS_Z00AD/*" }, - { "ua": "ASUS_Z00AD" } - ], - "dpi": [ 403.0, 404.6 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Google//Pixel XL/" }, - { "ua": "Pixel XL" } - ], - "dpi": [537.9, 533], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Google//Pixel/" }, - { "ua": "Pixel" } - ], - "dpi": [432.6, 436.7], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "HTC/*/HTC6435LVW/*" }, - { "ua": "HTC6435LVW" } - ], - "dpi": [ 449.7, 443.3 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "HTC/*/HTC One XL/*" }, - { "ua": "HTC One XL" } - ], - "dpi": [ 315.3, 314.6 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "htc/*/Nexus 9/*" }, - { "ua": "Nexus 9" } - ], - "dpi": 289.0, - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "HTC/*/HTC One M9/*" }, - { "ua": "HTC One M9" } - ], - "dpi": [ 442.5, 443.3 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "HTC/*/HTC One_M8/*" }, - { "ua": "HTC One_M8" } - ], - "dpi": [ 449.7, 447.4 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "HTC/*/HTC One/*" }, - { "ua": "HTC One" } - ], - "dpi": 472.8, - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Huawei/*/Nexus 6P/*" }, - { "ua": "Nexus 6P" } - ], - "dpi": [ 515.1, 518.0 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/Nexus 5X/*" }, - { "ua": "Nexus 5X" } - ], - "dpi": [ 422.0, 419.9 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/LGMS345/*" }, - { "ua": "LGMS345" } - ], - "dpi": [ 221.7, 219.1 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/LG-D800/*" }, - { "ua": "LG-D800" } - ], - "dpi": [ 422.0, 424.1 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/LG-D850/*" }, - { "ua": "LG-D850" } - ], - "dpi": [ 537.9, 541.9 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/VS985 4G/*" }, - { "ua": "VS985 4G" } - ], - "dpi": [ 537.9, 535.6 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/Nexus 5/*" }, - { "ua": "Nexus 5 " } - ], - "dpi": [ 442.4, 444.8 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/Nexus 4/*" }, - { "ua": "Nexus 4" } - ], - "dpi": [ 319.8, 318.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/LG-P769/*" }, - { "ua": "LG-P769" } - ], - "dpi": [ 240.6, 247.5 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/LGMS323/*" }, - { "ua": "LGMS323" } - ], - "dpi": [ 206.6, 204.6 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "LGE/*/LGLS996/*" }, - { "ua": "LGLS996" } - ], - "dpi": [ 403.4, 401.5 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Micromax/*/4560MMX/*" }, - { "ua": "4560MMX" } - ], - "dpi": [ 240.0, 219.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Micromax/*/A250/*" }, - { "ua": "Micromax A250" } - ], - "dpi": [ 480.0, 446.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Micromax/*/Micromax AQ4501/*" }, - { "ua": "Micromax AQ4501" } - ], - "dpi": 240.0, - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/DROID RAZR/*" }, - { "ua": "DROID RAZR" } - ], - "dpi": [ 368.1, 256.7 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT830C/*" }, - { "ua": "XT830C" } - ], - "dpi": [ 254.0, 255.9 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1021/*" }, - { "ua": "XT1021" } - ], - "dpi": [ 254.0, 256.7 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1023/*" }, - { "ua": "XT1023" } - ], - "dpi": [ 254.0, 256.7 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1028/*" }, - { "ua": "XT1028" } - ], - "dpi": [ 326.6, 327.6 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1034/*" }, - { "ua": "XT1034" } - ], - "dpi": [ 326.6, 328.4 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1053/*" }, - { "ua": "XT1053" } - ], - "dpi": [ 315.3, 316.1 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1562/*" }, - { "ua": "XT1562" } - ], - "dpi": [ 403.4, 402.7 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/Nexus 6/*" }, - { "ua": "Nexus 6 " } - ], - "dpi": [ 494.3, 489.7 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1063/*" }, - { "ua": "XT1063" } - ], - "dpi": [ 295.0, 296.6 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1064/*" }, - { "ua": "XT1064" } - ], - "dpi": [ 295.0, 295.6 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1092/*" }, - { "ua": "XT1092" } - ], - "dpi": [ 422.0, 424.1 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/XT1095/*" }, - { "ua": "XT1095" } - ], - "dpi": [ 422.0, 423.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "motorola/*/G4/*" }, - { "ua": "Moto G (4)" } - ], - "dpi": 401.0, - "bw": 4, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "OnePlus/*/A0001/*" }, - { "ua": "A0001" } - ], - "dpi": [ 403.4, 401.0 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "OnePlus/*/ONE E1005/*" }, - { "ua": "ONE E1005" } - ], - "dpi": [ 442.4, 441.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "OnePlus/*/ONE A2005/*" }, - { "ua": "ONE A2005" } - ], - "dpi": [ 391.9, 405.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "OPPO/*/X909/*" }, - { "ua": "X909" } - ], - "dpi": [ 442.4, 444.1 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/GT-I9082/*" }, - { "ua": "GT-I9082" } - ], - "dpi": [ 184.7, 185.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G360P/*" }, - { "ua": "SM-G360P" } - ], - "dpi": [ 196.7, 205.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/Nexus S/*" }, - { "ua": "Nexus S" } - ], - "dpi": [ 234.5, 229.8 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/GT-I9300/*" }, - { "ua": "GT-I9300" } - ], - "dpi": [ 304.8, 303.9 ], - "bw": 5, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-T230NU/*" }, - { "ua": "SM-T230NU" } - ], - "dpi": 216.0, - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SGH-T399/*" }, - { "ua": "SGH-T399" } - ], - "dpi": [ 217.7, 231.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-N9005/*" }, - { "ua": "SM-N9005" } - ], - "dpi": [ 386.4, 387.0 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SAMSUNG-SM-N900A/*" }, - { "ua": "SAMSUNG-SM-N900A" } - ], - "dpi": [ 386.4, 387.7 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/GT-I9500/*" }, - { "ua": "GT-I9500" } - ], - "dpi": [ 442.5, 443.3 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/GT-I9505/*" }, - { "ua": "GT-I9505" } - ], - "dpi": 439.4, - "bw": 4, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G900F/*" }, - { "ua": "SM-G900F" } - ], - "dpi": [ 415.6, 431.6 ], - "bw": 5, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G900M/*" }, - { "ua": "SM-G900M" } - ], - "dpi": [ 415.6, 431.6 ], - "bw": 5, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G800F/*" }, - { "ua": "SM-G800F" } - ], - "dpi": 326.8, - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G906S/*" }, - { "ua": "SM-G906S" } - ], - "dpi": [ 562.7, 572.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/GT-I9300/*" }, - { "ua": "GT-I9300" } - ], - "dpi": [ 306.7, 304.8 ], - "bw": 5, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-T535/*" }, - { "ua": "SM-T535" } - ], - "dpi": [ 142.6, 136.4 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-N920C/*" }, - { "ua": "SM-N920C" } - ], - "dpi": [ 515.1, 518.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-N920W8/*" }, - { "ua": "SM-N920W8" } - ], - "dpi": [ 515.1, 518.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/GT-I9300I/*" }, - { "ua": "GT-I9300I" } - ], - "dpi": [ 304.8, 305.8 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/GT-I9195/*" }, - { "ua": "GT-I9195" } - ], - "dpi": [ 249.4, 256.7 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SPH-L520/*" }, - { "ua": "SPH-L520" } - ], - "dpi": [ 249.4, 255.9 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SAMSUNG-SGH-I717/*" }, - { "ua": "SAMSUNG-SGH-I717" } - ], - "dpi": 285.8, - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SPH-D710/*" }, - { "ua": "SPH-D710" } - ], - "dpi": [ 217.7, 204.2 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/GT-N7100/*" }, - { "ua": "GT-N7100" } - ], - "dpi": 265.1, - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SCH-I605/*" }, - { "ua": "SCH-I605" } - ], - "dpi": 265.1, - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/Galaxy Nexus/*" }, - { "ua": "Galaxy Nexus" } - ], - "dpi": [ 315.3, 314.2 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-N910H/*" }, - { "ua": "SM-N910H" } - ], - "dpi": [ 515.1, 518.0 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-N910C/*" }, - { "ua": "SM-N910C" } - ], - "dpi": [ 515.2, 520.2 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G130M/*" }, - { "ua": "SM-G130M" } - ], - "dpi": [ 165.9, 164.8 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G928I/*" }, - { "ua": "SM-G928I" } - ], - "dpi": [ 515.1, 518.4 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G920F/*" }, - { "ua": "SM-G920F" } - ], - "dpi": 580.6, - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G920P/*" }, - { "ua": "SM-G920P" } - ], - "dpi": [ 522.5, 577.0 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G925F/*" }, - { "ua": "SM-G925F" } - ], - "dpi": 580.6, - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G925V/*" }, - { "ua": "SM-G925V" } - ], - "dpi": [ 522.5, 576.6 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "samsung/*/SM-G935F/*" }, - { "ua": "SM-G935F" } - ], - "dpi": 534, - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Sony/*/C6903/*" }, - { "ua": "C6903" } - ], - "dpi": [ 442.5, 443.3 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Sony/*/D6653/*" }, - { "ua": "D6653" } - ], - "dpi": [ 428.6, 427.6 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Sony/*/E6653/*" }, - { "ua": "E6653" } - ], - "dpi": [ 428.6, 425.7 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Sony/*/E6853/*" }, - { "ua": "E6853" } - ], - "dpi": [ 403.4, 401.9 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "Sony/*/SGP321/*" }, - { "ua": "SGP321" } - ], - "dpi": [ 224.7, 224.1 ], - "bw": 3, - "ac": 500 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "TCT/*/ALCATEL ONE TOUCH Fierce/*" }, - { "ua": "ALCATEL ONE TOUCH Fierce" } - ], - "dpi": [ 240.0, 247.5 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "THL/*/thl 5000/*" }, - { "ua": "thl 5000" } - ], - "dpi": [ 480.0, 443.3 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "android", - "rules": [ - { "mdmh": "ZTE/*/ZTE Blade L2/*" }, - { "ua": "ZTE Blade L2" } - ], - "dpi": 240.0, - "bw": 3, - "ac": 500 - }, - - { - "type": "ios", - "rules": [ { "res": [ 640, 960 ] } ], - "dpi": [ 325.1, 328.4 ], - "bw": 4, - "ac": 1000 - }, - - { - "type": "ios", - "rules": [ { "res": [ 640, 1136 ] } ], - "dpi": [ 317.1, 320.2 ], - "bw": 3, - "ac": 1000 - }, - - { - "type": "ios", - "rules": [ { "res": [ 750, 1334 ] } ], - "dpi": 326.4, - "bw": 4, - "ac": 1000 - }, - - { - "type": "ios", - "rules": [ { "res": [ 1242, 2208 ] } ], - "dpi": [ 453.6, 458.4 ], - "bw": 4, - "ac": 1000 - }, - - { - "type": "ios", - "rules": [ { "res": [ 1125, 2001 ] } ], - "dpi": [ 410.9, 415.4 ], - "bw": 4, - "ac": 1000 - } -]}; - -module.exports = DPDB_CACHE; +module.exports={ + "format":1, + "last_updated":"2017-01-12T08:41:55Z", + "devices":[ + { + "type":"android", + "rules":[ + { + "mdmh":"asus/*/Nexus 7/*" + }, + { + "ua":"Nexus 7" + } + ], + "dpi":[ + 320.8, + 323 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"asus/*/ASUS_Z00AD/*" + }, + { + "ua":"ASUS_Z00AD" + } + ], + "dpi":[ + 403, + 404.6 + ], + "bw":3, + "ac":1000 + }, + { + "type": "android", + "rules": [ + { + "mdmh": "Google//Pixel XL/" + }, + { + "ua": "Pixel XL" + } + ], + "dpi": [ + 537.9, + 533 + ], + "bw": 3, + "ac": 1000 + }, + { + "type": "android", + "rules": [ + { + "mdmh": "Google//Pixel/" + }, + { + "ua": "Pixel" + } + ], + "dpi": [ + 432.6, + 436.7 + ], + "bw": 3, + "ac": 1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"HTC/*/HTC6435LVW/*" + }, + { + "ua":"HTC6435LVW" + } + ], + "dpi":[ + 449.7, + 443.3 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"HTC/*/HTC One XL/*" + }, + { + "ua":"HTC One XL" + } + ], + "dpi":[ + 315.3, + 314.6 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"htc/*/Nexus 9/*" + }, + { + "ua":"Nexus 9" + } + ], + "dpi":289, + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"HTC/*/HTC One M9/*" + }, + { + "ua":"HTC One M9" + } + ], + "dpi":[ + 442.5, + 443.3 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"HTC/*/HTC One_M8/*" + }, + { + "ua":"HTC One_M8" + } + ], + "dpi":[ + 449.7, + 447.4 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"HTC/*/HTC One/*" + }, + { + "ua":"HTC One" + } + ], + "dpi":472.8, + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Huawei/*/Nexus 6P/*" + }, + { + "ua":"Nexus 6P" + } + ], + "dpi":[ + 515.1, + 518 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/Nexus 5X/*" + }, + { + "ua":"Nexus 5X" + } + ], + "dpi":[ + 422, + 419.9 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/LGMS345/*" + }, + { + "ua":"LGMS345" + } + ], + "dpi":[ + 221.7, + 219.1 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/LG-D800/*" + }, + { + "ua":"LG-D800" + } + ], + "dpi":[ + 422, + 424.1 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/LG-D850/*" + }, + { + "ua":"LG-D850" + } + ], + "dpi":[ + 537.9, + 541.9 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/VS985 4G/*" + }, + { + "ua":"VS985 4G" + } + ], + "dpi":[ + 537.9, + 535.6 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/Nexus 5/*" + }, + { + "ua":"Nexus 5 B" + } + ], + "dpi":[ + 442.4, + 444.8 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/Nexus 4/*" + }, + { + "ua":"Nexus 4" + } + ], + "dpi":[ + 319.8, + 318.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/LG-P769/*" + }, + { + "ua":"LG-P769" + } + ], + "dpi":[ + 240.6, + 247.5 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/LGMS323/*" + }, + { + "ua":"LGMS323" + } + ], + "dpi":[ + 206.6, + 204.6 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"LGE/*/LGLS996/*" + }, + { + "ua":"LGLS996" + } + ], + "dpi":[ + 403.4, + 401.5 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Micromax/*/4560MMX/*" + }, + { + "ua":"4560MMX" + } + ], + "dpi":[ + 240, + 219.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Micromax/*/A250/*" + }, + { + "ua":"Micromax A250" + } + ], + "dpi":[ + 480, + 446.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Micromax/*/Micromax AQ4501/*" + }, + { + "ua":"Micromax AQ4501" + } + ], + "dpi":240, + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/DROID RAZR/*" + }, + { + "ua":"DROID RAZR" + } + ], + "dpi":[ + 368.1, + 256.7 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT830C/*" + }, + { + "ua":"XT830C" + } + ], + "dpi":[ + 254, + 255.9 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1021/*" + }, + { + "ua":"XT1021" + } + ], + "dpi":[ + 254, + 256.7 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1023/*" + }, + { + "ua":"XT1023" + } + ], + "dpi":[ + 254, + 256.7 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1028/*" + }, + { + "ua":"XT1028" + } + ], + "dpi":[ + 326.6, + 327.6 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1034/*" + }, + { + "ua":"XT1034" + } + ], + "dpi":[ + 326.6, + 328.4 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1053/*" + }, + { + "ua":"XT1053" + } + ], + "dpi":[ + 315.3, + 316.1 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1562/*" + }, + { + "ua":"XT1562" + } + ], + "dpi":[ + 403.4, + 402.7 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/Nexus 6/*" + }, + { + "ua":"Nexus 6 B" + } + ], + "dpi":[ + 494.3, + 489.7 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1063/*" + }, + { + "ua":"XT1063" + } + ], + "dpi":[ + 295, + 296.6 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1064/*" + }, + { + "ua":"XT1064" + } + ], + "dpi":[ + 295, + 295.6 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1092/*" + }, + { + "ua":"XT1092" + } + ], + "dpi":[ + 422, + 424.1 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"motorola/*/XT1095/*" + }, + { + "ua":"XT1095" + } + ], + "dpi":[ + 422, + 423.4 + ], + "bw":3, + "ac":1000 + }, + { + "type": "android", + "rules": [ + { + "mdmh": "motorola/*/G4/*" + }, + { + "ua": "Moto G (4)" + } + ], + "dpi": 401.0, + "bw": 4, + "ac": 1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"OnePlus/*/A0001/*" + }, + { + "ua":"A0001" + } + ], + "dpi":[ + 403.4, + 401 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"OnePlus/*/ONE E1005/*" + }, + { + "ua":"ONE E1005" + } + ], + "dpi":[ + 442.4, + 441.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"OnePlus/*/ONE A2005/*" + }, + { + "ua":"ONE A2005" + } + ], + "dpi":[ + 391.9, + 405.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"OPPO/*/X909/*" + }, + { + "ua":"X909" + } + ], + "dpi":[ + 442.4, + 444.1 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/GT-I9082/*" + }, + { + "ua":"GT-I9082" + } + ], + "dpi":[ + 184.7, + 185.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G360P/*" + }, + { + "ua":"SM-G360P" + } + ], + "dpi":[ + 196.7, + 205.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/Nexus S/*" + }, + { + "ua":"Nexus S" + } + ], + "dpi":[ + 234.5, + 229.8 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/GT-I9300/*" + }, + { + "ua":"GT-I9300" + } + ], + "dpi":[ + 304.8, + 303.9 + ], + "bw":5, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-T230NU/*" + }, + { + "ua":"SM-T230NU" + } + ], + "dpi":216, + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SGH-T399/*" + }, + { + "ua":"SGH-T399" + } + ], + "dpi":[ + 217.7, + 231.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-N9005/*" + }, + { + "ua":"SM-N9005" + } + ], + "dpi":[ + 386.4, + 387 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SAMSUNG-SM-N900A/*" + }, + { + "ua":"SAMSUNG-SM-N900A" + } + ], + "dpi":[ + 386.4, + 387.7 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/GT-I9500/*" + }, + { + "ua":"GT-I9500" + } + ], + "dpi":[ + 442.5, + 443.3 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/GT-I9505/*" + }, + { + "ua":"GT-I9505" + } + ], + "dpi":439.4, + "bw":4, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G900F/*" + }, + { + "ua":"SM-G900F" + } + ], + "dpi":[ + 415.6, + 431.6 + ], + "bw":5, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G900M/*" + }, + { + "ua":"SM-G900M" + } + ], + "dpi":[ + 415.6, + 431.6 + ], + "bw":5, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G800F/*" + }, + { + "ua":"SM-G800F" + } + ], + "dpi":326.8, + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G906S/*" + }, + { + "ua":"SM-G906S" + } + ], + "dpi":[ + 562.7, + 572.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/GT-I9300/*" + }, + { + "ua":"GT-I9300" + } + ], + "dpi":[ + 306.7, + 304.8 + ], + "bw":5, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-T535/*" + }, + { + "ua":"SM-T535" + } + ], + "dpi":[ + 142.6, + 136.4 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-N920C/*" + }, + { + "ua":"SM-N920C" + } + ], + "dpi":[ + 515.1, + 518.4 + ], + "bw":3, + "ac":1000 + }, + { + "type": "android", + "rules": [ + { + "mdmh": "samsung/*/SM-N920W8/*" + }, + { + "ua": "SM-N920W8" + } + ], + "dpi": [ + 515.1, + 518.4 + ], + "bw": 3, + "ac": 1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/GT-I9300I/*" + }, + { + "ua":"GT-I9300I" + } + ], + "dpi":[ + 304.8, + 305.8 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/GT-I9195/*" + }, + { + "ua":"GT-I9195" + } + ], + "dpi":[ + 249.4, + 256.7 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SPH-L520/*" + }, + { + "ua":"SPH-L520" + } + ], + "dpi":[ + 249.4, + 255.9 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SAMSUNG-SGH-I717/*" + }, + { + "ua":"SAMSUNG-SGH-I717" + } + ], + "dpi":285.8, + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SPH-D710/*" + }, + { + "ua":"SPH-D710" + } + ], + "dpi":[ + 217.7, + 204.2 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/GT-N7100/*" + }, + { + "ua":"GT-N7100" + } + ], + "dpi":265.1, + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SCH-I605/*" + }, + { + "ua":"SCH-I605" + } + ], + "dpi":265.1, + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/Galaxy Nexus/*" + }, + { + "ua":"Galaxy Nexus" + } + ], + "dpi":[ + 315.3, + 314.2 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-N910H/*" + }, + { + "ua":"SM-N910H" + } + ], + "dpi":[ + 515.1, + 518 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-N910C/*" + }, + { + "ua":"SM-N910C" + } + ], + "dpi":[ + 515.2, + 520.2 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G130M/*" + }, + { + "ua":"SM-G130M" + } + ], + "dpi":[ + 165.9, + 164.8 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G928I/*" + }, + { + "ua":"SM-G928I" + } + ], + "dpi":[ + 515.1, + 518.4 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G920F/*" + }, + { + "ua":"SM-G920F" + } + ], + "dpi":580.6, + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G920P/*" + }, + { + "ua":"SM-G920P" + } + ], + "dpi":[ + 522.5, + 577 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G925F/*" + }, + { + "ua":"SM-G925F" + } + ], + "dpi":580.6, + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G925V/*" + }, + { + "ua":"SM-G925V" + } + ], + "dpi":[ + 522.5, + 576.6 + ], + "bw":3, + "ac":1000 + }, + { + "type": "android", + "rules": [ + { + "mdmh": "samsung/*/SM-G930F/*" + }, + { + "ua": "SM-G930F" + } + ], + "dpi": 576.6, + "bw": 3, + "ac": 1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"samsung/*/SM-G935F/*" + }, + { + "ua":"SM-G935F" + } + ], + "dpi":533, + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Sony/*/C6903/*" + }, + { + "ua":"C6903" + } + ], + "dpi":[ + 442.5, + 443.3 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Sony/*/D6653/*" + }, + { + "ua":"D6653" + } + ], + "dpi":[ + 428.6, + 427.6 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Sony/*/E6653/*" + }, + { + "ua":"E6653" + } + ], + "dpi":[ + 428.6, + 425.7 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Sony/*/E6853/*" + }, + { + "ua":"E6853" + } + ], + "dpi":[ + 403.4, + 401.9 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"Sony/*/SGP321/*" + }, + { + "ua":"SGP321" + } + ], + "dpi":[ + 224.7, + 224.1 + ], + "bw":3, + "ac":500 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"TCT/*/ALCATEL ONE TOUCH Fierce/*" + }, + { + "ua":"ALCATEL ONE TOUCH Fierce" + } + ], + "dpi":[ + 240, + 247.5 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"THL/*/thl 5000/*" + }, + { + "ua":"thl 5000" + } + ], + "dpi":[ + 480, + 443.3 + ], + "bw":3, + "ac":1000 + }, + { + "type":"android", + "rules":[ + { + "mdmh":"ZTE/*/ZTE Blade L2/*" + }, + { + "ua":"ZTE Blade L2" + } + ], + "dpi":240, + "bw":3, + "ac":500 + }, + { + "type":"ios", + "rules":[ + { + "res":[ + 640, + 960 + ] + } + ], + "dpi":[ + 325.1, + 328.4 + ], + "bw":4, + "ac":1000 + }, + { + "type":"ios", + "rules":[ + { + "res":[ + 640, + 1136 + ] + } + ], + "dpi":[ + 317.1, + 320.2 + ], + "bw":3, + "ac":1000 + }, + { + "type":"ios", + "rules":[ + { + "res":[ + 750, + 1334 + ] + } + ], + "dpi":326.4, + "bw":4, + "ac":1000 + }, + { + "type":"ios", + "rules":[ + { + "res":[ + 1242, + 2208 + ] + } + ], + "dpi":[ + 453.6, + 458.4 + ], + "bw":4, + "ac":1000 + }, + { + "type":"ios", + "rules":[ + { + "res":[ + 1125, + 2001 + ] + } + ], + "dpi":[ + 410.9, + 415.4 + ], + "bw":4, + "ac":1000 + } + ] +} },{}],12:[function(_dereq_,module,exports){ /* @@ -3899,11 +4404,13 @@ module.exports = DPDB_CACHE; // Offline cache of the DPDB, to be used until we load the online one (and // as a fallback in case we can't load the online one). -var DPDB_CACHE = _dereq_('./dpdb-cache.js'); +var DPDB_CACHE = _dereq_('./dpdb-cache.json'); var Util = _dereq_('../util.js'); +window.DPDB_CACHE = DPDB_CACHE; // Online DPDB URL. -var ONLINE_DPDB_URL = 'https://storage.googleapis.com/cardboard-dpdb/dpdb.json'; +var ONLINE_DPDB_URL = + 'https://dpdb.webvr.rocks/dpdb.json'; /** * Calculates device parameters based on the DPDB (Device Parameter Database). @@ -4062,7 +4569,7 @@ function DeviceParams(params) { module.exports = Dpdb; -},{"../util.js":22,"./dpdb-cache.js":11}],13:[function(_dereq_,module,exports){ +},{"../util.js":22,"./dpdb-cache.json":11}],13:[function(_dereq_,module,exports){ /* * Copyright 2015 Google Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/build/webvr-polyfill.min.js b/build/webvr-polyfill.min.js index 9f6e993..c48ac88 100644 --- a/build/webvr-polyfill.min.js +++ b/build/webvr-polyfill.min.js @@ -1,17 +1 @@ -<<<<<<< HEAD -!function(f){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=f();else if("function"==typeof define&&define.amd)define([],f);else{var g;g="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,g.WebVRPolyfill=f()}}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;oi;i++)ee[i]=available[i].fn;return ee},EventEmitter.prototype.emit=function(event,a1,a2,a3,a4,a5){var evt=prefix?prefix+event:event;if(!this._events[evt])return!1;var args,i,listeners=this._events[evt],len=arguments.length;if(listeners.fn){switch(listeners.once&&this.removeListener(event,listeners.fn,void 0,!0),len){case 1:return listeners.fn.call(listeners.context),!0;case 2:return listeners.fn.call(listeners.context,a1),!0;case 3:return listeners.fn.call(listeners.context,a1,a2),!0;case 4:return listeners.fn.call(listeners.context,a1,a2,a3),!0;case 5:return listeners.fn.call(listeners.context,a1,a2,a3,a4),!0;case 6:return listeners.fn.call(listeners.context,a1,a2,a3,a4,a5),!0}for(i=1,args=new Array(len-1);len>i;i++)args[i-1]=arguments[i];listeners.fn.apply(listeners.context,args)}else{var j,length=listeners.length;for(i=0;length>i;i++)switch(listeners[i].once&&this.removeListener(event,listeners[i].fn,void 0,!0),len){case 1:listeners[i].fn.call(listeners[i].context);break;case 2:listeners[i].fn.call(listeners[i].context,a1);break;case 3:listeners[i].fn.call(listeners[i].context,a1,a2);break;case 4:listeners[i].fn.call(listeners[i].context,a1,a2,a3);break;default:if(!args)for(j=1,args=new Array(len-1);len>j;j++)args[j-1]=arguments[j];listeners[i].fn.apply(listeners[i].context,args)}}return!0},EventEmitter.prototype.on=function(event,fn,context){var listener=new EE(fn,context||this),evt=prefix?prefix+event:event;return this._events[evt]?this._events[evt].fn?this._events[evt]=[this._events[evt],listener]:this._events[evt].push(listener):(this._events[evt]=listener,this._eventsCount++),this},EventEmitter.prototype.once=function(event,fn,context){var listener=new EE(fn,context||this,!0),evt=prefix?prefix+event:event;return this._events[evt]?this._events[evt].fn?this._events[evt]=[this._events[evt],listener]:this._events[evt].push(listener):(this._events[evt]=listener,this._eventsCount++),this},EventEmitter.prototype.removeListener=function(event,fn,context,once){var evt=prefix?prefix+event:event;if(!this._events[evt])return this;if(!fn)return 0===--this._eventsCount?this._events=new Events:delete this._events[evt],this;var listeners=this._events[evt];if(listeners.fn)listeners.fn!==fn||once&&!listeners.once||context&&listeners.context!==context||(0===--this._eventsCount?this._events=new Events:delete this._events[evt]);else{for(var i=0,events=[],length=listeners.length;length>i;i++)(listeners[i].fn!==fn||once&&!listeners[i].once||context&&listeners[i].context!==context)&&events.push(listeners[i]);events.length?this._events[evt]=1===events.length?events[0]:events:0===--this._eventsCount?this._events=new Events:delete this._events[evt]}return this},EventEmitter.prototype.removeAllListeners=function(event){var evt;return event?(evt=prefix?prefix+event:event,this._events[evt]&&(0===--this._eventsCount?this._events=new Events:delete this._events[evt])):(this._events=new Events,this._eventsCount=0),this},EventEmitter.prototype.off=EventEmitter.prototype.removeListener,EventEmitter.prototype.addListener=EventEmitter.prototype.on,EventEmitter.prototype.setMaxListeners=function(){return this},EventEmitter.prefixed=prefix,EventEmitter.EventEmitter=EventEmitter,"undefined"!=typeof module&&(module.exports=EventEmitter)},{}],2:[function(_dereq_,module){"use strict";function toObject(val){if(null===val||void 0===val)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(val)}function shouldUseNative(){try{if(!Object.assign)return!1;var test1=new String("abc");if(test1[5]="de","5"===Object.getOwnPropertyNames(test1)[0])return!1;for(var test2={},i=0;10>i;i++)test2["_"+String.fromCharCode(i)]=i;var order2=Object.getOwnPropertyNames(test2).map(function(n){return test2[n]});if("0123456789"!==order2.join(""))return!1;var test3={};return"abcdefghijklmnopqrst".split("").forEach(function(letter){test3[letter]=letter}),"abcdefghijklmnopqrst"!==Object.keys(Object.assign({},test3)).join("")?!1:!0}catch(err){return!1}}var getOwnPropertySymbols=Object.getOwnPropertySymbols,hasOwnProperty=Object.prototype.hasOwnProperty,propIsEnumerable=Object.prototype.propertyIsEnumerable;module.exports=shouldUseNative()?Object.assign:function(target){for(var from,symbols,to=toObject(target),s=1;sself.capabilities.maxLayers)return void reject(new Error("Invalid number of layers."));var incomingLayer=layers[0];if(!incomingLayer.source)return void resolve();var leftBounds=incomingLayer.leftBounds||defaultLeftBounds,rightBounds=incomingLayer.rightBounds||defaultRightBounds;if(wasPresenting){var layer=self.layer_;layer.source!==incomingLayer.source&&(layer.source=incomingLayer.source);for(var i=0;4>i;i++)layer.leftBounds[i]=leftBounds[i],layer.rightBounds[i]=rightBounds[i];return void resolve()}if(self.layer_={predistorted:incomingLayer.predistorted,source:incomingLayer.source,leftBounds:leftBounds.slice(0),rightBounds:rightBounds.slice(0)},self.waitingForPresent_=!1,self.layer_&&self.layer_.source){var fullscreenElement=self.wrapForFullscreen(self.layer_.source);self.addFullscreenListeners_(fullscreenElement,onFullscreenChange,onFullscreenError),Util.requestFullscreen(fullscreenElement)?(self.wakelock_.request(),self.waitingForPresent_=!0):Util.isIOS()&&(self.wakelock_.request(),self.isPresenting=!0,self.beginPresent_(),self.fireVRDisplayPresentChange_(),resolve())}self.waitingForPresent_||Util.isIOS()||(Util.exitFullscreen(),reject(new Error("Unable to present.")))})},VRDisplay.prototype.exitPresent=function(){var wasPresenting=this.isPresenting,self=this;return this.isPresenting=!1,this.layer_=null,this.wakelock_.release(),new Promise(function(resolve,reject){wasPresenting?(!Util.exitFullscreen()&&Util.isIOS()&&(self.endPresent_(),self.fireVRDisplayPresentChange_()),resolve()):reject(new Error("Was not presenting to VRDisplay."))})},VRDisplay.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},VRDisplay.prototype.fireVRDisplayPresentChange_=function(){var event=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(event)},VRDisplay.prototype.addFullscreenListeners_=function(element,changeHandler,errorHandler){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=element,this.fullscreenChangeHandler_=changeHandler,this.fullscreenErrorHandler_=errorHandler,changeHandler&&(document.fullscreenEnabled?element.addEventListener("fullscreenchange",changeHandler,!1):document.webkitFullscreenEnabled?element.addEventListener("webkitfullscreenchange",changeHandler,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",changeHandler,!1):document.msFullscreenEnabled&&element.addEventListener("msfullscreenchange",changeHandler,!1)),errorHandler&&(document.fullscreenEnabled?element.addEventListener("fullscreenerror",errorHandler,!1):document.webkitFullscreenEnabled?element.addEventListener("webkitfullscreenerror",errorHandler,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",errorHandler,!1):document.msFullscreenEnabled&&element.addEventListener("msfullscreenerror",errorHandler,!1))},VRDisplay.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var element=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var changeHandler=this.fullscreenChangeHandler_;element.removeEventListener("fullscreenchange",changeHandler,!1),element.removeEventListener("webkitfullscreenchange",changeHandler,!1),document.removeEventListener("mozfullscreenchange",changeHandler,!1),element.removeEventListener("msfullscreenchange",changeHandler,!1)}if(this.fullscreenErrorHandler_){var errorHandler=this.fullscreenErrorHandler_;element.removeEventListener("fullscreenerror",errorHandler,!1),element.removeEventListener("webkitfullscreenerror",errorHandler,!1),document.removeEventListener("mozfullscreenerror",errorHandler,!1),element.removeEventListener("msfullscreenerror",errorHandler,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},VRDisplay.prototype.beginPresent_=function(){},VRDisplay.prototype.endPresent_=function(){},VRDisplay.prototype.submitFrame=function(){},VRDisplay.prototype.getEyeParameters=function(){return null},HMDVRDevice.prototype=new VRDevice,PositionSensorVRDevice.prototype=new VRDevice,module.exports.VRFrameData=VRFrameData,module.exports.VRDisplay=VRDisplay,module.exports.VRDevice=VRDevice,module.exports.HMDVRDevice=HMDVRDevice,module.exports.PositionSensorVRDevice=PositionSensorVRDevice},{"./util.js":22,"./wakelock.js":24}],4:[function(_dereq_,module){function CardboardDistorter(gl){this.gl=gl,this.ctxAttribs=gl.getContextAttributes(),this.meshWidth=20,this.meshHeight=20,this.bufferScale=WebVRConfig.BUFFER_SCALE,this.bufferWidth=gl.drawingBufferWidth,this.bufferHeight=gl.drawingBufferHeight,this.realBindFramebuffer=gl.bindFramebuffer,this.realEnable=gl.enable,this.realDisable=gl.disable,this.realColorMask=gl.colorMask,this.realClearColor=gl.clearColor,this.realViewport=gl.viewport,Util.isIOS()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=Util.linkProgram(gl,distortionVS,distortionFS,this.attribs),this.uniforms=Util.getProgramUniforms(gl,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=gl.createBuffer(),this.indexBuffer=gl.createBuffer(),this.indexCount=0,this.renderTarget=gl.createTexture(),this.framebuffer=gl.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=gl.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=gl.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=gl.createRenderbuffer()),this.patch(),this.onResize(),WebVRConfig.CARDBOARD_UI_DISABLED||(this.cardboardUI=new CardboardUI(gl))}var CardboardUI=_dereq_("./cardboard-ui.js"),Util=_dereq_("./util.js"),WGLUPreserveGLState=_dereq_("./deps/wglu-preserve-state.js"),distortionVS=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),distortionFS=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");CardboardDistorter.prototype.destroy=function(){var gl=this.gl;this.unpatch(),gl.deleteProgram(this.program),gl.deleteBuffer(this.vertexBuffer),gl.deleteBuffer(this.indexBuffer),gl.deleteTexture(this.renderTarget),gl.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&gl.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&gl.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&gl.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},CardboardDistorter.prototype.onResize=function(){var gl=this.gl,self=this,glState=[gl.RENDERBUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0];WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null),self.scissorTest&&self.realDisable.call(gl,gl.SCISSOR_TEST),self.realColorMask.call(gl,!0,!0,!0,!0),self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),self.realClearColor.call(gl,0,0,0,1),gl.clear(gl.COLOR_BUFFER_BIT),self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.framebuffer),gl.bindTexture(gl.TEXTURE_2D,self.renderTarget),gl.texImage2D(gl.TEXTURE_2D,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,self.bufferWidth,self.bufferHeight,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,gl.UNSIGNED_BYTE,null),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,self.renderTarget,0),self.ctxAttribs.depth&&self.ctxAttribs.stencil?(gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthStencilBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_STENCIL,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.depthStencilBuffer)):self.ctxAttribs.depth?(gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,self.depthBuffer)):self.ctxAttribs.stencil&&(gl.bindRenderbuffer(gl.RENDERBUFFER,self.stencilBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.STENCIL_INDEX8,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.stencilBuffer)),!gl.checkFramebufferStatus(gl.FRAMEBUFFER)===gl.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer),self.scissorTest&&self.realEnable.call(gl,gl.SCISSOR_TEST),self.realColorMask.apply(gl,self.colorMask),self.realViewport.apply(gl,self.viewport),self.realClearColor.apply(gl,self.clearColor)}),this.cardboardUI&&this.cardboardUI.onResize()},CardboardDistorter.prototype.patch=function(){if(!this.isPatched){var self=this,canvas=this.gl.canvas,gl=this.gl;Util.isIOS()||(canvas.width=Util.getScreenWidth()*this.bufferScale,canvas.height=Util.getScreenHeight()*this.bufferScale,Object.defineProperty(canvas,"width",{configurable:!0,enumerable:!0,get:function(){return self.bufferWidth},set:function(value){self.bufferWidth=value,self.realCanvasWidth.set.call(canvas,value),self.onResize()}}),Object.defineProperty(canvas,"height",{configurable:!0,enumerable:!0,get:function(){return self.bufferHeight},set:function(value){self.bufferHeight=value,self.realCanvasHeight.set.call(canvas,value),self.onResize()}})),this.lastBoundFramebuffer=gl.getParameter(gl.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(gl.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(target,framebuffer){self.lastBoundFramebuffer=framebuffer?framebuffer:self.framebuffer,self.realBindFramebuffer.call(gl,target,self.lastBoundFramebuffer)},this.cullFace=gl.getParameter(gl.CULL_FACE),this.depthTest=gl.getParameter(gl.DEPTH_TEST),this.blend=gl.getParameter(gl.BLEND),this.scissorTest=gl.getParameter(gl.SCISSOR_TEST),this.stencilTest=gl.getParameter(gl.STENCIL_TEST),gl.enable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=!0;break;case gl.DEPTH_TEST:self.depthTest=!0;break;case gl.BLEND:self.blend=!0;break;case gl.SCISSOR_TEST:self.scissorTest=!0;break;case gl.STENCIL_TEST:self.stencilTest=!0}self.realEnable.call(gl,pname)},gl.disable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=!1;break;case gl.DEPTH_TEST:self.depthTest=!1;break;case gl.BLEND:self.blend=!1;break;case gl.SCISSOR_TEST:self.scissorTest=!1;break;case gl.STENCIL_TEST:self.stencilTest=!1}self.realDisable.call(gl,pname)},this.colorMask=gl.getParameter(gl.COLOR_WRITEMASK),gl.colorMask=function(r,g,b,a){self.colorMask[0]=r,self.colorMask[1]=g,self.colorMask[2]=b,self.colorMask[3]=a,self.realColorMask.call(gl,r,g,b,a)},this.clearColor=gl.getParameter(gl.COLOR_CLEAR_VALUE),gl.clearColor=function(r,g,b,a){self.clearColor[0]=r,self.clearColor[1]=g,self.clearColor[2]=b,self.clearColor[3]=a,self.realClearColor.call(gl,r,g,b,a)},this.viewport=gl.getParameter(gl.VIEWPORT),gl.viewport=function(x,y,w,h){self.viewport[0]=x,self.viewport[1]=y,self.viewport[2]=w,self.viewport[3]=h,self.realViewport.call(gl,x,y,w,h)},this.isPatched=!0,Util.safariCssSizeWorkaround(canvas)}},CardboardDistorter.prototype.unpatch=function(){if(this.isPatched){var gl=this.gl,canvas=this.gl.canvas;Util.isIOS()||(Object.defineProperty(canvas,"width",this.realCanvasWidth),Object.defineProperty(canvas,"height",this.realCanvasHeight)),canvas.width=this.bufferWidth,canvas.height=this.bufferHeight,gl.bindFramebuffer=this.realBindFramebuffer,gl.enable=this.realEnable,gl.disable=this.realDisable,gl.colorMask=this.realColorMask,gl.clearColor=this.realClearColor,gl.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&gl.bindFramebuffer(gl.FRAMEBUFFER,null),this.isPatched=!1,setTimeout(function(){Util.safariCssSizeWorkaround(canvas)},1)}},CardboardDistorter.prototype.setTextureBounds=function(leftBounds,rightBounds){leftBounds||(leftBounds=[0,0,.5,1]),rightBounds||(rightBounds=[.5,0,.5,1]),this.viewportOffsetScale[0]=leftBounds[0],this.viewportOffsetScale[1]=leftBounds[1],this.viewportOffsetScale[2]=leftBounds[2],this.viewportOffsetScale[3]=leftBounds[3],this.viewportOffsetScale[4]=rightBounds[0],this.viewportOffsetScale[5]=rightBounds[1],this.viewportOffsetScale[6]=rightBounds[2],this.viewportOffsetScale[7]=rightBounds[3]},CardboardDistorter.prototype.submitFrame=function(){var gl=this.gl,self=this,glState=[];if(WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS||glState.push(gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0),WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null),self.cullFace&&self.realDisable.call(gl,gl.CULL_FACE),self.depthTest&&self.realDisable.call(gl,gl.DEPTH_TEST),self.blend&&self.realDisable.call(gl,gl.BLEND),self.scissorTest&&self.realDisable.call(gl,gl.SCISSOR_TEST),self.stencilTest&&self.realDisable.call(gl,gl.STENCIL_TEST),self.realColorMask.call(gl,!0,!0,!0,!0),self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),(self.ctxAttribs.alpha||Util.isIOS())&&(self.realClearColor.call(gl,0,0,0,1),gl.clear(gl.COLOR_BUFFER_BIT)),gl.useProgram(self.program),gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer),gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.enableVertexAttribArray(self.attribs.position),gl.enableVertexAttribArray(self.attribs.texCoord),gl.vertexAttribPointer(self.attribs.position,2,gl.FLOAT,!1,20,0),gl.vertexAttribPointer(self.attribs.texCoord,3,gl.FLOAT,!1,20,8),gl.activeTexture(gl.TEXTURE0),gl.uniform1i(self.uniforms.diffuse,0),gl.bindTexture(gl.TEXTURE_2D,self.renderTarget),gl.uniform4fv(self.uniforms.viewportOffsetScale,self.viewportOffsetScale),gl.drawElements(gl.TRIANGLES,self.indexCount,gl.UNSIGNED_SHORT,0),self.cardboardUI&&self.cardboardUI.renderNoState(),self.realBindFramebuffer.call(self.gl,gl.FRAMEBUFFER,self.framebuffer),self.ctxAttribs.preserveDrawingBuffer||(self.realClearColor.call(gl,0,0,0,0),gl.clear(gl.COLOR_BUFFER_BIT)),WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS||self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer),self.cullFace&&self.realEnable.call(gl,gl.CULL_FACE),self.depthTest&&self.realEnable.call(gl,gl.DEPTH_TEST),self.blend&&self.realEnable.call(gl,gl.BLEND),self.scissorTest&&self.realEnable.call(gl,gl.SCISSOR_TEST),self.stencilTest&&self.realEnable.call(gl,gl.STENCIL_TEST),self.realColorMask.apply(gl,self.colorMask),self.realViewport.apply(gl,self.viewport),(self.ctxAttribs.alpha||!self.ctxAttribs.preserveDrawingBuffer)&&self.realClearColor.apply(gl,self.clearColor)}),Util.isIOS()){var canvas=gl.canvas;(canvas.width!=self.bufferWidth||canvas.height!=self.bufferHeight)&&(self.bufferWidth=canvas.width,self.bufferHeight=canvas.height,self.onResize())}},CardboardDistorter.prototype.updateDeviceInfo=function(deviceInfo){var gl=this.gl,self=this,glState=[gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){var vertices=self.computeMeshVertices_(self.meshWidth,self.meshHeight,deviceInfo);if(gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW),!self.indexCount){var indices=self.computeMeshIndices_(self.meshWidth,self.meshHeight);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer),gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indices,gl.STATIC_DRAW),self.indexCount=indices.length}})},CardboardDistorter.prototype.computeMeshVertices_=function(width,height,deviceInfo){for(var vertices=new Float32Array(2*width*height*5),lensFrustum=deviceInfo.getLeftEyeVisibleTanAngles(),noLensFrustum=deviceInfo.getLeftEyeNoLensTanAngles(),viewport=deviceInfo.getLeftEyeVisibleScreenRect(noLensFrustum),vidx=0,e=0;2>e;e++){for(var j=0;height>j;j++)for(var i=0;width>i;i++,vidx++){var u=i/(width-1),v=j/(height-1),s=u,t=v,x=Util.lerp(lensFrustum[0],lensFrustum[2],u),y=Util.lerp(lensFrustum[3],lensFrustum[1],v),d=Math.sqrt(x*x+y*y),r=deviceInfo.distortion.distortInverse(d),p=x*r/d,q=y*r/d;u=(p-noLensFrustum[0])/(noLensFrustum[2]-noLensFrustum[0]),v=(q-noLensFrustum[3])/(noLensFrustum[1]-noLensFrustum[3]);{deviceInfo.device.widthMeters/deviceInfo.device.heightMeters}u=2*(viewport.x+u*viewport.width-.5),v=2*(viewport.y+v*viewport.height-.5),vertices[5*vidx+0]=u,vertices[5*vidx+1]=v,vertices[5*vidx+2]=s,vertices[5*vidx+3]=t,vertices[5*vidx+4]=e}var w=lensFrustum[2]-lensFrustum[0];lensFrustum[0]=-(w+lensFrustum[0]),lensFrustum[2]=w-lensFrustum[2],w=noLensFrustum[2]-noLensFrustum[0],noLensFrustum[0]=-(w+noLensFrustum[0]),noLensFrustum[2]=w-noLensFrustum[2],viewport.x=1-(viewport.x+viewport.width)}return vertices},CardboardDistorter.prototype.computeMeshIndices_=function(width,height){for(var indices=new Uint16Array(2*(width-1)*(height-1)*6),halfwidth=width/2,halfheight=height/2,vidx=0,iidx=0,e=0;2>e;e++)for(var j=0;height>j;j++)for(var i=0;width>i;i++,vidx++)0!=i&&0!=j&&(halfwidth>=i==halfheight>=j?(indices[iidx++]=vidx,indices[iidx++]=vidx-width-1,indices[iidx++]=vidx-width,indices[iidx++]=vidx-width-1,indices[iidx++]=vidx,indices[iidx++]=vidx-1):(indices[iidx++]=vidx-1,indices[iidx++]=vidx-width,indices[iidx++]=vidx,indices[iidx++]=vidx-width,indices[iidx++]=vidx-1,indices[iidx++]=vidx-width-1));return indices},CardboardDistorter.prototype.getOwnPropertyDescriptor_=function(proto,attrName){var descriptor=Object.getOwnPropertyDescriptor(proto,attrName);return(void 0===descriptor.get||void 0===descriptor.set)&&(descriptor.configurable=!0,descriptor.enumerable=!0,descriptor.get=function(){return this.getAttribute(attrName)},descriptor.set=function(val){this.setAttribute(attrName,val)}),descriptor},module.exports=CardboardDistorter},{"./cardboard-ui.js":5,"./deps/wglu-preserve-state.js":7,"./util.js":22}],5:[function(_dereq_,module){function CardboardUI(gl){this.gl=gl,this.attribs={position:0},this.program=Util.linkProgram(gl,uiVS,uiFS,this.attribs),this.uniforms=Util.getProgramUniforms(gl,this.program),this.vertexBuffer=gl.createBuffer(),this.gearOffset=0,this.gearVertexCount=0,this.arrowOffset=0,this.arrowVertexCount=0,this.projMat=new Float32Array(16),this.listener=null,this.onResize()}var Util=_dereq_("./util.js"),WGLUPreserveGLState=_dereq_("./deps/wglu-preserve-state.js"),uiVS=["attribute vec2 position;","uniform mat4 projectionMat;","void main() {"," gl_Position = projectionMat * vec4( position, -1.0, 1.0 );","}"].join("\n"),uiFS=["precision mediump float;","uniform vec4 color;","void main() {"," gl_FragColor = color;","}"].join("\n"),DEG2RAD=Math.PI/180,kAnglePerGearSection=60,kOuterRimEndAngle=12,kInnerRimBeginAngle=20,kOuterRadius=1,kMiddleRadius=.75,kInnerRadius=.3125,kCenterLineThicknessDp=4,kButtonWidthDp=28,kTouchSlopFactor=1.5;CardboardUI.prototype.destroy=function(){var gl=this.gl;this.listener&&gl.canvas.removeEventListener("click",this.listener,!1),gl.deleteProgram(this.program),gl.deleteBuffer(this.vertexBuffer)},CardboardUI.prototype.listen=function(optionsCallback,backCallback){var canvas=this.gl.canvas;this.listener=function(event){var midline=canvas.clientWidth/2,buttonSize=kButtonWidthDp*kTouchSlopFactor;event.clientX>midline-buttonSize&&event.clientXcanvas.clientHeight-buttonSize?optionsCallback(event):event.clientX=i;i++){var segmentTheta=i*kAnglePerGearSection;addGearSegment(segmentTheta,kOuterRadius),addGearSegment(segmentTheta+kOuterRimEndAngle,kOuterRadius),addGearSegment(segmentTheta+kInnerRimBeginAngle,kMiddleRadius),addGearSegment(segmentTheta+(kAnglePerGearSection-kInnerRimBeginAngle),kMiddleRadius),addGearSegment(segmentTheta+(kAnglePerGearSection-kOuterRimEndAngle),kOuterRadius)}self.gearVertexCount=vertices.length/2-self.gearOffset,self.arrowOffset=vertices.length/2;var angledLineWidth=lineWidth/Math.sin(45*DEG2RAD);addArrowVertex(0,buttonScale),addArrowVertex(buttonScale,0),addArrowVertex(buttonScale+angledLineWidth,angledLineWidth),addArrowVertex(angledLineWidth,buttonScale+angledLineWidth),addArrowVertex(angledLineWidth,buttonScale-angledLineWidth),addArrowVertex(0,buttonScale),addArrowVertex(buttonScale,2*buttonScale),addArrowVertex(buttonScale+angledLineWidth,2*buttonScale-angledLineWidth),addArrowVertex(angledLineWidth,buttonScale-angledLineWidth),addArrowVertex(0,buttonScale),addArrowVertex(angledLineWidth,buttonScale-lineWidth),addArrowVertex(kButtonWidthDp*dps,buttonScale-lineWidth),addArrowVertex(angledLineWidth,buttonScale+lineWidth),addArrowVertex(kButtonWidthDp*dps,buttonScale+lineWidth),self.arrowVertexCount=vertices.length/2-self.arrowOffset,gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW)})},CardboardUI.prototype.render=function(){var gl=this.gl,self=this,glState=[gl.CULL_FACE,gl.DEPTH_TEST,gl.BLEND,gl.SCISSOR_TEST,gl.STENCIL_TEST,gl.COLOR_WRITEMASK,gl.VIEWPORT,gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){gl.disable(gl.CULL_FACE),gl.disable(gl.DEPTH_TEST),gl.disable(gl.BLEND),gl.disable(gl.SCISSOR_TEST),gl.disable(gl.STENCIL_TEST),gl.colorMask(!0,!0,!0,!0),gl.viewport(0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),self.renderNoState()})},CardboardUI.prototype.renderNoState=function(){var gl=this.gl;gl.useProgram(this.program),gl.bindBuffer(gl.ARRAY_BUFFER,this.vertexBuffer),gl.enableVertexAttribArray(this.attribs.position),gl.vertexAttribPointer(this.attribs.position,2,gl.FLOAT,!1,8,0),gl.uniform4f(this.uniforms.color,1,1,1,1),Util.orthoMatrix(this.projMat,0,gl.drawingBufferWidth,0,gl.drawingBufferHeight,.1,1024),gl.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),gl.drawArrays(gl.TRIANGLE_STRIP,0,4),gl.drawArrays(gl.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),gl.drawArrays(gl.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},module.exports=CardboardUI},{"./deps/wglu-preserve-state.js":7,"./util.js":22}],6:[function(_dereq_,module){function CardboardVRDisplay(){this.displayName="Cardboard VRDisplay (webvr-polyfill)",this.capabilities.hasOrientation=!0,this.capabilities.canPresent=!0,this.bufferScale_=WebVRConfig.BUFFER_SCALE,this.poseSensor_=new FusionPoseSensor,this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Dpdb(!0,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new DeviceInfo(this.dpdb_.getDeviceParams()),this.viewerSelector_=new ViewerSelector,this.viewerSelector_.on("change",this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),WebVRConfig.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new RotateInstructions),Util.isIOS()&&window.addEventListener("resize",this.onResize_.bind(this))}var CardboardDistorter=_dereq_("./cardboard-distorter.js"),CardboardUI=_dereq_("./cardboard-ui.js"),DeviceInfo=_dereq_("./device-info.js"),Dpdb=_dereq_("./dpdb/dpdb.js"),FusionPoseSensor=_dereq_("./sensor-fusion/fusion-pose-sensor.js"),RotateInstructions=_dereq_("./rotate-instructions.js"),ViewerSelector=_dereq_("./viewer-selector.js"),VRDisplay=_dereq_("./base.js").VRDisplay,Util=_dereq_("./util.js"),Eye={LEFT:"left",RIGHT:"right"};CardboardVRDisplay.prototype=new VRDisplay,CardboardVRDisplay.prototype.getImmediatePose=function(){return{position:this.poseSensor_.getPosition(),orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},CardboardVRDisplay.prototype.resetPose=function(){this.poseSensor_.resetPose()},CardboardVRDisplay.prototype.getEyeParameters=function(whichEye){var fieldOfView,offset=[.5*this.deviceInfo_.viewer.interLensDistance,0,0];if(whichEye==Eye.LEFT)offset[0]*=-1,fieldOfView=this.deviceInfo_.getFieldOfViewLeftEye();else{if(whichEye!=Eye.RIGHT)return console.error("Invalid eye provided: %s",whichEye),null;fieldOfView=this.deviceInfo_.getFieldOfViewRightEye()}return{fieldOfView:fieldOfView,offset:offset,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_}},CardboardVRDisplay.prototype.onDeviceParamsUpdated_=function(newParams){Util.isDebug()&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(newParams),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},CardboardVRDisplay.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},CardboardVRDisplay.prototype.beginPresent_=function(){var gl=this.layer_.source.getContext("webgl");gl||(gl=this.layer_.source.getContext("experimental-webgl")),gl||(gl=this.layer_.source.getContext("webgl2")),gl&&(this.layer_.predistorted?WebVRConfig.CARDBOARD_UI_DISABLED||(gl.canvas.width=Util.getScreenWidth()*this.bufferScale_,gl.canvas.height=Util.getScreenHeight()*this.bufferScale_,this.cardboardUI_=new CardboardUI(gl)):(this.distorter_=new CardboardDistorter(gl),this.distorter_.updateDeviceInfo(this.deviceInfo_),this.cardboardUI_=this.distorter_.cardboardUI),this.cardboardUI_&&this.cardboardUI_.listen(function(e){this.viewerSelector_.show(this.layer_.source.parentElement),e.stopPropagation(),e.preventDefault()}.bind(this),function(e){this.exitPresent(),e.stopPropagation(),e.preventDefault()}.bind(this)),this.rotateInstructions_&&(Util.isLandscapeMode()&&Util.isMobile()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},CardboardVRDisplay.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},CardboardVRDisplay.prototype.submitFrame=function(){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var canvas=this.layer_.source.getContext("webgl").canvas;(canvas.width!=this.lastWidth||canvas.height!=this.lastHeight)&&this.cardboardUI_.onResize(),this.lastWidth=canvas.width,this.lastHeight=canvas.height,this.cardboardUI_.render()}},CardboardVRDisplay.prototype.onOrientationChange_=function(){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},CardboardVRDisplay.prototype.onResize_=function(){if(this.layer_){var gl=this.layer_.source.getContext("webgl"),cssProperties=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0 10px 10px 0"];gl.canvas.setAttribute("style",cssProperties.join("; ")+";"),Util.safariCssSizeWorkaround(gl.canvas)}},CardboardVRDisplay.prototype.onViewerChanged_=function(viewer){this.deviceInfo_.setViewer(viewer),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},CardboardVRDisplay.prototype.fireVRDisplayDeviceParamsChange_=function(){var event=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(event)},module.exports=CardboardVRDisplay},{"./base.js":3,"./cardboard-distorter.js":4,"./cardboard-ui.js":5,"./device-info.js":8,"./dpdb/dpdb.js":12,"./rotate-instructions.js":16,"./sensor-fusion/fusion-pose-sensor.js":18,"./util.js":22,"./viewer-selector.js":23}],7:[function(_dereq_,module){function WGLUPreserveGLState(gl,bindings,callback){if(!bindings)return void callback(gl);for(var boundValues=[],activeTexture=null,i=0;igl.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),boundValues.push(null,null);break}activeTexture||(activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE)),gl.activeTexture(textureUnit),boundValues.push(gl.getParameter(binding),null);break;case gl.ACTIVE_TEXTURE:activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE),boundValues.push(null);break;default:boundValues.push(gl.getParameter(binding))}}callback(gl);for(var i=0;igl.TEXTURE31)break;gl.activeTexture(textureUnit),gl.bindTexture(gl.TEXTURE_2D,boundValue);break;case gl.TEXTURE_BINDING_CUBE_MAP:var textureUnit=bindings[++i];if(textureUnitgl.TEXTURE31)break;gl.activeTexture(textureUnit),gl.bindTexture(gl.TEXTURE_CUBE_MAP,boundValue);break;case gl.VIEWPORT:gl.viewport(boundValue[0],boundValue[1],boundValue[2],boundValue[3]);break;case gl.BLEND:case gl.CULL_FACE:case gl.DEPTH_TEST:case gl.SCISSOR_TEST:case gl.STENCIL_TEST:boundValue?gl.enable(binding):gl.disable(binding);break;default:console.log("No GL restore behavior for 0x"+binding.toString(16))}activeTexture&&gl.activeTexture(activeTexture)}}module.exports=WGLUPreserveGLState},{}],8:[function(_dereq_,module){function Device(params){this.width=params.width||Util.getScreenWidth(),this.height=params.height||Util.getScreenHeight(),this.widthMeters=params.widthMeters,this.heightMeters=params.heightMeters,this.bevelMeters=params.bevelMeters}function DeviceInfo(deviceParams){this.viewer=Viewers.CardboardV2,this.updateDeviceParams(deviceParams),this.distortion=new Distortion(this.viewer.distortionCoefficients)}function CardboardViewer(params){this.id=params.id,this.label=params.label,this.fov=params.fov,this.interLensDistance=params.interLensDistance,this.baselineLensDistance=params.baselineLensDistance,this.screenLensDistance=params.screenLensDistance,this.distortionCoefficients=params.distortionCoefficients,this.inverseCoefficients=params.inverseCoefficients}var Distortion=_dereq_("./distortion/distortion.js"),MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js"),DEFAULT_ANDROID=new Device({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),DEFAULT_IOS=new Device({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),Viewers={CardboardV1:new CardboardViewer({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new CardboardViewer({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};DeviceInfo.prototype.updateDeviceParams=function(deviceParams){this.device=this.determineDevice_(deviceParams)||this.device},DeviceInfo.prototype.getDevice=function(){return this.device},DeviceInfo.prototype.setViewer=function(viewer){this.viewer=viewer,this.distortion=new Distortion(this.viewer.distortionCoefficients)},DeviceInfo.prototype.determineDevice_=function(deviceParams){if(!deviceParams)return Util.isIOS()?(console.warn("Using fallback iOS device measurements."),DEFAULT_IOS):(console.warn("Using fallback Android device measurements."),DEFAULT_ANDROID);var METERS_PER_INCH=.0254,metersPerPixelX=METERS_PER_INCH/deviceParams.xdpi,metersPerPixelY=METERS_PER_INCH/deviceParams.ydpi,width=Util.getScreenWidth(),height=Util.getScreenHeight();return new Device({widthMeters:metersPerPixelX*width,heightMeters:metersPerPixelY*height,bevelMeters:.001*deviceParams.bevelMm})},DeviceInfo.prototype.getDistortedFieldOfViewLeftEye=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,eyeToScreenDistance=viewer.screenLensDistance,outerDist=(device.widthMeters-viewer.interLensDistance)/2,innerDist=viewer.interLensDistance/2,bottomDist=viewer.baselineLensDistance-device.bevelMeters,topDist=device.heightMeters-bottomDist,outerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(outerDist/eyeToScreenDistance)),innerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(innerDist/eyeToScreenDistance)),bottomAngle=MathUtil.radToDeg*Math.atan(distortion.distort(bottomDist/eyeToScreenDistance)),topAngle=MathUtil.radToDeg*Math.atan(distortion.distort(topDist/eyeToScreenDistance));return{leftDegrees:Math.min(outerAngle,viewer.fov),rightDegrees:Math.min(innerAngle,viewer.fov),downDegrees:Math.min(bottomAngle,viewer.fov),upDegrees:Math.min(topAngle,viewer.fov)}},DeviceInfo.prototype.getLeftEyeVisibleTanAngles=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,fovLeft=Math.tan(-MathUtil.degToRad*viewer.fov),fovTop=Math.tan(MathUtil.degToRad*viewer.fov),fovRight=Math.tan(MathUtil.degToRad*viewer.fov),fovBottom=Math.tan(-MathUtil.degToRad*viewer.fov),halfWidth=device.widthMeters/4,halfHeight=device.heightMeters/2,verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight,centerX=viewer.interLensDistance/2-halfWidth,centerY=-verticalLensOffset,centerZ=viewer.screenLensDistance,screenLeft=distortion.distort((centerX-halfWidth)/centerZ),screenTop=distortion.distort((centerY+halfHeight)/centerZ),screenRight=distortion.distort((centerX+halfWidth)/centerZ),screenBottom=distortion.distort((centerY-halfHeight)/centerZ),result=new Float32Array(4);return result[0]=Math.max(fovLeft,screenLeft),result[1]=Math.min(fovTop,screenTop),result[2]=Math.min(fovRight,screenRight),result[3]=Math.max(fovBottom,screenBottom),result},DeviceInfo.prototype.getLeftEyeNoLensTanAngles=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,result=new Float32Array(4),fovLeft=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov)),fovTop=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov)),fovRight=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov)),fovBottom=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov)),halfWidth=device.widthMeters/4,halfHeight=device.heightMeters/2,verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight,centerX=viewer.interLensDistance/2-halfWidth,centerY=-verticalLensOffset,centerZ=viewer.screenLensDistance,screenLeft=(centerX-halfWidth)/centerZ,screenTop=(centerY+halfHeight)/centerZ,screenRight=(centerX+halfWidth)/centerZ,screenBottom=(centerY-halfHeight)/centerZ;return result[0]=Math.max(fovLeft,screenLeft),result[1]=Math.min(fovTop,screenTop),result[2]=Math.min(fovRight,screenRight),result[3]=Math.max(fovBottom,screenBottom),result},DeviceInfo.prototype.getLeftEyeVisibleScreenRect=function(undistortedFrustum){var viewer=this.viewer,device=this.device,dist=viewer.screenLensDistance,eyeX=(device.widthMeters-viewer.interLensDistance)/2,eyeY=viewer.baselineLensDistance-device.bevelMeters,left=(undistortedFrustum[0]*dist+eyeX)/device.widthMeters,top=(undistortedFrustum[1]*dist+eyeY)/device.heightMeters,right=(undistortedFrustum[2]*dist+eyeX)/device.widthMeters,bottom=(undistortedFrustum[3]*dist+eyeY)/device.heightMeters;return{x:left,y:bottom,width:right-left,height:top-bottom}},DeviceInfo.prototype.getFieldOfViewLeftEye=function(opt_isUndistorted){return opt_isUndistorted?this.getUndistortedFieldOfViewLeftEye():this.getDistortedFieldOfViewLeftEye()},DeviceInfo.prototype.getFieldOfViewRightEye=function(opt_isUndistorted){var fov=this.getFieldOfViewLeftEye(opt_isUndistorted);return{leftDegrees:fov.rightDegrees,rightDegrees:fov.leftDegrees,upDegrees:fov.upDegrees,downDegrees:fov.downDegrees}},DeviceInfo.prototype.getUndistortedFieldOfViewLeftEye=function(){var p=this.getUndistortedParams_();return{leftDegrees:MathUtil.radToDeg*Math.atan(p.outerDist),rightDegrees:MathUtil.radToDeg*Math.atan(p.innerDist),downDegrees:MathUtil.radToDeg*Math.atan(p.bottomDist),upDegrees:MathUtil.radToDeg*Math.atan(p.topDist)}},DeviceInfo.prototype.getUndistortedViewportLeftEye=function(){var p=this.getUndistortedParams_(),viewer=this.viewer,device=this.device,eyeToScreenDistance=viewer.screenLensDistance,screenWidth=device.widthMeters/eyeToScreenDistance,screenHeight=device.heightMeters/eyeToScreenDistance,xPxPerTanAngle=device.width/screenWidth,yPxPerTanAngle=device.height/screenHeight,x=Math.round((p.eyePosX-p.outerDist)*xPxPerTanAngle),y=Math.round((p.eyePosY-p.bottomDist)*yPxPerTanAngle);return{x:x,y:y,width:Math.round((p.eyePosX+p.innerDist)*xPxPerTanAngle)-x,height:Math.round((p.eyePosY+p.topDist)*yPxPerTanAngle)-y}},DeviceInfo.prototype.getUndistortedParams_=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,eyeToScreenDistance=viewer.screenLensDistance,halfLensDistance=viewer.interLensDistance/2/eyeToScreenDistance,screenWidth=device.widthMeters/eyeToScreenDistance,screenHeight=device.heightMeters/eyeToScreenDistance,eyePosX=screenWidth/2-halfLensDistance,eyePosY=(viewer.baselineLensDistance-device.bevelMeters)/eyeToScreenDistance,maxFov=viewer.fov,viewerMax=distortion.distortInverse(Math.tan(MathUtil.degToRad*maxFov)),outerDist=Math.min(eyePosX,viewerMax),innerDist=Math.min(halfLensDistance,viewerMax),bottomDist=Math.min(eyePosY,viewerMax),topDist=Math.min(screenHeight-eyePosY,viewerMax);return{outerDist:outerDist,innerDist:innerDist,topDist:topDist,bottomDist:bottomDist,eyePosX:eyePosX,eyePosY:eyePosY}},DeviceInfo.Viewers=Viewers,module.exports=DeviceInfo},{"./distortion/distortion.js":10,"./math-util.js":14,"./util.js":22}],9:[function(_dereq_,module){function VRDisplayHMDDevice(display){this.display=display,this.hardwareUnitId=display.displayId,this.deviceId="webvr-polyfill:HMD:"+display.displayId,this.deviceName=display.displayName+" (HMD)"}function VRDisplayPositionSensorDevice(display){this.display=display,this.hardwareUnitId=display.displayId,this.deviceId="webvr-polyfill:PositionSensor: "+display.displayId,this.deviceName=display.displayName+" (PositionSensor)"}var HMDVRDevice=(_dereq_("./base.js").VRDisplay,_dereq_("./base.js").HMDVRDevice),PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice;VRDisplayHMDDevice.prototype=new HMDVRDevice,VRDisplayHMDDevice.prototype.getEyeParameters=function(whichEye){var eyeParameters=this.display.getEyeParameters(whichEye);return{currentFieldOfView:eyeParameters.fieldOfView,maximumFieldOfView:eyeParameters.fieldOfView,minimumFieldOfView:eyeParameters.fieldOfView,recommendedFieldOfView:eyeParameters.fieldOfView,eyeTranslation:{x:eyeParameters.offset[0],y:eyeParameters.offset[1],z:eyeParameters.offset[2]},renderRect:{x:"right"==whichEye?eyeParameters.renderWidth:0,y:0,width:eyeParameters.renderWidth,height:eyeParameters.renderHeight}}},VRDisplayHMDDevice.prototype.setFieldOfView=function(){},VRDisplayPositionSensorDevice.prototype=new PositionSensorVRDevice,VRDisplayPositionSensorDevice.prototype.getState=function(){var pose=this.display.getPose();return{position:pose.position?{x:pose.position[0],y:pose.position[1],z:pose.position[2]}:null,orientation:pose.orientation?{x:pose.orientation[0],y:pose.orientation[1],z:pose.orientation[2],w:pose.orientation[3]}:null,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},VRDisplayPositionSensorDevice.prototype.resetState=function(){return this.positionDevice.resetPose()},module.exports.VRDisplayHMDDevice=VRDisplayHMDDevice,module.exports.VRDisplayPositionSensorDevice=VRDisplayPositionSensorDevice},{"./base.js":3}],10:[function(_dereq_,module){function Distortion(coefficients){this.coefficients=coefficients}Distortion.prototype.distortInverse=function(radius){for(var r0=0,r1=1,dr0=radius-this.distort(r0);Math.abs(r1-r0)>1e-4;){var dr1=radius-this.distort(r1),r2=r1-dr1*((r1-r0)/(dr1-dr0));r0=r1,r1=r2,dr0=dr1}return r1},Distortion.prototype.distort=function(radius){for(var r2=radius*radius,ret=0,i=0;ij;++j)for(var k=j+1;n>k;++k){for(var p=a[j][k]/a[j][j],i=j+1;n>i;++i)a[i][k]-=p*a[i][j];y[k]-=p*y[j]}for(var x=new Array(n),j=n-1;j>=0;--j){for(var v=y[j],i=j+1;n>i;++i)v-=a[i][j]*x[i];x[j]=v/a[j][j]}return x},Distortion.prototype.solveLeastSquares_=function(matA,vecY){var i,j,k,sum,numSamples=matA.length,numCoefficients=matA[0].length;if(numSamples!=vecY.Length)throw new Error("Matrix / vector dimension mismatch");var matATA=new Array(numCoefficients);for(k=0;numCoefficients>k;++k)for(matATA[k]=new Array(numCoefficients),j=0;numCoefficients>j;++j){for(sum=0,i=0;numSamples>i;++i)sum+=matA[j][i]*matA[k][i];matATA[k][j]=sum}var vecATY=new Array(numCoefficients);for(j=0;numCoefficients>j;++j){for(sum=0,i=0;numSamples>i;++i)sum+=matA[j][i]*vecY[i];vecATY[j]=sum}return this.solveLinear_(matATA,vecATY)},Distortion.prototype.approximateInverse=function(maxRadius,numSamples){maxRadius=maxRadius||1,numSamples=numSamples||100;var i,j,numCoefficients=6,matA=new Array(numCoefficients);for(j=0;numCoefficients>j;++j)matA[j]=new Array(numSamples);var vecY=new Array(numSamples);for(i=0;numSamples>i;++i){var r=maxRadius*(i+1)/numSamples,rp=this.distort(r),v=rp;for(j=0;numCoefficients>j;++j)v*=rp*rp,matA[j][i]=v;vecY[i]=r-rp}var inverseCoefficients=this.solveLeastSquares_(matA,vecY);return new Distortion(inverseCoefficients)},module.exports=Distortion},{}],11:[function(_dereq_,module){var DPDB_CACHE={format:1,last_updated:"2016-01-20T00:18:35Z",devices:[{type:"android",rules:[{mdmh:"asus/*/Nexus 7/*"},{ua:"Nexus 7"}],dpi:[320.8,323],bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_Z00AD/*"},{ua:"ASUS_Z00AD"}],dpi:[403,404.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google//Pixel XL/"},{ua:"Pixel XL"}],dpi:[537.9,533],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google//Pixel/"},{ua:"Pixel"}],dpi:[432.6,436.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC6435LVW/*"},{ua:"HTC6435LVW"}],dpi:[449.7,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC One XL/*"},{ua:"HTC One XL"}],dpi:[315.3,314.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"htc/*/Nexus 9/*"},{ua:"Nexus 9"}],dpi:289,bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One M9/*"},{ua:"HTC One M9"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One_M8/*"},{ua:"HTC One_M8"}],dpi:[449.7,447.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One/*"},{ua:"HTC One"}],dpi:472.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/Nexus 6P/*"},{ua:"Nexus 6P"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5X/*"},{ua:"Nexus 5X"}],dpi:[422,419.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS345/*"},{ua:"LGMS345"}],dpi:[221.7,219.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D800/*"},{ua:"LG-D800"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D850/*"},{ua:"LG-D850"}],dpi:[537.9,541.9],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/VS985 4G/*"},{ua:"VS985 4G"}],dpi:[537.9,535.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5/*"},{ua:"Nexus 5 "}],dpi:[442.4,444.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 4/*"},{ua:"Nexus 4"}],dpi:[319.8,318.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LG-P769/*"},{ua:"LG-P769"}],dpi:[240.6,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS323/*"},{ua:"LGMS323"}],dpi:[206.6,204.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGLS996/*"},{ua:"LGLS996"}],dpi:[403.4,401.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/4560MMX/*"},{ua:"4560MMX"}],dpi:[240,219.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/A250/*"},{ua:"Micromax A250"}],dpi:[480,446.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/Micromax AQ4501/*"},{ua:"Micromax AQ4501"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/DROID RAZR/*"},{ua:"DROID RAZR"}],dpi:[368.1,256.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT830C/*"},{ua:"XT830C"}],dpi:[254,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1021/*"},{ua:"XT1021"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1023/*"},{ua:"XT1023"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1028/*"},{ua:"XT1028"}],dpi:[326.6,327.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1034/*"},{ua:"XT1034"}],dpi:[326.6,328.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1053/*"},{ua:"XT1053"}],dpi:[315.3,316.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1562/*"},{ua:"XT1562"}],dpi:[403.4,402.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/Nexus 6/*"},{ua:"Nexus 6 "}],dpi:[494.3,489.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1063/*"},{ua:"XT1063"}],dpi:[295,296.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1064/*"},{ua:"XT1064"}],dpi:[295,295.6],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1092/*"},{ua:"XT1092"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1095/*"},{ua:"XT1095"}],dpi:[422,423.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/G4/*"},{ua:"Moto G (4)"}],dpi:401,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/A0001/*"},{ua:"A0001"}],dpi:[403.4,401],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1005/*"},{ua:"ONE E1005"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2005/*"},{ua:"ONE A2005"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OPPO/*/X909/*"},{ua:"X909"}],dpi:[442.4,444.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9082/*"},{ua:"GT-I9082"}],dpi:[184.7,185.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G360P/*"},{ua:"SM-G360P"}],dpi:[196.7,205.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Nexus S/*"},{ua:"Nexus S"}],dpi:[234.5,229.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[304.8,303.9],bw:5,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-T230NU/*"},{ua:"SM-T230NU"}],dpi:216,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SGH-T399/*"},{ua:"SGH-T399"}],dpi:[217.7,231.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N9005/*"},{ua:"SM-N9005"}],dpi:[386.4,387],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SM-N900A/*"},{ua:"SAMSUNG-SM-N900A"}],dpi:[386.4,387.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9500/*"},{ua:"GT-I9500"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/GT-I9505/*"},{ua:"GT-I9505"}],dpi:439.4,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900F/*"},{ua:"SM-G900F"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900M/*"},{ua:"SM-G900M"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G800F/*"},{ua:"SM-G800F"}],dpi:326.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G906S/*"},{ua:"SM-G906S"}],dpi:[562.7,572.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[306.7,304.8],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-T535/*"},{ua:"SM-T535"}],dpi:[142.6,136.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-N920C/*"},{ua:"SM-N920C"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920W8/*"},{ua:"SM-N920W8"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300I/*"},{ua:"GT-I9300I"}],dpi:[304.8,305.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9195/*"},{ua:"GT-I9195"}],dpi:[249.4,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SPH-L520/*"},{ua:"SPH-L520"}],dpi:[249.4,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SGH-I717/*"},{ua:"SAMSUNG-SGH-I717"}],dpi:285.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SPH-D710/*"},{ua:"SPH-D710"}],dpi:[217.7,204.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-N7100/*"},{ua:"GT-N7100"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SCH-I605/*"},{ua:"SCH-I605"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Galaxy Nexus/*"},{ua:"Galaxy Nexus"}],dpi:[315.3,314.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910H/*"},{ua:"SM-N910H"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910C/*"},{ua:"SM-N910C"}],dpi:[515.2,520.2],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G130M/*"},{ua:"SM-G130M"}],dpi:[165.9,164.8],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G928I/*"},{ua:"SM-G928I"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G920F/*"},{ua:"SM-G920F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G920P/*"},{ua:"SM-G920P"}],dpi:[522.5,577],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G925F/*"},{ua:"SM-G925F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G925V/*"},{ua:"SM-G925V"}],dpi:[522.5,576.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G935F/*"},{ua:"SM-G935F"}],dpi:534,bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/C6903/*"},{ua:"C6903"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/D6653/*"},{ua:"D6653"}],dpi:[428.6,427.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6653/*"},{ua:"E6653"}],dpi:[428.6,425.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6853/*"},{ua:"E6853"}],dpi:[403.4,401.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/SGP321/*"},{ua:"SGP321"}],dpi:[224.7,224.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"TCT/*/ALCATEL ONE TOUCH Fierce/*"},{ua:"ALCATEL ONE TOUCH Fierce"}],dpi:[240,247.5],bw:3,ac:1e3},{ -type:"android",rules:[{mdmh:"THL/*/thl 5000/*"},{ua:"thl 5000"}],dpi:[480,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"ZTE/*/ZTE Blade L2/*"},{ua:"ZTE Blade L2"}],dpi:240,bw:3,ac:500},{type:"ios",rules:[{res:[640,960]}],dpi:[325.1,328.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[640,1136]}],dpi:[317.1,320.2],bw:3,ac:1e3},{type:"ios",rules:[{res:[750,1334]}],dpi:326.4,bw:4,ac:1e3},{type:"ios",rules:[{res:[1242,2208]}],dpi:[453.6,458.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2001]}],dpi:[410.9,415.4],bw:4,ac:1e3}]};module.exports=DPDB_CACHE},{}],12:[function(_dereq_,module){function Dpdb(fetchOnline,onDeviceParamsUpdated){if(this.dpdb=DPDB_CACHE,this.recalculateDeviceParams_(),fetchOnline){this.onDeviceParamsUpdated=onDeviceParamsUpdated;var xhr=new XMLHttpRequest,obj=this;xhr.open("GET",ONLINE_DPDB_URL,!0),xhr.addEventListener("load",function(){obj.loading=!1,xhr.status>=200&&xhr.status<=299?(obj.dpdb=JSON.parse(xhr.response),obj.recalculateDeviceParams_()):console.error("Error loading online DPDB!")}),xhr.send()}}function DeviceParams(params){this.xdpi=params.xdpi,this.ydpi=params.ydpi,this.bevelMm=params.bevelMm}var DPDB_CACHE=_dereq_("./dpdb-cache.js"),Util=_dereq_("../util.js"),ONLINE_DPDB_URL="https://storage.googleapis.com/cardboard-dpdb/dpdb.json";Dpdb.prototype.getDeviceParams=function(){return this.deviceParams},Dpdb.prototype.recalculateDeviceParams_=function(){var newDeviceParams=this.calcDeviceParams_();newDeviceParams?(this.deviceParams=newDeviceParams,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Dpdb.prototype.calcDeviceParams_=function(){var db=this.dpdb;if(!db)return console.error("DPDB not available."),null;if(1!=db.format)return console.error("DPDB has unexpected format version."),null;if(!db.devices||!db.devices.length)return console.error("DPDB does not have a devices section."),null;var userAgent=navigator.userAgent||navigator.vendor||window.opera,width=Util.getScreenWidth(),height=Util.getScreenHeight();if(!db.devices)return console.error("DPDB has no devices section."),null;for(var i=0;icosHalfTheta?(this.w=-qb.w,this.x=-qb.x,this.y=-qb.y,this.z=-qb.z,cosHalfTheta=-cosHalfTheta):this.copy(qb),cosHalfTheta>=1)return this.w=w,this.x=x,this.y=y,this.z=z,this;var halfTheta=Math.acos(cosHalfTheta),sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001)return this.w=.5*(w+this.w),this.x=.5*(x+this.x),this.y=.5*(y+this.y),this.z=.5*(z+this.z),this;var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;return this.w=w*ratioA+this.w*ratioB,this.x=x*ratioA+this.x*ratioB,this.y=y*ratioA+this.y*ratioB,this.z=z*ratioA+this.z*ratioB,this},setFromUnitVectors:function(){var v1,r,EPS=1e-6;return function(vFrom,vTo){return void 0===v1&&(v1=new MathUtil.Vector3),r=vFrom.dot(vTo)+1,EPS>r?(r=0,Math.abs(vFrom.x)>Math.abs(vFrom.z)?v1.set(-vFrom.y,vFrom.x,0):v1.set(0,-vFrom.z,vFrom.y)):v1.crossVectors(vFrom,vTo),this.x=v1.x,this.y=v1.y,this.z=v1.z,this.w=r,this.normalize(),this}}()},module.exports=MathUtil},{}],15:[function(_dereq_,module){function MouseKeyboardVRDisplay(){this.displayName="Mouse and Keyboard VRDisplay (webvr-polyfill)",this.capabilities.hasOrientation=!0,window.addEventListener("keydown",this.onKeyDown_.bind(this)),window.addEventListener("mousemove",this.onMouseMove_.bind(this)),window.addEventListener("mousedown",this.onMouseDown_.bind(this)),window.addEventListener("mouseup",this.onMouseUp_.bind(this)),this.phi_=0,this.theta_=0,this.targetAngle_=null,this.angleAnimation_=null,this.orientation_=new MathUtil.Quaternion,this.rotateStart_=new MathUtil.Vector2,this.rotateEnd_=new MathUtil.Vector2,this.rotateDelta_=new MathUtil.Vector2,this.isDragging_=!1,this.orientationOut_=new Float32Array(4)}var VRDisplay=_dereq_("./base.js").VRDisplay,MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js"),KEY_SPEED=.15,KEY_ANIMATION_DURATION=80,MOUSE_SPEED_X=.5,MOUSE_SPEED_Y=.3;MouseKeyboardVRDisplay.prototype=new VRDisplay,MouseKeyboardVRDisplay.prototype.getImmediatePose=function(){return this.orientation_.setFromEulerYXZ(this.phi_,this.theta_,0),this.orientationOut_[0]=this.orientation_.x,this.orientationOut_[1]=this.orientation_.y,this.orientationOut_[2]=this.orientation_.z,this.orientationOut_[3]=this.orientation_.w,{position:null,orientation:this.orientationOut_,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},MouseKeyboardVRDisplay.prototype.onKeyDown_=function(e){38==e.keyCode?this.animatePhi_(this.phi_+KEY_SPEED):39==e.keyCode?this.animateTheta_(this.theta_-KEY_SPEED):40==e.keyCode?this.animatePhi_(this.phi_-KEY_SPEED):37==e.keyCode&&this.animateTheta_(this.theta_+KEY_SPEED)},MouseKeyboardVRDisplay.prototype.animateTheta_=function(targetAngle){this.animateKeyTransitions_("theta_",targetAngle)},MouseKeyboardVRDisplay.prototype.animatePhi_=function(targetAngle){targetAngle=Util.clamp(targetAngle,-Math.PI/2,Math.PI/2),this.animateKeyTransitions_("phi_",targetAngle)},MouseKeyboardVRDisplay.prototype.animateKeyTransitions_=function(angleName,targetAngle){this.angleAnimation_&&cancelAnimationFrame(this.angleAnimation_);var startAngle=this[angleName],startTime=new Date;this.angleAnimation_=requestAnimationFrame(function animate(){var elapsed=new Date-startTime;if(elapsed>=KEY_ANIMATION_DURATION)return this[angleName]=targetAngle,void cancelAnimationFrame(this.angleAnimation_);this.angleAnimation_=requestAnimationFrame(animate.bind(this));var percent=elapsed/KEY_ANIMATION_DURATION;this[angleName]=startAngle+(targetAngle-startAngle)*percent}.bind(this))},MouseKeyboardVRDisplay.prototype.onMouseDown_=function(e){this.rotateStart_.set(e.clientX,e.clientY),this.isDragging_=!0},MouseKeyboardVRDisplay.prototype.onMouseMove_=function(e){if(this.isDragging_||this.isPointerLocked_()){if(this.isPointerLocked_()){var movementX=e.movementX||e.mozMovementX||0,movementY=e.movementY||e.mozMovementY||0;this.rotateEnd_.set(this.rotateStart_.x-movementX,this.rotateStart_.y-movementY)}else this.rotateEnd_.set(e.clientX,e.clientY);this.rotateDelta_.subVectors(this.rotateEnd_,this.rotateStart_),this.rotateStart_.copy(this.rotateEnd_),this.phi_+=2*Math.PI*this.rotateDelta_.y/screen.height*MOUSE_SPEED_Y,this.theta_+=2*Math.PI*this.rotateDelta_.x/screen.width*MOUSE_SPEED_X,this.phi_=Util.clamp(this.phi_,-Math.PI/2,Math.PI/2)}},MouseKeyboardVRDisplay.prototype.onMouseUp_=function(){this.isDragging_=!1},MouseKeyboardVRDisplay.prototype.isPointerLocked_=function(){var el=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement;return void 0!==el},MouseKeyboardVRDisplay.prototype.resetPose=function(){this.phi_=0,this.theta_=0},module.exports=MouseKeyboardVRDisplay},{"./base.js":3,"./math-util.js":14,"./util.js":22}],16:[function(_dereq_,module){function RotateInstructions(){this.loadIcon_();var overlay=document.createElement("div"),s=overlay.style;s.position="fixed",s.top=0,s.right=0,s.bottom=0,s.left=0,s.backgroundColor="gray",s.fontFamily="sans-serif",s.zIndex=1e6;var img=document.createElement("img");img.src=this.icon;var s=img.style;s.marginLeft="25%",s.marginTop="25%",s.width="50%",overlay.appendChild(img);var text=document.createElement("div"),s=text.style;s.textAlign="center",s.fontSize="16px",s.lineHeight="24px",s.margin="24px 25%",s.width="50%",text.innerHTML="Place your phone into your Cardboard viewer.",overlay.appendChild(text);var snackbar=document.createElement("div"),s=snackbar.style;s.backgroundColor="#CFD8DC",s.position="fixed",s.bottom=0,s.width="100%",s.height="48px",s.padding="14px 24px",s.boxSizing="border-box",s.color="#656A6B",overlay.appendChild(snackbar);var snackbarText=document.createElement("div");snackbarText.style["float"]="left",snackbarText.innerHTML="No Cardboard viewer?";var snackbarButton=document.createElement("a");snackbarButton.href="https://www.google.com/get/cardboard/get-cardboard/",snackbarButton.innerHTML="get one",snackbarButton.target="_blank";var s=snackbarButton.style;s["float"]="right",s.fontWeight=600,s.textTransform="uppercase",s.borderLeft="1px solid gray",s.paddingLeft="24px",s.textDecoration="none",s.color="#656A6B",snackbar.appendChild(snackbarText),snackbar.appendChild(snackbarButton),this.overlay=overlay,this.text=text,this.hide()}var Util=_dereq_("./util.js");RotateInstructions.prototype.show=function(parent){parent||this.overlay.parentElement?parent&&(this.overlay.parentElement&&this.overlay.parentElement!=parent&&this.overlay.parentElement.removeChild(this.overlay),parent.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var img=this.overlay.querySelector("img"),s=img.style;Util.isLandscapeMode()?(s.width="20%",s.marginLeft="40%",s.marginTop="3%"):(s.width="50%",s.marginLeft="25%",s.marginTop="25%")},RotateInstructions.prototype.hide=function(){this.overlay.style.display="none"},RotateInstructions.prototype.showTemporarily=function(ms,parent){this.show(parent),this.timer=setTimeout(this.hide.bind(this),ms)},RotateInstructions.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},RotateInstructions.prototype.update=function(){this.disableShowTemporarily(),!Util.isLandscapeMode()&&Util.isMobile()?this.show():this.hide()},RotateInstructions.prototype.loadIcon_=function(){this.icon=Util.base64("image/svg+xml","PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE5OHB4IiBoZWlnaHQ9IjI0MHB4IiB2aWV3Qm94PSIwIDAgMTk4IDI0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4zICgxMjA4MSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+dHJhbnNpdGlvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPgogICAgICAgIDxnIGlkPSJ0cmFuc2l0aW9uIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTQtKy1JbXBvcnRlZC1MYXllcnMtQ29weS0rLUltcG9ydGVkLUxheWVycy1Db3B5LTItQ29weSIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHktNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDEwNy4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjYyNSwyLjUyNyBDMTQ5LjYyNSwyLjUyNyAxNTUuODA1LDYuMDk2IDE1Ni4zNjIsNi40MTggTDE1Ni4zNjIsNy4zMDQgQzE1Ni4zNjIsNy40ODEgMTU2LjM3NSw3LjY2NCAxNTYuNCw3Ljg1MyBDMTU2LjQxLDcuOTM0IDE1Ni40Miw4LjAxNSAxNTYuNDI3LDguMDk1IEMxNTYuNTY3LDkuNTEgMTU3LjQwMSwxMS4wOTMgMTU4LjUzMiwxMi4wOTQgTDE2NC4yNTIsMTcuMTU2IEwxNjQuMzMzLDE3LjA2NiBDMTY0LjMzMywxNy4wNjYgMTY4LjcxNSwxNC41MzYgMTY5LjU2OCwxNC4wNDIgQzE3MS4wMjUsMTQuODgzIDE5NS41MzgsMjkuMDM1IDE5NS41MzgsMjkuMDM1IEwxOTUuNTM4LDgzLjAzNiBDMTk1LjUzOCw4My44MDcgMTk1LjE1Miw4NC4yNTMgMTk0LjU5LDg0LjI1MyBDMTk0LjM1Nyw4NC4yNTMgMTk0LjA5NSw4NC4xNzcgMTkzLjgxOCw4NC4wMTcgTDE2OS44NTEsNzAuMTc5IEwxNjkuODM3LDcwLjIwMyBMMTQyLjUxNSw4NS45NzggTDE0MS42NjUsODQuNjU1IEMxMzYuOTM0LDgzLjEyNiAxMzEuOTE3LDgxLjkxNSAxMjYuNzE0LDgxLjA0NSBDMTI2LjcwOSw4MS4wNiAxMjYuNzA3LDgxLjA2OSAxMjYuNzA3LDgxLjA2OSBMMTIxLjY0LDk4LjAzIEwxMTMuNzQ5LDEwMi41ODYgTDExMy43MTIsMTAyLjUyMyBMMTEzLjcxMiwxMzAuMTEzIEMxMTMuNzEyLDEzMC44ODUgMTEzLjMyNiwxMzEuMzMgMTEyLjc2NCwxMzEuMzMgQzExMi41MzIsMTMxLjMzIDExMi4yNjksMTMxLjI1NCAxMTEuOTkyLDEzMS4wOTQgTDY5LjUxOSwxMDYuNTcyIEM2OC41NjksMTA2LjAyMyA2Ny43OTksMTA0LjY5NSA2Ny43OTksMTAzLjYwNSBMNjcuNzk5LDEwMi41NyBMNjcuNzc4LDEwMi42MTcgQzY3LjI3LDEwMi4zOTMgNjYuNjQ4LDEwMi4yNDkgNjUuOTYyLDEwMi4yMTggQzY1Ljg3NSwxMDIuMjE0IDY1Ljc4OCwxMDIuMjEyIDY1LjcwMSwxMDIuMjEyIEM2NS42MDYsMTAyLjIxMiA2NS41MTEsMTAyLjIxNSA2NS40MTYsMTAyLjIxOSBDNjUuMTk1LDEwMi4yMjkgNjQuOTc0LDEwMi4yMzUgNjQuNzU0LDEwMi4yMzUgQzY0LjMzMSwxMDIuMjM1IDYzLjkxMSwxMDIuMjE2IDYzLjQ5OCwxMDIuMTc4IEM2MS44NDMsMTAyLjAyNSA2MC4yOTgsMTAxLjU3OCA1OS4wOTQsMTAwLjg4MiBMMTIuNTE4LDczLjk5MiBMMTIuNTIzLDc0LjAwNCBMMi4yNDUsNTUuMjU0IEMxLjI0NCw1My40MjcgMi4wMDQsNTEuMDM4IDMuOTQzLDQ5LjkxOCBMNTkuOTU0LDE3LjU3MyBDNjAuNjI2LDE3LjE4NSA2MS4zNSwxNy4wMDEgNjIuMDUzLDE3LjAwMSBDNjMuMzc5LDE3LjAwMSA2NC42MjUsMTcuNjYgNjUuMjgsMTguODU0IEw2NS4yODUsMTguODUxIEw2NS41MTIsMTkuMjY0IEw2NS41MDYsMTkuMjY4IEM2NS45MDksMjAuMDAzIDY2LjQwNSwyMC42OCA2Ni45ODMsMjEuMjg2IEw2Ny4yNiwyMS41NTYgQzY5LjE3NCwyMy40MDYgNzEuNzI4LDI0LjM1NyA3NC4zNzMsMjQuMzU3IEM3Ni4zMjIsMjQuMzU3IDc4LjMyMSwyMy44NCA4MC4xNDgsMjIuNzg1IEM4MC4xNjEsMjIuNzg1IDg3LjQ2NywxOC41NjYgODcuNDY3LDE4LjU2NiBDODguMTM5LDE4LjE3OCA4OC44NjMsMTcuOTk0IDg5LjU2NiwxNy45OTQgQzkwLjg5MiwxNy45OTQgOTIuMTM4LDE4LjY1MiA5Mi43OTIsMTkuODQ3IEw5Ni4wNDIsMjUuNzc1IEw5Ni4wNjQsMjUuNzU3IEwxMDIuODQ5LDI5LjY3NCBMMTAyLjc0NCwyOS40OTIgTDE0OS42MjUsMi41MjcgTTE0OS42MjUsMC44OTIgQzE0OS4zNDMsMC44OTIgMTQ5LjA2MiwwLjk2NSAxNDguODEsMS4xMSBMMTAyLjY0MSwyNy42NjYgTDk3LjIzMSwyNC41NDIgTDk0LjIyNiwxOS4wNjEgQzkzLjMxMywxNy4zOTQgOTEuNTI3LDE2LjM1OSA4OS41NjYsMTYuMzU4IEM4OC41NTUsMTYuMzU4IDg3LjU0NiwxNi42MzIgODYuNjQ5LDE3LjE1IEM4My44NzgsMTguNzUgNzkuNjg3LDIxLjE2OSA3OS4zNzQsMjEuMzQ1IEM3OS4zNTksMjEuMzUzIDc5LjM0NSwyMS4zNjEgNzkuMzMsMjEuMzY5IEM3Ny43OTgsMjIuMjU0IDc2LjA4NCwyMi43MjIgNzQuMzczLDIyLjcyMiBDNzIuMDgxLDIyLjcyMiA2OS45NTksMjEuODkgNjguMzk3LDIwLjM4IEw2OC4xNDUsMjAuMTM1IEM2Ny43MDYsMTkuNjcyIDY3LjMyMywxOS4xNTYgNjcuMDA2LDE4LjYwMSBDNjYuOTg4LDE4LjU1OSA2Ni45NjgsMTguNTE5IDY2Ljk0NiwxOC40NzkgTDY2LjcxOSwxOC4wNjUgQzY2LjY5LDE4LjAxMiA2Ni42NTgsMTcuOTYgNjYuNjI0LDE3LjkxMSBDNjUuNjg2LDE2LjMzNyA2My45NTEsMTUuMzY2IDYyLjA1MywxNS4zNjYgQzYxLjA0MiwxNS4zNjYgNjAuMDMzLDE1LjY0IDU5LjEzNiwxNi4xNTggTDMuMTI1LDQ4LjUwMiBDMC40MjYsNTAuMDYxIC0wLjYxMyw1My40NDIgMC44MTEsNTYuMDQgTDExLjA4OSw3NC43OSBDMTEuMjY2LDc1LjExMyAxMS41MzcsNzUuMzUzIDExLjg1LDc1LjQ5NCBMNTguMjc2LDEwMi4yOTggQzU5LjY3OSwxMDMuMTA4IDYxLjQzMywxMDMuNjMgNjMuMzQ4LDEwMy44MDYgQzYzLjgxMiwxMDMuODQ4IDY0LjI4NSwxMDMuODcgNjQuNzU0LDEwMy44NyBDNjUsMTAzLjg3IDY1LjI0OSwxMDMuODY0IDY1LjQ5NCwxMDMuODUyIEM2NS41NjMsMTAzLjg0OSA2NS42MzIsMTAzLjg0NyA2NS43MDEsMTAzLjg0NyBDNjUuNzY0LDEwMy44NDcgNjUuODI4LDEwMy44NDkgNjUuODksMTAzLjg1MiBDNjUuOTg2LDEwMy44NTYgNjYuMDgsMTAzLjg2MyA2Ni4xNzMsMTAzLjg3NCBDNjYuMjgyLDEwNS40NjcgNjcuMzMyLDEwNy4xOTcgNjguNzAyLDEwNy45ODggTDExMS4xNzQsMTMyLjUxIEMxMTEuNjk4LDEzMi44MTIgMTEyLjIzMiwxMzIuOTY1IDExMi43NjQsMTMyLjk2NSBDMTE0LjI2MSwxMzIuOTY1IDExNS4zNDcsMTMxLjc2NSAxMTUuMzQ3LDEzMC4xMTMgTDExNS4zNDcsMTAzLjU1MSBMMTIyLjQ1OCw5OS40NDYgQzEyMi44MTksOTkuMjM3IDEyMy4wODcsOTguODk4IDEyMy4yMDcsOTguNDk4IEwxMjcuODY1LDgyLjkwNSBDMTMyLjI3OSw4My43MDIgMTM2LjU1Nyw4NC43NTMgMTQwLjYwNyw4Ni4wMzMgTDE0MS4xNCw4Ni44NjIgQzE0MS40NTEsODcuMzQ2IDE0MS45NzcsODcuNjEzIDE0Mi41MTYsODcuNjEzIEMxNDIuNzk0LDg3LjYxMyAxNDMuMDc2LDg3LjU0MiAxNDMuMzMzLDg3LjM5MyBMMTY5Ljg2NSw3Mi4wNzYgTDE5Myw4NS40MzMgQzE5My41MjMsODUuNzM1IDE5NC4wNTgsODUuODg4IDE5NC41OSw4NS44ODggQzE5Ni4wODcsODUuODg4IDE5Ny4xNzMsODQuNjg5IDE5Ny4xNzMsODMuMDM2IEwxOTcuMTczLDI5LjAzNSBDMTk3LjE3MywyOC40NTEgMTk2Ljg2MSwyNy45MTEgMTk2LjM1NSwyNy42MTkgQzE5Ni4zNTUsMjcuNjE5IDE3MS44NDMsMTMuNDY3IDE3MC4zODUsMTIuNjI2IEMxNzAuMTMyLDEyLjQ4IDE2OS44NSwxMi40MDcgMTY5LjU2OCwxMi40MDcgQzE2OS4yODUsMTIuNDA3IDE2OS4wMDIsMTIuNDgxIDE2OC43NDksMTIuNjI3IEMxNjguMTQzLDEyLjk3OCAxNjUuNzU2LDE0LjM1NyAxNjQuNDI0LDE1LjEyNSBMMTU5LjYxNSwxMC44NyBDMTU4Ljc5NiwxMC4xNDUgMTU4LjE1NCw4LjkzNyAxNTguMDU0LDcuOTM0IEMxNTguMDQ1LDcuODM3IDE1OC4wMzQsNy43MzkgMTU4LjAyMSw3LjY0IEMxNTguMDA1LDcuNTIzIDE1Ny45OTgsNy40MSAxNTcuOTk4LDcuMzA0IEwxNTcuOTk4LDYuNDE4IEMxNTcuOTk4LDUuODM0IDE1Ny42ODYsNS4yOTUgMTU3LjE4MSw1LjAwMiBDMTU2LjYyNCw0LjY4IDE1MC40NDIsMS4xMTEgMTUwLjQ0MiwxLjExMSBDMTUwLjE4OSwwLjk2NSAxNDkuOTA3LDAuODkyIDE0OS42MjUsMC44OTIiIGlkPSJGaWxsLTEiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTYuMDI3LDI1LjYzNiBMMTQyLjYwMyw1Mi41MjcgQzE0My44MDcsNTMuMjIyIDE0NC41ODIsNTQuMTE0IDE0NC44NDUsNTUuMDY4IEwxNDQuODM1LDU1LjA3NSBMNjMuNDYxLDEwMi4wNTcgTDYzLjQ2LDEwMi4wNTcgQzYxLjgwNiwxMDEuOTA1IDYwLjI2MSwxMDEuNDU3IDU5LjA1NywxMDAuNzYyIEwxMi40ODEsNzMuODcxIEw5Ni4wMjcsMjUuNjM2IiBpZD0iRmlsbC0yIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYzLjQ2MSwxMDIuMTc0IEM2My40NTMsMTAyLjE3NCA2My40NDYsMTAyLjE3NCA2My40MzksMTAyLjE3MiBDNjEuNzQ2LDEwMi4wMTYgNjAuMjExLDEwMS41NjMgNTguOTk4LDEwMC44NjMgTDEyLjQyMiw3My45NzMgQzEyLjM4Niw3My45NTIgMTIuMzY0LDczLjkxNCAxMi4zNjQsNzMuODcxIEMxMi4zNjQsNzMuODMgMTIuMzg2LDczLjc5MSAxMi40MjIsNzMuNzcgTDk1Ljk2OCwyNS41MzUgQzk2LjAwNCwyNS41MTQgOTYuMDQ5LDI1LjUxNCA5Ni4wODUsMjUuNTM1IEwxNDIuNjYxLDUyLjQyNiBDMTQzLjg4OCw1My4xMzQgMTQ0LjY4Miw1NC4wMzggMTQ0Ljk1Nyw1NS4wMzcgQzE0NC45Nyw1NS4wODMgMTQ0Ljk1Myw1NS4xMzMgMTQ0LjkxNSw1NS4xNjEgQzE0NC45MTEsNTUuMTY1IDE0NC44OTgsNTUuMTc0IDE0NC44OTQsNTUuMTc3IEw2My41MTksMTAyLjE1OCBDNjMuNTAxLDEwMi4xNjkgNjMuNDgxLDEwMi4xNzQgNjMuNDYxLDEwMi4xNzQgTDYzLjQ2MSwxMDIuMTc0IFogTTEyLjcxNCw3My44NzEgTDU5LjExNSwxMDAuNjYxIEM2MC4yOTMsMTAxLjM0MSA2MS43ODYsMTAxLjc4MiA2My40MzUsMTAxLjkzNyBMMTQ0LjcwNyw1NS4wMTUgQzE0NC40MjgsNTQuMTA4IDE0My42ODIsNTMuMjg1IDE0Mi41NDQsNTIuNjI4IEw5Ni4wMjcsMjUuNzcxIEwxMi43MTQsNzMuODcxIEwxMi43MTQsNzMuODcxIFoiIGlkPSJGaWxsLTMiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ4LjMyNyw1OC40NzEgQzE0OC4xNDUsNTguNDggMTQ3Ljk2Miw1OC40OCAxNDcuNzgxLDU4LjQ3MiBDMTQ1Ljg4Nyw1OC4zODkgMTQ0LjQ3OSw1Ny40MzQgMTQ0LjYzNiw1Ni4zNCBDMTQ0LjY4OSw1NS45NjcgMTQ0LjY2NCw1NS41OTcgMTQ0LjU2NCw1NS4yMzUgTDYzLjQ2MSwxMDIuMDU3IEM2NC4wODksMTAyLjExNSA2NC43MzMsMTAyLjEzIDY1LjM3OSwxMDIuMDk5IEM2NS41NjEsMTAyLjA5IDY1Ljc0MywxMDIuMDkgNjUuOTI1LDEwMi4wOTggQzY3LjgxOSwxMDIuMTgxIDY5LjIyNywxMDMuMTM2IDY5LjA3LDEwNC4yMyBMMTQ4LjMyNyw1OC40NzEiIGlkPSJGaWxsLTQiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNjkuMDcsMTA0LjM0NyBDNjkuMDQ4LDEwNC4zNDcgNjkuMDI1LDEwNC4zNCA2OS4wMDUsMTA0LjMyNyBDNjguOTY4LDEwNC4zMDEgNjguOTQ4LDEwNC4yNTcgNjguOTU1LDEwNC4yMTMgQzY5LDEwMy44OTYgNjguODk4LDEwMy41NzYgNjguNjU4LDEwMy4yODggQzY4LjE1MywxMDIuNjc4IDY3LjEwMywxMDIuMjY2IDY1LjkyLDEwMi4yMTQgQzY1Ljc0MiwxMDIuMjA2IDY1LjU2MywxMDIuMjA3IDY1LjM4NSwxMDIuMjE1IEM2NC43NDIsMTAyLjI0NiA2NC4wODcsMTAyLjIzMiA2My40NSwxMDIuMTc0IEM2My4zOTksMTAyLjE2OSA2My4zNTgsMTAyLjEzMiA2My4zNDcsMTAyLjA4MiBDNjMuMzM2LDEwMi4wMzMgNjMuMzU4LDEwMS45ODEgNjMuNDAyLDEwMS45NTYgTDE0NC41MDYsNTUuMTM0IEMxNDQuNTM3LDU1LjExNiAxNDQuNTc1LDU1LjExMyAxNDQuNjA5LDU1LjEyNyBDMTQ0LjY0Miw1NS4xNDEgMTQ0LjY2OCw1NS4xNyAxNDQuNjc3LDU1LjIwNCBDMTQ0Ljc4MSw1NS41ODUgMTQ0LjgwNiw1NS45NzIgMTQ0Ljc1MSw1Ni4zNTcgQzE0NC43MDYsNTYuNjczIDE0NC44MDgsNTYuOTk0IDE0NS4wNDcsNTcuMjgyIEMxNDUuNTUzLDU3Ljg5MiAxNDYuNjAyLDU4LjMwMyAxNDcuNzg2LDU4LjM1NSBDMTQ3Ljk2NCw1OC4zNjMgMTQ4LjE0Myw1OC4zNjMgMTQ4LjMyMSw1OC4zNTQgQzE0OC4zNzcsNTguMzUyIDE0OC40MjQsNTguMzg3IDE0OC40MzksNTguNDM4IEMxNDguNDU0LDU4LjQ5IDE0OC40MzIsNTguNTQ1IDE0OC4zODUsNTguNTcyIEw2OS4xMjksMTA0LjMzMSBDNjkuMTExLDEwNC4zNDIgNjkuMDksMTA0LjM0NyA2OS4wNywxMDQuMzQ3IEw2OS4wNywxMDQuMzQ3IFogTTY1LjY2NSwxMDEuOTc1IEM2NS43NTQsMTAxLjk3NSA2NS44NDIsMTAxLjk3NyA2NS45MywxMDEuOTgxIEM2Ny4xOTYsMTAyLjAzNyA2OC4yODMsMTAyLjQ2OSA2OC44MzgsMTAzLjEzOSBDNjkuMDY1LDEwMy40MTMgNjkuMTg4LDEwMy43MTQgNjkuMTk4LDEwNC4wMjEgTDE0Ny44ODMsNTguNTkyIEMxNDcuODQ3LDU4LjU5MiAxNDcuODExLDU4LjU5MSAxNDcuNzc2LDU4LjU4OSBDMTQ2LjUwOSw1OC41MzMgMTQ1LjQyMiw1OC4xIDE0NC44NjcsNTcuNDMxIEMxNDQuNTg1LDU3LjA5MSAxNDQuNDY1LDU2LjcwNyAxNDQuNTIsNTYuMzI0IEMxNDQuNTYzLDU2LjAyMSAxNDQuNTUyLDU1LjcxNiAxNDQuNDg4LDU1LjQxNCBMNjMuODQ2LDEwMS45NyBDNjQuMzUzLDEwMi4wMDIgNjQuODY3LDEwMi4wMDYgNjUuMzc0LDEwMS45ODIgQzY1LjQ3MSwxMDEuOTc3IDY1LjU2OCwxMDEuOTc1IDY1LjY2NSwxMDEuOTc1IEw2NS42NjUsMTAxLjk3NSBaIiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIuMjA4LDU1LjEzNCBDMS4yMDcsNTMuMzA3IDEuOTY3LDUwLjkxNyAzLjkwNiw0OS43OTcgTDU5LjkxNywxNy40NTMgQzYxLjg1NiwxNi4zMzMgNjQuMjQxLDE2LjkwNyA2NS4yNDMsMTguNzM0IEw2NS40NzUsMTkuMTQ0IEM2NS44NzIsMTkuODgyIDY2LjM2OCwyMC41NiA2Ni45NDUsMjEuMTY1IEw2Ny4yMjMsMjEuNDM1IEM3MC41NDgsMjQuNjQ5IDc1LjgwNiwyNS4xNTEgODAuMTExLDIyLjY2NSBMODcuNDMsMTguNDQ1IEM4OS4zNywxNy4zMjYgOTEuNzU0LDE3Ljg5OSA5Mi43NTUsMTkuNzI3IEw5Ni4wMDUsMjUuNjU1IEwxMi40ODYsNzMuODg0IEwyLjIwOCw1NS4xMzQgWiIgaWQ9IkZpbGwtNiIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi40ODYsNzQuMDAxIEMxMi40NzYsNzQuMDAxIDEyLjQ2NSw3My45OTkgMTIuNDU1LDczLjk5NiBDMTIuNDI0LDczLjk4OCAxMi4zOTksNzMuOTY3IDEyLjM4NCw3My45NCBMMi4xMDYsNTUuMTkgQzEuMDc1LDUzLjMxIDEuODU3LDUwLjg0NSAzLjg0OCw0OS42OTYgTDU5Ljg1OCwxNy4zNTIgQzYwLjUyNSwxNi45NjcgNjEuMjcxLDE2Ljc2NCA2Mi4wMTYsMTYuNzY0IEM2My40MzEsMTYuNzY0IDY0LjY2NiwxNy40NjYgNjUuMzI3LDE4LjY0NiBDNjUuMzM3LDE4LjY1NCA2NS4zNDUsMTguNjYzIDY1LjM1MSwxOC42NzQgTDY1LjU3OCwxOS4wODggQzY1LjU4NCwxOS4xIDY1LjU4OSwxOS4xMTIgNjUuNTkxLDE5LjEyNiBDNjUuOTg1LDE5LjgzOCA2Ni40NjksMjAuNDk3IDY3LjAzLDIxLjA4NSBMNjcuMzA1LDIxLjM1MSBDNjkuMTUxLDIzLjEzNyA3MS42NDksMjQuMTIgNzQuMzM2LDI0LjEyIEM3Ni4zMTMsMjQuMTIgNzguMjksMjMuNTgyIDgwLjA1MywyMi41NjMgQzgwLjA2NCwyMi41NTcgODAuMDc2LDIyLjU1MyA4MC4wODgsMjIuNTUgTDg3LjM3MiwxOC4zNDQgQzg4LjAzOCwxNy45NTkgODguNzg0LDE3Ljc1NiA4OS41MjksMTcuNzU2IEM5MC45NTYsMTcuNzU2IDkyLjIwMSwxOC40NzIgOTIuODU4LDE5LjY3IEw5Ni4xMDcsMjUuNTk5IEM5Ni4xMzgsMjUuNjU0IDk2LjExOCwyNS43MjQgOTYuMDYzLDI1Ljc1NiBMMTIuNTQ1LDczLjk4NSBDMTIuNTI2LDczLjk5NiAxMi41MDYsNzQuMDAxIDEyLjQ4Niw3NC4wMDEgTDEyLjQ4Niw3NC4wMDEgWiBNNjIuMDE2LDE2Ljk5NyBDNjEuMzEyLDE2Ljk5NyA2MC42MDYsMTcuMTkgNTkuOTc1LDE3LjU1NCBMMy45NjUsNDkuODk5IEMyLjA4Myw1MC45ODUgMS4zNDEsNTMuMzA4IDIuMzEsNTUuMDc4IEwxMi41MzEsNzMuNzIzIEw5NS44NDgsMjUuNjExIEw5Mi42NTMsMTkuNzgyIEM5Mi4wMzgsMTguNjYgOTAuODcsMTcuOTkgODkuNTI5LDE3Ljk5IEM4OC44MjUsMTcuOTkgODguMTE5LDE4LjE4MiA4Ny40ODksMTguNTQ3IEw4MC4xNzIsMjIuNzcyIEM4MC4xNjEsMjIuNzc4IDgwLjE0OSwyMi43ODIgODAuMTM3LDIyLjc4NSBDNzguMzQ2LDIzLjgxMSA3Ni4zNDEsMjQuMzU0IDc0LjMzNiwyNC4zNTQgQzcxLjU4OCwyNC4zNTQgNjkuMDMzLDIzLjM0NyA2Ny4xNDIsMjEuNTE5IEw2Ni44NjQsMjEuMjQ5IEM2Ni4yNzcsMjAuNjM0IDY1Ljc3NCwxOS45NDcgNjUuMzY3LDE5LjIwMyBDNjUuMzYsMTkuMTkyIDY1LjM1NiwxOS4xNzkgNjUuMzU0LDE5LjE2NiBMNjUuMTYzLDE4LjgxOSBDNjUuMTU0LDE4LjgxMSA2NS4xNDYsMTguODAxIDY1LjE0LDE4Ljc5IEM2NC41MjUsMTcuNjY3IDYzLjM1NywxNi45OTcgNjIuMDE2LDE2Ljk5NyBMNjIuMDE2LDE2Ljk5NyBaIiBpZD0iRmlsbC03IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTQyLjQzNCw0OC44MDggTDQyLjQzNCw0OC44MDggQzM5LjkyNCw0OC44MDcgMzcuNzM3LDQ3LjU1IDM2LjU4Miw0NS40NDMgQzM0Ljc3MSw0Mi4xMzkgMzYuMTQ0LDM3LjgwOSAzOS42NDEsMzUuNzg5IEw1MS45MzIsMjguNjkxIEM1My4xMDMsMjguMDE1IDU0LjQxMywyNy42NTggNTUuNzIxLDI3LjY1OCBDNTguMjMxLDI3LjY1OCA2MC40MTgsMjguOTE2IDYxLjU3MywzMS4wMjMgQzYzLjM4NCwzNC4zMjcgNjIuMDEyLDM4LjY1NyA1OC41MTQsNDAuNjc3IEw0Ni4yMjMsNDcuNzc1IEM0NS4wNTMsNDguNDUgNDMuNzQyLDQ4LjgwOCA0Mi40MzQsNDguODA4IEw0Mi40MzQsNDguODA4IFogTTU1LjcyMSwyOC4xMjUgQzU0LjQ5NSwyOC4xMjUgNTMuMjY1LDI4LjQ2MSA1Mi4xNjYsMjkuMDk2IEwzOS44NzUsMzYuMTk0IEMzNi41OTYsMzguMDg3IDM1LjMwMiw0Mi4xMzYgMzYuOTkyLDQ1LjIxOCBDMzguMDYzLDQ3LjE3MyA0MC4wOTgsNDguMzQgNDIuNDM0LDQ4LjM0IEM0My42NjEsNDguMzQgNDQuODksNDguMDA1IDQ1Ljk5LDQ3LjM3IEw1OC4yODEsNDAuMjcyIEM2MS41NiwzOC4zNzkgNjIuODUzLDM0LjMzIDYxLjE2NCwzMS4yNDggQzYwLjA5MiwyOS4yOTMgNTguMDU4LDI4LjEyNSA1NS43MjEsMjguMTI1IEw1NS43MjEsMjguMTI1IFoiIGlkPSJGaWxsLTgiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjU4OCwyLjQwNyBDMTQ5LjU4OCwyLjQwNyAxNTUuNzY4LDUuOTc1IDE1Ni4zMjUsNi4yOTcgTDE1Ni4zMjUsNy4xODQgQzE1Ni4zMjUsNy4zNiAxNTYuMzM4LDcuNTQ0IDE1Ni4zNjIsNy43MzMgQzE1Ni4zNzMsNy44MTQgMTU2LjM4Miw3Ljg5NCAxNTYuMzksNy45NzUgQzE1Ni41Myw5LjM5IDE1Ny4zNjMsMTAuOTczIDE1OC40OTUsMTEuOTc0IEwxNjUuODkxLDE4LjUxOSBDMTY2LjA2OCwxOC42NzUgMTY2LjI0OSwxOC44MTQgMTY2LjQzMiwxOC45MzQgQzE2OC4wMTEsMTkuOTc0IDE2OS4zODIsMTkuNCAxNjkuNDk0LDE3LjY1MiBDMTY5LjU0MywxNi44NjggMTY5LjU1MSwxNi4wNTcgMTY5LjUxNywxNS4yMjMgTDE2OS41MTQsMTUuMDYzIEwxNjkuNTE0LDEzLjkxMiBDMTcwLjc4LDE0LjY0MiAxOTUuNTAxLDI4LjkxNSAxOTUuNTAxLDI4LjkxNSBMMTk1LjUwMSw4Mi45MTUgQzE5NS41MDEsODQuMDA1IDE5NC43MzEsODQuNDQ1IDE5My43ODEsODMuODk3IEwxNTEuMzA4LDU5LjM3NCBDMTUwLjM1OCw1OC44MjYgMTQ5LjU4OCw1Ny40OTcgMTQ5LjU4OCw1Ni40MDggTDE0OS41ODgsMjIuMzc1IiBpZD0iRmlsbC05IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE5NC41NTMsODQuMjUgQzE5NC4yOTYsODQuMjUgMTk0LjAxMyw4NC4xNjUgMTkzLjcyMiw4My45OTcgTDE1MS4yNSw1OS40NzYgQzE1MC4yNjksNTguOTA5IDE0OS40NzEsNTcuNTMzIDE0OS40NzEsNTYuNDA4IEwxNDkuNDcxLDIyLjM3NSBMMTQ5LjcwNSwyMi4zNzUgTDE0OS43MDUsNTYuNDA4IEMxNDkuNzA1LDU3LjQ1OSAxNTAuNDUsNTguNzQ0IDE1MS4zNjYsNTkuMjc0IEwxOTMuODM5LDgzLjc5NSBDMTk0LjI2Myw4NC4wNCAxOTQuNjU1LDg0LjA4MyAxOTQuOTQyLDgzLjkxNyBDMTk1LjIyNyw4My43NTMgMTk1LjM4NCw4My4zOTcgMTk1LjM4NCw4Mi45MTUgTDE5NS4zODQsMjguOTgyIEMxOTQuMTAyLDI4LjI0MiAxNzIuMTA0LDE1LjU0MiAxNjkuNjMxLDE0LjExNCBMMTY5LjYzNCwxNS4yMiBDMTY5LjY2OCwxNi4wNTIgMTY5LjY2LDE2Ljg3NCAxNjkuNjEsMTcuNjU5IEMxNjkuNTU2LDE4LjUwMyAxNjkuMjE0LDE5LjEyMyAxNjguNjQ3LDE5LjQwNSBDMTY4LjAyOCwxOS43MTQgMTY3LjE5NywxOS41NzggMTY2LjM2NywxOS4wMzIgQzE2Ni4xODEsMTguOTA5IDE2NS45OTUsMTguNzY2IDE2NS44MTQsMTguNjA2IEwxNTguNDE3LDEyLjA2MiBDMTU3LjI1OSwxMS4wMzYgMTU2LjQxOCw5LjQzNyAxNTYuMjc0LDcuOTg2IEMxNTYuMjY2LDcuOTA3IDE1Ni4yNTcsNy44MjcgMTU2LjI0Nyw3Ljc0OCBDMTU2LjIyMSw3LjU1NSAxNTYuMjA5LDcuMzY1IDE1Ni4yMDksNy4xODQgTDE1Ni4yMDksNi4zNjQgQzE1NS4zNzUsNS44ODMgMTQ5LjUyOSwyLjUwOCAxNDkuNTI5LDIuNTA4IEwxNDkuNjQ2LDIuMzA2IEMxNDkuNjQ2LDIuMzA2IDE1NS44MjcsNS44NzQgMTU2LjM4NCw2LjE5NiBMMTU2LjQ0Miw2LjIzIEwxNTYuNDQyLDcuMTg0IEMxNTYuNDQyLDcuMzU1IDE1Ni40NTQsNy41MzUgMTU2LjQ3OCw3LjcxNyBDMTU2LjQ4OSw3LjggMTU2LjQ5OSw3Ljg4MiAxNTYuNTA3LDcuOTYzIEMxNTYuNjQ1LDkuMzU4IDE1Ny40NTUsMTAuODk4IDE1OC41NzIsMTEuODg2IEwxNjUuOTY5LDE4LjQzMSBDMTY2LjE0MiwxOC41ODQgMTY2LjMxOSwxOC43MiAxNjYuNDk2LDE4LjgzNyBDMTY3LjI1NCwxOS4zMzYgMTY4LDE5LjQ2NyAxNjguNTQzLDE5LjE5NiBDMTY5LjAzMywxOC45NTMgMTY5LjMyOSwxOC40MDEgMTY5LjM3NywxNy42NDUgQzE2OS40MjcsMTYuODY3IDE2OS40MzQsMTYuMDU0IDE2OS40MDEsMTUuMjI4IEwxNjkuMzk3LDE1LjA2NSBMMTY5LjM5NywxMy43MSBMMTY5LjU3MiwxMy44MSBDMTcwLjgzOSwxNC41NDEgMTk1LjU1OSwyOC44MTQgMTk1LjU1OSwyOC44MTQgTDE5NS42MTgsMjguODQ3IEwxOTUuNjE4LDgyLjkxNSBDMTk1LjYxOCw4My40ODQgMTk1LjQyLDgzLjkxMSAxOTUuMDU5LDg0LjExOSBDMTk0LjkwOCw4NC4yMDYgMTk0LjczNyw4NC4yNSAxOTQuNTUzLDg0LjI1IiBpZD0iRmlsbC0xMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDUuNjg1LDU2LjE2MSBMMTY5LjgsNzAuMDgzIEwxNDMuODIyLDg1LjA4MSBMMTQyLjM2LDg0Ljc3NCBDMTM1LjgyNiw4Mi42MDQgMTI4LjczMiw4MS4wNDYgMTIxLjM0MSw4MC4xNTggQzExNi45NzYsNzkuNjM0IDExMi42NzgsODEuMjU0IDExMS43NDMsODMuNzc4IEMxMTEuNTA2LDg0LjQxNCAxMTEuNTAzLDg1LjA3MSAxMTEuNzMyLDg1LjcwNiBDMTEzLjI3LDg5Ljk3MyAxMTUuOTY4LDk0LjA2OSAxMTkuNzI3LDk3Ljg0MSBMMTIwLjI1OSw5OC42ODYgQzEyMC4yNiw5OC42ODUgOTQuMjgyLDExMy42ODMgOTQuMjgyLDExMy42ODMgTDcwLjE2Nyw5OS43NjEgTDE0NS42ODUsNTYuMTYxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05NC4yODIsMTEzLjgxOCBMOTQuMjIzLDExMy43ODUgTDY5LjkzMyw5OS43NjEgTDcwLjEwOCw5OS42NiBMMTQ1LjY4NSw1Ni4wMjYgTDE0NS43NDMsNTYuMDU5IEwxNzAuMDMzLDcwLjA4MyBMMTQzLjg0Miw4NS4yMDUgTDE0My43OTcsODUuMTk1IEMxNDMuNzcyLDg1LjE5IDE0Mi4zMzYsODQuODg4IDE0Mi4zMzYsODQuODg4IEMxMzUuNzg3LDgyLjcxNCAxMjguNzIzLDgxLjE2MyAxMjEuMzI3LDgwLjI3NCBDMTIwLjc4OCw4MC4yMDkgMTIwLjIzNiw4MC4xNzcgMTE5LjY4OSw4MC4xNzcgQzExNS45MzEsODAuMTc3IDExMi42MzUsODEuNzA4IDExMS44NTIsODMuODE5IEMxMTEuNjI0LDg0LjQzMiAxMTEuNjIxLDg1LjA1MyAxMTEuODQyLDg1LjY2NyBDMTEzLjM3Nyw4OS45MjUgMTE2LjA1OCw5My45OTMgMTE5LjgxLDk3Ljc1OCBMMTE5LjgyNiw5Ny43NzkgTDEyMC4zNTIsOTguNjE0IEMxMjAuMzU0LDk4LjYxNyAxMjAuMzU2LDk4LjYyIDEyMC4zNTgsOTguNjI0IEwxMjAuNDIyLDk4LjcyNiBMMTIwLjMxNyw5OC43ODcgQzEyMC4yNjQsOTguODE4IDk0LjU5OSwxMTMuNjM1IDk0LjM0LDExMy43ODUgTDk0LjI4MiwxMTMuODE4IEw5NC4yODIsMTEzLjgxOCBaIE03MC40MDEsOTkuNzYxIEw5NC4yODIsMTEzLjU0OSBMMTE5LjA4NCw5OS4yMjkgQzExOS42Myw5OC45MTQgMTE5LjkzLDk4Ljc0IDEyMC4xMDEsOTguNjU0IEwxMTkuNjM1LDk3LjkxNCBDMTE1Ljg2NCw5NC4xMjcgMTEzLjE2OCw5MC4wMzMgMTExLjYyMiw4NS43NDYgQzExMS4zODIsODUuMDc5IDExMS4zODYsODQuNDA0IDExMS42MzMsODMuNzM4IEMxMTIuNDQ4LDgxLjUzOSAxMTUuODM2LDc5Ljk0MyAxMTkuNjg5LDc5Ljk0MyBDMTIwLjI0Niw3OS45NDMgMTIwLjgwNiw3OS45NzYgMTIxLjM1NSw4MC4wNDIgQzEyOC43NjcsODAuOTMzIDEzNS44NDYsODIuNDg3IDE0Mi4zOTYsODQuNjYzIEMxNDMuMjMyLDg0LjgzOCAxNDMuNjExLDg0LjkxNyAxNDMuNzg2LDg0Ljk2NyBMMTY5LjU2Niw3MC4wODMgTDE0NS42ODUsNTYuMjk1IEw3MC40MDEsOTkuNzYxIEw3MC40MDEsOTkuNzYxIFoiIGlkPSJGaWxsLTEyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2Ny4yMywxOC45NzkgTDE2Ny4yMyw2OS44NSBMMTM5LjkwOSw4NS42MjMgTDEzMy40NDgsNzEuNDU2IEMxMzIuNTM4LDY5LjQ2IDEzMC4wMiw2OS43MTggMTI3LjgyNCw3Mi4wMyBDMTI2Ljc2OSw3My4xNCAxMjUuOTMxLDc0LjU4NSAxMjUuNDk0LDc2LjA0OCBMMTE5LjAzNCw5Ny42NzYgTDkxLjcxMiwxMTMuNDUgTDkxLjcxMiw2Mi41NzkgTDE2Ny4yMywxOC45NzkiIGlkPSJGaWxsLTEzIiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTkxLjcxMiwxMTMuNTY3IEM5MS42OTIsMTEzLjU2NyA5MS42NzIsMTEzLjU2MSA5MS42NTMsMTEzLjU1MSBDOTEuNjE4LDExMy41MyA5MS41OTUsMTEzLjQ5MiA5MS41OTUsMTEzLjQ1IEw5MS41OTUsNjIuNTc5IEM5MS41OTUsNjIuNTM3IDkxLjYxOCw2Mi40OTkgOTEuNjUzLDYyLjQ3OCBMMTY3LjE3MiwxOC44NzggQzE2Ny4yMDgsMTguODU3IDE2Ny4yNTIsMTguODU3IDE2Ny4yODgsMTguODc4IEMxNjcuMzI0LDE4Ljg5OSAxNjcuMzQ3LDE4LjkzNyAxNjcuMzQ3LDE4Ljk3OSBMMTY3LjM0Nyw2OS44NSBDMTY3LjM0Nyw2OS44OTEgMTY3LjMyNCw2OS45MyAxNjcuMjg4LDY5Ljk1IEwxMzkuOTY3LDg1LjcyNSBDMTM5LjkzOSw4NS43NDEgMTM5LjkwNSw4NS43NDUgMTM5Ljg3Myw4NS43MzUgQzEzOS44NDIsODUuNzI1IDEzOS44MTYsODUuNzAyIDEzOS44MDIsODUuNjcyIEwxMzMuMzQyLDcxLjUwNCBDMTMyLjk2Nyw3MC42ODIgMTMyLjI4LDcwLjIyOSAxMzEuNDA4LDcwLjIyOSBDMTMwLjMxOSw3MC4yMjkgMTI5LjA0NCw3MC45MTUgMTI3LjkwOCw3Mi4xMSBDMTI2Ljg3NCw3My4yIDEyNi4wMzQsNzQuNjQ3IDEyNS42MDYsNzYuMDgyIEwxMTkuMTQ2LDk3LjcwOSBDMTE5LjEzNyw5Ny43MzggMTE5LjExOCw5Ny43NjIgMTE5LjA5Miw5Ny43NzcgTDkxLjc3LDExMy41NTEgQzkxLjc1MiwxMTMuNTYxIDkxLjczMiwxMTMuNTY3IDkxLjcxMiwxMTMuNTY3IEw5MS43MTIsMTEzLjU2NyBaIE05MS44MjksNjIuNjQ3IEw5MS44MjksMTEzLjI0OCBMMTE4LjkzNSw5Ny41OTggTDEyNS4zODIsNzYuMDE1IEMxMjUuODI3LDc0LjUyNSAxMjYuNjY0LDczLjA4MSAxMjcuNzM5LDcxLjk1IEMxMjguOTE5LDcwLjcwOCAxMzAuMjU2LDY5Ljk5NiAxMzEuNDA4LDY5Ljk5NiBDMTMyLjM3Nyw2OS45OTYgMTMzLjEzOSw3MC40OTcgMTMzLjU1NCw3MS40MDcgTDEzOS45NjEsODUuNDU4IEwxNjcuMTEzLDY5Ljc4MiBMMTY3LjExMywxOS4xODEgTDkxLjgyOSw2Mi42NDcgTDkxLjgyOSw2Mi42NDcgWiIgaWQ9IkZpbGwtMTQiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTY4LjU0MywxOS4yMTMgTDE2OC41NDMsNzAuMDgzIEwxNDEuMjIxLDg1Ljg1NyBMMTM0Ljc2MSw3MS42ODkgQzEzMy44NTEsNjkuNjk0IDEzMS4zMzMsNjkuOTUxIDEyOS4xMzcsNzIuMjYzIEMxMjguMDgyLDczLjM3NCAxMjcuMjQ0LDc0LjgxOSAxMjYuODA3LDc2LjI4MiBMMTIwLjM0Niw5Ny45MDkgTDkzLjAyNSwxMTMuNjgzIEw5My4wMjUsNjIuODEzIEwxNjguNTQzLDE5LjIxMyIgaWQ9IkZpbGwtMTUiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTMuMDI1LDExMy44IEM5My4wMDUsMTEzLjggOTIuOTg0LDExMy43OTUgOTIuOTY2LDExMy43ODUgQzkyLjkzMSwxMTMuNzY0IDkyLjkwOCwxMTMuNzI1IDkyLjkwOCwxMTMuNjg0IEw5Mi45MDgsNjIuODEzIEM5Mi45MDgsNjIuNzcxIDkyLjkzMSw2Mi43MzMgOTIuOTY2LDYyLjcxMiBMMTY4LjQ4NCwxOS4xMTIgQzE2OC41MiwxOS4wOSAxNjguNTY1LDE5LjA5IDE2OC42MDEsMTkuMTEyIEMxNjguNjM3LDE5LjEzMiAxNjguNjYsMTkuMTcxIDE2OC42NiwxOS4yMTIgTDE2OC42Niw3MC4wODMgQzE2OC42Niw3MC4xMjUgMTY4LjYzNyw3MC4xNjQgMTY4LjYwMSw3MC4xODQgTDE0MS4yOCw4NS45NTggQzE0MS4yNTEsODUuOTc1IDE0MS4yMTcsODUuOTc5IDE0MS4xODYsODUuOTY4IEMxNDEuMTU0LDg1Ljk1OCAxNDEuMTI5LDg1LjkzNiAxNDEuMTE1LDg1LjkwNiBMMTM0LjY1NSw3MS43MzggQzEzNC4yOCw3MC45MTUgMTMzLjU5Myw3MC40NjMgMTMyLjcyLDcwLjQ2MyBDMTMxLjYzMiw3MC40NjMgMTMwLjM1Nyw3MS4xNDggMTI5LjIyMSw3Mi4zNDQgQzEyOC4xODYsNzMuNDMzIDEyNy4zNDcsNzQuODgxIDEyNi45MTksNzYuMzE1IEwxMjAuNDU4LDk3Ljk0MyBDMTIwLjQ1LDk3Ljk3MiAxMjAuNDMxLDk3Ljk5NiAxMjAuNDA1LDk4LjAxIEw5My4wODMsMTEzLjc4NSBDOTMuMDY1LDExMy43OTUgOTMuMDQ1LDExMy44IDkzLjAyNSwxMTMuOCBMOTMuMDI1LDExMy44IFogTTkzLjE0Miw2Mi44ODEgTDkzLjE0MiwxMTMuNDgxIEwxMjAuMjQ4LDk3LjgzMiBMMTI2LjY5NSw3Ni4yNDggQzEyNy4xNCw3NC43NTggMTI3Ljk3Nyw3My4zMTUgMTI5LjA1Miw3Mi4xODMgQzEzMC4yMzEsNzAuOTQyIDEzMS41NjgsNzAuMjI5IDEzMi43Miw3MC4yMjkgQzEzMy42ODksNzAuMjI5IDEzNC40NTIsNzAuNzMxIDEzNC44NjcsNzEuNjQxIEwxNDEuMjc0LDg1LjY5MiBMMTY4LjQyNiw3MC4wMTYgTDE2OC40MjYsMTkuNDE1IEw5My4xNDIsNjIuODgxIEw5My4xNDIsNjIuODgxIFoiIGlkPSJGaWxsLTE2IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS44LDcwLjA4MyBMMTQyLjQ3OCw4NS44NTcgTDEzNi4wMTgsNzEuNjg5IEMxMzUuMTA4LDY5LjY5NCAxMzIuNTksNjkuOTUxIDEzMC4zOTMsNzIuMjYzIEMxMjkuMzM5LDczLjM3NCAxMjguNSw3NC44MTkgMTI4LjA2NCw3Ni4yODIgTDEyMS42MDMsOTcuOTA5IEw5NC4yODIsMTEzLjY4MyBMOTQuMjgyLDYyLjgxMyBMMTY5LjgsMTkuMjEzIEwxNjkuOCw3MC4wODMgWiIgaWQ9IkZpbGwtMTciIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTQuMjgyLDExMy45MTcgQzk0LjI0MSwxMTMuOTE3IDk0LjIwMSwxMTMuOTA3IDk0LjE2NSwxMTMuODg2IEM5NC4wOTMsMTEzLjg0NSA5NC4wNDgsMTEzLjc2NyA5NC4wNDgsMTEzLjY4NCBMOTQuMDQ4LDYyLjgxMyBDOTQuMDQ4LDYyLjczIDk0LjA5Myw2Mi42NTIgOTQuMTY1LDYyLjYxMSBMMTY5LjY4MywxOS4wMSBDMTY5Ljc1NSwxOC45NjkgMTY5Ljg0NCwxOC45NjkgMTY5LjkxNywxOS4wMSBDMTY5Ljk4OSwxOS4wNTIgMTcwLjAzMywxOS4xMjkgMTcwLjAzMywxOS4yMTIgTDE3MC4wMzMsNzAuMDgzIEMxNzAuMDMzLDcwLjE2NiAxNjkuOTg5LDcwLjI0NCAxNjkuOTE3LDcwLjI4NSBMMTQyLjU5NSw4Ni4wNiBDMTQyLjUzOCw4Ni4wOTIgMTQyLjQ2OSw4Ni4xIDE0Mi40MDcsODYuMDggQzE0Mi4zNDQsODYuMDYgMTQyLjI5Myw4Ni4wMTQgMTQyLjI2Niw4NS45NTQgTDEzNS44MDUsNzEuNzg2IEMxMzUuNDQ1LDcwLjk5NyAxMzQuODEzLDcwLjU4IDEzMy45NzcsNzAuNTggQzEzMi45MjEsNzAuNTggMTMxLjY3Niw3MS4yNTIgMTMwLjU2Miw3Mi40MjQgQzEyOS41NCw3My41MDEgMTI4LjcxMSw3NC45MzEgMTI4LjI4Nyw3Ni4zNDggTDEyMS44MjcsOTcuOTc2IEMxMjEuODEsOTguMDM0IDEyMS43NzEsOTguMDgyIDEyMS43Miw5OC4xMTIgTDk0LjM5OCwxMTMuODg2IEM5NC4zNjIsMTEzLjkwNyA5NC4zMjIsMTEzLjkxNyA5NC4yODIsMTEzLjkxNyBMOTQuMjgyLDExMy45MTcgWiBNOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDExMy4yNzkgTDEyMS40MDYsOTcuNzU0IEwxMjcuODQsNzYuMjE1IEMxMjguMjksNzQuNzA4IDEyOS4xMzcsNzMuMjQ3IDEzMC4yMjQsNzIuMTAzIEMxMzEuNDI1LDcwLjgzOCAxMzIuNzkzLDcwLjExMiAxMzMuOTc3LDcwLjExMiBDMTM0Ljk5NSw3MC4xMTIgMTM1Ljc5NSw3MC42MzggMTM2LjIzLDcxLjU5MiBMMTQyLjU4NCw4NS41MjYgTDE2OS41NjYsNjkuOTQ4IEwxNjkuNTY2LDE5LjYxNyBMOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDYyLjk0OCBaIiBpZD0iRmlsbC0xOCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMDkuODk0LDkyLjk0MyBMMTA5Ljg5NCw5Mi45NDMgQzEwOC4xMiw5Mi45NDMgMTA2LjY1Myw5Mi4yMTggMTA1LjY1LDkwLjgyMyBDMTA1LjU4Myw5MC43MzEgMTA1LjU5Myw5MC42MSAxMDUuNjczLDkwLjUyOSBDMTA1Ljc1Myw5MC40NDggMTA1Ljg4LDkwLjQ0IDEwNS45NzQsOTAuNTA2IEMxMDYuNzU0LDkxLjA1MyAxMDcuNjc5LDkxLjMzMyAxMDguNzI0LDkxLjMzMyBDMTEwLjA0Nyw5MS4zMzMgMTExLjQ3OCw5MC44OTQgMTEyLjk4LDkwLjAyNyBDMTE4LjI5MSw4Ni45NiAxMjIuNjExLDc5LjUwOSAxMjIuNjExLDczLjQxNiBDMTIyLjYxMSw3MS40ODkgMTIyLjE2OSw2OS44NTYgMTIxLjMzMyw2OC42OTIgQzEyMS4yNjYsNjguNiAxMjEuMjc2LDY4LjQ3MyAxMjEuMzU2LDY4LjM5MiBDMTIxLjQzNiw2OC4zMTEgMTIxLjU2Myw2OC4yOTkgMTIxLjY1Niw2OC4zNjUgQzEyMy4zMjcsNjkuNTM3IDEyNC4yNDcsNzEuNzQ2IDEyNC4yNDcsNzQuNTg0IEMxMjQuMjQ3LDgwLjgyNiAxMTkuODIxLDg4LjQ0NyAxMTQuMzgyLDkxLjU4NyBDMTEyLjgwOCw5Mi40OTUgMTExLjI5OCw5Mi45NDMgMTA5Ljg5NCw5Mi45NDMgTDEwOS44OTQsOTIuOTQzIFogTTEwNi45MjUsOTEuNDAxIEMxMDcuNzM4LDkyLjA1MiAxMDguNzQ1LDkyLjI3OCAxMDkuODkzLDkyLjI3OCBMMTA5Ljg5NCw5Mi4yNzggQzExMS4yMTUsOTIuMjc4IDExMi42NDcsOTEuOTUxIDExNC4xNDgsOTEuMDg0IEMxMTkuNDU5LDg4LjAxNyAxMjMuNzgsODAuNjIxIDEyMy43OCw3NC41MjggQzEyMy43OCw3Mi41NDkgMTIzLjMxNyw3MC45MjkgMTIyLjQ1NCw2OS43NjcgQzEyMi44NjUsNzAuODAyIDEyMy4wNzksNzIuMDQyIDEyMy4wNzksNzMuNDAyIEMxMjMuMDc5LDc5LjY0NSAxMTguNjUzLDg3LjI4NSAxMTMuMjE0LDkwLjQyNSBDMTExLjY0LDkxLjMzNCAxMTAuMTMsOTEuNzQyIDEwOC43MjQsOTEuNzQyIEMxMDguMDgzLDkxLjc0MiAxMDcuNDgxLDkxLjU5MyAxMDYuOTI1LDkxLjQwMSBMMTA2LjkyNSw5MS40MDEgWiIgaWQ9IkZpbGwtMTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjA5Nyw5MC4yMyBDMTE4LjQ4MSw4Ny4xMjIgMTIyLjg0NSw3OS41OTQgMTIyLjg0NSw3My40MTYgQzEyMi44NDUsNzEuMzY1IDEyMi4zNjIsNjkuNzI0IDEyMS41MjIsNjguNTU2IEMxMTkuNzM4LDY3LjMwNCAxMTcuMTQ4LDY3LjM2MiAxMTQuMjY1LDY5LjAyNiBDMTA4Ljg4MSw3Mi4xMzQgMTA0LjUxNyw3OS42NjIgMTA0LjUxNyw4NS44NCBDMTA0LjUxNyw4Ny44OTEgMTA1LDg5LjUzMiAxMDUuODQsOTAuNyBDMTA3LjYyNCw5MS45NTIgMTEwLjIxNCw5MS44OTQgMTEzLjA5Nyw5MC4yMyIgaWQ9IkZpbGwtMjAiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTA4LjcyNCw5MS42MTQgTDEwOC43MjQsOTEuNjE0IEMxMDcuNTgyLDkxLjYxNCAxMDYuNTY2LDkxLjQwMSAxMDUuNzA1LDkwLjc5NyBDMTA1LjY4NCw5MC43ODMgMTA1LjY2NSw5MC44MTEgMTA1LjY1LDkwLjc5IEMxMDQuNzU2LDg5LjU0NiAxMDQuMjgzLDg3Ljg0MiAxMDQuMjgzLDg1LjgxNyBDMTA0LjI4Myw3OS41NzUgMTA4LjcwOSw3MS45NTMgMTE0LjE0OCw2OC44MTIgQzExNS43MjIsNjcuOTA0IDExNy4yMzIsNjcuNDQ5IDExOC42MzgsNjcuNDQ5IEMxMTkuNzgsNjcuNDQ5IDEyMC43OTYsNjcuNzU4IDEyMS42NTYsNjguMzYyIEMxMjEuNjc4LDY4LjM3NyAxMjEuNjk3LDY4LjM5NyAxMjEuNzEyLDY4LjQxOCBDMTIyLjYwNiw2OS42NjIgMTIzLjA3OSw3MS4zOSAxMjMuMDc5LDczLjQxNSBDMTIzLjA3OSw3OS42NTggMTE4LjY1Myw4Ny4xOTggMTEzLjIxNCw5MC4zMzggQzExMS42NCw5MS4yNDcgMTEwLjEzLDkxLjYxNCAxMDguNzI0LDkxLjYxNCBMMTA4LjcyNCw5MS42MTQgWiBNMTA2LjAwNiw5MC41MDUgQzEwNi43OCw5MS4wMzcgMTA3LjY5NCw5MS4yODEgMTA4LjcyNCw5MS4yODEgQzExMC4wNDcsOTEuMjgxIDExMS40NzgsOTAuODY4IDExMi45OCw5MC4wMDEgQzExOC4yOTEsODYuOTM1IDEyMi42MTEsNzkuNDk2IDEyMi42MTEsNzMuNDAzIEMxMjIuNjExLDcxLjQ5NCAxMjIuMTc3LDY5Ljg4IDEyMS4zNTYsNjguNzE4IEMxMjAuNTgyLDY4LjE4NSAxMTkuNjY4LDY3LjkxOSAxMTguNjM4LDY3LjkxOSBDMTE3LjMxNSw2Ny45MTkgMTE1Ljg4Myw2OC4zNiAxMTQuMzgyLDY5LjIyNyBDMTA5LjA3MSw3Mi4yOTMgMTA0Ljc1MSw3OS43MzMgMTA0Ljc1MSw4NS44MjYgQzEwNC43NTEsODcuNzM1IDEwNS4xODUsODkuMzQzIDEwNi4wMDYsOTAuNTA1IEwxMDYuMDA2LDkwLjUwNSBaIiBpZD0iRmlsbC0yMSIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDkuMzE4LDcuMjYyIEwxMzkuMzM0LDE2LjE0IEwxNTUuMjI3LDI3LjE3MSBMMTYwLjgxNiwyMS4wNTkgTDE0OS4zMTgsNy4yNjIiIGlkPSJGaWxsLTIyIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS42NzYsMTMuODQgTDE1OS45MjgsMTkuNDY3IEMxNTYuMjg2LDIxLjU3IDE1MC40LDIxLjU4IDE0Ni43ODEsMTkuNDkxIEMxNDMuMTYxLDE3LjQwMiAxNDMuMTgsMTQuMDAzIDE0Ni44MjIsMTEuOSBMMTU2LjMxNyw2LjI5MiBMMTQ5LjU4OCwyLjQwNyBMNjcuNzUyLDQ5LjQ3OCBMMTEzLjY3NSw3NS45OTIgTDExNi43NTYsNzQuMjEzIEMxMTcuMzg3LDczLjg0OCAxMTcuNjI1LDczLjMxNSAxMTcuMzc0LDcyLjgyMyBDMTE1LjAxNyw2OC4xOTEgMTE0Ljc4MSw2My4yNzcgMTE2LjY5MSw1OC41NjEgQzEyMi4zMjksNDQuNjQxIDE0MS4yLDMzLjc0NiAxNjUuMzA5LDMwLjQ5MSBDMTczLjQ3OCwyOS4zODggMTgxLjk4OSwyOS41MjQgMTkwLjAxMywzMC44ODUgQzE5MC44NjUsMzEuMDMgMTkxLjc4OSwzMC44OTMgMTkyLjQyLDMwLjUyOCBMMTk1LjUwMSwyOC43NSBMMTY5LjY3NiwxMy44NCIgaWQ9IkZpbGwtMjMiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3Ni40NTkgQzExMy41OTQsNzYuNDU5IDExMy41MTQsNzYuNDM4IDExMy40NDIsNzYuMzk3IEw2Ny41MTgsNDkuODgyIEM2Ny4zNzQsNDkuNzk5IDY3LjI4NCw0OS42NDUgNjcuMjg1LDQ5LjQ3OCBDNjcuMjg1LDQ5LjMxMSA2Ny4zNzQsNDkuMTU3IDY3LjUxOSw0OS4wNzMgTDE0OS4zNTUsMi4wMDIgQzE0OS40OTksMS45MTkgMTQ5LjY3NywxLjkxOSAxNDkuODIxLDIuMDAyIEwxNTYuNTUsNS44ODcgQzE1Ni43NzQsNi4wMTcgMTU2Ljg1LDYuMzAyIDE1Ni43MjIsNi41MjYgQzE1Ni41OTIsNi43NDkgMTU2LjMwNyw2LjgyNiAxNTYuMDgzLDYuNjk2IEwxNDkuNTg3LDIuOTQ2IEw2OC42ODcsNDkuNDc5IEwxMTMuNjc1LDc1LjQ1MiBMMTE2LjUyMyw3My44MDggQzExNi43MTUsNzMuNjk3IDExNy4xNDMsNzMuMzk5IDExNi45NTgsNzMuMDM1IEMxMTQuNTQyLDY4LjI4NyAxMTQuMyw2My4yMjEgMTE2LjI1OCw1OC4zODUgQzExOS4wNjQsNTEuNDU4IDEyNS4xNDMsNDUuMTQzIDEzMy44NCw0MC4xMjIgQzE0Mi40OTcsMzUuMTI0IDE1My4zNTgsMzEuNjMzIDE2NS4yNDcsMzAuMDI4IEMxNzMuNDQ1LDI4LjkyMSAxODIuMDM3LDI5LjA1OCAxOTAuMDkxLDMwLjQyNSBDMTkwLjgzLDMwLjU1IDE5MS42NTIsMzAuNDMyIDE5Mi4xODYsMzAuMTI0IEwxOTQuNTY3LDI4Ljc1IEwxNjkuNDQyLDE0LjI0NCBDMTY5LjIxOSwxNC4xMTUgMTY5LjE0MiwxMy44MjkgMTY5LjI3MSwxMy42MDYgQzE2OS40LDEzLjM4MiAxNjkuNjg1LDEzLjMwNiAxNjkuOTA5LDEzLjQzNSBMMTk1LjczNCwyOC4zNDUgQzE5NS44NzksMjguNDI4IDE5NS45NjgsMjguNTgzIDE5NS45NjgsMjguNzUgQzE5NS45NjgsMjguOTE2IDE5NS44NzksMjkuMDcxIDE5NS43MzQsMjkuMTU0IEwxOTIuNjUzLDMwLjkzMyBDMTkxLjkzMiwzMS4zNSAxOTAuODksMzEuNTA4IDE4OS45MzUsMzEuMzQ2IEMxODEuOTcyLDI5Ljk5NSAxNzMuNDc4LDI5Ljg2IDE2NS4zNzIsMzAuOTU0IEMxNTMuNjAyLDMyLjU0MyAxNDIuODYsMzUuOTkzIDEzNC4zMDcsNDAuOTMxIEMxMjUuNzkzLDQ1Ljg0NyAxMTkuODUxLDUyLjAwNCAxMTcuMTI0LDU4LjczNiBDMTE1LjI3LDYzLjMxNCAxMTUuNTAxLDY4LjExMiAxMTcuNzksNzIuNjExIEMxMTguMTYsNzMuMzM2IDExNy44NDUsNzQuMTI0IDExNi45OSw3NC42MTcgTDExMy45MDksNzYuMzk3IEMxMTMuODM2LDc2LjQzOCAxMTMuNzU2LDc2LjQ1OSAxMTMuNjc1LDc2LjQ1OSIgaWQ9IkZpbGwtMjQiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUzLjMxNiwyMS4yNzkgQzE1MC45MDMsMjEuMjc5IDE0OC40OTUsMjAuNzUxIDE0Ni42NjQsMTkuNjkzIEMxNDQuODQ2LDE4LjY0NCAxNDMuODQ0LDE3LjIzMiAxNDMuODQ0LDE1LjcxOCBDMTQzLjg0NCwxNC4xOTEgMTQ0Ljg2LDEyLjc2MyAxNDYuNzA1LDExLjY5OCBMMTU2LjE5OCw2LjA5MSBDMTU2LjMwOSw2LjAyNSAxNTYuNDUyLDYuMDYyIDE1Ni41MTgsNi4xNzMgQzE1Ni41ODMsNi4yODQgMTU2LjU0Nyw2LjQyNyAxNTYuNDM2LDYuNDkzIEwxNDYuOTQsMTIuMTAyIEMxNDUuMjQ0LDEzLjA4MSAxNDQuMzEyLDE0LjM2NSAxNDQuMzEyLDE1LjcxOCBDMTQ0LjMxMiwxNy4wNTggMTQ1LjIzLDE4LjMyNiAxNDYuODk3LDE5LjI4OSBDMTUwLjQ0NiwyMS4zMzggMTU2LjI0LDIxLjMyNyAxNTkuODExLDE5LjI2NSBMMTY5LjU1OSwxMy42MzcgQzE2OS42NywxMy41NzMgMTY5LjgxMywxMy42MTEgMTY5Ljg3OCwxMy43MjMgQzE2OS45NDMsMTMuODM0IDE2OS45MDQsMTMuOTc3IDE2OS43OTMsMTQuMDQyIEwxNjAuMDQ1LDE5LjY3IEMxNTguMTg3LDIwLjc0MiAxNTUuNzQ5LDIxLjI3OSAxNTMuMzE2LDIxLjI3OSIgaWQ9IkZpbGwtMjUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3NS45OTIgTDY3Ljc2Miw0OS40ODQiIGlkPSJGaWxsLTI2IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMy42NzUsNzYuMzQyIEMxMTMuNjE1LDc2LjM0MiAxMTMuNTU1LDc2LjMyNyAxMTMuNSw3Ni4yOTUgTDY3LjU4Nyw0OS43ODcgQzY3LjQxOSw0OS42OSA2Ny4zNjIsNDkuNDc2IDY3LjQ1OSw0OS4zMDkgQzY3LjU1Niw0OS4xNDEgNjcuNzcsNDkuMDgzIDY3LjkzNyw0OS4xOCBMMTEzLjg1LDc1LjY4OCBDMTE0LjAxOCw3NS43ODUgMTE0LjA3NSw3NiAxMTMuOTc4LDc2LjE2NyBDMTEzLjkxNCw3Ni4yNzkgMTEzLjc5Niw3Ni4zNDIgMTEzLjY3NSw3Ni4zNDIiIGlkPSJGaWxsLTI3IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY3Ljc2Miw0OS40ODQgTDY3Ljc2MiwxMDMuNDg1IEM2Ny43NjIsMTA0LjU3NSA2OC41MzIsMTA1LjkwMyA2OS40ODIsMTA2LjQ1MiBMMTExLjk1NSwxMzAuOTczIEMxMTIuOTA1LDEzMS41MjIgMTEzLjY3NSwxMzEuMDgzIDExMy42NzUsMTI5Ljk5MyBMMTEzLjY3NSw3NS45OTIiIGlkPSJGaWxsLTI4IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMi43MjcsMTMxLjU2MSBDMTEyLjQzLDEzMS41NjEgMTEyLjEwNywxMzEuNDY2IDExMS43OCwxMzEuMjc2IEw2OS4zMDcsMTA2Ljc1NSBDNjguMjQ0LDEwNi4xNDIgNjcuNDEyLDEwNC43MDUgNjcuNDEyLDEwMy40ODUgTDY3LjQxMiw0OS40ODQgQzY3LjQxMiw0OS4yOSA2Ny41NjksNDkuMTM0IDY3Ljc2Miw0OS4xMzQgQzY3Ljk1Niw0OS4xMzQgNjguMTEzLDQ5LjI5IDY4LjExMyw0OS40ODQgTDY4LjExMywxMDMuNDg1IEM2OC4xMTMsMTA0LjQ0NSA2OC44MiwxMDUuNjY1IDY5LjY1NywxMDYuMTQ4IEwxMTIuMTMsMTMwLjY3IEMxMTIuNDc0LDEzMC44NjggMTEyLjc5MSwxMzAuOTEzIDExMywxMzAuNzkyIEMxMTMuMjA2LDEzMC42NzMgMTEzLjMyNSwxMzAuMzgxIDExMy4zMjUsMTI5Ljk5MyBMMTEzLjMyNSw3NS45OTIgQzExMy4zMjUsNzUuNzk4IDExMy40ODIsNzUuNjQxIDExMy42NzUsNzUuNjQxIEMxMTMuODY5LDc1LjY0MSAxMTQuMDI1LDc1Ljc5OCAxMTQuMDI1LDc1Ljk5MiBMMTE0LjAyNSwxMjkuOTkzIEMxMTQuMDI1LDEzMC42NDggMTEzLjc4NiwxMzEuMTQ3IDExMy4zNSwxMzEuMzk5IEMxMTMuMTYyLDEzMS41MDcgMTEyLjk1MiwxMzEuNTYxIDExMi43MjcsMTMxLjU2MSIgaWQ9IkZpbGwtMjkiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEyLjg2LDQwLjUxMiBDMTEyLjg2LDQwLjUxMiAxMTIuODYsNDAuNTEyIDExMi44NTksNDAuNTEyIEMxMTAuNTQxLDQwLjUxMiAxMDguMzYsMzkuOTkgMTA2LjcxNywzOS4wNDEgQzEwNS4wMTIsMzguMDU3IDEwNC4wNzQsMzYuNzI2IDEwNC4wNzQsMzUuMjkyIEMxMDQuMDc0LDMzLjg0NyAxMDUuMDI2LDMyLjUwMSAxMDYuNzU0LDMxLjUwNCBMMTE4Ljc5NSwyNC41NTEgQzEyMC40NjMsMjMuNTg5IDEyMi42NjksMjMuMDU4IDEyNS4wMDcsMjMuMDU4IEMxMjcuMzI1LDIzLjA1OCAxMjkuNTA2LDIzLjU4MSAxMzEuMTUsMjQuNTMgQzEzMi44NTQsMjUuNTE0IDEzMy43OTMsMjYuODQ1IDEzMy43OTMsMjguMjc4IEMxMzMuNzkzLDI5LjcyNCAxMzIuODQxLDMxLjA2OSAxMzEuMTEzLDMyLjA2NyBMMTE5LjA3MSwzOS4wMTkgQzExNy40MDMsMzkuOTgyIDExNS4xOTcsNDAuNTEyIDExMi44Niw0MC41MTIgTDExMi44Niw0MC41MTIgWiBNMTI1LjAwNywyMy43NTkgQzEyMi43OSwyMy43NTkgMTIwLjcwOSwyNC4yNTYgMTE5LjE0NiwyNS4xNTggTDEwNy4xMDQsMzIuMTEgQzEwNS42MDIsMzIuOTc4IDEwNC43NzQsMzQuMTA4IDEwNC43NzQsMzUuMjkyIEMxMDQuNzc0LDM2LjQ2NSAxMDUuNTg5LDM3LjU4MSAxMDcuMDY3LDM4LjQzNCBDMTA4LjYwNSwzOS4zMjMgMTEwLjY2MywzOS44MTIgMTEyLjg1OSwzOS44MTIgTDExMi44NiwzOS44MTIgQzExNS4wNzYsMzkuODEyIDExNy4xNTgsMzkuMzE1IDExOC43MjEsMzguNDEzIEwxMzAuNzYyLDMxLjQ2IEMxMzIuMjY0LDMwLjU5MyAxMzMuMDkyLDI5LjQ2MyAxMzMuMDkyLDI4LjI3OCBDMTMzLjA5MiwyNy4xMDYgMTMyLjI3OCwyNS45OSAxMzAuOCwyNS4xMzYgQzEyOS4yNjEsMjQuMjQ4IDEyNy4yMDQsMjMuNzU5IDEyNS4wMDcsMjMuNzU5IEwxMjUuMDA3LDIzLjc1OSBaIiBpZD0iRmlsbC0zMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjUuNjMsMTYuMjE5IEwxNTkuODk2LDE5LjUzIEMxNTYuNzI5LDIxLjM1OCAxNTEuNjEsMjEuMzY3IDE0OC40NjMsMTkuNTUgQzE0NS4zMTYsMTcuNzMzIDE0NS4zMzIsMTQuNzc4IDE0OC40OTksMTIuOTQ5IEwxNTQuMjMzLDkuNjM5IEwxNjUuNjMsMTYuMjE5IiBpZD0iRmlsbC0zMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNTQuMjMzLDEwLjQ0OCBMMTY0LjIyOCwxNi4yMTkgTDE1OS41NDYsMTguOTIzIEMxNTguMTEyLDE5Ljc1IDE1Ni4xOTQsMjAuMjA2IDE1NC4xNDcsMjAuMjA2IEMxNTIuMTE4LDIwLjIwNiAxNTAuMjI0LDE5Ljc1NyAxNDguODE0LDE4Ljk0MyBDMTQ3LjUyNCwxOC4xOTkgMTQ2LjgxNCwxNy4yNDkgMTQ2LjgxNCwxNi4yNjkgQzE0Ni44MTQsMTUuMjc4IDE0Ny41MzcsMTQuMzE0IDE0OC44NSwxMy41NTYgTDE1NC4yMzMsMTAuNDQ4IE0xNTQuMjMzLDkuNjM5IEwxNDguNDk5LDEyLjk0OSBDMTQ1LjMzMiwxNC43NzggMTQ1LjMxNiwxNy43MzMgMTQ4LjQ2MywxOS41NSBDMTUwLjAzMSwyMC40NTUgMTUyLjA4NiwyMC45MDcgMTU0LjE0NywyMC45MDcgQzE1Ni4yMjQsMjAuOTA3IDE1OC4zMDYsMjAuNDQ3IDE1OS44OTYsMTkuNTMgTDE2NS42MywxNi4yMTkgTDE1NC4yMzMsOS42MzkiIGlkPSJGaWxsLTMyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NS40NDUsNzIuNjY3IEwxNDUuNDQ1LDcyLjY2NyBDMTQzLjY3Miw3Mi42NjcgMTQyLjIwNCw3MS44MTcgMTQxLjIwMiw3MC40MjIgQzE0MS4xMzUsNzAuMzMgMTQxLjE0NSw3MC4xNDcgMTQxLjIyNSw3MC4wNjYgQzE0MS4zMDUsNjkuOTg1IDE0MS40MzIsNjkuOTQ2IDE0MS41MjUsNzAuMDExIEMxNDIuMzA2LDcwLjU1OSAxNDMuMjMxLDcwLjgyMyAxNDQuMjc2LDcwLjgyMiBDMTQ1LjU5OCw3MC44MjIgMTQ3LjAzLDcwLjM3NiAxNDguNTMyLDY5LjUwOSBDMTUzLjg0Miw2Ni40NDMgMTU4LjE2Myw1OC45ODcgMTU4LjE2Myw1Mi44OTQgQzE1OC4xNjMsNTAuOTY3IDE1Ny43MjEsNDkuMzMyIDE1Ni44ODQsNDguMTY4IEMxNTYuODE4LDQ4LjA3NiAxNTYuODI4LDQ3Ljk0OCAxNTYuOTA4LDQ3Ljg2NyBDMTU2Ljk4OCw0Ny43ODYgMTU3LjExNCw0Ny43NzQgMTU3LjIwOCw0Ny44NCBDMTU4Ljg3OCw0OS4wMTIgMTU5Ljc5OCw1MS4yMiAxNTkuNzk4LDU0LjA1OSBDMTU5Ljc5OCw2MC4zMDEgMTU1LjM3Myw2OC4wNDYgMTQ5LjkzMyw3MS4xODYgQzE0OC4zNiw3Mi4wOTQgMTQ2Ljg1LDcyLjY2NyAxNDUuNDQ1LDcyLjY2NyBMMTQ1LjQ0NSw3Mi42NjcgWiBNMTQyLjQ3Niw3MSBDMTQzLjI5LDcxLjY1MSAxNDQuMjk2LDcyLjAwMiAxNDUuNDQ1LDcyLjAwMiBDMTQ2Ljc2Nyw3Mi4wMDIgMTQ4LjE5OCw3MS41NSAxNDkuNyw3MC42ODIgQzE1NS4wMSw2Ny42MTcgMTU5LjMzMSw2MC4xNTkgMTU5LjMzMSw1NC4wNjUgQzE1OS4zMzEsNTIuMDg1IDE1OC44NjgsNTAuNDM1IDE1OC4wMDYsNDkuMjcyIEMxNTguNDE3LDUwLjMwNyAxNTguNjMsNTEuNTMyIDE1OC42Myw1Mi44OTIgQzE1OC42Myw1OS4xMzQgMTU0LjIwNSw2Ni43NjcgMTQ4Ljc2NSw2OS45MDcgQzE0Ny4xOTIsNzAuODE2IDE0NS42ODEsNzEuMjgzIDE0NC4yNzYsNzEuMjgzIEMxNDMuNjM0LDcxLjI4MyAxNDMuMDMzLDcxLjE5MiAxNDIuNDc2LDcxIEwxNDIuNDc2LDcxIFoiIGlkPSJGaWxsLTMzIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0OC42NDgsNjkuNzA0IEMxNTQuMDMyLDY2LjU5NiAxNTguMzk2LDU5LjA2OCAxNTguMzk2LDUyLjg5MSBDMTU4LjM5Niw1MC44MzkgMTU3LjkxMyw0OS4xOTggMTU3LjA3NCw0OC4wMyBDMTU1LjI4OSw0Ni43NzggMTUyLjY5OSw0Ni44MzYgMTQ5LjgxNiw0OC41MDEgQzE0NC40MzMsNTEuNjA5IDE0MC4wNjgsNTkuMTM3IDE0MC4wNjgsNjUuMzE0IEMxNDAuMDY4LDY3LjM2NSAxNDAuNTUyLDY5LjAwNiAxNDEuMzkxLDcwLjE3NCBDMTQzLjE3Niw3MS40MjcgMTQ1Ljc2NSw3MS4zNjkgMTQ4LjY0OCw2OS43MDQiIGlkPSJGaWxsLTM0IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NC4yNzYsNzEuMjc2IEwxNDQuMjc2LDcxLjI3NiBDMTQzLjEzMyw3MS4yNzYgMTQyLjExOCw3MC45NjkgMTQxLjI1Nyw3MC4zNjUgQzE0MS4yMzYsNzAuMzUxIDE0MS4yMTcsNzAuMzMyIDE0MS4yMDIsNzAuMzExIEMxNDAuMzA3LDY5LjA2NyAxMzkuODM1LDY3LjMzOSAxMzkuODM1LDY1LjMxNCBDMTM5LjgzNSw1OS4wNzMgMTQ0LjI2LDUxLjQzOSAxNDkuNyw0OC4yOTggQzE1MS4yNzMsNDcuMzkgMTUyLjc4NCw0Ni45MjkgMTU0LjE4OSw0Ni45MjkgQzE1NS4zMzIsNDYuOTI5IDE1Ni4zNDcsNDcuMjM2IDE1Ny4yMDgsNDcuODM5IEMxNTcuMjI5LDQ3Ljg1NCAxNTcuMjQ4LDQ3Ljg3MyAxNTcuMjYzLDQ3Ljg5NCBDMTU4LjE1Nyw0OS4xMzggMTU4LjYzLDUwLjg2NSAxNTguNjMsNTIuODkxIEMxNTguNjMsNTkuMTMyIDE1NC4yMDUsNjYuNzY2IDE0OC43NjUsNjkuOTA3IEMxNDcuMTkyLDcwLjgxNSAxNDUuNjgxLDcxLjI3NiAxNDQuMjc2LDcxLjI3NiBMMTQ0LjI3Niw3MS4yNzYgWiBNMTQxLjU1OCw3MC4xMDQgQzE0Mi4zMzEsNzAuNjM3IDE0My4yNDUsNzEuMDA1IDE0NC4yNzYsNzEuMDA1IEMxNDUuNTk4LDcxLjAwNSAxNDcuMDMsNzAuNDY3IDE0OC41MzIsNjkuNiBDMTUzLjg0Miw2Ni41MzQgMTU4LjE2Myw1OS4wMzMgMTU4LjE2Myw1Mi45MzkgQzE1OC4xNjMsNTEuMDMxIDE1Ny43MjksNDkuMzg1IDE1Ni45MDcsNDguMjIzIEMxNTYuMTMzLDQ3LjY5MSAxNTUuMjE5LDQ3LjQwOSAxNTQuMTg5LDQ3LjQwOSBDMTUyLjg2Nyw0Ny40MDkgMTUxLjQzNSw0Ny44NDIgMTQ5LjkzMyw0OC43MDkgQzE0NC42MjMsNTEuNzc1IDE0MC4zMDIsNTkuMjczIDE0MC4zMDIsNjUuMzY2IEMxNDAuMzAyLDY3LjI3NiAxNDAuNzM2LDY4Ljk0MiAxNDEuNTU4LDcwLjEwNCBMMTQxLjU1OCw3MC4xMDQgWiIgaWQ9IkZpbGwtMzUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUwLjcyLDY1LjM2MSBMMTUwLjM1Nyw2NS4wNjYgQzE1MS4xNDcsNjQuMDkyIDE1MS44NjksNjMuMDQgMTUyLjUwNSw2MS45MzggQzE1My4zMTMsNjAuNTM5IDE1My45NzgsNTkuMDY3IDE1NC40ODIsNTcuNTYzIEwxNTQuOTI1LDU3LjcxMiBDMTU0LjQxMiw1OS4yNDUgMTUzLjczMyw2MC43NDUgMTUyLjkxLDYyLjE3MiBDMTUyLjI2Miw2My4yOTUgMTUxLjUyNSw2NC4zNjggMTUwLjcyLDY1LjM2MSIgaWQ9IkZpbGwtMzYiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE1LjkxNyw4NC41MTQgTDExNS41NTQsODQuMjIgQzExNi4zNDQsODMuMjQ1IDExNy4wNjYsODIuMTk0IDExNy43MDIsODEuMDkyIEMxMTguNTEsNzkuNjkyIDExOS4xNzUsNzguMjIgMTE5LjY3OCw3Ni43MTcgTDEyMC4xMjEsNzYuODY1IEMxMTkuNjA4LDc4LjM5OCAxMTguOTMsNzkuODk5IDExOC4xMDYsODEuMzI2IEMxMTcuNDU4LDgyLjQ0OCAxMTYuNzIyLDgzLjUyMSAxMTUuOTE3LDg0LjUxNCIgaWQ9IkZpbGwtMzciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE0LDEzMC40NzYgTDExNCwxMzAuMDA4IEwxMTQsNzYuMDUyIEwxMTQsNzUuNTg0IEwxMTQsNzYuMDUyIEwxMTQsMTMwLjAwOCBMMTE0LDEzMC40NzYiIGlkPSJGaWxsLTM4IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYyLjAwMDAwMCwgMC4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTkuODIyLDM3LjQ3NCBDMTkuODM5LDM3LjMzOSAxOS43NDcsMzcuMTk0IDE5LjU1NSwzNy4wODIgQzE5LjIyOCwzNi44OTQgMTguNzI5LDM2Ljg3MiAxOC40NDYsMzcuMDM3IEwxMi40MzQsNDAuNTA4IEMxMi4zMDMsNDAuNTg0IDEyLjI0LDQwLjY4NiAxMi4yNDMsNDAuNzkzIEMxMi4yNDUsNDAuOTI1IDEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQxLjM3MSBMMTIuMjQ1LDQxLjQxNCBMMTIuMjM4LDQxLjU0MiBDOC4xNDgsNDMuODg3IDUuNjQ3LDQ1LjMyMSA1LjY0Nyw0NS4zMjEgQzUuNjQ2LDQ1LjMyMSAzLjU3LDQ2LjM2NyAyLjg2LDUwLjUxMyBDMi44Niw1MC41MTMgMS45NDgsNTcuNDc0IDEuOTYyLDcwLjI1OCBDMS45NzcsODIuODI4IDIuNTY4LDg3LjMyOCAzLjEyOSw5MS42MDkgQzMuMzQ5LDkzLjI5MyA2LjEzLDkzLjczNCA2LjEzLDkzLjczNCBDNi40NjEsOTMuNzc0IDYuODI4LDkzLjcwNyA3LjIxLDkzLjQ4NiBMODIuNDgzLDQ5LjkzNSBDODQuMjkxLDQ4Ljg2NiA4NS4xNSw0Ni4yMTYgODUuNTM5LDQzLjY1MSBDODYuNzUyLDM1LjY2MSA4Ny4yMTQsMTAuNjczIDg1LjI2NCwzLjc3MyBDODUuMDY4LDMuMDggODQuNzU0LDIuNjkgODQuMzk2LDIuNDkxIEw4Mi4zMSwxLjcwMSBDODEuNTgzLDEuNzI5IDgwLjg5NCwyLjE2OCA4MC43NzYsMi4yMzYgQzgwLjYzNiwyLjMxNyA0MS44MDcsMjQuNTg1IDIwLjAzMiwzNy4wNzIgTDE5LjgyMiwzNy40NzQiIGlkPSJGaWxsLTEiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNODIuMzExLDEuNzAxIEw4NC4zOTYsMi40OTEgQzg0Ljc1NCwyLjY5IDg1LjA2OCwzLjA4IDg1LjI2NCwzLjc3MyBDODcuMjEzLDEwLjY3MyA4Ni43NTEsMzUuNjYgODUuNTM5LDQzLjY1MSBDODUuMTQ5LDQ2LjIxNiA4NC4yOSw0OC44NjYgODIuNDgzLDQ5LjkzNSBMNy4yMSw5My40ODYgQzYuODk3LDkzLjY2NyA2LjU5NSw5My43NDQgNi4zMTQsOTMuNzQ0IEw2LjEzMSw5My43MzMgQzYuMTMxLDkzLjczNCAzLjM0OSw5My4yOTMgMy4xMjgsOTEuNjA5IEMyLjU2OCw4Ny4zMjcgMS45NzcsODIuODI4IDEuOTYzLDcwLjI1OCBDMS45NDgsNTcuNDc0IDIuODYsNTAuNTEzIDIuODYsNTAuNTEzIEMzLjU3LDQ2LjM2NyA1LjY0Nyw0NS4zMjEgNS42NDcsNDUuMzIxIEM1LjY0Nyw0NS4zMjEgOC4xNDgsNDMuODg3IDEyLjIzOCw0MS41NDIgTDEyLjI0NSw0MS40MTQgTDEyLjI0NSw0MS4zNzEgQzEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQwLjkyNSAxMi4yNDMsNDAuNzkzIEMxMi4yNCw0MC42ODYgMTIuMzAyLDQwLjU4MyAxMi40MzQsNDAuNTA4IEwxOC40NDYsMzcuMDM2IEMxOC41NzQsMzYuOTYyIDE4Ljc0NiwzNi45MjYgMTguOTI3LDM2LjkyNiBDMTkuMTQ1LDM2LjkyNiAxOS4zNzYsMzYuOTc5IDE5LjU1NCwzNy4wODIgQzE5Ljc0NywzNy4xOTQgMTkuODM5LDM3LjM0IDE5LjgyMiwzNy40NzQgTDIwLjAzMywzNy4wNzIgQzQxLjgwNiwyNC41ODUgODAuNjM2LDIuMzE4IDgwLjc3NywyLjIzNiBDODAuODk0LDIuMTY4IDgxLjU4MywxLjcyOSA4Mi4zMTEsMS43MDEgTTgyLjMxMSwwLjcwNCBMODIuMjcyLDAuNzA1IEM4MS42NTQsMC43MjggODAuOTg5LDAuOTQ5IDgwLjI5OCwxLjM2MSBMODAuMjc3LDEuMzczIEM4MC4xMjksMS40NTggNTkuNzY4LDEzLjEzNSAxOS43NTgsMzYuMDc5IEMxOS41LDM1Ljk4MSAxOS4yMTQsMzUuOTI5IDE4LjkyNywzNS45MjkgQzE4LjU2MiwzNS45MjkgMTguMjIzLDM2LjAxMyAxNy45NDcsMzYuMTczIEwxMS45MzUsMzkuNjQ0IEMxMS40OTMsMzkuODk5IDExLjIzNiw0MC4zMzQgMTEuMjQ2LDQwLjgxIEwxMS4yNDcsNDAuOTYgTDUuMTY3LDQ0LjQ0NyBDNC43OTQsNDQuNjQ2IDIuNjI1LDQ1Ljk3OCAxLjg3Nyw1MC4zNDUgTDEuODcxLDUwLjM4NCBDMS44NjIsNTAuNDU0IDAuOTUxLDU3LjU1NyAwLjk2NSw3MC4yNTkgQzAuOTc5LDgyLjg3OSAxLjU2OCw4Ny4zNzUgMi4xMzcsOTEuNzI0IEwyLjEzOSw5MS43MzkgQzIuNDQ3LDk0LjA5NCA1LjYxNCw5NC42NjIgNS45NzUsOTQuNzE5IEw2LjAwOSw5NC43MjMgQzYuMTEsOTQuNzM2IDYuMjEzLDk0Ljc0MiA2LjMxNCw5NC43NDIgQzYuNzksOTQuNzQyIDcuMjYsOTQuNjEgNy43MSw5NC4zNSBMODIuOTgzLDUwLjc5OCBDODQuNzk0LDQ5LjcyNyA4NS45ODIsNDcuMzc1IDg2LjUyNSw0My44MDEgQzg3LjcxMSwzNS45ODcgODguMjU5LDEwLjcwNSA4Ni4yMjQsMy41MDIgQzg1Ljk3MSwyLjYwOSA4NS41MiwxLjk3NSA4NC44ODEsMS42MiBMODQuNzQ5LDEuNTU4IEw4Mi42NjQsMC43NjkgQzgyLjU1MSwwLjcyNSA4Mi40MzEsMC43MDQgODIuMzExLDAuNzA0IiBpZD0iRmlsbC0yIiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY2LjI2NywxMS41NjUgTDY3Ljc2MiwxMS45OTkgTDExLjQyMyw0NC4zMjUiIGlkPSJGaWxsLTMiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMjAyLDkwLjU0NSBDMTIuMDI5LDkwLjU0NSAxMS44NjIsOTAuNDU1IDExLjc2OSw5MC4yOTUgQzExLjYzMiw5MC4wNTcgMTEuNzEzLDg5Ljc1MiAxMS45NTIsODkuNjE0IEwzMC4zODksNzguOTY5IEMzMC42MjgsNzguODMxIDMwLjkzMyw3OC45MTMgMzEuMDcxLDc5LjE1MiBDMzEuMjA4LDc5LjM5IDMxLjEyNyw3OS42OTYgMzAuODg4LDc5LjgzMyBMMTIuNDUxLDkwLjQ3OCBMMTIuMjAyLDkwLjU0NSIgaWQ9IkZpbGwtNCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43NjQsNDIuNjU0IEwxMy42NTYsNDIuNTkyIEwxMy43MDIsNDIuNDIxIEwxOC44MzcsMzkuNDU3IEwxOS4wMDcsMzkuNTAyIEwxOC45NjIsMzkuNjczIEwxMy44MjcsNDIuNjM3IEwxMy43NjQsNDIuNjU0IiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTguNTIsOTAuMzc1IEw4LjUyLDQ2LjQyMSBMOC41ODMsNDYuMzg1IEw3NS44NCw3LjU1NCBMNzUuODQsNTEuNTA4IEw3NS43NzgsNTEuNTQ0IEw4LjUyLDkwLjM3NSBMOC41Miw5MC4zNzUgWiBNOC43Nyw0Ni41NjQgTDguNzcsODkuOTQ0IEw3NS41OTEsNTEuMzY1IEw3NS41OTEsNy45ODUgTDguNzcsNDYuNTY0IEw4Ljc3LDQ2LjU2NCBaIiBpZD0iRmlsbC02IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljk4Niw4My4xODIgQzI0Ljc1Niw4My4zMzEgMjQuMzc0LDgzLjU2NiAyNC4xMzcsODMuNzA1IEwxMi42MzIsOTAuNDA2IEMxMi4zOTUsOTAuNTQ1IDEyLjQyNiw5MC42NTggMTIuNyw5MC42NTggTDEzLjI2NSw5MC42NTggQzEzLjU0LDkwLjY1OCAxMy45NTgsOTAuNTQ1IDE0LjE5NSw5MC40MDYgTDI1LjcsODMuNzA1IEMyNS45MzcsODMuNTY2IDI2LjEyOCw4My40NTIgMjYuMTI1LDgzLjQ0OSBDMjYuMTIyLDgzLjQ0NyAyNi4xMTksODMuMjIgMjYuMTE5LDgyLjk0NiBDMjYuMTE5LDgyLjY3MiAyNS45MzEsODIuNTY5IDI1LjcwMSw4Mi43MTkgTDI0Ljk4Niw4My4xODIiIGlkPSJGaWxsLTciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjY2LDkwLjc4MiBMMTIuNyw5MC43ODIgQzEyLjUsOTAuNzgyIDEyLjM4NCw5MC43MjYgMTIuMzU0LDkwLjYxNiBDMTIuMzI0LDkwLjUwNiAxMi4zOTcsOTAuMzk5IDEyLjU2OSw5MC4yOTkgTDI0LjA3NCw4My41OTcgQzI0LjMxLDgzLjQ1OSAyNC42ODksODMuMjI2IDI0LjkxOCw4My4wNzggTDI1LjYzMyw4Mi42MTQgQzI1LjcyMyw4Mi41NTUgMjUuODEzLDgyLjUyNSAyNS44OTksODIuNTI1IEMyNi4wNzEsODIuNTI1IDI2LjI0NCw4Mi42NTUgMjYuMjQ0LDgyLjk0NiBDMjYuMjQ0LDgzLjE2IDI2LjI0NSw4My4zMDkgMjYuMjQ3LDgzLjM4MyBMMjYuMjUzLDgzLjM4NyBMMjYuMjQ5LDgzLjQ1NiBDMjYuMjQ2LDgzLjUzMSAyNi4yNDYsODMuNTMxIDI1Ljc2Myw4My44MTIgTDE0LjI1OCw5MC41MTQgQzE0LDkwLjY2NSAxMy41NjQsOTAuNzgyIDEzLjI2Niw5MC43ODIgTDEzLjI2Niw5MC43ODIgWiBNMTIuNjY2LDkwLjUzMiBMMTIuNyw5MC41MzMgTDEzLjI2Niw5MC41MzMgQzEzLjUxOCw5MC41MzMgMTMuOTE1LDkwLjQyNSAxNC4xMzIsOTAuMjk5IEwyNS42MzcsODMuNTk3IEMyNS44MDUsODMuNDk5IDI1LjkzMSw4My40MjQgMjUuOTk4LDgzLjM4MyBDMjUuOTk0LDgzLjI5OSAyNS45OTQsODMuMTY1IDI1Ljk5NCw4Mi45NDYgTDI1Ljg5OSw4Mi43NzUgTDI1Ljc2OCw4Mi44MjQgTDI1LjA1NCw4My4yODcgQzI0LjgyMiw4My40MzcgMjQuNDM4LDgzLjY3MyAyNC4yLDgzLjgxMiBMMTIuNjk1LDkwLjUxNCBMMTIuNjY2LDkwLjUzMiBMMTIuNjY2LDkwLjUzMiBaIiBpZD0iRmlsbC04IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEzLjI2Niw4OS44NzEgTDEyLjcsODkuODcxIEMxMi41LDg5Ljg3MSAxMi4zODQsODkuODE1IDEyLjM1NCw4OS43MDUgQzEyLjMyNCw4OS41OTUgMTIuMzk3LDg5LjQ4OCAxMi41NjksODkuMzg4IEwyNC4wNzQsODIuNjg2IEMyNC4zMzIsODIuNTM1IDI0Ljc2OCw4Mi40MTggMjUuMDY3LDgyLjQxOCBMMjUuNjMyLDgyLjQxOCBDMjUuODMyLDgyLjQxOCAyNS45NDgsODIuNDc0IDI1Ljk3OCw4Mi41ODQgQzI2LjAwOCw4Mi42OTQgMjUuOTM1LDgyLjgwMSAyNS43NjMsODIuOTAxIEwxNC4yNTgsODkuNjAzIEMxNCw4OS43NTQgMTMuNTY0LDg5Ljg3MSAxMy4yNjYsODkuODcxIEwxMy4yNjYsODkuODcxIFogTTEyLjY2Niw4OS42MjEgTDEyLjcsODkuNjIyIEwxMy4yNjYsODkuNjIyIEMxMy41MTgsODkuNjIyIDEzLjkxNSw4OS41MTUgMTQuMTMyLDg5LjM4OCBMMjUuNjM3LDgyLjY4NiBMMjUuNjY3LDgyLjY2OCBMMjUuNjMyLDgyLjY2NyBMMjUuMDY3LDgyLjY2NyBDMjQuODE1LDgyLjY2NyAyNC40MTgsODIuNzc1IDI0LjIsODIuOTAxIEwxMi42OTUsODkuNjAzIEwxMi42NjYsODkuNjIxIEwxMi42NjYsODkuNjIxIFoiIGlkPSJGaWxsLTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzcsOTAuODAxIEwxMi4zNyw4OS41NTQgTDEyLjM3LDkwLjgwMSIgaWQ9IkZpbGwtMTAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNi4xMyw5My45MDEgQzUuMzc5LDkzLjgwOCA0LjgxNiw5My4xNjQgNC42OTEsOTIuNTI1IEMzLjg2LDg4LjI4NyAzLjU0LDgzLjc0MyAzLjUyNiw3MS4xNzMgQzMuNTExLDU4LjM4OSA0LjQyMyw1MS40MjggNC40MjMsNTEuNDI4IEM1LjEzNCw0Ny4yODIgNy4yMSw0Ni4yMzYgNy4yMSw0Ni4yMzYgQzcuMjEsNDYuMjM2IDgxLjY2NywzLjI1IDgyLjA2OSwzLjAxNyBDODIuMjkyLDIuODg4IDg0LjU1NiwxLjQzMyA4NS4yNjQsMy45NCBDODcuMjE0LDEwLjg0IDg2Ljc1MiwzNS44MjcgODUuNTM5LDQzLjgxOCBDODUuMTUsNDYuMzgzIDg0LjI5MSw0OS4wMzMgODIuNDgzLDUwLjEwMSBMNy4yMSw5My42NTMgQzYuODI4LDkzLjg3NCA2LjQ2MSw5My45NDEgNi4xMyw5My45MDEgQzYuMTMsOTMuOTAxIDMuMzQ5LDkzLjQ2IDMuMTI5LDkxLjc3NiBDMi41NjgsODcuNDk1IDEuOTc3LDgyLjk5NSAxLjk2Miw3MC40MjUgQzEuOTQ4LDU3LjY0MSAyLjg2LDUwLjY4IDIuODYsNTAuNjggQzMuNTcsNDYuNTM0IDUuNjQ3LDQ1LjQ4OSA1LjY0Nyw0NS40ODkgQzUuNjQ2LDQ1LjQ4OSA4LjA2NSw0NC4wOTIgMTIuMjQ1LDQxLjY3OSBMMTMuMTE2LDQxLjU2IEwxOS43MTUsMzcuNzMgTDE5Ljc2MSwzNy4yNjkgTDYuMTMsOTMuOTAxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjMxNyw5NC4xNjEgTDYuMTAyLDk0LjE0OCBMNi4xMDEsOTQuMTQ4IEw1Ljg1Nyw5NC4xMDEgQzUuMTM4LDkzLjk0NSAzLjA4NSw5My4zNjUgMi44ODEsOTEuODA5IEMyLjMxMyw4Ny40NjkgMS43MjcsODIuOTk2IDEuNzEzLDcwLjQyNSBDMS42OTksNTcuNzcxIDIuNjA0LDUwLjcxOCAyLjYxMyw1MC42NDggQzMuMzM4LDQ2LjQxNyA1LjQ0NSw0NS4zMSA1LjUzNSw0NS4yNjYgTDEyLjE2Myw0MS40MzkgTDEzLjAzMyw0MS4zMiBMMTkuNDc5LDM3LjU3OCBMMTkuNTEzLDM3LjI0NCBDMTkuNTI2LDM3LjEwNyAxOS42NDcsMzcuMDA4IDE5Ljc4NiwzNy4wMjEgQzE5LjkyMiwzNy4wMzQgMjAuMDIzLDM3LjE1NiAyMC4wMDksMzcuMjkzIEwxOS45NSwzNy44ODIgTDEzLjE5OCw0MS44MDEgTDEyLjMyOCw0MS45MTkgTDUuNzcyLDQ1LjcwNCBDNS43NDEsNDUuNzIgMy43ODIsNDYuNzcyIDMuMTA2LDUwLjcyMiBDMy4wOTksNTAuNzgyIDIuMTk4LDU3LjgwOCAyLjIxMiw3MC40MjQgQzIuMjI2LDgyLjk2MyAyLjgwOSw4Ny40MiAzLjM3Myw5MS43MjkgQzMuNDY0LDkyLjQyIDQuMDYyLDkyLjg4MyA0LjY4Miw5My4xODEgQzQuNTY2LDkyLjk4NCA0LjQ4Niw5Mi43NzYgNC40NDYsOTIuNTcyIEMzLjY2NSw4OC41ODggMy4yOTEsODQuMzcgMy4yNzYsNzEuMTczIEMzLjI2Miw1OC41MiA0LjE2Nyw1MS40NjYgNC4xNzYsNTEuMzk2IEM0LjkwMSw0Ny4xNjUgNy4wMDgsNDYuMDU5IDcuMDk4LDQ2LjAxNCBDNy4wOTQsNDYuMDE1IDgxLjU0MiwzLjAzNCA4MS45NDQsMi44MDIgTDgxLjk3MiwyLjc4NSBDODIuODc2LDIuMjQ3IDgzLjY5MiwyLjA5NyA4NC4zMzIsMi4zNTIgQzg0Ljg4NywyLjU3MyA4NS4yODEsMy4wODUgODUuNTA0LDMuODcyIEM4Ny41MTgsMTEgODYuOTY0LDM2LjA5MSA4NS43ODUsNDMuODU1IEM4NS4yNzgsNDcuMTk2IDg0LjIxLDQ5LjM3IDgyLjYxLDUwLjMxNyBMNy4zMzUsOTMuODY5IEM2Ljk5OSw5NC4wNjMgNi42NTgsOTQuMTYxIDYuMzE3LDk0LjE2MSBMNi4zMTcsOTQuMTYxIFogTTYuMTcsOTMuNjU0IEM2LjQ2Myw5My42OSA2Ljc3NCw5My42MTcgNy4wODUsOTMuNDM3IEw4Mi4zNTgsNDkuODg2IEM4NC4xODEsNDguODA4IDg0Ljk2LDQ1Ljk3MSA4NS4yOTIsNDMuNzggQzg2LjQ2NiwzNi4wNDkgODcuMDIzLDExLjA4NSA4NS4wMjQsNC4wMDggQzg0Ljg0NiwzLjM3NyA4NC41NTEsMi45NzYgODQuMTQ4LDIuODE2IEM4My42NjQsMi42MjMgODIuOTgyLDIuNzY0IDgyLjIyNywzLjIxMyBMODIuMTkzLDMuMjM0IEM4MS43OTEsMy40NjYgNy4zMzUsNDYuNDUyIDcuMzM1LDQ2LjQ1MiBDNy4zMDQsNDYuNDY5IDUuMzQ2LDQ3LjUyMSA0LjY2OSw1MS40NzEgQzQuNjYyLDUxLjUzIDMuNzYxLDU4LjU1NiAzLjc3NSw3MS4xNzMgQzMuNzksODQuMzI4IDQuMTYxLDg4LjUyNCA0LjkzNiw5Mi40NzYgQzUuMDI2LDkyLjkzNyA1LjQxMiw5My40NTkgNS45NzMsOTMuNjE1IEM2LjA4Nyw5My42NCA2LjE1OCw5My42NTIgNi4xNjksOTMuNjU0IEw2LjE3LDkzLjY1NCBMNi4xNyw5My42NTQgWiIgaWQ9IkZpbGwtMTIiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4zMTcsNjguOTgyIEM3LjgwNiw2OC43MDEgOC4yMDIsNjguOTI2IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNi44MjksNzEuMjk0IDYuNDMzLDcxLjA2OSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIiBpZD0iRmlsbC0xMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjkyLDcxLjEzMyBDNi42MzEsNzEuMTMzIDYuNDMzLDcwLjkwNSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIEM3LjQ2LDY4LjkgNy41OTUsNjguODYxIDcuNzE0LDY4Ljg2MSBDOC4wMDMsNjguODYxIDguMjAyLDY5LjA5IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNy4xNzQsNzEuMDk0IDcuMDM5LDcxLjEzMyA2LjkyLDcxLjEzMyBNNy43MTQsNjguNjc0IEM3LjU1Nyw2OC42NzQgNy4zOTIsNjguNzIzIDcuMjI0LDY4LjgyMSBDNi42NzYsNjkuMTM4IDYuMjQ2LDY5Ljg3OSA2LjI0Niw3MC41MDggQzYuMjQ2LDcwLjk5NCA2LjUxNyw3MS4zMiA2LjkyLDcxLjMyIEM3LjA3OCw3MS4zMiA3LjI0Myw3MS4yNzEgNy40MTEsNzEuMTc0IEM3Ljk1OSw3MC44NTcgOC4zODksNzAuMTE3IDguMzg5LDY5LjQ4NyBDOC4zODksNjkuMDAxIDguMTE3LDY4LjY3NCA3LjcxNCw2OC42NzQiIGlkPSJGaWxsLTE0IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuOTIsNzAuOTQ3IEM2LjY0OSw3MC45NDcgNi42MjEsNzAuNjQgNi42MjEsNzAuNTA4IEM2LjYyMSw3MC4wMTcgNi45ODIsNjkuMzkyIDcuNDExLDY5LjE0NSBDNy41MjEsNjkuMDgyIDcuNjI1LDY5LjA0OSA3LjcxNCw2OS4wNDkgQzcuOTg2LDY5LjA0OSA4LjAxNSw2OS4zNTUgOC4wMTUsNjkuNDg3IEM4LjAxNSw2OS45NzggNy42NTIsNzAuNjAzIDcuMjI0LDcwLjg1MSBDNy4xMTUsNzAuOTE0IDcuMDEsNzAuOTQ3IDYuOTIsNzAuOTQ3IE03LjcxNCw2OC44NjEgQzcuNTk1LDY4Ljg2MSA3LjQ2LDY4LjkgNy4zMTcsNjguOTgyIEM2LjgyOSw2OS4yNjUgNi40MzMsNjkuOTQ4IDYuNDMzLDcwLjUwOCBDNi40MzMsNzAuOTA1IDYuNjMxLDcxLjEzMyA2LjkyLDcxLjEzMyBDNy4wMzksNzEuMTMzIDcuMTc0LDcxLjA5NCA3LjMxNyw3MS4wMTIgQzcuODA2LDcwLjczIDguMjAyLDcwLjA0NyA4LjIwMiw2OS40ODcgQzguMjAyLDY5LjA5IDguMDAzLDY4Ljg2MSA3LjcxNCw2OC44NjEiIGlkPSJGaWxsLTE1IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTcuNDQ0LDg1LjM1IEM3LjcwOCw4NS4xOTggNy45MjEsODUuMzE5IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuOTI1IDcuNzA4LDg2LjI5MiA3LjQ0NCw4Ni40NDQgQzcuMTgxLDg2LjU5NyA2Ljk2Nyw4Ni40NzUgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IiBpZD0iRmlsbC0xNiIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjIzLDg2LjUxIEM3LjA3NCw4Ni41MSA2Ljk2Nyw4Ni4zODcgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IEM3LjUyMSw4NS4zMDUgNy41OTQsODUuMjg0IDcuNjU4LDg1LjI4NCBDNy44MTQsODUuMjg0IDcuOTIxLDg1LjQwOCA3LjkyMSw4NS42MjIgQzcuOTIxLDg1LjkyNSA3LjcwOCw4Ni4yOTIgNy40NDQsODYuNDQ0IEM3LjM2Nyw4Ni40ODkgNy4yOTQsODYuNTEgNy4yMyw4Ni41MSBNNy42NTgsODUuMDk4IEM3LjU1OCw4NS4wOTggNy40NTUsODUuMTI3IDcuMzUxLDg1LjE4OCBDNy4wMzEsODUuMzczIDYuNzgxLDg1LjgwNiA2Ljc4MSw4Ni4xNzMgQzYuNzgxLDg2LjQ4MiA2Ljk2Niw4Ni42OTcgNy4yMyw4Ni42OTcgQzcuMzMsODYuNjk3IDcuNDMzLDg2LjY2NiA3LjUzOCw4Ni42MDcgQzcuODU4LDg2LjQyMiA4LjEwOCw4NS45ODkgOC4xMDgsODUuNjIyIEM4LjEwOCw4NS4zMTMgNy45MjMsODUuMDk4IDcuNjU4LDg1LjA5OCIgaWQ9IkZpbGwtMTciIGZpbGw9IiM4MDk3QTIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4yMyw4Ni4zMjIgTDcuMTU0LDg2LjE3MyBDNy4xNTQsODUuOTM4IDcuMzMzLDg1LjYyOSA3LjUzOCw4NS41MTIgTDcuNjU4LDg1LjQ3MSBMNy43MzQsODUuNjIyIEM3LjczNCw4NS44NTYgNy41NTUsODYuMTY0IDcuMzUxLDg2LjI4MiBMNy4yMyw4Ni4zMjIgTTcuNjU4LDg1LjI4NCBDNy41OTQsODUuMjg0IDcuNTIxLDg1LjMwNSA3LjQ0NCw4NS4zNSBDNy4xODEsODUuNTAyIDYuOTY3LDg1Ljg3MSA2Ljk2Nyw4Ni4xNzMgQzYuOTY3LDg2LjM4NyA3LjA3NCw4Ni41MSA3LjIzLDg2LjUxIEM3LjI5NCw4Ni41MSA3LjM2Nyw4Ni40ODkgNy40NDQsODYuNDQ0IEM3LjcwOCw4Ni4yOTIgNy45MjEsODUuOTI1IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuNDA4IDcuODE0LDg1LjI4NCA3LjY1OCw4NS4yODQiIGlkPSJGaWxsLTE4IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTc3LjI3OCw3Ljc2OSBMNzcuMjc4LDUxLjQzNiBMMTAuMjA4LDkwLjE2IEwxMC4yMDgsNDYuNDkzIEw3Ny4yNzgsNy43NjkiIGlkPSJGaWxsLTE5IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA4Myw5MC4zNzUgTDEwLjA4Myw0Ni40MjEgTDEwLjE0Niw0Ni4zODUgTDc3LjQwMyw3LjU1NCBMNzcuNDAzLDUxLjUwOCBMNzcuMzQxLDUxLjU0NCBMMTAuMDgzLDkwLjM3NSBMMTAuMDgzLDkwLjM3NSBaIE0xMC4zMzMsNDYuNTY0IEwxMC4zMzMsODkuOTQ0IEw3Ny4xNTQsNTEuMzY1IEw3Ny4xNTQsNy45ODUgTDEwLjMzMyw0Ni41NjQgTDEwLjMzMyw0Ni41NjQgWiIgaWQ9IkZpbGwtMjAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMjUuNzM3LDg4LjY0NyBMMTE4LjA5OCw5MS45ODEgTDExOC4wOTgsODQgTDEwNi42MzksODguNzEzIEwxMDYuNjM5LDk2Ljk4MiBMOTksMTAwLjMxNSBMMTEyLjM2OSwxMDMuOTYxIEwxMjUuNzM3LDg4LjY0NyIgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTIiIGZpbGw9IiM0NTVBNjQiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+"); - -},module.exports=RotateInstructions},{"./util.js":22}],17:[function(_dereq_,module){function ComplementaryFilter(kFilter){this.kFilter=kFilter,this.currentAccelMeasurement=new SensorSample,this.currentGyroMeasurement=new SensorSample,this.previousGyroMeasurement=new SensorSample,this.filterQ=Util.isIOS()?new MathUtil.Quaternion(-1,0,0,1):new MathUtil.Quaternion(1,0,0,1),this.previousFilterQ=new MathUtil.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new MathUtil.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new MathUtil.Vector3,this.measuredGravity=new MathUtil.Vector3,this.gyroIntegralQ=new MathUtil.Quaternion}var SensorSample=_dereq_("./sensor-sample.js"),MathUtil=_dereq_("../math-util.js"),Util=_dereq_("../util.js");ComplementaryFilter.prototype.addAccelMeasurement=function(vector,timestampS){this.currentAccelMeasurement.set(vector,timestampS)},ComplementaryFilter.prototype.addGyroMeasurement=function(vector,timestampS){this.currentGyroMeasurement.set(vector,timestampS);var deltaT=timestampS-this.previousGyroMeasurement.timestampS;Util.isTimestampDeltaValid(deltaT)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},ComplementaryFilter.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var deltaT=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,gyroDeltaQ=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,deltaT);this.gyroIntegralQ.multiply(gyroDeltaQ),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(gyroDeltaQ);var invFilterQ=new MathUtil.Quaternion;invFilterQ.copy(this.filterQ),invFilterQ.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(invFilterQ),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var deltaQ=new MathUtil.Quaternion;deltaQ.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),deltaQ.inverse(),Util.isDebug()&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",MathUtil.radToDeg*Util.getQuaternionAngle(deltaQ),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var targetQ=new MathUtil.Quaternion;targetQ.copy(this.filterQ),targetQ.multiply(deltaQ),this.filterQ.slerp(targetQ,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},ComplementaryFilter.prototype.getOrientation=function(){return this.filterQ},ComplementaryFilter.prototype.accelToQuaternion_=function(accel){var normAccel=new MathUtil.Vector3;normAccel.copy(accel),normAccel.normalize();var quat=new MathUtil.Quaternion;return quat.setFromUnitVectors(new MathUtil.Vector3(0,0,-1),normAccel),quat.inverse(),quat},ComplementaryFilter.prototype.gyroToQuaternionDelta_=function(gyro,dt){var quat=new MathUtil.Quaternion,axis=new MathUtil.Vector3;return axis.copy(gyro),axis.normalize(),quat.setFromAxisAngle(axis,gyro.length()*dt),quat},module.exports=ComplementaryFilter},{"../math-util.js":14,"../util.js":22,"./sensor-sample.js":20}],18:[function(_dereq_,module){function FusionPoseSensor(){this.deviceId="webvr-polyfill:fused",this.deviceName="VR Position Device (webvr-polyfill:fused)",this.accelerometer=new MathUtil.Vector3,this.gyroscope=new MathUtil.Vector3,this.start(),this.filter=new ComplementaryFilter(WebVRConfig.K_FILTER),this.posePredictor=new PosePredictor(WebVRConfig.PREDICTION_TIME_S),this.touchPanner=new TouchPanner,this.filterToWorldQ=new MathUtil.Quaternion,Util.isIOS()?this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new MathUtil.Quaternion,this.worldToScreenQ=new MathUtil.Quaternion,this.originalPoseAdjustQ=new MathUtil.Quaternion,this.originalPoseAdjustQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),Util.isLandscapeMode()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new MathUtil.Quaternion,this.isFirefoxAndroid=Util.isFirefoxAndroid(),this.isIOS=Util.isIOS(),this.orientationOut_=new Float32Array(4)}var ComplementaryFilter=_dereq_("./complementary-filter.js"),PosePredictor=_dereq_("./pose-predictor.js"),TouchPanner=_dereq_("../touch-panner.js"),MathUtil=_dereq_("../math-util.js"),Util=_dereq_("../util.js");FusionPoseSensor.prototype.getPosition=function(){return null},FusionPoseSensor.prototype.getOrientation=function(){var orientation=this.filter.getOrientation();this.predictedQ=this.posePredictor.getPrediction(orientation,this.gyroscope,this.previousTimestampS);var out=new MathUtil.Quaternion;return out.copy(this.filterToWorldQ),out.multiply(this.resetQ),WebVRConfig.TOUCH_PANNER_DISABLED||out.multiply(this.touchPanner.getOrientation()),out.multiply(this.predictedQ),out.multiply(this.worldToScreenQ),WebVRConfig.YAW_ONLY&&(out.x=0,out.z=0,out.normalize()),this.orientationOut_[0]=out.x,this.orientationOut_[1]=out.y,this.orientationOut_[2]=out.z,this.orientationOut_[3]=out.w,this.orientationOut_},FusionPoseSensor.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),Util.isLandscapeMode()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ),WebVRConfig.TOUCH_PANNER_DISABLED||this.touchPanner.resetSensor()},FusionPoseSensor.prototype.onDeviceMotion_=function(deviceMotion){this.updateDeviceMotion_(deviceMotion)},FusionPoseSensor.prototype.updateDeviceMotion_=function(deviceMotion){var accGravity=deviceMotion.accelerationIncludingGravity,rotRate=deviceMotion.rotationRate,timestampS=deviceMotion.timeStamp/1e3;this.isFirefoxAndroid&&(timestampS/=1e3);var deltaS=timestampS-this.previousTimestampS;return deltaS<=Util.MIN_TIMESTEP||deltaS>Util.MAX_TIMESTEP?(console.warn("Invalid timestamps detected. Time step between successive gyroscope sensor samples is very small or not monotonic"),void(this.previousTimestampS=timestampS)):(this.accelerometer.set(-accGravity.x,-accGravity.y,-accGravity.z),this.gyroscope.set(rotRate.alpha,rotRate.beta,rotRate.gamma),(this.isIOS||this.isFirefoxAndroid)&&this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addAccelMeasurement(this.accelerometer,timestampS),this.filter.addGyroMeasurement(this.gyroscope,timestampS),void(this.previousTimestampS=timestampS))},FusionPoseSensor.prototype.onOrientationChange_=function(){this.setScreenTransform_()},FusionPoseSensor.prototype.onMessage_=function(event){var message=event.data;if(message&&message.type){var type=message.type.toLowerCase();"devicemotion"===type&&this.updateDeviceMotion_(message.deviceMotionEvent)}},FusionPoseSensor.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),Math.PI/2);break;case 180:}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},FusionPoseSensor.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),Util.isIOS()&&Util.isInsideCrossDomainIFrame()&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},FusionPoseSensor.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)},module.exports=FusionPoseSensor},{"../math-util.js":14,"../touch-panner.js":21,"../util.js":22,"./complementary-filter.js":17,"./pose-predictor.js":19}],19:[function(_dereq_,module){function PosePredictor(predictionTimeS){this.predictionTimeS=predictionTimeS,this.previousQ=new MathUtil.Quaternion,this.previousTimestampS=null,this.deltaQ=new MathUtil.Quaternion,this.outQ=new MathUtil.Quaternion}var MathUtil=_dereq_("../math-util"),Util=_dereq_("../util");PosePredictor.prototype.getPrediction=function(currentQ,gyro,timestampS){if(!this.previousTimestampS)return this.previousQ.copy(currentQ),this.previousTimestampS=timestampS,currentQ;var axis=new MathUtil.Vector3;axis.copy(gyro),axis.normalize();var angularSpeed=gyro.length();if(angularSpeed<20*MathUtil.degToRad)return Util.isDebug()&&console.log("Moving slowly, at %s deg/s: no prediction",(MathUtil.radToDeg*angularSpeed).toFixed(1)),this.outQ.copy(currentQ),this.previousQ.copy(currentQ),this.outQ;var predictAngle=(timestampS-this.previousTimestampS,angularSpeed*this.predictionTimeS);return this.deltaQ.setFromAxisAngle(axis,predictAngle),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(currentQ),this.previousTimestampS=timestampS,this.outQ},module.exports=PosePredictor},{"../math-util":14,"../util":22}],20:[function(_dereq_,module){function SensorSample(sample,timestampS){this.set(sample,timestampS)}SensorSample.prototype.set=function(sample,timestampS){this.sample=sample,this.timestampS=timestampS},SensorSample.prototype.copy=function(sensorSample){this.set(sensorSample.sample,sensorSample.timestampS)},module.exports=SensorSample},{}],21:[function(_dereq_,module){function TouchPanner(){window.addEventListener("touchstart",this.onTouchStart_.bind(this)),window.addEventListener("touchmove",this.onTouchMove_.bind(this)),window.addEventListener("touchend",this.onTouchEnd_.bind(this)),this.isTouching=!1,this.rotateStart=new MathUtil.Vector2,this.rotateEnd=new MathUtil.Vector2,this.rotateDelta=new MathUtil.Vector2,this.theta=0,this.orientation=new MathUtil.Quaternion}var MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js"),ROTATE_SPEED=.5;TouchPanner.prototype.getOrientation=function(){return this.orientation.setFromEulerXYZ(0,0,this.theta),this.orientation},TouchPanner.prototype.resetSensor=function(){this.theta=0},TouchPanner.prototype.onTouchStart_=function(e){1==e.touches.length&&(this.rotateStart.set(e.touches[0].pageX,e.touches[0].pageY),this.isTouching=!0)},TouchPanner.prototype.onTouchMove_=function(e){if(this.isTouching){this.rotateEnd.set(e.touches[0].pageX,e.touches[0].pageY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd),Util.isIOS()&&(this.rotateDelta.x*=-1);var element=document.body;this.theta+=2*Math.PI*this.rotateDelta.x/element.clientWidth*ROTATE_SPEED}},TouchPanner.prototype.onTouchEnd_=function(){this.isTouching=!1},module.exports=TouchPanner},{"./math-util.js":14,"./util.js":22}],22:[function(_dereq_,module){var objectAssign=_dereq_("object-assign"),Util=window.Util||{};Util.MIN_TIMESTEP=.001,Util.MAX_TIMESTEP=1,Util.base64=function(mimeType,base64){return"data:"+mimeType+";base64,"+base64},Util.clamp=function(value,min,max){return Math.min(Math.max(min,value),max)},Util.lerp=function(a,b,t){return a+(b-a)*t},Util.isIOS=function(){var isIOS=/iPad|iPhone|iPod/.test(navigator.platform);return function(){return isIOS}}(),Util.isSafari=function(){var isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return function(){return isSafari}}(),Util.isFirefoxAndroid=function(){var isFirefoxAndroid=-1!==navigator.userAgent.indexOf("Firefox")&&-1!==navigator.userAgent.indexOf("Android");return function(){return isFirefoxAndroid}}(),Util.isLandscapeMode=function(){return 90==window.orientation||-90==window.orientation},Util.isTimestampDeltaValid=function(timestampDeltaS){return isNaN(timestampDeltaS)?!1:timestampDeltaS<=Util.MIN_TIMESTEP?!1:timestampDeltaS>Util.MAX_TIMESTEP?!1:!0},Util.getScreenWidth=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio},Util.getScreenHeight=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio},Util.requestFullscreen=function(element){if(element.requestFullscreen)element.requestFullscreen();else if(element.webkitRequestFullscreen)element.webkitRequestFullscreen();else if(element.mozRequestFullScreen)element.mozRequestFullScreen();else{if(!element.msRequestFullscreen)return!1;element.msRequestFullscreen()}return!0},Util.exitFullscreen=function(){if(document.exitFullscreen)document.exitFullscreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else{if(!document.msExitFullscreen)return!1;document.msExitFullscreen()}return!0},Util.getFullscreenElement=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},Util.linkProgram=function(gl,vertexSource,fragmentSource,attribLocationMap){var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,vertexSource),gl.compileShader(vertexShader);var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,fragmentSource),gl.compileShader(fragmentShader);var program=gl.createProgram();gl.attachShader(program,vertexShader),gl.attachShader(program,fragmentShader);for(var attribName in attribLocationMap)gl.bindAttribLocation(program,attribLocationMap[attribName],attribName);return gl.linkProgram(program),gl.deleteShader(vertexShader),gl.deleteShader(fragmentShader),program},Util.getProgramUniforms=function(gl,program){for(var uniforms={},uniformCount=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS),uniformName="",i=0;uniformCount>i;i++){var uniformInfo=gl.getActiveUniform(program,i);uniformName=uniformInfo.name.replace("[0]",""),uniforms[uniformName]=gl.getUniformLocation(program,uniformName)}return uniforms},Util.orthoMatrix=function(out,left,right,bottom,top,near,far){var lr=1/(left-right),bt=1/(bottom-top),nf=1/(near-far);return out[0]=-2*lr,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=-2*bt,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=2*nf,out[11]=0,out[12]=(left+right)*lr,out[13]=(top+bottom)*bt,out[14]=(far+near)*nf,out[15]=1,out},Util.copyArray=function(source,dest){for(var i=0,n=source.length;n>i;i++)dest[i]=source[i]},Util.isMobile=function(){var check=!1;return function(a){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))&&(check=!0)}(navigator.userAgent||navigator.vendor||window.opera),check},Util.extend=objectAssign,Util.safariCssSizeWorkaround=function(canvas){if(Util.isIOS()){var width=canvas.style.width,height=canvas.style.height;canvas.style.width=parseInt(width)+1+"px",canvas.style.height=parseInt(height)+"px",setTimeout(function(){canvas.style.width=width,canvas.style.height=height},100)}window.Util=Util,window.canvas=canvas},Util.isDebug=function(){return Util.getQueryParameter("debug")},Util.getQueryParameter=function(name){var name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"),regex=new RegExp("[\\?&]"+name+"=([^&#]*)"),results=regex.exec(location.search);return null===results?"":decodeURIComponent(results[1].replace(/\+/g," "))},Util.frameDataFromPose=function(){function mat4_perspectiveFromFieldOfView(out,fov,near,far){var upTan=Math.tan(fov?fov.upDegrees*piOver180:rad45),downTan=Math.tan(fov?fov.downDegrees*piOver180:rad45),leftTan=Math.tan(fov?fov.leftDegrees*piOver180:rad45),rightTan=Math.tan(fov?fov.rightDegrees*piOver180:rad45),xScale=2/(leftTan+rightTan),yScale=2/(upTan+downTan);return out[0]=xScale,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=yScale,out[6]=0,out[7]=0,out[8]=-((leftTan-rightTan)*xScale*.5),out[9]=(upTan-downTan)*yScale*.5,out[10]=far/(near-far),out[11]=-1,out[12]=0,out[13]=0,out[14]=far*near/(near-far),out[15]=0,out}function mat4_fromRotationTranslation(out,q,v){var x=q[0],y=q[1],z=q[2],w=q[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;return out[0]=1-(yy+zz),out[1]=xy+wz,out[2]=xz-wy,out[3]=0,out[4]=xy-wz,out[5]=1-(xx+zz),out[6]=yz+wx,out[7]=0,out[8]=xz+wy,out[9]=yz-wx,out[10]=1-(xx+yy),out[11]=0,out[12]=v[0],out[13]=v[1],out[14]=v[2],out[15]=1,out}function mat4_translate(out,a,v){var a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,x=v[0],y=v[1],z=v[2];return a===out?(out[12]=a[0]*x+a[4]*y+a[8]*z+a[12],out[13]=a[1]*x+a[5]*y+a[9]*z+a[13],out[14]=a[2]*x+a[6]*y+a[10]*z+a[14],out[15]=a[3]*x+a[7]*y+a[11]*z+a[15]):(a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],out[0]=a00,out[1]=a01,out[2]=a02,out[3]=a03,out[4]=a10,out[5]=a11,out[6]=a12,out[7]=a13,out[8]=a20,out[9]=a21,out[10]=a22,out[11]=a23,out[12]=a00*x+a10*y+a20*z+a[12],out[13]=a01*x+a11*y+a21*z+a[13],out[14]=a02*x+a12*y+a22*z+a[14],out[15]=a03*x+a13*y+a23*z+a[15]),out}function mat4_invert(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;return det?(det=1/det,out[0]=(a11*b11-a12*b10+a13*b09)*det,out[1]=(a02*b10-a01*b11-a03*b09)*det,out[2]=(a31*b05-a32*b04+a33*b03)*det,out[3]=(a22*b04-a21*b05-a23*b03)*det,out[4]=(a12*b08-a10*b11-a13*b07)*det,out[5]=(a00*b11-a02*b08+a03*b07)*det,out[6]=(a32*b02-a30*b05-a33*b01)*det,out[7]=(a20*b05-a22*b02+a23*b01)*det,out[8]=(a10*b10-a11*b08+a13*b06)*det,out[9]=(a01*b08-a00*b10-a03*b06)*det,out[10]=(a30*b04-a31*b02+a33*b00)*det,out[11]=(a21*b02-a20*b04-a23*b00)*det,out[12]=(a11*b07-a10*b09-a12*b06)*det,out[13]=(a00*b09-a01*b07+a02*b06)*det,out[14]=(a31*b01-a30*b03-a32*b00)*det,out[15]=(a20*b03-a21*b01+a22*b00)*det,out):null}function updateEyeMatrices(projection,view,pose,parameters,vrDisplay){mat4_perspectiveFromFieldOfView(projection,parameters?parameters.fieldOfView:null,vrDisplay.depthNear,vrDisplay.depthFar);var orientation=pose.orientation||defaultOrientation,position=pose.position||defaultPosition;mat4_fromRotationTranslation(view,orientation,position),parameters&&mat4_translate(view,view,parameters.offset),mat4_invert(view,view)}var piOver180=Math.PI/180,rad45=.25*Math.PI,defaultOrientation=new Float32Array([0,0,0,1]),defaultPosition=new Float32Array([0,0,0]);return function(frameData,pose,vrDisplay){return frameData&&pose?(frameData.pose=pose,frameData.timestamp=pose.timestamp,updateEyeMatrices(frameData.leftProjectionMatrix,frameData.leftViewMatrix,pose,vrDisplay.getEyeParameters("left"),vrDisplay),updateEyeMatrices(frameData.rightProjectionMatrix,frameData.rightViewMatrix,pose,vrDisplay.getEyeParameters("right"),vrDisplay),!0):!1}}(),Util.isInsideCrossDomainIFrame=function(){var isFramed=window.self!==window.top,refDomain=Util.getDomainFromUrl(document.referrer),thisDomain=Util.getDomainFromUrl(window.location.href);return isFramed&&refDomain!==thisDomain},Util.getDomainFromUrl=function(url){var domain;return domain=url.indexOf("://")>-1?url.split("/")[2]:url.split("/")[0],domain=domain.split(":")[0]},module.exports=Util},{"object-assign":2}],23:[function(_dereq_,module){function ViewerSelector(){try{this.selectedKey=localStorage.getItem(VIEWER_KEY)||DEFAULT_VIEWER}catch(error){console.error("Failed to load viewer profile: %s",error)}this.dialog=this.createDialog_(DeviceInfo.Viewers),this.root=null}var DeviceInfo=_dereq_("./device-info.js"),EventEmitter3=_dereq_("eventemitter3"),DEFAULT_VIEWER=(_dereq_("./util.js"),"CardboardV1"),VIEWER_KEY="WEBVR_CARDBOARD_VIEWER",CLASS_NAME="webvr-polyfill-viewer-selector";ViewerSelector.prototype=new EventEmitter3,ViewerSelector.prototype.show=function(root){this.root=root,root.appendChild(this.dialog);var selected=this.dialog.querySelector("#"+this.selectedKey);selected.checked=!0,this.dialog.style.display="block"},ViewerSelector.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},ViewerSelector.prototype.getCurrentViewer=function(){return DeviceInfo.Viewers[this.selectedKey]},ViewerSelector.prototype.getSelectedKey_=function(){var input=this.dialog.querySelector("input[name=field]:checked");return input?input.id:null},ViewerSelector.prototype.onSave_=function(){if(this.selectedKey=this.getSelectedKey_(),!this.selectedKey||!DeviceInfo.Viewers[this.selectedKey])return void console.error("ViewerSelector.onSave_: this should never happen!");this.emit("change",DeviceInfo.Viewers[this.selectedKey]);try{localStorage.setItem(VIEWER_KEY,this.selectedKey)}catch(error){console.error("Failed to save viewer profile: %s",error)}this.hide()},ViewerSelector.prototype.createDialog_=function(options){var container=document.createElement("div");container.classList.add(CLASS_NAME),container.style.display="none";var overlay=document.createElement("div"),s=overlay.style;s.position="fixed",s.left=0,s.top=0,s.width="100%",s.height="100%",s.background="rgba(0, 0, 0, 0.3)",overlay.addEventListener("click",this.hide.bind(this));var width=280,dialog=document.createElement("div"),s=dialog.style;s.boxSizing="border-box",s.position="fixed",s.top="24px",s.left="50%",s.marginLeft=-width/2+"px",s.width=width+"px",s.padding="24px",s.overflow="hidden",s.background="#fafafa",s.fontFamily="'Roboto', sans-serif",s.boxShadow="0px 5px 20px #666",dialog.appendChild(this.createH1_("Select your viewer"));for(var id in options)dialog.appendChild(this.createChoice_(id,options[id].label));return dialog.appendChild(this.createButton_("Save",this.onSave_.bind(this))),container.appendChild(overlay),container.appendChild(dialog),container},ViewerSelector.prototype.createH1_=function(name){var h1=document.createElement("h1"),s=h1.style;return s.color="black",s.fontSize="20px",s.fontWeight="bold",s.marginTop=0,s.marginBottom="24px",h1.innerHTML=name,h1},ViewerSelector.prototype.createChoice_=function(id,name){var div=document.createElement("div");div.style.marginTop="8px",div.style.color="black";var input=document.createElement("input");input.style.fontSize="30px",input.setAttribute("id",id),input.setAttribute("type","radio"),input.setAttribute("value",id),input.setAttribute("name","field");var label=document.createElement("label");return label.style.marginLeft="4px",label.setAttribute("for",id),label.innerHTML=name,div.appendChild(input),div.appendChild(label),div},ViewerSelector.prototype.createButton_=function(label,onclick){var button=document.createElement("button");button.innerHTML=label;var s=button.style;return s["float"]="right",s.textTransform="uppercase",s.color="#1094f7",s.fontSize="14px",s.letterSpacing=0,s.border=0,s.background="none",s.marginTop="16px",button.addEventListener("click",onclick),button},module.exports=ViewerSelector},{"./device-info.js":8,"./util.js":22,eventemitter3:1}],24:[function(_dereq_,module){function AndroidWakeLock(){var video=document.createElement("video");video.addEventListener("ended",function(){video.play()}),this.request=function(){video.paused&&(video.src=Util.base64("video/mp4","AAAAGGZ0eXBpc29tAAAAAG1wNDFhdmMxAAAIA21vb3YAAABsbXZoZAAAAADSa9v60mvb+gABX5AAlw/gAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAdkdHJhawAAAFx0a2hkAAAAAdJr2/rSa9v6AAAAAQAAAAAAlw/gAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAQAAAAHAAAAAAAJGVkdHMAAAAcZWxzdAAAAAAAAAABAJcP4AAAAAAAAQAAAAAG3G1kaWEAAAAgbWRoZAAAAADSa9v60mvb+gAPQkAGjneAFccAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAABodtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAZHc3RibAAAAJdzdHNkAAAAAAAAAAEAAACHYXZjMQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAMABwASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAADFhdmNDAWQAC//hABlnZAALrNlfllw4QAAAAwBAAAADAKPFCmWAAQAFaOvssiwAAAAYc3R0cwAAAAAAAAABAAAAbgAPQkAAAAAUc3RzcwAAAAAAAAABAAAAAQAAA4BjdHRzAAAAAAAAAG4AAAABAD0JAAAAAAEAehIAAAAAAQA9CQAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEATEtAAAAAAQAehIAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEATEtAAAAAAQAehIAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEATEtAAAAAAQAehIAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEATEtAAAAAAQAehIAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEATEtAAAAAAQAehIAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEATEtAAAAAAQAehIAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEATEtAAAAAAQAehIAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEATEtAAAAAAQAehIAAAAABAAAAAAAAAAEAD0JAAAAAAQBMS0AAAAABAB6EgAAAAAEAAAAAAAAAAQAPQkAAAAABAExLQAAAAAEAHoSAAAAAAQAAAAAAAAABAA9CQAAAAAEALcbAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAABuAAAAAQAAAcxzdHN6AAAAAAAAAAAAAABuAAADCQAAABgAAAAOAAAADgAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABIAAAAOAAAADAAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABIAAAAOAAAADAAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABIAAAAOAAAADAAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABIAAAAOAAAADAAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABIAAAAOAAAADAAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABIAAAAOAAAADAAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABIAAAAOAAAADAAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABIAAAAOAAAADAAAAAwAAAASAAAADgAAAAwAAAAMAAAAEgAAAA4AAAAMAAAADAAAABMAAAAUc3RjbwAAAAAAAAABAAAIKwAAACt1ZHRhAAAAI6llbmMAFwAAdmxjIDIuMi4xIHN0cmVhbSBvdXRwdXQAAAAId2lkZQAACRRtZGF0AAACrgX//6vcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQyIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVmPTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9MTIgbG9va2FoZWFkX3RocmVhZHM9MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTEgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD00MCByYz1hYnIgbWJ0cmVlPTEgYml0cmF0ZT0xMDAgcmF0ZXRvbD0xLjAgcWNvbXA9MC42MCBxcG1pbj0xMCBxcG1heD01MSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAU2WIhAAQ/8ltlOe+cTZuGkKg+aRtuivcDZ0pBsfsEi9p/i1yU9DxS2lq4dXTinViF1URBKXgnzKBd/Uh1bkhHtMrwrRcOJslD01UB+fyaL6ef+DBAAAAFEGaJGxBD5B+v+a+4QqF3MgBXz9MAAAACkGeQniH/+94r6EAAAAKAZ5hdEN/8QytwAAAAAgBnmNqQ3/EgQAAAA5BmmhJqEFomUwIIf/+4QAAAApBnoZFESw//76BAAAACAGepXRDf8SBAAAACAGep2pDf8SAAAAADkGarEmoQWyZTAgh//7gAAAACkGeykUVLD//voEAAAAIAZ7pdEN/xIAAAAAIAZ7rakN/xIAAAAAOQZrwSahBbJlMCCH//uEAAAAKQZ8ORRUsP/++gQAAAAgBny10Q3/EgQAAAAgBny9qQ3/EgAAAAA5BmzRJqEFsmUwIIf/+4AAAAApBn1JFFSw//76BAAAACAGfcXRDf8SAAAAACAGfc2pDf8SAAAAADkGbeEmoQWyZTAgh//7hAAAACkGflkUVLD//voAAAAAIAZ+1dEN/xIEAAAAIAZ+3akN/xIEAAAAOQZu8SahBbJlMCCH//uAAAAAKQZ/aRRUsP/++gQAAAAgBn/l0Q3/EgAAAAAgBn/tqQ3/EgQAAAA5Bm+BJqEFsmUwIIf/+4QAAAApBnh5FFSw//76AAAAACAGePXRDf8SAAAAACAGeP2pDf8SBAAAADkGaJEmoQWyZTAgh//7gAAAACkGeQkUVLD//voEAAAAIAZ5hdEN/xIAAAAAIAZ5jakN/xIEAAAAOQZpoSahBbJlMCCH//uEAAAAKQZ6GRRUsP/++gQAAAAgBnqV0Q3/EgQAAAAgBnqdqQ3/EgAAAAA5BmqxJqEFsmUwIIf/+4AAAAApBnspFFSw//76BAAAACAGe6XRDf8SAAAAACAGe62pDf8SAAAAADkGa8EmoQWyZTAgh//7hAAAACkGfDkUVLD//voEAAAAIAZ8tdEN/xIEAAAAIAZ8vakN/xIAAAAAOQZs0SahBbJlMCCH//uAAAAAKQZ9SRRUsP/++gQAAAAgBn3F0Q3/EgAAAAAgBn3NqQ3/EgAAAAA5Bm3hJqEFsmUwIIf/+4QAAAApBn5ZFFSw//76AAAAACAGftXRDf8SBAAAACAGft2pDf8SBAAAADkGbvEmoQWyZTAgh//7gAAAACkGf2kUVLD//voEAAAAIAZ/5dEN/xIAAAAAIAZ/7akN/xIEAAAAOQZvgSahBbJlMCCH//uEAAAAKQZ4eRRUsP/++gAAAAAgBnj10Q3/EgAAAAAgBnj9qQ3/EgQAAAA5BmiRJqEFsmUwIIf/+4AAAAApBnkJFFSw//76BAAAACAGeYXRDf8SAAAAACAGeY2pDf8SBAAAADkGaaEmoQWyZTAgh//7hAAAACkGehkUVLD//voEAAAAIAZ6ldEN/xIEAAAAIAZ6nakN/xIAAAAAOQZqsSahBbJlMCCH//uAAAAAKQZ7KRRUsP/++gQAAAAgBnul0Q3/EgAAAAAgBnutqQ3/EgAAAAA5BmvBJqEFsmUwIIf/+4QAAAApBnw5FFSw//76BAAAACAGfLXRDf8SBAAAACAGfL2pDf8SAAAAADkGbNEmoQWyZTAgh//7gAAAACkGfUkUVLD//voEAAAAIAZ9xdEN/xIAAAAAIAZ9zakN/xIAAAAAOQZt4SahBbJlMCCH//uEAAAAKQZ+WRRUsP/++gAAAAAgBn7V0Q3/EgQAAAAgBn7dqQ3/EgQAAAA5Bm7xJqEFsmUwIIf/+4AAAAApBn9pFFSw//76BAAAACAGf+XRDf8SAAAAACAGf+2pDf8SBAAAADkGb4EmoQWyZTAgh//7hAAAACkGeHkUVLD//voAAAAAIAZ49dEN/xIAAAAAIAZ4/akN/xIEAAAAOQZokSahBbJlMCCH//uAAAAAKQZ5CRRUsP/++gQAAAAgBnmF0Q3/EgAAAAAgBnmNqQ3/EgQAAAA5BmmhJqEFsmUwIIf/+4QAAAApBnoZFFSw//76BAAAACAGepXRDf8SBAAAACAGep2pDf8SAAAAADkGarEmoQWyZTAgh//7gAAAACkGeykUVLD//voEAAAAIAZ7pdEN/xIAAAAAIAZ7rakN/xIAAAAAPQZruSahBbJlMFEw3//7B"),video.play())},this.release=function(){video.pause(),video.src=""}}function iOSWakeLock(){var timer=null;this.request=function(){timer||(timer=setInterval(function(){window.location=window.location,setTimeout(window.stop,0)},3e4))},this.release=function(){timer&&(clearInterval(timer),timer=null)}}function getWakeLock(){var userAgent=navigator.userAgent||navigator.vendor||window.opera;return userAgent.match(/iPhone/i)||userAgent.match(/iPod/i)?iOSWakeLock:AndroidWakeLock}var Util=_dereq_("./util.js");module.exports=getWakeLock()},{"./util.js":22}],25:[function(_dereq_,module){function WebVRPolyfill(){this.displays=[],this.devices=[],this.devicesPopulated=!1,this.nativeWebVRAvailable=this.isWebVRAvailable(), -this.nativeLegacyWebVRAvailable=this.isDeprecatedWebVRAvailable(),this.nativeGetVRDisplaysFunc=this.nativeWebVRAvailable?navigator.getVRDisplays:null,this.nativeLegacyWebVRAvailable||(this.enablePolyfill(),WebVRConfig.ENABLE_DEPRECATED_API&&this.enableDeprecatedPolyfill()),InstallWebVRSpecShim()}function InstallWebVRSpecShim(){"VRDisplay"in window&&!("VRFrameData"in window)&&(window.VRFrameData=VRFrameData,"depthNear"in window.VRDisplay.prototype||(window.VRDisplay.prototype.depthNear=.01),"depthFar"in window.VRDisplay.prototype||(window.VRDisplay.prototype.depthFar=1e4),window.VRDisplay.prototype.getFrameData=function(frameData){return Util.frameDataFromPose(frameData,this.getPose(),this)})}var Util=_dereq_("./util.js"),CardboardVRDisplay=_dereq_("./cardboard-vr-display.js"),MouseKeyboardVRDisplay=_dereq_("./mouse-keyboard-vr-display.js"),VRDisplay=_dereq_("./base.js").VRDisplay,VRFrameData=_dereq_("./base.js").VRFrameData,HMDVRDevice=_dereq_("./base.js").HMDVRDevice,PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice,VRDisplayHMDDevice=_dereq_("./display-wrappers.js").VRDisplayHMDDevice,VRDisplayPositionSensorDevice=_dereq_("./display-wrappers.js").VRDisplayPositionSensorDevice;WebVRPolyfill.prototype.isWebVRAvailable=function(){return"getVRDisplays"in navigator},WebVRPolyfill.prototype.isDeprecatedWebVRAvailable=function(){return"getVRDevices"in navigator||"mozGetVRDevices"in navigator},WebVRPolyfill.prototype.populateDevices=function(){if(!this.devicesPopulated){var vrDisplay=null;this.isCardboardCompatible()&&(vrDisplay=new CardboardVRDisplay,this.displays.push(vrDisplay),WebVRConfig.ENABLE_DEPRECATED_API&&(this.devices.push(new VRDisplayHMDDevice(vrDisplay)),this.devices.push(new VRDisplayPositionSensorDevice(vrDisplay)))),this.isMobile()||WebVRConfig.MOUSE_KEYBOARD_CONTROLS_DISABLED||(vrDisplay=new MouseKeyboardVRDisplay,this.displays.push(vrDisplay),WebVRConfig.ENABLE_DEPRECATED_API&&(this.devices.push(new VRDisplayHMDDevice(vrDisplay)),this.devices.push(new VRDisplayPositionSensorDevice(vrDisplay)))),this.devicesPopulated=!0}},WebVRPolyfill.prototype.enablePolyfill=function(){if(navigator.getVRDisplays=this.getVRDisplays.bind(this),this.nativeWebVRAvailable&&window.VRFrameData){var nativeFrameData=new window.VRFrameData,nativeGetFrameData=window.VRDisplay.prototype.getFrameData;window.VRFrameData=VRFrameData,window.VRDisplay.prototype.getFrameData=function(frameData){nativeGetFrameData.call(this,nativeFrameData),frameData.pose=nativeFrameData.pose,Util.copyArray(nativeFrameData.leftProjectionMatrix,frameData.leftProjectionMatrix),Util.copyArray(nativeFrameData.rightProjectionMatrix,frameData.rightProjectionMatrix),Util.copyArray(nativeFrameData.leftViewMatrix,frameData.leftViewMatrix),Util.copyArray(nativeFrameData.rightViewMatrix,frameData.rightViewMatrix)}}window.VRDisplay=VRDisplay;var self=this;Object.defineProperty(navigator,"vrEnabled",{get:function(){return self.isCardboardCompatible()&&(self.isFullScreenAvailable()||Util.isIOS())}}),!1 in window&&(window.VRFrameData=VRFrameData)},WebVRPolyfill.prototype.enableDeprecatedPolyfill=function(){navigator.getVRDevices=this.getVRDevices.bind(this),window.HMDVRDevice=HMDVRDevice,window.PositionSensorVRDevice=PositionSensorVRDevice},WebVRPolyfill.prototype.getVRDisplays=function(){this.populateDevices();var polyfillDisplays=this.displays;return this.nativeWebVRAvailable?this.nativeGetVRDisplaysFunc.call(navigator).then(function(nativeDisplays){return WebVRConfig.ALWAYS_APPEND_POLYFILL_DISPLAY?nativeDisplays.concat(polyfillDisplays):nativeDisplays.length>0?nativeDisplays:polyfillDisplays}):new Promise(function(resolve,reject){try{resolve(polyfillDisplays)}catch(e){reject(e)}})},WebVRPolyfill.prototype.getVRDevices=function(){console.warn("getVRDevices is deprecated. Please update your code to use getVRDisplays instead.");var self=this;return new Promise(function(resolve,reject){try{if(!self.devicesPopulated){if(self.nativeWebVRAvailable)return navigator.getVRDisplays(function(displays){for(var i=0;ii;i++)ee[i]=available[i].fn;return ee},EventEmitter.prototype.emit=function(event,a1,a2,a3,a4,a5){var evt=prefix?prefix+event:event;if(!this._events[evt])return!1;var args,i,listeners=this._events[evt],len=arguments.length;if(listeners.fn){switch(listeners.once&&this.removeListener(event,listeners.fn,void 0,!0),len){case 1:return listeners.fn.call(listeners.context),!0;case 2:return listeners.fn.call(listeners.context,a1),!0;case 3:return listeners.fn.call(listeners.context,a1,a2),!0;case 4:return listeners.fn.call(listeners.context,a1,a2,a3),!0;case 5:return listeners.fn.call(listeners.context,a1,a2,a3,a4),!0;case 6:return listeners.fn.call(listeners.context,a1,a2,a3,a4,a5),!0}for(i=1,args=new Array(len-1);len>i;i++)args[i-1]=arguments[i];listeners.fn.apply(listeners.context,args)}else{var j,length=listeners.length;for(i=0;length>i;i++)switch(listeners[i].once&&this.removeListener(event,listeners[i].fn,void 0,!0),len){case 1:listeners[i].fn.call(listeners[i].context);break;case 2:listeners[i].fn.call(listeners[i].context,a1);break;case 3:listeners[i].fn.call(listeners[i].context,a1,a2);break;case 4:listeners[i].fn.call(listeners[i].context,a1,a2,a3);break;default:if(!args)for(j=1,args=new Array(len-1);len>j;j++)args[j-1]=arguments[j];listeners[i].fn.apply(listeners[i].context,args)}}return!0},EventEmitter.prototype.on=function(event,fn,context){var listener=new EE(fn,context||this),evt=prefix?prefix+event:event;return this._events[evt]?this._events[evt].fn?this._events[evt]=[this._events[evt],listener]:this._events[evt].push(listener):(this._events[evt]=listener,this._eventsCount++),this},EventEmitter.prototype.once=function(event,fn,context){var listener=new EE(fn,context||this,!0),evt=prefix?prefix+event:event;return this._events[evt]?this._events[evt].fn?this._events[evt]=[this._events[evt],listener]:this._events[evt].push(listener):(this._events[evt]=listener,this._eventsCount++),this},EventEmitter.prototype.removeListener=function(event,fn,context,once){var evt=prefix?prefix+event:event;if(!this._events[evt])return this;if(!fn)return 0===--this._eventsCount?this._events=new Events:delete this._events[evt],this;var listeners=this._events[evt];if(listeners.fn)listeners.fn!==fn||once&&!listeners.once||context&&listeners.context!==context||(0===--this._eventsCount?this._events=new Events:delete this._events[evt]);else{for(var i=0,events=[],length=listeners.length;length>i;i++)(listeners[i].fn!==fn||once&&!listeners[i].once||context&&listeners[i].context!==context)&&events.push(listeners[i]);events.length?this._events[evt]=1===events.length?events[0]:events:0===--this._eventsCount?this._events=new Events:delete this._events[evt]}return this},EventEmitter.prototype.removeAllListeners=function(event){var evt;return event?(evt=prefix?prefix+event:event,this._events[evt]&&(0===--this._eventsCount?this._events=new Events:delete this._events[evt])):(this._events=new Events,this._eventsCount=0),this},EventEmitter.prototype.off=EventEmitter.prototype.removeListener,EventEmitter.prototype.addListener=EventEmitter.prototype.on,EventEmitter.prototype.setMaxListeners=function(){return this},EventEmitter.prefixed=prefix,EventEmitter.EventEmitter=EventEmitter,"undefined"!=typeof module&&(module.exports=EventEmitter)},{}],2:[function(_dereq_,module){"use strict";function toObject(val){if(null===val||void 0===val)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(val)}function shouldUseNative(){try{if(!Object.assign)return!1;var test1=new String("abc");if(test1[5]="de","5"===Object.getOwnPropertyNames(test1)[0])return!1;for(var test2={},i=0;10>i;i++)test2["_"+String.fromCharCode(i)]=i;var order2=Object.getOwnPropertyNames(test2).map(function(n){return test2[n]});if("0123456789"!==order2.join(""))return!1;var test3={};return"abcdefghijklmnopqrst".split("").forEach(function(letter){test3[letter]=letter}),"abcdefghijklmnopqrst"!==Object.keys(Object.assign({},test3)).join("")?!1:!0}catch(e){return!1}}var hasOwnProperty=Object.prototype.hasOwnProperty,propIsEnumerable=Object.prototype.propertyIsEnumerable;module.exports=shouldUseNative()?Object.assign:function(target){for(var from,symbols,to=toObject(target),s=1;sself.capabilities.maxLayers)return void reject(new Error("Invalid number of layers."));var incomingLayer=layers[0];if(!incomingLayer.source)return void resolve();var leftBounds=incomingLayer.leftBounds||defaultLeftBounds,rightBounds=incomingLayer.rightBounds||defaultRightBounds;if(wasPresenting){var layer=self.layer_;layer.source!==incomingLayer.source&&(layer.source=incomingLayer.source);for(var i=0;4>i;i++)layer.leftBounds[i]=leftBounds[i],layer.rightBounds[i]=rightBounds[i];return void resolve()}if(self.layer_={predistorted:incomingLayer.predistorted,source:incomingLayer.source,leftBounds:leftBounds.slice(0),rightBounds:rightBounds.slice(0)},self.waitingForPresent_=!1,self.layer_&&self.layer_.source){var fullscreenElement=self.wrapForFullscreen(self.layer_.source);self.addFullscreenListeners_(fullscreenElement,onFullscreenChange,onFullscreenError),Util.requestFullscreen(fullscreenElement)?(self.wakelock_.request(),self.waitingForPresent_=!0):Util.isIOS()&&(self.wakelock_.request(),self.isPresenting=!0,self.beginPresent_(),self.fireVRDisplayPresentChange_(),resolve())}self.waitingForPresent_||Util.isIOS()||(Util.exitFullscreen(),reject(new Error("Unable to present.")))})},VRDisplay.prototype.exitPresent=function(){var wasPresenting=this.isPresenting,self=this;return this.isPresenting=!1,this.layer_=null,this.wakelock_.release(),new Promise(function(resolve,reject){wasPresenting?(!Util.exitFullscreen()&&Util.isIOS()&&(self.endPresent_(),self.fireVRDisplayPresentChange_()),resolve()):reject(new Error("Was not presenting to VRDisplay."))})},VRDisplay.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},VRDisplay.prototype.fireVRDisplayPresentChange_=function(){var event=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(event)},VRDisplay.prototype.addFullscreenListeners_=function(element,changeHandler,errorHandler){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=element,this.fullscreenChangeHandler_=changeHandler,this.fullscreenErrorHandler_=errorHandler,changeHandler&&(document.fullscreenEnabled?element.addEventListener("fullscreenchange",changeHandler,!1):document.webkitFullscreenEnabled?element.addEventListener("webkitfullscreenchange",changeHandler,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",changeHandler,!1):document.msFullscreenEnabled&&element.addEventListener("msfullscreenchange",changeHandler,!1)),errorHandler&&(document.fullscreenEnabled?element.addEventListener("fullscreenerror",errorHandler,!1):document.webkitFullscreenEnabled?element.addEventListener("webkitfullscreenerror",errorHandler,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",errorHandler,!1):document.msFullscreenEnabled&&element.addEventListener("msfullscreenerror",errorHandler,!1))},VRDisplay.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var element=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var changeHandler=this.fullscreenChangeHandler_;element.removeEventListener("fullscreenchange",changeHandler,!1),element.removeEventListener("webkitfullscreenchange",changeHandler,!1),document.removeEventListener("mozfullscreenchange",changeHandler,!1),element.removeEventListener("msfullscreenchange",changeHandler,!1)}if(this.fullscreenErrorHandler_){var errorHandler=this.fullscreenErrorHandler_;element.removeEventListener("fullscreenerror",errorHandler,!1),element.removeEventListener("webkitfullscreenerror",errorHandler,!1),document.removeEventListener("mozfullscreenerror",errorHandler,!1),element.removeEventListener("msfullscreenerror",errorHandler,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},VRDisplay.prototype.beginPresent_=function(){},VRDisplay.prototype.endPresent_=function(){},VRDisplay.prototype.submitFrame=function(){},VRDisplay.prototype.getEyeParameters=function(){return null},HMDVRDevice.prototype=new VRDevice,PositionSensorVRDevice.prototype=new VRDevice,module.exports.VRFrameData=VRFrameData,module.exports.VRDisplay=VRDisplay,module.exports.VRDevice=VRDevice,module.exports.HMDVRDevice=HMDVRDevice,module.exports.PositionSensorVRDevice=PositionSensorVRDevice},{"./util.js":22,"./wakelock.js":24}],4:[function(_dereq_,module){function CardboardDistorter(gl){this.gl=gl,this.ctxAttribs=gl.getContextAttributes(),this.meshWidth=20,this.meshHeight=20,this.bufferScale=WebVRConfig.BUFFER_SCALE,this.bufferWidth=gl.drawingBufferWidth,this.bufferHeight=gl.drawingBufferHeight,this.realBindFramebuffer=gl.bindFramebuffer,this.realEnable=gl.enable,this.realDisable=gl.disable,this.realColorMask=gl.colorMask,this.realClearColor=gl.clearColor,this.realViewport=gl.viewport,Util.isIOS()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=Util.linkProgram(gl,distortionVS,distortionFS,this.attribs),this.uniforms=Util.getProgramUniforms(gl,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=gl.createBuffer(),this.indexBuffer=gl.createBuffer(),this.indexCount=0,this.renderTarget=gl.createTexture(),this.framebuffer=gl.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=gl.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=gl.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=gl.createRenderbuffer()),this.patch(),this.onResize(),WebVRConfig.CARDBOARD_UI_DISABLED||(this.cardboardUI=new CardboardUI(gl))}var CardboardUI=_dereq_("./cardboard-ui.js"),Util=_dereq_("./util.js"),WGLUPreserveGLState=_dereq_("./deps/wglu-preserve-state.js"),distortionVS=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),distortionFS=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");CardboardDistorter.prototype.destroy=function(){var gl=this.gl;this.unpatch(),gl.deleteProgram(this.program),gl.deleteBuffer(this.vertexBuffer),gl.deleteBuffer(this.indexBuffer),gl.deleteTexture(this.renderTarget),gl.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&gl.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&gl.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&gl.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},CardboardDistorter.prototype.onResize=function(){var gl=this.gl,self=this,glState=[gl.RENDERBUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0];WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null),self.scissorTest&&self.realDisable.call(gl,gl.SCISSOR_TEST),self.realColorMask.call(gl,!0,!0,!0,!0),self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),self.realClearColor.call(gl,0,0,0,1),gl.clear(gl.COLOR_BUFFER_BIT),self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.framebuffer),gl.bindTexture(gl.TEXTURE_2D,self.renderTarget),gl.texImage2D(gl.TEXTURE_2D,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,self.bufferWidth,self.bufferHeight,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,gl.UNSIGNED_BYTE,null),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,self.renderTarget,0),self.ctxAttribs.depth&&self.ctxAttribs.stencil?(gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthStencilBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_STENCIL,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.depthStencilBuffer)):self.ctxAttribs.depth?(gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,self.depthBuffer)):self.ctxAttribs.stencil&&(gl.bindRenderbuffer(gl.RENDERBUFFER,self.stencilBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.STENCIL_INDEX8,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.stencilBuffer)),!gl.checkFramebufferStatus(gl.FRAMEBUFFER)===gl.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer),self.scissorTest&&self.realEnable.call(gl,gl.SCISSOR_TEST),self.realColorMask.apply(gl,self.colorMask),self.realViewport.apply(gl,self.viewport),self.realClearColor.apply(gl,self.clearColor)}),this.cardboardUI&&this.cardboardUI.onResize()},CardboardDistorter.prototype.patch=function(){if(!this.isPatched){var self=this,canvas=this.gl.canvas,gl=this.gl;Util.isIOS()||(canvas.width=Util.getScreenWidth()*this.bufferScale,canvas.height=Util.getScreenHeight()*this.bufferScale,Object.defineProperty(canvas,"width",{configurable:!0,enumerable:!0,get:function(){return self.bufferWidth},set:function(value){self.bufferWidth=value,self.realCanvasWidth.set.call(canvas,value),self.onResize()}}),Object.defineProperty(canvas,"height",{configurable:!0,enumerable:!0,get:function(){return self.bufferHeight},set:function(value){self.bufferHeight=value,self.realCanvasHeight.set.call(canvas,value),self.onResize()}})),this.lastBoundFramebuffer=gl.getParameter(gl.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(gl.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(target,framebuffer){self.lastBoundFramebuffer=framebuffer?framebuffer:self.framebuffer,self.realBindFramebuffer.call(gl,target,self.lastBoundFramebuffer)},this.cullFace=gl.getParameter(gl.CULL_FACE),this.depthTest=gl.getParameter(gl.DEPTH_TEST),this.blend=gl.getParameter(gl.BLEND),this.scissorTest=gl.getParameter(gl.SCISSOR_TEST),this.stencilTest=gl.getParameter(gl.STENCIL_TEST),gl.enable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=!0;break;case gl.DEPTH_TEST:self.depthTest=!0;break;case gl.BLEND:self.blend=!0;break;case gl.SCISSOR_TEST:self.scissorTest=!0;break;case gl.STENCIL_TEST:self.stencilTest=!0}self.realEnable.call(gl,pname)},gl.disable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=!1;break;case gl.DEPTH_TEST:self.depthTest=!1;break;case gl.BLEND:self.blend=!1;break;case gl.SCISSOR_TEST:self.scissorTest=!1;break;case gl.STENCIL_TEST:self.stencilTest=!1}self.realDisable.call(gl,pname)},this.colorMask=gl.getParameter(gl.COLOR_WRITEMASK),gl.colorMask=function(r,g,b,a){self.colorMask[0]=r,self.colorMask[1]=g,self.colorMask[2]=b,self.colorMask[3]=a,self.realColorMask.call(gl,r,g,b,a)},this.clearColor=gl.getParameter(gl.COLOR_CLEAR_VALUE),gl.clearColor=function(r,g,b,a){self.clearColor[0]=r,self.clearColor[1]=g,self.clearColor[2]=b,self.clearColor[3]=a,self.realClearColor.call(gl,r,g,b,a)},this.viewport=gl.getParameter(gl.VIEWPORT),gl.viewport=function(x,y,w,h){self.viewport[0]=x,self.viewport[1]=y,self.viewport[2]=w,self.viewport[3]=h,self.realViewport.call(gl,x,y,w,h)},this.isPatched=!0,Util.safariCssSizeWorkaround(canvas)}},CardboardDistorter.prototype.unpatch=function(){if(this.isPatched){var gl=this.gl,canvas=this.gl.canvas;Util.isIOS()||(Object.defineProperty(canvas,"width",this.realCanvasWidth),Object.defineProperty(canvas,"height",this.realCanvasHeight)),canvas.width=this.bufferWidth,canvas.height=this.bufferHeight,gl.bindFramebuffer=this.realBindFramebuffer,gl.enable=this.realEnable,gl.disable=this.realDisable,gl.colorMask=this.realColorMask,gl.clearColor=this.realClearColor,gl.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&gl.bindFramebuffer(gl.FRAMEBUFFER,null),this.isPatched=!1,setTimeout(function(){Util.safariCssSizeWorkaround(canvas)},1)}},CardboardDistorter.prototype.setTextureBounds=function(leftBounds,rightBounds){leftBounds||(leftBounds=[0,0,.5,1]),rightBounds||(rightBounds=[.5,0,.5,1]),this.viewportOffsetScale[0]=leftBounds[0],this.viewportOffsetScale[1]=leftBounds[1],this.viewportOffsetScale[2]=leftBounds[2],this.viewportOffsetScale[3]=leftBounds[3],this.viewportOffsetScale[4]=rightBounds[0],this.viewportOffsetScale[5]=rightBounds[1],this.viewportOffsetScale[6]=rightBounds[2],this.viewportOffsetScale[7]=rightBounds[3]},CardboardDistorter.prototype.submitFrame=function(){var gl=this.gl,self=this,glState=[];if(WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS||glState.push(gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0),WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null),self.cullFace&&self.realDisable.call(gl,gl.CULL_FACE),self.depthTest&&self.realDisable.call(gl,gl.DEPTH_TEST),self.blend&&self.realDisable.call(gl,gl.BLEND),self.scissorTest&&self.realDisable.call(gl,gl.SCISSOR_TEST),self.stencilTest&&self.realDisable.call(gl,gl.STENCIL_TEST),self.realColorMask.call(gl,!0,!0,!0,!0),self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),(self.ctxAttribs.alpha||Util.isIOS())&&(self.realClearColor.call(gl,0,0,0,1),gl.clear(gl.COLOR_BUFFER_BIT)),gl.useProgram(self.program),gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer),gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.enableVertexAttribArray(self.attribs.position),gl.enableVertexAttribArray(self.attribs.texCoord),gl.vertexAttribPointer(self.attribs.position,2,gl.FLOAT,!1,20,0),gl.vertexAttribPointer(self.attribs.texCoord,3,gl.FLOAT,!1,20,8),gl.activeTexture(gl.TEXTURE0),gl.uniform1i(self.uniforms.diffuse,0),gl.bindTexture(gl.TEXTURE_2D,self.renderTarget),gl.uniform4fv(self.uniforms.viewportOffsetScale,self.viewportOffsetScale),gl.drawElements(gl.TRIANGLES,self.indexCount,gl.UNSIGNED_SHORT,0),self.cardboardUI&&self.cardboardUI.renderNoState(),self.realBindFramebuffer.call(self.gl,gl.FRAMEBUFFER,self.framebuffer),self.ctxAttribs.preserveDrawingBuffer||(self.realClearColor.call(gl,0,0,0,0),gl.clear(gl.COLOR_BUFFER_BIT)),WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS||self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer),self.cullFace&&self.realEnable.call(gl,gl.CULL_FACE),self.depthTest&&self.realEnable.call(gl,gl.DEPTH_TEST),self.blend&&self.realEnable.call(gl,gl.BLEND),self.scissorTest&&self.realEnable.call(gl,gl.SCISSOR_TEST),self.stencilTest&&self.realEnable.call(gl,gl.STENCIL_TEST),self.realColorMask.apply(gl,self.colorMask),self.realViewport.apply(gl,self.viewport),(self.ctxAttribs.alpha||!self.ctxAttribs.preserveDrawingBuffer)&&self.realClearColor.apply(gl,self.clearColor)}),Util.isIOS()){var canvas=gl.canvas;(canvas.width!=self.bufferWidth||canvas.height!=self.bufferHeight)&&(self.bufferWidth=canvas.width,self.bufferHeight=canvas.height,self.onResize())}},CardboardDistorter.prototype.updateDeviceInfo=function(deviceInfo){var gl=this.gl,self=this,glState=[gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){var vertices=self.computeMeshVertices_(self.meshWidth,self.meshHeight,deviceInfo);if(gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW),!self.indexCount){var indices=self.computeMeshIndices_(self.meshWidth,self.meshHeight);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer),gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indices,gl.STATIC_DRAW),self.indexCount=indices.length}})},CardboardDistorter.prototype.computeMeshVertices_=function(width,height,deviceInfo){for(var vertices=new Float32Array(2*width*height*5),lensFrustum=deviceInfo.getLeftEyeVisibleTanAngles(),noLensFrustum=deviceInfo.getLeftEyeNoLensTanAngles(),viewport=deviceInfo.getLeftEyeVisibleScreenRect(noLensFrustum),vidx=0,e=0;2>e;e++){for(var j=0;height>j;j++)for(var i=0;width>i;i++,vidx++){var u=i/(width-1),v=j/(height-1),s=u,t=v,x=Util.lerp(lensFrustum[0],lensFrustum[2],u),y=Util.lerp(lensFrustum[3],lensFrustum[1],v),d=Math.sqrt(x*x+y*y),r=deviceInfo.distortion.distortInverse(d),p=x*r/d,q=y*r/d;u=(p-noLensFrustum[0])/(noLensFrustum[2]-noLensFrustum[0]),v=(q-noLensFrustum[3])/(noLensFrustum[1]-noLensFrustum[3]);{deviceInfo.device.widthMeters/deviceInfo.device.heightMeters}u=2*(viewport.x+u*viewport.width-.5),v=2*(viewport.y+v*viewport.height-.5),vertices[5*vidx+0]=u,vertices[5*vidx+1]=v,vertices[5*vidx+2]=s,vertices[5*vidx+3]=t,vertices[5*vidx+4]=e}var w=lensFrustum[2]-lensFrustum[0];lensFrustum[0]=-(w+lensFrustum[0]),lensFrustum[2]=w-lensFrustum[2],w=noLensFrustum[2]-noLensFrustum[0],noLensFrustum[0]=-(w+noLensFrustum[0]),noLensFrustum[2]=w-noLensFrustum[2],viewport.x=1-(viewport.x+viewport.width)}return vertices},CardboardDistorter.prototype.computeMeshIndices_=function(width,height){for(var indices=new Uint16Array(2*(width-1)*(height-1)*6),halfwidth=width/2,halfheight=height/2,vidx=0,iidx=0,e=0;2>e;e++)for(var j=0;height>j;j++)for(var i=0;width>i;i++,vidx++)0!=i&&0!=j&&(halfwidth>=i==halfheight>=j?(indices[iidx++]=vidx,indices[iidx++]=vidx-width-1,indices[iidx++]=vidx-width,indices[iidx++]=vidx-width-1,indices[iidx++]=vidx,indices[iidx++]=vidx-1):(indices[iidx++]=vidx-1,indices[iidx++]=vidx-width,indices[iidx++]=vidx,indices[iidx++]=vidx-width,indices[iidx++]=vidx-1,indices[iidx++]=vidx-width-1));return indices},CardboardDistorter.prototype.getOwnPropertyDescriptor_=function(proto,attrName){var descriptor=Object.getOwnPropertyDescriptor(proto,attrName);return(void 0===descriptor.get||void 0===descriptor.set)&&(descriptor.configurable=!0,descriptor.enumerable=!0,descriptor.get=function(){return this.getAttribute(attrName)},descriptor.set=function(val){this.setAttribute(attrName,val)}),descriptor},module.exports=CardboardDistorter},{"./cardboard-ui.js":5,"./deps/wglu-preserve-state.js":7,"./util.js":22}],5:[function(_dereq_,module){function CardboardUI(gl){this.gl=gl,this.attribs={position:0},this.program=Util.linkProgram(gl,uiVS,uiFS,this.attribs),this.uniforms=Util.getProgramUniforms(gl,this.program),this.vertexBuffer=gl.createBuffer(),this.gearOffset=0,this.gearVertexCount=0,this.arrowOffset=0,this.arrowVertexCount=0,this.projMat=new Float32Array(16),this.listener=null,this.onResize()}var Util=_dereq_("./util.js"),WGLUPreserveGLState=_dereq_("./deps/wglu-preserve-state.js"),uiVS=["attribute vec2 position;","uniform mat4 projectionMat;","void main() {"," gl_Position = projectionMat * vec4( position, -1.0, 1.0 );","}"].join("\n"),uiFS=["precision mediump float;","uniform vec4 color;","void main() {"," gl_FragColor = color;","}"].join("\n"),DEG2RAD=Math.PI/180,kAnglePerGearSection=60,kOuterRimEndAngle=12,kInnerRimBeginAngle=20,kOuterRadius=1,kMiddleRadius=.75,kInnerRadius=.3125,kCenterLineThicknessDp=4,kButtonWidthDp=28,kTouchSlopFactor=1.5;CardboardUI.prototype.destroy=function(){var gl=this.gl;this.listener&&gl.canvas.removeEventListener("click",this.listener,!1),gl.deleteProgram(this.program),gl.deleteBuffer(this.vertexBuffer)},CardboardUI.prototype.listen=function(optionsCallback,backCallback){var canvas=this.gl.canvas;this.listener=function(event){var midline=canvas.clientWidth/2,buttonSize=kButtonWidthDp*kTouchSlopFactor;event.clientX>midline-buttonSize&&event.clientXcanvas.clientHeight-buttonSize?optionsCallback(event):event.clientX=i;i++){var segmentTheta=i*kAnglePerGearSection;addGearSegment(segmentTheta,kOuterRadius),addGearSegment(segmentTheta+kOuterRimEndAngle,kOuterRadius),addGearSegment(segmentTheta+kInnerRimBeginAngle,kMiddleRadius),addGearSegment(segmentTheta+(kAnglePerGearSection-kInnerRimBeginAngle),kMiddleRadius),addGearSegment(segmentTheta+(kAnglePerGearSection-kOuterRimEndAngle),kOuterRadius)}self.gearVertexCount=vertices.length/2-self.gearOffset,self.arrowOffset=vertices.length/2;var angledLineWidth=lineWidth/Math.sin(45*DEG2RAD);addArrowVertex(0,buttonScale),addArrowVertex(buttonScale,0),addArrowVertex(buttonScale+angledLineWidth,angledLineWidth),addArrowVertex(angledLineWidth,buttonScale+angledLineWidth),addArrowVertex(angledLineWidth,buttonScale-angledLineWidth),addArrowVertex(0,buttonScale),addArrowVertex(buttonScale,2*buttonScale),addArrowVertex(buttonScale+angledLineWidth,2*buttonScale-angledLineWidth),addArrowVertex(angledLineWidth,buttonScale-angledLineWidth),addArrowVertex(0,buttonScale),addArrowVertex(angledLineWidth,buttonScale-lineWidth),addArrowVertex(kButtonWidthDp*dps,buttonScale-lineWidth),addArrowVertex(angledLineWidth,buttonScale+lineWidth),addArrowVertex(kButtonWidthDp*dps,buttonScale+lineWidth),self.arrowVertexCount=vertices.length/2-self.arrowOffset,gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW)})},CardboardUI.prototype.render=function(){var gl=this.gl,self=this,glState=[gl.CULL_FACE,gl.DEPTH_TEST,gl.BLEND,gl.SCISSOR_TEST,gl.STENCIL_TEST,gl.COLOR_WRITEMASK,gl.VIEWPORT,gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){gl.disable(gl.CULL_FACE),gl.disable(gl.DEPTH_TEST),gl.disable(gl.BLEND),gl.disable(gl.SCISSOR_TEST),gl.disable(gl.STENCIL_TEST),gl.colorMask(!0,!0,!0,!0),gl.viewport(0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),self.renderNoState()})},CardboardUI.prototype.renderNoState=function(){var gl=this.gl;gl.useProgram(this.program),gl.bindBuffer(gl.ARRAY_BUFFER,this.vertexBuffer),gl.enableVertexAttribArray(this.attribs.position),gl.vertexAttribPointer(this.attribs.position,2,gl.FLOAT,!1,8,0),gl.uniform4f(this.uniforms.color,1,1,1,1),Util.orthoMatrix(this.projMat,0,gl.drawingBufferWidth,0,gl.drawingBufferHeight,.1,1024),gl.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),gl.drawArrays(gl.TRIANGLE_STRIP,0,4),gl.drawArrays(gl.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),gl.drawArrays(gl.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},module.exports=CardboardUI},{"./deps/wglu-preserve-state.js":7,"./util.js":22}],6:[function(_dereq_,module){function CardboardVRDisplay(){this.displayName="Cardboard VRDisplay (webvr-polyfill)",this.capabilities.hasOrientation=!0,this.capabilities.canPresent=!0,this.bufferScale_=WebVRConfig.BUFFER_SCALE,this.poseSensor_=new FusionPoseSensor,this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Dpdb(!0,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new DeviceInfo(this.dpdb_.getDeviceParams()),this.viewerSelector_=new ViewerSelector,this.viewerSelector_.on("change",this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),WebVRConfig.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new RotateInstructions),Util.isIOS()&&window.addEventListener("resize",this.onResize_.bind(this))}var CardboardDistorter=_dereq_("./cardboard-distorter.js"),CardboardUI=_dereq_("./cardboard-ui.js"),DeviceInfo=_dereq_("./device-info.js"),Dpdb=_dereq_("./dpdb/dpdb.js"),FusionPoseSensor=_dereq_("./sensor-fusion/fusion-pose-sensor.js"),RotateInstructions=_dereq_("./rotate-instructions.js"),ViewerSelector=_dereq_("./viewer-selector.js"),VRDisplay=_dereq_("./base.js").VRDisplay,Util=_dereq_("./util.js"),Eye={LEFT:"left",RIGHT:"right"};CardboardVRDisplay.prototype=new VRDisplay,CardboardVRDisplay.prototype.getImmediatePose=function(){return{position:this.poseSensor_.getPosition(),orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},CardboardVRDisplay.prototype.resetPose=function(){this.poseSensor_.resetPose()},CardboardVRDisplay.prototype.getEyeParameters=function(whichEye){var fieldOfView,offset=[.5*this.deviceInfo_.viewer.interLensDistance,0,0];if(whichEye==Eye.LEFT)offset[0]*=-1,fieldOfView=this.deviceInfo_.getFieldOfViewLeftEye();else{if(whichEye!=Eye.RIGHT)return console.error("Invalid eye provided: %s",whichEye),null;fieldOfView=this.deviceInfo_.getFieldOfViewRightEye()}return{fieldOfView:fieldOfView,offset:offset,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_}},CardboardVRDisplay.prototype.onDeviceParamsUpdated_=function(newParams){Util.isDebug()&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(newParams),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},CardboardVRDisplay.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},CardboardVRDisplay.prototype.beginPresent_=function(){var gl=this.layer_.source.getContext("webgl");gl||(gl=this.layer_.source.getContext("experimental-webgl")),gl||(gl=this.layer_.source.getContext("webgl2")),gl&&(this.layer_.predistorted?WebVRConfig.CARDBOARD_UI_DISABLED||(gl.canvas.width=Util.getScreenWidth()*this.bufferScale_,gl.canvas.height=Util.getScreenHeight()*this.bufferScale_,this.cardboardUI_=new CardboardUI(gl)):(this.distorter_=new CardboardDistorter(gl),this.distorter_.updateDeviceInfo(this.deviceInfo_),this.cardboardUI_=this.distorter_.cardboardUI),this.cardboardUI_&&this.cardboardUI_.listen(function(e){this.viewerSelector_.show(this.layer_.source.parentElement),e.stopPropagation(),e.preventDefault()}.bind(this),function(e){this.exitPresent(),e.stopPropagation(),e.preventDefault()}.bind(this)),this.rotateInstructions_&&(Util.isLandscapeMode()&&Util.isMobile()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},CardboardVRDisplay.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},CardboardVRDisplay.prototype.submitFrame=function(){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var canvas=this.layer_.source.getContext("webgl").canvas;(canvas.width!=this.lastWidth||canvas.height!=this.lastHeight)&&this.cardboardUI_.onResize(),this.lastWidth=canvas.width,this.lastHeight=canvas.height,this.cardboardUI_.render()}},CardboardVRDisplay.prototype.onOrientationChange_=function(){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},CardboardVRDisplay.prototype.onResize_=function(){if(this.layer_){var gl=this.layer_.source.getContext("webgl"),cssProperties=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0 10px 10px 0","box-sizing: content-box"];gl.canvas.setAttribute("style",cssProperties.join("; ")+";"),Util.safariCssSizeWorkaround(gl.canvas)}},CardboardVRDisplay.prototype.onViewerChanged_=function(viewer){this.deviceInfo_.setViewer(viewer),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},CardboardVRDisplay.prototype.fireVRDisplayDeviceParamsChange_=function(){var event=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(event)},module.exports=CardboardVRDisplay},{"./base.js":3,"./cardboard-distorter.js":4,"./cardboard-ui.js":5,"./device-info.js":8,"./dpdb/dpdb.js":12,"./rotate-instructions.js":16,"./sensor-fusion/fusion-pose-sensor.js":18,"./util.js":22,"./viewer-selector.js":23}],7:[function(_dereq_,module){function WGLUPreserveGLState(gl,bindings,callback){if(!bindings)return void callback(gl);for(var boundValues=[],activeTexture=null,i=0;igl.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),boundValues.push(null,null);break}activeTexture||(activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE)),gl.activeTexture(textureUnit),boundValues.push(gl.getParameter(binding),null);break;case gl.ACTIVE_TEXTURE:activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE),boundValues.push(null);break;default:boundValues.push(gl.getParameter(binding))}}callback(gl);for(var i=0;igl.TEXTURE31)break;gl.activeTexture(textureUnit),gl.bindTexture(gl.TEXTURE_2D,boundValue);break;case gl.TEXTURE_BINDING_CUBE_MAP:var textureUnit=bindings[++i];if(textureUnitgl.TEXTURE31)break;gl.activeTexture(textureUnit),gl.bindTexture(gl.TEXTURE_CUBE_MAP,boundValue);break;case gl.VIEWPORT:gl.viewport(boundValue[0],boundValue[1],boundValue[2],boundValue[3]);break;case gl.BLEND:case gl.CULL_FACE:case gl.DEPTH_TEST:case gl.SCISSOR_TEST:case gl.STENCIL_TEST:boundValue?gl.enable(binding):gl.disable(binding);break;default:console.log("No GL restore behavior for 0x"+binding.toString(16))}activeTexture&&gl.activeTexture(activeTexture)}}module.exports=WGLUPreserveGLState},{}],8:[function(_dereq_,module){function Device(params){this.width=params.width||Util.getScreenWidth(),this.height=params.height||Util.getScreenHeight(),this.widthMeters=params.widthMeters,this.heightMeters=params.heightMeters,this.bevelMeters=params.bevelMeters}function DeviceInfo(deviceParams){this.viewer=Viewers.CardboardV2,this.updateDeviceParams(deviceParams),this.distortion=new Distortion(this.viewer.distortionCoefficients)}function CardboardViewer(params){this.id=params.id,this.label=params.label,this.fov=params.fov,this.interLensDistance=params.interLensDistance,this.baselineLensDistance=params.baselineLensDistance,this.screenLensDistance=params.screenLensDistance,this.distortionCoefficients=params.distortionCoefficients,this.inverseCoefficients=params.inverseCoefficients}var Distortion=_dereq_("./distortion/distortion.js"),MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js"),DEFAULT_ANDROID=new Device({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),DEFAULT_IOS=new Device({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),Viewers={CardboardV1:new CardboardViewer({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new CardboardViewer({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};DeviceInfo.prototype.updateDeviceParams=function(deviceParams){this.device=this.determineDevice_(deviceParams)||this.device},DeviceInfo.prototype.getDevice=function(){return this.device},DeviceInfo.prototype.setViewer=function(viewer){this.viewer=viewer,this.distortion=new Distortion(this.viewer.distortionCoefficients)},DeviceInfo.prototype.determineDevice_=function(deviceParams){if(!deviceParams)return Util.isIOS()?(console.warn("Using fallback iOS device measurements."),DEFAULT_IOS):(console.warn("Using fallback Android device measurements."),DEFAULT_ANDROID);var METERS_PER_INCH=.0254,metersPerPixelX=METERS_PER_INCH/deviceParams.xdpi,metersPerPixelY=METERS_PER_INCH/deviceParams.ydpi,width=Util.getScreenWidth(),height=Util.getScreenHeight();return new Device({widthMeters:metersPerPixelX*width,heightMeters:metersPerPixelY*height,bevelMeters:.001*deviceParams.bevelMm})},DeviceInfo.prototype.getDistortedFieldOfViewLeftEye=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,eyeToScreenDistance=viewer.screenLensDistance,outerDist=(device.widthMeters-viewer.interLensDistance)/2,innerDist=viewer.interLensDistance/2,bottomDist=viewer.baselineLensDistance-device.bevelMeters,topDist=device.heightMeters-bottomDist,outerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(outerDist/eyeToScreenDistance)),innerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(innerDist/eyeToScreenDistance)),bottomAngle=MathUtil.radToDeg*Math.atan(distortion.distort(bottomDist/eyeToScreenDistance)),topAngle=MathUtil.radToDeg*Math.atan(distortion.distort(topDist/eyeToScreenDistance));return{leftDegrees:Math.min(outerAngle,viewer.fov),rightDegrees:Math.min(innerAngle,viewer.fov),downDegrees:Math.min(bottomAngle,viewer.fov),upDegrees:Math.min(topAngle,viewer.fov)}},DeviceInfo.prototype.getLeftEyeVisibleTanAngles=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,fovLeft=Math.tan(-MathUtil.degToRad*viewer.fov),fovTop=Math.tan(MathUtil.degToRad*viewer.fov),fovRight=Math.tan(MathUtil.degToRad*viewer.fov),fovBottom=Math.tan(-MathUtil.degToRad*viewer.fov),halfWidth=device.widthMeters/4,halfHeight=device.heightMeters/2,verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight,centerX=viewer.interLensDistance/2-halfWidth,centerY=-verticalLensOffset,centerZ=viewer.screenLensDistance,screenLeft=distortion.distort((centerX-halfWidth)/centerZ),screenTop=distortion.distort((centerY+halfHeight)/centerZ),screenRight=distortion.distort((centerX+halfWidth)/centerZ),screenBottom=distortion.distort((centerY-halfHeight)/centerZ),result=new Float32Array(4);return result[0]=Math.max(fovLeft,screenLeft),result[1]=Math.min(fovTop,screenTop),result[2]=Math.min(fovRight,screenRight),result[3]=Math.max(fovBottom,screenBottom),result},DeviceInfo.prototype.getLeftEyeNoLensTanAngles=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,result=new Float32Array(4),fovLeft=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov)),fovTop=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov)),fovRight=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov)),fovBottom=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov)),halfWidth=device.widthMeters/4,halfHeight=device.heightMeters/2,verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight,centerX=viewer.interLensDistance/2-halfWidth,centerY=-verticalLensOffset,centerZ=viewer.screenLensDistance,screenLeft=(centerX-halfWidth)/centerZ,screenTop=(centerY+halfHeight)/centerZ,screenRight=(centerX+halfWidth)/centerZ,screenBottom=(centerY-halfHeight)/centerZ;return result[0]=Math.max(fovLeft,screenLeft),result[1]=Math.min(fovTop,screenTop),result[2]=Math.min(fovRight,screenRight),result[3]=Math.max(fovBottom,screenBottom),result},DeviceInfo.prototype.getLeftEyeVisibleScreenRect=function(undistortedFrustum){var viewer=this.viewer,device=this.device,dist=viewer.screenLensDistance,eyeX=(device.widthMeters-viewer.interLensDistance)/2,eyeY=viewer.baselineLensDistance-device.bevelMeters,left=(undistortedFrustum[0]*dist+eyeX)/device.widthMeters,top=(undistortedFrustum[1]*dist+eyeY)/device.heightMeters,right=(undistortedFrustum[2]*dist+eyeX)/device.widthMeters,bottom=(undistortedFrustum[3]*dist+eyeY)/device.heightMeters;return{x:left,y:bottom,width:right-left,height:top-bottom}},DeviceInfo.prototype.getFieldOfViewLeftEye=function(opt_isUndistorted){return opt_isUndistorted?this.getUndistortedFieldOfViewLeftEye():this.getDistortedFieldOfViewLeftEye()},DeviceInfo.prototype.getFieldOfViewRightEye=function(opt_isUndistorted){var fov=this.getFieldOfViewLeftEye(opt_isUndistorted);return{leftDegrees:fov.rightDegrees,rightDegrees:fov.leftDegrees,upDegrees:fov.upDegrees,downDegrees:fov.downDegrees}},DeviceInfo.prototype.getUndistortedFieldOfViewLeftEye=function(){var p=this.getUndistortedParams_();return{leftDegrees:MathUtil.radToDeg*Math.atan(p.outerDist),rightDegrees:MathUtil.radToDeg*Math.atan(p.innerDist),downDegrees:MathUtil.radToDeg*Math.atan(p.bottomDist),upDegrees:MathUtil.radToDeg*Math.atan(p.topDist)}},DeviceInfo.prototype.getUndistortedViewportLeftEye=function(){var p=this.getUndistortedParams_(),viewer=this.viewer,device=this.device,eyeToScreenDistance=viewer.screenLensDistance,screenWidth=device.widthMeters/eyeToScreenDistance,screenHeight=device.heightMeters/eyeToScreenDistance,xPxPerTanAngle=device.width/screenWidth,yPxPerTanAngle=device.height/screenHeight,x=Math.round((p.eyePosX-p.outerDist)*xPxPerTanAngle),y=Math.round((p.eyePosY-p.bottomDist)*yPxPerTanAngle);return{x:x,y:y,width:Math.round((p.eyePosX+p.innerDist)*xPxPerTanAngle)-x,height:Math.round((p.eyePosY+p.topDist)*yPxPerTanAngle)-y}},DeviceInfo.prototype.getUndistortedParams_=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,eyeToScreenDistance=viewer.screenLensDistance,halfLensDistance=viewer.interLensDistance/2/eyeToScreenDistance,screenWidth=device.widthMeters/eyeToScreenDistance,screenHeight=device.heightMeters/eyeToScreenDistance,eyePosX=screenWidth/2-halfLensDistance,eyePosY=(viewer.baselineLensDistance-device.bevelMeters)/eyeToScreenDistance,maxFov=viewer.fov,viewerMax=distortion.distortInverse(Math.tan(MathUtil.degToRad*maxFov)),outerDist=Math.min(eyePosX,viewerMax),innerDist=Math.min(halfLensDistance,viewerMax),bottomDist=Math.min(eyePosY,viewerMax),topDist=Math.min(screenHeight-eyePosY,viewerMax);return{outerDist:outerDist,innerDist:innerDist,topDist:topDist,bottomDist:bottomDist,eyePosX:eyePosX,eyePosY:eyePosY}},DeviceInfo.Viewers=Viewers,module.exports=DeviceInfo},{"./distortion/distortion.js":10,"./math-util.js":14,"./util.js":22}],9:[function(_dereq_,module){function VRDisplayHMDDevice(display){this.display=display,this.hardwareUnitId=display.displayId,this.deviceId="webvr-polyfill:HMD:"+display.displayId,this.deviceName=display.displayName+" (HMD)"}function VRDisplayPositionSensorDevice(display){this.display=display,this.hardwareUnitId=display.displayId,this.deviceId="webvr-polyfill:PositionSensor: "+display.displayId,this.deviceName=display.displayName+" (PositionSensor)"}var HMDVRDevice=(_dereq_("./base.js").VRDisplay,_dereq_("./base.js").HMDVRDevice),PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice;VRDisplayHMDDevice.prototype=new HMDVRDevice,VRDisplayHMDDevice.prototype.getEyeParameters=function(whichEye){var eyeParameters=this.display.getEyeParameters(whichEye);return{currentFieldOfView:eyeParameters.fieldOfView,maximumFieldOfView:eyeParameters.fieldOfView,minimumFieldOfView:eyeParameters.fieldOfView,recommendedFieldOfView:eyeParameters.fieldOfView,eyeTranslation:{x:eyeParameters.offset[0],y:eyeParameters.offset[1],z:eyeParameters.offset[2]},renderRect:{x:"right"==whichEye?eyeParameters.renderWidth:0,y:0,width:eyeParameters.renderWidth,height:eyeParameters.renderHeight}}},VRDisplayHMDDevice.prototype.setFieldOfView=function(){},VRDisplayPositionSensorDevice.prototype=new PositionSensorVRDevice,VRDisplayPositionSensorDevice.prototype.getState=function(){var pose=this.display.getPose();return{position:pose.position?{x:pose.position[0],y:pose.position[1],z:pose.position[2]}:null,orientation:pose.orientation?{x:pose.orientation[0],y:pose.orientation[1],z:pose.orientation[2],w:pose.orientation[3]}:null,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},VRDisplayPositionSensorDevice.prototype.resetState=function(){return this.positionDevice.resetPose()},module.exports.VRDisplayHMDDevice=VRDisplayHMDDevice,module.exports.VRDisplayPositionSensorDevice=VRDisplayPositionSensorDevice},{"./base.js":3}],10:[function(_dereq_,module){function Distortion(coefficients){this.coefficients=coefficients}Distortion.prototype.distortInverse=function(radius){for(var r0=0,r1=1,dr0=radius-this.distort(r0);Math.abs(r1-r0)>1e-4;){var dr1=radius-this.distort(r1),r2=r1-dr1*((r1-r0)/(dr1-dr0));r0=r1,r1=r2,dr0=dr1}return r1},Distortion.prototype.distort=function(radius){for(var r2=radius*radius,ret=0,i=0;ij;++j)for(var k=j+1;n>k;++k){for(var p=a[j][k]/a[j][j],i=j+1;n>i;++i)a[i][k]-=p*a[i][j];y[k]-=p*y[j]}for(var x=new Array(n),j=n-1;j>=0;--j){for(var v=y[j],i=j+1;n>i;++i)v-=a[i][j]*x[i];x[j]=v/a[j][j]}return x},Distortion.prototype.solveLeastSquares_=function(matA,vecY){var i,j,k,sum,numSamples=matA.length,numCoefficients=matA[0].length;if(numSamples!=vecY.Length)throw new Error("Matrix / vector dimension mismatch");var matATA=new Array(numCoefficients);for(k=0;numCoefficients>k;++k)for(matATA[k]=new Array(numCoefficients),j=0;numCoefficients>j;++j){for(sum=0,i=0;numSamples>i;++i)sum+=matA[j][i]*matA[k][i];matATA[k][j]=sum}var vecATY=new Array(numCoefficients);for(j=0;numCoefficients>j;++j){for(sum=0,i=0;numSamples>i;++i)sum+=matA[j][i]*vecY[i];vecATY[j]=sum}return this.solveLinear_(matATA,vecATY)},Distortion.prototype.approximateInverse=function(maxRadius,numSamples){maxRadius=maxRadius||1,numSamples=numSamples||100;var i,j,numCoefficients=6,matA=new Array(numCoefficients);for(j=0;numCoefficients>j;++j)matA[j]=new Array(numSamples);var vecY=new Array(numSamples);for(i=0;numSamples>i;++i){var r=maxRadius*(i+1)/numSamples,rp=this.distort(r),v=rp;for(j=0;numCoefficients>j;++j)v*=rp*rp,matA[j][i]=v;vecY[i]=r-rp}var inverseCoefficients=this.solveLeastSquares_(matA,vecY);return new Distortion(inverseCoefficients)},module.exports=Distortion},{}],11:[function(_dereq_,module){var DPDB_CACHE={format:1,last_updated:"2016-01-20T00:18:35Z",devices:[{type:"android",rules:[{mdmh:"asus/*/Nexus 7/*"},{ua:"Nexus 7"}],dpi:[320.8,323],bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_Z00AD/*"},{ua:"ASUS_Z00AD"}],dpi:[403,404.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google//Pixel XL/"},{ua:"Pixel XL"}],dpi:[537.9,533],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google//Pixel/"},{ua:"Pixel"}],dpi:[432.6,436.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC6435LVW/*"},{ua:"HTC6435LVW"}],dpi:[449.7,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC One XL/*"},{ua:"HTC One XL"}],dpi:[315.3,314.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"htc/*/Nexus 9/*"},{ua:"Nexus 9"}],dpi:289,bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One M9/*"},{ua:"HTC One M9"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One_M8/*"},{ua:"HTC One_M8"}],dpi:[449.7,447.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One/*"},{ua:"HTC One"}],dpi:472.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/Nexus 6P/*"},{ua:"Nexus 6P"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5X/*"},{ua:"Nexus 5X"}],dpi:[422,419.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS345/*"},{ua:"LGMS345"}],dpi:[221.7,219.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D800/*"},{ua:"LG-D800"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D850/*"},{ua:"LG-D850"}],dpi:[537.9,541.9],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/VS985 4G/*"},{ua:"VS985 4G"}],dpi:[537.9,535.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5/*"},{ua:"Nexus 5 "}],dpi:[442.4,444.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 4/*"},{ua:"Nexus 4"}],dpi:[319.8,318.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LG-P769/*"},{ua:"LG-P769"}],dpi:[240.6,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS323/*"},{ua:"LGMS323"}],dpi:[206.6,204.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGLS996/*"},{ua:"LGLS996"}],dpi:[403.4,401.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/4560MMX/*"},{ua:"4560MMX"}],dpi:[240,219.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/A250/*"},{ua:"Micromax A250"}],dpi:[480,446.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/Micromax AQ4501/*"},{ua:"Micromax AQ4501"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/DROID RAZR/*"},{ua:"DROID RAZR"}],dpi:[368.1,256.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT830C/*"},{ua:"XT830C"}],dpi:[254,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1021/*"},{ua:"XT1021"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1023/*"},{ua:"XT1023"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1028/*"},{ua:"XT1028"}],dpi:[326.6,327.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1034/*"},{ua:"XT1034"}],dpi:[326.6,328.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1053/*"},{ua:"XT1053"}],dpi:[315.3,316.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1562/*"},{ua:"XT1562"}],dpi:[403.4,402.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/Nexus 6/*"},{ua:"Nexus 6 "}],dpi:[494.3,489.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1063/*"},{ua:"XT1063"}],dpi:[295,296.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1064/*"},{ua:"XT1064"}],dpi:[295,295.6],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1092/*"},{ua:"XT1092"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1095/*"},{ua:"XT1095"}],dpi:[422,423.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/G4/*"},{ua:"Moto G (4)"}],dpi:401,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/A0001/*"},{ua:"A0001"}],dpi:[403.4,401],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1005/*"},{ua:"ONE E1005"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2005/*"},{ua:"ONE A2005"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OPPO/*/X909/*"},{ua:"X909"}],dpi:[442.4,444.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9082/*"},{ua:"GT-I9082"}],dpi:[184.7,185.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G360P/*"},{ua:"SM-G360P"}],dpi:[196.7,205.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Nexus S/*"},{ua:"Nexus S"}],dpi:[234.5,229.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[304.8,303.9],bw:5,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-T230NU/*"},{ua:"SM-T230NU"}],dpi:216,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SGH-T399/*"},{ua:"SGH-T399"}],dpi:[217.7,231.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N9005/*"},{ua:"SM-N9005"}],dpi:[386.4,387],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SM-N900A/*"},{ua:"SAMSUNG-SM-N900A"}],dpi:[386.4,387.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9500/*"},{ua:"GT-I9500"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/GT-I9505/*"},{ua:"GT-I9505"}],dpi:439.4,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900F/*"},{ua:"SM-G900F"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900M/*"},{ua:"SM-G900M"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G800F/*"},{ua:"SM-G800F"}],dpi:326.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G906S/*"},{ua:"SM-G906S"}],dpi:[562.7,572.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[306.7,304.8],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-T535/*"},{ua:"SM-T535"}],dpi:[142.6,136.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-N920C/*"},{ua:"SM-N920C"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920W8/*"},{ua:"SM-N920W8"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300I/*"},{ua:"GT-I9300I"}],dpi:[304.8,305.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9195/*"},{ua:"GT-I9195"}],dpi:[249.4,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SPH-L520/*"},{ua:"SPH-L520"}],dpi:[249.4,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SGH-I717/*"},{ua:"SAMSUNG-SGH-I717"}],dpi:285.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SPH-D710/*"},{ua:"SPH-D710"}],dpi:[217.7,204.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-N7100/*"},{ua:"GT-N7100"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SCH-I605/*"},{ua:"SCH-I605"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Galaxy Nexus/*"},{ua:"Galaxy Nexus"}],dpi:[315.3,314.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910H/*"},{ua:"SM-N910H"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910C/*"},{ua:"SM-N910C"}],dpi:[515.2,520.2],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G130M/*"},{ua:"SM-G130M"}],dpi:[165.9,164.8],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G928I/*"},{ua:"SM-G928I"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G920F/*"},{ua:"SM-G920F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G920P/*"},{ua:"SM-G920P"}],dpi:[522.5,577],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G925F/*"},{ua:"SM-G925F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G925V/*"},{ua:"SM-G925V"}],dpi:[522.5,576.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G935F/*"},{ua:"SM-G935F"}],dpi:534,bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/C6903/*"},{ua:"C6903"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/D6653/*"},{ua:"D6653"}],dpi:[428.6,427.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6653/*"},{ua:"E6653"}],dpi:[428.6,425.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6853/*"},{ua:"E6853"}],dpi:[403.4,401.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/SGP321/*"},{ua:"SGP321"}],dpi:[224.7,224.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"TCT/*/ALCATEL ONE TOUCH Fierce/*"},{ua:"ALCATEL ONE TOUCH Fierce"}],dpi:[240,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"THL/*/thl 5000/*"},{ua:"thl 5000"}],dpi:[480,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"ZTE/*/ZTE Blade L2/*"},{ua:"ZTE Blade L2" -}],dpi:240,bw:3,ac:500},{type:"ios",rules:[{res:[640,960]}],dpi:[325.1,328.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[640,1136]}],dpi:[317.1,320.2],bw:3,ac:1e3},{type:"ios",rules:[{res:[750,1334]}],dpi:326.4,bw:4,ac:1e3},{type:"ios",rules:[{res:[1242,2208]}],dpi:[453.6,458.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2001]}],dpi:[410.9,415.4],bw:4,ac:1e3}]};module.exports=DPDB_CACHE},{}],12:[function(_dereq_,module){function Dpdb(fetchOnline,onDeviceParamsUpdated){if(this.dpdb=DPDB_CACHE,this.recalculateDeviceParams_(),fetchOnline){this.onDeviceParamsUpdated=onDeviceParamsUpdated;var xhr=new XMLHttpRequest,obj=this;xhr.open("GET",ONLINE_DPDB_URL,!0),xhr.addEventListener("load",function(){obj.loading=!1,xhr.status>=200&&xhr.status<=299?(obj.dpdb=JSON.parse(xhr.response),obj.recalculateDeviceParams_()):console.error("Error loading online DPDB!")}),xhr.send()}}function DeviceParams(params){this.xdpi=params.xdpi,this.ydpi=params.ydpi,this.bevelMm=params.bevelMm}var DPDB_CACHE=_dereq_("./dpdb-cache.js"),Util=_dereq_("../util.js"),ONLINE_DPDB_URL="https://storage.googleapis.com/cardboard-dpdb/dpdb.json";Dpdb.prototype.getDeviceParams=function(){return this.deviceParams},Dpdb.prototype.recalculateDeviceParams_=function(){var newDeviceParams=this.calcDeviceParams_();newDeviceParams?(this.deviceParams=newDeviceParams,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Dpdb.prototype.calcDeviceParams_=function(){var db=this.dpdb;if(!db)return console.error("DPDB not available."),null;if(1!=db.format)return console.error("DPDB has unexpected format version."),null;if(!db.devices||!db.devices.length)return console.error("DPDB does not have a devices section."),null;var userAgent=navigator.userAgent||navigator.vendor||window.opera,width=Util.getScreenWidth(),height=Util.getScreenHeight();if(!db.devices)return console.error("DPDB has no devices section."),null;for(var i=0;icosHalfTheta?(this.w=-qb.w,this.x=-qb.x,this.y=-qb.y,this.z=-qb.z,cosHalfTheta=-cosHalfTheta):this.copy(qb),cosHalfTheta>=1)return this.w=w,this.x=x,this.y=y,this.z=z,this;var halfTheta=Math.acos(cosHalfTheta),sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001)return this.w=.5*(w+this.w),this.x=.5*(x+this.x),this.y=.5*(y+this.y),this.z=.5*(z+this.z),this;var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;return this.w=w*ratioA+this.w*ratioB,this.x=x*ratioA+this.x*ratioB,this.y=y*ratioA+this.y*ratioB,this.z=z*ratioA+this.z*ratioB,this},setFromUnitVectors:function(){var v1,r,EPS=1e-6;return function(vFrom,vTo){return void 0===v1&&(v1=new MathUtil.Vector3),r=vFrom.dot(vTo)+1,EPS>r?(r=0,Math.abs(vFrom.x)>Math.abs(vFrom.z)?v1.set(-vFrom.y,vFrom.x,0):v1.set(0,-vFrom.z,vFrom.y)):v1.crossVectors(vFrom,vTo),this.x=v1.x,this.y=v1.y,this.z=v1.z,this.w=r,this.normalize(),this}}()},module.exports=MathUtil},{}],15:[function(_dereq_,module){function MouseKeyboardVRDisplay(){this.displayName="Mouse and Keyboard VRDisplay (webvr-polyfill)",this.capabilities.hasOrientation=!0,window.addEventListener("keydown",this.onKeyDown_.bind(this)),window.addEventListener("mousemove",this.onMouseMove_.bind(this)),window.addEventListener("mousedown",this.onMouseDown_.bind(this)),window.addEventListener("mouseup",this.onMouseUp_.bind(this)),this.phi_=0,this.theta_=0,this.targetAngle_=null,this.angleAnimation_=null,this.orientation_=new MathUtil.Quaternion,this.rotateStart_=new MathUtil.Vector2,this.rotateEnd_=new MathUtil.Vector2,this.rotateDelta_=new MathUtil.Vector2,this.isDragging_=!1,this.orientationOut_=new Float32Array(4)}var VRDisplay=_dereq_("./base.js").VRDisplay,MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js"),KEY_SPEED=.15,KEY_ANIMATION_DURATION=80,MOUSE_SPEED_X=.5,MOUSE_SPEED_Y=.3;MouseKeyboardVRDisplay.prototype=new VRDisplay,MouseKeyboardVRDisplay.prototype.getImmediatePose=function(){return this.orientation_.setFromEulerYXZ(this.phi_,this.theta_,0),this.orientationOut_[0]=this.orientation_.x,this.orientationOut_[1]=this.orientation_.y,this.orientationOut_[2]=this.orientation_.z,this.orientationOut_[3]=this.orientation_.w,{position:null,orientation:this.orientationOut_,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},MouseKeyboardVRDisplay.prototype.onKeyDown_=function(e){38==e.keyCode?this.animatePhi_(this.phi_+KEY_SPEED):39==e.keyCode?this.animateTheta_(this.theta_-KEY_SPEED):40==e.keyCode?this.animatePhi_(this.phi_-KEY_SPEED):37==e.keyCode&&this.animateTheta_(this.theta_+KEY_SPEED)},MouseKeyboardVRDisplay.prototype.animateTheta_=function(targetAngle){this.animateKeyTransitions_("theta_",targetAngle)},MouseKeyboardVRDisplay.prototype.animatePhi_=function(targetAngle){targetAngle=Util.clamp(targetAngle,-Math.PI/2,Math.PI/2),this.animateKeyTransitions_("phi_",targetAngle)},MouseKeyboardVRDisplay.prototype.animateKeyTransitions_=function(angleName,targetAngle){this.angleAnimation_&&cancelAnimationFrame(this.angleAnimation_);var startAngle=this[angleName],startTime=new Date;this.angleAnimation_=requestAnimationFrame(function animate(){var elapsed=new Date-startTime;if(elapsed>=KEY_ANIMATION_DURATION)return this[angleName]=targetAngle,void cancelAnimationFrame(this.angleAnimation_);this.angleAnimation_=requestAnimationFrame(animate.bind(this));var percent=elapsed/KEY_ANIMATION_DURATION;this[angleName]=startAngle+(targetAngle-startAngle)*percent}.bind(this))},MouseKeyboardVRDisplay.prototype.onMouseDown_=function(e){this.rotateStart_.set(e.clientX,e.clientY),this.isDragging_=!0},MouseKeyboardVRDisplay.prototype.onMouseMove_=function(e){if(this.isDragging_||this.isPointerLocked_()){if(this.isPointerLocked_()){var movementX=e.movementX||e.mozMovementX||0,movementY=e.movementY||e.mozMovementY||0;this.rotateEnd_.set(this.rotateStart_.x-movementX,this.rotateStart_.y-movementY)}else this.rotateEnd_.set(e.clientX,e.clientY);this.rotateDelta_.subVectors(this.rotateEnd_,this.rotateStart_),this.rotateStart_.copy(this.rotateEnd_),this.phi_+=2*Math.PI*this.rotateDelta_.y/screen.height*MOUSE_SPEED_Y,this.theta_+=2*Math.PI*this.rotateDelta_.x/screen.width*MOUSE_SPEED_X,this.phi_=Util.clamp(this.phi_,-Math.PI/2,Math.PI/2)}},MouseKeyboardVRDisplay.prototype.onMouseUp_=function(){this.isDragging_=!1},MouseKeyboardVRDisplay.prototype.isPointerLocked_=function(){var el=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement;return void 0!==el},MouseKeyboardVRDisplay.prototype.resetPose=function(){this.phi_=0,this.theta_=0},module.exports=MouseKeyboardVRDisplay},{"./base.js":3,"./math-util.js":14,"./util.js":22}],16:[function(_dereq_,module){function RotateInstructions(){this.loadIcon_();var overlay=document.createElement("div"),s=overlay.style;s.position="fixed",s.top=0,s.right=0,s.bottom=0,s.left=0,s.backgroundColor="gray",s.fontFamily="sans-serif",s.zIndex=1e6;var img=document.createElement("img");img.src=this.icon;var s=img.style;s.marginLeft="25%",s.marginTop="25%",s.width="50%",overlay.appendChild(img);var text=document.createElement("div"),s=text.style;s.textAlign="center",s.fontSize="16px",s.lineHeight="24px",s.margin="24px 25%",s.width="50%",text.innerHTML="Place your phone into your Cardboard viewer.",overlay.appendChild(text);var snackbar=document.createElement("div"),s=snackbar.style;s.backgroundColor="#CFD8DC",s.position="fixed",s.bottom=0,s.width="100%",s.height="48px",s.padding="14px 24px",s.boxSizing="border-box",s.color="#656A6B",overlay.appendChild(snackbar);var snackbarText=document.createElement("div");snackbarText.style["float"]="left",snackbarText.innerHTML="No Cardboard viewer?";var snackbarButton=document.createElement("a");snackbarButton.href="https://www.google.com/get/cardboard/get-cardboard/",snackbarButton.innerHTML="get one",snackbarButton.target="_blank";var s=snackbarButton.style;s["float"]="right",s.fontWeight=600,s.textTransform="uppercase",s.borderLeft="1px solid gray",s.paddingLeft="24px",s.textDecoration="none",s.color="#656A6B",snackbar.appendChild(snackbarText),snackbar.appendChild(snackbarButton),this.overlay=overlay,this.text=text,this.hide()}var Util=_dereq_("./util.js");RotateInstructions.prototype.show=function(parent){parent||this.overlay.parentElement?parent&&(this.overlay.parentElement&&this.overlay.parentElement!=parent&&this.overlay.parentElement.removeChild(this.overlay),parent.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var img=this.overlay.querySelector("img"),s=img.style;Util.isLandscapeMode()?(s.width="20%",s.marginLeft="40%",s.marginTop="3%"):(s.width="50%",s.marginLeft="25%",s.marginTop="25%")},RotateInstructions.prototype.hide=function(){this.overlay.style.display="none"},RotateInstructions.prototype.showTemporarily=function(ms,parent){this.show(parent),this.timer=setTimeout(this.hide.bind(this),ms)},RotateInstructions.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},RotateInstructions.prototype.update=function(){this.disableShowTemporarily(),!Util.isLandscapeMode()&&Util.isMobile()?this.show():this.hide()},RotateInstructions.prototype.loadIcon_=function(){this.icon=Util.base64("image/svg+xml","PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE5OHB4IiBoZWlnaHQ9IjI0MHB4IiB2aWV3Qm94PSIwIDAgMTk4IDI0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4zICgxMjA4MSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+dHJhbnNpdGlvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPgogICAgICAgIDxnIGlkPSJ0cmFuc2l0aW9uIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTQtKy1JbXBvcnRlZC1MYXllcnMtQ29weS0rLUltcG9ydGVkLUxheWVycy1Db3B5LTItQ29weSIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHktNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDEwNy4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjYyNSwyLjUyNyBDMTQ5LjYyNSwyLjUyNyAxNTUuODA1LDYuMDk2IDE1Ni4zNjIsNi40MTggTDE1Ni4zNjIsNy4zMDQgQzE1Ni4zNjIsNy40ODEgMTU2LjM3NSw3LjY2NCAxNTYuNCw3Ljg1MyBDMTU2LjQxLDcuOTM0IDE1Ni40Miw4LjAxNSAxNTYuNDI3LDguMDk1IEMxNTYuNTY3LDkuNTEgMTU3LjQwMSwxMS4wOTMgMTU4LjUzMiwxMi4wOTQgTDE2NC4yNTIsMTcuMTU2IEwxNjQuMzMzLDE3LjA2NiBDMTY0LjMzMywxNy4wNjYgMTY4LjcxNSwxNC41MzYgMTY5LjU2OCwxNC4wNDIgQzE3MS4wMjUsMTQuODgzIDE5NS41MzgsMjkuMDM1IDE5NS41MzgsMjkuMDM1IEwxOTUuNTM4LDgzLjAzNiBDMTk1LjUzOCw4My44MDcgMTk1LjE1Miw4NC4yNTMgMTk0LjU5LDg0LjI1MyBDMTk0LjM1Nyw4NC4yNTMgMTk0LjA5NSw4NC4xNzcgMTkzLjgxOCw4NC4wMTcgTDE2OS44NTEsNzAuMTc5IEwxNjkuODM3LDcwLjIwMyBMMTQyLjUxNSw4NS45NzggTDE0MS42NjUsODQuNjU1IEMxMzYuOTM0LDgzLjEyNiAxMzEuOTE3LDgxLjkxNSAxMjYuNzE0LDgxLjA0NSBDMTI2LjcwOSw4MS4wNiAxMjYuNzA3LDgxLjA2OSAxMjYuNzA3LDgxLjA2OSBMMTIxLjY0LDk4LjAzIEwxMTMuNzQ5LDEwMi41ODYgTDExMy43MTIsMTAyLjUyMyBMMTEzLjcxMiwxMzAuMTEzIEMxMTMuNzEyLDEzMC44ODUgMTEzLjMyNiwxMzEuMzMgMTEyLjc2NCwxMzEuMzMgQzExMi41MzIsMTMxLjMzIDExMi4yNjksMTMxLjI1NCAxMTEuOTkyLDEzMS4wOTQgTDY5LjUxOSwxMDYuNTcyIEM2OC41NjksMTA2LjAyMyA2Ny43OTksMTA0LjY5NSA2Ny43OTksMTAzLjYwNSBMNjcuNzk5LDEwMi41NyBMNjcuNzc4LDEwMi42MTcgQzY3LjI3LDEwMi4zOTMgNjYuNjQ4LDEwMi4yNDkgNjUuOTYyLDEwMi4yMTggQzY1Ljg3NSwxMDIuMjE0IDY1Ljc4OCwxMDIuMjEyIDY1LjcwMSwxMDIuMjEyIEM2NS42MDYsMTAyLjIxMiA2NS41MTEsMTAyLjIxNSA2NS40MTYsMTAyLjIxOSBDNjUuMTk1LDEwMi4yMjkgNjQuOTc0LDEwMi4yMzUgNjQuNzU0LDEwMi4yMzUgQzY0LjMzMSwxMDIuMjM1IDYzLjkxMSwxMDIuMjE2IDYzLjQ5OCwxMDIuMTc4IEM2MS44NDMsMTAyLjAyNSA2MC4yOTgsMTAxLjU3OCA1OS4wOTQsMTAwLjg4MiBMMTIuNTE4LDczLjk5MiBMMTIuNTIzLDc0LjAwNCBMMi4yNDUsNTUuMjU0IEMxLjI0NCw1My40MjcgMi4wMDQsNTEuMDM4IDMuOTQzLDQ5LjkxOCBMNTkuOTU0LDE3LjU3MyBDNjAuNjI2LDE3LjE4NSA2MS4zNSwxNy4wMDEgNjIuMDUzLDE3LjAwMSBDNjMuMzc5LDE3LjAwMSA2NC42MjUsMTcuNjYgNjUuMjgsMTguODU0IEw2NS4yODUsMTguODUxIEw2NS41MTIsMTkuMjY0IEw2NS41MDYsMTkuMjY4IEM2NS45MDksMjAuMDAzIDY2LjQwNSwyMC42OCA2Ni45ODMsMjEuMjg2IEw2Ny4yNiwyMS41NTYgQzY5LjE3NCwyMy40MDYgNzEuNzI4LDI0LjM1NyA3NC4zNzMsMjQuMzU3IEM3Ni4zMjIsMjQuMzU3IDc4LjMyMSwyMy44NCA4MC4xNDgsMjIuNzg1IEM4MC4xNjEsMjIuNzg1IDg3LjQ2NywxOC41NjYgODcuNDY3LDE4LjU2NiBDODguMTM5LDE4LjE3OCA4OC44NjMsMTcuOTk0IDg5LjU2NiwxNy45OTQgQzkwLjg5MiwxNy45OTQgOTIuMTM4LDE4LjY1MiA5Mi43OTIsMTkuODQ3IEw5Ni4wNDIsMjUuNzc1IEw5Ni4wNjQsMjUuNzU3IEwxMDIuODQ5LDI5LjY3NCBMMTAyLjc0NCwyOS40OTIgTDE0OS42MjUsMi41MjcgTTE0OS42MjUsMC44OTIgQzE0OS4zNDMsMC44OTIgMTQ5LjA2MiwwLjk2NSAxNDguODEsMS4xMSBMMTAyLjY0MSwyNy42NjYgTDk3LjIzMSwyNC41NDIgTDk0LjIyNiwxOS4wNjEgQzkzLjMxMywxNy4zOTQgOTEuNTI3LDE2LjM1OSA4OS41NjYsMTYuMzU4IEM4OC41NTUsMTYuMzU4IDg3LjU0NiwxNi42MzIgODYuNjQ5LDE3LjE1IEM4My44NzgsMTguNzUgNzkuNjg3LDIxLjE2OSA3OS4zNzQsMjEuMzQ1IEM3OS4zNTksMjEuMzUzIDc5LjM0NSwyMS4zNjEgNzkuMzMsMjEuMzY5IEM3Ny43OTgsMjIuMjU0IDc2LjA4NCwyMi43MjIgNzQuMzczLDIyLjcyMiBDNzIuMDgxLDIyLjcyMiA2OS45NTksMjEuODkgNjguMzk3LDIwLjM4IEw2OC4xNDUsMjAuMTM1IEM2Ny43MDYsMTkuNjcyIDY3LjMyMywxOS4xNTYgNjcuMDA2LDE4LjYwMSBDNjYuOTg4LDE4LjU1OSA2Ni45NjgsMTguNTE5IDY2Ljk0NiwxOC40NzkgTDY2LjcxOSwxOC4wNjUgQzY2LjY5LDE4LjAxMiA2Ni42NTgsMTcuOTYgNjYuNjI0LDE3LjkxMSBDNjUuNjg2LDE2LjMzNyA2My45NTEsMTUuMzY2IDYyLjA1MywxNS4zNjYgQzYxLjA0MiwxNS4zNjYgNjAuMDMzLDE1LjY0IDU5LjEzNiwxNi4xNTggTDMuMTI1LDQ4LjUwMiBDMC40MjYsNTAuMDYxIC0wLjYxMyw1My40NDIgMC44MTEsNTYuMDQgTDExLjA4OSw3NC43OSBDMTEuMjY2LDc1LjExMyAxMS41MzcsNzUuMzUzIDExLjg1LDc1LjQ5NCBMNTguMjc2LDEwMi4yOTggQzU5LjY3OSwxMDMuMTA4IDYxLjQzMywxMDMuNjMgNjMuMzQ4LDEwMy44MDYgQzYzLjgxMiwxMDMuODQ4IDY0LjI4NSwxMDMuODcgNjQuNzU0LDEwMy44NyBDNjUsMTAzLjg3IDY1LjI0OSwxMDMuODY0IDY1LjQ5NCwxMDMuODUyIEM2NS41NjMsMTAzLjg0OSA2NS42MzIsMTAzLjg0NyA2NS43MDEsMTAzLjg0NyBDNjUuNzY0LDEwMy44NDcgNjUuODI4LDEwMy44NDkgNjUuODksMTAzLjg1MiBDNjUuOTg2LDEwMy44NTYgNjYuMDgsMTAzLjg2MyA2Ni4xNzMsMTAzLjg3NCBDNjYuMjgyLDEwNS40NjcgNjcuMzMyLDEwNy4xOTcgNjguNzAyLDEwNy45ODggTDExMS4xNzQsMTMyLjUxIEMxMTEuNjk4LDEzMi44MTIgMTEyLjIzMiwxMzIuOTY1IDExMi43NjQsMTMyLjk2NSBDMTE0LjI2MSwxMzIuOTY1IDExNS4zNDcsMTMxLjc2NSAxMTUuMzQ3LDEzMC4xMTMgTDExNS4zNDcsMTAzLjU1MSBMMTIyLjQ1OCw5OS40NDYgQzEyMi44MTksOTkuMjM3IDEyMy4wODcsOTguODk4IDEyMy4yMDcsOTguNDk4IEwxMjcuODY1LDgyLjkwNSBDMTMyLjI3OSw4My43MDIgMTM2LjU1Nyw4NC43NTMgMTQwLjYwNyw4Ni4wMzMgTDE0MS4xNCw4Ni44NjIgQzE0MS40NTEsODcuMzQ2IDE0MS45NzcsODcuNjEzIDE0Mi41MTYsODcuNjEzIEMxNDIuNzk0LDg3LjYxMyAxNDMuMDc2LDg3LjU0MiAxNDMuMzMzLDg3LjM5MyBMMTY5Ljg2NSw3Mi4wNzYgTDE5Myw4NS40MzMgQzE5My41MjMsODUuNzM1IDE5NC4wNTgsODUuODg4IDE5NC41OSw4NS44ODggQzE5Ni4wODcsODUuODg4IDE5Ny4xNzMsODQuNjg5IDE5Ny4xNzMsODMuMDM2IEwxOTcuMTczLDI5LjAzNSBDMTk3LjE3MywyOC40NTEgMTk2Ljg2MSwyNy45MTEgMTk2LjM1NSwyNy42MTkgQzE5Ni4zNTUsMjcuNjE5IDE3MS44NDMsMTMuNDY3IDE3MC4zODUsMTIuNjI2IEMxNzAuMTMyLDEyLjQ4IDE2OS44NSwxMi40MDcgMTY5LjU2OCwxMi40MDcgQzE2OS4yODUsMTIuNDA3IDE2OS4wMDIsMTIuNDgxIDE2OC43NDksMTIuNjI3IEMxNjguMTQzLDEyLjk3OCAxNjUuNzU2LDE0LjM1NyAxNjQuNDI0LDE1LjEyNSBMMTU5LjYxNSwxMC44NyBDMTU4Ljc5NiwxMC4xNDUgMTU4LjE1NCw4LjkzNyAxNTguMDU0LDcuOTM0IEMxNTguMDQ1LDcuODM3IDE1OC4wMzQsNy43MzkgMTU4LjAyMSw3LjY0IEMxNTguMDA1LDcuNTIzIDE1Ny45OTgsNy40MSAxNTcuOTk4LDcuMzA0IEwxNTcuOTk4LDYuNDE4IEMxNTcuOTk4LDUuODM0IDE1Ny42ODYsNS4yOTUgMTU3LjE4MSw1LjAwMiBDMTU2LjYyNCw0LjY4IDE1MC40NDIsMS4xMTEgMTUwLjQ0MiwxLjExMSBDMTUwLjE4OSwwLjk2NSAxNDkuOTA3LDAuODkyIDE0OS42MjUsMC44OTIiIGlkPSJGaWxsLTEiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTYuMDI3LDI1LjYzNiBMMTQyLjYwMyw1Mi41MjcgQzE0My44MDcsNTMuMjIyIDE0NC41ODIsNTQuMTE0IDE0NC44NDUsNTUuMDY4IEwxNDQuODM1LDU1LjA3NSBMNjMuNDYxLDEwMi4wNTcgTDYzLjQ2LDEwMi4wNTcgQzYxLjgwNiwxMDEuOTA1IDYwLjI2MSwxMDEuNDU3IDU5LjA1NywxMDAuNzYyIEwxMi40ODEsNzMuODcxIEw5Ni4wMjcsMjUuNjM2IiBpZD0iRmlsbC0yIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYzLjQ2MSwxMDIuMTc0IEM2My40NTMsMTAyLjE3NCA2My40NDYsMTAyLjE3NCA2My40MzksMTAyLjE3MiBDNjEuNzQ2LDEwMi4wMTYgNjAuMjExLDEwMS41NjMgNTguOTk4LDEwMC44NjMgTDEyLjQyMiw3My45NzMgQzEyLjM4Niw3My45NTIgMTIuMzY0LDczLjkxNCAxMi4zNjQsNzMuODcxIEMxMi4zNjQsNzMuODMgMTIuMzg2LDczLjc5MSAxMi40MjIsNzMuNzcgTDk1Ljk2OCwyNS41MzUgQzk2LjAwNCwyNS41MTQgOTYuMDQ5LDI1LjUxNCA5Ni4wODUsMjUuNTM1IEwxNDIuNjYxLDUyLjQyNiBDMTQzLjg4OCw1My4xMzQgMTQ0LjY4Miw1NC4wMzggMTQ0Ljk1Nyw1NS4wMzcgQzE0NC45Nyw1NS4wODMgMTQ0Ljk1Myw1NS4xMzMgMTQ0LjkxNSw1NS4xNjEgQzE0NC45MTEsNTUuMTY1IDE0NC44OTgsNTUuMTc0IDE0NC44OTQsNTUuMTc3IEw2My41MTksMTAyLjE1OCBDNjMuNTAxLDEwMi4xNjkgNjMuNDgxLDEwMi4xNzQgNjMuNDYxLDEwMi4xNzQgTDYzLjQ2MSwxMDIuMTc0IFogTTEyLjcxNCw3My44NzEgTDU5LjExNSwxMDAuNjYxIEM2MC4yOTMsMTAxLjM0MSA2MS43ODYsMTAxLjc4MiA2My40MzUsMTAxLjkzNyBMMTQ0LjcwNyw1NS4wMTUgQzE0NC40MjgsNTQuMTA4IDE0My42ODIsNTMuMjg1IDE0Mi41NDQsNTIuNjI4IEw5Ni4wMjcsMjUuNzcxIEwxMi43MTQsNzMuODcxIEwxMi43MTQsNzMuODcxIFoiIGlkPSJGaWxsLTMiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ4LjMyNyw1OC40NzEgQzE0OC4xNDUsNTguNDggMTQ3Ljk2Miw1OC40OCAxNDcuNzgxLDU4LjQ3MiBDMTQ1Ljg4Nyw1OC4zODkgMTQ0LjQ3OSw1Ny40MzQgMTQ0LjYzNiw1Ni4zNCBDMTQ0LjY4OSw1NS45NjcgMTQ0LjY2NCw1NS41OTcgMTQ0LjU2NCw1NS4yMzUgTDYzLjQ2MSwxMDIuMDU3IEM2NC4wODksMTAyLjExNSA2NC43MzMsMTAyLjEzIDY1LjM3OSwxMDIuMDk5IEM2NS41NjEsMTAyLjA5IDY1Ljc0MywxMDIuMDkgNjUuOTI1LDEwMi4wOTggQzY3LjgxOSwxMDIuMTgxIDY5LjIyNywxMDMuMTM2IDY5LjA3LDEwNC4yMyBMMTQ4LjMyNyw1OC40NzEiIGlkPSJGaWxsLTQiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNjkuMDcsMTA0LjM0NyBDNjkuMDQ4LDEwNC4zNDcgNjkuMDI1LDEwNC4zNCA2OS4wMDUsMTA0LjMyNyBDNjguOTY4LDEwNC4zMDEgNjguOTQ4LDEwNC4yNTcgNjguOTU1LDEwNC4yMTMgQzY5LDEwMy44OTYgNjguODk4LDEwMy41NzYgNjguNjU4LDEwMy4yODggQzY4LjE1MywxMDIuNjc4IDY3LjEwMywxMDIuMjY2IDY1LjkyLDEwMi4yMTQgQzY1Ljc0MiwxMDIuMjA2IDY1LjU2MywxMDIuMjA3IDY1LjM4NSwxMDIuMjE1IEM2NC43NDIsMTAyLjI0NiA2NC4wODcsMTAyLjIzMiA2My40NSwxMDIuMTc0IEM2My4zOTksMTAyLjE2OSA2My4zNTgsMTAyLjEzMiA2My4zNDcsMTAyLjA4MiBDNjMuMzM2LDEwMi4wMzMgNjMuMzU4LDEwMS45ODEgNjMuNDAyLDEwMS45NTYgTDE0NC41MDYsNTUuMTM0IEMxNDQuNTM3LDU1LjExNiAxNDQuNTc1LDU1LjExMyAxNDQuNjA5LDU1LjEyNyBDMTQ0LjY0Miw1NS4xNDEgMTQ0LjY2OCw1NS4xNyAxNDQuNjc3LDU1LjIwNCBDMTQ0Ljc4MSw1NS41ODUgMTQ0LjgwNiw1NS45NzIgMTQ0Ljc1MSw1Ni4zNTcgQzE0NC43MDYsNTYuNjczIDE0NC44MDgsNTYuOTk0IDE0NS4wNDcsNTcuMjgyIEMxNDUuNTUzLDU3Ljg5MiAxNDYuNjAyLDU4LjMwMyAxNDcuNzg2LDU4LjM1NSBDMTQ3Ljk2NCw1OC4zNjMgMTQ4LjE0Myw1OC4zNjMgMTQ4LjMyMSw1OC4zNTQgQzE0OC4zNzcsNTguMzUyIDE0OC40MjQsNTguMzg3IDE0OC40MzksNTguNDM4IEMxNDguNDU0LDU4LjQ5IDE0OC40MzIsNTguNTQ1IDE0OC4zODUsNTguNTcyIEw2OS4xMjksMTA0LjMzMSBDNjkuMTExLDEwNC4zNDIgNjkuMDksMTA0LjM0NyA2OS4wNywxMDQuMzQ3IEw2OS4wNywxMDQuMzQ3IFogTTY1LjY2NSwxMDEuOTc1IEM2NS43NTQsMTAxLjk3NSA2NS44NDIsMTAxLjk3NyA2NS45MywxMDEuOTgxIEM2Ny4xOTYsMTAyLjAzNyA2OC4yODMsMTAyLjQ2OSA2OC44MzgsMTAzLjEzOSBDNjkuMDY1LDEwMy40MTMgNjkuMTg4LDEwMy43MTQgNjkuMTk4LDEwNC4wMjEgTDE0Ny44ODMsNTguNTkyIEMxNDcuODQ3LDU4LjU5MiAxNDcuODExLDU4LjU5MSAxNDcuNzc2LDU4LjU4OSBDMTQ2LjUwOSw1OC41MzMgMTQ1LjQyMiw1OC4xIDE0NC44NjcsNTcuNDMxIEMxNDQuNTg1LDU3LjA5MSAxNDQuNDY1LDU2LjcwNyAxNDQuNTIsNTYuMzI0IEMxNDQuNTYzLDU2LjAyMSAxNDQuNTUyLDU1LjcxNiAxNDQuNDg4LDU1LjQxNCBMNjMuODQ2LDEwMS45NyBDNjQuMzUzLDEwMi4wMDIgNjQuODY3LDEwMi4wMDYgNjUuMzc0LDEwMS45ODIgQzY1LjQ3MSwxMDEuOTc3IDY1LjU2OCwxMDEuOTc1IDY1LjY2NSwxMDEuOTc1IEw2NS42NjUsMTAxLjk3NSBaIiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIuMjA4LDU1LjEzNCBDMS4yMDcsNTMuMzA3IDEuOTY3LDUwLjkxNyAzLjkwNiw0OS43OTcgTDU5LjkxNywxNy40NTMgQzYxLjg1NiwxNi4zMzMgNjQuMjQxLDE2LjkwNyA2NS4yNDMsMTguNzM0IEw2NS40NzUsMTkuMTQ0IEM2NS44NzIsMTkuODgyIDY2LjM2OCwyMC41NiA2Ni45NDUsMjEuMTY1IEw2Ny4yMjMsMjEuNDM1IEM3MC41NDgsMjQuNjQ5IDc1LjgwNiwyNS4xNTEgODAuMTExLDIyLjY2NSBMODcuNDMsMTguNDQ1IEM4OS4zNywxNy4zMjYgOTEuNzU0LDE3Ljg5OSA5Mi43NTUsMTkuNzI3IEw5Ni4wMDUsMjUuNjU1IEwxMi40ODYsNzMuODg0IEwyLjIwOCw1NS4xMzQgWiIgaWQ9IkZpbGwtNiIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi40ODYsNzQuMDAxIEMxMi40NzYsNzQuMDAxIDEyLjQ2NSw3My45OTkgMTIuNDU1LDczLjk5NiBDMTIuNDI0LDczLjk4OCAxMi4zOTksNzMuOTY3IDEyLjM4NCw3My45NCBMMi4xMDYsNTUuMTkgQzEuMDc1LDUzLjMxIDEuODU3LDUwLjg0NSAzLjg0OCw0OS42OTYgTDU5Ljg1OCwxNy4zNTIgQzYwLjUyNSwxNi45NjcgNjEuMjcxLDE2Ljc2NCA2Mi4wMTYsMTYuNzY0IEM2My40MzEsMTYuNzY0IDY0LjY2NiwxNy40NjYgNjUuMzI3LDE4LjY0NiBDNjUuMzM3LDE4LjY1NCA2NS4zNDUsMTguNjYzIDY1LjM1MSwxOC42NzQgTDY1LjU3OCwxOS4wODggQzY1LjU4NCwxOS4xIDY1LjU4OSwxOS4xMTIgNjUuNTkxLDE5LjEyNiBDNjUuOTg1LDE5LjgzOCA2Ni40NjksMjAuNDk3IDY3LjAzLDIxLjA4NSBMNjcuMzA1LDIxLjM1MSBDNjkuMTUxLDIzLjEzNyA3MS42NDksMjQuMTIgNzQuMzM2LDI0LjEyIEM3Ni4zMTMsMjQuMTIgNzguMjksMjMuNTgyIDgwLjA1MywyMi41NjMgQzgwLjA2NCwyMi41NTcgODAuMDc2LDIyLjU1MyA4MC4wODgsMjIuNTUgTDg3LjM3MiwxOC4zNDQgQzg4LjAzOCwxNy45NTkgODguNzg0LDE3Ljc1NiA4OS41MjksMTcuNzU2IEM5MC45NTYsMTcuNzU2IDkyLjIwMSwxOC40NzIgOTIuODU4LDE5LjY3IEw5Ni4xMDcsMjUuNTk5IEM5Ni4xMzgsMjUuNjU0IDk2LjExOCwyNS43MjQgOTYuMDYzLDI1Ljc1NiBMMTIuNTQ1LDczLjk4NSBDMTIuNTI2LDczLjk5NiAxMi41MDYsNzQuMDAxIDEyLjQ4Niw3NC4wMDEgTDEyLjQ4Niw3NC4wMDEgWiBNNjIuMDE2LDE2Ljk5NyBDNjEuMzEyLDE2Ljk5NyA2MC42MDYsMTcuMTkgNTkuOTc1LDE3LjU1NCBMMy45NjUsNDkuODk5IEMyLjA4Myw1MC45ODUgMS4zNDEsNTMuMzA4IDIuMzEsNTUuMDc4IEwxMi41MzEsNzMuNzIzIEw5NS44NDgsMjUuNjExIEw5Mi42NTMsMTkuNzgyIEM5Mi4wMzgsMTguNjYgOTAuODcsMTcuOTkgODkuNTI5LDE3Ljk5IEM4OC44MjUsMTcuOTkgODguMTE5LDE4LjE4MiA4Ny40ODksMTguNTQ3IEw4MC4xNzIsMjIuNzcyIEM4MC4xNjEsMjIuNzc4IDgwLjE0OSwyMi43ODIgODAuMTM3LDIyLjc4NSBDNzguMzQ2LDIzLjgxMSA3Ni4zNDEsMjQuMzU0IDc0LjMzNiwyNC4zNTQgQzcxLjU4OCwyNC4zNTQgNjkuMDMzLDIzLjM0NyA2Ny4xNDIsMjEuNTE5IEw2Ni44NjQsMjEuMjQ5IEM2Ni4yNzcsMjAuNjM0IDY1Ljc3NCwxOS45NDcgNjUuMzY3LDE5LjIwMyBDNjUuMzYsMTkuMTkyIDY1LjM1NiwxOS4xNzkgNjUuMzU0LDE5LjE2NiBMNjUuMTYzLDE4LjgxOSBDNjUuMTU0LDE4LjgxMSA2NS4xNDYsMTguODAxIDY1LjE0LDE4Ljc5IEM2NC41MjUsMTcuNjY3IDYzLjM1NywxNi45OTcgNjIuMDE2LDE2Ljk5NyBMNjIuMDE2LDE2Ljk5NyBaIiBpZD0iRmlsbC03IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTQyLjQzNCw0OC44MDggTDQyLjQzNCw0OC44MDggQzM5LjkyNCw0OC44MDcgMzcuNzM3LDQ3LjU1IDM2LjU4Miw0NS40NDMgQzM0Ljc3MSw0Mi4xMzkgMzYuMTQ0LDM3LjgwOSAzOS42NDEsMzUuNzg5IEw1MS45MzIsMjguNjkxIEM1My4xMDMsMjguMDE1IDU0LjQxMywyNy42NTggNTUuNzIxLDI3LjY1OCBDNTguMjMxLDI3LjY1OCA2MC40MTgsMjguOTE2IDYxLjU3MywzMS4wMjMgQzYzLjM4NCwzNC4zMjcgNjIuMDEyLDM4LjY1NyA1OC41MTQsNDAuNjc3IEw0Ni4yMjMsNDcuNzc1IEM0NS4wNTMsNDguNDUgNDMuNzQyLDQ4LjgwOCA0Mi40MzQsNDguODA4IEw0Mi40MzQsNDguODA4IFogTTU1LjcyMSwyOC4xMjUgQzU0LjQ5NSwyOC4xMjUgNTMuMjY1LDI4LjQ2MSA1Mi4xNjYsMjkuMDk2IEwzOS44NzUsMzYuMTk0IEMzNi41OTYsMzguMDg3IDM1LjMwMiw0Mi4xMzYgMzYuOTkyLDQ1LjIxOCBDMzguMDYzLDQ3LjE3MyA0MC4wOTgsNDguMzQgNDIuNDM0LDQ4LjM0IEM0My42NjEsNDguMzQgNDQuODksNDguMDA1IDQ1Ljk5LDQ3LjM3IEw1OC4yODEsNDAuMjcyIEM2MS41NiwzOC4zNzkgNjIuODUzLDM0LjMzIDYxLjE2NCwzMS4yNDggQzYwLjA5MiwyOS4yOTMgNTguMDU4LDI4LjEyNSA1NS43MjEsMjguMTI1IEw1NS43MjEsMjguMTI1IFoiIGlkPSJGaWxsLTgiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjU4OCwyLjQwNyBDMTQ5LjU4OCwyLjQwNyAxNTUuNzY4LDUuOTc1IDE1Ni4zMjUsNi4yOTcgTDE1Ni4zMjUsNy4xODQgQzE1Ni4zMjUsNy4zNiAxNTYuMzM4LDcuNTQ0IDE1Ni4zNjIsNy43MzMgQzE1Ni4zNzMsNy44MTQgMTU2LjM4Miw3Ljg5NCAxNTYuMzksNy45NzUgQzE1Ni41Myw5LjM5IDE1Ny4zNjMsMTAuOTczIDE1OC40OTUsMTEuOTc0IEwxNjUuODkxLDE4LjUxOSBDMTY2LjA2OCwxOC42NzUgMTY2LjI0OSwxOC44MTQgMTY2LjQzMiwxOC45MzQgQzE2OC4wMTEsMTkuOTc0IDE2OS4zODIsMTkuNCAxNjkuNDk0LDE3LjY1MiBDMTY5LjU0MywxNi44NjggMTY5LjU1MSwxNi4wNTcgMTY5LjUxNywxNS4yMjMgTDE2OS41MTQsMTUuMDYzIEwxNjkuNTE0LDEzLjkxMiBDMTcwLjc4LDE0LjY0MiAxOTUuNTAxLDI4LjkxNSAxOTUuNTAxLDI4LjkxNSBMMTk1LjUwMSw4Mi45MTUgQzE5NS41MDEsODQuMDA1IDE5NC43MzEsODQuNDQ1IDE5My43ODEsODMuODk3IEwxNTEuMzA4LDU5LjM3NCBDMTUwLjM1OCw1OC44MjYgMTQ5LjU4OCw1Ny40OTcgMTQ5LjU4OCw1Ni40MDggTDE0OS41ODgsMjIuMzc1IiBpZD0iRmlsbC05IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE5NC41NTMsODQuMjUgQzE5NC4yOTYsODQuMjUgMTk0LjAxMyw4NC4xNjUgMTkzLjcyMiw4My45OTcgTDE1MS4yNSw1OS40NzYgQzE1MC4yNjksNTguOTA5IDE0OS40NzEsNTcuNTMzIDE0OS40NzEsNTYuNDA4IEwxNDkuNDcxLDIyLjM3NSBMMTQ5LjcwNSwyMi4zNzUgTDE0OS43MDUsNTYuNDA4IEMxNDkuNzA1LDU3LjQ1OSAxNTAuNDUsNTguNzQ0IDE1MS4zNjYsNTkuMjc0IEwxOTMuODM5LDgzLjc5NSBDMTk0LjI2Myw4NC4wNCAxOTQuNjU1LDg0LjA4MyAxOTQuOTQyLDgzLjkxNyBDMTk1LjIyNyw4My43NTMgMTk1LjM4NCw4My4zOTcgMTk1LjM4NCw4Mi45MTUgTDE5NS4zODQsMjguOTgyIEMxOTQuMTAyLDI4LjI0MiAxNzIuMTA0LDE1LjU0MiAxNjkuNjMxLDE0LjExNCBMMTY5LjYzNCwxNS4yMiBDMTY5LjY2OCwxNi4wNTIgMTY5LjY2LDE2Ljg3NCAxNjkuNjEsMTcuNjU5IEMxNjkuNTU2LDE4LjUwMyAxNjkuMjE0LDE5LjEyMyAxNjguNjQ3LDE5LjQwNSBDMTY4LjAyOCwxOS43MTQgMTY3LjE5NywxOS41NzggMTY2LjM2NywxOS4wMzIgQzE2Ni4xODEsMTguOTA5IDE2NS45OTUsMTguNzY2IDE2NS44MTQsMTguNjA2IEwxNTguNDE3LDEyLjA2MiBDMTU3LjI1OSwxMS4wMzYgMTU2LjQxOCw5LjQzNyAxNTYuMjc0LDcuOTg2IEMxNTYuMjY2LDcuOTA3IDE1Ni4yNTcsNy44MjcgMTU2LjI0Nyw3Ljc0OCBDMTU2LjIyMSw3LjU1NSAxNTYuMjA5LDcuMzY1IDE1Ni4yMDksNy4xODQgTDE1Ni4yMDksNi4zNjQgQzE1NS4zNzUsNS44ODMgMTQ5LjUyOSwyLjUwOCAxNDkuNTI5LDIuNTA4IEwxNDkuNjQ2LDIuMzA2IEMxNDkuNjQ2LDIuMzA2IDE1NS44MjcsNS44NzQgMTU2LjM4NCw2LjE5NiBMMTU2LjQ0Miw2LjIzIEwxNTYuNDQyLDcuMTg0IEMxNTYuNDQyLDcuMzU1IDE1Ni40NTQsNy41MzUgMTU2LjQ3OCw3LjcxNyBDMTU2LjQ4OSw3LjggMTU2LjQ5OSw3Ljg4MiAxNTYuNTA3LDcuOTYzIEMxNTYuNjQ1LDkuMzU4IDE1Ny40NTUsMTAuODk4IDE1OC41NzIsMTEuODg2IEwxNjUuOTY5LDE4LjQzMSBDMTY2LjE0MiwxOC41ODQgMTY2LjMxOSwxOC43MiAxNjYuNDk2LDE4LjgzNyBDMTY3LjI1NCwxOS4zMzYgMTY4LDE5LjQ2NyAxNjguNTQzLDE5LjE5NiBDMTY5LjAzMywxOC45NTMgMTY5LjMyOSwxOC40MDEgMTY5LjM3NywxNy42NDUgQzE2OS40MjcsMTYuODY3IDE2OS40MzQsMTYuMDU0IDE2OS40MDEsMTUuMjI4IEwxNjkuMzk3LDE1LjA2NSBMMTY5LjM5NywxMy43MSBMMTY5LjU3MiwxMy44MSBDMTcwLjgzOSwxNC41NDEgMTk1LjU1OSwyOC44MTQgMTk1LjU1OSwyOC44MTQgTDE5NS42MTgsMjguODQ3IEwxOTUuNjE4LDgyLjkxNSBDMTk1LjYxOCw4My40ODQgMTk1LjQyLDgzLjkxMSAxOTUuMDU5LDg0LjExOSBDMTk0LjkwOCw4NC4yMDYgMTk0LjczNyw4NC4yNSAxOTQuNTUzLDg0LjI1IiBpZD0iRmlsbC0xMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDUuNjg1LDU2LjE2MSBMMTY5LjgsNzAuMDgzIEwxNDMuODIyLDg1LjA4MSBMMTQyLjM2LDg0Ljc3NCBDMTM1LjgyNiw4Mi42MDQgMTI4LjczMiw4MS4wNDYgMTIxLjM0MSw4MC4xNTggQzExNi45NzYsNzkuNjM0IDExMi42NzgsODEuMjU0IDExMS43NDMsODMuNzc4IEMxMTEuNTA2LDg0LjQxNCAxMTEuNTAzLDg1LjA3MSAxMTEuNzMyLDg1LjcwNiBDMTEzLjI3LDg5Ljk3MyAxMTUuOTY4LDk0LjA2OSAxMTkuNzI3LDk3Ljg0MSBMMTIwLjI1OSw5OC42ODYgQzEyMC4yNiw5OC42ODUgOTQuMjgyLDExMy42ODMgOTQuMjgyLDExMy42ODMgTDcwLjE2Nyw5OS43NjEgTDE0NS42ODUsNTYuMTYxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05NC4yODIsMTEzLjgxOCBMOTQuMjIzLDExMy43ODUgTDY5LjkzMyw5OS43NjEgTDcwLjEwOCw5OS42NiBMMTQ1LjY4NSw1Ni4wMjYgTDE0NS43NDMsNTYuMDU5IEwxNzAuMDMzLDcwLjA4MyBMMTQzLjg0Miw4NS4yMDUgTDE0My43OTcsODUuMTk1IEMxNDMuNzcyLDg1LjE5IDE0Mi4zMzYsODQuODg4IDE0Mi4zMzYsODQuODg4IEMxMzUuNzg3LDgyLjcxNCAxMjguNzIzLDgxLjE2MyAxMjEuMzI3LDgwLjI3NCBDMTIwLjc4OCw4MC4yMDkgMTIwLjIzNiw4MC4xNzcgMTE5LjY4OSw4MC4xNzcgQzExNS45MzEsODAuMTc3IDExMi42MzUsODEuNzA4IDExMS44NTIsODMuODE5IEMxMTEuNjI0LDg0LjQzMiAxMTEuNjIxLDg1LjA1MyAxMTEuODQyLDg1LjY2NyBDMTEzLjM3Nyw4OS45MjUgMTE2LjA1OCw5My45OTMgMTE5LjgxLDk3Ljc1OCBMMTE5LjgyNiw5Ny43NzkgTDEyMC4zNTIsOTguNjE0IEMxMjAuMzU0LDk4LjYxNyAxMjAuMzU2LDk4LjYyIDEyMC4zNTgsOTguNjI0IEwxMjAuNDIyLDk4LjcyNiBMMTIwLjMxNyw5OC43ODcgQzEyMC4yNjQsOTguODE4IDk0LjU5OSwxMTMuNjM1IDk0LjM0LDExMy43ODUgTDk0LjI4MiwxMTMuODE4IEw5NC4yODIsMTEzLjgxOCBaIE03MC40MDEsOTkuNzYxIEw5NC4yODIsMTEzLjU0OSBMMTE5LjA4NCw5OS4yMjkgQzExOS42Myw5OC45MTQgMTE5LjkzLDk4Ljc0IDEyMC4xMDEsOTguNjU0IEwxMTkuNjM1LDk3LjkxNCBDMTE1Ljg2NCw5NC4xMjcgMTEzLjE2OCw5MC4wMzMgMTExLjYyMiw4NS43NDYgQzExMS4zODIsODUuMDc5IDExMS4zODYsODQuNDA0IDExMS42MzMsODMuNzM4IEMxMTIuNDQ4LDgxLjUzOSAxMTUuODM2LDc5Ljk0MyAxMTkuNjg5LDc5Ljk0MyBDMTIwLjI0Niw3OS45NDMgMTIwLjgwNiw3OS45NzYgMTIxLjM1NSw4MC4wNDIgQzEyOC43NjcsODAuOTMzIDEzNS44NDYsODIuNDg3IDE0Mi4zOTYsODQuNjYzIEMxNDMuMjMyLDg0LjgzOCAxNDMuNjExLDg0LjkxNyAxNDMuNzg2LDg0Ljk2NyBMMTY5LjU2Niw3MC4wODMgTDE0NS42ODUsNTYuMjk1IEw3MC40MDEsOTkuNzYxIEw3MC40MDEsOTkuNzYxIFoiIGlkPSJGaWxsLTEyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2Ny4yMywxOC45NzkgTDE2Ny4yMyw2OS44NSBMMTM5LjkwOSw4NS42MjMgTDEzMy40NDgsNzEuNDU2IEMxMzIuNTM4LDY5LjQ2IDEzMC4wMiw2OS43MTggMTI3LjgyNCw3Mi4wMyBDMTI2Ljc2OSw3My4xNCAxMjUuOTMxLDc0LjU4NSAxMjUuNDk0LDc2LjA0OCBMMTE5LjAzNCw5Ny42NzYgTDkxLjcxMiwxMTMuNDUgTDkxLjcxMiw2Mi41NzkgTDE2Ny4yMywxOC45NzkiIGlkPSJGaWxsLTEzIiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTkxLjcxMiwxMTMuNTY3IEM5MS42OTIsMTEzLjU2NyA5MS42NzIsMTEzLjU2MSA5MS42NTMsMTEzLjU1MSBDOTEuNjE4LDExMy41MyA5MS41OTUsMTEzLjQ5MiA5MS41OTUsMTEzLjQ1IEw5MS41OTUsNjIuNTc5IEM5MS41OTUsNjIuNTM3IDkxLjYxOCw2Mi40OTkgOTEuNjUzLDYyLjQ3OCBMMTY3LjE3MiwxOC44NzggQzE2Ny4yMDgsMTguODU3IDE2Ny4yNTIsMTguODU3IDE2Ny4yODgsMTguODc4IEMxNjcuMzI0LDE4Ljg5OSAxNjcuMzQ3LDE4LjkzNyAxNjcuMzQ3LDE4Ljk3OSBMMTY3LjM0Nyw2OS44NSBDMTY3LjM0Nyw2OS44OTEgMTY3LjMyNCw2OS45MyAxNjcuMjg4LDY5Ljk1IEwxMzkuOTY3LDg1LjcyNSBDMTM5LjkzOSw4NS43NDEgMTM5LjkwNSw4NS43NDUgMTM5Ljg3Myw4NS43MzUgQzEzOS44NDIsODUuNzI1IDEzOS44MTYsODUuNzAyIDEzOS44MDIsODUuNjcyIEwxMzMuMzQyLDcxLjUwNCBDMTMyLjk2Nyw3MC42ODIgMTMyLjI4LDcwLjIyOSAxMzEuNDA4LDcwLjIyOSBDMTMwLjMxOSw3MC4yMjkgMTI5LjA0NCw3MC45MTUgMTI3LjkwOCw3Mi4xMSBDMTI2Ljg3NCw3My4yIDEyNi4wMzQsNzQuNjQ3IDEyNS42MDYsNzYuMDgyIEwxMTkuMTQ2LDk3LjcwOSBDMTE5LjEzNyw5Ny43MzggMTE5LjExOCw5Ny43NjIgMTE5LjA5Miw5Ny43NzcgTDkxLjc3LDExMy41NTEgQzkxLjc1MiwxMTMuNTYxIDkxLjczMiwxMTMuNTY3IDkxLjcxMiwxMTMuNTY3IEw5MS43MTIsMTEzLjU2NyBaIE05MS44MjksNjIuNjQ3IEw5MS44MjksMTEzLjI0OCBMMTE4LjkzNSw5Ny41OTggTDEyNS4zODIsNzYuMDE1IEMxMjUuODI3LDc0LjUyNSAxMjYuNjY0LDczLjA4MSAxMjcuNzM5LDcxLjk1IEMxMjguOTE5LDcwLjcwOCAxMzAuMjU2LDY5Ljk5NiAxMzEuNDA4LDY5Ljk5NiBDMTMyLjM3Nyw2OS45OTYgMTMzLjEzOSw3MC40OTcgMTMzLjU1NCw3MS40MDcgTDEzOS45NjEsODUuNDU4IEwxNjcuMTEzLDY5Ljc4MiBMMTY3LjExMywxOS4xODEgTDkxLjgyOSw2Mi42NDcgTDkxLjgyOSw2Mi42NDcgWiIgaWQ9IkZpbGwtMTQiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTY4LjU0MywxOS4yMTMgTDE2OC41NDMsNzAuMDgzIEwxNDEuMjIxLDg1Ljg1NyBMMTM0Ljc2MSw3MS42ODkgQzEzMy44NTEsNjkuNjk0IDEzMS4zMzMsNjkuOTUxIDEyOS4xMzcsNzIuMjYzIEMxMjguMDgyLDczLjM3NCAxMjcuMjQ0LDc0LjgxOSAxMjYuODA3LDc2LjI4MiBMMTIwLjM0Niw5Ny45MDkgTDkzLjAyNSwxMTMuNjgzIEw5My4wMjUsNjIuODEzIEwxNjguNTQzLDE5LjIxMyIgaWQ9IkZpbGwtMTUiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTMuMDI1LDExMy44IEM5My4wMDUsMTEzLjggOTIuOTg0LDExMy43OTUgOTIuOTY2LDExMy43ODUgQzkyLjkzMSwxMTMuNzY0IDkyLjkwOCwxMTMuNzI1IDkyLjkwOCwxMTMuNjg0IEw5Mi45MDgsNjIuODEzIEM5Mi45MDgsNjIuNzcxIDkyLjkzMSw2Mi43MzMgOTIuOTY2LDYyLjcxMiBMMTY4LjQ4NCwxOS4xMTIgQzE2OC41MiwxOS4wOSAxNjguNTY1LDE5LjA5IDE2OC42MDEsMTkuMTEyIEMxNjguNjM3LDE5LjEzMiAxNjguNjYsMTkuMTcxIDE2OC42NiwxOS4yMTIgTDE2OC42Niw3MC4wODMgQzE2OC42Niw3MC4xMjUgMTY4LjYzNyw3MC4xNjQgMTY4LjYwMSw3MC4xODQgTDE0MS4yOCw4NS45NTggQzE0MS4yNTEsODUuOTc1IDE0MS4yMTcsODUuOTc5IDE0MS4xODYsODUuOTY4IEMxNDEuMTU0LDg1Ljk1OCAxNDEuMTI5LDg1LjkzNiAxNDEuMTE1LDg1LjkwNiBMMTM0LjY1NSw3MS43MzggQzEzNC4yOCw3MC45MTUgMTMzLjU5Myw3MC40NjMgMTMyLjcyLDcwLjQ2MyBDMTMxLjYzMiw3MC40NjMgMTMwLjM1Nyw3MS4xNDggMTI5LjIyMSw3Mi4zNDQgQzEyOC4xODYsNzMuNDMzIDEyNy4zNDcsNzQuODgxIDEyNi45MTksNzYuMzE1IEwxMjAuNDU4LDk3Ljk0MyBDMTIwLjQ1LDk3Ljk3MiAxMjAuNDMxLDk3Ljk5NiAxMjAuNDA1LDk4LjAxIEw5My4wODMsMTEzLjc4NSBDOTMuMDY1LDExMy43OTUgOTMuMDQ1LDExMy44IDkzLjAyNSwxMTMuOCBMOTMuMDI1LDExMy44IFogTTkzLjE0Miw2Mi44ODEgTDkzLjE0MiwxMTMuNDgxIEwxMjAuMjQ4LDk3LjgzMiBMMTI2LjY5NSw3Ni4yNDggQzEyNy4xNCw3NC43NTggMTI3Ljk3Nyw3My4zMTUgMTI5LjA1Miw3Mi4xODMgQzEzMC4yMzEsNzAuOTQyIDEzMS41NjgsNzAuMjI5IDEzMi43Miw3MC4yMjkgQzEzMy42ODksNzAuMjI5IDEzNC40NTIsNzAuNzMxIDEzNC44NjcsNzEuNjQxIEwxNDEuMjc0LDg1LjY5MiBMMTY4LjQyNiw3MC4wMTYgTDE2OC40MjYsMTkuNDE1IEw5My4xNDIsNjIuODgxIEw5My4xNDIsNjIuODgxIFoiIGlkPSJGaWxsLTE2IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS44LDcwLjA4MyBMMTQyLjQ3OCw4NS44NTcgTDEzNi4wMTgsNzEuNjg5IEMxMzUuMTA4LDY5LjY5NCAxMzIuNTksNjkuOTUxIDEzMC4zOTMsNzIuMjYzIEMxMjkuMzM5LDczLjM3NCAxMjguNSw3NC44MTkgMTI4LjA2NCw3Ni4yODIgTDEyMS42MDMsOTcuOTA5IEw5NC4yODIsMTEzLjY4MyBMOTQuMjgyLDYyLjgxMyBMMTY5LjgsMTkuMjEzIEwxNjkuOCw3MC4wODMgWiIgaWQ9IkZpbGwtMTciIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTQuMjgyLDExMy45MTcgQzk0LjI0MSwxMTMuOTE3IDk0LjIwMSwxMTMuOTA3IDk0LjE2NSwxMTMuODg2IEM5NC4wOTMsMTEzLjg0NSA5NC4wNDgsMTEzLjc2NyA5NC4wNDgsMTEzLjY4NCBMOTQuMDQ4LDYyLjgxMyBDOTQuMDQ4LDYyLjczIDk0LjA5Myw2Mi42NTIgOTQuMTY1LDYyLjYxMSBMMTY5LjY4MywxOS4wMSBDMTY5Ljc1NSwxOC45NjkgMTY5Ljg0NCwxOC45NjkgMTY5LjkxNywxOS4wMSBDMTY5Ljk4OSwxOS4wNTIgMTcwLjAzMywxOS4xMjkgMTcwLjAzMywxOS4yMTIgTDE3MC4wMzMsNzAuMDgzIEMxNzAuMDMzLDcwLjE2NiAxNjkuOTg5LDcwLjI0NCAxNjkuOTE3LDcwLjI4NSBMMTQyLjU5NSw4Ni4wNiBDMTQyLjUzOCw4Ni4wOTIgMTQyLjQ2OSw4Ni4xIDE0Mi40MDcsODYuMDggQzE0Mi4zNDQsODYuMDYgMTQyLjI5Myw4Ni4wMTQgMTQyLjI2Niw4NS45NTQgTDEzNS44MDUsNzEuNzg2IEMxMzUuNDQ1LDcwLjk5NyAxMzQuODEzLDcwLjU4IDEzMy45NzcsNzAuNTggQzEzMi45MjEsNzAuNTggMTMxLjY3Niw3MS4yNTIgMTMwLjU2Miw3Mi40MjQgQzEyOS41NCw3My41MDEgMTI4LjcxMSw3NC45MzEgMTI4LjI4Nyw3Ni4zNDggTDEyMS44MjcsOTcuOTc2IEMxMjEuODEsOTguMDM0IDEyMS43NzEsOTguMDgyIDEyMS43Miw5OC4xMTIgTDk0LjM5OCwxMTMuODg2IEM5NC4zNjIsMTEzLjkwNyA5NC4zMjIsMTEzLjkxNyA5NC4yODIsMTEzLjkxNyBMOTQuMjgyLDExMy45MTcgWiBNOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDExMy4yNzkgTDEyMS40MDYsOTcuNzU0IEwxMjcuODQsNzYuMjE1IEMxMjguMjksNzQuNzA4IDEyOS4xMzcsNzMuMjQ3IDEzMC4yMjQsNzIuMTAzIEMxMzEuNDI1LDcwLjgzOCAxMzIuNzkzLDcwLjExMiAxMzMuOTc3LDcwLjExMiBDMTM0Ljk5NSw3MC4xMTIgMTM1Ljc5NSw3MC42MzggMTM2LjIzLDcxLjU5MiBMMTQyLjU4NCw4NS41MjYgTDE2OS41NjYsNjkuOTQ4IEwxNjkuNTY2LDE5LjYxNyBMOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDYyLjk0OCBaIiBpZD0iRmlsbC0xOCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMDkuODk0LDkyLjk0MyBMMTA5Ljg5NCw5Mi45NDMgQzEwOC4xMiw5Mi45NDMgMTA2LjY1Myw5Mi4yMTggMTA1LjY1LDkwLjgyMyBDMTA1LjU4Myw5MC43MzEgMTA1LjU5Myw5MC42MSAxMDUuNjczLDkwLjUyOSBDMTA1Ljc1Myw5MC40NDggMTA1Ljg4LDkwLjQ0IDEwNS45NzQsOTAuNTA2IEMxMDYuNzU0LDkxLjA1MyAxMDcuNjc5LDkxLjMzMyAxMDguNzI0LDkxLjMzMyBDMTEwLjA0Nyw5MS4zMzMgMTExLjQ3OCw5MC44OTQgMTEyLjk4LDkwLjAyNyBDMTE4LjI5MSw4Ni45NiAxMjIuNjExLDc5LjUwOSAxMjIuNjExLDczLjQxNiBDMTIyLjYxMSw3MS40ODkgMTIyLjE2OSw2OS44NTYgMTIxLjMzMyw2OC42OTIgQzEyMS4yNjYsNjguNiAxMjEuMjc2LDY4LjQ3MyAxMjEuMzU2LDY4LjM5MiBDMTIxLjQzNiw2OC4zMTEgMTIxLjU2Myw2OC4yOTkgMTIxLjY1Niw2OC4zNjUgQzEyMy4zMjcsNjkuNTM3IDEyNC4yNDcsNzEuNzQ2IDEyNC4yNDcsNzQuNTg0IEMxMjQuMjQ3LDgwLjgyNiAxMTkuODIxLDg4LjQ0NyAxMTQuMzgyLDkxLjU4NyBDMTEyLjgwOCw5Mi40OTUgMTExLjI5OCw5Mi45NDMgMTA5Ljg5NCw5Mi45NDMgTDEwOS44OTQsOTIuOTQzIFogTTEwNi45MjUsOTEuNDAxIEMxMDcuNzM4LDkyLjA1MiAxMDguNzQ1LDkyLjI3OCAxMDkuODkzLDkyLjI3OCBMMTA5Ljg5NCw5Mi4yNzggQzExMS4yMTUsOTIuMjc4IDExMi42NDcsOTEuOTUxIDExNC4xNDgsOTEuMDg0IEMxMTkuNDU5LDg4LjAxNyAxMjMuNzgsODAuNjIxIDEyMy43OCw3NC41MjggQzEyMy43OCw3Mi41NDkgMTIzLjMxNyw3MC45MjkgMTIyLjQ1NCw2OS43NjcgQzEyMi44NjUsNzAuODAyIDEyMy4wNzksNzIuMDQyIDEyMy4wNzksNzMuNDAyIEMxMjMuMDc5LDc5LjY0NSAxMTguNjUzLDg3LjI4NSAxMTMuMjE0LDkwLjQyNSBDMTExLjY0LDkxLjMzNCAxMTAuMTMsOTEuNzQyIDEwOC43MjQsOTEuNzQyIEMxMDguMDgzLDkxLjc0MiAxMDcuNDgxLDkxLjU5MyAxMDYuOTI1LDkxLjQwMSBMMTA2LjkyNSw5MS40MDEgWiIgaWQ9IkZpbGwtMTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjA5Nyw5MC4yMyBDMTE4LjQ4MSw4Ny4xMjIgMTIyLjg0NSw3OS41OTQgMTIyLjg0NSw3My40MTYgQzEyMi44NDUsNzEuMzY1IDEyMi4zNjIsNjkuNzI0IDEyMS41MjIsNjguNTU2IEMxMTkuNzM4LDY3LjMwNCAxMTcuMTQ4LDY3LjM2MiAxMTQuMjY1LDY5LjAyNiBDMTA4Ljg4MSw3Mi4xMzQgMTA0LjUxNyw3OS42NjIgMTA0LjUxNyw4NS44NCBDMTA0LjUxNyw4Ny44OTEgMTA1LDg5LjUzMiAxMDUuODQsOTAuNyBDMTA3LjYyNCw5MS45NTIgMTEwLjIxNCw5MS44OTQgMTEzLjA5Nyw5MC4yMyIgaWQ9IkZpbGwtMjAiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTA4LjcyNCw5MS42MTQgTDEwOC43MjQsOTEuNjE0IEMxMDcuNTgyLDkxLjYxNCAxMDYuNTY2LDkxLjQwMSAxMDUuNzA1LDkwLjc5NyBDMTA1LjY4NCw5MC43ODMgMTA1LjY2NSw5MC44MTEgMTA1LjY1LDkwLjc5IEMxMDQuNzU2LDg5LjU0NiAxMDQuMjgzLDg3Ljg0MiAxMDQuMjgzLDg1LjgxNyBDMTA0LjI4Myw3OS41NzUgMTA4LjcwOSw3MS45NTMgMTE0LjE0OCw2OC44MTIgQzExNS43MjIsNjcuOTA0IDExNy4yMzIsNjcuNDQ5IDExOC42MzgsNjcuNDQ5IEMxMTkuNzgsNjcuNDQ5IDEyMC43OTYsNjcuNzU4IDEyMS42NTYsNjguMzYyIEMxMjEuNjc4LDY4LjM3NyAxMjEuNjk3LDY4LjM5NyAxMjEuNzEyLDY4LjQxOCBDMTIyLjYwNiw2OS42NjIgMTIzLjA3OSw3MS4zOSAxMjMuMDc5LDczLjQxNSBDMTIzLjA3OSw3OS42NTggMTE4LjY1Myw4Ny4xOTggMTEzLjIxNCw5MC4zMzggQzExMS42NCw5MS4yNDcgMTEwLjEzLDkxLjYxNCAxMDguNzI0LDkxLjYxNCBMMTA4LjcyNCw5MS42MTQgWiBNMTA2LjAwNiw5MC41MDUgQzEwNi43OCw5MS4wMzcgMTA3LjY5NCw5MS4yODEgMTA4LjcyNCw5MS4yODEgQzExMC4wNDcsOTEuMjgxIDExMS40NzgsOTAuODY4IDExMi45OCw5MC4wMDEgQzExOC4yOTEsODYuOTM1IDEyMi42MTEsNzkuNDk2IDEyMi42MTEsNzMuNDAzIEMxMjIuNjExLDcxLjQ5NCAxMjIuMTc3LDY5Ljg4IDEyMS4zNTYsNjguNzE4IEMxMjAuNTgyLDY4LjE4NSAxMTkuNjY4LDY3LjkxOSAxMTguNjM4LDY3LjkxOSBDMTE3LjMxNSw2Ny45MTkgMTE1Ljg4Myw2OC4zNiAxMTQuMzgyLDY5LjIyNyBDMTA5LjA3MSw3Mi4yOTMgMTA0Ljc1MSw3OS43MzMgMTA0Ljc1MSw4NS44MjYgQzEwNC43NTEsODcuNzM1IDEwNS4xODUsODkuMzQzIDEwNi4wMDYsOTAuNTA1IEwxMDYuMDA2LDkwLjUwNSBaIiBpZD0iRmlsbC0yMSIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDkuMzE4LDcuMjYyIEwxMzkuMzM0LDE2LjE0IEwxNTUuMjI3LDI3LjE3MSBMMTYwLjgxNiwyMS4wNTkgTDE0OS4zMTgsNy4yNjIiIGlkPSJGaWxsLTIyIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS42NzYsMTMuODQgTDE1OS45MjgsMTkuNDY3IEMxNTYuMjg2LDIxLjU3IDE1MC40LDIxLjU4IDE0Ni43ODEsMTkuNDkxIEMxNDMuMTYxLDE3LjQwMiAxNDMuMTgsMTQuMDAzIDE0Ni44MjIsMTEuOSBMMTU2LjMxNyw2LjI5MiBMMTQ5LjU4OCwyLjQwNyBMNjcuNzUyLDQ5LjQ3OCBMMTEzLjY3NSw3NS45OTIgTDExNi43NTYsNzQuMjEzIEMxMTcuMzg3LDczLjg0OCAxMTcuNjI1LDczLjMxNSAxMTcuMzc0LDcyLjgyMyBDMTE1LjAxNyw2OC4xOTEgMTE0Ljc4MSw2My4yNzcgMTE2LjY5MSw1OC41NjEgQzEyMi4zMjksNDQuNjQxIDE0MS4yLDMzLjc0NiAxNjUuMzA5LDMwLjQ5MSBDMTczLjQ3OCwyOS4zODggMTgxLjk4OSwyOS41MjQgMTkwLjAxMywzMC44ODUgQzE5MC44NjUsMzEuMDMgMTkxLjc4OSwzMC44OTMgMTkyLjQyLDMwLjUyOCBMMTk1LjUwMSwyOC43NSBMMTY5LjY3NiwxMy44NCIgaWQ9IkZpbGwtMjMiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3Ni40NTkgQzExMy41OTQsNzYuNDU5IDExMy41MTQsNzYuNDM4IDExMy40NDIsNzYuMzk3IEw2Ny41MTgsNDkuODgyIEM2Ny4zNzQsNDkuNzk5IDY3LjI4NCw0OS42NDUgNjcuMjg1LDQ5LjQ3OCBDNjcuMjg1LDQ5LjMxMSA2Ny4zNzQsNDkuMTU3IDY3LjUxOSw0OS4wNzMgTDE0OS4zNTUsMi4wMDIgQzE0OS40OTksMS45MTkgMTQ5LjY3NywxLjkxOSAxNDkuODIxLDIuMDAyIEwxNTYuNTUsNS44ODcgQzE1Ni43NzQsNi4wMTcgMTU2Ljg1LDYuMzAyIDE1Ni43MjIsNi41MjYgQzE1Ni41OTIsNi43NDkgMTU2LjMwNyw2LjgyNiAxNTYuMDgzLDYuNjk2IEwxNDkuNTg3LDIuOTQ2IEw2OC42ODcsNDkuNDc5IEwxMTMuNjc1LDc1LjQ1MiBMMTE2LjUyMyw3My44MDggQzExNi43MTUsNzMuNjk3IDExNy4xNDMsNzMuMzk5IDExNi45NTgsNzMuMDM1IEMxMTQuNTQyLDY4LjI4NyAxMTQuMyw2My4yMjEgMTE2LjI1OCw1OC4zODUgQzExOS4wNjQsNTEuNDU4IDEyNS4xNDMsNDUuMTQzIDEzMy44NCw0MC4xMjIgQzE0Mi40OTcsMzUuMTI0IDE1My4zNTgsMzEuNjMzIDE2NS4yNDcsMzAuMDI4IEMxNzMuNDQ1LDI4LjkyMSAxODIuMDM3LDI5LjA1OCAxOTAuMDkxLDMwLjQyNSBDMTkwLjgzLDMwLjU1IDE5MS42NTIsMzAuNDMyIDE5Mi4xODYsMzAuMTI0IEwxOTQuNTY3LDI4Ljc1IEwxNjkuNDQyLDE0LjI0NCBDMTY5LjIxOSwxNC4xMTUgMTY5LjE0MiwxMy44MjkgMTY5LjI3MSwxMy42MDYgQzE2OS40LDEzLjM4MiAxNjkuNjg1LDEzLjMwNiAxNjkuOTA5LDEzLjQzNSBMMTk1LjczNCwyOC4zNDUgQzE5NS44NzksMjguNDI4IDE5NS45NjgsMjguNTgzIDE5NS45NjgsMjguNzUgQzE5NS45NjgsMjguOTE2IDE5NS44NzksMjkuMDcxIDE5NS43MzQsMjkuMTU0IEwxOTIuNjUzLDMwLjkzMyBDMTkxLjkzMiwzMS4zNSAxOTAuODksMzEuNTA4IDE4OS45MzUsMzEuMzQ2IEMxODEuOTcyLDI5Ljk5NSAxNzMuNDc4LDI5Ljg2IDE2NS4zNzIsMzAuOTU0IEMxNTMuNjAyLDMyLjU0MyAxNDIuODYsMzUuOTkzIDEzNC4zMDcsNDAuOTMxIEMxMjUuNzkzLDQ1Ljg0NyAxMTkuODUxLDUyLjAwNCAxMTcuMTI0LDU4LjczNiBDMTE1LjI3LDYzLjMxNCAxMTUuNTAxLDY4LjExMiAxMTcuNzksNzIuNjExIEMxMTguMTYsNzMuMzM2IDExNy44NDUsNzQuMTI0IDExNi45OSw3NC42MTcgTDExMy45MDksNzYuMzk3IEMxMTMuODM2LDc2LjQzOCAxMTMuNzU2LDc2LjQ1OSAxMTMuNjc1LDc2LjQ1OSIgaWQ9IkZpbGwtMjQiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUzLjMxNiwyMS4yNzkgQzE1MC45MDMsMjEuMjc5IDE0OC40OTUsMjAuNzUxIDE0Ni42NjQsMTkuNjkzIEMxNDQuODQ2LDE4LjY0NCAxNDMuODQ0LDE3LjIzMiAxNDMuODQ0LDE1LjcxOCBDMTQzLjg0NCwxNC4xOTEgMTQ0Ljg2LDEyLjc2MyAxNDYuNzA1LDExLjY5OCBMMTU2LjE5OCw2LjA5MSBDMTU2LjMwOSw2LjAyNSAxNTYuNDUyLDYuMDYyIDE1Ni41MTgsNi4xNzMgQzE1Ni41ODMsNi4yODQgMTU2LjU0Nyw2LjQyNyAxNTYuNDM2LDYuNDkzIEwxNDYuOTQsMTIuMTAyIEMxNDUuMjQ0LDEzLjA4MSAxNDQuMzEyLDE0LjM2NSAxNDQuMzEyLDE1LjcxOCBDMTQ0LjMxMiwxNy4wNTggMTQ1LjIzLDE4LjMyNiAxNDYuODk3LDE5LjI4OSBDMTUwLjQ0NiwyMS4zMzggMTU2LjI0LDIxLjMyNyAxNTkuODExLDE5LjI2NSBMMTY5LjU1OSwxMy42MzcgQzE2OS42NywxMy41NzMgMTY5LjgxMywxMy42MTEgMTY5Ljg3OCwxMy43MjMgQzE2OS45NDMsMTMuODM0IDE2OS45MDQsMTMuOTc3IDE2OS43OTMsMTQuMDQyIEwxNjAuMDQ1LDE5LjY3IEMxNTguMTg3LDIwLjc0MiAxNTUuNzQ5LDIxLjI3OSAxNTMuMzE2LDIxLjI3OSIgaWQ9IkZpbGwtMjUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3NS45OTIgTDY3Ljc2Miw0OS40ODQiIGlkPSJGaWxsLTI2IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMy42NzUsNzYuMzQyIEMxMTMuNjE1LDc2LjM0MiAxMTMuNTU1LDc2LjMyNyAxMTMuNSw3Ni4yOTUgTDY3LjU4Nyw0OS43ODcgQzY3LjQxOSw0OS42OSA2Ny4zNjIsNDkuNDc2IDY3LjQ1OSw0OS4zMDkgQzY3LjU1Niw0OS4xNDEgNjcuNzcsNDkuMDgzIDY3LjkzNyw0OS4xOCBMMTEzLjg1LDc1LjY4OCBDMTE0LjAxOCw3NS43ODUgMTE0LjA3NSw3NiAxMTMuOTc4LDc2LjE2NyBDMTEzLjkxNCw3Ni4yNzkgMTEzLjc5Niw3Ni4zNDIgMTEzLjY3NSw3Ni4zNDIiIGlkPSJGaWxsLTI3IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY3Ljc2Miw0OS40ODQgTDY3Ljc2MiwxMDMuNDg1IEM2Ny43NjIsMTA0LjU3NSA2OC41MzIsMTA1LjkwMyA2OS40ODIsMTA2LjQ1MiBMMTExLjk1NSwxMzAuOTczIEMxMTIuOTA1LDEzMS41MjIgMTEzLjY3NSwxMzEuMDgzIDExMy42NzUsMTI5Ljk5MyBMMTEzLjY3NSw3NS45OTIiIGlkPSJGaWxsLTI4IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMi43MjcsMTMxLjU2MSBDMTEyLjQzLDEzMS41NjEgMTEyLjEwNywxMzEuNDY2IDExMS43OCwxMzEuMjc2IEw2OS4zMDcsMTA2Ljc1NSBDNjguMjQ0LDEwNi4xNDIgNjcuNDEyLDEwNC43MDUgNjcuNDEyLDEwMy40ODUgTDY3LjQxMiw0OS40ODQgQzY3LjQxMiw0OS4yOSA2Ny41NjksNDkuMTM0IDY3Ljc2Miw0OS4xMzQgQzY3Ljk1Niw0OS4xMzQgNjguMTEzLDQ5LjI5IDY4LjExMyw0OS40ODQgTDY4LjExMywxMDMuNDg1IEM2OC4xMTMsMTA0LjQ0NSA2OC44MiwxMDUuNjY1IDY5LjY1NywxMDYuMTQ4IEwxMTIuMTMsMTMwLjY3IEMxMTIuNDc0LDEzMC44NjggMTEyLjc5MSwxMzAuOTEzIDExMywxMzAuNzkyIEMxMTMuMjA2LDEzMC42NzMgMTEzLjMyNSwxMzAuMzgxIDExMy4zMjUsMTI5Ljk5MyBMMTEzLjMyNSw3NS45OTIgQzExMy4zMjUsNzUuNzk4IDExMy40ODIsNzUuNjQxIDExMy42NzUsNzUuNjQxIEMxMTMuODY5LDc1LjY0MSAxMTQuMDI1LDc1Ljc5OCAxMTQuMDI1LDc1Ljk5MiBMMTE0LjAyNSwxMjkuOTkzIEMxMTQuMDI1LDEzMC42NDggMTEzLjc4NiwxMzEuMTQ3IDExMy4zNSwxMzEuMzk5IEMxMTMuMTYyLDEzMS41MDcgMTEyLjk1MiwxMzEuNTYxIDExMi43MjcsMTMxLjU2MSIgaWQ9IkZpbGwtMjkiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEyLjg2LDQwLjUxMiBDMTEyLjg2LDQwLjUxMiAxMTIuODYsNDAuNTEyIDExMi44NTksNDAuNTEyIEMxMTAuNTQxLDQwLjUxMiAxMDguMzYsMzkuOTkgMTA2LjcxNywzOS4wNDEgQzEwNS4wMTIsMzguMDU3IDEwNC4wNzQsMzYuNzI2IDEwNC4wNzQsMzUuMjkyIEMxMDQuMDc0LDMzLjg0NyAxMDUuMDI2LDMyLjUwMSAxMDYuNzU0LDMxLjUwNCBMMTE4Ljc5NSwyNC41NTEgQzEyMC40NjMsMjMuNTg5IDEyMi42NjksMjMuMDU4IDEyNS4wMDcsMjMuMDU4IEMxMjcuMzI1LDIzLjA1OCAxMjkuNTA2LDIzLjU4MSAxMzEuMTUsMjQuNTMgQzEzMi44NTQsMjUuNTE0IDEzMy43OTMsMjYuODQ1IDEzMy43OTMsMjguMjc4IEMxMzMuNzkzLDI5LjcyNCAxMzIuODQxLDMxLjA2OSAxMzEuMTEzLDMyLjA2NyBMMTE5LjA3MSwzOS4wMTkgQzExNy40MDMsMzkuOTgyIDExNS4xOTcsNDAuNTEyIDExMi44Niw0MC41MTIgTDExMi44Niw0MC41MTIgWiBNMTI1LjAwNywyMy43NTkgQzEyMi43OSwyMy43NTkgMTIwLjcwOSwyNC4yNTYgMTE5LjE0NiwyNS4xNTggTDEwNy4xMDQsMzIuMTEgQzEwNS42MDIsMzIuOTc4IDEwNC43NzQsMzQuMTA4IDEwNC43NzQsMzUuMjkyIEMxMDQuNzc0LDM2LjQ2NSAxMDUuNTg5LDM3LjU4MSAxMDcuMDY3LDM4LjQzNCBDMTA4LjYwNSwzOS4zMjMgMTEwLjY2MywzOS44MTIgMTEyLjg1OSwzOS44MTIgTDExMi44NiwzOS44MTIgQzExNS4wNzYsMzkuODEyIDExNy4xNTgsMzkuMzE1IDExOC43MjEsMzguNDEzIEwxMzAuNzYyLDMxLjQ2IEMxMzIuMjY0LDMwLjU5MyAxMzMuMDkyLDI5LjQ2MyAxMzMuMDkyLDI4LjI3OCBDMTMzLjA5MiwyNy4xMDYgMTMyLjI3OCwyNS45OSAxMzAuOCwyNS4xMzYgQzEyOS4yNjEsMjQuMjQ4IDEyNy4yMDQsMjMuNzU5IDEyNS4wMDcsMjMuNzU5IEwxMjUuMDA3LDIzLjc1OSBaIiBpZD0iRmlsbC0zMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjUuNjMsMTYuMjE5IEwxNTkuODk2LDE5LjUzIEMxNTYuNzI5LDIxLjM1OCAxNTEuNjEsMjEuMzY3IDE0OC40NjMsMTkuNTUgQzE0NS4zMTYsMTcuNzMzIDE0NS4zMzIsMTQuNzc4IDE0OC40OTksMTIuOTQ5IEwxNTQuMjMzLDkuNjM5IEwxNjUuNjMsMTYuMjE5IiBpZD0iRmlsbC0zMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNTQuMjMzLDEwLjQ0OCBMMTY0LjIyOCwxNi4yMTkgTDE1OS41NDYsMTguOTIzIEMxNTguMTEyLDE5Ljc1IDE1Ni4xOTQsMjAuMjA2IDE1NC4xNDcsMjAuMjA2IEMxNTIuMTE4LDIwLjIwNiAxNTAuMjI0LDE5Ljc1NyAxNDguODE0LDE4Ljk0MyBDMTQ3LjUyNCwxOC4xOTkgMTQ2LjgxNCwxNy4yNDkgMTQ2LjgxNCwxNi4yNjkgQzE0Ni44MTQsMTUuMjc4IDE0Ny41MzcsMTQuMzE0IDE0OC44NSwxMy41NTYgTDE1NC4yMzMsMTAuNDQ4IE0xNTQuMjMzLDkuNjM5IEwxNDguNDk5LDEyLjk0OSBDMTQ1LjMzMiwxNC43NzggMTQ1LjMxNiwxNy43MzMgMTQ4LjQ2MywxOS41NSBDMTUwLjAzMSwyMC40NTUgMTUyLjA4NiwyMC45MDcgMTU0LjE0NywyMC45MDcgQzE1Ni4yMjQsMjAuOTA3IDE1OC4zMDYsMjAuNDQ3IDE1OS44OTYsMTkuNTMgTDE2NS42MywxNi4yMTkgTDE1NC4yMzMsOS42MzkiIGlkPSJGaWxsLTMyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NS40NDUsNzIuNjY3IEwxNDUuNDQ1LDcyLjY2NyBDMTQzLjY3Miw3Mi42NjcgMTQyLjIwNCw3MS44MTcgMTQxLjIwMiw3MC40MjIgQzE0MS4xMzUsNzAuMzMgMTQxLjE0NSw3MC4xNDcgMTQxLjIyNSw3MC4wNjYgQzE0MS4zMDUsNjkuOTg1IDE0MS40MzIsNjkuOTQ2IDE0MS41MjUsNzAuMDExIEMxNDIuMzA2LDcwLjU1OSAxNDMuMjMxLDcwLjgyMyAxNDQuMjc2LDcwLjgyMiBDMTQ1LjU5OCw3MC44MjIgMTQ3LjAzLDcwLjM3NiAxNDguNTMyLDY5LjUwOSBDMTUzLjg0Miw2Ni40NDMgMTU4LjE2Myw1OC45ODcgMTU4LjE2Myw1Mi44OTQgQzE1OC4xNjMsNTAuOTY3IDE1Ny43MjEsNDkuMzMyIDE1Ni44ODQsNDguMTY4IEMxNTYuODE4LDQ4LjA3NiAxNTYuODI4LDQ3Ljk0OCAxNTYuOTA4LDQ3Ljg2NyBDMTU2Ljk4OCw0Ny43ODYgMTU3LjExNCw0Ny43NzQgMTU3LjIwOCw0Ny44NCBDMTU4Ljg3OCw0OS4wMTIgMTU5Ljc5OCw1MS4yMiAxNTkuNzk4LDU0LjA1OSBDMTU5Ljc5OCw2MC4zMDEgMTU1LjM3Myw2OC4wNDYgMTQ5LjkzMyw3MS4xODYgQzE0OC4zNiw3Mi4wOTQgMTQ2Ljg1LDcyLjY2NyAxNDUuNDQ1LDcyLjY2NyBMMTQ1LjQ0NSw3Mi42NjcgWiBNMTQyLjQ3Niw3MSBDMTQzLjI5LDcxLjY1MSAxNDQuMjk2LDcyLjAwMiAxNDUuNDQ1LDcyLjAwMiBDMTQ2Ljc2Nyw3Mi4wMDIgMTQ4LjE5OCw3MS41NSAxNDkuNyw3MC42ODIgQzE1NS4wMSw2Ny42MTcgMTU5LjMzMSw2MC4xNTkgMTU5LjMzMSw1NC4wNjUgQzE1OS4zMzEsNTIuMDg1IDE1OC44NjgsNTAuNDM1IDE1OC4wMDYsNDkuMjcyIEMxNTguNDE3LDUwLjMwNyAxNTguNjMsNTEuNTMyIDE1OC42Myw1Mi44OTIgQzE1OC42Myw1OS4xMzQgMTU0LjIwNSw2Ni43NjcgMTQ4Ljc2NSw2OS45MDcgQzE0Ny4xOTIsNzAuODE2IDE0NS42ODEsNzEuMjgzIDE0NC4yNzYsNzEuMjgzIEMxNDMuNjM0LDcxLjI4MyAxNDMuMDMzLDcxLjE5MiAxNDIuNDc2LDcxIEwxNDIuNDc2LDcxIFoiIGlkPSJGaWxsLTMzIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0OC42NDgsNjkuNzA0IEMxNTQuMDMyLDY2LjU5NiAxNTguMzk2LDU5LjA2OCAxNTguMzk2LDUyLjg5MSBDMTU4LjM5Niw1MC44MzkgMTU3LjkxMyw0OS4xOTggMTU3LjA3NCw0OC4wMyBDMTU1LjI4OSw0Ni43NzggMTUyLjY5OSw0Ni44MzYgMTQ5LjgxNiw0OC41MDEgQzE0NC40MzMsNTEuNjA5IDE0MC4wNjgsNTkuMTM3IDE0MC4wNjgsNjUuMzE0IEMxNDAuMDY4LDY3LjM2NSAxNDAuNTUyLDY5LjAwNiAxNDEuMzkxLDcwLjE3NCBDMTQzLjE3Niw3MS40MjcgMTQ1Ljc2NSw3MS4zNjkgMTQ4LjY0OCw2OS43MDQiIGlkPSJGaWxsLTM0IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NC4yNzYsNzEuMjc2IEwxNDQuMjc2LDcxLjI3NiBDMTQzLjEzMyw3MS4yNzYgMTQyLjExOCw3MC45NjkgMTQxLjI1Nyw3MC4zNjUgQzE0MS4yMzYsNzAuMzUxIDE0MS4yMTcsNzAuMzMyIDE0MS4yMDIsNzAuMzExIEMxNDAuMzA3LDY5LjA2NyAxMzkuODM1LDY3LjMzOSAxMzkuODM1LDY1LjMxNCBDMTM5LjgzNSw1OS4wNzMgMTQ0LjI2LDUxLjQzOSAxNDkuNyw0OC4yOTggQzE1MS4yNzMsNDcuMzkgMTUyLjc4NCw0Ni45MjkgMTU0LjE4OSw0Ni45MjkgQzE1NS4zMzIsNDYuOTI5IDE1Ni4zNDcsNDcuMjM2IDE1Ny4yMDgsNDcuODM5IEMxNTcuMjI5LDQ3Ljg1NCAxNTcuMjQ4LDQ3Ljg3MyAxNTcuMjYzLDQ3Ljg5NCBDMTU4LjE1Nyw0OS4xMzggMTU4LjYzLDUwLjg2NSAxNTguNjMsNTIuODkxIEMxNTguNjMsNTkuMTMyIDE1NC4yMDUsNjYuNzY2IDE0OC43NjUsNjkuOTA3IEMxNDcuMTkyLDcwLjgxNSAxNDUuNjgxLDcxLjI3NiAxNDQuMjc2LDcxLjI3NiBMMTQ0LjI3Niw3MS4yNzYgWiBNMTQxLjU1OCw3MC4xMDQgQzE0Mi4zMzEsNzAuNjM3IDE0My4yNDUsNzEuMDA1IDE0NC4yNzYsNzEuMDA1IEMxNDUuNTk4LDcxLjAwNSAxNDcuMDMsNzAuNDY3IDE0OC41MzIsNjkuNiBDMTUzLjg0Miw2Ni41MzQgMTU4LjE2Myw1OS4wMzMgMTU4LjE2Myw1Mi45MzkgQzE1OC4xNjMsNTEuMDMxIDE1Ny43MjksNDkuMzg1IDE1Ni45MDcsNDguMjIzIEMxNTYuMTMzLDQ3LjY5MSAxNTUuMjE5LDQ3LjQwOSAxNTQuMTg5LDQ3LjQwOSBDMTUyLjg2Nyw0Ny40MDkgMTUxLjQzNSw0Ny44NDIgMTQ5LjkzMyw0OC43MDkgQzE0NC42MjMsNTEuNzc1IDE0MC4zMDIsNTkuMjczIDE0MC4zMDIsNjUuMzY2IEMxNDAuMzAyLDY3LjI3NiAxNDAuNzM2LDY4Ljk0MiAxNDEuNTU4LDcwLjEwNCBMMTQxLjU1OCw3MC4xMDQgWiIgaWQ9IkZpbGwtMzUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUwLjcyLDY1LjM2MSBMMTUwLjM1Nyw2NS4wNjYgQzE1MS4xNDcsNjQuMDkyIDE1MS44NjksNjMuMDQgMTUyLjUwNSw2MS45MzggQzE1My4zMTMsNjAuNTM5IDE1My45NzgsNTkuMDY3IDE1NC40ODIsNTcuNTYzIEwxNTQuOTI1LDU3LjcxMiBDMTU0LjQxMiw1OS4yNDUgMTUzLjczMyw2MC43NDUgMTUyLjkxLDYyLjE3MiBDMTUyLjI2Miw2My4yOTUgMTUxLjUyNSw2NC4zNjggMTUwLjcyLDY1LjM2MSIgaWQ9IkZpbGwtMzYiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE1LjkxNyw4NC41MTQgTDExNS41NTQsODQuMjIgQzExNi4zNDQsODMuMjQ1IDExNy4wNjYsODIuMTk0IDExNy43MDIsODEuMDkyIEMxMTguNTEsNzkuNjkyIDExOS4xNzUsNzguMjIgMTE5LjY3OCw3Ni43MTcgTDEyMC4xMjEsNzYuODY1IEMxMTkuNjA4LDc4LjM5OCAxMTguOTMsNzkuODk5IDExOC4xMDYsODEuMzI2IEMxMTcuNDU4LDgyLjQ0OCAxMTYuNzIyLDgzLjUyMSAxMTUuOTE3LDg0LjUxNCIgaWQ9IkZpbGwtMzciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE0LDEzMC40NzYgTDExNCwxMzAuMDA4IEwxMTQsNzYuMDUyIEwxMTQsNzUuNTg0IEwxMTQsNzYuMDUyIEwxMTQsMTMwLjAwOCBMMTE0LDEzMC40NzYiIGlkPSJGaWxsLTM4IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYyLjAwMDAwMCwgMC4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTkuODIyLDM3LjQ3NCBDMTkuODM5LDM3LjMzOSAxOS43NDcsMzcuMTk0IDE5LjU1NSwzNy4wODIgQzE5LjIyOCwzNi44OTQgMTguNzI5LDM2Ljg3MiAxOC40NDYsMzcuMDM3IEwxMi40MzQsNDAuNTA4IEMxMi4zMDMsNDAuNTg0IDEyLjI0LDQwLjY4NiAxMi4yNDMsNDAuNzkzIEMxMi4yNDUsNDAuOTI1IDEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQxLjM3MSBMMTIuMjQ1LDQxLjQxNCBMMTIuMjM4LDQxLjU0MiBDOC4xNDgsNDMuODg3IDUuNjQ3LDQ1LjMyMSA1LjY0Nyw0NS4zMjEgQzUuNjQ2LDQ1LjMyMSAzLjU3LDQ2LjM2NyAyLjg2LDUwLjUxMyBDMi44Niw1MC41MTMgMS45NDgsNTcuNDc0IDEuOTYyLDcwLjI1OCBDMS45NzcsODIuODI4IDIuNTY4LDg3LjMyOCAzLjEyOSw5MS42MDkgQzMuMzQ5LDkzLjI5MyA2LjEzLDkzLjczNCA2LjEzLDkzLjczNCBDNi40NjEsOTMuNzc0IDYuODI4LDkzLjcwNyA3LjIxLDkzLjQ4NiBMODIuNDgzLDQ5LjkzNSBDODQuMjkxLDQ4Ljg2NiA4NS4xNSw0Ni4yMTYgODUuNTM5LDQzLjY1MSBDODYuNzUyLDM1LjY2MSA4Ny4yMTQsMTAuNjczIDg1LjI2NCwzLjc3MyBDODUuMDY4LDMuMDggODQuNzU0LDIuNjkgODQuMzk2LDIuNDkxIEw4Mi4zMSwxLjcwMSBDODEuNTgzLDEuNzI5IDgwLjg5NCwyLjE2OCA4MC43NzYsMi4yMzYgQzgwLjYzNiwyLjMxNyA0MS44MDcsMjQuNTg1IDIwLjAzMiwzNy4wNzIgTDE5LjgyMiwzNy40NzQiIGlkPSJGaWxsLTEiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNODIuMzExLDEuNzAxIEw4NC4zOTYsMi40OTEgQzg0Ljc1NCwyLjY5IDg1LjA2OCwzLjA4IDg1LjI2NCwzLjc3MyBDODcuMjEzLDEwLjY3MyA4Ni43NTEsMzUuNjYgODUuNTM5LDQzLjY1MSBDODUuMTQ5LDQ2LjIxNiA4NC4yOSw0OC44NjYgODIuNDgzLDQ5LjkzNSBMNy4yMSw5My40ODYgQzYuODk3LDkzLjY2NyA2LjU5NSw5My43NDQgNi4zMTQsOTMuNzQ0IEw2LjEzMSw5My43MzMgQzYuMTMxLDkzLjczNCAzLjM0OSw5My4yOTMgMy4xMjgsOTEuNjA5IEMyLjU2OCw4Ny4zMjcgMS45NzcsODIuODI4IDEuOTYzLDcwLjI1OCBDMS45NDgsNTcuNDc0IDIuODYsNTAuNTEzIDIuODYsNTAuNTEzIEMzLjU3LDQ2LjM2NyA1LjY0Nyw0NS4zMjEgNS42NDcsNDUuMzIxIEM1LjY0Nyw0NS4zMjEgOC4xNDgsNDMuODg3IDEyLjIzOCw0MS41NDIgTDEyLjI0NSw0MS40MTQgTDEyLjI0NSw0MS4zNzEgQzEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQwLjkyNSAxMi4yNDMsNDAuNzkzIEMxMi4yNCw0MC42ODYgMTIuMzAyLDQwLjU4MyAxMi40MzQsNDAuNTA4IEwxOC40NDYsMzcuMDM2IEMxOC41NzQsMzYuOTYyIDE4Ljc0NiwzNi45MjYgMTguOTI3LDM2LjkyNiBDMTkuMTQ1LDM2LjkyNiAxOS4zNzYsMzYuOTc5IDE5LjU1NCwzNy4wODIgQzE5Ljc0NywzNy4xOTQgMTkuODM5LDM3LjM0IDE5LjgyMiwzNy40NzQgTDIwLjAzMywzNy4wNzIgQzQxLjgwNiwyNC41ODUgODAuNjM2LDIuMzE4IDgwLjc3NywyLjIzNiBDODAuODk0LDIuMTY4IDgxLjU4MywxLjcyOSA4Mi4zMTEsMS43MDEgTTgyLjMxMSwwLjcwNCBMODIuMjcyLDAuNzA1IEM4MS42NTQsMC43MjggODAuOTg5LDAuOTQ5IDgwLjI5OCwxLjM2MSBMODAuMjc3LDEuMzczIEM4MC4xMjksMS40NTggNTkuNzY4LDEzLjEzNSAxOS43NTgsMzYuMDc5IEMxOS41LDM1Ljk4MSAxOS4yMTQsMzUuOTI5IDE4LjkyNywzNS45MjkgQzE4LjU2MiwzNS45MjkgMTguMjIzLDM2LjAxMyAxNy45NDcsMzYuMTczIEwxMS45MzUsMzkuNjQ0IEMxMS40OTMsMzkuODk5IDExLjIzNiw0MC4zMzQgMTEuMjQ2LDQwLjgxIEwxMS4yNDcsNDAuOTYgTDUuMTY3LDQ0LjQ0NyBDNC43OTQsNDQuNjQ2IDIuNjI1LDQ1Ljk3OCAxLjg3Nyw1MC4zNDUgTDEuODcxLDUwLjM4NCBDMS44NjIsNTAuNDU0IDAuOTUxLDU3LjU1NyAwLjk2NSw3MC4yNTkgQzAuOTc5LDgyLjg3OSAxLjU2OCw4Ny4zNzUgMi4xMzcsOTEuNzI0IEwyLjEzOSw5MS43MzkgQzIuNDQ3LDk0LjA5NCA1LjYxNCw5NC42NjIgNS45NzUsOTQuNzE5IEw2LjAwOSw5NC43MjMgQzYuMTEsOTQuNzM2IDYuMjEzLDk0Ljc0MiA2LjMxNCw5NC43NDIgQzYuNzksOTQuNzQyIDcuMjYsOTQuNjEgNy43MSw5NC4zNSBMODIuOTgzLDUwLjc5OCBDODQuNzk0LDQ5LjcyNyA4NS45ODIsNDcuMzc1IDg2LjUyNSw0My44MDEgQzg3LjcxMSwzNS45ODcgODguMjU5LDEwLjcwNSA4Ni4yMjQsMy41MDIgQzg1Ljk3MSwyLjYwOSA4NS41MiwxLjk3NSA4NC44ODEsMS42MiBMODQuNzQ5LDEuNTU4IEw4Mi42NjQsMC43NjkgQzgyLjU1MSwwLjcyNSA4Mi40MzEsMC43MDQgODIuMzExLDAuNzA0IiBpZD0iRmlsbC0yIiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY2LjI2NywxMS41NjUgTDY3Ljc2MiwxMS45OTkgTDExLjQyMyw0NC4zMjUiIGlkPSJGaWxsLTMiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMjAyLDkwLjU0NSBDMTIuMDI5LDkwLjU0NSAxMS44NjIsOTAuNDU1IDExLjc2OSw5MC4yOTUgQzExLjYzMiw5MC4wNTcgMTEuNzEzLDg5Ljc1MiAxMS45NTIsODkuNjE0IEwzMC4zODksNzguOTY5IEMzMC42MjgsNzguODMxIDMwLjkzMyw3OC45MTMgMzEuMDcxLDc5LjE1MiBDMzEuMjA4LDc5LjM5IDMxLjEyNyw3OS42OTYgMzAuODg4LDc5LjgzMyBMMTIuNDUxLDkwLjQ3OCBMMTIuMjAyLDkwLjU0NSIgaWQ9IkZpbGwtNCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43NjQsNDIuNjU0IEwxMy42NTYsNDIuNTkyIEwxMy43MDIsNDIuNDIxIEwxOC44MzcsMzkuNDU3IEwxOS4wMDcsMzkuNTAyIEwxOC45NjIsMzkuNjczIEwxMy44MjcsNDIuNjM3IEwxMy43NjQsNDIuNjU0IiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTguNTIsOTAuMzc1IEw4LjUyLDQ2LjQyMSBMOC41ODMsNDYuMzg1IEw3NS44NCw3LjU1NCBMNzUuODQsNTEuNTA4IEw3NS43NzgsNTEuNTQ0IEw4LjUyLDkwLjM3NSBMOC41Miw5MC4zNzUgWiBNOC43Nyw0Ni41NjQgTDguNzcsODkuOTQ0IEw3NS41OTEsNTEuMzY1IEw3NS41OTEsNy45ODUgTDguNzcsNDYuNTY0IEw4Ljc3LDQ2LjU2NCBaIiBpZD0iRmlsbC02IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljk4Niw4My4xODIgQzI0Ljc1Niw4My4zMzEgMjQuMzc0LDgzLjU2NiAyNC4xMzcsODMuNzA1IEwxMi42MzIsOTAuNDA2IEMxMi4zOTUsOTAuNTQ1IDEyLjQyNiw5MC42NTggMTIuNyw5MC42NTggTDEzLjI2NSw5MC42NTggQzEzLjU0LDkwLjY1OCAxMy45NTgsOTAuNTQ1IDE0LjE5NSw5MC40MDYgTDI1LjcsODMuNzA1IEMyNS45MzcsODMuNTY2IDI2LjEyOCw4My40NTIgMjYuMTI1LDgzLjQ0OSBDMjYuMTIyLDgzLjQ0NyAyNi4xMTksODMuMjIgMjYuMTE5LDgyLjk0NiBDMjYuMTE5LDgyLjY3MiAyNS45MzEsODIuNTY5IDI1LjcwMSw4Mi43MTkgTDI0Ljk4Niw4My4xODIiIGlkPSJGaWxsLTciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjY2LDkwLjc4MiBMMTIuNyw5MC43ODIgQzEyLjUsOTAuNzgyIDEyLjM4NCw5MC43MjYgMTIuMzU0LDkwLjYxNiBDMTIuMzI0LDkwLjUwNiAxMi4zOTcsOTAuMzk5IDEyLjU2OSw5MC4yOTkgTDI0LjA3NCw4My41OTcgQzI0LjMxLDgzLjQ1OSAyNC42ODksODMuMjI2IDI0LjkxOCw4My4wNzggTDI1LjYzMyw4Mi42MTQgQzI1LjcyMyw4Mi41NTUgMjUuODEzLDgyLjUyNSAyNS44OTksODIuNTI1IEMyNi4wNzEsODIuNTI1IDI2LjI0NCw4Mi42NTUgMjYuMjQ0LDgyLjk0NiBDMjYuMjQ0LDgzLjE2IDI2LjI0NSw4My4zMDkgMjYuMjQ3LDgzLjM4MyBMMjYuMjUzLDgzLjM4NyBMMjYuMjQ5LDgzLjQ1NiBDMjYuMjQ2LDgzLjUzMSAyNi4yNDYsODMuNTMxIDI1Ljc2Myw4My44MTIgTDE0LjI1OCw5MC41MTQgQzE0LDkwLjY2NSAxMy41NjQsOTAuNzgyIDEzLjI2Niw5MC43ODIgTDEzLjI2Niw5MC43ODIgWiBNMTIuNjY2LDkwLjUzMiBMMTIuNyw5MC41MzMgTDEzLjI2Niw5MC41MzMgQzEzLjUxOCw5MC41MzMgMTMuOTE1LDkwLjQyNSAxNC4xMzIsOTAuMjk5IEwyNS42MzcsODMuNTk3IEMyNS44MDUsODMuNDk5IDI1LjkzMSw4My40MjQgMjUuOTk4LDgzLjM4MyBDMjUuOTk0LDgzLjI5OSAyNS45OTQsODMuMTY1IDI1Ljk5NCw4Mi45NDYgTDI1Ljg5OSw4Mi43NzUgTDI1Ljc2OCw4Mi44MjQgTDI1LjA1NCw4My4yODcgQzI0LjgyMiw4My40MzcgMjQuNDM4LDgzLjY3MyAyNC4yLDgzLjgxMiBMMTIuNjk1LDkwLjUxNCBMMTIuNjY2LDkwLjUzMiBMMTIuNjY2LDkwLjUzMiBaIiBpZD0iRmlsbC04IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEzLjI2Niw4OS44NzEgTDEyLjcsODkuODcxIEMxMi41LDg5Ljg3MSAxMi4zODQsODkuODE1IDEyLjM1NCw4OS43MDUgQzEyLjMyNCw4OS41OTUgMTIuMzk3LDg5LjQ4OCAxMi41NjksODkuMzg4IEwyNC4wNzQsODIuNjg2IEMyNC4zMzIsODIuNTM1IDI0Ljc2OCw4Mi40MTggMjUuMDY3LDgyLjQxOCBMMjUuNjMyLDgyLjQxOCBDMjUuODMyLDgyLjQxOCAyNS45NDgsODIuNDc0IDI1Ljk3OCw4Mi41ODQgQzI2LjAwOCw4Mi42OTQgMjUuOTM1LDgyLjgwMSAyNS43NjMsODIuOTAxIEwxNC4yNTgsODkuNjAzIEMxNCw4OS43NTQgMTMuNTY0LDg5Ljg3MSAxMy4yNjYsODkuODcxIEwxMy4yNjYsODkuODcxIFogTTEyLjY2Niw4OS42MjEgTDEyLjcsODkuNjIyIEwxMy4yNjYsODkuNjIyIEMxMy41MTgsODkuNjIyIDEzLjkxNSw4OS41MTUgMTQuMTMyLDg5LjM4OCBMMjUuNjM3LDgyLjY4NiBMMjUuNjY3LDgyLjY2OCBMMjUuNjMyLDgyLjY2NyBMMjUuMDY3LDgyLjY2NyBDMjQuODE1LDgyLjY2NyAyNC40MTgsODIuNzc1IDI0LjIsODIuOTAxIEwxMi42OTUsODkuNjAzIEwxMi42NjYsODkuNjIxIEwxMi42NjYsODkuNjIxIFoiIGlkPSJGaWxsLTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzcsOTAuODAxIEwxMi4zNyw4OS41NTQgTDEyLjM3LDkwLjgwMSIgaWQ9IkZpbGwtMTAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNi4xMyw5My45MDEgQzUuMzc5LDkzLjgwOCA0LjgxNiw5My4xNjQgNC42OTEsOTIuNTI1IEMzLjg2LDg4LjI4NyAzLjU0LDgzLjc0MyAzLjUyNiw3MS4xNzMgQzMuNTExLDU4LjM4OSA0LjQyMyw1MS40MjggNC40MjMsNTEuNDI4IEM1LjEzNCw0Ny4yODIgNy4yMSw0Ni4yMzYgNy4yMSw0Ni4yMzYgQzcuMjEsNDYuMjM2IDgxLjY2NywzLjI1IDgyLjA2OSwzLjAxNyBDODIuMjkyLDIuODg4IDg0LjU1NiwxLjQzMyA4NS4yNjQsMy45NCBDODcuMjE0LDEwLjg0IDg2Ljc1MiwzNS44MjcgODUuNTM5LDQzLjgxOCBDODUuMTUsNDYuMzgzIDg0LjI5MSw0OS4wMzMgODIuNDgzLDUwLjEwMSBMNy4yMSw5My42NTMgQzYuODI4LDkzLjg3NCA2LjQ2MSw5My45NDEgNi4xMyw5My45MDEgQzYuMTMsOTMuOTAxIDMuMzQ5LDkzLjQ2IDMuMTI5LDkxLjc3NiBDMi41NjgsODcuNDk1IDEuOTc3LDgyLjk5NSAxLjk2Miw3MC40MjUgQzEuOTQ4LDU3LjY0MSAyLjg2LDUwLjY4IDIuODYsNTAuNjggQzMuNTcsNDYuNTM0IDUuNjQ3LDQ1LjQ4OSA1LjY0Nyw0NS40ODkgQzUuNjQ2LDQ1LjQ4OSA4LjA2NSw0NC4wOTIgMTIuMjQ1LDQxLjY3OSBMMTMuMTE2LDQxLjU2IEwxOS43MTUsMzcuNzMgTDE5Ljc2MSwzNy4yNjkgTDYuMTMsOTMuOTAxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjMxNyw5NC4xNjEgTDYuMTAyLDk0LjE0OCBMNi4xMDEsOTQuMTQ4IEw1Ljg1Nyw5NC4xMDEgQzUuMTM4LDkzLjk0NSAzLjA4NSw5My4zNjUgMi44ODEsOTEuODA5IEMyLjMxMyw4Ny40NjkgMS43MjcsODIuOTk2IDEuNzEzLDcwLjQyNSBDMS42OTksNTcuNzcxIDIuNjA0LDUwLjcxOCAyLjYxMyw1MC42NDggQzMuMzM4LDQ2LjQxNyA1LjQ0NSw0NS4zMSA1LjUzNSw0NS4yNjYgTDEyLjE2Myw0MS40MzkgTDEzLjAzMyw0MS4zMiBMMTkuNDc5LDM3LjU3OCBMMTkuNTEzLDM3LjI0NCBDMTkuNTI2LDM3LjEwNyAxOS42NDcsMzcuMDA4IDE5Ljc4NiwzNy4wMjEgQzE5LjkyMiwzNy4wMzQgMjAuMDIzLDM3LjE1NiAyMC4wMDksMzcuMjkzIEwxOS45NSwzNy44ODIgTDEzLjE5OCw0MS44MDEgTDEyLjMyOCw0MS45MTkgTDUuNzcyLDQ1LjcwNCBDNS43NDEsNDUuNzIgMy43ODIsNDYuNzcyIDMuMTA2LDUwLjcyMiBDMy4wOTksNTAuNzgyIDIuMTk4LDU3LjgwOCAyLjIxMiw3MC40MjQgQzIuMjI2LDgyLjk2MyAyLjgwOSw4Ny40MiAzLjM3Myw5MS43MjkgQzMuNDY0LDkyLjQyIDQuMDYyLDkyLjg4MyA0LjY4Miw5My4xODEgQzQuNTY2LDkyLjk4NCA0LjQ4Niw5Mi43NzYgNC40NDYsOTIuNTcyIEMzLjY2NSw4OC41ODggMy4yOTEsODQuMzcgMy4yNzYsNzEuMTczIEMzLjI2Miw1OC41MiA0LjE2Nyw1MS40NjYgNC4xNzYsNTEuMzk2IEM0LjkwMSw0Ny4xNjUgNy4wMDgsNDYuMDU5IDcuMDk4LDQ2LjAxNCBDNy4wOTQsNDYuMDE1IDgxLjU0MiwzLjAzNCA4MS45NDQsMi44MDIgTDgxLjk3MiwyLjc4NSBDODIuODc2LDIuMjQ3IDgzLjY5MiwyLjA5NyA4NC4zMzIsMi4zNTIgQzg0Ljg4NywyLjU3MyA4NS4yODEsMy4wODUgODUuNTA0LDMuODcyIEM4Ny41MTgsMTEgODYuOTY0LDM2LjA5MSA4NS43ODUsNDMuODU1IEM4NS4yNzgsNDcuMTk2IDg0LjIxLDQ5LjM3IDgyLjYxLDUwLjMxNyBMNy4zMzUsOTMuODY5IEM2Ljk5OSw5NC4wNjMgNi42NTgsOTQuMTYxIDYuMzE3LDk0LjE2MSBMNi4zMTcsOTQuMTYxIFogTTYuMTcsOTMuNjU0IEM2LjQ2Myw5My42OSA2Ljc3NCw5My42MTcgNy4wODUsOTMuNDM3IEw4Mi4zNTgsNDkuODg2IEM4NC4xODEsNDguODA4IDg0Ljk2LDQ1Ljk3MSA4NS4yOTIsNDMuNzggQzg2LjQ2NiwzNi4wNDkgODcuMDIzLDExLjA4NSA4NS4wMjQsNC4wMDggQzg0Ljg0NiwzLjM3NyA4NC41NTEsMi45NzYgODQuMTQ4LDIuODE2IEM4My42NjQsMi42MjMgODIuOTgyLDIuNzY0IDgyLjIyNywzLjIxMyBMODIuMTkzLDMuMjM0IEM4MS43OTEsMy40NjYgNy4zMzUsNDYuNDUyIDcuMzM1LDQ2LjQ1MiBDNy4zMDQsNDYuNDY5IDUuMzQ2LDQ3LjUyMSA0LjY2OSw1MS40NzEgQzQuNjYyLDUxLjUzIDMuNzYxLDU4LjU1NiAzLjc3NSw3MS4xNzMgQzMuNzksODQuMzI4IDQuMTYxLDg4LjUyNCA0LjkzNiw5Mi40NzYgQzUuMDI2LDkyLjkzNyA1LjQxMiw5My40NTkgNS45NzMsOTMuNjE1IEM2LjA4Nyw5My42NCA2LjE1OCw5My42NTIgNi4xNjksOTMuNjU0IEw2LjE3LDkzLjY1NCBMNi4xNyw5My42NTQgWiIgaWQ9IkZpbGwtMTIiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4zMTcsNjguOTgyIEM3LjgwNiw2OC43MDEgOC4yMDIsNjguOTI2IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNi44MjksNzEuMjk0IDYuNDMzLDcxLjA2OSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIiBpZD0iRmlsbC0xMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjkyLDcxLjEzMyBDNi42MzEsNzEuMTMzIDYuNDMzLDcwLjkwNSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIEM3LjQ2LDY4LjkgNy41OTUsNjguODYxIDcuNzE0LDY4Ljg2MSBDOC4wMDMsNjguODYxIDguMjAyLDY5LjA5IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNy4xNzQsNzEuMDk0IDcuMDM5LDcxLjEzMyA2LjkyLDcxLjEzMyBNNy43MTQsNjguNjc0IEM3LjU1Nyw2OC42NzQgNy4zOTIsNjguNzIzIDcuMjI0LDY4LjgyMSBDNi42NzYsNjkuMTM4IDYuMjQ2LDY5Ljg3OSA2LjI0Niw3MC41MDggQzYuMjQ2LDcwLjk5NCA2LjUxNyw3MS4zMiA2LjkyLDcxLjMyIEM3LjA3OCw3MS4zMiA3LjI0Myw3MS4yNzEgNy40MTEsNzEuMTc0IEM3Ljk1OSw3MC44NTcgOC4zODksNzAuMTE3IDguMzg5LDY5LjQ4NyBDOC4zODksNjkuMDAxIDguMTE3LDY4LjY3NCA3LjcxNCw2OC42NzQiIGlkPSJGaWxsLTE0IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuOTIsNzAuOTQ3IEM2LjY0OSw3MC45NDcgNi42MjEsNzAuNjQgNi42MjEsNzAuNTA4IEM2LjYyMSw3MC4wMTcgNi45ODIsNjkuMzkyIDcuNDExLDY5LjE0NSBDNy41MjEsNjkuMDgyIDcuNjI1LDY5LjA0OSA3LjcxNCw2OS4wNDkgQzcuOTg2LDY5LjA0OSA4LjAxNSw2OS4zNTUgOC4wMTUsNjkuNDg3IEM4LjAxNSw2OS45NzggNy42NTIsNzAuNjAzIDcuMjI0LDcwLjg1MSBDNy4xMTUsNzAuOTE0IDcuMDEsNzAuOTQ3IDYuOTIsNzAuOTQ3IE03LjcxNCw2OC44NjEgQzcuNTk1LDY4Ljg2MSA3LjQ2LDY4LjkgNy4zMTcsNjguOTgyIEM2LjgyOSw2OS4yNjUgNi40MzMsNjkuOTQ4IDYuNDMzLDcwLjUwOCBDNi40MzMsNzAuOTA1IDYuNjMxLDcxLjEzMyA2LjkyLDcxLjEzMyBDNy4wMzksNzEuMTMzIDcuMTc0LDcxLjA5NCA3LjMxNyw3MS4wMTIgQzcuODA2LDcwLjczIDguMjAyLDcwLjA0NyA4LjIwMiw2OS40ODcgQzguMjAyLDY5LjA5IDguMDAzLDY4Ljg2MSA3LjcxNCw2OC44NjEiIGlkPSJGaWxsLTE1IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTcuNDQ0LDg1LjM1IEM3LjcwOCw4NS4xOTggNy45MjEsODUuMzE5IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuOTI1IDcuNzA4LDg2LjI5MiA3LjQ0NCw4Ni40NDQgQzcuMTgxLDg2LjU5NyA2Ljk2Nyw4Ni40NzUgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IiBpZD0iRmlsbC0xNiIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjIzLDg2LjUxIEM3LjA3NCw4Ni41MSA2Ljk2Nyw4Ni4zODcgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IEM3LjUyMSw4NS4zMDUgNy41OTQsODUuMjg0IDcuNjU4LDg1LjI4NCBDNy44MTQsODUuMjg0IDcuOTIxLDg1LjQwOCA3LjkyMSw4NS42MjIgQzcuOTIxLDg1LjkyNSA3LjcwOCw4Ni4yOTIgNy40NDQsODYuNDQ0IEM3LjM2Nyw4Ni40ODkgNy4yOTQsODYuNTEgNy4yMyw4Ni41MSBNNy42NTgsODUuMDk4IEM3LjU1OCw4NS4wOTggNy40NTUsODUuMTI3IDcuMzUxLDg1LjE4OCBDNy4wMzEsODUuMzczIDYuNzgxLDg1LjgwNiA2Ljc4MSw4Ni4xNzMgQzYuNzgxLDg2LjQ4MiA2Ljk2Niw4Ni42OTcgNy4yMyw4Ni42OTcgQzcuMzMsODYuNjk3IDcuNDMzLDg2LjY2NiA3LjUzOCw4Ni42MDcgQzcuODU4LDg2LjQyMiA4LjEwOCw4NS45ODkgOC4xMDgsODUuNjIyIEM4LjEwOCw4NS4zMTMgNy45MjMsODUuMDk4IDcuNjU4LDg1LjA5OCIgaWQ9IkZpbGwtMTciIGZpbGw9IiM4MDk3QTIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4yMyw4Ni4zMjIgTDcuMTU0LDg2LjE3MyBDNy4xNTQsODUuOTM4IDcuMzMzLDg1LjYyOSA3LjUzOCw4NS41MTIgTDcuNjU4LDg1LjQ3MSBMNy43MzQsODUuNjIyIEM3LjczNCw4NS44NTYgNy41NTUsODYuMTY0IDcuMzUxLDg2LjI4MiBMNy4yMyw4Ni4zMjIgTTcuNjU4LDg1LjI4NCBDNy41OTQsODUuMjg0IDcuNTIxLDg1LjMwNSA3LjQ0NCw4NS4zNSBDNy4xODEsODUuNTAyIDYuOTY3LDg1Ljg3MSA2Ljk2Nyw4Ni4xNzMgQzYuOTY3LDg2LjM4NyA3LjA3NCw4Ni41MSA3LjIzLDg2LjUxIEM3LjI5NCw4Ni41MSA3LjM2Nyw4Ni40ODkgNy40NDQsODYuNDQ0IEM3LjcwOCw4Ni4yOTIgNy45MjEsODUuOTI1IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuNDA4IDcuODE0LDg1LjI4NCA3LjY1OCw4NS4yODQiIGlkPSJGaWxsLTE4IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTc3LjI3OCw3Ljc2OSBMNzcuMjc4LDUxLjQzNiBMMTAuMjA4LDkwLjE2IEwxMC4yMDgsNDYuNDkzIEw3Ny4yNzgsNy43NjkiIGlkPSJGaWxsLTE5IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA4Myw5MC4zNzUgTDEwLjA4Myw0Ni40MjEgTDEwLjE0Niw0Ni4zODUgTDc3LjQwMyw3LjU1NCBMNzcuNDAzLDUxLjUwOCBMNzcuMzQxLDUxLjU0NCBMMTAuMDgzLDkwLjM3NSBMMTAuMDgzLDkwLjM3NSBaIE0xMC4zMzMsNDYuNTY0IEwxMC4zMzMsODkuOTQ0IEw3Ny4xNTQsNTEuMzY1IEw3Ny4xNTQsNy45ODUgTDEwLjMzMyw0Ni41NjQgTDEwLjMzMyw0Ni41NjQgWiIgaWQ9IkZpbGwtMjAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMjUuNzM3LDg4LjY0NyBMMTE4LjA5OCw5MS45ODEgTDExOC4wOTgsODQgTDEwNi42MzksODguNzEzIEwxMDYuNjM5LDk2Ljk4MiBMOTksMTAwLjMxNSBMMTEyLjM2OSwxMDMuOTYxIEwxMjUuNzM3LDg4LjY0NyIgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTIiIGZpbGw9IiM0NTVBNjQiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+"); - -},module.exports=RotateInstructions},{"./util.js":22}],17:[function(_dereq_,module){function ComplementaryFilter(kFilter){this.kFilter=kFilter,this.currentAccelMeasurement=new SensorSample,this.currentGyroMeasurement=new SensorSample,this.previousGyroMeasurement=new SensorSample,this.filterQ=Util.isIOS()?new MathUtil.Quaternion(-1,0,0,1):new MathUtil.Quaternion(1,0,0,1),this.previousFilterQ=new MathUtil.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new MathUtil.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new MathUtil.Vector3,this.measuredGravity=new MathUtil.Vector3,this.gyroIntegralQ=new MathUtil.Quaternion}var SensorSample=_dereq_("./sensor-sample.js"),MathUtil=_dereq_("../math-util.js"),Util=_dereq_("../util.js");ComplementaryFilter.prototype.addAccelMeasurement=function(vector,timestampS){this.currentAccelMeasurement.set(vector,timestampS)},ComplementaryFilter.prototype.addGyroMeasurement=function(vector,timestampS){this.currentGyroMeasurement.set(vector,timestampS);var deltaT=timestampS-this.previousGyroMeasurement.timestampS;Util.isTimestampDeltaValid(deltaT)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},ComplementaryFilter.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var deltaT=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,gyroDeltaQ=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,deltaT);this.gyroIntegralQ.multiply(gyroDeltaQ),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(gyroDeltaQ);var invFilterQ=new MathUtil.Quaternion;invFilterQ.copy(this.filterQ),invFilterQ.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(invFilterQ),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var deltaQ=new MathUtil.Quaternion;deltaQ.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),deltaQ.inverse(),Util.isDebug()&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",MathUtil.radToDeg*Util.getQuaternionAngle(deltaQ),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var targetQ=new MathUtil.Quaternion;targetQ.copy(this.filterQ),targetQ.multiply(deltaQ),this.filterQ.slerp(targetQ,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},ComplementaryFilter.prototype.getOrientation=function(){return this.filterQ},ComplementaryFilter.prototype.accelToQuaternion_=function(accel){var normAccel=new MathUtil.Vector3;normAccel.copy(accel),normAccel.normalize();var quat=new MathUtil.Quaternion;return quat.setFromUnitVectors(new MathUtil.Vector3(0,0,-1),normAccel),quat.inverse(),quat},ComplementaryFilter.prototype.gyroToQuaternionDelta_=function(gyro,dt){var quat=new MathUtil.Quaternion,axis=new MathUtil.Vector3;return axis.copy(gyro),axis.normalize(),quat.setFromAxisAngle(axis,gyro.length()*dt),quat},module.exports=ComplementaryFilter},{"../math-util.js":14,"../util.js":22,"./sensor-sample.js":20}],18:[function(_dereq_,module){function FusionPoseSensor(){this.deviceId="webvr-polyfill:fused",this.deviceName="VR Position Device (webvr-polyfill:fused)",this.accelerometer=new MathUtil.Vector3,this.gyroscope=new MathUtil.Vector3,this.start(),this.filter=new ComplementaryFilter(WebVRConfig.K_FILTER),this.posePredictor=new PosePredictor(WebVRConfig.PREDICTION_TIME_S),this.touchPanner=new TouchPanner,this.filterToWorldQ=new MathUtil.Quaternion,Util.isIOS()?this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new MathUtil.Quaternion,this.worldToScreenQ=new MathUtil.Quaternion,this.originalPoseAdjustQ=new MathUtil.Quaternion,this.originalPoseAdjustQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),Util.isLandscapeMode()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new MathUtil.Quaternion,this.isFirefoxAndroid=Util.isFirefoxAndroid(),this.isIOS=Util.isIOS(),this.orientationOut_=new Float32Array(4)}var ComplementaryFilter=_dereq_("./complementary-filter.js"),PosePredictor=_dereq_("./pose-predictor.js"),TouchPanner=_dereq_("../touch-panner.js"),MathUtil=_dereq_("../math-util.js"),Util=_dereq_("../util.js");FusionPoseSensor.prototype.getPosition=function(){return null},FusionPoseSensor.prototype.getOrientation=function(){var orientation=this.filter.getOrientation();this.predictedQ=this.posePredictor.getPrediction(orientation,this.gyroscope,this.previousTimestampS);var out=new MathUtil.Quaternion;return out.copy(this.filterToWorldQ),out.multiply(this.resetQ),WebVRConfig.TOUCH_PANNER_DISABLED||out.multiply(this.touchPanner.getOrientation()),out.multiply(this.predictedQ),out.multiply(this.worldToScreenQ),WebVRConfig.YAW_ONLY&&(out.x=0,out.z=0,out.normalize()),this.orientationOut_[0]=out.x,this.orientationOut_[1]=out.y,this.orientationOut_[2]=out.z,this.orientationOut_[3]=out.w,this.orientationOut_},FusionPoseSensor.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),Util.isLandscapeMode()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ),WebVRConfig.TOUCH_PANNER_DISABLED||this.touchPanner.resetSensor()},FusionPoseSensor.prototype.onDeviceMotion_=function(deviceMotion){this.updateDeviceMotion_(deviceMotion)},FusionPoseSensor.prototype.updateDeviceMotion_=function(deviceMotion){var accGravity=deviceMotion.accelerationIncludingGravity,rotRate=deviceMotion.rotationRate,timestampS=deviceMotion.timeStamp/1e3;this.isFirefoxAndroid&&(timestampS/=1e3);var deltaS=timestampS-this.previousTimestampS;return deltaS<=Util.MIN_TIMESTEP||deltaS>Util.MAX_TIMESTEP?(console.warn("Invalid timestamps detected. Time step between successive gyroscope sensor samples is very small or not monotonic"),void(this.previousTimestampS=timestampS)):(this.accelerometer.set(-accGravity.x,-accGravity.y,-accGravity.z),this.gyroscope.set(rotRate.alpha,rotRate.beta,rotRate.gamma),(this.isIOS||this.isFirefoxAndroid)&&this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addAccelMeasurement(this.accelerometer,timestampS),this.filter.addGyroMeasurement(this.gyroscope,timestampS),void(this.previousTimestampS=timestampS))},FusionPoseSensor.prototype.onOrientationChange_=function(){this.setScreenTransform_()},FusionPoseSensor.prototype.onMessage_=function(event){var message=event.data;if(message&&message.type){var type=message.type.toLowerCase();"devicemotion"===type&&this.updateDeviceMotion_(message.deviceMotionEvent)}},FusionPoseSensor.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),Math.PI/2);break;case 180:}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},FusionPoseSensor.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),Util.isIOS()&&Util.isInsideCrossDomainIFrame()&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},FusionPoseSensor.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)},module.exports=FusionPoseSensor},{"../math-util.js":14,"../touch-panner.js":21,"../util.js":22,"./complementary-filter.js":17,"./pose-predictor.js":19}],19:[function(_dereq_,module){function PosePredictor(predictionTimeS){this.predictionTimeS=predictionTimeS,this.previousQ=new MathUtil.Quaternion,this.previousTimestampS=null,this.deltaQ=new MathUtil.Quaternion,this.outQ=new MathUtil.Quaternion}var MathUtil=_dereq_("../math-util"),Util=_dereq_("../util");PosePredictor.prototype.getPrediction=function(currentQ,gyro,timestampS){if(!this.previousTimestampS)return this.previousQ.copy(currentQ),this.previousTimestampS=timestampS,currentQ;var axis=new MathUtil.Vector3;axis.copy(gyro),axis.normalize();var angularSpeed=gyro.length();if(angularSpeed<20*MathUtil.degToRad)return Util.isDebug()&&console.log("Moving slowly, at %s deg/s: no prediction",(MathUtil.radToDeg*angularSpeed).toFixed(1)),this.outQ.copy(currentQ),this.previousQ.copy(currentQ),this.outQ;var predictAngle=(timestampS-this.previousTimestampS,angularSpeed*this.predictionTimeS);return this.deltaQ.setFromAxisAngle(axis,predictAngle),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(currentQ),this.previousTimestampS=timestampS,this.outQ},module.exports=PosePredictor},{"../math-util":14,"../util":22}],20:[function(_dereq_,module){function SensorSample(sample,timestampS){this.set(sample,timestampS)}SensorSample.prototype.set=function(sample,timestampS){this.sample=sample,this.timestampS=timestampS},SensorSample.prototype.copy=function(sensorSample){this.set(sensorSample.sample,sensorSample.timestampS)},module.exports=SensorSample},{}],21:[function(_dereq_,module){function TouchPanner(){window.addEventListener("touchstart",this.onTouchStart_.bind(this)),window.addEventListener("touchmove",this.onTouchMove_.bind(this)),window.addEventListener("touchend",this.onTouchEnd_.bind(this)),this.isTouching=!1,this.rotateStart=new MathUtil.Vector2,this.rotateEnd=new MathUtil.Vector2,this.rotateDelta=new MathUtil.Vector2,this.theta=0,this.orientation=new MathUtil.Quaternion}var MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js"),ROTATE_SPEED=.5;TouchPanner.prototype.getOrientation=function(){return this.orientation.setFromEulerXYZ(0,0,this.theta),this.orientation},TouchPanner.prototype.resetSensor=function(){this.theta=0},TouchPanner.prototype.onTouchStart_=function(e){1==e.touches.length&&(this.rotateStart.set(e.touches[0].pageX,e.touches[0].pageY),this.isTouching=!0)},TouchPanner.prototype.onTouchMove_=function(e){if(this.isTouching){this.rotateEnd.set(e.touches[0].pageX,e.touches[0].pageY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd),Util.isIOS()&&(this.rotateDelta.x*=-1);var element=document.body;this.theta+=2*Math.PI*this.rotateDelta.x/element.clientWidth*ROTATE_SPEED}},TouchPanner.prototype.onTouchEnd_=function(){this.isTouching=!1},module.exports=TouchPanner},{"./math-util.js":14,"./util.js":22}],22:[function(_dereq_,module){var objectAssign=_dereq_("object-assign"),Util=window.Util||{};Util.MIN_TIMESTEP=.001,Util.MAX_TIMESTEP=1,Util.base64=function(mimeType,base64){return"data:"+mimeType+";base64,"+base64},Util.clamp=function(value,min,max){return Math.min(Math.max(min,value),max)},Util.lerp=function(a,b,t){return a+(b-a)*t},Util.isIOS=function(){var isIOS=/iPad|iPhone|iPod/.test(navigator.platform);return function(){return isIOS}}(),Util.isSafari=function(){var isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return function(){return isSafari}}(),Util.isFirefoxAndroid=function(){var isFirefoxAndroid=-1!==navigator.userAgent.indexOf("Firefox")&&-1!==navigator.userAgent.indexOf("Android");return function(){return isFirefoxAndroid}}(),Util.isLandscapeMode=function(){return 90==window.orientation||-90==window.orientation},Util.isTimestampDeltaValid=function(timestampDeltaS){return isNaN(timestampDeltaS)?!1:timestampDeltaS<=Util.MIN_TIMESTEP?!1:timestampDeltaS>Util.MAX_TIMESTEP?!1:!0},Util.getScreenWidth=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio},Util.getScreenHeight=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio},Util.requestFullscreen=function(element){if(element.requestFullscreen)element.requestFullscreen();else if(element.webkitRequestFullscreen)element.webkitRequestFullscreen();else if(element.mozRequestFullScreen)element.mozRequestFullScreen();else{if(!element.msRequestFullscreen)return!1;element.msRequestFullscreen()}return!0},Util.exitFullscreen=function(){if(document.exitFullscreen)document.exitFullscreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else{if(!document.msExitFullscreen)return!1;document.msExitFullscreen()}return!0},Util.getFullscreenElement=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},Util.linkProgram=function(gl,vertexSource,fragmentSource,attribLocationMap){var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,vertexSource),gl.compileShader(vertexShader);var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,fragmentSource),gl.compileShader(fragmentShader);var program=gl.createProgram();gl.attachShader(program,vertexShader),gl.attachShader(program,fragmentShader);for(var attribName in attribLocationMap)gl.bindAttribLocation(program,attribLocationMap[attribName],attribName);return gl.linkProgram(program),gl.deleteShader(vertexShader),gl.deleteShader(fragmentShader),program},Util.getProgramUniforms=function(gl,program){for(var uniforms={},uniformCount=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS),uniformName="",i=0;uniformCount>i;i++){var uniformInfo=gl.getActiveUniform(program,i);uniformName=uniformInfo.name.replace("[0]",""),uniforms[uniformName]=gl.getUniformLocation(program,uniformName)}return uniforms},Util.orthoMatrix=function(out,left,right,bottom,top,near,far){var lr=1/(left-right),bt=1/(bottom-top),nf=1/(near-far);return out[0]=-2*lr,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=-2*bt,out[6]=0,out[7]=0,out[8]=0,out[9]=0,out[10]=2*nf,out[11]=0,out[12]=(left+right)*lr,out[13]=(top+bottom)*bt,out[14]=(far+near)*nf,out[15]=1,out},Util.copyArray=function(source,dest){for(var i=0,n=source.length;n>i;i++)dest[i]=source[i]},Util.isMobile=function(){var check=!1;return function(a){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))&&(check=!0)}(navigator.userAgent||navigator.vendor||window.opera),check},Util.extend=objectAssign,Util.safariCssSizeWorkaround=function(canvas){if(Util.isIOS()){var width=canvas.style.width,height=canvas.style.height;canvas.style.width=parseInt(width)+1+"px",canvas.style.height=parseInt(height)+"px",setTimeout(function(){canvas.style.width=width,canvas.style.height=height},100)}window.Util=Util,window.canvas=canvas},Util.isDebug=function(){return Util.getQueryParameter("debug")},Util.getQueryParameter=function(name){var name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"),regex=new RegExp("[\\?&]"+name+"=([^&#]*)"),results=regex.exec(location.search);return null===results?"":decodeURIComponent(results[1].replace(/\+/g," "))},Util.frameDataFromPose=function(){function mat4_perspectiveFromFieldOfView(out,fov,near,far){var upTan=Math.tan(fov?fov.upDegrees*piOver180:rad45),downTan=Math.tan(fov?fov.downDegrees*piOver180:rad45),leftTan=Math.tan(fov?fov.leftDegrees*piOver180:rad45),rightTan=Math.tan(fov?fov.rightDegrees*piOver180:rad45),xScale=2/(leftTan+rightTan),yScale=2/(upTan+downTan);return out[0]=xScale,out[1]=0,out[2]=0,out[3]=0,out[4]=0,out[5]=yScale,out[6]=0,out[7]=0,out[8]=-((leftTan-rightTan)*xScale*.5),out[9]=(upTan-downTan)*yScale*.5,out[10]=far/(near-far),out[11]=-1,out[12]=0,out[13]=0,out[14]=far*near/(near-far),out[15]=0,out}function mat4_fromRotationTranslation(out,q,v){var x=q[0],y=q[1],z=q[2],w=q[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;return out[0]=1-(yy+zz),out[1]=xy+wz,out[2]=xz-wy,out[3]=0,out[4]=xy-wz,out[5]=1-(xx+zz),out[6]=yz+wx,out[7]=0,out[8]=xz+wy,out[9]=yz-wx,out[10]=1-(xx+yy),out[11]=0,out[12]=v[0],out[13]=v[1],out[14]=v[2],out[15]=1,out}function mat4_translate(out,a,v){var a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,x=v[0],y=v[1],z=v[2];return a===out?(out[12]=a[0]*x+a[4]*y+a[8]*z+a[12],out[13]=a[1]*x+a[5]*y+a[9]*z+a[13],out[14]=a[2]*x+a[6]*y+a[10]*z+a[14],out[15]=a[3]*x+a[7]*y+a[11]*z+a[15]):(a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],out[0]=a00,out[1]=a01,out[2]=a02,out[3]=a03,out[4]=a10,out[5]=a11,out[6]=a12,out[7]=a13,out[8]=a20,out[9]=a21,out[10]=a22,out[11]=a23,out[12]=a00*x+a10*y+a20*z+a[12],out[13]=a01*x+a11*y+a21*z+a[13],out[14]=a02*x+a12*y+a22*z+a[14],out[15]=a03*x+a13*y+a23*z+a[15]),out}function mat4_invert(out,a){var a00=a[0],a01=a[1],a02=a[2],a03=a[3],a10=a[4],a11=a[5],a12=a[6],a13=a[7],a20=a[8],a21=a[9],a22=a[10],a23=a[11],a30=a[12],a31=a[13],a32=a[14],a33=a[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;return det?(det=1/det,out[0]=(a11*b11-a12*b10+a13*b09)*det,out[1]=(a02*b10-a01*b11-a03*b09)*det,out[2]=(a31*b05-a32*b04+a33*b03)*det,out[3]=(a22*b04-a21*b05-a23*b03)*det,out[4]=(a12*b08-a10*b11-a13*b07)*det,out[5]=(a00*b11-a02*b08+a03*b07)*det,out[6]=(a32*b02-a30*b05-a33*b01)*det,out[7]=(a20*b05-a22*b02+a23*b01)*det,out[8]=(a10*b10-a11*b08+a13*b06)*det,out[9]=(a01*b08-a00*b10-a03*b06)*det,out[10]=(a30*b04-a31*b02+a33*b00)*det,out[11]=(a21*b02-a20*b04-a23*b00)*det,out[12]=(a11*b07-a10*b09-a12*b06)*det,out[13]=(a00*b09-a01*b07+a02*b06)*det,out[14]=(a31*b01-a30*b03-a32*b00)*det,out[15]=(a20*b03-a21*b01+a22*b00)*det,out):null}function updateEyeMatrices(projection,view,pose,parameters,vrDisplay){mat4_perspectiveFromFieldOfView(projection,parameters?parameters.fieldOfView:null,vrDisplay.depthNear,vrDisplay.depthFar);var orientation=pose.orientation||defaultOrientation,position=pose.position||defaultPosition;mat4_fromRotationTranslation(view,orientation,position),parameters&&mat4_translate(view,view,parameters.offset),mat4_invert(view,view)}var piOver180=Math.PI/180,rad45=.25*Math.PI,defaultOrientation=new Float32Array([0,0,0,1]),defaultPosition=new Float32Array([0,0,0]);return function(frameData,pose,vrDisplay){return frameData&&pose?(frameData.pose=pose,frameData.timestamp=pose.timestamp,updateEyeMatrices(frameData.leftProjectionMatrix,frameData.leftViewMatrix,pose,vrDisplay.getEyeParameters("left"),vrDisplay),updateEyeMatrices(frameData.rightProjectionMatrix,frameData.rightViewMatrix,pose,vrDisplay.getEyeParameters("right"),vrDisplay),!0):!1}}(),Util.isInsideCrossDomainIFrame=function(){var isFramed=window.self!==window.top,refDomain=Util.getDomainFromUrl(document.referrer),thisDomain=Util.getDomainFromUrl(window.location.href);return isFramed&&refDomain!==thisDomain},Util.getDomainFromUrl=function(url){var domain;return domain=url.indexOf("://")>-1?url.split("/")[2]:url.split("/")[0],domain=domain.split(":")[0]},module.exports=Util},{"object-assign":2}],23:[function(_dereq_,module){function ViewerSelector(){try{this.selectedKey=localStorage.getItem(VIEWER_KEY)||DEFAULT_VIEWER}catch(error){console.error("Failed to load viewer profile: %s",error)}this.dialog=this.createDialog_(DeviceInfo.Viewers),this.root=null}var DeviceInfo=_dereq_("./device-info.js"),EventEmitter3=_dereq_("eventemitter3"),DEFAULT_VIEWER=(_dereq_("./util.js"),"CardboardV1"),VIEWER_KEY="WEBVR_CARDBOARD_VIEWER",CLASS_NAME="webvr-polyfill-viewer-selector";ViewerSelector.prototype=new EventEmitter3,ViewerSelector.prototype.show=function(root){this.root=root,root.appendChild(this.dialog);var selected=this.dialog.querySelector("#"+this.selectedKey);selected.checked=!0,this.dialog.style.display="block"},ViewerSelector.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},ViewerSelector.prototype.getCurrentViewer=function(){return DeviceInfo.Viewers[this.selectedKey]},ViewerSelector.prototype.getSelectedKey_=function(){var input=this.dialog.querySelector("input[name=field]:checked");return input?input.id:null},ViewerSelector.prototype.onSave_=function(){if(this.selectedKey=this.getSelectedKey_(),!this.selectedKey||!DeviceInfo.Viewers[this.selectedKey])return void console.error("ViewerSelector.onSave_: this should never happen!");this.emit("change",DeviceInfo.Viewers[this.selectedKey]);try{localStorage.setItem(VIEWER_KEY,this.selectedKey)}catch(error){console.error("Failed to save viewer profile: %s",error)}this.hide()},ViewerSelector.prototype.createDialog_=function(options){var container=document.createElement("div");container.classList.add(CLASS_NAME),container.style.display="none";var overlay=document.createElement("div"),s=overlay.style;s.position="fixed",s.left=0,s.top=0,s.width="100%",s.height="100%",s.background="rgba(0, 0, 0, 0.3)",overlay.addEventListener("click",this.hide.bind(this));var width=280,dialog=document.createElement("div"),s=dialog.style;s.boxSizing="border-box",s.position="fixed",s.top="24px",s.left="50%",s.marginLeft=-width/2+"px",s.width=width+"px",s.padding="24px",s.overflow="hidden",s.background="#fafafa",s.fontFamily="'Roboto', sans-serif",s.boxShadow="0px 5px 20px #666",dialog.appendChild(this.createH1_("Select your viewer"));for(var id in options)dialog.appendChild(this.createChoice_(id,options[id].label));return dialog.appendChild(this.createButton_("Save",this.onSave_.bind(this))),container.appendChild(overlay),container.appendChild(dialog),container},ViewerSelector.prototype.createH1_=function(name){var h1=document.createElement("h1"),s=h1.style;return s.color="black",s.fontSize="20px",s.fontWeight="bold",s.marginTop=0,s.marginBottom="24px",h1.innerHTML=name,h1},ViewerSelector.prototype.createChoice_=function(id,name){var div=document.createElement("div");div.style.marginTop="8px",div.style.color="black";var input=document.createElement("input");input.style.fontSize="30px",input.setAttribute("id",id),input.setAttribute("type","radio"),input.setAttribute("value",id),input.setAttribute("name","field");var label=document.createElement("label");return label.style.marginLeft="4px",label.setAttribute("for",id),label.innerHTML=name,div.appendChild(input),div.appendChild(label),div},ViewerSelector.prototype.createButton_=function(label,onclick){var button=document.createElement("button");button.innerHTML=label;var s=button.style;return s["float"]="right",s.textTransform="uppercase",s.color="#1094f7",s.fontSize="14px",s.letterSpacing=0,s.border=0,s.background="none",s.marginTop="16px",button.addEventListener("click",onclick),button},module.exports=ViewerSelector},{"./device-info.js":8,"./util.js":22,eventemitter3:1}],24:[function(_dereq_,module){function AndroidWakeLock(){function addSourceToVideo(element,type,dataURI){var source=document.createElement("source");source.src=dataURI,source.type="video/"+type,element.appendChild(source)}var video=document.createElement("video");video.setAttribute("loop",""),addSourceToVideo(video,"webm",Util.base64("video/webm","GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA=")),addSourceToVideo(video,"mp4",Util.base64("video/mp4","AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAAG21kYXQAAAGzABAHAAABthADAowdbb9/AAAC6W1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIVdHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAIAAAACAAAAAABsW1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAAA+gAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAVxtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEcc3RibAAAALhzdHNkAAAAAAAAAAEAAACobXA0dgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIAAgASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAFJlc2RzAAAAAANEAAEABDwgEQAAAAADDUAAAAAABS0AAAGwAQAAAbWJEwAAAQAAAAEgAMSNiB9FAEQBFGMAAAGyTGF2YzUyLjg3LjQGAQIAAAAYc3R0cwAAAAAAAAABAAAAAQAAAAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAFHN0c3oAAAAAAAAAEwAAAAEAAAAUc3RjbwAAAAAAAAABAAAALAAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQAAAABMYXZmNTIuNzguMw==")),this.request=function(){video.paused&&video.play()},this.release=function(){video.pause()}}function iOSWakeLock(){var timer=null;this.request=function(){timer||(timer=setInterval(function(){window.location=window.location,setTimeout(window.stop,0)},3e4))},this.release=function(){timer&&(clearInterval(timer),timer=null)}}function getWakeLock(){var userAgent=navigator.userAgent||navigator.vendor||window.opera;return userAgent.match(/iPhone/i)||userAgent.match(/iPod/i)?iOSWakeLock:AndroidWakeLock}var Util=_dereq_("./util.js");module.exports=getWakeLock()},{"./util.js":22}],25:[function(_dereq_,module){function WebVRPolyfill(){this.displays=[],this.devices=[],this.devicesPopulated=!1,this.nativeWebVRAvailable=this.isWebVRAvailable(),this.nativeLegacyWebVRAvailable=this.isDeprecatedWebVRAvailable(),this.nativeGetVRDisplaysFunc=this.nativeWebVRAvailable?navigator.getVRDisplays:null,this.nativeLegacyWebVRAvailable||(this.enablePolyfill(),WebVRConfig.ENABLE_DEPRECATED_API&&this.enableDeprecatedPolyfill()),InstallWebVRSpecShim()}function InstallWebVRSpecShim(){"VRDisplay"in window&&!("VRFrameData"in window)&&(window.VRFrameData=VRFrameData,"depthNear"in window.VRDisplay.prototype||(window.VRDisplay.prototype.depthNear=.01),"depthFar"in window.VRDisplay.prototype||(window.VRDisplay.prototype.depthFar=1e4),window.VRDisplay.prototype.getFrameData=function(frameData){return Util.frameDataFromPose(frameData,this.getPose(),this)})}var Util=_dereq_("./util.js"),CardboardVRDisplay=_dereq_("./cardboard-vr-display.js"),MouseKeyboardVRDisplay=_dereq_("./mouse-keyboard-vr-display.js"),VRDisplay=_dereq_("./base.js").VRDisplay,VRFrameData=_dereq_("./base.js").VRFrameData,HMDVRDevice=_dereq_("./base.js").HMDVRDevice,PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice,VRDisplayHMDDevice=_dereq_("./display-wrappers.js").VRDisplayHMDDevice,VRDisplayPositionSensorDevice=_dereq_("./display-wrappers.js").VRDisplayPositionSensorDevice;WebVRPolyfill.prototype.isWebVRAvailable=function(){return"getVRDisplays"in navigator},WebVRPolyfill.prototype.isDeprecatedWebVRAvailable=function(){return"getVRDevices"in navigator||"mozGetVRDevices"in navigator},WebVRPolyfill.prototype.populateDevices=function(){if(!this.devicesPopulated){var vrDisplay=null;this.isCardboardCompatible()&&(vrDisplay=new CardboardVRDisplay,this.displays.push(vrDisplay),WebVRConfig.ENABLE_DEPRECATED_API&&(this.devices.push(new VRDisplayHMDDevice(vrDisplay)),this.devices.push(new VRDisplayPositionSensorDevice(vrDisplay)))),this.isMobile()||WebVRConfig.MOUSE_KEYBOARD_CONTROLS_DISABLED||(vrDisplay=new MouseKeyboardVRDisplay,this.displays.push(vrDisplay),WebVRConfig.ENABLE_DEPRECATED_API&&(this.devices.push(new VRDisplayHMDDevice(vrDisplay)),this.devices.push(new VRDisplayPositionSensorDevice(vrDisplay)))),this.devicesPopulated=!0}},WebVRPolyfill.prototype.enablePolyfill=function(){if(navigator.getVRDisplays=this.getVRDisplays.bind(this),this.nativeWebVRAvailable&&this.isCardboardCompatible()&&window.VRFrameData){var nativeFrameData=new window.VRFrameData,nativeGetFrameData=window.VRDisplay.prototype.getFrameData;window.VRFrameData=VRFrameData,window.VRDisplay.prototype.getFrameData=function(frameData){nativeGetFrameData.call(this,nativeFrameData),frameData.pose=nativeFrameData.pose,Util.copyArray(nativeFrameData.leftProjectionMatrix,frameData.leftProjectionMatrix),Util.copyArray(nativeFrameData.rightProjectionMatrix,frameData.rightProjectionMatrix),Util.copyArray(nativeFrameData.leftViewMatrix,frameData.leftViewMatrix),Util.copyArray(nativeFrameData.rightViewMatrix,frameData.rightViewMatrix)}}if(window.VRDisplay=VRDisplay,navigator&&!navigator.vrEnabled){var self=this;Object.defineProperty(navigator,"vrEnabled",{get:function(){return self.isCardboardCompatible()&&(self.isFullScreenAvailable()||Util.isIOS())}})}"VRFrameData"in window||(window.VRFrameData=VRFrameData)},WebVRPolyfill.prototype.enableDeprecatedPolyfill=function(){navigator.getVRDevices=this.getVRDevices.bind(this),window.HMDVRDevice=HMDVRDevice,window.PositionSensorVRDevice=PositionSensorVRDevice},WebVRPolyfill.prototype.getVRDisplays=function(){this.populateDevices();var polyfillDisplays=this.displays;return this.nativeWebVRAvailable?this.nativeGetVRDisplaysFunc.call(navigator).then(function(nativeDisplays){return WebVRConfig.ALWAYS_APPEND_POLYFILL_DISPLAY?nativeDisplays.concat(polyfillDisplays):nativeDisplays.length>0?nativeDisplays:polyfillDisplays}):new Promise(function(resolve,reject){try{resolve(polyfillDisplays)}catch(e){reject(e)}})},WebVRPolyfill.prototype.getVRDevices=function(){console.warn("getVRDevices is deprecated. Please update your code to use getVRDisplays instead.");var self=this;return new Promise(function(resolve,reject){try{if(!self.devicesPopulated){if(self.nativeWebVRAvailable)return navigator.getVRDisplays(function(displays){for(var i=0;i>>>>>> 5b18f9d136e5edffb0ddecae5bb30c007292c6df +!function(f){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=f();else if("function"==typeof define&&define.amd)define([],f);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).WebVRPolyfill=f()}}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n||e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;oself.capabilities.maxLayers)reject(new Error("Invalid number of layers."));else{var incomingLayer=layers[0];if(incomingLayer.source){var leftBounds=incomingLayer.leftBounds||defaultLeftBounds,rightBounds=incomingLayer.rightBounds||defaultRightBounds;if(wasPresenting){var layer=self.layer_;layer.source!==incomingLayer.source&&(layer.source=incomingLayer.source);for(var i=0;i<4;i++)layer.leftBounds[i]=leftBounds[i],layer.rightBounds[i]=rightBounds[i];return void resolve()}if(self.layer_={predistorted:incomingLayer.predistorted,source:incomingLayer.source,leftBounds:leftBounds.slice(0),rightBounds:rightBounds.slice(0)},self.waitingForPresent_=!1,self.layer_&&self.layer_.source){var fullscreenElement=self.wrapForFullscreen(self.layer_.source);self.addFullscreenListeners_(fullscreenElement,onFullscreenChange,onFullscreenError),Util.requestFullscreen(fullscreenElement)?(self.wakelock_.request(),self.waitingForPresent_=!0):Util.isIOS()&&(self.wakelock_.request(),self.isPresenting=!0,self.beginPresent_(),self.fireVRDisplayPresentChange_(),resolve())}self.waitingForPresent_||Util.isIOS()||(Util.exitFullscreen(),reject(new Error("Unable to present.")))}else resolve()}else reject(new Error("VRDisplay is not capable of presenting."))})},VRDisplay.prototype.exitPresent=function(){var wasPresenting=this.isPresenting,self=this;return this.isPresenting=!1,this.layer_=null,this.wakelock_.release(),new Promise(function(resolve,reject){wasPresenting?(!Util.exitFullscreen()&&Util.isIOS()&&(self.endPresent_(),self.fireVRDisplayPresentChange_()),resolve()):reject(new Error("Was not presenting to VRDisplay."))})},VRDisplay.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},VRDisplay.prototype.fireVRDisplayPresentChange_=function(){var event=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(event)},VRDisplay.prototype.addFullscreenListeners_=function(element,changeHandler,errorHandler){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=element,this.fullscreenChangeHandler_=changeHandler,this.fullscreenErrorHandler_=errorHandler,changeHandler&&(document.fullscreenEnabled?element.addEventListener("fullscreenchange",changeHandler,!1):document.webkitFullscreenEnabled?element.addEventListener("webkitfullscreenchange",changeHandler,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",changeHandler,!1):document.msFullscreenEnabled&&element.addEventListener("msfullscreenchange",changeHandler,!1)),errorHandler&&(document.fullscreenEnabled?element.addEventListener("fullscreenerror",errorHandler,!1):document.webkitFullscreenEnabled?element.addEventListener("webkitfullscreenerror",errorHandler,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",errorHandler,!1):document.msFullscreenEnabled&&element.addEventListener("msfullscreenerror",errorHandler,!1))},VRDisplay.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var element=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var changeHandler=this.fullscreenChangeHandler_;element.removeEventListener("fullscreenchange",changeHandler,!1),element.removeEventListener("webkitfullscreenchange",changeHandler,!1),document.removeEventListener("mozfullscreenchange",changeHandler,!1),element.removeEventListener("msfullscreenchange",changeHandler,!1)}if(this.fullscreenErrorHandler_){var errorHandler=this.fullscreenErrorHandler_;element.removeEventListener("fullscreenerror",errorHandler,!1),element.removeEventListener("webkitfullscreenerror",errorHandler,!1),document.removeEventListener("mozfullscreenerror",errorHandler,!1),element.removeEventListener("msfullscreenerror",errorHandler,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},VRDisplay.prototype.beginPresent_=function(){},VRDisplay.prototype.endPresent_=function(){},VRDisplay.prototype.submitFrame=function(pose){},VRDisplay.prototype.getEyeParameters=function(whichEye){return null},HMDVRDevice.prototype=new VRDevice,PositionSensorVRDevice.prototype=new VRDevice,module.exports.VRFrameData=VRFrameData,module.exports.VRDisplay=VRDisplay,module.exports.VRDevice=VRDevice,module.exports.HMDVRDevice=HMDVRDevice,module.exports.PositionSensorVRDevice=PositionSensorVRDevice},{"./util.js":22,"./wakelock.js":24}],4:[function(_dereq_,module,exports){function CardboardDistorter(gl){this.gl=gl,this.ctxAttribs=gl.getContextAttributes(),this.meshWidth=20,this.meshHeight=20,this.bufferScale=WebVRConfig.BUFFER_SCALE,this.bufferWidth=gl.drawingBufferWidth,this.bufferHeight=gl.drawingBufferHeight,this.realBindFramebuffer=gl.bindFramebuffer,this.realEnable=gl.enable,this.realDisable=gl.disable,this.realColorMask=gl.colorMask,this.realClearColor=gl.clearColor,this.realViewport=gl.viewport,Util.isIOS()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=Util.linkProgram(gl,distortionVS,distortionFS,this.attribs),this.uniforms=Util.getProgramUniforms(gl,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=gl.createBuffer(),this.indexBuffer=gl.createBuffer(),this.indexCount=0,this.renderTarget=gl.createTexture(),this.framebuffer=gl.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=gl.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=gl.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=gl.createRenderbuffer()),this.patch(),this.onResize(),WebVRConfig.CARDBOARD_UI_DISABLED||(this.cardboardUI=new CardboardUI(gl))}var CardboardUI=_dereq_("./cardboard-ui.js"),Util=_dereq_("./util.js"),WGLUPreserveGLState=_dereq_("./deps/wglu-preserve-state.js"),distortionVS=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),distortionFS=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");CardboardDistorter.prototype.destroy=function(){var gl=this.gl;this.unpatch(),gl.deleteProgram(this.program),gl.deleteBuffer(this.vertexBuffer),gl.deleteBuffer(this.indexBuffer),gl.deleteTexture(this.renderTarget),gl.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&gl.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&gl.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&gl.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},CardboardDistorter.prototype.onResize=function(){var gl=this.gl,self=this,glState=[gl.RENDERBUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0];WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null),self.scissorTest&&self.realDisable.call(gl,gl.SCISSOR_TEST),self.realColorMask.call(gl,!0,!0,!0,!0),self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),self.realClearColor.call(gl,0,0,0,1),gl.clear(gl.COLOR_BUFFER_BIT),self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.framebuffer),gl.bindTexture(gl.TEXTURE_2D,self.renderTarget),gl.texImage2D(gl.TEXTURE_2D,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,self.bufferWidth,self.bufferHeight,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,gl.UNSIGNED_BYTE,null),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,self.renderTarget,0),self.ctxAttribs.depth&&self.ctxAttribs.stencil?(gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthStencilBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_STENCIL,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.depthStencilBuffer)):self.ctxAttribs.depth?(gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,self.depthBuffer)):self.ctxAttribs.stencil&&(gl.bindRenderbuffer(gl.RENDERBUFFER,self.stencilBuffer),gl.renderbufferStorage(gl.RENDERBUFFER,gl.STENCIL_INDEX8,self.bufferWidth,self.bufferHeight),gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.stencilBuffer)),!gl.checkFramebufferStatus(gl.FRAMEBUFFER)===gl.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer),self.scissorTest&&self.realEnable.call(gl,gl.SCISSOR_TEST),self.realColorMask.apply(gl,self.colorMask),self.realViewport.apply(gl,self.viewport),self.realClearColor.apply(gl,self.clearColor)}),this.cardboardUI&&this.cardboardUI.onResize()},CardboardDistorter.prototype.patch=function(){if(!this.isPatched){var self=this,canvas=this.gl.canvas,gl=this.gl;Util.isIOS()||(canvas.width=Util.getScreenWidth()*this.bufferScale,canvas.height=Util.getScreenHeight()*this.bufferScale,Object.defineProperty(canvas,"width",{configurable:!0,enumerable:!0,get:function(){return self.bufferWidth},set:function(value){self.bufferWidth=value,self.realCanvasWidth.set.call(canvas,value),self.onResize()}}),Object.defineProperty(canvas,"height",{configurable:!0,enumerable:!0,get:function(){return self.bufferHeight},set:function(value){self.bufferHeight=value,self.realCanvasHeight.set.call(canvas,value),self.onResize()}})),this.lastBoundFramebuffer=gl.getParameter(gl.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(gl.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(target,framebuffer){self.lastBoundFramebuffer=framebuffer||self.framebuffer,self.realBindFramebuffer.call(gl,target,self.lastBoundFramebuffer)},this.cullFace=gl.getParameter(gl.CULL_FACE),this.depthTest=gl.getParameter(gl.DEPTH_TEST),this.blend=gl.getParameter(gl.BLEND),this.scissorTest=gl.getParameter(gl.SCISSOR_TEST),this.stencilTest=gl.getParameter(gl.STENCIL_TEST),gl.enable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=!0;break;case gl.DEPTH_TEST:self.depthTest=!0;break;case gl.BLEND:self.blend=!0;break;case gl.SCISSOR_TEST:self.scissorTest=!0;break;case gl.STENCIL_TEST:self.stencilTest=!0}self.realEnable.call(gl,pname)},gl.disable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=!1;break;case gl.DEPTH_TEST:self.depthTest=!1;break;case gl.BLEND:self.blend=!1;break;case gl.SCISSOR_TEST:self.scissorTest=!1;break;case gl.STENCIL_TEST:self.stencilTest=!1}self.realDisable.call(gl,pname)},this.colorMask=gl.getParameter(gl.COLOR_WRITEMASK),gl.colorMask=function(r,g,b,a){self.colorMask[0]=r,self.colorMask[1]=g,self.colorMask[2]=b,self.colorMask[3]=a,self.realColorMask.call(gl,r,g,b,a)},this.clearColor=gl.getParameter(gl.COLOR_CLEAR_VALUE),gl.clearColor=function(r,g,b,a){self.clearColor[0]=r,self.clearColor[1]=g,self.clearColor[2]=b,self.clearColor[3]=a,self.realClearColor.call(gl,r,g,b,a)},this.viewport=gl.getParameter(gl.VIEWPORT),gl.viewport=function(x,y,w,h){self.viewport[0]=x,self.viewport[1]=y,self.viewport[2]=w,self.viewport[3]=h,self.realViewport.call(gl,x,y,w,h)},this.isPatched=!0,Util.safariCssSizeWorkaround(canvas)}},CardboardDistorter.prototype.unpatch=function(){if(this.isPatched){var gl=this.gl,canvas=this.gl.canvas;Util.isIOS()||(Object.defineProperty(canvas,"width",this.realCanvasWidth),Object.defineProperty(canvas,"height",this.realCanvasHeight)),canvas.width=this.bufferWidth,canvas.height=this.bufferHeight,gl.bindFramebuffer=this.realBindFramebuffer,gl.enable=this.realEnable,gl.disable=this.realDisable,gl.colorMask=this.realColorMask,gl.clearColor=this.realClearColor,gl.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&gl.bindFramebuffer(gl.FRAMEBUFFER,null),this.isPatched=!1,setTimeout(function(){Util.safariCssSizeWorkaround(canvas)},1)}},CardboardDistorter.prototype.setTextureBounds=function(leftBounds,rightBounds){leftBounds||(leftBounds=[0,0,.5,1]),rightBounds||(rightBounds=[.5,0,.5,1]),this.viewportOffsetScale[0]=leftBounds[0],this.viewportOffsetScale[1]=leftBounds[1],this.viewportOffsetScale[2]=leftBounds[2],this.viewportOffsetScale[3]=leftBounds[3],this.viewportOffsetScale[4]=rightBounds[0],this.viewportOffsetScale[5]=rightBounds[1],this.viewportOffsetScale[6]=rightBounds[2],this.viewportOffsetScale[7]=rightBounds[3]},CardboardDistorter.prototype.submitFrame=function(){var gl=this.gl,self=this,glState=[];if(WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS||glState.push(gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0),WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null),self.cullFace&&self.realDisable.call(gl,gl.CULL_FACE),self.depthTest&&self.realDisable.call(gl,gl.DEPTH_TEST),self.blend&&self.realDisable.call(gl,gl.BLEND),self.scissorTest&&self.realDisable.call(gl,gl.SCISSOR_TEST),self.stencilTest&&self.realDisable.call(gl,gl.STENCIL_TEST),self.realColorMask.call(gl,!0,!0,!0,!0),self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),(self.ctxAttribs.alpha||Util.isIOS())&&(self.realClearColor.call(gl,0,0,0,1),gl.clear(gl.COLOR_BUFFER_BIT)),gl.useProgram(self.program),gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer),gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.enableVertexAttribArray(self.attribs.position),gl.enableVertexAttribArray(self.attribs.texCoord),gl.vertexAttribPointer(self.attribs.position,2,gl.FLOAT,!1,20,0),gl.vertexAttribPointer(self.attribs.texCoord,3,gl.FLOAT,!1,20,8),gl.activeTexture(gl.TEXTURE0),gl.uniform1i(self.uniforms.diffuse,0),gl.bindTexture(gl.TEXTURE_2D,self.renderTarget),gl.uniform4fv(self.uniforms.viewportOffsetScale,self.viewportOffsetScale),gl.drawElements(gl.TRIANGLES,self.indexCount,gl.UNSIGNED_SHORT,0),self.cardboardUI&&self.cardboardUI.renderNoState(),self.realBindFramebuffer.call(self.gl,gl.FRAMEBUFFER,self.framebuffer),self.ctxAttribs.preserveDrawingBuffer||(self.realClearColor.call(gl,0,0,0,0),gl.clear(gl.COLOR_BUFFER_BIT)),WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS||self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer),self.cullFace&&self.realEnable.call(gl,gl.CULL_FACE),self.depthTest&&self.realEnable.call(gl,gl.DEPTH_TEST),self.blend&&self.realEnable.call(gl,gl.BLEND),self.scissorTest&&self.realEnable.call(gl,gl.SCISSOR_TEST),self.stencilTest&&self.realEnable.call(gl,gl.STENCIL_TEST),self.realColorMask.apply(gl,self.colorMask),self.realViewport.apply(gl,self.viewport),!self.ctxAttribs.alpha&&self.ctxAttribs.preserveDrawingBuffer||self.realClearColor.apply(gl,self.clearColor)}),Util.isIOS()){var canvas=gl.canvas;canvas.width==self.bufferWidth&&canvas.height==self.bufferHeight||(self.bufferWidth=canvas.width,self.bufferHeight=canvas.height,self.onResize())}},CardboardDistorter.prototype.updateDeviceInfo=function(deviceInfo){var gl=this.gl,self=this,glState=[gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){var vertices=self.computeMeshVertices_(self.meshWidth,self.meshHeight,deviceInfo);if(gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW),!self.indexCount){var indices=self.computeMeshIndices_(self.meshWidth,self.meshHeight);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer),gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indices,gl.STATIC_DRAW),self.indexCount=indices.length}})},CardboardDistorter.prototype.computeMeshVertices_=function(width,height,deviceInfo){for(var vertices=new Float32Array(2*width*height*5),lensFrustum=deviceInfo.getLeftEyeVisibleTanAngles(),noLensFrustum=deviceInfo.getLeftEyeNoLensTanAngles(),viewport=deviceInfo.getLeftEyeVisibleScreenRect(noLensFrustum),vidx=0,e=0;e<2;e++){for(var j=0;jmidline-42&&event.clientXcanvas.clientHeight-42?optionsCallback(event):event.clientX<42&&event.clientY<42&&backCallback(event)},canvas.addEventListener("click",this.listener,!1)},CardboardUI.prototype.onResize=function(){var gl=this.gl,self=this,glState=[gl.ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){function addGearSegment(theta,r){var angle=(90-theta)*DEG2RAD,x=Math.cos(angle),y=Math.sin(angle);vertices.push(kInnerRadius*x*buttonScale+midline,kInnerRadius*y*buttonScale+buttonScale),vertices.push(r*x*buttonScale+midline,r*y*buttonScale+buttonScale)}function addArrowVertex(x,y){vertices.push(buttonBorder+x,gl.drawingBufferHeight-buttonBorder-y)}var vertices=[],midline=gl.drawingBufferWidth/2,physicalPixels=Math.max(screen.width,screen.height)*window.devicePixelRatio,dps=gl.drawingBufferWidth/physicalPixels*window.devicePixelRatio,lineWidth=4*dps/2,buttonSize=42*dps,buttonScale=28*dps/2,buttonBorder=14*dps;vertices.push(midline-lineWidth,buttonSize),vertices.push(midline-lineWidth,gl.drawingBufferHeight),vertices.push(midline+lineWidth,buttonSize),vertices.push(midline+lineWidth,gl.drawingBufferHeight),self.gearOffset=vertices.length/2;for(var i=0;i<=6;i++){var segmentTheta=60*i;addGearSegment(segmentTheta,1),addGearSegment(segmentTheta+12,1),addGearSegment(segmentTheta+20,.75),addGearSegment(segmentTheta+40,.75),addGearSegment(segmentTheta+48,1)}self.gearVertexCount=vertices.length/2-self.gearOffset,self.arrowOffset=vertices.length/2;var angledLineWidth=lineWidth/Math.sin(45*DEG2RAD);addArrowVertex(0,buttonScale),addArrowVertex(buttonScale,0),addArrowVertex(buttonScale+angledLineWidth,angledLineWidth),addArrowVertex(angledLineWidth,buttonScale+angledLineWidth),addArrowVertex(angledLineWidth,buttonScale-angledLineWidth),addArrowVertex(0,buttonScale),addArrowVertex(buttonScale,2*buttonScale),addArrowVertex(buttonScale+angledLineWidth,2*buttonScale-angledLineWidth),addArrowVertex(angledLineWidth,buttonScale-angledLineWidth),addArrowVertex(0,buttonScale),addArrowVertex(angledLineWidth,buttonScale-lineWidth),addArrowVertex(28*dps,buttonScale-lineWidth),addArrowVertex(angledLineWidth,buttonScale+lineWidth),addArrowVertex(28*dps,buttonScale+lineWidth),self.arrowVertexCount=vertices.length/2-self.arrowOffset,gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW)})},CardboardUI.prototype.render=function(){var gl=this.gl,self=this,glState=[gl.CULL_FACE,gl.DEPTH_TEST,gl.BLEND,gl.SCISSOR_TEST,gl.STENCIL_TEST,gl.COLOR_WRITEMASK,gl.VIEWPORT,gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){gl.disable(gl.CULL_FACE),gl.disable(gl.DEPTH_TEST),gl.disable(gl.BLEND),gl.disable(gl.SCISSOR_TEST),gl.disable(gl.STENCIL_TEST),gl.colorMask(!0,!0,!0,!0),gl.viewport(0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),self.renderNoState()})},CardboardUI.prototype.renderNoState=function(){var gl=this.gl;gl.useProgram(this.program),gl.bindBuffer(gl.ARRAY_BUFFER,this.vertexBuffer),gl.enableVertexAttribArray(this.attribs.position),gl.vertexAttribPointer(this.attribs.position,2,gl.FLOAT,!1,8,0),gl.uniform4f(this.uniforms.color,1,1,1,1),Util.orthoMatrix(this.projMat,0,gl.drawingBufferWidth,0,gl.drawingBufferHeight,.1,1024),gl.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),gl.drawArrays(gl.TRIANGLE_STRIP,0,4),gl.drawArrays(gl.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),gl.drawArrays(gl.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},module.exports=CardboardUI},{"./deps/wglu-preserve-state.js":7,"./util.js":22}],6:[function(_dereq_,module,exports){function CardboardVRDisplay(){this.displayName="Cardboard VRDisplay (webvr-polyfill)",this.capabilities.hasOrientation=!0,this.capabilities.canPresent=!0,this.bufferScale_=WebVRConfig.BUFFER_SCALE,this.poseSensor_=new FusionPoseSensor,this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new Dpdb(!0,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new DeviceInfo(this.dpdb_.getDeviceParams()),this.viewerSelector_=new ViewerSelector,this.viewerSelector_.on("change",this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),WebVRConfig.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new RotateInstructions),Util.isIOS()&&window.addEventListener("resize",this.onResize_.bind(this))}var CardboardDistorter=_dereq_("./cardboard-distorter.js"),CardboardUI=_dereq_("./cardboard-ui.js"),DeviceInfo=_dereq_("./device-info.js"),Dpdb=_dereq_("./dpdb/dpdb.js"),FusionPoseSensor=_dereq_("./sensor-fusion/fusion-pose-sensor.js"),RotateInstructions=_dereq_("./rotate-instructions.js"),ViewerSelector=_dereq_("./viewer-selector.js"),VRDisplay=_dereq_("./base.js").VRDisplay,Util=_dereq_("./util.js"),Eye={LEFT:"left",RIGHT:"right"};CardboardVRDisplay.prototype=new VRDisplay,CardboardVRDisplay.prototype.getImmediatePose=function(){return{position:this.poseSensor_.getPosition(),orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},CardboardVRDisplay.prototype.resetPose=function(){this.poseSensor_.resetPose()},CardboardVRDisplay.prototype.getEyeParameters=function(whichEye){var fieldOfView,offset=[.5*this.deviceInfo_.viewer.interLensDistance,0,0];if(whichEye==Eye.LEFT)offset[0]*=-1,fieldOfView=this.deviceInfo_.getFieldOfViewLeftEye();else{if(whichEye!=Eye.RIGHT)return console.error("Invalid eye provided: %s",whichEye),null;fieldOfView=this.deviceInfo_.getFieldOfViewRightEye()}return{fieldOfView:fieldOfView,offset:offset,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_}},CardboardVRDisplay.prototype.onDeviceParamsUpdated_=function(newParams){Util.isDebug()&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(newParams),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},CardboardVRDisplay.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},CardboardVRDisplay.prototype.beginPresent_=function(){var gl=this.layer_.source.getContext("webgl");gl||(gl=this.layer_.source.getContext("experimental-webgl")),gl||(gl=this.layer_.source.getContext("webgl2")),gl&&(this.layer_.predistorted?WebVRConfig.CARDBOARD_UI_DISABLED||(gl.canvas.width=Util.getScreenWidth()*this.bufferScale_,gl.canvas.height=Util.getScreenHeight()*this.bufferScale_,this.cardboardUI_=new CardboardUI(gl)):(this.distorter_=new CardboardDistorter(gl),this.distorter_.updateDeviceInfo(this.deviceInfo_),this.cardboardUI_=this.distorter_.cardboardUI),this.cardboardUI_&&this.cardboardUI_.listen(function(e){this.viewerSelector_.show(this.layer_.source.parentElement),e.stopPropagation(),e.preventDefault()}.bind(this),function(e){this.exitPresent(),e.stopPropagation(),e.preventDefault()}.bind(this)),this.rotateInstructions_&&(Util.isLandscapeMode()&&Util.isMobile()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},CardboardVRDisplay.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},CardboardVRDisplay.prototype.submitFrame=function(pose){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var canvas=this.layer_.source.getContext("webgl").canvas;canvas.width==this.lastWidth&&canvas.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=canvas.width,this.lastHeight=canvas.height,this.cardboardUI_.render()}},CardboardVRDisplay.prototype.onOrientationChange_=function(e){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},CardboardVRDisplay.prototype.onResize_=function(e){if(this.layer_){var gl=this.layer_.source.getContext("webgl"),cssProperties=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0 10px 10px 0","box-sizing: content-box"];gl.canvas.setAttribute("style",cssProperties.join("; ")+";"),Util.safariCssSizeWorkaround(gl.canvas)}},CardboardVRDisplay.prototype.onViewerChanged_=function(viewer){this.deviceInfo_.setViewer(viewer),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},CardboardVRDisplay.prototype.fireVRDisplayDeviceParamsChange_=function(){var event=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(event)},module.exports=CardboardVRDisplay},{"./base.js":3,"./cardboard-distorter.js":4,"./cardboard-ui.js":5,"./device-info.js":8,"./dpdb/dpdb.js":12,"./rotate-instructions.js":16,"./sensor-fusion/fusion-pose-sensor.js":18,"./util.js":22,"./viewer-selector.js":23}],7:[function(_dereq_,module,exports){function WGLUPreserveGLState(gl,bindings,callback){if(bindings){for(var boundValues=[],activeTexture=null,i=0;igl.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),boundValues.push(null,null);break}activeTexture||(activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE)),gl.activeTexture(textureUnit),boundValues.push(gl.getParameter(binding),null);break;case gl.ACTIVE_TEXTURE:activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE),boundValues.push(null);break;default:boundValues.push(gl.getParameter(binding))}callback(gl);for(i=0;igl.TEXTURE31)break;gl.activeTexture(textureUnit),gl.bindTexture(gl.TEXTURE_2D,boundValue);break;case gl.TEXTURE_BINDING_CUBE_MAP:var textureUnit=bindings[++i];if(textureUnitgl.TEXTURE31)break;gl.activeTexture(textureUnit),gl.bindTexture(gl.TEXTURE_CUBE_MAP,boundValue);break;case gl.VIEWPORT:gl.viewport(boundValue[0],boundValue[1],boundValue[2],boundValue[3]);break;case gl.BLEND:case gl.CULL_FACE:case gl.DEPTH_TEST:case gl.SCISSOR_TEST:case gl.STENCIL_TEST:boundValue?gl.enable(binding):gl.disable(binding);break;default:console.log("No GL restore behavior for 0x"+binding.toString(16))}activeTexture&&gl.activeTexture(activeTexture)}}else callback(gl)}module.exports=WGLUPreserveGLState},{}],8:[function(_dereq_,module,exports){function Device(params){this.width=params.width||Util.getScreenWidth(),this.height=params.height||Util.getScreenHeight(),this.widthMeters=params.widthMeters,this.heightMeters=params.heightMeters,this.bevelMeters=params.bevelMeters}function DeviceInfo(deviceParams){this.viewer=Viewers.CardboardV2,this.updateDeviceParams(deviceParams),this.distortion=new Distortion(this.viewer.distortionCoefficients)}function CardboardViewer(params){this.id=params.id,this.label=params.label,this.fov=params.fov,this.interLensDistance=params.interLensDistance,this.baselineLensDistance=params.baselineLensDistance,this.screenLensDistance=params.screenLensDistance,this.distortionCoefficients=params.distortionCoefficients,this.inverseCoefficients=params.inverseCoefficients}var Distortion=_dereq_("./distortion/distortion.js"),MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js"),DEFAULT_ANDROID=new Device({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),DEFAULT_IOS=new Device({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),Viewers={CardboardV1:new CardboardViewer({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new CardboardViewer({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};DeviceInfo.prototype.updateDeviceParams=function(deviceParams){this.device=this.determineDevice_(deviceParams)||this.device},DeviceInfo.prototype.getDevice=function(){return this.device},DeviceInfo.prototype.setViewer=function(viewer){this.viewer=viewer,this.distortion=new Distortion(this.viewer.distortionCoefficients)},DeviceInfo.prototype.determineDevice_=function(deviceParams){if(!deviceParams)return Util.isIOS()?(console.warn("Using fallback iOS device measurements."),DEFAULT_IOS):(console.warn("Using fallback Android device measurements."),DEFAULT_ANDROID);var metersPerPixelX=.0254/deviceParams.xdpi,metersPerPixelY=.0254/deviceParams.ydpi;return new Device({widthMeters:metersPerPixelX*Util.getScreenWidth(),heightMeters:metersPerPixelY*Util.getScreenHeight(),bevelMeters:.001*deviceParams.bevelMm})},DeviceInfo.prototype.getDistortedFieldOfViewLeftEye=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,eyeToScreenDistance=viewer.screenLensDistance,outerDist=(device.widthMeters-viewer.interLensDistance)/2,innerDist=viewer.interLensDistance/2,bottomDist=viewer.baselineLensDistance-device.bevelMeters,topDist=device.heightMeters-bottomDist,outerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(outerDist/eyeToScreenDistance)),innerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(innerDist/eyeToScreenDistance)),bottomAngle=MathUtil.radToDeg*Math.atan(distortion.distort(bottomDist/eyeToScreenDistance)),topAngle=MathUtil.radToDeg*Math.atan(distortion.distort(topDist/eyeToScreenDistance));return{leftDegrees:Math.min(outerAngle,viewer.fov),rightDegrees:Math.min(innerAngle,viewer.fov),downDegrees:Math.min(bottomAngle,viewer.fov),upDegrees:Math.min(topAngle,viewer.fov)}},DeviceInfo.prototype.getLeftEyeVisibleTanAngles=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,fovLeft=Math.tan(-MathUtil.degToRad*viewer.fov),fovTop=Math.tan(MathUtil.degToRad*viewer.fov),fovRight=Math.tan(MathUtil.degToRad*viewer.fov),fovBottom=Math.tan(-MathUtil.degToRad*viewer.fov),halfWidth=device.widthMeters/4,halfHeight=device.heightMeters/2,verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight,centerX=viewer.interLensDistance/2-halfWidth,centerY=-verticalLensOffset,centerZ=viewer.screenLensDistance,screenLeft=distortion.distort((centerX-halfWidth)/centerZ),screenTop=distortion.distort((centerY+halfHeight)/centerZ),screenRight=distortion.distort((centerX+halfWidth)/centerZ),screenBottom=distortion.distort((centerY-halfHeight)/centerZ),result=new Float32Array(4);return result[0]=Math.max(fovLeft,screenLeft),result[1]=Math.min(fovTop,screenTop),result[2]=Math.min(fovRight,screenRight),result[3]=Math.max(fovBottom,screenBottom),result},DeviceInfo.prototype.getLeftEyeNoLensTanAngles=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,result=new Float32Array(4),fovLeft=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov)),fovTop=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov)),fovRight=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov)),fovBottom=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov)),halfWidth=device.widthMeters/4,halfHeight=device.heightMeters/2,verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight,centerX=viewer.interLensDistance/2-halfWidth,centerY=-verticalLensOffset,centerZ=viewer.screenLensDistance,screenLeft=(centerX-halfWidth)/centerZ,screenTop=(centerY+halfHeight)/centerZ,screenRight=(centerX+halfWidth)/centerZ,screenBottom=(centerY-halfHeight)/centerZ;return result[0]=Math.max(fovLeft,screenLeft),result[1]=Math.min(fovTop,screenTop),result[2]=Math.min(fovRight,screenRight),result[3]=Math.max(fovBottom,screenBottom),result},DeviceInfo.prototype.getLeftEyeVisibleScreenRect=function(undistortedFrustum){var viewer=this.viewer,device=this.device,dist=viewer.screenLensDistance,eyeX=(device.widthMeters-viewer.interLensDistance)/2,eyeY=viewer.baselineLensDistance-device.bevelMeters,left=(undistortedFrustum[0]*dist+eyeX)/device.widthMeters,top=(undistortedFrustum[1]*dist+eyeY)/device.heightMeters,right=(undistortedFrustum[2]*dist+eyeX)/device.widthMeters,bottom=(undistortedFrustum[3]*dist+eyeY)/device.heightMeters;return{x:left,y:bottom,width:right-left,height:top-bottom}},DeviceInfo.prototype.getFieldOfViewLeftEye=function(opt_isUndistorted){return opt_isUndistorted?this.getUndistortedFieldOfViewLeftEye():this.getDistortedFieldOfViewLeftEye()},DeviceInfo.prototype.getFieldOfViewRightEye=function(opt_isUndistorted){var fov=this.getFieldOfViewLeftEye(opt_isUndistorted);return{leftDegrees:fov.rightDegrees,rightDegrees:fov.leftDegrees,upDegrees:fov.upDegrees,downDegrees:fov.downDegrees}},DeviceInfo.prototype.getUndistortedFieldOfViewLeftEye=function(){var p=this.getUndistortedParams_();return{leftDegrees:MathUtil.radToDeg*Math.atan(p.outerDist),rightDegrees:MathUtil.radToDeg*Math.atan(p.innerDist),downDegrees:MathUtil.radToDeg*Math.atan(p.bottomDist),upDegrees:MathUtil.radToDeg*Math.atan(p.topDist)}},DeviceInfo.prototype.getUndistortedViewportLeftEye=function(){var p=this.getUndistortedParams_(),viewer=this.viewer,device=this.device,eyeToScreenDistance=viewer.screenLensDistance,screenWidth=device.widthMeters/eyeToScreenDistance,screenHeight=device.heightMeters/eyeToScreenDistance,xPxPerTanAngle=device.width/screenWidth,yPxPerTanAngle=device.height/screenHeight,x=Math.round((p.eyePosX-p.outerDist)*xPxPerTanAngle),y=Math.round((p.eyePosY-p.bottomDist)*yPxPerTanAngle);return{x:x,y:y,width:Math.round((p.eyePosX+p.innerDist)*xPxPerTanAngle)-x,height:Math.round((p.eyePosY+p.topDist)*yPxPerTanAngle)-y}},DeviceInfo.prototype.getUndistortedParams_=function(){var viewer=this.viewer,device=this.device,distortion=this.distortion,eyeToScreenDistance=viewer.screenLensDistance,halfLensDistance=viewer.interLensDistance/2/eyeToScreenDistance,screenWidth=device.widthMeters/eyeToScreenDistance,screenHeight=device.heightMeters/eyeToScreenDistance,eyePosX=screenWidth/2-halfLensDistance,eyePosY=(viewer.baselineLensDistance-device.bevelMeters)/eyeToScreenDistance,maxFov=viewer.fov,viewerMax=distortion.distortInverse(Math.tan(MathUtil.degToRad*maxFov)),outerDist=Math.min(eyePosX,viewerMax),innerDist=Math.min(halfLensDistance,viewerMax),bottomDist=Math.min(eyePosY,viewerMax);return{outerDist:outerDist,innerDist:innerDist,topDist:Math.min(screenHeight-eyePosY,viewerMax),bottomDist:bottomDist,eyePosX:eyePosX,eyePosY:eyePosY}},DeviceInfo.Viewers=Viewers,module.exports=DeviceInfo},{"./distortion/distortion.js":10,"./math-util.js":14,"./util.js":22}],9:[function(_dereq_,module,exports){function VRDisplayHMDDevice(display){this.display=display,this.hardwareUnitId=display.displayId,this.deviceId="webvr-polyfill:HMD:"+display.displayId,this.deviceName=display.displayName+" (HMD)"}function VRDisplayPositionSensorDevice(display){this.display=display,this.hardwareUnitId=display.displayId,this.deviceId="webvr-polyfill:PositionSensor: "+display.displayId,this.deviceName=display.displayName+" (PositionSensor)"}_dereq_("./base.js").VRDisplay;var HMDVRDevice=_dereq_("./base.js").HMDVRDevice,PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice;VRDisplayHMDDevice.prototype=new HMDVRDevice,VRDisplayHMDDevice.prototype.getEyeParameters=function(whichEye){var eyeParameters=this.display.getEyeParameters(whichEye);return{currentFieldOfView:eyeParameters.fieldOfView,maximumFieldOfView:eyeParameters.fieldOfView,minimumFieldOfView:eyeParameters.fieldOfView,recommendedFieldOfView:eyeParameters.fieldOfView,eyeTranslation:{x:eyeParameters.offset[0],y:eyeParameters.offset[1],z:eyeParameters.offset[2]},renderRect:{x:"right"==whichEye?eyeParameters.renderWidth:0,y:0,width:eyeParameters.renderWidth,height:eyeParameters.renderHeight}}},VRDisplayHMDDevice.prototype.setFieldOfView=function(opt_fovLeft,opt_fovRight,opt_zNear,opt_zFar){},VRDisplayPositionSensorDevice.prototype=new PositionSensorVRDevice,VRDisplayPositionSensorDevice.prototype.getState=function(){var pose=this.display.getPose();return{position:pose.position?{x:pose.position[0],y:pose.position[1],z:pose.position[2]}:null,orientation:pose.orientation?{x:pose.orientation[0],y:pose.orientation[1],z:pose.orientation[2],w:pose.orientation[3]}:null,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},VRDisplayPositionSensorDevice.prototype.resetState=function(){return this.positionDevice.resetPose()},module.exports.VRDisplayHMDDevice=VRDisplayHMDDevice,module.exports.VRDisplayPositionSensorDevice=VRDisplayPositionSensorDevice},{"./base.js":3}],10:[function(_dereq_,module,exports){function Distortion(coefficients){this.coefficients=coefficients}Distortion.prototype.distortInverse=function(radius){for(var r0=0,r1=1,dr0=radius-this.distort(r0);Math.abs(r1-r0)>1e-4;){var dr1=radius-this.distort(r1),r2=r1-dr1*((r1-r0)/(dr1-dr0));r0=r1,r1=r2,dr0=dr1}return r1},Distortion.prototype.distort=function(radius){for(var r2=radius*radius,ret=0,i=0;i=0;--j){for(var v=y[j],i=j+1;i=200&&xhr.status<=299?(obj.dpdb=JSON.parse(xhr.response),obj.recalculateDeviceParams_()):console.error("Error loading online DPDB!")}),xhr.send()}}function DeviceParams(params){this.xdpi=params.xdpi,this.ydpi=params.ydpi,this.bevelMm=params.bevelMm}var DPDB_CACHE=_dereq_("./dpdb.json"),Util=_dereq_("../util.js"),ONLINE_DPDB_URL="https://dpdb.webvr.rocks/dpdb.json";Dpdb.prototype.getDeviceParams=function(){return this.deviceParams},Dpdb.prototype.recalculateDeviceParams_=function(){var newDeviceParams=this.calcDeviceParams_();newDeviceParams?(this.deviceParams=newDeviceParams,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},Dpdb.prototype.calcDeviceParams_=function(){var db=this.dpdb;if(!db)return console.error("DPDB not available."),null;if(1!=db.format)return console.error("DPDB has unexpected format version."),null;if(!db.devices||!db.devices.length)return console.error("DPDB does not have a devices section."),null;var userAgent=navigator.userAgent||navigator.vendor||window.opera,width=Util.getScreenWidth(),height=Util.getScreenHeight();if(!db.devices)return console.error("DPDB has no devices section."),null;for(var i=0;i=1)return this.w=w,this.x=x,this.y=y,this.z=z,this;var halfTheta=Math.acos(cosHalfTheta),sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001)return this.w=.5*(w+this.w),this.x=.5*(x+this.x),this.y=.5*(y+this.y),this.z=.5*(z+this.z),this;var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;return this.w=w*ratioA+this.w*ratioB,this.x=x*ratioA+this.x*ratioB,this.y=y*ratioA+this.y*ratioB,this.z=z*ratioA+this.z*ratioB,this},setFromUnitVectors:function(){var v1,r;return function(vFrom,vTo){return void 0===v1&&(v1=new MathUtil.Vector3),r=vFrom.dot(vTo)+1,r<1e-6?(r=0,Math.abs(vFrom.x)>Math.abs(vFrom.z)?v1.set(-vFrom.y,vFrom.x,0):v1.set(0,-vFrom.z,vFrom.y)):v1.crossVectors(vFrom,vTo),this.x=v1.x,this.y=v1.y,this.z=v1.z,this.w=r,this.normalize(),this}}()},module.exports=MathUtil},{}],15:[function(_dereq_,module,exports){function MouseKeyboardVRDisplay(){this.displayName="Mouse and Keyboard VRDisplay (webvr-polyfill)",this.capabilities.hasOrientation=!0,window.addEventListener("keydown",this.onKeyDown_.bind(this)),window.addEventListener("mousemove",this.onMouseMove_.bind(this)),window.addEventListener("mousedown",this.onMouseDown_.bind(this)),window.addEventListener("mouseup",this.onMouseUp_.bind(this)),this.phi_=0,this.theta_=0,this.targetAngle_=null,this.angleAnimation_=null,this.orientation_=new MathUtil.Quaternion,this.rotateStart_=new MathUtil.Vector2,this.rotateEnd_=new MathUtil.Vector2,this.rotateDelta_=new MathUtil.Vector2,this.isDragging_=!1,this.orientationOut_=new Float32Array(4)}var VRDisplay=_dereq_("./base.js").VRDisplay,MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js");MouseKeyboardVRDisplay.prototype=new VRDisplay,MouseKeyboardVRDisplay.prototype.getImmediatePose=function(){return this.orientation_.setFromEulerYXZ(this.phi_,this.theta_,0),this.orientationOut_[0]=this.orientation_.x,this.orientationOut_[1]=this.orientation_.y,this.orientationOut_[2]=this.orientation_.z,this.orientationOut_[3]=this.orientation_.w,{position:null,orientation:this.orientationOut_,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},MouseKeyboardVRDisplay.prototype.onKeyDown_=function(e){38==e.keyCode?this.animatePhi_(this.phi_+.15):39==e.keyCode?this.animateTheta_(this.theta_-.15):40==e.keyCode?this.animatePhi_(this.phi_-.15):37==e.keyCode&&this.animateTheta_(this.theta_+.15)},MouseKeyboardVRDisplay.prototype.animateTheta_=function(targetAngle){this.animateKeyTransitions_("theta_",targetAngle)},MouseKeyboardVRDisplay.prototype.animatePhi_=function(targetAngle){targetAngle=Util.clamp(targetAngle,-Math.PI/2,Math.PI/2),this.animateKeyTransitions_("phi_",targetAngle)},MouseKeyboardVRDisplay.prototype.animateKeyTransitions_=function(angleName,targetAngle){this.angleAnimation_&&cancelAnimationFrame(this.angleAnimation_);var startAngle=this[angleName],startTime=new Date;this.angleAnimation_=requestAnimationFrame(function animate(){var elapsed=new Date-startTime;if(elapsed>=80)return this[angleName]=targetAngle,void cancelAnimationFrame(this.angleAnimation_);this.angleAnimation_=requestAnimationFrame(animate.bind(this));var percent=elapsed/80;this[angleName]=startAngle+(targetAngle-startAngle)*percent}.bind(this))},MouseKeyboardVRDisplay.prototype.onMouseDown_=function(e){this.rotateStart_.set(e.clientX,e.clientY),this.isDragging_=!0},MouseKeyboardVRDisplay.prototype.onMouseMove_=function(e){if(this.isDragging_||this.isPointerLocked_()){if(this.isPointerLocked_()){var movementX=e.movementX||e.mozMovementX||0,movementY=e.movementY||e.mozMovementY||0;this.rotateEnd_.set(this.rotateStart_.x-movementX,this.rotateStart_.y-movementY)}else this.rotateEnd_.set(e.clientX,e.clientY);this.rotateDelta_.subVectors(this.rotateEnd_,this.rotateStart_),this.rotateStart_.copy(this.rotateEnd_),this.phi_+=2*Math.PI*this.rotateDelta_.y/screen.height*.3,this.theta_+=2*Math.PI*this.rotateDelta_.x/screen.width*.5,this.phi_=Util.clamp(this.phi_,-Math.PI/2,Math.PI/2)}},MouseKeyboardVRDisplay.prototype.onMouseUp_=function(e){this.isDragging_=!1},MouseKeyboardVRDisplay.prototype.isPointerLocked_=function(){return void 0!==(document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement)},MouseKeyboardVRDisplay.prototype.resetPose=function(){this.phi_=0,this.theta_=0},module.exports=MouseKeyboardVRDisplay},{"./base.js":3,"./math-util.js":14,"./util.js":22}],16:[function(_dereq_,module,exports){function RotateInstructions(){this.loadIcon_();var overlay=document.createElement("div"),s=overlay.style;s.position="fixed",s.top=0,s.right=0,s.bottom=0,s.left=0,s.backgroundColor="gray",s.fontFamily="sans-serif",s.zIndex=1e6;var img=document.createElement("img");img.src=this.icon,(s=img.style).marginLeft="25%",s.marginTop="25%",s.width="50%",overlay.appendChild(img);var text=document.createElement("div");(s=text.style).textAlign="center",s.fontSize="16px",s.lineHeight="24px",s.margin="24px 25%",s.width="50%",text.innerHTML="Place your phone into your Cardboard viewer.",overlay.appendChild(text);var snackbar=document.createElement("div");(s=snackbar.style).backgroundColor="#CFD8DC",s.position="fixed",s.bottom=0,s.width="100%",s.height="48px",s.padding="14px 24px",s.boxSizing="border-box",s.color="#656A6B",overlay.appendChild(snackbar);var snackbarText=document.createElement("div");snackbarText.style.float="left",snackbarText.innerHTML="No Cardboard viewer?";var snackbarButton=document.createElement("a");snackbarButton.href="https://www.google.com/get/cardboard/get-cardboard/",snackbarButton.innerHTML="get one",snackbarButton.target="_blank",(s=snackbarButton.style).float="right",s.fontWeight=600,s.textTransform="uppercase",s.borderLeft="1px solid gray",s.paddingLeft="24px",s.textDecoration="none",s.color="#656A6B",snackbar.appendChild(snackbarText),snackbar.appendChild(snackbarButton),this.overlay=overlay,this.text=text,this.hide()}var Util=_dereq_("./util.js");RotateInstructions.prototype.show=function(parent){parent||this.overlay.parentElement?parent&&(this.overlay.parentElement&&this.overlay.parentElement!=parent&&this.overlay.parentElement.removeChild(this.overlay),parent.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var s=this.overlay.querySelector("img").style;Util.isLandscapeMode()?(s.width="20%",s.marginLeft="40%",s.marginTop="3%"):(s.width="50%",s.marginLeft="25%",s.marginTop="25%")},RotateInstructions.prototype.hide=function(){this.overlay.style.display="none"},RotateInstructions.prototype.showTemporarily=function(ms,parent){this.show(parent),this.timer=setTimeout(this.hide.bind(this),ms)},RotateInstructions.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},RotateInstructions.prototype.update=function(){this.disableShowTemporarily(),!Util.isLandscapeMode()&&Util.isMobile()?this.show():this.hide()},RotateInstructions.prototype.loadIcon_=function(){this.icon=Util.base64("image/svg+xml","PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE5OHB4IiBoZWlnaHQ9IjI0MHB4IiB2aWV3Qm94PSIwIDAgMTk4IDI0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4zICgxMjA4MSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+dHJhbnNpdGlvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPgogICAgICAgIDxnIGlkPSJ0cmFuc2l0aW9uIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTQtKy1JbXBvcnRlZC1MYXllcnMtQ29weS0rLUltcG9ydGVkLUxheWVycy1Db3B5LTItQ29weSIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHktNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDEwNy4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjYyNSwyLjUyNyBDMTQ5LjYyNSwyLjUyNyAxNTUuODA1LDYuMDk2IDE1Ni4zNjIsNi40MTggTDE1Ni4zNjIsNy4zMDQgQzE1Ni4zNjIsNy40ODEgMTU2LjM3NSw3LjY2NCAxNTYuNCw3Ljg1MyBDMTU2LjQxLDcuOTM0IDE1Ni40Miw4LjAxNSAxNTYuNDI3LDguMDk1IEMxNTYuNTY3LDkuNTEgMTU3LjQwMSwxMS4wOTMgMTU4LjUzMiwxMi4wOTQgTDE2NC4yNTIsMTcuMTU2IEwxNjQuMzMzLDE3LjA2NiBDMTY0LjMzMywxNy4wNjYgMTY4LjcxNSwxNC41MzYgMTY5LjU2OCwxNC4wNDIgQzE3MS4wMjUsMTQuODgzIDE5NS41MzgsMjkuMDM1IDE5NS41MzgsMjkuMDM1IEwxOTUuNTM4LDgzLjAzNiBDMTk1LjUzOCw4My44MDcgMTk1LjE1Miw4NC4yNTMgMTk0LjU5LDg0LjI1MyBDMTk0LjM1Nyw4NC4yNTMgMTk0LjA5NSw4NC4xNzcgMTkzLjgxOCw4NC4wMTcgTDE2OS44NTEsNzAuMTc5IEwxNjkuODM3LDcwLjIwMyBMMTQyLjUxNSw4NS45NzggTDE0MS42NjUsODQuNjU1IEMxMzYuOTM0LDgzLjEyNiAxMzEuOTE3LDgxLjkxNSAxMjYuNzE0LDgxLjA0NSBDMTI2LjcwOSw4MS4wNiAxMjYuNzA3LDgxLjA2OSAxMjYuNzA3LDgxLjA2OSBMMTIxLjY0LDk4LjAzIEwxMTMuNzQ5LDEwMi41ODYgTDExMy43MTIsMTAyLjUyMyBMMTEzLjcxMiwxMzAuMTEzIEMxMTMuNzEyLDEzMC44ODUgMTEzLjMyNiwxMzEuMzMgMTEyLjc2NCwxMzEuMzMgQzExMi41MzIsMTMxLjMzIDExMi4yNjksMTMxLjI1NCAxMTEuOTkyLDEzMS4wOTQgTDY5LjUxOSwxMDYuNTcyIEM2OC41NjksMTA2LjAyMyA2Ny43OTksMTA0LjY5NSA2Ny43OTksMTAzLjYwNSBMNjcuNzk5LDEwMi41NyBMNjcuNzc4LDEwMi42MTcgQzY3LjI3LDEwMi4zOTMgNjYuNjQ4LDEwMi4yNDkgNjUuOTYyLDEwMi4yMTggQzY1Ljg3NSwxMDIuMjE0IDY1Ljc4OCwxMDIuMjEyIDY1LjcwMSwxMDIuMjEyIEM2NS42MDYsMTAyLjIxMiA2NS41MTEsMTAyLjIxNSA2NS40MTYsMTAyLjIxOSBDNjUuMTk1LDEwMi4yMjkgNjQuOTc0LDEwMi4yMzUgNjQuNzU0LDEwMi4yMzUgQzY0LjMzMSwxMDIuMjM1IDYzLjkxMSwxMDIuMjE2IDYzLjQ5OCwxMDIuMTc4IEM2MS44NDMsMTAyLjAyNSA2MC4yOTgsMTAxLjU3OCA1OS4wOTQsMTAwLjg4MiBMMTIuNTE4LDczLjk5MiBMMTIuNTIzLDc0LjAwNCBMMi4yNDUsNTUuMjU0IEMxLjI0NCw1My40MjcgMi4wMDQsNTEuMDM4IDMuOTQzLDQ5LjkxOCBMNTkuOTU0LDE3LjU3MyBDNjAuNjI2LDE3LjE4NSA2MS4zNSwxNy4wMDEgNjIuMDUzLDE3LjAwMSBDNjMuMzc5LDE3LjAwMSA2NC42MjUsMTcuNjYgNjUuMjgsMTguODU0IEw2NS4yODUsMTguODUxIEw2NS41MTIsMTkuMjY0IEw2NS41MDYsMTkuMjY4IEM2NS45MDksMjAuMDAzIDY2LjQwNSwyMC42OCA2Ni45ODMsMjEuMjg2IEw2Ny4yNiwyMS41NTYgQzY5LjE3NCwyMy40MDYgNzEuNzI4LDI0LjM1NyA3NC4zNzMsMjQuMzU3IEM3Ni4zMjIsMjQuMzU3IDc4LjMyMSwyMy44NCA4MC4xNDgsMjIuNzg1IEM4MC4xNjEsMjIuNzg1IDg3LjQ2NywxOC41NjYgODcuNDY3LDE4LjU2NiBDODguMTM5LDE4LjE3OCA4OC44NjMsMTcuOTk0IDg5LjU2NiwxNy45OTQgQzkwLjg5MiwxNy45OTQgOTIuMTM4LDE4LjY1MiA5Mi43OTIsMTkuODQ3IEw5Ni4wNDIsMjUuNzc1IEw5Ni4wNjQsMjUuNzU3IEwxMDIuODQ5LDI5LjY3NCBMMTAyLjc0NCwyOS40OTIgTDE0OS42MjUsMi41MjcgTTE0OS42MjUsMC44OTIgQzE0OS4zNDMsMC44OTIgMTQ5LjA2MiwwLjk2NSAxNDguODEsMS4xMSBMMTAyLjY0MSwyNy42NjYgTDk3LjIzMSwyNC41NDIgTDk0LjIyNiwxOS4wNjEgQzkzLjMxMywxNy4zOTQgOTEuNTI3LDE2LjM1OSA4OS41NjYsMTYuMzU4IEM4OC41NTUsMTYuMzU4IDg3LjU0NiwxNi42MzIgODYuNjQ5LDE3LjE1IEM4My44NzgsMTguNzUgNzkuNjg3LDIxLjE2OSA3OS4zNzQsMjEuMzQ1IEM3OS4zNTksMjEuMzUzIDc5LjM0NSwyMS4zNjEgNzkuMzMsMjEuMzY5IEM3Ny43OTgsMjIuMjU0IDc2LjA4NCwyMi43MjIgNzQuMzczLDIyLjcyMiBDNzIuMDgxLDIyLjcyMiA2OS45NTksMjEuODkgNjguMzk3LDIwLjM4IEw2OC4xNDUsMjAuMTM1IEM2Ny43MDYsMTkuNjcyIDY3LjMyMywxOS4xNTYgNjcuMDA2LDE4LjYwMSBDNjYuOTg4LDE4LjU1OSA2Ni45NjgsMTguNTE5IDY2Ljk0NiwxOC40NzkgTDY2LjcxOSwxOC4wNjUgQzY2LjY5LDE4LjAxMiA2Ni42NTgsMTcuOTYgNjYuNjI0LDE3LjkxMSBDNjUuNjg2LDE2LjMzNyA2My45NTEsMTUuMzY2IDYyLjA1MywxNS4zNjYgQzYxLjA0MiwxNS4zNjYgNjAuMDMzLDE1LjY0IDU5LjEzNiwxNi4xNTggTDMuMTI1LDQ4LjUwMiBDMC40MjYsNTAuMDYxIC0wLjYxMyw1My40NDIgMC44MTEsNTYuMDQgTDExLjA4OSw3NC43OSBDMTEuMjY2LDc1LjExMyAxMS41MzcsNzUuMzUzIDExLjg1LDc1LjQ5NCBMNTguMjc2LDEwMi4yOTggQzU5LjY3OSwxMDMuMTA4IDYxLjQzMywxMDMuNjMgNjMuMzQ4LDEwMy44MDYgQzYzLjgxMiwxMDMuODQ4IDY0LjI4NSwxMDMuODcgNjQuNzU0LDEwMy44NyBDNjUsMTAzLjg3IDY1LjI0OSwxMDMuODY0IDY1LjQ5NCwxMDMuODUyIEM2NS41NjMsMTAzLjg0OSA2NS42MzIsMTAzLjg0NyA2NS43MDEsMTAzLjg0NyBDNjUuNzY0LDEwMy44NDcgNjUuODI4LDEwMy44NDkgNjUuODksMTAzLjg1MiBDNjUuOTg2LDEwMy44NTYgNjYuMDgsMTAzLjg2MyA2Ni4xNzMsMTAzLjg3NCBDNjYuMjgyLDEwNS40NjcgNjcuMzMyLDEwNy4xOTcgNjguNzAyLDEwNy45ODggTDExMS4xNzQsMTMyLjUxIEMxMTEuNjk4LDEzMi44MTIgMTEyLjIzMiwxMzIuOTY1IDExMi43NjQsMTMyLjk2NSBDMTE0LjI2MSwxMzIuOTY1IDExNS4zNDcsMTMxLjc2NSAxMTUuMzQ3LDEzMC4xMTMgTDExNS4zNDcsMTAzLjU1MSBMMTIyLjQ1OCw5OS40NDYgQzEyMi44MTksOTkuMjM3IDEyMy4wODcsOTguODk4IDEyMy4yMDcsOTguNDk4IEwxMjcuODY1LDgyLjkwNSBDMTMyLjI3OSw4My43MDIgMTM2LjU1Nyw4NC43NTMgMTQwLjYwNyw4Ni4wMzMgTDE0MS4xNCw4Ni44NjIgQzE0MS40NTEsODcuMzQ2IDE0MS45NzcsODcuNjEzIDE0Mi41MTYsODcuNjEzIEMxNDIuNzk0LDg3LjYxMyAxNDMuMDc2LDg3LjU0MiAxNDMuMzMzLDg3LjM5MyBMMTY5Ljg2NSw3Mi4wNzYgTDE5Myw4NS40MzMgQzE5My41MjMsODUuNzM1IDE5NC4wNTgsODUuODg4IDE5NC41OSw4NS44ODggQzE5Ni4wODcsODUuODg4IDE5Ny4xNzMsODQuNjg5IDE5Ny4xNzMsODMuMDM2IEwxOTcuMTczLDI5LjAzNSBDMTk3LjE3MywyOC40NTEgMTk2Ljg2MSwyNy45MTEgMTk2LjM1NSwyNy42MTkgQzE5Ni4zNTUsMjcuNjE5IDE3MS44NDMsMTMuNDY3IDE3MC4zODUsMTIuNjI2IEMxNzAuMTMyLDEyLjQ4IDE2OS44NSwxMi40MDcgMTY5LjU2OCwxMi40MDcgQzE2OS4yODUsMTIuNDA3IDE2OS4wMDIsMTIuNDgxIDE2OC43NDksMTIuNjI3IEMxNjguMTQzLDEyLjk3OCAxNjUuNzU2LDE0LjM1NyAxNjQuNDI0LDE1LjEyNSBMMTU5LjYxNSwxMC44NyBDMTU4Ljc5NiwxMC4xNDUgMTU4LjE1NCw4LjkzNyAxNTguMDU0LDcuOTM0IEMxNTguMDQ1LDcuODM3IDE1OC4wMzQsNy43MzkgMTU4LjAyMSw3LjY0IEMxNTguMDA1LDcuNTIzIDE1Ny45OTgsNy40MSAxNTcuOTk4LDcuMzA0IEwxNTcuOTk4LDYuNDE4IEMxNTcuOTk4LDUuODM0IDE1Ny42ODYsNS4yOTUgMTU3LjE4MSw1LjAwMiBDMTU2LjYyNCw0LjY4IDE1MC40NDIsMS4xMTEgMTUwLjQ0MiwxLjExMSBDMTUwLjE4OSwwLjk2NSAxNDkuOTA3LDAuODkyIDE0OS42MjUsMC44OTIiIGlkPSJGaWxsLTEiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTYuMDI3LDI1LjYzNiBMMTQyLjYwMyw1Mi41MjcgQzE0My44MDcsNTMuMjIyIDE0NC41ODIsNTQuMTE0IDE0NC44NDUsNTUuMDY4IEwxNDQuODM1LDU1LjA3NSBMNjMuNDYxLDEwMi4wNTcgTDYzLjQ2LDEwMi4wNTcgQzYxLjgwNiwxMDEuOTA1IDYwLjI2MSwxMDEuNDU3IDU5LjA1NywxMDAuNzYyIEwxMi40ODEsNzMuODcxIEw5Ni4wMjcsMjUuNjM2IiBpZD0iRmlsbC0yIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYzLjQ2MSwxMDIuMTc0IEM2My40NTMsMTAyLjE3NCA2My40NDYsMTAyLjE3NCA2My40MzksMTAyLjE3MiBDNjEuNzQ2LDEwMi4wMTYgNjAuMjExLDEwMS41NjMgNTguOTk4LDEwMC44NjMgTDEyLjQyMiw3My45NzMgQzEyLjM4Niw3My45NTIgMTIuMzY0LDczLjkxNCAxMi4zNjQsNzMuODcxIEMxMi4zNjQsNzMuODMgMTIuMzg2LDczLjc5MSAxMi40MjIsNzMuNzcgTDk1Ljk2OCwyNS41MzUgQzk2LjAwNCwyNS41MTQgOTYuMDQ5LDI1LjUxNCA5Ni4wODUsMjUuNTM1IEwxNDIuNjYxLDUyLjQyNiBDMTQzLjg4OCw1My4xMzQgMTQ0LjY4Miw1NC4wMzggMTQ0Ljk1Nyw1NS4wMzcgQzE0NC45Nyw1NS4wODMgMTQ0Ljk1Myw1NS4xMzMgMTQ0LjkxNSw1NS4xNjEgQzE0NC45MTEsNTUuMTY1IDE0NC44OTgsNTUuMTc0IDE0NC44OTQsNTUuMTc3IEw2My41MTksMTAyLjE1OCBDNjMuNTAxLDEwMi4xNjkgNjMuNDgxLDEwMi4xNzQgNjMuNDYxLDEwMi4xNzQgTDYzLjQ2MSwxMDIuMTc0IFogTTEyLjcxNCw3My44NzEgTDU5LjExNSwxMDAuNjYxIEM2MC4yOTMsMTAxLjM0MSA2MS43ODYsMTAxLjc4MiA2My40MzUsMTAxLjkzNyBMMTQ0LjcwNyw1NS4wMTUgQzE0NC40MjgsNTQuMTA4IDE0My42ODIsNTMuMjg1IDE0Mi41NDQsNTIuNjI4IEw5Ni4wMjcsMjUuNzcxIEwxMi43MTQsNzMuODcxIEwxMi43MTQsNzMuODcxIFoiIGlkPSJGaWxsLTMiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ4LjMyNyw1OC40NzEgQzE0OC4xNDUsNTguNDggMTQ3Ljk2Miw1OC40OCAxNDcuNzgxLDU4LjQ3MiBDMTQ1Ljg4Nyw1OC4zODkgMTQ0LjQ3OSw1Ny40MzQgMTQ0LjYzNiw1Ni4zNCBDMTQ0LjY4OSw1NS45NjcgMTQ0LjY2NCw1NS41OTcgMTQ0LjU2NCw1NS4yMzUgTDYzLjQ2MSwxMDIuMDU3IEM2NC4wODksMTAyLjExNSA2NC43MzMsMTAyLjEzIDY1LjM3OSwxMDIuMDk5IEM2NS41NjEsMTAyLjA5IDY1Ljc0MywxMDIuMDkgNjUuOTI1LDEwMi4wOTggQzY3LjgxOSwxMDIuMTgxIDY5LjIyNywxMDMuMTM2IDY5LjA3LDEwNC4yMyBMMTQ4LjMyNyw1OC40NzEiIGlkPSJGaWxsLTQiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNjkuMDcsMTA0LjM0NyBDNjkuMDQ4LDEwNC4zNDcgNjkuMDI1LDEwNC4zNCA2OS4wMDUsMTA0LjMyNyBDNjguOTY4LDEwNC4zMDEgNjguOTQ4LDEwNC4yNTcgNjguOTU1LDEwNC4yMTMgQzY5LDEwMy44OTYgNjguODk4LDEwMy41NzYgNjguNjU4LDEwMy4yODggQzY4LjE1MywxMDIuNjc4IDY3LjEwMywxMDIuMjY2IDY1LjkyLDEwMi4yMTQgQzY1Ljc0MiwxMDIuMjA2IDY1LjU2MywxMDIuMjA3IDY1LjM4NSwxMDIuMjE1IEM2NC43NDIsMTAyLjI0NiA2NC4wODcsMTAyLjIzMiA2My40NSwxMDIuMTc0IEM2My4zOTksMTAyLjE2OSA2My4zNTgsMTAyLjEzMiA2My4zNDcsMTAyLjA4MiBDNjMuMzM2LDEwMi4wMzMgNjMuMzU4LDEwMS45ODEgNjMuNDAyLDEwMS45NTYgTDE0NC41MDYsNTUuMTM0IEMxNDQuNTM3LDU1LjExNiAxNDQuNTc1LDU1LjExMyAxNDQuNjA5LDU1LjEyNyBDMTQ0LjY0Miw1NS4xNDEgMTQ0LjY2OCw1NS4xNyAxNDQuNjc3LDU1LjIwNCBDMTQ0Ljc4MSw1NS41ODUgMTQ0LjgwNiw1NS45NzIgMTQ0Ljc1MSw1Ni4zNTcgQzE0NC43MDYsNTYuNjczIDE0NC44MDgsNTYuOTk0IDE0NS4wNDcsNTcuMjgyIEMxNDUuNTUzLDU3Ljg5MiAxNDYuNjAyLDU4LjMwMyAxNDcuNzg2LDU4LjM1NSBDMTQ3Ljk2NCw1OC4zNjMgMTQ4LjE0Myw1OC4zNjMgMTQ4LjMyMSw1OC4zNTQgQzE0OC4zNzcsNTguMzUyIDE0OC40MjQsNTguMzg3IDE0OC40MzksNTguNDM4IEMxNDguNDU0LDU4LjQ5IDE0OC40MzIsNTguNTQ1IDE0OC4zODUsNTguNTcyIEw2OS4xMjksMTA0LjMzMSBDNjkuMTExLDEwNC4zNDIgNjkuMDksMTA0LjM0NyA2OS4wNywxMDQuMzQ3IEw2OS4wNywxMDQuMzQ3IFogTTY1LjY2NSwxMDEuOTc1IEM2NS43NTQsMTAxLjk3NSA2NS44NDIsMTAxLjk3NyA2NS45MywxMDEuOTgxIEM2Ny4xOTYsMTAyLjAzNyA2OC4yODMsMTAyLjQ2OSA2OC44MzgsMTAzLjEzOSBDNjkuMDY1LDEwMy40MTMgNjkuMTg4LDEwMy43MTQgNjkuMTk4LDEwNC4wMjEgTDE0Ny44ODMsNTguNTkyIEMxNDcuODQ3LDU4LjU5MiAxNDcuODExLDU4LjU5MSAxNDcuNzc2LDU4LjU4OSBDMTQ2LjUwOSw1OC41MzMgMTQ1LjQyMiw1OC4xIDE0NC44NjcsNTcuNDMxIEMxNDQuNTg1LDU3LjA5MSAxNDQuNDY1LDU2LjcwNyAxNDQuNTIsNTYuMzI0IEMxNDQuNTYzLDU2LjAyMSAxNDQuNTUyLDU1LjcxNiAxNDQuNDg4LDU1LjQxNCBMNjMuODQ2LDEwMS45NyBDNjQuMzUzLDEwMi4wMDIgNjQuODY3LDEwMi4wMDYgNjUuMzc0LDEwMS45ODIgQzY1LjQ3MSwxMDEuOTc3IDY1LjU2OCwxMDEuOTc1IDY1LjY2NSwxMDEuOTc1IEw2NS42NjUsMTAxLjk3NSBaIiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIuMjA4LDU1LjEzNCBDMS4yMDcsNTMuMzA3IDEuOTY3LDUwLjkxNyAzLjkwNiw0OS43OTcgTDU5LjkxNywxNy40NTMgQzYxLjg1NiwxNi4zMzMgNjQuMjQxLDE2LjkwNyA2NS4yNDMsMTguNzM0IEw2NS40NzUsMTkuMTQ0IEM2NS44NzIsMTkuODgyIDY2LjM2OCwyMC41NiA2Ni45NDUsMjEuMTY1IEw2Ny4yMjMsMjEuNDM1IEM3MC41NDgsMjQuNjQ5IDc1LjgwNiwyNS4xNTEgODAuMTExLDIyLjY2NSBMODcuNDMsMTguNDQ1IEM4OS4zNywxNy4zMjYgOTEuNzU0LDE3Ljg5OSA5Mi43NTUsMTkuNzI3IEw5Ni4wMDUsMjUuNjU1IEwxMi40ODYsNzMuODg0IEwyLjIwOCw1NS4xMzQgWiIgaWQ9IkZpbGwtNiIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi40ODYsNzQuMDAxIEMxMi40NzYsNzQuMDAxIDEyLjQ2NSw3My45OTkgMTIuNDU1LDczLjk5NiBDMTIuNDI0LDczLjk4OCAxMi4zOTksNzMuOTY3IDEyLjM4NCw3My45NCBMMi4xMDYsNTUuMTkgQzEuMDc1LDUzLjMxIDEuODU3LDUwLjg0NSAzLjg0OCw0OS42OTYgTDU5Ljg1OCwxNy4zNTIgQzYwLjUyNSwxNi45NjcgNjEuMjcxLDE2Ljc2NCA2Mi4wMTYsMTYuNzY0IEM2My40MzEsMTYuNzY0IDY0LjY2NiwxNy40NjYgNjUuMzI3LDE4LjY0NiBDNjUuMzM3LDE4LjY1NCA2NS4zNDUsMTguNjYzIDY1LjM1MSwxOC42NzQgTDY1LjU3OCwxOS4wODggQzY1LjU4NCwxOS4xIDY1LjU4OSwxOS4xMTIgNjUuNTkxLDE5LjEyNiBDNjUuOTg1LDE5LjgzOCA2Ni40NjksMjAuNDk3IDY3LjAzLDIxLjA4NSBMNjcuMzA1LDIxLjM1MSBDNjkuMTUxLDIzLjEzNyA3MS42NDksMjQuMTIgNzQuMzM2LDI0LjEyIEM3Ni4zMTMsMjQuMTIgNzguMjksMjMuNTgyIDgwLjA1MywyMi41NjMgQzgwLjA2NCwyMi41NTcgODAuMDc2LDIyLjU1MyA4MC4wODgsMjIuNTUgTDg3LjM3MiwxOC4zNDQgQzg4LjAzOCwxNy45NTkgODguNzg0LDE3Ljc1NiA4OS41MjksMTcuNzU2IEM5MC45NTYsMTcuNzU2IDkyLjIwMSwxOC40NzIgOTIuODU4LDE5LjY3IEw5Ni4xMDcsMjUuNTk5IEM5Ni4xMzgsMjUuNjU0IDk2LjExOCwyNS43MjQgOTYuMDYzLDI1Ljc1NiBMMTIuNTQ1LDczLjk4NSBDMTIuNTI2LDczLjk5NiAxMi41MDYsNzQuMDAxIDEyLjQ4Niw3NC4wMDEgTDEyLjQ4Niw3NC4wMDEgWiBNNjIuMDE2LDE2Ljk5NyBDNjEuMzEyLDE2Ljk5NyA2MC42MDYsMTcuMTkgNTkuOTc1LDE3LjU1NCBMMy45NjUsNDkuODk5IEMyLjA4Myw1MC45ODUgMS4zNDEsNTMuMzA4IDIuMzEsNTUuMDc4IEwxMi41MzEsNzMuNzIzIEw5NS44NDgsMjUuNjExIEw5Mi42NTMsMTkuNzgyIEM5Mi4wMzgsMTguNjYgOTAuODcsMTcuOTkgODkuNTI5LDE3Ljk5IEM4OC44MjUsMTcuOTkgODguMTE5LDE4LjE4MiA4Ny40ODksMTguNTQ3IEw4MC4xNzIsMjIuNzcyIEM4MC4xNjEsMjIuNzc4IDgwLjE0OSwyMi43ODIgODAuMTM3LDIyLjc4NSBDNzguMzQ2LDIzLjgxMSA3Ni4zNDEsMjQuMzU0IDc0LjMzNiwyNC4zNTQgQzcxLjU4OCwyNC4zNTQgNjkuMDMzLDIzLjM0NyA2Ny4xNDIsMjEuNTE5IEw2Ni44NjQsMjEuMjQ5IEM2Ni4yNzcsMjAuNjM0IDY1Ljc3NCwxOS45NDcgNjUuMzY3LDE5LjIwMyBDNjUuMzYsMTkuMTkyIDY1LjM1NiwxOS4xNzkgNjUuMzU0LDE5LjE2NiBMNjUuMTYzLDE4LjgxOSBDNjUuMTU0LDE4LjgxMSA2NS4xNDYsMTguODAxIDY1LjE0LDE4Ljc5IEM2NC41MjUsMTcuNjY3IDYzLjM1NywxNi45OTcgNjIuMDE2LDE2Ljk5NyBMNjIuMDE2LDE2Ljk5NyBaIiBpZD0iRmlsbC03IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTQyLjQzNCw0OC44MDggTDQyLjQzNCw0OC44MDggQzM5LjkyNCw0OC44MDcgMzcuNzM3LDQ3LjU1IDM2LjU4Miw0NS40NDMgQzM0Ljc3MSw0Mi4xMzkgMzYuMTQ0LDM3LjgwOSAzOS42NDEsMzUuNzg5IEw1MS45MzIsMjguNjkxIEM1My4xMDMsMjguMDE1IDU0LjQxMywyNy42NTggNTUuNzIxLDI3LjY1OCBDNTguMjMxLDI3LjY1OCA2MC40MTgsMjguOTE2IDYxLjU3MywzMS4wMjMgQzYzLjM4NCwzNC4zMjcgNjIuMDEyLDM4LjY1NyA1OC41MTQsNDAuNjc3IEw0Ni4yMjMsNDcuNzc1IEM0NS4wNTMsNDguNDUgNDMuNzQyLDQ4LjgwOCA0Mi40MzQsNDguODA4IEw0Mi40MzQsNDguODA4IFogTTU1LjcyMSwyOC4xMjUgQzU0LjQ5NSwyOC4xMjUgNTMuMjY1LDI4LjQ2MSA1Mi4xNjYsMjkuMDk2IEwzOS44NzUsMzYuMTk0IEMzNi41OTYsMzguMDg3IDM1LjMwMiw0Mi4xMzYgMzYuOTkyLDQ1LjIxOCBDMzguMDYzLDQ3LjE3MyA0MC4wOTgsNDguMzQgNDIuNDM0LDQ4LjM0IEM0My42NjEsNDguMzQgNDQuODksNDguMDA1IDQ1Ljk5LDQ3LjM3IEw1OC4yODEsNDAuMjcyIEM2MS41NiwzOC4zNzkgNjIuODUzLDM0LjMzIDYxLjE2NCwzMS4yNDggQzYwLjA5MiwyOS4yOTMgNTguMDU4LDI4LjEyNSA1NS43MjEsMjguMTI1IEw1NS43MjEsMjguMTI1IFoiIGlkPSJGaWxsLTgiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjU4OCwyLjQwNyBDMTQ5LjU4OCwyLjQwNyAxNTUuNzY4LDUuOTc1IDE1Ni4zMjUsNi4yOTcgTDE1Ni4zMjUsNy4xODQgQzE1Ni4zMjUsNy4zNiAxNTYuMzM4LDcuNTQ0IDE1Ni4zNjIsNy43MzMgQzE1Ni4zNzMsNy44MTQgMTU2LjM4Miw3Ljg5NCAxNTYuMzksNy45NzUgQzE1Ni41Myw5LjM5IDE1Ny4zNjMsMTAuOTczIDE1OC40OTUsMTEuOTc0IEwxNjUuODkxLDE4LjUxOSBDMTY2LjA2OCwxOC42NzUgMTY2LjI0OSwxOC44MTQgMTY2LjQzMiwxOC45MzQgQzE2OC4wMTEsMTkuOTc0IDE2OS4zODIsMTkuNCAxNjkuNDk0LDE3LjY1MiBDMTY5LjU0MywxNi44NjggMTY5LjU1MSwxNi4wNTcgMTY5LjUxNywxNS4yMjMgTDE2OS41MTQsMTUuMDYzIEwxNjkuNTE0LDEzLjkxMiBDMTcwLjc4LDE0LjY0MiAxOTUuNTAxLDI4LjkxNSAxOTUuNTAxLDI4LjkxNSBMMTk1LjUwMSw4Mi45MTUgQzE5NS41MDEsODQuMDA1IDE5NC43MzEsODQuNDQ1IDE5My43ODEsODMuODk3IEwxNTEuMzA4LDU5LjM3NCBDMTUwLjM1OCw1OC44MjYgMTQ5LjU4OCw1Ny40OTcgMTQ5LjU4OCw1Ni40MDggTDE0OS41ODgsMjIuMzc1IiBpZD0iRmlsbC05IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE5NC41NTMsODQuMjUgQzE5NC4yOTYsODQuMjUgMTk0LjAxMyw4NC4xNjUgMTkzLjcyMiw4My45OTcgTDE1MS4yNSw1OS40NzYgQzE1MC4yNjksNTguOTA5IDE0OS40NzEsNTcuNTMzIDE0OS40NzEsNTYuNDA4IEwxNDkuNDcxLDIyLjM3NSBMMTQ5LjcwNSwyMi4zNzUgTDE0OS43MDUsNTYuNDA4IEMxNDkuNzA1LDU3LjQ1OSAxNTAuNDUsNTguNzQ0IDE1MS4zNjYsNTkuMjc0IEwxOTMuODM5LDgzLjc5NSBDMTk0LjI2Myw4NC4wNCAxOTQuNjU1LDg0LjA4MyAxOTQuOTQyLDgzLjkxNyBDMTk1LjIyNyw4My43NTMgMTk1LjM4NCw4My4zOTcgMTk1LjM4NCw4Mi45MTUgTDE5NS4zODQsMjguOTgyIEMxOTQuMTAyLDI4LjI0MiAxNzIuMTA0LDE1LjU0MiAxNjkuNjMxLDE0LjExNCBMMTY5LjYzNCwxNS4yMiBDMTY5LjY2OCwxNi4wNTIgMTY5LjY2LDE2Ljg3NCAxNjkuNjEsMTcuNjU5IEMxNjkuNTU2LDE4LjUwMyAxNjkuMjE0LDE5LjEyMyAxNjguNjQ3LDE5LjQwNSBDMTY4LjAyOCwxOS43MTQgMTY3LjE5NywxOS41NzggMTY2LjM2NywxOS4wMzIgQzE2Ni4xODEsMTguOTA5IDE2NS45OTUsMTguNzY2IDE2NS44MTQsMTguNjA2IEwxNTguNDE3LDEyLjA2MiBDMTU3LjI1OSwxMS4wMzYgMTU2LjQxOCw5LjQzNyAxNTYuMjc0LDcuOTg2IEMxNTYuMjY2LDcuOTA3IDE1Ni4yNTcsNy44MjcgMTU2LjI0Nyw3Ljc0OCBDMTU2LjIyMSw3LjU1NSAxNTYuMjA5LDcuMzY1IDE1Ni4yMDksNy4xODQgTDE1Ni4yMDksNi4zNjQgQzE1NS4zNzUsNS44ODMgMTQ5LjUyOSwyLjUwOCAxNDkuNTI5LDIuNTA4IEwxNDkuNjQ2LDIuMzA2IEMxNDkuNjQ2LDIuMzA2IDE1NS44MjcsNS44NzQgMTU2LjM4NCw2LjE5NiBMMTU2LjQ0Miw2LjIzIEwxNTYuNDQyLDcuMTg0IEMxNTYuNDQyLDcuMzU1IDE1Ni40NTQsNy41MzUgMTU2LjQ3OCw3LjcxNyBDMTU2LjQ4OSw3LjggMTU2LjQ5OSw3Ljg4MiAxNTYuNTA3LDcuOTYzIEMxNTYuNjQ1LDkuMzU4IDE1Ny40NTUsMTAuODk4IDE1OC41NzIsMTEuODg2IEwxNjUuOTY5LDE4LjQzMSBDMTY2LjE0MiwxOC41ODQgMTY2LjMxOSwxOC43MiAxNjYuNDk2LDE4LjgzNyBDMTY3LjI1NCwxOS4zMzYgMTY4LDE5LjQ2NyAxNjguNTQzLDE5LjE5NiBDMTY5LjAzMywxOC45NTMgMTY5LjMyOSwxOC40MDEgMTY5LjM3NywxNy42NDUgQzE2OS40MjcsMTYuODY3IDE2OS40MzQsMTYuMDU0IDE2OS40MDEsMTUuMjI4IEwxNjkuMzk3LDE1LjA2NSBMMTY5LjM5NywxMy43MSBMMTY5LjU3MiwxMy44MSBDMTcwLjgzOSwxNC41NDEgMTk1LjU1OSwyOC44MTQgMTk1LjU1OSwyOC44MTQgTDE5NS42MTgsMjguODQ3IEwxOTUuNjE4LDgyLjkxNSBDMTk1LjYxOCw4My40ODQgMTk1LjQyLDgzLjkxMSAxOTUuMDU5LDg0LjExOSBDMTk0LjkwOCw4NC4yMDYgMTk0LjczNyw4NC4yNSAxOTQuNTUzLDg0LjI1IiBpZD0iRmlsbC0xMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDUuNjg1LDU2LjE2MSBMMTY5LjgsNzAuMDgzIEwxNDMuODIyLDg1LjA4MSBMMTQyLjM2LDg0Ljc3NCBDMTM1LjgyNiw4Mi42MDQgMTI4LjczMiw4MS4wNDYgMTIxLjM0MSw4MC4xNTggQzExNi45NzYsNzkuNjM0IDExMi42NzgsODEuMjU0IDExMS43NDMsODMuNzc4IEMxMTEuNTA2LDg0LjQxNCAxMTEuNTAzLDg1LjA3MSAxMTEuNzMyLDg1LjcwNiBDMTEzLjI3LDg5Ljk3MyAxMTUuOTY4LDk0LjA2OSAxMTkuNzI3LDk3Ljg0MSBMMTIwLjI1OSw5OC42ODYgQzEyMC4yNiw5OC42ODUgOTQuMjgyLDExMy42ODMgOTQuMjgyLDExMy42ODMgTDcwLjE2Nyw5OS43NjEgTDE0NS42ODUsNTYuMTYxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05NC4yODIsMTEzLjgxOCBMOTQuMjIzLDExMy43ODUgTDY5LjkzMyw5OS43NjEgTDcwLjEwOCw5OS42NiBMMTQ1LjY4NSw1Ni4wMjYgTDE0NS43NDMsNTYuMDU5IEwxNzAuMDMzLDcwLjA4MyBMMTQzLjg0Miw4NS4yMDUgTDE0My43OTcsODUuMTk1IEMxNDMuNzcyLDg1LjE5IDE0Mi4zMzYsODQuODg4IDE0Mi4zMzYsODQuODg4IEMxMzUuNzg3LDgyLjcxNCAxMjguNzIzLDgxLjE2MyAxMjEuMzI3LDgwLjI3NCBDMTIwLjc4OCw4MC4yMDkgMTIwLjIzNiw4MC4xNzcgMTE5LjY4OSw4MC4xNzcgQzExNS45MzEsODAuMTc3IDExMi42MzUsODEuNzA4IDExMS44NTIsODMuODE5IEMxMTEuNjI0LDg0LjQzMiAxMTEuNjIxLDg1LjA1MyAxMTEuODQyLDg1LjY2NyBDMTEzLjM3Nyw4OS45MjUgMTE2LjA1OCw5My45OTMgMTE5LjgxLDk3Ljc1OCBMMTE5LjgyNiw5Ny43NzkgTDEyMC4zNTIsOTguNjE0IEMxMjAuMzU0LDk4LjYxNyAxMjAuMzU2LDk4LjYyIDEyMC4zNTgsOTguNjI0IEwxMjAuNDIyLDk4LjcyNiBMMTIwLjMxNyw5OC43ODcgQzEyMC4yNjQsOTguODE4IDk0LjU5OSwxMTMuNjM1IDk0LjM0LDExMy43ODUgTDk0LjI4MiwxMTMuODE4IEw5NC4yODIsMTEzLjgxOCBaIE03MC40MDEsOTkuNzYxIEw5NC4yODIsMTEzLjU0OSBMMTE5LjA4NCw5OS4yMjkgQzExOS42Myw5OC45MTQgMTE5LjkzLDk4Ljc0IDEyMC4xMDEsOTguNjU0IEwxMTkuNjM1LDk3LjkxNCBDMTE1Ljg2NCw5NC4xMjcgMTEzLjE2OCw5MC4wMzMgMTExLjYyMiw4NS43NDYgQzExMS4zODIsODUuMDc5IDExMS4zODYsODQuNDA0IDExMS42MzMsODMuNzM4IEMxMTIuNDQ4LDgxLjUzOSAxMTUuODM2LDc5Ljk0MyAxMTkuNjg5LDc5Ljk0MyBDMTIwLjI0Niw3OS45NDMgMTIwLjgwNiw3OS45NzYgMTIxLjM1NSw4MC4wNDIgQzEyOC43NjcsODAuOTMzIDEzNS44NDYsODIuNDg3IDE0Mi4zOTYsODQuNjYzIEMxNDMuMjMyLDg0LjgzOCAxNDMuNjExLDg0LjkxNyAxNDMuNzg2LDg0Ljk2NyBMMTY5LjU2Niw3MC4wODMgTDE0NS42ODUsNTYuMjk1IEw3MC40MDEsOTkuNzYxIEw3MC40MDEsOTkuNzYxIFoiIGlkPSJGaWxsLTEyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2Ny4yMywxOC45NzkgTDE2Ny4yMyw2OS44NSBMMTM5LjkwOSw4NS42MjMgTDEzMy40NDgsNzEuNDU2IEMxMzIuNTM4LDY5LjQ2IDEzMC4wMiw2OS43MTggMTI3LjgyNCw3Mi4wMyBDMTI2Ljc2OSw3My4xNCAxMjUuOTMxLDc0LjU4NSAxMjUuNDk0LDc2LjA0OCBMMTE5LjAzNCw5Ny42NzYgTDkxLjcxMiwxMTMuNDUgTDkxLjcxMiw2Mi41NzkgTDE2Ny4yMywxOC45NzkiIGlkPSJGaWxsLTEzIiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTkxLjcxMiwxMTMuNTY3IEM5MS42OTIsMTEzLjU2NyA5MS42NzIsMTEzLjU2MSA5MS42NTMsMTEzLjU1MSBDOTEuNjE4LDExMy41MyA5MS41OTUsMTEzLjQ5MiA5MS41OTUsMTEzLjQ1IEw5MS41OTUsNjIuNTc5IEM5MS41OTUsNjIuNTM3IDkxLjYxOCw2Mi40OTkgOTEuNjUzLDYyLjQ3OCBMMTY3LjE3MiwxOC44NzggQzE2Ny4yMDgsMTguODU3IDE2Ny4yNTIsMTguODU3IDE2Ny4yODgsMTguODc4IEMxNjcuMzI0LDE4Ljg5OSAxNjcuMzQ3LDE4LjkzNyAxNjcuMzQ3LDE4Ljk3OSBMMTY3LjM0Nyw2OS44NSBDMTY3LjM0Nyw2OS44OTEgMTY3LjMyNCw2OS45MyAxNjcuMjg4LDY5Ljk1IEwxMzkuOTY3LDg1LjcyNSBDMTM5LjkzOSw4NS43NDEgMTM5LjkwNSw4NS43NDUgMTM5Ljg3Myw4NS43MzUgQzEzOS44NDIsODUuNzI1IDEzOS44MTYsODUuNzAyIDEzOS44MDIsODUuNjcyIEwxMzMuMzQyLDcxLjUwNCBDMTMyLjk2Nyw3MC42ODIgMTMyLjI4LDcwLjIyOSAxMzEuNDA4LDcwLjIyOSBDMTMwLjMxOSw3MC4yMjkgMTI5LjA0NCw3MC45MTUgMTI3LjkwOCw3Mi4xMSBDMTI2Ljg3NCw3My4yIDEyNi4wMzQsNzQuNjQ3IDEyNS42MDYsNzYuMDgyIEwxMTkuMTQ2LDk3LjcwOSBDMTE5LjEzNyw5Ny43MzggMTE5LjExOCw5Ny43NjIgMTE5LjA5Miw5Ny43NzcgTDkxLjc3LDExMy41NTEgQzkxLjc1MiwxMTMuNTYxIDkxLjczMiwxMTMuNTY3IDkxLjcxMiwxMTMuNTY3IEw5MS43MTIsMTEzLjU2NyBaIE05MS44MjksNjIuNjQ3IEw5MS44MjksMTEzLjI0OCBMMTE4LjkzNSw5Ny41OTggTDEyNS4zODIsNzYuMDE1IEMxMjUuODI3LDc0LjUyNSAxMjYuNjY0LDczLjA4MSAxMjcuNzM5LDcxLjk1IEMxMjguOTE5LDcwLjcwOCAxMzAuMjU2LDY5Ljk5NiAxMzEuNDA4LDY5Ljk5NiBDMTMyLjM3Nyw2OS45OTYgMTMzLjEzOSw3MC40OTcgMTMzLjU1NCw3MS40MDcgTDEzOS45NjEsODUuNDU4IEwxNjcuMTEzLDY5Ljc4MiBMMTY3LjExMywxOS4xODEgTDkxLjgyOSw2Mi42NDcgTDkxLjgyOSw2Mi42NDcgWiIgaWQ9IkZpbGwtMTQiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTY4LjU0MywxOS4yMTMgTDE2OC41NDMsNzAuMDgzIEwxNDEuMjIxLDg1Ljg1NyBMMTM0Ljc2MSw3MS42ODkgQzEzMy44NTEsNjkuNjk0IDEzMS4zMzMsNjkuOTUxIDEyOS4xMzcsNzIuMjYzIEMxMjguMDgyLDczLjM3NCAxMjcuMjQ0LDc0LjgxOSAxMjYuODA3LDc2LjI4MiBMMTIwLjM0Niw5Ny45MDkgTDkzLjAyNSwxMTMuNjgzIEw5My4wMjUsNjIuODEzIEwxNjguNTQzLDE5LjIxMyIgaWQ9IkZpbGwtMTUiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTMuMDI1LDExMy44IEM5My4wMDUsMTEzLjggOTIuOTg0LDExMy43OTUgOTIuOTY2LDExMy43ODUgQzkyLjkzMSwxMTMuNzY0IDkyLjkwOCwxMTMuNzI1IDkyLjkwOCwxMTMuNjg0IEw5Mi45MDgsNjIuODEzIEM5Mi45MDgsNjIuNzcxIDkyLjkzMSw2Mi43MzMgOTIuOTY2LDYyLjcxMiBMMTY4LjQ4NCwxOS4xMTIgQzE2OC41MiwxOS4wOSAxNjguNTY1LDE5LjA5IDE2OC42MDEsMTkuMTEyIEMxNjguNjM3LDE5LjEzMiAxNjguNjYsMTkuMTcxIDE2OC42NiwxOS4yMTIgTDE2OC42Niw3MC4wODMgQzE2OC42Niw3MC4xMjUgMTY4LjYzNyw3MC4xNjQgMTY4LjYwMSw3MC4xODQgTDE0MS4yOCw4NS45NTggQzE0MS4yNTEsODUuOTc1IDE0MS4yMTcsODUuOTc5IDE0MS4xODYsODUuOTY4IEMxNDEuMTU0LDg1Ljk1OCAxNDEuMTI5LDg1LjkzNiAxNDEuMTE1LDg1LjkwNiBMMTM0LjY1NSw3MS43MzggQzEzNC4yOCw3MC45MTUgMTMzLjU5Myw3MC40NjMgMTMyLjcyLDcwLjQ2MyBDMTMxLjYzMiw3MC40NjMgMTMwLjM1Nyw3MS4xNDggMTI5LjIyMSw3Mi4zNDQgQzEyOC4xODYsNzMuNDMzIDEyNy4zNDcsNzQuODgxIDEyNi45MTksNzYuMzE1IEwxMjAuNDU4LDk3Ljk0MyBDMTIwLjQ1LDk3Ljk3MiAxMjAuNDMxLDk3Ljk5NiAxMjAuNDA1LDk4LjAxIEw5My4wODMsMTEzLjc4NSBDOTMuMDY1LDExMy43OTUgOTMuMDQ1LDExMy44IDkzLjAyNSwxMTMuOCBMOTMuMDI1LDExMy44IFogTTkzLjE0Miw2Mi44ODEgTDkzLjE0MiwxMTMuNDgxIEwxMjAuMjQ4LDk3LjgzMiBMMTI2LjY5NSw3Ni4yNDggQzEyNy4xNCw3NC43NTggMTI3Ljk3Nyw3My4zMTUgMTI5LjA1Miw3Mi4xODMgQzEzMC4yMzEsNzAuOTQyIDEzMS41NjgsNzAuMjI5IDEzMi43Miw3MC4yMjkgQzEzMy42ODksNzAuMjI5IDEzNC40NTIsNzAuNzMxIDEzNC44NjcsNzEuNjQxIEwxNDEuMjc0LDg1LjY5MiBMMTY4LjQyNiw3MC4wMTYgTDE2OC40MjYsMTkuNDE1IEw5My4xNDIsNjIuODgxIEw5My4xNDIsNjIuODgxIFoiIGlkPSJGaWxsLTE2IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS44LDcwLjA4MyBMMTQyLjQ3OCw4NS44NTcgTDEzNi4wMTgsNzEuNjg5IEMxMzUuMTA4LDY5LjY5NCAxMzIuNTksNjkuOTUxIDEzMC4zOTMsNzIuMjYzIEMxMjkuMzM5LDczLjM3NCAxMjguNSw3NC44MTkgMTI4LjA2NCw3Ni4yODIgTDEyMS42MDMsOTcuOTA5IEw5NC4yODIsMTEzLjY4MyBMOTQuMjgyLDYyLjgxMyBMMTY5LjgsMTkuMjEzIEwxNjkuOCw3MC4wODMgWiIgaWQ9IkZpbGwtMTciIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTQuMjgyLDExMy45MTcgQzk0LjI0MSwxMTMuOTE3IDk0LjIwMSwxMTMuOTA3IDk0LjE2NSwxMTMuODg2IEM5NC4wOTMsMTEzLjg0NSA5NC4wNDgsMTEzLjc2NyA5NC4wNDgsMTEzLjY4NCBMOTQuMDQ4LDYyLjgxMyBDOTQuMDQ4LDYyLjczIDk0LjA5Myw2Mi42NTIgOTQuMTY1LDYyLjYxMSBMMTY5LjY4MywxOS4wMSBDMTY5Ljc1NSwxOC45NjkgMTY5Ljg0NCwxOC45NjkgMTY5LjkxNywxOS4wMSBDMTY5Ljk4OSwxOS4wNTIgMTcwLjAzMywxOS4xMjkgMTcwLjAzMywxOS4yMTIgTDE3MC4wMzMsNzAuMDgzIEMxNzAuMDMzLDcwLjE2NiAxNjkuOTg5LDcwLjI0NCAxNjkuOTE3LDcwLjI4NSBMMTQyLjU5NSw4Ni4wNiBDMTQyLjUzOCw4Ni4wOTIgMTQyLjQ2OSw4Ni4xIDE0Mi40MDcsODYuMDggQzE0Mi4zNDQsODYuMDYgMTQyLjI5Myw4Ni4wMTQgMTQyLjI2Niw4NS45NTQgTDEzNS44MDUsNzEuNzg2IEMxMzUuNDQ1LDcwLjk5NyAxMzQuODEzLDcwLjU4IDEzMy45NzcsNzAuNTggQzEzMi45MjEsNzAuNTggMTMxLjY3Niw3MS4yNTIgMTMwLjU2Miw3Mi40MjQgQzEyOS41NCw3My41MDEgMTI4LjcxMSw3NC45MzEgMTI4LjI4Nyw3Ni4zNDggTDEyMS44MjcsOTcuOTc2IEMxMjEuODEsOTguMDM0IDEyMS43NzEsOTguMDgyIDEyMS43Miw5OC4xMTIgTDk0LjM5OCwxMTMuODg2IEM5NC4zNjIsMTEzLjkwNyA5NC4zMjIsMTEzLjkxNyA5NC4yODIsMTEzLjkxNyBMOTQuMjgyLDExMy45MTcgWiBNOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDExMy4yNzkgTDEyMS40MDYsOTcuNzU0IEwxMjcuODQsNzYuMjE1IEMxMjguMjksNzQuNzA4IDEyOS4xMzcsNzMuMjQ3IDEzMC4yMjQsNzIuMTAzIEMxMzEuNDI1LDcwLjgzOCAxMzIuNzkzLDcwLjExMiAxMzMuOTc3LDcwLjExMiBDMTM0Ljk5NSw3MC4xMTIgMTM1Ljc5NSw3MC42MzggMTM2LjIzLDcxLjU5MiBMMTQyLjU4NCw4NS41MjYgTDE2OS41NjYsNjkuOTQ4IEwxNjkuNTY2LDE5LjYxNyBMOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDYyLjk0OCBaIiBpZD0iRmlsbC0xOCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMDkuODk0LDkyLjk0MyBMMTA5Ljg5NCw5Mi45NDMgQzEwOC4xMiw5Mi45NDMgMTA2LjY1Myw5Mi4yMTggMTA1LjY1LDkwLjgyMyBDMTA1LjU4Myw5MC43MzEgMTA1LjU5Myw5MC42MSAxMDUuNjczLDkwLjUyOSBDMTA1Ljc1Myw5MC40NDggMTA1Ljg4LDkwLjQ0IDEwNS45NzQsOTAuNTA2IEMxMDYuNzU0LDkxLjA1MyAxMDcuNjc5LDkxLjMzMyAxMDguNzI0LDkxLjMzMyBDMTEwLjA0Nyw5MS4zMzMgMTExLjQ3OCw5MC44OTQgMTEyLjk4LDkwLjAyNyBDMTE4LjI5MSw4Ni45NiAxMjIuNjExLDc5LjUwOSAxMjIuNjExLDczLjQxNiBDMTIyLjYxMSw3MS40ODkgMTIyLjE2OSw2OS44NTYgMTIxLjMzMyw2OC42OTIgQzEyMS4yNjYsNjguNiAxMjEuMjc2LDY4LjQ3MyAxMjEuMzU2LDY4LjM5MiBDMTIxLjQzNiw2OC4zMTEgMTIxLjU2Myw2OC4yOTkgMTIxLjY1Niw2OC4zNjUgQzEyMy4zMjcsNjkuNTM3IDEyNC4yNDcsNzEuNzQ2IDEyNC4yNDcsNzQuNTg0IEMxMjQuMjQ3LDgwLjgyNiAxMTkuODIxLDg4LjQ0NyAxMTQuMzgyLDkxLjU4NyBDMTEyLjgwOCw5Mi40OTUgMTExLjI5OCw5Mi45NDMgMTA5Ljg5NCw5Mi45NDMgTDEwOS44OTQsOTIuOTQzIFogTTEwNi45MjUsOTEuNDAxIEMxMDcuNzM4LDkyLjA1MiAxMDguNzQ1LDkyLjI3OCAxMDkuODkzLDkyLjI3OCBMMTA5Ljg5NCw5Mi4yNzggQzExMS4yMTUsOTIuMjc4IDExMi42NDcsOTEuOTUxIDExNC4xNDgsOTEuMDg0IEMxMTkuNDU5LDg4LjAxNyAxMjMuNzgsODAuNjIxIDEyMy43OCw3NC41MjggQzEyMy43OCw3Mi41NDkgMTIzLjMxNyw3MC45MjkgMTIyLjQ1NCw2OS43NjcgQzEyMi44NjUsNzAuODAyIDEyMy4wNzksNzIuMDQyIDEyMy4wNzksNzMuNDAyIEMxMjMuMDc5LDc5LjY0NSAxMTguNjUzLDg3LjI4NSAxMTMuMjE0LDkwLjQyNSBDMTExLjY0LDkxLjMzNCAxMTAuMTMsOTEuNzQyIDEwOC43MjQsOTEuNzQyIEMxMDguMDgzLDkxLjc0MiAxMDcuNDgxLDkxLjU5MyAxMDYuOTI1LDkxLjQwMSBMMTA2LjkyNSw5MS40MDEgWiIgaWQ9IkZpbGwtMTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjA5Nyw5MC4yMyBDMTE4LjQ4MSw4Ny4xMjIgMTIyLjg0NSw3OS41OTQgMTIyLjg0NSw3My40MTYgQzEyMi44NDUsNzEuMzY1IDEyMi4zNjIsNjkuNzI0IDEyMS41MjIsNjguNTU2IEMxMTkuNzM4LDY3LjMwNCAxMTcuMTQ4LDY3LjM2MiAxMTQuMjY1LDY5LjAyNiBDMTA4Ljg4MSw3Mi4xMzQgMTA0LjUxNyw3OS42NjIgMTA0LjUxNyw4NS44NCBDMTA0LjUxNyw4Ny44OTEgMTA1LDg5LjUzMiAxMDUuODQsOTAuNyBDMTA3LjYyNCw5MS45NTIgMTEwLjIxNCw5MS44OTQgMTEzLjA5Nyw5MC4yMyIgaWQ9IkZpbGwtMjAiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTA4LjcyNCw5MS42MTQgTDEwOC43MjQsOTEuNjE0IEMxMDcuNTgyLDkxLjYxNCAxMDYuNTY2LDkxLjQwMSAxMDUuNzA1LDkwLjc5NyBDMTA1LjY4NCw5MC43ODMgMTA1LjY2NSw5MC44MTEgMTA1LjY1LDkwLjc5IEMxMDQuNzU2LDg5LjU0NiAxMDQuMjgzLDg3Ljg0MiAxMDQuMjgzLDg1LjgxNyBDMTA0LjI4Myw3OS41NzUgMTA4LjcwOSw3MS45NTMgMTE0LjE0OCw2OC44MTIgQzExNS43MjIsNjcuOTA0IDExNy4yMzIsNjcuNDQ5IDExOC42MzgsNjcuNDQ5IEMxMTkuNzgsNjcuNDQ5IDEyMC43OTYsNjcuNzU4IDEyMS42NTYsNjguMzYyIEMxMjEuNjc4LDY4LjM3NyAxMjEuNjk3LDY4LjM5NyAxMjEuNzEyLDY4LjQxOCBDMTIyLjYwNiw2OS42NjIgMTIzLjA3OSw3MS4zOSAxMjMuMDc5LDczLjQxNSBDMTIzLjA3OSw3OS42NTggMTE4LjY1Myw4Ny4xOTggMTEzLjIxNCw5MC4zMzggQzExMS42NCw5MS4yNDcgMTEwLjEzLDkxLjYxNCAxMDguNzI0LDkxLjYxNCBMMTA4LjcyNCw5MS42MTQgWiBNMTA2LjAwNiw5MC41MDUgQzEwNi43OCw5MS4wMzcgMTA3LjY5NCw5MS4yODEgMTA4LjcyNCw5MS4yODEgQzExMC4wNDcsOTEuMjgxIDExMS40NzgsOTAuODY4IDExMi45OCw5MC4wMDEgQzExOC4yOTEsODYuOTM1IDEyMi42MTEsNzkuNDk2IDEyMi42MTEsNzMuNDAzIEMxMjIuNjExLDcxLjQ5NCAxMjIuMTc3LDY5Ljg4IDEyMS4zNTYsNjguNzE4IEMxMjAuNTgyLDY4LjE4NSAxMTkuNjY4LDY3LjkxOSAxMTguNjM4LDY3LjkxOSBDMTE3LjMxNSw2Ny45MTkgMTE1Ljg4Myw2OC4zNiAxMTQuMzgyLDY5LjIyNyBDMTA5LjA3MSw3Mi4yOTMgMTA0Ljc1MSw3OS43MzMgMTA0Ljc1MSw4NS44MjYgQzEwNC43NTEsODcuNzM1IDEwNS4xODUsODkuMzQzIDEwNi4wMDYsOTAuNTA1IEwxMDYuMDA2LDkwLjUwNSBaIiBpZD0iRmlsbC0yMSIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDkuMzE4LDcuMjYyIEwxMzkuMzM0LDE2LjE0IEwxNTUuMjI3LDI3LjE3MSBMMTYwLjgxNiwyMS4wNTkgTDE0OS4zMTgsNy4yNjIiIGlkPSJGaWxsLTIyIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS42NzYsMTMuODQgTDE1OS45MjgsMTkuNDY3IEMxNTYuMjg2LDIxLjU3IDE1MC40LDIxLjU4IDE0Ni43ODEsMTkuNDkxIEMxNDMuMTYxLDE3LjQwMiAxNDMuMTgsMTQuMDAzIDE0Ni44MjIsMTEuOSBMMTU2LjMxNyw2LjI5MiBMMTQ5LjU4OCwyLjQwNyBMNjcuNzUyLDQ5LjQ3OCBMMTEzLjY3NSw3NS45OTIgTDExNi43NTYsNzQuMjEzIEMxMTcuMzg3LDczLjg0OCAxMTcuNjI1LDczLjMxNSAxMTcuMzc0LDcyLjgyMyBDMTE1LjAxNyw2OC4xOTEgMTE0Ljc4MSw2My4yNzcgMTE2LjY5MSw1OC41NjEgQzEyMi4zMjksNDQuNjQxIDE0MS4yLDMzLjc0NiAxNjUuMzA5LDMwLjQ5MSBDMTczLjQ3OCwyOS4zODggMTgxLjk4OSwyOS41MjQgMTkwLjAxMywzMC44ODUgQzE5MC44NjUsMzEuMDMgMTkxLjc4OSwzMC44OTMgMTkyLjQyLDMwLjUyOCBMMTk1LjUwMSwyOC43NSBMMTY5LjY3NiwxMy44NCIgaWQ9IkZpbGwtMjMiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3Ni40NTkgQzExMy41OTQsNzYuNDU5IDExMy41MTQsNzYuNDM4IDExMy40NDIsNzYuMzk3IEw2Ny41MTgsNDkuODgyIEM2Ny4zNzQsNDkuNzk5IDY3LjI4NCw0OS42NDUgNjcuMjg1LDQ5LjQ3OCBDNjcuMjg1LDQ5LjMxMSA2Ny4zNzQsNDkuMTU3IDY3LjUxOSw0OS4wNzMgTDE0OS4zNTUsMi4wMDIgQzE0OS40OTksMS45MTkgMTQ5LjY3NywxLjkxOSAxNDkuODIxLDIuMDAyIEwxNTYuNTUsNS44ODcgQzE1Ni43NzQsNi4wMTcgMTU2Ljg1LDYuMzAyIDE1Ni43MjIsNi41MjYgQzE1Ni41OTIsNi43NDkgMTU2LjMwNyw2LjgyNiAxNTYuMDgzLDYuNjk2IEwxNDkuNTg3LDIuOTQ2IEw2OC42ODcsNDkuNDc5IEwxMTMuNjc1LDc1LjQ1MiBMMTE2LjUyMyw3My44MDggQzExNi43MTUsNzMuNjk3IDExNy4xNDMsNzMuMzk5IDExNi45NTgsNzMuMDM1IEMxMTQuNTQyLDY4LjI4NyAxMTQuMyw2My4yMjEgMTE2LjI1OCw1OC4zODUgQzExOS4wNjQsNTEuNDU4IDEyNS4xNDMsNDUuMTQzIDEzMy44NCw0MC4xMjIgQzE0Mi40OTcsMzUuMTI0IDE1My4zNTgsMzEuNjMzIDE2NS4yNDcsMzAuMDI4IEMxNzMuNDQ1LDI4LjkyMSAxODIuMDM3LDI5LjA1OCAxOTAuMDkxLDMwLjQyNSBDMTkwLjgzLDMwLjU1IDE5MS42NTIsMzAuNDMyIDE5Mi4xODYsMzAuMTI0IEwxOTQuNTY3LDI4Ljc1IEwxNjkuNDQyLDE0LjI0NCBDMTY5LjIxOSwxNC4xMTUgMTY5LjE0MiwxMy44MjkgMTY5LjI3MSwxMy42MDYgQzE2OS40LDEzLjM4MiAxNjkuNjg1LDEzLjMwNiAxNjkuOTA5LDEzLjQzNSBMMTk1LjczNCwyOC4zNDUgQzE5NS44NzksMjguNDI4IDE5NS45NjgsMjguNTgzIDE5NS45NjgsMjguNzUgQzE5NS45NjgsMjguOTE2IDE5NS44NzksMjkuMDcxIDE5NS43MzQsMjkuMTU0IEwxOTIuNjUzLDMwLjkzMyBDMTkxLjkzMiwzMS4zNSAxOTAuODksMzEuNTA4IDE4OS45MzUsMzEuMzQ2IEMxODEuOTcyLDI5Ljk5NSAxNzMuNDc4LDI5Ljg2IDE2NS4zNzIsMzAuOTU0IEMxNTMuNjAyLDMyLjU0MyAxNDIuODYsMzUuOTkzIDEzNC4zMDcsNDAuOTMxIEMxMjUuNzkzLDQ1Ljg0NyAxMTkuODUxLDUyLjAwNCAxMTcuMTI0LDU4LjczNiBDMTE1LjI3LDYzLjMxNCAxMTUuNTAxLDY4LjExMiAxMTcuNzksNzIuNjExIEMxMTguMTYsNzMuMzM2IDExNy44NDUsNzQuMTI0IDExNi45OSw3NC42MTcgTDExMy45MDksNzYuMzk3IEMxMTMuODM2LDc2LjQzOCAxMTMuNzU2LDc2LjQ1OSAxMTMuNjc1LDc2LjQ1OSIgaWQ9IkZpbGwtMjQiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUzLjMxNiwyMS4yNzkgQzE1MC45MDMsMjEuMjc5IDE0OC40OTUsMjAuNzUxIDE0Ni42NjQsMTkuNjkzIEMxNDQuODQ2LDE4LjY0NCAxNDMuODQ0LDE3LjIzMiAxNDMuODQ0LDE1LjcxOCBDMTQzLjg0NCwxNC4xOTEgMTQ0Ljg2LDEyLjc2MyAxNDYuNzA1LDExLjY5OCBMMTU2LjE5OCw2LjA5MSBDMTU2LjMwOSw2LjAyNSAxNTYuNDUyLDYuMDYyIDE1Ni41MTgsNi4xNzMgQzE1Ni41ODMsNi4yODQgMTU2LjU0Nyw2LjQyNyAxNTYuNDM2LDYuNDkzIEwxNDYuOTQsMTIuMTAyIEMxNDUuMjQ0LDEzLjA4MSAxNDQuMzEyLDE0LjM2NSAxNDQuMzEyLDE1LjcxOCBDMTQ0LjMxMiwxNy4wNTggMTQ1LjIzLDE4LjMyNiAxNDYuODk3LDE5LjI4OSBDMTUwLjQ0NiwyMS4zMzggMTU2LjI0LDIxLjMyNyAxNTkuODExLDE5LjI2NSBMMTY5LjU1OSwxMy42MzcgQzE2OS42NywxMy41NzMgMTY5LjgxMywxMy42MTEgMTY5Ljg3OCwxMy43MjMgQzE2OS45NDMsMTMuODM0IDE2OS45MDQsMTMuOTc3IDE2OS43OTMsMTQuMDQyIEwxNjAuMDQ1LDE5LjY3IEMxNTguMTg3LDIwLjc0MiAxNTUuNzQ5LDIxLjI3OSAxNTMuMzE2LDIxLjI3OSIgaWQ9IkZpbGwtMjUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3NS45OTIgTDY3Ljc2Miw0OS40ODQiIGlkPSJGaWxsLTI2IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMy42NzUsNzYuMzQyIEMxMTMuNjE1LDc2LjM0MiAxMTMuNTU1LDc2LjMyNyAxMTMuNSw3Ni4yOTUgTDY3LjU4Nyw0OS43ODcgQzY3LjQxOSw0OS42OSA2Ny4zNjIsNDkuNDc2IDY3LjQ1OSw0OS4zMDkgQzY3LjU1Niw0OS4xNDEgNjcuNzcsNDkuMDgzIDY3LjkzNyw0OS4xOCBMMTEzLjg1LDc1LjY4OCBDMTE0LjAxOCw3NS43ODUgMTE0LjA3NSw3NiAxMTMuOTc4LDc2LjE2NyBDMTEzLjkxNCw3Ni4yNzkgMTEzLjc5Niw3Ni4zNDIgMTEzLjY3NSw3Ni4zNDIiIGlkPSJGaWxsLTI3IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY3Ljc2Miw0OS40ODQgTDY3Ljc2MiwxMDMuNDg1IEM2Ny43NjIsMTA0LjU3NSA2OC41MzIsMTA1LjkwMyA2OS40ODIsMTA2LjQ1MiBMMTExLjk1NSwxMzAuOTczIEMxMTIuOTA1LDEzMS41MjIgMTEzLjY3NSwxMzEuMDgzIDExMy42NzUsMTI5Ljk5MyBMMTEzLjY3NSw3NS45OTIiIGlkPSJGaWxsLTI4IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMi43MjcsMTMxLjU2MSBDMTEyLjQzLDEzMS41NjEgMTEyLjEwNywxMzEuNDY2IDExMS43OCwxMzEuMjc2IEw2OS4zMDcsMTA2Ljc1NSBDNjguMjQ0LDEwNi4xNDIgNjcuNDEyLDEwNC43MDUgNjcuNDEyLDEwMy40ODUgTDY3LjQxMiw0OS40ODQgQzY3LjQxMiw0OS4yOSA2Ny41NjksNDkuMTM0IDY3Ljc2Miw0OS4xMzQgQzY3Ljk1Niw0OS4xMzQgNjguMTEzLDQ5LjI5IDY4LjExMyw0OS40ODQgTDY4LjExMywxMDMuNDg1IEM2OC4xMTMsMTA0LjQ0NSA2OC44MiwxMDUuNjY1IDY5LjY1NywxMDYuMTQ4IEwxMTIuMTMsMTMwLjY3IEMxMTIuNDc0LDEzMC44NjggMTEyLjc5MSwxMzAuOTEzIDExMywxMzAuNzkyIEMxMTMuMjA2LDEzMC42NzMgMTEzLjMyNSwxMzAuMzgxIDExMy4zMjUsMTI5Ljk5MyBMMTEzLjMyNSw3NS45OTIgQzExMy4zMjUsNzUuNzk4IDExMy40ODIsNzUuNjQxIDExMy42NzUsNzUuNjQxIEMxMTMuODY5LDc1LjY0MSAxMTQuMDI1LDc1Ljc5OCAxMTQuMDI1LDc1Ljk5MiBMMTE0LjAyNSwxMjkuOTkzIEMxMTQuMDI1LDEzMC42NDggMTEzLjc4NiwxMzEuMTQ3IDExMy4zNSwxMzEuMzk5IEMxMTMuMTYyLDEzMS41MDcgMTEyLjk1MiwxMzEuNTYxIDExMi43MjcsMTMxLjU2MSIgaWQ9IkZpbGwtMjkiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEyLjg2LDQwLjUxMiBDMTEyLjg2LDQwLjUxMiAxMTIuODYsNDAuNTEyIDExMi44NTksNDAuNTEyIEMxMTAuNTQxLDQwLjUxMiAxMDguMzYsMzkuOTkgMTA2LjcxNywzOS4wNDEgQzEwNS4wMTIsMzguMDU3IDEwNC4wNzQsMzYuNzI2IDEwNC4wNzQsMzUuMjkyIEMxMDQuMDc0LDMzLjg0NyAxMDUuMDI2LDMyLjUwMSAxMDYuNzU0LDMxLjUwNCBMMTE4Ljc5NSwyNC41NTEgQzEyMC40NjMsMjMuNTg5IDEyMi42NjksMjMuMDU4IDEyNS4wMDcsMjMuMDU4IEMxMjcuMzI1LDIzLjA1OCAxMjkuNTA2LDIzLjU4MSAxMzEuMTUsMjQuNTMgQzEzMi44NTQsMjUuNTE0IDEzMy43OTMsMjYuODQ1IDEzMy43OTMsMjguMjc4IEMxMzMuNzkzLDI5LjcyNCAxMzIuODQxLDMxLjA2OSAxMzEuMTEzLDMyLjA2NyBMMTE5LjA3MSwzOS4wMTkgQzExNy40MDMsMzkuOTgyIDExNS4xOTcsNDAuNTEyIDExMi44Niw0MC41MTIgTDExMi44Niw0MC41MTIgWiBNMTI1LjAwNywyMy43NTkgQzEyMi43OSwyMy43NTkgMTIwLjcwOSwyNC4yNTYgMTE5LjE0NiwyNS4xNTggTDEwNy4xMDQsMzIuMTEgQzEwNS42MDIsMzIuOTc4IDEwNC43NzQsMzQuMTA4IDEwNC43NzQsMzUuMjkyIEMxMDQuNzc0LDM2LjQ2NSAxMDUuNTg5LDM3LjU4MSAxMDcuMDY3LDM4LjQzNCBDMTA4LjYwNSwzOS4zMjMgMTEwLjY2MywzOS44MTIgMTEyLjg1OSwzOS44MTIgTDExMi44NiwzOS44MTIgQzExNS4wNzYsMzkuODEyIDExNy4xNTgsMzkuMzE1IDExOC43MjEsMzguNDEzIEwxMzAuNzYyLDMxLjQ2IEMxMzIuMjY0LDMwLjU5MyAxMzMuMDkyLDI5LjQ2MyAxMzMuMDkyLDI4LjI3OCBDMTMzLjA5MiwyNy4xMDYgMTMyLjI3OCwyNS45OSAxMzAuOCwyNS4xMzYgQzEyOS4yNjEsMjQuMjQ4IDEyNy4yMDQsMjMuNzU5IDEyNS4wMDcsMjMuNzU5IEwxMjUuMDA3LDIzLjc1OSBaIiBpZD0iRmlsbC0zMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjUuNjMsMTYuMjE5IEwxNTkuODk2LDE5LjUzIEMxNTYuNzI5LDIxLjM1OCAxNTEuNjEsMjEuMzY3IDE0OC40NjMsMTkuNTUgQzE0NS4zMTYsMTcuNzMzIDE0NS4zMzIsMTQuNzc4IDE0OC40OTksMTIuOTQ5IEwxNTQuMjMzLDkuNjM5IEwxNjUuNjMsMTYuMjE5IiBpZD0iRmlsbC0zMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNTQuMjMzLDEwLjQ0OCBMMTY0LjIyOCwxNi4yMTkgTDE1OS41NDYsMTguOTIzIEMxNTguMTEyLDE5Ljc1IDE1Ni4xOTQsMjAuMjA2IDE1NC4xNDcsMjAuMjA2IEMxNTIuMTE4LDIwLjIwNiAxNTAuMjI0LDE5Ljc1NyAxNDguODE0LDE4Ljk0MyBDMTQ3LjUyNCwxOC4xOTkgMTQ2LjgxNCwxNy4yNDkgMTQ2LjgxNCwxNi4yNjkgQzE0Ni44MTQsMTUuMjc4IDE0Ny41MzcsMTQuMzE0IDE0OC44NSwxMy41NTYgTDE1NC4yMzMsMTAuNDQ4IE0xNTQuMjMzLDkuNjM5IEwxNDguNDk5LDEyLjk0OSBDMTQ1LjMzMiwxNC43NzggMTQ1LjMxNiwxNy43MzMgMTQ4LjQ2MywxOS41NSBDMTUwLjAzMSwyMC40NTUgMTUyLjA4NiwyMC45MDcgMTU0LjE0NywyMC45MDcgQzE1Ni4yMjQsMjAuOTA3IDE1OC4zMDYsMjAuNDQ3IDE1OS44OTYsMTkuNTMgTDE2NS42MywxNi4yMTkgTDE1NC4yMzMsOS42MzkiIGlkPSJGaWxsLTMyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NS40NDUsNzIuNjY3IEwxNDUuNDQ1LDcyLjY2NyBDMTQzLjY3Miw3Mi42NjcgMTQyLjIwNCw3MS44MTcgMTQxLjIwMiw3MC40MjIgQzE0MS4xMzUsNzAuMzMgMTQxLjE0NSw3MC4xNDcgMTQxLjIyNSw3MC4wNjYgQzE0MS4zMDUsNjkuOTg1IDE0MS40MzIsNjkuOTQ2IDE0MS41MjUsNzAuMDExIEMxNDIuMzA2LDcwLjU1OSAxNDMuMjMxLDcwLjgyMyAxNDQuMjc2LDcwLjgyMiBDMTQ1LjU5OCw3MC44MjIgMTQ3LjAzLDcwLjM3NiAxNDguNTMyLDY5LjUwOSBDMTUzLjg0Miw2Ni40NDMgMTU4LjE2Myw1OC45ODcgMTU4LjE2Myw1Mi44OTQgQzE1OC4xNjMsNTAuOTY3IDE1Ny43MjEsNDkuMzMyIDE1Ni44ODQsNDguMTY4IEMxNTYuODE4LDQ4LjA3NiAxNTYuODI4LDQ3Ljk0OCAxNTYuOTA4LDQ3Ljg2NyBDMTU2Ljk4OCw0Ny43ODYgMTU3LjExNCw0Ny43NzQgMTU3LjIwOCw0Ny44NCBDMTU4Ljg3OCw0OS4wMTIgMTU5Ljc5OCw1MS4yMiAxNTkuNzk4LDU0LjA1OSBDMTU5Ljc5OCw2MC4zMDEgMTU1LjM3Myw2OC4wNDYgMTQ5LjkzMyw3MS4xODYgQzE0OC4zNiw3Mi4wOTQgMTQ2Ljg1LDcyLjY2NyAxNDUuNDQ1LDcyLjY2NyBMMTQ1LjQ0NSw3Mi42NjcgWiBNMTQyLjQ3Niw3MSBDMTQzLjI5LDcxLjY1MSAxNDQuMjk2LDcyLjAwMiAxNDUuNDQ1LDcyLjAwMiBDMTQ2Ljc2Nyw3Mi4wMDIgMTQ4LjE5OCw3MS41NSAxNDkuNyw3MC42ODIgQzE1NS4wMSw2Ny42MTcgMTU5LjMzMSw2MC4xNTkgMTU5LjMzMSw1NC4wNjUgQzE1OS4zMzEsNTIuMDg1IDE1OC44NjgsNTAuNDM1IDE1OC4wMDYsNDkuMjcyIEMxNTguNDE3LDUwLjMwNyAxNTguNjMsNTEuNTMyIDE1OC42Myw1Mi44OTIgQzE1OC42Myw1OS4xMzQgMTU0LjIwNSw2Ni43NjcgMTQ4Ljc2NSw2OS45MDcgQzE0Ny4xOTIsNzAuODE2IDE0NS42ODEsNzEuMjgzIDE0NC4yNzYsNzEuMjgzIEMxNDMuNjM0LDcxLjI4MyAxNDMuMDMzLDcxLjE5MiAxNDIuNDc2LDcxIEwxNDIuNDc2LDcxIFoiIGlkPSJGaWxsLTMzIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0OC42NDgsNjkuNzA0IEMxNTQuMDMyLDY2LjU5NiAxNTguMzk2LDU5LjA2OCAxNTguMzk2LDUyLjg5MSBDMTU4LjM5Niw1MC44MzkgMTU3LjkxMyw0OS4xOTggMTU3LjA3NCw0OC4wMyBDMTU1LjI4OSw0Ni43NzggMTUyLjY5OSw0Ni44MzYgMTQ5LjgxNiw0OC41MDEgQzE0NC40MzMsNTEuNjA5IDE0MC4wNjgsNTkuMTM3IDE0MC4wNjgsNjUuMzE0IEMxNDAuMDY4LDY3LjM2NSAxNDAuNTUyLDY5LjAwNiAxNDEuMzkxLDcwLjE3NCBDMTQzLjE3Niw3MS40MjcgMTQ1Ljc2NSw3MS4zNjkgMTQ4LjY0OCw2OS43MDQiIGlkPSJGaWxsLTM0IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NC4yNzYsNzEuMjc2IEwxNDQuMjc2LDcxLjI3NiBDMTQzLjEzMyw3MS4yNzYgMTQyLjExOCw3MC45NjkgMTQxLjI1Nyw3MC4zNjUgQzE0MS4yMzYsNzAuMzUxIDE0MS4yMTcsNzAuMzMyIDE0MS4yMDIsNzAuMzExIEMxNDAuMzA3LDY5LjA2NyAxMzkuODM1LDY3LjMzOSAxMzkuODM1LDY1LjMxNCBDMTM5LjgzNSw1OS4wNzMgMTQ0LjI2LDUxLjQzOSAxNDkuNyw0OC4yOTggQzE1MS4yNzMsNDcuMzkgMTUyLjc4NCw0Ni45MjkgMTU0LjE4OSw0Ni45MjkgQzE1NS4zMzIsNDYuOTI5IDE1Ni4zNDcsNDcuMjM2IDE1Ny4yMDgsNDcuODM5IEMxNTcuMjI5LDQ3Ljg1NCAxNTcuMjQ4LDQ3Ljg3MyAxNTcuMjYzLDQ3Ljg5NCBDMTU4LjE1Nyw0OS4xMzggMTU4LjYzLDUwLjg2NSAxNTguNjMsNTIuODkxIEMxNTguNjMsNTkuMTMyIDE1NC4yMDUsNjYuNzY2IDE0OC43NjUsNjkuOTA3IEMxNDcuMTkyLDcwLjgxNSAxNDUuNjgxLDcxLjI3NiAxNDQuMjc2LDcxLjI3NiBMMTQ0LjI3Niw3MS4yNzYgWiBNMTQxLjU1OCw3MC4xMDQgQzE0Mi4zMzEsNzAuNjM3IDE0My4yNDUsNzEuMDA1IDE0NC4yNzYsNzEuMDA1IEMxNDUuNTk4LDcxLjAwNSAxNDcuMDMsNzAuNDY3IDE0OC41MzIsNjkuNiBDMTUzLjg0Miw2Ni41MzQgMTU4LjE2Myw1OS4wMzMgMTU4LjE2Myw1Mi45MzkgQzE1OC4xNjMsNTEuMDMxIDE1Ny43MjksNDkuMzg1IDE1Ni45MDcsNDguMjIzIEMxNTYuMTMzLDQ3LjY5MSAxNTUuMjE5LDQ3LjQwOSAxNTQuMTg5LDQ3LjQwOSBDMTUyLjg2Nyw0Ny40MDkgMTUxLjQzNSw0Ny44NDIgMTQ5LjkzMyw0OC43MDkgQzE0NC42MjMsNTEuNzc1IDE0MC4zMDIsNTkuMjczIDE0MC4zMDIsNjUuMzY2IEMxNDAuMzAyLDY3LjI3NiAxNDAuNzM2LDY4Ljk0MiAxNDEuNTU4LDcwLjEwNCBMMTQxLjU1OCw3MC4xMDQgWiIgaWQ9IkZpbGwtMzUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUwLjcyLDY1LjM2MSBMMTUwLjM1Nyw2NS4wNjYgQzE1MS4xNDcsNjQuMDkyIDE1MS44NjksNjMuMDQgMTUyLjUwNSw2MS45MzggQzE1My4zMTMsNjAuNTM5IDE1My45NzgsNTkuMDY3IDE1NC40ODIsNTcuNTYzIEwxNTQuOTI1LDU3LjcxMiBDMTU0LjQxMiw1OS4yNDUgMTUzLjczMyw2MC43NDUgMTUyLjkxLDYyLjE3MiBDMTUyLjI2Miw2My4yOTUgMTUxLjUyNSw2NC4zNjggMTUwLjcyLDY1LjM2MSIgaWQ9IkZpbGwtMzYiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE1LjkxNyw4NC41MTQgTDExNS41NTQsODQuMjIgQzExNi4zNDQsODMuMjQ1IDExNy4wNjYsODIuMTk0IDExNy43MDIsODEuMDkyIEMxMTguNTEsNzkuNjkyIDExOS4xNzUsNzguMjIgMTE5LjY3OCw3Ni43MTcgTDEyMC4xMjEsNzYuODY1IEMxMTkuNjA4LDc4LjM5OCAxMTguOTMsNzkuODk5IDExOC4xMDYsODEuMzI2IEMxMTcuNDU4LDgyLjQ0OCAxMTYuNzIyLDgzLjUyMSAxMTUuOTE3LDg0LjUxNCIgaWQ9IkZpbGwtMzciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE0LDEzMC40NzYgTDExNCwxMzAuMDA4IEwxMTQsNzYuMDUyIEwxMTQsNzUuNTg0IEwxMTQsNzYuMDUyIEwxMTQsMTMwLjAwOCBMMTE0LDEzMC40NzYiIGlkPSJGaWxsLTM4IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYyLjAwMDAwMCwgMC4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTkuODIyLDM3LjQ3NCBDMTkuODM5LDM3LjMzOSAxOS43NDcsMzcuMTk0IDE5LjU1NSwzNy4wODIgQzE5LjIyOCwzNi44OTQgMTguNzI5LDM2Ljg3MiAxOC40NDYsMzcuMDM3IEwxMi40MzQsNDAuNTA4IEMxMi4zMDMsNDAuNTg0IDEyLjI0LDQwLjY4NiAxMi4yNDMsNDAuNzkzIEMxMi4yNDUsNDAuOTI1IDEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQxLjM3MSBMMTIuMjQ1LDQxLjQxNCBMMTIuMjM4LDQxLjU0MiBDOC4xNDgsNDMuODg3IDUuNjQ3LDQ1LjMyMSA1LjY0Nyw0NS4zMjEgQzUuNjQ2LDQ1LjMyMSAzLjU3LDQ2LjM2NyAyLjg2LDUwLjUxMyBDMi44Niw1MC41MTMgMS45NDgsNTcuNDc0IDEuOTYyLDcwLjI1OCBDMS45NzcsODIuODI4IDIuNTY4LDg3LjMyOCAzLjEyOSw5MS42MDkgQzMuMzQ5LDkzLjI5MyA2LjEzLDkzLjczNCA2LjEzLDkzLjczNCBDNi40NjEsOTMuNzc0IDYuODI4LDkzLjcwNyA3LjIxLDkzLjQ4NiBMODIuNDgzLDQ5LjkzNSBDODQuMjkxLDQ4Ljg2NiA4NS4xNSw0Ni4yMTYgODUuNTM5LDQzLjY1MSBDODYuNzUyLDM1LjY2MSA4Ny4yMTQsMTAuNjczIDg1LjI2NCwzLjc3MyBDODUuMDY4LDMuMDggODQuNzU0LDIuNjkgODQuMzk2LDIuNDkxIEw4Mi4zMSwxLjcwMSBDODEuNTgzLDEuNzI5IDgwLjg5NCwyLjE2OCA4MC43NzYsMi4yMzYgQzgwLjYzNiwyLjMxNyA0MS44MDcsMjQuNTg1IDIwLjAzMiwzNy4wNzIgTDE5LjgyMiwzNy40NzQiIGlkPSJGaWxsLTEiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNODIuMzExLDEuNzAxIEw4NC4zOTYsMi40OTEgQzg0Ljc1NCwyLjY5IDg1LjA2OCwzLjA4IDg1LjI2NCwzLjc3MyBDODcuMjEzLDEwLjY3MyA4Ni43NTEsMzUuNjYgODUuNTM5LDQzLjY1MSBDODUuMTQ5LDQ2LjIxNiA4NC4yOSw0OC44NjYgODIuNDgzLDQ5LjkzNSBMNy4yMSw5My40ODYgQzYuODk3LDkzLjY2NyA2LjU5NSw5My43NDQgNi4zMTQsOTMuNzQ0IEw2LjEzMSw5My43MzMgQzYuMTMxLDkzLjczNCAzLjM0OSw5My4yOTMgMy4xMjgsOTEuNjA5IEMyLjU2OCw4Ny4zMjcgMS45NzcsODIuODI4IDEuOTYzLDcwLjI1OCBDMS45NDgsNTcuNDc0IDIuODYsNTAuNTEzIDIuODYsNTAuNTEzIEMzLjU3LDQ2LjM2NyA1LjY0Nyw0NS4zMjEgNS42NDcsNDUuMzIxIEM1LjY0Nyw0NS4zMjEgOC4xNDgsNDMuODg3IDEyLjIzOCw0MS41NDIgTDEyLjI0NSw0MS40MTQgTDEyLjI0NSw0MS4zNzEgQzEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQwLjkyNSAxMi4yNDMsNDAuNzkzIEMxMi4yNCw0MC42ODYgMTIuMzAyLDQwLjU4MyAxMi40MzQsNDAuNTA4IEwxOC40NDYsMzcuMDM2IEMxOC41NzQsMzYuOTYyIDE4Ljc0NiwzNi45MjYgMTguOTI3LDM2LjkyNiBDMTkuMTQ1LDM2LjkyNiAxOS4zNzYsMzYuOTc5IDE5LjU1NCwzNy4wODIgQzE5Ljc0NywzNy4xOTQgMTkuODM5LDM3LjM0IDE5LjgyMiwzNy40NzQgTDIwLjAzMywzNy4wNzIgQzQxLjgwNiwyNC41ODUgODAuNjM2LDIuMzE4IDgwLjc3NywyLjIzNiBDODAuODk0LDIuMTY4IDgxLjU4MywxLjcyOSA4Mi4zMTEsMS43MDEgTTgyLjMxMSwwLjcwNCBMODIuMjcyLDAuNzA1IEM4MS42NTQsMC43MjggODAuOTg5LDAuOTQ5IDgwLjI5OCwxLjM2MSBMODAuMjc3LDEuMzczIEM4MC4xMjksMS40NTggNTkuNzY4LDEzLjEzNSAxOS43NTgsMzYuMDc5IEMxOS41LDM1Ljk4MSAxOS4yMTQsMzUuOTI5IDE4LjkyNywzNS45MjkgQzE4LjU2MiwzNS45MjkgMTguMjIzLDM2LjAxMyAxNy45NDcsMzYuMTczIEwxMS45MzUsMzkuNjQ0IEMxMS40OTMsMzkuODk5IDExLjIzNiw0MC4zMzQgMTEuMjQ2LDQwLjgxIEwxMS4yNDcsNDAuOTYgTDUuMTY3LDQ0LjQ0NyBDNC43OTQsNDQuNjQ2IDIuNjI1LDQ1Ljk3OCAxLjg3Nyw1MC4zNDUgTDEuODcxLDUwLjM4NCBDMS44NjIsNTAuNDU0IDAuOTUxLDU3LjU1NyAwLjk2NSw3MC4yNTkgQzAuOTc5LDgyLjg3OSAxLjU2OCw4Ny4zNzUgMi4xMzcsOTEuNzI0IEwyLjEzOSw5MS43MzkgQzIuNDQ3LDk0LjA5NCA1LjYxNCw5NC42NjIgNS45NzUsOTQuNzE5IEw2LjAwOSw5NC43MjMgQzYuMTEsOTQuNzM2IDYuMjEzLDk0Ljc0MiA2LjMxNCw5NC43NDIgQzYuNzksOTQuNzQyIDcuMjYsOTQuNjEgNy43MSw5NC4zNSBMODIuOTgzLDUwLjc5OCBDODQuNzk0LDQ5LjcyNyA4NS45ODIsNDcuMzc1IDg2LjUyNSw0My44MDEgQzg3LjcxMSwzNS45ODcgODguMjU5LDEwLjcwNSA4Ni4yMjQsMy41MDIgQzg1Ljk3MSwyLjYwOSA4NS41MiwxLjk3NSA4NC44ODEsMS42MiBMODQuNzQ5LDEuNTU4IEw4Mi42NjQsMC43NjkgQzgyLjU1MSwwLjcyNSA4Mi40MzEsMC43MDQgODIuMzExLDAuNzA0IiBpZD0iRmlsbC0yIiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY2LjI2NywxMS41NjUgTDY3Ljc2MiwxMS45OTkgTDExLjQyMyw0NC4zMjUiIGlkPSJGaWxsLTMiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMjAyLDkwLjU0NSBDMTIuMDI5LDkwLjU0NSAxMS44NjIsOTAuNDU1IDExLjc2OSw5MC4yOTUgQzExLjYzMiw5MC4wNTcgMTEuNzEzLDg5Ljc1MiAxMS45NTIsODkuNjE0IEwzMC4zODksNzguOTY5IEMzMC42MjgsNzguODMxIDMwLjkzMyw3OC45MTMgMzEuMDcxLDc5LjE1MiBDMzEuMjA4LDc5LjM5IDMxLjEyNyw3OS42OTYgMzAuODg4LDc5LjgzMyBMMTIuNDUxLDkwLjQ3OCBMMTIuMjAyLDkwLjU0NSIgaWQ9IkZpbGwtNCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43NjQsNDIuNjU0IEwxMy42NTYsNDIuNTkyIEwxMy43MDIsNDIuNDIxIEwxOC44MzcsMzkuNDU3IEwxOS4wMDcsMzkuNTAyIEwxOC45NjIsMzkuNjczIEwxMy44MjcsNDIuNjM3IEwxMy43NjQsNDIuNjU0IiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTguNTIsOTAuMzc1IEw4LjUyLDQ2LjQyMSBMOC41ODMsNDYuMzg1IEw3NS44NCw3LjU1NCBMNzUuODQsNTEuNTA4IEw3NS43NzgsNTEuNTQ0IEw4LjUyLDkwLjM3NSBMOC41Miw5MC4zNzUgWiBNOC43Nyw0Ni41NjQgTDguNzcsODkuOTQ0IEw3NS41OTEsNTEuMzY1IEw3NS41OTEsNy45ODUgTDguNzcsNDYuNTY0IEw4Ljc3LDQ2LjU2NCBaIiBpZD0iRmlsbC02IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljk4Niw4My4xODIgQzI0Ljc1Niw4My4zMzEgMjQuMzc0LDgzLjU2NiAyNC4xMzcsODMuNzA1IEwxMi42MzIsOTAuNDA2IEMxMi4zOTUsOTAuNTQ1IDEyLjQyNiw5MC42NTggMTIuNyw5MC42NTggTDEzLjI2NSw5MC42NTggQzEzLjU0LDkwLjY1OCAxMy45NTgsOTAuNTQ1IDE0LjE5NSw5MC40MDYgTDI1LjcsODMuNzA1IEMyNS45MzcsODMuNTY2IDI2LjEyOCw4My40NTIgMjYuMTI1LDgzLjQ0OSBDMjYuMTIyLDgzLjQ0NyAyNi4xMTksODMuMjIgMjYuMTE5LDgyLjk0NiBDMjYuMTE5LDgyLjY3MiAyNS45MzEsODIuNTY5IDI1LjcwMSw4Mi43MTkgTDI0Ljk4Niw4My4xODIiIGlkPSJGaWxsLTciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjY2LDkwLjc4MiBMMTIuNyw5MC43ODIgQzEyLjUsOTAuNzgyIDEyLjM4NCw5MC43MjYgMTIuMzU0LDkwLjYxNiBDMTIuMzI0LDkwLjUwNiAxMi4zOTcsOTAuMzk5IDEyLjU2OSw5MC4yOTkgTDI0LjA3NCw4My41OTcgQzI0LjMxLDgzLjQ1OSAyNC42ODksODMuMjI2IDI0LjkxOCw4My4wNzggTDI1LjYzMyw4Mi42MTQgQzI1LjcyMyw4Mi41NTUgMjUuODEzLDgyLjUyNSAyNS44OTksODIuNTI1IEMyNi4wNzEsODIuNTI1IDI2LjI0NCw4Mi42NTUgMjYuMjQ0LDgyLjk0NiBDMjYuMjQ0LDgzLjE2IDI2LjI0NSw4My4zMDkgMjYuMjQ3LDgzLjM4MyBMMjYuMjUzLDgzLjM4NyBMMjYuMjQ5LDgzLjQ1NiBDMjYuMjQ2LDgzLjUzMSAyNi4yNDYsODMuNTMxIDI1Ljc2Myw4My44MTIgTDE0LjI1OCw5MC41MTQgQzE0LDkwLjY2NSAxMy41NjQsOTAuNzgyIDEzLjI2Niw5MC43ODIgTDEzLjI2Niw5MC43ODIgWiBNMTIuNjY2LDkwLjUzMiBMMTIuNyw5MC41MzMgTDEzLjI2Niw5MC41MzMgQzEzLjUxOCw5MC41MzMgMTMuOTE1LDkwLjQyNSAxNC4xMzIsOTAuMjk5IEwyNS42MzcsODMuNTk3IEMyNS44MDUsODMuNDk5IDI1LjkzMSw4My40MjQgMjUuOTk4LDgzLjM4MyBDMjUuOTk0LDgzLjI5OSAyNS45OTQsODMuMTY1IDI1Ljk5NCw4Mi45NDYgTDI1Ljg5OSw4Mi43NzUgTDI1Ljc2OCw4Mi44MjQgTDI1LjA1NCw4My4yODcgQzI0LjgyMiw4My40MzcgMjQuNDM4LDgzLjY3MyAyNC4yLDgzLjgxMiBMMTIuNjk1LDkwLjUxNCBMMTIuNjY2LDkwLjUzMiBMMTIuNjY2LDkwLjUzMiBaIiBpZD0iRmlsbC04IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEzLjI2Niw4OS44NzEgTDEyLjcsODkuODcxIEMxMi41LDg5Ljg3MSAxMi4zODQsODkuODE1IDEyLjM1NCw4OS43MDUgQzEyLjMyNCw4OS41OTUgMTIuMzk3LDg5LjQ4OCAxMi41NjksODkuMzg4IEwyNC4wNzQsODIuNjg2IEMyNC4zMzIsODIuNTM1IDI0Ljc2OCw4Mi40MTggMjUuMDY3LDgyLjQxOCBMMjUuNjMyLDgyLjQxOCBDMjUuODMyLDgyLjQxOCAyNS45NDgsODIuNDc0IDI1Ljk3OCw4Mi41ODQgQzI2LjAwOCw4Mi42OTQgMjUuOTM1LDgyLjgwMSAyNS43NjMsODIuOTAxIEwxNC4yNTgsODkuNjAzIEMxNCw4OS43NTQgMTMuNTY0LDg5Ljg3MSAxMy4yNjYsODkuODcxIEwxMy4yNjYsODkuODcxIFogTTEyLjY2Niw4OS42MjEgTDEyLjcsODkuNjIyIEwxMy4yNjYsODkuNjIyIEMxMy41MTgsODkuNjIyIDEzLjkxNSw4OS41MTUgMTQuMTMyLDg5LjM4OCBMMjUuNjM3LDgyLjY4NiBMMjUuNjY3LDgyLjY2OCBMMjUuNjMyLDgyLjY2NyBMMjUuMDY3LDgyLjY2NyBDMjQuODE1LDgyLjY2NyAyNC40MTgsODIuNzc1IDI0LjIsODIuOTAxIEwxMi42OTUsODkuNjAzIEwxMi42NjYsODkuNjIxIEwxMi42NjYsODkuNjIxIFoiIGlkPSJGaWxsLTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzcsOTAuODAxIEwxMi4zNyw4OS41NTQgTDEyLjM3LDkwLjgwMSIgaWQ9IkZpbGwtMTAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNi4xMyw5My45MDEgQzUuMzc5LDkzLjgwOCA0LjgxNiw5My4xNjQgNC42OTEsOTIuNTI1IEMzLjg2LDg4LjI4NyAzLjU0LDgzLjc0MyAzLjUyNiw3MS4xNzMgQzMuNTExLDU4LjM4OSA0LjQyMyw1MS40MjggNC40MjMsNTEuNDI4IEM1LjEzNCw0Ny4yODIgNy4yMSw0Ni4yMzYgNy4yMSw0Ni4yMzYgQzcuMjEsNDYuMjM2IDgxLjY2NywzLjI1IDgyLjA2OSwzLjAxNyBDODIuMjkyLDIuODg4IDg0LjU1NiwxLjQzMyA4NS4yNjQsMy45NCBDODcuMjE0LDEwLjg0IDg2Ljc1MiwzNS44MjcgODUuNTM5LDQzLjgxOCBDODUuMTUsNDYuMzgzIDg0LjI5MSw0OS4wMzMgODIuNDgzLDUwLjEwMSBMNy4yMSw5My42NTMgQzYuODI4LDkzLjg3NCA2LjQ2MSw5My45NDEgNi4xMyw5My45MDEgQzYuMTMsOTMuOTAxIDMuMzQ5LDkzLjQ2IDMuMTI5LDkxLjc3NiBDMi41NjgsODcuNDk1IDEuOTc3LDgyLjk5NSAxLjk2Miw3MC40MjUgQzEuOTQ4LDU3LjY0MSAyLjg2LDUwLjY4IDIuODYsNTAuNjggQzMuNTcsNDYuNTM0IDUuNjQ3LDQ1LjQ4OSA1LjY0Nyw0NS40ODkgQzUuNjQ2LDQ1LjQ4OSA4LjA2NSw0NC4wOTIgMTIuMjQ1LDQxLjY3OSBMMTMuMTE2LDQxLjU2IEwxOS43MTUsMzcuNzMgTDE5Ljc2MSwzNy4yNjkgTDYuMTMsOTMuOTAxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjMxNyw5NC4xNjEgTDYuMTAyLDk0LjE0OCBMNi4xMDEsOTQuMTQ4IEw1Ljg1Nyw5NC4xMDEgQzUuMTM4LDkzLjk0NSAzLjA4NSw5My4zNjUgMi44ODEsOTEuODA5IEMyLjMxMyw4Ny40NjkgMS43MjcsODIuOTk2IDEuNzEzLDcwLjQyNSBDMS42OTksNTcuNzcxIDIuNjA0LDUwLjcxOCAyLjYxMyw1MC42NDggQzMuMzM4LDQ2LjQxNyA1LjQ0NSw0NS4zMSA1LjUzNSw0NS4yNjYgTDEyLjE2Myw0MS40MzkgTDEzLjAzMyw0MS4zMiBMMTkuNDc5LDM3LjU3OCBMMTkuNTEzLDM3LjI0NCBDMTkuNTI2LDM3LjEwNyAxOS42NDcsMzcuMDA4IDE5Ljc4NiwzNy4wMjEgQzE5LjkyMiwzNy4wMzQgMjAuMDIzLDM3LjE1NiAyMC4wMDksMzcuMjkzIEwxOS45NSwzNy44ODIgTDEzLjE5OCw0MS44MDEgTDEyLjMyOCw0MS45MTkgTDUuNzcyLDQ1LjcwNCBDNS43NDEsNDUuNzIgMy43ODIsNDYuNzcyIDMuMTA2LDUwLjcyMiBDMy4wOTksNTAuNzgyIDIuMTk4LDU3LjgwOCAyLjIxMiw3MC40MjQgQzIuMjI2LDgyLjk2MyAyLjgwOSw4Ny40MiAzLjM3Myw5MS43MjkgQzMuNDY0LDkyLjQyIDQuMDYyLDkyLjg4MyA0LjY4Miw5My4xODEgQzQuNTY2LDkyLjk4NCA0LjQ4Niw5Mi43NzYgNC40NDYsOTIuNTcyIEMzLjY2NSw4OC41ODggMy4yOTEsODQuMzcgMy4yNzYsNzEuMTczIEMzLjI2Miw1OC41MiA0LjE2Nyw1MS40NjYgNC4xNzYsNTEuMzk2IEM0LjkwMSw0Ny4xNjUgNy4wMDgsNDYuMDU5IDcuMDk4LDQ2LjAxNCBDNy4wOTQsNDYuMDE1IDgxLjU0MiwzLjAzNCA4MS45NDQsMi44MDIgTDgxLjk3MiwyLjc4NSBDODIuODc2LDIuMjQ3IDgzLjY5MiwyLjA5NyA4NC4zMzIsMi4zNTIgQzg0Ljg4NywyLjU3MyA4NS4yODEsMy4wODUgODUuNTA0LDMuODcyIEM4Ny41MTgsMTEgODYuOTY0LDM2LjA5MSA4NS43ODUsNDMuODU1IEM4NS4yNzgsNDcuMTk2IDg0LjIxLDQ5LjM3IDgyLjYxLDUwLjMxNyBMNy4zMzUsOTMuODY5IEM2Ljk5OSw5NC4wNjMgNi42NTgsOTQuMTYxIDYuMzE3LDk0LjE2MSBMNi4zMTcsOTQuMTYxIFogTTYuMTcsOTMuNjU0IEM2LjQ2Myw5My42OSA2Ljc3NCw5My42MTcgNy4wODUsOTMuNDM3IEw4Mi4zNTgsNDkuODg2IEM4NC4xODEsNDguODA4IDg0Ljk2LDQ1Ljk3MSA4NS4yOTIsNDMuNzggQzg2LjQ2NiwzNi4wNDkgODcuMDIzLDExLjA4NSA4NS4wMjQsNC4wMDggQzg0Ljg0NiwzLjM3NyA4NC41NTEsMi45NzYgODQuMTQ4LDIuODE2IEM4My42NjQsMi42MjMgODIuOTgyLDIuNzY0IDgyLjIyNywzLjIxMyBMODIuMTkzLDMuMjM0IEM4MS43OTEsMy40NjYgNy4zMzUsNDYuNDUyIDcuMzM1LDQ2LjQ1MiBDNy4zMDQsNDYuNDY5IDUuMzQ2LDQ3LjUyMSA0LjY2OSw1MS40NzEgQzQuNjYyLDUxLjUzIDMuNzYxLDU4LjU1NiAzLjc3NSw3MS4xNzMgQzMuNzksODQuMzI4IDQuMTYxLDg4LjUyNCA0LjkzNiw5Mi40NzYgQzUuMDI2LDkyLjkzNyA1LjQxMiw5My40NTkgNS45NzMsOTMuNjE1IEM2LjA4Nyw5My42NCA2LjE1OCw5My42NTIgNi4xNjksOTMuNjU0IEw2LjE3LDkzLjY1NCBMNi4xNyw5My42NTQgWiIgaWQ9IkZpbGwtMTIiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4zMTcsNjguOTgyIEM3LjgwNiw2OC43MDEgOC4yMDIsNjguOTI2IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNi44MjksNzEuMjk0IDYuNDMzLDcxLjA2OSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIiBpZD0iRmlsbC0xMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjkyLDcxLjEzMyBDNi42MzEsNzEuMTMzIDYuNDMzLDcwLjkwNSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIEM3LjQ2LDY4LjkgNy41OTUsNjguODYxIDcuNzE0LDY4Ljg2MSBDOC4wMDMsNjguODYxIDguMjAyLDY5LjA5IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNy4xNzQsNzEuMDk0IDcuMDM5LDcxLjEzMyA2LjkyLDcxLjEzMyBNNy43MTQsNjguNjc0IEM3LjU1Nyw2OC42NzQgNy4zOTIsNjguNzIzIDcuMjI0LDY4LjgyMSBDNi42NzYsNjkuMTM4IDYuMjQ2LDY5Ljg3OSA2LjI0Niw3MC41MDggQzYuMjQ2LDcwLjk5NCA2LjUxNyw3MS4zMiA2LjkyLDcxLjMyIEM3LjA3OCw3MS4zMiA3LjI0Myw3MS4yNzEgNy40MTEsNzEuMTc0IEM3Ljk1OSw3MC44NTcgOC4zODksNzAuMTE3IDguMzg5LDY5LjQ4NyBDOC4zODksNjkuMDAxIDguMTE3LDY4LjY3NCA3LjcxNCw2OC42NzQiIGlkPSJGaWxsLTE0IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuOTIsNzAuOTQ3IEM2LjY0OSw3MC45NDcgNi42MjEsNzAuNjQgNi42MjEsNzAuNTA4IEM2LjYyMSw3MC4wMTcgNi45ODIsNjkuMzkyIDcuNDExLDY5LjE0NSBDNy41MjEsNjkuMDgyIDcuNjI1LDY5LjA0OSA3LjcxNCw2OS4wNDkgQzcuOTg2LDY5LjA0OSA4LjAxNSw2OS4zNTUgOC4wMTUsNjkuNDg3IEM4LjAxNSw2OS45NzggNy42NTIsNzAuNjAzIDcuMjI0LDcwLjg1MSBDNy4xMTUsNzAuOTE0IDcuMDEsNzAuOTQ3IDYuOTIsNzAuOTQ3IE03LjcxNCw2OC44NjEgQzcuNTk1LDY4Ljg2MSA3LjQ2LDY4LjkgNy4zMTcsNjguOTgyIEM2LjgyOSw2OS4yNjUgNi40MzMsNjkuOTQ4IDYuNDMzLDcwLjUwOCBDNi40MzMsNzAuOTA1IDYuNjMxLDcxLjEzMyA2LjkyLDcxLjEzMyBDNy4wMzksNzEuMTMzIDcuMTc0LDcxLjA5NCA3LjMxNyw3MS4wMTIgQzcuODA2LDcwLjczIDguMjAyLDcwLjA0NyA4LjIwMiw2OS40ODcgQzguMjAyLDY5LjA5IDguMDAzLDY4Ljg2MSA3LjcxNCw2OC44NjEiIGlkPSJGaWxsLTE1IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTcuNDQ0LDg1LjM1IEM3LjcwOCw4NS4xOTggNy45MjEsODUuMzE5IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuOTI1IDcuNzA4LDg2LjI5MiA3LjQ0NCw4Ni40NDQgQzcuMTgxLDg2LjU5NyA2Ljk2Nyw4Ni40NzUgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IiBpZD0iRmlsbC0xNiIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjIzLDg2LjUxIEM3LjA3NCw4Ni41MSA2Ljk2Nyw4Ni4zODcgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IEM3LjUyMSw4NS4zMDUgNy41OTQsODUuMjg0IDcuNjU4LDg1LjI4NCBDNy44MTQsODUuMjg0IDcuOTIxLDg1LjQwOCA3LjkyMSw4NS42MjIgQzcuOTIxLDg1LjkyNSA3LjcwOCw4Ni4yOTIgNy40NDQsODYuNDQ0IEM3LjM2Nyw4Ni40ODkgNy4yOTQsODYuNTEgNy4yMyw4Ni41MSBNNy42NTgsODUuMDk4IEM3LjU1OCw4NS4wOTggNy40NTUsODUuMTI3IDcuMzUxLDg1LjE4OCBDNy4wMzEsODUuMzczIDYuNzgxLDg1LjgwNiA2Ljc4MSw4Ni4xNzMgQzYuNzgxLDg2LjQ4MiA2Ljk2Niw4Ni42OTcgNy4yMyw4Ni42OTcgQzcuMzMsODYuNjk3IDcuNDMzLDg2LjY2NiA3LjUzOCw4Ni42MDcgQzcuODU4LDg2LjQyMiA4LjEwOCw4NS45ODkgOC4xMDgsODUuNjIyIEM4LjEwOCw4NS4zMTMgNy45MjMsODUuMDk4IDcuNjU4LDg1LjA5OCIgaWQ9IkZpbGwtMTciIGZpbGw9IiM4MDk3QTIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4yMyw4Ni4zMjIgTDcuMTU0LDg2LjE3MyBDNy4xNTQsODUuOTM4IDcuMzMzLDg1LjYyOSA3LjUzOCw4NS41MTIgTDcuNjU4LDg1LjQ3MSBMNy43MzQsODUuNjIyIEM3LjczNCw4NS44NTYgNy41NTUsODYuMTY0IDcuMzUxLDg2LjI4MiBMNy4yMyw4Ni4zMjIgTTcuNjU4LDg1LjI4NCBDNy41OTQsODUuMjg0IDcuNTIxLDg1LjMwNSA3LjQ0NCw4NS4zNSBDNy4xODEsODUuNTAyIDYuOTY3LDg1Ljg3MSA2Ljk2Nyw4Ni4xNzMgQzYuOTY3LDg2LjM4NyA3LjA3NCw4Ni41MSA3LjIzLDg2LjUxIEM3LjI5NCw4Ni41MSA3LjM2Nyw4Ni40ODkgNy40NDQsODYuNDQ0IEM3LjcwOCw4Ni4yOTIgNy45MjEsODUuOTI1IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuNDA4IDcuODE0LDg1LjI4NCA3LjY1OCw4NS4yODQiIGlkPSJGaWxsLTE4IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTc3LjI3OCw3Ljc2OSBMNzcuMjc4LDUxLjQzNiBMMTAuMjA4LDkwLjE2IEwxMC4yMDgsNDYuNDkzIEw3Ny4yNzgsNy43NjkiIGlkPSJGaWxsLTE5IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA4Myw5MC4zNzUgTDEwLjA4Myw0Ni40MjEgTDEwLjE0Niw0Ni4zODUgTDc3LjQwMyw3LjU1NCBMNzcuNDAzLDUxLjUwOCBMNzcuMzQxLDUxLjU0NCBMMTAuMDgzLDkwLjM3NSBMMTAuMDgzLDkwLjM3NSBaIE0xMC4zMzMsNDYuNTY0IEwxMC4zMzMsODkuOTQ0IEw3Ny4xNTQsNTEuMzY1IEw3Ny4xNTQsNy45ODUgTDEwLjMzMyw0Ni41NjQgTDEwLjMzMyw0Ni41NjQgWiIgaWQ9IkZpbGwtMjAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMjUuNzM3LDg4LjY0NyBMMTE4LjA5OCw5MS45ODEgTDExOC4wOTgsODQgTDEwNi42MzksODguNzEzIEwxMDYuNjM5LDk2Ljk4MiBMOTksMTAwLjMxNSBMMTEyLjM2OSwxMDMuOTYxIEwxMjUuNzM3LDg4LjY0NyIgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTIiIGZpbGw9IiM0NTVBNjQiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+")},module.exports=RotateInstructions},{"./util.js":22}],17:[function(_dereq_,module,exports){function ComplementaryFilter(kFilter){this.kFilter=kFilter,this.currentAccelMeasurement=new SensorSample,this.currentGyroMeasurement=new SensorSample,this.previousGyroMeasurement=new SensorSample,Util.isIOS()?this.filterQ=new MathUtil.Quaternion(-1,0,0,1):this.filterQ=new MathUtil.Quaternion(1,0,0,1),this.previousFilterQ=new MathUtil.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new MathUtil.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new MathUtil.Vector3,this.measuredGravity=new MathUtil.Vector3,this.gyroIntegralQ=new MathUtil.Quaternion}var SensorSample=_dereq_("./sensor-sample.js"),MathUtil=_dereq_("../math-util.js"),Util=_dereq_("../util.js");ComplementaryFilter.prototype.addAccelMeasurement=function(vector,timestampS){this.currentAccelMeasurement.set(vector,timestampS)},ComplementaryFilter.prototype.addGyroMeasurement=function(vector,timestampS){this.currentGyroMeasurement.set(vector,timestampS);var deltaT=timestampS-this.previousGyroMeasurement.timestampS;Util.isTimestampDeltaValid(deltaT)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)},ComplementaryFilter.prototype.run_=function(){if(!this.isOrientationInitialized)return this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),void(this.isOrientationInitialized=!0);var deltaT=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,gyroDeltaQ=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,deltaT);this.gyroIntegralQ.multiply(gyroDeltaQ),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(gyroDeltaQ);var invFilterQ=new MathUtil.Quaternion;invFilterQ.copy(this.filterQ),invFilterQ.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(invFilterQ),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();var deltaQ=new MathUtil.Quaternion;deltaQ.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),deltaQ.inverse(),Util.isDebug()&&console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",MathUtil.radToDeg*Util.getQuaternionAngle(deltaQ),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));var targetQ=new MathUtil.Quaternion;targetQ.copy(this.filterQ),targetQ.multiply(deltaQ),this.filterQ.slerp(targetQ,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)},ComplementaryFilter.prototype.getOrientation=function(){return this.filterQ},ComplementaryFilter.prototype.accelToQuaternion_=function(accel){var normAccel=new MathUtil.Vector3;normAccel.copy(accel),normAccel.normalize();var quat=new MathUtil.Quaternion;return quat.setFromUnitVectors(new MathUtil.Vector3(0,0,-1),normAccel),quat.inverse(),quat},ComplementaryFilter.prototype.gyroToQuaternionDelta_=function(gyro,dt){var quat=new MathUtil.Quaternion,axis=new MathUtil.Vector3;return axis.copy(gyro),axis.normalize(),quat.setFromAxisAngle(axis,gyro.length()*dt),quat},module.exports=ComplementaryFilter},{"../math-util.js":14,"../util.js":22,"./sensor-sample.js":20}],18:[function(_dereq_,module,exports){function FusionPoseSensor(){this.deviceId="webvr-polyfill:fused",this.deviceName="VR Position Device (webvr-polyfill:fused)",this.accelerometer=new MathUtil.Vector3,this.gyroscope=new MathUtil.Vector3,this.start(),this.filter=new ComplementaryFilter(WebVRConfig.K_FILTER),this.posePredictor=new PosePredictor(WebVRConfig.PREDICTION_TIME_S),this.touchPanner=new TouchPanner,this.filterToWorldQ=new MathUtil.Quaternion,Util.isIOS()?this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new MathUtil.Quaternion,this.worldToScreenQ=new MathUtil.Quaternion,this.originalPoseAdjustQ=new MathUtil.Quaternion,this.originalPoseAdjustQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),Util.isLandscapeMode()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new MathUtil.Quaternion,this.isFirefoxAndroid=Util.isFirefoxAndroid(),this.isIOS=Util.isIOS(),this.orientationOut_=new Float32Array(4)}var ComplementaryFilter=_dereq_("./complementary-filter.js"),PosePredictor=_dereq_("./pose-predictor.js"),TouchPanner=_dereq_("../touch-panner.js"),MathUtil=_dereq_("../math-util.js"),Util=_dereq_("../util.js");FusionPoseSensor.prototype.getPosition=function(){return null},FusionPoseSensor.prototype.getOrientation=function(){var orientation=this.filter.getOrientation();this.predictedQ=this.posePredictor.getPrediction(orientation,this.gyroscope,this.previousTimestampS);var out=new MathUtil.Quaternion;return out.copy(this.filterToWorldQ),out.multiply(this.resetQ),WebVRConfig.TOUCH_PANNER_DISABLED||out.multiply(this.touchPanner.getOrientation()),out.multiply(this.predictedQ),out.multiply(this.worldToScreenQ),WebVRConfig.YAW_ONLY&&(out.x=0,out.z=0,out.normalize()),this.orientationOut_[0]=out.x,this.orientationOut_[1]=out.y,this.orientationOut_[2]=out.z,this.orientationOut_[3]=out.w,this.orientationOut_},FusionPoseSensor.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),Util.isLandscapeMode()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ),WebVRConfig.TOUCH_PANNER_DISABLED||this.touchPanner.resetSensor()},FusionPoseSensor.prototype.onDeviceMotion_=function(deviceMotion){this.updateDeviceMotion_(deviceMotion)},FusionPoseSensor.prototype.updateDeviceMotion_=function(deviceMotion){var accGravity=deviceMotion.accelerationIncludingGravity,rotRate=deviceMotion.rotationRate,timestampS=deviceMotion.timeStamp/1e3;this.isFirefoxAndroid&&(timestampS/=1e3);var deltaS=timestampS-this.previousTimestampS;if(deltaS<=Util.MIN_TIMESTEP||deltaS>Util.MAX_TIMESTEP)return console.warn("Invalid timestamps detected. Time step between successive gyroscope sensor samples is very small or not monotonic"),void(this.previousTimestampS=timestampS);this.accelerometer.set(-accGravity.x,-accGravity.y,-accGravity.z),this.gyroscope.set(rotRate.alpha,rotRate.beta,rotRate.gamma),(this.isIOS||this.isFirefoxAndroid)&&this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addAccelMeasurement(this.accelerometer,timestampS),this.filter.addGyroMeasurement(this.gyroscope,timestampS),this.previousTimestampS=timestampS},FusionPoseSensor.prototype.onOrientationChange_=function(screenOrientation){this.setScreenTransform_()},FusionPoseSensor.prototype.onMessage_=function(event){var message=event.data;message&&message.type&&"devicemotion"===message.type.toLowerCase()&&this.updateDeviceMotion_(message.deviceMotionEvent)},FusionPoseSensor.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},FusionPoseSensor.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),Util.isIOS()&&Util.isInsideCrossDomainIFrame()&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},FusionPoseSensor.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)},module.exports=FusionPoseSensor},{"../math-util.js":14,"../touch-panner.js":21,"../util.js":22,"./complementary-filter.js":17,"./pose-predictor.js":19}],19:[function(_dereq_,module,exports){function PosePredictor(predictionTimeS){this.predictionTimeS=predictionTimeS,this.previousQ=new MathUtil.Quaternion,this.previousTimestampS=null,this.deltaQ=new MathUtil.Quaternion,this.outQ=new MathUtil.Quaternion}var MathUtil=_dereq_("../math-util"),Util=_dereq_("../util");PosePredictor.prototype.getPrediction=function(currentQ,gyro,timestampS){if(!this.previousTimestampS)return this.previousQ.copy(currentQ),this.previousTimestampS=timestampS,currentQ;var axis=new MathUtil.Vector3;axis.copy(gyro),axis.normalize();var angularSpeed=gyro.length();if(angularSpeed<20*MathUtil.degToRad)return Util.isDebug()&&console.log("Moving slowly, at %s deg/s: no prediction",(MathUtil.radToDeg*angularSpeed).toFixed(1)),this.outQ.copy(currentQ),this.previousQ.copy(currentQ),this.outQ;this.previousTimestampS;var predictAngle=angularSpeed*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(axis,predictAngle),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(currentQ),this.previousTimestampS=timestampS,this.outQ},module.exports=PosePredictor},{"../math-util":14,"../util":22}],20:[function(_dereq_,module,exports){function SensorSample(sample,timestampS){this.set(sample,timestampS)}SensorSample.prototype.set=function(sample,timestampS){this.sample=sample,this.timestampS=timestampS},SensorSample.prototype.copy=function(sensorSample){this.set(sensorSample.sample,sensorSample.timestampS)},module.exports=SensorSample},{}],21:[function(_dereq_,module,exports){function TouchPanner(){window.addEventListener("touchstart",this.onTouchStart_.bind(this)),window.addEventListener("touchmove",this.onTouchMove_.bind(this)),window.addEventListener("touchend",this.onTouchEnd_.bind(this)),this.isTouching=!1,this.rotateStart=new MathUtil.Vector2,this.rotateEnd=new MathUtil.Vector2,this.rotateDelta=new MathUtil.Vector2,this.theta=0,this.orientation=new MathUtil.Quaternion}var MathUtil=_dereq_("./math-util.js"),Util=_dereq_("./util.js");TouchPanner.prototype.getOrientation=function(){return this.orientation.setFromEulerXYZ(0,0,this.theta),this.orientation},TouchPanner.prototype.resetSensor=function(){this.theta=0},TouchPanner.prototype.onTouchStart_=function(e){1==e.touches.length&&(this.rotateStart.set(e.touches[0].pageX,e.touches[0].pageY),this.isTouching=!0)},TouchPanner.prototype.onTouchMove_=function(e){if(this.isTouching){this.rotateEnd.set(e.touches[0].pageX,e.touches[0].pageY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd),Util.isIOS()&&(this.rotateDelta.x*=-1);var element=document.body;this.theta+=2*Math.PI*this.rotateDelta.x/element.clientWidth*.5}},TouchPanner.prototype.onTouchEnd_=function(e){this.isTouching=!1},module.exports=TouchPanner},{"./math-util.js":14,"./util.js":22}],22:[function(_dereq_,module,exports){var objectAssign=_dereq_("object-assign"),Util=window.Util||{};Util.MIN_TIMESTEP=.001,Util.MAX_TIMESTEP=1,Util.base64=function(mimeType,base64){return"data:"+mimeType+";base64,"+base64},Util.clamp=function(value,min,max){return Math.min(Math.max(min,value),max)},Util.lerp=function(a,b,t){return a+(b-a)*t},Util.isIOS=function(){var isIOS=/iPad|iPhone|iPod/.test(navigator.platform);return function(){return isIOS}}(),Util.isSafari=function(){var isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return function(){return isSafari}}(),Util.isFirefoxAndroid=function(){var isFirefoxAndroid=-1!==navigator.userAgent.indexOf("Firefox")&&-1!==navigator.userAgent.indexOf("Android");return function(){return isFirefoxAndroid}}(),Util.isLandscapeMode=function(){return 90==window.orientation||-90==window.orientation},Util.isTimestampDeltaValid=function(timestampDeltaS){return!isNaN(timestampDeltaS)&&(!(timestampDeltaS<=Util.MIN_TIMESTEP)&&!(timestampDeltaS>Util.MAX_TIMESTEP))},Util.getScreenWidth=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio},Util.getScreenHeight=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio},Util.requestFullscreen=function(element){if(element.requestFullscreen)element.requestFullscreen();else if(element.webkitRequestFullscreen)element.webkitRequestFullscreen();else if(element.mozRequestFullScreen)element.mozRequestFullScreen();else{if(!element.msRequestFullscreen)return!1;element.msRequestFullscreen()}return!0},Util.exitFullscreen=function(){if(document.exitFullscreen)document.exitFullscreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else{if(!document.msExitFullscreen)return!1;document.msExitFullscreen()}return!0},Util.getFullscreenElement=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},Util.linkProgram=function(gl,vertexSource,fragmentSource,attribLocationMap){var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,vertexSource),gl.compileShader(vertexShader);var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,fragmentSource),gl.compileShader(fragmentShader);var program=gl.createProgram();gl.attachShader(program,vertexShader),gl.attachShader(program,fragmentShader);for(var attribName in attribLocationMap)gl.bindAttribLocation(program,attribLocationMap[attribName],attribName);return gl.linkProgram(program),gl.deleteShader(vertexShader),gl.deleteShader(fragmentShader),program},Util.getProgramUniforms=function(gl,program){for(var uniforms={},uniformCount=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS),uniformName="",i=0;i-1?url.split("/")[2]:url.split("/")[0],domain=domain.split(":")[0]},module.exports=Util},{"object-assign":2}],23:[function(_dereq_,module,exports){function ViewerSelector(){try{this.selectedKey=localStorage.getItem(VIEWER_KEY)||DEFAULT_VIEWER}catch(error){console.error("Failed to load viewer profile: %s",error)}this.dialog=this.createDialog_(DeviceInfo.Viewers),this.root=null}var DeviceInfo=_dereq_("./device-info.js"),EventEmitter3=_dereq_("eventemitter3"),DEFAULT_VIEWER=(_dereq_("./util.js"),"CardboardV1"),VIEWER_KEY="WEBVR_CARDBOARD_VIEWER";ViewerSelector.prototype=new EventEmitter3,ViewerSelector.prototype.show=function(root){this.root=root,root.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},ViewerSelector.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},ViewerSelector.prototype.getCurrentViewer=function(){return DeviceInfo.Viewers[this.selectedKey]},ViewerSelector.prototype.getSelectedKey_=function(){var input=this.dialog.querySelector("input[name=field]:checked");return input?input.id:null},ViewerSelector.prototype.onSave_=function(){if(this.selectedKey=this.getSelectedKey_(),this.selectedKey&&DeviceInfo.Viewers[this.selectedKey]){this.emit("change",DeviceInfo.Viewers[this.selectedKey]);try{localStorage.setItem(VIEWER_KEY,this.selectedKey)}catch(error){console.error("Failed to save viewer profile: %s",error)}this.hide()}else console.error("ViewerSelector.onSave_: this should never happen!")},ViewerSelector.prototype.createDialog_=function(options){var container=document.createElement("div");container.classList.add("webvr-polyfill-viewer-selector"),container.style.display="none";var overlay=document.createElement("div"),s=overlay.style;s.position="fixed",s.left=0,s.top=0,s.width="100%",s.height="100%",s.background="rgba(0, 0, 0, 0.3)",overlay.addEventListener("click",this.hide.bind(this));var dialog=document.createElement("div");(s=dialog.style).boxSizing="border-box",s.position="fixed",s.top="24px",s.left="50%",s.marginLeft="-140px",s.width="280px",s.padding="24px",s.overflow="hidden",s.background="#fafafa",s.fontFamily="'Roboto', sans-serif",s.boxShadow="0px 5px 20px #666",dialog.appendChild(this.createH1_("Select your viewer"));for(var id in options)dialog.appendChild(this.createChoice_(id,options[id].label));return dialog.appendChild(this.createButton_("Save",this.onSave_.bind(this))),container.appendChild(overlay),container.appendChild(dialog),container},ViewerSelector.prototype.createH1_=function(name){var h1=document.createElement("h1"),s=h1.style;return s.color="black",s.fontSize="20px",s.fontWeight="bold",s.marginTop=0,s.marginBottom="24px",h1.innerHTML=name,h1},ViewerSelector.prototype.createChoice_=function(id,name){var div=document.createElement("div");div.style.marginTop="8px",div.style.color="black";var input=document.createElement("input");input.style.fontSize="30px",input.setAttribute("id",id),input.setAttribute("type","radio"),input.setAttribute("value",id),input.setAttribute("name","field");var label=document.createElement("label");return label.style.marginLeft="4px",label.setAttribute("for",id),label.innerHTML=name,div.appendChild(input),div.appendChild(label),div},ViewerSelector.prototype.createButton_=function(label,onclick){var button=document.createElement("button");button.innerHTML=label;var s=button.style;return s.float="right",s.textTransform="uppercase",s.color="#1094f7",s.fontSize="14px",s.letterSpacing=0,s.border=0,s.background="none",s.marginTop="16px",button.addEventListener("click",onclick),button},module.exports=ViewerSelector},{"./device-info.js":8,"./util.js":22,eventemitter3:1}],24:[function(_dereq_,module,exports){function AndroidWakeLock(){function addSourceToVideo(element,type,dataURI){var source=document.createElement("source");source.src=dataURI,source.type="video/"+type,element.appendChild(source)}var video=document.createElement("video");video.setAttribute("loop",""),addSourceToVideo(video,"webm",Util.base64("video/webm","GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA=")),addSourceToVideo(video,"mp4",Util.base64("video/mp4","AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAAG21kYXQAAAGzABAHAAABthADAowdbb9/AAAC6W1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIVdHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAIAAAACAAAAAABsW1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAAA+gAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAVxtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEcc3RibAAAALhzdHNkAAAAAAAAAAEAAACobXA0dgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIAAgASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAFJlc2RzAAAAAANEAAEABDwgEQAAAAADDUAAAAAABS0AAAGwAQAAAbWJEwAAAQAAAAEgAMSNiB9FAEQBFGMAAAGyTGF2YzUyLjg3LjQGAQIAAAAYc3R0cwAAAAAAAAABAAAAAQAAAAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAFHN0c3oAAAAAAAAAEwAAAAEAAAAUc3RjbwAAAAAAAAABAAAALAAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQAAAABMYXZmNTIuNzguMw==")),this.request=function(){video.paused&&video.play()},this.release=function(){video.pause()}}function iOSWakeLock(){var timer=null;this.request=function(){timer||(timer=setInterval(function(){window.location=window.location,setTimeout(window.stop,0)},3e4))},this.release=function(){timer&&(clearInterval(timer),timer=null)}}var Util=_dereq_("./util.js");module.exports=function(){var userAgent=navigator.userAgent||navigator.vendor||window.opera;return userAgent.match(/iPhone/i)||userAgent.match(/iPod/i)?iOSWakeLock:AndroidWakeLock}()},{"./util.js":22}],25:[function(_dereq_,module,exports){function WebVRPolyfill(){this.displays=[],this.devices=[],this.devicesPopulated=!1,this.nativeWebVRAvailable=this.isWebVRAvailable(),this.nativeLegacyWebVRAvailable=this.isDeprecatedWebVRAvailable(),this.nativeGetVRDisplaysFunc=this.nativeWebVRAvailable?navigator.getVRDisplays:null,this.nativeLegacyWebVRAvailable||(this.enablePolyfill(),WebVRConfig.ENABLE_DEPRECATED_API&&this.enableDeprecatedPolyfill()),InstallWebVRSpecShim()}function InstallWebVRSpecShim(){"VRDisplay"in window&&!("VRFrameData"in window)&&(window.VRFrameData=VRFrameData,"depthNear"in window.VRDisplay.prototype||(window.VRDisplay.prototype.depthNear=.01),"depthFar"in window.VRDisplay.prototype||(window.VRDisplay.prototype.depthFar=1e4),window.VRDisplay.prototype.getFrameData=function(frameData){return Util.frameDataFromPose(frameData,this.getPose(),this)})}var Util=_dereq_("./util.js"),CardboardVRDisplay=_dereq_("./cardboard-vr-display.js"),MouseKeyboardVRDisplay=_dereq_("./mouse-keyboard-vr-display.js"),VRDisplay=_dereq_("./base.js").VRDisplay,VRFrameData=_dereq_("./base.js").VRFrameData,HMDVRDevice=_dereq_("./base.js").HMDVRDevice,PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice,VRDisplayHMDDevice=_dereq_("./display-wrappers.js").VRDisplayHMDDevice,VRDisplayPositionSensorDevice=_dereq_("./display-wrappers.js").VRDisplayPositionSensorDevice;WebVRPolyfill.prototype.isWebVRAvailable=function(){return"getVRDisplays"in navigator},WebVRPolyfill.prototype.isDeprecatedWebVRAvailable=function(){return"getVRDevices"in navigator||"mozGetVRDevices"in navigator},WebVRPolyfill.prototype.populateDevices=function(){if(!this.devicesPopulated){var vrDisplay=null;this.isCardboardCompatible()&&(vrDisplay=new CardboardVRDisplay,this.displays.push(vrDisplay),WebVRConfig.ENABLE_DEPRECATED_API&&(this.devices.push(new VRDisplayHMDDevice(vrDisplay)),this.devices.push(new VRDisplayPositionSensorDevice(vrDisplay)))),this.isMobile()||WebVRConfig.MOUSE_KEYBOARD_CONTROLS_DISABLED||(vrDisplay=new MouseKeyboardVRDisplay,this.displays.push(vrDisplay),WebVRConfig.ENABLE_DEPRECATED_API&&(this.devices.push(new VRDisplayHMDDevice(vrDisplay)),this.devices.push(new VRDisplayPositionSensorDevice(vrDisplay)))),this.devicesPopulated=!0}},WebVRPolyfill.prototype.enablePolyfill=function(){if(navigator.getVRDisplays=this.getVRDisplays.bind(this),this.nativeWebVRAvailable&&window.VRFrameData){var nativeFrameData=new window.VRFrameData,nativeGetFrameData=window.VRDisplay.prototype.getFrameData;window.VRFrameData=VRFrameData,window.VRDisplay.prototype.getFrameData=function(frameData){nativeGetFrameData.call(this,nativeFrameData),frameData.pose=nativeFrameData.pose,Util.copyArray(nativeFrameData.leftProjectionMatrix,frameData.leftProjectionMatrix),Util.copyArray(nativeFrameData.rightProjectionMatrix,frameData.rightProjectionMatrix),Util.copyArray(nativeFrameData.leftViewMatrix,frameData.leftViewMatrix),Util.copyArray(nativeFrameData.rightViewMatrix,frameData.rightViewMatrix)}}if(window.VRDisplay=VRDisplay,navigator&&!navigator.vrEnabled){var self=this;Object.defineProperty(navigator,"vrEnabled",{get:function(){return self.isCardboardCompatible()&&(self.isFullScreenAvailable()||Util.isIOS())}})}"VRFrameData"in window||(window.VRFrameData=VRFrameData)},WebVRPolyfill.prototype.enableDeprecatedPolyfill=function(){navigator.getVRDevices=this.getVRDevices.bind(this),window.HMDVRDevice=HMDVRDevice,window.PositionSensorVRDevice=PositionSensorVRDevice},WebVRPolyfill.prototype.getVRDisplays=function(){this.populateDevices();var polyfillDisplays=this.displays;return this.nativeWebVRAvailable?this.nativeGetVRDisplaysFunc.call(navigator).then(function(nativeDisplays){return WebVRConfig.ALWAYS_APPEND_POLYFILL_DISPLAY?nativeDisplays.concat(polyfillDisplays):nativeDisplays.length>0?nativeDisplays:polyfillDisplays}):new Promise(function(resolve,reject){try{resolve(polyfillDisplays)}catch(e){reject(e)}})},WebVRPolyfill.prototype.getVRDevices=function(){console.warn("getVRDevices is deprecated. Please update your code to use getVRDisplays instead.");var self=this;return new Promise(function(resolve,reject){try{if(!self.devicesPopulated){if(self.nativeWebVRAvailable)return navigator.getVRDisplays(function(displays){for(var i=0;i