{"version":3,"file":"conference.js","mappings":";;;;;;;;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACA,uDAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,EAAE,MAAM,EAAE;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC,EAAE;AAClC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iEAAiE,aAAa;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,EAAE;AACF;AACA;;;;;;AAMA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;;;;;AAMD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AAQD;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA;AACA;AACA,8CAA8C,gBAAgB;;AAE9D;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB,CAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,wBAAwB;AACxB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH,EAAE;AACF,6BAA6B,kBAAkB;AAC/C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA,GAAG;AACH,4BAA4B,sCAAsC;AAClE;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,EAAE;AAChD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B,eAAe;AACf;AACA;AACA;AACA,kJAAkJ,IAAI;AACtJ;AACA;AACA;AACA;AACA;;AAEA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,oDAAoD,UAAU,kBAAkB;AAChF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,4CAA4C,UAAU,kBAAkB;AACxE;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA,mBAAmB,SAAS;AAC5B,cAAc;AACd;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,IAAI;AACN;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,0FAA0F,aAAa;AACvG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qDAAqD,YAAY;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,qFAAqF,aAAa;AAClG;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA,gCAAgC,EAAE,MAAM,IAAI,MAAM,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd,cAAc;AACd;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,IAAI;AACP;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;;;AAGA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;AACA;;AAEA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,GAAG;AAC3B;AACA;AACA;AACA;AACA;AACA;;;;AAIA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA,EAAE;AACF;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,iDAAiD;AACjD,8CAA8C;AAC9C;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA,mBAAmB,oBAAoB,sBAAsB,kCAAkC,YAAY;AAC3G;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA,+BAA+B,iBAAiB;;AAEhD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAE,GAAG;;AAEL;AACA;;AAEA,iBAAiB,oBAAoB;;AAErC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;;AAEA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA,0BAA0B,2DAA2D;;AAErF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sDAAsD,kBAAkB;;AAExE;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sDAAsD,kBAAkB;;AAExE;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sDAAsD,kBAAkB;;AAExE;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA,mCAAmC,+BAA+B,gBAAgB;;AAElF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,0CAA0C;AAC1C;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,kBAAkB;;AAExE;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA,uEAAuE,aAAa;AACpF;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,CAAC;;AAED;AACA,kBAAkB,SAAS;AAC3B,gBAAgB,SAAS;AACzB,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,oEAAoE,aAAa;AACjF;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA,iEAAiE,aAAa;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA,CAAC;;AAED;AACA,uEAAuE,aAAa;AACpF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;;AAEH;AACA;AACA,CAAC;;AAED;AACA,qEAAqE,aAAa;AAClF;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;AAED;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;;AAEA;AACA,YAAY,sFAAsF;AAClG,YAAY,uFAAuF;AACnG;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,EAAE;;AAEF;AACA;AACA,mEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,CAAC,UAAU;;AC7tKX;;AAEA;AACA;AACA;AACA;AACA,4DAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;;;;;AAMD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB;;AAEzB;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,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AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA,KAAK;AACL;AACA,+BAA+B;;AAE/B;AACA;AACA;;AAEA;AACA,2EAA2E;;AAE3E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,yCAAyC;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN,iEAAiE;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2EAA2E;;AAE3E;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E;;AAE/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,0BAA0B,gCAAgC;AAC1D,GAAG;AACH;AACA,2CAA2C,cAAc;;;;;;;;;ACnXzD;AACa;;AAEb,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA,2CAA2C,cAAc;;;;;;;;;ACd5C;;AAEb,kBAAkB;AAClB,cAAc;AACd,eAAe;AACf,wBAAwB;AACxB,eAAe;AACf,mBAAmB;AACnB,mBAAmB;AACnB,yBAAyB;AACzB;AACA,aAAa;AACb,YAAY;AACZ,YAAY;AACZ,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB;AACpB;AACA;AACA;AACA,kBAAkB;;AAElB;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf;;AAEA;AACA,sCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,cAAc;;;;;;;;AC3HzD,aAAa,GAAG,IAAoD,oBAAoB,KAAK,UAAuL,CAAC,YAAY,0BAA0B,0BAA0B,gBAAgB,UAAU,UAAU,MAAM,SAAmC,CAAC,gBAAgB,OAAC,OAAO,oBAAoB,8CAA8C,kCAAkC,YAAY,YAAY,mCAAmC,iBAAiB,gBAAgB,sBAAsB,oBAAoB,MAAM,SAAmC,CAAC,YAAY,WAAW,YAAY,SAAS,GAAG;AAC9vB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC,EAAE,WAAW;AACd;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC,EAAE,gCAAgC;AACnC;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,YAAY,sBAAsB,cAAc;AAChD;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB,MAAM;AACN;AACA;AACA;AACA,mBAAmB;AACnB,MAAM;AACN;AACA;AACA,qGAAqG;AACrG,GAAG;;AAEH;AACA;AACA,qCAAqC;;AAErC,oBAAoB,eAAe;AACnC;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,CAAC,EAAE,YAAY;AACf;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA,kBAAkB;;AAElB;AACA;AACA,gBAAgB;AAChB,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,yBAAyB;AACzB;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA,CAAC,GAAG;AACJ;;AAEA;;AAEA;AACA,sCAAsC,EAAE;AACxC,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,8BAA8B;AAC9B;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM,kGAAkG,IAAI;AAC5G;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,wFAAwF,IAAI;AAC5F;AACA,wFAAwF,IAAI;;AAE5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;;AAEA;AACA,CAAC,EAAE,iHAAiH;AACpH;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA,oBAAoB;;AAEpB;;AAEA;;AAEA;AACA,kBAAkB,oBAAoB,OAAO;;AAE7C;AACA,kBAAkB,iBAAiB;AACnC;AACA,mCAAmC;AACnC;AACA;;AAEA,MAAM;;AAEN;AACA,kBAAkB,oBAAoB;AACtC;AACA;;AAEA;;AAEA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,gBAAgB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC,EAAE,iCAAiC;AACpC;;AAEA;AACA;;AAEA;;AAEA;;AAEA,4BAA4B;AAC5B;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,mCAAmC;AACnC;;AAEA;AACA;AACA,wBAAwB;AACxB,MAAM;AACN;AACA,MAAM;AACN,wBAAwB;AACxB;;AAEA;AACA;;AAEA;AACA,uBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uBAAuB,2BAA2B;AAClD;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,mEAAmE;AAC9F,2BAA2B,mEAAmE;AAC9F,2BAA2B,mEAAmE;AAC9F,2BAA2B,mEAAmE;AAC9F,2BAA2B,mEAAmE;AAC9F,2BAA2B,mEAAmE;AAC9F,2BAA2B,mEAAmE;AAC9F,2BAA2B,mEAAmE;AAC9F,2BAA2B,mEAAmE;;AAE9F,4BAA4B,kEAAkE;AAC9F,4BAA4B,kEAAkE;;;AAG9F;;AAEA,GAAG;;AAEH;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA,CAAC,EAAE,8BAA8B;AACjC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA,CAAC,GAAG,EAAE,GAAG;AACT,CAAC","sources":["webpack://profitday.web/./node_modules/.pnpm/@pqina+flip@1.7.7/node_modules/@pqina/flip/tick/tick.core.module.js","webpack://profitday.web/./node_modules/.pnpm/@pqina+flip@1.7.7/node_modules/@pqina/flip/dist/tick.view.flip.module.js","webpack://profitday.web/./node_modules/.pnpm/@pqina+flip@1.7.7/node_modules/@pqina/flip/dist/flip.module.js","webpack://profitday.web/./src/js/handlebars/helpers.js","webpack://profitday.web/./src/js/profitday/conference.js","webpack://profitday.web/./profile.handlebars","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars.runtime.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/base.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/decorators.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/exception.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/helpers.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/logger.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/runtime.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/safe-string.js","webpack://profitday.web/./node_modules/.pnpm/handlebars@4.7.7/node_modules/handlebars/dist/cjs/handlebars/utils.js","webpack://profitday.web/./node_modules/.pnpm/sourcebuster@1.1.0/node_modules/sourcebuster/dist/sourcebuster.js"],"sourcesContent":["/* eslint-disable */\n\n/*\n * @pqina/tick v1.7.6 - Counters Made Easy\n * Copyright (c) 2020 PQINA - https://github.com/pqina/tick/\n */\nexport default typeof window !== 'undefined' ? (function() {\n\tif (!module) {\n\t\tvar module = {};\n\t}\n'use strict';\n\n// Available extension types\nvar ExtensionType = {\n\tFONT: 'font',\n\tVIEW: 'view',\n\tTRANSFORM: 'transform',\n\tEASING_FUNCTION: 'easing-function',\n\tTRANSITION: 'transition'\n};\n\n// Registered extension collection\nvar Extensions = {};\nExtensions[ExtensionType.FONT] = {};\nExtensions[ExtensionType.VIEW] = {};\nExtensions[ExtensionType.TRANSFORM] = {};\nExtensions[ExtensionType.EASING_FUNCTION] = {};\nExtensions[ExtensionType.TRANSITION] = {};\n\n/**\n * Adds multiple extensions in one go\n * @param type\n * @param extensions\n * @returns {null}\n */\nvar addExtensions = function addExtensions(type, extensions) {\n\n\t// type does not exist\n\tif (!Extensions[type]) {\n\t\treturn null;\n\t}\n\n\tfor (var name in extensions) {\n\n\t\tif (!extensions.hasOwnProperty(name)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// name already exists \n\t\tif (Extensions[type][name]) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// register\n\t\tExtensions[type][name] = extensions[name];\n\t}\n};\n\n/**\n * Adds an extension function by type\n * @param type\n * @param name\n * @param fn\n * @returns {null}\n */\nvar addExtension = function addExtension(type, name, fn) {\n\n\t// type does not exist\n\tif (!Extensions[type]) {\n\t\tthrow 'Can\\'t add extension with type of \"' + type + '\", \"' + type + '\" is not a valid extension type. The following types are valid: ' + keysToList(Extensions);\n\t}\n\n\t// if is invalid name\n\tif (!/^[-a-z]+$/.test(name)) {\n\t\tthrow 'Can\\'t add extension with name \"' + name + '\", \"' + name + '\" is contains invalid characters. Only lowercase alphabetical characters and dashes are allowed.';\n\t}\n\n\t// name in type already exists \n\tif (Extensions[type][name]) {\n\t\tthrow 'Can\\'t add extension with name \"' + name + '\", \"' + name + '\" is already added.';\n\t}\n\n\t// add\n\tExtensions[type][name] = fn;\n};\n\n/**\n * Returns an extension function by name and type\n * @param type\n * @param name\n * @returns {*}\n */\nvar getExtension = function getExtension(type, name) {\n\n\t// type does not exist\n\tif (!Extensions[type]) {\n\t\tthrow 'Can\\'t get extension with type of \"' + type + '\", \"' + type + '\" is not a valid extension type. The following types are available: ' + keysToList(Extensions);\n\t}\n\n\t// name in type does not exist\n\tif (!Extensions[type][name]) {\n\t\tthrow 'Can\\'t get extension with name \"' + name + '\", \"' + name + '\" is not available. The following extensions are available: ' + keysToList(Extensions[type]);\n\t}\n\n\treturn Extensions[type][name];\n};\n\nvar MILLISECOND = 1;\nvar SECOND = 1000;\nvar MINUTE = 60000;\nvar HOUR = 3600000;\nvar DAY = 86400000;\nvar WEEK = 604800000;\nvar MONTH = 2628000000;\nvar YEAR = 31536000000;\n\nvar TimeUnit = {\n\t'Week': WEEK,\n\t'Day': DAY,\n\t'Hour': HOUR,\n\t'Minute': MINUTE,\n\t'Second': SECOND,\n\t'Millisecond': MILLISECOND,\n\t'Month': MONTH,\n\t'Year': YEAR\n};\n\nvar Months = ['Januari', 'Februari', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\nfor (var key in TimeUnit) {\n\tif (!TimeUnit.hasOwnProperty(key)) {\n\t\tcontinue;\n\t}\n\tvar val = TimeUnit[key];\n\tif (val === MILLISECOND) {\n\t\tTimeUnit['mi'] = val;\n\t\tTimeUnit['ms'] = val;\n\t} else if (val === MONTH) {\n\t\tTimeUnit['M'] = val;\n\t} else {\n\t\tTimeUnit[key.charAt(0).toLowerCase()] = val;\n\t}\n\tTimeUnit[key.toLowerCase()] = val;\n\tTimeUnit[key.toLowerCase() + 's'] = val;\n}\n\nvar Days = {\n\tMonday: 1,\n\tTuesday: 2,\n\tWednesday: 3,\n\tThursday: 4,\n\tFriday: 5,\n\tSaturday: 6,\n\tSunday: 0\n};\n\nvar MonthFactor = {\n\t'M': 1,\n\t'y': 12\n};\n\nvar serverDate = function serverDate(cb) {\n\n\tvar xhr = new XMLHttpRequest();\n\n\tvar now = Date.now();\n\txhr.open('HEAD', window.location + '?noCache=' + now);\n\txhr.setRequestHeader('Content-Type', 'text/html');\n\txhr.setRequestHeader('Cache-Control', 'no-cache');\n\n\txhr.onload = function () {\n\t\tvar correction = (now - Date.now()) * .5;\n\t\tvar responseDate = new Date(xhr.getResponseHeader('Date'));\n\t\tcb(new Date(responseDate.getTime() + correction));\n\t};\n\n\txhr.send();\n};\n\nvar isDate = function isDate(date) {\n\treturn date instanceof Date;\n};\n\nvar setTime = function setTime(date, time) {\n\tdate.setHours(time[0] || 0, time[1] || 0, time[2] || 0, time[3] || 0);\n\treturn date;\n};\n\nvar setDay = function setDay(date, day) {\n\tvar current = date.getDay();\n\tvar dist = day - current;\n\tdate.setDate(date.getDate() + dist);\n\treturn date;\n};\n\nvar setDayOfMonth = function setDayOfMonth(date, day) {\n\tvar totalDays = daysInMonth(date.getMonth() + 1, date.getFullYear());\n\tday = day === 'last' ? totalDays : Math.max(1, Math.min(totalDays, day));\n\tdate.setDate(day);\n\treturn date;\n};\n\nvar setMonth = function setMonth(date, month) {\n\tdate.setMonth(Months.map(function (m) {\n\t\treturn m.toLowerCase();\n\t}).indexOf(month));\n\treturn date;\n};\n\n/*\n Z\n ±hh:mm\n ±hhmm\n ±hh\n */\nvar toTimezoneOffset = function toTimezoneOffset(ISO8601Timezone) {\n\tvar current = new Date().getTimezoneOffset() * 60000;\n\tif (ISO8601Timezone === 'Z') {\n\t\treturn current;\n\t}\n\tvar parts = ISO8601Timezone.match(/\\+|-|[\\d]{2}|[\\d]{2}/g);\n\tvar multiplier = parts.shift() === '-' ? -1 : 1;\n\tvar hours = parseInt(parts[0], 10);\n\tvar minutes = parseInt(parts[1], 10);\n\t// calculate zone offset plus our current zone offset, all in milliseconds\n\treturn multiplier * (hours * 3600000 + minutes * 60000) + current;\n};\n\nvar offsetDate = function offsetDate(offset) {\n\treturn new Date(Date.now() + offset);\n};\n\nvar timezoneDate = function timezoneDate(date, offset) {\n\treturn new Date(date.getTime() + offset);\n};\n\n// same date (day)\nvar sameDate = function sameDate(a, b) {\n\treturn a.toDateString() === b.toDateString();\n};\n\n// exact same date and time\nvar sameTime = function sameTime(a, b) {\n\treturn a.getTime() === b.getTime();\n};\n\nvar daysInMonth = function daysInMonth(month, year) {\n\treturn new Date(year, month, 0).getDate();\n};\n\nvar dateFromISO = function dateFromISO(iso) {\n\n\t// use existing timezone\n\tif (iso.match(/(Z)|([+\\-][0-9]{2}:?[0-9]*$)/g)) {\n\t\treturn new Date(iso);\n\t}\n\n\t// add local timezone\n\tiso += iso.indexOf('T') !== -1 ? 'Z' : '';\n\treturn dateToLocal(new Date(iso));\n};\n\nvar dateToLocal = function dateToLocal(date) {\n\treturn new Date(date.getTime() + date.getTimezoneOffset() * 60000);\n};\n\nvar timeDuration = function timeDuration(milliseconds, components) {\n\n\treturn components.map(function (key) {\n\n\t\tvar requiredMilliseconds = TimeUnit[key];\n\n\t\tvar count = Math.max(0, Math.floor(milliseconds / requiredMilliseconds));\n\n\t\tmilliseconds = milliseconds % requiredMilliseconds;\n\n\t\treturn count;\n\t});\n};\n\n// makes use of time duration for everything expect years and months\nvar dateDiff = function dateDiff(a, b, components) {\n\n\t// do calculations\n\tvar diff = b - a;\n\tvar swapped = false;\n\tif (diff < 0) {\n\t\tdiff = a - b;\n\t\tvar _ref = [b, a];\n\t\ta = _ref[0];\n\t\tb = _ref[1];\n\n\t\tswapped = true;\n\t}\n\n\t// set default components\n\tif (!components) {\n\t\tcomponents = ['d', 'h', 'm'];\n\t}\n\n\t// correct month uppercase M if set to lower case\n\tvar mIndex = components.indexOf('m');\n\tif (mIndex >= 0 && (components[mIndex - 1] === 'y' || components[mIndex + 1] === 'd')) {\n\t\tcomponents[mIndex].key = 'M';\n\t}\n\n\tvar anchor = void 0;\n\tvar monthsRemaining = void 0;\n\tvar months = void 0;\n\n\tvar presentsYears = components.includes('y');\n\tvar presentsMonths = components.includes('M');\n\n\tif (presentsMonths || presentsYears) {\n\n\t\tanchor = new Date(a.valueOf() + diff);\n\n\t\tmonthsRemaining = diffInMonths(anchor, a);\n\n\t\tmonths = presentsMonths ? Math.floor(monthsRemaining) : Math.floor(monthsRemaining / 12) * 12;\n\n\t\tdiff = anchor.valueOf() - addMonths(clone$1(a), months).valueOf();\n\t}\n\n\tvar output = components.map(function (key) {\n\n\t\t// if is month or year\n\t\tif (key === 'y' || key === 'M') {\n\t\t\tvar _count = Math.max(0, Math.floor(monthsRemaining / MonthFactor[key]));\n\t\t\tmonthsRemaining -= _count * MonthFactor[key];\n\t\t\treturn _count;\n\t\t}\n\n\t\tvar requiredMilliseconds = TimeUnit[key];\n\n\t\tvar count = Math.max(0, Math.floor(diff / requiredMilliseconds));\n\n\t\tdiff = diff % requiredMilliseconds;\n\n\t\treturn count;\n\t});\n\n\treturn swapped ? output.map(function (v) {\n\t\treturn v > 0 ? -v : v;\n\t}) : output;\n};\n\n/**\n * Tick.helper.duration(10, 'seconds') -> milliseconds\n * Tick.helper.duration(a, b, format, cascade) -> [0, 10, 20, 4, 0];\n * @param args\n * @returns {*}\n */\nvar duration = function duration() {\n\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\targs[_key] = arguments[_key];\n\t}\n\n\t// if is countdown x amount of milliseconds\n\tif (typeof args[0] === 'number' && typeof args[1] === 'string') {\n\t\tif (!TimeUnit[args[1]]) {\n\t\t\tthrow '\"' + args[1] + '\" is not a valid amount.';\n\t\t}\n\t\treturn args[0] * TimeUnit[args[1]];\n\t}\n\n\t// is date diff\n\tif (isDate(args[0])) {\n\t\treturn dateDiff.apply(undefined, args);\n\t}\n\n\t// is duration in milliseconds\n\tif (typeof args[0] === 'number' && Array.isArray(args[1])) {\n\t\treturn timeDuration.apply(undefined, args);\n\t}\n\n\treturn null;\n};\n\n/**\n * Returns current date\n */\nvar now$1 = function now() {\n\treturn new Date();\n};\n\n/**\n * Clones the given date object\n * @param date\n * @returns {Date}\n */\nvar clone$1 = function clone(date) {\n\treturn new Date(date.valueOf());\n};\n\n/**\n * Adds x amount of months to date\n * @param date\n * @param months\n * @returns {*}\n */\nvar addMonths = function addMonths(date, months) {\n\tdate.setMonth(date.getMonth() + months);\n\treturn date;\n};\n\n/**\n * Difference in months between date `a` and date `b`\n * @param a\n * @param b\n * @returns {number}\n */\nvar diffInMonths = function diffInMonths(a, b) {\n\n\tvar wholeMonthDiff = (b.getFullYear() - a.getFullYear()) * 12 + (b.getMonth() - a.getMonth());\n\tvar anchor = addMonths(clone$1(a), wholeMonthDiff);\n\tvar anchor2 = void 0;\n\tvar adjust = void 0;\n\n\tif (b - anchor < 0) {\n\t\tanchor2 = addMonths(clone$1(a), wholeMonthDiff - 1);\n\t\tadjust = (b - anchor) / (anchor - anchor2);\n\t} else {\n\t\tanchor2 = addMonths(clone$1(a), wholeMonthDiff + 1);\n\t\tadjust = (b - anchor) / (anchor2 - anchor);\n\t}\n\n\treturn -(wholeMonthDiff + adjust);\n};\n\n/**\n * Destroyer\n * @param state\n */\nvar destroyer = (function (state) {\n\n\treturn {\n\t\tdestroy: function destroy() {\n\n\t\t\tstate.destroyed = true;\n\n\t\t\tif (state.frame) {\n\t\t\t\tcancelAnimationFrame(state.frame);\n\t\t\t}\n\n\t\t\tif (state.styleObserver) {\n\t\t\t\tstate.styleObserver.disconnect();\n\t\t\t}\n\n\t\t\tif (state.didResizeWindow) {\n\t\t\t\twindow.removeEventListener('resize', state.didResizeWindow);\n\t\t\t}\n\n\t\t\tif (state.root && state.root.parentNode) {\n\t\t\t\tstate.root.parentNode.removeChild(state.root);\n\t\t\t}\n\t\t}\n\t};\n});\n\n/**\n * Rooter\n * @param state\n * @param root\n * @param name\n */\nvar rooter = (function (state) {\n\tvar root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.createElement('span');\n\tvar name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\n\tstate.root = root;\n\tstate.aligned = null;\n\tstate.destroyed = false;\n\n\tif (root && name) {\n\t\tstate.root.classList.add('tick-' + name);\n\t\tstate.root.setAttribute('data-view', name);\n\t}\n\n\tif (root && root.dataset.layout) {\n\t\tstate.align = (root.dataset.layout.match(/left|right|center/) || [])[0] || 'left';\n\t}\n\n\treturn {\n\n\t\tappendTo: function appendTo(element) {\n\t\t\tvar location = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'last';\n\n\n\t\t\t// if no root or already attached -> exit\n\t\t\tif (!state.root || state.root && state.root.parentNode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (location === 'last') {\n\t\t\t\t// place before last text node if found\n\t\t\t\tif (element.childNodes.length && element.childNodes[element.childNodes.length - 1].nodeType === Node.TEXT_NODE) {\n\t\t\t\t\telement.insertBefore(state.root, element.childNodes[element.childNodes.length - 1]);\n\t\t\t\t} else {\n\t\t\t\t\t// else just append\n\t\t\t\t\telement.appendChild(state.root);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (location === 'first') {\n\t\t\t\t// no elements and no text\n\t\t\t\tif (element.childNodes.length === 0) {\n\t\t\t\t\telement.appendChild(state.root);\n\t\t\t\t}\n\t\t\t\t// no elements but does contain text\n\t\t\t\telse if (element.children.length === 0 && element.childNodes.length) {\n\t\t\t\t\t\telement.insertBefore(state.root, element.childNodes[element.childNodes.length - 1]);\n\t\t\t\t\t}\n\t\t\t\t\t// elements!\n\t\t\t\t\telse {\n\t\t\t\t\t\t\telement.insertBefore(state.root, element.children[0]);\n\t\t\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof location !== 'string') {\n\t\t\t\telement.insertBefore(state.root, location);\n\t\t\t}\n\t\t}\n\n\t};\n});\n\n/**\n * Grouper\n * @param state\n * @param definition\n */\nvar grouper = (function (state, definition) {\n\n\tstate.definition = definition;\n\n\treturn {\n\t\tsetDefinition: function setDefinition(definition) {\n\t\t\tstate.definition = definition;\n\t\t}\n\t};\n});\n\n/**\n * Drawer\n * @param state\n * @param draw\n * @param present\n * @param drawViews\n */\nvar drawer = (function (state, _draw, drawViews, present) {\n\n\treturn {\n\t\tdraw: function draw() {\n\n\t\t\t// not dirty, might need to draw subviews\n\t\t\tif (!state.dirty) {\n\t\t\t\tif (drawViews) {\n\n\t\t\t\t\t// draw sub views\n\t\t\t\t\tvar redrawn = drawViews(state);\n\t\t\t\t\tif (redrawn) {\n\t\t\t\t\t\t// let's fit it! (if necessary)\n\t\t\t\t\t\tfit(state);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// draw everything\n\t\t\t_draw(state, present);\n\n\t\t\t// let's fit this view (if necessary)\n\t\t\tfit(state);\n\n\t\t\t// no longer dirty\n\t\t\tstate.dirty = false;\n\n\t\t\treturn true;\n\t\t}\n\t};\n});\n\nvar fit = function fit(state) {\n\n\tif (!state.fit) {\n\n\t\t// nope\n\t\tif (!state.root || !(state.root.getAttribute('data-layout') || '').match(/fit/)) {\n\t\t\tstate.fit = false;\n\t\t\treturn;\n\t\t}\n\n\t\t// create fit info object\n\t\tvar style = window.getComputedStyle(state.root, null);\n\t\tstate.fit = true;\n\t\tstate.fitInfo = {\n\t\t\tcurrentFontSize: parseInt(style.getPropertyValue('font-size'), 10)\n\t\t};\n\t}\n\n\t// get available width from parent node\n\tstate.fitInfo.availableWidth = state.root.parentNode.clientWidth;\n\n\t// the space our target element uses\n\tstate.fitInfo.currentWidth = state.root.scrollWidth;\n\n\t// let's calculate the new font size\n\tvar newFontSize = Math.min(Math.max(4, state.fitInfo.availableWidth / state.fitInfo.currentWidth * state.fitInfo.currentFontSize), 1024);\n\n\t// size has not changed enough?\n\tvar dist = Math.abs(newFontSize - state.fitInfo.currentFontSize);\n\n\tif (dist <= 1) {\n\t\t// prevents flickering on firefox / safari / ie by not redrawing tiny font size changes\n\t\treturn;\n\t}\n\n\tstate.fitInfo.currentFontSize = newFontSize;\n\n\tstate.root.style.fontSize = state.fitInfo.currentFontSize + 'px';\n};\n\nvar updater = (function (state) {\n\n\tstate.dirty = true;\n\tstate.value = null;\n\tstate.valueUpdateCount = 0;\n\tstate.isInitialValue = function () {\n\t\treturn state.valueUpdateCount <= 1;\n\t};\n\n\treturn {\n\t\treset: function reset() {\n\t\t\tstate.dirty = true;\n\t\t\tstate.value = null;\n\t\t\tstate.valueUpdateCount = 0;\n\t\t},\n\t\tupdate: function update(value) {\n\n\t\t\t// don't update on same value\n\t\t\tif (equal(state.value, value)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstate.value = value;\n\t\t\tstate.valueUpdateCount++;\n\t\t\tstate.dirty = true;\n\t\t}\n\t};\n});\n\n/**\n * Resizer\n * @param state\n */\nvar resizer = (function (state) {\n\n\tstate.didResizeWindow = function () {\n\t\tstate.dirty = true;\n\t};\n\n\twindow.addEventListener('resize', state.didResizeWindow);\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\nvar asyncGenerator = function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(function (arg) {\n resume(\"next\", arg);\n }, function (arg) {\n resume(\"throw\", arg);\n });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n return this;\n };\n }\n\n AsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n };\n\n AsyncGenerator.prototype.throw = function (arg) {\n return this._invoke(\"throw\", arg);\n };\n\n AsyncGenerator.prototype.return = function (arg) {\n return this._invoke(\"return\", arg);\n };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\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\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar draw = function draw(state, present) {\n\n\tvar views = (state.definition || []).concat();\n\n\tif (state.align === 'right') {\n\t\tviews.reverse();\n\t}\n\n\tvar value = Array.isArray(state.value) ? state.value.concat() : _typeof(state.value) === 'object' ? clone(state.value) : state.value;\n\n\tviews.forEach(function (view) {\n\n\t\tif (!view.presenter) {\n\t\t\tstate.update = present(view);\n\t\t\tif (!view.presenter) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tview.presenter.appendTo(state.root);\n\t\t}\n\t});\n\n\tviews.filter(function (view) {\n\t\treturn view.presenter !== undefined;\n\t}).forEach(function (view) {\n\n\t\tif (Array.isArray(value) && state.valueMapping) {\n\t\t\t// if set to indexes divide values over views, else (must be \"none\") just pass array\n\t\t\tstate.update(view, state.valueMapping === 'indexes' ? state.align === 'right' ? value.pop() : value.shift() : value);\n\t\t} else if (view.key && value[view.key] !== undefined) {\n\t\t\t// view expects a key so value should be object\n\t\t\tstate.update(view, value[view.key]);\n\t\t} else {\n\t\t\t// just pass on value to all sub views\n\t\t\tstate.update(view, value);\n\t\t}\n\t});\n\n\tstate.views = views;\n\n\t// also draw subviews\n\tdrawViews(state);\n};\n\nvar drawViews = function drawViews(state) {\n\n\tvar redrawn = false;\n\tstate.views.filter(function (view) {\n\t\treturn view.presenter !== undefined;\n\t}).forEach(function (view) {\n\t\tif (view.presenter.draw()) {\n\t\t\tredrawn = true;\n\t\t}\n\t});\n\treturn redrawn;\n};\n\nvar createRoot = (function (root, definition, present) {\n\n\tvar state = {\n\t\tvalueMapping: null // \"none\" or \"indexes\"\n\t};\n\n\tif (root && root.dataset.valueMapping) {\n\t\tvar allowed = ['none', 'indexes'];\n\t\tvar mapping = root.dataset.valueMapping;\n\t\tstate.valueMapping = allowed.indexOf(mapping) !== -1 ? mapping : null;\n\t}\n\n\treturn Object.assign({}, rooter(state, root), resizer(state), updater(state), grouper(state, definition), drawer(state, draw, drawViews, present), destroyer(state));\n});\n\nvar draw$1 = function draw(state, present, ready) {\n\n\t// if value is not in form of array force to array\n\tvar value = copyArray(Array.isArray(state.value) ? state.value : (state.value + '').split(''));\n\n\t// if we're aligned to the right we will append items differently so view updating is less jumpy\n\tif (state.align === 'right') {\n\t\tvalue.reverse();\n\t}\n\n\t// clean up presenters if too much presenters\n\tif (state.definitions.length > value.length) {\n\t\twhile (state.definitions.length > value.length) {\n\t\t\tvar def = state.definitions.pop();\n\t\t\tdef.presenter.destroy();\n\t\t}\n\t}\n\n\t// setup presenters\n\tvalue.forEach(function (value, index) {\n\n\t\tvar def = state.definitions[index];\n\t\tif (!def) {\n\t\t\tdef = state.definitions[index] = cloneDefinition(state.definition);\n\t\t\tstate.update = present(def);\n\t\t\tdef.presenter.appendTo(state.root, state.align === 'right' ? 'first' : 'last');\n\t\t}\n\t});\n\n\t// let's update all subs (possibly sets dirty flag)\n\tvalue.forEach(function (value, index) {\n\t\treturn state.update(state.definitions[index], value);\n\t});\n\n\tstate.views = value;\n\n\t// also draw subviews\n\tdrawViews$1(state);\n};\n\nvar drawViews$1 = function drawViews(state) {\n\n\tvar redrawn = false;\n\tstate.views.forEach(function (view, index) {\n\t\tif (state.definitions[index].presenter.draw()) {\n\t\t\tredrawn = true;\n\t\t}\n\t});\n\treturn redrawn;\n};\n\nvar createRepeater = (function (root, definition, present) {\n\n\tvar state = {\n\t\tdefinitions: []\n\t};\n\n\treturn Object.assign({}, rooter(state, root), updater(state), grouper(state, definition), drawer(state, draw$1, drawViews$1, present), destroyer(state));\n});\n\nvar VENDOR_PREFIX = typeof document === 'undefined' ? null : function () {\n\tvar VENDORS = ['webkit', 'Moz', 'ms', 'O'];\n\tvar i = 0;\n\tvar l = VENDORS.length;\n\tvar transform = void 0;\n\tvar elementStyle = document.createElement('div').style;\n\tfor (; i < l; i++) {\n\t\ttransform = VENDORS[i] + 'Transform';\n\t\tif (transform in elementStyle) {\n\t\t\treturn VENDORS[i];\n\t\t}\n\t}\n\treturn null;\n}();\n\nvar text = function text(node, value) {\n\tvar textNode = node.childNodes[0];\n\tif (!textNode) {\n\t\ttextNode = document.createTextNode(value);\n\t\tnode.appendChild(textNode);\n\t} else if (value !== textNode.nodeValue) {\n\t\ttextNode.nodeValue = value;\n\t}\n};\n\nvar create$1 = function create(name, className) {\n\tvar el = document.createElement(name);\n\tif (className) {\n\t\tel.className = className;\n\t}\n\treturn el;\n};\n\nvar observeAttributes = function observeAttributes(element, attributes, cb) {\n\tvar observer = new MutationObserver(function (mutations) {\n\t\tattributes.forEach(function (attr) {\n\t\t\tif (mutations.filter(function (mutation) {\n\t\t\t\treturn attributes.includes(mutation.attributeName);\n\t\t\t}).length) {\n\t\t\t\tcb(element.getAttribute(attr));\n\t\t\t}\n\t\t});\n\t});\n\tobserver.observe(element, { attributes: true });\n\treturn observer;\n};\n\nvar isHTMLElement = function isHTMLElement(value) {\n\treturn value instanceof HTMLElement;\n};\n\n/**\n * Element Transform Origin\n * @param element\n * @param value\n */\nvar setTransformOrigin = function setTransformOrigin(element, value) {\n\telement.style.transformOrigin = value;\n};\n\n/**\n * Element Transforms\n * @param element\n * @param name\n * @param value\n * @param unit\n */\nvar setTransform = function setTransform(element, name, value) {\n\tvar unit = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n\n\n\tif (!element.transforms) {\n\t\telement.transforms = [];\n\t}\n\n\tvar t = element.transforms.find(function (t) {\n\t\treturn t.name === name;\n\t});\n\tif (t) {\n\t\tt.value = value;\n\t} else {\n\t\telement.transforms.push({ name: name, value: value, unit: unit });\n\t}\n\n\tsetTransformStyle(element, element.transforms);\n};\n\nvar setTransformStyle = function setTransformStyle(element, transforms) {\n\telement.style.transform = transforms.map(function (t) {\n\t\treturn t.name + '(' + t.value + t.unit + ')';\n\t}).join(' ');\n};\n\nvar isVisible = function isVisible(element) {\n\n\tvar elementRect = element.getBoundingClientRect();\n\n\t// is above top of the page\n\tif (elementRect.bottom < 0) {\n\t\treturn false;\n\t}\n\n\t// is below bottom of page\n\tif (elementRect.top > window.scrollY + window.innerHeight) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\n/**\n * @param value { * }\n */\nvar toBoolean$1 = function toBoolean(value) {\n return typeof value === 'string' ? value === 'true' : value;\n};\n\n/**\n * @param string { string }\n */\nvar capitalizeFirstLetter$1 = function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * @param string { string }\n */\nvar trim$1 = function trim(string) {\n return string.trim();\n};\n\nvar CACHE = {};\n\nvar cache = (function (value, fn) {\n\tvar fns = fn.toString();\n\tif (!CACHE[fns]) {\n\t\tCACHE[fns] = {};\n\t}\n\tif (!CACHE[fns][value]) {\n\t\tCACHE[fns][value] = fn(value);\n\t}\n\treturn CACHE[fns][value];\n});\n\nvar isInt = new RegExp('^[0-9]+$');\nvar isBoolean$1 = new RegExp('^(true|false)$');\nvar isFloat = new RegExp('^[0-9.]+$');\nvar isColor = new RegExp('color');\nvar isShadow = new RegExp('shadow');\nvar isGradient = new RegExp('^(follow-gradient|horizontal-gradient|vertical-gradient)');\nvar isDuration = new RegExp('^[.0-9]+(?:ms|s){1}$');\nvar isTransition = new RegExp('^transition-?(?:in|out)?$');\nvar isURL = new RegExp('^url\\\\(');\n\nvar toDuration = function toDuration(string) {\n\treturn string ? parseFloat(string) * (/ms$/.test(string) ? 1 : 1000) : 0;\n};\n\nvar toTransition = function toTransition(string) {\n\treturn string.match(/[a-z]+(?:\\(.*?\\))?\\s?(?:origin\\(.*?\\))?\\s?(?:[a-z]+\\(.*?\\))?[ .a-z-0-9]*/g).map(toTransitionPartial);\n};\n\nvar toTransitionPartial = function toTransitionPartial(string) {\n\n\tvar parts = string.match(/([a-z]+(?:\\(.*?\\))?)\\s?(?:origin\\((.*?)\\))?\\s?([a-z]+(?:\\(.*?\\))?)?\\s?(?:([.0-9ms]+)?\\s?(?:(ease-[a-z-]+))?\\s?([.0-9ms]+)?)?/);\n\n\t// get transition function definition\n\tvar fn = toFunctionOutline(parts[1]);\n\n\t// get duration and easing\n\tvar origin = undefined;\n\tvar duration = undefined;\n\tvar ease = undefined;\n\tvar delay = undefined;\n\tvar resolver = undefined;\n\n\t// skip function and figure out what other parts are\n\tparts.slice(2).filter(function (part) {\n\t\treturn typeof part !== 'undefined';\n\t}).forEach(function (part) {\n\n\t\t// is either duration or delay\n\t\tif (isDuration.test(part)) {\n\t\t\tif (typeof duration === 'undefined') {\n\t\t\t\tduration = toDuration(part);\n\t\t\t} else {\n\t\t\t\tdelay = toDuration(part);\n\t\t\t}\n\t\t}\n\n\t\t// is origin if contains a space\n\t\telse if (/ /.test(part)) {\n\t\t\t\torigin = part;\n\t\t\t}\n\n\t\t\t// should be ease\n\t\t\telse if (/^ease-[a-z-]+$/.test(part)) {\n\t\t\t\t\tease = part;\n\t\t\t\t}\n\n\t\t\t\t// should be transform\n\t\t\t\telse if (/^[a-z]+/.test(part)) {\n\t\t\t\t\t\tresolver = toFunctionOutline(part);\n\t\t\t\t\t}\n\t});\n\n\t// reset easing and duration when transform is defined, these settings don't work together\n\tif (resolver) {\n\t\tduration = undefined;\n\t\tease = undefined;\n\t}\n\n\t// return transition object\n\treturn {\n\t\tname: fn.name,\n\t\tparameters: fn.parameters,\n\t\tduration: duration,\n\t\tease: ease,\n\t\tdelay: delay,\n\t\torigin: origin,\n\t\tresolver: resolver\n\t};\n};\n\n/**\n * toGradient\n * @param string { string } - string should be in format (color, color)\n * @returns { {type: *, colors: *} }\n */\nvar toGradient = function toGradient(string) {\n\tvar type = string.match(/follow-gradient|horizontal-gradient|vertical-gradient/)[0];\n\tvar colors = string.substr(type.length).match(/(?:transparent|rgb\\(.*?\\)|hsl\\(.*?\\)|hsla\\(.*?\\)|rgba\\(.*?\\)|[a-z]+|#[abcdefABCDEF\\d]+)\\s?(?:[\\d]{1,3}%?)?/g).map(toGradientColor);\n\treturn {\n\t\ttype: type,\n\t\tcolors: colors\n\t};\n};\n\nvar gradientOffsetRegex = /\\s([\\d]{1,3})%?$/;\nvar toGradientColor = function toGradientColor(string) {\n\tvar offset = string.match(gradientOffsetRegex);\n\treturn {\n\t\toffset: offset ? parseFloat(offset[1]) / 100 : null,\n\t\tvalue: toColor(string.replace(gradientOffsetRegex, ''))\n\t};\n};\n\n/**\n * Returns the pixels amount for the given value\n */\nvar pipetteCache = [];\n\nvar getPipette = function getPipette(id, root) {\n\tif (!pipetteCache[id]) {\n\t\treturn null;\n\t}\n\treturn pipetteCache[id].find(function (p) {\n\t\treturn p.node.parentNode === root;\n\t});\n};\n\nvar setPipette = function setPipette(id, pipette) {\n\tif (!pipetteCache[id]) {\n\t\tpipetteCache[id] = [];\n\t}\n\tpipetteCache[id].push(pipette);\n};\n\nvar toPixels = typeof document === 'undefined' ? function (value) {\n\treturn 0;\n} : function (value) {\n\tvar root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.body;\n\tvar id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\n\tif (value == 0) {\n\t\treturn 0;\n\t}\n\n\tif (id) {\n\n\t\tvar _pipette = getPipette(id, root) || {};\n\t\tif (!_pipette.node) {\n\t\t\t_pipette.node = document.createElement('span');\n\t\t\t_pipette.node.style.cssText = 'position:absolute;padding:0;visibility:hidden;';\n\t\t\troot.appendChild(_pipette.node);\n\t\t}\n\n\t\t// update value\n\t\t_pipette.node.style.marginTop = value;\n\n\t\t// compute style for first time\n\t\tif (!_pipette.style) {\n\t\t\t_pipette.style = window.getComputedStyle(_pipette.node);\n\t\t}\n\n\t\tsetPipette(id, _pipette);\n\n\t\treturn parseInt(_pipette.style.marginTop, 10);\n\t}\n\n\t// old method\n\tvar pipette = document.createElement('span');\n\tpipette.style.cssText = 'position:absolute;padding:0;visibility:hidden;margin-top:' + value;\n\troot.appendChild(pipette);\n\trequestAnimationFrame(function () {\n\t\tpipette.parentNode.removeChild(pipette);\n\t});\n\treturn parseInt(window.getComputedStyle(pipette).marginTop, 10);\n};\n\n/**\n * @param string { string } - any valid CSS color value\n * @returns { string }\n */\nvar toColor = typeof document === 'undefined' ? function (string) {\n\treturn string;\n} : function (string) {\n\tif (string === 'transparent') {\n\t\treturn 'rgba(0,0,0,0)';\n\t}\n\tvar pipette = document.createElement('span');\n\tpipette.style.cssText = 'position:absolute;visibility:hidden;color:' + string;\n\tdocument.body.appendChild(pipette);\n\trequestAnimationFrame(function () {\n\t\tpipette.parentNode.removeChild(pipette);\n\t});\n\treturn window.getComputedStyle(pipette).getPropertyValue('color');\n};\n\nvar toShadow = function toShadow(style) {\n\n\tif (typeof style !== 'string') {\n\t\treturn style;\n\t}\n\n\treturn style.match(/([-.\\d]+(?:%|ms|s|deg|cm|em|ch|ex|q|in|mm|pc|pt|px|vh|vw|vmin|vmax)?)|[%#A-Za-z0-9,.()]+/g);\n};\n\nvar toURL = function toURL(style) {\n\tvar urls = style.match(/url\\((.*?)\\)/g).map(function (url) {\n\t\treturn url.substring(4, url.length - 1);\n\t});\n\treturn urls.length === 1 ? urls[0] : urls;\n};\n\nvar toStyleProperty = function toStyleProperty(key) {\n\treturn key.trim().split('-').map(function (key, index) {\n\t\treturn index > 0 ? capitalizeFirstLetter$1(key) : key;\n\t}).join('');\n};\n\nvar toStyleValue = function toStyleValue(value, property) {\n\n\tif (isBoolean$1.test(value)) {\n\t\treturn toBoolean$1(value);\n\t}\n\n\tif (isInt.test(value)) {\n\t\treturn parseInt(value, 10);\n\t}\n\n\tif (isFloat.test(value)) {\n\t\treturn parseFloat(value);\n\t}\n\n\tif (isURL.test(value)) {\n\t\treturn toURL(value);\n\t}\n\n\tif (isColor.test(property)) {\n\t\tif (isGradient.test(value)) {\n\t\t\treturn cache(value, toGradient);\n\t\t}\n\t\treturn cache(value, toColor);\n\t}\n\n\tif (isShadow.test(property)) {\n\t\treturn cache(value, toShadow);\n\t}\n\n\tif (isTransition.test(property)) {\n\t\tif (value === 'none') {\n\t\t\treturn value;\n\t\t}\n\t\treturn cache(value, toTransition);\n\t}\n\n\treturn value;\n};\n\nvar toStyle = function toStyle(string) {\n\tvar parts = string.split(':').map(trim$1);\n\tvar property = toStyleProperty(parts[0]);\n\tvar value = toStyleValue(parts[1], parts[0]);\n\tif (!property || value === null || typeof value === 'undefined') {\n\t\treturn null;\n\t}\n\treturn {\n\t\tproperty: property,\n\t\tvalue: value\n\t};\n};\n\nvar toStyles = function toStyles(string) {\n\treturn string.split(';')\n\n\t// remove empty values\n\t.filter(function (style) {\n\t\treturn style.trim().length;\n\t})\n\n\t// turn into objects\n\t.map(toStyle)\n\n\t// remove invalid styles\n\t.filter(function (style) {\n\t\treturn style !== null;\n\t})\n\n\t// create styles object\n\t.reduce(function (styles, style) {\n\t\tstyles[style.property] = style.value;\n\t\treturn styles;\n\t}, {});\n};\n\n// https://gist.github.com/gre/1650294\n// http://easings.net/\n// https://github.com/danro/jquery-easing/blob/master/jquery.easing.js\n// http://gizma.com/easing/\n\nvar easeLinear = function easeLinear(t) {\n\treturn t;\n};\n\nvar easeInSine = function easeInSine(t) {\n\treturn -1 * Math.cos(t * (Math.PI / 2)) + 1;\n};\n\nvar easeOutSine = function easeOutSine(t) {\n\treturn Math.sin(t * (Math.PI / 2));\n};\n\nvar easeInOutSine = function easeInOutSine(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n};\n\nvar easeInQuad = function easeInQuad(t) {\n\treturn t * t;\n};\n\nvar easeOutQuad = function easeOutQuad(t) {\n\treturn t * (2 - t);\n};\n\nvar easeInOutQuad = function easeInOutQuad(t) {\n\treturn t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n};\n\nvar easeInCubic = function easeInCubic(t) {\n\treturn t * t * t;\n};\n\nvar easeOutCubic = function easeOutCubic(t) {\n\tvar t1 = t - 1;\n\treturn t1 * t1 * t1 + 1;\n};\n\nvar easeInOutCubic = function easeInOutCubic(t) {\n\treturn t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n};\n\nvar easeInQuart = function easeInQuart(t) {\n\treturn t * t * t * t;\n};\n\nvar easeOutQuart = function easeOutQuart(t) {\n\treturn 1 - --t * t * t * t;\n};\n\nvar easeInOutQuart = function easeInOutQuart(t) {\n\treturn t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n};\n\nvar easeInExpo = function easeInExpo(t) {\n\tif (t === 0) {\n\t\treturn 0;\n\t}\n\treturn Math.pow(2, 10 * (t - 1));\n};\n\nvar easeOutExpo = function easeOutExpo(t) {\n\tif (t === 1) {\n\t\treturn 1;\n\t}\n\treturn -Math.pow(2, -10 * t) + 1;\n};\n\nvar easeInOutExpo = function easeInOutExpo(t) {\n\n\tif (t === 0 || t === 1) {\n\t\treturn t;\n\t}\n\n\tvar scaledTime = t * 2;\n\tvar scaledTime1 = scaledTime - 1;\n\n\tif (scaledTime < 1) {\n\t\treturn 0.5 * Math.pow(2, 10 * scaledTime1);\n\t}\n\n\treturn 0.5 * (-Math.pow(2, -10 * scaledTime1) + 2);\n};\n\nvar easeInCirc = function easeInCirc(t) {\n\tvar scaledTime = t / 1;\n\treturn -1 * (Math.sqrt(1 - scaledTime * t) - 1);\n};\n\nvar easeOutCirc = function easeOutCirc(t) {\n\tvar t1 = t - 1;\n\treturn Math.sqrt(1 - t1 * t1);\n};\n\nvar easeInOutCirc = function easeInOutCirc(t) {\n\n\tvar scaledTime = t * 2;\n\tvar scaledTime1 = scaledTime - 2;\n\n\tif (scaledTime < 1) {\n\t\treturn -0.5 * (Math.sqrt(1 - scaledTime * scaledTime) - 1);\n\t}\n\n\treturn 0.5 * (Math.sqrt(1 - scaledTime1 * scaledTime1) + 1);\n};\n\nvar easeInBack = function easeInBack(t) {\n\tvar magnitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.70158;\n\n\tvar scaledTime = t / 1;\n\treturn scaledTime * scaledTime * ((magnitude + 1) * scaledTime - magnitude);\n};\n\nvar easeOutBack = function easeOutBack(t) {\n\tvar magnitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.70158;\n\n\tvar scaledTime = t / 1 - 1;\n\treturn scaledTime * scaledTime * ((magnitude + 1) * scaledTime + magnitude) + 1;\n};\n\nvar easeInOutBack = function easeInOutBack(t) {\n\tvar magnitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.70158;\n\n\tvar scaledTime = t * 2;\n\tvar scaledTime2 = scaledTime - 2;\n\tvar s = magnitude * 1.525;\n\tif (scaledTime < 1) {\n\t\treturn 0.5 * scaledTime * scaledTime * ((s + 1) * scaledTime - s);\n\t}\n\n\treturn 0.5 * (scaledTime2 * scaledTime2 * ((s + 1) * scaledTime2 + s) + 2);\n};\n\nvar easeOutElastic = function easeOutElastic(t) {\n\tvar magnitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.7;\n\n\n\tvar p = 1 - magnitude;\n\tvar scaledTime = t * 2;\n\n\tif (t === 0 || t === 1) {\n\t\treturn t;\n\t}\n\n\tvar s = p / (2 * Math.PI) * Math.asin(1);\n\treturn Math.pow(2, -10 * scaledTime) * Math.sin((scaledTime - s) * (2 * Math.PI) / p) + 1;\n};\n\nvar easeOutBounce = function easeOutBounce(t) {\n\tvar scaledTime = t / 1;\n\tif (scaledTime < 1 / 2.75) {\n\t\treturn 7.5625 * scaledTime * scaledTime;\n\t} else if (scaledTime < 2 / 2.75) {\n\t\tvar scaledTime2 = scaledTime - 1.5 / 2.75;\n\t\treturn 7.5625 * scaledTime2 * scaledTime2 + 0.75;\n\t} else if (scaledTime < 2.5 / 2.75) {\n\t\tvar _scaledTime = scaledTime - 2.25 / 2.75;\n\t\treturn 7.5625 * _scaledTime * _scaledTime + 0.9375;\n\t} else {\n\t\tvar _scaledTime2 = scaledTime - 2.625 / 2.75;\n\t\treturn 7.5625 * _scaledTime2 * _scaledTime2 + 0.984375;\n\t}\n};\n\nvar EasingFunctions = {\n\t'ease-linear': easeLinear,\n\n\t'ease-in-sine': easeInSine,\n\t'ease-out-sine': easeOutSine,\n\t'ease-in-out-sine': easeInOutSine,\n\n\t'ease-in-cubic': easeInCubic,\n\t'ease-out-cubic': easeOutCubic,\n\t'ease-in-out-cubic': easeInOutCubic,\n\n\t'ease-in-circ': easeInCirc,\n\t'ease-out-circ': easeOutCirc,\n\t'ease-in-out-circ': easeInOutCirc,\n\n\t'ease-in-quad': easeInQuad,\n\t'ease-out-quad': easeOutQuad,\n\t'ease-in-out-quad': easeInOutQuad,\n\n\t'ease-in-quart': easeInQuart,\n\t'ease-out-quart': easeOutQuart,\n\t'ease-in-out-quart': easeInOutQuart,\n\n\t'ease-in-expo': easeInExpo,\n\t'ease-out-expo': easeOutExpo,\n\t'ease-in-out-expo': easeInOutExpo,\n\n\t'ease-in-back': easeInBack,\n\t'ease-out-back': easeOutBack,\n\t'ease-in-out-back': easeInOutBack,\n\n\t'ease-out-elastic': easeOutElastic,\n\t'ease-out-bounce': easeOutBounce\n};\n\naddExtensions(ExtensionType.EASING_FUNCTION, EasingFunctions);\n\n/**\n * animate a certain amount of time (between 0 and 1)\n * @param cb - update function\n * @param complete\n * @param duration - duration in milliseconds\n * @param ease - easing function\n * @param delay\n */\nvar animate = function animate(cb, complete) {\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n var ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeLinear;\n var delay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n return interpolate(function (t) {\n cb(ease(t));\n }, complete, duration, delay);\n};\n\n/**\n * interpolate between 0 and 1 over x amount of frames\n * @param update - update function\n * @param complete\n * @param duration - duration in milliseconds\n * @param delay - milliseconds to wait before starting\n */\nvar interpolate = function interpolate(update) {\n var complete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n var delay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n // no update function supplied -> exit\n if (!update) {\n return null;\n }\n\n // set start time\n var start = null;\n var t = void 0;\n var frame = null;\n\n // animation loop\n var tick = function tick(ts) {\n if (start === null) {\n start = ts;\n }\n\n t = ts - start - delay;\n\n if (t < duration) {\n update(t >= 0 ? t / duration : 0);\n frame = requestAnimationFrame(tick);\n return null;\n }\n\n update(1);\n\n if (complete) {\n complete();\n }\n };\n\n tick(now());\n\n // return cancel function\n return function () {\n cancelAnimationFrame(frame);\n };\n};\n\n/**\n * Translates movements values\n */\nvar translator = function translator() {\n var fps = 24;\n var interval = 1000 / fps;\n\n var frame = null;\n\n var state = {\n velocity: 0,\n origin: 0,\n position: 0,\n destination: 1\n };\n\n var cancel = function cancel() {\n cancelAnimationFrame(frame);\n };\n\n var translate = function translate(cb, from, to, update) {\n // cancel previous animations if are running\n cancel();\n\n // 'to' not supplied, so 'from' is destination\n if (to === null) {\n state.destination = from;\n } else {\n // both supplied, also reset velocity\n state.position = from;\n state.destination = to;\n state.velocity = 0;\n }\n\n // always set origin to current position\n state.origin = state.position;\n\n var last = null;\n var tick = function tick(ts) {\n // queue next tick\n frame = requestAnimationFrame(tick);\n\n // limit fps\n if (!last) {\n last = ts;\n }\n\n var delta = ts - last;\n\n if (delta <= interval) {\n // skip frame\n return;\n }\n\n // align next frame\n last = ts - delta % interval;\n\n update(state, cancel);\n\n cb(state.position);\n };\n\n tick(now());\n };\n\n return {\n getPosition: function getPosition() {\n return state.position;\n },\n cancel: cancel,\n translate: translate\n };\n};\n\n/**\n * Translator builder\n * @param type\n * @param options\n * @returns {*}\n */\nvar createTranslator = function createTranslator(type) {\n for (var _len = arguments.length, options = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n options[_key - 1] = arguments[_key];\n }\n\n var t = translator();\n var updater = {\n update: null,\n cancel: t.cancel,\n getPosition: t.getPosition\n };\n\n if (type === 'arrive') {\n updater.update = arrive.apply(undefined, [t.translate].concat(options));\n } else if (type === 'spring') {\n updater.update = spring.apply(undefined, [t.translate].concat(options));\n } else if (type === 'step') {\n updater.update = step.apply(undefined, [t.translate].concat(options));\n }\n\n return updater;\n};\n\n/**\n * Arrive at destination\n * @param update\n * @param maxVelocity\n * @param friction\n */\nvar arrive = function arrive(update) {\n var maxVelocity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var friction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.01;\n\n return function (cb) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n update(cb, from, to, function (state, cancel) {\n // distance to target\n var distance = state.destination - state.position;\n var halfway = state.origin + (state.destination - state.origin) * 0.5;\n\n // update velocity based on distance\n state.velocity += (-(halfway - state.origin) + distance) * 2 * friction;\n\n // update position by adding velocity\n state.position += state.velocity < 0 ? Math.max(state.velocity, -maxVelocity) : Math.min(state.velocity, maxVelocity);\n\n // we've arrived if we're near target and our velocity is near zero\n if (state.origin < state.destination && state.position >= state.destination || state.origin >= state.destination && state.position <= state.destination) {\n cancel();\n state.velocity = 0;\n state.position = state.destination;\n }\n });\n };\n};\n\nvar step = function step(update) {\n var velocity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.01;\n\n return function (cb) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n update(cb, from, to, function (state, cancel) {\n // update velocity based on distance\n state.velocity = velocity;\n\n // update position by adding velocity\n state.position += state.velocity;\n\n // we've arrived if we're near target and our velocity is near zero\n if (state.origin < state.destination && state.position >= state.destination || state.origin >= state.destination && state.position <= state.destination) {\n cancel();\n state.velocity = 0;\n state.position = state.destination;\n }\n });\n };\n};\n\n/**\n * Animate movement based no spring physics\n * @param update\n * @param stiffness - the higher the more intense the vibration\n * @param damping - a factor that slows down the calculated velocity by a percentage, needs to be less than 1\n * @param mass - the higher the slower the spring springs in action\n * @returns {function(*=, *=)}\n */\nvar spring = function spring(update) {\n var stiffness = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.5;\n var damping = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.75;\n var mass = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;\n\n return function (cb) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n update(cb, from, to, function (state, cancel) {\n // calculate spring force\n var f = -(state.position - state.destination) * stiffness;\n\n // update velocity by adding force based on mass\n state.velocity += f / mass;\n\n // update position by adding velocity\n state.position += state.velocity;\n\n // slow down based on amount of damping\n state.velocity *= damping;\n\n // we've arrived if we're near target and our velocity is near zero\n if (thereYet(state.position, state.destination, state.velocity)) {\n cancel();\n state.position = state.destination;\n state.velocity = 0;\n }\n });\n };\n};\n\nvar thereYet = function thereYet(position, destination, velocity) {\n var errorMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.001;\n\n return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;\n};\n\n/**\n * Returns a function that applies the transitions to the given element\n * @param transitions\n * @returns {function(*)}\n */\nvar createTransitioner = function createTransitioner(transitions) {\n\n\tvar transitioners = transitions.map(function (t) {\n\t\treturn createDurationTransitioner(createTransition(t.name, t.parameters, t.ease), t.origin, t.duration, t.delay);\n\t});\n\n\treturn function (element, direction, complete) {\n\n\t\t// don't run animations when no element is supplied\n\t\tif (!isHTMLElement(element)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar count = transitioners.length;\n\t\ttransitioners.forEach(function (transitioner) {\n\t\t\ttransitioner(element, direction, function () {\n\t\t\t\tcount--;\n\t\t\t\tif (!count && complete) {\n\t\t\t\t\tcomplete(element);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n};\n\nvar createTransition = function createTransition(name, parameters, ease) {\n\tvar easing = ease ? getExtension(ExtensionType.EASING_FUNCTION, ease) : ease;\n\tvar transition = getExtension(ExtensionType.TRANSITION, name);\n\treturn function (element, direction, p) {\n\t\ttransition.apply(undefined, [element, p, direction, easing].concat(toConsumableArray(parameters)));\n\t};\n};\n\nvar createDurationTransitioner = function createDurationTransitioner(transition) {\n\tvar origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '50% 50% 0';\n\tvar duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n\tvar delay = arguments[3];\n\n\n\treturn function (element) {\n\t\tvar direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\t\tvar complete = arguments[2];\n\n\n\t\t// set transform origin\n\t\tsetTransformOrigin(element, origin);\n\n\t\t// run animation\n\t\tinterpolate(function (p) {\n\t\t\ttransition(element, direction, p);\n\t\t}, complete, duration, delay);\n\t};\n};\n\nvar getComposedTransitionActs = function getComposedTransitionActs(transition) {\n\treturn getExtension(ExtensionType.TRANSITION, transition.name).apply(undefined, toConsumableArray(transition.parameters || []));\n};\n\n/**\n * Styler\n * @param state\n * @param base\n */\nvar styler = (function (state) {\n\tvar base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\t// styles that were last applied to the element\n\tstate.lastAppliedStyles = null;\n\n\t// set default style\n\tupdateStyles(state, base, state.root.dataset.style);\n\n\t// setup observer, will observe style attribute so can restyle when changed\n\tstate.styleObserver = observeAttributes(state.root, ['data-style'], function (string) {\n\t\tupdateStyles(state, base, string);\n\t});\n\n\t// adds style setter\n\treturn {\n\t\tsetStyle: function setStyle(css) {\n\t\t\tupdateStyles(state, base, css);\n\t\t}\n\t};\n});\n\nvar updateStyles = function updateStyles(state, base, css) {\n\n\t// don't update if is same\n\tif (state.lastAppliedStyles === css) {\n\t\treturn;\n\t}\n\n\t// remember these styles\n\tstate.lastAppliedStyles = css;\n\n\tstate.style = css ? mergeObjects(base, toStyles(css)) : base;\n\n\tvar intro = [];\n\tvar outro = [];\n\n\tif (state.style.transitionIn && state.style.transitionIn.length) {\n\t\tintro = state.style.transitionIn;\n\t\toutro = state.style.transitionOut;\n\t} else if (state.style.transition && state.style.transition !== 'none') {\n\n\t\tstate.style.transition.forEach(function (transition) {\n\t\t\tvar acts = getComposedTransitionActs(transition);\n\t\t\tintro = intro.concat(acts.intro);\n\t\t\toutro = outro.concat(acts.outro);\n\t\t});\n\t}\n\n\tif (intro && outro) {\n\t\tstate.transitionIn = createTransitioner(intro);\n\t\tstate.transitionOut = createTransitioner(outro);\n\n\t\tstate.skipToTransitionInEnd = createTransitioner(intro.map(clearTiming));\n\t\tstate.skipToTransitionOutEnd = createTransitioner(outro.map(clearTiming));\n\t}\n\n\tstate.dirty = true;\n};\n\nvar clearTiming = function clearTiming(t) {\n\tvar tn = clone(t);\n\ttn.duration = 0;\n\ttn.delay = 0;\n\treturn tn;\n};\n\nvar getBackingStoreRatio = function getBackingStoreRatio(ctx) {\n\treturn ctx[VENDOR_PREFIX + 'BackingStorePixelRatio'] || ctx.backingStorePixelRatio || 1;\n};\n\nvar getDevicePixelRatio = function getDevicePixelRatio() {\n\treturn window.devicePixelRatio || 1;\n};\n\nvar clearCanvas = function clearCanvas(canvas) {\n\tvar ctx = canvas.getContext('2d');\n\tctx.clearRect(0, 0, canvas.width, canvas.height);\n};\n\n/**\n * View Composers\n */\n/**\n * API Utilities\n */\n/**\n * Add default text view\n */\nvar Views = {\n\t'text': function text$$1() {\n\t\treturn function (root) {\n\n\t\t\tvar state = {};\n\n\t\t\tvar draw = function draw(state) {\n\t\t\t\tstate.root.setAttribute('data-value', state.value);\n\t\t\t\ttext(state.root, state.value);\n\t\t\t};\n\n\t\t\treturn Object.assign({}, rooter(state, root, 'text'), updater(state), drawer(state, draw), destroyer(state));\n\t\t};\n\t}\n\n};\n\naddExtensions(ExtensionType.VIEW, Views);\n\n/**\n * Internal API for use by views\n */\nvar API$2 = function API() {\n\treturn {\n\t\tExtension: {\n\t\t\tType: ExtensionType,\n\t\t\tgetExtension: getExtension\n\t\t},\n\t\tUtils: {\n\t\t\ttoPixels: toPixels,\n\t\t\ttoColor: toColor\n\t\t},\n\t\tCanvas: {\n\t\t\tclear: clearCanvas,\n\t\t\tgetDevicePixelRatio: getDevicePixelRatio,\n\t\t\tgetBackingStoreRatio: getBackingStoreRatio\n\t\t},\n\t\tDOM: {\n\t\t\tvisible: isVisible,\n\t\t\tcreate: create$1,\n\t\t\ttransform: setTransform\n\t\t},\n\t\tAnimation: {\n\t\t\tanimate: animate\n\t\t},\n\t\tData: {\n\t\t\trequest: request\n\t\t},\n\t\tDate: {\n\t\t\tperformance: now\n\t\t},\n\t\tView: {\n\t\t\trooter: rooter,\n\t\t\tdrawer: drawer,\n\t\t\tupdater: updater,\n\t\t\tstyler: styler,\n\t\t\tgrouper: grouper,\n\t\t\tresizer: resizer,\n\t\t\tdestroyer: destroyer\n\t\t}\n\t};\n};\n\n/**\n * Base view definitions\n */\nvar createPresenterRoot = function createPresenterRoot(root, definition, presentDefinition) {\n\treturn createRoot(root, definition, presentDefinition);\n};\n\nvar createPresenterRepeater = function createPresenterRepeater(root, definition, presentDefinition) {\n\treturn createRepeater(root, definition, presentDefinition);\n};\n\nvar createPresenterView = function createPresenterView(name, root, style) {\n\tvar view = getExtension(ExtensionType.VIEW, name);\n\treturn view ? view(API$2())(root, style) : null;\n};\n\nvar arrow = function arrow(str, i) {\n\treturn str[i] === '-' && str[i + 1] === '>';\n};\n\nvar string = function string(c) {\n\treturn c === \"'\" || c === '\"';\n};\n\nvar comma = function comma(c) {\n\treturn c === ',';\n};\n\nvar opener = function opener(c) {\n\treturn c === '(';\n};\n\nvar closer = function closer(c) {\n\treturn c === ')';\n};\n\nvar value = function value(v) {\n\treturn v.trim().length !== 0;\n};\n\nvar add = function add(r, v) {\n\treturn r.push(v.trim());\n};\n\nvar token = function token(r, v) {\n\tif (value(v)) {\n\t\tadd(r, v);\n\t\treturn '';\n\t}\n\treturn v;\n};\n\nvar chain = function chain(_chain, output) {\n\tif (_chain.length) {\n\t\toutput.push(_chain.length > 1 ? _chain.concat() : _chain[0]);\n\t}\n\treturn [];\n};\n\nvar parse$1 = function parse(i, str, result) {\n\n\tvar v = '';\n\tvar fns = [];\n\tvar quote = null;\n\tvar hitArrow = false;\n\n\twhile (i < str.length) {\n\n\t\t// character reference\n\t\tvar c = str[i];\n\n\t\t// enter level\n\t\tif (opener(c)) {\n\n\t\t\thitArrow = false;\n\t\t\tvar fn = [v.trim()];\n\n\t\t\ti = parse(i + 1, str, fn);\n\t\t\tc = str[i];\n\n\t\t\tfns.push(fn);\n\t\t\tv = '';\n\t\t}\n\n\t\t// exit level\n\t\telse if (closer(c)) {\n\n\t\t\t\tif (hitArrow && v.trim().length) {\n\t\t\t\t\tfns.push([v.trim()]);\n\t\t\t\t\tv = '';\n\t\t\t\t\thitArrow = false;\n\t\t\t\t}\n\n\t\t\t\tif (value(v)) {\n\t\t\t\t\tadd(fns, v);\n\t\t\t\t}\n\n\t\t\t\tfns = chain(fns, result);\n\n\t\t\t\treturn i + 1;\n\t\t\t}\n\n\t\t\t// function names or arguments\n\t\t\telse {\n\n\t\t\t\t\t// we're in a string\n\t\t\t\t\t// as long as the exit has not been found add to value\n\t\t\t\t\tif (quote !== null && c !== quote) {\n\n\t\t\t\t\t\t// accept any value\n\t\t\t\t\t\tv += c;\n\t\t\t\t\t}\n\t\t\t\t\t// we've found the string exit\n\t\t\t\t\telse if (c === quote) {\n\n\t\t\t\t\t\t\tfns.push(v);\n\t\t\t\t\t\t\tv = '';\n\n\t\t\t\t\t\t\tquote = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// we're not in a string and we found a string opener\n\t\t\t\t\t\telse if (string(c)) {\n\t\t\t\t\t\t\t\tv = '';\n\t\t\t\t\t\t\t\tquote = c;\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// we're not in a string\n\n\t\t\t\t\t\t\t\t// we've found an arrow\n\t\t\t\t\t\t\t\tif (arrow(str, i)) {\n\n\t\t\t\t\t\t\t\t\thitArrow = true;\n\n\t\t\t\t\t\t\t\t\t// we might have finished a function without parenthesis\n\t\t\t\t\t\t\t\t\tif (v.trim().length) {\n\t\t\t\t\t\t\t\t\t\tfns.push([v.trim()]);\n\t\t\t\t\t\t\t\t\t\tv = '';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// skip two additional characters because arrow is of length 2\n\t\t\t\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// we've reached an argument separator\n\t\t\t\t\t\t\t\telse if (comma(c)) {\n\n\t\t\t\t\t\t\t\t\t\tif (hitArrow && v.trim().length) {\n\t\t\t\t\t\t\t\t\t\t\tfns.push([v.trim()]);\n\t\t\t\t\t\t\t\t\t\t\tv = '';\n\t\t\t\t\t\t\t\t\t\t\thitArrow = false;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tfns = chain(fns, result);\n\n\t\t\t\t\t\t\t\t\t\t// add possible previous token\n\t\t\t\t\t\t\t\t\t\tv = token(result, v);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tv += c;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t// next character\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t}\n\n\tif (hitArrow && v.trim().length || !hitArrow && v.trim().length && !fns.length) {\n\t\tfns.push([v.trim()]);\n\t\tv = '';\n\t}\n\n\tchain(fns, result);\n\n\t// add final token\n\ttoken(result, v);\n\n\treturn i;\n};\n\nvar parseTransformChain = function parseTransformChain(string) {\n\tvar result = [];\n\tparse$1(0, string, result);\n\treturn result;\n};\n\nvar isRootDefinition = function isRootDefinition(definition) {\n\treturn definition.children && definition.children.length;\n};\n\nvar cloneDefinition = function cloneDefinition(definition) {\n\n\tvar clone = {};\n\n\tfor (var key in definition) {\n\n\t\tif (!definition.hasOwnProperty(key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'root') {\n\t\t\tclone[key] = definition[key].cloneNode();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'children') {\n\t\t\tclone[key] = definition[key] === null ? null : definition[key].map(cloneDefinition);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'repeat') {\n\t\t\tclone[key] = definition[key] === null ? null : cloneDefinition(definition[key]);\n\t\t\tcontinue;\n\t\t}\n\n\t\tclone[key] = definition[key];\n\t}\n\n\tclone.presenter = null;\n\n\treturn clone;\n};\n\n/**\n * Parsing DOM to DefinitionTree\n * @param nodes\n */\nvar definitionOutline = {\n\troot: null,\n\tkey: null,\n\tview: null,\n\toverlay: null,\n\tpresenter: null,\n\ttransform: null,\n\tlayout: null,\n\tstyle: null,\n\trepeat: null,\n\tchildren: null,\n\tclassName: null\n};\n\nvar toPresenterDefinitionTree = function toPresenterDefinitionTree(nodes) {\n\treturn Array.from(nodes)\n\t// fix to allow nesting of tick counters\n\t// .filter(node => !node.classList.contains('tick'))\n\t.map(function (node) {\n\n\t\tvar definition = mergeObjects(definitionOutline, { root: node });\n\n\t\t// get all properties above from attributes\n\t\tfor (var key in node.dataset) {\n\t\t\tif (!node.dataset.hasOwnProperty(key)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (typeof definition[key] === 'undefined') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefinition[key] = node.dataset[key];\n\t\t}\n\n\t\t// if is repeater set do not parse children as children but define as repeat\n\t\tif (definition.repeat) {\n\n\t\t\t// can only have one repeated child\n\t\t\tdefinition.repeat = toPresenterDefinitionTree(node.children).pop();\n\n\t\t\t// detach repeated elements from DOM\n\t\t\tArray.from(node.children).forEach(function (node) {\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t});\n\t\t}\n\t\t// children are normal children\n\t\telse if (node.children.length) {\n\t\t\t\tdefinition.children = toPresenterDefinitionTree(node.children);\n\t\t\t}\n\n\t\treturn definition;\n\t});\n};\n\nvar createDOMTreeForDefinition = function createDOMTreeForDefinition(definition) {\n\n\treturn definition.map(function (def) {\n\n\t\tdef = mergeObjects(definitionOutline, def);\n\n\t\tif (typeof def.root === 'string') {\n\t\t\tdef.root = document.createElement(def.root);\n\t\t} else {\n\t\t\tdef.root = document.createElement('span');\n\t\t}\n\n\t\tif (def.transform) {\n\t\t\tdef.root.dataset.transform = def.transform;\n\t\t}\n\n\t\tif (def.className) {\n\t\t\tdef.root.className = def.className;\n\t\t}\n\n\t\tif (def.overlay) {\n\t\t\tdef.root.dataset.overlay = def.overlay;\n\t\t}\n\n\t\tif (def.view) {\n\t\t\tdef.root.dataset.view = def.view;\n\t\t\tif (def.style) {\n\t\t\t\tdef.root.dataset.style = def.style;\n\t\t\t}\n\t\t\tdef.repeat = null;\n\t\t} else {\n\n\t\t\tif (def.layout) {\n\t\t\t\tdef.root.dataset.layout = def.layout;\n\t\t\t}\n\n\t\t\tif (def.repeat) {\n\t\t\t\tdef.root.dataset.repeat = true;\n\t\t\t\tdef.repeat = createDOMTreeForDefinition(def.children).pop();\n\t\t\t} else if (def.children) {\n\t\t\t\tdef.children = createDOMTreeForDefinition(def.children);\n\t\t\t\tdef.children.forEach(function (child) {\n\t\t\t\t\tdef.root.appendChild(child.root);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn def;\n\t});\n};\n\n/**\n * Presenting values\n */\nvar createPresenterByDefinition = function createPresenterByDefinition(definition, presentDefinition) {\n\n\tvar presenter = void 0;\n\n\tif (definition.repeat) {\n\t\tpresenter = createPresenterRepeater(definition.root, definition.repeat, presentDefinition);\n\t} else if (typeof definition.view === 'string') {\n\t\tpresenter = createPresenterView(definition.view, definition.root, definition.style);\n\t} else if (isRootDefinition(definition)) {\n\t\tpresenter = createPresenterRoot(definition.root, definition.children, presentDefinition);\n\t}\n\n\treturn presenter;\n};\n\nvar presentTick = function presentTick(instance) {\n\n\tvar isDrawing = false;\n\n\tvar update = function update(definition, value) {\n\n\t\tdefinition.transform(value, function (output) {\n\t\t\tdefinition.presenter.update(output);\n\t\t}, instance);\n\n\t\tif (!isDrawing) {\n\t\t\tisDrawing = true;\n\t\t\tdraw();\n\t\t}\n\t};\n\n\tvar draw = function draw() {\n\t\tinstance.baseDefinition.presenter.draw();\n\t\trequestAnimationFrame(draw);\n\t};\n\n\tvar presentDefinition = function presentDefinition(definition) {\n\t\tdefinition.presenter = createPresenterByDefinition(definition, presentDefinition);\n\t\tdefinition.transform = toTransformComposition(definition.transform, instance);\n\t\treturn update;\n\t};\n\n\treturn presentDefinition(instance.baseDefinition);\n};\n\n/**\n * Transform\n */\nvar composeAsync = function composeAsync(instance) {\n\tfor (var _len = arguments.length, funcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\tfuncs[_key - 1] = arguments[_key];\n\t}\n\n\treturn function (initialValue, callback) {\n\n\t\tfunction compose(i, value) {\n\n\t\t\t// return end result\n\t\t\tif (funcs.length <= i) {\n\t\t\t\tcallback(value);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfuncs[i](value, partial(compose, [i + 1]), instance);\n\t\t}\n\n\t\tcompose(0, initialValue);\n\t};\n};\n\nvar partial = function partial(fn) {\n\tvar initialArgs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\tvar ctx = arguments[2];\n\n\treturn function () {\n\t\tvar args = Array.from(initialArgs);\n\t\tArray.prototype.push.apply(args, arguments);\n\t\treturn fn.apply(ctx, args);\n\t};\n};\n\nvar toTransformComposition = function toTransformComposition(string, instance) {\n\n\t// no composition\n\tif (!string) {\n\t\treturn function (value, cb) {\n\t\t\treturn cb(value);\n\t\t};\n\t}\n\n\t// already function no need to compose\n\tif (typeof string === 'function') {\n\t\treturn string;\n\t}\n\n\t// wrap in default transform\n\t// if is single transform force parenthesis as it must be a fn\n\tvar result = parseTransformChain('transform(' + (/^[a-z]+$/.test(string) ? string + '()' : string) + ')');\n\treturn compose(result, instance);\n};\n\nvar compose = function compose(chain, instance) {\n\n\tvar composition = chain.map(function (item) {\n\n\t\t// get name\n\t\tvar name = item.shift();\n\n\t\t// get related function\n\t\tvar func = getExtension(ExtensionType.TRANSFORM, name) || function (value, cb, instance) {\n\t\t\tcb(value);\n\t\t};\n\n\t\t// other items in array are parameters\n\t\tvar params = item.map(function (parameter) {\n\n\t\t\t// if is array turn into function\n\t\t\tif (Array.isArray(parameter)) {\n\n\t\t\t\t// normal transform\n\t\t\t\tif (typeof parameter[0] === 'string') {\n\t\t\t\t\treturn compose([parameter], instance);\n\t\t\t\t}\n\n\t\t\t\t// chain of transforms\n\t\t\t\treturn compose(parameter, instance);\n\t\t\t}\n\n\t\t\treturn toParameter(parameter);\n\t\t});\n\n\t\treturn func.apply(undefined, toConsumableArray(params));\n\t});\n\n\treturn composeAsync.apply(undefined, [instance].concat(toConsumableArray(composition)));\n};\n\nvar toFunctionOutline = function toFunctionOutline(string) {\n\tvar name = string.match(/[a-z]+/)[0];\n\tvar parameters = toParameters(string.substring(name.length));\n\treturn {\n\t\tname: name,\n\t\tparameters: parameters\n\t};\n};\n\nvar toParameters = function toParameters(string) {\n\treturn (string.match(/('.+?')|(\".+?\")|(\\[.+?])|([.:\\-\\d\\sa-zA-Z]+%?)/g) || []).map(trim).filter(function (str) {\n\t\treturn str.length;\n\t}).map(toParameter);\n};\n\nvar trimEdges = function trimEdges(string) {\n\treturn string.substring(1, string.length - 1);\n};\n\nvar isProbablyISODate = /^([\\d]{4}-[\\d]{1,2}-[\\d]{1,2})/;\nvar isBoolean = /^(true|false)$/;\nvar isString = /^[\\a-zA-Z]+$/;\nvar isZeroString = /^0[\\d]+/;\nvar isQuotedString = /^('|\")/;\nvar isNumber = /^-?(?:\\d+)?(?:\\.|0\\.)?[\\d]+$/;\nvar isArray = /^(\\[)/;\n\nvar toParameter = function toParameter(string) {\n\n\tif (isBoolean.test(string)) {\n\t\treturn string === 'true';\n\t}\n\n\tif (isArray.test(string)) {\n\t\treturn toParameters(trimEdges(string));\n\t}\n\n\tif (isProbablyISODate.test(string)) {\n\t\treturn dateFromISO(string);\n\t}\n\n\tif (isQuotedString.test(string)) {\n\t\treturn trimEdges(string);\n\t}\n\n\tif (isString.test(string) || isZeroString.test(string)) {\n\t\treturn string;\n\t}\n\n\tif (isNumber.test(string)) {\n\t\treturn parseFloat(string);\n\t}\n\n\t// is CSS unit (parsing will be handled by function that receives this value)\n\treturn string;\n};\n\nvar toCSSValue = function toCSSValue(value) {\n\tvar parts = (value + '').match(/(-?[.\\d]+)(%|ms|s|deg|cm|em|ch|ex|q|in|mm|pc|pt|px|vh|vw|vmin|vmax)?/);\n\treturn {\n\t\tvalue: parseFloat(parts[1]),\n\t\tunits: parts[2]\n\t};\n};\n\n/**\n * @param a { object }\n * @param b { object }\n */\nvar mergeObjects = function mergeObjects(a) {\n\tvar b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tvar key = void 0;\n\tvar obj = {};\n\n\tfor (key in a) {\n\t\tif (!a.hasOwnProperty(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tobj[key] = typeof b[key] === 'undefined' ? a[key] : b[key];\n\t}\n\n\treturn obj;\n};\n\n/**\n * @param string { string }\n */\nvar toFunctionReference = function toFunctionReference(string) {\n\tvar ref = window;\n\tvar levels = string.split('.');\n\tlevels.forEach(function (level, index) {\n\t\tif (!ref[levels[index]]) {\n\t\t\treturn;\n\t\t}\n\t\tref = ref[levels[index]];\n\t});\n\treturn ref !== window ? ref : null;\n};\n\n/**\n *\n */\nvar toValue = function toValue(string) {\n\n\t// capture for object string\n\tif (/^(?:[\\w]+\\s?:\\s?[\\w.]+,\\s?)+(?:[\\w]+\\s?:\\s?[\\w.]+)$/g.test(string)) {\n\t\treturn string.match(/(?:(\\w+)\\s?:\\s?([\\w.]+))/g).reduce(function (obj, current) {\n\t\t\tvar parts = current.split(':');\n\t\t\tobj[parts[0]] = toParameter(parts[1]);\n\t\t\treturn obj;\n\t\t}, {});\n\t}\n\n\t// handle the other options\n\treturn toParameter(string);\n};\n\n/**\n * @param value { * }\n */\n\n\n/**\n * @param value { * }\n */\nvar toInt = function toInt(value) {\n\treturn parseInt(value, 10);\n};\n\n/**\n * @param string { string }\n */\nvar trim = function trim(string) {\n\treturn string.trim();\n};\n\n/**\n * @param string { string }\nexport const lowercaseFirstLetter = (string) => string.charAt(0).toLowerCase() + string.slice(1);\n */\n\n/**\n * @param string { string }\n */\nvar capitalizeFirstLetter = function capitalizeFirstLetter(string) {\n\treturn string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * @param string { string }\n */\nvar dashesToCamels = function dashesToCamels(string) {\n\treturn string.replace(/-./g, function (sub) {\n\t\treturn sub.charAt(1).toUpperCase();\n\t});\n};\n\n/**\n * @param string\nexport const camelsToDashes = string => string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n */\n\n/**\n * @param obj { object }\n */\nvar clone = function clone(obj) {\n\tif ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null) {\n\t\treturn JSON.parse(JSON.stringify(obj));\n\t}\n\treturn obj;\n};\n\nvar copyArray = function copyArray(arr) {\n\treturn arr.slice();\n};\n\nvar random = function random() {\n\tvar min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\tvar max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n\treturn min + Math.random() * (max - min);\n};\n\nvar range = function range(n) {\n\tvar arr = [];\n\tvar i = 0;\n\tfor (; i < n; i++) {\n\t\tarr.push(i);\n\t}\n\treturn arr;\n};\n\nvar shuffle = function shuffle(a) {\n\tfor (var i = a.length; i; i--) {\n\t\tvar j = Math.floor(Math.random() * i);\n\t\tvar _ref = [a[j], a[i - 1]];\n\t\ta[i - 1] = _ref[0];\n\t\ta[j] = _ref[1];\n\t}\n};\n\n\n\nvar now = function now() {\n\treturn window.performance.now();\n};\n\nvar request = function request(url, success, error, options) {\n\tvar xhr = new XMLHttpRequest();\n\tif (options) {\n\t\toptions(xhr);\n\t}\n\txhr.open('GET', url, true);\n\txhr.onload = function () {\n\t\tsuccess(xhr.response);\n\t};\n\tif (error) {\n\t\txhr.onerror = function () {\n\t\t\terror(xhr, xhr.status);\n\t\t};\n\t}\n\txhr.send();\n};\n\nvar equal = function equal(a, b) {\n\tif (isObject(a)) {\n\t\treturn equalObjects(a, b);\n\t}\n\tif (Array.isArray(a)) {\n\t\treturn equalArrays(a, b);\n\t}\n\treturn a === b;\n};\n\nvar isObject = function isObject(obj) {\n\treturn obj === Object(obj);\n};\n\nvar equalObjects = function equalObjects(a, b) {\n\tfor (var i in a) {\n\t\tif (!b.hasOwnProperty(i) || a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\nvar equalArrays = function equalArrays(a, b) {\n\treturn a.length == b.length && a.every(function (v, i) {\n\t\treturn v === b[i];\n\t});\n};\n\nvar keysToList = function keysToList(obj) {\n\treturn Object.keys(obj).map(function (k) {\n\t\treturn '\"' + k + '\"';\n\t}).join(', ');\n};\n\n/**\n * Tick\n */\n\nvar Tick = function () {\n\tfunction Tick() {\n\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\t\tvar element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.createElement('div');\n\t\tclassCallCheck(this, Tick);\n\n\n\t\t// set base configuration options\n\t\tthis._options = mergeObjects(Tick.options(), options);\n\n\t\t// instance properties\n\t\tthis._element = element;\n\t\tthis._value = null;\n\t\tthis._observer = null;\n\t\tthis._viewDefinition = null;\n\t\tthis._constants = null;\n\t\tthis._presets = null;\n\t\tthis._updater = null;\n\n\t\t// callback methods\n\t\tthis._didInit = null;\n\t\tthis._didDestroy = null;\n\t\tthis._willDestroy = null;\n\t\tthis._didUpdate = null;\n\n\t\t// initialise Tick\n\t\tthis._init();\n\t}\n\n\t/**\n * Default options for this control\n */\n\n\n\tcreateClass(Tick, [{\n\t\tkey: 'isRootElement',\n\n\n\t\t/**\n * Public API\n */\n\t\tvalue: function isRootElement(element) {\n\t\t\treturn this._element === element;\n\t\t}\n\t}, {\n\t\tkey: 'setConstant',\n\t\tvalue: function setConstant$$1(key, value) {\n\t\t\tthis._constants[key] = value;\n\t\t}\n\t}, {\n\t\tkey: 'getConstants',\n\t\tvalue: function getConstants$$1() {\n\t\t\treturn this._constants;\n\t\t}\n\t}, {\n\t\tkey: 'getConstant',\n\t\tvalue: function getConstant(key) {\n\t\t\treturn this._constants[key];\n\t\t}\n\t}, {\n\t\tkey: 'setPreset',\n\t\tvalue: function setPreset$$1(key, fn) {\n\t\t\tthis._presets[key] = fn;\n\t\t}\n\t}, {\n\t\tkey: 'getPreset',\n\t\tvalue: function getPreset(key) {\n\t\t\treturn this._presets[key];\n\t\t}\n\t}, {\n\t\tkey: 'destroy',\n\t\tvalue: function destroy$$1() {\n\t\t\tthis._willDestroy(this);\n\n\t\t\t// clean up\n\t\t\tthis._observer.disconnect();\n\n\t\t\t// destroy presenters\n\t\t\tthis.baseDefinition.presenter.destroy();\n\n\t\t\tthis._didDestroy(this);\n\t\t}\n\t}, {\n\t\tkey: 'redraw',\n\t\tvalue: function redraw() {\n\t\t\tif (!this.baseDefinition || !this.baseDefinition.presenter) return;\n\t\t\tthis.baseDefinition.presenter.reset();\n\t\t\tthis.baseDefinition.presenter.draw();\n\t\t\tthis._updater(this.baseDefinition, this._value);\n\t\t}\n\n\t\t/**\n * Private Methods\n */\n\n\t}, {\n\t\tkey: '_init',\n\t\tvalue: function _init() {\n\t\t\tvar _this = this;\n\n\t\t\t// move options to properties\n\t\t\tthis._viewDefinition = this._options.view;\n\t\t\tthis._willDestroy = this._options.willDestroy;\n\t\t\tthis._didDestroy = this._options.didDestroy;\n\t\t\tthis._didInit = this._options.didInit;\n\t\t\tthis._didUpdate = this._options.didUpdate;\n\t\t\tthis._value = this._options.value;\n\t\t\tthis._presets = this._options.presets;\n\t\t\tthis._constants = this._options.constants;\n\n\t\t\t// no more use of options behind this line\n\t\t\t// ---------------------------------------\n\n\t\t\t// always add class tick to element (make sure it's only added once)\n\t\t\tif (!this._element.classList.contains('tick')) {\n\t\t\t\tthis._element.classList.add('tick');\n\t\t\t}\n\n\t\t\t// use mutation observer to detect changes to value attribute\n\t\t\tthis._observer = observeAttributes(this._element, ['data-value'], function (value) {\n\t\t\t\t_this.value = value;\n\t\t\t});\n\n\t\t\t// force default view root, move children of current root to this element\n\t\t\tif (this._viewDefinition.root !== this._element) {\n\t\t\t\tArray.from(this._viewDefinition.root.children).forEach(function (node) {\n\t\t\t\t\t_this._element.appendChild(node);\n\t\t\t\t});\n\t\t\t\tthis._viewDefinition.root = this._element;\n\t\t\t}\n\n\t\t\t// no default view presenter defined, fallback to text\n\t\t\tif (!this._viewDefinition.view && !this._viewDefinition.children) {\n\t\t\t\tthis._viewDefinition.view = 'text';\n\t\t\t}\n\n\t\t\t// setup root presenter\n\t\t\tthis._updater = presentTick(this);\n\n\t\t\t// update for first time\n\t\t\tif (this.value !== null) {\n\t\t\t\tthis._update(this.value);\n\t\t\t}\n\n\t\t\t// set to ready state\n\t\t\tthis._element.dataset.state = 'initialised';\n\n\t\t\t// done with init\n\t\t\tthis._didInit(this, this.value);\n\t\t}\n\t}, {\n\t\tkey: '_update',\n\t\tvalue: function _update(value) {\n\n\t\t\tthis._updater(this.baseDefinition, value);\n\n\t\t\tthis._didUpdate(this, value);\n\t\t}\n\t}, {\n\t\tkey: 'baseDefinition',\n\n\n\t\t/**\n * Public Properties\n */\n\t\tget: function get$$1() {\n\t\t\treturn this._viewDefinition;\n\t\t}\n\t}, {\n\t\tkey: 'root',\n\t\tget: function get$$1() {\n\t\t\treturn this._element;\n\t\t}\n\t}, {\n\t\tkey: 'value',\n\t\tget: function get$$1() {\n\t\t\treturn this._value;\n\t\t},\n\t\tset: function set$$1(value) {\n\t\t\tthis._value = typeof value === 'string' ? toValue(value) : value;\n\t\t\tthis._update(value);\n\t\t}\n\t}], [{\n\t\tkey: 'options',\n\t\tvalue: function options() {\n\t\t\treturn {\n\t\t\t\tconstants: getConstants(),\n\t\t\t\tpresets: getPresets(),\n\t\t\t\tvalue: null,\n\t\t\t\tview: null,\n\t\t\t\tdidInit: function didInit(tick) {},\n\t\t\t\tdidUpdate: function didUpdate(tick, value) {},\n\t\t\t\twillDestroy: function willDestroy(tick) {},\n\t\t\t\tdidDestroy: function didDestroy(tick) {}\n\t\t\t};\n\t\t}\n\t}]);\n\treturn Tick;\n}();\n\nvar transformDurationUnit = function transformDurationUnit(value, single, plural, progress) {\n\treturn {\n\t\tlabel: value === 1 ? single : plural,\n\t\tprogress: value / progress,\n\t\tvalue: value\n\t};\n};\n\n/**\n * Tick DOM interface\n */\nvar instances = [];\n\nvar setConstant = function setConstant(key, value) {\n\tconstants[key] = value;\n};\n\nvar setPreset = function setPreset(key, value) {\n\tpresets[key] = value;\n};\n\nvar getConstants = function getConstants() {\n\treturn constants;\n};\n\nvar getPresets = function getPresets() {\n\treturn presets;\n};\n\nvar constants = {\n\tYEAR_PLURAL: 'Years',\n\tYEAR_SINGULAR: 'Year',\n\tMONTH_PLURAL: 'Months',\n\tMONTH_SINGULAR: 'Month',\n\tWEEK_PLURAL: 'Weeks',\n\tWEEK_SINGULAR: 'Week',\n\tDAY_PLURAL: 'Days',\n\tDAY_SINGULAR: 'Day',\n\tHOUR_PLURAL: 'Hours',\n\tHOUR_SINGULAR: 'Hour',\n\tMINUTE_PLURAL: 'Minutes',\n\tMINUTE_SINGULAR: 'Minute',\n\tSECOND_PLURAL: 'Seconds',\n\tSECOND_SINGULAR: 'Second',\n\tMILLISECOND_PLURAL: 'Milliseconds',\n\tMILLISECOND_SINGULAR: 'Millisecond'\n};\n\nvar presets = {\n\ty: function y(value, constants) {\n\t\treturn transformDurationUnit(value, constants.YEAR_SINGULAR, constants.YEAR_PLURAL, 10);\n\t},\n\tM: function M(value, constants) {\n\t\treturn transformDurationUnit(value, constants.MONTH_SINGULAR, constants.MONTH_PLURAL, 12);\n\t},\n\tw: function w(value, constants) {\n\t\treturn transformDurationUnit(value, constants.WEEK_SINGULAR, constants.WEEK_PLURAL, 52);\n\t},\n\td: function d(value, constants) {\n\t\treturn transformDurationUnit(value, constants.DAY_SINGULAR, constants.DAY_PLURAL, 365);\n\t},\n\th: function h(value, constants) {\n\t\treturn transformDurationUnit(value, constants.HOUR_SINGULAR, constants.HOUR_PLURAL, 24);\n\t},\n\tm: function m(value, constants) {\n\t\treturn transformDurationUnit(value, constants.MINUTE_SINGULAR, constants.MINUTE_PLURAL, 60);\n\t},\n\ts: function s(value, constants) {\n\t\treturn transformDurationUnit(value, constants.SECOND_SINGULAR, constants.SECOND_PLURAL, 60);\n\t},\n\tmi: function mi(value, constants) {\n\t\treturn transformDurationUnit(value, constants.MILLISECOND_SINGULAR, constants.MILLISECOND_PLURAL, 1000);\n\t}\n};\n\nvar attributes = {\n\t'value': toValue,\n\t'didInit': toFunctionReference,\n\t'didUpdate': toFunctionReference,\n\t'didDestroy': toFunctionReference,\n\t'willDestroy': toFunctionReference\n};\n\nvar getOptionsFromAttributes = function getOptionsFromAttributes(element) {\n\tvar transfomers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\tvar defaults$$1 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n\n\tvar dataset = element.dataset;\n\n\tvar options = {\n\t\tmeta: {}\n\t};\n\n\tfor (var prop in dataset) {\n\n\t\tif (!dataset.hasOwnProperty(prop)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar valueTransformer = transfomers[prop];\n\t\tvar value = dataset[prop];\n\n\t\tif (valueTransformer) {\n\t\t\tvalue = valueTransformer(value);\n\t\t\tvalue = value === null ? clone(defaults$$1[prop]) : value;\n\t\t\toptions[prop] = value;\n\t\t}\n\t}\n\n\treturn options;\n};\n\nvar indexOfElement = function indexOfElement(instances, element) {\n\tvar i = 0;\n\tvar l = instances.length;\n\tfor (; i < l; i++) {\n\t\tif (instances[i].isRootElement(element)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\nvar parse = function parse(context) {\n\n\tvar elements = void 0;\n\tvar element = void 0;\n\tvar i = void 0;\n\tvar instances = [];\n\n\t// find all crop elements and bind Crop behavior\n\telements = context.querySelectorAll('.tick:not([data-state])');\n\ti = elements.length;\n\n\twhile (i--) {\n\t\telement = elements[i];\n\t\tinstances.push(create(element));\n\t}\n\n\treturn instances;\n};\n\nvar find = function find(element) {\n\tvar result = instances.filter(function (instance) {\n\t\treturn instance.isRootElement(element);\n\t});\n\treturn result ? result[0] : null;\n};\n\nvar getDefaultOptions = function getDefaultOptions() {\n\treturn _extends({}, Tick.options(), { constants: _extends({}, constants), presets: _extends({}, presets) });\n};\n\nvar create = function create() {\n\tvar element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\n\t// if first argument is options object correct parameter values\n\tif (element && !isHTMLElement(element)) {\n\t\toptions = element;\n\t\telement = undefined;\n\t}\n\n\t// if already in array, can't create another on this location in the DOM\n\tif (element && find(element)) {\n\t\treturn;\n\t}\n\n\t// if view defined\n\tif (options && options.view) {\n\t\toptions.view = createDOMTreeForDefinition([options.view])[0];\n\t}\n\n\t// if no options supplied, get the options from the element attributes\n\tif (!options && element) {\n\t\toptions = getOptionsFromAttributes(element, attributes, getDefaultOptions());\n\t}\n\n\t// if element supplied, view is either default view or defined by child elements\n\tif (element) {\n\n\t\t// no options defined, set blank options object\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\t// no default view defined\n\t\tif (!options.view) {\n\t\t\toptions.view = toPresenterDefinitionTree([element])[0];\n\t\t}\n\t}\n\n\t// instance (pass element to set root)\n\tvar instance = new Tick(options, element);\n\n\t// add new instance\n\tinstances.push(instance);\n\n\t// return the instance\n\treturn instance;\n};\n\nvar destroy = function destroy(element) {\n\n\tvar index = indexOfElement(instances, element);\n\n\tif (index < 0) {\n\t\treturn false;\n\t}\n\n\tinstances[index].destroy();\n\tinstances.splice(index, 1);\n\n\treturn true;\n};\n\nvar time = function time(fn) {\n\treturn function () {\n\t\tsetTimeout(fn, 0);\n\t};\n};\n\nvar now$2 = function now$$1() {\n\treturn Date.now();\n};\n\nvar setTimer = function setTimer(cb) {\n\tvar interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n\n\tvar settings = mergeObjects({ autostart: true }, options);\n\n\tvar tickExpectedTime = null;\n\tvar tickStartTime = null;\n\tvar sleepStartTime = null;\n\tvar totalSleepTime = 0;\n\tvar sleepIntervalOffset = null;\n\n\tvar paused = false;\n\n\tvar timer = null;\n\n\tvar isPaused = function isPaused() {\n\t\treturn paused;\n\t};\n\n\tvar isStarted = function isStarted() {\n\t\treturn tickStartTime !== null;\n\t};\n\n\tvar isDocumentHidden = function isDocumentHidden() {\n\t\treturn document.hidden;\n\t};\n\n\t// timer tick\n\tvar tick = function tick() {\n\n\t\tvar currentTime = now$2();\n\n\t\tvar timeoutErrorOffset = tickExpectedTime - currentTime;\n\n\t\tvar timeout = interval + timeoutErrorOffset;\n\n\t\t// calculate new expected time\n\t\ttickExpectedTime = currentTime + timeout;\n\n\t\t// calculate total runtime\n\t\tvar runtime = currentTime - tickStartTime - totalSleepTime + timeoutErrorOffset;\n\n\t\t// let others know total runtime of counter\n\t\tcb(runtime);\n\n\t\t// new timeout\n\t\ttimer = setTimeout(tick, timeout);\n\t};\n\n\tvar start = function start() {\n\n\t\t// if paused, run resume instead (makes building a stopwatch easier)\n\t\tif (isPaused()) {\n\t\t\tresume();\n\t\t\treturn;\n\t\t}\n\n\t\t// if already running we don't do anything, can't start twice need to stop first\n\t\tif (isStarted()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// the moment we set the timeout\n\t\ttickStartTime = now$2();\n\n\t\t// call callback immidiately with zero value\n\t\tsetTimeout(function () {\n\t\t\tcb(0);\n\t\t}, 0);\n\n\t\t// listen for changes in visibility\n\t\tstartListeningForVisibilityChanges();\n\n\t\t// stop here if document is hidden at start time\n\t\tif (isDocumentHidden()) {\n\t\t\tdidHideDocument();\n\t\t\treturn;\n\t\t}\n\n\t\t// the moment the timeout should end\n\t\ttickExpectedTime = now$2() + interval;\n\n\t\t// start ticking\n\t\ttimer = setTimeout(function () {\n\t\t\ttick();\n\t\t}, interval);\n\t};\n\n\tvar stop = function stop() {\n\t\t// can always stop\n\n\t\tclearTimeout(timer);\n\t\ttimer = null;\n\t\ttickStartTime = null;\n\t\ttickExpectedTime = null;\n\t\tsleepStartTime = null;\n\t\ttotalSleepTime = 0;\n\t\tsleepIntervalOffset = null;\n\t\tpaused = false;\n\n\t\tstopListeningForVisibilityChanges();\n\t};\n\n\tvar reset = function reset() {\n\t\t// can always reset\n\t\tstop();\n\t\tstart();\n\t};\n\n\t/**\n * Pause / Resume\n */\n\tvar pause = function pause() {\n\n\t\t// can't pause if not running or if is hidden\n\t\tif (!isStarted() || isDocumentHidden()) {\n\t\t\treturn;\n\t\t}\n\n\t\tpaused = true;\n\n\t\tstopListeningForVisibilityChanges();\n\n\t\tsleep();\n\t};\n\n\tvar resume = function resume() {\n\n\t\t// can't resume if not paused if not started or if hidden\n\t\tif (!isPaused() || !isStarted() || isDocumentHidden()) {\n\t\t\treturn;\n\t\t}\n\n\t\tpaused = false;\n\n\t\tstartListeningForVisibilityChanges();\n\n\t\twake();\n\t};\n\n\t// start sleeping\n\tvar sleep = function sleep() {\n\t\tclearTimeout(timer);\n\t\tsleepStartTime = now$2();\n\t\tsleepIntervalOffset = tickExpectedTime - sleepStartTime;\n\t};\n\n\t// wake from hidden or pause stated\n\tvar wake = function wake() {\n\n\t\t// need to remember the wait duration\n\t\ttotalSleepTime += now$2() - sleepStartTime;\n\t\tsleepStartTime = null;\n\n\t\t// as we are going to call tick immidiately we expect the time to be now\n\t\ttickExpectedTime = now$2() + sleepIntervalOffset;\n\n\t\t// start ticking\n\t\ttimer = setTimeout(function () {\n\t\t\ttick();\n\t\t}, sleepIntervalOffset);\n\t};\n\n\t/**\n * Document Visibility Change\n */\n\tvar didHideDocument = function didHideDocument() {\n\n\t\t// can only be called if the timer is currently running so no checks\n\t\tsleep();\n\t};\n\n\tvar didShowDocument = function didShowDocument() {\n\n\t\t// can only be called if the timer was running before (but could have been stopped in the mean time)\n\t\tif (!isStarted()) {\n\t\t\treturn;\n\t\t}\n\n\t\twake();\n\t};\n\n\tvar stopListeningForVisibilityChanges = function stopListeningForVisibilityChanges() {\n\t\tdocument.removeEventListener('visibilitychange', handleVisibilityChange);\n\t};\n\n\tvar startListeningForVisibilityChanges = function startListeningForVisibilityChanges() {\n\t\tdocument.addEventListener('visibilitychange', handleVisibilityChange);\n\t};\n\n\tvar handleVisibilityChange = function handleVisibilityChange() {\n\t\tif (isDocumentHidden()) {\n\t\t\tdidHideDocument();\n\t\t} else {\n\t\t\tdidShowDocument();\n\t\t}\n\t};\n\n\t/**\n * Go time! (or not)\n */\n\tif (settings.autostart) {\n\t\tstart();\n\t}\n\n\t/**\n * API\n */\n\treturn {\n\t\tstart: start,\n\t\tstop: time(stop),\n\t\treset: time(reset),\n\t\tpause: time(pause),\n\t\tresume: resume\n\t};\n};\n\nvar toInterval = function toInterval(string) {\n\tif (!/^[\\d]+/.test(string)) {\n\t\tstring = '1 ' + string;\n\t}\n\tvar parts = string.split(' ');\n\treturn parseFloat(parts[0]) * TimeUnit[parts[1].toLowerCase()];\n};\n\nvar toTime = function toTime(date, time) {\n\treturn setTime(date, time.split(':').map(toInt));\n};\n\nvar toYearlyMoment = function toYearlyMoment(date, string) {\n\n\t/*\n every 1st of november at 12:00\n every 25th of november at 13:00 wait 10 seconds\n every 25th of november from 10 till 15 every 10 minutes\n */\n\n\tvar parts = string.match(/januari|februari|march|april|may|june|july|august|september|october|november|december|[\\d]+th|\\dst|\\dnd|first|last|at\\s[\\d]+(?::[\\d]+)?(?::[\\d]+)?/g);\n\n\t// no `at time` supplied\n\tif (parts.length > 1) {\n\t\tvar rest = '';\n\t\tparts.forEach(function (p) {\n\t\t\trest = string.split(p)[1] || '';\n\t\t});\n\t\tvar wait = rest.trim().match(/wait\\s[\\d]+\\s[a-z]+/);\n\t\tif (wait) {\n\t\t\tparts.push(wait[0]);\n\t\t}\n\t}\n\n\t// to moment object\n\tvar moment = parts.reduce(function (obj, part) {\n\n\t\t// is month day (1st, 2nd, 12th, first, last)\n\t\tif (/([\\d]+th|\\dst|\\dnd|first|last)/.test(part)) {\n\t\t\tobj.day = /^[\\d]/.test(part) ? parseInt(part, 10) : part === 'first' ? 1 : part;\n\t\t}\n\n\t\t// if is time (at 12:00)\n\t\tif (/^at/.test(part)) {\n\t\t\tobj.time = toTime(clone$1(date), part.substr(3));\n\t\t}\n\n\t\t// is waiting period\n\t\telse if (/wait/.test(part)) {\n\t\t\t\tobj.idle = toInterval(part.substr(5));\n\t\t\t}\n\n\t\t\t// must be month\n\t\t\telse if (/^[\\a-zA-Z]+$/.test(part)) {\n\t\t\t\t\tobj.month = part;\n\t\t\t\t}\n\n\t\treturn obj;\n\t}, {\n\t\tidle: null,\n\t\tday: null,\n\t\tmonth: null,\n\t\ttime: null,\n\t\tdate: null,\n\t\tdist: null,\n\t\twait: false\n\t});\n\n\tif (!moment.time) {\n\n\t\t// set to day\n\t\t// move to first day (so when the month changes its not accidentally out of range)\n\t\tmoment.time = clone$1(date);\n\t\tmoment.time.setDate(1);\n\t\tmoment.time = setMonth(moment.time, moment.month);\n\t\tmoment.time = setDayOfMonth(moment.time, moment.day);\n\n\t\t// if so get first valid date and use that for time\n\t\tvar hourlyMoment = toHourlyMoment(moment.time, string);\n\n\t\t// waiting\n\t\tif (hourlyMoment.wait) {\n\t\t\treturn moment;\n\t\t}\n\n\t\t// copy either date or from time\n\t\tmoment.time = clone$1(sameDate(date, moment.time) && hourlyMoment.date ? hourlyMoment.date : hourlyMoment.from);\n\n\t\t// test if has already passed, if so, set to hourly from for next month\n\t\tvar dist = moment.time - date;\n\t\tif (dist < 0) {\n\n\t\t\t// move to next year\n\t\t\tmoment.time = clone$1(hourlyMoment.from);\n\t\t\tmoment.time.setFullYear(moment.time.getFullYear() + 1);\n\n\t\t\t// recalculate distance\n\t\t\tdist = moment.time - date;\n\t\t}\n\n\t\tmoment.dist = dist;\n\t} else {\n\n\t\t// correct time to given month\n\t\tmoment.time.setDate(1);\n\t\tmoment.time = setMonth(moment.time, moment.month);\n\t\tmoment.time = setDayOfMonth(moment.time, moment.day);\n\n\t\tvar _dist = moment.time - date;\n\t\tvar distOverflow = 0;\n\t\tif (_dist < 0) {\n\n\t\t\tdistOverflow = _dist;\n\n\t\t\t// move to next year\n\t\t\tmoment.time.setFullYear(moment.time.getFullYear() + 1);\n\n\t\t\t// recalculate distance\n\t\t\t_dist = moment.time - date;\n\t\t}\n\n\t\t// get total time from today to next moment\n\t\tif (moment.idle !== null && distOverflow + moment.idle > 0) {\n\t\t\tmoment.wait = true;\n\t\t\treturn moment;\n\t\t}\n\n\t\tmoment.dist = _dist;\n\t}\n\n\tmoment.date = clone$1(moment.time);\n\n\treturn moment;\n};\n\nvar toMonthlyMoment = function toMonthlyMoment(date, string) {\n\n\t/*\n every month on the 1st day\n every month on the first day\n every month on day the 12th\n every last day of the month at 12:00\n every first day of the month\n every 1st day of the month at 10\n every 2nd day of the month at 10\n every 20th day of the month\n every 20th day of the month at 12:00 wait 10 minutes\n every 20th day of the month from 10 till 14 every hour\n */\n\n\tvar parts = string.match(/[\\d]+th|\\dst|\\dnd|first|last|at\\s[\\d]+(?::[\\d]+)?(?::[\\d]+)?/g);\n\n\t// no `at time` supplied\n\tif (parts.length > 1) {\n\t\tvar rest = '';\n\t\tparts.forEach(function (p) {\n\t\t\trest = string.split(p)[1] || '';\n\t\t});\n\t\tvar wait = rest.trim().match(/wait\\s[\\d]+\\s[a-z]+/);\n\t\tif (wait) {\n\t\t\tparts.push(wait[0]);\n\t\t}\n\t}\n\n\tvar moment = parts.reduce(function (obj, part) {\n\n\t\t// is month day (1st, 2nd, 12th, first, last)\n\t\tif (/([\\d]+th|\\dst|\\dnd|first|last)/.test(part)) {\n\t\t\tobj.day = /^[\\d]/.test(part) ? parseInt(part, 10) : part === 'first' ? 1 : part;\n\t\t}\n\n\t\t// if is time (at 12:00)\n\t\tif (/^at/.test(part)) {\n\t\t\tobj.time = toTime(clone$1(date), part.substr(3));\n\t\t}\n\n\t\t// is waiting period\n\t\telse if (/wait/.test(part)) {\n\t\t\t\tobj.idle = toInterval(part.substr(5));\n\t\t\t}\n\n\t\treturn obj;\n\t}, {\n\t\tidle: null,\n\t\tday: null,\n\t\ttime: null,\n\t\tdate: null,\n\t\tdist: null,\n\t\twait: false\n\t});\n\n\tif (!moment.time) {\n\n\t\t// set to day\n\t\tmoment.time = setDayOfMonth(clone$1(date), moment.day);\n\n\t\t// if so get first valid date and use that for time\n\t\tvar hourlyMoment = toHourlyMoment(moment.time, string);\n\n\t\t// waiting\n\t\tif (hourlyMoment.wait) {\n\t\t\treturn moment;\n\t\t}\n\n\t\t// copy either date or from time\n\t\tmoment.time = clone$1(sameDate(date, moment.time) && hourlyMoment.date ? hourlyMoment.date : hourlyMoment.from);\n\n\t\t// test if has already passed, if so, set to hourly from for next month\n\t\tvar dist = moment.time - date;\n\t\tif (dist < 0) {\n\n\t\t\t// move to next month (set to first day of month)\n\t\t\tmoment.time = clone$1(hourlyMoment.from);\n\t\t\tmoment.time.setDate(1);\n\t\t\tmoment.time.setMonth(moment.time.getMonth() + 1);\n\n\t\t\t// now set to expected day\n\t\t\tsetDayOfMonth(moment.time, moment.day);\n\n\t\t\t// recalculate distance\n\t\t\tdist = moment.time - date;\n\t\t}\n\n\t\tmoment.dist = dist;\n\t} else {\n\n\t\t// correct time to set week day\n\t\tmoment.time = setDayOfMonth(moment.time, moment.day);\n\n\t\tvar _dist2 = moment.time - date;\n\t\tvar distOverflow = 0;\n\t\tif (_dist2 < 0) {\n\n\t\t\tdistOverflow = _dist2;\n\n\t\t\t// move to next month (set to first day of month)\n\t\t\tmoment.time.setDate(1);\n\t\t\tmoment.time.setMonth(moment.time.getMonth() + 1);\n\n\t\t\t// now set to expected day\n\t\t\tsetDayOfMonth(moment.time, moment.day);\n\n\t\t\t// recalculate distance\n\t\t\t_dist2 = moment.time - date;\n\t\t}\n\n\t\t// get total time from today to next moment\n\t\tif (moment.idle !== null && distOverflow + moment.idle > 0) {\n\t\t\tmoment.wait = true;\n\t\t\treturn moment;\n\t\t}\n\n\t\tmoment.dist = _dist2;\n\t}\n\n\tmoment.date = clone$1(moment.time);\n\n\treturn moment;\n};\n\nvar toWeeklyMoment = function toWeeklyMoment(date, string) {\n\n\t// - every wednesday at 12:00\n\t// - every wednesday at 12:00 wait 10 minutes\n\t// - wednesday every hour\n\t// - wednesday from 10 till 14 every hour\n\t// - wednesday 12:00, thursday 14:00\n\t// - tuesday 10:00 wait 2 hours\n\t// - tuesday 10:00 wait 2 hours, saturday 10:00 wait 2 hours\n\t// - every tuesday every 5 minutes\n\t// - wednesday from 10 till 14 every hour\n\t// - every tuesday every 5 minutes wait 10 seconds\n\t// - every tuesday from 10 till 12 every 5 minutes wait 10 seconds\n\t// - every tuesday every 5 minutes from 10 till 12 wait 10 seconds\n\t// - every tuesday at 12:00 wait 5 minutes\n\n\t// strip week part and then feed rest to toDaily() or Hourly() method\n\tvar parts = string.match(/(?:mon|tues|wednes|thurs|fri|satur|sun)day|at\\s[\\d]+(?::[\\d]+)?(?::[\\d]+)?/g);\n\n\t// no `at time` supplied\n\tif (parts.length > 1) {\n\t\tvar rest = '';\n\t\tparts.forEach(function (p) {\n\t\t\trest = string.split(p)[1] || '';\n\t\t});\n\t\tvar wait = rest.trim().match(/wait\\s[\\d]+\\s[a-z]+/);\n\t\tif (wait) {\n\t\t\tparts.push(wait[0]);\n\t\t}\n\t}\n\n\t// to moment object\n\tvar moment = parts.reduce(function (obj, part) {\n\n\t\t// is day\n\t\tif (/(?:mon|tues|wednes|thurs|fri|satur|sun)day/.test(part)) {\n\t\t\tobj.day = Days[capitalizeFirstLetter(part)];\n\t\t}\n\n\t\t// if is time (at 12:00)\n\t\tif (/^at/.test(part)) {\n\t\t\tobj.time = toTime(clone$1(date), part.substr(3));\n\t\t}\n\n\t\t// is waiting period\n\t\telse if (/wait/.test(part)) {\n\t\t\t\tobj.idle = toInterval(part.substr(5));\n\t\t\t}\n\n\t\treturn obj;\n\t}, {\n\t\tidle: null,\n\t\tday: null,\n\t\ttime: null,\n\t\tdate: null,\n\t\tdist: null,\n\t\twait: false\n\t});\n\n\t// if no time set see if a hourly period was defined\n\tif (!moment.time) {\n\n\t\t// set to day\n\t\tmoment.time = setDay(clone$1(date), moment.day);\n\n\t\t// if so get first valid date and use that for time\n\t\tvar hourlyMoment = toHourlyMoment(moment.time, string);\n\n\t\t// waiting\n\t\tif (hourlyMoment.wait) {\n\t\t\treturn moment;\n\t\t}\n\n\t\t// copy either date or from time\n\t\tmoment.time = clone$1(sameDate(date, moment.time) && hourlyMoment.date ? hourlyMoment.date : hourlyMoment.from);\n\n\t\t// test if has already passed, if so, set to hourly from for next week\n\t\tvar dist = moment.time - date;\n\n\t\tif (dist < 0) {\n\t\t\tmoment.time.setDate(moment.time.getDate() + 7);\n\t\t}\n\n\t\tmoment.dist = dist;\n\t} else {\n\n\t\t// correct time to set week day\n\t\tmoment.time = setDay(moment.time, moment.day);\n\n\t\tvar _dist3 = moment.time - date;\n\t\tif (_dist3 < 0) {\n\t\t\tmoment.time.setDate(moment.time.getDate() + 7);\n\t\t\t_dist3 = moment.time - date;\n\t\t}\n\n\t\t// if is idling\n\t\tif (moment.idle !== null && _dist3 >= TimeUnit.Week - moment.idle) {\n\t\t\tmoment.wait = true;\n\t\t\treturn moment;\n\t\t}\n\n\t\tmoment.dist = _dist3;\n\t}\n\n\tmoment.date = clone$1(moment.time);\n\n\treturn moment;\n};\n\nvar toDailyMoment = function toDailyMoment(date, string) {\n\t// - every day at 10\n\t// - every day at 14:00\n\t// - every day at 14:30 wait 5 minutes\n\n\t// get parts\n\tvar parts = string.match(/([\\d]+(?::[\\d]+)?(?::[\\d]+)?)|(wait\\s[\\d]+\\s[a-z]+)/g);\n\n\t// to moment object\n\tvar moment = parts.reduce(function (obj, part) {\n\n\t\t// if is time\n\t\tif (/^[\\d]/.test(part)) {\n\t\t\tobj.time = toTime(clone$1(date), part);\n\t\t}\n\n\t\t// is waiting period\n\t\telse if (/wait/.test(part)) {\n\t\t\t\tobj.idle = toInterval(part.substr(5));\n\t\t\t}\n\n\t\treturn obj;\n\t}, {\n\t\tidle: null,\n\t\ttime: null,\n\t\tdate: null,\n\t\twait: false,\n\t\tdist: null\n\t});\n\n\tvar dist = moment.time - date;\n\n\t// if time dist is negative set time to tomorrow\n\tif (dist < 0) {\n\t\tmoment.time.setDate(moment.time.getDate() + 1);\n\t\tdist = moment.time - date;\n\t}\n\n\t// test if wait period has passed\n\tif (moment.idle !== null && dist >= TimeUnit.Day - moment.idle) {\n\t\tmoment.wait = true;\n\t\treturn moment;\n\t}\n\n\tmoment.dist = dist;\n\tmoment.date = clone$1(moment.time);\n\n\treturn moment;\n};\n\nvar toHourlyMoment = function toHourlyMoment(date, string) {\n\n\t// - from 10 till 20 every hour wait 5 minutes\n\t// - from 10:00:00 till 14:00 every 15 minutes\n\t// - every hour\n\t// - every 20 minutes\n\t// - every 30 seconds\n\n\t// get parts\n\tvar parts = string.match(/((?:[\\d]+\\s)?(?:hours|hour|minutes|minute|seconds|second))|((?:from|till)\\s[\\d]+(?::[\\d]+)?(?::[\\d]+)?)|(wait\\s[\\d]+\\s[a-z]+)/g);\n\n\t// to moment object\n\tvar moment = parts.reduce(function (obj, part) {\n\n\t\t// if is time\n\t\tif (/from/.test(part)) {\n\t\t\tobj.from = toTime(obj.from, part.split(' ')[1]);\n\t\t} else if (/till/.test(part)) {\n\t\t\tobj.till = toTime(obj.till, part.split(' ')[1]);\n\t\t}\n\n\t\t// is waiting period\n\t\telse if (/wait/.test(part)) {\n\t\t\t\tobj.idle = toInterval(part.substr(5));\n\t\t\t}\n\n\t\t\t// if is interval\n\t\t\telse if (/hours|hour|minutes|minute|seconds|second/.test(part)) {\n\t\t\t\t\tobj.interval = toInterval(part);\n\t\t\t\t}\n\n\t\treturn obj;\n\t}, {\n\t\tidle: null,\n\t\tinterval: null,\n\t\tdate: null,\n\t\tdist: null,\n\t\twait: false,\n\t\tfrom: toTime(clone$1(date), '0'),\n\t\ttill: toTime(clone$1(date), '23:59:59:999')\n\t});\n\n\t// if valid moment\n\tif (date < moment.from || date >= moment.till) {\n\t\treturn moment;\n\t}\n\n\t// calculate if interval fits in duration\n\tif (moment.interval > moment.till - moment.from) {\n\t\treturn moment;\n\t}\n\n\t// time passed since start of moment\n\tvar diff = date - moment.from;\n\n\t// interval duration minus all intervals that fitted in the passed time since start\n\t// 200 - (diff % interval)\n\t// 200 - (1450 % 200)\n\t// 200 - 50\n\t// 150 till next moment\n\tvar dist = moment.interval - diff % moment.interval;\n\n\t// test if wait period has passed\n\tif (moment.idle !== null && dist >= moment.interval - moment.idle) {\n\t\tmoment.wait = true;\n\t\treturn moment;\n\t}\n\n\t// set as final distance\n\tmoment.dist = dist;\n\n\t// turn into date by adding to current time\n\tmoment.date = new Date(date.getTime() + moment.dist);\n\n\treturn moment;\n};\n\nvar toMoment = function toMoment(date, string) {\n\n\t// test yearly schedules\n\tif (/januari|februari|march|april|may|june|july|august|september|october|november|december/.test(string)) {\n\t\treturn toYearlyMoment(date, string);\n\t}\n\n\t// test for monthly schedules\n\tif (/month/.test(string)) {\n\t\treturn toMonthlyMoment(date, string);\n\t}\n\n\t// test for weekly schedules\n\tif (/(?:mon|tues|wednes|thurs|fri|satur|sun)day/.test(string)) {\n\t\treturn toWeeklyMoment(date, string);\n\t}\n\n\t// test for daily schedules\n\tif (/day at/.test(string) || /^at /.test(string)) {\n\t\treturn toDailyMoment(date, string);\n\t}\n\n\t// test for hourly schedules\n\tif (/hours|hour|minutes|minute|seconds|second/.test(string)) {\n\t\treturn toHourlyMoment(date, string);\n\t}\n\n\treturn null;\n};\n\nvar getNextScheduledDate = function getNextScheduledDate(date, schedule) {\n\n\t// create moments\n\tvar moments = schedule.split(',').map(trim) // remove whitespace\n\t.map(function (s) {\n\t\treturn toMoment(date, s);\n\t}); // string to moment in time\n\n\t// calculate closest moment\n\tvar nearest = null;\n\n\tfor (var i = 0; i < moments.length; i++) {\n\n\t\tvar moment = moments[i];\n\n\t\t// currently waiting\n\t\tif (nearest === null && moment.wait) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (nearest === null) {\n\t\t\tnearest = moment;\n\t\t} else if (nearest.dist === null && moment.dist !== null) {\n\t\t\tnearest = moment;\n\t\t} else if (moment.dist !== null && moment.dist < nearest.dist) {\n\t\t\tnearest = moment;\n\t\t}\n\t}\n\n\t// return nearest date\n\treturn nearest.date;\n};\n\n/**\n * Returns the server offset based on the type of value\n * will subtract current time from server time resulting in a correction offset\n * @param server\n * @param cb\n * @returns {*}\n */\nvar getServerOffset = function getServerOffset(server, cb) {\n\tif (server === true) {\n\t\tserverDate(function (date) {\n\t\t\tcb(date.getTime() - now$1().getTime());\n\t\t});\n\t\treturn;\n\t}\n\tif (typeof server === 'string') {\n\t\tsetTimeout(function () {\n\t\t\tcb(dateFromISO(server).getTime() - now$1().getTime());\n\t\t}, 0);\n\t\treturn;\n\t}\n\tsetTimeout(function () {\n\t\tcb(0);\n\t}, 0);\n};\n\n/**\n * Default options for counter\n * @type object\n */\nvar DEFAULT_COUNTDOWN_OPTIONS = {\n\tformat: ['d', 'h', 'm', 's'],\n\tcascade: true,\n\tserver: null, // null (use client date) | true (use info in Date header) | ISO 8601 (fixed date)\n\tinterval: 1000\n};\n\n/**\n * Creates a counter object\n * @param props\n */\nvar createCounter = function createCounter(props) {\n\treturn _extends({\n\n\t\t// read only\n\t\tcomplete: false,\n\t\toffset: null,\n\t\tvalue: null,\n\t\ttimer: null,\n\n\t\t// api\n\t\tonload: function onload() {},\n\t\tonupdate: function onupdate(value) {}\n\n\t}, props);\n};\n\n/**\n * Countdown Value\n * @param total - total milliseconds to count down\n * @param options\n */\nvar countdownAmount = function countdownAmount(total) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tif (typeof total !== 'number') {\n\t\tthrow 'Can\\'t start counter, the \"milliseconds\" parameter is required';\n\t}\n\n\t// set base options\n\toptions = mergeObjects({ units: 'seconds', target: 0, amount: 1000, interval: 1000 }, options);\n\n\t// set private target\n\tvar target = options.target;\n\tvar current = total;\n\n\t// counter api\n\tvar counter = createCounter({\n\t\ttarget: target,\n\t\tonended: function onended() {}\n\t});\n\n\tsetTimeout(function () {\n\n\t\t// count method\n\t\tvar count = function count(runtime) {\n\n\t\t\tcurrent = total - runtime / options.interval * options.amount;\n\n\t\t\t// test if reached target date\n\t\t\tif (current <= target) {\n\n\t\t\t\t// set final value\n\t\t\t\tcounter.value = options.target;\n\n\t\t\t\t// set output to zero\n\t\t\t\tcounter.onupdate(counter.value / TimeUnit[options.units]);\n\n\t\t\t\t// stop timer\n\t\t\t\tcounter.timer.stop();\n\n\t\t\t\t// we're done!\n\t\t\t\tcounter.onended();\n\n\t\t\t\t// really done!\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// set value\n\t\t\tcounter.value = current;\n\n\t\t\t// calculate duration\n\t\t\tcounter.onupdate(counter.value / TimeUnit[options.units]);\n\t\t};\n\n\t\t// set our counter, don't start automatically as we want to call onload first\n\t\tcounter.timer = setTimer(count, options.interval, { autostart: false });\n\n\t\t// ready!\n\t\tcounter.complete = true;\n\t\tcounter.onload();\n\n\t\t// start timer automatically\n\t\tcounter.timer.start();\n\t}, 0);\n\n\treturn counter;\n};\n\n/**\n * Count down towards date\n * @param due\n * @param options\n * @returns object\n */\nvar countdownDuration = function countdownDuration(due) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tif (typeof due === 'undefined') {\n\t\tthrow 'Can\\'t start counter, the \"due\" parameter is required';\n\t}\n\n\t// set base options\n\toptions = mergeObjects(DEFAULT_COUNTDOWN_OPTIONS, options);\n\n\t// set private target\n\tvar target = isDate(due) ? due : dateFromISO(due);\n\n\t// counter api\n\tvar counter = createCounter({\n\t\tdue: clone$1(target),\n\t\tonended: function onended() {}\n\t});\n\n\t// get offset\n\tgetServerOffset(options.server, function (offset) {\n\n\t\tcounter.offset = offset;\n\n\t\tvar count = function count() {\n\n\t\t\tvar now$$1 = offsetDate(offset);\n\n\t\t\t// test if reached target date\n\t\t\tif (target - now$$1 <= 0) {\n\n\t\t\t\t// set final value\n\t\t\t\tcounter.value = new Array(options.format.length).fill(0);\n\n\t\t\t\t// set output to zero\n\t\t\t\tcounter.onupdate(counter.value);\n\n\t\t\t\t// stop timer\n\t\t\t\tcounter.timer.stop();\n\n\t\t\t\t// we're done!\n\t\t\t\tcounter.onended();\n\n\t\t\t\t// really done!\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// set value\n\t\t\tcounter.value = dateDiff(now$$1, target, options.format, options.cascade);\n\n\t\t\t// calculate duration\n\t\t\tcounter.onupdate(counter.value);\n\t\t};\n\n\t\t// start our counter\n\t\tcounter.timer = setTimer(count, options.interval, { autostart: false });\n\n\t\t// ready!\n\t\tcounter.complete = true;\n\t\tcounter.onload();\n\n\t\t// run timer\n\t\tcounter.timer.start();\n\t});\n\n\treturn counter;\n};\n\n/**\n * Count up from date\n * @param since\n * @param options\n * @returns object\n */\nvar countUpDuration = function countUpDuration(since) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tif (typeof since === 'undefined') {\n\t\tthrow 'Can\\'t start counter, the \"since\" parameter is required';\n\t}\n\n\t// set base options\n\toptions = mergeObjects(DEFAULT_COUNTDOWN_OPTIONS, options);\n\n\t// set from date\n\tvar from = isDate(since) ? since : dateFromISO(since);\n\n\t// counter api\n\tvar counter = createCounter({\n\t\tsince: clone$1(from)\n\t});\n\n\t// get offset\n\tgetServerOffset(options.server, function (offset) {\n\n\t\tcounter.offset = offset;\n\n\t\tvar count = function count() {\n\n\t\t\tvar now$$1 = offsetDate(offset);\n\n\t\t\t// set value\n\t\t\tcounter.value = dateDiff(from, now$$1, options.format, options.cascade);\n\n\t\t\t// calculate duration\n\t\t\tcounter.onupdate(counter.value);\n\t\t};\n\n\t\t// start our counter\n\t\tcounter.timer = setTimer(count, options.interval, { autostart: false });\n\n\t\t// ready!\n\t\tcounter.complete = true;\n\t\tcounter.onload();\n\n\t\t// run timer\n\t\tcounter.timer.start();\n\t});\n\n\treturn counter;\n};\n\n/**\n * Count using a predefined schedule\n * @param schedule\n * @param options\n * @returns object\n */\nvar countScheduled = function countScheduled(schedule) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tif (typeof schedule !== 'string') {\n\t\tthrow 'Can\\'t start scheduler, \"schedule\" is a required parameter';\n\t}\n\n\t// timezone is in ISO8601 timezone format\n\toptions = mergeObjects(_extends({}, DEFAULT_COUNTDOWN_OPTIONS, { timezone: null }), options);\n\n\t// get timezone offset\n\tvar timezone = options.timezone ? toTimezoneOffset(options.timezone) : null;\n\n\t// counter api\n\tvar counter = createCounter({\n\t\twaiting: null,\n\t\tnextScheduledDate: null,\n\t\tpreviouslyScheduledDate: null,\n\t\tonrepeat: function onrepeat(nextDate, lastDate) {},\n\t\tonresume: function onresume(nextDate) {},\n\t\tonwait: function onwait(sinceDate) {}\n\t});\n\n\t// date scheduled during last check\n\tvar lastDate = undefined;\n\tvar nextDate = null;\n\n\t// get offset\n\tgetServerOffset(options.server, function (offset) {\n\n\t\tcounter.offset = offset;\n\n\t\tvar count = function count() {\n\n\t\t\tvar now$$1 = offsetDate(offset);\n\n\t\t\tif (timezone !== null) {\n\t\t\t\tnow$$1 = timezoneDate(now$$1, timezone);\n\t\t\t}\n\n\t\t\t// get next date\n\t\t\tnextDate = getNextScheduledDate(now$$1, schedule);\n\n\t\t\t// if no next date, we are in waiting state\n\t\t\tcounter.waiting = nextDate === null;\n\n\t\t\t// if target is null call `wait` method\n\t\t\tif (counter.waiting) {\n\n\t\t\t\t// if is waiting initially\n\t\t\t\tif (lastDate === undefined) {\n\t\t\t\t\tlastDate = null;\n\t\t\t\t}\n\n\t\t\t\t// set output to zero\n\t\t\t\tcounter.value = new Array(options.format.length).fill(0);\n\n\t\t\t\t// remember scheduled date if set\n\t\t\t\tif (counter.nextScheduledDate) {\n\t\t\t\t\tcounter.previouslyScheduledDate = clone$1(counter.nextScheduledDate);\n\t\t\t\t}\n\n\t\t\t\t// update counter dates\n\t\t\t\tcounter.nextScheduledDate = nextDate === null ? null : clone$1(nextDate);\n\n\t\t\t\t// update counter\n\t\t\t\tcounter.onwait(counter.previouslyScheduledDate ? clone$1(counter.previouslyScheduledDate) : null);\n\n\t\t\t\t// we'll stop here but we'll leave the counter running\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// update counter dates\n\t\t\tcounter.nextScheduledDate = clone$1(nextDate);\n\n\t\t\t// just now we did not have a date (last date is always the date from the previous loop),\n\t\t\t// but now have, so we just woke up\n\t\t\tif (lastDate === null) {\n\t\t\t\tcounter.onresume(clone$1(nextDate));\n\t\t\t}\n\n\t\t\t// if no last date or it's not the first loop and its not the same as the next date we are looping\n\t\t\tif (lastDate === null || lastDate !== undefined && !sameTime(lastDate, nextDate)) {\n\n\t\t\t\tcounter.onrepeat(clone$1(nextDate), lastDate ? clone$1(lastDate) : null);\n\n\t\t\t\tif (lastDate) {\n\t\t\t\t\tcounter.previouslyScheduledDate = clone$1(lastDate);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// remember last date\n\t\t\tlastDate = clone$1(nextDate);\n\n\t\t\t// calculate new duration\n\t\t\tcounter.value = dateDiff(now$$1, nextDate, options.format, options.cascade);\n\t\t\tcounter.onupdate(counter.value);\n\t\t};\n\n\t\t// start our counter\n\t\tcounter.timer = setTimer(count, options.interval, { autostart: false });\n\n\t\t// ready!\n\t\tcounter.complete = true;\n\t\tcounter.onload();\n\n\t\t// go!\n\t\tcounter.timer.start();\n\t});\n\n\treturn counter;\n};\n\nvar support = (function () {\n\n\tvar w = window;\n\tif (typeof w === 'undefined') {\n\t\treturn false;\n\t}\n\n\t// test if can use CSS supports feature detection \n\tvar canSupport = w.CSS && w.CSS.supports;\n\n\t// test if is IE 11\n\t// does not support CSS.supports but does support transforms without prefix\n\tvar isIE11 = !!w.MSInputMethodContext && !!document.documentMode;\n\n\t// test if has transform support\n\t// we ignore the custom Opera implementation\n\tvar canTransform = canSupport && CSS.supports('transform', 'translateX(0)');\n\n\t// can we use mutation observer and request animation frame\n\tvar features = ['MutationObserver', 'requestAnimationFrame'];\n\n\t// test if is supported\n\treturn isIE11 || canSupport && canTransform && !!features.filter(function (p) {\n\t\treturn p in w;\n\t}).length;\n});\n\nvar transform = (function () {\n\tfor (var _len = arguments.length, transforms = Array(_len), _key = 0; _key < _len; _key++) {\n\t\ttransforms[_key] = arguments[_key];\n\t}\n\n\treturn function (value, cb) {\n\n\t\tvar output = [];\n\t\tvar input = value;\n\n\t\ttransforms.forEach(function (t, i) {\n\n\t\t\tt(input, function (out) {\n\n\t\t\t\toutput[i] = out;\n\n\t\t\t\tif (i === transforms.length - 1) {\n\t\t\t\t\tcb(output.length === 1 ? output[0] : output);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n});\n\nvar pad = (function () {\n\tvar padding = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'left';\n\treturn function (value, cb) {\n\t\treturn cb(padding.length > ('' + value).length ? side === 'left' ? ('' + padding + value).slice(-padding.length) : ('' + value + padding).substring(0, padding.length) : value);\n\t};\n});\n\nvar ascii = (function () {\n return function (value, cb) {\n return cb((value + '').charCodeAt(0));\n };\n});\n\nvar add$1 = (function (amount) {\n return function (value, cb) {\n return cb(value + amount);\n };\n});\n\nvar abs = (function () {\n return function (value, cb) {\n return cb(Math.abs(value));\n };\n});\n\nvar value$1 = (function (staticValue) {\n return function (value, cb) {\n return cb(staticValue);\n };\n});\n\nvar modulus = (function (amount) {\n return function (value, cb) {\n return cb(value % amount);\n };\n});\n\nvar subtract = (function (amount) {\n return function (value, cb) {\n return cb(value - amount);\n };\n});\n\nvar replace = (function (needle, replacement) {\n return function (string, cb) {\n return cb((string + '').replace(new RegExp(needle === '.' ? '\\\\' + needle : needle, 'g'), replacement));\n };\n});\n\nvar round = (function () {\n var decimals = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return function (value, cb) {\n return cb(decimals ? value.toFixed(decimals) : Math.round(value));\n };\n});\n\nvar floor = (function () {\n return function (value, cb) {\n return cb(Math.floor(value));\n };\n});\n\nvar ceil = (function () {\n return function (value, cb) {\n return cb(Math.ceil(value));\n };\n});\n\nvar fraction = (function () {\n var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;\n return function (value, cb) {\n return cb((parseFloat(value) - min) / (max - min));\n };\n});\n\nvar multiply = (function (amount) {\n return function (value, cb) {\n return cb(value * amount);\n };\n});\n\nvar divide = (function (amount) {\n return function (value, cb) {\n return cb(value / amount);\n };\n});\n\nvar format = (function (template) {\n return function (value, cb) {\n return cb(template.replace(/\\$0/gi, value));\n };\n});\n\nvar split = (function () {\n var character = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return function (string, cb) {\n return cb((string + '').split(character));\n };\n});\n\nvar plural = (function (single, plural) {\n return function (value, cb) {\n return cb(value === 1 ? single : plural);\n };\n});\n\nvar limit = (function () {\n var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return function (value, cb) {\n return cb(Math.min(Math.max(value, min), max));\n };\n});\n\nvar reverse = (function () {\n return function (value, cb) {\n return cb(Array.isArray(value) ? value.reverse() : (value + '').split('').reverse().join(''));\n };\n});\n\nvar arrive$1 = (function (maxVelocity, friction) {\n var resetToBegin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var catchUp = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n\n var initial = null;\n var previous = null;\n var translator = null;\n return function (value, cb) {\n value = parseFloat(value);\n\n if (initial === null) {\n initial = value;\n cb(value);\n return;\n }\n\n if (resetToBegin && previous !== null && initial === value) {\n translator.cancel();\n translator = null;\n }\n\n if (catchUp && previous !== null && value - translator.getPosition() > 1) {\n translator.cancel();\n translator = null;\n previous = null;\n initial = value;\n cb(value);\n return;\n }\n\n if (!translator) {\n translator = createTranslator('arrive', maxVelocity, friction);\n translator.update(cb, initial, value);\n } else {\n translator.update(cb, value);\n }\n\n previous = value;\n };\n});\n\nvar spring$1 = (function (stiffness, damping, mass) {\n\n\tvar current = null;\n\tvar translator = null;\n\n\treturn function (value, cb) {\n\n\t\tvalue = parseFloat(value);\n\n\t\tif (current === null) {\n\t\t\tcurrent = value;\n\t\t\tcb(value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!translator) {\n\t\t\ttranslator = createTranslator('spring', stiffness, damping, mass);\n\t\t\ttranslator.update(cb, current, value);\n\t\t} else {\n\t\t\ttranslator.update(cb, value);\n\t\t}\n\t};\n});\n\n/**\n * @param order { String } - order of flipping > random | ltr | rtl (default)\n * @param min { Number } - min random delay\n * @param max { Number } - max random delay\n */\nvar delay = (function () {\n\tvar order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'rtl';\n\tvar min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50;\n\tvar max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 50;\n\n\n\tvar current = null;\n\n\treturn function (value, cb) {\n\n\t\t// if no current value, set current value and -> exit\n\t\tif (!current) {\n\t\t\tcurrent = copyArray(value);\n\t\t\tcb(copyArray(current));\n\t\t\treturn;\n\t\t}\n\n\t\tcurrent = order === 'rtl' ? current.slice(current.length - value.length, current.length) : current.slice(0, value.length);\n\n\t\tvar indexes = range(value.length);\n\n\t\tif (order === 'random') {\n\t\t\tshuffle(indexes);\n\t\t}\n\n\t\tif (order === 'rtl') {\n\t\t\tindexes.reverse();\n\t\t}\n\n\t\tvar update = function update() {\n\t\t\tflip(indexes.shift(), current, value, cb);\n\t\t\tif (indexes.length) {\n\t\t\t\tsetTimeout(update, random(min, max));\n\t\t\t}\n\t\t};\n\n\t\tupdate();\n\t};\n});\n\nvar flip = function flip(index, current, next, cb) {\n\tcurrent[index] = next[index];\n\tcb(copyArray(current));\n};\n\nvar number = (function () {\n\tvar decimalsSeparator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.';\n\tvar thousandsSeparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n\tvar decimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;\n\treturn function (value, cb) {\n\t\tcb((value < 0 ? '-' : '') + parseFloat(Math.abs(value)).toFixed(decimals).replace(/./g, function (c, i, a) {\n\t\t\tif (c === '.') {\n\t\t\t\treturn decimalsSeparator;\n\t\t\t}\n\t\t\treturn i && (a.length - i) % 3 === 0 ? thousandsSeparator + c : c;\n\t\t}));\n\t};\n});\n\nvar percentage = (function () {\n\tvar min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\tvar max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;\n\n\tvar f = fraction(min, max);\n\treturn function (value, cb) {\n\t\tf(value, function (value) {\n\t\t\tcb(value * 100);\n\t\t});\n\t};\n});\n\nvar step$1 = (function (velocity) {\n\n\tvar initial = null;\n\tvar previous = null;\n\tvar translator = null;\n\n\treturn function (value, cb) {\n\n\t\tvalue = parseFloat(value);\n\n\t\tif (initial === null) {\n\t\t\tinitial = value;\n\t\t\tcb(value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (previous !== null && initial === value) {\n\t\t\ttranslator.cancel();\n\t\t\ttranslator = null;\n\t\t}\n\n\t\tif (!translator) {\n\t\t\ttranslator = createTranslator('step', velocity);\n\t\t\ttranslator.update(cb, initial, value);\n\t\t} else {\n\t\t\ttranslator.update(cb, value);\n\t\t}\n\n\t\tprevious = value;\n\t};\n});\n\nvar upper = (function () {\n return function (value, cb) {\n return cb((value + '').toUpperCase());\n };\n});\n\nvar lower = (function () {\n return function (value, cb) {\n return cb((value + '').toLowerCase());\n };\n});\n\n/**\n * milliseconds duration\n * @param format\n * @returns {function(*=, *)}\n */\nvar duration$1 = (function () {\n for (var _len = arguments.length, format = Array(_len), _key = 0; _key < _len; _key++) {\n format[_key] = arguments[_key];\n }\n\n return function (value, cb) {\n return cb(timeDuration(value, format));\n };\n});\n\nvar keys = (function () {\n\tfor (var _len = arguments.length, keys = Array(_len), _key = 0; _key < _len; _key++) {\n\t\tkeys[_key] = arguments[_key];\n\t}\n\n\treturn function (value, cb) {\n\t\tvar output = {};\n\t\tvalue.forEach(function (v, i) {\n\t\t\toutput[keys[i]] = v;\n\t\t});\n\t\tcb(output);\n\t};\n});\n\nvar map = (function (transform) {\n\treturn function (value, cb) {\n\n\t\tvar output = [];\n\t\tvar input = value;\n\n\t\tinput.forEach(function (v, vi) {\n\n\t\t\ttransform(v, function (out) {\n\n\t\t\t\toutput[vi] = out;\n\n\t\t\t\tif (vi === input.length - 1) {\n\t\t\t\t\tcb(output.concat());\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n});\n\nvar rotate = (function () {\n\tfor (var _len = arguments.length, transforms = Array(_len), _key = 0; _key < _len; _key++) {\n\t\ttransforms[_key] = arguments[_key];\n\t}\n\n\treturn function (value, cb) {\n\n\t\tvar input = Array.isArray(value) ? value : [value];\n\t\tvar output = [];\n\t\tvar totalTransforms = transforms.length;\n\n\t\tinput.forEach(function (v, i) {\n\n\t\t\ttransforms[i % totalTransforms](v, function (out) {\n\n\t\t\t\toutput[i] = out;\n\t\t\t\tif (i === input.length - 1) {\n\t\t\t\t\tcb(output);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n});\n\nvar input = (function () {\n return function (value, cb) {\n return cb(value);\n };\n});\n\nvar substring = (function (from, to) {\n return function (value, cb) {\n return cb((value + '').substring(from, to));\n };\n});\n\nvar tween = (function (duration) {\n\tvar ease = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ease-linear';\n\tvar delay = arguments[2];\n\n\n\tduration = toDuration(duration);\n\n\tvar easeFn = getExtension(ExtensionType.EASING_FUNCTION, ease);\n\tvar cancel = null;\n\tvar previous = null;\n\n\treturn function (value, cb) {\n\n\t\tvalue = parseFloat(value);\n\n\t\tif (cancel) {\n\t\t\tcancel();\n\t\t}\n\n\t\t// force value if\n\t\t// - no previous value defined\n\t\t// - is same value\n\t\t// - distance between from and to is too large\n\t\tif (previous === null || value === previous) {\n\t\t\tprevious = value;\n\t\t\tcb(value);\n\t\t\treturn;\n\t\t}\n\n\t\tvar to = value;\n\t\tvar from = previous;\n\t\tvar dist = to - from;\n\n\t\tcancel = animate(function (p) {\n\t\t\tcb(from + p * dist);\n\t\t}, function () {\n\t\t\tcancel = null;\n\t\t}, duration, easeFn, delay);\n\n\t\tprevious = value;\n\t};\n});\n\nvar preset = (function () {\n for (var _len = arguments.length, presets = Array(_len), _key = 0; _key < _len; _key++) {\n presets[_key] = arguments[_key];\n }\n\n return function (value, cb, instance) {\n return cb(value.map(function (v, index) {\n return instance.getPreset(presets[index])(v, instance.getConstants(), instance);\n }));\n };\n});\n\nvar char = (function (filter) {\n var replacement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n\n var regex = filter ? new RegExp('[^' + filter + ']', 'g') : null;\n\n return function (value, cb) {\n var char = String.fromCharCode(value);\n if (regex) {\n char = char.replace(regex, replacement);\n }\n cb(char);\n };\n});\n\nvar Transforms = {\n\tascii: ascii,\n\tchar: char,\n\ttween: tween,\n\tvalue: value$1,\n\tinput: input,\n\trotate: rotate,\n\tmap: map,\n\ttransform: transform,\n\tupper: upper,\n\tlower: lower,\n\tabs: abs,\n\tadd: add$1,\n\tsubtract: subtract,\n\tmodulus: modulus,\n\tpad: pad,\n\tnumber: number,\n\treplace: replace,\n\tround: round,\n\tceil: ceil,\n\tfloor: floor,\n\tfraction: fraction,\n\tpercentage: percentage,\n\tmultiply: multiply,\n\tdivide: divide,\n\tsplit: split,\n\tformat: format,\n\tplural: plural,\n\tlimit: limit,\n\treverse: reverse,\n\tarrive: arrive$1,\n\tspring: spring$1,\n\tdelay: delay,\n\tstep: step$1,\n\tkeys: keys,\n\tduration: duration$1,\n\tsubstring: substring,\n\tpreset: preset\n};\n\naddExtensions(ExtensionType.TRANSFORM, Transforms);\n\nvar crossfade = (function () {\n\tvar speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\tvar delayIn = arguments[1];\n\tvar delayOut = arguments[2];\n\n\treturn {\n\t\tintro: [{ name: 'fade', parameters: [0, 1], duration: 1000 * speed, delay: toDuration(delayIn) }],\n\t\toutro: [{ name: 'fade', parameters: [1, 0], duration: 1000 * speed, delay: toDuration(delayOut) }]\n\t};\n});\n\nvar swap = (function () {\n\tvar axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n\tvar distance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\tvar speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\tvar delayIn = arguments[3];\n\tvar delayOut = arguments[4];\n\n\treturn {\n\t\tintro: [{\n\t\t\tname: 'move',\n\t\t\tparameters: ['' + -distance * 100, '0%', axis],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayIn)\n\t\t}],\n\t\toutro: [{\n\t\t\tname: 'move',\n\t\t\tparameters: ['0%', '' + distance * 100, axis],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayOut)\n\t\t}]\n\t};\n});\n\nvar revolve = (function () {\n\tvar axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n\tvar distance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\tvar speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\tvar delayIn = arguments[3];\n\tvar delayOut = arguments[4];\n\n\treturn {\n\t\tintro: [{\n\t\t\tname: 'rotate',\n\t\t\tparameters: [-distance * 90 + 'deg', '0deg', axis],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayIn)\n\t\t}],\n\t\toutro: [{\n\t\t\tname: 'rotate',\n\t\t\tparameters: ['0deg', distance * 90 + 'deg', axis],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayOut)\n\t\t}]\n\t};\n});\n\nvar zoom = (function () {\n\tvar offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\tvar speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\tvar delayIn = arguments[2];\n\tvar delayOut = arguments[3];\n\n\treturn {\n\t\tintro: [{\n\t\t\tname: 'scale',\n\t\t\tparameters: [offset, 1],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayIn)\n\t\t}],\n\t\toutro: [{\n\t\t\tname: 'scale',\n\t\t\tparameters: [1, offset],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayOut)\n\t\t}]\n\t};\n});\n\nvar Translation = {\n\t'x': 'translateX',\n\t'y': 'translateY',\n\t'z': 'translateZ'\n};\n\nvar Rotation = {\n\t'x': 'rotateX',\n\t'y': 'rotateY',\n\t'z': 'rotateZ'\n};\n\nvar Scalar = {\n\t'both': 'scale',\n\t'x': 'scaleX',\n\t'y': 'scaleY'\n};\n\n/**\n * Helper methods\n */\nvar between = function between(from, to, p) {\n\treturn from + (to - from) * p;\n};\n\n/**\n * Single Element transitions\n */\nvar fade = function fade(element, p, direction) {\n\tvar ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeInOutQuad;\n\tvar from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\tvar to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;\n\n\tif (direction < 0) {\n\t\tvar _ref = [to, from];\n\t\tfrom = _ref[0];\n\t\tto = _ref[1];\n\t}\n\telement.style.opacity = between(from, to, ease(p));\n};\n\nvar move = function move(element, p, direction) {\n\tvar ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeInOutQuad;\n\tvar from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '0';\n\tvar to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '100%';\n\tvar axis = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 'y';\n\n\tif (direction < 0) {\n\t\tvar _ref2 = [to, from];\n\t\tfrom = _ref2[0];\n\t\tto = _ref2[1];\n\t}\n\tvar f = cache(from, toCSSValue);\n\tvar t = cache(to, toCSSValue);\n\tsetTransform(element, Translation[axis], between(f.value, t.value, ease(p)), f.units || t.units);\n};\n\nvar rotate$1 = function rotate(element, p, direction) {\n\tvar ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeInOutQuad;\n\tvar from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '0';\n\tvar to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '90deg';\n\tvar axis = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 'x';\n\n\tif (direction < 0) {\n\t\tvar _ref3 = [to, from];\n\t\tfrom = _ref3[0];\n\t\tto = _ref3[1];\n\t}\n\tvar f = cache(from, toCSSValue);\n\tvar t = cache(to, toCSSValue);\n\tsetTransform(element, Rotation[axis], between(f.value, t.value, ease(p)), f.units || t.units);\n};\n\nvar scale = function scale(element, p, direction) {\n\tvar ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeInOutQuad;\n\tvar from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\tvar to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;\n\tvar axis = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 'both';\n\n\tif (direction < 0) {\n\t\tvar _ref4 = [to, from];\n\t\tfrom = _ref4[0];\n\t\tto = _ref4[1];\n\t}\n\tsetTransform(element, Scalar[axis], between(from, to, ease(p)));\n};\n\n/**\n * Composed\n */\n/**\n * Available transitions\n */\nvar Transitions = {\n\tfade: fade,\n\tmove: move,\n\trotate: rotate$1,\n\tscale: scale,\n\n\t// composed transitions\n\tcrossfade: crossfade,\n\tswap: swap,\n\trevolve: revolve,\n\tzoom: zoom\n};\n\naddExtensions(ExtensionType.TRANSITION, Transitions);\n\n/**\n * Helper methods for building the API\n */\n/**\n * We wan't to be sure Rollup includes these collections in the output packages so that's why they are referenced here\n */\nvar API = {\n\n\t/**\n * Quick way to detect if Tick is supported\n */\n\tsupported: support(),\n\n\t// options\n\toptions: {\n\t\tsetConstant: setConstant,\n\t\tsetPreset: setPreset\n\t},\n\n\t/**\n * Helper Methods\n */\n\thelper: {\n\n\t\t// Starts an interval and calls callback method on each tick\n\t\tinterval: setTimer,\n\n\t\t// Returns current time or date object based on ISO\n\t\tdate: function date(iso) {\n\t\t\treturn iso ? dateFromISO(iso) : now$1();\n\t\t},\n\n\t\t// Returns duration in milliseconds or duration between two dates\n\t\tduration: duration\n\t},\n\n\t/**\n * Data Access\n */\n\tdata: {\n\n\t\t// Request data from a url\n\t\trequest: request,\n\n\t\t// Poll a URL for data with a set interval\n\t\tpoll: function poll(url, cb) {\n\t\t\tvar interval = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 60000;\n\n\t\t\treturn setTimer(function () {\n\t\t\t\trequest(url, cb);\n\t\t\t}, interval);\n\t\t}\n\n\t},\n\n\t/**\n * DOM Operations\n */\n\tDOM: {\n\n\t\t// Create a new ticker\n\t\tcreate: create,\n\n\t\t// Destroy an existing ticker\n\t\tdestroy: destroy,\n\n\t\t// Parse a piece of the DOM for tickers\n\t\tparse: parse,\n\n\t\t// Find a specific ticker by DOM node\n\t\tfind: find\n\n\t},\n\n\tcount: {\n\t\tdown: function down() {\n\t\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\t\targs[_key] = arguments[_key];\n\t\t\t}\n\n\t\t\t// if is `amount` and `unit type`, 10 seconds\n\t\t\tif (typeof args[0] === 'number' && typeof args[1] === 'string') {\n\t\t\t\tvar value = args[0];\n\t\t\t\tvar units = args[1].toLowerCase();\n\t\t\t\targs.shift();\n\t\t\t\targs[0] = duration(value, units);\n\t\t\t\targs[1] = args[1] || {};\n\t\t\t\targs[1].units = units;\n\t\t\t\treturn countdownAmount.apply(undefined, args);\n\t\t\t}\n\n\t\t\t// is date or iso string\n\t\t\tif (typeof args[0] === 'string' || isDate(args[0])) {\n\t\t\t\treturn countdownDuration.apply(undefined, args);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\tup: countUpDuration,\n\t\tschedule: countScheduled\n\t},\n\n\t/**\n * Public method to extend Tick functionality\n */\n\tplugin: {\n\t\tadd: function add(type, name, fn) {\n\t\t\tif (typeof type === 'function') {\n\t\t\t\tvar extension = type;\n\t\t\t\treturn addExtension(extension.identifier.type, extension.identifier.name, extension);\n\t\t\t}\n\t\t\treturn addExtension(type, name, fn);\n\t\t}\n\t}\n\n};\n\n// expose shortcut methods\n\nvar _loop = function _loop(type) {\n\tif (!ExtensionType.hasOwnProperty(type)) {\n\t\treturn 'continue';\n\t}\n\tAPI.plugin[dashesToCamels('add-' + ExtensionType[type])] = function (name, fn) {\n\t\taddExtension(ExtensionType[type], name, fn);\n\t};\n};\n\nfor (var type in ExtensionType) {\n\tvar _ret = _loop(type);\n\n\tif (_ret === 'continue') continue;\n}\n\nmodule.exports = API;\n\n\treturn module.exports;\n}()) : null;","/* eslint-disable */\n\n/*\n * @pqina/flip v1.7.7 - A Beautifully Animated Flip Clock\n * Copyright (c) 2020 PQINA - https://pqina.nl/flip/\n */\nexport default typeof window !== 'undefined' ? (function() {\n\tif (!module) {\n\t\tvar module = {};\n\t}\n'use strict';\n\nvar asyncGenerator = function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(function (arg) {\n resume(\"next\", arg);\n }, function (arg) {\n resume(\"throw\", arg);\n });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n return this;\n };\n }\n\n AsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n };\n\n AsyncGenerator.prototype.throw = function (arg) {\n return this._invoke(\"throw\", arg);\n };\n\n AsyncGenerator.prototype.return = function (arg) {\n return this._invoke(\"return\", arg);\n };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar index = (function (_ref) {\n\tvar DOM = _ref.DOM,\n\t animate = _ref.Animation.animate,\n\t Extension = _ref.Extension,\n\t performance = _ref.Date.performance,\n\t _ref$View = _ref.View,\n\t rooter = _ref$View.rooter,\n\t destroyer = _ref$View.destroyer,\n\t drawer = _ref$View.drawer,\n\t updater = _ref$View.updater,\n\t styler = _ref$View.styler;\n\n\n\tvar easeOutCubic = Extension.getExtension(Extension.Type.EASING_FUNCTION, 'ease-out-cubic');\n\tvar easeOutSine = Extension.getExtension(Extension.Type.EASING_FUNCTION, 'ease-out-sine');\n\n\tvar draw = function draw(state) {\n\n\t\t// create cards if not already created\n\t\tif (state.isInitialValue()) {\n\n\t\t\t// clear current content\n\t\t\tstate.root.textContent = '';\n\n\t\t\t// value spacer\n\t\t\tstate.spacer = DOM.create('span', 'tick-flip-spacer');\n\t\t\tstate.root.appendChild(state.spacer);\n\n\t\t\t// shaders\n\t\t\tvar shadowTop = DOM.create('span', 'tick-flip-shadow-top tick-flip-shadow tick-flip-front');\n\t\t\tvar shadowBottom = DOM.create('span', 'tick-flip-shadow-bottom tick-flip-shadow tick-flip-back');\n\t\t\tstate.root.appendChild(shadowTop);\n\t\t\tstate.root.appendChild(shadowBottom);\n\n\t\t\t// create shadow element\n\t\t\tstate.shadowCard = DOM.create('span', 'tick-flip-card-shadow');\n\t\t\tstate.root.appendChild(state.shadowCard);\n\t\t}\n\n\t\t// set spacer value\n\t\tstate.spacer.textContent = state.value;\n\n\t\t// don't animate when invisible to the user\n\t\tif (!state.isInitialValue() && !DOM.visible(state.root)) {\n\t\t\tstate.cards.forEach(function (card) {\n\t\t\t\tcard.back = state.value;\n\t\t\t\tcard.front = state.value;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// get previous card\n\t\tvar turningCard = state.cards[state.cards.length - 1];\n\t\tif (turningCard) {\n\t\t\tturningCard.waiting = false;\n\t\t\tturningCard.offset = performance();\n\t\t\tturningCard.back = state.value;\n\t\t}\n\n\t\t// create a quick flipped initial card and then exit\n\t\tif (state.isInitialValue()) {\n\n\t\t\t// create flipped state (bottom)\n\t\t\tvar initialBottomCard = new FlipCard();\n\t\t\tinitialBottomCard.back = state.value;\n\n\t\t\tinitialBottomCard.offset = null;\n\t\t\tinitialBottomCard.progress = 1;\n\n\t\t\tstate.root.insertBefore(initialBottomCard.root, state.root.firstChild);\n\t\t\tstate.cards.push(initialBottomCard);\n\t\t}\n\n\t\t// create a new card\n\t\tvar topCard = new FlipCard();\n\n\t\ttopCard.offset = null;\n\t\ttopCard.progress = 0;\n\t\ttopCard.visual_progress = 0;\n\t\ttopCard.waiting = true;\n\n\t\ttopCard.front = state.value;\n\t\ttopCard.rotate(0);\n\t\t// topCard.rotate(-1); // prevents slight anti-aliasing issues on Safari / Firefox\n\n\t\tstate.root.insertBefore(topCard.root, state.root.firstChild);\n\t\tstate.cards.push(topCard);\n\n\t\tif (!state.animating) {\n\t\t\tstate.animating = true;\n\n\t\t\tvar ease = Extension.getExtension(Extension.Type.EASING_FUNCTION, state.style.flipEasing);\n\n\t\t\tvar tick = function tick() {\n\n\t\t\t\t// find cards that require animation\n\t\t\t\tvar cardsToAnimate = state.cards.filter(function (card) {\n\t\t\t\t\treturn !card.done && !card.waiting;\n\t\t\t\t});\n\n\t\t\t\tif (cardsToAnimate.length === 0) {\n\t\t\t\t\tstate.animating = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// calculate card progress\n\t\t\t\tcardsToAnimate.forEach(function (card) {\n\n\t\t\t\t\tif (card.offset !== null) {\n\t\t\t\t\t\tcard.progress = (performance() - card.offset) / state.style.flipDuration;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (card.progress >= 1) {\n\t\t\t\t\t\tcard.progress = 1;\n\t\t\t\t\t\tcard.done = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tcard.visual_progress = ease(card.progress);\n\t\t\t\t});\n\n\t\t\t\t// sort\n\t\t\t\tvar cardDistance = 0.01;\n\t\t\t\tcardsToAnimate.reverse().forEach(function (card, index) {\n\n\t\t\t\t\tvar previousCard = cardsToAnimate[index - 1];\n\n\t\t\t\t\tif (previousCard && card.visual_progress <= previousCard.visual_progress) {\n\t\t\t\t\t\tcard.visual_progress = previousCard.visual_progress + cardDistance;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tcardsToAnimate.reverse();\n\n\t\t\t\t// update shadows\n\t\t\t\tstate.cards.forEach(function (card, index) {\n\n\t\t\t\t\t// set default shadow and highlight levels based on visual animation progress\n\t\t\t\t\tvar shadowFrontProgress = 1 - Math.abs(card.visual_progress - .5) * 2;\n\t\t\t\t\tvar highlightBackProgress = 1 - (card.visual_progress - .5) / .5;\n\n\t\t\t\t\tcard.shadowFront = shadowFrontProgress;\n\t\t\t\t\tcard.highlightBack = highlightBackProgress;\n\n\t\t\t\t\t// recalculate levels based on other card positions\n\t\t\t\t\tvar cardAbove = state.cards[index + 1];\n\n\t\t\t\t\t// if there's a card above me, my back is visible, and the above card is falling\n\t\t\t\t\tif (cardAbove && card.visual_progress > .5 && card.visual_progress > 0) {\n\t\t\t\t\t\tcard.shadowBack = easeOutCubic(cardAbove.visual_progress);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// update and animate cards\n\t\t\t\tcardsToAnimate.forEach(function (card, index) {\n\n\t\t\t\t\tvar p = card.visual_progress;\n\n\t\t\t\t\tif (p > .5 && !card.done) {\n\t\t\t\t\t\tcard.root.style.zIndex = 10 + index;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcard.root.style.removeProperty('z-index');\n\t\t\t\t\t}\n\n\t\t\t\t\tcard.rotate(p * -180);\n\t\t\t\t});\n\n\t\t\t\t// handle card stack shadow\n\t\t\t\tvar shadowProgress = 0;\n\t\t\t\tvar dist = 1;\n\t\t\t\tcardsToAnimate.forEach(function (card) {\n\t\t\t\t\tvar d = Math.abs(card.visual_progress - .5);\n\t\t\t\t\tif (d < dist) {\n\t\t\t\t\t\tdist = d;\n\t\t\t\t\t\tshadowProgress = card.visual_progress;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tvar s = shadowProgress < .5 ? easeOutSine(shadowProgress / .5) : easeOutSine((1 - shadowProgress) / .5);\n\t\t\t\tstate.shadowCard.style.opacity = s;\n\t\t\t\tDOM.transform(state.shadowCard, 'scaleY', s);\n\n\t\t\t\t// clean up cards that finished animating\n\t\t\t\tstate.cards.filter(function (card) {\n\t\t\t\t\treturn card.done;\n\t\t\t\t}) // gather all done cards\n\t\t\t\t.slice(0, -1) // don't delete the last one\n\t\t\t\t.forEach(function (card) {\n\t\t\t\t\t// let's delete them\n\n\t\t\t\t\t// remove predecessor from cards array\n\t\t\t\t\tstate.cards = state.cards.filter(function (c) {\n\t\t\t\t\t\treturn c !== card;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove predecessor from the DOM\n\t\t\t\t\tif (card.root.parentNode) {\n\t\t\t\t\t\tstate.root.removeChild(card.root);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trequestAnimationFrame(tick);\n\t\t\t};\n\n\t\t\ttick();\n\t\t}\n\t};\n\n\tvar FlipCard = function () {\n\t\tfunction FlipCard() {\n\t\t\tclassCallCheck(this, FlipCard);\n\n\n\t\t\tthis._root = DOM.create('span', 'tick-flip-card');\n\n\t\t\t// card front\n\t\t\tvar front = DOM.create('span', 'tick-flip-panel-front tick-flip-front tick-flip-panel');\n\t\t\tvar textFront = DOM.create('span', 'tick-flip-panel-front-text');\n\t\t\tvar textFrontWrapper = DOM.create('span', 'tick-flip-panel-text-wrapper');\n\t\t\ttextFront.appendChild(textFrontWrapper);\n\t\t\tvar shadowFront = DOM.create('span', 'tick-flip-panel-front-shadow');\n\t\t\tfront.appendChild(textFront);\n\t\t\tfront.appendChild(shadowFront);\n\n\t\t\tvar back = DOM.create('span', 'tick-flip-panel-back tick-flip-back tick-flip-panel');\n\t\t\tvar textBack = DOM.create('span', 'tick-flip-panel-back-text');\n\t\t\tvar textBackWrapper = DOM.create('span', 'tick-flip-panel-text-wrapper');\n\t\t\ttextBack.appendChild(textBackWrapper);\n\t\t\tvar highlightBack = DOM.create('span', 'tick-flip-panel-back-highlight');\n\t\t\tvar shadowBack = DOM.create('span', 'tick-flip-panel-back-shadow');\n\t\t\tback.appendChild(textBack);\n\t\t\tback.appendChild(highlightBack);\n\t\t\tback.appendChild(shadowBack);\n\n\t\t\t// create card\n\t\t\tthis._root.appendChild(front);\n\t\t\tthis._root.appendChild(back);\n\n\t\t\t// references for animation\n\t\t\tthis._front = front;\n\t\t\tthis._back = back;\n\t\t\tthis._shadowFront = shadowFront;\n\t\t\tthis._shadowBack = shadowBack;\n\t\t\tthis._highlightBack = highlightBack;\n\n\t\t\t// back\n\t\t\tthis._textBack = textBackWrapper;\n\t\t\tthis._textFront = textFrontWrapper;\n\n\t\t\t// front and back values\n\t\t\tthis._frontValue = null;\n\t\t\tthis._backValue = null;\n\t\t}\n\n\t\tcreateClass(FlipCard, [{\n\t\t\tkey: 'rotate',\n\t\t\tvalue: function rotate(degrees) {\n\t\t\t\tthis._front.style.transform = 'rotateX(' + degrees + 'deg)';\n\t\t\t\tthis._back.style.transform = 'rotateX(' + (-180 + degrees) + 'deg)';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'root',\n\t\t\tget: function get$$1() {\n\t\t\t\treturn this._root;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'front',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._frontValue = value;\n\t\t\t\tthis._textFront.textContent = value;\n\t\t\t},\n\t\t\tget: function get$$1() {\n\t\t\t\treturn this._frontValue;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'back',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._backValue = value;\n\t\t\t\tthis._textBack.textContent = value;\n\t\t\t},\n\t\t\tget: function get$$1() {\n\t\t\t\treturn this._backValue;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'highlightBack',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._highlightBack.style.opacity = value;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'shadowBack',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._shadowBack.style.opacity = value;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'shadowFront',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._shadowFront.style.opacity = value;\n\t\t\t}\n\t\t}]);\n\t\treturn FlipCard;\n\t}();\n\n\t/**\n * Expose\n */\n\n\n\treturn function (root) {\n\n\t\tvar state = {\n\n\t\t\tcards: [],\n\t\t\tlastCard: null,\n\t\t\tinitialCard: null,\n\n\t\t\tshadowAbove: null,\n\t\t\tshadowBelow: null,\n\t\t\tshadowCard: null,\n\n\t\t\tcurrentValue: null,\n\t\t\tlastValue: null,\n\n\t\t\tfront: null,\n\t\t\tback: null\n\t\t};\n\n\t\treturn Object.assign({}, rooter(state, root, 'flip'), updater(state), styler(state, {\n\t\t\tflipDuration: 800,\n\t\t\tflipEasing: 'ease-out-bounce'\n\t\t}), drawer(state, draw), destroyer(state));\n\t};\n});\n\nmodule.exports = index;\n\n\tmodule.exports.identifier = {\n\t\tname:'flip',\n\t\ttype:'view'\n\t};\n return module.exports;\n}()) : null;","import Tick from '../tick/tick.core.module';\nimport Flip from './tick.view.flip.module';\nTick.plugin.add(Flip);\nexport default Tick;","const Handlebars = require('handlebars/runtime');\r\nHandlebars.registerHelper('eq', (arg1, arg2, options) => {\r\n console.log(options.fn(this));\r\n return (arg1 === arg2) ? options.fn(this) : options.inverse(this);\r\n});\r\nHandlebars.registerHelper('getCompany', function () {\r\n var result = '';\r\n if (this.company) result += this.company;\r\n if (this.alias && this.company !== this.alias) result += ` (${this.alias})`;\r\n return result;\r\n});\r\nHandlebars.registerHelper('getPhone', function () {\r\n var result = '';\r\n if (this.mobile) result += `+${this.mobile}`;\r\n if (this.phone && this.mobile !== this.phone) result += `, +${this.phone}`;\r\n if (this.extension) result += ` × ${this.extension}`;\r\n return result;\r\n});\r\nHandlebars.registerHelper('getMail', function () {\r\n var result = '';\r\n if (this.mail) result += this.mail;\r\n if (this.personal && this.mail !== this.personal) result += `, ${this.personal}`;\r\n return result;\r\n});\r\nmodule.exports = Handlebars;","import 'inputmask';\r\nimport 'inputmask-multi';\r\nimport { ScrollSpy, Collapse, Popover } from 'bootstrap';\r\nimport validate from 'jquery-validation';\r\nimport steps from 'jquery-steps';\r\nimport SmoothScroll from 'smooth-scroll';\r\n//import FlipClock from 'flipclock';\r\nimport Tick from '@pqina/flip';\r\nimport sourcebuster from 'sourcebuster';\r\nimport profileTemplate from '@/profile.handlebars';\r\n\r\n$(document).ready(() => {\r\n const element = document.querySelector('#countdown');\r\n const now = new Date();\r\n\r\n if (startDate && startDate >= now) {\r\n const tick = Tick.DOM.create(element, {\r\n didInit: (tick) => {\r\n element.style.display = 'block';\r\n\r\n const locale = {\r\n DAY_PLURAL: 'дней',\r\n DAY_SINGULAR: 'день',\r\n HOUR_PLURAL: 'часов',\r\n HOUR_SINGULAR: 'час',\r\n MINUTE_PLURAL: 'мин',\r\n MINUTE_SINGULAR: 'мин',\r\n SECOND_PLURAL: 'сек',\r\n SECOND_SINGULAR: 'сек',\r\n };\r\n\r\n for (let key in locale) {\r\n if (!locale.hasOwnProperty(key)) { continue; }\r\n tick.setConstant(key, locale[key]);\r\n }\r\n\r\n const counter = Tick.count.down(startDate.toISOString());\r\n counter.onupdate = (value) => {\r\n tick.value = value;\r\n };\r\n\r\n counter.onended = () => {\r\n element.style.display = 'none';\r\n };\r\n }\r\n });\r\n\r\n }\r\n\r\n // Navigation Bar\r\n\r\n const collapse = new Collapse(document.querySelector('.navbar-collapse'), { toggle: false });\r\n $('.navbar-brand, .nav-link').click((e) => { collapse.hide() });\r\n\r\n const navbarCollapse = () => {\r\n const $nav = $('#navigation');\r\n if ($nav.offset().top > 100) {\r\n $nav.addClass('navbar-shrink');\r\n } else {\r\n $nav.removeClass('navbar-shrink');\r\n }\r\n }\r\n\r\n navbarCollapse();\r\n $(window).scroll(navbarCollapse);\r\n\r\n const scrollSpy = new ScrollSpy(document.body, { target: '#navigation', offset: 56 });\r\n\r\n //$('body').scrollspy();\r\n\r\n // Smooth Scroll\r\n\r\n const scroll = new SmoothScroll('a[href*=\"#\"]', { speed: 250, offset: 56 });\r\n document.addEventListener('scrollStart', (event) => {\r\n if (event.detail && event.detail.anchor && event.detail.anchor.id) {\r\n const anchor = event.detail.anchor;\r\n const toggle = event.detail.toggle;\r\n const id = anchor.id;\r\n if (id.includes('become') && $(anchor).is(':hidden')) {\r\n event.preventDefault();\r\n $(anchor).slideDown('fast', () => {\r\n scroll.animateScroll(anchor, toggle);\r\n });\r\n }\r\n }\r\n }, false);\r\n\r\n // Promo buttons next block\r\n\r\n $('.btn-next').each((index, el) => {\r\n const $el = $(el);\r\n const $span = $el.children('span');\r\n const $currentSection = $el.parents('section');\r\n if ($currentSection && $span) {\r\n const $nextSection = $currentSection.nextAll('section');\r\n if ($nextSection) {\r\n const anchor = `#${$nextSection.attr('id')}`\r\n const btn = $nextSection.data('btn');\r\n if (anchor) $el.attr('href', anchor);\r\n if (btn) $span.html(btn);\r\n if (anchor && btn) $el.show().css('display', 'inline-block');\r\n }\r\n }\r\n });\r\n\r\n // FlipClock Countdown\r\n\r\n //if (countdown) {\r\n // const el = document.querySelector('#countdown');\r\n // const clock = new FlipClock(el, countdown, {\r\n // clockFace: 'DailyCounter',\r\n // language: 'ru',\r\n // autoStart: true,\r\n // countdown: true,\r\n // callbacks: {\r\n // stop: () => { $('#countdown').slideToggle(); }\r\n // }\r\n // });\r\n //}\r\n\r\n // Validation \r\n\r\n\r\n\r\n // Register Form\r\n\r\n function normalize(value) {\r\n return $.trim(value);\r\n }\r\n\r\n $.validator.setDefaults({\r\n onfocusout: function (e) {\r\n this.element(e);\r\n },\r\n onkeyup: false,\r\n highlight: (element) => {\r\n $(element).closest('.form-control').removeClass('is-valid').addClass('is-invalid');\r\n },\r\n unhighlight: (element) => {\r\n $(element).closest('.form-control').removeClass('is-invalid').addClass('is-valid');\r\n },\r\n errorElement: 'div',\r\n errorClass: 'invalid-feedback',\r\n errorPlacement: (error, element) => {\r\n if (element.parent('.input-group-prepend').length) {\r\n $(element).siblings(\".invalid-feedback\").append(error);\r\n } else {\r\n if (element.attr('id') === 'agree') {\r\n const parent = element.parent();\r\n parent.append(error);\r\n } else if (element.attr('name') === 'format') {\r\n error.appendTo('.format-block');\r\n } else {\r\n error.insertAfter(element);\r\n }\r\n }\r\n }\r\n });\r\n\r\n$.validator.addMethod('cyrillic', function (value, element, regexp) {\r\n return this.optional(element) || regexp.test(value);\r\n});\r\n\r\n\r\n$('#speaker-form').validate({\r\n normalizer: normalize,\r\n rules: {\r\n speakerFullname: {\r\n required: true,\r\n cyrillic: /^[а-яё\\-\\s]+$/iu\r\n },\r\n speakerCompany: {\r\n required: true\r\n },\r\n speakerMail: {\r\n required: true,\r\n email: true\r\n },\r\n speakerMobile: {\r\n required: true\r\n }\r\n },\r\n messages: {\r\n speakerFullname: {\r\n required: 'Имя и фамилию необходимо заполнить',\r\n cyrillic: 'Пожалуйста заполняйте имя и фамилию кириллицей, по-русски'\r\n },\r\n speakerCompany: {\r\n required: 'Компанию необходимо заполнить'\r\n },\r\n speakerMail: {\r\n required: 'Эл. почту необходимо заполнить',\r\n email: 'Неверный формат эл. почты'\r\n },\r\n speakerMobile: {\r\n required: 'Мобильный телефон необходимо заполнить'\r\n }\r\n },\r\n submitHandler: (form) => {\r\n if ($(form).valid()) {\r\n $('#speakerSubmit').prop('disabled', true);\r\n form.submit();\r\n }\r\n }\r\n});\r\n\r\n$('#sponsor-form').validate({\r\n normalizer: normalize,\r\n rules: {\r\n sponsorFullname: {\r\n required: true,\r\n cyrillic: /^[а-яё\\-\\s]+$/iu\r\n },\r\n sponsorCompany: {\r\n required: true\r\n },\r\n sponsorMail: {\r\n required: true,\r\n email: true\r\n },\r\n sponsorMobile: {\r\n required: true\r\n }\r\n },\r\n messages: {\r\n sponsorFullname: {\r\n required: 'Имя и фамилию необходимо заполнить',\r\n cyrillic: 'Пожалуйста заполняйте имя и фамилию кириллицей, по-русски'\r\n },\r\n sponsorCompany: {\r\n required: 'Компанию необходимо заполнить'\r\n },\r\n sponsorMail: {\r\n required: 'Эл. почту необходимо заполнить',\r\n email: 'Неверный формат эл. почты'\r\n },\r\n sponsorMobile: {\r\n required: 'Мобильный телефон необходимо заполнить'\r\n }\r\n },\r\n submitHandler: (form) => {\r\n if ($(form).valid()) {\r\n $('#sponsorSubmit').prop('disabled', true);\r\n form.submit();\r\n }\r\n }\r\n});\r\n\r\nconst $form = $('#attendee-form');\r\n\r\n$form.validate({\r\n rules: {\r\n searchLastname: {\r\n required: true,\r\n cyrillic: /^[а-яё\\-\\s]+$/iu,\r\n },\r\n searchMobile: {\r\n required: true,\r\n remote: {\r\n type: 'POST',\r\n url: '/api/register/phone',\r\n data: {\r\n conference: () => $('#conference').val(),\r\n number: () => $('#searchMobile').val(),\r\n type: 'mobile'\r\n }\r\n }\r\n },\r\n firstname: {\r\n required: true,\r\n cyrillic: /^[а-яё\\-\\s]+$/iu,\r\n },\r\n lastname: {\r\n required: true,\r\n cyrillic: /^[а-яё\\-\\s]+$/iu,\r\n },\r\n midname: {\r\n cyrillic: /^[а-яё\\-\\s]+$/iu,\r\n },\r\n title: {\r\n required: true,\r\n },\r\n company: {\r\n required: true,\r\n },\r\n phone: {\r\n required: true,\r\n remote: {\r\n type: 'POST',\r\n url: '/api/register/phone',\r\n data: {\r\n conference: () => $('#conference').val(),\r\n number: () => $('#phone').val(),\r\n type: 'phone'\r\n }\r\n }\r\n },\r\n mobile: {\r\n required: true,\r\n remote: {\r\n type: 'POST',\r\n url: '/api/register/phone',\r\n data: {\r\n conference: () => $('#conference').val(),\r\n number: () => $('#mobile').val(),\r\n type: 'mobile'\r\n }\r\n }\r\n },\r\n mail: {\r\n required: true,\r\n email: true\r\n },\r\n personal: {\r\n email: true,\r\n },\r\n format: {\r\n required: true\r\n },\r\n agree: {\r\n required: true\r\n }\r\n },\r\n messages: {\r\n searchLastname: {\r\n required: 'Фамилию необходимо заполнить',\r\n cyrillic: 'Пожалуйста заполняйте фамилию кириллицей, по-русски'\r\n },\r\n searchMobile: {\r\n required: 'Заполните мобильный телефон'\r\n },\r\n firstname: {\r\n required: 'Имя необходимо заполнить',\r\n cyrillic: 'Пожалуйста заполняйте имя кириллицей, по-русски'\r\n },\r\n lastname: {\r\n required: 'Фамилию необходимо заполнить',\r\n cyrillic: 'Пожалуйста заполняйте фамилию кириллицей, по-русски'\r\n },\r\n midname: {\r\n cyrillic: 'Пожалуйста заполняйте отчество кириллицей, по-русски'\r\n },\r\n title: {\r\n required: 'Должность необходимо заполнить'\r\n },\r\n company: {\r\n required: 'Заполните официальное наименование'\r\n },\r\n phone: {\r\n required: 'Заполните рабочий телефон'\r\n },\r\n mobile: {\r\n required: 'Заполните мобильный телефон'\r\n },\r\n mail: {\r\n required: 'Рабочую эл. почту необходимо заполнить',\r\n email: 'Неверный формат эл. почты'\r\n },\r\n personal: {\r\n email: 'Неверный формат эл. почты'\r\n },\r\n format: {\r\n required: 'Пожалуйста выберите формат вашего участия'\r\n },\r\n agree: {\r\n required: 'К сожалению, согласно закону о персональных данных, мы должны получить от Вас согласие'\r\n }\r\n }\r\n});\r\n\r\n// Steps\r\nlet profiles = [];\r\n$('#wizard').steps({\r\n headerTag: 'h3',\r\n bodyTag: 'fieldset',\r\n transitionEffect: 'fade',\r\n titleTemplate: '#index#. #title#',\r\n labels: {\r\n cancel: 'Отмена',\r\n current: 'Текущий шаг',\r\n pagination: 'Pagination',\r\n finish: 'Готово',\r\n next: 'Далее →',\r\n previous: '← Назад',\r\n loading: 'Идет загрузка'\r\n },\r\n onStepChanging: (event, currentIndex, newIndex) => {\r\n\r\n // Allow go back\r\n // console.log('Current = ' + currentIndex + ' new = ' + newIndex + ' valid = ' + $form.valid());\r\n if (currentIndex > newIndex) {\r\n return true;\r\n }\r\n\r\n // Step 1. Search\r\n\r\n if (currentIndex === 0 && newIndex === 1 && $form.valid()) {\r\n $.ajax({\r\n async: true,\r\n method: 'GET',\r\n url: '/api/register/search',\r\n data: {\r\n lastname: $('#searchLastname').val().trim(),\r\n mobile: $('#searchMobile').val()\r\n },\r\n success: (data) => {\r\n if (data && data.length > 0) {\r\n profiles = data;\r\n $('#profiles').html(profileTemplate({ profiles: data }));\r\n $('#profile-0').prop('checked', true);\r\n $('#profile-found').show();\r\n $('#profile-new').hide();\r\n }\r\n else {\r\n $('#profile-new-checkbox').prop('checked', true);\r\n $('#profile-found').hide();\r\n $('#profile-new').show();\r\n }\r\n return true;\r\n },\r\n error: (err) => {\r\n alert('Что-то пошло не так');\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n // Step 2. Profile\r\n\r\n if (currentIndex === 1 && newIndex === 2 && $form.valid()) {\r\n const idx = $('input[name=\"profile\"]:checked').val();\r\n if (idx >= 0) {\r\n const profile = profiles[idx];\r\n $('#person').val(profile.id);\r\n $('#lastname').val(profile.lastname);\r\n $('#firstname').val(profile.firstname);\r\n $('#midname').val(profile.midname);\r\n $('#title').val(profile.title);\r\n $('#company').val(profile.company);\r\n $('#alias').val(profile.alias);\r\n $('#mobile').val(profile.mobile);\r\n $('#phone').val(profile.phone);\r\n $('#extension').val(profile.extension);\r\n $('#mail').val(profile.mail);\r\n $('#personal').val(profile.personal);\r\n }\r\n }\r\n\r\n // Step 3. Edit\r\n\r\n\r\n // Step 4. Confirm\r\n\r\n //if (currentIndex == 0 && newIndex == 1) {\r\n // if ($('#lastname').val() == 'Бериков') {\r\n // $('#choose').hide();\r\n // }\r\n //}\r\n return $form.valid();\r\n },\r\n onFinishing: (event, currentIndex) => {\r\n return $form.valid();\r\n },\r\n onFinished: (event, currentIndex) => {\r\n $form.submit();\r\n }\r\n});\r\n\r\n$('#attendee-form').keypress((e) => {\r\n const key = e.which;\r\n if (key == 13 && $('#attendee-form').valid()) {\r\n $('a[href=\"#next\"]').click();\r\n return false;\r\n }\r\n});\r\n\r\n// Input Mask\r\n\r\nconst world = $.masksSort($.masksLoad('/js/phone-codes.json'), ['#'], /[0-9]|#/, 'mask');\r\nconst mask = {\r\n inputmask: {\r\n definitions: { '#': { validator: '[0-9]', cardinality: 1 } },\r\n showMaskOnHover: false,\r\n autoUnmask: true,\r\n clearMaskOnLostFocus: true\r\n },\r\n match: /[0-9]/,\r\n replace: '#',\r\n listKey: 'mask'\r\n};\r\n$('input[type=\"tel\"]').inputmasks($.extend(true, {}, mask, { list: world }));\r\n\r\n// Source Buster\r\n\r\nsourcebuster.init({\r\n callback: (sb) => {\r\n $('input[name=\"sourceType\"]').val(sb.current.typ);\r\n $('input[name=\"sourceName\"]').val(sb.current.src);\r\n $('input[name=\"sourceMedium\"]').val(sb.current.mdm);\r\n $('input[name=\"sourceCampaign\"]').val(sb.current.cmp);\r\n $('input[name=\"sourceContent\"]').val(sb.current.cnt);\r\n $('input[name=\"sourceTerm\"]').val(sb.current.trm);\r\n }\r\n});\r\n\r\n// Radio format\r\n$('input[type=radio][name=format]').change((el) => {\r\n const value = el.target.value;\r\n if (value === 'offline') {\r\n $('.offline-reminder').slideDown('slow');\r\n }\r\n});\r\n\r\n// Popovers\r\n\r\n[...document.querySelectorAll('[data-bs-toggle=\"popover\"]')].forEach(el => new Popover(el));\r\n});","var Handlebars = require(\"./src/js/handlebars/helpers.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
\\r\\n \\r\\n
\\r\\n
\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"lastname\") || (depth0 != null ? lookupProperty(depth0,\"lastname\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"lastname\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":31},\"end\":{\"line\":5,\"column\":43}}}) : helper)))\n + \" \"\n + alias4(((helper = (helper = lookupProperty(helpers,\"firstname\") || (depth0 != null ? lookupProperty(depth0,\"firstname\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"firstname\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":44},\"end\":{\"line\":5,\"column\":57}}}) : helper)))\n + \" \"\n + alias4(((helper = (helper = lookupProperty(helpers,\"midname\") || (depth0 != null ? lookupProperty(depth0,\"midname\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"midname\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":58},\"end\":{\"line\":5,\"column\":69}}}) : helper)))\n + \"
\\r\\n
\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":29},\"end\":{\"line\":6,\"column\":38}}}) : helper)))\n + \"
\\r\\n
\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"getCompany\") || (depth0 != null ? lookupProperty(depth0,\"getCompany\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"getCompany\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":31},\"end\":{\"line\":7,\"column\":45}}}) : helper)))\n + \"
\\r\\n
\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"getPhone\") || (depth0 != null ? lookupProperty(depth0,\"getPhone\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"getPhone\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":30},\"end\":{\"line\":8,\"column\":42}}}) : helper)))\n + \"
\\r\\n
\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"getMail\") || (depth0 != null ? lookupProperty(depth0,\"getMail\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"getMail\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":40}}}) : helper)))\n + \"
\\r\\n
\\r\\n
\\r\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"profiles\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":12,\"column\":9}}})) != null ? stack1 : \"\");\n},\"useData\":true});","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.7';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy43JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (global.Symbol && context[global.Symbol.iterator]) {\n var newContext = [];\n var iterator = context[global.Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar logger = _interopRequireWildcard(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n logger.log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n var root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O0FBRzVDLE1BQU0sb0NBQW9DLEdBQ3hDLFlBQVksQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRTFELFdBQVMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDdkQsUUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLGFBQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELFVBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGVBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQ3ZCO0tBQ0Y7QUFDRCxXQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUV0RSxRQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDOUMsV0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO0FBQ2pCLHdCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7S0FDNUMsQ0FBQyxDQUFDOztBQUVILFFBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDcEMsSUFBSSxFQUNKLE9BQU8sRUFDUCxPQUFPLEVBQ1AsZUFBZSxDQUNoQixDQUFDOztBQUVGLFFBQUksTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQ2pDLGFBQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQzFDLE9BQU8sRUFDUCxZQUFZLENBQUMsZUFBZSxFQUM1QixHQUFHLENBQ0osQ0FBQztBQUNGLFlBQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDbkU7QUFDRCxRQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDbEIsVUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ2xCLFlBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsYUFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxjQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVCLGtCQUFNO1dBQ1A7O0FBRUQsZUFBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0FBQ0QsY0FBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDM0I7QUFDRCxhQUFPLE1BQU0sQ0FBQztLQUNmLE1BQU07QUFDTCxZQUFNLDJCQUNKLGNBQWMsR0FDWixPQUFPLENBQUMsSUFBSSxHQUNaLDBEQUEwRCxDQUM3RCxDQUFDO0tBQ0g7R0FDRjs7O0FBR0QsTUFBSSxTQUFTLEdBQUc7QUFDZCxVQUFNLEVBQUUsZ0JBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDL0IsVUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLENBQUEsQUFBQyxFQUFFO0FBQzFCLGNBQU0sMkJBQWMsR0FBRyxHQUFHLElBQUksR0FBRyxtQkFBbUIsR0FBRyxHQUFHLEVBQUU7QUFDMUQsYUFBRyxFQUFFLEdBQUc7U0FDVCxDQUFDLENBQUM7T0FDSjtBQUNELGFBQU8sU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDNUM7QUFDRCxrQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxZQUFZLEVBQUU7QUFDN0MsVUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLFVBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUNsQixlQUFPLE1BQU0sQ0FBQztPQUNmO0FBQ0QsVUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFO0FBQzlELGVBQU8sTUFBTSxDQUFDO09BQ2Y7O0FBRUQsVUFBSSxxQ0FBZ0IsTUFBTSxFQUFFLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsRUFBRTtBQUN2RSxlQUFPLE1BQU0sQ0FBQztPQUNmO0FBQ0QsYUFBTyxTQUFTLENBQUM7S0FDbEI7QUFDRCxVQUFNLEVBQUUsZ0JBQVMsTUFBTSxFQUFFLElBQUksRUFBRTtBQUM3QixVQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzFCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUIsWUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BFLFlBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUNsQixpQkFBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEI7T0FDRjtLQUNGO0FBQ0QsVUFBTSxFQUFFLGdCQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDakMsYUFBTyxPQUFPLE9BQU8sS0FBSyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDeEU7O0FBRUQsb0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtBQUN4QyxpQkFBYSxFQUFFLG9CQUFvQjs7QUFFbkMsTUFBRSxFQUFFLFlBQVMsQ0FBQyxFQUFFO0FBQ2QsVUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFNBQUcsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxhQUFPLEdBQUcsQ0FBQztLQUNaOztBQUVELFlBQVEsRUFBRSxFQUFFO0FBQ1osV0FBTyxFQUFFLGlCQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtBQUNuRSxVQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUNuQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixVQUFJLElBQUksSUFBSSxNQUFNLElBQUksV0FBVyxJQUFJLG1CQUFtQixFQUFFO0FBQ3hELHNCQUFjLEdBQUcsV0FBVyxDQUMxQixJQUFJLEVBQ0osQ0FBQyxFQUNELEVBQUUsRUFDRixJQUFJLEVBQ0osbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FBQztPQUNILE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUMxQixzQkFBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7T0FDOUQ7QUFDRCxhQUFPLGNBQWMsQ0FBQztLQUN2Qjs7QUFFRCxRQUFJLEVBQUUsY0FBUyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQzNCLGFBQU8sS0FBSyxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLGFBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO09BQ3ZCO0FBQ0QsYUFBTyxLQUFLLENBQUM7S0FDZDtBQUNELGlCQUFhLEVBQUUsdUJBQVMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNyQyxVQUFJLEdBQUcsR0FBRyxLQUFLLElBQUksTUFBTSxDQUFDOztBQUUxQixVQUFJLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtBQUN2QyxXQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3ZDOztBQUVELGFBQU8sR0FBRyxDQUFDO0tBQ1o7O0FBRUQsZUFBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDOztBQUU1QixRQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJO0FBQ2pCLGdCQUFZLEVBQUUsWUFBWSxDQUFDLFFBQVE7R0FDcEMsQ0FBQzs7QUFFRixXQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQWdCO1FBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNoQyxRQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOztBQUV4QixPQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDNUMsVUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDaEM7QUFDRCxRQUFJLE1BQU0sWUFBQTtRQUNSLFdBQVcsR0FBRyxZQUFZLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7QUFDN0QsUUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFO0FBQzFCLFVBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUNsQixjQUFNLEdBQ0osT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQ3hCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQztPQUN0QixNQUFNO0FBQ0wsY0FBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDcEI7S0FDRjs7QUFFRCxhQUFTLElBQUksQ0FBQyxPQUFPLGdCQUFnQjtBQUNuQyxhQUNFLEVBQUUsR0FDRixZQUFZLENBQUMsSUFBSSxDQUNmLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxDQUFDLE9BQU8sRUFDakIsU0FBUyxDQUFDLFFBQVEsRUFDbEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FDRDtLQUNIOztBQUVELFFBQUksR0FBRyxpQkFBaUIsQ0FDdEIsWUFBWSxDQUFDLElBQUksRUFDakIsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFDcEIsSUFBSSxFQUNKLFdBQVcsQ0FDWixDQUFDO0FBQ0YsV0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQy9COztBQUVELEtBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztBQUVqQixLQUFHLENBQUMsTUFBTSxHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ3BCLFVBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLHFDQUErQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxlQUFTLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQzs7QUFFbEMsVUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFOztBQUUzQixpQkFBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUMxQyxPQUFPLENBQUMsUUFBUSxFQUNoQixHQUFHLENBQUMsUUFBUSxDQUNiLENBQUM7T0FDSDtBQUNELFVBQUksWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFO0FBQ3pELGlCQUFTLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQ2pDLEVBQUUsRUFDRixHQUFHLENBQUMsVUFBVSxFQUNkLE9BQU8sQ0FBQyxVQUFVLENBQ25CLENBQUM7T0FDSDs7QUFFRCxlQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNyQixlQUFTLENBQUMsa0JBQWtCLEdBQUcsOENBQXlCLE9BQU8sQ0FBQyxDQUFDOztBQUVqRSxVQUFJLG1CQUFtQixHQUNyQixPQUFPLENBQUMseUJBQXlCLElBQ2pDLG9DQUFvQyxDQUFDO0FBQ3ZDLGlDQUFrQixTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDbkUsaUNBQWtCLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3pFLE1BQU07QUFDTCxlQUFTLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO0FBQzFELGVBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNwQyxlQUFTLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDdEMsZUFBUyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQzFDLGVBQVMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUNqQztHQUNGLENBQUM7O0FBRUYsS0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtBQUNsRCxRQUFJLFlBQVksQ0FBQyxjQUFjLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDL0MsWUFBTSwyQkFBYyx3QkFBd0IsQ0FBQyxDQUFDO0tBQy9DO0FBQ0QsUUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JDLFlBQU0sMkJBQWMseUJBQXlCLENBQUMsQ0FBQztLQUNoRDs7QUFFRCxXQUFPLFdBQVcsQ0FDaEIsU0FBUyxFQUNULENBQUMsRUFDRCxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsSUFBSSxFQUNKLENBQUMsRUFDRCxXQUFXLEVBQ1gsTUFBTSxDQUNQLENBQUM7R0FDSCxDQUFDO0FBQ0YsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxTQUFTLFdBQVcsQ0FDekIsU0FBUyxFQUNULENBQUMsRUFDRCxFQUFFLEVBQ0YsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsTUFBTSxFQUNOO0FBQ0EsV0FBUyxJQUFJLENBQUMsT0FBTyxFQUFnQjtRQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDakMsUUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQzNCLFFBQ0UsTUFBTSxJQUNOLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQ3BCLEVBQUUsT0FBTyxLQUFLLFNBQVMsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQSxBQUFDLEVBQzFEO0FBQ0EsbUJBQWEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMxQzs7QUFFRCxXQUFPLEVBQUUsQ0FDUCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLFNBQVMsQ0FBQyxRQUFRLEVBQ2xCLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUNwQixXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUN4RCxhQUFhLENBQ2QsQ0FBQztHQUNIOztBQUVELE1BQUksR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDOztBQUV6RSxNQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNqQixNQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QyxNQUFJLENBQUMsV0FBVyxHQUFHLG1CQUFtQixJQUFJLENBQUMsQ0FBQztBQUM1QyxTQUFPLElBQUksQ0FBQztDQUNiOzs7Ozs7QUFLTSxTQUFTLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN4RCxNQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osUUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO0FBQ3JDLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3pDLE1BQU07QUFDTCxhQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMUM7R0FDRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTs7QUFFekMsV0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDdkIsV0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7R0FDckM7QUFDRCxTQUFPLE9BQU8sQ0FBQztDQUNoQjs7QUFFTSxTQUFTLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTs7QUFFdkQsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDMUUsU0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQ2YsV0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztHQUN2RTs7QUFFRCxNQUFJLFlBQVksWUFBQSxDQUFDO0FBQ2pCLE1BQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTs7QUFDckMsYUFBTyxDQUFDLElBQUksR0FBRyxrQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXpDLFVBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDcEIsa0JBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFNBQVMsbUJBQW1CLENBQ3pFLE9BQU8sRUFFUDtZQURBLE9BQU8seURBQUcsRUFBRTs7OztBQUlaLGVBQU8sQ0FBQyxJQUFJLEdBQUcsa0JBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLGVBQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDcEQsZUFBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzdCLENBQUM7QUFDRixVQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7QUFDZixlQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ3BFOztHQUNGOztBQUVELE1BQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxZQUFZLEVBQUU7QUFDekMsV0FBTyxHQUFHLFlBQVksQ0FBQztHQUN4Qjs7QUFFRCxNQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7QUFDekIsVUFBTSwyQkFBYyxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxDQUFDO0dBQzVFLE1BQU0sSUFBSSxPQUFPLFlBQVksUUFBUSxFQUFFO0FBQ3RDLFdBQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNsQztDQUNGOztBQUVNLFNBQVMsSUFBSSxHQUFHO0FBQ3JCLFNBQU8sRUFBRSxDQUFDO0NBQ1g7O0FBRUQsU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMvQixNQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQSxBQUFDLEVBQUU7QUFDOUIsUUFBSSxHQUFHLElBQUksR0FBRyxrQkFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckMsUUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7R0FDckI7QUFDRCxTQUFPLElBQUksQ0FBQztDQUNiOztBQUVELFNBQVMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDekUsTUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFO0FBQ2hCLFFBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLFFBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUNqQixJQUFJLEVBQ0osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNuQixJQUFJLEVBQ0osV0FBVyxFQUNYLE1BQU0sQ0FDUCxDQUFDO0FBQ0YsU0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDM0I7QUFDRCxTQUFPLElBQUksQ0FBQztDQUNiOztBQUVELFNBQVMsK0JBQStCLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRTtBQUNqRSxRQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLFVBQVUsRUFBSTtBQUMvQyxRQUFJLE1BQU0sR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkMsaUJBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDekUsQ0FBQyxDQUFDO0NBQ0o7O0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ25ELE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDaEQsU0FBTywrQkFBVyxNQUFNLEVBQUUsVUFBQSxPQUFPLEVBQUk7QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n","!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.sbjs=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 0) {\n for (var i = 0; i < p.referrals.length; i++) {\n if (uri.parse(referer).host.match(new RegExp('^(?:.*\\\\.)?' + utils.escapeRegexp(p.referrals[i].host) + '$', 'i'))) {\n __sbjs_source = p.referrals[i].display || p.referrals[i].host;\n __sbjs_medium = p.referrals[i].medium || terms.referer.referral;\n return true;\n }\n if (i + 1 === p.referrals.length) {\n __sbjs_source = uri.getHost(referer);\n return true;\n }\n }\n } else {\n __sbjs_source = uri.getHost(referer);\n return true;\n }\n }\n\n function setFirstAndCurrentExtraData() {\n cookies.set(data.containers.current_extra, data.pack.extra(p.timezone_offset), lifetime, domain, isolate);\n if (!cookies.get(data.containers.first_extra)) {\n cookies.set(data.containers.first_extra, data.pack.extra(p.timezone_offset), lifetime, domain, isolate);\n }\n }\n\n (function setData() {\n\n // Main data\n cookies.set(data.containers.current, mainData(), lifetime, domain, isolate);\n if (!cookies.get(data.containers.first)) {\n cookies.set(data.containers.first, cookies.get(data.containers.current), lifetime, domain, isolate);\n }\n\n // User data\n var visits, udata;\n if (!cookies.get(data.containers.udata)) {\n visits = 1;\n udata = data.pack.user(visits, p.user_ip);\n } else {\n visits = parseInt(cookies.parse(data.containers.udata)[cookies.unsbjs(data.containers.udata)][data.aliases.udata.visits]) || 1;\n visits = cookies.get(data.containers.session) ? visits : visits + 1;\n udata = data.pack.user(visits, p.user_ip);\n }\n cookies.set(data.containers.udata, udata, lifetime, domain, isolate);\n\n // Session\n var pages_count;\n if (!cookies.get(data.containers.session)) {\n pages_count = 1;\n } else {\n pages_count = parseInt(cookies.parse(data.containers.session)[cookies.unsbjs(data.containers.session)][data.aliases.session.pages_seen]) || 1;\n pages_count += 1;\n }\n cookies.set(data.containers.session, data.pack.session(pages_count), p.session_length, domain, isolate);\n\n // Promocode\n if (p.promocode && !cookies.get(data.containers.promocode)) {\n cookies.set(data.containers.promocode, data.pack.promo(p.promocode), lifetime, domain, isolate);\n }\n\n })();\n\n return cookies.parse(data.containers);\n\n};\n},{\"./data\":2,\"./helpers/cookies\":3,\"./helpers/uri\":4,\"./helpers/utils\":5,\"./migrations\":7,\"./params\":8,\"./terms\":9}],7:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar data = _dereq_('./data'),\n cookies = _dereq_('./helpers/cookies');\n\nmodule.exports = {\n\n go: function(lifetime, domain, isolate) {\n\n var migrate = this.migrations,\n _with = { l: lifetime, d: domain, i: isolate };\n\n var i;\n\n if (!cookies.get(data.containers.first) && !cookies.get(data.service.migrations)) {\n\n var mids = [];\n for (i = 0; i < migrate.length; i++) { mids.push(migrate[i].id); }\n\n var advance = '';\n for (i = 0; i < mids.length; i++) {\n advance += mids[i] + '=1';\n if (i < mids.length - 1) { advance += data.delimiter; }\n }\n cookies.set(data.service.migrations, advance, _with.l, _with.d, _with.i);\n\n } else if (!cookies.get(data.service.migrations)) {\n\n // We have only one migration for now, so just\n for (i = 0; i < migrate.length; i++) {\n migrate[i].go(migrate[i].id, _with);\n }\n\n }\n\n },\n\n migrations: [\n\n {\n id: '1418474375998',\n version: '1.0.0-beta',\n go: function(mid, _with) {\n\n var success = mid + '=1',\n fail = mid + '=0';\n\n var safeReplace = function($0, $1, $2) {\n return ($1 || $2 ? $0 : data.delimiter);\n };\n\n try {\n\n // Switch delimiter and renew cookies\n var _in = [];\n for (var prop in data.containers) {\n if (data.containers.hasOwnProperty(prop)) {\n _in.push(data.containers[prop]);\n }\n }\n\n for (var i = 0; i < _in.length; i++) {\n if (cookies.get(_in[i])) {\n var buffer = cookies.get(_in[i]).replace(/(\\|)?\\|(\\|)?/g, safeReplace);\n cookies.destroy(_in[i], _with.d, _with.i);\n cookies.destroy(_in[i], _with.d, !_with.i);\n cookies.set(_in[i], buffer, _with.l, _with.d, _with.i);\n }\n }\n\n // Update `session`\n if (cookies.get(data.containers.session)) {\n cookies.set(data.containers.session, data.pack.session(0), _with.l, _with.d, _with.i);\n }\n\n // Yay!\n cookies.set(data.service.migrations, success, _with.l, _with.d, _with.i);\n\n } catch (err) {\n // Oops\n cookies.set(data.service.migrations, fail, _with.l, _with.d, _with.i);\n }\n }\n }\n\n ]\n\n};\n},{\"./data\":2,\"./helpers/cookies\":3}],8:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar terms = _dereq_('./terms'),\n uri = _dereq_('./helpers/uri');\n\nmodule.exports = {\n\n fetch: function(prefs) {\n\n var user = prefs || {},\n params = {};\n\n // Set `lifetime of the cookie` in months\n params.lifetime = this.validate.checkFloat(user.lifetime) || 6;\n params.lifetime = parseInt(params.lifetime * 30 * 24 * 60);\n\n // Set `session length` in minutes\n params.session_length = this.validate.checkInt(user.session_length) || 30;\n\n // Set `timezone offset` in hours\n params.timezone_offset = this.validate.checkInt(user.timezone_offset);\n\n // Set `campaign param` for AdWords links\n params.campaign_param = user.campaign_param || false;\n\n // Set `user ip`\n params.user_ip = user.user_ip || terms.none;\n\n // Set `promocode`\n if (user.promocode) {\n params.promocode = {};\n params.promocode.min = parseInt(user.promocode.min) || 100000;\n params.promocode.max = parseInt(user.promocode.max) || 999999;\n } else {\n params.promocode = false;\n }\n\n // Set `typein attributes`\n if (user.typein_attributes && user.typein_attributes.source && user.typein_attributes.medium) {\n params.typein_attributes = {};\n params.typein_attributes.source = user.typein_attributes.source;\n params.typein_attributes.medium = user.typein_attributes.medium;\n } else {\n params.typein_attributes = { source: '(direct)', medium: '(none)' };\n }\n\n // Set `domain`\n if (user.domain && this.validate.isString(user.domain)) {\n params.domain = { host: user.domain, isolate: false };\n } else if (user.domain && user.domain.host) {\n params.domain = user.domain;\n } else {\n params.domain = { host: uri.getHost(document.location.hostname), isolate: false };\n }\n\n // Set `referral sources`\n params.referrals = [];\n\n if (user.referrals && user.referrals.length > 0) {\n for (var ir = 0; ir < user.referrals.length; ir++) {\n if (user.referrals[ir].host) {\n params.referrals.push(user.referrals[ir]);\n }\n }\n }\n\n // Set `organic sources`\n params.organics = [];\n\n if (user.organics && user.organics.length > 0) {\n for (var io = 0; io < user.organics.length; io++) {\n if (user.organics[io].host && user.organics[io].param) {\n params.organics.push(user.organics[io]);\n }\n }\n }\n\n params.organics.push({ host: 'bing.com', param: 'q', display: 'bing' });\n params.organics.push({ host: 'yahoo.com', param: 'p', display: 'yahoo' });\n params.organics.push({ host: 'about.com', param: 'q', display: 'about' });\n params.organics.push({ host: 'aol.com', param: 'q', display: 'aol' });\n params.organics.push({ host: 'ask.com', param: 'q', display: 'ask' });\n params.organics.push({ host: 'globososo.com', param: 'q', display: 'globo' });\n params.organics.push({ host: 'go.mail.ru', param: 'q', display: 'go.mail.ru' });\n params.organics.push({ host: 'rambler.ru', param: 'query', display: 'rambler' });\n params.organics.push({ host: 'tut.by', param: 'query', display: 'tut.by' });\n\n params.referrals.push({ host: 't.co', display: 'twitter.com' });\n params.referrals.push({ host: 'plus.url.google.com', display: 'plus.google.com' });\n\n\n return params;\n\n },\n\n validate: {\n\n checkFloat: function(v) {\n return v && this.isNumeric(parseFloat(v)) ? parseFloat(v) : false;\n },\n\n checkInt: function(v) {\n return v && this.isNumeric(parseInt(v)) ? parseInt(v) : false;\n },\n\n isNumeric: function(v){\n return !isNaN(v);\n },\n\n isString: function(v) {\n return Object.prototype.toString.call(v) === '[object String]';\n }\n\n }\n\n};\n},{\"./helpers/uri\":4,\"./terms\":9}],9:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n\n traffic: {\n utm: 'utm',\n organic: 'organic',\n referral: 'referral',\n typein: 'typein'\n },\n\n referer: {\n referral: 'referral',\n organic: 'organic',\n social: 'social'\n },\n\n none: '(none)',\n oops: '(Houston, we have a problem)'\n\n};\n\n},{}]},{},[1])(1)\n});"],"names":["Handlebars","require","registerHelper","arg1","arg2","options","console","log","fn","inverse","result","company","alias","mobile","phone","extension","mail","personal","module","exports","ScrollSpy","Collapse","Popover","validate","steps","SmoothScroll","Tick","sourcebuster","profileTemplate","$","document","ready","element","querySelector","now","Date","startDate","tick","DOM","create","didInit","style","display","locale","DAY_PLURAL","DAY_SINGULAR","HOUR_PLURAL","HOUR_SINGULAR","MINUTE_PLURAL","MINUTE_SINGULAR","SECOND_PLURAL","SECOND_SINGULAR","key","hasOwnProperty","setConstant","counter","count","down","toISOString","onupdate","value","onended","collapse","toggle","click","e","hide","navbarCollapse","$nav","offset","top","addClass","removeClass","window","scroll","scrollSpy","body","target","speed","addEventListener","event","detail","anchor","id","includes","is","preventDefault","slideDown","animateScroll","each","index","el","$el","$span","children","$currentSection","parents","$nextSection","nextAll","attr","btn","data","html","show","css","normalize","trim","validator","setDefaults","onfocusout","onkeyup","highlight","closest","unhighlight","errorElement","errorClass","errorPlacement","error","parent","length","siblings","append","appendTo","insertAfter","addMethod","regexp","optional","test","normalizer","rules","speakerFullname","required","cyrillic","speakerCompany","speakerMail","email","speakerMobile","messages","submitHandler","form","valid","prop","submit","sponsorFullname","sponsorCompany","sponsorMail","sponsorMobile","$form","searchLastname","searchMobile","remote","type","url","conference","val","number","firstname","lastname","midname","title","format","agree","profiles","headerTag","bodyTag","transitionEffect","titleTemplate","labels","cancel","current","pagination","finish","next","previous","loading","onStepChanging","currentIndex","newIndex","ajax","async","method","success","err","alert","idx","profile","onFinishing","onFinished","keypress","which","world","masksSort","masksLoad","mask","inputmask","definitions","cardinality","showMaskOnHover","autoUnmask","clearMaskOnLostFocus","match","replace","listKey","inputmasks","extend","list","init","callback","sb","typ","src","mdm","cmp","cnt","trm","change","querySelectorAll","forEach"],"sourceRoot":""}