{"version":3,"sources":["webpack:///webpack/bootstrap dc61182f712cbd52fe9a","webpack:///external \"jQuery\"","webpack:///./scripts/components/featured/lib/pageHeroBanner.js","webpack:///./scripts/components/featured/lib/textImage.js","webpack:///D:/www/mollers/wp-content/themes/mollers/node_modules/fullpage.js/vendors/scrolloverflow.js","webpack:///./scripts/vendors/fullpage.parallax.min.js","webpack:///D:/www/mollers/wp-content/themes/mollers/node_modules/fullpage.js/vendors/easings.js","webpack:///./scripts/components/featured/history/index.js","webpack:///./scripts/components/featured/history/modules/timeline.js","webpack:///./scripts/components/featured/history/modules/bottle_slider.js","webpack:///./scripts/components/featured/history/modules/full_thumbnail_slider.js","webpack:///D:/www/mollers/wp-content/themes/mollers/node_modules/overlayscrollbars/js/OverlayScrollbars.js","webpack:///./scripts/components/featured/lib/helper.js","webpack:///D:/www/mollers/wp-content/themes/mollers/node_modules/jquery-watch/jquery-watch.js","webpack:///D:/www/mollers/wp-content/themes/mollers/node_modules/fullpage.js/dist/fullpage.extensions.min.js"],"names":["const","let"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;AC7DA,wB;;;;;;;;ACAA;AAAA;AAAkC;;AAE3BA,GAAK,CAAC,cAAc,GAAG;EAC5B,IAAI,gBAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE;;IAEzC,IAAI,IAAI,IAAI,SAAS,EAAE;;MAErB,IAAI,SAAS,IAAI,MAAM,EAAE;;QAEvB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,IAAI,uDAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;;;QAGjJ,UAAU,CAAC,YAAM;UACf,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;SAChD,EAAE,IAAI,CAAC,CAAC;OACV;;MAED,IAAI,SAAS,IAAI,IAAI,EAAE;;QAErB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,uDAAM,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;;;QAGpL,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;OAChD;KACF;;IAED,IAAI,IAAI,IAAI,WAAW,EAAE;;MAEvB,IAAI,MAAM,CAAC,OAAO,EAAE;QAClB,uDAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;;QAErC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;UAC7F,uDAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC;SAC3E,MAAM;UACL,uDAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC;SAC3E;OACF;;MAED,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;QACvD,uDAAM,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;OAC5D;;KAEF;GACF;EACD,UAAU,sBAAC,MAAM,EAAE,WAAW,EAAE;IAC9B,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;MACvG,uDAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC;KAC3E,MAAM;MACL,uDAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC;KAC3E;GACF;CACF;;;;;;;;;;ACnDD;AAAA;AAAkC;;AAE3BA,GAAK,CAAC,SAAS,GAAG;EACvB,IAAI,gBAAC,WAAW,EAAE;IAChB,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;GACnC;EACD,UAAU,sBAAC,WAAW,EAAE;;IAEtB,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;;MAEjD,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;QAChH,uDAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;OACnE,MAAM;QACL,UAAU,CAAC,YAAM;UACf,uDAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SACnE,EAAE,IAAI,CAAC,CAAC;OACV;;KAEF;GACF;CACF;;;;;;;;;ACpBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,wCAAwC;;AAEjE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA,kDAAkD,6BAA6B;;AAE/E;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;;AAEL,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+BAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,UAAU;AAC1C,+BAA+B,UAAU;;AAEzC;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;AACA;AACA,6CAA6C;;AAE7C;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,oDAAoD;;AAEtF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,4CAA4C;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C;AAC3C,aAAa;AACb,2CAA2C;AAC3C,aAAa;AACb,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,6LAA6L;AAC7L,4LAA4L;AAC5L;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA,2CAA2C;;AAE3C;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;;AAGA;AACA,iDAAiD,KAAK;AACtD;AACA;AACA;;;AAGA;;AAEA,KAAK;;AAEL;AACA;;;AAGA;AACA,iDAAiD,KAAK;AACtD;AACA;AACA;;;AAGA;;AAEA,KAAK;;AAEL;AACA;;AAEA;;AAEA;;AAEA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA,6CAA6C,KAAK;AAClD;AACA;AACA;;;AAGA;;AAEA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,gBAAgB;AAChB,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wCAAwC,KAAK;AAC7C;AACA;;AAEA;AACA;AACA;AACA,qDAAqD,KAAK;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;;AAEb;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;;AAEb;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;;AAEb;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;;;AAGA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA,aAAa;;AAEb;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA,uBAAuB,OAAO;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA,oBAAoB;AACpB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qDAAqD;AACrD,iEAAiE,2BAA2B,sBAAsB,kBAAkB,2BAA2B,uCAAuC;AACtM;;AAEA;;AAEA;AACA;AACA,yCAAyC,WAAW,SAAS,UAAU;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA,yCAAyC,UAAU,WAAW,QAAQ;AACtE;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA,0CAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA,CAAC,WAAW,IAAyC;AACrD,IAAI,mCAAQ,aAAa,gBAAgB,EAAE;AAAA,oGAAE;;AAE7C;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,qBAAqB;;AAE5D;AACA;AACA,qEAAqE;AACrE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,eAAe;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;;AAEA;AACA,8DAA8D;;AAE9D;AACA;;AAEA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,wBAAwB,OAAO;AAC/B;AACA;AACA;;AAEA;AACA,wCAAwC,8BAA8B;;AAEtE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB,aAAa;;AAEb;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,wBAAwB,OAAO;AAC/B,wBAAwB;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;;AAEjB;AACA,6DAA6D,8BAA8B;;AAE3F;AACA,4EAA4E,8BAA8B;AAC1G;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,CAAC,oB;;;;;;;ACphFD;;;;;;;AAOA,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC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AC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CA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A;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,sBAAsB,QAAQ;AAC9B,2BAA2B,4BAA4B;AACvD,8BAA8B,KAAK,WAAW;AAC9C;AACA;AACA,KAAK;AACL;AACA,sBAAsB,QAAQ;AAC9B,2BAA2B,4BAA4B;AACvD,8BAA8B,KAAK,WAAW;AAC9C;AACA;AACA,KAAK;AACL;AACA,sBAAsB,QAAQ;AAC9B,2BAA2B,8BAA8B;AACzD,8BAA8B,KAAK,WAAW;AAC9C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAO,CAAC,EAAoC,CAAC,CAAC;AAC9C,mBAAO,CAAC,EAA2C,CAAC,CAAC;AACrD,IAAI,QAAQ,GAAG,mBAAO,CAAC,CAA0C,CAAC,CAAC;AACnE,mBAAO,CAAC,EAA6B,CAAC,CAAC;;;AAGW;AACJ;;;AAGS;AACV;AACN;;;AAGvC,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AE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,SAAS;;IAEpB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,oBAAoB,EAAE,KAAK;GAC5B,CAAC,CAAC;CACJ;;AAED,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,KAAK,EAAE;EAC7D,mBAAmB,CAAC,IAAI,EAAE,CAAC;;EAE3B,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAM;IACtC,mBAAmB,CAAC,IAAI,EAAE,CAAC;GAC5B,CAAC,CAAC;CACJ,CAAC,CAAC;;;;;;;;;AClCH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,IAA0C;AAClD,QAAQ,mCAAO,YAAY,oDAAoD,EAAE;AAAA,oGAAC;AAClF;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,4GAA4G;;AAEtJ;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,cAAc;AAC3C;AACA;;AAEA;AACA;AACA,6BAA6B,cAAc;AAC3C;AACA;;AAEA;AACA;AACA,6BAA6B,6BAA6B;AAC1D;AACA;;AAEA;AACA;AACA,6BAA6B,6BAA6B;AAC1D;AACA;;AAEA;AACA;AACA,6BAA6B,WAAW;AACxC;AACA,8FAA8F,2CAA2C,EAAE;;AAE3I;AACA;AACA,6BAA6B,WAAW;AACxC;AACA,2FAA2F,gCAAgC,EAAE;;AAE7H;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,8BAA8B,sBAAsB;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA,mCAAmC,oBAAoB;AACvD;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;;AAGjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,YAAY;;AAEzC;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mDAAmD,mBAAmB;AACtE;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,yCAAyC,QAAQ;AACjD,uCAAuC,4BAA4B;AACnE,gDAAgD,KAAK,OAAO;AAC5D;AACA;AACA,iBAAiB;AACjB;AACA,yCAAyC,QAAQ;AACjD,uC;AACA,8C;AACA;AACA,gDAAgD,KAAK,OAAO;AAC5D;AACA;AACA,iBAAiB;AACjB;AACA,yCAAyC,QAAQ;AACjD,uC;AACA,gD;AACA;AACA,gDAAgD,KAAK,OAAO;AAC5D;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6FAA6F;AAC7F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA4C,oBAAoB;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA,kCAAkC;;AAElC;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,oBAAoB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,WAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;;AAEA,qBAAqB,4BAA4B;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,yCAAyC;AACzC;AACA;;AAEA;AACA,8CAA8C,EAAE;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,qBAAqB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,yBAAyB;AACvD;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D;AACA;AACA,yBAAyB,YAAY;AACrC,qBAAqB;AACrB,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D;AACA;AACA,yBAAyB,YAAY;AACrC,qBAAqB;AACrB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;;AAEjB;;AAEA;AACA,iDAAiD,iDAAiD,EAAE;AACpG,iBAAiB;;AAEjB;AACA,iDAAiD,kDAAkD,EAAE;AACrG,iBAAiB;;AAEjB;AACA,iDAAiD,mDAAmD,EAAE;AACtG,iBAAiB;;AAEjB;AACA,iDAAiD,gDAAgD,EAAE;AACnG,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB,8BAA8B,wBAAwB;AACtD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+BAA+B,sBAAsB;AACrD;;AAEA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;;AAEjB;AACA,iDAAiD,uCAAuC,EAAE;AAC1F,iBAAiB;;;AAGjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA,iDAAiD,kCAAkC,EAAE;AACrF,iBAAiB;;AAEjB;AACA,iDAAiD,mCAAmC,EAAE;AACtF,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA,iDAAiD,gCAAgC,EAAE;AACnF,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;;AAGjB;;AAEA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;AACrD;AACA,qBAAqB;AACrB;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,mBAAmB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;;AAEjB;;AAEA;AACA;AACA,8BAA8B,qBAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,qBAAqB;;AAErB;AACA,iBAAiB;;AAEjB;AACA;AACA,iBAAiB;;;AAGjB;;AAEA;AACA,iDAAiD,kDAAkD,EAAE;AACrG,iBAAiB;;AAEjB;AACA,iDAAiD,0BAA0B,EAAE;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,EAAE;AAC/D;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,gDAAgD;AAChD,wDAAwD;AACxD,iEAAiE,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mFAAmF,EAAE;;AAErF;AACA;AACA,kEAAkE;AAClE,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,kDAAkD,8BAA8B;AAChF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAA0D,4CAA4C;AACtG;AACA;AACA;AACA,8DAA8D,yDAAyD;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,EAAE;;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,aAAa;;AAEtC;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,iDAAiD,eAAe;AAChE;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,qCAAqC;AAClE;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,mDAAmD,0EAA0E;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,yFAAyF,EAAE;AAC3F;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,YAAY;AACrC;AACA,qBAAqB;AACrB;AACA;AACA,iBAAiB;;AAEjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C,mCAAmC;AAC7E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,6CAA6C;AAC7C,2CAA2C;AAC3C,qCAAqC;AACrC,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iCAAiC;AACjC,6CAA6C;AAC7C,yCAAyC;AACzC,oCAAoC;AACpC,qCAAqC;AACrC,oCAAoC;AACpC,2CAA2C;AAC3C,wCAAwC;AACxC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,2BAA2B;AACzD;AACA;AACA;AACA,8BAA8B,uBAAuB;AACrD;AACA,yEAAyE,4BAA4B;AACrG;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,uDAAuD;AAChH;AACA;AACA;AACA;AACA,iEAAiE,oEAAoE,gBAAgB;AACrJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iD;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,0BAA0B;AAC9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,6BAA6B;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA,uCAAuC,0BAA0B;AACjE;AACA;AACA;AACA;AACA;AACA,uCAAuC,2BAA2B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C;AAC9C,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA,yD;AACA;AACA;AACA,sE;AACA;AACA;;AAEA;;AAEA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,mIAAmI;;AAEnI;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,EAAE;AAC1C;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qE;AACA,8M;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D;AAC1D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,8FAA8F;;AAE9F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8FAA8F;AAC9F;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;AAC7C,iDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE;AACxE,wEAAwE;AACxE,sEAAsE;AACtE,sEAAsE;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F;AAC7F;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,mDAAmD;AACnD,8CAA8C;AAC9C,2CAA2C;AAC3C,4CAA4C;AAC5C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4DAA4D;AAC5D,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,WAAW;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gLAAgL;AAChL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mDAAmD,gBAAgB;AACnE;;;AAGA;;AAEA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;;AAEA,mDAAmD;AACnD,2DAA2D;;AAE3D;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kI;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA6B;AAC7B;AACA;;;AAGA,sC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iF;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;;AAEA;AACA,mHAAmH;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kJAAkJ;AAClJ;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH;;AAEnH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+NAA+N;AAC/N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0HAA0H;AAC1H,iHAAiH;AACjH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC,kDAAkD;AAClD;;AAEA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wCAAwC;AACvG;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,mDAAmD,qBAAqB;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,2BAA2B;AACrD;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,sBAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,MAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,mGAAmG;AACjI;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,iCAAiC;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,yBAAyB,kBAAkB;AAC3C,mFAAmF,EAAE;AACrF;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,kCAAkC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,+BAA+B;AAC/D,qB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,sBAAsB;AACxD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,eAAe;AACtC,uBAAuB,oBAAoB;AAC3C,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD,6BAA6B,qBAAqB;AAClD,2BAA2B,qBAAqB;AAChD,oCAAoC,qBAAqB;AACzD,oCAAoC,qBAAqB;AACzD,yCAAyC,qBAAqB;AAC9D,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8BAA8B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2G;AACA,uCAAuC,gCAAgC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oBAAoB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8CAA8C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,+EAA+E,kCAAkC,sBAAsB,kCAAkC,qBAAqB;AAC5N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,wHAAwH;AACtJ;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,4DAA4D;AAC5D,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,oDAAoD,EAAE;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,EAAE;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA,wDAAwD;AACxD,8DAA8D;AAC9D,8DAA8D;AAC9D,sDAAsD;;AAEtD;AACA,2CAA2C,EAAE;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;;AAEA;AACA;AACA;AACA;AACA,kEAAkE,oBAAoB,EAAE;AACxF;AACA,gEAAgE,0BAA0B,EAAE;;AAE5F;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,EAAE;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,EAAE;;AAErD;AACA,yEAAyE,EAAE;AAC3E;;AAEA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,yCAAyC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA,oEAAoE;AACpE;AACA,mEAAmE,EAAE,yBAAyB;AAC9F;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;AACA,uDAAuD,mCAAmC,EAAE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;;;ACz+MA;AAAA,mBAAO,CAAC,CAAc,CAAC,CAAC;;AAEjBD,GAAK,CAAC,MAAM,GAAG;EACpB,aAAa,yBAAC,EAAE,EAAE;IAChB,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAK,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAE,CAAC,CAAC,CAAC;GAC1E;EACD,iBAAiB,6BAAC,EAAE,EAAE;IACpB,CAAC,CAAC,2CAA2C,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAK,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAE,CAAC,CAAC,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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;;AAEA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qB;;;;;;;;ACzKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAqC,CAAC,mCAAO,WAAW,oCAAoC;AAAA,oGAAC,kEAAkE,sCAAsC,aAAa,mhBAAmhB,iBAAiB,yDAAyD,iBAAiB,6DAA6D,eAAe,QAAQ,+BAA+B,IAAI,KAAK,mBAAmB,iIAAiI,SAAS,iBAAiB,2GAA2G,cAAc,wEAAwE,cAAc,qBAAqB,iBAAiB,MAAM,+DAA+D,WAAW,KAAK,mBAAmB,SAAS,kBAAkB,eAAe,YAAY,QAAQ,SAAS,iBAAiB,uCAAuC,iBAAiB,mCAAmC,iBAAiB,2CAA2C,YAAY,yBAAyB,iBAAiB,uCAAuC,YAAY,yBAAyB,eAAe,qBAAqB,iBAAiB,eAAe,qEAAqE,WAAW,KAAK,oBAAoB,sBAAsB,SAAS,cA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","file":"scripts/history.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/wp-content/themes/mollers//dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 180);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap dc61182f712cbd52fe9a","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 0 1 2 3 4","import { helper } from \"./helper\";\r\n\r\nexport const pageHeroBanner = {\r\n init(origin, destination, direction, type) {\r\n\r\n if (type == 'onLeave') {\r\n\r\n if (direction == 'down') {\r\n // Background image\r\n ($(origin.item).hasClass('js-backdrop') && $(origin.item).next('.section').hasClass('js-page-hero-banner')) && helper.setBackdropBg(origin.item);\r\n\r\n // Background video\r\n setTimeout(() => {\r\n pageHeroBanner.setVideoBg(origin, destination);\r\n }, 1000);\r\n }\r\n\r\n if (direction == 'up') {\r\n // Background image\r\n ($(destination.item).hasClass('js-page-hero-banner') && $(destination.item).prev('.section').hasClass('js-backdrop')) && helper.setBackdropBg($(destination.item).prev('.section'));\r\n\r\n // Background video\r\n pageHeroBanner.setVideoBg(origin, destination);\r\n }\r\n }\r\n\r\n if (type == 'afterLoad') {\r\n\r\n if (origin.isFirst) {\r\n helper.setBackdropBg($(origin.item));\r\n\r\n if ($(origin.item).hasClass('js-page-hero-banner') && $(origin.item).hasClass('js-has-video')) {\r\n helper.videoController('play', $('.js-fp-backdrop .js-page-hero-banner'));\r\n } else {\r\n helper.videoController('stop', $('.js-fp-backdrop .js-page-hero-banner'));\r\n }\r\n }\r\n\r\n if ($('.section.active').next().hasClass('js-backdrop')) {\r\n helper.setBackdropBg($(destination.item).next('.section'));\r\n }\r\n\r\n }\r\n },\r\n setVideoBg(origin, destination) {\r\n if ($(destination.item).hasClass('js-page-hero-banner') && $(destination.item).hasClass('js-has-video')) {\r\n helper.videoController('play', $('.js-fp-backdrop .js-page-hero-banner'));\r\n } else {\r\n helper.videoController('stop', $('.js-fp-backdrop .js-page-hero-banner'));\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/featured/lib/pageHeroBanner.js","import { helper } from \"./helper\";\r\n\r\nexport const textImage = {\r\n init(destination) {\r\n textImage.setVideoBg(destination);\r\n },\r\n setVideoBg(destination) {\r\n\r\n if ($(destination.item).hasClass('js-text-image')) {\r\n\r\n if ($(destination.item).hasClass($(destination.item).data('id')) && $(destination.item).hasClass('js-has-video')) {\r\n helper.videoController('play', $(destination.item).find('video'));\r\n } else {\r\n setTimeout(() => {\r\n helper.videoController('stop', $(destination.item).find('video'));\r\n }, 1000);\r\n }\r\n\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/featured/lib/textImage.js","/**\n* Customized version of iScroll.js 0.1.3\n* It fixes bugs affecting its integration with fullpage.js\n* @license\n*/\n/*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */\n(function (window, document, Math) {\nvar rAF = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function (callback) { window.setTimeout(callback, 1000 / 60); };\n\nvar utils = (function () {\n var me = {};\n\n var _elementStyle = document.createElement('div').style;\n var _vendor = (function () {\n var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],\n transform,\n i = 0,\n l = vendors.length;\n\n for ( ; i < l; i++ ) {\n transform = vendors[i] + 'ransform';\n if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1);\n }\n\n return false;\n })();\n\n function _prefixStyle (style) {\n if ( _vendor === false ) return false;\n if ( _vendor === '' ) return style;\n return _vendor + style.charAt(0).toUpperCase() + style.substr(1);\n }\n\n me.getTime = Date.now || function getTime () { return new Date().getTime(); };\n\n me.extend = function (target, obj) {\n for ( var i in obj ) {\n target[i] = obj[i];\n }\n };\n\n me.addEvent = function (el, type, fn, capture) {\n el.addEventListener(type, fn, !!capture);\n };\n\n me.removeEvent = function (el, type, fn, capture) {\n el.removeEventListener(type, fn, !!capture);\n };\n\n me.prefixPointerEvent = function (pointerEvent) {\n return window.MSPointerEvent ?\n 'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8):\n pointerEvent;\n };\n\n me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {\n var distance = current - start,\n speed = Math.abs(distance) / time,\n destination,\n duration;\n\n deceleration = deceleration === undefined ? 0.0006 : deceleration;\n\n destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );\n duration = speed / deceleration;\n\n if ( destination < lowerMargin ) {\n destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;\n distance = Math.abs(destination - current);\n duration = distance / speed;\n } else if ( destination > 0 ) {\n destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;\n distance = Math.abs(current) + destination;\n duration = distance / speed;\n }\n\n return {\n destination: Math.round(destination),\n duration: duration\n };\n };\n\n var _transform = _prefixStyle('transform');\n\n me.extend(me, {\n hasTransform: _transform !== false,\n hasPerspective: _prefixStyle('perspective') in _elementStyle,\n hasTouch: 'ontouchstart' in window,\n hasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed\n hasTransition: _prefixStyle('transition') in _elementStyle\n });\n\n /*\n This should find all Android browsers lower than build 535.19 (both stock browser and webview)\n - galaxy S2 is ok\n - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`\n - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S3 is badAndroid (stock brower, webview)\n `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S4 is badAndroid (stock brower, webview)\n `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S5 is OK\n `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n - galaxy S6 is OK\n `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n */\n me.isBadAndroid = (function() {\n var appVersion = window.navigator.appVersion;\n // Android browser is not a chrome browser.\n if (/Android/.test(appVersion) && !(/Chrome\\/\\d/.test(appVersion))) {\n var safariVersion = appVersion.match(/Safari\\/(\\d+.\\d)/);\n if(safariVersion && typeof safariVersion === \"object\" && safariVersion.length >= 2) {\n return parseFloat(safariVersion[1]) < 535.19;\n } else {\n return true;\n }\n } else {\n return false;\n }\n })();\n\n me.extend(me.style = {}, {\n transform: _transform,\n transitionTimingFunction: _prefixStyle('transitionTimingFunction'),\n transitionDuration: _prefixStyle('transitionDuration'),\n transitionDelay: _prefixStyle('transitionDelay'),\n transformOrigin: _prefixStyle('transformOrigin')\n });\n\n me.hasClass = function (e, c) {\n var re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\");\n return re.test(e.className);\n };\n\n me.addClass = function (e, c) {\n if ( me.hasClass(e, c) ) {\n return;\n }\n\n var newclass = e.className.split(' ');\n newclass.push(c);\n e.className = newclass.join(' ');\n };\n\n me.removeClass = function (e, c) {\n if ( !me.hasClass(e, c) ) {\n return;\n }\n\n var re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\", 'g');\n e.className = e.className.replace(re, ' ');\n };\n\n me.offset = function (el) {\n var left = -el.offsetLeft,\n top = -el.offsetTop;\n\n // jshint -W084\n while (el = el.offsetParent) {\n left -= el.offsetLeft;\n top -= el.offsetTop;\n }\n // jshint +W084\n\n return {\n left: left,\n top: top\n };\n };\n\n me.preventDefaultException = function (el, exceptions) {\n for ( var i in exceptions ) {\n if ( exceptions[i].test(el[i]) ) {\n return true;\n }\n }\n\n return false;\n };\n\n me.extend(me.eventType = {}, {\n touchstart: 1,\n touchmove: 1,\n touchend: 1,\n\n mousedown: 2,\n mousemove: 2,\n mouseup: 2,\n\n pointerdown: 3,\n pointermove: 3,\n pointerup: 3,\n\n MSPointerDown: 3,\n MSPointerMove: 3,\n MSPointerUp: 3\n });\n\n me.extend(me.ease = {}, {\n quadratic: {\n style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n fn: function (k) {\n return k * ( 2 - k );\n }\n },\n circular: {\n style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly \"circular\" but this looks better, it should be (0.075, 0.82, 0.165, 1)\n fn: function (k) {\n return Math.sqrt( 1 - ( --k * k ) );\n }\n },\n back: {\n style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n fn: function (k) {\n var b = 4;\n return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1;\n }\n },\n bounce: {\n style: '',\n fn: function (k) {\n if ( ( k /= 1 ) < ( 1 / 2.75 ) ) {\n return 7.5625 * k * k;\n } else if ( k < ( 2 / 2.75 ) ) {\n return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;\n } else if ( k < ( 2.5 / 2.75 ) ) {\n return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;\n } else {\n return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;\n }\n }\n },\n elastic: {\n style: '',\n fn: function (k) {\n var f = 0.22,\n e = 0.4;\n\n if ( k === 0 ) { return 0; }\n if ( k == 1 ) { return 1; }\n\n return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 );\n }\n }\n });\n\n me.tap = function (e, eventName) {\n var ev = document.createEvent('Event');\n ev.initEvent(eventName, true, true);\n ev.pageX = e.pageX;\n ev.pageY = e.pageY;\n e.target.dispatchEvent(ev);\n };\n\n me.click = function (e) {\n var target = e.target,\n ev;\n\n if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) {\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent\n // initMouseEvent is deprecated.\n ev = document.createEvent(window.MouseEvent ? 'MouseEvents' : 'Event');\n ev.initEvent('click', true, true);\n ev.view = e.view || window;\n ev.detail = 1;\n ev.screenX = target.screenX || 0;\n ev.screenY = target.screenY || 0;\n ev.clientX = target.clientX || 0;\n ev.clientY = target.clientY || 0;\n ev.ctrlKey = !!e.ctrlKey;\n ev.altKey = !!e.altKey;\n ev.shiftKey = !!e.shiftKey;\n ev.metaKey = !!e.metaKey;\n ev.button = 0;\n ev.relatedTarget = null;\n ev._constructed = true;\n target.dispatchEvent(ev);\n }\n };\n\n return me;\n})();\nfunction IScroll (el, options) {\n this.wrapper = typeof el == 'string' ? document.querySelector(el) : el;\n this.scroller = this.wrapper.children[0];\n this.scrollerStyle = this.scroller.style; // cache style for better performance\n\n this.options = {\n\n resizeScrollbars: true,\n\n mouseWheelSpeed: 20,\n\n snapThreshold: 0.334,\n\n// INSERT POINT: OPTIONS\n disablePointer : !utils.hasPointer,\n disableTouch : utils.hasPointer || !utils.hasTouch,\n disableMouse : utils.hasPointer || utils.hasTouch,\n startX: 0,\n startY: 0,\n scrollY: true,\n directionLockThreshold: 5,\n momentum: true,\n\n bounce: true,\n bounceTime: 600,\n bounceEasing: '',\n\n preventDefault: true,\n preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|LABEL)$/ },\n\n HWCompositing: true,\n useTransition: true,\n useTransform: true,\n bindToWrapper: typeof window.onmousedown === \"undefined\"\n };\n\n for ( var i in options ) {\n this.options[i] = options[i];\n }\n\n // Normalize options\n this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';\n\n this.options.useTransition = utils.hasTransition && this.options.useTransition;\n this.options.useTransform = utils.hasTransform && this.options.useTransform;\n\n this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;\n this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n // If you want eventPassthrough I have to lock one of the axes\n this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;\n this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX;\n\n // With eventPassthrough we also need lockDirection mechanism\n this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;\n\n this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;\n\n if ( this.options.tap === true ) {\n this.options.tap = 'tap';\n }\n\n // https://github.com/cubiq/iscroll/issues/1029\n if (!this.options.useTransition && !this.options.useTransform) {\n if(!(/relative|absolute/i).test(this.scrollerStyle.position)) {\n this.scrollerStyle.position = \"relative\";\n }\n }\n\n if ( this.options.shrinkScrollbars == 'scale' ) {\n this.options.useTransition = false;\n }\n\n this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1;\n\n// INSERT POINT: NORMALIZATION\n\n // Some defaults\n this.x = 0;\n this.y = 0;\n this.directionX = 0;\n this.directionY = 0;\n this._events = {};\n\n// INSERT POINT: DEFAULTS\n\n this._init();\n this.refresh();\n\n this.scrollTo(this.options.startX, this.options.startY);\n this.enable();\n}\n\nIScroll.prototype = {\n version: '5.2.0',\n\n _init: function () {\n this._initEvents();\n\n if ( this.options.scrollbars || this.options.indicators ) {\n this._initIndicators();\n }\n\n if ( this.options.mouseWheel ) {\n this._initWheel();\n }\n\n if ( this.options.snap ) {\n this._initSnap();\n }\n\n if ( this.options.keyBindings ) {\n this._initKeys();\n }\n\n// INSERT POINT: _init\n\n },\n\n destroy: function () {\n this._initEvents(true);\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = null;\n this._execEvent('destroy');\n },\n\n _transitionEnd: function (e) {\n if ( e.target != this.scroller || !this.isInTransition ) {\n return;\n }\n\n this._transitionTime();\n if ( !this.resetPosition(this.options.bounceTime) ) {\n this.isInTransition = false;\n this._execEvent('scrollEnd');\n }\n },\n\n _start: function (e) {\n // React to left mouse button only\n if ( utils.eventType[e.type] != 1 ) {\n // for button property\n // http://unixpapa.com/js/mouse.html\n var button;\n if (!e.which) {\n /* IE case */\n button = (e.button < 2) ? 0 :\n ((e.button == 4) ? 1 : 2);\n } else {\n /* All others */\n button = e.button;\n }\n if ( button !== 0 ) {\n return;\n }\n }\n\n if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) {\n return;\n }\n\n if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {\n e.preventDefault();\n }\n\n var point = e.touches ? e.touches[0] : e,\n pos;\n\n this.initiated = utils.eventType[e.type];\n this.moved = false;\n this.distX = 0;\n this.distY = 0;\n this.directionX = 0;\n this.directionY = 0;\n this.directionLocked = 0;\n\n this.startTime = utils.getTime();\n\n if ( this.options.useTransition && this.isInTransition ) {\n this._transitionTime();\n this.isInTransition = false;\n pos = this.getComputedPosition();\n this._translate(Math.round(pos.x), Math.round(pos.y));\n this._execEvent('scrollEnd');\n } else if ( !this.options.useTransition && this.isAnimating ) {\n this.isAnimating = false;\n this._execEvent('scrollEnd');\n }\n\n this.startX = this.x;\n this.startY = this.y;\n this.absStartX = this.x;\n this.absStartY = this.y;\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n\n this._execEvent('beforeScrollStart');\n },\n\n _move: function (e) {\n if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {\n return;\n }\n\n if ( this.options.preventDefault ) { // increases performance on Android? TODO: check!\n e.preventDefault();\n }\n\n var point = e.touches ? e.touches[0] : e,\n deltaX = point.pageX - this.pointX,\n deltaY = point.pageY - this.pointY,\n timestamp = utils.getTime(),\n newX, newY,\n absDistX, absDistY;\n\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n\n this.distX += deltaX;\n this.distY += deltaY;\n absDistX = Math.abs(this.distX);\n absDistY = Math.abs(this.distY);\n\n // We need to move at least 10 pixels for the scrolling to initiate\n if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) {\n return;\n }\n\n // If you are scrolling in one direction lock the other\n if ( !this.directionLocked && !this.options.freeScroll ) {\n if ( absDistX > absDistY + this.options.directionLockThreshold ) {\n this.directionLocked = 'h'; // lock horizontally\n } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) {\n this.directionLocked = 'v'; // lock vertically\n } else {\n this.directionLocked = 'n'; // no lock\n }\n }\n\n if ( this.directionLocked == 'h' ) {\n if ( this.options.eventPassthrough == 'vertical' ) {\n e.preventDefault();\n } else if ( this.options.eventPassthrough == 'horizontal' ) {\n this.initiated = false;\n return;\n }\n\n deltaY = 0;\n } else if ( this.directionLocked == 'v' ) {\n if ( this.options.eventPassthrough == 'horizontal' ) {\n e.preventDefault();\n } else if ( this.options.eventPassthrough == 'vertical' ) {\n this.initiated = false;\n return;\n }\n\n deltaX = 0;\n }\n\n deltaX = this.hasHorizontalScroll ? deltaX : 0;\n deltaY = this.hasVerticalScroll ? deltaY : 0;\n\n newX = this.x + deltaX;\n newY = this.y + deltaY;\n\n // Slow down if outside of the boundaries\n if ( newX > 0 || newX < this.maxScrollX ) {\n newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n }\n if ( newY > 0 || newY < this.maxScrollY ) {\n newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n }\n\n this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;\n this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;\n\n if ( !this.moved ) {\n this._execEvent('scrollStart');\n }\n\n this.moved = true;\n\n this._translate(newX, newY);\n\n/* REPLACE START: _move */\n\n if ( timestamp - this.startTime > 300 ) {\n this.startTime = timestamp;\n this.startX = this.x;\n this.startY = this.y;\n }\n\n/* REPLACE END: _move */\n\n },\n\n _end: function (e) {\n if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) {\n return;\n }\n\n if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) {\n e.preventDefault();\n }\n\n var point = e.changedTouches ? e.changedTouches[0] : e,\n momentumX,\n momentumY,\n duration = utils.getTime() - this.startTime,\n newX = Math.round(this.x),\n newY = Math.round(this.y),\n distanceX = Math.abs(newX - this.startX),\n distanceY = Math.abs(newY - this.startY),\n time = 0,\n easing = '';\n\n this.isInTransition = 0;\n this.initiated = 0;\n this.endTime = utils.getTime();\n\n // reset if we are outside of the boundaries\n if ( this.resetPosition(this.options.bounceTime) ) {\n return;\n }\n\n this.scrollTo(newX, newY); // ensures that the last position is rounded\n\n // we scrolled less than 10 pixels\n if ( !this.moved ) {\n if ( this.options.tap ) {\n utils.tap(e, this.options.tap);\n }\n\n if ( this.options.click ) {\n utils.click(e);\n }\n\n this._execEvent('scrollCancel');\n return;\n }\n\n if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) {\n this._execEvent('flick');\n return;\n }\n\n // start momentum animation if needed\n if ( this.options.momentum && duration < 300 ) {\n momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 };\n momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 };\n newX = momentumX.destination;\n newY = momentumY.destination;\n time = Math.max(momentumX.duration, momentumY.duration);\n this.isInTransition = 1;\n }\n\n\n if ( this.options.snap ) {\n var snap = this._nearestSnap(newX, newY);\n this.currentPage = snap;\n time = this.options.snapSpeed || Math.max(\n Math.max(\n Math.min(Math.abs(newX - snap.x), 1000),\n Math.min(Math.abs(newY - snap.y), 1000)\n ), 300);\n newX = snap.x;\n newY = snap.y;\n\n this.directionX = 0;\n this.directionY = 0;\n easing = this.options.bounceEasing;\n }\n\n// INSERT POINT: _end\n\n if ( newX != this.x || newY != this.y ) {\n // change easing function when scroller goes out of the boundaries\n if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) {\n easing = utils.ease.quadratic;\n }\n\n this.scrollTo(newX, newY, time, easing);\n return;\n }\n\n this._execEvent('scrollEnd');\n },\n\n _resize: function () {\n var that = this;\n\n clearTimeout(this.resizeTimeout);\n\n this.resizeTimeout = setTimeout(function () {\n that.refresh();\n }, this.options.resizePolling);\n },\n\n resetPosition: function (time) {\n var x = this.x,\n y = this.y;\n\n time = time || 0;\n\n if ( !this.hasHorizontalScroll || this.x > 0 ) {\n x = 0;\n } else if ( this.x < this.maxScrollX ) {\n x = this.maxScrollX;\n }\n\n if ( !this.hasVerticalScroll || this.y > 0 ) {\n y = 0;\n } else if ( this.y < this.maxScrollY ) {\n y = this.maxScrollY;\n }\n\n if ( x == this.x && y == this.y ) {\n return false;\n }\n\n this.scrollTo(x, y, time, this.options.bounceEasing);\n\n return true;\n },\n\n disable: function () {\n this.enabled = false;\n },\n\n enable: function () {\n this.enabled = true;\n },\n\n refresh: function () {\n var rf = this.wrapper.offsetHeight; // Force reflow\n\n this.wrapperWidth = this.wrapper.clientWidth;\n this.wrapperHeight = this.wrapper.clientHeight;\n\n/* REPLACE START: refresh */\n\n this.scrollerWidth = this.scroller.offsetWidth;\n this.scrollerHeight = this.scroller.offsetHeight;\n\n this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\n this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\n\n/* REPLACE END: refresh */\n\n this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;\n this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;\n\n if ( !this.hasHorizontalScroll ) {\n this.maxScrollX = 0;\n this.scrollerWidth = this.wrapperWidth;\n }\n\n if ( !this.hasVerticalScroll ) {\n this.maxScrollY = 0;\n this.scrollerHeight = this.wrapperHeight;\n }\n\n this.endTime = 0;\n this.directionX = 0;\n this.directionY = 0;\n\n this.wrapperOffset = utils.offset(this.wrapper);\n\n this._execEvent('refresh');\n\n this.resetPosition();\n\n// INSERT POINT: _refresh\n\n },\n\n on: function (type, fn) {\n if ( !this._events[type] ) {\n this._events[type] = [];\n }\n\n this._events[type].push(fn);\n },\n\n off: function (type, fn) {\n if ( !this._events[type] ) {\n return;\n }\n\n var index = this._events[type].indexOf(fn);\n\n if ( index > -1 ) {\n this._events[type].splice(index, 1);\n }\n },\n\n _execEvent: function (type) {\n if ( !this._events[type] ) {\n return;\n }\n\n var i = 0,\n l = this._events[type].length;\n\n if ( !l ) {\n return;\n }\n\n for ( ; i < l; i++ ) {\n this._events[type][i].apply(this, [].slice.call(arguments, 1));\n }\n },\n\n scrollBy: function (x, y, time, easing) {\n x = this.x + x;\n y = this.y + y;\n time = time || 0;\n\n this.scrollTo(x, y, time, easing);\n },\n\n scrollTo: function (x, y, time, easing) {\n easing = easing || utils.ease.circular;\n\n this.isInTransition = this.options.useTransition && time > 0;\n var transitionType = this.options.useTransition && easing.style;\n if ( !time || transitionType ) {\n if(transitionType) {\n this._transitionTimingFunction(easing.style);\n this._transitionTime(time);\n }\n this._translate(x, y);\n } else {\n this._animate(x, y, time, easing.fn);\n }\n },\n\n scrollToElement: function (el, time, offsetX, offsetY, easing) {\n el = el.nodeType ? el : this.scroller.querySelector(el);\n\n if ( !el ) {\n return;\n }\n\n var pos = utils.offset(el);\n\n pos.left -= this.wrapperOffset.left;\n pos.top -= this.wrapperOffset.top;\n\n // if offsetX/Y are true we center the element to the screen\n if ( offsetX === true ) {\n offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n }\n if ( offsetY === true ) {\n offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n }\n\n pos.left -= offsetX || 0;\n pos.top -= offsetY || 0;\n\n pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n\n time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time;\n\n this.scrollTo(pos.left, pos.top, time, easing);\n },\n\n _transitionTime: function (time) {\n if (!this.options.useTransition) {\n return;\n }\n time = time || 0;\n var durationProp = utils.style.transitionDuration;\n if(!durationProp) {\n return;\n }\n\n this.scrollerStyle[durationProp] = time + 'ms';\n\n if ( !time && utils.isBadAndroid ) {\n this.scrollerStyle[durationProp] = '0.0001ms';\n // remove 0.0001ms\n var self = this;\n rAF(function() {\n if(self.scrollerStyle[durationProp] === '0.0001ms') {\n self.scrollerStyle[durationProp] = '0s';\n }\n });\n }\n\n\n if ( this.indicators ) {\n for ( var i = this.indicators.length; i--; ) {\n this.indicators[i].transitionTime(time);\n }\n }\n\n\n// INSERT POINT: _transitionTime\n\n },\n\n _transitionTimingFunction: function (easing) {\n this.scrollerStyle[utils.style.transitionTimingFunction] = easing;\n\n\n if ( this.indicators ) {\n for ( var i = this.indicators.length; i--; ) {\n this.indicators[i].transitionTimingFunction(easing);\n }\n }\n\n\n// INSERT POINT: _transitionTimingFunction\n\n },\n\n _translate: function (x, y) {\n if ( this.options.useTransform ) {\n\n/* REPLACE START: _translate */\n\n this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;\n\n/* REPLACE END: _translate */\n\n } else {\n x = Math.round(x);\n y = Math.round(y);\n this.scrollerStyle.left = x + 'px';\n this.scrollerStyle.top = y + 'px';\n }\n\n this.x = x;\n this.y = y;\n\n\n if ( this.indicators ) {\n for ( var i = this.indicators.length; i--; ) {\n this.indicators[i].updatePosition();\n }\n }\n\n\n// INSERT POINT: _translate\n\n },\n\n _initEvents: function (remove) {\n var eventType = remove ? utils.removeEvent : utils.addEvent,\n target = this.options.bindToWrapper ? this.wrapper : window;\n\n eventType(window, 'orientationchange', this);\n eventType(window, 'resize', this);\n\n if ( this.options.click ) {\n eventType(this.wrapper, 'click', this, true);\n }\n\n if ( !this.options.disableMouse ) {\n eventType(this.wrapper, 'mousedown', this);\n eventType(target, 'mousemove', this);\n eventType(target, 'mousecancel', this);\n eventType(target, 'mouseup', this);\n }\n\n if ( utils.hasPointer && !this.options.disablePointer ) {\n eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);\n eventType(target, utils.prefixPointerEvent('pointermove'), this);\n eventType(target, utils.prefixPointerEvent('pointercancel'), this);\n eventType(target, utils.prefixPointerEvent('pointerup'), this);\n }\n\n if ( utils.hasTouch && !this.options.disableTouch ) {\n eventType(this.wrapper, 'touchstart', this);\n eventType(target, 'touchmove', this);\n eventType(target, 'touchcancel', this);\n eventType(target, 'touchend', this);\n }\n\n eventType(this.scroller, 'transitionend', this);\n eventType(this.scroller, 'webkitTransitionEnd', this);\n eventType(this.scroller, 'oTransitionEnd', this);\n eventType(this.scroller, 'MSTransitionEnd', this);\n },\n\n getComputedPosition: function () {\n var matrix = window.getComputedStyle(this.scroller, null),\n x, y;\n\n if ( this.options.useTransform ) {\n matrix = matrix[utils.style.transform].split(')')[0].split(', ');\n x = +(matrix[12] || matrix[4]);\n y = +(matrix[13] || matrix[5]);\n } else {\n x = +matrix.left.replace(/[^-\\d.]/g, '');\n y = +matrix.top.replace(/[^-\\d.]/g, '');\n }\n\n return { x: x, y: y };\n },\n _initIndicators: function () {\n var interactive = this.options.interactiveScrollbars,\n customStyle = typeof this.options.scrollbars != 'string',\n indicators = [],\n indicator;\n\n var that = this;\n\n this.indicators = [];\n\n if ( this.options.scrollbars ) {\n // Vertical scrollbar\n if ( this.options.scrollY ) {\n indicator = {\n el: createDefaultScrollbar('v', interactive, this.options.scrollbars),\n interactive: interactive,\n defaultScrollbars: true,\n customStyle: customStyle,\n resize: this.options.resizeScrollbars,\n shrink: this.options.shrinkScrollbars,\n fade: this.options.fadeScrollbars,\n listenX: false\n };\n\n this.wrapper.appendChild(indicator.el);\n indicators.push(indicator);\n }\n\n // Horizontal scrollbar\n if ( this.options.scrollX ) {\n indicator = {\n el: createDefaultScrollbar('h', interactive, this.options.scrollbars),\n interactive: interactive,\n defaultScrollbars: true,\n customStyle: customStyle,\n resize: this.options.resizeScrollbars,\n shrink: this.options.shrinkScrollbars,\n fade: this.options.fadeScrollbars,\n listenY: false\n };\n\n this.wrapper.appendChild(indicator.el);\n indicators.push(indicator);\n }\n }\n\n if ( this.options.indicators ) {\n // TODO: check concat compatibility\n indicators = indicators.concat(this.options.indicators);\n }\n\n for ( var i = indicators.length; i--; ) {\n this.indicators.push( new Indicator(this, indicators[i]) );\n }\n\n // TODO: check if we can use array.map (wide compatibility and performance issues)\n function _indicatorsMap (fn) {\n if (that.indicators) {\n for ( var i = that.indicators.length; i--; ) {\n fn.call(that.indicators[i]);\n }\n }\n }\n\n if ( this.options.fadeScrollbars ) {\n this.on('scrollEnd', function () {\n _indicatorsMap(function () {\n this.fade();\n });\n });\n\n this.on('scrollCancel', function () {\n _indicatorsMap(function () {\n this.fade();\n });\n });\n\n this.on('scrollStart', function () {\n _indicatorsMap(function () {\n this.fade(1);\n });\n });\n\n this.on('beforeScrollStart', function () {\n _indicatorsMap(function () {\n this.fade(1, true);\n });\n });\n }\n\n\n this.on('refresh', function () {\n _indicatorsMap(function () {\n this.refresh();\n });\n });\n\n this.on('destroy', function () {\n _indicatorsMap(function () {\n this.destroy();\n });\n\n delete this.indicators;\n });\n },\n\n _initWheel: function () {\n utils.addEvent(this.wrapper, 'wheel', this);\n utils.addEvent(this.wrapper, 'mousewheel', this);\n utils.addEvent(this.wrapper, 'DOMMouseScroll', this);\n\n this.on('destroy', function () {\n clearTimeout(this.wheelTimeout);\n this.wheelTimeout = null;\n utils.removeEvent(this.wrapper, 'wheel', this);\n utils.removeEvent(this.wrapper, 'mousewheel', this);\n utils.removeEvent(this.wrapper, 'DOMMouseScroll', this);\n });\n },\n\n _wheel: function (e) {\n if ( !this.enabled ) {\n return;\n }\n\n // in IE we can not preventDefault() or otherwise it won't scroll to the prev/next section.\n // I commented on it here back then: https://github.com/cubiq/iscroll/issues/980\n // isIE taken from: https://stackoverflow.com/a/49986758/1081396\n var isIE = window.navigator.userAgent.match(/(MSIE|Trident)/);\n if(!isIE){\n e.preventDefault();\n }\n\n var wheelDeltaX, wheelDeltaY,\n newX, newY,\n that = this;\n\n if ( this.wheelTimeout === undefined ) {\n that._execEvent('scrollStart');\n }\n\n // Execute the scrollEnd event after 400ms the wheel stopped scrolling\n clearTimeout(this.wheelTimeout);\n this.wheelTimeout = setTimeout(function () {\n if(!that.options.snap) {\n that._execEvent('scrollEnd');\n }\n that.wheelTimeout = undefined;\n }, 400);\n\n if ( 'deltaX' in e ) {\n if (e.deltaMode === 1) {\n wheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;\n wheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;\n } else {\n wheelDeltaX = -e.deltaX;\n wheelDeltaY = -e.deltaY;\n }\n } else if ( 'wheelDeltaX' in e ) {\n wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;\n wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;\n } else if ( 'wheelDelta' in e ) {\n wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;\n } else if ( 'detail' in e ) {\n wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;\n } else {\n return;\n }\n\n wheelDeltaX *= this.options.invertWheelDirection;\n wheelDeltaY *= this.options.invertWheelDirection;\n\n if ( !this.hasVerticalScroll ) {\n wheelDeltaX = wheelDeltaY;\n wheelDeltaY = 0;\n }\n\n if ( this.options.snap ) {\n newX = this.currentPage.pageX;\n newY = this.currentPage.pageY;\n\n if ( wheelDeltaX > 0 ) {\n newX--;\n } else if ( wheelDeltaX < 0 ) {\n newX++;\n }\n\n if ( wheelDeltaY > 0 ) {\n newY--;\n } else if ( wheelDeltaY < 0 ) {\n newY++;\n }\n\n this.goToPage(newX, newY);\n\n return;\n }\n\n newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n if ( newX > 0 ) {\n newX = 0;\n } else if ( newX < this.maxScrollX ) {\n newX = this.maxScrollX;\n }\n\n if ( newY > 0 ) {\n newY = 0;\n } else if ( newY < this.maxScrollY ) {\n newY = this.maxScrollY;\n }\n\n this.scrollTo(newX, newY, 0);\n\n// INSERT POINT: _wheel\n },\n\n _initSnap: function () {\n this.currentPage = {};\n\n if ( typeof this.options.snap == 'string' ) {\n this.options.snap = this.scroller.querySelectorAll(this.options.snap);\n }\n\n this.on('refresh', function () {\n var i = 0, l,\n m = 0, n,\n cx, cy,\n x = 0, y,\n stepX = this.options.snapStepX || this.wrapperWidth,\n stepY = this.options.snapStepY || this.wrapperHeight,\n el;\n\n this.pages = [];\n\n if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) {\n return;\n }\n\n if ( this.options.snap === true ) {\n cx = Math.round( stepX / 2 );\n cy = Math.round( stepY / 2 );\n\n while ( x > -this.scrollerWidth ) {\n this.pages[i] = [];\n l = 0;\n y = 0;\n\n while ( y > -this.scrollerHeight ) {\n this.pages[i][l] = {\n x: Math.max(x, this.maxScrollX),\n y: Math.max(y, this.maxScrollY),\n width: stepX,\n height: stepY,\n cx: x - cx,\n cy: y - cy\n };\n\n y -= stepY;\n l++;\n }\n\n x -= stepX;\n i++;\n }\n } else {\n el = this.options.snap;\n l = el.length;\n n = -1;\n\n for ( ; i < l; i++ ) {\n if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) {\n m = 0;\n n++;\n }\n\n if ( !this.pages[m] ) {\n this.pages[m] = [];\n }\n\n x = Math.max(-el[i].offsetLeft, this.maxScrollX);\n y = Math.max(-el[i].offsetTop, this.maxScrollY);\n cx = x - Math.round(el[i].offsetWidth / 2);\n cy = y - Math.round(el[i].offsetHeight / 2);\n\n this.pages[m][n] = {\n x: x,\n y: y,\n width: el[i].offsetWidth,\n height: el[i].offsetHeight,\n cx: cx,\n cy: cy\n };\n\n if ( x > this.maxScrollX ) {\n m++;\n }\n }\n }\n\n this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0);\n\n // Update snap threshold if needed\n if ( this.options.snapThreshold % 1 === 0 ) {\n this.snapThresholdX = this.options.snapThreshold;\n this.snapThresholdY = this.options.snapThreshold;\n } else {\n this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);\n this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);\n }\n });\n\n this.on('flick', function () {\n var time = this.options.snapSpeed || Math.max(\n Math.max(\n Math.min(Math.abs(this.x - this.startX), 1000),\n Math.min(Math.abs(this.y - this.startY), 1000)\n ), 300);\n\n this.goToPage(\n this.currentPage.pageX + this.directionX,\n this.currentPage.pageY + this.directionY,\n time\n );\n });\n },\n\n _nearestSnap: function (x, y) {\n if ( !this.pages.length ) {\n return { x: 0, y: 0, pageX: 0, pageY: 0 };\n }\n\n var i = 0,\n l = this.pages.length,\n m = 0;\n\n // Check if we exceeded the snap threshold\n if ( Math.abs(x - this.absStartX) < this.snapThresholdX &&\n Math.abs(y - this.absStartY) < this.snapThresholdY ) {\n return this.currentPage;\n }\n\n if ( x > 0 ) {\n x = 0;\n } else if ( x < this.maxScrollX ) {\n x = this.maxScrollX;\n }\n\n if ( y > 0 ) {\n y = 0;\n } else if ( y < this.maxScrollY ) {\n y = this.maxScrollY;\n }\n\n for ( ; i < l; i++ ) {\n if ( x >= this.pages[i][0].cx ) {\n x = this.pages[i][0].x;\n break;\n }\n }\n\n l = this.pages[i].length;\n\n for ( ; m < l; m++ ) {\n if ( y >= this.pages[0][m].cy ) {\n y = this.pages[0][m].y;\n break;\n }\n }\n\n if ( i == this.currentPage.pageX ) {\n i += this.directionX;\n\n if ( i < 0 ) {\n i = 0;\n } else if ( i >= this.pages.length ) {\n i = this.pages.length - 1;\n }\n\n x = this.pages[i][0].x;\n }\n\n if ( m == this.currentPage.pageY ) {\n m += this.directionY;\n\n if ( m < 0 ) {\n m = 0;\n } else if ( m >= this.pages[0].length ) {\n m = this.pages[0].length - 1;\n }\n\n y = this.pages[0][m].y;\n }\n\n return {\n x: x,\n y: y,\n pageX: i,\n pageY: m\n };\n },\n\n goToPage: function (x, y, time, easing) {\n easing = easing || this.options.bounceEasing;\n\n if ( x >= this.pages.length ) {\n x = this.pages.length - 1;\n } else if ( x < 0 ) {\n x = 0;\n }\n\n if ( y >= this.pages[x].length ) {\n y = this.pages[x].length - 1;\n } else if ( y < 0 ) {\n y = 0;\n }\n\n var posX = this.pages[x][y].x,\n posY = this.pages[x][y].y;\n\n time = time === undefined ? this.options.snapSpeed || Math.max(\n Math.max(\n Math.min(Math.abs(posX - this.x), 1000),\n Math.min(Math.abs(posY - this.y), 1000)\n ), 300) : time;\n\n this.currentPage = {\n x: posX,\n y: posY,\n pageX: x,\n pageY: y\n };\n\n this.scrollTo(posX, posY, time, easing);\n },\n\n next: function (time, easing) {\n var x = this.currentPage.pageX,\n y = this.currentPage.pageY;\n\n x++;\n\n if ( x >= this.pages.length && this.hasVerticalScroll ) {\n x = 0;\n y++;\n }\n\n this.goToPage(x, y, time, easing);\n },\n\n prev: function (time, easing) {\n var x = this.currentPage.pageX,\n y = this.currentPage.pageY;\n\n x--;\n\n if ( x < 0 && this.hasVerticalScroll ) {\n x = 0;\n y--;\n }\n\n this.goToPage(x, y, time, easing);\n },\n\n _initKeys: function (e) {\n // default key bindings\n var keys = {\n pageUp: 33,\n pageDown: 34,\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40\n };\n var i;\n\n // if you give me characters I give you keycode\n if ( typeof this.options.keyBindings == 'object' ) {\n for ( i in this.options.keyBindings ) {\n if ( typeof this.options.keyBindings[i] == 'string' ) {\n this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);\n }\n }\n } else {\n this.options.keyBindings = {};\n }\n\n for ( i in keys ) {\n this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];\n }\n\n utils.addEvent(window, 'keydown', this);\n\n this.on('destroy', function () {\n utils.removeEvent(window, 'keydown', this);\n });\n },\n\n _key: function (e) {\n if ( !this.enabled ) {\n return;\n }\n\n var snap = this.options.snap, // we are using this alot, better to cache it\n newX = snap ? this.currentPage.pageX : this.x,\n newY = snap ? this.currentPage.pageY : this.y,\n now = utils.getTime(),\n prevTime = this.keyTime || 0,\n acceleration = 0.250,\n pos;\n\n if ( this.options.useTransition && this.isInTransition ) {\n pos = this.getComputedPosition();\n\n this._translate(Math.round(pos.x), Math.round(pos.y));\n this.isInTransition = false;\n }\n\n this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;\n\n switch ( e.keyCode ) {\n case this.options.keyBindings.pageUp:\n if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {\n newX += snap ? 1 : this.wrapperWidth;\n } else {\n newY += snap ? 1 : this.wrapperHeight;\n }\n break;\n case this.options.keyBindings.pageDown:\n if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) {\n newX -= snap ? 1 : this.wrapperWidth;\n } else {\n newY -= snap ? 1 : this.wrapperHeight;\n }\n break;\n case this.options.keyBindings.end:\n newX = snap ? this.pages.length-1 : this.maxScrollX;\n newY = snap ? this.pages[0].length-1 : this.maxScrollY;\n break;\n case this.options.keyBindings.home:\n newX = 0;\n newY = 0;\n break;\n case this.options.keyBindings.left:\n newX += snap ? -1 : 5 + this.keyAcceleration>>0;\n break;\n case this.options.keyBindings.up:\n newY += snap ? 1 : 5 + this.keyAcceleration>>0;\n break;\n case this.options.keyBindings.right:\n newX -= snap ? -1 : 5 + this.keyAcceleration>>0;\n break;\n case this.options.keyBindings.down:\n newY -= snap ? 1 : 5 + this.keyAcceleration>>0;\n break;\n default:\n return;\n }\n\n if ( snap ) {\n this.goToPage(newX, newY);\n return;\n }\n\n if ( newX > 0 ) {\n newX = 0;\n this.keyAcceleration = 0;\n } else if ( newX < this.maxScrollX ) {\n newX = this.maxScrollX;\n this.keyAcceleration = 0;\n }\n\n if ( newY > 0 ) {\n newY = 0;\n this.keyAcceleration = 0;\n } else if ( newY < this.maxScrollY ) {\n newY = this.maxScrollY;\n this.keyAcceleration = 0;\n }\n\n this.scrollTo(newX, newY, 0);\n\n this.keyTime = now;\n },\n\n _animate: function (destX, destY, duration, easingFn) {\n var that = this,\n startX = this.x,\n startY = this.y,\n startTime = utils.getTime(),\n destTime = startTime + duration;\n\n function step () {\n var now = utils.getTime(),\n newX, newY,\n easing;\n\n if ( now >= destTime ) {\n that.isAnimating = false;\n that._translate(destX, destY);\n\n if ( !that.resetPosition(that.options.bounceTime) ) {\n that._execEvent('scrollEnd');\n }\n\n return;\n }\n\n now = ( now - startTime ) / duration;\n easing = easingFn(now);\n newX = ( destX - startX ) * easing + startX;\n newY = ( destY - startY ) * easing + startY;\n that._translate(newX, newY);\n\n if ( that.isAnimating ) {\n rAF(step);\n }\n }\n\n this.isAnimating = true;\n step();\n },\n handleEvent: function (e) {\n switch ( e.type ) {\n case 'touchstart':\n case 'pointerdown':\n case 'MSPointerDown':\n case 'mousedown':\n this._start(e);\n break;\n case 'touchmove':\n case 'pointermove':\n case 'MSPointerMove':\n case 'mousemove':\n this._move(e);\n break;\n case 'touchend':\n case 'pointerup':\n case 'MSPointerUp':\n case 'mouseup':\n case 'touchcancel':\n case 'pointercancel':\n case 'MSPointerCancel':\n case 'mousecancel':\n this._end(e);\n break;\n case 'orientationchange':\n case 'resize':\n this._resize();\n break;\n case 'transitionend':\n case 'webkitTransitionEnd':\n case 'oTransitionEnd':\n case 'MSTransitionEnd':\n this._transitionEnd(e);\n break;\n case 'wheel':\n case 'DOMMouseScroll':\n case 'mousewheel':\n this._wheel(e);\n break;\n case 'keydown':\n this._key(e);\n break;\n case 'click':\n if ( this.enabled && !e._constructed ) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n }\n }\n};\nfunction createDefaultScrollbar (direction, interactive, type) {\n var scrollbar = document.createElement('div'),\n indicator = document.createElement('div');\n\n if ( type === true ) {\n scrollbar.style.cssText = 'position:absolute;z-index:9999';\n indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px';\n }\n\n indicator.className = 'iScrollIndicator';\n\n if ( direction == 'h' ) {\n if ( type === true ) {\n scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n indicator.style.height = '100%';\n }\n scrollbar.className = 'iScrollHorizontalScrollbar';\n } else {\n if ( type === true ) {\n scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n indicator.style.width = '100%';\n }\n scrollbar.className = 'iScrollVerticalScrollbar';\n }\n\n scrollbar.style.cssText += ';overflow:hidden';\n\n if ( !interactive ) {\n scrollbar.style.pointerEvents = 'none';\n }\n\n scrollbar.appendChild(indicator);\n\n return scrollbar;\n}\n\nfunction Indicator (scroller, options) {\n this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n this.wrapperStyle = this.wrapper.style;\n this.indicator = this.wrapper.children[0];\n this.indicatorStyle = this.indicator.style;\n this.scroller = scroller;\n\n this.options = {\n listenX: true,\n listenY: true,\n interactive: false,\n resize: true,\n defaultScrollbars: false,\n shrink: false,\n fade: false,\n speedRatioX: 0,\n speedRatioY: 0\n };\n\n for ( var i in options ) {\n this.options[i] = options[i];\n }\n\n this.sizeRatioX = 1;\n this.sizeRatioY = 1;\n this.maxPosX = 0;\n this.maxPosY = 0;\n\n if ( this.options.interactive ) {\n if ( !this.options.disableTouch ) {\n utils.addEvent(this.indicator, 'touchstart', this);\n utils.addEvent(window, 'touchend', this);\n }\n if ( !this.options.disablePointer ) {\n utils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n utils.addEvent(window, utils.prefixPointerEvent('pointerup'), this);\n }\n if ( !this.options.disableMouse ) {\n utils.addEvent(this.indicator, 'mousedown', this);\n utils.addEvent(window, 'mouseup', this);\n }\n }\n\n if ( this.options.fade ) {\n this.wrapperStyle[utils.style.transform] = this.scroller.translateZ;\n var durationProp = utils.style.transitionDuration;\n if(!durationProp) {\n return;\n }\n this.wrapperStyle[durationProp] = utils.isBadAndroid ? '0.0001ms' : '0ms';\n // remove 0.0001ms\n var self = this;\n if(utils.isBadAndroid) {\n rAF(function() {\n if(self.wrapperStyle[durationProp] === '0.0001ms') {\n self.wrapperStyle[durationProp] = '0s';\n }\n });\n }\n this.wrapperStyle.opacity = '0';\n }\n}\n\nIndicator.prototype = {\n handleEvent: function (e) {\n switch ( e.type ) {\n case 'touchstart':\n case 'pointerdown':\n case 'MSPointerDown':\n case 'mousedown':\n this._start(e);\n break;\n case 'touchmove':\n case 'pointermove':\n case 'MSPointerMove':\n case 'mousemove':\n this._move(e);\n break;\n case 'touchend':\n case 'pointerup':\n case 'MSPointerUp':\n case 'mouseup':\n case 'touchcancel':\n case 'pointercancel':\n case 'MSPointerCancel':\n case 'mousecancel':\n this._end(e);\n break;\n }\n },\n\n destroy: function () {\n if ( this.options.fadeScrollbars ) {\n clearTimeout(this.fadeTimeout);\n this.fadeTimeout = null;\n }\n if ( this.options.interactive ) {\n utils.removeEvent(this.indicator, 'touchstart', this);\n utils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n utils.removeEvent(this.indicator, 'mousedown', this);\n\n utils.removeEvent(window, 'touchmove', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n utils.removeEvent(window, 'mousemove', this);\n\n utils.removeEvent(window, 'touchend', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this);\n utils.removeEvent(window, 'mouseup', this);\n }\n\n if ( this.options.defaultScrollbars ) {\n this.wrapper.parentNode.removeChild(this.wrapper);\n }\n },\n\n _start: function (e) {\n var point = e.touches ? e.touches[0] : e;\n\n e.preventDefault();\n e.stopPropagation();\n\n this.transitionTime();\n\n this.initiated = true;\n this.moved = false;\n this.lastPointX = point.pageX;\n this.lastPointY = point.pageY;\n\n this.startTime = utils.getTime();\n\n if ( !this.options.disableTouch ) {\n utils.addEvent(window, 'touchmove', this);\n }\n if ( !this.options.disablePointer ) {\n utils.addEvent(window, utils.prefixPointerEvent('pointermove'), this);\n }\n if ( !this.options.disableMouse ) {\n utils.addEvent(window, 'mousemove', this);\n }\n\n this.scroller._execEvent('beforeScrollStart');\n },\n\n _move: function (e) {\n var point = e.touches ? e.touches[0] : e,\n deltaX, deltaY,\n newX, newY,\n timestamp = utils.getTime();\n\n if ( !this.moved ) {\n this.scroller._execEvent('scrollStart');\n }\n\n this.moved = true;\n\n deltaX = point.pageX - this.lastPointX;\n this.lastPointX = point.pageX;\n\n deltaY = point.pageY - this.lastPointY;\n this.lastPointY = point.pageY;\n\n newX = this.x + deltaX;\n newY = this.y + deltaY;\n\n this._pos(newX, newY);\n\n// INSERT POINT: indicator._move\n\n e.preventDefault();\n e.stopPropagation();\n },\n\n _end: function (e) {\n if ( !this.initiated ) {\n return;\n }\n\n this.initiated = false;\n\n e.preventDefault();\n e.stopPropagation();\n\n utils.removeEvent(window, 'touchmove', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n utils.removeEvent(window, 'mousemove', this);\n\n if ( this.scroller.options.snap ) {\n var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n var time = this.options.snapSpeed || Math.max(\n Math.max(\n Math.min(Math.abs(this.scroller.x - snap.x), 1000),\n Math.min(Math.abs(this.scroller.y - snap.y), 1000)\n ), 300);\n\n if ( this.scroller.x != snap.x || this.scroller.y != snap.y ) {\n this.scroller.directionX = 0;\n this.scroller.directionY = 0;\n this.scroller.currentPage = snap;\n this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing);\n }\n }\n\n if ( this.moved ) {\n this.scroller._execEvent('scrollEnd');\n }\n },\n\n transitionTime: function (time) {\n time = time || 0;\n var durationProp = utils.style.transitionDuration;\n if(!durationProp) {\n return;\n }\n\n this.indicatorStyle[durationProp] = time + 'ms';\n\n if ( !time && utils.isBadAndroid ) {\n this.indicatorStyle[durationProp] = '0.0001ms';\n // remove 0.0001ms\n var self = this;\n rAF(function() {\n if(self.indicatorStyle[durationProp] === '0.0001ms') {\n self.indicatorStyle[durationProp] = '0s';\n }\n });\n }\n },\n\n transitionTimingFunction: function (easing) {\n this.indicatorStyle[utils.style.transitionTimingFunction] = easing;\n },\n\n refresh: function () {\n this.transitionTime();\n\n if ( this.options.listenX && !this.options.listenY ) {\n this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n } else if ( this.options.listenY && !this.options.listenX ) {\n this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n } else {\n this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n }\n\n if ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) {\n utils.addClass(this.wrapper, 'iScrollBothScrollbars');\n utils.removeClass(this.wrapper, 'iScrollLoneScrollbar');\n\n if ( this.options.defaultScrollbars && this.options.customStyle ) {\n if ( this.options.listenX ) {\n this.wrapper.style.right = '8px';\n } else {\n this.wrapper.style.bottom = '8px';\n }\n }\n } else {\n utils.removeClass(this.wrapper, 'iScrollBothScrollbars');\n utils.addClass(this.wrapper, 'iScrollLoneScrollbar');\n\n if ( this.options.defaultScrollbars && this.options.customStyle ) {\n if ( this.options.listenX ) {\n this.wrapper.style.right = '2px';\n } else {\n this.wrapper.style.bottom = '2px';\n }\n }\n }\n\n var r = this.wrapper.offsetHeight; // force refresh\n\n if ( this.options.listenX ) {\n this.wrapperWidth = this.wrapper.clientWidth;\n if ( this.options.resize ) {\n this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n this.indicatorStyle.width = this.indicatorWidth + 'px';\n } else {\n this.indicatorWidth = this.indicator.clientWidth;\n }\n\n this.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n if ( this.options.shrink == 'clip' ) {\n this.minBoundaryX = -this.indicatorWidth + 8;\n this.maxBoundaryX = this.wrapperWidth - 8;\n } else {\n this.minBoundaryX = 0;\n this.maxBoundaryX = this.maxPosX;\n }\n\n this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));\n }\n\n if ( this.options.listenY ) {\n this.wrapperHeight = this.wrapper.clientHeight;\n if ( this.options.resize ) {\n this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n this.indicatorStyle.height = this.indicatorHeight + 'px';\n } else {\n this.indicatorHeight = this.indicator.clientHeight;\n }\n\n this.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n if ( this.options.shrink == 'clip' ) {\n this.minBoundaryY = -this.indicatorHeight + 8;\n this.maxBoundaryY = this.wrapperHeight - 8;\n } else {\n this.minBoundaryY = 0;\n this.maxBoundaryY = this.maxPosY;\n }\n\n this.maxPosY = this.wrapperHeight - this.indicatorHeight;\n this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));\n }\n\n this.updatePosition();\n },\n\n updatePosition: function () {\n var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n if ( !this.options.ignoreBoundaries ) {\n if ( x < this.minBoundaryX ) {\n if ( this.options.shrink == 'scale' ) {\n this.width = Math.max(this.indicatorWidth + x, 8);\n this.indicatorStyle.width = this.width + 'px';\n }\n x = this.minBoundaryX;\n } else if ( x > this.maxBoundaryX ) {\n if ( this.options.shrink == 'scale' ) {\n this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n this.indicatorStyle.width = this.width + 'px';\n x = this.maxPosX + this.indicatorWidth - this.width;\n } else {\n x = this.maxBoundaryX;\n }\n } else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) {\n this.width = this.indicatorWidth;\n this.indicatorStyle.width = this.width + 'px';\n }\n\n if ( y < this.minBoundaryY ) {\n if ( this.options.shrink == 'scale' ) {\n this.height = Math.max(this.indicatorHeight + y * 3, 8);\n this.indicatorStyle.height = this.height + 'px';\n }\n y = this.minBoundaryY;\n } else if ( y > this.maxBoundaryY ) {\n if ( this.options.shrink == 'scale' ) {\n this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n this.indicatorStyle.height = this.height + 'px';\n y = this.maxPosY + this.indicatorHeight - this.height;\n } else {\n y = this.maxBoundaryY;\n }\n } else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) {\n this.height = this.indicatorHeight;\n this.indicatorStyle.height = this.height + 'px';\n }\n }\n\n this.x = x;\n this.y = y;\n\n if ( this.scroller.options.useTransform ) {\n this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ;\n } else {\n this.indicatorStyle.left = x + 'px';\n this.indicatorStyle.top = y + 'px';\n }\n },\n\n _pos: function (x, y) {\n if ( x < 0 ) {\n x = 0;\n } else if ( x > this.maxPosX ) {\n x = this.maxPosX;\n }\n\n if ( y < 0 ) {\n y = 0;\n } else if ( y > this.maxPosY ) {\n y = this.maxPosY;\n }\n\n x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x;\n y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y;\n\n this.scroller.scrollTo(x, y);\n },\n\n fade: function (val, hold) {\n if ( hold && !this.visible ) {\n return;\n }\n\n clearTimeout(this.fadeTimeout);\n this.fadeTimeout = null;\n\n var time = val ? 250 : 500,\n delay = val ? 0 : 300;\n\n val = val ? '1' : '0';\n\n this.wrapperStyle[utils.style.transitionDuration] = time + 'ms';\n\n this.fadeTimeout = setTimeout((function (val) {\n this.wrapperStyle.opacity = val;\n this.visible = +val;\n }).bind(this, val), delay);\n }\n};\n\nIScroll.utils = utils;\n\nif ( typeof module != 'undefined' && module.exports ) {\n module.exports = IScroll;\n} else if ( typeof define == 'function' && define.amd ) {\n define( function () { return IScroll; } );\n\n //making sure scrollOverflow works when using Require.js\n //in the browser\n if(typeof window !== 'undefined'){\n window.IScroll = IScroll;\n }\n} else {\n window.IScroll = IScroll;\n}\n\n})(window, document, Math);\n\n\n/*!\n* Scrolloverflow 2.0.4 module for fullPage.js >= 3\n* https://github.com/alvarotrigo/fullPage.js\n* @license MIT licensed\n*\n* Copyright (C) 2015 alvarotrigo.com - A project by Alvaro Trigo\n*/\n(function (window, document) {\n window.fp_scrolloverflow = (function() {\n\n // check if IScroll is available in global scope\n if (!window.IScroll) {\n // otherwise create local one from module.exports\n window.IScroll = module.exports;\n }\n\n // keeping central set of classnames and selectors\n var SCROLLABLE = 'fp-scrollable';\n var SCROLLABLE_SEL = '.' + SCROLLABLE;\n\n var ACTIVE = 'active';\n var ACTIVE_SEL = '.' + ACTIVE;\n\n var SECTION = 'fp-section';\n var SECTION_SEL = '.' + SECTION;\n var SECTION_ACTIVE_SEL = SECTION_SEL + ACTIVE_SEL;\n\n var SLIDE = 'fp-slide';\n var SLIDE_SEL = '.' + SLIDE;\n var SLIDE_ACTIVE_SEL = SLIDE_SEL + ACTIVE_SEL;\n\n var SLIDES_WRAPPER = 'fp-slides';\n var SLIDES_WRAPPER_SEL = '.' + SLIDES_WRAPPER;\n\n var TABLE_CELL = 'fp-tableCell';\n var TABLE_CELL_SEL = '.' + TABLE_CELL;\n\n var RESPONSIVE = 'fp-responsive';\n var AUTO_HEIGHT_RESPONSIVE= 'fp-auto-height-responsive';\n\n /*\n * Turns iScroll `mousewheel` option off dynamically\n * https://github.com/cubiq/iscroll/issues/1036\n */\n IScroll.prototype.wheelOn = function () {\n this.wrapper.addEventListener('wheel', this);\n this.wrapper.addEventListener('mousewheel', this);\n this.wrapper.addEventListener('DOMMouseScroll', this);\n };\n\n /*\n * Turns iScroll `mousewheel` option on dynamically\n * https://github.com/cubiq/iscroll/issues/1036\n */\n IScroll.prototype.wheelOff = function () {\n this.wrapper.removeEventListener('wheel', this);\n this.wrapper.removeEventListener('mousewheel', this);\n this.wrapper.removeEventListener('DOMMouseScroll', this);\n };\n\n /**\n * Returns an integer representing the padding dimensions in px.\n */\n function getPaddings(element){\n var section = fp_utils.closest(element, SECTION_SEL);\n if(section != null){\n return parseInt(getComputedStyle(section)['padding-bottom']) + parseInt(getComputedStyle(section)['padding-top']);\n }\n return 0;\n }\n\n function scrollBarHandler(){\n var self = this;\n self.options = null;\n\n self.init = function(options, iscrollOptions){\n self.options = options;\n self.iscrollOptions = iscrollOptions;\n\n if(document.readyState === 'complete'){\n createScrollBarForAll();\n fullpage_api.shared.afterRenderActions();\n }\n //after DOM and images are loaded\n window.addEventListener('load', function(){\n createScrollBarForAll();\n fullpage_api.shared.afterRenderActions();\n });\n\n return self;\n };\n\n /**\n * Creates the scrollbar for the sections and slides in the site\n */\n function createScrollBarForAll(){\n if(fp_utils.hasClass(document.body, RESPONSIVE)){\n removeResponsiveScrollOverflows();\n }\n else{\n forEachSectionAndSlide(createScrollBar);\n }\n }\n\n /**\n * Checks if the element needs scrollbar and if the user wants to apply it.\n * If so it creates it.\n *\n * @param {Object} element jQuery object of the section or slide\n */\n function createScrollBar(element){\n //User doesn't want scrollbar here? Sayonara baby!\n if(fp_utils.hasClass(element, 'fp-noscroll')) return;\n\n //necessary to make `scrollHeight` work under Opera 12\n fp_utils.css(element, {'overflow': 'hidden'});\n\n var scrollOverflowHandler = self.options.scrollOverflowHandler;\n var wrap = scrollOverflowHandler.wrapContent();\n var section = fp_utils.closest(element, SECTION_SEL); //in case element is a slide\n var scrollable = scrollOverflowHandler.scrollable(element);\n var contentHeight;\n var paddings = getPaddings(section);\n\n //if there was scroll, the contentHeight will be the one in the scrollable section\n if(scrollable != null){\n contentHeight = scrollOverflowHandler.scrollHeight(element);\n }\n else{\n contentHeight = element.scrollHeight;\n if(self.options.verticalCentered){\n contentHeight = $(TABLE_CELL_SEL, element)[0].scrollHeight;\n }\n }\n\n var scrollHeight = fp_utils.getWindowHeight();\n var contentHeightWidthPaddings = contentHeight + paddings;\n var scrollHeightWidthoutPaddings = scrollHeight - paddings;\n \n //needs scroll?\n if ( contentHeightWidthPaddings > scrollHeight) {\n //did we already have an scrollbar ? Updating it\n if(scrollable != null){\n scrollOverflowHandler.update(element, scrollHeightWidthoutPaddings);\n }\n //creating the scrolling\n else{\n if(self.options.verticalCentered){\n fp_utils.wrapInner($(TABLE_CELL_SEL, element)[0], wrap.scroller);\n fp_utils.wrapInner($(TABLE_CELL_SEL, element)[0], wrap.scrollable);\n }else{\n fp_utils.wrapInner(element, wrap.scroller);\n fp_utils.wrapInner(element, wrap.scrollable);\n }\n scrollOverflowHandler.create(element, scrollHeightWidthoutPaddings, self.iscrollOptions);\n }\n }\n\n //removing the scrolling when it is not necessary anymore\n else{\n scrollOverflowHandler.remove(element);\n }\n\n //undo\n fp_utils.css(element, {'overflow': ''});\n }\n\n /**\n * Applies a callback function to each section in the site\n * or the slides within them\n */\n function forEachSectionAndSlide(callback){\n $(SECTION_SEL).forEach(function(section){\n var slides = $(SLIDE_SEL, section);\n\n if(slides.length){\n slides.forEach(function(slide){\n callback(slide);\n });\n }else{\n callback(section);\n }\n });\n }\n\n /**\n * Removes scrollOverflow for sections using the class `fp-auto-height-responsive`\n */\n function removeResponsiveScrollOverflows(){\n var scrollOverflowHandler = self.options.scrollOverflowHandler;\n forEachSectionAndSlide(function(element){\n if(fp_utils.hasClass( fp_utils.closest(element, SECTION_SEL), AUTO_HEIGHT_RESPONSIVE)){\n scrollOverflowHandler.remove(element);\n }\n });\n }\n\n //public functions\n self.createScrollBarForAll = createScrollBarForAll;\n self.createScrollBar = createScrollBar;\n }\n\n /**\n * An object to handle overflow scrolling.\n * This uses jquery.slimScroll to accomplish overflow scrolling.\n * It is possible to pass in an alternate scrollOverflowHandler\n * to the fullpage.js option that implements the same functions\n * as this handler.\n *\n * @type {Object}\n */\n var $ = null;\n var g_fullpageOptions = null;\n var iscrollHandler = {\n refreshId: null,\n iScrollInstances: [],\n lastScrollY: null,\n\n // Default options for iScroll.js used when using scrollOverflow\n iscrollOptions: {\n scrollbars: true,\n mouseWheel: true,\n hideScrollbars: false,\n fadeScrollbars: false,\n disableMouse: true,\n interactiveScrollbars: true\n },\n\n init: function(options){\n $ = fp_utils.$;\n g_fullpageOptions = options;\n\n var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0) || (navigator.maxTouchPoints));\n\n //fixing bug in iScroll with links: https://github.com/cubiq/iscroll/issues/783\n iscrollHandler.iscrollOptions.click = isTouch; // see #2035\n\n //extending iScroll options with the user custom ones\n iscrollHandler.iscrollOptions = fp_utils.deepExtend(iscrollHandler.iscrollOptions, options.scrollOverflowOptions);\n\n return new scrollBarHandler().init(options, iscrollHandler.iscrollOptions);\n },\n\n // Enables or disables the mouse wheel for the active section or all slides in it\n toggleWheel: function(value){\n var scrollable = $(SCROLLABLE_SEL, $(SECTION_ACTIVE_SEL)[0]);\n scrollable.forEach(function(item){\n var iScrollInstance = item.fp_iscrollInstance;\n if(iScrollInstance != null){\n if(value){\n iScrollInstance.wheelOn();\n }\n else{\n iScrollInstance.wheelOff();\n }\n }\n });\n },\n\n /**\n * Turns off iScroll for the destination section.\n * When scrolling very fast on some trackpads (and Apple laptops) the inertial scrolling would\n * scroll the destination section/slide before the sections animations ends.\n */\n onLeave: function(){\n iscrollHandler.toggleWheel(false);\n },\n\n // Turns off iScroll for the leaving section\n beforeLeave: function(){\n iscrollHandler.onLeave()\n },\n\n // Turns on iScroll on section load\n afterLoad: function(){\n iscrollHandler.toggleWheel(true);\n },\n\n /**\n * Called when overflow scrolling is needed for a section.\n *\n * @param {Object} element jQuery object containing current section\n * @param {Number} scrollHeight Current window height in pixels\n */\n create: function(element, scrollHeight, iscrollOptions) {\n var scrollable = $(SCROLLABLE_SEL, element);\n\n scrollable.forEach(function(item) {\n fp_utils.css(item, {'height': scrollHeight + 'px'});\n\n var iScrollInstance = item.fp_iscrollInstance;\n if (iScrollInstance != null) {\n iscrollHandler.iScrollInstances.forEach(function(instance){\n instance.destroy();\n });\n }\n\n iScrollInstance = new IScroll(item, iscrollOptions);\n iscrollHandler.iScrollInstances.push(iScrollInstance);\n\n if(!fp_utils.hasClass(fp_utils.closest(element, SECTION_SEL), ACTIVE)){\n //off by default until the section gets active\n iScrollInstance.wheelOff();\n }\n\n item.fp_iscrollInstance = iScrollInstance;\n });\n },\n\n /**\n * Return a boolean depending on whether the scrollable element is a\n * the end or at the start of the scrolling depending on the given type.\n *\n * @param {String} type Either 'top' or 'bottom'\n * @param {Object} scrollable jQuery object for the scrollable element\n * @return {Boolean}\n */\n isScrolled: function(type, scrollable) {\n var scroller = scrollable.fp_iscrollInstance;\n\n //no scroller?\n if (!scroller) {\n return true;\n }\n\n // two times reporting the same Y position ? \n // that means we are on the top or on the bottom of the scroller\n if (type === 'top'){\n return scroller.y >= 0 && !fp_utils.getScrollTop(scrollable);\n } else if (type === 'bottom') {\n return (0 - scroller.y) + fp_utils.getScrollTop(scrollable) + scrollable.offsetHeight >= scrollable.scrollHeight;\n }\n },\n\n /**\n * Returns the scrollable element for the given section.\n * If there are landscape slides, will only return a scrollable element\n * if it is in the active slide.\n *\n * @param {Object} activeSection jQuery object containing current section\n * @return {Boolean}\n */\n scrollable: function(activeSection){\n // if there are landscape slides, we check if the scrolling bar is in the current one or not\n if ($(SLIDES_WRAPPER_SEL, activeSection).length) {\n return $(SCROLLABLE_SEL, $(SLIDE_ACTIVE_SEL, activeSection)[0] )[0];\n }\n return $(SCROLLABLE_SEL, activeSection)[0];\n },\n\n /**\n * Returns the scroll height of the wrapped content.\n * If this is larger than the window height minus section padding,\n * overflow scrolling is needed.\n *\n * @param {Object} element jQuery object containing current section\n * @return {Number}\n */\n scrollHeight: function(element) {\n return $('.fp-scroller', $(SCROLLABLE_SEL, element)[0] )[0].scrollHeight;\n },\n\n /**\n * Called when overflow scrolling is no longer needed for a section.\n *\n * @param {Object} element jQuery object containing current section\n */\n remove: function(element) {\n if(element == null) return;\n\n var scrollable = $(SCROLLABLE_SEL, element)[0];\n if (scrollable != null) {\n var iScrollInstance = scrollable.fp_iscrollInstance;\n if(iScrollInstance != null){\n iScrollInstance.destroy();\n }\n\n scrollable.fp_iscrollInstance = null;\n\n //unwrapping...\n fp_utils.unwrap($('.fp-scroller', element)[0]);\n fp_utils.unwrap($(SCROLLABLE_SEL, element)[0]);\n }\n },\n\n /**\n * Called when overflow scrolling has already been setup but the\n * window height has potentially changed.\n *\n * @param {Object} element jQuery object containing current section\n * @param {Number} scrollHeight Current window height in pixels\n */\n update: function(element, scrollHeight) {\n //using a timeout in order to execute the refresh function only once when `update` is called multiple times in a\n //short period of time.\n //it also comes on handy because iScroll requires the use of timeout when using `refresh`.\n clearTimeout(iscrollHandler.refreshId);\n iscrollHandler.refreshId = setTimeout(function(){\n iscrollHandler.iScrollInstances.forEach(function(instance){\n instance.refresh();\n\n //ugly hack that we are forced to use due to the timeout delay\n //otherwise done on the fullpage.js reBuild function\n fullpage_api.silentMoveTo(fp_utils.index($(SECTION_ACTIVE_SEL)[0]) + 1);\n });\n }, 150);\n\n //updating the wrappers height\n fp_utils.css($(SCROLLABLE_SEL, element)[0], {'height': scrollHeight + 'px'});\n\n if(g_fullpageOptions.verticalCentered){\n fp_utils.css($(SCROLLABLE_SEL, element)[0].parentNode, {'height': scrollHeight + 'px'});\n }\n },\n\n /**\n * Called to get any additional elements needed to wrap the section\n * content in order to facilitate overflow scrolling.\n *\n * @return {String|Object} Can be a string containing HTML,\n * a DOM element, or jQuery object.\n */\n wrapContent: function() {\n var scrollable = document.createElement('div');\n scrollable.className = SCROLLABLE;\n\n var scroller = document.createElement('div');\n scroller.className = 'fp-scroller';\n\n return {\n scrollable: scrollable,\n scroller: scroller\n };\n }\n };\n\n return {\n iscrollHandler: iscrollHandler\n };\n })();\n})(window, document);\n\n\n//////////////////\n// WEBPACK FOOTER\n// D:/www/mollers/wp-content/themes/mollers/node_modules/fullpage.js/vendors/scrolloverflow.js\n// module id = 13\n// module chunks = 1 2 3","/*!\r\n * fullpage.js Parallax Effect Extension 0.1.9 for fullPage.js v3\r\n * https://github.com/alvarotrigo/fullPage.js\r\n *\r\n * @license This code has been bought from www.alvarotrigo.com/fullPage/extensions/ and it is not free to use or distribute.\r\n * Copyright (C) 2016 alvarotrigo.com - A project by Alvaro Trigo\r\n */\r\nwindow.fp_parallaxExtension=function(){var f,d,n,c,o,p,s,l,e,t,i=this,a=window.fp_utils,r=window.fullpage_api,u=a,v=a.$,m=r.getFullpageData(),g=m.options,x=m.internals,h=\".fullpage-wrapper\",E=\"active\",b=\".\"+E,S=\".fp-section\",y=S+b,w=\"fp-slide\",L=\".\"+w,A=L+b,M=\"fp-notransition\",N=\".fp-bg\",R=\"reveal\",T=\"cover\",I=\"fp-parallax-stylesheet\",C=\"fp-parallax-transitions\",z=\"#\"+C,O=\"fp-parallax-transition-class\",B=\"#\"+O,H=0,F=!1,k=!1,q=!0,W=!0,_=!1,V=!1,G=!1,X=!1,Y=!1,D=!0===g.parallax||\"slides\"===g.parallax,P=!0===g.parallax||\"sections\"===g.parallax,U=u.closest,$=u.addClass,j=u.removeClass,J=u.hasClass,K=u.css,Q=u.nextAll,Z=u.prevAll;function ee(e){return{cover:{offsetNormal:e?0:d},reveal:{offsetNormal:e?-d:0}}}function te(e){return{cover:{offsetNormal:e?0:n},reveal:{offsetNormal:e?-n:0}}}function ne(e){return e*c/100}function oe(e){return e*o/100}function ie(){return window.innerWidth||document.documentElement.clientWidth||document.getElementsByTagName(\"body\")[0].clientWidth}function ae(){s&&Ae(v(y).length?v(y)[0]:v(S)[0],0)}function re(){if(P){var e=v(y).length?v(y)[0]:v(S)[0],t=f===R,n=t?Q(e):Z(e),o=t?Z(e):Q(e);n.forEach(function(e){Ae(e,ee(t)[f].offsetNormal,\"silent\")}),o.forEach(function(e){Ae(e,0,\"silent\")})}D&&v(S).forEach(function(e){v(L,e).length&&le(v(A,e).length?v(A,e)[0]:v(L,e)[0])})}function le(e){var t=f===R,n=t?Q(e):Z(e),o=t?Z(e):Q(e);n.forEach(function(e){Me(e,te(t)[f].offsetNormal,\"silent\")}),o.forEach(function(e){Me(e,0,\"silent\")})}function se(e){var t=e.detail;o=ie(),t&&!g.scrollBar?(he(),Ee()):be()}function fe(e){i.destroy(),_=!1}function de(){v(\".fp-scrollable\").forEach(function(e){var t=v(N,e)[0];(v(\".fp-scrollable\",e).length||J(e,\"fp-scrollable\"))&&null!=t&&u.prependTo(e.parentNode,t)})}function ce(e){e.detail?be():X=!0}function pe(e){e.detail,v(N).forEach(function(e){e.setAttribute(\"data-final-x\",0),e.setAttribute(\"data-final-y\",0)}),p=v(S),re()}function ue(e){e.detail.leavingSection,e.detail.destination,k=Y=!0}function ve(e){var t=e.detail.leavingSection,n=e.detail.destination;Ae(t,ee(F)[f].offsetNormal,\"silent\");var o=v(L,t);o.length&&o.forEach(function(e){e!==n&&Ae(e,0,\"silent\")}),i.afterSlideLoads(v(L,t)[0]),Y=!1}function me(e){var t=e.detail;V=!0,le(\"left\"===t.xMovement?v(L,v(y)[0])[0]:u.last(v(L,v(y)[0]))),setTimeout(function(){i.applyHorizontal(t)})}function ge(e){var t=e.detail;G=!0,re(),setTimeout(function(){i.apply(t)})}function xe(){_&&(g.scrollBar||!g.autoScrolling||x.usingExtension(\"dragAndMove\"))&&function(){var e=x.usingExtension(\"dragAndMove\")?Math.abs(window.fp_dragAndMoveExtension.getCurrentScroll()):u.getScrollTop(),t=ei+1&&(n=i+1)}var l=(c-(p[n].offsetTop-e))*d/c;f!==R&&(n-=1);var s=f!==R?l:-d+l;-1';\r\n fullPageNav.append(navHTML);\r\n }\r\n\r\n let historyFullpage = new fullpage('#history', {\r\n // Key\r\n licenseKey: 'E02B3FBDB98847A6A2FE0582C69F6DC7',\r\n\r\n // Parallax\r\n parallax: true,\r\n parallaxKey: 'bW9sbGVycy5jb21fRUFXY0dGeVlXeHNZWGc9NU1B',\r\n parallaxOptions: { type: 'cover', percentage: 50, property: 'background' },\r\n\r\n // Easing\r\n css3: true,\r\n easingcss3: 'cubic-bezier(0.645, 0.045, 0.1, 1)',\r\n\r\n // Scrolling\r\n scrollingSpeed: 1000,\r\n fitToSectionDelay: 1000,\r\n autoScrolling: true,\r\n scrollOverflow: true,\r\n normalScrollElements: isMobileStatus,\r\n scrollOverflowReset: true,\r\n scrollOverflowOptions: {\r\n scrollbars: false,\r\n },\r\n\r\n // Dots\r\n // navigation: true,\r\n // navigationPosition: 'right',\r\n // anchors: navList,\r\n // slidesNavigation: true,\r\n // menu: '#parallax-nav',\r\n anchors: (document.getElementById('history').classList.contains('is-mobile')) ? [] : navList,\r\n slideNavigation: (document.getElementById('history').classList.contains('is-mobile')) ? false : true,\r\n menu: '#parallax-nav',\r\n\r\n // events\r\n onLeave(origin, destination, direction) {\r\n\r\n pageHeroBanner.init(origin, destination, direction, 'onLeave');\r\n textImage.init(destination);\r\n\r\n // Special case js\r\n $('.js-btn-scroll, #fp-nav>ul').addClass('navFade'); // <- adds fade effect on navs\r\n\r\n // <- Match up with the plugins scrollingSpeed\r\n setTimeout(() => {\r\n $(origin.item).find('.animated').removeClass('js-animate-completed');\r\n $(destination.item).find('.animated').addClass('js-animate-completed');\r\n }, 300);\r\n\r\n helper.scrollIconCtrl(origin, destination, direction);\r\n\r\n },\r\n\r\n afterLoad(origin, destination, direction) {\r\n // let sections = $('.section');\r\n // sections.css('height', ( parseInt(sections.css('height')) - parseInt($('.navbar').css('height')) ));\r\n\r\n pageHeroBanner.init(origin, destination, direction, 'afterLoad');\r\n\r\n // <- Match up with the plugins scrollingSpeed\r\n setTimeout(() => {\r\n $('.js-btn-scroll, #fp-nav>ul').removeClass('navFade'); // <- adds fade effect on navs\r\n $(destination.item).hasClass('fp-completely') ? $(destination.item).find('.animated').addClass('js-animate-completed') : '';\r\n }, 1000);\r\n\r\n if ($(destination.item).hasClass('js-section-timeline')) {\r\n if (!document.body.classList.contains('ipad')) {\r\n fullpage_api.setAllowScrolling(false);\r\n }\r\n }\r\n\r\n if(destination.item.classList.contains('js-append-footer')) {\r\n helper.observer(destination.index);\r\n let counter = 0;\r\n $(window).on('mousewheel DOMMouseScroll', function(event){\r\n if(destination.item.classList.contains('js-append-footer')) {\r\n helper.observer(destination.index);\r\n let deltaY = event.originalEvent.wheelDelta;\r\n let detailY = event.originalEvent.detail;\r\n if(deltaY === 120) {\r\n if($('.js-append-footer .fp-scroller').css('transform') == 'matrix(1, 0, 0, 1, 0, 0)') {\r\n // fullpage_api.moveTo(destination.index);\r\n counter++;\r\n if(counter > 1 && counter < 2) {\r\n window.requestAnimationFrame(function () { fullpage_api.moveSectionUp() });\r\n }\r\n // fullpage_api.moveSectionUp();\r\n fullpage_api.setAllowScrolling(true);\r\n }\r\n }\r\n }\r\n });\r\n } else {\r\n fullpage_api.setAllowScrolling(true);\r\n }\r\n\r\n var nav = document.getElementById('js-head');\r\n var body = document.getElementsByTagName('body')[0];\r\n\r\n body.classList.add('is-fullpage');\r\n\r\n if (direction == 'down') {\r\n nav.classList.add('slideUp');\r\n nav.classList.remove('slideDown');\r\n } else {\r\n nav.classList.add('slideDown');\r\n nav.classList.remove('slideUp');\r\n }\r\n },\r\n });\r\n\r\n // $(window).innerWidth() <= 979.98 ? fullpage_api.setAutoScrolling(false) : fullpage_api.setAutoScrolling(true);\r\n\r\n fullpage_api.setAutoScrolling(true);\r\n fullpage_api.setFitToSection(false);\r\n fullpage_api.setAllowScrolling(true);\r\n fullpage_api.parallax.init();\r\n },\r\n mobile() {\r\n new fullpage('#history', {\r\n // Key\r\n licenseKey: 'E02B3FBDB98847A6A2FE0582C69F6DC7',\r\n parallax: true,\r\n parallaxKey: 'bW9sbGVycy5jb21fRUFXY0dGeVlXeHNZWGc9NU1B',\r\n autoScrolling: false,\r\n css3: true,\r\n easingcss3: 'linear',\r\n scrollOverflow: true,\r\n touchSensitivity: 15,\r\n parallaxOptions: { type: 'cover', percentage: 20, property: 'translate' },\r\n });\r\n\r\n //changing the value for the property `type`\r\n // fullpage_api.parallax.setOption('type', 'cover');\r\n //changing the value for the property `percentage`\r\n // fullpage_api.parallax.setOption({\r\n // type: 'cover',\r\n // percentage: '30',\r\n // });\r\n fullpage_api.parallax.init();\r\n },\r\n bannerBgMobile() {\r\n if ($(window).innerWidth() <= 979.98) {\r\n\r\n $('.js-full-banner').css({\r\n 'background-image': `url(${$('.js-full-banner').data('bg')})`\r\n });\r\n\r\n } else {\r\n $('.js-full-banner').css({\r\n 'background-image': ``\r\n });\r\n }\r\n }\r\n}\r\n\r\n$(function () {\r\n History.init();\r\n timeline.init();\r\n History.bannerBgMobile();\r\n\r\n $(window).resize(function () {\r\n timeline.init();\r\n History.bannerBgMobile();\r\n });\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/featured/history/index.js","import OverlayScrollbars from \"overlayscrollbars\";\r\nrequire('jquery-watch');\r\n\r\nexport let timeline = {};\r\n\r\nlet currentEle;\r\nlet currentEleBar;\r\nlet currentFontSize;\r\nlet showMoreStatus = false;\r\nlet startIndex = 0;\r\nlet numIndex = 8;\r\nlet lastIndex = numIndex;\r\nlet allowScroll = 0;\r\nlet allowScroll2 = 0;\r\nlet scrollDirection = 'down';\r\nlet wasStop = false;\r\nlet wasStop2 = false;\r\nlet counter = 0;\r\nlet counter2 = 0;\r\n\r\ntimeline.init = () => {\r\n currentFontSize = timeline.getComputedStyle('year-container', 'line-height');\r\n timeline.setId('timeline-bar-item', 'fortl');\r\n timeline.setId('year-container', 'year');\r\n timeline.viewportEvent('timeline-card');\r\n timeline.hider('timeline-card');\r\n timeline.hider('timeline-bar-item');\r\n timeline.initialSetter('timeline-card');\r\n timeline.observer();\r\n timeline.viewerSetHeight();\r\n\r\n OverlayScrollbars(document.getElementById('js-scrollbar'), {\r\n scrollbars: {\r\n \"visibility\": \"hidden\",\r\n \"dragScrolling\": true,\r\n \"touchSupport\": true,\r\n },\r\n callbacks: {\r\n onScroll() {\r\n // timeline.forceScroll();\r\n },\r\n onScrollStop() {\r\n timeline.viewportEvent('timeline-card');\r\n timeline.checkingLast('timeline-card');\r\n }\r\n },\r\n });\r\n\r\n timeline.showContent('js-btn-show', 'timeline-card');\r\n\r\n if (window.innerWidth < 979) {\r\n timeline.setHeightMobile();\r\n }\r\n\r\n if (window.innerWidth < 1025) {\r\n if (document.body.classList.contains('ipad')) {\r\n timeline.setHeightMobile();\r\n }\r\n }\r\n\r\n // Controls the scrolling inside the section\r\n // $('.js-scrollbar').on('wheel', function (e) {\r\n\r\n // if (e.originalEvent.wheelDeltaY < 0) {\r\n\r\n // if (e.originalEvent.wheelDeltaY < -125) {\r\n // fullpage_api.setAllowScrolling(true);\r\n // }\r\n\r\n // OverlayScrollbars(document.getElementById('js-scrollbar')).scroll({\r\n // y: \"+=100\"\r\n // });\r\n // }\r\n\r\n // if (e.originalEvent.wheelDeltaY > 0) {\r\n\r\n // if (e.originalEvent.wheelDeltaY > 125) {\r\n // fullpage_api.setAllowScrolling(true);\r\n // }\r\n\r\n // OverlayScrollbars(document.getElementById('js-scrollbar')).scroll({\r\n // y: \"-=100\"\r\n // });\r\n // }\r\n\r\n // });\r\n\r\n\r\n\r\n if(document.body.classList.contains('firefox')) {\r\n document.getElementsByClassName('js-scrollbar')[0].addEventListener('DOMMouseScroll', function(e) {\r\n // console.log(e);\r\n if(e.detail <= -3) {\r\n scrollDirection = 'up';\r\n // if (e.originalEvent.wheelDeltaY > 125) {\r\n // fullpage_api.setAllowScrolling(true);\r\n // }\r\n // console.log('here2');\r\n\r\n // console.log(scrollDirection);\r\n // console.log(allowScroll2);\r\n // console.log(wasStop2);\r\n if (scrollDirection == 'up') {\r\n if (allowScroll2 == 1) {\r\n if (wasStop2) {\r\n // setTimeout(function() {\r\n // fullpage_api.moveSectionUp();\r\n // fullpage_api.setAllowScrolling(true);\r\n // console.log('moving asdasdoUpn');\r\n // }, 100);\r\n\r\n counter2++;\r\n if (counter2 > 1 && counter2 < 20) {\r\n // fullpage_api.moveSectionUp();\r\n fullpage_api.moveTo(3);\r\n fullpage_api.setAllowScrolling(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(e.detail > -3) {\r\n scrollDirection = 'down';\r\n // if (e.originalEvent.wheelDeltaY < -125) {\r\n // fullpage_api.setAllowScrolling(true);\r\n // }\r\n\r\n // console.log('here');\r\n // console.log(scrollDirection);\r\n // console.log(allowScroll);\r\n // console.log(wasStop);\r\n\r\n if (scrollDirection == 'down') {\r\n if (allowScroll == 1) {\r\n if (wasStop) {\r\n counter++;\r\n // console.log(counter);\r\n if (counter > 1 && counter < 20) {\r\n fullpage_api.moveTo(5);\r\n fullpage_api.setAllowScrolling(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n } else if(document.body.classList.contains('msie')) {\r\n\r\n $('.js-scrollbar').on('DOMMouseScroll mousewheel wheel', function (e) {\r\n // console.log(e);\r\n if(e.originalEvent.deltaY < 0) {\r\n scrollDirection = 'up';\r\n // if (e.originalEvent.wheelDeltaY > 125) {\r\n // fullpage_api.setAllowScrolling(true);\r\n // }\r\n // console.log('here2');\r\n\r\n // console.log(scrollDirection);\r\n // console.log(allowScroll2);\r\n // console.log(wasStop2);\r\n if (scrollDirection == 'up') {\r\n if (allowScroll2 == 1) {\r\n if (wasStop2) {\r\n // setTimeout(function() {\r\n // fullpage_api.moveSectionUp();\r\n // fullpage_api.setAllowScrolling(true);\r\n // console.log('moving asdasdoUpn');\r\n // }, 100);\r\n\r\n counter2++;\r\n if (counter2 > 1 && counter2 < 20) {\r\n // fullpage_api.moveSectionUp();\r\n fullpage_api.moveTo(3);\r\n fullpage_api.setAllowScrolling(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(e.originalEvent.deltaY > 0) {\r\n scrollDirection = 'down';\r\n // if (e.originalEvent.wheelDeltaY < -125) {\r\n // fullpage_api.setAllowScrolling(true);\r\n // }\r\n\r\n // console.log('here');\r\n // console.log(scrollDirection);\r\n // console.log(allowScroll);\r\n // console.log(wasStop);\r\n\r\n if (scrollDirection == 'down') {\r\n if (allowScroll == 1) {\r\n if (wasStop) {\r\n counter++;\r\n // console.log(counter);\r\n if (counter > 1 && counter < 20) {\r\n fullpage_api.moveTo(5);\r\n fullpage_api.setAllowScrolling(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n } else {\r\n $('.js-scrollbar').on('wheel', function (e) {\r\n // console.log(e.originalEvent.deltaY);\r\n if (e.originalEvent.wheelDeltaY < 0) {\r\n scrollDirection = 'down';\r\n // console.log('was down');\r\n // if (e.originalEvent.wheelDeltaY < -125) {\r\n // fullpage_api.setAllowScrolling(true);\r\n // }\r\n\r\n // console.log('here');\r\n // console.log(scrollDirection);\r\n // console.log(allowScroll);\r\n // console.log(wasStop);\r\n\r\n if (scrollDirection == 'down') {\r\n if (allowScroll == 1) {\r\n if (wasStop) {\r\n counter++;\r\n // console.log(counter);\r\n if (counter > 1 && counter < 20) {\r\n fullpage_api.moveTo(5);\r\n fullpage_api.setAllowScrolling(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (e.originalEvent.wheelDeltaY > 0) {\r\n scrollDirection = 'up';\r\n // if (e.originalEvent.wheelDeltaY > 125) {\r\n // fullpage_api.setAllowScrolling(true);\r\n // }\r\n // console.log('here2');\r\n\r\n // console.log(scrollDirection);\r\n // console.log(allowScroll2);\r\n // console.log(wasStop2);\r\n if (scrollDirection == 'up') {\r\n if (allowScroll2 == 1) {\r\n if (wasStop2) {\r\n // setTimeout(function() {\r\n // fullpage_api.moveSectionUp();\r\n // fullpage_api.setAllowScrolling(true);\r\n // console.log('moving asdasdoUpn');\r\n // }, 100);\r\n\r\n counter2++;\r\n if (counter2 > 1 && counter2 < 20) {\r\n // fullpage_api.moveSectionUp();\r\n fullpage_api.moveTo(3);\r\n fullpage_api.setAllowScrolling(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n\r\n\r\n // fullpage_api.setAllowScrolling(true);\r\n\r\n}\r\n\r\n\r\ntimeline.checkingLast = (e) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (!ele) return;\r\n\r\n for (let i = 0; i < ele.length; i++) {\r\n if (!ele[i].classList.contains('is-hidden')) {\r\n\r\n if (i == ele.length - 1) {\r\n numIndex = ele[i].id.replace('tl', '');\r\n }\r\n\r\n if (ele[i].classList.contains('is-active')) {\r\n if (currentEle == ele[i].id) {\r\n if (numIndex == ele[i].id.replace('tl', '')) {\r\n allowScroll = 1;\r\n wasStop = true;\r\n scrollDirection = 'down';\r\n fullpage_api.setAllowScrolling(true);\r\n } else {\r\n fullpage_api.setAllowScrolling(false);\r\n allowScroll = 0;\r\n wasStop = false;\r\n counter = 0;\r\n }\r\n\r\n if (startIndex == ele[i].id.replace('tl', '')) {\r\n allowScroll2 = 1;\r\n scrollDirection = 'up';\r\n fullpage_api.setAllowScrolling(true);\r\n wasStop2 = true;\r\n } else {\r\n fullpage_api.setAllowScrolling(false);\r\n allowScroll2 = 0;\r\n wasStop2 = false;\r\n counter2 = 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (i > 10000) break;\r\n }\r\n}\r\n\r\ntimeline.getComputedStyle = (e, styleProp) => {\r\n let el = document.getElementsByClassName(e)[0];\r\n if (!el) return;\r\n let camelize = function (str) {\r\n return str.replace(/\\-(\\w)/g, function (str, letter) {\r\n return letter.toUpperCase();\r\n });\r\n };\r\n\r\n if (el.currentStyle) {\r\n return el.currentStyle[camelize(styleProp)];\r\n } else if (document.defaultView && document.defaultView.getComputedStyle) {\r\n return document.defaultView.getComputedStyle(el, null)\r\n .getPropertyValue(styleProp);\r\n } else {\r\n return el.style[camelize(styleProp)];\r\n }\r\n}\r\n\r\ntimeline.setId = (e, name) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (!ele) return;\r\n\r\n for (let i = 0; i < ele.length; i++) {\r\n ele[i].id = name + i;\r\n if (name == 'year') {\r\n ele[i].style.height = currentFontSize;\r\n }\r\n }\r\n}\r\n\r\ntimeline.initialSetter = (e) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (!ele) return;\r\n\r\n for (let i = 0; i < ele.length; i++) {\r\n\r\n if (!ele[i].classList.contains('is-hidden')) {\r\n if (ele[i].classList.contains('is-active')) {\r\n currentEle = ele[i].id;\r\n // ele[i].classList.add('is-active');\r\n document.getElementById('for' + ele[i].id).classList.add('is-active');\r\n currentEleBar = 'for' + ele[i].id;\r\n timeline.getCurrentYear(ele[i]);\r\n timeline.relativeTimeBar(currentEle);\r\n timeline.checker('timeline-card', currentEle);\r\n timeline.checker('timeline-bar-item', currentEleBar);\r\n }\r\n }\r\n }\r\n}\r\n\r\ntimeline.viewportEvent = (e, bol) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (!ele) return;\r\n\r\n for (let i = 0; i < ele.length; i++) {\r\n ele[i].id = \"tl\" + i;\r\n // console.log(timeline.viewportDetector(ele[i], 'js-scrollbar'));\r\n\r\n if (!ele[i].classList.contains('is-hidden')) {\r\n\r\n if (timeline.viewportDetector(ele[i], 'js-vd')) {\r\n if (!ele[i].classList.contains('is-active')) {\r\n currentEle = ele[i].id;\r\n ele[i].classList.add('is-active');\r\n document.getElementById('for' + ele[i].id).classList.add('is-active');\r\n currentEleBar = 'for' + ele[i].id;\r\n timeline.getCurrentYear(ele[i]);\r\n timeline.relativeTimeBar(currentEle);\r\n timeline.checker('timeline-card', currentEle);\r\n timeline.checker('timeline-bar-item', currentEleBar);\r\n fullpage_api.setAllowScrolling(false);\r\n counter = 0;\r\n // console.log(fullpage_api);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\ntimeline.relativeTimeBar = (e) => {\r\n let removedString = currentEle.replace('tl', '');\r\n let parsedString = parseInt(removedString);\r\n let ele = document.getElementsByClassName('timeline-bar-item');\r\n let isMiddle = (ele.length > 17) ? true : false;\r\n\r\n if (showMoreStatus) {\r\n // let temptIndex = lastIndex + numIndex;\r\n // let finalIndex = lastIndex;\r\n // console.log(\"parsedString: \" + parsedString);\r\n // console.log(\"lastIndex: \" + lastIndex);\r\n // if(parsedString < lastIndex) {\r\n // temptIndex = lastIndex + numIndex;\r\n // console.log(\">>> \" + temptIndex);\r\n // } else {\r\n // temptIndex = lastIndex - numIndex;\r\n // console.log(\">> \" + temptIndex);\r\n // }\r\n\r\n\r\n for (let i = 0; i < ele.length; i++) {\r\n\r\n if (parsedString <= 8) {\r\n if (i > 8) {\r\n ele[i].classList.add('is-hidden');\r\n trailDotsFirst.style.display = \"none\";\r\n } else {\r\n ele[i].classList.remove('is-hidden');\r\n traitDotSecond.style.display = \"block\";\r\n }\r\n\r\n startIndex = 0;\r\n }\r\n\r\n if (parsedString > 8) {\r\n if (i > 8 && i <= 17) {\r\n ele[i].classList.remove('is-hidden');\r\n trailDotsFirst.style.display = \"block\";\r\n } else {\r\n ele[i].classList.add('is-hidden');\r\n traitDotSecond.style.display = \"none\";\r\n }\r\n\r\n startIndex = 8;\r\n\r\n if (isMiddle) {\r\n traitDotSecond.style.display = \"block\";\r\n trailDotsFirst.style.display = \"block\";\r\n }\r\n }\r\n\r\n if (parsedString > 17) {\r\n if (i > 17 && i <= 27) {\r\n ele[i].classList.remove('is-hidden');\r\n trailDotsFirst.style.display = \"block\";\r\n traitDotSecond.style.display = \"none\";\r\n } else {\r\n ele[i].classList.add('is-hidden');\r\n traitDotSecond.style.display = \"none\";\r\n }\r\n\r\n startIndex = 17;\r\n }\r\n\r\n // if(parsedString > 16 && i < 26) {\r\n // if (i < 17) {\r\n // ele[i].classList.add('is-hidden');\r\n // trailDotsFirst.style.display = \"block\";\r\n // } else {\r\n // ele[i].classList.remove('is-hidden');\r\n // traitDotSecond.style.display = \"none\";\r\n // }\r\n // }\r\n\r\n\r\n // if (i > lastIndex && i < temptIndex) {\r\n // finalIndex = i;\r\n // ele[i].classList.remove('is-hidden');\r\n // } else {\r\n // ele[i].classList.add('is-hidden');\r\n // }\r\n\r\n }\r\n\r\n // if (finalIndex === parsedString) {\r\n // lastIndex = finalIndex;\r\n // }\r\n }\r\n}\r\n\r\ntimeline.checker = (e, curr) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (!ele) return;\r\n\r\n for (let i = 0; i < ele.length; i++) {\r\n if (ele[i].id !== curr) {\r\n ele[i].classList.remove('is-active');\r\n }\r\n\r\n if (i > 10000) break;\r\n }\r\n}\r\n\r\ntimeline.getCurrentYear = (e) => {\r\n let childArr = e.children;\r\n for (let i = 0; i < childArr.length; i++) {\r\n if (childArr[i].classList.contains('timeline-title')) {\r\n timeline.setData(childArr[i], e);\r\n }\r\n }\r\n}\r\n\r\ntimeline.setData = (e, parent) => {\r\n // let cleanTxt = e.innerText.replace(/ +/g, \"\") || e.textContent.replace(/ +/g, \"\");\r\n let cleanTxt = e.dataset.year;\r\n let finalTxt = cleanTxt.split('');\r\n timeline.setTime(parent.dataset.yearLength, finalTxt);\r\n // console.log(finalTxt);\r\n}\r\n\r\ntimeline.setTime = (e, fintxt) => {\r\n let iter;\r\n let eNum = 5;\r\n let wasFour = false;\r\n currentFontSize = currentFontSize.replace('px', '');\r\n\r\n if (e == 5) {\r\n iter = 0;\r\n } else {\r\n iter = 1;\r\n }\r\n\r\n for (let i = iter; i < eNum; i++) {\r\n if (e == 4) {\r\n if (i == 4 || i == 3) {\r\n document.getElementById('year' + i).children[0].style.transform = \"translate(0, -\" + ((parseInt(fintxt[i - 1]) + 1) * currentFontSize) + \"px)\";\r\n } else {\r\n document.getElementById('year' + i).children[0].style.transform = \"translate(0, -\" + ((parseInt(fintxt[i - 1])) * currentFontSize) + \"px)\";\r\n }\r\n\r\n let num = document.getElementById('year0').children[0].children.length;\r\n document.getElementById('year0').children[0].style.transform = \"translate(0, -\" + (num * currentFontSize) + \"px)\";\r\n wasFour = true;\r\n } else {\r\n if (i == 4 || i == 3) {\r\n if (!wasFour) {\r\n if (i == 3) {\r\n document.getElementById('year' + i).children[0].style.transform = \"translate(0, -\" + (fintxt[i - 1] * currentFontSize) + \"px)\";\r\n }\r\n if (i == 4) {\r\n document.getElementById('year' + i).children[0].style.transform = \"translate(0, -\" + (fintxt[i - 2] * currentFontSize) + \"px)\";\r\n }\r\n }\r\n } else {\r\n document.getElementById('year' + i).children[0].style.transform = \"translate(0, -\" + (fintxt[i] * currentFontSize) + \"px)\";\r\n }\r\n }\r\n }\r\n}\r\n\r\ntimeline.viewportDetector = (e, pEle) => {\r\n let bounding = e.getBoundingClientRect();\r\n let heiLM;\r\n let heiDM;\r\n // console.log(pEle);\r\n\r\n if (window.innerWidth > 1775) {\r\n heiLM = Math.floor(document.getElementById(pEle).offsetHeight / 4);\r\n heiDM = Math.floor(document.getElementById(pEle).offsetHeight / 2);\r\n }\r\n\r\n if (window.innerWidth > 1499) {\r\n heiLM = Math.floor(document.getElementById(pEle).offsetHeight / 3);\r\n heiDM = Math.floor(document.getElementById(pEle).offsetHeight / 2);\r\n }\r\n\r\n if (window.innerWidth < 1080) {\r\n heiLM = Math.floor(document.getElementById(pEle).offsetHeight / 3.5);\r\n heiDM = Math.floor(document.getElementById(pEle).offsetHeight / 5);\r\n }\r\n\r\n // console.log(document.getElementById(pEle).offsetHeight);\r\n\r\n // console.log(bounding.top);\r\n if (bounding.top < document.getElementById(pEle).offsetHeight) {\r\n // console.log(e);\r\n return true\r\n }\r\n\r\n // if (document.getElementById(pEle).offsetHeight < bounding.top && bounding.top < document.getElementById(pEle).offsetHeight) {\r\n // return true\r\n // }\r\n\r\n // if(bounding.top >= 0 &&\r\n // bounding.left >= 0 &&\r\n // bounding.bottom <= (window.innerHeight || document.getElementById(pEle).clientHeight) &&\r\n // bounding.right <= (window.innerWidth || document.getElementById(pEle).clientWidth)) {\r\n // console.log('tae');\r\n // }\r\n}\r\n\r\ntimeline.hider = (e, btn) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (ele.length > 8) {\r\n for (let i = 0; i < ele.length; i++) {\r\n if (i > 8) {\r\n ele[i].classList.add('is-hidden');\r\n }\r\n }\r\n }\r\n}\r\n\r\ntimeline.show = (e) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (ele.length > 8) {\r\n for (let i = 0; i < ele.length; i++) {\r\n if (i > 8) {\r\n if (ele[i].classList.contains('is-hidden')) {\r\n ele[i].classList.remove('is-hidden');\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\ntimeline.showContent = (btn, e) => {\r\n let ele = document.getElementsByClassName(btn);\r\n\r\n for (let i = 0; i < ele.length; i++) {\r\n ele[i].addEventListener('click', function () {\r\n timeline.show(e);\r\n timeline.barShow('timeline-bar-item');\r\n this.style.display = \"none\";\r\n showMoreStatus = true;\r\n });\r\n }\r\n}\r\n\r\ntimeline.barShow = (e) => {\r\n let ele = document.getElementsByClassName(e);\r\n let isMiddle = (ele.length > 17) ? true : false;\r\n\r\n if (ele.length > 8) {\r\n for (let i = 0; i < ele.length; i++) {\r\n if (i > 8 && i <= 17) {\r\n if (ele[i].classList.contains('is-hidden')) {\r\n ele[i].classList.remove('is-hidden');\r\n traitDotSecond.style.display = \"none\";\r\n }\r\n\r\n if (isMiddle) {\r\n traitDotSecond.style.display = \"block\";\r\n // traitDotSecond.style.display = \"none\";\r\n }\r\n }\r\n\r\n if (i <= 8) {\r\n ele[i].classList.add('is-hidden');\r\n trailDotsFirst.style.display = \"block\";\r\n }\r\n }\r\n }\r\n\r\n // let temptIndex = lastIndex + numIndex;\r\n // let finalIndex = lastIndex;\r\n // for (let i = 0; i < ele.length; i++) {\r\n // if (i >= lastIndex && i < temptIndex) {\r\n // finalIndex = i;\r\n // ele[i].classList.remove('is-hidden');\r\n // traitDotSecond.style.display = \"block\";\r\n // } else {\r\n // ele[i].classList.add('is-hidden');\r\n // trailDotsFirst.style.display = \"none\";\r\n // }\r\n // }\r\n\r\n // lastIndex = finalIndex;\r\n}\r\n\r\ntimeline.setHeightMobile = () => {\r\n let mediaHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\r\n let ele = document.getElementsByClassName('js-mobile-timeline');\r\n if (!ele) return;\r\n for (let i = 0; i < ele.length; i++) {\r\n // ele[i].style.maxHeight = mediaHeight + \"px\";\r\n // ele[i].style.overflowY = \"auto\";\r\n }\r\n\r\n timeline.hideMobile('js-timeline-card-mobile');\r\n timeline.showContentMobile('js-btn-show-mobile', 'js-timeline-card-mobile');\r\n}\r\n\r\ntimeline.hideMobile = (e) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (ele.length > 5) {\r\n for (let i = 0; i < ele.length; i++) {\r\n if (i > 4) {\r\n ele[i].classList.add('is-hidden');\r\n }\r\n }\r\n }\r\n}\r\n\r\ntimeline.showMobile = (e) => {\r\n let ele = document.getElementsByClassName(e);\r\n if (ele.length > 5) {\r\n for (let i = 0; i < ele.length; i++) {\r\n if (i > 4) {\r\n if (ele[i].classList.contains('is-hidden')) {\r\n ele[i].classList.remove('is-hidden');\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\ntimeline.showContentMobile = (btn, e) => {\r\n let ele = document.getElementsByClassName(btn);\r\n\r\n for (let i = 0; i < ele.length; i++) {\r\n ele[i].addEventListener('click', function () {\r\n timeline.showMobile(e);\r\n this.style.display = \"none\";\r\n fullpage_api.reBuild();\r\n });\r\n }\r\n}\r\n\r\ntimeline.observer = () => {\r\n setTimeout(() => {\r\n $(\".js-section-timeline .fp-scroller\").watch({\r\n // specify CSS styles or attribute names to monitor\r\n properties: \"transform\",\r\n\r\n // callback function when a change is detected\r\n callback: function (data, i) {\r\n let self, styleString;\r\n self = $(this);\r\n styleString = self.attr('style');\r\n\r\n if (styleString.includes('translate(0px, 0px)')) {\r\n // fullpage_api.moveSectionUp();\r\n fullpage_api.moveTo(3);\r\n }\r\n }\r\n });\r\n }, 500);\r\n}\r\n\r\ntimeline.viewerSetHeight = () => {\r\n // let me = document.getElementById('tl0').offsetHeight + document.getElementsByClassName('section-title')[0].offsetHeight + timeline.computeMargin(document.getElementById('tl0')) + timeline.computeMargin(document.getElementsByClassName('section-title')[0]);\r\n\r\n let initialCompute = document.getElementById('tl0').offsetHeight + document.getElementsByClassName('section-title')[0].offsetHeight + timeline.computeMargin(document.getElementById('tl0')) + timeline.computeMargin(document.getElementsByClassName('section-title')[0]);\r\n let finalComp;\r\n if(document.body.classList.contains('msie')) {\r\n finalComp = initialCompute - 75;\r\n } else {\r\n finalComp = initialCompute;\r\n }\r\n document.getElementById('js-vd').style.height = finalComp + \"px\";\r\n}\r\n\r\ntimeline.computeMargin = (e) => {\r\n let comptSyle = window.getComputedStyle(e);\r\n let comptStyleTop = Number(comptSyle.marginTop.replace('px', ''));\r\n let comptStyleBottom = Number(comptSyle.marginBottom.replace('px', ''));\r\n let final = comptStyleTop + comptStyleBottom;\r\n\r\n return final;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/featured/history/modules/timeline.js","let bottleSlider = {};\r\n\r\nbottleSlider.init = () => {\r\n let $slider = $('.js-bottle-slider');\r\n let cellAlign = 'center';\r\n if (!$slider) return;\r\n // console.log('init');\r\n\r\n if (window.innerWidth > 767) {\r\n cellAlign = 'center';\r\n } else {\r\n cellAlign = 'left';\r\n }\r\n\r\n $slider.flickity({\r\n pageDots: true,\r\n contain: true,\r\n cellAlign: cellAlign,\r\n percentPosition: false,\r\n dragThreshold: 10,\r\n prevNextButtons: $(window).innerWidth() >= 979.98,\r\n groupCells: false,\r\n freeScroll: false,\r\n wrapAround: true,\r\n autoPlay: true,\r\n pauseAutoPlayOnHover: false\r\n });\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', function (event) {\r\n bottleSlider.init();\r\n\r\n window.addEventListener('resize', () => {\r\n bottleSlider.init();\r\n });\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/featured/history/modules/bottle_slider.js","let fullThumbnailSlider = {};\r\n\r\nfullThumbnailSlider.init = () => {\r\n let $slider = $('.js-full-thumbnail-slider');\r\n let cellAlign = 'center';\r\n if (!$slider) return;\r\n\r\n if (window.innerWidth > 767) {\r\n cellAlign = 'center';\r\n } else {\r\n cellAlign = 'left';\r\n }\r\n\r\n $slider.flickity({\r\n pageDots: true,\r\n contain: true,\r\n cellAlign: cellAlign,\r\n // percentPosition: false,\r\n dragThreshold: 10,\r\n prevNextButtons: false,\r\n groupCells: false,\r\n freeScroll: false,\r\n wrapAround: true,\r\n autoPlay: true,\r\n pauseAutoPlayOnHover: false\r\n });\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', function (event) {\r\n fullThumbnailSlider.init();\r\n\r\n window.addEventListener('resize', () => {\r\n fullThumbnailSlider.init();\r\n });\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/featured/history/modules/full_thumbnail_slider.js","/*!\n * OverlayScrollbars\n * https://github.com/KingSora/OverlayScrollbars\n *\n * Version: 1.10.0\n *\n * Copyright KingSora | Rene Haas.\n * https://github.com/KingSora\n *\n * Released under the MIT license.\n * Date: 11.10.2019\n */\n\n(function (global, factory) {\n if (typeof define === 'function' && define.amd)\n define(function() { return factory(global, global.document, undefined); });\n else if (typeof module === 'object' && typeof module.exports === 'object')\n module.exports = factory(global, global.document, undefined);\n else\n factory(global, global.document, undefined);\n}(typeof window !== 'undefined' ? window : this,\n function(window, document, undefined) {\n 'use strict';\n var PLUGINNAME = 'OverlayScrollbars';\n var TYPES = {\n o : 'object',\n f : 'function',\n a : 'array',\n s : 'string',\n b : 'boolean',\n n : 'number',\n u : 'undefined',\n z : 'null'\n //d : 'date',\n //e : 'error',\n //r : 'regexp',\n //y : 'symbol'\n };\n var LEXICON = {\n c : 'class',\n s : 'style',\n i : 'id',\n l : 'length',\n p : 'prototype',\n oH : 'offsetHeight',\n cH : 'clientHeight',\n sH : 'scrollHeight',\n oW : 'offsetWidth',\n cW : 'clientWidth',\n sW : 'scrollWidth',\n hOP : 'hasOwnProperty',\n bCR : 'getBoundingClientRect'\n };\n var VENDORS = (function() {\n //https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\n var jsCache = { };\n var cssCache = { };\n var cssPrefixes = ['-webkit-', '-moz-', '-o-', '-ms-'];\n var jsPrefixes = ['WebKit', 'Moz', 'O', 'MS'];\n function firstLetterToUpper(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n \n return {\n _cssPrefixes: cssPrefixes,\n _jsPrefixes: jsPrefixes,\n _cssProperty : function(name) {\n var result = cssCache[name];\n \n if(cssCache[LEXICON.hOP](name))\n return result;\n\n var uppercasedName = firstLetterToUpper(name);\n var elmStyle = document.createElement('div')[LEXICON.s];\n var resultPossibilities;\n var i = 0;\n var v;\n var currVendorWithoutDashes;\n\n for (; i < cssPrefixes.length; i++) {\n currVendorWithoutDashes = cssPrefixes[i].replace(/-/g, '');\n resultPossibilities = [\n name, //transition\n cssPrefixes[i] + name, //-webkit-transition\n currVendorWithoutDashes + uppercasedName, //webkitTransition\n firstLetterToUpper(currVendorWithoutDashes) + uppercasedName //WebkitTransition\n ];\n for(v = 0; v < resultPossibilities[LEXICON.l]; v++) {\n if(elmStyle[resultPossibilities[v]] !== undefined) {\n result = resultPossibilities[v];\n break;\n }\n }\n }\n \n cssCache[name] = result;\n return result;\n },\n _jsAPI : function(name, isInterface, fallback) {\n var i = 0;\n var result = jsCache[name];\n \n if(!jsCache[LEXICON.hOP](name)) {\n result = window[name];\n for(; i < jsPrefixes[LEXICON.l]; i++)\n result = result || window[(isInterface ? jsPrefixes[i] : jsPrefixes[i].toLowerCase()) + firstLetterToUpper(name)];\n jsCache[name] = result;\n }\n return result || fallback;\n }\n \n }\n })();\n var COMPATIBILITY = (function() {\n function windowSize(x) {\n return x ? window.innerWidth || document.documentElement[LEXICON.cW] || document.body[LEXICON.cW] : window.innerHeight || document.documentElement[LEXICON.cH] || document.body[LEXICON.cH];\n }\n function bind(func, thisObj) {\n if (typeof func != TYPES.f) {\n throw \"Can't bind function!\";\n // closest thing possible to the ECMAScript 5\n // internal IsCallable function\n //throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n var proto = LEXICON.p;\n var aArgs = Array[proto].slice.call(arguments, 2);\n var fNOP = function() {};\n var fBound = function() { return func.apply(this instanceof fNOP ? this : thisObj, aArgs.concat(Array[proto].slice.call(arguments))); };\n\n if (func[proto])\n fNOP[proto] = func[proto]; // Function.prototype doesn't have a prototype property\n fBound[proto] = new fNOP();\n\n return fBound;\n }\n \n return {\n /**\n * Gets the current window width.\n * @returns {Number|number} The current window width in pixel.\n */\n wW: bind(windowSize, 0, true),\n\n /**\n * Gets the current window height.\n * @returns {Number|number} The current window height in pixel.\n */\n wH: bind(windowSize, 0),\n\n /**\n * Gets the MutationObserver Object or undefined if not supported.\n * @returns {MutationObserver|*|undefined} The MutationsObserver Object or undefined.\n */\n mO: bind(VENDORS._jsAPI, 0, 'MutationObserver', true),\n\n /**\n * Gets the ResizeObserver Object or undefined if not supported.\n * @returns {MutationObserver|*|undefined} The ResizeObserver Object or undefined.\n */\n rO: bind(VENDORS._jsAPI, 0, 'ResizeObserver', true),\n\n /**\n * Gets the RequestAnimationFrame method or it's corresponding polyfill.\n * @returns {*|Function} The RequestAnimationFrame method or it's corresponding polyfill.\n */\n rAF: bind(VENDORS._jsAPI, 0, 'requestAnimationFrame', false, function (func) { return window.setTimeout(func, 1000 / 60); }),\n\n /**\n * Gets the CancelAnimationFrame method or it's corresponding polyfill.\n * @returns {*|Function} The CancelAnimationFrame method or it's corresponding polyfill.\n */\n cAF: bind(VENDORS._jsAPI, 0, 'cancelAnimationFrame', false, function (id) { return window.clearTimeout(id); }),\n\n /**\n * Gets the current time.\n * @returns {number} The current time.\n */\n now: function() {\n return Date.now && Date.now() || new Date().getTime();\n },\n\n /**\n * Stops the propagation of the given event.\n * @param event The event of which the propagation shall be stoped.\n */\n stpP: function(event) {\n if(event.stopPropagation)\n event.stopPropagation();\n else\n event.cancelBubble = true;\n },\n\n /**\n * Prevents the default action of the given event.\n * @param event The event of which the default action shall be prevented.\n */\n prvD: function(event) {\n if(event.preventDefault && event.cancelable)\n event.preventDefault();\n else\n event.returnValue = false;\n },\n\n /**\n * Gets the pageX and pageY values of the given mouse event.\n * @param event The mouse event of which the pageX and pageX shall be got.\n * @returns {{x: number, y: number}} x = pageX value, y = pageY value.\n */\n page: function(event) {\n event = event.originalEvent || event;\n\n var strPage = 'page';\n var strClient = 'client';\n var strX = 'X';\n var strY = 'Y';\n var target = event.target || event.srcElement || document;\n var eventDoc = target.ownerDocument || document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n\n //if touch event return return pageX/Y of it\n if(event.touches !== undefined) {\n var touch = event.touches[0];\n return {\n x : touch[strPage + strX],\n y : touch[strPage + strY]\n }\n }\n\n // Calculate pageX/Y if not native supported\n if (!event[strPage + strX] && event[strClient + strX] && event[strClient + strX] != null) {\n\n return {\n x : event[strClient + strX] +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0),\n y : event[strClient + strY] +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (doc && doc.clientTop || body && body.clientTop || 0)\n }\n }\n return {\n x : event[strPage + strX],\n y : event[strPage + strY]\n };\n },\n\n /**\n * Gets the clicked mouse button of the given mouse event.\n * @param event The mouse event of which the clicked button shal be got.\n * @returns {number} The number of the clicked mouse button. (0 : none | 1 : leftButton | 2 : middleButton | 3 : rightButton)\n */\n mBtn: function(event) {\n var button = event.button;\n if (!event.which && button !== undefined)\n return (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n else\n return event.which;\n },\n\n /**\n * Checks whether a item is in the given array and returns its index.\n * @param item The item of which the position in the array shall be determined.\n * @param arr The array.\n * @returns {number} The zero based index of the item or -1 if the item isn't in the array.\n */\n inA : function(item, arr) {\n for (var i = 0; i < arr[LEXICON.l]; i++)\n //Sometiems in IE a \"SCRIPT70\" Permission denied error occurs if HTML elements in a iFrame are compared\n try {\n if (arr[i] === item)\n return i;\n }\n catch(e) { }\n return -1;\n },\n\n /**\n * Returns true if the given value is a array.\n * @param arr The potential array.\n * @returns {boolean} True if the given value is a array, false otherwise.\n */\n isA: function(arr) {\n var def = Array.isArray;\n return def ? def(arr) : this.type(arr) == TYPES.a;\n },\n\n /**\n * Determine the internal JavaScript [[Class]] of the given object.\n * @param obj The object of which the type shall be determined.\n * @returns {string} The type of the given object.\n */\n type: function(obj) {\n if (obj === undefined)\n return obj + '';\n if (obj === null)\n return obj + '';\n return Object[LEXICON.p].toString.call(obj).replace(/^\\[object (.+)\\]$/, '$1').toLowerCase();\n },\n\n\n bind: bind\n\n /**\n * Gets the vendor-prefixed CSS property by the given name.\n * For example the given name is \"transform\" and you're using a old Firefox browser then the returned value would be \"-moz-transform\".\n * If the browser doesn't need a vendor-prefix, then the returned string is the given name.\n * If the browser doesn't support the given property name at all (not even with a vendor-prefix) the returned value is null.\n * @param propName The unprefixed CSS property name.\n * @returns {string|null} The vendor-prefixed CSS property or null if the browser doesn't support the given CSS property.\n\n cssProp: function(propName) {\n return VENDORS._cssProperty(propName);\n }\n */\n }\n })();\n\n var MATH = Math;\n var JQUERY = window.jQuery;\n var EASING = (function() {\n var _easingsMath = {\n p : MATH.PI,\n c : MATH.cos,\n s : MATH.sin,\n w : MATH.pow,\n t : MATH.sqrt,\n n : MATH.asin,\n a : MATH.abs,\n o : 1.70158\n };\n \n /*\n x : current percent (0 - 1),\n t : current time (duration * percent),\n b : start value (from),\n c : end value (to),\n d : duration\n\n easingName : function(x, t, b, c, d) { return easedValue; }\n */\n\n return {\n swing: function (x, t, b, c, d) {\n return 0.5 - _easingsMath.c(x * _easingsMath.p) / 2;\n },\n linear: function(x, t, b, c, d) {\n return x;\n },\n easeInQuad: function (x, t, b, c, d) {\n return c*(t/=d)*t + b;\n },\n easeOutQuad: function (x, t, b, c, d) {\n return -c *(t/=d)*(t-2) + b;\n },\n easeInOutQuad: function (x, t, b, c, d) {\n return ((t/=d/2) < 1) ? c/2*t*t + b : -c/2 * ((--t)*(t-2) - 1) + b;\n },\n easeInCubic: function (x, t, b, c, d) {\n return c*(t/=d)*t*t + b;\n },\n easeOutCubic: function (x, t, b, c, d) {\n return c*((t=t/d-1)*t*t + 1) + b;\n },\n easeInOutCubic: function (x, t, b, c, d) {\n return ((t/=d/2) < 1) ? c/2*t*t*t + b : c/2*((t-=2)*t*t + 2) + b;\n },\n easeInQuart: function (x, t, b, c, d) {\n return c*(t/=d)*t*t*t + b;\n },\n easeOutQuart: function (x, t, b, c, d) {\n return -c * ((t=t/d-1)*t*t*t - 1) + b;\n },\n easeInOutQuart: function (x, t, b, c, d) {\n return ((t/=d/2) < 1) ? c/2*t*t*t*t + b : -c/2 * ((t-=2)*t*t*t - 2) + b;\n },\n easeInQuint: function (x, t, b, c, d) {\n return c*(t/=d)*t*t*t*t + b;\n },\n easeOutQuint: function (x, t, b, c, d) {\n return c*((t=t/d-1)*t*t*t*t + 1) + b;\n },\n easeInOutQuint: function (x, t, b, c, d) {\n return ((t/=d/2) < 1) ? c/2*t*t*t*t*t + b : c/2*((t-=2)*t*t*t*t + 2) + b;\n },\n easeInSine: function (x, t, b, c, d) {\n return -c * _easingsMath.c(t/d * (_easingsMath.p/2)) + c + b;\n },\n easeOutSine: function (x, t, b, c, d) {\n return c * _easingsMath.s(t/d * (_easingsMath.p/2)) + b;\n },\n easeInOutSine: function (x, t, b, c, d) {\n return -c/2 * (_easingsMath.c(_easingsMath.p*t/d) - 1) + b;\n },\n easeInExpo: function (x, t, b, c, d) {\n return (t==0) ? b : c * _easingsMath.w(2, 10 * (t/d - 1)) + b;\n },\n easeOutExpo: function (x, t, b, c, d) {\n return (t==d) ? b+c : c * (-_easingsMath.w(2, -10 * t/d) + 1) + b;\n },\n easeInOutExpo: function (x, t, b, c, d) {\n if (t==0) return b;\n if (t==d) return b+c;\n if ((t/=d/2) < 1) return c/2 * _easingsMath.w(2, 10 * (t - 1)) + b;\n return c/2 * (-_easingsMath.w(2, -10 * --t) + 2) + b;\n },\n easeInCirc: function (x, t, b, c, d) {\n return -c * (_easingsMath.t(1 - (t/=d)*t) - 1) + b;\n },\n easeOutCirc: function (x, t, b, c, d) {\n return c * _easingsMath.t(1 - (t=t/d-1)*t) + b;\n },\n easeInOutCirc: function (x, t, b, c, d) {\n return ((t/=d/2) < 1) ? -c/2 * (_easingsMath.t(1 - t*t) - 1) + b : c/2 * (_easingsMath.t(1 - (t-=2)*t) + 1) + b;\n },\n easeInElastic: function (x, t, b, c, d) {\n var s=_easingsMath.o;var p=0;var a=c;\n if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;\n if (a < _easingsMath.a(c)) { a=c; s=p/4; }\n else s = p/(2*_easingsMath.p) * _easingsMath.n (c/a);\n return -(a*_easingsMath.w(2,10*(t-=1)) * _easingsMath.s( (t*d-s)*(2*_easingsMath.p)/p )) + b;\n },\n easeOutElastic: function (x, t, b, c, d) {\n var s=_easingsMath.o;var p=0;var a=c;\n if (t==0) return b; \n if ((t/=d)==1) return b+c; \n if (!p) p=d*.3;\n if (a < _easingsMath.a(c)) { a=c; s=p/4; }\n else s = p/(2*_easingsMath.p) * _easingsMath.n (c/a);\n return a*_easingsMath.w(2,-10*t) * _easingsMath.s( (t*d-s)*(2*_easingsMath.p)/p ) + c + b;\n },\n easeInOutElastic: function (x, t, b, c, d) {\n var s=_easingsMath.o;var p=0;var a=c;\n if (t==0) return b; \n if ((t/=d/2)==2) return b+c; \n if (!p) p=d*(.3*1.5);\n if (a < _easingsMath.a(c)) { a=c; s=p/4; }\n else s = p/(2*_easingsMath.p) * _easingsMath.n (c/a);\n if (t < 1) return -.5*(a*_easingsMath.w(2,10*(t-=1)) * _easingsMath.s( (t*d-s)*(2*_easingsMath.p)/p )) + b;\n return a*_easingsMath.w(2,-10*(t-=1)) * _easingsMath.s( (t*d-s)*(2*_easingsMath.p)/p )*.5 + c + b;\n },\n easeInBack: function (x, t, b, c, d, s) {\n s = s || _easingsMath.o;\n return c*(t/=d)*t*((s+1)*t - s) + b;\n },\n easeOutBack: function (x, t, b, c, d, s) {\n s = s || _easingsMath.o;\n return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\n },\n easeInOutBack: function (x, t, b, c, d, s) {\n s = s || _easingsMath.o;\n return ((t/=d/2) < 1) ? c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b : c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\n },\n easeInBounce: function (x, t, b, c, d) {\n return c - this.easeOutBounce (x, d-t, 0, c, d) + b;\n },\n easeOutBounce: function (x, t, b, c, d) {\n var o = 7.5625;\n if ((t/=d) < (1/2.75)) {\n return c*(o*t*t) + b;\n } else if (t < (2/2.75)) {\n return c*(o*(t-=(1.5/2.75))*t + .75) + b;\n } else if (t < (2.5/2.75)) {\n return c*(o*(t-=(2.25/2.75))*t + .9375) + b;\n } else {\n return c*(o*(t-=(2.625/2.75))*t + .984375) + b;\n }\n },\n easeInOutBounce: function (x, t, b, c, d) {\n return (t < d/2) ? this.easeInBounce (x, t*2, 0, c, d) * .5 + b : this.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;\n }\n };\n /*\n *\n * TERMS OF USE - EASING EQUATIONS\n * \n * Open source under the BSD License. \n * \n * Copyright © 2001 Robert Penner\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification, \n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice, this list of \n * conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list \n * of conditions and the following disclaimer in the documentation and/or other materials \n * provided with the distribution.\n * \n * Neither the name of the author nor the names of contributors may be used to endorse \n * or promote products derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n * OF THE POSSIBILITY OF SUCH DAMAGE. \n *\n */\n })();\n var FRAMEWORK = (function() {\n var _rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n var _strSpace = ' ';\n var _strEmpty = '';\n var _strScrollLeft = 'scrollLeft';\n var _strScrollTop = 'scrollTop';\n var _animations = [ ];\n var _type = COMPATIBILITY.type;\n var _cssNumber = {\n animationIterationCount: true,\n columnCount: true,\n fillOpacity: true,\n flexGrow: true,\n flexShrink: true,\n fontWeight: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n widows: true,\n zIndex: true,\n zoom: true\n };\n\n function extend() {\n var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {},\n i = 1,\n length = arguments[LEXICON.l],\n deep = false;\n\n // Handle a deep copy situation\n if (_type(target) == TYPES.b) {\n deep = target;\n target = arguments[1] || {};\n // skip the boolean and the target\n i = 2;\n }\n\n // Handle case when target is a string or something (possible in deep copy)\n if (_type(target) != TYPES.o && !_type(target) == TYPES.f) {\n target = {};\n }\n\n // extend jQuery itself if only one argument is passed\n if (length === i) {\n target = FakejQuery;\n --i;\n }\n\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null) {\n // Extend the base object\n for (name in options) {\n src = target[name];\n copy = options[name];\n\n // Prevent never-ending loop\n if (target === copy) {\n continue;\n }\n\n // Recurse if we're merging plain objects or arrays\n if (deep && copy && (isPlainObject(copy) || (copyIsArray = COMPATIBILITY.isA(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && COMPATIBILITY.isA(src) ? src : [];\n\n } else {\n clone = src && isPlainObject(src) ? src : {};\n }\n\n // Never move original objects, clone them\n target[name] = extend(deep, clone, copy);\n\n // Don't bring in undefined values\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n\n // Return the modified object\n return target;\n };\n\n function inArray(item, arr, fromIndex) {\n for (var i = fromIndex || 0; i < arr[LEXICON.l]; i++)\n if (arr[i] === item)\n return i;\n return -1;\n }\n \n function isFunction(obj) {\n return _type(obj) == TYPES.f;\n };\n\n function isEmptyObject(obj) {\n for (var name in obj )\n return false;\n return true;\n };\n\n function isPlainObject(obj) {\n if (!obj || _type(obj) != TYPES.o)\n return false;\n\n var key;\n var proto = LEXICON.p;\n var hasOwnProperty = Object[proto].hasOwnProperty;\n var hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\n var hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\n\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n return false;\n }\n\n\n for (key in obj) { /**/ }\n\n return _type(key) == TYPES.u || hasOwnProperty.call(obj, key);\n };\n\n function each(obj, callback) {\n var i = 0;\n\n if (isArrayLike(obj)) {\n for (; i < obj[LEXICON.l]; i++) {\n if (callback.call(obj[i], i, obj[i]) === false)\n break;\n }\n }\n else {\n for (i in obj) {\n if (callback.call(obj[i], i, obj[i]) === false)\n break;\n }\n }\n\n return obj;\n };\n\n function isArrayLike(obj) {\n var length = !!obj && [LEXICON.l] in obj && obj[LEXICON.l];\n var t = _type(obj);\n return isFunction(t) ? false : (t == TYPES.a || length === 0 || _type(length) == TYPES.n && length > 0 && (length - 1) in obj);\n }\n\n function stripAndCollapse(value) {\n var tokens = value.match(_rnothtmlwhite) || [];\n return tokens.join(_strSpace);\n }\n\n function matches(elem, selector) {\n var nodeList = (elem.parentNode || document).querySelectorAll(selector) || [];\n var i = nodeList[LEXICON.l];\n\n while (i--)\n if (nodeList[i] == elem)\n return true;\n\n return false;\n }\n\n function insertAdjacentElement(el, strategy, child) {\n if(_type(child) == TYPES.a) {\n for(var i = 0; i < child[LEXICON.l]; i++)\n insertAdjacentElement(el, strategy, child[i]);\n }\n else if(_type(child) == TYPES.s)\n el.insertAdjacentHTML(strategy, child);\n else\n el.insertAdjacentElement(strategy, child.nodeType ? child : child[0]);\n }\n\n function setCSSVal(el, prop, val) {\n try {\n if(el[LEXICON.s][prop] !== undefined)\n el[LEXICON.s][prop] = parseCSSVal(prop, val);\n } catch(e) { }\n }\n\n function parseCSSVal(prop, val) {\n if(!_cssNumber[prop.toLowerCase()] && _type(val) == TYPES.n)\n val += 'px';\n return val;\n }\n\n function startNextAnimationInQ(animObj, removeFromQ) {\n var index;\n var nextAnim;\n if(removeFromQ !== false)\n animObj.q.splice(0, 1);\n if(animObj.q[LEXICON.l] > 0) {\n nextAnim = animObj.q[0];\n animate(animObj.el, nextAnim.props, nextAnim.duration, nextAnim.easing, nextAnim.complete, true);\n }\n else {\n index = inArray(animObj, _animations);\n if(index > -1)\n _animations.splice(index, 1);\n }\n }\n\n function setAnimationValue(el, prop, value) {\n if(prop === _strScrollLeft || prop === _strScrollTop)\n el[prop] = value;\n else\n setCSSVal(el, prop, value);\n }\n\n function animate(el, props, options, easing, complete, guaranteedNext) {\n var hasOptions = isPlainObject(options);\n var from = { };\n var to = { };\n var i = 0;\n var key;\n var animObj;\n var start;\n var progress;\n var step;\n var specialEasing;\n var duration;\n if(hasOptions) {\n easing = options.easing;\n start = options.start;\n progress = options.progress;\n step = options.step;\n specialEasing = options.specialEasing;\n complete = options.complete;\n duration = options.duration;\n }\n else\n duration = options;\n specialEasing = specialEasing || { };\n duration = duration || 400;\n easing = easing || 'swing';\n guaranteedNext = guaranteedNext || false;\n\n for(; i < _animations[LEXICON.l]; i++) {\n if(_animations[i].el === el) {\n animObj = _animations[i];\n break;\n }\n }\n\n if(!animObj) {\n animObj = {\n el : el,\n q : []\n };\n _animations.push(animObj);\n }\n\n for (key in props) {\n if(key === _strScrollLeft || key === _strScrollTop)\n from[key] = el[key];\n else\n from[key] = FakejQuery(el).css(key);\n }\n\n for (key in from) {\n if(from[key] !== props[key] && props[key] !== undefined)\n to[key] = props[key];\n }\n\n if(!isEmptyObject(to)) {\n var timeNow;\n var end;\n var percent;\n var fromVal;\n var toVal;\n var easedVal;\n var timeStart;\n var frame;\n var elapsed;\n var qPos = guaranteedNext ? 0 : inArray(qObj, animObj.q);\n var qObj = {\n props : to,\n duration : hasOptions ? options : duration,\n easing : easing,\n complete : complete\n };\n if (qPos === -1) {\n qPos = animObj.q[LEXICON.l];\n animObj.q.push(qObj);\n }\n\n if(qPos === 0) {\n if(duration > 0) {\n timeStart = COMPATIBILITY.now();\n frame = function() {\n timeNow = COMPATIBILITY.now();\n elapsed = (timeNow - timeStart);\n end = qObj.stop || elapsed >= duration;\n percent = 1 - ((MATH.max(0, timeStart + duration - timeNow) / duration) || 0);\n\n for(key in to) {\n fromVal = parseFloat(from[key]);\n toVal = parseFloat(to[key]);\n easedVal = (toVal - fromVal) * EASING[specialEasing[key] || easing](percent, percent * duration, 0, 1, duration) + fromVal;\n setAnimationValue(el, key, easedVal);\n if(isFunction(step)) {\n step(easedVal, {\n elem : el,\n prop : key,\n start : fromVal,\n now : easedVal,\n end : toVal,\n pos : percent,\n options : {\n easing : easing,\n speacialEasing : specialEasing,\n duration : duration,\n complete : complete,\n step : step\n },\n startTime : timeStart\n });\n }\n }\n\n if(isFunction(progress))\n progress({ }, percent, MATH.max(0, duration - elapsed));\n\n if (end) {\n startNextAnimationInQ(animObj);\n if(isFunction(complete))\n complete();\n }\n else\n qObj.frame = COMPATIBILITY.rAF()(frame);\n };\n qObj.frame = COMPATIBILITY.rAF()(frame);\n }\n else {\n for(key in to)\n setAnimationValue(el, key, to[key]);\n startNextAnimationInQ(animObj);\n }\n }\n }\n else if(guaranteedNext)\n startNextAnimationInQ(animObj);\n }\n\n function stop(el, clearQ, jumpToEnd) {\n var animObj;\n var qObj;\n var key;\n var i = 0;\n for(; i < _animations[LEXICON.l]; i++) {\n animObj = _animations[i];\n if(animObj.el === el) {\n if(animObj.q[LEXICON.l] > 0) {\n qObj = animObj.q[0];\n qObj.stop = true;\n COMPATIBILITY.cAF()(qObj.frame);\n animObj.q.splice(0, 1);\n\n if(jumpToEnd)\n for(key in qObj.props)\n setAnimationValue(el, key, qObj.props[key]);\n\n if(clearQ)\n animObj.q = [ ];\n else\n startNextAnimationInQ(animObj, false);\n }\n break;\n }\n }\n }\n \n function elementIsVisible(el) {\n return !!(el[LEXICON.oW] || el[LEXICON.oH] || el.getClientRects()[LEXICON.l]);\n }\n\n function FakejQuery(selector) {\n if(arguments[LEXICON.l] === 0)\n return this;\n\n var base = new FakejQuery();\n var elements = selector;\n var i = 0;\n var elms;\n var el;\n\n if(_type(selector) == TYPES.s) {\n elements = [ ];\n if(selector.charAt(0) === '<') {\n el = document.createElement('div');\n el.innerHTML = selector;\n elms = el.children;\n }\n else {\n elms = document.querySelectorAll(selector);\n }\n\n for(; i < elms[LEXICON.l]; i++)\n elements.push(elms[i]);\n }\n\n if(elements) {\n if(_type(elements) != TYPES.s && (!isArrayLike(elements) || elements === window || elements === elements.self))\n elements = [ elements ];\n\n for(i = 0; i < elements[LEXICON.l]; i++)\n base[i] = elements[i];\n\n base[LEXICON.l] = elements[LEXICON.l];\n }\n\n return base;\n };\n\n FakejQuery[LEXICON.p] = {\n\n //EVENTS:\n\n on : function(eventName, handler) {\n eventName = (eventName || _strEmpty).match(_rnothtmlwhite) || [_strEmpty];\n\n var eventNameLength = eventName[LEXICON.l];\n var i = 0;\n var el;\n return this.each(function() {\n el = this;\n try {\n if (el.addEventListener) {\n for (; i < eventNameLength; i++)\n el.addEventListener(eventName[i], handler);\n }\n else if(el.detachEvent) {\n for (; i < eventNameLength; i++)\n el.attachEvent('on' + eventName[i], handler);\n }\n } catch (e) { }\n });\n },\n\n off : function(eventName, handler) {\n eventName = (eventName || _strEmpty).match(_rnothtmlwhite) || [_strEmpty];\n\n var eventNameLength = eventName[LEXICON.l];\n var i = 0;\n var el;\n return this.each(function() {\n el = this;\n try {\n if (el.removeEventListener) {\n for (; i < eventNameLength; i++)\n el.removeEventListener(eventName[i], handler);\n }\n else if(el.detachEvent) {\n for (; i < eventNameLength; i++)\n el.detachEvent('on' + eventName[i], handler);\n }\n } catch (e) { }\n });\n },\n\n one : function (eventName, handler) {\n eventName = (eventName || _strEmpty).match(_rnothtmlwhite) || [_strEmpty];\n return this.each(function() {\n var el = FakejQuery(this);\n FakejQuery.each(eventName, function(i, oneEventName) {\n var oneHandler = function(e) {\n handler.call(this, e);\n el.off(oneEventName, oneHandler);\n };\n el.on(oneEventName, oneHandler);\n });\n });\n },\n\n trigger : function(eventName) {\n var el;\n var event;\n return this.each(function() {\n el = this;\n if (document.createEvent) {\n event = document.createEvent('HTMLEvents');\n event.initEvent(eventName, true, false);\n el.dispatchEvent(event);\n }\n else {\n el.fireEvent('on' + eventName);\n }\n });\n },\n\n //DOM NODE INSERTING / REMOVING:\n\n append : function(child) {\n return this.each(function() { insertAdjacentElement(this, 'beforeend', child); });\n },\n\n prepend : function(child) {\n return this.each(function() { insertAdjacentElement(this, 'afterbegin', child); });\n },\n\n before : function(child) {\n return this.each(function() { insertAdjacentElement(this, 'beforebegin', child); });\n },\n\n after : function(child) {\n return this.each(function() { insertAdjacentElement(this, 'afterend', child); });\n },\n\n remove : function() {\n return this.each(function() {\n var el = this;\n var parentNode = el.parentNode;\n if(parentNode != null)\n parentNode.removeChild(el);\n });\n },\n\n unwrap : function() {\n var parents = [ ];\n var i;\n var el;\n var parent;\n\n this.each(function() {\n parent = this.parentNode;\n if(inArray(parent, parents) === - 1)\n parents.push(parent);\n });\n\n for(i = 0; i < parents[LEXICON.l]; i++) {\n el = parents[i];\n parent = el.parentNode;\n while (el.firstChild)\n parent.insertBefore(el.firstChild, el);\n parent.removeChild(el);\n }\n\n return this;\n },\n\n wrapAll : function(wrapperHTML) {\n var i;\n var nodes = this;\n var wrapper = FakejQuery(wrapperHTML)[0];\n var deepest = wrapper;\n var parent = nodes[0].parentNode;\n var previousSibling = nodes[0].previousSibling;\n while(deepest.childNodes[LEXICON.l] > 0)\n deepest = deepest.childNodes[0];\n\n for (i = 0; nodes[LEXICON.l] - i; deepest.firstChild === nodes[0] && i++)\n deepest.appendChild(nodes[i]);\n\n var nextSibling = previousSibling ? previousSibling.nextSibling : parent.firstChild;\n parent.insertBefore(wrapper, nextSibling);\n\n return this;\n },\n\n wrapInner : function(wrapperHTML) {\n return this.each(function() {\n var el = FakejQuery(this);\n var contents = el.contents();\n\n if (contents[LEXICON.l])\n contents.wrapAll(wrapperHTML);\n else\n el.append(wrapperHTML);\n });\n },\n\n wrap : function(wrapperHTML) {\n return this.each(function() { FakejQuery(this).wrapAll(wrapperHTML); });\n },\n\n\n //DOM NODE MANIPULATION / INFORMATION:\n\n css : function(styles, val) {\n var el;\n var key;\n var cptStyle;\n var getCptStyle = window.getComputedStyle;\n if(_type(styles) == TYPES.s) {\n if(val === undefined) {\n el = this[0];\n cptStyle = getCptStyle ? getCptStyle(el, null) : el.currentStyle[styles];\n\n //https://bugzilla.mozilla.org/show_bug.cgi?id=548397 can be null sometimes if iframe with display: none (firefox only!)\n return getCptStyle ? cptStyle != null ? cptStyle.getPropertyValue(styles) : el[LEXICON.s][styles] : cptStyle;\n }\n else {\n return this.each(function() {\n setCSSVal(this, styles, val);\n });\n }\n }\n else {\n return this.each(function() {\n for(key in styles)\n setCSSVal(this, key, styles[key]);\n });\n }\n },\n\n hasClass : function(className) {\n var elem, i = 0;\n var classNamePrepared = _strSpace + className + _strSpace;\n var classList;\n\n while ((elem = this[ i++ ])) {\n classList = elem.classList;\n if(classList && classList.contains(className))\n return true;\n else if (elem.nodeType === 1 && (_strSpace + stripAndCollapse(elem.className + _strEmpty) + _strSpace).indexOf(classNamePrepared) > -1)\n return true;\n }\n\n return false;\n },\n\n addClass : function(className) {\n var classes;\n var elem;\n var cur;\n var curValue;\n var clazz;\n var finalValue;\n var supportClassList;\n var elmClassList;\n var i = 0;\n var v = 0;\n\n if (className) {\n classes = className.match( _rnothtmlwhite ) || [];\n\n while ((elem = this[i++])) {\n elmClassList = elem.classList;\n if(supportClassList === undefined)\n supportClassList = elmClassList !== undefined;\n\n if(supportClassList) {\n while ((clazz = classes[v++]))\n elmClassList.add(clazz);\n }\n else {\n curValue = elem.className + _strEmpty;\n cur = elem.nodeType === 1 && (_strSpace + stripAndCollapse(curValue) + _strSpace);\n\n if (cur) {\n while ((clazz = classes[v++]))\n if (cur.indexOf(_strSpace + clazz + _strSpace) < 0)\n cur += clazz + _strSpace;\n\n finalValue = stripAndCollapse(cur);\n if (curValue !== finalValue)\n elem.className = finalValue;\n }\n }\n }\n }\n\n return this;\n },\n\n removeClass : function(className) {\n var classes;\n var elem;\n var cur;\n var curValue;\n var clazz;\n var finalValue;\n var supportClassList;\n var elmClassList;\n var i = 0;\n var v = 0;\n\n if (className) {\n classes = className.match(_rnothtmlwhite) || [];\n\n while ((elem = this[i++])) {\n elmClassList = elem.classList;\n if(supportClassList === undefined)\n supportClassList = elmClassList !== undefined;\n\n if(supportClassList) {\n while ((clazz = classes[v++]))\n elmClassList.remove(clazz);\n }\n else {\n curValue = elem.className + _strEmpty;\n cur = elem.nodeType === 1 && (_strSpace + stripAndCollapse(curValue) + _strSpace);\n\n if (cur) {\n while ((clazz = classes[v++]))\n while (cur.indexOf(_strSpace + clazz + _strSpace) > -1)\n cur = cur.replace(_strSpace + clazz + _strSpace, _strSpace);\n\n finalValue = stripAndCollapse(cur);\n if (curValue !== finalValue)\n elem.className = finalValue;\n }\n }\n }\n }\n\n return this;\n },\n\n hide : function() {\n return this.each(function() { this[LEXICON.s].display = 'none'; });\n },\n\n show : function() {\n return this.each(function() { this[LEXICON.s].display = 'block'; });\n },\n\n attr : function(attrName, value) {\n var i = 0;\n var el;\n while (el = this[i++]) {\n if(value === undefined)\n return el.getAttribute(attrName);\n el.setAttribute(attrName, value);\n }\n return this;\n },\n\n removeAttr : function(attrName) {\n return this.each(function() { this.removeAttribute(attrName); });\n },\n\n offset : function() {\n var el = this[0];\n var rect = el[LEXICON.bCR]();\n var scrollLeft = window.pageXOffset || document.documentElement[_strScrollLeft];\n var scrollTop = window.pageYOffset || document.documentElement[_strScrollTop];\n return {\n top: rect.top + scrollTop,\n left: rect.left + scrollLeft\n };\n },\n\n position : function() {\n var el = this[0];\n return {\n top: el.offsetTop,\n left: el.offsetLeft\n };\n },\n\n scrollLeft : function(value) {\n var i = 0;\n var el;\n while (el = this[i++]) {\n if(value === undefined)\n return el[_strScrollLeft];\n el[_strScrollLeft] = value;\n }\n return this;\n },\n\n scrollTop : function(value) {\n var i = 0;\n var el;\n while (el = this[i++]) {\n if(value === undefined)\n return el[_strScrollTop];\n el[_strScrollTop] = value;\n }\n return this;\n },\n\n val : function(value) {\n var el = this[0];\n if(!value)\n return el.value;\n el.value = value;\n return this;\n },\n\n\n //DOM TRAVERSAL / FILTERING:\n\n first : function() {\n return this.eq(0);\n },\n\n last : function() {\n return this.eq(-1);\n },\n\n eq : function(index) {\n return FakejQuery(this[index >= 0 ? index : this[LEXICON.l] + index]);\n },\n\n find : function(selector) {\n var children = [ ];\n var i;\n this.each(function() {\n var el = this;\n var ch = el.querySelectorAll(selector);\n for(i = 0; i < ch[LEXICON.l]; i++)\n children.push(ch[i]);\n });\n return FakejQuery(children);\n },\n\n children : function(selector) {\n var children = [ ];\n var el;\n var ch;\n var i;\n\n this.each(function() {\n ch = this.children;\n for(i = 0; i < ch[LEXICON.l]; i++) {\n el = ch[i];\n if(selector) {\n if((el.matches && el.matches(selector)) || matches(el, selector))\n children.push(el);\n }\n else\n children.push(el);\n }\n });\n return FakejQuery(children);\n },\n\n parent : function(selector) {\n var parents = [ ];\n var parent;\n this.each(function() {\n parent = this.parentNode;\n if(selector ? FakejQuery(parent).is(selector) : true)\n parents.push(parent);\n });\n return FakejQuery(parents);\n },\n\n is : function(selector) {\n \n var el;\n var i;\n for(i = 0; i < this[LEXICON.l]; i++) {\n el = this[i];\n if(selector === ':visible')\n return elementIsVisible(el);\n if(selector === ':hidden')\n return !elementIsVisible(el);\n if((el.matches && el.matches(selector)) || matches(el, selector))\n return true;\n }\n return false;\n },\n\n contents : function() {\n var contents = [ ];\n var childs;\n var i;\n\n this.each(function() {\n childs = this.childNodes;\n for(i = 0; i < childs[LEXICON.l]; i++)\n contents.push(childs[i]);\n });\n\n return FakejQuery(contents);\n },\n\n each : function(callback) {\n return each(this, callback);\n },\n\n\n //ANIMATION:\n\n animate : function(props, duration, easing, complete) {\n return this.each(function() { animate(this, props, duration, easing, complete); });\n },\n\n stop : function(clearQ, jump) {\n return this.each(function() { stop(this, clearQ, jump); });\n }\n };\n\n extend(FakejQuery, {\n extend : extend,\n inArray : inArray,\n isEmptyObject : isEmptyObject,\n isPlainObject : isPlainObject,\n each : each\n });\n\n return FakejQuery;\n })();\n var INSTANCES = (function() {\n var _targets = [ ];\n var _instancePropertyString = '__overlayScrollbars__';\n\n /**\n * Register, unregister or get a certain (or all) instances.\n * Register: Pass the target and the instance.\n * Unregister: Pass the target and null.\n * Get Instance: Pass the target from which the instance shall be got.\n * Get Targets: Pass no arguments.\n * @param target The target to which the instance shall be registered / from which the instance shall be unregistered / the instance shall be got\n * @param instance The instance.\n * @returns {*|void} Returns the instance from the given target.\n */\n return function (target, instance) {\n var argLen = arguments[LEXICON.l];\n if(argLen < 1) {\n //return all targets\n return _targets;\n }\n else {\n if(instance) {\n //register instance\n target[_instancePropertyString] = instance;\n _targets.push(target);\n }\n else {\n var index = COMPATIBILITY.inA(target, _targets);\n if (index > -1) {\n if(argLen > 1) {\n //unregister instance\n delete target[_instancePropertyString];\n _targets.splice(index, 1);\n }\n else {\n //get instance from target\n return _targets[index][_instancePropertyString];\n }\n }\n }\n }\n }\n })();\n var PLUGIN = (function() {\n var _plugin;\n var _pluginsGlobals;\n var _pluginsAutoUpdateLoop;\n var _pluginsExtensions = [ ];\n var _pluginsOptions = (function() {\n var type = COMPATIBILITY.type;\n var possibleTemplateTypes = [\n TYPES.b, //boolean\n TYPES.n, //number\n TYPES.s, //string\n TYPES.a, //array\n TYPES.o, //object\n TYPES.f, //function\n TYPES.z //null\n ];\n var restrictedStringsSplit = ' ';\n var restrictedStringsPossibilitiesSplit = ':';\n var classNameAllowedValues = [TYPES.z, TYPES.s];\n var numberAllowedValues = TYPES.n;\n var booleanNullAllowedValues = [TYPES.z, TYPES.b];\n var booleanTrueTemplate = [true, TYPES.b];\n var booleanFalseTemplate = [false, TYPES.b];\n var callbackTemplate = [null, [TYPES.z, TYPES.f]];\n var inheritedAttrsTemplate = [['style', 'class'], [TYPES.s, TYPES.a, TYPES.z]];\n var resizeAllowedValues = 'n:none b:both h:horizontal v:vertical';\n var overflowBehaviorAllowedValues = 'v-h:visible-hidden v-s:visible-scroll s:scroll h:hidden';\n var scrollbarsVisibilityAllowedValues = 'v:visible h:hidden a:auto';\n var scrollbarsAutoHideAllowedValues = 'n:never s:scroll l:leave m:move';\n var optionsDefaultsAndTemplate = {\n className: ['os-theme-dark', classNameAllowedValues], //null || string\n resize: ['none', resizeAllowedValues], //none || both || horizontal || vertical || n || b || h || v\n sizeAutoCapable: booleanTrueTemplate, //true || false\n clipAlways: booleanTrueTemplate, //true || false\n normalizeRTL: booleanTrueTemplate, //true || false\n paddingAbsolute: booleanFalseTemplate, //true || false\n autoUpdate: [null, booleanNullAllowedValues], //true || false || null\n autoUpdateInterval: [33, numberAllowedValues], //number\n nativeScrollbarsOverlaid: {\n showNativeScrollbars: booleanFalseTemplate, //true || false\n initialize: booleanTrueTemplate //true || false\n },\n overflowBehavior: {\n x: ['scroll', overflowBehaviorAllowedValues], //visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\n y: ['scroll', overflowBehaviorAllowedValues] //visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\n },\n scrollbars: {\n visibility: ['auto', scrollbarsVisibilityAllowedValues], //visible || hidden || auto || v || h || a\n autoHide: ['never', scrollbarsAutoHideAllowedValues], //never || scroll || leave || move || n || s || l || m\n autoHideDelay: [800, numberAllowedValues], //number\n dragScrolling: booleanTrueTemplate, //true || false\n clickScrolling: booleanFalseTemplate, //true || false\n touchSupport: booleanTrueTemplate, //true || false\n snapHandle: booleanFalseTemplate //true || false\n },\n textarea: {\n dynWidth: booleanFalseTemplate, //true || false\n dynHeight: booleanFalseTemplate, //true || false\n inheritedAttrs : inheritedAttrsTemplate //string || array || null\n },\n callbacks: {\n onInitialized: callbackTemplate, //null || function\n onInitializationWithdrawn: callbackTemplate, //null || function\n onDestroyed: callbackTemplate, //null || function\n onScrollStart: callbackTemplate, //null || function\n onScroll: callbackTemplate, //null || function\n onScrollStop: callbackTemplate, //null || function\n onOverflowChanged: callbackTemplate, //null || function\n onOverflowAmountChanged: callbackTemplate, //null || function\n onDirectionChanged: callbackTemplate, //null || function\n onContentSizeChanged: callbackTemplate, //null || function\n onHostSizeChanged: callbackTemplate, //null || function\n onUpdated: callbackTemplate //null || function\n }\n };\n var convert = function(template) {\n var recursive = function(obj) {\n var key;\n var val;\n var valType;\n for(key in obj) {\n if(!obj[LEXICON.hOP](key))\n continue;\n val = obj[key];\n valType = type(val);\n if(valType == TYPES.a)\n obj[key] = val[template ? 1 : 0];\n else if(valType == TYPES.o)\n obj[key] = recursive(val);\n }\n return obj;\n };\n return recursive(FRAMEWORK.extend(true, { }, optionsDefaultsAndTemplate));\n };\n\n return {\n _defaults : convert(),\n\n _template : convert(true),\n\n /**\n * Validates the passed object by the passed template.\n * @param obj The object which shall be validated.\n * @param template The template which defines the allowed values and types.\n * @param writeErrors True if errors shall be logged to the console.\n * @param diffObj If a object is passed then only valid differences to this object will be returned.\n * @returns {{}} A object which contains two objects called \"default\" and \"prepared\" which contains only the valid properties of the passed original object and discards not different values compared to the passed diffObj.\n */\n _validate : function (obj, template, writeErrors, diffObj) {\n var validatedOptions = { };\n var validatedOptionsPrepared = { };\n var objectCopy = FRAMEWORK.extend(true, { }, obj);\n var inArray = FRAMEWORK.inArray;\n var isEmptyObj = FRAMEWORK.isEmptyObject;\n var checkObjectProps = function(data, template, diffData, validatedOptions, validatedOptionsPrepared, prevPropName) {\n for (var prop in template) {\n if (template[LEXICON.hOP](prop) && data[LEXICON.hOP](prop)) {\n var isValid = false;\n var isDiff = false;\n var templateValue = template[prop];\n var templateValueType = type(templateValue);\n var templateIsComplex = templateValueType == TYPES.o;\n var templateTypes = type(templateValue) != TYPES.a ? [ templateValue ] : templateValue;\n var dataDiffValue = diffData[prop];\n var dataValue = data[prop];\n var dataValueType = type(dataValue);\n var propPrefix = prevPropName ? prevPropName + '.' : '';\n var error = \"The option \\\"\" + propPrefix + prop + \"\\\" wasn't set, because\";\n var errorPossibleTypes = [ ];\n var errorRestrictedStrings = [ ];\n var restrictedStringValuesSplit;\n var restrictedStringValuesPossibilitiesSplit;\n var isRestrictedValue;\n var mainPossibility;\n var currType;\n var i;\n var v;\n var j;\n\n dataDiffValue = dataDiffValue === undefined ? { } : dataDiffValue;\n \n //if the template has a object as value, it means that the options are complex (verschachtelt)\n if(templateIsComplex && dataValueType == TYPES.o) {\n validatedOptions[prop] = { };\n validatedOptionsPrepared[prop] = { };\n checkObjectProps(dataValue, templateValue, dataDiffValue, validatedOptions[prop], validatedOptionsPrepared[prop], propPrefix + prop);\n FRAMEWORK.each([ data, validatedOptions, validatedOptionsPrepared ], function(index, value) {\n if(isEmptyObj(value[prop])) {\n delete value[prop];\n }\n });\n }\n else if(!templateIsComplex) {\n for(i = 0; i < templateTypes[LEXICON.l]; i++) {\n currType = templateTypes[i];\n templateValueType = type(currType);\n //if currtype is string and starts with restrictedStringPrefix and end with restrictedStringSuffix\n isRestrictedValue = templateValueType == TYPES.s && inArray(currType, possibleTemplateTypes) === -1;\n if(isRestrictedValue) {\n errorPossibleTypes.push(TYPES.s);\n\n //split it into a array which contains all possible values for example: [\"y:yes\", \"n:no\", \"m:maybe\"]\n restrictedStringValuesSplit = currType.split(restrictedStringsSplit);\n errorRestrictedStrings = errorRestrictedStrings.concat(restrictedStringValuesSplit);\n for(v = 0; v < restrictedStringValuesSplit[LEXICON.l]; v++) {\n //split the possible values into their possibiliteis for example: [\"y\", \"yes\"] -> the first is always the mainPossibility\n restrictedStringValuesPossibilitiesSplit = restrictedStringValuesSplit[v].split(restrictedStringsPossibilitiesSplit);\n mainPossibility = restrictedStringValuesPossibilitiesSplit[0];\n for(j = 0; j < restrictedStringValuesPossibilitiesSplit[LEXICON.l]; j++) {\n //if any possibility matches with the dataValue, its valid\n if(dataValue === restrictedStringValuesPossibilitiesSplit[j]) {\n isValid = true;\n break;\n }\n }\n if(isValid)\n break;\n }\n }\n else {\n errorPossibleTypes.push(currType);\n\n if(dataValueType === currType) {\n isValid = true;\n break;\n }\n }\n }\n\n if(isValid) {\n isDiff = dataValue !== dataDiffValue;\n \n if(isDiff)\n validatedOptions[prop] = dataValue;\n \n if(isRestrictedValue ? inArray(dataDiffValue, restrictedStringValuesPossibilitiesSplit) < 0 : isDiff)\n validatedOptionsPrepared[prop] = isRestrictedValue ? mainPossibility : dataValue;\n }\n else if(writeErrors) {\n console.warn(error + \" it doesn't accept the type [ \" + dataValueType.toUpperCase() + \" ] with the value of \\\"\" + dataValue + \"\\\".\\r\\n\" +\n \"Accepted types are: [ \" + errorPossibleTypes.join(', ').toUpperCase() + \" ].\" +\n (errorRestrictedStrings[length] > 0 ? \"\\r\\nValid strings are: [ \" + errorRestrictedStrings.join(', ').split(restrictedStringsPossibilitiesSplit).join(', ') + \" ].\" : ''));\n }\n delete data[prop];\n }\n }\n }\n };\n checkObjectProps(objectCopy, template, diffObj || { }, validatedOptions, validatedOptionsPrepared);\n\n //add values which aren't specified in the template to the finished validated object to prevent them from being discarded\n /*\n if(keepForeignProps) {\n FRAMEWORK.extend(true, validatedOptions, objectCopy);\n FRAMEWORK.extend(true, validatedOptionsPrepared, objectCopy);\n }\n */\n \n if(!isEmptyObj(objectCopy) && writeErrors)\n console.warn('The following options are discarded due to invalidity:\\r\\n' + window.JSON.stringify(objectCopy, null, 2));\n\n return {\n _default : validatedOptions,\n _prepared : validatedOptionsPrepared\n };\n }\n }\n }());\n\n /**\n * Initializes the object which contains global information about the plugin and each instance of it.\n */\n function initOverlayScrollbarsStatics() {\n if(!_pluginsGlobals)\n _pluginsGlobals = new OverlayScrollbarsGlobals(_pluginsOptions._defaults);\n if(!_pluginsAutoUpdateLoop)\n _pluginsAutoUpdateLoop = new OverlayScrollbarsAutoUpdateLoop(_pluginsGlobals);\n }\n\n /**\n * The global object for the OverlayScrollbars objects. It contains resources which every OverlayScrollbars object needs. This object is initialized only once: if the first OverlayScrollbars object gets initialized.\n * @param defaultOptions\n * @constructor\n */\n function OverlayScrollbarsGlobals(defaultOptions) {\n var _base = this;\n var strOverflow = 'overflow';\n var strHidden = 'hidden';\n var strScroll = 'scroll';\n var bodyElement = FRAMEWORK('body');\n var scrollbarDummyElement = FRAMEWORK('
');\n var scrollbarDummyElement0 = scrollbarDummyElement[0];\n var dummyContainerChild = FRAMEWORK(scrollbarDummyElement.children('div').eq(0));\n\n bodyElement.append(scrollbarDummyElement);\n scrollbarDummyElement.hide().show(); //fix IE8 bug (incorrect measuring)\n\n var nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement0);\n var nativeScrollbarIsOverlaid = {\n x: nativeScrollbarSize.x === 0,\n y: nativeScrollbarSize.y === 0\n };\n var msie = (function() {\n var ua = window.navigator.userAgent;\n var strIndexOf = 'indexOf';\n var strSubString = 'substring';\n var msie = ua[strIndexOf]('MSIE ');\n var trident = ua[strIndexOf]('Trident/');\n var edge = ua[strIndexOf]('Edge/');\n var rv = ua[strIndexOf]('rv:');\n var result;\n var parseIntFunc = parseInt;\n\n // IE 10 or older => return version number\n if (msie > 0)\n result = parseIntFunc(ua[strSubString](msie + 5, ua[strIndexOf]('.', msie)), 10);\n\n // IE 11 => return version number\n else if (trident > 0)\n result = parseIntFunc(ua[strSubString](rv + 3, ua[strIndexOf]('.', rv)), 10);\n\n // Edge (IE 12+) => return version number\n else if (edge > 0)\n result = parseIntFunc(ua[strSubString](edge + 5, ua[strIndexOf]('.', edge)), 10);\n\n // other browser\n return result;\n })();\n\n FRAMEWORK.extend(_base, {\n defaultOptions : defaultOptions,\n msie : msie,\n autoUpdateLoop : false,\n autoUpdateRecommended : !COMPATIBILITY.mO(),\n nativeScrollbarSize : nativeScrollbarSize,\n nativeScrollbarIsOverlaid : nativeScrollbarIsOverlaid,\n nativeScrollbarStyling : (function() {\n var result = false;\n scrollbarDummyElement.addClass('os-viewport-native-scrollbars-invisible');\n try {\n result = (scrollbarDummyElement.css('scrollbar-width') === 'none' && (msie > 9 || !msie)) || window.getComputedStyle(scrollbarDummyElement0, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\n } catch (ex) { }\n \n //fix opera bug: scrollbar styles will only appear if overflow value is scroll or auto during the activation of the style.\n //and set overflow to scroll\n //scrollbarDummyElement.css(strOverflow, strHidden).hide().css(strOverflow, strScroll).show();\n //return (scrollbarDummyElement0[LEXICON.oH] - scrollbarDummyElement0[LEXICON.cH]) === 0 && (scrollbarDummyElement0[LEXICON.oW] - scrollbarDummyElement0[LEXICON.cW]) === 0;\n \n return result;\n })(),\n overlayScrollbarDummySize : { x: 30, y: 30 },\n cssCalc : (function() {\n var dummyStyle = document.createElement('div')[LEXICON.s];\n var strCalc = 'calc';\n var i = -1;\n var prop;\n\n for(; i < VENDORS._cssPrefixes[LEXICON.l]; i++) {\n prop = i < 0 ? strCalc : VENDORS._cssPrefixes[i] + strCalc;\n dummyStyle.cssText = 'width:' + prop + '(1px);';\n if (dummyStyle[LEXICON.l])\n return prop;\n }\n return null;\n })(),\n restrictedMeasuring : (function() {\n //https://bugzilla.mozilla.org/show_bug.cgi?id=1439305\n scrollbarDummyElement.css(strOverflow, strHidden);\n var scrollSize = {\n w : scrollbarDummyElement0[LEXICON.sW],\n h : scrollbarDummyElement0[LEXICON.sH]\n };\n scrollbarDummyElement.css(strOverflow, 'visible');\n var scrollSize2 = {\n w : scrollbarDummyElement0[LEXICON.sW],\n h : scrollbarDummyElement0[LEXICON.sH]\n };\n return (scrollSize.w - scrollSize2.w) !== 0 || (scrollSize.h - scrollSize2.h) !== 0;\n })(),\n rtlScrollBehavior : (function() {\n scrollbarDummyElement.css({ 'overflow-y' : strHidden, 'overflow-x' : strScroll, 'direction' : 'rtl' }).scrollLeft(0);\n var dummyContainerOffset = scrollbarDummyElement.offset();\n var dummyContainerChildOffset = dummyContainerChild.offset();\n scrollbarDummyElement.scrollLeft(999);\n var dummyContainerScrollOffsetAfterScroll = dummyContainerChild.offset();\n return {\n //origin direction = determines if the zero scroll position is on the left or right side\n //'i' means 'invert' (i === true means that the axis must be inverted to be correct)\n //true = on the left side\n //false = on the right side\n i : dummyContainerOffset.left === dummyContainerChildOffset.left,\n //negative = determines if the maximum scroll is positive or negative\n //'n' means 'negate' (n === true means that the axis must be negated to be correct)\n //true = negative\n //false = positive\n n : dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left === 0\n };\n })(),\n supportTransform : VENDORS._cssProperty('transform') !== undefined,\n supportTransition : VENDORS._cssProperty('transition') !== undefined,\n supportPassiveEvents : (function() {\n var supportsPassive = false;\n try {\n window.addEventListener('test', null, Object.defineProperty({ }, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n }));\n } catch (e) { }\n return supportsPassive;\n })(),\n supportResizeObserver : !!COMPATIBILITY.rO(),\n supportMutationObserver : !!COMPATIBILITY.mO()\n });\n\n scrollbarDummyElement.removeAttr(LEXICON.s).remove();\n\n //Catch zoom event:\n (function () {\n if(nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y)\n return;\n\n var abs = MATH.abs;\n var windowWidth = COMPATIBILITY.wW();\n var windowHeight = COMPATIBILITY.wH();\n var windowDpr = getWindowDPR();\n var onResize = function() {\n if(INSTANCES().length > 0) {\n var newW = COMPATIBILITY.wW();\n var newH = COMPATIBILITY.wH();\n var deltaW = newW - windowWidth;\n var deltaH = newH - windowHeight;\n\n if (deltaW === 0 && deltaH === 0)\n return;\n\n var deltaWRatio = MATH.round(newW / (windowWidth / 100.0));\n var deltaHRatio = MATH.round(newH / (windowHeight / 100.0));\n var absDeltaW = abs(deltaW);\n var absDeltaH = abs(deltaH);\n var absDeltaWRatio = abs(deltaWRatio);\n var absDeltaHRatio = abs(deltaHRatio);\n var newDPR = getWindowDPR();\n\n var deltaIsBigger = absDeltaW > 2 && absDeltaH > 2;\n var difference = !differenceIsBiggerThanOne(absDeltaWRatio, absDeltaHRatio);\n var dprChanged = newDPR !== windowDpr && windowDpr > 0;\n var isZoom = deltaIsBigger && difference && dprChanged;\n var oldScrollbarSize = _base.nativeScrollbarSize;\n var newScrollbarSize;\n\n if (isZoom) {\n bodyElement.append(scrollbarDummyElement);\n newScrollbarSize = _base.nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement[0]);\n scrollbarDummyElement.remove();\n if(oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {\n FRAMEWORK.each(INSTANCES(), function () {\n if(INSTANCES(this))\n INSTANCES(this).update('zoom');\n });\n }\n }\n\n windowWidth = newW;\n windowHeight = newH;\n windowDpr = newDPR;\n }\n };\n\n function differenceIsBiggerThanOne(valOne, valTwo) {\n var absValOne = abs(valOne);\n var absValTwo = abs(valTwo);\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\n }\n\n function getWindowDPR() {\n var dDPI = window.screen.deviceXDPI || 0;\n var sDPI = window.screen.logicalXDPI || 1;\n return window.devicePixelRatio || (dDPI / sDPI);\n }\n\n FRAMEWORK(window).on('resize', onResize);\n })();\n\n function calcNativeScrollbarSize(measureElement) {\n return {\n x: measureElement[LEXICON.oH] - measureElement[LEXICON.cH],\n y: measureElement[LEXICON.oW] - measureElement[LEXICON.cW]\n };\n }\n }\n\n /**\n * The object which manages the auto update loop for all OverlayScrollbars objects. This object is initialized only once: if the first OverlayScrollbars object gets initialized.\n * @constructor\n */\n function OverlayScrollbarsAutoUpdateLoop(globals) {\n var _base = this;\n var _inArray = FRAMEWORK.inArray;\n var _getNow = COMPATIBILITY.now;\n var _strAutoUpdate = 'autoUpdate';\n var _strAutoUpdateInterval = _strAutoUpdate + 'Interval';\n var _strLength = LEXICON.l;\n var _loopingInstances = [ ];\n var _loopingInstancesIntervalCache = [ ];\n var _loopIsActive = false;\n var _loopIntervalDefault = 33;\n var _loopInterval = _loopIntervalDefault;\n var _loopTimeOld = _getNow();\n var _loopID;\n \n\n /**\n * The auto update loop which will run every 50 milliseconds or less if the update interval of a instance is lower than 50 milliseconds.\n */\n var loop = function() {\n if(_loopingInstances[_strLength] > 0 && _loopIsActive) {\n _loopID = COMPATIBILITY.rAF()(function () {\n loop();\n });\n var timeNew = _getNow();\n var timeDelta = timeNew - _loopTimeOld;\n var lowestInterval;\n var instance;\n var instanceOptions;\n var instanceAutoUpdateAllowed;\n var instanceAutoUpdateInterval;\n var now;\n\n if (timeDelta > _loopInterval) {\n _loopTimeOld = timeNew - (timeDelta % _loopInterval);\n lowestInterval = _loopIntervalDefault;\n for(var i = 0; i < _loopingInstances[_strLength]; i++) {\n instance = _loopingInstances[i];\n if (instance !== undefined) {\n instanceOptions = instance.options();\n instanceAutoUpdateAllowed = instanceOptions[_strAutoUpdate];\n instanceAutoUpdateInterval = MATH.max(1, instanceOptions[_strAutoUpdateInterval]);\n now = _getNow();\n\n if ((instanceAutoUpdateAllowed === true || instanceAutoUpdateAllowed === null) && (now - _loopingInstancesIntervalCache[i]) > instanceAutoUpdateInterval) {\n instance.update('auto');\n _loopingInstancesIntervalCache[i] = new Date(now += instanceAutoUpdateInterval);\n }\n\n lowestInterval = MATH.max(1, MATH.min(lowestInterval, instanceAutoUpdateInterval));\n }\n }\n _loopInterval = lowestInterval;\n }\n } else {\n _loopInterval = _loopIntervalDefault;\n }\n };\n\n /**\n * Add OverlayScrollbars instance to the auto update loop. Only successful if the instance isn't already added.\n * @param instance The instance which shall be updated in a loop automatically.\n */\n _base.add = function(instance) {\n if(_inArray(instance, _loopingInstances) === -1) {\n _loopingInstances.push(instance);\n _loopingInstancesIntervalCache.push(_getNow());\n if (_loopingInstances[_strLength] > 0 && !_loopIsActive) {\n _loopIsActive = true;\n globals.autoUpdateLoop = _loopIsActive;\n loop();\n }\n }\n };\n\n /**\n * Remove OverlayScrollbars instance from the auto update loop. Only successful if the instance was added before.\n * @param instance The instance which shall be updated in a loop automatically.\n */\n _base.remove = function(instance) {\n var index = _inArray(instance, _loopingInstances);\n if(index > -1) {\n //remove from loopingInstances list\n _loopingInstancesIntervalCache.splice(index, 1);\n _loopingInstances.splice(index, 1);\n\n //correct update loop behavior\n if (_loopingInstances[_strLength] === 0 && _loopIsActive) {\n _loopIsActive = false;\n globals.autoUpdateLoop = _loopIsActive;\n if(_loopID !== undefined) {\n COMPATIBILITY.cAF()(_loopID);\n _loopID = -1;\n }\n }\n }\n };\n }\n\n /**\n * A object which manages the scrollbars visibility of the target element.\n * @param pluginTargetElement The element from which the scrollbars shall be hidden.\n * @param options The custom options.\n * @param extensions The custom extensions.\n * @param globals\n * @param autoUpdateLoop\n * @returns {*}\n * @constructor\n */\n function OverlayScrollbarsInstance(pluginTargetElement, options, extensions, globals, autoUpdateLoop) {\n //shortcuts\n var type = COMPATIBILITY.type;\n var inArray = FRAMEWORK.inArray;\n var each = FRAMEWORK.each;\n \n //make correct instanceof\n var _base = new _plugin();\n var _frameworkProto = FRAMEWORK[LEXICON.p];\n \n //if passed element is no HTML element: skip and return\n if(!isHTMLElement(pluginTargetElement))\n return;\n \n //if passed element is already initialized: set passed options if there are any and return its instance\n if(INSTANCES(pluginTargetElement)) {\n var inst = INSTANCES(pluginTargetElement);\n inst.options(options);\n return inst;\n }\n\n //globals:\n var _nativeScrollbarIsOverlaid;\n var _overlayScrollbarDummySize;\n var _rtlScrollBehavior;\n var _autoUpdateRecommended;\n var _msieVersion;\n var _nativeScrollbarStyling;\n var _cssCalc;\n var _nativeScrollbarSize;\n var _supportTransition;\n var _supportTransform;\n var _supportPassiveEvents;\n var _supportResizeObserver;\n var _supportMutationObserver;\n var _restrictedMeasuring;\n\n //general readonly:\n var _initialized;\n var _destroyed;\n var _isTextarea;\n var _isBody;\n var _documentMixed;\n var _domExists;\n\n //general:\n var _isBorderBox;\n var _sizeAutoObserverAdded;\n var _paddingX;\n var _paddingY;\n var _borderX;\n var _borderY;\n var _marginX;\n var _marginY;\n var _isRTL;\n var _sleeping;\n var _contentBorderSize = { };\n var _scrollHorizontalInfo = { };\n var _scrollVerticalInfo = { };\n var _viewportSize = { };\n var _nativeScrollbarMinSize = { };\n\n //naming:\n var _strMinusHidden = '-hidden';\n var _strMarginMinus = 'margin-';\n var _strPaddingMinus = 'padding-';\n var _strBorderMinus = 'border-';\n var _strTop = 'top';\n var _strRight = 'right';\n var _strBottom = 'bottom';\n var _strLeft = 'left';\n var _strMinMinus = 'min-';\n var _strMaxMinus = 'max-';\n var _strWidth = 'width';\n var _strHeight = 'height';\n var _strFloat = 'float';\n var _strEmpty = '';\n var _strAuto = 'auto';\n var _strSync = 'sync';\n var _strScroll = 'scroll';\n var _strHundredPercent = '100%';\n var _strX = 'x';\n var _strY = 'y';\n var _strDot = '.';\n var _strSpace = ' ';\n var _strScrollbar = 'scrollbar';\n var _strMinusHorizontal = '-horizontal';\n var _strMinusVertical = '-vertical';\n var _strScrollLeft = _strScroll + 'Left';\n var _strScrollTop = _strScroll + 'Top';\n var _strMouseTouchDownEvent = 'mousedown touchstart';\n var _strMouseTouchUpEvent = 'mouseup touchend touchcancel';\n var _strMouseTouchMoveEvent = 'mousemove touchmove';\n var _strMouseTouchEnter = 'mouseenter';\n var _strMouseTouchLeave = 'mouseleave';\n var _strKeyDownEvent = 'keydown';\n var _strKeyUpEvent = 'keyup';\n var _strSelectStartEvent = 'selectstart';\n var _strTransitionEndEvent = 'transitionend webkitTransitionEnd oTransitionEnd';\n var _strResizeObserverProperty = '__overlayScrollbarsRO__';\n\n //class names:\n var _cassNamesPrefix = 'os-';\n var _classNameHTMLElement = _cassNamesPrefix + 'html';\n var _classNameHostElement = _cassNamesPrefix + 'host';\n var _classNameHostTextareaElement = _classNameHostElement + '-textarea';\n var _classNameHostScrollbarHorizontalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusHorizontal + _strMinusHidden;\n var _classNameHostScrollbarVerticalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusVertical + _strMinusHidden;\n var _classNameHostTransition = _classNameHostElement + '-transition';\n var _classNameHostRTL = _classNameHostElement + '-rtl';\n var _classNameHostResizeDisabled = _classNameHostElement + '-resize-disabled';\n var _classNameHostScrolling = _classNameHostElement + '-scrolling';\n var _classNameHostOverflow = _classNameHostElement + '-overflow';\n var _classNameHostOverflowX = _classNameHostOverflow + '-x';\n var _classNameHostOverflowY = _classNameHostOverflow + '-y';\n var _classNameTextareaElement = _cassNamesPrefix + 'textarea';\n var _classNameTextareaCoverElement = _classNameTextareaElement + '-cover';\n var _classNamePaddingElement = _cassNamesPrefix + 'padding';\n var _classNameViewportElement = _cassNamesPrefix + 'viewport';\n var _classNameViewportNativeScrollbarsInvisible = _classNameViewportElement + '-native-scrollbars-invisible';\n var _classNameViewportNativeScrollbarsOverlaid = _classNameViewportElement + '-native-scrollbars-overlaid';\n var _classNameContentElement = _cassNamesPrefix + 'content';\n var _classNameContentArrangeElement = _cassNamesPrefix + 'content-arrange';\n var _classNameContentGlueElement = _cassNamesPrefix + 'content-glue';\n var _classNameSizeAutoObserverElement = _cassNamesPrefix + 'size-auto-observer';\n var _classNameResizeObserverElement = _cassNamesPrefix + 'resize-observer';\n var _classNameResizeObserverItemElement = _cassNamesPrefix + 'resize-observer-item';\n var _classNameResizeObserverItemFinalElement = _classNameResizeObserverItemElement + '-final';\n var _classNameTextInherit = _cassNamesPrefix + 'text-inherit';\n var _classNameScrollbar = _cassNamesPrefix + _strScrollbar;\n var _classNameScrollbarTrack = _classNameScrollbar + '-track';\n var _classNameScrollbarTrackOff = _classNameScrollbarTrack + '-off';\n var _classNameScrollbarHandle = _classNameScrollbar + '-handle';\n var _classNameScrollbarHandleOff = _classNameScrollbarHandle + '-off';\n var _classNameScrollbarUnusable = _classNameScrollbar + '-unusable';\n var _classNameScrollbarAutoHidden = _classNameScrollbar + '-' + _strAuto + _strMinusHidden;\n var _classNameScrollbarCorner = _classNameScrollbar + '-corner';\n var _classNameScrollbarCornerResize = _classNameScrollbarCorner + '-resize';\n var _classNameScrollbarCornerResizeB = _classNameScrollbarCornerResize + '-both';\n var _classNameScrollbarCornerResizeH = _classNameScrollbarCornerResize + _strMinusHorizontal;\n var _classNameScrollbarCornerResizeV = _classNameScrollbarCornerResize + _strMinusVertical;\n var _classNameScrollbarHorizontal = _classNameScrollbar + _strMinusHorizontal;\n var _classNameScrollbarVertical = _classNameScrollbar + _strMinusVertical;\n var _classNameDragging = _cassNamesPrefix + 'dragging';\n var _classNameThemeNone = _cassNamesPrefix + 'theme-none';\n var _classNamesDynamicDestroy = [\n _classNameViewportNativeScrollbarsInvisible,\n _classNameViewportNativeScrollbarsOverlaid,\n _classNameScrollbarTrackOff,\n _classNameScrollbarHandleOff,\n _classNameScrollbarUnusable,\n _classNameScrollbarAutoHidden,\n _classNameScrollbarCornerResize,\n _classNameScrollbarCornerResizeB,\n _classNameScrollbarCornerResizeH,\n _classNameScrollbarCornerResizeV,\n _classNameDragging].join(_strSpace);\n \n //callbacks:\n var _callbacksInitQeueue = [ ];\n\n //options:\n var _defaultOptions;\n var _currentOptions;\n var _currentPreparedOptions;\n\n //extensions:\n var _extensions = { };\n var _extensionsPrivateMethods = 'added removed on contract';\n\n //update\n var _lastUpdateTime;\n var _swallowedUpdateHints = { };\n var _swallowedUpdateTimeout;\n var _swallowUpdateLag = 42;\n var _imgs = [ ];\n\n //DOM elements:\n var _windowElement;\n var _documentElement;\n var _htmlElement;\n var _bodyElement;\n var _targetElement; //the target element of this OverlayScrollbars object\n var _hostElement; //the host element of this OverlayScrollbars object -> may be the same as targetElement\n var _sizeAutoObserverElement; //observes size auto changes\n var _sizeObserverElement; //observes size and padding changes\n var _paddingElement; //manages the padding\n var _viewportElement; //is the viewport of our scrollbar model\n var _contentElement; //the element which holds the content\n var _contentArrangeElement; //is needed for correct sizing of the content element (only if native scrollbars are overlays)\n var _contentGlueElement; //has always the size of the content element\n var _textareaCoverElement; //only applied if target is a textarea element. Used for correct size calculation and for prevention of uncontrolled scrolling\n var _scrollbarCornerElement;\n var _scrollbarHorizontalElement;\n var _scrollbarHorizontalTrackElement;\n var _scrollbarHorizontalHandleElement;\n var _scrollbarVerticalElement;\n var _scrollbarVerticalTrackElement;\n var _scrollbarVerticalHandleElement;\n var _windowElementNative;\n var _documentElementNative;\n var _targetElementNative;\n var _hostElementNative;\n var _sizeAutoObserverElementNative;\n var _sizeObserverElementNative;\n var _paddingElementNative;\n var _viewportElementNative;\n var _contentElementNative;\n\n //Cache:\n var _hostSizeCache;\n var _contentScrollSizeCache;\n var _arrangeContentSizeCache;\n var _hasOverflowCache;\n var _hideOverflowCache;\n var _widthAutoCache;\n var _heightAutoCache;\n var _cssMaxValueCache;\n var _cssBoxSizingCache;\n var _cssPaddingCache;\n var _cssBorderCache;\n var _cssMarginCache;\n var _cssDirectionCache;\n var _cssDirectionDetectedCache;\n var _paddingAbsoluteCache;\n var _clipAlwaysCache;\n var _contentGlueSizeCache;\n var _overflowBehaviorCache;\n var _overflowAmountCache;\n var _ignoreOverlayScrollbarHidingCache;\n var _autoUpdateCache;\n var _sizeAutoCapableCache;\n var _contentElementScrollSizeChangeDetectedCache;\n var _hostElementSizeChangeDetectedCache;\n var _scrollbarsVisibilityCache;\n var _scrollbarsAutoHideCache;\n var _scrollbarsClickScrollingCache;\n var _scrollbarsDragScrollingCache;\n var _resizeCache;\n var _normalizeRTLCache;\n var _classNameCache;\n var _oldClassName;\n var _textareaAutoWrappingCache;\n var _textareaInfoCache;\n var _textareaSizeCache;\n var _textareaDynHeightCache;\n var _textareaDynWidthCache;\n var _bodyMinSizeCache;\n var _viewportScrollSizeCache;\n var _displayIsHiddenCache;\n var _updateAutoCache = { };\n\n //MutationObserver:\n var _mutationObserverHost;\n var _mutationObserverContent;\n var _mutationObserverHostCallback;\n var _mutationObserverContentCallback;\n var _mutationObserversConnected;\n var _mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\n var _mutationObserverAttrsHost = [LEXICON.i, LEXICON.c, LEXICON.s, 'open'];\n\n //events:\n var _destroyEvents = [ ];\n\n //textarea:\n var _textareaHasFocus;\n\n //scrollbars:\n var _scrollbarsAutoHideTimeoutId;\n var _scrollbarsAutoHideMoveTimeoutId;\n var _scrollbarsAutoHideDelay;\n var _scrollbarsAutoHideNever;\n var _scrollbarsAutoHideScroll;\n var _scrollbarsAutoHideMove;\n var _scrollbarsAutoHideLeave;\n var _scrollbarsHandleHovered;\n var _scrollbarsHandlesDefineScrollPos;\n \n //resize\n var _resizeNone;\n var _resizeBoth;\n var _resizeHorizontal;\n var _resizeVertical;\n \n \n //==== Event Listener ====//\n\n /**\n * Adds or removes a event listener from the given element. \n * @param element The element to which the event listener shall be applied or removed.\n * @param eventNames The name(s) of the events.\n * @param listener The method which shall be called.\n * @param remove True if the handler shall be removed, false or undefined if the handler shall be added.\n */\n function setupResponsiveEventListener(element, eventNames, listener, remove, passive) {\n var collected = type(eventNames) == TYPES.a && type(listener) == TYPES.a;\n var method = remove ? 'removeEventListener' : 'addEventListener';\n var onOff = remove ? 'off' : 'on';\n var events = collected ? false : eventNames.split(_strSpace)\n var i = 0;\n\n if(collected) {\n for (; i < eventNames[LEXICON.l]; i++)\n setupResponsiveEventListener(element, eventNames[i], listener[i], remove);\n }\n else {\n for (; i < events[LEXICON.l]; i++) {\n if(_supportPassiveEvents)\n element[0][method](events[i], listener, { passive: passive || false });\n else\n element[onOff](events[i], listener);\n }\n }\n }\n\n\n function addDestroyEventListener(element, eventNames, listener, passive) {\n setupResponsiveEventListener(element, eventNames, listener, false, passive);\n _destroyEvents.push(COMPATIBILITY.bind(setupResponsiveEventListener, 0, element, eventNames, listener, true, passive));\n }\n\n //==== Resize Observer ====//\n\n /**\n * Adds or removes a resize observer from the given element.\n * @param targetElement The element to which the resize observer shall be added or removed.\n * @param onElementResizedCallback The callback which is fired every time the resize observer registers a size change or false / undefined if the resizeObserver shall be removed.\n */\n function setupResizeObserver(targetElement, onElementResizedCallback) {\n if(targetElement) {\n var resizeObserver = COMPATIBILITY.rO();\n var strAnimationStartEvent = 'animationstart mozAnimationStart webkitAnimationStart MSAnimationStart';\n var strChildNodes = 'childNodes';\n var constScroll = 3333333;\n var callback = function () {\n targetElement[_strScrollTop](constScroll)[_strScrollLeft](_isRTL ? _rtlScrollBehavior.n ? -constScroll : _rtlScrollBehavior.i ? 0 : constScroll : constScroll);\n onElementResizedCallback();\n };\n //add resize observer:\n if(onElementResizedCallback) {\n if (_supportResizeObserver) {\n var element = targetElement.append(generateDiv(_classNameResizeObserverElement + ' observed')).contents()[0];\n var observer = element[_strResizeObserverProperty] = new resizeObserver(callback);\n observer.observe(element);\n }\n else {\n if (_msieVersion > 9 || !_autoUpdateRecommended) {\n targetElement.prepend(\n generateDiv(_classNameResizeObserverElement,\n generateDiv({ c : _classNameResizeObserverItemElement, dir : 'ltr' },\n generateDiv(_classNameResizeObserverItemElement,\n generateDiv(_classNameResizeObserverItemFinalElement)\n ) +\n generateDiv(_classNameResizeObserverItemElement,\n generateDiv({ c : _classNameResizeObserverItemFinalElement, style : 'width: 200%; height: 200%' })\n )\n )\n )\n );\n\n var observerElement = targetElement[0][strChildNodes][0][strChildNodes][0];\n var shrinkElement = FRAMEWORK(observerElement[strChildNodes][1]);\n var expandElement = FRAMEWORK(observerElement[strChildNodes][0]);\n var expandElementChild = FRAMEWORK(expandElement[0][strChildNodes][0]);\n var widthCache = observerElement[LEXICON.oW];\n var heightCache = observerElement[LEXICON.oH];\n var isDirty;\n var rAFId;\n var currWidth;\n var currHeight;\n var factor = 2;\n var nativeScrollbarSize = globals.nativeScrollbarSize; //care don't make changes to this object!!!\n var reset = function () {\n /*\n var sizeResetWidth = observerElement[LEXICON.oW] + nativeScrollbarSize.x * factor + nativeScrollbarSize.y * factor + _overlayScrollbarDummySize.x + _overlayScrollbarDummySize.y;\n var sizeResetHeight = observerElement[LEXICON.oH] + nativeScrollbarSize.x * factor + nativeScrollbarSize.y * factor + _overlayScrollbarDummySize.x + _overlayScrollbarDummySize.y;\n var expandChildCSS = {};\n expandChildCSS[_strWidth] = sizeResetWidth;\n expandChildCSS[_strHeight] = sizeResetHeight;\n expandElementChild.css(expandChildCSS);\n\n\n expandElement[_strScrollLeft](sizeResetWidth)[_strScrollTop](sizeResetHeight);\n shrinkElement[_strScrollLeft](sizeResetWidth)[_strScrollTop](sizeResetHeight);\n */\n expandElement[_strScrollLeft](constScroll)[_strScrollTop](constScroll);\n shrinkElement[_strScrollLeft](constScroll)[_strScrollTop](constScroll);\n };\n var onResized = function () {\n rAFId = 0;\n if (!isDirty)\n return;\n\n widthCache = currWidth;\n heightCache = currHeight;\n callback();\n };\n var onScroll = function (event) {\n currWidth = observerElement[LEXICON.oW];\n currHeight = observerElement[LEXICON.oH];\n isDirty = currWidth != widthCache || currHeight != heightCache;\n\n if (event && isDirty && !rAFId) {\n COMPATIBILITY.cAF()(rAFId);\n rAFId = COMPATIBILITY.rAF()(onResized);\n }\n else if(!event)\n onResized();\n\n reset();\n if (event) {\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n }\n return false;\n };\n var expandChildCSS = {};\n var observerElementCSS = {};\n\n setTopRightBottomLeft(observerElementCSS, _strEmpty, [\n -((nativeScrollbarSize.y + 1) * factor),\n nativeScrollbarSize.x * -factor,\n nativeScrollbarSize.y * -factor,\n -((nativeScrollbarSize.x + 1) * factor)\n ]);\n\n FRAMEWORK(observerElement).css(observerElementCSS);\n expandElement.on(_strScroll, onScroll);\n shrinkElement.on(_strScroll, onScroll);\n targetElement.on(strAnimationStartEvent, function () {\n onScroll(false);\n });\n //lets assume that the divs will never be that large and a constant value is enough\n expandChildCSS[_strWidth] = constScroll;\n expandChildCSS[_strHeight] = constScroll;\n expandElementChild.css(expandChildCSS);\n\n reset();\n }\n else {\n var attachEvent = _documentElementNative.attachEvent;\n var isIE = _msieVersion !== undefined;\n if (attachEvent) {\n targetElement.prepend(generateDiv(_classNameResizeObserverElement));\n findFirst(targetElement, _strDot + _classNameResizeObserverElement)[0].attachEvent('onresize', callback);\n }\n else {\n var obj = _documentElementNative.createElement(TYPES.o);\n obj.setAttribute('tabindex', '-1');\n obj.setAttribute(LEXICON.c, _classNameResizeObserverElement);\n obj.onload = function () {\n var wnd = this.contentDocument.defaultView;\n wnd.addEventListener('resize', callback);\n wnd.document.documentElement.style.display = 'none';\n };\n obj.type = 'text/html';\n if (isIE)\n targetElement.prepend(obj);\n obj.data = 'about:blank';\n if (!isIE)\n targetElement.prepend(obj);\n targetElement.on(strAnimationStartEvent, callback);\n }\n }\n }\n\n if (targetElement[0] === _sizeObserverElementNative) {\n var directionChanged = function() {\n var dir = _hostElement.css('direction');\n var css = {};\n var scrollLeftValue = 0;\n var result = false;\n if (dir !== _cssDirectionDetectedCache) {\n if (dir === 'ltr') {\n css[_strLeft] = 0;\n css[_strRight] = _strAuto;\n scrollLeftValue = constScroll;\n }\n else {\n css[_strLeft] = _strAuto;\n css[_strRight] = 0;\n scrollLeftValue = _rtlScrollBehavior.n ? -constScroll : _rtlScrollBehavior.i ? 0 : constScroll;\n }\n //execution order is important for IE!!!\n _sizeObserverElement.children().eq(0).css(css);\n _sizeObserverElement[_strScrollLeft](scrollLeftValue)[_strScrollTop](constScroll);\n _cssDirectionDetectedCache = dir;\n result = true;\n }\n return result;\n };\n directionChanged();\n addDestroyEventListener(targetElement, _strScroll, function(event) {\n if (directionChanged())\n update();\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n return false; \n });\n }\n }\n //remove resize observer:\n else {\n if (_supportResizeObserver) {\n var element = targetElement.contents()[0];\n var resizeObserverObj = element[_strResizeObserverProperty];\n if(resizeObserverObj) {\n resizeObserverObj.disconnect();\n delete element[_strResizeObserverProperty];\n }\n }\n else {\n remove(targetElement.children(_strDot + _classNameResizeObserverElement).eq(0));\n }\n }\n }\n }\n\n /**\n * Freezes or unfreezes the given resize observer.\n * @param targetElement The element to which the target resize observer is applied.\n * @param freeze True if the resize observer shall be frozen, false otherwise.\n \n function freezeResizeObserver(targetElement, freeze) {\n if (targetElement !== undefined) {\n if(freeze) {\n if (_supportResizeObserver) {\n var element = targetElement.contents()[0];\n element[_strResizeObserverProperty].unobserve(element);\n }\n else {\n targetElement = targetElement.children(_strDot + _classNameResizeObserverElement).eq(0);\n var w = targetElement.css(_strWidth);\n var h = targetElement.css(_strHeight);\n var css = {};\n css[_strWidth] = w;\n css[_strHeight] = h;\n targetElement.css(css);\n }\n }\n else {\n if (_supportResizeObserver) {\n var element = targetElement.contents()[0];\n element[_strResizeObserverProperty].observe(element);\n }\n else {\n var css = { };\n css[_strHeight] = _strEmpty;\n css[_strWidth] = _strEmpty;\n targetElement.children(_strDot + _classNameResizeObserverElement).eq(0).css(css);\n }\n }\n }\n }\n */\n\n\n //==== Mutation Observers ====//\n\n /**\n * Creates MutationObservers for the host and content Element if they are supported.\n */\n function createMutationObservers() {\n if (_supportMutationObserver) {\n var mutationObserverContentLag = 11;\n var mutationObserver = COMPATIBILITY.mO();\n var contentLastUpdate = COMPATIBILITY.now();\n var mutationTarget;\n var mutationAttrName;\n var contentTimeout;\n var now;\n var sizeAuto;\n var action;\n\n _mutationObserverHostCallback = function(mutations) {\n var doUpdate = false;\n var mutation;\n \n if (_initialized && !_sleeping) {\n each(mutations, function () {\n mutation = this;\n mutationTarget = mutation.target;\n mutationAttrName = mutation.attributeName;\n\n if (mutationAttrName === LEXICON.c)\n doUpdate = hostClassNamesChanged(mutation.oldValue, mutationTarget.className);\n else if (mutationAttrName === LEXICON.s)\n doUpdate = mutation.oldValue !== mutationTarget[LEXICON.s].cssText;\n else\n doUpdate = true;\n\n if (doUpdate)\n return false;\n });\n\n if (doUpdate)\n _base.update(_strAuto);\n }\n return doUpdate;\n };\n _mutationObserverContentCallback = function (mutations) {\n var doUpdate = false;\n var mutation;\n \n if (_initialized && !_sleeping) {\n each(mutations, function () {\n mutation = this;\n doUpdate = isUnknownMutation(mutation);\n return !doUpdate;\n });\n\n if (doUpdate) {\n now = COMPATIBILITY.now();\n sizeAuto = (_heightAutoCache || _widthAutoCache);\n action = function () {\n if(!_destroyed) {\n contentLastUpdate = now;\n\n //if cols, rows or wrap attr was changed\n if (_isTextarea)\n textareaUpdate();\n\n if (sizeAuto)\n update();\n else\n _base.update(_strAuto);\n }\n };\n clearTimeout(contentTimeout);\n if (mutationObserverContentLag <= 0 || now - contentLastUpdate > mutationObserverContentLag || !sizeAuto)\n action();\n else\n contentTimeout = setTimeout(action, mutationObserverContentLag);\n }\n }\n return doUpdate;\n }\n\n _mutationObserverHost = new mutationObserver(_mutationObserverHostCallback);\n _mutationObserverContent = new mutationObserver(_mutationObserverContentCallback);\n }\n }\n\n /**\n * Connects the MutationObservers if they are supported.\n */\n function connectMutationObservers() {\n if (_supportMutationObserver && !_mutationObserversConnected) {\n _mutationObserverHost.observe(_hostElementNative, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: _mutationObserverAttrsHost\n });\n\n _mutationObserverContent.observe(_isTextarea ? _targetElementNative : _contentElementNative, {\n attributes: true,\n attributeOldValue: true,\n subtree: !_isTextarea,\n childList: !_isTextarea,\n characterData: !_isTextarea,\n attributeFilter: _isTextarea ? _mutationObserverAttrsTextarea : _mutationObserverAttrsHost\n });\n\n _mutationObserversConnected = true;\n }\n }\n\n /**\n * Disconnects the MutationObservers if they are supported.\n */\n function disconnectMutationObservers() {\n if (_supportMutationObserver && _mutationObserversConnected) {\n _mutationObserverHost.disconnect();\n _mutationObserverContent.disconnect();\n\n _mutationObserversConnected = false;\n }\n }\n\n \n //==== Events of elements ====//\n\n /**\n * This method gets called every time the host element gets resized. IMPORTANT: Padding changes are detected too!!\n * It refreshes the hostResizedEventArgs and the hostSizeResizeCache.\n * If there are any size changes, the update method gets called.\n */\n function hostOnResized() {\n if (!_sleeping) {\n var changed;\n var hostSize = {\n w: _sizeObserverElementNative[LEXICON.sW],\n h: _sizeObserverElementNative[LEXICON.sH]\n };\n \n changed = checkCache(hostSize, _hostElementSizeChangeDetectedCache);\n _hostElementSizeChangeDetectedCache = hostSize;\n if (changed)\n update({ _hostSizeChanged : true });\n }\n }\n\n /**\n * The mouse enter event of the host element. This event is only needed for the autoHide feature.\n */\n function hostOnMouseEnter() {\n if (_scrollbarsAutoHideLeave)\n refreshScrollbarsAutoHide(true);\n }\n\n /**\n * The mouse leave event of the host element. This event is only needed for the autoHide feature.\n */\n function hostOnMouseLeave() {\n if (_scrollbarsAutoHideLeave && !_bodyElement.hasClass(_classNameDragging))\n refreshScrollbarsAutoHide(false);\n }\n\n /**\n * The mouse move event of the host element. This event is only needed for the autoHide \"move\" feature.\n */\n function hostOnMouseMove() {\n if (_scrollbarsAutoHideMove) {\n refreshScrollbarsAutoHide(true);\n clearTimeout(_scrollbarsAutoHideMoveTimeoutId);\n _scrollbarsAutoHideMoveTimeoutId = setTimeout(function () {\n if (_scrollbarsAutoHideMove && !_destroyed)\n refreshScrollbarsAutoHide(false);\n }, 100);\n }\n }\n\n /**\n * Prevents text from deselection if attached to the document element on the mousedown event of a DOM element.\n * @param event The select start event.\n */\n function documentOnSelectStart(event) {\n COMPATIBILITY.prvD(event);\n return false;\n }\n\n /**\n * A callback which will be called after a img element has downloaded its src asynchronous.\n */\n function imgOnLoad() {\n update({ _contentSizeChanged : true });\n }\n\n /**\n * Adds or removes mouse & touch events of the host element. (for handling auto-hiding of the scrollbars)\n * @param destroy Indicates whether the events shall be added or removed.\n */\n function setupHostMouseTouchEvents(destroy) {\n setupResponsiveEventListener(_hostElement, \n _strMouseTouchMoveEvent, \n hostOnMouseMove, \n (_scrollbarsAutoHideMove ? destroy : true), true);\n setupResponsiveEventListener(_hostElement, \n [ _strMouseTouchEnter, _strMouseTouchLeave ],\n [ hostOnMouseEnter, hostOnMouseLeave ], \n (_scrollbarsAutoHideMove ? true : destroy), true);\n\n //if the plugin is initialized and the mouse is over the host element, make the scrollbars visible\n if(!_initialized && !destroy)\n _hostElement.one('mouseover', hostOnMouseEnter);\n }\n\n\n //==== Update Detection ====//\n\n /**\n * Measures the min width and min height of the body element and refreshes the related cache.\n * @returns {boolean} True if the min width or min height has changed, false otherwise.\n */\n function bodyMinSizeChanged() {\n var bodyMinSize = {};\n if (_isBody && _contentArrangeElement) {\n bodyMinSize.w = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strWidth));\n bodyMinSize.h = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strHeight));\n bodyMinSize.c = checkCache(bodyMinSize, _bodyMinSizeCache);\n bodyMinSize.f = true; //flag for \"measured at least once\"\n }\n _bodyMinSizeCache = bodyMinSize;\n return !!bodyMinSize.c;\n }\n\n /**\n * Returns true if the class names really changed (new class without plugin host prefix)\n * @param oldCassNames The old ClassName string.\n * @param newClassNames The new ClassName string.\n * @returns {boolean} True if the class names has really changed, false otherwise.\n */\n function hostClassNamesChanged(oldCassNames, newClassNames) {\n var currClasses = (newClassNames !== undefined && newClassNames !== null) ? newClassNames.split(_strSpace) : _strEmpty;\n var oldClasses = (oldCassNames !== undefined && oldCassNames !== null) ? oldCassNames.split(_strSpace) : _strEmpty;\n if (currClasses === _strEmpty && oldClasses === _strEmpty)\n return false;\n var diff = getArrayDifferences(oldClasses, currClasses);\n var changed = false;\n var oldClassNames = _oldClassName !== undefined && _oldClassName !== null ? _oldClassName.split(_strSpace) : [_strEmpty];\n var currClassNames = _classNameCache !== undefined && _classNameCache !== null ? _classNameCache.split(_strSpace) : [_strEmpty];\n\n //remove none theme from diff list to prevent update\n var idx = inArray(_classNameThemeNone, diff);\n var curr;\n var i;\n var v;\n var o;\n var c;\n\n if (idx > -1)\n diff.splice(idx, 1);\n\n for (i = 0; i < diff.length; i++) {\n curr = diff[i];\n if (curr.indexOf(_classNameHostElement) !== 0) {\n o = true;\n c = true;\n for (v = 0; v < oldClassNames.length; v++) {\n if (curr === oldClassNames[v]) {\n o = false;\n break;\n }\n }\n for (v = 0; v < currClassNames.length; v++) {\n if (curr === currClassNames[v]) {\n c = false;\n break;\n }\n }\n if (o && c) {\n changed = true;\n break;\n }\n }\n\n }\n return changed;\n }\n\n /**\n * Returns true if the given mutation is not from a from the plugin generated element. If the target element is a textarea the mutation is always unknown.\n * @param mutation The mutation which shall be checked.\n * @returns {boolean} True if the mutation is from a unknown element, false otherwise.\n */\n function isUnknownMutation(mutation) {\n var attributeName = mutation.attributeName;\n var mutationTarget = mutation.target;\n var mutationType = mutation.type;\n var strClosest = 'closest';\n\n if (mutationTarget === _contentElementNative)\n return attributeName === null;\n if (mutationType === 'attributes' && (attributeName === LEXICON.c || attributeName === LEXICON.s) && !_isTextarea) {\n //ignore className changes by the plugin\n if (attributeName === LEXICON.c && FRAMEWORK(mutationTarget).hasClass(_classNameHostElement))\n return hostClassNamesChanged(mutation.oldValue, mutationTarget.getAttribute(LEXICON.c));\n\n //only do it of browser support it natively\n if (typeof mutationTarget[strClosest] != TYPES.f)\n return true;\n if (mutationTarget[strClosest](_strDot + _classNameResizeObserverElement) !== null ||\n mutationTarget[strClosest](_strDot + _classNameScrollbar) !== null ||\n mutationTarget[strClosest](_strDot + _classNameScrollbarCorner) !== null)\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the content size was changed since the last time this method was called.\n * @returns {boolean} True if the content size was changed, false otherwise.\n */\n function updateAutoContentSizeChanged() {\n if (_sleeping)\n return false;\n \n var contentMeasureElement = getContentMeasureElement();\n var textareaValueLength = _isTextarea && _widthAutoCache && !_textareaAutoWrappingCache ? _targetElement.val().length : 0;\n var setCSS = !_mutationObserversConnected && _widthAutoCache && !_isTextarea;\n var viewportScrollSize = { };\n var css = { };\n var float;\n var bodyMinSizeC;\n var changed;\n var viewportScrollSizeChanged;\n var contentElementScrollSize;\n\n //fix for https://bugzilla.mozilla.org/show_bug.cgi?id=1439305, it only works with \"clipAlways : true\"\n //it can work with \"clipAlways : false\" too, but I had to set the overflow of the viewportElement to hidden every time before measuring\n if(_restrictedMeasuring) {\n viewportScrollSize = {\n x : _viewportElementNative[LEXICON.sW],\n y : _viewportElementNative[LEXICON.sH]\n }\n }\n if (setCSS) {\n float = _contentElement.css(_strFloat);\n css[_strFloat] = _isRTL ? _strRight : _strLeft;\n css[_strWidth] = _strAuto;\n _contentElement.css(css);\n }\n contentElementScrollSize = {\n w: contentMeasureElement[LEXICON.sW] + textareaValueLength,\n h: contentMeasureElement[LEXICON.sH] + textareaValueLength\n };\n if (setCSS) {\n css[_strFloat] = float;\n css[_strWidth] = _strHundredPercent;\n _contentElement.css(css);\n }\n\n bodyMinSizeC = bodyMinSizeChanged();\n changed = checkCache(contentElementScrollSize, _contentElementScrollSizeChangeDetectedCache);\n viewportScrollSizeChanged = checkCache(viewportScrollSize, _viewportScrollSizeCache);\n\n _contentElementScrollSizeChangeDetectedCache = contentElementScrollSize;\n _viewportScrollSizeCache = viewportScrollSize;\n\n return changed || bodyMinSizeC || viewportScrollSizeChanged;\n }\n\n /**\n * Returns true when a attribute which the MutationObserver would observe has changed. \n * @returns {boolean} True if one of the attributes which a MutationObserver would observe has changed, false or undefined otherwise.\n */\n function meaningfulAttrsChanged() {\n if (_sleeping || _mutationObserversConnected)\n return;\n \n var changed;\n var elem;\n var curr;\n var cache;\n var checks = [\n {\n _elem: _hostElement, \n _props : _mutationObserverAttrsHost.concat(':visible')\n },\n {\n _elem: _isTextarea ? _targetElement : undefined, \n _props : _mutationObserverAttrsTextarea\n }\n ];\n \n each(checks, function(index, check) { \n elem = check._elem;\n if(elem) {\n each(check._props, function(index, prop) { \n curr = prop.charAt(0) === ':' ? elem.is(prop) : elem.attr(prop);\n cache = _updateAutoCache[prop];\n \n changed = changed || checkCache(curr, cache);\n \n _updateAutoCache[prop] = curr;\n });\n }\n });\n \n return changed;\n }\n\n /**\n * Checks is a CSS Property of a child element is affecting the scroll size of the content.\n * @param propertyName The CSS property name.\n * @returns {boolean} True if the property is affecting the content scroll size, false otherwise.\n */\n function isSizeAffectingCSSProperty(propertyName) {\n if (!_initialized)\n return true;\n var flexGrow = 'flex-grow';\n var flexShrink = 'flex-shrink';\n var flexBasis = 'flex-basis';\n var affectingPropsX = [\n _strWidth,\n _strMinMinus + _strWidth,\n _strMaxMinus + _strWidth,\n _strMarginMinus + _strLeft,\n _strMarginMinus + _strRight,\n _strLeft,\n _strRight,\n 'font-weight',\n 'word-spacing',\n flexGrow,\n flexShrink,\n flexBasis\n ];\n var affectingPropsXContentBox = [\n _strPaddingMinus + _strLeft,\n _strPaddingMinus + _strRight,\n _strBorderMinus + _strLeft + _strWidth,\n _strBorderMinus + _strRight + _strWidth\n ];\n var affectingPropsY = [\n _strHeight,\n _strMinMinus + _strHeight,\n _strMaxMinus + _strHeight,\n _strMarginMinus + _strTop,\n _strMarginMinus + _strBottom,\n _strTop,\n _strBottom,\n 'line-height',\n flexGrow,\n flexShrink,\n flexBasis\n ];\n var affectingPropsYContentBox = [\n _strPaddingMinus + _strTop,\n _strPaddingMinus + _strBottom,\n _strBorderMinus + _strTop + _strWidth,\n _strBorderMinus + _strBottom + _strWidth\n ];\n var _strS = 's';\n var _strVS = 'v-s';\n var checkX = _overflowBehaviorCache.x === _strS || _overflowBehaviorCache.x === _strVS;\n var checkY = _overflowBehaviorCache.y === _strS || _overflowBehaviorCache.y === _strVS;\n var sizeIsAffected = false;\n var checkPropertyName = function (arr, name) {\n for (var i = 0; i < arr[LEXICON.l]; i++) {\n if (arr[i] === name)\n return true;\n }\n return false;\n };\n\n if (checkY) {\n sizeIsAffected = checkPropertyName(affectingPropsY, propertyName);\n if (!sizeIsAffected && !_isBorderBox)\n sizeIsAffected = checkPropertyName(affectingPropsYContentBox, propertyName);\n }\n if (checkX && !sizeIsAffected) {\n sizeIsAffected = checkPropertyName(affectingPropsX, propertyName);\n if (!sizeIsAffected && !_isBorderBox)\n sizeIsAffected = checkPropertyName(affectingPropsXContentBox, propertyName);\n }\n return sizeIsAffected;\n }\n\n \n //==== Update ====//\n\n /**\n * Updates the variables and size of the textarea element, and manages the scroll on new line or new character.\n */\n function textareaUpdate() {\n if (!_sleeping) {\n var wrapAttrOff = !_textareaAutoWrappingCache;\n var minWidth = _viewportSize.w;\n var minHeight = _viewportSize.h;\n var css = { };\n var doMeasure = _widthAutoCache || wrapAttrOff;\n var origWidth;\n var width;\n var origHeight;\n var height;\n\n //reset min size\n css[_strMinMinus + _strWidth] = _strEmpty;\n css[_strMinMinus + _strHeight] = _strEmpty;\n\n //set width auto\n css[_strWidth] = _strAuto;\n _targetElement.css(css);\n\n //measure width\n origWidth = _targetElementNative[LEXICON.oW];\n width = doMeasure ? MATH.max(origWidth, _targetElementNative[LEXICON.sW] - 1) : 1;\n /*width += (_widthAutoCache ? _marginX + (!_isBorderBox ? wrapAttrOff ? 0 : _paddingX + _borderX : 0) : 0);*/\n\n //set measured width\n css[_strWidth] = _widthAutoCache ? _strAuto /*width*/ : _strHundredPercent;\n css[_strMinMinus + _strWidth] = _strHundredPercent;\n\n //set height auto\n css[_strHeight] = _strAuto;\n _targetElement.css(css);\n\n //measure height\n origHeight = _targetElementNative[LEXICON.oH];\n height = MATH.max(origHeight, _targetElementNative[LEXICON.sH] - 1);\n\n //append correct size values\n css[_strWidth] = width;\n css[_strHeight] = height;\n _textareaCoverElement.css(css);\n\n //apply min width / min height to prevent textarea collapsing\n css[_strMinMinus + _strWidth] = minWidth /*+ (!_isBorderBox && _widthAutoCache ? _paddingX + _borderX : 0)*/;\n css[_strMinMinus + _strHeight] = minHeight /*+ (!_isBorderBox && _heightAutoCache ? _paddingY + _borderY : 0)*/;\n _targetElement.css(css);\n\n return {\n _originalWidth: origWidth,\n _originalHeight: origHeight,\n _dynamicWidth: width,\n _dynamicHeight: height\n };\n }\n }\n\n /**\n * Updates the plugin and DOM to the current options.\n * This method should only be called if a update is 100% required.\n * @param updateHints A objects which contains hints for this update:\n * {\n * _hostSizeChanged : boolean,\n * _contentSizeChanged : boolean,\n * _force : boolean, == preventSwallowing\n * _changedOptions : { }, == preventSwallowing && preventSleep\n * }\n */\n function update(updateHints) {\n clearTimeout(_swallowedUpdateTimeout);\n updateHints = updateHints || { };\n _swallowedUpdateHints._hostSizeChanged |= updateHints._hostSizeChanged;\n _swallowedUpdateHints._contentSizeChanged |= updateHints._contentSizeChanged;\n _swallowedUpdateHints._force |= updateHints._force;\n \n var now = COMPATIBILITY.now();\n var hostSizeChanged = !!_swallowedUpdateHints._hostSizeChanged;\n var contentSizeChanged = !!_swallowedUpdateHints._contentSizeChanged;\n var force = !!_swallowedUpdateHints._force;\n var changedOptions = updateHints._changedOptions; \n var swallow = _swallowUpdateLag > 0 && _initialized && !_destroyed && !force && !changedOptions && (now - _lastUpdateTime) < _swallowUpdateLag && (!_heightAutoCache && !_widthAutoCache); \n var displayIsHidden;\n\n if(swallow)\n _swallowedUpdateTimeout = setTimeout(update, _swallowUpdateLag);\n\n //abort update due to:\n //destroyed\n //swallowing\n //sleeping\n //host is hidden or has false display\n if (_destroyed || swallow || (_sleeping && !changedOptions) || (_initialized && !force && (displayIsHidden = _hostElement.is(':hidden'))) || _hostElement.css('display') === 'inline')\n return;\n\n _lastUpdateTime = now;\n _swallowedUpdateHints = { };\n \n //if scrollbar styling is possible and native scrollbars aren't overlaid the scrollbar styling will be applied which hides the native scrollbars completely.\n if (_nativeScrollbarStyling && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {\n //native scrollbars are hidden, so change the values to zero\n _nativeScrollbarSize.x = 0;\n _nativeScrollbarSize.y = 0;\n }\n else {\n //refresh native scrollbar size (in case of zoom)\n _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);\n }\n\n // Scrollbar padding is needed for firefox, because firefox hides scrollbar automatically if the size of the div is too small.\n // The calculation: [scrollbar size +3 *3]\n // (+3 because of possible decoration e.g. borders, margins etc., but only if native scrollbar is NOT a overlaid scrollbar)\n // (*3 because (1)increase / (2)decrease -button and (3)resize handle)\n _nativeScrollbarMinSize = {\n x: (_nativeScrollbarSize.x + (_nativeScrollbarIsOverlaid.x ? 0 : 3)) * 3,\n y: (_nativeScrollbarSize.y + (_nativeScrollbarIsOverlaid.y ? 0 : 3)) * 3\n };\n \n //changedOptions = changedOptions || { };\n //freezeResizeObserver(_sizeObserverElement, true);\n //freezeResizeObserver(_sizeAutoObserverElement, true);\n \n var checkCacheAutoForce = function () {\n return checkCache.apply(this, [].slice.call(arguments).concat([ force ]));\n };\n \n //save current scroll offset\n var currScroll = {\n x: _viewportElement[_strScrollLeft](),\n y: _viewportElement[_strScrollTop]()\n };\n\n var currentPreparedOptionsScrollbars = _currentPreparedOptions.scrollbars;\n var currentPreparedOptionsTextarea = _currentPreparedOptions.textarea;\n\n //scrollbars visibility:\n var scrollbarsVisibility = currentPreparedOptionsScrollbars.visibility;\n var scrollbarsVisibilityChanged = checkCacheAutoForce(scrollbarsVisibility, _scrollbarsVisibilityCache);\n\n //scrollbars autoHide:\n var scrollbarsAutoHide = currentPreparedOptionsScrollbars.autoHide;\n var scrollbarsAutoHideChanged = checkCacheAutoForce(scrollbarsAutoHide, _scrollbarsAutoHideCache);\n\n //scrollbars click scrolling\n var scrollbarsClickScrolling = currentPreparedOptionsScrollbars.clickScrolling;\n var scrollbarsClickScrollingChanged = checkCacheAutoForce(scrollbarsClickScrolling, _scrollbarsClickScrollingCache);\n\n //scrollbars drag scrolling\n var scrollbarsDragScrolling = currentPreparedOptionsScrollbars.dragScrolling;\n var scrollbarsDragScrollingChanged = checkCacheAutoForce(scrollbarsDragScrolling, _scrollbarsDragScrollingCache);\n\n //className\n var className = _currentPreparedOptions.className;\n var classNameChanged = checkCacheAutoForce(className, _classNameCache);\n\n //resize\n var resize = _currentPreparedOptions.resize;\n var resizeChanged = checkCacheAutoForce(resize, _resizeCache) && !_isBody; //body can't be resized since the window itself acts as resize possibility.\n\n //paddingAbsolute\n var paddingAbsolute = _currentPreparedOptions.paddingAbsolute;\n var paddingAbsoluteChanged = checkCacheAutoForce(paddingAbsolute, _paddingAbsoluteCache);\n\n //clipAlways\n var clipAlways = _currentPreparedOptions.clipAlways;\n var clipAlwaysChanged = checkCacheAutoForce(clipAlways, _clipAlwaysCache);\n\n //sizeAutoCapable\n var sizeAutoCapable = _currentPreparedOptions.sizeAutoCapable && !_isBody; //body can never be size auto, because it shall be always as big as the viewport.\n var sizeAutoCapableChanged = checkCacheAutoForce(sizeAutoCapable, _sizeAutoCapableCache);\n\n //showNativeScrollbars\n var ignoreOverlayScrollbarHiding = _currentPreparedOptions.nativeScrollbarsOverlaid.showNativeScrollbars;\n var ignoreOverlayScrollbarHidingChanged = checkCacheAutoForce(ignoreOverlayScrollbarHiding, _ignoreOverlayScrollbarHidingCache);\n\n //autoUpdate\n var autoUpdate = _currentPreparedOptions.autoUpdate;\n var autoUpdateChanged = checkCacheAutoForce(autoUpdate, _autoUpdateCache);\n\n //overflowBehavior\n var overflowBehavior = _currentPreparedOptions.overflowBehavior;\n var overflowBehaviorChanged = checkCacheAutoForce(overflowBehavior, _overflowBehaviorCache, force);\n\n //dynWidth:\n var textareaDynWidth = currentPreparedOptionsTextarea.dynWidth;\n var textareaDynWidthChanged = checkCacheAutoForce(_textareaDynWidthCache, textareaDynWidth);\n\n //dynHeight:\n var textareaDynHeight = currentPreparedOptionsTextarea.dynHeight;\n var textareaDynHeightChanged = checkCacheAutoForce(_textareaDynHeightCache, textareaDynHeight);\n\n //scrollbars visibility\n _scrollbarsAutoHideNever = scrollbarsAutoHide === 'n';\n _scrollbarsAutoHideScroll = scrollbarsAutoHide === 's';\n _scrollbarsAutoHideMove = scrollbarsAutoHide === 'm';\n _scrollbarsAutoHideLeave = scrollbarsAutoHide === 'l';\n\n //scrollbars autoHideDelay\n _scrollbarsAutoHideDelay = currentPreparedOptionsScrollbars.autoHideDelay;\n\n //old className\n _oldClassName = _classNameCache;\n\n //resize\n _resizeNone = resize === 'n';\n _resizeBoth = resize === 'b';\n _resizeHorizontal = resize === 'h';\n _resizeVertical = resize === 'v';\n\n //normalizeRTL\n _normalizeRTLCache = _currentPreparedOptions.normalizeRTL;\n\n //ignore overlay scrollbar hiding\n ignoreOverlayScrollbarHiding = ignoreOverlayScrollbarHiding && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y);\n\n //refresh options cache\n _scrollbarsVisibilityCache = scrollbarsVisibility;\n _scrollbarsAutoHideCache = scrollbarsAutoHide;\n _scrollbarsClickScrollingCache = scrollbarsClickScrolling;\n _scrollbarsDragScrollingCache = scrollbarsDragScrolling;\n _classNameCache = className;\n _resizeCache = resize;\n _paddingAbsoluteCache = paddingAbsolute;\n _clipAlwaysCache = clipAlways;\n _sizeAutoCapableCache = sizeAutoCapable;\n _ignoreOverlayScrollbarHidingCache = ignoreOverlayScrollbarHiding;\n _autoUpdateCache = autoUpdate;\n _overflowBehaviorCache = extendDeep({}, overflowBehavior);\n _textareaDynWidthCache = textareaDynWidth;\n _textareaDynHeightCache = textareaDynHeight;\n _hasOverflowCache = _hasOverflowCache || { x: false, y: false };\n\n //set correct class name to the host element\n if (classNameChanged) {\n removeClass(_hostElement, _oldClassName + _strSpace + _classNameThemeNone);\n addClass(_hostElement, className !== undefined && className !== null && className.length > 0 ? className : _classNameThemeNone);\n }\n\n //set correct auto Update\n if (autoUpdateChanged) {\n if (autoUpdate === true) {\n disconnectMutationObservers();\n autoUpdateLoop.add(_base);\n }\n else if (autoUpdate === null) {\n if (_autoUpdateRecommended) {\n disconnectMutationObservers();\n autoUpdateLoop.add(_base);\n }\n else {\n autoUpdateLoop.remove(_base);\n connectMutationObservers();\n }\n }\n else {\n autoUpdateLoop.remove(_base);\n connectMutationObservers();\n }\n }\n\n //activate or deactivate size auto capability\n if (sizeAutoCapableChanged) {\n if (sizeAutoCapable) {\n if (!_contentGlueElement) {\n _contentGlueElement = FRAMEWORK(generateDiv(_classNameContentGlueElement));\n _paddingElement.before(_contentGlueElement);\n }\n else {\n _contentGlueElement.show();\n }\n if (_sizeAutoObserverAdded) {\n _sizeAutoObserverElement.show();\n }\n else {\n _sizeAutoObserverElement = FRAMEWORK(generateDiv(_classNameSizeAutoObserverElement));\n _sizeAutoObserverElementNative = _sizeAutoObserverElement[0];\n\n _contentGlueElement.before(_sizeAutoObserverElement);\n var oldSize = {w: -1, h: -1};\n setupResizeObserver(_sizeAutoObserverElement, function () {\n var newSize = {\n w: _sizeAutoObserverElementNative[LEXICON.oW],\n h: _sizeAutoObserverElementNative[LEXICON.oH]\n };\n if (checkCache(newSize, oldSize)) {\n if (_initialized && (_heightAutoCache && newSize.h > 0) || (_widthAutoCache && newSize.w > 0)) {\n update();\n }\n else if (_initialized && (!_heightAutoCache && newSize.h === 0) || (!_widthAutoCache && newSize.w === 0)) {\n update();\n }\n }\n oldSize = newSize;\n });\n _sizeAutoObserverAdded = true;\n //fix heightAuto detector bug if height is fixed but contentHeight is 0.\n //the probability this bug will ever happen is very very low, thats why its ok if we use calc which isn't supported in IE8.\n if (_cssCalc !== null)\n _sizeAutoObserverElement.css(_strHeight, _cssCalc + '(100% + 1px)');\n }\n }\n else {\n if (_sizeAutoObserverAdded)\n _sizeAutoObserverElement.hide();\n if (_contentGlueElement)\n _contentGlueElement.hide();\n }\n }\n\n //if force, update all resizeObservers too\n if (force) {\n _sizeObserverElement.find('*').trigger(_strScroll);\n if (_sizeAutoObserverAdded)\n _sizeAutoObserverElement.find('*').trigger(_strScroll);\n }\n\n //display hidden:\n displayIsHidden = displayIsHidden === undefined ? _hostElement.is(':hidden') : displayIsHidden;\n var displayIsHiddenChanged = checkCacheAutoForce(displayIsHidden, _displayIsHiddenCache);\n\n //textarea AutoWrapping:\n var textareaAutoWrapping = _isTextarea ? _targetElement.attr('wrap') !== 'off' : false;\n var textareaAutoWrappingChanged = checkCacheAutoForce(textareaAutoWrapping, _textareaAutoWrappingCache);\n\n //detect direction:\n var cssDirection = _hostElement.css('direction');\n var cssDirectionChanged = checkCacheAutoForce(cssDirection, _cssDirectionCache);\n\n //detect box-sizing:\n var boxSizing = _hostElement.css('box-sizing');\n var boxSizingChanged = checkCacheAutoForce(boxSizing, _cssBoxSizingCache);\n\n //detect padding:\n var padding = {\n c: force,\n t: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strTop)),\n r: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strRight)),\n b: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strBottom)),\n l: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strLeft))\n };\n \n //width + height auto detecting var:\n var sizeAutoObserverElementBCRect;\n //exception occurs in IE8 sometimes (unknown exception)\n try {\n sizeAutoObserverElementBCRect = _sizeAutoObserverAdded ? _sizeAutoObserverElementNative[LEXICON.bCR]() : null;\n } catch (ex) {\n return;\n }\n\n _isRTL = cssDirection === 'rtl';\n _isBorderBox = (boxSizing === 'border-box');\n var isRTLLeft = _isRTL ? _strLeft : _strRight;\n var isRTLRight = _isRTL ? _strRight : _strLeft;\n\n //detect width auto:\n var widthAutoResizeDetection = false;\n var widthAutoObserverDetection = (_sizeAutoObserverAdded && (_hostElement.css(_strFloat) !== 'none' /*|| _isTextarea */)) ? (MATH.round(sizeAutoObserverElementBCRect.right - sizeAutoObserverElementBCRect.left) === 0) && (!paddingAbsolute ? (_hostElementNative[LEXICON.cW] - _paddingX) > 0 : true) : false;\n if (sizeAutoCapable && !widthAutoObserverDetection) {\n var tmpCurrHostWidth = _hostElementNative[LEXICON.oW];\n var tmpCurrContentGlueWidth = _contentGlueElement.css(_strWidth);\n _contentGlueElement.css(_strWidth, _strAuto);\n\n var tmpNewHostWidth = _hostElementNative[LEXICON.oW];\n _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);\n widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;\n if (!widthAutoResizeDetection) {\n _contentGlueElement.css(_strWidth, tmpCurrHostWidth + 1);\n tmpNewHostWidth = _hostElementNative[LEXICON.oW];\n _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);\n widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;\n }\n }\n var widthAuto = (widthAutoObserverDetection || widthAutoResizeDetection) && sizeAutoCapable && !displayIsHidden;\n var widthAutoChanged = checkCacheAutoForce(widthAuto, _widthAutoCache);\n var wasWidthAuto = !widthAuto && _widthAutoCache;\n\n //detect height auto:\n var heightAuto = _sizeAutoObserverAdded && sizeAutoCapable && !displayIsHidden ? (MATH.round(sizeAutoObserverElementBCRect.bottom - sizeAutoObserverElementBCRect.top) === 0) /* && (!paddingAbsolute && (_msieVersion > 9 || !_msieVersion) ? true : true) */ : false;\n var heightAutoChanged = checkCacheAutoForce(heightAuto, _heightAutoCache);\n var wasHeightAuto = !heightAuto && _heightAutoCache;\n\n //detect border:\n //we need the border only if border box and auto size\n var strMinusWidth = '-' + _strWidth;\n var updateBorderX = (widthAuto && _isBorderBox) || !_isBorderBox;\n var updateBorderY = (heightAuto && _isBorderBox) || !_isBorderBox;\n var border = {\n c: force,\n t: updateBorderY ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strTop + strMinusWidth), true) : 0,\n r: updateBorderX ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strRight + strMinusWidth), true) : 0,\n b: updateBorderY ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strBottom + strMinusWidth), true) : 0,\n l: updateBorderX ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strLeft + strMinusWidth), true) : 0\n };\n\n //detect margin:\n var margin = {\n c: force,\n t: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strTop)),\n r: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strRight)),\n b: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strBottom)),\n l: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strLeft))\n };\n\n //detect css max width & height:\n var cssMaxValue = {\n h: String(_hostElement.css(_strMaxMinus + _strHeight)),\n w: String(_hostElement.css(_strMaxMinus + _strWidth))\n };\n\n //vars to apply correct css\n var contentElementCSS = { };\n var contentGlueElementCSS = { };\n\n //funcs\n var getHostSize = function() {\n //has to be clientSize because offsetSize respect borders\n return {\n w: _hostElementNative[LEXICON.cW],\n h: _hostElementNative[LEXICON.cH]\n };\n };\n var getViewportSize = function() {\n //viewport size is padding container because it never has padding, margin and a border\n //determine zoom rounding error -> sometimes scrollWidth/Height is smaller than clientWidth/Height\n //if this happens add the difference to the viewportSize to compensate the rounding error\n return {\n w: _paddingElementNative[LEXICON.oW] + MATH.max(0, _contentElementNative[LEXICON.cW] - _contentElementNative[LEXICON.sW]),\n h: _paddingElementNative[LEXICON.oH] + MATH.max(0, _contentElementNative[LEXICON.cH] - _contentElementNative[LEXICON.sH])\n };\n };\n\n //set info for padding\n var paddingAbsoluteX = _paddingX = padding.l + padding.r;\n var paddingAbsoluteY = _paddingY = padding.t + padding.b;\n paddingAbsoluteX *= paddingAbsolute ? 1 : 0;\n paddingAbsoluteY *= paddingAbsolute ? 1 : 0;\n padding.c = checkCacheAutoForce(padding, _cssPaddingCache);\n\n //set info for border\n _borderX = border.l + border.r;\n _borderY = border.t + border.b;\n border.c = checkCacheAutoForce(border, _cssBorderCache);\n\n //set info for margin\n _marginX = margin.l + margin.r;\n _marginY = margin.t + margin.b;\n margin.c = checkCacheAutoForce(margin, _cssMarginCache);\n\n //set info for css max value\n cssMaxValue.ih = parseToZeroOrNumber(cssMaxValue.h); //ih = integer height\n cssMaxValue.iw = parseToZeroOrNumber(cssMaxValue.w); //iw = integer width\n cssMaxValue.ch = cssMaxValue.h.indexOf('px') > -1; //ch = correct height\n cssMaxValue.cw = cssMaxValue.w.indexOf('px') > -1; //cw = correct width\n cssMaxValue.c = checkCacheAutoForce(cssMaxValue, _cssMaxValueCache);\n\n //refresh cache\n _displayIsHiddenCache = displayIsHidden;\n _textareaAutoWrappingCache = textareaAutoWrapping;\n _cssDirectionCache = cssDirection;\n _cssBoxSizingCache = boxSizing;\n _widthAutoCache = widthAuto;\n _heightAutoCache = heightAuto;\n _cssPaddingCache = padding;\n _cssBorderCache = border;\n _cssMarginCache = margin;\n _cssMaxValueCache = cssMaxValue;\n \n //IEFix direction changed\n if (cssDirectionChanged && _sizeAutoObserverAdded)\n _sizeAutoObserverElement.css(_strFloat, isRTLRight);\n\n //apply padding:\n if (padding.c || cssDirectionChanged || paddingAbsoluteChanged || widthAutoChanged || heightAutoChanged || boxSizingChanged || sizeAutoCapableChanged) {\n var paddingElementCSS = {};\n var textareaCSS = {};\n setTopRightBottomLeft(contentGlueElementCSS, _strMarginMinus, [-padding.t, -padding.r, -padding.b, -padding.l]);\n if (paddingAbsolute) {\n setTopRightBottomLeft(paddingElementCSS, _strEmpty, [padding.t, padding.r, padding.b, padding.l]);\n if (_isTextarea)\n setTopRightBottomLeft(textareaCSS, _strPaddingMinus);\n else\n setTopRightBottomLeft(contentElementCSS, _strPaddingMinus);\n }\n else {\n setTopRightBottomLeft(paddingElementCSS, _strEmpty);\n if (_isTextarea)\n setTopRightBottomLeft(textareaCSS, _strPaddingMinus, [padding.t, padding.r, padding.b, padding.l]);\n else\n setTopRightBottomLeft(contentElementCSS, _strPaddingMinus, [padding.t, padding.r, padding.b, padding.l]);\n }\n _paddingElement.css(paddingElementCSS);\n _targetElement.css(textareaCSS);\n }\n\n //viewport size is padding container because it never has padding, margin and a border.\n _viewportSize = getViewportSize();\n\n //update Textarea\n var textareaSize = _isTextarea ? textareaUpdate() : false;\n var textareaSizeChanged = _isTextarea && checkCacheAutoForce(textareaSize, _textareaSizeCache);\n var textareaDynOrigSize = _isTextarea && textareaSize ? {\n w : textareaDynWidth ? textareaSize._dynamicWidth : textareaSize._originalWidth,\n h : textareaDynHeight ? textareaSize._dynamicHeight : textareaSize._originalHeight\n } : { };\n _textareaSizeCache = textareaSize;\n\n //fix height auto / width auto in cooperation with current padding & boxSizing behavior:\n if (heightAuto && (heightAutoChanged || paddingAbsoluteChanged || boxSizingChanged || cssMaxValue.c || padding.c || border.c)) {\n /*\n if (cssMaxValue.ch)\n contentElementCSS[_strMaxMinus + _strHeight] =\n (cssMaxValue.ch ? (cssMaxValue.ih - paddingAbsoluteY + (_isBorderBox ? -_borderY : _paddingY))\n : _strEmpty);\n */\n contentElementCSS[_strHeight] = _strAuto;\n }\n else if (heightAutoChanged || paddingAbsoluteChanged) {\n contentElementCSS[_strMaxMinus + _strHeight] = _strEmpty;\n contentElementCSS[_strHeight] = _strHundredPercent;\n }\n if (widthAuto && (widthAutoChanged || paddingAbsoluteChanged || boxSizingChanged || cssMaxValue.c || padding.c || border.c || cssDirectionChanged)) {\n /*\n if (cssMaxValue.cw)\n contentElementCSS[_strMaxMinus + _strWidth] =\n (cssMaxValue.cw ? (cssMaxValue.iw - paddingAbsoluteX + (_isBorderBox ? -_borderX : _paddingX)) +\n (_nativeScrollbarIsOverlaid.y ? _overlayScrollbarDummySize.y : 0)\n : _strEmpty);\n */\n contentElementCSS[_strWidth] = _strAuto;\n contentGlueElementCSS[_strMaxMinus + _strWidth] = _strHundredPercent; //IE Fix\n }\n else if (widthAutoChanged || paddingAbsoluteChanged) {\n contentElementCSS[_strMaxMinus + _strWidth] = _strEmpty;\n contentElementCSS[_strWidth] = _strHundredPercent;\n contentElementCSS[_strFloat] = _strEmpty;\n contentGlueElementCSS[_strMaxMinus + _strWidth] = _strEmpty; //IE Fix\n }\n if (widthAuto) {\n if (!cssMaxValue.cw)\n contentElementCSS[_strMaxMinus + _strWidth] = _strEmpty;\n //textareaDynOrigSize.w || _strAuto :: doesnt works because applied margin will shift width\n contentGlueElementCSS[_strWidth] = _strAuto;\n\n contentElementCSS[_strWidth] = _strAuto;\n contentElementCSS[_strFloat] = isRTLRight;\n }\n else {\n contentGlueElementCSS[_strWidth] = _strEmpty;\n }\n if (heightAuto) {\n if (!cssMaxValue.ch)\n contentElementCSS[_strMaxMinus + _strHeight] = _strEmpty;\n //textareaDynOrigSize.h || _contentElementNative[LEXICON.cH] :: use for anti scroll jumping\n contentGlueElementCSS[_strHeight] = textareaDynOrigSize.h || _contentElementNative[LEXICON.cH];\n }\n else {\n contentGlueElementCSS[_strHeight] = _strEmpty;\n }\n if (sizeAutoCapable)\n _contentGlueElement.css(contentGlueElementCSS);\n _contentElement.css(contentElementCSS);\n\n //CHECKPOINT HERE ~\n contentElementCSS = {};\n contentGlueElementCSS = {};\n\n //if [content(host) client / scroll size, or target element direction, or content(host) max-sizes] changed, or force is true\n if (hostSizeChanged || contentSizeChanged || textareaSizeChanged || cssDirectionChanged || boxSizingChanged || paddingAbsoluteChanged || widthAutoChanged || widthAuto || heightAutoChanged || heightAuto || cssMaxValue.c || ignoreOverlayScrollbarHidingChanged || overflowBehaviorChanged || clipAlwaysChanged || resizeChanged || scrollbarsVisibilityChanged || scrollbarsAutoHideChanged || scrollbarsDragScrollingChanged || scrollbarsClickScrollingChanged || textareaDynWidthChanged || textareaDynHeightChanged || textareaAutoWrappingChanged) {\n var strOverflow = 'overflow';\n var strOverflowX = strOverflow + '-x';\n var strOverflowY = strOverflow + '-y';\n var strHidden = 'hidden';\n var strVisible = 'visible';\n //decide whether the content overflow must get hidden for correct overflow measuring, it !MUST! be always hidden if the height is auto\n var hideOverflow4CorrectMeasuring = _restrictedMeasuring ?\n (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) || //it must be hidden if native scrollbars are overlaid\n (_viewportSize.w < _nativeScrollbarMinSize.y || _viewportSize.h < _nativeScrollbarMinSize.x) || //it must be hidden if host-element is too small\n heightAuto || displayIsHiddenChanged //it must be hidden if height is auto or display was changed\n : heightAuto; //if there is not the restricted Measuring bug, it must be hidden if the height is auto\n\n //Reset the viewport (very important for natively overlaid scrollbars and zoom change\n //don't change the overflow prop as it is very expensive and affects performance !A LOT!\n var viewportElementResetCSS = { };\n var resetXTmp = _hasOverflowCache.y && _hideOverflowCache.ys && !ignoreOverlayScrollbarHiding && !_nativeScrollbarStyling ? (_nativeScrollbarIsOverlaid.y ? _viewportElement.css(isRTLLeft) : -_nativeScrollbarSize.y) : 0;\n var resetBottomTmp = _hasOverflowCache.x && _hideOverflowCache.xs && !ignoreOverlayScrollbarHiding && !_nativeScrollbarStyling ? (_nativeScrollbarIsOverlaid.x ? _viewportElement.css(_strBottom) : -_nativeScrollbarSize.x) : 0;\n setTopRightBottomLeft(viewportElementResetCSS, _strEmpty);\n _viewportElement.css(viewportElementResetCSS);\n if(hideOverflow4CorrectMeasuring)\n _contentElement.css(strOverflow, strHidden);\n\n //measure several sizes:\n var contentMeasureElement = getContentMeasureElement();\n //in Firefox content element has to have overflow hidden, else element margins aren't calculated properly, this element prevents this bug, but only if scrollbars aren't overlaid\n var contentMeasureElementGuaranty = _restrictedMeasuring && !hideOverflow4CorrectMeasuring ? _viewportElementNative : contentMeasureElement;\n var contentSize = {\n //use clientSize because natively overlaidScrollbars add borders\n w: textareaDynOrigSize.w || contentMeasureElement[LEXICON.cW],\n h: textareaDynOrigSize.h || contentMeasureElement[LEXICON.cH]\n };\n var scrollSize = {\n w: MATH.max(contentMeasureElement[LEXICON.sW], contentMeasureElementGuaranty[LEXICON.sW]),\n h: MATH.max(contentMeasureElement[LEXICON.sH], contentMeasureElementGuaranty[LEXICON.sH])\n };\n\n //apply the correct viewport style and measure viewport size\n viewportElementResetCSS[_strBottom] = wasHeightAuto ? _strEmpty : resetBottomTmp;\n viewportElementResetCSS[isRTLLeft] = wasWidthAuto ? _strEmpty : resetXTmp;\n _viewportElement.css(viewportElementResetCSS);\n _viewportSize = getViewportSize();\n\n //measure and correct several sizes\n var hostSize = getHostSize();\n var contentGlueSize = {\n //client/scrollSize + AbsolutePadding -> because padding is only applied to the paddingElement if its absolute, so you have to add it manually\n //hostSize is clientSize -> so padding should be added manually, right? FALSE! Because content glue is inside hostElement, so we don't have to worry about padding\n w: MATH.max((widthAuto ? contentSize.w : scrollSize.w) + paddingAbsoluteX, hostSize.w),\n h: MATH.max((heightAuto ? contentSize.h : scrollSize.h) + paddingAbsoluteY, hostSize.h)\n };\n contentGlueSize.c = checkCacheAutoForce(contentGlueSize, _contentGlueSizeCache);\n _contentGlueSizeCache = contentGlueSize;\n\n //apply correct contentGlue size\n if (sizeAutoCapable) {\n //size contentGlue correctly to make sure the element has correct size if the sizing switches to auto\n if (contentGlueSize.c || (heightAuto || widthAuto)) {\n contentGlueElementCSS[_strWidth] = contentGlueSize.w;\n contentGlueElementCSS[_strHeight] = contentGlueSize.h;\n\n //textarea-sizes are already calculated correctly at this point\n if(!_isTextarea) {\n contentSize = {\n //use clientSize because natively overlaidScrollbars add borders\n w: contentMeasureElement[LEXICON.cW],\n h: contentMeasureElement[LEXICON.cH]\n };\n }\n }\n var textareaCoverCSS = {};\n var setContentGlueElementCSSfunction = function(horizontal) {\n var scrollbarVars = getScrollbarVars(horizontal);\n var wh = scrollbarVars._w_h;\n var strWH = scrollbarVars._width_height;\n var autoSize = horizontal ? widthAuto : heightAuto;\n var borderSize = horizontal ? _borderX : _borderY;\n var paddingSize = horizontal ? _paddingX : _paddingY;\n var marginSize = horizontal ? _marginX : _marginY;\n var maxSize = contentGlueElementCSS[strWH] + (_isBorderBox ? borderSize : -paddingSize);\n\n //make contentGlue size -1 if element is not auto sized, to make sure that a resize event happens when the element shrinks\n if (!autoSize || (!autoSize && border.c))\n contentGlueElementCSS[strWH] = hostSize[wh] - (_isBorderBox ? 0 : paddingSize + borderSize) - 1 - marginSize;\n\n //if size is auto and host is same size as max size, make content glue size +1 to make sure size changes will be detected\n if (autoSize && cssMaxValue['c' + wh] && cssMaxValue['i' + wh] === maxSize)\n contentGlueElementCSS[strWH] = maxSize + (_isBorderBox ? 0 : paddingSize) + 1;\n\n //if size is auto and host is smaller than size as min size, make content glue size -1 to make sure size changes will be detected (this is only needed if padding is 0)\n if (autoSize && (contentSize[wh] < _viewportSize[wh]) && (horizontal && _isTextarea ? !textareaAutoWrapping : true)) {\n if (_isTextarea)\n textareaCoverCSS[strWH] = parseToZeroOrNumber(_textareaCoverElement.css(strWH)) - 1;\n contentGlueElementCSS[strWH] -= 1;\n }\n\n //make sure content glue size is at least 1\n if (contentSize[wh] > 0)\n contentGlueElementCSS[strWH] = MATH.max(1, contentGlueElementCSS[strWH]);\n };\n setContentGlueElementCSSfunction(true);\n setContentGlueElementCSSfunction(false);\n\n if (_isTextarea)\n _textareaCoverElement.css(textareaCoverCSS);\n _contentGlueElement.css(contentGlueElementCSS);\n }\n if (widthAuto)\n contentElementCSS[_strWidth] = _strHundredPercent;\n if (widthAuto && !_isBorderBox && !_mutationObserversConnected)\n contentElementCSS[_strFloat] = 'none';\n\n //apply and reset content style\n _contentElement.css(contentElementCSS);\n contentElementCSS = {};\n\n //measure again, but this time all correct sizes:\n var contentScrollSize = {\n w: MATH.max(contentMeasureElement[LEXICON.sW], contentMeasureElementGuaranty[LEXICON.sW]),\n h: MATH.max(contentMeasureElement[LEXICON.sH], contentMeasureElementGuaranty[LEXICON.sH])\n };\n contentScrollSize.c = contentSizeChanged = checkCacheAutoForce(contentScrollSize, _contentScrollSizeCache);\n _contentScrollSizeCache = contentScrollSize;\n\n //remove overflow hidden to restore overflow\n if(hideOverflow4CorrectMeasuring)\n _contentElement.css(strOverflow, _strEmpty);\n \n //refresh viewport size after correct measuring\n _viewportSize = getViewportSize();\n\n hostSize = getHostSize();\n hostSizeChanged = checkCacheAutoForce(hostSize, _hostSizeCache);\n _hostSizeCache = hostSize;\n\n var hideOverflowForceTextarea = _isTextarea && (_viewportSize.w === 0 || _viewportSize.h === 0);\n var previousOverflow = _overflowAmountCache;\n var overflowBehaviorIsVS = { };\n var overflowBehaviorIsVH = { };\n var overflowBehaviorIsS = { };\n var overflowAmount = { };\n var hasOverflow = { };\n var hideOverflow = { };\n var canScroll = { };\n var viewportRect = _paddingElementNative[LEXICON.bCR]();\n var setOverflowVariables = function(horizontal) {\n var scrollbarVars = getScrollbarVars(horizontal);\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n var xyI = scrollbarVarsInverted._x_y;\n var xy = scrollbarVars._x_y;\n var wh = scrollbarVars._w_h;\n var widthHeight = scrollbarVars._width_height;\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\n overflowAmount[xy] *= (hideOverflowForceTextarea || (_viewportElementNative[scrollMax] === 0 && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1)) ? 0 : 1;\n hasOverflow[xy] = overflowAmount[xy] > 0;\n\n //hideOverflow:\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\n hideOverflow[xy] = overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy] ? (hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]) : hasOverflow[xy];\n hideOverflow[xy + 's'] = hideOverflow[xy] ? (overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy]) : false;\n\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\n };\n setOverflowVariables(true);\n setOverflowVariables(false);\n\n overflowAmount.c = checkCacheAutoForce(overflowAmount, _overflowAmountCache);\n _overflowAmountCache = overflowAmount;\n hasOverflow.c = checkCacheAutoForce(hasOverflow, _hasOverflowCache);\n _hasOverflowCache = hasOverflow;\n hideOverflow.c = checkCacheAutoForce(hideOverflow, _hideOverflowCache);\n _hideOverflowCache = hideOverflow;\n\n //if native scrollbar is overlay at x OR y axis, prepare DOM\n if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) {\n var borderDesign = 'px solid transparent';\n var contentArrangeElementCSS = { };\n var arrangeContent = { };\n var arrangeChanged = force;\n var setContentElementCSS;\n\n if (hasOverflow.x || hasOverflow.y) {\n arrangeContent.w = _nativeScrollbarIsOverlaid.y && hasOverflow.y ? contentScrollSize.w + _overlayScrollbarDummySize.y : _strEmpty;\n arrangeContent.h = _nativeScrollbarIsOverlaid.x && hasOverflow.x ? contentScrollSize.h + _overlayScrollbarDummySize.x : _strEmpty;\n arrangeChanged = checkCacheAutoForce(arrangeContent, _arrangeContentSizeCache);\n _arrangeContentSizeCache = arrangeContent;\n }\n\n if (hasOverflow.c || hideOverflow.c || contentScrollSize.c || cssDirectionChanged || widthAutoChanged || heightAutoChanged || widthAuto || heightAuto || ignoreOverlayScrollbarHidingChanged) {\n contentElementCSS[_strMarginMinus + isRTLRight] = contentElementCSS[_strBorderMinus + isRTLRight] = _strEmpty;\n setContentElementCSS = function(horizontal) {\n var scrollbarVars = getScrollbarVars(horizontal);\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n var xy = scrollbarVars._x_y;\n var strDirection = horizontal ? _strBottom : isRTLLeft;\n var invertedAutoSize = horizontal ? heightAuto : widthAuto;\n\n if (_nativeScrollbarIsOverlaid[xy] && hasOverflow[xy] && hideOverflow[xy + 's']) {\n contentElementCSS[_strMarginMinus + strDirection] = invertedAutoSize ? (ignoreOverlayScrollbarHiding ? _strEmpty : _overlayScrollbarDummySize[xy]) : _strEmpty;\n contentElementCSS[_strBorderMinus + strDirection] = ((horizontal ? !invertedAutoSize : true) && !ignoreOverlayScrollbarHiding) ? (_overlayScrollbarDummySize[xy] + borderDesign) : _strEmpty;\n }\n else {\n arrangeContent[scrollbarVarsInverted._w_h] =\n contentElementCSS[_strMarginMinus + strDirection] =\n contentElementCSS[_strBorderMinus + strDirection] = _strEmpty;\n arrangeChanged = true;\n }\n };\n\n if (_nativeScrollbarStyling) {\n if (ignoreOverlayScrollbarHiding) \n removeClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n else\n addClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n }\n else {\n setContentElementCSS(true);\n setContentElementCSS(false);\n }\n }\n if (ignoreOverlayScrollbarHiding) {\n arrangeContent.w = arrangeContent.h = _strEmpty;\n arrangeChanged = true;\n }\n if (arrangeChanged && !_nativeScrollbarStyling) {\n contentArrangeElementCSS[_strWidth] = hideOverflow.y ? arrangeContent.w : _strEmpty;\n contentArrangeElementCSS[_strHeight] = hideOverflow.x ? arrangeContent.h : _strEmpty;\n\n if (!_contentArrangeElement) {\n _contentArrangeElement = FRAMEWORK(generateDiv(_classNameContentArrangeElement));\n _viewportElement.prepend(_contentArrangeElement);\n }\n _contentArrangeElement.css(contentArrangeElementCSS);\n }\n _contentElement.css(contentElementCSS);\n }\n\n var viewportElementCSS = {};\n var paddingElementCSS = {};\n var setViewportCSS;\n if (hostSizeChanged || hasOverflow.c || hideOverflow.c || contentScrollSize.c || overflowBehaviorChanged || boxSizingChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged || clipAlwaysChanged || heightAutoChanged) {\n viewportElementCSS[isRTLRight] = _strEmpty;\n setViewportCSS = function(horizontal) {\n var scrollbarVars = getScrollbarVars(horizontal);\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n var xy = scrollbarVars._x_y;\n var XY = scrollbarVars._X_Y;\n var strDirection = horizontal ? _strBottom : isRTLLeft;\n\n var reset = function () {\n viewportElementCSS[strDirection] = _strEmpty;\n _contentBorderSize[scrollbarVarsInverted._w_h] = 0;\n };\n if (hasOverflow[xy] && hideOverflow[xy + 's']) {\n viewportElementCSS[strOverflow + XY] = _strScroll;\n if (ignoreOverlayScrollbarHiding || _nativeScrollbarStyling) {\n reset();\n }\n else {\n viewportElementCSS[strDirection] = -(_nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[xy] : _nativeScrollbarSize[xy]);\n _contentBorderSize[scrollbarVarsInverted._w_h] = _nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[scrollbarVarsInverted._x_y] : 0;\n }\n } else {\n viewportElementCSS[strOverflow + XY] = _strEmpty;\n reset();\n }\n };\n setViewportCSS(true);\n setViewportCSS(false);\n \n // if the scroll container is too small and if there is any overflow with no overlay scrollbar (and scrollbar styling isn't possible), \n // make viewport element greater in size (Firefox hide Scrollbars fix)\n // because firefox starts hiding scrollbars on too small elements\n // with this behavior the overflow calculation may be incorrect or the scrollbars would appear suddenly\n // https://bugzilla.mozilla.org/show_bug.cgi?id=292284\n if (!_nativeScrollbarStyling \n && (_viewportSize.h < _nativeScrollbarMinSize.x || _viewportSize.w < _nativeScrollbarMinSize.y)\n && ((hasOverflow.x && hideOverflow.x && !_nativeScrollbarIsOverlaid.x) || (hasOverflow.y && hideOverflow.y && !_nativeScrollbarIsOverlaid.y))) {\n viewportElementCSS[_strPaddingMinus + _strTop] = _nativeScrollbarMinSize.x;\n viewportElementCSS[_strMarginMinus + _strTop] = -_nativeScrollbarMinSize.x;\n\n viewportElementCSS[_strPaddingMinus + isRTLRight] = _nativeScrollbarMinSize.y;\n viewportElementCSS[_strMarginMinus + isRTLRight] = -_nativeScrollbarMinSize.y;\n }\n else {\n viewportElementCSS[_strPaddingMinus + _strTop] =\n viewportElementCSS[_strMarginMinus + _strTop] =\n viewportElementCSS[_strPaddingMinus + isRTLRight] =\n viewportElementCSS[_strMarginMinus + isRTLRight] = _strEmpty;\n }\n viewportElementCSS[_strPaddingMinus + isRTLLeft] =\n viewportElementCSS[_strMarginMinus + isRTLLeft] = _strEmpty;\n\n //if there is any overflow (x OR y axis) and this overflow shall be hidden, make overflow hidden, else overflow visible\n if ((hasOverflow.x && hideOverflow.x) || (hasOverflow.y && hideOverflow.y) || hideOverflowForceTextarea) {\n //only hide if is Textarea\n if (_isTextarea && hideOverflowForceTextarea) {\n paddingElementCSS[strOverflowX] =\n paddingElementCSS[strOverflowY] = strHidden;\n }\n }\n else {\n if (!clipAlways || (overflowBehaviorIsVH.x || overflowBehaviorIsVS.x || overflowBehaviorIsVH.y || overflowBehaviorIsVS.y)) {\n //only un-hide if Textarea\n if (_isTextarea) {\n paddingElementCSS[strOverflowX] =\n paddingElementCSS[strOverflowY] = _strEmpty;\n }\n viewportElementCSS[strOverflowX] =\n viewportElementCSS[strOverflowY] = strVisible;\n }\n }\n\n _paddingElement.css(paddingElementCSS);\n _viewportElement.css(viewportElementCSS);\n viewportElementCSS = { };\n\n //force soft redraw in webkit because without the scrollbars will may appear because DOM wont be redrawn under special conditions\n if ((hasOverflow.c || boxSizingChanged || widthAutoChanged || heightAutoChanged) && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {\n var elementStyle = _contentElementNative[LEXICON.s];\n var dump;\n elementStyle.webkitTransform = 'scale(1)';\n elementStyle.display = 'run-in';\n dump = _contentElementNative[LEXICON.oH];\n elementStyle.display = _strEmpty; //|| dump; //use dump to prevent it from deletion if minify\n elementStyle.webkitTransform = _strEmpty;\n }\n /*\n //force hard redraw in webkit if native overlaid scrollbars shall appear\n if (ignoreOverlayScrollbarHidingChanged && ignoreOverlayScrollbarHiding) {\n _hostElement.hide();\n var dump = _hostElementNative[LEXICON.oH];\n _hostElement.show();\n }\n */\n }\n\n //change to direction RTL and width auto Bugfix in Webkit\n //without this fix, the DOM still thinks the scrollbar is LTR and thus the content is shifted to the left\n contentElementCSS = {};\n if (cssDirectionChanged || widthAutoChanged || heightAutoChanged) {\n if (_isRTL && widthAuto) {\n var floatTmp = _contentElement.css(_strFloat);\n var posLeftWithoutFloat = MATH.round(_contentElement.css(_strFloat, _strEmpty).css(_strLeft, _strEmpty).position().left);\n _contentElement.css(_strFloat, floatTmp);\n var posLeftWithFloat = MATH.round(_contentElement.position().left);\n\n if (posLeftWithoutFloat !== posLeftWithFloat)\n contentElementCSS[_strLeft] = posLeftWithoutFloat;\n }\n else {\n contentElementCSS[_strLeft] = _strEmpty;\n }\n }\n _contentElement.css(contentElementCSS);\n\n //handle scroll position\n if (_isTextarea && contentSizeChanged) {\n var textareaInfo = getTextareaInfo();\n if (textareaInfo) {\n var textareaRowsChanged = _textareaInfoCache === undefined ? true : textareaInfo._rows !== _textareaInfoCache._rows;\n var cursorRow = textareaInfo._cursorRow;\n var cursorCol = textareaInfo._cursorColumn;\n var widestRow = textareaInfo._widestRow;\n var lastRow = textareaInfo._rows;\n var lastCol = textareaInfo._columns;\n var cursorPos = textareaInfo._cursorPosition;\n var cursorMax = textareaInfo._cursorMax;\n var cursorIsLastPosition = (cursorPos >= cursorMax && _textareaHasFocus);\n var textareaScrollAmount = {\n x: (!textareaAutoWrapping && (cursorCol === lastCol && cursorRow === widestRow)) ? _overflowAmountCache.x : -1,\n y: (textareaAutoWrapping ? cursorIsLastPosition || textareaRowsChanged && (previousOverflow !== undefined ? (currScroll.y === previousOverflow.y) : false) : (cursorIsLastPosition || textareaRowsChanged) && cursorRow === lastRow) ? _overflowAmountCache.y : -1\n };\n currScroll.x = textareaScrollAmount.x > -1 ? (_isRTL && _normalizeRTLCache && _rtlScrollBehavior.i ? 0 : textareaScrollAmount.x) : currScroll.x; //if inverted, scroll to 0 -> normalized this means to max scroll offset.\n currScroll.y = textareaScrollAmount.y > -1 ? textareaScrollAmount.y : currScroll.y;\n }\n _textareaInfoCache = textareaInfo;\n }\n if (_isRTL && _rtlScrollBehavior.i && _nativeScrollbarIsOverlaid.y && hasOverflow.x && _normalizeRTLCache)\n currScroll.x += _contentBorderSize.w || 0;\n if(widthAuto)\n _hostElement[_strScrollLeft](0);\n if(heightAuto)\n _hostElement[_strScrollTop](0);\n _viewportElement[_strScrollLeft](currScroll.x)[_strScrollTop](currScroll.y);\n\n //scrollbars management:\n var scrollbarsVisibilityVisible = scrollbarsVisibility === 'v';\n var scrollbarsVisibilityHidden = scrollbarsVisibility === 'h';\n var scrollbarsVisibilityAuto = scrollbarsVisibility === 'a';\n\n var showScrollbarH = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, true, true, canScroll.x);\n var showScrollbarV = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, false, true, canScroll.y);\n var hideScrollbarH = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, true, false, canScroll.x);\n var hideScrollbarV = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, false, false, canScroll.y);\n\n //manage class name which indicates scrollable overflow\n if (hideOverflow.x || hideOverflow.y)\n addClass(_hostElement, _classNameHostOverflow);\n else\n removeClass(_hostElement, _classNameHostOverflow);\n if (hideOverflow.x)\n addClass(_hostElement, _classNameHostOverflowX);\n else\n removeClass(_hostElement, _classNameHostOverflowX);\n if (hideOverflow.y)\n addClass(_hostElement, _classNameHostOverflowY);\n else\n removeClass(_hostElement, _classNameHostOverflowY);\n\n //add or remove rtl class name for styling purposes\n if (cssDirectionChanged) {\n if (_isRTL)\n addClass(_hostElement, _classNameHostRTL);\n else\n removeClass(_hostElement, _classNameHostRTL);\n }\n\n //manage the resize feature (CSS3 resize \"polyfill\" for this plugin)\n if (_isBody)\n addClass(_hostElement, _classNameHostResizeDisabled);\n if (resizeChanged) {\n removeClass(_scrollbarCornerElement, [ \n _classNameScrollbarCornerResize,\n _classNameScrollbarCornerResizeB,\n _classNameScrollbarCornerResizeH,\n _classNameScrollbarCornerResizeV].join(_strSpace));\n if (_resizeNone) {\n addClass(_hostElement, _classNameHostResizeDisabled);\n }\n else {\n removeClass(_hostElement, _classNameHostResizeDisabled);\n addClass(_scrollbarCornerElement, _classNameScrollbarCornerResize);\n if (_resizeBoth)\n addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeB);\n else if (_resizeHorizontal)\n addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeH);\n else if (_resizeVertical)\n addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeV);\n }\n }\n\n //manage the scrollbars general visibility + the scrollbar interactivity (unusable class name)\n if (scrollbarsVisibilityChanged || overflowBehaviorChanged || hideOverflow.c || hasOverflow.c || ignoreOverlayScrollbarHidingChanged) {\n if (ignoreOverlayScrollbarHiding) {\n if (ignoreOverlayScrollbarHidingChanged) {\n removeClass(_hostElement, _classNameHostScrolling);\n if (ignoreOverlayScrollbarHiding) {\n hideScrollbarH();\n hideScrollbarV();\n }\n }\n }\n else if (scrollbarsVisibilityAuto) {\n if (canScroll.x)\n showScrollbarH();\n else\n hideScrollbarH();\n\n if (canScroll.y)\n showScrollbarV();\n else\n hideScrollbarV();\n }\n else if (scrollbarsVisibilityVisible) {\n showScrollbarH();\n showScrollbarV();\n }\n else if (scrollbarsVisibilityHidden) {\n hideScrollbarH();\n hideScrollbarV();\n }\n }\n\n //manage the scrollbars auto hide feature (auto hide them after specific actions)\n if (scrollbarsAutoHideChanged || ignoreOverlayScrollbarHidingChanged) {\n if (_scrollbarsAutoHideLeave || _scrollbarsAutoHideMove) {\n setupHostMouseTouchEvents(true);\n setupHostMouseTouchEvents();\n }\n else {\n setupHostMouseTouchEvents(true);\n }\n\n if (_scrollbarsAutoHideNever)\n refreshScrollbarsAutoHide(true);\n else\n refreshScrollbarsAutoHide(false, true);\n }\n\n //manage scrollbars handle length & offset - don't remove!\n if (hostSizeChanged || overflowAmount.c || heightAutoChanged || widthAutoChanged || resizeChanged || boxSizingChanged || paddingAbsoluteChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged) {\n refreshScrollbarHandleLength(true);\n refreshScrollbarHandleOffset(true);\n refreshScrollbarHandleLength(false);\n refreshScrollbarHandleOffset(false);\n }\n\n //manage interactivity\n if (scrollbarsClickScrollingChanged)\n refreshScrollbarsInteractive(true, scrollbarsClickScrolling);\n if (scrollbarsDragScrollingChanged)\n refreshScrollbarsInteractive(false, scrollbarsDragScrolling);\n\n //callbacks:\n if (cssDirectionChanged) {\n dispatchCallback('onDirectionChanged', {\n isRTL: _isRTL,\n dir: cssDirection\n });\n }\n if (hostSizeChanged) {\n dispatchCallback('onHostSizeChanged', {\n width: _hostSizeCache.w,\n height: _hostSizeCache.h\n });\n }\n if (contentSizeChanged) {\n dispatchCallback('onContentSizeChanged', {\n width: _contentScrollSizeCache.w,\n height: _contentScrollSizeCache.h\n });\n }\n if (hasOverflow.c || hideOverflow.c) {\n dispatchCallback('onOverflowChanged', {\n x: hasOverflow.x,\n y: hasOverflow.y,\n xScrollable: hideOverflow.xs,\n yScrollable: hideOverflow.ys,\n clipped: hideOverflow.x || hideOverflow.y\n });\n }\n if (overflowAmount.c) {\n dispatchCallback('onOverflowAmountChanged', {\n x: overflowAmount.x,\n y: overflowAmount.y\n });\n }\n }\n\n //fix body min size\n if (_isBody && _bodyMinSizeCache && (_hasOverflowCache.c || _bodyMinSizeCache.c)) {\n //its possible that no min size was measured until now, because the content arrange element was just added now, in this case, measure now the min size.\n if (!_bodyMinSizeCache.f)\n bodyMinSizeChanged();\n if (_nativeScrollbarIsOverlaid.y && _hasOverflowCache.x)\n _contentElement.css(_strMinMinus + _strWidth, _bodyMinSizeCache.w + _overlayScrollbarDummySize.y);\n if (_nativeScrollbarIsOverlaid.x && _hasOverflowCache.y)\n _contentElement.css(_strMinMinus + _strHeight, _bodyMinSizeCache.h + _overlayScrollbarDummySize.x);\n _bodyMinSizeCache.c = false;\n }\n\n //freezeResizeObserver(_sizeObserverElement, false);\n //freezeResizeObserver(_sizeAutoObserverElement, false);\n\n dispatchCallback('onUpdated', { forced: force });\n }\n\n \n //==== Options ====//\n\n /**\n * Sets new options but doesn't call the update method.\n * @param newOptions The object which contains the new options.\n * @returns {*} A object which contains the changed options.\n */\n function setOptions(newOptions) {\n var validatedOpts = _pluginsOptions._validate(newOptions, _pluginsOptions._template, true, _currentOptions)\n\n _currentOptions = extendDeep({}, _currentOptions, validatedOpts._default);\n _currentPreparedOptions = extendDeep({}, _currentPreparedOptions, validatedOpts._prepared);\n \n return validatedOpts._prepared;\n }\n\n\n //==== Structure ====//\n\n /**\n * Builds or destroys the wrapper and helper DOM elements.\n * @param destroy Indicates whether the DOM shall be build or destroyed.\n */\n function setupStructureDOM(destroy) {\n var strParent = 'parent';\n var classNameResizeObserverHost = 'os-resize-observer-host';\n var classNameTextareaElementFull = _classNameTextareaElement + _strSpace + _classNameTextInherit;\n var textareaClass = _isTextarea ? _strSpace + _classNameTextInherit : _strEmpty;\n var adoptAttrs = _currentPreparedOptions.textarea.inheritedAttrs;\n var adoptAttrsMap = { };\n var applyAdoptedAttrs = function() {\n var applyAdoptedAttrsElm = destroy ? _targetElement : _hostElement;\n each(adoptAttrsMap, function(key, value) {\n if(type(value) == TYPES.s) {\n if(key == LEXICON.c)\n applyAdoptedAttrsElm.addClass(value);\n else\n applyAdoptedAttrsElm.attr(key, value);\n }\n });\n };\n var hostElementClassNames = [\n _classNameHostElement,\n _classNameHostTextareaElement,\n _classNameHostResizeDisabled,\n _classNameHostRTL,\n _classNameHostScrollbarHorizontalHidden,\n _classNameHostScrollbarVerticalHidden,\n _classNameHostTransition,\n _classNameHostScrolling,\n _classNameHostOverflow,\n _classNameHostOverflowX,\n _classNameHostOverflowY,\n _classNameThemeNone,\n _classNameTextareaElement,\n _classNameTextInherit,\n _classNameCache].join(_strSpace);\n var hostElementCSS = { };\n \n //get host element as first element, because that's the most upper element and required for the other elements\n _hostElement = _hostElement || (_isTextarea ? (_domExists ? _targetElement[strParent]()[strParent]()[strParent]()[strParent]() : FRAMEWORK(generateDiv(_classNameHostTextareaElement))) : _targetElement);\n _contentElement = _contentElement || selectOrGenerateDivByClass(_classNameContentElement + textareaClass);\n _viewportElement = _viewportElement || selectOrGenerateDivByClass(_classNameViewportElement + textareaClass);\n _paddingElement = _paddingElement || selectOrGenerateDivByClass(_classNamePaddingElement + textareaClass);\n _sizeObserverElement = _sizeObserverElement || selectOrGenerateDivByClass(classNameResizeObserverHost);\n _textareaCoverElement = _textareaCoverElement || (_isTextarea ? selectOrGenerateDivByClass(_classNameTextareaCoverElement) : undefined);\n \n //on destroy, remove all generated class names from the host element before collecting the adopted attributes \n //to prevent adopting generated class names\n if(destroy)\n removeClass(_hostElement, hostElementClassNames);\n \n //collect all adopted attributes\n adoptAttrs = type(adoptAttrs) == TYPES.s ? adoptAttrs.split(_strSpace) : adoptAttrs;\n if(type(adoptAttrs) == TYPES.a && _isTextarea) {\n each(adoptAttrs, function(i, v) {\n if(type(v) == TYPES.s) {\n adoptAttrsMap[v] = destroy ? _hostElement.attr(v) : _targetElement.attr(v);\n }\n });\n }\n\n if(!destroy) {\n if(_isTextarea) {\n if(!_currentPreparedOptions.sizeAutoCapable) {\n hostElementCSS[_strWidth] = _targetElement.css(_strWidth);\n hostElementCSS[_strHeight] = _targetElement.css(_strHeight);\n }\n \n if(!_domExists)\n _targetElement.addClass(_classNameTextInherit).wrap(_hostElement);\n \n //jQuery clones elements in wrap functions, so we have to select them again\n _hostElement = _targetElement[strParent]().css(hostElementCSS);\n }\n \n if(!_domExists) {\n //add the correct class to the target element\n addClass(_targetElement, _isTextarea ? classNameTextareaElementFull : _classNameHostElement);\n\n //wrap the content into the generated elements to create the required DOM\n _hostElement.wrapInner(_contentElement)\n .wrapInner(_viewportElement)\n .wrapInner(_paddingElement)\n .prepend(_sizeObserverElement);\n \n //jQuery clones elements in wrap functions, so we have to select them again\n _contentElement = findFirst(_hostElement, _strDot + _classNameContentElement);\n _viewportElement = findFirst(_hostElement, _strDot + _classNameViewportElement);\n _paddingElement = findFirst(_hostElement, _strDot + _classNamePaddingElement);\n \n if(_isTextarea) {\n _contentElement.prepend(_textareaCoverElement);\n applyAdoptedAttrs();\n }\n }\n \n if (_nativeScrollbarStyling)\n addClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n if(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)\n addClass(_viewportElement, _classNameViewportNativeScrollbarsOverlaid);\n if (_isBody)\n addClass(_htmlElement, _classNameHTMLElement);\n\n _sizeObserverElementNative = _sizeObserverElement[0];\n _hostElementNative = _hostElement[0];\n _paddingElementNative = _paddingElement[0];\n _viewportElementNative = _viewportElement[0];\n _contentElementNative = _contentElement[0];\n }\n else {\n if(_domExists && _initialized) {\n //clear size observer\n _sizeObserverElement.children().remove();\n \n //remove the style property and classes from already generated elements\n each([ _paddingElement, _viewportElement, _contentElement, _textareaCoverElement ], function(i, elm) { \n if(elm) {\n removeClass(elm.removeAttr(LEXICON.s), _classNamesDynamicDestroy);\n }\n });\n \n //add classes to the host element which was removed previously to match the expected DOM\n addClass(_hostElement, _isTextarea ? _classNameHostTextareaElement : _classNameHostElement);\n }\n else {\n //remove size observer\n remove(_sizeObserverElement);\n \n //unwrap the content to restore DOM\n _contentElement.contents()\n .unwrap()\n .unwrap()\n .unwrap();\n \n if(_isTextarea) {\n _targetElement.unwrap();\n remove(_hostElement);\n remove(_textareaCoverElement);\n applyAdoptedAttrs();\n }\n }\n \n if (_isTextarea)\n _targetElement.removeAttr(LEXICON.s);\n \n if (_isBody)\n removeClass(_htmlElement, _classNameHTMLElement);\n }\n }\n\n /**\n * Adds or removes all wrapper elements interactivity events.\n * @param destroy Indicates whether the Events shall be added or removed.\n */\n function setupStructureEvents() {\n var textareaKeyDownRestrictedKeyCodes = [\n 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123, //F1 to F12\n 33, 34, //page up, page down\n 37, 38, 39, 40, //left, up, right, down arrows\n 16, 17, 18, 19, 20, 144 //Shift, Ctrl, Alt, Pause, CapsLock, NumLock\n ];\n var textareaKeyDownKeyCodesList = [ ];\n var textareaUpdateIntervalID;\n var scrollStopTimeoutId;\n var scrollStopDelay = 175;\n var strFocus = 'focus';\n\n function updateTextarea(doClearInterval) {\n textareaUpdate();\n _base.update(_strAuto);\n if(doClearInterval && _autoUpdateRecommended)\n clearInterval(textareaUpdateIntervalID);\n }\n function textareaOnScroll(event) {\n _targetElement[_strScrollLeft](_rtlScrollBehavior.i && _normalizeRTLCache ? 9999999 : 0);\n _targetElement[_strScrollTop](0);\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n return false;\n }\n function textareaOnDrop(event) {\n setTimeout(function () {\n if(!_destroyed)\n updateTextarea();\n }, 50);\n }\n function textareaOnFocus() {\n _textareaHasFocus = true;\n addClass(_hostElement, strFocus);\n }\n function textareaOnFocusout() {\n _textareaHasFocus = false;\n textareaKeyDownKeyCodesList = [ ];\n removeClass(_hostElement, strFocus);\n updateTextarea(true);\n } \n function textareaOnKeyDown(event) {\n var keyCode = event.keyCode;\n \n if (inArray(keyCode, textareaKeyDownRestrictedKeyCodes) < 0) {\n if (!textareaKeyDownKeyCodesList[LEXICON.l]) {\n updateTextarea();\n textareaUpdateIntervalID = setInterval(updateTextarea, 1000 / 60);\n }\n if (inArray(keyCode, textareaKeyDownKeyCodesList) < 0)\n textareaKeyDownKeyCodesList.push(keyCode);\n }\n }\n function textareaOnKeyUp(event) {\n var keyCode = event.keyCode;\n var index = inArray(keyCode, textareaKeyDownKeyCodesList);\n\n if (inArray(keyCode, textareaKeyDownRestrictedKeyCodes) < 0) {\n if (index > -1)\n textareaKeyDownKeyCodesList.splice(index, 1);\n if (!textareaKeyDownKeyCodesList[LEXICON.l])\n updateTextarea(true);\n }\n } \n function contentOnTransitionEnd(event) {\n if (_autoUpdateCache === true)\n return;\n event = event.originalEvent || event;\n if (isSizeAffectingCSSProperty(event.propertyName))\n _base.update(_strAuto);\n }\n function viewportOnScroll(event) {\n if (!_sleeping) {\n if (scrollStopTimeoutId !== undefined)\n clearTimeout(scrollStopTimeoutId);\n else {\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(true);\n\n if (!nativeOverlayScrollbarsAreActive())\n addClass(_hostElement, _classNameHostScrolling);\n\n dispatchCallback('onScrollStart', event);\n }\n\n //if a scrollbars handle gets dragged, the mousemove event is responsible for refreshing the handle offset\n //because if CSS scroll-snap is used, the handle offset gets only refreshed on every snap point\n //this looks laggy & clunky, it looks much better if the offset refreshes with the mousemove\n if(!_scrollbarsHandlesDefineScrollPos) {\n refreshScrollbarHandleOffset(true);\n refreshScrollbarHandleOffset(false);\n }\n dispatchCallback('onScroll', event);\n\n scrollStopTimeoutId = setTimeout(function () {\n if(!_destroyed) {\n //OnScrollStop:\n clearTimeout(scrollStopTimeoutId);\n scrollStopTimeoutId = undefined;\n\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(false);\n\n if (!nativeOverlayScrollbarsAreActive())\n removeClass(_hostElement, _classNameHostScrolling);\n\n dispatchCallback('onScrollStop', event);\n }\n }, scrollStopDelay);\n }\n }\n\n\n if (_isTextarea) { \n if (_msieVersion > 9 || !_autoUpdateRecommended) {\n addDestroyEventListener(_targetElement, 'input', updateTextarea);\n }\n else {\n addDestroyEventListener(_targetElement, \n [ _strKeyDownEvent, _strKeyUpEvent ],\n [ textareaOnKeyDown, textareaOnKeyUp ]);\n }\n \n addDestroyEventListener(_targetElement, \n [ _strScroll, 'drop', strFocus, strFocus + 'out' ],\n [ textareaOnScroll, textareaOnDrop, textareaOnFocus, textareaOnFocusout ]);\n }\n else {\n addDestroyEventListener(_contentElement, _strTransitionEndEvent, contentOnTransitionEnd);\n }\n addDestroyEventListener(_viewportElement, _strScroll, viewportOnScroll, true);\n }\n\n\n //==== Scrollbars ====//\n\n /**\n * Builds or destroys all scrollbar DOM elements (scrollbar, track, handle)\n * @param destroy Indicates whether the DOM shall be build or destroyed.\n */\n function setupScrollbarsDOM(destroy) {\n var selectOrGenerateScrollbarDOM = function(isHorizontal) {\n var scrollbarClassName = isHorizontal ? _classNameScrollbarHorizontal : _classNameScrollbarVertical;\n var scrollbar = selectOrGenerateDivByClass(_classNameScrollbar + _strSpace + scrollbarClassName, true);\n var track = selectOrGenerateDivByClass(_classNameScrollbarTrack, scrollbar);\n var handle = selectOrGenerateDivByClass(_classNameScrollbarHandle, scrollbar);\n\n if(!_domExists && !destroy) {\n scrollbar.append(track);\n track.append(handle);\n }\n \n return {\n _scrollbar: scrollbar,\n _track: track,\n _handle: handle\n };\n };\n function resetScrollbarDOM(isHorizontal) {\n var scrollbarVars = getScrollbarVars(isHorizontal);\n var scrollbar = scrollbarVars._scrollbar;\n var track = scrollbarVars._track;\n var handle = scrollbarVars._handle;\n \n if(_domExists && _initialized) {\n each([ scrollbar, track, handle ], function(i, elm) { \n removeClass(elm.removeAttr(LEXICON.s), _classNamesDynamicDestroy);\n });\n }\n else {\n remove(scrollbar || selectOrGenerateScrollbarDOM(isHorizontal)._scrollbar);\n }\n }\n var horizontalElements;\n var verticalElements;\n \n if(!destroy) {\n horizontalElements = selectOrGenerateScrollbarDOM(true);\n verticalElements = selectOrGenerateScrollbarDOM();\n \n _scrollbarHorizontalElement = horizontalElements._scrollbar;\n _scrollbarHorizontalTrackElement = horizontalElements._track;\n _scrollbarHorizontalHandleElement = horizontalElements._handle;\n _scrollbarVerticalElement = verticalElements._scrollbar;\n _scrollbarVerticalTrackElement = verticalElements._track;\n _scrollbarVerticalHandleElement = verticalElements._handle;\n\n if(!_domExists) {\n _paddingElement.after(_scrollbarVerticalElement);\n _paddingElement.after(_scrollbarHorizontalElement);\n }\n }\n else {\n resetScrollbarDOM(true);\n resetScrollbarDOM();\n }\n }\n\n /**\n * Initializes all scrollbar interactivity events. (track and handle dragging, clicking, scrolling)\n * @param isHorizontal True if the target scrollbar is the horizontal scrollbar, false if the target scrollbar is the vertical scrollbar.\n */\n function setupScrollbarEvents(isHorizontal) {\n var scrollbarVars = getScrollbarVars(isHorizontal);\n var scrollbarVarsInfo = scrollbarVars._info;\n var insideIFrame = _windowElementNative.top !== _windowElementNative;\n var xy = scrollbarVars._x_y;\n var XY = scrollbarVars._X_Y;\n var scroll = _strScroll + scrollbarVars._Left_Top;\n var strActive = 'active';\n var strSnapHandle = 'snapHandle';\n var scrollDurationFactor = 1;\n var increaseDecreaseScrollAmountKeyCodes = [ 16, 17 ]; //shift, ctrl\n var trackTimeout;\n var mouseDownScroll;\n var mouseDownOffset;\n var mouseDownInvertedScale;\n \n function getPointerPosition(event) {\n return _msieVersion && insideIFrame ? event['screen' + XY] : COMPATIBILITY.page(event)[xy]; //use screen coordinates in EDGE & IE because the page values are incorrect in frames.\n }\n function getPreparedScrollbarsOption(name) {\n return _currentPreparedOptions.scrollbars[name];\n }\n function increaseTrackScrollAmount() {\n scrollDurationFactor = 0.5;\n }\n function decreaseTrackScrollAmount() {\n scrollDurationFactor = 1;\n }\n function documentKeyDown(event) {\n if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)\n increaseTrackScrollAmount();\n }\n function documentKeyUp(event) {\n if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)\n decreaseTrackScrollAmount();\n }\n function onMouseTouchDownContinue(event) {\n var originalEvent = event.originalEvent || event;\n var isTouchEvent = originalEvent.touches !== undefined;\n return _sleeping || _destroyed || nativeOverlayScrollbarsAreActive() || !_scrollbarsDragScrollingCache || (isTouchEvent && !getPreparedScrollbarsOption('touchSupport')) ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;\n }\n function documentDragMove(event) {\n if(onMouseTouchDownContinue(event)) {\n var trackLength = scrollbarVarsInfo._trackLength;\n var handleLength = scrollbarVarsInfo._handleLength;\n var scrollRange = scrollbarVarsInfo._maxScroll;\n var scrollRaw = (getPointerPosition(event) - mouseDownOffset) * mouseDownInvertedScale;\n var scrollDeltaPercent = scrollRaw / (trackLength - handleLength);\n var scrollDelta = (scrollRange * scrollDeltaPercent);\n scrollDelta = isFinite(scrollDelta) ? scrollDelta : 0;\n if (_isRTL && isHorizontal && !_rtlScrollBehavior.i)\n scrollDelta *= -1;\n\n _viewportElement[scroll](MATH.round(mouseDownScroll + scrollDelta));\n\n if(_scrollbarsHandlesDefineScrollPos)\n refreshScrollbarHandleOffset(isHorizontal, mouseDownScroll + scrollDelta);\n\n if (!_supportPassiveEvents)\n COMPATIBILITY.prvD(event);\n }\n else\n documentMouseTouchUp(event);\n }\n function documentMouseTouchUp(event) {\n event = event || event.originalEvent;\n\n setupResponsiveEventListener(_documentElement,\n [ _strMouseTouchMoveEvent, _strMouseTouchUpEvent, _strKeyDownEvent, _strKeyUpEvent, _strSelectStartEvent ],\n [ documentDragMove, documentMouseTouchUp, documentKeyDown, documentKeyUp, documentOnSelectStart ],\n true);\n\n if(_scrollbarsHandlesDefineScrollPos)\n refreshScrollbarHandleOffset(isHorizontal, true);\n\n _scrollbarsHandlesDefineScrollPos = false;\n removeClass(_bodyElement, _classNameDragging);\n removeClass(scrollbarVars._handle, strActive);\n removeClass(scrollbarVars._track, strActive);\n removeClass(scrollbarVars._scrollbar, strActive);\n\n mouseDownScroll = undefined;\n mouseDownOffset = undefined;\n mouseDownInvertedScale = 1;\n\n decreaseTrackScrollAmount();\n\n if (trackTimeout !== undefined) {\n _base.scrollStop();\n clearTimeout(trackTimeout);\n trackTimeout = undefined;\n }\n\n if(event) {\n var rect = _hostElementNative[LEXICON.bCR]();\n var mouseInsideHost = event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom;\n\n //if mouse is outside host element\n if (!mouseInsideHost)\n hostOnMouseLeave();\n\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(false);\n }\n }\n function onHandleMouseTouchDown(event) {\n if (onMouseTouchDownContinue(event))\n onHandleMouseTouchDownAction(event);\n }\n function onHandleMouseTouchDownAction(event) {\n mouseDownScroll = _viewportElement[scroll]();\n mouseDownScroll = isNaN(mouseDownScroll) ? 0 : mouseDownScroll;\n if (_isRTL && isHorizontal && !_rtlScrollBehavior.n || !_isRTL)\n mouseDownScroll = mouseDownScroll < 0 ? 0 : mouseDownScroll;\n\n mouseDownInvertedScale = getHostElementInvertedScale()[xy];\n mouseDownOffset = getPointerPosition(event);\n\n _scrollbarsHandlesDefineScrollPos = !getPreparedScrollbarsOption(strSnapHandle);\n addClass(_bodyElement, _classNameDragging);\n addClass(scrollbarVars._handle, strActive);\n addClass(scrollbarVars._scrollbar, strActive);\n\n setupResponsiveEventListener(_documentElement,\n [ _strMouseTouchMoveEvent, _strMouseTouchUpEvent, _strSelectStartEvent ],\n [ documentDragMove, documentMouseTouchUp, documentOnSelectStart ]);\n\n if(_msieVersion || !_documentMixed)\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n }\n function onTrackMouseTouchDown(event) {\n if (onMouseTouchDownContinue(event)) {\n var scrollDistance = MATH.round(_viewportSize[scrollbarVars._w_h]);\n var trackOffset = scrollbarVars._track.offset()[scrollbarVars._left_top];\n var ctrlKey = event.ctrlKey;\n var instantScroll = event.shiftKey;\n var instantScrollTransition = instantScroll && ctrlKey;\n var isFirstIteration = true;\n var easing = 'linear';\n var decreaseScroll;\n var finishedCondition;\n var scrollActionFinsished = function(transition) {\n if(_scrollbarsHandlesDefineScrollPos)\n refreshScrollbarHandleOffset(isHorizontal, transition);\n };\n var scrollActionInstantFinished = function() {\n scrollActionFinsished();\n onHandleMouseTouchDownAction(event);\n };\n var scrollAction = function () {\n if(!_destroyed) {\n var mouseOffset = (mouseDownOffset - trackOffset) * mouseDownInvertedScale;\n var handleOffset = scrollbarVarsInfo._handleOffset;\n var trackLength = scrollbarVarsInfo._trackLength;\n var handleLength = scrollbarVarsInfo._handleLength;\n var scrollRange = scrollbarVarsInfo._maxScroll;\n var currScroll = scrollbarVarsInfo._currentScroll;\n var scrollDuration = 270 * scrollDurationFactor;\n var timeoutDelay = isFirstIteration ? MATH.max(400, scrollDuration) : scrollDuration;\n var instantScrollPosition = scrollRange * ((mouseOffset - (handleLength / 2)) / (trackLength - handleLength)); // 100% * positionPercent\n var rtlIsNormal = _isRTL && isHorizontal && ((!_rtlScrollBehavior.i && !_rtlScrollBehavior.n) || _normalizeRTLCache);\n var decreaseScrollCondition = rtlIsNormal ? handleOffset < mouseOffset : handleOffset > mouseOffset;\n var scrollObj = { };\n var animationObj = {\n easing : easing,\n step : function(now) {\n if(_scrollbarsHandlesDefineScrollPos) {\n _viewportElement[scroll](now); //https://github.com/jquery/jquery/issues/4340\n refreshScrollbarHandleOffset(isHorizontal, now);\n }\n }\n };\n instantScrollPosition = isFinite(instantScrollPosition) ? instantScrollPosition : 0;\n instantScrollPosition = _isRTL && isHorizontal && !_rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;\n\n //_base.scrollStop();\n\n if(instantScroll) {\n _viewportElement[scroll](instantScrollPosition); //scroll instantly to new position\n if(instantScrollTransition) {\n //get the scroll position after instant scroll (in case CSS Snap Points are used) to get the correct snapped scroll position\n //and the animation stops at the correct point\n instantScrollPosition = _viewportElement[scroll]();\n //scroll back to the position before instant scrolling so animation can be performed\n _viewportElement[scroll](currScroll);\n\n instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;\n instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.n ? -instantScrollPosition : instantScrollPosition;\n\n scrollObj[xy] = instantScrollPosition;\n _base.scroll(scrollObj, extendDeep(animationObj, {\n duration : 130,\n complete : scrollActionInstantFinished\n }));\n }\n else\n scrollActionInstantFinished();\n }\n else {\n decreaseScroll = isFirstIteration ? decreaseScrollCondition : decreaseScroll;\n finishedCondition = rtlIsNormal\n ? (decreaseScroll ? handleOffset + handleLength >= mouseOffset : handleOffset <= mouseOffset)\n : (decreaseScroll ? handleOffset <= mouseOffset : handleOffset + handleLength >= mouseOffset);\n\n if (finishedCondition) {\n clearTimeout(trackTimeout);\n _base.scrollStop();\n trackTimeout = undefined;\n scrollActionFinsished(true);\n }\n else {\n trackTimeout = setTimeout(scrollAction, timeoutDelay);\n\n scrollObj[xy] = (decreaseScroll ? '-=' : '+=') + scrollDistance;\n _base.scroll(scrollObj, extendDeep(animationObj, {\n duration: scrollDuration\n }));\n }\n isFirstIteration = false;\n }\n }\n };\n if (ctrlKey)\n increaseTrackScrollAmount();\n\n mouseDownInvertedScale = getHostElementInvertedScale()[xy];\n mouseDownOffset = COMPATIBILITY.page(event)[xy];\n\n _scrollbarsHandlesDefineScrollPos = !getPreparedScrollbarsOption(strSnapHandle);\n addClass(_bodyElement, _classNameDragging);\n addClass(scrollbarVars._track, strActive);\n addClass(scrollbarVars._scrollbar, strActive);\n\n setupResponsiveEventListener(_documentElement,\n [ _strMouseTouchUpEvent, _strKeyDownEvent, _strKeyUpEvent, _strSelectStartEvent ],\n [ documentMouseTouchUp, documentKeyDown, documentKeyUp, documentOnSelectStart ]);\n\n scrollAction();\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n }\n }\n function onTrackMouseTouchEnter(event) {\n //make sure both scrollbars will stay visible if one scrollbar is hovered if autoHide is \"scroll\" or \"move\".\n _scrollbarsHandleHovered = true;\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(true);\n }\n function onTrackMouseTouchLeave(event) {\n _scrollbarsHandleHovered = false;\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n refreshScrollbarsAutoHide(false);\n }\n function onScrollbarMouseTouchDown(event) {\n COMPATIBILITY.stpP(event);\n }\n \n addDestroyEventListener(scrollbarVars._handle, \n _strMouseTouchDownEvent, \n onHandleMouseTouchDown);\n addDestroyEventListener(scrollbarVars._track,\n [_strMouseTouchDownEvent, _strMouseTouchEnter, _strMouseTouchLeave], \n [onTrackMouseTouchDown, onTrackMouseTouchEnter, onTrackMouseTouchLeave]);\n addDestroyEventListener(scrollbarVars._scrollbar, \n _strMouseTouchDownEvent, \n onScrollbarMouseTouchDown);\n\n if (_supportTransition) {\n addDestroyEventListener(scrollbarVars._scrollbar, _strTransitionEndEvent, function(event) {\n if (event.target !== scrollbarVars._scrollbar[0])\n return;\n refreshScrollbarHandleLength(isHorizontal);\n refreshScrollbarHandleOffset(isHorizontal);\n });\n }\n }\n\n /**\n * Shows or hides the given scrollbar and applied a class name which indicates if the scrollbar is scrollable or not.\n * @param isHorizontal True if the horizontal scrollbar is the target, false if the vertical scrollbar is the target.\n * @param shallBeVisible True if the scrollbar shall be shown, false if hidden.\n * @param canScroll True if the scrollbar is scrollable, false otherwise.\n */\n function refreshScrollbarAppearance(isHorizontal, shallBeVisible, canScroll) {\n var scrollbarClassName = isHorizontal ? _classNameHostScrollbarHorizontalHidden : _classNameHostScrollbarVerticalHidden;\n var scrollbarElement = isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement;\n\n if (shallBeVisible)\n removeClass(_hostElement, scrollbarClassName);\n else\n addClass(_hostElement, scrollbarClassName);\n\n if (canScroll)\n removeClass(scrollbarElement, _classNameScrollbarUnusable);\n else\n addClass(scrollbarElement, _classNameScrollbarUnusable);\n }\n\n /**\n * Autoshows / autohides both scrollbars with.\n * @param shallBeVisible True if the scrollbars shall be autoshown (only the case if they are hidden by a autohide), false if the shall be auto hidden.\n * @param delayfree True if the scrollbars shall be hidden without a delay, false or undefined otherwise.\n */\n function refreshScrollbarsAutoHide(shallBeVisible, delayfree) {\n clearTimeout(_scrollbarsAutoHideTimeoutId);\n if (shallBeVisible) {\n //if(_hasOverflowCache.x && _hideOverflowCache.xs)\n removeClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);\n //if(_hasOverflowCache.y && _hideOverflowCache.ys)\n removeClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);\n }\n else {\n var anyActive;\n var strActive = 'active';\n var hide = function () {\n if (!_scrollbarsHandleHovered && !_destroyed) {\n anyActive = _scrollbarHorizontalHandleElement.hasClass(strActive) || _scrollbarVerticalHandleElement.hasClass(strActive);\n if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))\n addClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);\n if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))\n addClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);\n }\n };\n if (_scrollbarsAutoHideDelay > 0 && delayfree !== true)\n _scrollbarsAutoHideTimeoutId = setTimeout(hide, _scrollbarsAutoHideDelay);\n else\n hide();\n }\n }\n\n /**\n * Refreshes the handle length of the given scrollbar.\n * @param isHorizontal True if the horizontal scrollbar handle shall be refreshed, false if the vertical one shall be refreshed.\n */\n function refreshScrollbarHandleLength(isHorizontal) {\n var handleCSS = {};\n var scrollbarVars = getScrollbarVars(isHorizontal);\n var scrollbarVarsInfo = scrollbarVars._info;\n var digit = 1000000;\n //get and apply intended handle length\n var handleRatio = MATH.min(1, (_hostSizeCache[scrollbarVars._w_h] - (_paddingAbsoluteCache ? (isHorizontal ? _paddingX : _paddingY) : 0)) / _contentScrollSizeCache[scrollbarVars._w_h]);\n handleCSS[scrollbarVars._width_height] = (MATH.floor(handleRatio * 100 * digit) / digit) + '%'; //the last * digit / digit is for flooring to the 4th digit\n\n if (!nativeOverlayScrollbarsAreActive())\n scrollbarVars._handle.css(handleCSS);\n\n //measure the handle length to respect min & max length\n scrollbarVarsInfo._handleLength = scrollbarVars._handle[0]['offset' + scrollbarVars._Width_Height];\n scrollbarVarsInfo._handleLengthRatio = handleRatio;\n }\n\n /**\n * Refreshes the handle offset of the given scrollbar.\n * @param isHorizontal True if the horizontal scrollbar handle shall be refreshed, false if the vertical one shall be refreshed.\n * @param scrollOrTransition The scroll position of the given scrollbar axis to which the handle shall be moved or a boolean which indicates whether a transition shall be applied. If undefined or boolean if the current scroll-offset is taken. (if isHorizontal ? scrollLeft : scrollTop)\n */\n function refreshScrollbarHandleOffset(isHorizontal, scrollOrTransition) {\n var transition = type(scrollOrTransition) == TYPES.b;\n var transitionDuration = 250;\n var isRTLisHorizontal = _isRTL && isHorizontal;\n var scrollbarVars = getScrollbarVars(isHorizontal);\n var scrollbarVarsInfo = scrollbarVars._info;\n var strTranslateBrace = 'translate(';\n var strTransform = VENDORS._cssProperty('transform');\n var strTransition = VENDORS._cssProperty('transition');\n var nativeScroll = isHorizontal ? _viewportElement[_strScrollLeft]() : _viewportElement[_strScrollTop]();\n var currentScroll = scrollOrTransition === undefined || transition ? nativeScroll : scrollOrTransition;\n\n //measure the handle length to respect min & max length\n var handleLength = scrollbarVarsInfo._handleLength;\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\n var handleTrackDiff = trackLength - handleLength;\n var handleCSS = {};\n var transformOffset;\n var translateValue;\n\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\n // because its a bit behind during the small delay when content size updates\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\n var maxScroll = (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] - _viewportElementNative['client' + scrollbarVars._Width_Height]) * (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\n var getScrollRatio = function(base) {\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\n };\n var getHandleOffset = function(scrollRatio) {\n var offset = handleTrackDiff * scrollRatio;\n offset = isNaN(offset) ? 0 : offset;\n offset = (isRTLisHorizontal && !_rtlScrollBehavior.i) ? (trackLength - handleLength - offset) : offset;\n offset = MATH.max(0, offset);\n return offset;\n };\n var scrollRatio = getScrollRatio(nativeScroll);\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\n var snappedHandleOffset = getHandleOffset(scrollRatio);\n\n scrollbarVarsInfo._maxScroll = maxScroll;\n scrollbarVarsInfo._currentScroll = nativeScroll;\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\n\n if (_supportTransform) {\n transformOffset = isRTLisHorizontal ? -(trackLength - handleLength - handleOffset) : handleOffset; //in px\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\n translateValue = isHorizontal ? strTranslateBrace + transformOffset + 'px, 0)' : strTranslateBrace + '0, ' + transformOffset + 'px)';\n\n handleCSS[strTransform] = translateValue;\n\n //apply or clear up transition\n if(_supportTransition)\n handleCSS[strTransition] = transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1 ? getCSSTransitionString(scrollbarVars._handle) + ', ' + (strTransform + _strSpace + transitionDuration + 'ms') : _strEmpty;\n }\n else\n handleCSS[scrollbarVars._left_top] = handleOffset;\n\n\n //only apply css if offset has changed and overflow exists.\n if (!nativeOverlayScrollbarsAreActive()) {\n scrollbarVars._handle.css(handleCSS);\n\n //clear up transition\n if(_supportTransform && _supportTransition && transition) {\n scrollbarVars._handle.one(_strTransitionEndEvent, function() {\n if(!_destroyed)\n scrollbarVars._handle.css(strTransition, _strEmpty);\n });\n }\n }\n\n scrollbarVarsInfo._handleOffset = handleOffset;\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\n scrollbarVarsInfo._trackLength = trackLength;\n }\n\n /**\n * Refreshes the interactivity of the given scrollbar element.\n * @param isTrack True if the track element is the target, false if the handle element is the target.\n * @param value True for interactivity false for no interactivity.\n */\n function refreshScrollbarsInteractive(isTrack, value) {\n var action = value ? 'removeClass' : 'addClass';\n var element1 = isTrack ? _scrollbarHorizontalTrackElement : _scrollbarHorizontalHandleElement;\n var element2 = isTrack ? _scrollbarVerticalTrackElement : _scrollbarVerticalHandleElement;\n var className = isTrack ? _classNameScrollbarTrackOff : _classNameScrollbarHandleOff;\n\n element1[action](className);\n element2[action](className);\n }\n\n /**\n * Returns a object which is used for fast access for specific variables.\n * @param isHorizontal True if the horizontal scrollbar vars shall be accessed, false if the vertical scrollbar vars shall be accessed.\n * @returns {{wh: string, WH: string, lt: string, _wh: string, _lt: string, t: *, h: *, c: {}, s: *}}\n */\n function getScrollbarVars(isHorizontal) {\n return {\n _width_height: isHorizontal ? _strWidth : _strHeight,\n _Width_Height: isHorizontal ? 'Width' : 'Height',\n _left_top: isHorizontal ? _strLeft : _strTop,\n _Left_Top: isHorizontal ? 'Left' : 'Top',\n _x_y: isHorizontal ? _strX : _strY,\n _X_Y: isHorizontal ? 'X' : 'Y',\n _w_h: isHorizontal ? 'w' : 'h',\n _l_t: isHorizontal ? 'l' : 't',\n _track: isHorizontal ? _scrollbarHorizontalTrackElement : _scrollbarVerticalTrackElement,\n _handle: isHorizontal ? _scrollbarHorizontalHandleElement : _scrollbarVerticalHandleElement,\n _scrollbar: isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement,\n _info: isHorizontal ? _scrollHorizontalInfo : _scrollVerticalInfo\n };\n }\n\n\n //==== Scrollbar Corner ====//\n\n /**\n * Builds or destroys the scrollbar corner DOM element.\n * @param destroy Indicates whether the DOM shall be build or destroyed.\n */\n function setupScrollbarCornerDOM(destroy) {\n _scrollbarCornerElement = _scrollbarCornerElement || selectOrGenerateDivByClass(_classNameScrollbarCorner, true);\n \n if(!destroy) {\n if(!_domExists) {\n _hostElement.append(_scrollbarCornerElement);\n }\n }\n else {\n if(_domExists && _initialized) {\n removeClass(_scrollbarCornerElement.removeAttr(LEXICON.s), _classNamesDynamicDestroy);\n }\n else {\n remove(_scrollbarCornerElement);\n }\n }\n }\n\n /**\n * Initializes all scrollbar corner interactivity events.\n */\n function setupScrollbarCornerEvents() {\n var insideIFrame = _windowElementNative.top !== _windowElementNative;\n var mouseDownPosition = { };\n var mouseDownSize = { };\n var mouseDownInvertedScale = { };\n var reconnectMutationObserver;\n \n function documentDragMove(event) {\n if (onMouseTouchDownContinue(event)) {\n var pageOffset = getCoordinates(event);\n var hostElementCSS = { };\n if (_resizeHorizontal || _resizeBoth)\n hostElementCSS[_strWidth] = (mouseDownSize.w + (pageOffset.x - mouseDownPosition.x) * mouseDownInvertedScale.x);\n if (_resizeVertical || _resizeBoth)\n hostElementCSS[_strHeight] = (mouseDownSize.h + (pageOffset.y - mouseDownPosition.y) * mouseDownInvertedScale.y);\n _hostElement.css(hostElementCSS);\n COMPATIBILITY.stpP(event);\n }\n else {\n documentMouseTouchUp(event);\n }\n }\n function documentMouseTouchUp(event) {\n var eventIsTrusted = event !== undefined;\n\n setupResponsiveEventListener(_documentElement,\n [ _strSelectStartEvent, _strMouseTouchMoveEvent, _strMouseTouchUpEvent ],\n [ documentOnSelectStart, documentDragMove, documentMouseTouchUp ],\n true);\n\n removeClass(_bodyElement, _classNameDragging);\n if (_scrollbarCornerElement.releaseCapture)\n _scrollbarCornerElement.releaseCapture();\n\n if (eventIsTrusted) {\n if (reconnectMutationObserver)\n connectMutationObservers();\n _base.update(_strAuto);\n }\n reconnectMutationObserver = false;\n }\n function onMouseTouchDownContinue(event) {\n var originalEvent = event.originalEvent || event;\n var isTouchEvent = originalEvent.touches !== undefined;\n return _sleeping || _destroyed ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;\n }\n function getCoordinates(event) {\n return _msieVersion && insideIFrame ? { x : event.screenX , y : event.screenY } : COMPATIBILITY.page(event);\n }\n \n addDestroyEventListener(_scrollbarCornerElement, _strMouseTouchDownEvent, function(event) {\n if (onMouseTouchDownContinue(event) && !_resizeNone) {\n if (_mutationObserversConnected) {\n reconnectMutationObserver = true;\n disconnectMutationObservers();\n }\n\n mouseDownPosition = getCoordinates(event);\n\n mouseDownSize.w = _hostElementNative[LEXICON.oW] - (!_isBorderBox ? _paddingX : 0);\n mouseDownSize.h = _hostElementNative[LEXICON.oH] - (!_isBorderBox ? _paddingY : 0);\n mouseDownInvertedScale = getHostElementInvertedScale();\n\n setupResponsiveEventListener(_documentElement,\n [ _strSelectStartEvent, _strMouseTouchMoveEvent, _strMouseTouchUpEvent ],\n [ documentOnSelectStart, documentDragMove, documentMouseTouchUp ]);\n\n addClass(_bodyElement, _classNameDragging);\n if (_scrollbarCornerElement.setCapture)\n _scrollbarCornerElement.setCapture();\n\n COMPATIBILITY.prvD(event);\n COMPATIBILITY.stpP(event);\n }\n });\n }\n\n\n //==== Utils ====//\n\n /**\n * Calls the callback with the given name. The Context of this callback is always _base (this).\n * @param name The name of the target which shall be called.\n * @param args The args with which the callback shall be called.\n */\n function dispatchCallback(name, args) {\n if(_initialized) {\n var callback = _currentPreparedOptions.callbacks[name];\n var extensionOnName = name;\n var ext;\n\n if(extensionOnName.substr(0, 2) === 'on')\n extensionOnName = extensionOnName.substr(2, 1).toLowerCase() + extensionOnName.substr(3);\n\n if(type(callback) == TYPES.f)\n callback.call(_base, args);\n\n each(_extensions, function() {\n ext = this;\n if(type(ext.on) == TYPES.f)\n ext.on(extensionOnName, args);\n });\n }\n else if(!_destroyed)\n _callbacksInitQeueue.push({ n : name, a : args });\n }\n\n /**\n * Sets the \"top, right, bottom, left\" properties, with a given prefix, of the given css object.\n * @param targetCSSObject The css object to which the values shall be applied.\n * @param prefix The prefix of the \"top, right, bottom, left\" css properties. (example: 'padding-' is a valid prefix)\n * @param values A array of values which shall be applied to the \"top, right, bottom, left\" -properties. The array order is [top, right, bottom, left].\n * If this argument is undefined the value '' (empty string) will be applied to all properties.\n */\n function setTopRightBottomLeft(targetCSSObject, prefix, values) {\n if (values === undefined)\n values = [_strEmpty, _strEmpty, _strEmpty, _strEmpty];\n\n targetCSSObject[prefix + _strTop] = values[0];\n targetCSSObject[prefix + _strRight] = values[1];\n targetCSSObject[prefix + _strBottom] = values[2];\n targetCSSObject[prefix + _strLeft] = values[3];\n }\n\n /**\n * Returns the computed CSS transition string from the given element.\n * @param element The element from which the transition string shall be returned.\n * @returns {string} The CSS transition string from the given element.\n */\n function getCSSTransitionString(element) {\n var transitionStr = VENDORS._cssProperty('transition');\n var assembledValue = element.css(transitionStr);\n if(assembledValue)\n return assembledValue;\n var regExpString = '\\\\s*(' + '([^,(]+(\\\\(.+?\\\\))?)+' + ')[\\\\s,]*';\n var regExpMain = new RegExp(regExpString);\n var regExpValidate = new RegExp('^(' + regExpString + ')+$');\n var properties = 'property duration timing-function delay'.split(' ');\n var result = [ ];\n var strResult;\n var valueArray;\n var i = 0;\n var j;\n var splitCssStyleByComma = function(str) {\n strResult = [ ];\n if (!str.match(regExpValidate))\n return str;\n while (str.match(regExpMain)) {\n strResult.push(RegExp.$1);\n str = str.replace(regExpMain, _strEmpty);\n }\n\n return strResult;\n };\n for (; i < properties[LEXICON.l]; i++) {\n valueArray = splitCssStyleByComma(element.css(transitionStr + '-' + properties[i]));\n for (j = 0; j < valueArray[LEXICON.l]; j++)\n result[j] = (result[j] ? result[j] + _strSpace : _strEmpty) + valueArray[j];\n }\n return result.join(', ');\n }\n\n /**\n * Calculates the host-elements inverted scale. (invertedScale = 1 / scale)\n * @returns {{x: number, y: number}} The scale of the host-element.\n */\n function getHostElementInvertedScale() {\n var rect = _paddingElementNative[LEXICON.bCR]();\n return {\n x : _supportTransform ? 1 / (MATH.round(rect.width) / _paddingElementNative[LEXICON.oW]) || 1 : 1,\n y : _supportTransform ? 1 / (MATH.round(rect.height) / _paddingElementNative[LEXICON.oH]) || 1 : 1\n };\n }\n\n /**\n * Checks whether the given object is a HTMLElement.\n * @param o The object which shall be checked.\n * @returns {boolean} True the given object is a HTMLElement, false otherwise.\n */\n function isHTMLElement(o) {\n var strOwnerDocument = 'ownerDocument';\n var strHTMLElement = 'HTMLElement';\n var wnd = o && o[strOwnerDocument] ? (o[strOwnerDocument].parentWindow || window) : window;\n return (\n typeof wnd[strHTMLElement] == TYPES.o ? o instanceof wnd[strHTMLElement] : //DOM2\n o && typeof o == TYPES.o && o !== null && o.nodeType === 1 && typeof o.nodeName == TYPES.s\n );\n }\n\n /**\n * Compares 2 arrays and returns the differences between them as a array.\n * @param a1 The first array which shall be compared.\n * @param a2 The second array which shall be compared.\n * @returns {Array} The differences between the two arrays.\n */\n function getArrayDifferences(a1, a2) {\n var a = [ ];\n var diff = [ ];\n var i;\n var k;\n for (i = 0; i < a1.length; i++)\n a[a1[i]] = true;\n for (i = 0; i < a2.length; i++) {\n if (a[a2[i]])\n delete a[a2[i]];\n else\n a[a2[i]] = true;\n }\n for (k in a)\n diff.push(k);\n return diff;\n }\n\n /**\n * Returns Zero or the number to which the value can be parsed.\n * @param value The value which shall be parsed.\n * @param toFloat Indicates whether the number shall be parsed to a float.\n */\n function parseToZeroOrNumber(value, toFloat) {\n var num = toFloat ? parseFloat(value) : parseInt(value, 10);\n return isNaN(num) ? 0 : num;\n }\n\n /**\n * Gets several information of the textarea and returns them as a object or undefined if the browser doesn't support it.\n * @returns {{cursorRow: Number, cursorCol, rows: Number, cols: number, wRow: number, pos: number, max : number}} or undefined if not supported.\n */\n function getTextareaInfo() {\n //read needed values\n var textareaCursorPosition = _targetElementNative.selectionStart;\n if (textareaCursorPosition === undefined)\n return;\n\n var textareaValue = _targetElement.val();\n var textareaLength = textareaValue[LEXICON.l];\n var textareaRowSplit = textareaValue.split('\\n');\n var textareaLastRow = textareaRowSplit[LEXICON.l];\n var textareaCurrentCursorRowSplit = textareaValue.substr(0, textareaCursorPosition).split('\\n');\n var widestRow = 0;\n var textareaLastCol = 0;\n var cursorRow = textareaCurrentCursorRowSplit[LEXICON.l];\n var cursorCol = textareaCurrentCursorRowSplit[textareaCurrentCursorRowSplit[LEXICON.l] - 1][LEXICON.l];\n var rowCols;\n var i;\n\n //get widest Row and the last column of the textarea\n for (i = 0; i < textareaRowSplit[LEXICON.l]; i++) {\n rowCols = textareaRowSplit[i][LEXICON.l];\n if (rowCols > textareaLastCol) {\n widestRow = i + 1;\n textareaLastCol = rowCols;\n }\n }\n\n return {\n _cursorRow: cursorRow, //cursorRow\n _cursorColumn: cursorCol, //cursorCol\n _rows: textareaLastRow, //rows\n _columns: textareaLastCol, //cols\n _widestRow: widestRow, //wRow\n _cursorPosition: textareaCursorPosition, //pos\n _cursorMax: textareaLength //max\n };\n }\n\n /**\n * Determines whether native overlay scrollbars are active.\n * @returns {boolean} True if native overlay scrollbars are active, false otherwise.\n */\n function nativeOverlayScrollbarsAreActive() {\n return (_ignoreOverlayScrollbarHidingCache && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y));\n }\n\n /**\n * Gets the element which is used to measure the content size.\n * @returns {*} TextareaCover if target element is textarea else the ContentElement.\n */\n function getContentMeasureElement() {\n return _isTextarea ? _textareaCoverElement[0] : _contentElementNative;\n }\n\n /**\n * Generates a string which represents a HTML div with the given classes or attributes.\n * @param classesOrAttrs The class of the div as string or a object which represents the attributes of the div. (The class attribute can also be written as \"className\".)\n * @param content The content of the div as string.\n * @returns {string} The concated string which represents a HTML div and its content.\n */\n function generateDiv(classesOrAttrs, content) {\n return '
' +\n (content || _strEmpty) +\n '
';\n }\n \n /**\n * Selects or generates a div with the given class attribute.\n * @param className The class names (divided by spaces) of the div which shall be selected or generated.\n * @param selectParentOrOnlyChildren The parent element from which of the element shall be selected. (if undefined or boolean its hostElement)\n * If its a boolean it decides whether only the children of the host element shall be selected.\n * @returns {*} The generated or selected element.\n */\n function selectOrGenerateDivByClass(className, selectParentOrOnlyChildren) {\n var onlyChildren = type(selectParentOrOnlyChildren) == TYPES.b;\n var selectParent = onlyChildren ? _hostElement : (selectParentOrOnlyChildren || _hostElement);\n \n return (_domExists && !selectParent[LEXICON.l]) \n ? null\n : _domExists \n ? selectParent[onlyChildren ? 'children' : 'find'](_strDot + className.replace(/\\s/g, _strDot)).eq(0)\n : FRAMEWORK(generateDiv(className))\n }\n \n /**\n * Gets the value of the given property from the given object.\n * @param obj The object from which the property value shall be got.\n * @param path The property of which the value shall be got.\n * @returns {*} Returns the value of the searched property or undefined of the property wasn't found.\n */\n function getObjectPropVal(obj, path) {\n var splits = path.split(_strDot);\n var i = 0;\n var val;\n for(; i < splits.length; i++) {\n if(!obj[LEXICON.hOP](splits[i]))\n return;\n val = obj[splits[i]];\n if(i < splits.length && type(val) == TYPES.o)\n obj = val;\n }\n return val;\n }\n\n /**\n * Sets the value of the given property from the given object.\n * @param obj The object from which the property value shall be set.\n * @param path The property of which the value shall be set.\n * @param val The value of the property which shall be set.\n */\n function setObjectPropVal(obj, path, val) {\n var splits = path.split(_strDot);\n var splitsLength = splits.length;\n var i = 0;\n var extendObj = { };\n var extendObjRoot = extendObj;\n for(; i < splitsLength; i++)\n extendObj = extendObj[splits[i]] = i + 1 < splitsLength ? { } : val;\n FRAMEWORK.extend(obj, extendObjRoot, true);\n }\n\n\n //==== Utils Cache ====//\n\n /**\n * Compares two values or objects and returns true if they aren't equal.\n * @param current The first value or object which shall be compared.\n * @param cache The second value or object which shall be compared.\n * @param force If true the returned value is always true.\n * @returns {boolean} True if both values or objects aren't equal or force is true, false otherwise.\n */\n function checkCache(current, cache, force) {\n if (force)\n return force;\n if(type(current) == TYPES.o && type(cache) == TYPES.o) {\n for (var prop in current) {\n if(prop !== 'c') {\n if (current[LEXICON.hOP](prop) && cache[LEXICON.hOP](prop)) {\n if(checkCache(current[prop], cache[prop]))\n return true;\n }\n else {\n return true;\n }\n }\n }\n }\n else {\n return current !== cache;\n }\n return false;\n }\n\n\n //==== Shortcuts ====//\n\n /**\n * jQuery extend method shortcut with a appended \"true\" as first argument.\n */\n function extendDeep() {\n return FRAMEWORK.extend.apply(this, [ true ].concat([].slice.call(arguments)));\n }\n\n /**\n * jQuery addClass method shortcut.\n */\n function addClass(el, classes) {\n return _frameworkProto.addClass.call(el, classes);\n }\n\n /**\n * jQuery removeClass method shortcut.\n */\n function removeClass(el, classes) {\n return _frameworkProto.removeClass.call(el, classes);\n }\n\n /**\n * jQuery remove method shortcut.\n */\n function remove(el) {\n return _frameworkProto.remove.call(el);\n }\n\n /**\n * Finds the first child element with the given selector of the given element.\n * @param el The root element from which the selector shall be valid.\n * @param selector The selector of the searched element.\n * @returns {*} The first element which is a child of the given element and matches the givens selector.\n */\n function findFirst(el, selector) {\n return _frameworkProto.find.call(el, selector).eq(0);\n }\n\n\n //==== API ====//\n\n /**\n * Puts the instance to sleep. It wont respond to any changes in the DOM and won't update. Scrollbar Interactivity is also disabled as well as the resize handle.\n * This behavior can be reset by calling the update method.\n */\n _base.sleep = function () {\n _sleeping = true;\n };\n\n /**\n * Updates the plugin and DOM to the current options.\n * This method should only be called if a update is 100% required.\n * @param force True if every property shall be updated and the cache shall be ignored.\n * !INTERNAL USAGE! : force can be a string \"auto\", \"sync\" or \"zoom\" too\n * if \"auto\" then before a real update the content size and host element attributes gets checked, and if they changed only then the update method will be called.\n * if \"sync\" then the async update process (MutationObserver or UpdateLoop) gets synchronized and a corresponding update takes place if one was needed due to pending changes.\n * if \"zoom\" then a update takes place where it's assumed that content and host size changed\n * @returns {boolean|undefined} \n * If force is \"sync\" then a boolean is returned which indicates whether a update was needed due to pending changes.\n * If force is \"auto\" then a boolean is returned whether a update was needed due to attribute or size changes.\n * undefined otherwise.\n */\n _base.update = function (force) {\n if(_destroyed)\n return;\n \n var attrsChanged;\n var contentSizeC;\n var isString = type(force) == TYPES.s;\n var imgElementSelector = 'img';\n var imgElementLoadEvent = 'load';\n var doUpdateAuto;\n var mutHost;\n var mutContent;\n \n if(isString) {\n if (force === _strAuto) {\n attrsChanged = meaningfulAttrsChanged();\n contentSizeC = updateAutoContentSizeChanged();\n doUpdateAuto = attrsChanged || contentSizeC;\n if (doUpdateAuto) {\n update({\n _contentSizeChanged : contentSizeC,\n _changedOptions : _initialized ? undefined : _currentPreparedOptions\n });\n }\n }\n else if (force === _strSync) {\n if(_mutationObserversConnected) {\n mutHost = _mutationObserverHostCallback(_mutationObserverHost.takeRecords());\n mutContent = _mutationObserverContentCallback(_mutationObserverContent.takeRecords());\n }\n else {\n mutHost = _base.update(_strAuto);\n }\n }\n else if (force === 'zoom') {\n update({\n _hostSizeChanged : true,\n _contentSizeChanged : true\n });\n }\n }\n else {\n force = _sleeping || force;\n _sleeping = false;\n if(!_base.update(_strSync) || force)\n update({ _force : force });\n }\n if(!_isTextarea) {\n _contentElement.find(imgElementSelector).each(function(i, el) {\n var index = COMPATIBILITY.inA(el, _imgs);\n if (index === -1)\n FRAMEWORK(el).off(imgElementLoadEvent, imgOnLoad).on(imgElementLoadEvent, imgOnLoad);\n });\n }\n return doUpdateAuto || mutHost || mutContent;\n };\n\n /**\n Gets or sets the current options. The update method will be called automatically if new options were set.\n * @param newOptions If new options are given, then the new options will be set, if new options aren't given (undefined or a not a plain object) then the current options will be returned.\n * @param value If new options is a property path string, then this value will be used to set the option to which the property path string leads.\n * @returns {*}\n */\n _base.options = function (newOptions, value) {\n var option = { };\n var changedOps;\n \n //return current options if newOptions are undefined or empty\n if (FRAMEWORK.isEmptyObject(newOptions) || !FRAMEWORK.isPlainObject(newOptions)) {\n if (type(newOptions) == TYPES.s) {\n if (arguments.length > 1) {\n setObjectPropVal(option, newOptions, value);\n changedOps = setOptions(option);\n }\n else\n return getObjectPropVal(_currentOptions, newOptions);\n }\n else\n return _currentOptions;\n }\n else {\n changedOps = setOptions(newOptions);\n }\n \n if(!FRAMEWORK.isEmptyObject(changedOps)) {\n update({ _changedOptions : changedOps });\n } \n };\n\n /**\n * Restore the DOM, disconnects all observers, remove all resize observers and put the instance to sleep.\n */\n _base.destroy = function () {\n if(_destroyed)\n return;\n \n //remove this instance from auto update loop\n autoUpdateLoop.remove(_base);\n\n //disconnect all mutation observers\n disconnectMutationObservers();\n\n //remove all resize observers\n setupResizeObserver(_sizeObserverElement);\n setupResizeObserver(_sizeAutoObserverElement);\n\n //remove all extensions\n for(var extName in _extensions)\n _base.removeExt(extName);\n\n //remove all 'destroy' events\n while(_destroyEvents[LEXICON.l] > 0)\n _destroyEvents.pop()();\n\n //remove all events from host element\n setupHostMouseTouchEvents(true);\n\n //remove all helper / detection elements\n if (_contentGlueElement)\n remove(_contentGlueElement);\n if (_contentArrangeElement)\n remove(_contentArrangeElement);\n if (_sizeAutoObserverAdded)\n remove(_sizeAutoObserverElement);\n\n //remove all generated DOM\n setupScrollbarsDOM(true);\n setupScrollbarCornerDOM(true);\n setupStructureDOM(true);\n\n //remove all generated image load events\n for(var i = 0; i < _imgs[LEXICON.l]; i++)\n FRAMEWORK(_imgs[i]).off('load', imgOnLoad);\n _imgs = undefined;\n\n _destroyed = true;\n _sleeping = true;\n\n //remove this instance from the instances list\n INSTANCES(pluginTargetElement, 0);\n dispatchCallback('onDestroyed');\n\n //remove all properties and methods\n //for (var property in _base)\n // delete _base[property];\n //_base = undefined;\n };\n\n /**\n * Scrolls to a given position or element.\n * @param coordinates\n * 1. Can be \"coordinates\" which looks like:\n * { x : ?, y : ? } OR Object with x and y properties\n * { left : ?, top : ? } OR Object with left and top properties\n * { l : ?, t : ? } OR Object with l and t properties\n * [ ?, ? ] OR Array where the first two element are the coordinates (first is x, second is y)\n * ? A single value which stays for both axis\n * A value can be a number, a string or a calculation.\n *\n * Operators:\n * [NONE] The current scroll will be overwritten by the value.\n * '+=' The value will be added to the current scroll offset\n * '-=' The value will be subtracted from the current scroll offset\n * '*=' The current scroll wil be multiplicated by the value.\n * '/=' The current scroll wil be divided by the value.\n *\n * Units:\n * [NONE] The value is the final scroll amount. final = (value * 1)\n * 'px' Same as none\n * '%' The value is dependent on the current scroll value. final = ((currentScrollValue / 100) * value)\n * 'vw' The value is multiplicated by the viewport width. final = (value * viewportWidth)\n * 'vh' The value is multiplicated by the viewport height. final = (value * viewportHeight)\n *\n * example final values:\n * 200, '200px', '50%', '1vw', '1vh', '+=200', '/=1vw', '*=2px', '-=5vh', '+=33%', '+= 50% - 2px', '-= 1vw - 50%'\n *\n * 2. Can be a HTML or jQuery element:\n * The final scroll offset is the offset (without margin) of the given HTML / jQuery element.\n *\n * 3. Can be a object with a HTML or jQuery element with additional settings:\n * {\n * el : [HTMLElement, jQuery element], MUST be specified, else this object isn't valid.\n * scroll : [string, array, object], Default value is 'always'.\n * block : [string, array, object], Default value is 'begin'.\n * margin : [number, boolean, array, object] Default value is false.\n * }\n *\n * Possible scroll settings are:\n * 'always' Scrolls always.\n * 'ifneeded' Scrolls only if the element isnt fully in view.\n * 'never' Scrolls never.\n *\n * Possible block settings are:\n * 'begin' Both axis shall be docked to the \"begin\" edge. - The element will be docked to the top and left edge of the viewport.\n * 'end' Both axis shall be docked to the \"end\" edge. - The element will be docked to the bottom and right edge of the viewport. (If direction is RTL to the bottom and left edge.)\n * 'center' Both axis shall be docked to \"center\". - The element will be centered in the viewport.\n * 'nearest' The element will be docked to the nearest edge(s).\n *\n * Possible margin settings are: -- The actual margin of the element wont be affect, this option affects only the final scroll offset.\n * [BOOLEAN] If true the css margin of the element will be used, if false no margin will be used.\n * [NUMBER] The margin will be used for all edges.\n *\n * @param duration The duration of the scroll animation, OR a jQuery animation configuration object.\n * @param easing The animation easing.\n * @param complete The animation complete callback.\n * @returns {{\n * position: {x: number, y: number},\n * ratio: {x: number, y: number},\n * max: {x: number, y: number},\n * handleOffset: {x: number, y: number},\n * handleLength: {x: number, y: number},\n * handleLengthRatio: {x: number, y: number}, t\n * rackLength: {x: number, y: number},\n * isRTL: boolean,\n * isRTLNormalized: boolean\n * }}\n */\n _base.scroll = function (coordinates, duration, easing, complete) {\n if (arguments.length === 0 || coordinates === undefined) {\n var infoX = _scrollHorizontalInfo;\n var infoY = _scrollVerticalInfo;\n var normalizeInvert = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.i;\n var normalizeNegate = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.n;\n var scrollX = infoX._currentScroll;\n var scrollXRatio = infoX._currentScrollRatio;\n var maxScrollX = infoX._maxScroll;\n scrollXRatio = normalizeInvert ? 1 - scrollXRatio : scrollXRatio;\n scrollX = normalizeInvert ? maxScrollX - scrollX : scrollX;\n scrollX *= normalizeNegate ? -1 : 1;\n maxScrollX *= normalizeNegate ? -1 : 1;\n\n return {\n position : {\n x : scrollX,\n y : infoY._currentScroll\n },\n ratio : {\n x : scrollXRatio,\n y : infoY._currentScrollRatio\n },\n max : {\n x : maxScrollX,\n y : infoY._maxScroll\n },\n handleOffset : {\n x : infoX._handleOffset,\n y : infoY._handleOffset\n },\n handleLength : {\n x : infoX._handleLength,\n y : infoY._handleLength\n },\n handleLengthRatio : {\n x : infoX._handleLengthRatio,\n y : infoY._handleLengthRatio\n },\n trackLength : {\n x : infoX._trackLength,\n y : infoY._trackLength\n },\n snappedHandleOffset : {\n x : infoX._snappedHandleOffset,\n y : infoY._snappedHandleOffset\n },\n isRTL: _isRTL,\n isRTLNormalized: _normalizeRTLCache\n };\n }\n \n _base.update(_strSync);\n \n var normalizeRTL = _normalizeRTLCache;\n var coordinatesXAxisProps = [_strX, _strLeft, 'l'];\n var coordinatesYAxisProps = [_strY, _strTop, 't'];\n var coordinatesOperators = ['+=', '-=', '*=', '/='];\n var durationIsObject = type(duration) == TYPES.o;\n var completeCallback = durationIsObject ? duration.complete : complete;\n var i;\n var finalScroll = { };\n var specialEasing = {};\n var doScrollLeft;\n var doScrollTop;\n var animationOptions;\n var strEnd = 'end';\n var strBegin = 'begin';\n var strCenter = 'center';\n var strNearest = 'nearest';\n var strAlways = 'always';\n var strNever = 'never';\n var strIfNeeded = 'ifneeded';\n var strLength = LEXICON.l;\n var settingsAxis;\n var settingsScroll;\n var settingsBlock;\n var settingsMargin;\n var finalElement;\n var elementObjSettingsAxisValues = [_strX, _strY, 'xy', 'yx'];\n var elementObjSettingsBlockValues = [strBegin, strEnd, strCenter, strNearest];\n var elementObjSettingsScrollValues = [strAlways, strNever, strIfNeeded];\n var coordinatesIsElementObj = coordinates[LEXICON.hOP]('el');\n var possibleElement = coordinatesIsElementObj ? coordinates.el : coordinates;\n var possibleElementIsJQuery = possibleElement instanceof FRAMEWORK || JQUERY ? possibleElement instanceof JQUERY : false;\n var possibleElementIsHTMLElement = possibleElementIsJQuery ? false : isHTMLElement(possibleElement);\n var proxyCompleteCallback = type(completeCallback) != TYPES.f ? undefined : function() {\n if(doScrollLeft)\n refreshScrollbarHandleOffset(true);\n if(doScrollTop)\n refreshScrollbarHandleOffset(false);\n completeCallback();\n };\n function checkSettingsStringValue(currValue, allowedValues) {\n for (i = 0; i < allowedValues[strLength]; i++) {\n if (currValue === allowedValues[i])\n return true;\n }\n return false;\n }\n function getRawScroll(isX, coordinates) {\n var coordinateProps = isX ? coordinatesXAxisProps : coordinatesYAxisProps;\n coordinates = type(coordinates) == TYPES.s || type(coordinates) == TYPES.n ? [ coordinates, coordinates ] : coordinates;\n\n if (type(coordinates) == TYPES.a)\n return isX ? coordinates[0] : coordinates[1];\n else if (type(coordinates) == TYPES.o) {\n //decides RTL normalization \"hack\" with .n\n //normalizeRTL = type(coordinates.n) == TYPES.b ? coordinates.n : normalizeRTL; \n for (i = 0; i < coordinateProps[strLength]; i++)\n if (coordinateProps[i] in coordinates)\n return coordinates[coordinateProps[i]];\n }\n }\n function getFinalScroll(isX, rawScroll) {\n var isString = type(rawScroll) == TYPES.s;\n var operator;\n var amount;\n var scrollInfo = isX ? _scrollHorizontalInfo : _scrollVerticalInfo;\n var currScroll = scrollInfo._currentScroll;\n var maxScroll = scrollInfo._maxScroll;\n var mult = ' * ';\n var finalValue;\n var isRTLisX = _isRTL && isX;\n var normalizeShortcuts = isRTLisX && _rtlScrollBehavior.n && !normalizeRTL;\n var strReplace = 'replace';\n var evalFunc = eval;\n var possibleOperator;\n if (isString) {\n //check operator\n if (rawScroll[strLength] > 2) {\n possibleOperator = rawScroll.substr(0, 2);\n if(inArray(possibleOperator, coordinatesOperators) > -1)\n operator = possibleOperator;\n }\n\n //calculate units and shortcuts\n rawScroll = operator ? rawScroll.substr(2) : rawScroll;\n rawScroll = rawScroll\n [strReplace](/min/g, 0) //'min' = 0%\n [strReplace](//g, (normalizeShortcuts ? '-' : _strEmpty) + _strHundredPercent) //'>' = 100%\n [strReplace](/px/g, _strEmpty)\n [strReplace](/%/g, mult + (maxScroll * (isRTLisX && _rtlScrollBehavior.n ? -1 : 1) / 100.0))\n [strReplace](/vw/g, mult + _viewportSize.w)\n [strReplace](/vh/g, mult + _viewportSize.h);\n amount = parseToZeroOrNumber(isNaN(rawScroll) ? parseToZeroOrNumber(evalFunc(rawScroll), true).toFixed() : rawScroll);\n }\n else {\n amount = rawScroll;\n }\n\n if (amount !== undefined && !isNaN(amount) && type(amount) == TYPES.n) {\n var normalizeIsRTLisX = normalizeRTL && isRTLisX;\n var operatorCurrScroll = currScroll * (normalizeIsRTLisX && _rtlScrollBehavior.n ? -1 : 1);\n var invert = normalizeIsRTLisX && _rtlScrollBehavior.i;\n var negate = normalizeIsRTLisX && _rtlScrollBehavior.n;\n operatorCurrScroll = invert ? (maxScroll - operatorCurrScroll) : operatorCurrScroll;\n switch (operator) {\n case '+=':\n finalValue = operatorCurrScroll + amount;\n break;\n case '-=':\n finalValue = operatorCurrScroll - amount;\n break;\n case '*=':\n finalValue = operatorCurrScroll * amount;\n break;\n case '/=':\n finalValue = operatorCurrScroll / amount;\n break;\n default:\n finalValue = amount;\n break;\n }\n finalValue = invert ? maxScroll - finalValue : finalValue;\n finalValue *= negate ? -1 : 1;\n finalValue = isRTLisX && _rtlScrollBehavior.n ? MATH.min(0, MATH.max(maxScroll, finalValue)) : MATH.max(0, MATH.min(maxScroll, finalValue));\n }\n return finalValue === currScroll ? undefined : finalValue;\n }\n function getPerAxisValue(value, valueInternalType, defaultValue, allowedValues) {\n var resultDefault = [ defaultValue, defaultValue ];\n var valueType = type(value);\n var valueArrLength;\n var valueArrItem;\n\n //value can be [ string, or array of two strings ]\n if (valueType == valueInternalType) {\n value = [value, value];\n }\n else if (valueType == TYPES.a) {\n valueArrLength = value[strLength];\n if (valueArrLength > 2 || valueArrLength < 1)\n value = resultDefault;\n else {\n if (valueArrLength === 1)\n value[1] = defaultValue;\n for (i = 0; i < valueArrLength; i++) {\n valueArrItem = value[i];\n if (type(valueArrItem) != valueInternalType || !checkSettingsStringValue(valueArrItem, allowedValues)) {\n value = resultDefault;\n break;\n }\n }\n }\n }\n else if (valueType == TYPES.o)\n value = [ value[_strX]|| defaultValue, value[_strY] || defaultValue];\n else\n value = resultDefault;\n return { x : value[0], y : value[1] };\n }\n function generateMargin(marginTopRightBottomLeftArray) {\n var result = [ ];\n var currValue;\n var currValueType;\n var valueDirections = [ _strTop, _strRight, _strBottom, _strLeft ];\n for(i = 0; i < marginTopRightBottomLeftArray[strLength]; i++) {\n if(i === valueDirections[strLength])\n break;\n currValue = marginTopRightBottomLeftArray[i];\n currValueType = type(currValue);\n if(currValueType == TYPES.b)\n result.push(currValue ? parseToZeroOrNumber(finalElement.css(_strMarginMinus + valueDirections[i])) : 0);\n else\n result.push(currValueType == TYPES.n ? currValue : 0);\n }\n return result;\n }\n\n if (possibleElementIsJQuery || possibleElementIsHTMLElement) {\n //get settings\n var margin = coordinatesIsElementObj ? coordinates.margin : 0;\n var axis = coordinatesIsElementObj ? coordinates.axis : 0;\n var scroll = coordinatesIsElementObj ? coordinates.scroll : 0;\n var block = coordinatesIsElementObj ? coordinates.block : 0;\n var marginDefault = [ 0, 0, 0, 0 ];\n var marginType = type(margin);\n var marginLength;\n finalElement = possibleElementIsJQuery ? possibleElement : FRAMEWORK(possibleElement);\n \n if (finalElement[strLength] > 0) {\n //margin can be [ boolean, number, array of 2, array of 4, object ]\n if (marginType == TYPES.n || marginType == TYPES.b)\n margin = generateMargin([margin, margin, margin, margin]);\n else if (marginType == TYPES.a) {\n marginLength = margin[strLength];\n if(marginLength === 2)\n margin = generateMargin([margin[0], margin[1], margin[0], margin[1]]);\n else if(marginLength >= 4)\n margin = generateMargin(margin);\n else\n margin = marginDefault;\n }\n else if (marginType == TYPES.o)\n margin = generateMargin([margin[_strTop], margin[_strRight], margin[_strBottom], margin[_strLeft]]);\n else\n margin = marginDefault;\n\n //block = type(block) === TYPES.b ? block ? [ strNearest, strBegin ] : [ strNearest, strEnd ] : block;\n settingsAxis = checkSettingsStringValue(axis, elementObjSettingsAxisValues) ? axis : 'xy';\n settingsScroll = getPerAxisValue(scroll, TYPES.s, strAlways, elementObjSettingsScrollValues);\n settingsBlock = getPerAxisValue(block, TYPES.s, strBegin, elementObjSettingsBlockValues);\n settingsMargin = margin;\n\n var viewportScroll = {\n l: _scrollHorizontalInfo._currentScroll,\n t: _scrollVerticalInfo._currentScroll\n };\n // use padding element instead of viewport element because padding element has never padding, margin or position applied.\n var viewportOffset = _paddingElement.offset();\n\n //get coordinates\n var elementOffset = finalElement.offset();\n var doNotScroll = {\n x : settingsScroll.x == strNever || settingsAxis == _strY,\n y : settingsScroll.y == strNever || settingsAxis == _strX\n };\n elementOffset[_strTop] -= settingsMargin[0];\n elementOffset[_strLeft] -= settingsMargin[3];\n var elementScrollCoordinates = {\n x: MATH.round(elementOffset[_strLeft] - viewportOffset[_strLeft] + viewportScroll.l),\n y: MATH.round(elementOffset[_strTop] - viewportOffset[_strTop] + viewportScroll.t)\n };\n if (_isRTL) {\n if (!_rtlScrollBehavior.n && !_rtlScrollBehavior.i)\n elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + viewportScroll.l);\n if (_rtlScrollBehavior.n && normalizeRTL)\n elementScrollCoordinates.x *= -1;\n if (_rtlScrollBehavior.i && normalizeRTL)\n elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + (_scrollHorizontalInfo._maxScroll - viewportScroll.l));\n }\n\n //measuring is required\n if (settingsBlock.x != strBegin || settingsBlock.y != strBegin || settingsScroll.x == strIfNeeded || settingsScroll.y == strIfNeeded || _isRTL) {\n var measuringElm = finalElement[0];\n var rawElementSize = _supportTransform ? measuringElm[LEXICON.bCR]() : {\n width : measuringElm[LEXICON.oW],\n height : measuringElm[LEXICON.oH]\n };\n var elementSize = {\n w: rawElementSize[_strWidth] + settingsMargin[3] + settingsMargin[1],\n h: rawElementSize[_strHeight] + settingsMargin[0] + settingsMargin[2]\n };\n var finalizeBlock = function(isX) {\n var vars = getScrollbarVars(isX);\n var wh = vars._w_h;\n var lt = vars._left_top;\n var xy = vars._x_y;\n var blockIsEnd = settingsBlock[xy] == (isX ? _isRTL ? strBegin : strEnd : strEnd);\n var blockIsCenter = settingsBlock[xy] == strCenter;\n var blockIsNearest = settingsBlock[xy] == strNearest;\n var scrollNever = settingsScroll[xy] == strNever;\n var scrollIfNeeded = settingsScroll[xy] == strIfNeeded;\n var vpSize = _viewportSize[wh];\n var vpOffset = viewportOffset[lt];\n var elSize = elementSize[wh];\n var elOffset = elementOffset[lt];\n var divide = blockIsCenter ? 2 : 1;\n var elementCenterOffset = elOffset + (elSize / 2);\n var viewportCenterOffset = vpOffset + (vpSize / 2);\n var isInView =\n elSize <= vpSize\n && elOffset >= vpOffset\n && elOffset + elSize <= vpOffset + vpSize;\n\n if(scrollNever)\n doNotScroll[xy] = true;\n else if(!doNotScroll[xy]) {\n if (blockIsNearest || scrollIfNeeded) {\n doNotScroll[xy] = scrollIfNeeded ? isInView : false;\n blockIsEnd = elSize < vpSize ? elementCenterOffset > viewportCenterOffset : elementCenterOffset < viewportCenterOffset;\n }\n elementScrollCoordinates[xy] -= blockIsEnd || blockIsCenter ? ((vpSize / divide) - (elSize / divide)) * (isX && _isRTL && normalizeRTL ? -1 : 1) : 0;\n }\n };\n finalizeBlock(true);\n finalizeBlock(false);\n }\n\n if (doNotScroll.y)\n delete elementScrollCoordinates.y;\n if (doNotScroll.x)\n delete elementScrollCoordinates.x;\n\n coordinates = elementScrollCoordinates;\n }\n }\n\n finalScroll[_strScrollLeft] = getFinalScroll(true, getRawScroll(true, coordinates));\n finalScroll[_strScrollTop] = getFinalScroll(false, getRawScroll(false, coordinates));\n doScrollLeft = finalScroll[_strScrollLeft] !== undefined;\n doScrollTop = finalScroll[_strScrollTop] !== undefined;\n\n if ((doScrollLeft || doScrollTop) && (duration > 0 || durationIsObject)) {\n if (durationIsObject) {\n duration.complete = proxyCompleteCallback;\n _viewportElement.animate(finalScroll, duration);\n }\n else {\n animationOptions = {\n duration: duration,\n complete: proxyCompleteCallback\n };\n if (type(easing) == TYPES.a || FRAMEWORK.isPlainObject(easing)) {\n specialEasing[_strScrollLeft] = easing[0] || easing.x;\n specialEasing[_strScrollTop] = easing[1] || easing.y;\n animationOptions.specialEasing = specialEasing;\n }\n else {\n animationOptions.easing = easing;\n }\n _viewportElement.animate(finalScroll, animationOptions);\n }\n }\n else {\n if (doScrollLeft)\n _viewportElement[_strScrollLeft](finalScroll[_strScrollLeft]);\n if (doScrollTop)\n _viewportElement[_strScrollTop](finalScroll[_strScrollTop]);\n }\n };\n\n /**\n * Stops all scroll animations.\n * @returns {*} The current OverlayScrollbars instance (for chaining).\n */\n _base.scrollStop = function (param1, param2, param3) {\n _viewportElement.stop(param1, param2, param3);\n return _base;\n };\n\n /**\n * Returns all relevant elements.\n * @param elementName The name of the element which shall be returned.\n * @returns {{target: *, host: *, padding: *, viewport: *, content: *, scrollbarHorizontal: {scrollbar: *, track: *, handle: *}, scrollbarVertical: {scrollbar: *, track: *, handle: *}, scrollbarCorner: *} | *}\n */\n _base.getElements = function (elementName) {\n var obj = {\n target: _targetElementNative,\n host: _hostElementNative,\n padding: _paddingElementNative,\n viewport: _viewportElementNative,\n content: _contentElementNative,\n scrollbarHorizontal: {\n scrollbar: _scrollbarHorizontalElement[0],\n track: _scrollbarHorizontalTrackElement[0],\n handle: _scrollbarHorizontalHandleElement[0]\n },\n scrollbarVertical: {\n scrollbar: _scrollbarVerticalElement[0],\n track: _scrollbarVerticalTrackElement[0],\n handle: _scrollbarVerticalHandleElement[0]\n },\n scrollbarCorner: _scrollbarCornerElement[0]\n };\n return type(elementName) == TYPES.s ? getObjectPropVal(obj, elementName) : obj;\n };\n\n /**\n * Returns a object which describes the current state of this instance.\n * @param stateProperty A specific property from the state object which shall be returned.\n * @returns {{widthAuto, heightAuto, overflowAmount, hideOverflow, hasOverflow, contentScrollSize, viewportSize, hostSize, autoUpdate} | *}\n */\n _base.getState = function (stateProperty) {\n function prepare(obj) {\n if (!FRAMEWORK.isPlainObject(obj))\n return obj;\n var extended = extendDeep({}, obj);\n var changePropertyName = function (from, to) {\n if (extended[LEXICON.hOP](from)) {\n extended[to] = extended[from];\n delete extended[from];\n }\n };\n changePropertyName('w', _strWidth); //change w to width\n changePropertyName('h', _strHeight); //change h to height\n delete extended.c; //delete c (the 'changed' prop)\n return extended;\n };\n var obj = {\n destroyed: !!prepare(_destroyed),\n sleeping: !!prepare(_sleeping),\n autoUpdate: prepare(!_mutationObserversConnected),\n widthAuto: prepare(_widthAutoCache),\n heightAuto: prepare(_heightAutoCache),\n padding: prepare(_cssPaddingCache),\n overflowAmount: prepare(_overflowAmountCache),\n hideOverflow: prepare(_hideOverflowCache),\n hasOverflow: prepare(_hasOverflowCache),\n contentScrollSize: prepare(_contentScrollSizeCache),\n viewportSize: prepare(_viewportSize),\n hostSize: prepare(_hostSizeCache),\n documentMixed : prepare(_documentMixed)\n };\n return type(stateProperty) == TYPES.s ? getObjectPropVal(obj, stateProperty) : obj;\n };\n\n /**\n * Gets all or specific extension instance.\n * @param extName The name of the extension from which the instance shall be got.\n * @returns {{}} The instance of the extension with the given name or undefined if the instance couldn't be found.\n */\n _base.ext = function(extName) {\n var result;\n var privateMethods = _extensionsPrivateMethods.split(' ');\n var i = 0;\n if(type(extName) == TYPES.s) {\n if(_extensions[LEXICON.hOP](extName)) {\n result = extendDeep({}, _extensions[extName]);\n for (; i < privateMethods.length; i++)\n delete result[privateMethods[i]];\n }\n }\n else {\n result = { };\n for(i in _extensions)\n result[i] = extendDeep({ }, _base.ext(i));\n }\n return result;\n };\n\n /**\n * Adds a extension to this instance.\n * @param extName The name of the extension which shall be added.\n * @param extensionOptions The extension options which shall be used.\n * @returns {{}} The instance of the added extension or undefined if the extension couldn't be added properly.\n */\n _base.addExt = function(extName, extensionOptions) {\n var registeredExtensionObj = _plugin.extension(extName);\n var instance;\n var instanceAdded;\n var instanceContract;\n var contractResult;\n var contractFulfilled = true;\n if(registeredExtensionObj) {\n if(!_extensions[LEXICON.hOP](extName)) {\n instance = registeredExtensionObj.extensionFactory.call(_base,\n extendDeep({ }, registeredExtensionObj.defaultOptions),\n FRAMEWORK,\n COMPATIBILITY);\n\n if (instance) {\n instanceContract = instance.contract;\n if (type(instanceContract) == TYPES.f) {\n contractResult = instanceContract(window);\n contractFulfilled = type(contractResult) == TYPES.b ? contractResult : contractFulfilled;\n }\n if(contractFulfilled) {\n _extensions[extName] = instance;\n instanceAdded = instance.added;\n if(type(instanceAdded) == TYPES.f)\n instanceAdded(extensionOptions);\n\n return _base.ext(extName);\n }\n }\n }\n else\n return _base.ext(extName);\n }\n else\n console.warn(\"A extension with the name \\\"\" + extName + \"\\\" isn't registered.\");\n };\n\n /**\n * Removes a extension from this instance.\n * @param extName The name of the extension which shall be removed.\n * @returns {boolean} True if the extension was removed, false otherwise e.g. if the extension wasn't added before.\n */\n _base.removeExt = function(extName) {\n var instance = _extensions[extName];\n var instanceRemoved;\n if(instance) {\n delete _extensions[extName];\n\n instanceRemoved = instance.removed;\n if(type(instanceRemoved) == TYPES.f)\n instanceRemoved();\n\n return true;\n }\n return false;\n };\n\n /**\n * Constructs the plugin.\n * @param targetElement The element to which the plugin shall be applied.\n * @param options The initial options of the plugin.\n * @param extensions The extension(s) which shall be added right after the initialization.\n * @returns {boolean} True if the plugin was successfully initialized, false otherwise.\n */\n function construct(targetElement, options, extensions) {\n _defaultOptions = globals.defaultOptions;\n _nativeScrollbarStyling = globals.nativeScrollbarStyling;\n _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);\n _nativeScrollbarIsOverlaid = extendDeep({}, globals.nativeScrollbarIsOverlaid);\n _overlayScrollbarDummySize = extendDeep({}, globals.overlayScrollbarDummySize);\n _rtlScrollBehavior = extendDeep({}, globals.rtlScrollBehavior);\n\n //parse & set options but don't update\n setOptions(extendDeep({ }, _defaultOptions, options));\n\n _cssCalc = globals.cssCalc;\n _msieVersion = globals.msie;\n _autoUpdateRecommended = globals.autoUpdateRecommended;\n _supportTransition = globals.supportTransition;\n _supportTransform = globals.supportTransform;\n _supportPassiveEvents = globals.supportPassiveEvents;\n _supportResizeObserver = globals.supportResizeObserver;\n _supportMutationObserver = globals.supportMutationObserver;\n _restrictedMeasuring = globals.restrictedMeasuring;\n _documentElement = FRAMEWORK(targetElement.ownerDocument);\n _documentElementNative = _documentElement[0];\n _windowElement = FRAMEWORK(_documentElementNative.defaultView || _documentElementNative.parentWindow);\n _windowElementNative = _windowElement[0];\n _htmlElement = findFirst(_documentElement, 'html');\n _bodyElement = findFirst(_htmlElement, 'body');\n _targetElement = FRAMEWORK(targetElement);\n _targetElementNative = _targetElement[0];\n _isTextarea = _targetElement.is('textarea');\n _isBody = _targetElement.is('body');\n _documentMixed = _documentElementNative !== document;\n\n /* On a div Element The if checks only whether:\n * - the targetElement has the class \"os-host\"\n * - the targetElement has a a child with the class \"os-padding\"\n * \n * If that's the case, its assumed the DOM has already the following structure:\n * (The \".os-host\" element is the targetElement)\n *\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *\n * =====================================================================================\n * \n * On a Textarea Element The if checks only whether:\n * - the targetElement has the class \"os-textarea\" \n * - the targetElement is inside a element with the class \"os-content\" \n * \n * If that's the case, its assumed the DOM has already the following structure:\n * (The \".os-textarea\" (textarea) element is the targetElement)\n *\n *
\n *
\n *
\n *
\n *
\n *
\n * \n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n *
\n */\n _domExists = _isTextarea \n ? _targetElement.hasClass(_classNameTextareaElement) && _targetElement.parent().hasClass(_classNameContentElement)\n : _targetElement.hasClass(_classNameHostElement) && _targetElement.children(_strDot + _classNamePaddingElement)[LEXICON.l];\n\n var initBodyScroll;\n var bodyMouseTouchDownListener;\n\n //check if the plugin hasn't to be initialized\n if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y && !_currentPreparedOptions.nativeScrollbarsOverlaid.initialize) {\n dispatchCallback('onInitializationWithdrawn');\n if(_domExists) {\n setupStructureDOM(true);\n setupScrollbarsDOM(true);\n setupScrollbarCornerDOM(true);\n }\n \n _destroyed = true;\n _sleeping = true;\n \n return _base;\n }\n\n if (_isBody) {\n initBodyScroll = {};\n initBodyScroll.l = MATH.max(_targetElement[_strScrollLeft](), _htmlElement[_strScrollLeft](), _windowElement[_strScrollLeft]());\n initBodyScroll.t = MATH.max(_targetElement[_strScrollTop](), _htmlElement[_strScrollTop](), _windowElement[_strScrollTop]());\n \n bodyMouseTouchDownListener = function() {\n _viewportElement.removeAttr('tabindex');\n setupResponsiveEventListener(_viewportElement, _strMouseTouchDownEvent, bodyMouseTouchDownListener, true, true);\n }\n }\n\n //build OverlayScrollbars DOM\n setupStructureDOM();\n setupScrollbarsDOM();\n setupScrollbarCornerDOM();\n \n //create OverlayScrollbars events\n setupStructureEvents();\n setupScrollbarEvents(true);\n setupScrollbarEvents(false);\n setupScrollbarCornerEvents();\n\n //create mutation observers\n createMutationObservers();\n\n //build resize observer for the host element\n setupResizeObserver(_sizeObserverElement, hostOnResized);\n\n if(_isBody) {\n //apply the body scroll to handle it right in the update method\n _viewportElement[_strScrollLeft](initBodyScroll.l)[_strScrollTop](initBodyScroll.t);\n\n //set the focus on the viewport element so you dont have to click on the page to use keyboard keys (up / down / space) for scrolling\n if(document.activeElement == targetElement && _viewportElementNative.focus) {\n //set a tabindex to make the viewportElement focusable\n _viewportElement.attr('tabindex', '-1');\n _viewportElementNative.focus();\n \n /* the tabindex has to be removed due to;\n * If you set the tabindex attribute on an
, then its child content cannot be scrolled with the arrow keys unless you set tabindex on the content, too\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\n */\n setupResponsiveEventListener(_viewportElement, _strMouseTouchDownEvent, bodyMouseTouchDownListener, false, true);\n }\n }\n\n //update for the first time & initialize cache\n _base.update(_strAuto);\n\n //the plugin is initialized now!\n _initialized = true;\n dispatchCallback('onInitialized');\n\n //call all callbacks which would fire before the initialized was complete\n each(_callbacksInitQeueue, function(index, value) { dispatchCallback(value.n, value.a); });\n _callbacksInitQeueue = [ ];\n\n //add extensions\n if(type(extensions) == TYPES.s)\n extensions = [ extensions ];\n if(COMPATIBILITY.isA(extensions))\n each(extensions, function (index, value) {_base.addExt(value); });\n else if(FRAMEWORK.isPlainObject(extensions))\n each(extensions, function (key, value) { _base.addExt(key, value); });\n\n //add the transition class for transitions AFTER the first update & AFTER the applied extensions (for preventing unwanted transitions)\n setTimeout(function () {\n if (_supportTransition && !_destroyed)\n addClass(_hostElement, _classNameHostTransition);\n }, 333);\n\n return _base;\n }\n\n if(_plugin.valid(construct(pluginTargetElement, options, extensions))) {\n INSTANCES(pluginTargetElement, _base);\n }\n \n return _base;\n }\n\n /**\n * Initializes a new OverlayScrollbarsInstance object or changes options if already initialized or returns the current instance.\n * @param pluginTargetElements The elements to which the Plugin shall be initialized.\n * @param options The custom options with which the plugin shall be initialized.\n * @param extensions The extension(s) which shall be added right after initialization.\n * @returns {*}\n */\n _plugin = window[PLUGINNAME] = function(pluginTargetElements, options, extensions) {\n if(arguments[LEXICON.l] === 0)\n return this;\n\n var arr = [ ];\n var optsIsPlainObj = FRAMEWORK.isPlainObject(options);\n var inst;\n var result;\n\n //pluginTargetElements is null or undefined\n if(!pluginTargetElements)\n return optsIsPlainObj || !options ? result : arr;\n\n /*\n pluginTargetElements will be converted to:\n 1. A jQueryElement Array\n 2. A HTMLElement Array\n 3. A Array with a single HTML Element\n so pluginTargetElements is always a array.\n */\n pluginTargetElements = pluginTargetElements[LEXICON.l] != undefined ? pluginTargetElements : [ pluginTargetElements[0] || pluginTargetElements ];\n initOverlayScrollbarsStatics();\n\n if(pluginTargetElements[LEXICON.l] > 0) {\n if(optsIsPlainObj) {\n FRAMEWORK.each(pluginTargetElements, function (i, v) {\n inst = v;\n if(inst !== undefined)\n arr.push(OverlayScrollbarsInstance(inst, options, extensions, _pluginsGlobals, _pluginsAutoUpdateLoop));\n });\n }\n else {\n FRAMEWORK.each(pluginTargetElements, function(i, v) {\n inst = INSTANCES(v);\n if((options === '!' && _plugin.valid(inst)) || (COMPATIBILITY.type(options) == TYPES.f && options(v, inst)))\n arr.push(inst);\n else if(options === undefined)\n arr.push(inst);\n });\n }\n result = arr[LEXICON.l] === 1 ? arr[0] : arr;\n }\n return result;\n };\n\n /**\n * Returns a object which contains global information about the plugin and each instance of it.\n * The returned object is just a copy, that means that changes to the returned object won't have any effect to the original object.\n */\n _plugin.globals = function () {\n initOverlayScrollbarsStatics();\n var globals = FRAMEWORK.extend(true, { }, _pluginsGlobals);\n delete globals['msie'];\n return globals;\n };\n\n /**\n * Gets or Sets the default options for each new plugin initialization.\n * @param newDefaultOptions The object with which the default options shall be extended.\n */\n _plugin.defaultOptions = function(newDefaultOptions) {\n initOverlayScrollbarsStatics();\n var currDefaultOptions = _pluginsGlobals.defaultOptions;\n if(newDefaultOptions === undefined)\n return FRAMEWORK.extend(true, { }, currDefaultOptions);\n\n //set the new default options\n _pluginsGlobals.defaultOptions = FRAMEWORK.extend(true, { }, currDefaultOptions , _pluginsOptions._validate(newDefaultOptions, _pluginsOptions._template, true, currDefaultOptions)._default);\n };\n\n /**\n * Checks whether the passed instance is a non-destroyed OverlayScrollbars instance.\n * @param osInstance The potential OverlayScrollbars instance which shall be checked.\n * @returns {boolean} True if the passed value is a non-destroyed OverlayScrollbars instance, false otherwise.\n */\n _plugin.valid = function (osInstance) {\n return osInstance instanceof _plugin && !osInstance.getState().destroyed;\n };\n\n /**\n * Registers, Unregisters or returns a extension.\n * Register: Pass the name and the extension. (defaultOptions is optional)\n * Unregister: Pass the name and anything except a function as extension parameter.\n * Get extension: Pass the name of the extension which shall be got.\n * Get all extensions: Pass no arguments.\n * @param extensionName The name of the extension which shall be registered, unregistered or returned.\n * @param extension A function which generates the instance of the extension or anything other to remove a already registered extension.\n * @param defaultOptions The default options which shall be used for the registered extension.\n */\n _plugin.extension = function(extensionName, extension, defaultOptions) {\n var extNameTypeString = COMPATIBILITY.type(extensionName) == TYPES.s;\n var argLen = arguments[LEXICON.l];\n var i = 0;\n if(argLen < 1 || !extNameTypeString) {\n //return a copy of all extension objects\n return FRAMEWORK.extend(true, { length : _pluginsExtensions[LEXICON.l] }, _pluginsExtensions);\n }\n else if(extNameTypeString) {\n if(COMPATIBILITY.type(extension) == TYPES.f) {\n //register extension\n _pluginsExtensions.push({\n name : extensionName,\n extensionFactory : extension,\n defaultOptions : defaultOptions\n });\n }\n else {\n for(; i < _pluginsExtensions[LEXICON.l]; i++) {\n if (_pluginsExtensions[i].name === extensionName) {\n if(argLen > 1)\n _pluginsExtensions.splice(i, 1); //remove extension\n else\n return FRAMEWORK.extend(true, { }, _pluginsExtensions[i]); //return extension with the given name\n }\n }\n }\n }\n };\n\n return _plugin;\n })();\n\n if(JQUERY && JQUERY.fn) {\n /**\n * The jQuery initialization interface.\n * @param options The initial options for the construction of the plugin. To initialize the plugin, this option has to be a object! If it isn't a object, the instance(s) are returned and the plugin wont be initialized.\n * @param extensions The extension(s) which shall be added right after initialization.\n * @returns {*} After initialization it returns the jQuery element array, else it returns the instance(s) of the elements which are selected.\n */\n JQUERY.fn.overlayScrollbars = function (options, extensions) {\n var _elements = this;\n if(JQUERY.isPlainObject(options)) {\n JQUERY.each(_elements, function() { PLUGIN(this, options, extensions); });\n return _elements;\n }\n else\n return PLUGIN(_elements, options);\n };\n }\n return PLUGIN;\n }\n));\n\n\n//////////////////\n// WEBPACK FOOTER\n// D:/www/mollers/wp-content/themes/mollers/node_modules/overlayscrollbars/js/OverlayScrollbars.js\n// module id = 27\n// module chunks = 2","require('jquery-watch');\r\n\r\nexport const helper = {\r\n setBackdropBg(el) {\r\n $('.js-fp-backdrop').css('background-image', `url(${$(el).data('bg')})`);\r\n },\r\n setLongBackdropBg(el) {\r\n $('.js-fp-backdrop .js-long-left-image-video').css('background-image', `url(${$(el).data('bg')})`);\r\n },\r\n videoController(action, videoEl) {\r\n let videoBg = document.getElementById(videoEl.attr('id'));\r\n\r\n if(!videoBg) return;\r\n\r\n switch (action) {\r\n case 'play':\r\n $(videoEl).removeClass('d-none');\r\n videoBg.play();\r\n break;\r\n\r\n case 'stop':\r\n $(videoEl).addClass('d-none');\r\n videoBg.currentTime = 0;\r\n videoBg.pause();\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n },\r\n appendFooter() {\r\n $('.js-append-footer').append($('footer'));\r\n\r\n // if ($(window).innerWidth() >= 979.89) {\r\n // $('.js-fp-wrapper').find('footer').addClass('section fp-auto-height');\r\n // } else {\r\n // $('.js-fp-wrapper').find('footer').removeClass('section fp-auto-height');\r\n // }\r\n\r\n helper.observer();\r\n },\r\n removeClasser() {\r\n $('.js-remove-class-section > section').removeClass(\"section\");\r\n },\r\n appendBottle() {\r\n if ($(window).innerWidth() <= 1024 || $('#sustainability').hasClass('is-mobile')) {\r\n // if($('#sustainability').hasClass('is-mobile')) {\r\n\r\n // }\r\n\r\n let eleBttle = document.getElementById('js-bottles').cloneNode(true);\r\n if(!eleBttle) return;\r\n\r\n document.getElementsByClassName('js-mobile-append')[0].insertBefore(eleBttle, document.getElementsByClassName('js-mobile-append')[0].childNodes[0]);\r\n }\r\n },\r\n hasScrollable() {\r\n if ($(window).innerWidth() <= 1024 || $('#sustainability').hasClass('is-mobile')) {\r\n // console.log();\r\n if(document.getElementsByClassName('js-append-footer')[0].querySelectorAll('.fp-scrollable').length <= 0) {\r\n document.getElementById('js-static-image').style.display = \"none\";\r\n document.getElementsByClassName('js-append-footer')[0].classList.add('without-scrollable');\r\n }\r\n }\r\n },\r\n observer(e) {\r\n // console.log(e);\r\n let currSlide;\r\n if(typeof e != 'undefined') {\r\n currSlide = e;\r\n }\r\n setTimeout(() => {\r\n $('.js-append-footer .fp-scroller').watch({\r\n // specify CSS styles or attribute names to monitor\r\n properties: \"transform\",\r\n\r\n // callback function when a change is detected\r\n callback: function (data, i) {\r\n let self, styleString;\r\n self = $(this);\r\n styleString = self.attr('style');\r\n\r\n if (styleString.includes('translate(0px, 0px)')) {\r\n // fullpage_api.moveSectionUp();\r\n window.requestAnimationFrame(function () { fullpage_api.moveTo(currSlide) });\r\n }\r\n }\r\n });\r\n }, 500);\r\n },\r\n scrollIconCtrl(origin, destination, direction) {\r\n destination.index <= 1 ? $('.js-btn-scroll').removeClass('fade') : $('.js-btn-scroll').addClass('fade');\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/featured/lib/helper.js","/// \r\n/*\r\njquery-watcher \r\nVersion 1.21 - 1/19/2016\r\n© 2014-2016 Rick Strahl, West Wind Technologies \r\nwww.west-wind.com\r\nLicensed under MIT License\r\nhttp://en.wikipedia.org/wiki/MIT_License\r\n*/\r\n(function($, undefined) {\r\n $.fn.watch = function(options) {\r\n /// \r\n /// Allows you to monitor changes in a specific\r\n /// CSS property of an element by polling the value.\r\n /// You can also monitor attributes (using attr_ prefix)\r\n /// or property changes (using prop_ prefix).\r\n /// when the value changes a function is called.\r\n /// The callback is fired in the context\r\n /// of the selected element (ie. this)\r\n ///\r\n /// Uses the MutationObserver API of the DOM and\r\n /// falls back to setInterval to poll for changes\r\n /// for non-compliant browsers (pre IE 11)\r\n /// \r\n /// \r\n /// Option to set - see comments in code below.\r\n /// \r\n /// \r\n var opt = $.extend({\r\n // CSS styles or Attributes to monitor as comma delimited list\r\n // For attributes use a attr_ prefix\r\n // Example: \"top,left,opacity,attr_class\"\r\n properties: null,\r\n\r\n // interval for 'manual polling' (IE 10 and older) \r\n interval: 100,\r\n\r\n // a unique id for this watcher instance\r\n id: \"_watcher_\" + new Date().getTime(),\r\n\r\n // flag to determine whether child elements are watched \r\n watchChildren: false,\r\n\r\n // Callback function if not passed in callback parameter \r\n callback: null\r\n }, options);\r\n\r\n return this.each(function() {\r\n var el = this;\r\n var el$ = $(this);\r\n var fnc = function(mRec, mObs) {\r\n __watcher.call(el, opt.id, mRec, mObs);\r\n };\r\n\r\n var data = {\r\n id: opt.id,\r\n props: opt.properties.split(','),\r\n vals: [opt.properties.split(',').length],\r\n func: opt.callback, // user function\r\n fnc: fnc, // __watcher internal\r\n origProps: opt.properties,\r\n interval: opt.interval,\r\n intervalId: null\r\n };\r\n // store initial props and values\r\n $.each(data.props, function(i) {\r\n var propName = data.props[i];\r\n if (data.props[i].startsWith('attr_'))\r\n data.vals[i] = el$.attr(propName.replace('attr_', ''));\r\n else if (propName.startsWith('prop_'))\r\n data.vals[i] = el$.prop(propName.replace('props_', ''));\r\n else\r\n data.vals[i] = el$.css(propName);\r\n });\r\n\r\n el$.data(opt.id, data);\r\n\r\n hookChange(el$, opt.id, data);\r\n });\r\n\r\n function hookChange(element$, id, data) {\r\n element$.each(function() {\r\n var el$ = $(this);\r\n\r\n if (window.MutationObserver) {\r\n var observer = el$.data('__watcherObserver' + opt.id);\r\n if (observer == null) {\r\n observer = new MutationObserver(data.fnc);\r\n el$.data('__watcherObserver' + opt.id, observer);\r\n }\r\n observer.observe(this, {\r\n attributes: true,\r\n subtree: opt.watchChildren,\r\n childList: opt.watchChildren,\r\n characterData: true\r\n });\r\n } else\r\n data.intervalId = setInterval(data.fnc, opt.interval);\r\n });\r\n }\r\n\r\n function __watcher(id, mRec, mObs) {\r\n var el$ = $(this);\r\n var w = el$.data(id);\r\n if (!w) return;\r\n var el = this;\r\n\r\n if (!w.func)\r\n return;\r\n\r\n var changed = false;\r\n var i = 0;\r\n for (i; i < w.props.length; i++) {\r\n var key = w.props[i];\r\n\r\n var newVal = \"\";\r\n if (key.startsWith('attr_'))\r\n newVal = el$.attr(key.replace('attr_', ''));\r\n else if (key.startsWith('prop_'))\r\n newVal = el$.prop(key.replace('prop_', ''));\r\n else\r\n newVal = el$.css(key);\r\n\r\n if (newVal == undefined)\r\n continue;\r\n\r\n if (w.vals[i] != newVal) {\r\n w.vals[i] = newVal;\r\n changed = true;\r\n break;\r\n }\r\n }\r\n if (changed) {\r\n // unbind to avoid recursive events\r\n el$.unwatch(id);\r\n\r\n // call the user handler\r\n w.func.call(el, w, i, mRec, mObs);\r\n\r\n // rebind the events\r\n hookChange(el$, id, w);\r\n }\r\n }\r\n }\r\n $.fn.unwatch = function(id) {\r\n this.each(function() {\r\n var el = $(this);\r\n var data = el.data(id);\r\n try {\r\n if (window.MutationObserver) {\r\n var observer = el.data(\"__watcherObserver\" + id);\r\n if (observer) {\r\n observer.disconnect();\r\n el.removeData(\"__watcherObserver\" + id);\r\n }\r\n } else\r\n clearInterval(data.intervalId);\r\n }\r\n // ignore if element was already unbound\r\n catch (e) {\r\n }\r\n });\r\n return this;\r\n }\r\n String.prototype.startsWith = function(sub) {\r\n if (sub === null || sub === undefined) return false;\r\n return sub == this.substr(0, sub.length);\r\n }\r\n }\r\n)(jQuery, undefined);\n\n\n//////////////////\n// WEBPACK FOOTER\n// D:/www/mollers/wp-content/themes/mollers/node_modules/jquery-watch/jquery-watch.js\n// module id = 7\n// module chunks = 1 2 3","/*!\n * fullPage 3.0.7 - Extensions 0.1.8\n * https://github.com/alvarotrigo/fullPage.js\n * @license http://alvarotrigo.com/fullPage/extensions/#license\n *\n * Copyright (C) 2018 alvarotrigo.com - A project by Alvaro Trigo\n */\n!function(e,t,n,o,r){\"function\"==typeof define&&define.amd?define(function(){return e.fullpage=o(t,n),e.fullpage}):\"object\"==typeof exports?module.exports=o(t,n):t.fullpage=o(t,n)}(this,window,document,function(on,rn){\"use strict\";var ln=\"fullpage-wrapper\",an=\".\"+ln,sn=\"fp-responsive\",cn=\"fp-notransition\",un=\"fp-destroyed\",fn=\"fp-enabled\",dn=\"fp-viewing\",vn=\"active\",pn=\".\"+vn,hn=\"fp-completely\",gn=\"fp-section\",mn=\".\"+gn,Sn=mn+pn,bn=\"fp-tableCell\",wn=\".\"+bn,yn=\"fp-auto-height\",En=\"fp-normal-scroll\",xn=\"fp-nav\",An=\"#\"+xn,Ln=\"fp-tooltip\",Mn=\"fp-slide\",Tn=\".\"+Mn,On=Tn+pn,kn=\"fp-slides\",Cn=\".\"+kn,Hn=\"fp-slidesContainer\",Rn=\".\"+Hn,zn=\"fp-table\",In=\"fp-slidesNav\",Bn=\".\"+In,Nn=Bn+\" a\",e=\"fp-controlArrow\",jn=\".\"+e,Pn=\"fp-prev\",Wn=jn+\".fp-prev\",Yn=jn+\".fp-next\";function Dn(e,t){on.console&&on.console[e]&&on.console[e](\"fullPage: \"+t)}function Xn(e,t){return(t=1'+Te(r,\"Section\")+\"\";var l=g.navigationTooltips[r];void 0!==l&&\"\"!==l&&(o+='
'+l+\"
\"),o+=\"\"}Xn(\"ul\",n)[0].innerHTML=o,Un(Xn(An),{\"margin-top\":\"-\"+Xn(An)[0].offsetHeight/2+\"px\"}),oo(Xn(\"a\",Xn(\"li\",Xn(An)[0])[qn(Xn(Sn)[0],mn)]),vn)}(),Xn('iframe[src*=\"youtube.com/embed/\"]',w).forEach(function(e){var t,n,o;n=\"enablejsapi=1\",o=(t=e).getAttribute(\"src\"),t.setAttribute(\"src\",o+(/\\?/.test(o)?\"&\":\"?\")+n)}),g.fadingEffect&&S.fadingEffect&&S.fadingEffect.apply(),Ft(\"cards\")&&S.cards.init(),g.scrollOverflow&&(p=g.scrollOverflowHandler.init(g))}(),ae(!0),se(!0),ne(g.autoScrolling,\"internal\"),xt(),Pt(),\"complete\"===rn.readyState&&at(),on.addEventListener(\"load\",at),g.scrollOverflow||Oe(),function(){for(var e=1;e<4;e++)C=setTimeout(Ee,350*e)}(),on.addEventListener(\"scroll\",ke),on.addEventListener(\"hashchange\",st),on.addEventListener(\"blur\",ht),on.addEventListener(\"resize\",yt),rn.addEventListener(\"keydown\",ut),rn.addEventListener(\"keyup\",ft),[\"click\",\"touchstart\"].forEach(function(e){rn.addEventListener(e,be)}),g.normalScrollElements&&([\"mouseenter\",\"touchstart\"].forEach(function(e){we(e,!1)}),[\"mouseleave\",\"touchend\"].forEach(function(e){we(e,!0)})),Ft(\"dragAndMove\")&&S.dragAndMove.turnOffTouch());var Z,G,F,U=!1,Q=0,_=0,K=0,J=0,$=(new Date).getTime(),q=0,ee=0,te=y;return S}function ne(e,t){e||Xt(0),Kt(\"autoScrolling\",e,t);var n=Xn(Sn)[0];if(g.autoScrolling&&!g.scrollBar)Un(r,{overflow:\"hidden\",height:\"100%\"}),oe(Y.recordHistory,\"internal\"),Un(w,{\"-ms-touch-action\":\"none\",\"touch-action\":\"none\"}),null!=n&&Xt(n.offsetTop);else if(Un(r,{overflow:\"visible\",height:\"initial\"}),oe(!!g.autoScrolling&&Y.recordHistory,\"internal\"),Un(w,{\"-ms-touch-action\":\"\",\"touch-action\":\"\"}),Gt(w),null!=n){var o=Ge(n.offsetTop);o.element.scrollTo(0,o.options)}mo(w,\"setAutoScrolling\",e)}function oe(e,t){Kt(\"recordHistory\",e,t)}function re(e,t){\"internal\"!==t&&Ft(\"fadingEffect\")&&S.fadingEffect.update(e),Ft(\"cards\")&&S.cards.update(e),Kt(\"scrollingSpeed\",e,t)}function ie(e,t){Kt(\"fitToSection\",e,t)}function le(e){e?(function(){var e,t=\"\";on.addEventListener?e=\"addEventListener\":(e=\"attachEvent\",t=\"on\");var n=\"onwheel\"in rn.createElement(\"div\")?\"wheel\":void 0!==rn.onmousewheel?\"mousewheel\":\"DOMMouseScroll\",o=!!N&&{passive:!1};\"DOMMouseScroll\"==n?rn[e](t+\"MozMousePixelScroll\",je,o):rn[e](t+n,je,o)}(),w.addEventListener(\"mousedown\",dt),w.addEventListener(\"mouseup\",vt)):(rn.addEventListener?(rn.removeEventListener(\"mousewheel\",je,!1),rn.removeEventListener(\"wheel\",je,!1),rn.removeEventListener(\"MozMousePixelScroll\",je,!1)):rn.detachEvent(\"onmousewheel\",je),w.removeEventListener(\"mousedown\",dt),w.removeEventListener(\"mouseup\",vt))}function ae(t,e){void 0!==e?(e=e.replace(/ /g,\"\").split(\",\")).forEach(function(e){Zt(t,e,\"m\")}):Zt(t,\"all\",\"m\"),mo(w,\"setAllowScrolling\",{value:t,directions:e})}function se(e){e?(le(!0),function(){if(i||u){g.autoScrolling&&(m.removeEventListener(z.touchmove,Re,{passive:!1}),m.addEventListener(z.touchmove,Re,{passive:!1}));var e=g.touchWrapper;e.removeEventListener(z.touchstart,Be),e.removeEventListener(z.touchmove,ze,{passive:!1}),e.addEventListener(z.touchstart,Be),e.addEventListener(z.touchmove,ze,{passive:!1})}}()):(le(!1),function(){if(i||u){g.autoScrolling&&(m.removeEventListener(z.touchmove,ze,{passive:!1}),m.removeEventListener(z.touchmove,Re,{passive:!1}));var e=g.touchWrapper;e.removeEventListener(z.touchstart,Be),e.removeEventListener(z.touchmove,ze,{passive:!1})}}())}function ce(t,e){void 0!==e?(e=e.replace(/ /g,\"\").split(\",\")).forEach(function(e){Zt(t,e,\"k\")}):(Zt(t,\"all\",\"k\"),g.keyboardScrolling=t)}function ue(){var e=Qn(Xn(Sn)[0],mn);e||!g.loopTop&&!g.continuousVertical||(e=$n(Xn(mn))),null!=e&&De(e,null,!0)}function fe(){var e=_n(Xn(Sn)[0],mn);e||!g.loopBottom&&!g.continuousVertical||(e=Xn(mn)[0]),null!=e&&De(e,null,!1)}function de(e,t){re(0,\"internal\"),ve(e,t),re(Y.scrollingSpeed,\"internal\")}function ve(e,t){var n=Rt(e);void 0!==t?zt(e,t):null!=n&&De(n)}function pe(e){Pe(\"right\",e)}function he(e){Pe(\"left\",e)}function ge(e){if(!Zn(w,un)){E=!0,y=Gn(),f=Fn();for(var t=Xn(mn),n=0;n
'),wo('
')],uo(Xn(Cn,l)[0],a),\"#fff\"!==g.controlArrowColor&&(Un(Xn(Yn,l),{\"border-color\":\"transparent transparent transparent \"+g.controlArrowColor}),Un(Xn(Wn,l),{\"border-color\":\"transparent \"+g.controlArrowColor+\" transparent transparent\"})),g.loopHorizontal||eo(Xn(Wn,l))),g.slidesNavigation&&function(e,t){io(wo('
    '),e);var n=Xn(Bn,e)[0];oo(n,\"fp-\"+g.slidesNavPosition);for(var o=0;o'+Te(o,\"Slide\")+\"\"),Xn(\"ul\",n)[0]);Un(n,{\"margin-left\":\"-\"+n.innerWidth/2+\"px\"}),oo(Xn(\"a\",Xn(\"li\",n)[0]),vn)}(e,n)),t.forEach(function(e){Un(e,{width:r+\"%\"}),g.verticalCentered&&kt(e)});var c=Xn(On,e)[0];null!=c&&(0!==qn(Xn(Sn),mn)||0===qn(Xn(Sn),mn)&&0!==qn(c))?(Dt(c,\"internal\"),oo(c,\"fp-initial\")):oo(t[0],vn)}function Le(e){return g.offsetSections&&S.offsetSections?Math.round(S.offsetSections.getWindowHeight(e)):Gn()}function Me(e,t){t||null!=Xn(Sn)[0]||oo(e,vn),o=Xn(Sn)[0],Un(e,{height:Le(e)+\"px\"}),g.paddingTop&&Un(e,{\"padding-top\":g.paddingTop}),g.paddingBottom&&Un(e,{\"padding-bottom\":g.paddingBottom}),void 0!==g.sectionsColor[t]&&Un(e,{\"background-color\":g.sectionsColor[t]}),void 0!==g.anchors[t]&&e.setAttribute(\"data-anchor\",g.anchors[t])}function Te(e,t){return g.navigationTooltips[e]||g.anchors[e]||t+\" \"+(e+1)}function Oe(){var e,t,n=Xn(Sn)[0];oo(n,hn),_e(n),Qe(),Je(n),g.scrollOverflow&&g.scrollOverflowHandler.afterLoad(),e=ct(),t=Rt(e.section),e.section&&t&&(void 0===t||qn(t)!==qn(o))||!go(g.afterLoad)||Xe(\"afterLoad\",{activeSection:n,element:n,direction:null,anchorLink:n.getAttribute(\"data-anchor\"),sectionIndex:qn(n,mn)}),go(g.afterRender)&&Xe(\"afterRender\"),mo(w,\"afterRender\")}function ke(){var e;if(mo(w,\"onScroll\"),(!g.autoScrolling||g.scrollBar||Ft(\"dragAndMove\"))&&!_t()){var t=Ft(\"dragAndMove\")?Math.abs(S.dragAndMove.getCurrentScroll()):vo(),n=0,o=t+Gn()/2,r=(Ft(\"dragAndMove\")?S.dragAndMove.getDocumentHeight():m.offsetHeight-Gn())===t,i=Xn(mn);if(r)n=i.length-1;else if(t)for(var l=0;lMath.abs(Q-K)?!a&&Math.abs(_-J)>Fn()/100*g.touchSensitivity&&(J<_?v.m.right&&pe(t):v.m.left&&he(t)):g.autoScrolling&&x&&Math.abs(Q-K)>on.innerHeight/100*g.touchSensitivity&&(K>4,n=(15&r)<<4|(i=c.indexOf(e.charAt(s++)))>>2,o=(3&i)<<6|(l=c.indexOf(e.charAt(s++))),a+=String.fromCharCode(t),64!=i&&(a+=String.fromCharCode(n)),64!=l&&(a+=String.fromCharCode(o));return a=function(e){for(var t,n=\"\",o=0,r=0,i=0;oee&&v.m.down&&fe()),ee=e.pageY)}function mt(e,t,n){var o=co(e,mn),r={slides:e,destiny:t,direction:n,destinyPos:{left:t.offsetLeft},slideIndex:qn(t),section:o,sectionIndex:qn(o,mn),anchorLink:o.getAttribute(\"data-anchor\"),slidesNav:Xn(Bn,o)[0],slideAnchor:jt(t),prevSlide:Xn(On,o)[0],prevSlideIndex:qn(Xn(On,o)[0]),localIsResizing:E};r.xMovement=Ot(r.prevSlideIndex,r.slideIndex),r.direction=r.direction?r.direction:r.xMovement,r.localIsResizing||(x=!1),Ut(\"parallax\",\"applyHorizontal\",r),Ut(\"cards\",\"apply\",r),g.onSlideLeave&&!r.localIsResizing&&\"none\"!==r.xMovement&&go(g.onSlideLeave)&&!1===Xe(\"onSlideLeave\",r)?a=!1:(oo(t,vn),ro(po(t),vn),r.localIsResizing||(qe(r.prevSlide),_e(t)),St(r),Zn(o,vn)&&!r.localIsResizing&&Bt(r.slideIndex,r.slideAnchor,r.anchorLink,r.sectionIndex),S.continuousHorizontal&&S.continuousHorizontal.apply(r),_t()?bt(r):wt(e,r,!0),g.interlockedSlides&&S.interlockedSlides&&(Ft(\"continuousHorizontal\")&&void 0!==n&&n!==r.xMovement||S.interlockedSlides.apply(r)))}function St(e){!g.loopHorizontal&&g.controlArrows&&(bo(Xn(Wn,e.section),0!==e.slideIndex),bo(Xn(Yn,e.section),null!=Jn(e.destiny)))}function bt(e){var t,n;S.continuousHorizontal&&S.continuousHorizontal.afterSlideLoads(e),t=e.slidesNav,n=e.slideIndex,g.slidesNavigation&&null!=t&&(ro(Xn(pn,t),vn),oo(Xn(\"a\",Xn(\"li\",t)[n]),vn)),e.localIsResizing||(Ut(\"parallax\",\"afterSlideLoads\"),Ut(\"scrollOverflowReset\",\"setPrevious\",e.prevSlide),Ut(\"scrollOverflowReset\",\"reset\"),go(g.afterSlideLoad)&&Xe(\"afterSlideLoad\",e),x=!0,Je(e.destiny)),a=!1,Ft(\"interlockedSlides\")&&S.interlockedSlides.apply(e)}function wt(e,t,n){var o=t.destinyPos;if(g.css3){var r=\"translate3d(-\"+Math.round(o.left)+\"px, 0px, 0px)\";S.test.translate3dH[t.sectionIndex]=r,Un(At(Xn(Rn,e)),Vt(r)),M=setTimeout(function(){n&&bt(t)},g.scrollingSpeed)}else S.test.left[t.sectionIndex]=Math.round(o.left),$t(e,Math.round(o.left),g.scrollingSpeed,function(){n&&bt(t)})}function yt(){clearTimeout(h),h=setTimeout(function(){for(var e=0;e<4;e++)A=setTimeout(Et,200*e)},200)}function Et(){if(mo(w,\"onResize\"),xt(),i){var e=rn.activeElement;if(!So(e,\"textarea\")&&!So(e,\"input\")&&!So(e,\"select\")){var t=Gn();Math.abs(t-te)>20*Math.max(te,t)/100&&(ge(!0),te=t)}}else Ee()}function xt(){var e=g.responsive||g.responsiveWidth,t=g.responsiveHeight,n=e&&on.innerWidth