{"version":3,"sources":["../../node_modules/dayspan/lib/Month.js","../../node_modules/dayspan/lib/Pattern.js","../../node_modules/dayspan/lib/Sort.js","../../src/pages/calendar/calendar.module.ts","../../node_modules/dayspan/lib/Functions.js","../../node_modules/dayspan/lib/Constants.js","../../node_modules/dayspan/lib/Day.js","../../node_modules/dayspan/lib/Operation.js","../../node_modules/dayspan/lib/Parse.js","../../node_modules/dayspan/lib/Iterator.js","../../node_modules/dayspan/lib/Identifier.js","../../node_modules/dayspan/lib/DaySpan.js","../../node_modules/dayspan/lib/Units.js","../../node_modules/dayspan/lib/Schedule.js","../../node_modules/dayspan/lib/Suffix.js","../../node_modules/dayspan/lib/ScheduleModifier.js","../../node_modules/dayspan/lib/Time.js","../../node_modules/dayspan/lib/Event.js","../../node_modules/dayspan/lib/CalendarDay.js","../../node_modules/dayspan/lib/CalendarEvent.js","../../node_modules/dayspan/lib/Weekday.js","../../src/pages/calendar/calendar.ts","../../node_modules/ionic-calendar-date-picker/dist/index.js","../../node_modules/ionic-calendar-date-picker/dist/components/date-picker.module.js","../../node_modules/ionic-calendar-date-picker/dist/components/date-picker-component.js","../../node_modules/dayspan/lib/index.js","../../node_modules/dayspan/lib/Calendar.js"],"names":[],"mappings":";;;;;;AAAA;AAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgB;AACjB,iC;;;;;;;;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AACiC;AACZ;AACE;AACE;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2DAAQ;AACxC,+DAA+D,+CAA+C,EAAE,mBAAmB,oCAAoC,EAAE;AACzK;AACA;AACA;AACA,+DAA+D,mCAAmC,EAAE,mBAAmB,8BAA8B,EAAE;AACvJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAE;AAClB;AACA;AACA;AACA,iBAAiB,6DAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2DAAQ;AACxC,wDAAwD,6BAA6B,EAAE;AACvF;AACA;AACA,wDAAwD,uBAAuB,EAAE;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6DAAE;AACxB,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,6DAAE;AACnB;AACA;AACA;AACA,gBAAgB,6DAAE;AAClB,oBAAoB,6DAAE;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAE;AAClB,qBAAqB,6DAAE;AACvB;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAE;AAClB,qBAAqB,6DAAE;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;AACnB;AACA;AACA;AACA;AACA;AACA;AACO;AACP,8CAA8C,0BAA0B,EAAE;AAC1E;AACA;AACA;AACA,KAAK;AACL,+CAA+C,gBAAgB,EAAE,IAAI;AACrE,gDAAgD,0CAA0C,EAAE;AAC5F;AACA,KAAK;AACL,qDAAqD,4BAA4B,uDAAM,2DAA2D,EAAE;AACpJ;AACA;AACA,KAAK;AACL,kDAAkD,+CAA+C,EAAE;AACnG;AACA;AACA,KAAK;AACL,2DAA2D,6BAA6B,uDAAM,yFAAyF,EAAE;AACzL;AACA;AACA;AACA,KAAK;AACL,iDAAiD,2CAA2C,EAAE;AAC9F,oBAAoB,yDAAO,SAAS,yDAAO,UAAU,yDAAO,YAAY,yDAAO,WAAW,yDAAO;AACjG,KAAK;AACL,iDAAiD,sDAAsD,EAAE;AACzG;AACA,KAAK;AACL,gDAAgD,oBAAoB,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP,uCAAuC,wBAAwB;AAC/D;AACA;AACA;AACA,mC;;;;;;;;AC5QA;AAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgB;AACjB,gC;;;;;;;;;;;;;;;;;;;;AClIyC;AACO;AACN;AACoB;AAW9D;IAAA;IAAiC,CAAC;IAArB,kBAAkB;QAT9B,+DAAQ,CAAC;YACR,YAAY,EAAE;gBACZ,+DAAY;aACb;YACD,OAAO,EAAE;gBACP,sEAAe,CAAC,QAAQ,CAAC,+DAAY,CAAC;gBACtC,oFAAgB;aACjB;SACF,CAAC;OACW,kBAAkB,CAAG;IAAD,yBAAC;CAAA;AAAH;;;;;;;;;ACd/B;AAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,EAAE;AAC3C,2CAA2C;AAC3C,4CAA4C;AAC5C,6CAA6C;AAC7C,wCAAwC,QAAQ,EAAE;AAClD,wCAAwC,SAAS,EAAE;AACnD,wCAAwC,kBAAkB,EAAE;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,EAAE;AAC3C,2CAA2C;AAC3C,4CAA4C;AAC5C,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,wCAAwC;AACxC,mCAAmC;AACnC,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,0CAA0C;AAC1C,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,qCAAqC;AACrC,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gBAAgB;AAC/C;AACA;AACA;AACA,CAAC;AACoB;AACrB,qC;;;;;;;;ACzMA;AAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB,qC;;;;;;;;ACzJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAC6B;AACF;AACE;AACV;AACF;AAC9B;AACiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+DAAU;AACxC,6BAA6B,+DAAU;AACvC,8BAA8B,+DAAU;AACxC,+BAA+B,+DAAU;AACzC,iCAAiC,+DAAU;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD,eAAe,mEAAO;AACtB;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD,eAAe,mEAAO;AACtB;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD,eAAe,mEAAO;AACtB;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD,eAAe,mEAAO;AACtB;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD,eAAe,mEAAO;AACtB;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD,eAAe,mEAAO;AACtB;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD,eAAe,mEAAO;AACtB;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD,eAAe,mEAAO;AACtB;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,4BAA4B,EAAE;AACvE;AACA;AACA,yCAAyC,sCAAsC,EAAE;AACjF;AACA;AACA;AACA,yCAAyC,4BAA4B,EAAE;AACvE;AACA;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,yCAAyC,yBAAyB,EAAE;AACpE;AACA;AACA,yCAAyC,+BAA+B,EAAE;AAC1E;AACA;AACA;AACA,yCAAyC,uBAAuB,EAAE;AAClE;AACA;AACA,yCAAyC,gCAAgC,EAAE;AAC3E;AACA;AACA,gCAAgC,YAAY;AAC5C;AACA;AACA;AACA,gCAAgC,YAAY;AAC5C;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE,yCAAyC,sCAAsC,6DAAS,uBAAuB,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,8BAA8B,EAAE;AACzE;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA,yCAAyC,qBAAqB,EAAE;AAChE;AACA;AACA,yCAAyC,6BAA6B,EAAE;AACxE;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA,yCAAyC,qBAAqB,EAAE;AAChE;AACA;AACA,yCAAyC,8BAA8B,EAAE;AACzE;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,6DAAS,UAAU;AACzD,gCAAgC,UAAU,6DAAS,YAAY;AAC/D,gCAAgC,UAAU,6DAAS,YAAY;AAC/D,qCAAqC,eAAe,6DAAS,YAAY;AACzE,yCAAyC,eAAe,uEAAuE,EAAE,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA,mBAAmB,mDAAI;AACvB;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB,EAAE;AACpE;AACA;AACA,6BAA6B,6DAAS;AACtC,4BAA4B,6DAAS;AACrC,6BAA6B,6DAAS;AACtC,4BAA4B,6DAAS;AACrC;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA,sCAAsC,uBAAuB,EAAE;AAC/D,sCAAsC,uCAAuC,EAAE;AAC/E;AACA;AACA,6BAA6B,6DAAS;AACtC,4BAA4B,6DAAS;AACrC,6BAA6B,6DAAS;AACtC,4BAA4B,6DAAS;AACrC;AACA;AACA;AACA,yCAAyC,0BAA0B,EAAE;AACrE;AACA;AACA,+BAA+B,6DAAS;AACxC,6BAA6B,6DAAS;AACtC,4BAA4B,6DAAS;AACrC;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA,sCAAsC,wBAAwB,EAAE;AAChE,sCAAsC,yCAAyC,EAAE;AACjF;AACA;AACA,+BAA+B,6DAAS;AACxC,6BAA6B,6DAAS;AACtC,4BAA4B,6DAAS;AACrC;AACA;AACA;AACA,yCAAyC,0BAA0B,EAAE;AACrE;AACA;AACA,kCAAkC,6DAAS;AAC3C;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA,sCAAsC,wBAAwB,EAAE;AAChE,sCAAsC,yCAAyC,EAAE;AACjF;AACA;AACA,kCAAkC,6DAAS;AAC3C;AACA;AACA;AACA,yCAAyC,2BAA2B,EAAE;AACtE;AACA;AACA,mCAAmC,6DAAS;AAC5C;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA,sCAAsC,yBAAyB,EAAE;AACjE,sCAAsC,2CAA2C,EAAE;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,0BAA0B,EAAE;AACrE;AACA;AACA,8BAA8B,6DAAS,kCAAkC,6DAAS;AAClF;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA,sCAAsC,wBAAwB,EAAE;AAChE,sCAAsC,yCAAyC,EAAE;AACjF;AACA;AACA,8BAA8B,6DAAS,kCAAkC,6DAAS;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,6BAA6B,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oCAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oCAAM;AACrC;AACA;AACA,+BAA+B,4CAAW;AAC1C;AACA;AACA,eAAe,qDAAK;AACpB;AACA;AACA,+BAA+B,oCAAM;AACrC;AACA;AACA,+BAA+B,oCAAM;AACrC;AACA;AACA,+BAA+B,oCAAM;AACrC;AACA;AACA,+BAA+B,oCAAM;AACrC;AACA;AACA,+BAA+B,oCAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,6DAAS,SAAS;AACxD,8BAA8B,QAAQ,6DAAS,UAAU;AACzD,gCAAgC,UAAU,6DAAS,YAAY;AAC/D,gCAAgC,UAAU,6DAAS,YAAY;AAC/D,qCAAqC,eAAe,6DAAS,YAAY;AACzE,uBAAuB,oCAAM,EAAE,6GAA6G;AAC5I;AACA;AACA,mDAAmD,6DAAS;AAC5D;AACA;AACA;AACA;AACA,4DAA4D,6DAAS;AACrE;AACA;AACA;AACA;AACA,mCAAmC,6DAAS;AAC5C;AACA;AACA;AACA;AACA,qCAAqC,6DAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,6DAAS;AAC9C;AACA;AACA,8CAA8C,6DAAS;AACvD;AACA;AACA,+DAA+D,6DAAS;AACxE;AACA;AACA,0DAA0D,6DAAS,iBAAiB,6DAAS;AAC7F;AACA;AACA,+DAA+D,6DAAS,6BAA6B,6DAAS,iBAAiB,6DAAS;AACxI;AACA;AACA;AACA;AACA;AACA,wCAAwC,6DAAS,sCAAsC,6DAAS;AAChG;AACA;AACA;AACA;AACA;AACA,CAAC;AACc;AACf,+B;;;;;;;;AC3hBA;AAAA;AAAa;AACb;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,qBAAqB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,8BAA8B,kBAAkB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qC;;;;;;;;ACvEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AACiC;AACR;AACgB;AACd;AACZ;AACI;AACF;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAE;AACd;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6DAAE;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,iCAAiC;AACjC,wBAAwB;AACxB,iCAAiC;AACjC,mBAAmB,qBAAqB,GAAG;AAC3C,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAE;AACd,mBAAmB,iDAAG;AACtB;AACA,iBAAiB,6DAAE;AACnB,mBAAmB,iDAAG;AACtB;AACA,kCAAkC,iDAAG;AACrC;AACA;AACA,iBAAiB,6DAAE;AACnB,mBAAmB,iDAAG;AACtB;AACA,iBAAiB,6DAAE;AACnB,mBAAmB,iDAAG;AACtB;AACA;AACA,mBAAmB,iDAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,uBAAuB;AACvB,0BAA0B;AAC1B,4BAA4B;AAC5B,yBAAyB;AACzB,4BAA4B;AAC5B,+BAA+B;AAC/B,oBAAoB,QAAQ,GAAG;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mDAAI;AACjC;AACA;AACA,YAAY,6DAAE;AACd,mBAAmB,mDAAI;AACvB;AACA,YAAY,6DAAE;AACd,mBAAmB,mDAAI;AACvB;AACA,YAAY,6DAAE,oBAAoB,6DAAE;AACpC,uBAAuB,mDAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAE;AACd,6CAA6C,qBAAqB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,gBAAgB;AAChE,2DAA2D,KAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B,UAAU,EAAE,EAAE;AAC7E,6BAA6B,WAAW,2EAAgB,GAAG;AAC3D;AACA,YAAY,6DAAE;AACd,6CAA6C,qBAAqB;AAClE;AACA,0CAA0C,iDAAG;AAC7C;AACA;AACA,yBAAyB,6DAAE;AAC3B;AACA;AACA,yBAAyB,6DAAE;AAC3B;AACA;AACA;AACA;AACA,YAAY,6DAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B,UAAU,EAAE,EAAE;AAC7E,6BAA6B,WAAW,2DAAQ,GAAG;AACnD,6BAA6B,2DAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6DAAE,0BAA0B,6DAAS;AAC5D,2BAA2B,6DAAE,8BAA8B,6DAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B,UAAU,EAAE,EAAE;AAC7E,mCAAmC,4BAA4B,UAAU,EAAE,EAAE;AAC7E,6BAA6B,qDAAK;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6BAA6B,WAAW,2DAAQ,GAAG;AACnD;AACA;AACA;AACA,CAAC;AACgB;AACjB,iC;;;;;;;;ACjSA;AAAA;AAAA;AAAa;AACiC;AAC9C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,yDAAyD;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,6BAA6B;AAC7B,gBAAgB;AAChB,2BAA2B;AAC3B,gBAAgB;AAChB,2BAA2B;AAC3B,eAAe;AACf,sBAAsB;AACtB,8BAA8B;AAC9B,0BAA0B;AAC1B,4BAA4B;AAC5B,mBAAmB;AACnB,2BAA2B;AAC3B,4BAA4B;AAC5B;AACA,2BAA2B;AAC3B;AACA;AACA,kBAAkB;AAClB,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAE;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,qDAAqD,yBAAyB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;AACA,CAAC;AACmB;AACpB,oC;;;;;;;;ACrlBA;AAAA;AAAA;AAAA;AAAa;AACb;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AAC6C;AAClB;AACQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA,wCAAwC,6DAAE;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAE;AACtB;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAG;AACvB;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA,mBAAmB,yDAAO;AAC1B;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAG;AACvB;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA,mBAAmB,yDAAO;AAC1B;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAG;AACvB;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA,mBAAmB,yDAAO;AAC1B;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAG;AACvB;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA,mBAAmB,yDAAO;AAC1B;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAG;AACvB;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA,mBAAmB,yDAAO;AAC1B;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAG;AACvB;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA,mBAAmB,yDAAO;AAC1B;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;;;AC/fA;AAAA;AAAA;AAAA;AAAA;AAAa;AACe;AACK;AACD;AACQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,sDAAE,MAAM;AAC1C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,6DAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,6DAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,eAAe;AAClD,kCAAkC,cAAc;AAChD,sCAAsC,kBAAkB;AACxD,8BAA8B,aAAa;AAC3C,iCAAiC,aAAa;AAC9C,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD,+BAA+B,eAAe;AAC9C,gCAAgC,gBAAgB;AAChD,oCAAoC,mBAAmB;AACvD,mCAAmC,mBAAmB;AACtD;AACA,oBAAoB,iDAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,WAAW,qDAAK;AAChB;AACA,SAAS;AACT,WAAW,qDAAK;AAChB;AACA,SAAS;AACT,WAAW,qDAAK;AAChB;AACA,SAAS;AACT,WAAW,qDAAK;AAChB;AACA,SAAS;AACT;AACA;AACA,CAAC;AACkB;AACnB;AACA,mC;;;;;;;;ACjXA;AAAa;AACb;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B,iC;;;;;;;;ACXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AACiC;AAClB;AACc;AACN;AACI;AACR;AACE;AACoB;AACtB;AACsB;AACtD;AACiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2EAAgB;AAC3C,2BAA2B,2EAAgB;AAC3C,0BAA0B,2EAAgB;AAC1C,wBAAwB,2EAAgB;AACxC,YAAY,6DAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B,UAAU,EAAE,EAAE;AAC7E;AACA,YAAY,qDAAK;AACjB;AACA;AACA,YAAY,qDAAK,iBAAiB,6DAAE;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,+DAAU,OAAO,+DAAU;AACjE,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6DAAS;AACjD,sBAAsB,6DAAS;AAC/B,kBAAkB,6DAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD,qCAAqC,uBAAuB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qDAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gBAAgB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,mCAAmC,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,mCAAmC,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,kCAAkC,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,kCAAkC,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,gCAAgC,cAAc;AAC9C,mBAAmB,2DAAQ;AAC3B;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA,mCAAmC,iEAAc;AACjD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gBAAgB;AAChD,mBAAmB,2DAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iEAAc;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iEAAc;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iEAAc;AACnD;AACA;AACA;AACA,yBAAyB;AACzB,gDAAgD,iEAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mCAAmC,EAAE;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,2BAA2B,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qDAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,sBAAsB;AAC7D;AACA,uBAAuB,iCAAiC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iCAAiC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,4BAA4B,qDAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iDAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6DAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C,oCAAoC,wBAAwB;AAC5D,+BAA+B,eAAe;AAC9C,oCAAoC,kBAAkB;AACtD;AACA;AACA;AACA;AACA;AACA,2BAA2B,UAAU;AACrC;AACA;AACA,oDAAoD,iEAAc;AAClE;AACA;AACA;AACA;AACA;AACA,uBAAuB,2DAAQ;AAC/B;AACA,2BAA2B,gBAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB,2DAAQ;AAC/B;AACA,2BAA2B,gBAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;AACA,+BAA+B,+DAAU;AACzC;AACA;AACA;AACA,uBAAuB,+DAAU;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,qCAAqC,qBAAqB;AAC1D,oCAAoC,iBAAiB;AACrD,wCAAwC,wBAAwB;AAChE,0BAA0B,6DAAS;AACnC,gEAAgE,UAAU,EAAE;AAC5E,gEAAgE,UAAU,EAAE;AAC5E,4DAA4D,UAAU,EAAE;AACxE;AACA;AACA;AACA,yCAAyC,gBAAgB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,6DAAS;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6DAAE,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD,sCAAsC,qBAAqB;AAC3D,sCAAsC,qBAAqB;AAC3D,yCAAyC,yBAAyB;AAClE,yCAAyC,yBAAyB;AAClE,yCAAyC,yBAAyB;AAClE,wCAAwC,wBAAwB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,QAAQ,iDAAe,MAAM,EAAE;AACvH,mGAAmG,QAAQ,uDAAM,UAAU,EAAE;AAC7H,0FAA0F,QAAQ,uDAAM,UAAU,EAAE;AACpH,wFAAwF,QAAQ,uDAAM,UAAU,EAAE;AAClH,wEAAwE,UAAU,EAAE;AACpF,0EAA0E,QAAQ,+CAAa,MAAM,EAAE;AACvG,0FAA0F,QAAQ,uDAAM,UAAU,EAAE;AACpH,kGAAkG,QAAQ,uDAAM,cAAc,EAAE;AAChI,mGAAmG,QAAQ,uDAAM,UAAU,EAAE;AAC7H,2GAA2G,QAAQ,uDAAM,cAAc,EAAE;AACzI,4GAA4G,QAAQ,uDAAM,UAAU,EAAE;AACtI,4FAA4F,QAAQ,uDAAM,UAAU,EAAE;AACtH,qGAAqG,QAAQ,uDAAM,UAAU,EAAE;AAC/H,oGAAoG,QAAQ,uDAAM,cAAc,EAAE;AAClI,8GAA8G,QAAQ,uDAAM,UAAU,EAAE;AACxI,6GAA6G,QAAQ,uDAAM,cAAc,EAAE;AAC3I;AACA;AACA,gEAAgE,4BAA4B,EAAE;AAC9F;AACA,iDAAiD,6DAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,uBAAuB,qDAAK,MAAM,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,uBAAuB,qDAAK,MAAM,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,uBAAuB,qDAAK,MAAM,EAAE;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iBAAiB;AACtD,6BAA6B,YAAY;AACzC,4BAA4B,aAAa;AACzC,kCAAkC,kBAAkB;AACpD;AACA;AACA,YAAY,6DAAE;AACd;AACA,+BAA+B,uDAAM;AACrC;AACA;AACA;AACA;AACA,iBAAiB,6DAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,UAAU;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,kBAAkB,iDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,cAAc;AAChD,sCAAsC,wBAAwB;AAC9D,kBAAkB,iDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6DAAS;AACvC,+BAA+B,6DAAS;AACxC,yCAAyC,6DAAS,sCAAsC,6DAAS;AACjG;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB,oC;;;;;;;;ACnwCA;AAAa;AACb;AACA;AACA;AACA;AACA,qBAAqB;AACrB,yBAAyB;AACzB,mBAAmB;AACnB,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,uBAAuB;AACtD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiB;AAClB,kC;;;;;;;;AChEA;AAAA;AAAA;AAAA;AAAa;AACiC;AACJ;AACY;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA,0BAA0B,6DAAE;AAC5B,mBAAmB,+DAAU;AAC7B,YAAY,6DAAE;AACd,mBAAmB,+DAAU;AAC7B,YAAY,6DAAE;AACd,mBAAmB,+DAAU;AAC7B,YAAY,6DAAE;AACd,mBAAmB,+DAAU;AAC7B,YAAY,6DAAE;AACd,mBAAmB,+DAAU;AAC7B,YAAY,6DAAE;AACd,mBAAmB,+DAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+DAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+DAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2DAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAc;AACvC;AACA,yBAAyB,iEAAc;AACvC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+DAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA,uBAAuB,+DAAU;AACjC;AACA;AACA,wBAAwB;AACxB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA,uBAAuB,+DAAU;AACjC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA,uBAAuB,+DAAU;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,4C;;;;;;;;ACrTA;AAAA;AAAA;AAAA;AAAa;AACiC;AACN;AACR;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,UAAU,6DAAS,YAAY;AAC/D,gCAAgC,UAAU,6DAAS,YAAY;AAC/D,qCAAqC,eAAe,6DAAS,YAAY;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA,2BAA2B,yCAAyC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6DAAS;AACpC,0BAA0B,6DAAS;AACnC,0BAA0B,6DAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qDAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,UAAU,6DAAS,YAAY;AAC/D,gCAAgC,UAAU,6DAAS,YAAY;AAC/D,qCAAqC,eAAe,6DAAS,YAAY;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,6DAAE,6BAA6B;AAC1E;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,QAAQ,6DAAE,sBAAsB,EAAE;AACpE,kCAAkC,QAAQ,6DAAE,mCAAmC,EAAE;AACjF,kCAAkC,QAAQ,6DAAE,0BAA0B,EAAE;AACxE,kCAAkC,QAAQ,6DAAE,wBAAwB,EAAE;AACtE,kCAAkC,QAAQ,6DAAE,wBAAwB,EAAE;AACtE,kCAAkC,QAAQ,6DAAE,gCAAgC;AAC5E;AACA,SAAS;AACT;AACA;AACA;AACA,iCAAiC,kCAAkC,EAAE;AACrE,iCAAiC,kCAAkC,EAAE;AACrE,iCAAiC,oBAAoB,EAAE;AACvD,iCAAiC,mCAAmC,EAAE;AACtE,iCAAiC,0BAA0B,EAAE;AAC7D,iCAAiC,sBAAsB,EAAE;AACzD,iCAAiC,sBAAsB,EAAE;AACzD,iCAAiC,QAAQ,6DAAE,gCAAgC;AAC3E;AACA;AACA;AACA;AACA,CAAC;AACe;AAChB,gC;;;;;;;;ACpSA;AAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgB;AACjB,iC;;;;;;;;AC1BA;AAAA;AAAA;AAAA;AAAa;AACb;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACgC;AACL;AACU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2DAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,sDAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,iDAAG;AACkB;AACvB,uC;;;;;;;;AC1HA;AAAA;AAAa;AAC2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6DAAS;AACjD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,eAAe;AAClD,kCAAkC,cAAc;AAChD,sCAAsC,oBAAoB;AAC1D,8BAA8B,aAAa;AAC3C,iCAAiC,aAAa;AAC9C,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB,yC;;;;;;;;ACpNA;AAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;AACnB,mC;;;;;;;;;;;;;;;;;;;;AC9C0C;AAC+B;AACzE,+BAA+B;AAC/B,uCAAuC;AAEvC;;;;;GAKG;AAOH;IAEE,sBAAmB,OAAsB,EAAS,SAAoB,EAAS,QAAwB;QAApF,YAAO,GAAP,OAAO,CAAe;QAAS,cAAS,GAAT,SAAS,CAAW;QAAS,aAAQ,GAAR,QAAQ,CAAgB;IACvG,CAAC;IAED,qCAAc,GAAd;IAEA,CAAC;IAED,mCAAY,GAAZ,UAAa,IAAI;QACf,sCAAsC;QACtC,oBAAoB;QACpB,qEAAqE;QACrE,+EAA+E;QAC/E,kBAAkB;QAClB,uDAAuD;QACvD,uDAAuD;QACvD,yEAAyE;QACzE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAC,QAAQ,EAAC,CAAC,CAAC;IAExD,CAAC;IApBU,YAAY;QAJxB,gEAAS,CAAC;YACT,QAAQ,EAAE,eAAe;WACG;SAC7B,CAAC;qBAGuG;OAF5F,YAAY,CAsBxB;IAAD,CAAC;AAAA;SAtBY,YAAY,e;;;;;;;;ACjBzB;AAAA;AAAgD;AAChD,iC;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAyC;AACqB;AAClB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,uDAAQ;AACxB;AACA,wBAAwB,kEAAW;AACnC;AACA;AACA,wBAAwB,mFAAmB;AAC3C;AACA;AACA,wBAAwB,mFAAmB;AAC3C;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,mDAAmD,WAAW;AAC9D;AACA,CAAC;AAC2B;AAC5B,8C;;;;;;;;AC7BA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACuE;AAC/B;AACP;AACjC,qUAAqU,8BAA8B,8KAA8K,cAAc,orBAAorB,UAAU,kSAAkS,0CAA0C,MAAM,GAAG,2eAA2e,mKAAmK,YAAY,qoBAAqoB,WAAW,MAAM,SAAS,yxBAAyxB,MAAM;AAC1oH,4BAA4B,qBAAqB,yCAAyC,SAAS,OAAO,gBAAgB,sBAAsB,KAAK,mBAAmB,sBAAsB,uBAAuB,0BAA0B,mBAAmB,+BAA+B,OAAO,KAAK,wBAAwB,iCAAiC,oCAAoC,mCAAmC,KAAK,qBAAqB,qBAAqB,KAAK;AACje;AACA;AACA;AACA;AACA,gCAAgC;AAChC,mCAAmC;AACnC,+BAA+B;AAC/B,iCAAiC;AACjC,gCAAgC;AAChC,kCAAkC;AAClC,gCAAgC;AAChC,4BAA4B,2DAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,oDAAG,qCAAqC,oDAAG,yBAAyB,oDAAG;AACjH;AACA;AACA;AACA;AACA;AACA,gDAAgD,oDAAG,YAAY,oCAAM;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yDAAQ;AAC5B;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA,6BAA6B,SAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,+BAA+B;AAC/B;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,+BAA+B;AAC/B;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,wDAAS;AACzB;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,sDAAsD,WAAW;AACjE;AACA,yBAAyB,OAAO,oDAAK,EAAE;AACvC,uBAAuB,OAAO,oDAAK,EAAE;AACrC,kBAAkB,OAAO,oDAAK,EAAE;AAChC,sBAAsB,OAAO,oDAAK,EAAE;AACpC,oBAAoB,OAAO,oDAAK,EAAE;AAClC,6BAA6B,OAAO,oDAAK,EAAE;AAC3C,gCAAgC,OAAO,oDAAK,EAAE;AAC9C,4BAA4B,OAAO,oDAAK,EAAE;AAC1C,8BAA8B,OAAO,oDAAK,EAAE;AAC5C,6BAA6B,OAAO,oDAAK,EAAE;AAC3C,+BAA+B,OAAO,oDAAK,EAAE;AAC7C,6BAA6B,OAAO,oDAAK,EAAE;AAC3C,sBAAsB,OAAO,qDAAM,EAAE;AACrC;AACA;AACA,CAAC;AAC8B;AAC/B,iD;;;;;;;;ACxTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AACc;AACG;AACE;AACR;AACI;AACN;AACI;AACE;AACC;AACF;AACH;AACI;AACJ;AACE;AACC;AACQ;AACZ;AACE;AACF;AACC;AACE;AAC1B,iC;;;;;;;;ACtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AACiC;AAClB;AACQ;AACH;AACD;AACA;AACQ;AACI;AACI;AACM;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,UAAU,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,UAAU,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAO;AAC/B,0BAA0B,yDAAO;AACjC;AACA;AACA;AACA;AACA,YAAY,6DAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6DAAE;AAC3B,yBAAyB,6DAAE;AAC3B;AACA,0BAA0B,6DAAE;AAC5B,yBAAyB,6DAAE;AAC3B,uBAAuB,6DAAE;AACzB,uBAAuB,6DAAE;AACzB,yBAAyB,6DAAE;AAC3B,wBAAwB,iDAAG;AAC3B;AACA;AACA;AACA;AACA,sCAAsC,iDAAG;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAE;AAC5B,yBAAyB,iDAAG;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAE;AACtB,2BAA2B,6DAAE;AAC7B,4BAA4B,6DAAE;AAC9B,yBAAyB,6DAAE;AAC3B,6BAA6B,6DAAE;AAC/B,0BAA0B,6DAAE;AAC5B,6BAA6B,6DAAE;AAC/B,2BAA2B,6DAAE;AAC7B,yBAAyB,6DAAE;AAC3B,yBAAyB,6DAAE;AAC3B,YAAY,6DAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD,+BAA+B,eAAe;AAC9C,gCAAgC,gBAAgB;AAChD,oCAAoC,mBAAmB;AACvD,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC,mBAAmB,2DAAQ;AAC3B;AACA;AACA,2BAA2B,gBAAgB;AAC3C;AACA,+CAA+C,iEAAc;AAC7D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,SAAS,iDAAG,SAAS;AACpD,qCAAqC,sDAAE;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sDAAE;AACxC;AACA,uBAAuB,WAAW;AAClC;AACA;AACA,0BAA0B,iEAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,SAAS,iDAAG,SAAS;AACpD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gBAAgB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gBAAgB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gBAAgB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAG;AACxB;AACA,oEAAoE,sDAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2DAAQ;AAC3B;AACA,2BAA2B,iBAAiB;AAC5C;AACA,yBAAyB,iEAAc;AACvC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD,gCAAgC,eAAe;AAC/C,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA,uCAAuC,6DAAS;AAChD;AACA;AACA,gCAAgC,qEAAa;AAC7C;AACA;AACA;AACA,aAAa;AACb;AACA,gCAAgC,6BAA6B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C,sCAAsC,sBAAsB;AAC5D;AACA,+CAA+C,sBAAsB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE,sCAAsC,sBAAsB;AAC5D,qBAAqB,qDAAK;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE,sCAAsC,sBAAsB;AAC5D,2CAA2C,sBAAsB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA,uBAAuB,mBAAmB;AAC1C,yBAAyB,qDAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,aAAa;AAC1C,6BAA6B,yDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C,mCAAmC,2BAA2B,UAAU,GAAG;AAC3E,mCAAmC,2BAA2B,UAAU,GAAG;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,oBAAoB,6DAAE;AACtB;AACA;AACA,oBAAoB,6DAAE;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,gCAAgC,UAAU,iDAAG,SAAS;AACtD,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,gCAAgC,UAAU,iDAAG,SAAS;AACtD,+BAA+B,gBAAgB;AAC/C,4BAA4B,qDAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,gCAAgC,UAAU,iDAAG,SAAS;AACtD,+BAA+B,gBAAgB;AAC/C,4BAA4B,qDAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,YAAY;AAC5C,gCAAgC,UAAU,iDAAG,SAAS;AACtD,+BAA+B,gBAAgB;AAC/C,4BAA4B,qDAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,gCAAgC,UAAU,iDAAG,SAAS;AACtD,+BAA+B,gBAAgB;AAC/C,4BAA4B,qDAAK;AACjC;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,WAAW,qDAAK;AAChB;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT,WAAW,qDAAK;AAChB;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT,WAAW,qDAAK;AAChB;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,2BAA2B;AAC3B,SAAS;AACT,WAAW,qDAAK;AAChB;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,2BAA2B;AAC3B,SAAS;AACT;AACA;AACA,CAAC;AACmB;AACpB;AACA,oC","file":"2.cffd6851c9fb7611e036.chunk.js","sourcesContent":["\"use strict\";\n/**\n * The months in a year.\n */\nvar Month = (function () {\n function Month() {\n }\n Month.JANUARY = 0;\n Month.FEBRUARY = 1;\n Month.MARCH = 2;\n Month.APRIL = 3;\n Month.MAY = 4;\n Month.JUNE = 5;\n Month.JULY = 6;\n Month.AUGUST = 7;\n Month.SEPTEMBER = 8;\n Month.OCTOBER = 9;\n Month.NOVEMBER = 10;\n Month.DECEMBER = 11;\n /**\n * The full list of months in a year.\n */\n Month.LIST = [\n Month.JANUARY,\n Month.FEBRUARY,\n Month.MARCH,\n Month.APRIL,\n Month.MAY,\n Month.JUNE,\n Month.JULY,\n Month.AUGUST,\n Month.SEPTEMBER,\n Month.OCTOBER,\n Month.NOVEMBER,\n Month.DECEMBER\n ];\n return Month;\n}());\nexport { Month };\n//# sourceMappingURL=Month.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Month.js\n// module id = 1000\n// module chunks = 2","\"use strict\";\nimport { Functions as fn } from './Functions';\nimport { Suffix } from './Suffix';\nimport { Weekday } from './Weekday';\nimport { Schedule } from './Schedule';\n/**\n * A class which helps describe [[ScheduleInput]] if it matches a pattern.\n */\nvar Pattern = (function () {\n /**\n * Creates a new pattern.\n *\n * @param name The unique name of the pattern.\n * @param listed If the pattern is \"listed\" [[Pattern.listed]].\n * @param describe A function to describe the pattern given a [[Day]].\n * @param rules The rules which describe how to detect and apply the pattern\n * to schedule input.\n */\n function Pattern(name, listed, describe, rules) {\n this.name = name;\n this.listed = listed;\n this.describe = describe;\n this.rules = rules;\n }\n /**\n * Applies this pattern to a [[Schedule]] or [[ScheduleInput]] removing and\n * adding any necessary properties from the input to match this pattern -\n * based around the day provided.\n *\n * @param schedule The schedule to update to match this pattern.\n * @param day The day to base the schedule on.\n * @returns The reference to the input passed in.\n */\n Pattern.prototype.apply = function (schedule, day) {\n if (schedule instanceof Schedule) {\n this.applyGeneric(day, function (prop, frequency) { return schedule.setFrequency(prop, frequency); }, function (prop) { return schedule.setFrequency(prop); });\n schedule.updateChecks();\n }\n else {\n this.applyGeneric(day, function (prop, frequency) { return schedule[prop] = frequency; }, function (prop) { return delete schedule[prop]; });\n }\n return schedule;\n };\n /**\n * Applies this pattern to any object provided they implement the\n * `setFrequency` and `removeFrequency` functions.\n *\n * @param day The day to base the schedule on.\n * @param setFrequency The function which sets the frequency on the object.\n * @param removeFrequency The function to remove a frequency from the object.\n */\n Pattern.prototype.applyGeneric = function (day, setFrequency, removeFrequency) {\n for (var _i = 0, _a = Pattern.PROPS; _i < _a.length; _i++) {\n var prop = _a[_i];\n var rule = this.rules[prop];\n // Should have one value\n if (rule === 1) {\n setFrequency(prop, [day[prop]]);\n }\n // Can be any of the values in the array\n if (fn.isArray(rule)) {\n setFrequency(prop, rule);\n }\n // Must not be present\n if (!fn.isDefined(rule)) {\n removeFrequency(prop);\n }\n }\n };\n /**\n * Determines whether the given [[Schedule]] or [[ScheduleInput]] matches this\n * pattern. Optionally a day can be provided to make sure the day matches the\n * schedule and pattern together.\n *\n * @param schedule The schedule input to test.\n * @param exactlyWith A day to further validate against for matching.\n * @returns `true` if the schedule was a match to this pattern with the\n * day if one was provided, otherwise `false`.\n */\n Pattern.prototype.isMatch = function (schedule, exactlyWith) {\n if (schedule instanceof Schedule) {\n return this.isMatchGeneric(function (prop) { return schedule[prop].input; }, exactlyWith);\n }\n else {\n return this.isMatchGeneric(function (prop) { return schedule[prop]; }, exactlyWith);\n }\n };\n /**\n * Determines whether the given input matches this pattern. Optionally a day\n * can be provided to make sure the day matches the schedule and pattern\n * together.\n *\n * @param input The schedule input to test.\n * @param exactlyWith A day to further validate against for matching.\n * @returns `true` if the schedule input was a match to this pattern with the\n * day if one was provided, otherwise `false`.\n */\n Pattern.prototype.isMatchGeneric = function (getFrequency, exactlyWith) {\n var exactly = fn.isDefined(exactlyWith);\n for (var _i = 0, _a = Pattern.PROPS; _i < _a.length; _i++) {\n var prop = _a[_i];\n var rule = this.rules[prop];\n var curr = getFrequency(prop);\n // Optional, skip it\n if (rule === false) {\n continue;\n }\n // Requires any value\n if (rule === true && !curr) {\n return false;\n }\n // Must not be present\n if (!fn.isDefined(rule) && curr) {\n return false;\n }\n // Must be an array of the same size\n if (fn.isNumber(rule)) {\n if (fn.isArray(curr) && curr.length === rule) {\n if (exactly && curr.indexOf(exactlyWith[prop]) === -1) {\n return false;\n }\n }\n else {\n return false;\n }\n }\n // Must be an array of the same values\n if (fn.isArray(rule)) {\n if (!fn.isArray(curr)) {\n return false;\n }\n if (rule.length !== curr.length) {\n return false;\n }\n for (var i = 0; i < rule.length; i++) {\n if (rule[i] !== curr[i]) {\n return false;\n }\n }\n if (exactly && rule.indexOf(exactlyWith[prop]) === -1) {\n return false;\n }\n }\n // Must be an object with same over & offset.\n if (fn.isObject(rule)) {\n if (!fn.isObject(curr)) {\n return false;\n }\n var ruleOffset = rule.offset || 0;\n var currOffset = curr.offset || 0;\n if (currOffset !== ruleOffset || curr.every !== rule.every) {\n return false;\n }\n if (exactly && (exactlyWith[prop] % rule.every) !== ruleOffset) {\n return false;\n }\n }\n }\n return true;\n };\n /**\n * Returns the pattern with the given name if one exists. If you add your own\n * patterns make sure to add them to [[PatternMap]].\n *\n * @param name The name of the pattern to return.\n * @return The instance to the pattern with the same name.\n */\n Pattern.withName = function (name) {\n return PatternMap[name];\n };\n /**\n * Finds a matching pattern to the given input searching through [[Patterns]]\n * for matches. Optionally it will only look at patterns where listed = `true`.\n *\n * @param input The schedule input to use.\n * @param listedOnly When `true` only patterns with [[Pattern.listed]] set to\n * `true` will be looked at, otherwise all patterns are looked at.\n * @param exactlyWith A day to further validate against for matching.\n * @see [[Pattern.isMatch]]\n */\n Pattern.findMatch = function (input, listedOnly, exactlyWith) {\n if (listedOnly === void 0) { listedOnly = true; }\n for (var _i = 0, Patterns_1 = Patterns; _i < Patterns_1.length; _i++) {\n var pattern = Patterns_1[_i];\n if ((pattern.listed || !listedOnly) && pattern.isMatch(input, exactlyWith)) {\n return pattern;\n }\n }\n return null;\n };\n /**\n * The properties in the [[ScheduleInput]] which are compared against the\n * rules of a pattern.\n */\n Pattern.PROPS = [\n 'dayOfWeek', 'dayOfMonth', 'lastDayOfMonth', 'dayOfYear',\n 'month', 'week', 'year',\n 'weekOfYear', 'weekspanOfYear', 'fullWeekOfYear', 'lastWeekspanOfYear', 'lastFullWeekOfYear',\n 'weekOfMonth', 'weekspanOfMonth', 'fullWeekOfMonth', 'lastWeekspanOfMonth', 'lastFullWeekOfMonth'\n ];\n return Pattern;\n}());\nexport { Pattern };\n/**\n * The list of patterns that can be searched through for matches to schedule\n * input.\n *\n * @see [[Pattern.findMatch]]\n */\nexport var Patterns = [\n new Pattern('none', true, function (day) { return 'Does not repeat'; }, {\n year: 1,\n month: 1,\n dayOfMonth: 1\n }),\n new Pattern('daily', true, function (day) { return 'Daily'; }, {}),\n new Pattern('weekly', true, function (day) { return 'Weekly on ' + day.format('dddd'); }, {\n dayOfWeek: 1\n }),\n new Pattern('monthlyWeek', true, function (day) { return 'Monthly on the ' + Suffix.CACHE[day.weekspanOfMonth + 1] + ' ' + day.format('dddd'); }, {\n dayOfWeek: 1,\n weekspanOfMonth: 1\n }),\n new Pattern('annually', true, function (day) { return 'Annually on ' + day.format('MMMM Do'); }, {\n month: 1,\n dayOfMonth: 1\n }),\n new Pattern('annuallyMonthWeek', true, function (day) { return 'Annually on the ' + Suffix.CACHE[day.weekspanOfMonth + 1] + ' ' + day.format('dddd') + ' of ' + day.format('MMMM'); }, {\n month: 1,\n dayOfWeek: 1,\n weekspanOfMonth: 1\n }),\n new Pattern('weekday', true, function (day) { return 'Every weekday (Monday to Friday)'; }, {\n dayOfWeek: [Weekday.MONDAY, Weekday.TUESDAY, Weekday.WEDNESDAY, Weekday.THURSDAY, Weekday.FRIDAY]\n }),\n new Pattern('monthly', true, function (day) { return 'Monthly on the ' + day.format('Do') + ' day'; }, {\n dayOfMonth: 1\n }),\n new Pattern('custom', true, function (day) { return 'Custom...'; }, {\n dayOfWeek: false,\n dayOfMonth: false,\n lastDayOfMonth: false,\n dayOfYear: false,\n year: false,\n month: false,\n week: false,\n weekOfYear: false,\n weekspanOfYear: false,\n fullWeekOfYear: false,\n lastWeekspanOfYear: false,\n lastFullWeekOfYear: false,\n weekOfMonth: false,\n weekspanOfMonth: false,\n fullWeekOfMonth: false,\n lastWeekspanOfMonth: false,\n lastFullWeekOfMonth: false\n })\n];\n/**\n * The map of patterns keyed by their name.\n *\n * @see [[Pattern.withName]]\n */\nexport var PatternMap = {};\nfor (var _i = 0, Patterns_2 = Patterns; _i < Patterns_2.length; _i++) {\n var pattern = Patterns_2[_i];\n PatternMap[pattern.name] = pattern;\n}\n//# sourceMappingURL=Pattern.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Pattern.js\n// module id = 1001\n// module chunks = 2","\"use strict\";\n/**\n * A class with [[SortEvent]] functions and functions which accept other\n * [[SortEvent]]s and return a new [[SortEvent]].\n *\n * ```typescript\n * // Sorts full day events first, then events in descending order based on start time.\n * Sorts.List([Sorts.FullDay, Sorts.Desc(Sorts.Start)]);\n * ```\n */\nvar Sorts = (function () {\n function Sorts() {\n }\n /**\n * Sorts the two events by their start time - the earliest event being first\n * in order.\n *\n * @param a The first event.\n * @param b The second event.\n * @returns The difference in time between the start of `a` and `b`.\n * @see [[CalendarEvent.time]]\n */\n Sorts.Start = function (a, b) {\n return a.time.start.time - b.time.start.time;\n };\n /**\n * Sorts the two events by their end time - the earliest to end being first\n * in order.\n *\n * @param a The first event.\n * @param b The second event.\n * @returns The difference in time between the end of `a` and `b`.\n * @see [[CalendarEvent.time]]\n */\n Sorts.End = function (a, b) {\n return a.time.end.time - b.time.end.time;\n };\n /**\n * Sorts the two events placing the full day events before the timed events.\n *\n * @param a The first event.\n * @param b The second event.\n * @returns If both are timed or both are full day then `0` is returned,\n * otherwise `-1` is returned if `a` is full day and `1` is returned if\n * `b` is full day.\n * @see [[CalendarEvent.fullDay]]\n */\n Sorts.FullDay = function (a, b) {\n var af = a.fullDay ? 0 : 1;\n var bf = b.fullDay ? 0 : 1;\n return af - bf;\n };\n /**\n * Sorts the two events placing the shorter events before the longer events.\n * Full day or multiple day events actually take up a day and will be ordered\n * last.\n *\n * @param a The first event.\n * @param b The second event.\n * @returns The difference in milliseconds between `a` and `b`.\n * @see [[CalendarEvent.time]]\n * @see [[DaySpan.millis]]\n */\n Sorts.Duration = function (a, b) {\n return a.time.millis() - b.time.millis();\n };\n /**\n * Returns a [[SortEvent]] that effectively orders the given sorter in the\n * opposite (often descending) order.\n *\n * @param sorter The sorter to reverse.\n * @returns A new sorter which reverses the one passed in.\n */\n Sorts.Desc = function (sorter) {\n return function (a, b) {\n return sorter(b, a);\n };\n };\n /**\n * Returns a [[SortEvent]] that orders the events based on a string in each\n * event. A function must be supplied which takes an event of type `T` and\n * returns a string.\n *\n * @param getString A function which returns a string from the event.\n * @returns A sorter which sorts strings alphabetically.\n */\n Sorts.Alphabetical = function (getString) {\n return function (a, b) {\n var as = getString(a.event) || '';\n var bs = getString(b.event) || '';\n return as.localeCompare(bs);\n };\n };\n /**\n * Returns a [[SortEvent]] that orders events based on a number in each event.\n * A function must be supplied which takes an event of type `T` and returns\n * a number.\n *\n * @param getOrder A function which returns a number from the event.\n * @returns A sorter which sorts events based on a number in ascending order.\n */\n Sorts.Ordered = function (getOrder) {\n return function (a, b) {\n var ao = getOrder(a.event);\n var bo = getOrder(b.event);\n return ao - bo;\n };\n };\n /**\n * Returns a [[SortEvent]] that orders events based on an array of sorters.\n * The first sorter which returns a non-zero result is used.\n *\n * @param sorters A list of sorting functions to test one at a time.\n * @returns A sorter which sorts based on a list of sorters.\n */\n Sorts.List = function (sorters) {\n return function (a, b) {\n for (var _i = 0, sorters_1 = sorters; _i < sorters_1.length; _i++) {\n var sorter = sorters_1[_i];\n var compare = sorter(a, b);\n if (compare !== 0) {\n return compare;\n }\n }\n return 0;\n };\n };\n return Sorts;\n}());\nexport { Sorts };\n//# sourceMappingURL=Sort.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Sort.js\n// module id = 1002\n// module chunks = 2","import { NgModule } from '@angular/core';\r\nimport { IonicPageModule } from 'ionic-angular';\r\nimport { CalendarPage } from './calendar';\r\nimport { DatePickerModule } from 'ionic-calendar-date-picker';\r\n\r\n@NgModule({\r\n declarations: [\r\n CalendarPage,\r\n ],\r\n imports: [\r\n IonicPageModule.forChild(CalendarPage),\r\n DatePickerModule\r\n ],\r\n})\r\nexport class CalendarPageModule {}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/calendar/calendar.module.ts","\"use strict\";\n/**\n * The class which contains commonly used functions by the library. These\n * functions and variables exist in a class so they may be overridden if\n * desired.\n */\nvar Functions = (function () {\n function Functions() {\n }\n /**\n * Determines whether the given input is an array.\n *\n * @param input The variable to test.\n * @returns `true` if the variable is an array, otherwise `false`.\n */\n Functions.isArray = function (input) {\n return input instanceof Array;\n };\n /**\n * Determines whether the two arrays given are stricly equivalent. If the\n * arrays are not the same length or contain the same values in the same order\n * then `false` is returned.\n *\n * @param x The first array to test.\n * @param y The second array to test.\n * @returns `true` if they have the same exact values, otherwise `false`.\n */\n Functions.isArrayEquals = function (x, y) {\n if (x === y)\n return true;\n if (x.length !== y.length)\n return false;\n for (var i = 0; i < x.length; i++) {\n if (x[i] !== y[i]) {\n return false;\n }\n }\n return true;\n };\n /**\n * Determines whether the given input is a string.\n *\n * @param input The variable to test.\n * @returns `true` if the variable is a string, otherwise `false`.\n */\n Functions.isString = function (input) {\n return typeof (input) === 'string';\n };\n /**\n * Determines whether the given input is a finite number (a number which is\n * not infinite or not the result of a divide-by-zero operation).\n *\n * @param input The variable to test.\n * @returns `true` if the variable is a finite number, otherwise `false`.\n */\n Functions.isNumber = function (input) {\n return isFinite(input) && typeof input === 'number';\n };\n /**\n * Determines whether the given input is an object and NOT an array.\n *\n * @param input The variable to test.\n * @returns `true` if the variable is a plain object, otherwise `false`.\n */\n Functions.isObject = function (input) {\n return input !== null && !this.isArray(input) && typeof (input) === 'object';\n };\n /**\n * Determines whether the given input is defined.\n *\n * @param input The variable to test.\n * @return `true` if the variable is defined, otherwise `false`.\n */\n Functions.isDefined = function (input) {\n return typeof (input) !== 'undefined';\n };\n /**\n * Determines whether the given input is defined and not null.\n *\n * @param input The variable to test.\n * @return `true` if the variable is defined and not null, otherwise `false`.\n */\n Functions.isValue = function (input) {\n return input !== null && typeof (input) !== 'undefined';\n };\n /**\n * Determines whether the given input appears to be a valid\n * [[FrequencyValueEvery]].\n *\n * ```typescript\n * Functions.isFrequencyValueEvery({}); // false\n * Functions.isFrequencyValueEvery([]); // false\n * Functions.isFrequencyValueEvery([1]); // false\n * Functions.isFrequencyValueEvery(null); // false\n * Functions.isFrequencyValueEvery({every:2}); // true\n * Functions.isFrequencyValueEvery({offset:1}); // false\n * Functions.isFrequencyValueEvery({every:2, offset:1}); // true\n * ```\n *\n * @param input The variable to test.\n * @returns `true` if the variable appears to be a [[FrequencyValueEvery]],\n * otherwise false.\n */\n Functions.isFrequencyValueEvery = function (input) {\n return this.isObject(input) && this.isNumber(input.every);\n };\n /**\n * Determines whether the given input appears to be a valid\n * [[FrequencyValueOneOf]].\n *\n * ```typescript\n * Functions.isFrequencyValueOneOf({}); // false\n * Functions.isFrequencyValueOneOf([]); // false\n * Functions.isFrequencyValueOneOf([1]); // true\n * Functions.isFrequencyValueOneOf(null); // false\n * ```\n *\n * @param input The variable to test.\n * @returns `true` if the variable appears to be a [[FrequencyValueOneOf]],\n * otherwise false.\n */\n Functions.isFrequencyValueOneOf = function (input) {\n return this.isArray(input) && input.length > 0;\n };\n /**\n * Returns the first argument which is defined.\n *\n * ```typescript\n * Functions.coalesce(3, 4); // 3\n * Functions.coalesce(undefined, 4); // 4\n * Functions.coalesce(null, 4); // null\n * Functions.coalesce(void 0, void 0, 5); // 5\n * ```\n *\n * @param a The first argument to look at.\n * @param b The second argument to look at.\n * @returns The first defined argument.\n * @see [[Functions.isDefined]]\n */\n Functions.coalesce = function (a, b, c) {\n return this.isDefined(a) ? a : (this.isDefined(b) ? b : c);\n };\n /**\n * Copies values from `from` object and sets them to the `target` object.\n *\n * @param target The object to set values to.\n * @param from The object to copy value references from.\n * @returns The reference to `target`.\n */\n Functions.extend = function (target, from) {\n for (var prop in from) {\n target[prop] = from[prop];\n }\n return target;\n };\n /**\n * Pads the string `x` up to `length` characters with the given `padding`\n * optionally placing the `padding` `before` `x`.\n *\n * ```typescript\n * Functions.pad('hey', 5, '_', false); // 'hey__'\n * Functions.pad('hey', 5, '_', true); // '__hey'\n * Functions.pad('heyman', 5, '_', true); // 'heyman'\n * ```\n *\n * @param x The string to pad.\n * @param length The length to pad to.\n * @param padding The string to pad with.\n * @param before If the padding should go before the string to pad.\n * @returns The padded string if any padding needed be added.\n */\n Functions.pad = function (x, length, padding, before) {\n while (x.length < length) {\n before ? x = padding + x : x = x + padding;\n }\n return x;\n };\n /**\n * Pads the number `x` up to `length` digits where the padding is `0` and it\n * goes before `x`. This function will only return the first `length`\n * characters of the padding string representation of the number but can return\n * an alternative number of `first` characters.\n *\n * ```typescript\n * Functions.padNumber(29, 3); // '029'\n * Functions.padNumber(29, 3, 2); // '02'\n * Functions.padNumber(9573, 3); // '957'\n * ```\n *\n * @param x The number to pad with zeros in the beginning.\n * @param length The number of digits the number should be padded to.\n * @param first The number of digits to return from the start of the string.\n * @returns A padded number.\n */\n Functions.padNumber = function (x, length, first) {\n if (first === void 0) { first = length; }\n return this.pad(x + '', length, '0', true).substring(0, first);\n };\n return Functions;\n}());\nexport { Functions };\n//# sourceMappingURL=Functions.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Functions.js\n// module id = 895\n// module chunks = 2","\"use strict\";\n/**\n * A class that stores commonly used values.\n */\nvar Constants = (function () {\n function Constants() {\n }\n /**\n * The number of milliseconds in a second.\n */\n Constants.MILLIS_IN_SECOND = 1000;\n /**\n * The number of milliseconds in a minute.\n */\n Constants.MILLIS_IN_MINUTE = Constants.MILLIS_IN_SECOND * 60;\n /**\n * The number of milliseconds in an hour.\n */\n Constants.MILLIS_IN_HOUR = Constants.MILLIS_IN_MINUTE * 60;\n /**\n * The number of milliseconds in a day (not including DST days).\n */\n Constants.MILLIS_IN_DAY = Constants.MILLIS_IN_HOUR * 24;\n /**\n * The number of milliseconds in a week (not including ones that include DST).\n */\n Constants.MILLIS_IN_WEEK = Constants.MILLIS_IN_DAY * 7;\n /**\n * The number of minutes in an hour.\n */\n Constants.MINUTES_IN_HOUR = 60;\n /**\n * The number of minutes in a day (not including DST days).\n */\n Constants.MINUTES_IN_DAY = 60 * 24;\n /**\n * The number of days in a week.\n */\n Constants.DAYS_IN_WEEK = 7;\n /**\n * The number of months in a year.\n */\n Constants.MONTHS_IN_YEAR = 12;\n /**\n * The number of hours in a day (not including DST days).\n */\n Constants.HOURS_IN_DAY = 24;\n /**\n * The first month of the year.\n */\n Constants.MONTH_MIN = 0;\n /**\n * The last month of the year.\n */\n Constants.MONTH_MAX = 11;\n /**\n * The first day of a month.\n */\n Constants.DAY_MIN = 1;\n /**\n * The last day of the longest month.\n */\n Constants.DAY_MAX = 31;\n /**\n * The first hour of the day.\n */\n Constants.HOUR_MIN = 0;\n /**\n * The last hour of the day.\n */\n Constants.HOUR_MAX = 23;\n /**\n * The first minute of the hour.\n */\n Constants.MINUTE_MIN = 0;\n /**\n * The last minute of the hour.\n */\n Constants.MINUTE_MAX = 59;\n /**\n * The first second of the minute.\n */\n Constants.SECOND_MIN = 0;\n /**\n * The last second of the minute.\n */\n Constants.SECOND_MAX = 59;\n /**\n * The first millisecond of the second.\n */\n Constants.MILLIS_MIN = 0;\n /**\n * The last millisecond of the second.\n */\n Constants.MILLIS_MAX = 999;\n /**\n * The first day of the week.\n */\n Constants.WEEKDAY_MIN = 0;\n /**\n * The last day of the week.\n */\n Constants.WEEKDAY_MAX = 6;\n /**\n * The default duration for an event.\n */\n Constants.DURATION_DEFAULT = 1;\n /**\n * The default duration unit for an all day event.\n */\n Constants.DURATION_DEFAULT_UNIT_ALL = 'days';\n /**\n * The default duration unit for an event at a given time.\n */\n Constants.DURATION_DEFAULT_UNIT_TIMES = 'hours';\n /**\n * Computes the duration unit given its for an all day event.\n *\n * @param all If the event is all day.\n * @return The default unit for the event.\n */\n Constants.DURATION_DEFAULT_UNIT = function (all) { return all ? Constants.DURATION_DEFAULT_UNIT_ALL :\n Constants.DURATION_DEFAULT_UNIT_TIMES; };\n /**\n * The number of milliseconds for various duration units. These are worse case\n * scenario and do not include DST changes.\n */\n Constants.DURATION_TO_MILLIS = {\n minute: Constants.MILLIS_IN_MINUTE,\n minutes: Constants.MILLIS_IN_MINUTE,\n hour: Constants.MILLIS_IN_HOUR,\n hours: Constants.MILLIS_IN_HOUR,\n day: Constants.MILLIS_IN_DAY,\n days: Constants.MILLIS_IN_DAY,\n week: Constants.MILLIS_IN_WEEK,\n weeks: Constants.MILLIS_IN_WEEK,\n month: Constants.MILLIS_IN_DAY * Constants.DAY_MAX,\n months: Constants.MILLIS_IN_DAY * Constants.DAY_MAX\n };\n /**\n * The maximum estimated number of events per day. This is used to calculate\n * [[CalendarEvent.id]] to give each event a unique ID. If you think you will\n * have more events than this per day, you can enlarge the value.\n */\n Constants.MAX_EVENTS_PER_DAY = 24;\n /**\n * The day of the week which determines the first week of the year or month.\n * By default this day is Thursday.\n */\n Constants.WEEK_OF_MONTH_MINIMUM_WEEKDAY = 4;\n return Constants;\n}());\nexport { Constants };\n//# sourceMappingURL=Constants.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Constants.js\n// module id = 897\n// module chunks = 2","\"use strict\";\nimport { Identifier } from './Identifier';\nimport { Constants } from './Constants';\nimport { Op, operate } from './Operation';\nimport { Parse } from './Parse';\nimport { Time } from './Time';\n// @ts-ignore\nimport * as moment from 'moment';\n/**\n * A class which represents a point in time as\n */\nvar Day = (function () {\n /**\n *\n */\n function Day(date) {\n this.date = date;\n this.time = date.valueOf();\n this.millis = date.millisecond();\n this.seconds = date.second();\n this.minute = date.minute();\n this.hour = date.hour();\n this.month = date.month();\n this.year = date.year();\n this.quarter = date.quarter();\n this.dayOfWeek = date.day();\n this.dayOfMonth = date.date();\n this.dayOfYear = date.dayOfYear();\n this.week = date.week();\n this.lastDayOfMonth = Day.getLastDayOfMonth(date);\n this.weekOfYear = Day.getWeekOfYear(date);\n this.weekspanOfYear = Day.getWeekspanOfYear(date);\n this.fullWeekOfYear = Day.getFullWeekOfYear(date);\n this.lastWeekspanOfYear = Day.getLastWeekspanOfYear(date);\n this.lastFullWeekOfYear = Day.getLastFullWeekOfYear(date);\n this.weekOfMonth = Day.getWeekOfMonth(date);\n this.weekspanOfMonth = Day.getWeekspanOfMonth(date);\n this.fullWeekOfMonth = Day.getFullWeekOfMonth(date);\n this.lastWeekspanOfMonth = Day.getLastWeekspanOfMonth(date);\n this.lastFullWeekOfMonth = Day.getLastFullWeekOfMonth(date);\n this.timeIdentifier = Identifier.Time.get(this);\n this.dayIdentifier = Identifier.Day.get(this);\n this.weekIdentifier = Identifier.Week.get(this);\n this.monthIdentifier = Identifier.Month.get(this);\n this.quarterIdentifier = Identifier.Quarter.get(this);\n }\n // Same\n /**\n *\n */\n Day.prototype.sameDay = function (day) {\n return this.dayIdentifier === day.dayIdentifier;\n };\n /**\n *\n */\n Day.prototype.sameMonth = function (day) {\n return this.monthIdentifier === day.monthIdentifier;\n };\n /**\n *\n */\n Day.prototype.sameWeek = function (day) {\n return this.weekIdentifier === day.weekIdentifier;\n };\n /**\n *\n */\n Day.prototype.sameYear = function (day) {\n return this.year === day.year;\n };\n /**\n *\n */\n Day.prototype.sameQuarter = function (day) {\n return this.quarterIdentifier === day.quarterIdentifier;\n };\n /**\n *\n */\n Day.prototype.sameHour = function (day) {\n return this.dayIdentifier === day.dayIdentifier && this.hour === day.hour;\n };\n /**\n *\n */\n Day.prototype.sameMinute = function (day) {\n return this.timeIdentifier === day.timeIdentifier;\n };\n /**\n *\n */\n Day.prototype.sameTime = function (time) {\n return this.hour === time.hour && this.minute === time.minute && this.seconds === time.second && this.millis === time.millisecond;\n };\n // Comparison\n /**\n *\n */\n Day.prototype.isBefore = function (day, precision) {\n return this.date.isBefore(day.date, precision);\n };\n /**\n *\n */\n Day.prototype.isSameOrBefore = function (day, precision) {\n return this.date.isSameOrBefore(day.date, precision);\n };\n /**\n *\n */\n Day.prototype.isAfter = function (day, precision) {\n return this.date.isAfter(day.date, precision);\n };\n /**\n *\n */\n Day.prototype.isSameOrAfter = function (day, precision) {\n return this.date.isSameOrAfter(day.date, precision);\n };\n /**\n *\n */\n Day.prototype.max = function (day) {\n return this.date.isAfter(day.date) ? this : day;\n };\n /**\n *\n */\n Day.prototype.min = function (day) {\n return this.date.isBefore(day.date) ? this : day;\n };\n // Between\n Day.prototype.millisBetween = function (day, op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return operate(this.date.diff(day.date, 'milliseconds', true), op, absolute);\n };\n Day.prototype.secondsBetween = function (day, op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return operate(this.date.diff(day.date, 'seconds', true), op, absolute);\n };\n Day.prototype.minutesBetween = function (day, op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return operate(this.date.diff(day.date, 'minutes', true), op, absolute);\n };\n Day.prototype.hoursBetween = function (day, op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return operate(this.date.diff(day.date, 'hours', true), op, absolute);\n };\n Day.prototype.daysBetween = function (day, op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return operate(this.date.diff(day.date, 'days', true), op, absolute);\n };\n Day.prototype.weeksBetween = function (day, op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return operate(this.date.diff(day.date, 'weeks', true), op, absolute);\n };\n Day.prototype.monthsBetween = function (day, op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return operate(this.date.diff(day.date, 'months', true), op, absolute);\n };\n Day.prototype.yearsBetween = function (day, op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return operate(this.date.diff(day.date, 'years', true), op, absolute);\n };\n Day.prototype.isBetween = function (start, end, inclusive) {\n if (inclusive === void 0) { inclusive = true; }\n return this.date.isBetween(start.date, end.date, null, inclusive ? '[]' : '[)');\n };\n Day.prototype.mutate = function (mutator) {\n var d = this.toMoment();\n mutator(d);\n return new Day(d);\n };\n Day.prototype.add = function (amount, unit) {\n return this.mutate(function (d) { return d.add(amount, unit); });\n };\n Day.prototype.relative = function (millis) {\n return this.mutate(function (d) { return d.add(millis, 'milliseconds'); });\n };\n // Days\n Day.prototype.relativeDays = function (days) {\n return this.mutate(function (d) { return d.add(days, 'days'); });\n };\n Day.prototype.prev = function (days) {\n if (days === void 0) { days = 1; }\n return this.relativeDays(-days);\n };\n Day.prototype.next = function (days) {\n if (days === void 0) { days = 1; }\n return this.relativeDays(days);\n };\n Day.prototype.withDayOfMonth = function (day) {\n return this.mutate(function (d) { return d.date(day); });\n };\n Day.prototype.withDayOfWeek = function (dayOfWeek) {\n return this.mutate(function (d) { return d.day(dayOfWeek); });\n };\n Day.prototype.withDayOfYear = function (dayOfYear) {\n return this.mutate(function (d) { return d.dayOfYear(dayOfYear); });\n };\n // Month\n Day.prototype.withMonth = function (month) {\n return this.mutate(function (d) { return d.month(month); });\n };\n Day.prototype.relativeMonths = function (months) {\n return this.mutate(function (d) { return d.add(months, 'months'); });\n };\n Day.prototype.prevMonth = function (months) {\n if (months === void 0) { months = 1; }\n return this.relativeMonths(-months);\n };\n Day.prototype.nextMonth = function (months) {\n if (months === void 0) { months = 1; }\n return this.relativeMonths(months);\n };\n // Week Of Year\n Day.prototype.withWeek = function (week, relativeWeek) {\n if (relativeWeek === void 0) { relativeWeek = this.week; }\n return this.mutate(function (d) { return d.add((week - relativeWeek) * Constants.DAYS_IN_WEEK, 'days'); });\n };\n Day.prototype.withWeekOfYear = function (week) {\n return this.withWeek(week, this.weekOfYear);\n };\n Day.prototype.withFullWeekOfYear = function (week) {\n return this.withWeek(week, this.fullWeekOfYear);\n };\n Day.prototype.withWeekspanOfYear = function (week) {\n return this.withWeek(week, this.weekspanOfYear);\n };\n Day.prototype.withWeekOfMonth = function (week) {\n return this.withWeek(week, this.weekOfMonth);\n };\n Day.prototype.withWeekspanOfMonth = function (week) {\n return this.withWeek(week, this.weekspanOfMonth);\n };\n Day.prototype.withFullWeekOfMonth = function (week) {\n return this.withWeek(week, this.fullWeekOfMonth);\n };\n Day.prototype.relativeWeeks = function (weeks) {\n return this.mutate(function (d) { return d.add(weeks, 'weeks'); });\n };\n Day.prototype.prevWeek = function (weeks) {\n if (weeks === void 0) { weeks = 1; }\n return this.relativeWeeks(-weeks);\n };\n Day.prototype.nextWeek = function (weeks) {\n if (weeks === void 0) { weeks = 1; }\n return this.relativeWeeks(weeks);\n };\n // Year\n Day.prototype.withYear = function (year) {\n return this.mutate(function (d) { return d.year(year); });\n };\n Day.prototype.relativeYears = function (years) {\n return this.mutate(function (d) { return d.add(years, 'year'); });\n };\n Day.prototype.prevYear = function (years) {\n if (years === void 0) { years = 1; }\n return this.relativeYears(-years);\n };\n Day.prototype.nextYear = function (years) {\n if (years === void 0) { years = 1; }\n return this.relativeYears(years);\n };\n // Hour\n Day.prototype.withHour = function (hour) {\n return this.mutate(function (d) { return d.hour(hour); });\n };\n Day.prototype.relativeHours = function (hours) {\n return this.mutate(function (d) { return d.add(hours, 'hours'); });\n };\n Day.prototype.prevHour = function (hours) {\n if (hours === void 0) { hours = 1; }\n return this.relativeHours(-hours);\n };\n Day.prototype.nextHour = function (hours) {\n if (hours === void 0) { hours = 1; }\n return this.relativeHours(hours);\n };\n // Time\n Day.prototype.withTimes = function (hour, minute, second, millisecond) {\n if (hour === void 0) { hour = Constants.HOUR_MIN; }\n if (minute === void 0) { minute = Constants.MINUTE_MIN; }\n if (second === void 0) { second = Constants.SECOND_MIN; }\n if (millisecond === void 0) { millisecond = Constants.MILLIS_MIN; }\n return this.mutate(function (d) { return d.set({ hour: hour, minute: minute, second: second, millisecond: millisecond }); });\n };\n Day.prototype.withTime = function (time) {\n return this.withTimes(time.hour, time.minute, time.second, time.millisecond);\n };\n Day.prototype.asTime = function () {\n return new Time(this.hour, this.minute, this.seconds, this.millis);\n };\n // Start & End\n // Time\n Day.prototype.start = function () {\n return this.mutate(function (d) { return d.startOf('day'); });\n };\n Day.prototype.isStart = function () {\n return this.hour === Constants.HOUR_MIN &&\n this.minute === Constants.MINUTE_MIN &&\n this.seconds === Constants.SECOND_MIN &&\n this.millis === Constants.MILLIS_MIN;\n };\n Day.prototype.end = function (inclusive) {\n if (inclusive === void 0) { inclusive = true; }\n return inclusive ?\n this.mutate(function (d) { return d.endOf('day'); }) :\n this.mutate(function (d) { return d.startOf('day').add(1, 'day'); });\n };\n Day.prototype.isEnd = function () {\n return this.hour === Constants.HOUR_MAX &&\n this.minute === Constants.MINUTE_MAX &&\n this.seconds === Constants.SECOND_MAX &&\n this.millis === Constants.MILLIS_MAX;\n };\n // Hour\n Day.prototype.startOfHour = function () {\n return this.mutate(function (d) { return d.startOf('hour'); });\n };\n Day.prototype.isStartOfHour = function () {\n return this.minute === Constants.MINUTE_MIN &&\n this.seconds === Constants.SECOND_MIN &&\n this.millis === Constants.MILLIS_MIN;\n };\n Day.prototype.endOfHour = function (inclusive) {\n if (inclusive === void 0) { inclusive = true; }\n return inclusive ?\n this.mutate(function (d) { return d.endOf('hour'); }) :\n this.mutate(function (d) { return d.startOf('hour').add(1, 'hour'); });\n };\n Day.prototype.isEndOfHour = function () {\n return this.minute === Constants.MINUTE_MAX &&\n this.seconds === Constants.SECOND_MAX &&\n this.millis === Constants.MILLIS_MAX;\n };\n // Week\n Day.prototype.startOfWeek = function () {\n return this.mutate(function (d) { return d.startOf('week'); });\n };\n Day.prototype.isStartOfWeek = function () {\n return this.dayOfWeek === Constants.WEEKDAY_MIN;\n };\n Day.prototype.endOfWeek = function (inclusive) {\n if (inclusive === void 0) { inclusive = true; }\n return inclusive ?\n this.mutate(function (d) { return d.endOf('week'); }) :\n this.mutate(function (d) { return d.startOf('week').add(1, 'week'); });\n };\n Day.prototype.isEndOfWeek = function () {\n return this.dayOfWeek === Constants.WEEKDAY_MAX;\n };\n // Month\n Day.prototype.startOfMonth = function () {\n return this.mutate(function (d) { return d.startOf('month'); });\n };\n Day.prototype.isStartOfMonth = function () {\n return this.dayOfMonth === Constants.DAY_MIN;\n };\n Day.prototype.endOfMonth = function (inclusive) {\n if (inclusive === void 0) { inclusive = true; }\n return inclusive ?\n this.mutate(function (d) { return d.endOf('month'); }) :\n this.mutate(function (d) { return d.startOf('month').add(1, 'month'); });\n };\n Day.prototype.isEndOfMonth = function () {\n return this.dayOfMonth === this.daysInMonth();\n };\n // Year\n Day.prototype.startOfYear = function () {\n return this.mutate(function (d) { return d.startOf('year'); });\n };\n Day.prototype.isStartOfYear = function () {\n return this.month === Constants.MONTH_MIN && this.dayOfMonth === Constants.DAY_MIN;\n };\n Day.prototype.endOfYear = function (inclusive) {\n if (inclusive === void 0) { inclusive = true; }\n return inclusive ?\n this.mutate(function (d) { return d.endOf('year'); }) :\n this.mutate(function (d) { return d.startOf('year').add(1, 'year'); });\n };\n Day.prototype.isEndOfYear = function () {\n return this.month === Constants.MONTH_MAX && this.dayOfMonth === Constants.DAY_MAX;\n };\n // Days In X\n Day.prototype.daysInMonth = function () {\n return this.date.daysInMonth();\n };\n Day.prototype.daysInYear = function () {\n return this.endOfYear().dayOfYear;\n };\n Day.prototype.weeksInYear = function () {\n return this.date.weeksInYear();\n };\n // Display\n Day.prototype.format = function (format) {\n return this.date.format(format);\n };\n Day.prototype.utc = function (keepLocalTime) {\n return this.mutate(function (d) { return d.utc(keepLocalTime); });\n };\n Day.prototype.toMoment = function () {\n return this.date.clone();\n };\n Day.prototype.toDate = function () {\n return this.date.toDate();\n };\n Day.prototype.toArray = function () {\n return this.date.toArray();\n };\n Day.prototype.toJSON = function () {\n return this.date.toJSON();\n };\n Day.prototype.toISOString = function (keepOffset) {\n if (keepOffset === void 0) { keepOffset = false; }\n return this.date.toISOString(keepOffset);\n };\n Day.prototype.toObject = function () {\n return this.date.toObject();\n };\n Day.prototype.toString = function () {\n return this.date.toString();\n };\n // State\n Day.prototype.isDST = function () {\n return this.date.isDST();\n };\n Day.prototype.isLeapYear = function () {\n return this.date.isLeapYear();\n };\n // Instances\n Day.now = function () {\n return new Day(moment());\n };\n Day.today = function () {\n return this.now().start();\n };\n Day.tomorrow = function () {\n return this.today().next();\n };\n Day.fromMoment = function (moment) {\n return moment && moment.isValid() ? new Day(moment) : null;\n };\n Day.unix = function (millis) {\n return this.fromMoment(moment(millis));\n };\n Day.unixSeconds = function (millis) {\n return this.fromMoment(moment.unix(millis));\n };\n Day.parse = function (input) {\n return Parse.day(input);\n };\n Day.fromString = function (input) {\n return this.fromMoment(moment(input));\n };\n Day.fromFormat = function (input, formats) {\n return this.fromMoment(moment(input, formats));\n };\n Day.fromObject = function (input) {\n return this.fromMoment(moment(input));\n };\n Day.fromDate = function (input) {\n return this.fromMoment(moment(input));\n };\n Day.fromArray = function (input) {\n return this.fromMoment(moment(input));\n };\n Day.fromDayIdentifier = function (id) {\n var date = id % 100;\n var month = (Math.floor(id / 100) % 100) - 1;\n var year = Math.floor(id / 10000);\n return this.build(year, month, date);\n };\n Day.build = function (year, month, date, hour, minute, second, millisecond) {\n if (date === void 0) { date = Constants.DAY_MIN; }\n if (hour === void 0) { hour = Constants.HOUR_MIN; }\n if (minute === void 0) { minute = Constants.MINUTE_MIN; }\n if (second === void 0) { second = Constants.SECOND_MIN; }\n if (millisecond === void 0) { millisecond = Constants.MILLIS_MIN; }\n return new Day(moment({ year: year, month: month, date: date, hour: hour, minute: minute, second: second, millisecond: millisecond }));\n };\n Day.getWeekspanOfYear = function (date) {\n return Math.floor((date.dayOfYear() - 1) / Constants.DAYS_IN_WEEK);\n };\n Day.getLastWeekspanOfYear = function (date) {\n var lastOfYear = date.clone().endOf('year');\n var daysInYear = lastOfYear.dayOfYear();\n return Math.floor((daysInYear - date.dayOfYear()) / Constants.DAYS_IN_WEEK);\n };\n Day.getWeekOfYear = function (date) {\n var firstOfYear = date.clone().startOf('year');\n var weeks = date.week();\n return firstOfYear.day() > Constants.WEEK_OF_MONTH_MINIMUM_WEEKDAY ? weeks - 1 : weeks;\n };\n Day.getFullWeekOfYear = function (date) {\n var firstOfYear = date.clone().startOf('year');\n var weeks = date.week();\n return firstOfYear.day() === Constants.WEEKDAY_MIN ? weeks : weeks - 1;\n };\n Day.getLastFullWeekOfYear = function (date) {\n var firstOfYear = date.clone().startOf('year');\n var weeks = date.week();\n var weeksMax = date.weeksInYear();\n var lastWeek = weeksMax - weeks;\n return firstOfYear.day() === Constants.WEEKDAY_MIN ? lastWeek + 1 : lastWeek;\n };\n Day.getWeekspanOfMonth = function (date) {\n return Math.floor((date.date() - 1) / Constants.DAYS_IN_WEEK);\n };\n Day.getLastWeekspanOfMonth = function (date) {\n return Math.floor((date.daysInMonth() - date.date()) / Constants.DAYS_IN_WEEK);\n };\n Day.getFullWeekOfMonth = function (date) {\n return Math.floor((date.date() - 1 - date.day() + Constants.DAYS_IN_WEEK) / Constants.DAYS_IN_WEEK);\n };\n Day.getLastFullWeekOfMonth = function (date) {\n return Math.floor((date.daysInMonth() - date.date() - (Constants.WEEKDAY_MAX - date.day()) + Constants.DAYS_IN_WEEK) / Constants.DAYS_IN_WEEK);\n };\n Day.getWeekOfMonth = function (date) {\n var dom = date.date();\n var dow = date.day();\n var sundayDate = dom - dow;\n return Math.floor((sundayDate + Constants.WEEK_OF_MONTH_MINIMUM_WEEKDAY + 5) / Constants.DAYS_IN_WEEK);\n };\n Day.getLastDayOfMonth = function (date) {\n return date.daysInMonth() - date.date() + 1;\n };\n return Day;\n}());\nexport { Day };\n//# sourceMappingURL=Day.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Day.js\n// module id = 901\n// module chunks = 2","\"use strict\";\n/**\n * An operation that can be performed on a single number.\n */\nexport var Op;\n(function (Op) {\n /**\n * The number is returned unmodified.\n */\n Op[Op[\"NONE\"] = 0] = \"NONE\";\n /**\n * The number is rounded down to the nearest whole number.\n */\n Op[Op[\"FLOOR\"] = 1] = \"FLOOR\";\n /**\n * The number is rounded up to the nearest whole number.\n */\n Op[Op[\"CEIL\"] = 2] = \"CEIL\";\n /**\n * The number is rounded up or down depending on if the fractional value is\n * greater than or less than 0.5 respectively.\n */\n Op[Op[\"ROUND\"] = 3] = \"ROUND\";\n /**\n * The fractional part of the number is dropped.\n */\n Op[Op[\"TRUNCATE\"] = 4] = \"TRUNCATE\";\n /**\n * The number is rounded up when positive and down when negative. This is\n * effectively ceiling the absolute value where the result preserves the sign.\n */\n Op[Op[\"UP\"] = 5] = \"UP\";\n /**\n * The number is rounded down when positive and up when negative. This is\n * effectively floor the absolute value where the result preserves the sign.\n */\n Op[Op[\"DOWN\"] = 6] = \"DOWN\";\n})(Op = Op || (Op = {}));\n/**\n * Performs the requested operation on the given number, optionally taking\n * the absolute value of the number before the operation.\n *\n * @param value The number to operate on.\n * @param op The operation to perform.\n * @param absolute If the number should be positive before the operation.\n * @return The operated result, or the original value if its not a valid number.\n */\nexport function operate(value, op, absolute) {\n if (absolute === void 0) { absolute = false; }\n if (isFinite(value)) {\n if (absolute) {\n value = Math.abs(value);\n }\n switch (op) {\n case Op.NONE:\n return value;\n case Op.FLOOR:\n return Math.floor(value);\n case Op.CEIL:\n return Math.ceil(value);\n case Op.ROUND:\n return Math.round(value);\n case Op.TRUNCATE:\n case Op.DOWN:\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n case Op.UP:\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n }\n }\n return value;\n}\n//# sourceMappingURL=Operation.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Operation.js\n// module id = 907\n// module chunks = 2","\"use strict\";\nimport { Functions as fn } from './Functions';\nimport { Schedule } from './Schedule';\nimport { ScheduleModifier } from './ScheduleModifier';\nimport { Constants } from './Constants';\nimport { Day } from './Day';\nimport { Event } from './Event';\nimport { Time } from './Time';\n/**\n * The class which takes user input and parses it to specific structures.\n */\nvar Parse = (function () {\n function Parse() {\n }\n /**\n * Parses a value and converts it to a [[FrequencyCheck]].\n *\n * @param input The input to parse into a function.\n * @param property The [[Day]] property the frequency is for.\n * @returns A function which determines whether a value matches a frequency.\n * @see [[Schedule]]\n */\n Parse.frequency = function (input, property) {\n var check = function (value) {\n return true;\n };\n check.given = false;\n if (fn.isFrequencyValueEvery(input)) {\n var every_1 = input.every;\n var offset_1 = (input.offset || 0) % every_1;\n check = function (value) {\n return value % every_1 === offset_1;\n };\n check.given = true;\n }\n if (fn.isFrequencyValueOneOf(input)) {\n var map_1 = {};\n for (var i = 0; i < input.length; i++) {\n map_1[input[i]] = true;\n }\n check = function (value) {\n return !!map_1[value];\n };\n check.given = true;\n }\n check.input = fn.coalesce(input, null);\n check.property = property;\n return check;\n };\n /**\n * Parses [[DayInput]] into a [[Day]] instance.\n *\n * ```typescript\n * Parse.day( 65342300 ); // UTC timestamp\n * Parse.day( '01/02/2014' ); // strings in many formats\n * Parse.day( day ); // return a passed instance\n * Parse.day( [2018, 0, 2] ); // array: 01/02/2018\n * Parse.day( {year: 2018, month: 2} ); // object: 03/01/2018\n * Parse.day( true ); // today\n * ```\n *\n * @param input The input to parse.\n * @returns The Day parsed or `null` if the value is not valid.\n */\n Parse.day = function (input) {\n if (fn.isNumber(input)) {\n return Day.unix(input);\n }\n else if (fn.isString(input)) {\n return Day.fromString(input);\n }\n else if (input instanceof Day) {\n return input;\n }\n else if (fn.isArray(input)) {\n return Day.fromArray(input);\n }\n else if (fn.isObject(input)) {\n return Day.fromObject(input);\n }\n else if (input === true) {\n return Day.today();\n }\n return null;\n };\n /**\n * Parses a value and tries to convert it to a Time instance.\n *\n * ```typescript\n * Parse.time( time ); // return a passed instance\n * Parse.time( 9 ); // 09:00:00.000\n * Parse.time( 3009 ); // 09:30:00.000\n * Parse.time( 593009 ); // 09:30:59.000\n * Parsetime( '09' ); // 09:00:00.000\n * Parse.time( '9:30' ); // 09:30:00.000\n * Parse.time( '9:30:59' ); // 09:30:59.000\n * Parse.time( {hour: 2} ); // 02:00:00.000\n * ```\n *\n * @param input The input to parse.\n * @returns The instance parsed or `null` if it was invalid.\n * @see [[Time.fromIdentifier]]\n * @see [[Time.fromString]]\n */\n Parse.time = function (input) {\n if (input instanceof Time) {\n return input;\n }\n if (fn.isNumber(input)) {\n return Time.fromIdentifier(input);\n }\n if (fn.isString(input)) {\n return Time.fromString(input);\n }\n if (fn.isObject(input) && fn.isNumber(input.hour)) {\n return new Time(input.hour, input.minute, input.second, input.millisecond);\n }\n return null;\n };\n /**\n * Parses a value and tries to convert it to an array of Time instances.\n * If any of the given values are not a valid time value then the resulting\n * array will not contain a time instance.\n *\n * @param input The input to parse.\n * @returns A non-null array of time instances.\n * @see [[Parse.time]]\n */\n Parse.times = function (input) {\n var times = [];\n if (fn.isArray(input)) {\n for (var _i = 0, input_1 = input; _i < input_1.length; _i++) {\n var timeInput = input_1[_i];\n var time = this.time(timeInput);\n if (time) {\n times.push(time);\n }\n }\n // Sort times from earliest to latest.\n times.sort(function (a, b) {\n return a.toMilliseconds() - b.toMilliseconds();\n });\n }\n return times;\n };\n /**\n * Parses an array of excluded days into a map of excluded days where the\n * array value and returned object key are [[Day.dayIdentifier]].\n *\n * ```typescript\n * Parse.modifier( [ 20180101, 20140506 ] ); // {'20180101': true, '20140506': true}\n * Parse.modifier( [ 20180101, Day.build(2014,4,6) ] ); // {'20180101': true, '20140506': true}\n * ```\n *\n * @param input The input to parse.\n * @param value The default value if the input given is an array of identifiers.\n * @param parseMeta A function to use to parse a modifier.\n * @param out The modifier to set the identifiers and values of and return.\n * @returns The object with identifier keys and `true` values.\n * @see [[Day.dayIdentifier]]\n */\n Parse.modifier = function (input, value, parseMeta, out) {\n if (parseMeta === void 0) { parseMeta = (function (x) { return x; }); }\n if (out === void 0) { out = new ScheduleModifier(); }\n var map = {};\n if (fn.isArray(input)) {\n for (var _i = 0, input_2 = input; _i < input_2.length; _i++) {\n var identifier = input_2[_i];\n if (identifier instanceof Day) {\n map[identifier.dayIdentifier] = value;\n }\n else if (fn.isNumber(identifier)) {\n map[identifier] = value;\n }\n else if (fn.isString(identifier)) {\n map[identifier] = value;\n }\n }\n }\n if (fn.isObject(input)) {\n for (var identifier in input) {\n map[identifier] = parseMeta(input[identifier]);\n }\n }\n out.map = map;\n return out;\n };\n /**\n * Parses an object which specifies a schedule where events may or may not\n * repeat and they may be all day events or at specific times.\n *\n * @param input The input to parse into a schedule.\n * @param parseMeta A function to use when parsing meta input into the desired type.\n * @param out The schedule to set the values of and return.\n * @returns An instance of the parsed [[Schedule]].\n */\n Parse.schedule = function (input, parseMeta, out) {\n if (parseMeta === void 0) { parseMeta = (function (x) { return x; }); }\n if (out === void 0) { out = new Schedule(); }\n if (input instanceof Schedule) {\n return input;\n }\n var on = this.day(input.on);\n var times = this.times(input.times);\n var fullDay = times.length === 0;\n if (on) {\n input.start = on.start();\n input.end = on.end();\n input.year = [on.year];\n input.month = [on.month];\n input.dayOfMonth = [on.dayOfMonth];\n }\n out.times = times;\n out.duration = fn.coalesce(input.duration, Constants.DURATION_DEFAULT);\n out.durationUnit = fn.coalesce(input.durationUnit, Constants.DURATION_DEFAULT_UNIT(fullDay));\n out.start = this.day(input.start);\n out.end = this.day(input.end);\n out.exclude = this.modifier(input.exclude, true, undefined, out.exclude);\n out.include = this.modifier(input.include, true, undefined, out.include);\n out.cancel = this.modifier(input.cancel, true, undefined, out.cancel);\n out.meta = this.modifier(input.meta, null, parseMeta, out.meta);\n out.year = this.frequency(input.year, 'year');\n out.month = this.frequency(input.month, 'month');\n out.week = this.frequency(input.week, 'week');\n out.weekOfYear = this.frequency(input.weekOfYear, 'weekOfYear');\n out.weekspanOfYear = this.frequency(input.weekspanOfYear, 'weekspanOfYear');\n out.fullWeekOfYear = this.frequency(input.fullWeekOfYear, 'fullWeekOfYear');\n out.lastWeekspanOfYear = this.frequency(input.lastWeekspanOfYear, 'lastWeekspanOfYear');\n out.lastFullWeekOfYear = this.frequency(input.lastFullWeekOfYear, 'lastFullWeekOfYear');\n out.weekOfMonth = this.frequency(input.weekOfMonth, 'weekOfMonth');\n out.weekspanOfMonth = this.frequency(input.weekspanOfMonth, 'weekspanOfMonth');\n out.fullWeekOfMonth = this.frequency(input.fullWeekOfMonth, 'fullWeekOfMonth');\n out.lastWeekspanOfMonth = this.frequency(input.lastWeekspanOfMonth, 'lastWeekspanOfMonth');\n out.lastFullWeekOfMonth = this.frequency(input.lastFullWeekOfMonth, 'lastFullWeekOfMonth');\n out.dayOfWeek = this.frequency(input.dayOfWeek, 'dayOfWeek');\n out.dayOfMonth = this.frequency(input.dayOfMonth, 'dayOfMonth');\n out.lastDayOfMonth = this.frequency(input.lastDayOfMonth, 'lastDayOfMonth');\n out.dayOfYear = this.frequency(input.dayOfYear, 'dayOfYear');\n out.updateDurationInDays();\n out.updateChecks();\n return out;\n };\n /**\n * Parses an array of [[FrequencyCheck]] functions and returns an array of\n * functions for only the checks that were specified by the user.\n *\n * @param checks The array of check functions to filter through.\n * @returns The array of user specified checks.\n */\n Parse.givenFrequency = function (checks) {\n var out = [];\n for (var _i = 0, checks_1 = checks; _i < checks_1.length; _i++) {\n var check = checks_1[_i];\n if (check.given) {\n out.push(check);\n }\n }\n return out;\n };\n /**\n * Parses [[EventInput]] and returns an [[Event]].\n *\n * @param input The input to parse.\n * @param parseData A function to use when parsing data input into the desired type.\n * @param parseMeta A function to use when parsing meta input into the desired type.\n * @returns The parsed value.\n */\n Parse.event = function (input, parseData, parseMeta) {\n if (parseData === void 0) { parseData = (function (x) { return x; }); }\n if (parseMeta === void 0) { parseMeta = (function (x) { return x; }); }\n if (input instanceof Event) {\n return input;\n }\n if (!input.schedule) {\n return null;\n }\n var schedule = this.schedule(input.schedule, parseMeta);\n return new Event(schedule, parseData(input.data), input.id, input.visible);\n };\n /**\n * Parses a schedule from a CRON pattern. TODO\n */\n Parse.cron = function (pattern, out) {\n if (out === void 0) { out = new Schedule(); }\n return out;\n };\n return Parse;\n}());\nexport { Parse };\n//# sourceMappingURL=Parse.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Parse.js\n// module id = 908\n// module chunks = 2","\"use strict\";\nimport { Functions as fn } from './Functions';\n/**\n * An action to perform on the source as instructed by the iterator.\n */\nexport var IteratorAction;\n(function (IteratorAction) {\n /**\n * Continue iteration.\n */\n IteratorAction[IteratorAction[\"Continue\"] = 0] = \"Continue\";\n /**\n * Stop iteration.\n */\n IteratorAction[IteratorAction[\"Stop\"] = 1] = \"Stop\";\n /**\n * Remove the current item if possible, and continue iteration.\n */\n IteratorAction[IteratorAction[\"Remove\"] = 2] = \"Remove\";\n /**\n * Replace the current item with the provided value.\n */\n IteratorAction[IteratorAction[\"Replace\"] = 3] = \"Replace\";\n})(IteratorAction = IteratorAction || (IteratorAction = {}));\n/**\n * A class that allows an iteratable source to be iterated any number of times\n * by providing the following functionality:\n *\n * - [[Iterator.isEmpty]]: Determines whether the source contains any items.\n * - [[Iterator.first]]: Gets the first item in the source.\n * - [[Iterator.count]]: Counds the number of items in the source.\n * - [[Iterator.list]]: Builds a list of the items in the source.\n * - [[Iterator.object]]: Builds an object of the items in the source.\n * - [[Iterator.reduce]]: Reduces the items in the source down to a single value.\n * - [[Iterator.purge]]: Removes items from the source which meet some criteria.\n * - [[Iterator.filter]]: Returns a subset of items that meet some criteria by\n * returning a new Iterator.\n * - [[Iterator.map]]: Maps each item in the source to another item by returning\n * a new Iterator.\n * - [[Iterator.iterate]]: Invokes a function for each item in the source.\n *\n * The following static functions exist to help iterate simple sources:\n *\n * - [[Iterator.forArray]]: Iterates an array, optionally reverse\n * - [[Iterator.forObject]]: Iterates the properties of an object, optionally\n * just the properties explicitly set on the object.\n *\n * ```typescript\n * let iter = object.iterateThings();\n * iter.isEmpty(); // no items?\n * iter.isEmpty(d => d.flag); // no items that meet some criteria?\n * iter.count(); // number of items\n * iter.count(d => d.flag); // number of items that meet some criteria\n * iter.first(); // first item\n * iter.first(d => d.flag); // first item that meets some criteria\n * iter.list(); // get all items as array\n * iter.list(myArray); // add all items to given array\n * iter.list([], d => d.flag); // get all items as array that meet some criteria\n * iter.object(d => d.id); // get all items as an object keyed by a value (ex: id)\n * iter.object(d => d.id, {},\n * d => d.flag); // get all items as an object keyed by a value where the item meets some criteria (ex: key id if flag is truthy)\n * iter.purge(d => d.flag); // remove all items from source that meet some criteria\n * iter.filter(d => d.flag); // returns an iterator which iterates a subset of items which meet some criteria\n * iter.reduce(0,\n * (d, t) => t + d.size); // reduces all items to a single value (ex: sums all size)\n * iter.reduce(0,\n * (d, t) => t + d.size,\n * d => d.flag); // reduces all items to a single value (ex: sums all size) where the item meets some criteria\n * iter.map(d => d.subitem); // return an iterator for subitems if they exist\n * iter.iterate(d => log(d)); // do something for each item\n * ```\n *\n * @typeparam T The type of item being iterated.\n */\nvar Iterator = (function () {\n /**\n * Creates a new Iterator given a source.\n *\n * @param source The source of items to iterator.\n */\n function Iterator(source) {\n /**\n * A result of the iteration passed to [[Iterator.stop]].\n */\n this.result = null;\n this.source = source;\n }\n /**\n * Returns a clone of this iterator with the same source. This is necessary\n * if you want to iterate all or a portion of the source while already\n * iterating it (like a nested loop).\n */\n Iterator.prototype.clone = function () {\n return new Iterator(this.source);\n };\n /**\n * Passes the given item to the iterator callback and returns the action\n * requested at this point in iteration.\n *\n * @param item The current item being iterated.\n */\n Iterator.prototype.act = function (item) {\n this.action = IteratorAction.Continue;\n this.replaceWith = null;\n this.callback(item, this);\n return this.action;\n };\n /**\n * Stops iteration and optionally sets the result of the iteration.\n *\n * @param result The result of the iteration.\n */\n Iterator.prototype.stop = function (result) {\n this.result = result;\n this.action = IteratorAction.Stop;\n return this;\n };\n /**\n * Stops iteration and optionally sets the result of the iteration.\n *\n * @param result The result of the iteration.\n */\n Iterator.prototype.replace = function (replaceWith) {\n this.replaceWith = replaceWith;\n this.action = IteratorAction.Replace;\n return this;\n };\n /**\n * Signals to the iterator source that the current item wants to be removed.\n */\n Iterator.prototype.remove = function () {\n this.action = IteratorAction.Remove;\n return this;\n };\n /**\n * Determines with this iterator is empty. A filter function can be specified\n * to only check for items which match certain criteria.\n *\n * @param filter A function to the checks items for certain criteria.\n * @returns `true` if no valid items exist in the source.\n */\n Iterator.prototype.isEmpty = function (filter) {\n if (filter === void 0) { filter = null; }\n var empty = true;\n this.iterate(function (item, iterator) {\n if (filter && !filter(item)) {\n return;\n }\n empty = false;\n iterator.stop();\n });\n return empty;\n };\n /**\n * Counts the number of items in the iterator. A filter function can be\n * specified to only count items which match certain criteria.\n *\n * @param filter A function to count items for certain criteria.\n * @returns The number of items in the source that optionally match the given\n * criteria.\n */\n Iterator.prototype.count = function (filter) {\n if (filter === void 0) { filter = null; }\n var total = 0;\n this.iterate(function (item, iterator) {\n if (filter && !filter(item)) {\n return;\n }\n total++;\n });\n return total;\n };\n /**\n * Returns the first item in the iterator. A filter function can be specified\n * to only return the first item which matches certain criteria.\n *\n * @param filter A function to compare items to to match certain criteria.\n * @returns The first item found that optonally matches the given criteria.\n */\n Iterator.prototype.first = function (filter) {\n if (filter === void 0) { filter = null; }\n var first = null;\n this.iterate(function (item, iterator) {\n if (filter && !filter(item)) {\n return;\n }\n first = item;\n iterator.stop();\n });\n return first;\n };\n /**\n * Builds a list of items from the source. A filter function can be specified\n * so the resulting list only contain items that match certain criteria.\n *\n * @param out The array to place the items in.\n * @param filter The function which determines which items are added to the list.\n * @returns The reference to `out` which has had items added to it which\n * optionally match the given criteria.\n */\n Iterator.prototype.list = function (out, filter) {\n if (out === void 0) { out = []; }\n if (filter === void 0) { filter = null; }\n this.iterate(function (item, iterator) {\n if (filter && !filter(item)) {\n return;\n }\n out.push(item);\n });\n return out;\n };\n /**\n * Builds an object of items from the source keyed by a result returned by\n * a `getKey` function.\n *\n * @param getKey The function which returns the key of the object.\n * @param out The object to place the items in.\n * @param filter The function which determines which items are set on the object.\n * @returns The reference to `out` which has had items set to it which\n * optionally match the given criteria.\n */\n Iterator.prototype.object = function (getKey, out, filter) {\n if (out === void 0) { out = {}; }\n if (filter === void 0) { filter = null; }\n this.iterate(function (item, iterator) {\n if (filter && !filter(item)) {\n return;\n }\n var key = getKey(item);\n out[key] = item;\n });\n return out;\n };\n /**\n * Returns a new iterator that only returns a maximum number of items.\n *\n * @param amount The maximum number of items to return.\n * @returns A new iterator which returns a maximum number of items.\n */\n Iterator.prototype.take = function (amount) {\n var _this = this;\n return new Iterator(function (next) {\n _this.iterate(function (item, prev) {\n switch (next.act(item)) {\n case IteratorAction.Stop:\n prev.stop();\n break;\n case IteratorAction.Remove:\n prev.remove();\n break;\n case IteratorAction.Replace:\n prev.replace(next.replaceWith);\n break;\n }\n if (--amount <= 0) {\n prev.stop();\n }\n });\n });\n };\n /**\n * Returns a new iterator that skips the given number of items from the items\n * in this iterator.\n *\n * @param amount The number of items to skip.\n * @returns A new iterator which skipped the given number of items.\n */\n Iterator.prototype.skip = function (amount) {\n var _this = this;\n return new Iterator(function (next) {\n var skipped = 0;\n _this.iterate(function (item, prev) {\n if (skipped >= amount) {\n switch (next.act(item)) {\n case IteratorAction.Stop:\n prev.stop();\n break;\n case IteratorAction.Remove:\n prev.remove();\n break;\n case IteratorAction.Replace:\n prev.replace(next.replaceWith);\n break;\n }\n }\n skipped++;\n });\n });\n };\n /**\n * Returns a new iterator thats items are the items in this iterator followed\n * by the items in the given iterators.\n *\n * @param iterators The iterators to append after this one.\n * @returns A new iterator based on this iterator followed by the given.\n */\n Iterator.prototype.append = function () {\n var iterators = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n iterators[_i] = arguments[_i];\n }\n return Iterator.join.apply(Iterator, [this].concat(iterators));\n };\n /**\n * Returns a new iterator thats items are the items in the given iterators\n * followed by the items in this iterator.\n *\n * @param iterators The iterators to prepend before this one.\n * @returns A new iterator based on the given iterators followed by this.\n */\n Iterator.prototype.prepend = function () {\n var iterators = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n iterators[_i] = arguments[_i];\n }\n return Iterator.join.apply(Iterator, iterators.concat([this]));\n };\n /**\n * Removes items from the source that match certain criteria.\n *\n * @param filter The function which determines which items to remove.\n */\n Iterator.prototype.purge = function (filter) {\n this.iterate(function (item, iterator) {\n if (filter(item)) {\n iterator.remove();\n }\n });\n return this;\n };\n /**\n * Returns an iterator which takes items from this iterator and presents them\n * in reverse.\n *\n * @returns A new iterator with the items in this iterator in reverse.\n */\n Iterator.prototype.reverse = function () {\n var _this = this;\n return new Iterator(function (iterator) {\n var items = _this.list();\n var modifies = false;\n var actions = [];\n var replaces = [];\n for (var i = items.length - 1; i >= 0; i--) {\n var item = items[i];\n var action = iterator.act(item);\n if (action === IteratorAction.Stop) {\n break;\n }\n if (action !== IteratorAction.Continue) {\n modifies = true;\n actions[i] = action;\n replaces[i] = iterator.replaceWith;\n }\n }\n if (modifies) {\n var index_1 = 0;\n _this.iterate(function (item, iterator) {\n switch (actions[index_1]) {\n case IteratorAction.Remove:\n iterator.remove();\n break;\n case IteratorAction.Replace:\n iterator.replace(replaces[index_1]);\n break;\n }\n index_1++;\n });\n }\n });\n };\n /**\n * Reduces all the items in the source to a single value given the initial\n * value and a function to convert an item and the current reduced value\n */\n Iterator.prototype.reduce = function (initial, reducer, filter) {\n if (filter === void 0) { filter = null; }\n var reduced = initial;\n this.iterate(function (item, iterator) {\n if (filter && !filter(item)) {\n return;\n }\n reduced = reducer(item, reduced);\n });\n return reduced;\n };\n /**\n * Returns an iterator where this iterator is the source and the returned\n * iterator is built on a subset of items which pass a `filter` function.\n *\n * @param filter The function which determines if an item should be iterated.\n * @returns A new iterator for the filtered items from this iterator.\n */\n Iterator.prototype.filter = function (filter) {\n var _this = this;\n return new Iterator(function (next) {\n _this.iterate(function (prevItem, prev) {\n if (filter(prevItem)) {\n switch (next.act(prevItem)) {\n case IteratorAction.Stop:\n prev.stop();\n break;\n case IteratorAction.Remove:\n prev.remove();\n break;\n case IteratorAction.Replace:\n prev.replace(next.replaceWith);\n break;\n }\n }\n });\n });\n };\n /**\n * Returns an iterator where this iterator is the source and the returned\n * iterator is built from mapped items pulled from items in the source\n * of this iterator. If the given callback `outerCallback` does not return\n * a mapped value then the returned iterator will not see the item. A filter\n * function can be specified to only look at mapping items which match\n * certain criteria.\n *\n * @param mapper The function which maps an item to another.\n * @param filter The function which determines if an item should be mapped.\n * @param unmapper The function which unmaps a value when replace is called.\n * @returns A new iterator for the mapped items from this iterator.\n */\n Iterator.prototype.map = function (mapper, filter, unmapper) {\n var _this = this;\n if (filter === void 0) { filter = null; }\n if (unmapper === void 0) { unmapper = null; }\n return new Iterator(function (next) {\n _this.iterate(function (prevItem, prev) {\n if (filter && !filter(prevItem)) {\n return;\n }\n var nextItem = mapper(prevItem, prev);\n if (fn.isDefined(nextItem)) {\n switch (next.act(nextItem)) {\n case IteratorAction.Stop:\n prev.stop();\n break;\n case IteratorAction.Remove:\n prev.remove();\n break;\n case IteratorAction.Replace:\n if (unmapper) {\n prev.replace(unmapper(next.replaceWith, nextItem, prevItem));\n }\n break;\n }\n }\n });\n });\n };\n /**\n * Invokes the callback for each item in the source of this iterator. The\n * second argument in the callback is the reference to this iterator and\n * [[Iterator.stop]] can be called at anytime to cease iteration.\n *\n * @param callback The function to invoke for each item in this iterator.\n */\n Iterator.prototype.iterate = function (callback) {\n this.result = undefined;\n this.callback = callback;\n this.action = IteratorAction.Continue;\n this.source(this);\n this.callback = null;\n return this;\n };\n /**\n * Passes the result of the iteration to the given function if a truthy\n * result was passed to [[Iterator.stop]].\n *\n * @param getResult The function to pass the result to if it exists.\n */\n Iterator.prototype.withResult = function (getResult) {\n if (this.result) {\n getResult(this.result);\n }\n return this;\n };\n /**\n * Returns an iterator for the given array optionally iterating it in reverse.\n *\n * @param items The array of items to iterate.\n * @param reverse If the array should be iterated in reverse.\n * @returns A new iterator for the given array.\n */\n Iterator.forArray = function (items, reverse) {\n if (reverse === void 0) { reverse = false; }\n return new Iterator(function (iterator) {\n if (reverse) {\n for (var i = items.length - 1; i >= 0; i--) {\n switch (iterator.act(items[i])) {\n case IteratorAction.Stop:\n return;\n case IteratorAction.Remove:\n items.splice(i, 1);\n break;\n case IteratorAction.Replace:\n items.splice(i, 1, iterator.replaceWith);\n break;\n }\n }\n }\n else {\n for (var i = 0; i < items.length; i++) {\n switch (iterator.act(items[i])) {\n case IteratorAction.Stop:\n return;\n case IteratorAction.Remove:\n items.splice(i, 1);\n i--;\n break;\n case IteratorAction.Replace:\n items.splice(i, 1, iterator.replaceWith);\n break;\n }\n }\n }\n });\n };\n /**\n * Returns an iterator for the given object optionally checking the\n * `hasOwnProperty` function on the given object.\n *\n * @param items The object to iterate.\n * @param hasOwnProperty If `hasOwnProperty` should be checked.\n * @returns A new iterator for the given object.\n */\n Iterator.forObject = function (items, hasOwnProperty) {\n if (hasOwnProperty === void 0) { hasOwnProperty = true; }\n return new Iterator(function (iterator) {\n for (var key in items) {\n if (hasOwnProperty && !items.hasOwnProperty(key)) {\n continue;\n }\n switch (iterator.act(items[key])) {\n case IteratorAction.Stop:\n return;\n case IteratorAction.Remove:\n delete items[key];\n break;\n case IteratorAction.Replace:\n items[key] = iterator.replaceWith;\n break;\n }\n }\n });\n };\n /**\n * Joins all the given iterators into a single iterator where the items\n * returned are in the same order as passed to this function. If any items\n * are removed from the returned iterator they will be removed from the given\n * iterator if it supports removal.\n *\n * @param iterators The array of iterators to join as one.\n * @returns A new iterator for the given iterators.\n */\n Iterator.join = function () {\n var iterators = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n iterators[_i] = arguments[_i];\n }\n return new Iterator(function (parent) {\n for (var _i = 0, iterators_1 = iterators; _i < iterators_1.length; _i++) {\n var child = iterators_1[_i];\n child.iterate(function (item, childIterator) {\n switch (parent.act(item)) {\n case IteratorAction.Remove:\n childIterator.remove();\n break;\n case IteratorAction.Stop:\n childIterator.stop();\n break;\n case IteratorAction.Replace:\n childIterator.replace(parent.replaceWith);\n break;\n }\n });\n if (child.action === IteratorAction.Stop) {\n return;\n }\n }\n });\n };\n /**\n * Returns a new iterator with no items.\n *\n * @returns A new iterator with no items.\n */\n Iterator.empty = function () {\n return new Iterator(function (parent) { });\n };\n return Iterator;\n}());\nexport { Iterator };\n//# sourceMappingURL=Iterator.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Iterator.js\n// module id = 909\n// module chunks = 2","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Functions as fn } from './Functions';\nimport { Day } from './Day';\nimport { DaySpan } from './DaySpan';\n/**\n * A class for detecting, parsing, and building identifiers to and from days.\n *\n * An identifier is a simple value which represents a span of time. It may\n * represent an entire year, a quarter (3 months) of a year, a week of a year,\n * a month in a year, a specific day of a month of a year, or a specific hour,\n * minute, day, and month of a year.\n *\n * For example:\n * - `2018`: The year 2018\n * - `201801`: January 2018\n * - `2014023`: The 23rd week of 2014\n * - `20170311`: March 11th, 2017\n * - `201406151651`: June 15th 2016 at 4:51 pm\n * - `'0525'`: Year 525 of the first age, Elrond and Elros are born\n */\nvar Identifier = (function () {\n function Identifier() {\n }\n /**\n * Determines whether the given identifier is this type.\n *\n * @param id The identifier to test.\n * @returns `true` if the identifier is this type, otherwise `false`.\n */\n Identifier.prototype.is = function (id) {\n return (id + '').length === this.getLength();\n };\n /**\n * Computes the identifier given values taken from a [[Day]].\n *\n * @param values The values to compute.\n * @returns The computed identifier.\n */\n Identifier.prototype.compute = function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var scales = this.getScales();\n var total = 0;\n for (var i = 0; i < values.length; i++) {\n total += values[i] * scales[i];\n }\n return this.is(total) ? total : fn.padNumber(total, this.getLength());\n };\n /**\n * Decomputes the given identifier and returns values which describe a span\n * of time.\n *\n * @param id The identifier to decompute.\n * @returns The original values which computed the identifier.\n */\n Identifier.prototype.decompute = function (id) {\n var scales = this.getScales();\n var total = fn.isNumber(id) ? id : parseInt(id);\n var values = [];\n for (var i = 0; i < scales.length - 1; i++) {\n var curr = scales[i + 0];\n var next = scales[i + 1];\n var mod = next / curr;\n var value = total % mod;\n values.push(value);\n total = Math.floor(total / mod);\n }\n values.push(total);\n return values;\n };\n /**\n * Finds which identifier type matches the given identifier, if any.\n *\n * @param id The identifier to find the type of.\n * @returns The found identifier type, otherwise `null` if none exists.\n */\n Identifier.find = function (id) {\n if (this.Time.is(id))\n return this.Time;\n if (this.Day.is(id))\n return this.Day;\n if (this.Week.is(id))\n return this.Week;\n if (this.Month.is(id))\n return this.Month;\n if (this.Year.is(id))\n return this.Year;\n return null;\n };\n /**\n * Determines whether the given time span `outer` contains the time span\n * `inner`.\n *\n * @param outer The potentially larger time span `inner` must be contained in.\n * @param inner The time span to test is contained inside `outer`.\n * @returns `true` if `inner` is equal to or contained in `outer`, otherwise\n * `false`.\n */\n Identifier.contains = function (outer, inner) {\n var outerString = outer + '';\n return (inner + '').substring(0, outerString.length) === outerString;\n };\n /**\n * The identifier type for an hour of time on a specific day.\n */\n Identifier.Time = null;\n /**\n * The identifier type for a specific day.\n */\n Identifier.Day = null;\n /**\n * The identifier type for a specific week of a year.\n */\n Identifier.Week = null;\n /**\n * The identifier type for a specific month of a year.\n */\n Identifier.Month = null;\n /**\n * The identifier type for a specific quarter of a year.\n */\n Identifier.Quarter = null;\n /**\n * The identifier type for a specific year.\n */\n Identifier.Year = null;\n return Identifier;\n}());\nexport { Identifier };\n// YYYYMMddHHmm (12)\nvar IdentifierTime = (function (_super) {\n __extends(IdentifierTime, _super);\n function IdentifierTime() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IdentifierTime.prototype.getScales = function () {\n return IdentifierTime.SCALES;\n };\n IdentifierTime.prototype.getLength = function () {\n return IdentifierTime.LENGTH;\n };\n IdentifierTime.prototype.get = function (day) {\n return this.compute(day.minute, day.hour, day.dayOfMonth, day.month + 1, day.year);\n };\n IdentifierTime.prototype.object = function (id) {\n var values = this.decompute(id);\n return {\n minute: values[0],\n hour: values[1],\n day: values[2],\n month: values[3] - 1,\n year: values[4]\n };\n };\n IdentifierTime.prototype.start = function (id) {\n var obj = this.object(id);\n var start = Day.build(obj.year, obj.month, obj.day, obj.hour, obj.minute);\n return start;\n };\n IdentifierTime.prototype.span = function (id, endInclusive) {\n if (endInclusive === void 0) { endInclusive = false; }\n var start = this.start(id);\n var end = start.endOfHour(endInclusive);\n return new DaySpan(start, end);\n };\n IdentifierTime.prototype.describe = function (id, short) {\n if (short === void 0) { short = false; }\n var start = this.start(id);\n var format = short ? IdentifierTime.DESCRIBE_FORMAT_SHORT : IdentifierTime.DESCRIBE_FORMAT_LONG;\n return start.format(format);\n };\n IdentifierTime.prototype.matches = function (day, id) {\n return day.timeIdentifier === id;\n /*\n let obj: IdentifierObject = this.object(id);\n \n return (\n day.year === obj.year &&\n day.month === obj.month &&\n day.dayOfMonth === obj.day &&\n day.hour === obj.hour &&\n day.minute === obj.minute\n );\n */\n };\n IdentifierTime.DESCRIBE_FORMAT_LONG = 'LLL';\n IdentifierTime.DESCRIBE_FORMAT_SHORT = 'lll';\n IdentifierTime.SCALES = [\n 1 /* minute */,\n 100 /* hour */,\n 10000 /* day */,\n 1000000 /* month */,\n 100000000 /* year */\n ];\n IdentifierTime.LENGTH = 12;\n return IdentifierTime;\n}(Identifier));\n// YYYYMMdd (8)\nvar IdentifierDay = (function (_super) {\n __extends(IdentifierDay, _super);\n function IdentifierDay() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IdentifierDay.prototype.getScales = function () {\n return IdentifierDay.SCALES;\n };\n IdentifierDay.prototype.getLength = function () {\n return IdentifierDay.LENGTH;\n };\n IdentifierDay.prototype.get = function (day) {\n return this.compute(day.dayOfMonth, day.month + 1, day.year);\n };\n IdentifierDay.prototype.object = function (id) {\n var values = this.decompute(id);\n return {\n day: values[0],\n month: values[1] - 1,\n year: values[2]\n };\n };\n IdentifierDay.prototype.start = function (id) {\n var obj = this.object(id);\n var start = Day.build(obj.year, obj.month, obj.day);\n return start;\n };\n IdentifierDay.prototype.span = function (id, endInclusive) {\n if (endInclusive === void 0) { endInclusive = false; }\n var start = this.start(id);\n var end = start.end(endInclusive);\n return new DaySpan(start, end);\n };\n IdentifierDay.prototype.describe = function (id, short) {\n if (short === void 0) { short = false; }\n var start = this.start(id);\n var format = short ? IdentifierDay.DESCRIBE_FORMAT_SHORT : IdentifierDay.DESCRIBE_FORMAT_LONG;\n return start.format(format);\n };\n IdentifierDay.prototype.matches = function (day, id) {\n return day.dayIdentifier === id;\n /*\n let obj: IdentifierObject = this.object(id);\n \n return (\n day.year === obj.year &&\n day.month === obj.month &&\n day.dayOfMonth === obj.day\n );\n */\n };\n IdentifierDay.DESCRIBE_FORMAT_LONG = 'LL';\n IdentifierDay.DESCRIBE_FORMAT_SHORT = 'll';\n IdentifierDay.SCALES = [\n 1 /* day */,\n 100 /* month */,\n 10000 /* year */\n ];\n IdentifierDay.LENGTH = 8;\n return IdentifierDay;\n}(Identifier));\n// YYYY0ww (7)\nvar IdentifierWeek = (function (_super) {\n __extends(IdentifierWeek, _super);\n function IdentifierWeek() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IdentifierWeek.prototype.getScales = function () {\n return IdentifierWeek.SCALES;\n };\n IdentifierWeek.prototype.getLength = function () {\n return IdentifierWeek.LENGTH;\n };\n IdentifierWeek.prototype.get = function (day) {\n return this.compute(day.week, day.year);\n };\n IdentifierWeek.prototype.object = function (id) {\n var values = this.decompute(id);\n return {\n week: values[0],\n year: values[1]\n };\n };\n IdentifierWeek.prototype.start = function (id) {\n var obj = this.object(id);\n var start = Day.build(obj.year, 0).withWeek(obj.week);\n return start;\n };\n IdentifierWeek.prototype.span = function (id, endInclusive) {\n if (endInclusive === void 0) { endInclusive = false; }\n var start = this.start(id);\n var end = start.endOfWeek(endInclusive);\n return new DaySpan(start, end);\n };\n IdentifierWeek.prototype.describe = function (id, short) {\n if (short === void 0) { short = false; }\n var start = this.start(id);\n var format = short ? IdentifierWeek.DESCRIBE_FORMAT_SHORT : IdentifierWeek.DESCRIBE_FORMAT_LONG;\n return start.format(format);\n };\n IdentifierWeek.prototype.matches = function (day, id) {\n return day.weekIdentifier === id;\n /*\n let obj: IdentifierObject = this.object(id);\n \n return (\n day.year === obj.year &&\n day.week === obj.week\n );\n */\n };\n IdentifierWeek.DESCRIBE_FORMAT_LONG = 'wo [week of] YYYY';\n IdentifierWeek.DESCRIBE_FORMAT_SHORT = 'wo [week of] YYYY';\n IdentifierWeek.SCALES = [\n 1 /* week */,\n 1000 /* year */\n ];\n IdentifierWeek.LENGTH = 7;\n return IdentifierWeek;\n}(Identifier));\n// YYYYMM (6)\nvar IdentifierMonth = (function (_super) {\n __extends(IdentifierMonth, _super);\n function IdentifierMonth() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IdentifierMonth.prototype.getScales = function () {\n return IdentifierMonth.SCALES;\n };\n IdentifierMonth.prototype.getLength = function () {\n return IdentifierMonth.LENGTH;\n };\n IdentifierMonth.prototype.get = function (day) {\n return this.compute(day.month + 1, day.year);\n };\n IdentifierMonth.prototype.object = function (id) {\n var values = this.decompute(id);\n return {\n month: values[0] - 1,\n year: values[1]\n };\n };\n IdentifierMonth.prototype.start = function (id) {\n var obj = this.object(id);\n var start = Day.build(obj.year, obj.month);\n return start;\n };\n IdentifierMonth.prototype.span = function (id, endInclusive) {\n if (endInclusive === void 0) { endInclusive = false; }\n var start = this.start(id);\n var end = start.endOfMonth(endInclusive);\n return new DaySpan(start, end);\n };\n IdentifierMonth.prototype.describe = function (id, short) {\n if (short === void 0) { short = false; }\n var start = this.start(id);\n var format = short ? IdentifierMonth.DESCRIBE_FORMAT_SHORT : IdentifierMonth.DESCRIBE_FORMAT_LONG;\n return start.format(format);\n };\n IdentifierMonth.prototype.matches = function (day, id) {\n return day.monthIdentifier === id;\n /*\n let obj: IdentifierObject = this.object(id);\n \n return (\n day.year === obj.year &&\n day.month === obj.month\n );\n */\n };\n IdentifierMonth.DESCRIBE_FORMAT_LONG = 'MMMM YYYY';\n IdentifierMonth.DESCRIBE_FORMAT_SHORT = 'MMM YYYY';\n IdentifierMonth.SCALES = [\n 1 /* month */,\n 100 /* year */\n ];\n IdentifierMonth.LENGTH = 6;\n return IdentifierMonth;\n}(Identifier));\n// YYYYQ (5)\nvar IdentifierQuarter = (function (_super) {\n __extends(IdentifierQuarter, _super);\n function IdentifierQuarter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IdentifierQuarter.prototype.getScales = function () {\n return IdentifierQuarter.SCALES;\n };\n IdentifierQuarter.prototype.getLength = function () {\n return IdentifierQuarter.LENGTH;\n };\n IdentifierQuarter.prototype.get = function (day) {\n return this.compute(day.quarter, day.year);\n };\n IdentifierQuarter.prototype.object = function (id) {\n var values = this.decompute(id);\n return {\n quarter: values[0],\n year: values[1]\n };\n };\n IdentifierQuarter.prototype.start = function (id) {\n var obj = this.object(id);\n var start = Day.build(obj.year, (obj.quarter - 1) * 3);\n return start;\n };\n IdentifierQuarter.prototype.span = function (id, endInclusive) {\n if (endInclusive === void 0) { endInclusive = false; }\n var start = this.start(id);\n var end = start.relativeMonths(3).endOfMonth(endInclusive);\n return new DaySpan(start, end);\n };\n IdentifierQuarter.prototype.describe = function (id, short) {\n if (short === void 0) { short = false; }\n var start = this.start(id);\n var format = short ? IdentifierQuarter.DESCRIBE_FORMAT_SHORT : IdentifierQuarter.DESCRIBE_FORMAT_LONG;\n return start.format(format);\n };\n IdentifierQuarter.prototype.matches = function (day, id) {\n return day.quarterIdentifier === id;\n /*\n let obj: IdentifierObject = this.object(id);\n \n return (\n day.year === obj.year &&\n day.quarter === obj.quarter\n );\n */\n };\n IdentifierQuarter.DESCRIBE_FORMAT_LONG = 'Qo [quarter] YYYY';\n IdentifierQuarter.DESCRIBE_FORMAT_SHORT = 'Qo [quarter] YYYY';\n IdentifierQuarter.SCALES = [\n 1 /* quarter */,\n 10 /* year */\n ];\n IdentifierQuarter.LENGTH = 5;\n return IdentifierQuarter;\n}(Identifier));\n// YYYY (4)\nvar IdentifierYear = (function (_super) {\n __extends(IdentifierYear, _super);\n function IdentifierYear() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IdentifierYear.prototype.getScales = function () {\n return IdentifierYear.SCALES;\n };\n IdentifierYear.prototype.getLength = function () {\n return IdentifierYear.LENGTH;\n };\n IdentifierYear.prototype.get = function (day) {\n return this.compute(day.year);\n };\n IdentifierYear.prototype.object = function (id) {\n var values = this.decompute(id);\n return {\n year: values[0]\n };\n };\n IdentifierYear.prototype.start = function (id) {\n var obj = this.object(id);\n var start = Day.build(obj.year, 0);\n return start;\n };\n IdentifierYear.prototype.span = function (id, endInclusive) {\n if (endInclusive === void 0) { endInclusive = false; }\n var start = this.start(id);\n var end = start.endOfYear(endInclusive);\n return new DaySpan(start, end);\n };\n IdentifierYear.prototype.describe = function (id, short) {\n if (short === void 0) { short = false; }\n var start = this.start(id);\n var format = short ? IdentifierYear.DESCRIBE_FORMAT_SHORT : IdentifierYear.DESCRIBE_FORMAT_LONG;\n return start.format(format);\n };\n IdentifierYear.prototype.matches = function (day, id) {\n return day.year === id;\n /*\n let obj: IdentifierObject = this.object(id);\n \n return (\n day.year === obj.year\n );\n */\n };\n IdentifierYear.DESCRIBE_FORMAT_LONG = 'YYYY';\n IdentifierYear.DESCRIBE_FORMAT_SHORT = 'YYYY';\n IdentifierYear.SCALES = [\n 1 /* year */\n ];\n IdentifierYear.LENGTH = 4;\n return IdentifierYear;\n}(Identifier));\n// Sets the Identifier types\nIdentifier.Time = new IdentifierTime();\nIdentifier.Day = new IdentifierDay();\nIdentifier.Week = new IdentifierWeek();\nIdentifier.Month = new IdentifierMonth();\nIdentifier.Quarter = new IdentifierQuarter();\nIdentifier.Year = new IdentifierYear();\n//# sourceMappingURL=Identifier.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Identifier.js\n// module id = 918\n// module chunks = 2","\"use strict\";\nimport { Day } from './Day';\nimport { Op } from './Operation';\nimport { Units } from './Units';\nimport { Constants } from './Constants';\n/**\n * A class for a range of time between two [[Day]] timestamps.\n */\nvar DaySpan = (function () {\n /**\n * Creates a new span of time.\n *\n * @param start The starting timestamp.\n * @param end The ending timestamp.\n */\n function DaySpan(start, end) {\n this.start = start;\n this.end = end;\n }\n Object.defineProperty(DaySpan.prototype, \"isPoint\", {\n /**\n * Whether this span starts and ends on the same timestamp.\n */\n get: function () {\n return this.start.time === this.end.time;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Determines whether the given timestamp lies between the start and end\n * timestamp.\n *\n * @param day The timestamp to test.\n * @returns True if the day is >= the start and <= the end of this span.\n */\n DaySpan.prototype.contains = function (day) {\n return day.time >= this.start.time && day.time <= this.end.time;\n };\n /**\n * Compares the given timestamp to this span. If the timestamp is before this\n * span then `-1` is returned, if the timestamp is after this span then `1`\n * us returned, otherwise `0` is returned when the timestamp is in this span.\n *\n * @param day The timestamp to compare to.\n * @returns `-1`, `0`, or `1` depending on the given timestamp relative to\n * this span.\n */\n DaySpan.prototype.compareTo = function (day) {\n return day.time < this.start.time ? -1 : (day.time > this.end.time ? 1 : 0);\n };\n /**\n * Determines whether the given timestamp is between the start and end\n * timestamp or lies on the same day as the start or end timestamp.\n *\n * @param day The timestamp to test.\n * @see [[Day.sameDay]]\n */\n DaySpan.prototype.matchesDay = function (day) {\n return this.contains(day) || day.sameDay(this.start) || day.sameDay(this.end);\n };\n /**\n * Determines whether the given timestamp is between the start and end\n * timestamp or lies on the same week as the start or end timestamp.\n *\n * @param day The timestamp to test.\n * @see [[Day.sameWeek]]\n */\n DaySpan.prototype.matchesWeek = function (day) {\n return this.contains(day) || day.sameWeek(this.start) || day.sameWeek(this.end);\n };\n /**\n * Determines whether the given timestamp is between the start and end\n * timestamp or lies on the same month as the start or end timestamp.\n *\n * @param day The timestamp to test.\n * @see [[Day.sameMonth]]\n */\n DaySpan.prototype.matchesMonth = function (day) {\n return this.contains(day) || day.sameMonth(this.start) || day.sameMonth(this.end);\n };\n /**\n * Determines whether the given timestamp is between the start and end\n * timestamp or lies on the same year as the start or end timestamp.\n *\n * @param day The timestamp to test.\n * @see [[Day.sameYear]]\n */\n DaySpan.prototype.matchesYear = function (day) {\n return this.contains(day) || day.sameYear(this.start) || day.sameYear(this.end);\n };\n /**\n * Calculates the number of milliseconds between the start and end timestamp.\n *\n * @param op The operation to perform on the result.\n * @param absolute Whether the result should always be positive.\n * @returns The time between the start and end timestamp.\n * @see [[Day.millisBetween]]\n */\n DaySpan.prototype.millis = function (op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return this.start.millisBetween(this.end, op, absolute);\n };\n /**\n * Calculates the number of seconds between the start and end timestamp.\n *\n * @param op The operation to perform on the result.\n * @param absolute Whether the result should always be positive.\n * @returns The time between the start and end timestamp.\n * @see [[Day.secondsBetween]]\n */\n DaySpan.prototype.seconds = function (op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return this.start.secondsBetween(this.end, op, absolute);\n };\n /**\n * Calculates the number of minutes between the start and end timestamp.\n *\n * @param op The operation to perform on the result.\n * @param absolute Whether the result should always be positive.\n * @returns The time between the start and end timestamp.\n * @see [[Day.minutesBetween]]\n */\n DaySpan.prototype.minutes = function (op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return this.start.minutesBetween(this.end, op, absolute);\n };\n /**\n * Calculates the number of hours between the start and end timestamp.\n *\n * @param op The operation to perform on the result.\n * @param absolute Whether the result should always be positive.\n * @returns The time between the start and end timestamp.\n * @see [[Day.hoursBetween]]\n */\n DaySpan.prototype.hours = function (op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return this.start.hoursBetween(this.end, op, absolute);\n };\n /**\n * Calculates the number of days between the start and end timestamp.\n *\n * @param op The operation to perform on the result.\n * @param absolute Whether the result should always be positive.\n * @returns The time between the start and end timestamp.\n * @see [[Day.daysBetween]]\n */\n DaySpan.prototype.days = function (op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return this.start.daysBetween(this.end, op, absolute);\n };\n /**\n * Calculates the number of weeks between the start and end timestamp.\n *\n * @param op The operation to perform on the result.\n * @param absolute Whether the result should always be positive.\n * @returns The time between the start and end timestamp.\n * @see [[Day.weeksBetween]]\n */\n DaySpan.prototype.weeks = function (op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return this.start.weeksBetween(this.end, op, absolute);\n };\n /**\n * Calculates the number of months between the start and end timestamp.\n *\n * @param op The operation to perform on the result.\n * @param absolute Whether the result should always be positive.\n * @returns The time between the start and end timestamp.\n * @see [[Day.monthsBetween]]\n */\n DaySpan.prototype.months = function (op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return this.start.monthsBetween(this.end, op, absolute);\n };\n /**\n * Calculates the number of years between the start and end timestamp.\n *\n * @param op The operation to perform on the result.\n * @param absolute Whether the result should always be positive.\n * @returns The time between the start and end timestamp.\n * @see [[Day.yearsBetween]]\n */\n DaySpan.prototype.years = function (op, absolute) {\n if (op === void 0) { op = Op.DOWN; }\n if (absolute === void 0) { absolute = true; }\n return this.start.yearsBetween(this.end, op, absolute);\n };\n /**\n * Returns a delta value between 0 and 1 which represents where the\n * [[DaySpan.start]] is relative to the given day. The delta value would\n * be less than 0 if the start of the event is before the given day.\n *\n * @param relativeTo The day to find the start delta relative to.\n * @return A number between 0 and 1 if the start of this span is in the\n * 24-hour period starting at the given timestamp, otherwise the value\n * returned may be less than 0 or greater than 1.\n */\n DaySpan.prototype.startDelta = function (relativeTo) {\n return (this.start.time - relativeTo.time) / Constants.MILLIS_IN_DAY;\n };\n /**\n * Returns a delta value between 0 and 1 which represents where the\n * [[DaySpan.end]] is relative to the given day. The delta value would\n * be greater than 1 if the end of the event is after the given day.\n *\n * @param relativeTo The day to find the end delta relative to.\n * @return A number between 0 and 1 if the end of this span is in the\n * 24-hour period starting at the given timestamp, otherwise the value\n * returned may be less than 0 or greater than 1.\n */\n DaySpan.prototype.endDelta = function (relativeTo) {\n return (this.end.time - relativeTo.time) / Constants.MILLIS_IN_DAY;\n };\n /**\n * Calculates the bounds for span event if it were placed in a rectangle which\n * represents a day (24 hour period). By default the returned values are\n * between 0 and 1 and can be scaled by the proper rectangle dimensions or the\n * rectangle dimensions can be passed to this function.\n *\n * @param relativeTo The day to find the bounds relative to. If this is not the\n * start of the day the returned bounds is relative to the given time.\n * @param dayHeight The height of the rectangle of the day.\n * @param dayWidth The width of the rectangle of the day.\n * @param columnOffset The offset in the rectangle of the day to adjust this\n * span by. This also reduces the width of the returned bounds to keep the\n * bounds in the rectangle of the day.\n * @param clip `true` if the bounds should stay in the day rectangle, `false`\n * and the bounds may go outside the rectangle of the day for multi-day\n * spans.\n * @param offsetX How much to translate the left & right properties by.\n * @param offsetY How much to translate the top & bottom properties by.\n * @returns The calculated bounds for this span.\n */\n DaySpan.prototype.getBounds = function (relativeTo, dayHeight, dayWidth, columnOffset, clip, offsetX, offsetY) {\n if (dayHeight === void 0) { dayHeight = 1; }\n if (dayWidth === void 0) { dayWidth = 1; }\n if (columnOffset === void 0) { columnOffset = 0; }\n if (clip === void 0) { clip = true; }\n if (offsetX === void 0) { offsetX = 0; }\n if (offsetY === void 0) { offsetY = 0; }\n var startRaw = this.startDelta(relativeTo);\n var endRaw = this.endDelta(relativeTo);\n var start = clip ? Math.max(0, startRaw) : startRaw;\n var end = clip ? Math.min(1, endRaw) : endRaw;\n var left = columnOffset;\n var right = dayWidth - left;\n var top = start * dayHeight;\n var bottom = end * dayHeight;\n return {\n top: top + offsetY,\n bottom: bottom + offsetY,\n height: bottom - top,\n left: left + offsetX,\n right: right + offsetX,\n width: right\n };\n };\n /**\n * Summarizes this span given an approximate unit of time and a few other\n * options. If the start and end are on the same unit, a single value will\n * be returned. Otherwise a start and end will be returned with a `delimiter`.\n *\n * @param type The unit of time this span is for.\n * @param dayOfWeek When `true` the weekday of the start and end are included.\n * @param short When `true` the short form of weekdays and months will be used.\n * @param repeat When `true` the year will be repeated on the start and end\n * timestamp even if they are the same year.\n * @param contextual When `true` the year will be hidden if it's the current\n * year.\n * @param delimiter The string to separate the start and end timestamps with.\n * @returns The summary of this span.\n */\n DaySpan.prototype.summary = function (type, dayOfWeek, short, repeat, contextual, delimiter) {\n if (dayOfWeek === void 0) { dayOfWeek = true; }\n if (short === void 0) { short = false; }\n if (repeat === void 0) { repeat = false; }\n if (contextual === void 0) { contextual = true; }\n if (delimiter === void 0) { delimiter = ' - '; }\n var formats = DaySpan.SUMMARY_FORMATS[type];\n var today = Day.today();\n var showStartYear = !contextual || !this.start.sameYear(today);\n var showEndYear = !contextual || !this.end.sameYear(today);\n var start = this.start.format(formats(short, dayOfWeek, showStartYear));\n var end = this.end.format(formats(short, dayOfWeek, showEndYear));\n var summary = start;\n if (start !== end) {\n if (!repeat) {\n summary = this.start.format(formats(short, dayOfWeek, !this.start.sameYear(this.end)));\n }\n summary += delimiter;\n summary += end;\n }\n else {\n summary = start;\n }\n return summary;\n };\n /**\n * Determines whether the gven span intersects with this span.\n *\n * @param span The span to test.\n * @returns `true` if the spans intersect, otherwise `false`.\n */\n DaySpan.prototype.intersects = function (span) {\n return !(this.end.time < span.start.time ||\n this.start.time > span.end.time);\n };\n /**\n * Calculates the intersection between this span and the given span. If there\n * is no intersection between the two spans then `null` is returned.\n *\n * @param span The span to calculate the intersection with.\n * @returns The intersection or `null` if none exists.\n */\n DaySpan.prototype.intersection = function (span) {\n var start = this.start.max(span.start);\n var end = this.end.min(span.end);\n return start.isAfter(end) ? null : new DaySpan(start, end);\n };\n /**\n * Calculates the union between this span and the given span.\n *\n * @param span The span to calculate the union with.\n * @returns The union of the two spans.\n */\n DaySpan.prototype.union = function (span) {\n var start = this.start.min(span.start);\n var end = this.end.max(span.end);\n return new DaySpan(start, end);\n };\n /**\n * Returns a point [[DaySpan]] with the same start and end timestamp.\n *\n * @param day The timestamp which will be the start and end.\n * @returns The new instance.\n * @see [[DaySpan.isPoint]]\n */\n DaySpan.point = function (day) {\n return new DaySpan(day, day);\n };\n /**\n * Formatting functions which assist the [[DaySpan.summary]] function.\n */\n DaySpan.SUMMARY_FORMATS = (_a = {},\n _a[Units.DAY] = function (short, dayOfWeek, year) {\n return (dayOfWeek ? (short ? 'ddd, ' : 'dddd, ') : '') + (short ? 'MMM ' : 'MMMM ') + 'Do' + (year ? ' YYYY' : '');\n },\n _a[Units.WEEK] = function (short, dayOfWeek, year) {\n return (dayOfWeek ? (short ? 'ddd, ' : 'dddd, ') : '') + (short ? 'MMM ' : 'MMMM ') + 'Do' + (year ? ' YYYY' : '');\n },\n _a[Units.MONTH] = function (short, dayOfWeek, year) {\n return (short ? 'MMM' : 'MMMM') + (year ? ' YYYY' : '');\n },\n _a[Units.YEAR] = function (short, dayOfWeek, year) {\n return (year ? 'YYYY' : '');\n },\n _a);\n return DaySpan;\n}());\nexport { DaySpan };\nvar _a;\n//# sourceMappingURL=DaySpan.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/DaySpan.js\n// module id = 919\n// module chunks = 2","\"use strict\";\n/**\n * Units of time that are compromised of 1 or more days for the [[Calendar]] class.\n */\nexport var Units;\n(function (Units) {\n Units[Units[\"DAY\"] = 0] = \"DAY\";\n Units[Units[\"WEEK\"] = 1] = \"WEEK\";\n Units[Units[\"MONTH\"] = 2] = \"MONTH\";\n Units[Units[\"YEAR\"] = 3] = \"YEAR\";\n})(Units = Units || (Units = {}));\n//# sourceMappingURL=Units.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Units.js\n// module id = 920\n// module chunks = 2","\"use strict\";\nimport { Functions as fn } from './Functions';\nimport { Day } from './Day';\nimport { Identifier } from './Identifier';\nimport { DaySpan } from './DaySpan';\nimport { Constants } from './Constants';\nimport { Parse } from './Parse';\nimport { Suffix } from './Suffix';\nimport { ScheduleModifier } from './ScheduleModifier';\nimport { Units } from './Units';\nimport { Iterator, IteratorAction } from './Iterator';\n// @ts-ignore\nimport * as moment from 'moment';\n/**\n * A class which describes when an event occurs over what time and if it repeats.\n *\n * @typeparam M The type of metadata stored in the schedule.\n */\nvar Schedule = (function () {\n /**\n * Creates a schedule based on the given input.\n *\n * @param input The input which describes the schedule of events.\n */\n function Schedule(input) {\n this.exclude = new ScheduleModifier();\n this.include = new ScheduleModifier();\n this.cancel = new ScheduleModifier();\n this.meta = new ScheduleModifier();\n if (fn.isDefined(input)) {\n this.set(input);\n }\n }\n /**\n * Sets the schedule with the given input.\n *\n * @param input The input or schedule which describes the schedule of events.\n * @param parseMeta A function to use when parsing meta input into the desired type.\n * @see [[Parse.schedule]]\n */\n Schedule.prototype.set = function (input, parseMeta) {\n if (parseMeta === void 0) { parseMeta = (function (x) { return x; }); }\n if (input instanceof Schedule) {\n Parse.schedule(input.toInput(), undefined, this);\n }\n else {\n Parse.schedule(input, fn.coalesce(input.parseMeta, parseMeta), this);\n }\n return this;\n };\n Object.defineProperty(Schedule.prototype, \"lastTime\", {\n /**\n * Returns the last event time specified or `undefined` if this schedule is\n * for an all day event.\n */\n get: function () {\n return this.times[this.times.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Schedule.prototype, \"identifierType\", {\n /**\n * The [[Identifier]] for this schedule. Either [[Identifier.Day]] or\n * [[Identifier.Time]].\n */\n get: function () {\n return this.isFullDay() ? Identifier.Day : Identifier.Time;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Updates the [[Schedule.durationInDays]] variable based on the\n * [[Schedule.lastTime]] (if any), the [[Schedule.duration]] and it's\n * [[Schedule.durationUnit]].\n */\n Schedule.prototype.updateDurationInDays = function () {\n var start = this.lastTime ? this.lastTime.toMilliseconds() : 0;\n var duration = this.duration * (Constants.DURATION_TO_MILLIS[this.durationUnit] || 0);\n var exclude = Constants.MILLIS_IN_DAY;\n var day = Constants.MILLIS_IN_DAY;\n this.durationInDays = Math.max(0, Math.ceil((start + duration - exclude) / day));\n return this;\n };\n /**\n * Updates [[Schedule.checks]] based on the frequencies that were specified\n * in the schedule input.\n */\n Schedule.prototype.updateChecks = function () {\n this.checks = Parse.givenFrequency([\n this.year,\n this.month,\n this.week,\n this.weekOfYear,\n this.fullWeekOfYear,\n this.weekspanOfYear,\n this.lastFullWeekOfYear,\n this.lastWeekspanOfYear,\n this.weekOfMonth,\n this.weekspanOfMonth,\n this.fullWeekOfMonth,\n this.lastWeekspanOfMonth,\n this.lastFullWeekOfMonth,\n this.dayOfWeek,\n this.dayOfMonth,\n this.lastDayOfMonth,\n this.dayOfYear\n ]);\n return this;\n };\n /**\n * Determines whether the given day lies between the earliest and latest\n * valid day in the schedule.\n *\n * @param day The day to test.\n * @returns `true` if the day lies in the schedule, otherwise `false`.\n * @see [[Schedule.start]]\n * @see [[Schedule.end]]\n */\n Schedule.prototype.matchesSpan = function (day) {\n return (this.start === null || day.isSameOrAfter(this.start)) &&\n (this.end === null || day.isBefore(this.end));\n };\n /**\n * Determines whether the given range overlaps with the earliest and latest\n * valid days in this schedule (if any).\n *\n * @param start The first day in the range.\n * @param end The last day in the range.\n * @returns `true` if the range intersects with the schedule, otherwise `false`.\n * @see [[Schedule.start]]\n * @see [[Schedule.end]]\n */\n Schedule.prototype.matchesRange = function (start, end) {\n if (this.start && end.isBefore(this.start)) {\n return false;\n }\n if (this.end && start.isAfter(this.end)) {\n return false;\n }\n return true;\n };\n /**\n * Determines whether the given day is explicitly excluded in the schedule.\n *\n * @param day The day to test.\n * @param lookAtTime lookAtTime If the specific time of the given day should\n * be looked at.\n * @returns `true` if the day was excluded, otherwise `false`.\n */\n Schedule.prototype.isExcluded = function (day, lookAtTime) {\n if (lookAtTime === void 0) { lookAtTime = true; }\n return this.exclude.get(day, false, lookAtTime);\n };\n /**\n * Determines whether the given day is explicitly included in the schedule.\n *\n * @param day The day to test.\n * @param lookAtTime lookAtTime If the specific time of the given day should\n * be looked at.\n * @returns `true` if the day is NOT explicitly included, otherwise `false`.\n */\n Schedule.prototype.isIncluded = function (day, lookAtTime) {\n if (lookAtTime === void 0) { lookAtTime = true; }\n return this.include.get(day, false, lookAtTime);\n };\n /**\n * Determines whether the given day is cancelled in the schedule.\n *\n * @param day The day to test.\n * @param lookAtTime lookAtTime If the specific time of the given day should\n * be looked at.\n * @returns `true` if the day was cancelled, otherwise `false`.\n */\n Schedule.prototype.isCancelled = function (day, lookAtTime) {\n if (lookAtTime === void 0) { lookAtTime = true; }\n return this.cancel.get(day, false, lookAtTime);\n };\n /**\n * Returns the metadata for the given day or `null` if there is none.\n *\n * @param day The day to return the metadata for.\n * @param otherwise The data to return if none exists for the given day.\n * @param lookAtTime lookAtTime If the specific time of the given day should\n * be looked at.\n * @returns The metadata or `null`.\n */\n Schedule.prototype.getMeta = function (day, otherwise, lookAtTime) {\n if (otherwise === void 0) { otherwise = null; }\n if (lookAtTime === void 0) { lookAtTime = true; }\n return this.meta.get(day, otherwise, lookAtTime);\n };\n /**\n * Returns all metadata for the given day or an empty array if there is none.\n *\n * @param day The day to return the metadata for.\n * @returns The array of metadata ordered by priority or an empty array.\n */\n Schedule.prototype.getMetas = function (day) {\n return this.meta.getAll(day);\n };\n /**\n * Returns whether the events in the schedule are all day long or start at\n * specific times. Full day events start at the start of the day and end at\n * the start of the next day (if the duration = `1` and durationUnit = 'days').\n * Full day events have no times specified and should have a durationUnit of\n * either `days` or `weeks`.\n */\n Schedule.prototype.isFullDay = function () {\n return this.times.length === 0;\n };\n /**\n * Sets whether this schedule is a full day event if it is not already. If\n * this schedule is a full day event and `false` is passed to this function\n * a single timed event will be added based on `defaultTime`. If this schedule\n * has timed events and `true` is passed to make the schedule full day, the\n * timed events are removed from this schedule. If the durationUnit is not the\n * expected unit based on the new full day flag - the duration is reset to 1\n * and the duration unit is set to the expected unit.\n *\n * @param fullDay Whether this schedule should represent a full day event or\n * timed events.\n * @param defaultTime If `fullDay` is `false` and this schedule is currently\n * a full day event - this time will be used as the time of the first event.\n */\n Schedule.prototype.setFullDay = function (fullDay, defaultTime) {\n if (fullDay === void 0) { fullDay = true; }\n if (defaultTime === void 0) { defaultTime = '08:00'; }\n if (fullDay !== this.isFullDay()) {\n if (fullDay) {\n this.times = [];\n if (this.durationUnit !== 'days' && this.durationUnit !== 'day') {\n this.duration = 1;\n this.durationUnit = 'days';\n }\n }\n else {\n this.times = [Parse.time(defaultTime)];\n if (this.durationUnit !== 'hours' && this.durationUnit !== 'hour') {\n this.duration = 1;\n this.durationUnit = 'hours';\n }\n }\n }\n return this;\n };\n /**\n * Adjusts the [[Schedule.start]] and [[Schedule.end]] dates specified on this\n * schedule if this schedule represents a single event and the `start` and\n * `end` are already set or `addSpan` is `true`.\n *\n * @param addSpan If `true`, the `start` and `end` dates will always be\n * adjusted if this schedule is a single event.\n */\n Schedule.prototype.adjustDefinedSpan = function (addSpan) {\n if (addSpan === void 0) { addSpan = false; }\n var single = this.getSingleEventSpan();\n if (single && (addSpan || (this.start && this.end))) {\n this.start = single.start.start();\n this.end = single.end.end();\n }\n return this;\n };\n /**\n * Returns a span of time for a schedule with full day events starting on the\n * start of the given day with the desired duration in days or weeks.\n *\n * @param day The day the span starts on.\n * @returns The span of time starting on the given day.\n */\n Schedule.prototype.getFullSpan = function (day) {\n var start = day.start();\n var end = start.add(this.duration, this.durationUnit);\n return new DaySpan(start, end);\n };\n /**\n * Returns a span of time starting on the given day at the given day with the\n * duration specified on this schedule.\n *\n * @param day The day the span starts on.\n * @param time The time of day the span starts.\n * @returns The span of time calculated.\n */\n Schedule.prototype.getTimeSpan = function (day, time) {\n var start = day.withTime(time);\n var end = start.add(this.duration, this.durationUnit);\n return new DaySpan(start, end);\n };\n /**\n * Determines whether the given day is a day on the schedule for the start\n * of an event. If an event is more than one day and the day given is not the\n * start this may return `false`. This does not test for event instances\n * that exist through [[Schedule.include]].\n *\n * @param day The day to test.\n * @returns `true` if the day marks the start of an event on the schedule.\n * @see [[Schedule.isIncluded]]\n * @see [[Schedule.isFullyExcluded]]\n * @see [[Schedule.matchesSpan]]\n */\n Schedule.prototype.matchesDay = function (day) {\n if (this.isIncluded(day, false)) {\n return true;\n }\n if (!this.matchesSpan(day) || this.isFullyExcluded(day)) {\n return false;\n }\n for (var _i = 0, _a = this.checks; _i < _a.length; _i++) {\n var check = _a[_i];\n if (!check(day[check.property])) {\n return false;\n }\n }\n return true;\n };\n /**\n * Determines whether the given day has events added through\n * [[Schedule.include]].\n *\n * @param day The day to look for included times on.\n * @returns `true` if there are included event instances on the given day,\n * otherwise `false`.\n */\n Schedule.prototype.hasIncludedTime = function (day) {\n return !this.iterateIncludeTimes(day).isEmpty();\n };\n /**\n * Determines whether the given day is fully excluded from the schedule. A\n * fully excluded day is one that has a day-wide exclusion, or the schedule\n * is not an all-day event and all times in the schedule are specifically\n * excluded.\n *\n * @param day The day to test.*\n * @returns `true` if he day is fully excluded, otherwise `false`.\n */\n Schedule.prototype.isFullyExcluded = function (day) {\n if (this.isExcluded(day, false)) {\n return true;\n }\n if (this.isFullDay()) {\n return false;\n }\n for (var _i = 0, _a = this.times; _i < _a.length; _i++) {\n var time = _a[_i];\n if (!this.isExcluded(day.withTime(time))) {\n return false;\n }\n }\n return true;\n };\n /**\n * Finds the next day an event occurs on the schedule given a day to start,\n * optionally including it, and a maximum number of days to look ahead.\n *\n * @param day The day to start to search from.\n * @param includeDay If the given day should be included in the search.\n * @param lookAhead The maximum number of days to look ahead from the given\n * day for event occurrences.\n * @returns The next day on the schedule or `null` if none exists.\n */\n Schedule.prototype.nextDay = function (day, includeDay, lookAhead) {\n if (includeDay === void 0) { includeDay = false; }\n if (lookAhead === void 0) { lookAhead = 366; }\n return this.iterateDaycast(day, 1, true, includeDay, lookAhead).first();\n };\n /**\n * Finds the next specified number of days that events occur on the schedule\n * given a day to start, optionally including it, and a maximum number of days\n * to look ahead.\n *\n * @param day The day to start to search from.\n * @param max The maximum number of days to return in the result.\n * @param includeDay If the given day should be included in the search.\n * @param lookAhead The maximum number of days to look ahead from the given\n * day for event occurrences.\n * @returns An array containing the next days on the schedule that events\n * start or an empty array if there are none.\n */\n Schedule.prototype.nextDays = function (day, max, includeDay, lookAhead) {\n if (includeDay === void 0) { includeDay = false; }\n if (lookAhead === void 0) { lookAhead = 366; }\n return this.iterateDaycast(day, max, true, includeDay, lookAhead);\n };\n /**\n * Finds the previous day an event occurs on the schedule given a day to start,\n * optionally including it, and a maximum number of days to look behind.\n *\n * @param day The day to start to search from.\n * @param includeDay If the given day should be included in the search.\n * @param lookBack The maximum number of days to look behind from the given\n * day for event occurrences.\n * @returns The previous day on the schedule or `null` if none exists.\n */\n Schedule.prototype.prevDay = function (day, includeDay, lookBack) {\n if (includeDay === void 0) { includeDay = false; }\n if (lookBack === void 0) { lookBack = 366; }\n return this.iterateDaycast(day, 1, false, includeDay, lookBack).first();\n };\n /**\n * Finds the previous specified number of days that events occur on the\n * schedule given a day to start, optionally including it, and a maximum\n * number of days to look behind.\n *\n * @param day The day to start to search from.\n * @param max The maximum number of days to return in the result.\n * @param includeDay If the given day should be included in the search.\n * @param lookAhead The maximum number of days to look behind from the given\n * day for event occurrences.\n * @returns An array containing the previous days on the schedule that events\n * start or an empty array if there are none.\n */\n Schedule.prototype.prevDays = function (day, max, includeDay, lookBack) {\n if (includeDay === void 0) { includeDay = false; }\n if (lookBack === void 0) { lookBack = 366; }\n return this.iterateDaycast(day, max, false, includeDay, lookBack);\n };\n /**\n * Iterates over days that events start in the schedule given a day to start,\n * a maximum number of days to find, and a direction to look.\n *\n * @param day The day to start to search from.\n * @param max The maximum number of days to iterate.\n * @param next If `true` this searches forward, otherwise `false` is backwards.\n * @param includeDay If the given day should be included in the search.\n * @param lookup The maximum number of days to look through from the given\n * day for event occurrences.\n * @returns A new Iterator for the days found in the cast.\n * @see [[Schedule.iterateSpans]]\n */\n Schedule.prototype.iterateDaycast = function (day, max, next, includeDay, lookup) {\n var _this = this;\n if (includeDay === void 0) { includeDay = false; }\n if (lookup === void 0) { lookup = 366; }\n return new Iterator(function (iterator) {\n var iterated = 0;\n for (var days = 0; days < lookup; days++) {\n if (!includeDay || days > 0) {\n day = next ? day.next() : day.prev();\n }\n if (!_this.iterateSpans(day, false).isEmpty()) {\n var action = iterator.act(day);\n if (action === IteratorAction.Stop || ++iterated >= max) {\n return;\n }\n }\n }\n });\n };\n /**\n * Iterates through the spans (event instances) that start on or covers the\n * given day.\n *\n * @param day The day to look for spans on.\n * @param covers If `true` spans which span multiple days will be looked at\n * to see if they intersect with the given day, otherwise `false` will\n * only look at the given day for the start of events.\n * @returns A new Iterator for all the spans found.\n */\n Schedule.prototype.iterateSpans = function (day, covers) {\n var _this = this;\n if (covers === void 0) { covers = false; }\n return new Iterator(function (iterator) {\n var current = day;\n var lookBehind = covers ? _this.durationInDays : 0;\n // If the events start at the end of the day and may last multiple days....\n if (_this.isFullDay()) {\n // If the schedule has events which span multiple days we need to look\n // backwards for events that overlap with the given day.\n while (lookBehind >= 0) {\n // If the current day matches the schedule rules...\n if (_this.matchesDay(current)) {\n // Build a DaySpan with the given start day and the schedules duration.\n var span = _this.getFullSpan(current);\n // If that dayspan intersects with the given day, it's a winner!\n if (span.matchesDay(day)) {\n switch (iterator.act(span)) {\n case IteratorAction.Stop:\n return;\n }\n }\n }\n current = current.prev();\n lookBehind--;\n }\n }\n else {\n // If the schedule has events which span multiple days we need to look\n // backwards for events that overlap with the given day.\n while (lookBehind >= 0) {\n // If the current day matches the schedule rules...\n if (_this.matchesDay(current)) {\n // Iterate through each daily occurrence in the schedule...\n for (var _i = 0, _a = _this.times; _i < _a.length; _i++) {\n var time = _a[_i];\n var span = _this.getTimeSpan(current, time);\n // If the event intersects with the given day and the occurrence\n // has not specifically been excluded...\n if (span.matchesDay(day) && !_this.isExcluded(span.start, true)) {\n switch (iterator.act(span)) {\n case IteratorAction.Stop:\n return;\n }\n }\n }\n }\n else {\n // The current day does not match the schedule, however the schedule\n // might have moved/random event occurrents on the current day.\n // We only want the ones that overlap with the given day.\n _this.iterateIncludeTimes(current, day).iterate(function (span, timeIterator) {\n switch (iterator.act(span)) {\n case IteratorAction.Stop:\n timeIterator.stop();\n break;\n }\n });\n if (iterator.action === IteratorAction.Stop) {\n return;\n }\n }\n current = current.prev();\n lookBehind--;\n }\n }\n });\n };\n /**\n * Determines if the given day is on the schedule and the time specified on\n * the day matches one of the times on the schedule.\n *\n * @param day The day to test.\n * @returns `true` if the day and time match the schedule, otherwise false.\n */\n Schedule.prototype.matchesTime = function (day) {\n return !!this.iterateSpans(day, true).first(function (span) { return span.start.sameMinute(day); });\n };\n /**\n * Determines if the given day is covered by this schedule. A schedule can\n * specify events that span multiple days - so even though the day does not\n * match the starting day of a span - it can be a day that is within the\n * schedule.\n *\n * @param day The day to test.\n * @returns `true` if the day is covered by an event on this schedule,\n * otherwise `false`.\n */\n Schedule.prototype.coversDay = function (day) {\n return !this.iterateSpans(day, true).isEmpty();\n };\n /**\n * Determines if the given timestamp lies in an event occurrence on this\n * schedule.\n *\n * @param day The timestamp to test against the schedule.\n * @return `true` if the timestamp lies in an event occurrent start and end\n * timestamps, otherwise `false`.\n */\n Schedule.prototype.coversTime = function (day) {\n return !!this.iterateSpans(day, true).first(function (span) { return span.contains(day); });\n };\n /**\n * Sets the frequency for the given property. This does not update the\n * [[Schedule.checks]] array, the [[Schedule.updateChecks]] function needs\n * to be called.\n *\n * @param property The frequency to update.\n * @param frequency The new frequency.\n */\n Schedule.prototype.setFrequency = function (property, frequency) {\n this[property] = Parse.frequency(frequency, property);\n return this;\n };\n /**\n * Changes the exclusion status of the event at the given time. By default\n * this excludes this event - but `false` may be passed to undo an exclusion.\n *\n * @param time The start time of the event occurrence to exclude or include.\n * @param excluded Whether the event should be excluded.\n */\n Schedule.prototype.setExcluded = function (time, excluded) {\n if (excluded === void 0) { excluded = true; }\n var type = this.identifierType;\n this.exclude.set(time, excluded, type);\n this.include.set(time, !excluded, type);\n return this;\n };\n /**\n * Changes the cancellation status of the event at the given start time. By\n * default this cancels the event occurrence - but `false` may be passed to\n * undo a cancellation.\n *\n * @param time The start time of the event occurrence to cancel or uncancel.\n * @param cancelled Whether the event should be cancelled.\n */\n Schedule.prototype.setCancelled = function (time, cancelled) {\n if (cancelled === void 0) { cancelled = true; }\n this.cancel.set(time, cancelled, this.identifierType);\n return this;\n };\n /**\n * Removes the time from this schedule and all related included, excluded,\n * cancelled instances as well as metadata.\n *\n * @param time The time to remove from the schedule.\n * @param removeInclude If any included instances should be removed as well.\n * @returns `true` if the time was removed, otherwise `false`.\n */\n Schedule.prototype.removeTime = function (time, removeInclude) {\n if (removeInclude === void 0) { removeInclude = true; }\n var found = false;\n for (var i = 0; i < this.times.length && !found; i++) {\n if (found = time.matches(this.times[i])) {\n this.times.splice(i, 1);\n }\n }\n if (found) {\n if (removeInclude) {\n this.include.removeTime(time);\n }\n this.exclude.removeTime(time);\n this.cancel.removeTime(time);\n this.meta.removeTime(time);\n }\n return found;\n };\n /**\n * Moves the event instance starting at `fromTime` to `toTime` optionally\n * placing `meta` in the schedules metadata for the new time `toTime`.\n * If this schedule has a single event ([[Schedule.isSingleEvent]]) then the\n * only value needed is `toTime` and not `fromTime`.\n *\n * @param toTime The timestamp of the new event.\n * @param fromTime The timestamp of the event on the schedule to move if this\n * schedule generates multiple events.\n * @returns `true` if the schedule had the event moved, otherwise `false`.\n */\n Schedule.prototype.move = function (toTime, fromTime, meta) {\n if (!this.moveSingleEvent(toTime) && fromTime) {\n return this.moveInstance(fromTime, toTime);\n }\n return false;\n };\n /**\n * Moves a time specified in this schedule to the given time, adjusting\n * any cancelled event instances, metadata, and any excluded and included\n * event instances.\n *\n * @param fromTime The time to move.\n * @param toTime The new time in the schedule.\n * @returns `true` if time was moved, otherwise `false`.\n */\n Schedule.prototype.moveTime = function (fromTime, toTime) {\n var found = false;\n for (var i = 0; i < this.times.length && !found; i++) {\n if (found = fromTime.matches(this.times[i])) {\n this.times.splice(i, 1, toTime);\n }\n }\n if (found) {\n this.include.moveTime(fromTime, toTime);\n this.exclude.moveTime(fromTime, toTime);\n this.cancel.moveTime(fromTime, toTime);\n this.meta.moveTime(fromTime, toTime);\n this.adjustDefinedSpan(false);\n }\n return found;\n };\n /**\n * Moves the event instance starting at `fromTime` to `toTime` optionally\n * placing `meta` in the schedules metadata for the new time `toTime`. A move\n * is accomplished by excluding the current event and adding an inclusion of\n * the new day & time.\n *\n * @param fromTime The timestamp of the event on the schedule to move.\n * @param toTime The timestamp of the new event.\n * @returns `true`.\n * @see [[Schedule.move]]\n */\n Schedule.prototype.moveInstance = function (fromTime, toTime) {\n var type = this.identifierType;\n this.exclude.set(fromTime, true, type);\n this.exclude.set(toTime, false, type);\n this.include.set(toTime, true, type);\n this.include.set(fromTime, false, type);\n if (this.cancel.get(fromTime, false) && !this.cancel.get(toTime, false)) {\n this.cancel.set(toTime, true, type);\n if (this.cancel.getIdentifier(fromTime) === type) {\n this.cancel.unset(fromTime, type);\n }\n }\n var meta = this.meta.get(fromTime, null);\n if (meta && meta !== this.meta.get(toTime, null)) {\n this.meta.set(toTime, meta, type);\n if (this.meta.getIdentifier(fromTime) === type) {\n this.meta.unset(fromTime, type);\n }\n }\n return true;\n };\n /**\n * Moves the single event in this schedule to the given day/time if applicable.\n * If this schedule is not a single event schedule then `false` is returned.\n * If this schedule is a timed event the time will take the time of the given\n * `toTime` of `takeTime` is `true`.\n *\n * @param toTime The time to move the single event to.\n * @param takeTime If this schedule has a single timed event, should the time\n * of the event be changed to the time of the given `toTime`?\n * @returns `true` if the schedule was adjusted, otherwise `false`.\n * @see [[Schedule.move]]\n */\n Schedule.prototype.moveSingleEvent = function (toTime, takeTime) {\n if (takeTime === void 0) { takeTime = true; }\n if (!this.isSingleEvent()) {\n return false;\n }\n for (var _i = 0, _a = this.checks; _i < _a.length; _i++) {\n var check = _a[_i];\n var prop = check.property;\n var value = toTime[prop];\n var frequency = Parse.frequency([value], prop);\n this[prop] = frequency;\n }\n if (this.times.length === 1 && takeTime) {\n this.times = [toTime.asTime()];\n }\n this.updateChecks();\n var span = this.getSingleEventSpan();\n if (this.start) {\n this.start = span.start.start();\n }\n if (this.end) {\n this.end = span.end.end();\n }\n return true;\n };\n /**\n * Returns the span of the single event in this schedule if it's that type of\n * schedule, otherwise `null` is returned.\n *\n * @returns A span of the single event, otherwise `null`.\n * @see [[Schedule.isSingleEvent]]\n */\n Schedule.prototype.getSingleEventSpan = function () {\n if (!this.isSingleEvent()) {\n return null;\n }\n var startOfYear = Day.build(this.year.input[0], 0, 1);\n var start = this.iterateDaycast(startOfYear, 1, true, true, 366).first();\n if (!start) {\n return null;\n }\n return this.isFullDay() ?\n this.getFullSpan(start) :\n this.getTimeSpan(start, this.times[0]);\n };\n /**\n * Determines whether this schedule produces a single event, and no more.\n * If this schedule has any includes, it's assumed to be a multiple event\n * schedule. A single event can be detected in the following scenarios where\n * each frequency has a single occurrence (see [[Schedule.isSingleFrequency]]).\n *\n * - year, day of year\n * - year, month, day of month\n * - year, month, week of month, day of week\n * - year, week of year, day of week\n *\n * @returns `true` if this schedule produces a single event, otherwise `false`.\n */\n Schedule.prototype.isSingleEvent = function () {\n // 0 = full day, 1 = once a day, 1+ = multiple events a day\n if (this.times.length > 1) {\n return false;\n }\n // Let's assume if there are includes, this is not a single event.\n if (!this.include.isEmpty()) {\n return false;\n }\n // If this can occur on multiple years, not a single event.\n if (!this.isSingleYear()) {\n return false;\n }\n // If this is a specific year and day of the year: single!\n if (this.isSingleDayOfYear()) {\n return true;\n }\n // If this is a specific year, month, and day of month: single!\n if (this.isSingleMonth() && this.isSingleDayOfMonth()) {\n return true;\n }\n // If this is a specific year, month, week of the month, day of the week: single!\n if (this.isSingleMonth() && this.isSingleWeekOfMonth() && this.isSingleDayOfWeek()) {\n return true;\n }\n // If this is a specific year, week of the year, day of the week: single!\n if (this.isSingleWeekOfYear() && this.isSingleDayOfWeek()) {\n return true;\n }\n // Doesn't look like a single event.\n return false;\n };\n /**\n * @returns `true` if this schedule produces events only in a specific year.\n * @see [[Schedule.year]]\n */\n Schedule.prototype.isSingleYear = function () {\n return this.isSingleFrequency(this.year);\n };\n /**\n * @returns `true` if this schedule produces events only in a specific month.\n * @see [[Schedule.month]]\n */\n Schedule.prototype.isSingleMonth = function () {\n return this.isSingleFrequency(this.month);\n };\n /**\n * @returns `true` if this schedule produces events only in a specific day of\n * the month.\n * @see [[Schedule.dayOfMonth]]\n * @see [[Schedule.lastDayOfMonth]]\n */\n Schedule.prototype.isSingleDayOfMonth = function () {\n return this.isSingleFrequency(this.dayOfMonth) ||\n this.isSingleFrequency(this.lastDayOfMonth);\n };\n /**\n * @returns `true` if this schedule produces events only in a specific day of\n * the week.\n * @see [[Schedule.dayOfWeek]]\n */\n Schedule.prototype.isSingleDayOfWeek = function () {\n return this.isSingleFrequency(this.dayOfWeek);\n };\n /**\n * @returns `true` if this schedule produces events only in a specific day of\n * the year.\n * @see [[Schedule.dayOfYear]]\n */\n Schedule.prototype.isSingleDayOfYear = function () {\n return this.isSingleFrequency(this.dayOfYear);\n };\n /**\n * @returns `true` if this schedule produces events only in a specific week of\n * the month.\n * @see [[Schedule.weekspanOfMonth]]\n * @see [[Schedule.fullWeekOfMonth]]\n * @see [[Schedule.weekOfMonth]]\n * @see [[Schedule.lastFullWeekOfMonth]]\n * @see [[Schedule.lastWeekspanOfMonth]]\n */\n Schedule.prototype.isSingleWeekOfMonth = function () {\n return this.isSingleFrequency(this.weekspanOfMonth) ||\n this.isSingleFrequency(this.fullWeekOfMonth) ||\n this.isSingleFrequency(this.weekOfMonth) ||\n this.isSingleFrequency(this.lastFullWeekOfMonth) ||\n this.isSingleFrequency(this.lastWeekspanOfMonth);\n };\n /**\n * @returns `true` if this schedule produces events only in a specific week of\n * the year.\n * @see [[Schedule.weekspanOfYear]]\n * @see [[Schedule.fullWeekOfYear]]\n * @see [[Schedule.week]]\n * @see [[Schedule.weekOfYear]]\n * @see [[Schedule.lastFullWeekOfYear]]\n * @see [[Schedule.lastWeekspanOfYear]]\n */\n Schedule.prototype.isSingleWeekOfYear = function () {\n return this.isSingleFrequency(this.weekspanOfYear) ||\n this.isSingleFrequency(this.fullWeekOfYear) ||\n this.isSingleFrequency(this.week) ||\n this.isSingleFrequency(this.weekOfYear) ||\n this.isSingleFrequency(this.lastFullWeekOfYear) ||\n this.isSingleFrequency(this.lastWeekspanOfYear);\n };\n /**\n * Determines if the given [[FrequencyCheck]] results in a single occurrence.\n *\n * @returns `true` if the frequency results in a single event, otherwise `false`.\n */\n Schedule.prototype.isSingleFrequency = function (frequency) {\n return fn.isArray(frequency.input) && frequency.input.length === 1;\n };\n /**\n * Creates a forecast for this schedule which returns a number of event\n * occurrences around a given day. A single item could be returned per day, or\n * you could get an item for each timed event occurrence.\n *\n * @param around The day to find a forecast around.\n * @param covers If `true` spans which span multiple days will be looked at\n * to see if they intersect with the given day, otherwise `false` will\n * only look at the given day for the start of events.\n * @param daysAfter The number of events to return before the given day.\n * @param daysBefore The number of events to return after the given day.\n * @param times If timed events should be returned, or only one for each day.\n * @param lookAround How many days to look before and after the given day for\n * event occurrences.\n * @returns A new iterator which provides the event occurence span, the day it\n * starts (or is covered if `covers` is `true`), and the identifier for the\n * event.\n */\n Schedule.prototype.forecast = function (around, covers, daysAfter, daysBefore, times, lookAround) {\n var _this = this;\n if (covers === void 0) { covers = true; }\n if (daysBefore === void 0) { daysBefore = daysAfter; }\n if (times === void 0) { times = false; }\n if (lookAround === void 0) { lookAround = 366; }\n var type = this.identifierType;\n var tuplesForDay = function (day, tuples) {\n var spans = _this.iterateSpans(day, covers).list();\n var last = times ? spans.length : Math.min(1, spans.length);\n var offset = times ? 0 : spans.length - 1;\n for (var i = 0; i < last; i++) {\n var span = spans[i + offset];\n var id = type.get(span.start);\n if (tuples.act([span, day, id]) === IteratorAction.Stop) {\n return false;\n }\n }\n return true;\n };\n var prev = new Iterator(function (iterator) {\n var curr = around;\n for (var i = 0; i < lookAround; i++) {\n if (!tuplesForDay(curr, iterator)) {\n break;\n }\n curr = curr.prev();\n }\n });\n var next = new Iterator(function (iterator) {\n var curr = around;\n for (var i = 0; i < lookAround; i++) {\n curr = curr.next();\n if (!tuplesForDay(curr, iterator)) {\n break;\n }\n }\n });\n return prev.take(daysBefore + 1).reverse().append(next.take(daysAfter));\n };\n /**\n * Iterates timed events that were explicitly specified on the given day.\n * Those events could span multiple days so may be tested against another day.\n *\n * @param day The day to look for included timed events.\n * @param matchAgainst The day to test against the timed event.\n * @returns A new Iterator for all the included spans found.\n */\n Schedule.prototype.iterateIncludeTimes = function (day, matchAgainst) {\n var _this = this;\n if (matchAgainst === void 0) { matchAgainst = day; }\n var isIncludedTime = function (result) {\n var id = result[0], included = result[1];\n return included && Identifier.Time.is(id);\n };\n var getSpan = function (result) {\n var id = result[0];\n var time = Identifier.Time.start(id);\n var span = _this.getTimeSpan(time, time.asTime());\n if (span.matchesDay(matchAgainst)) {\n return span;\n }\n };\n return this.include.query(day.dayIdentifier).map(getSpan, isIncludedTime);\n };\n /**\n * Clones this schedule.\n *\n * @returns A new schedule which matches this schedule.\n */\n Schedule.prototype.clone = function () {\n return new Schedule(this.toInput());\n };\n /**\n * Converts the schedule instance back into input.\n *\n * @param returnDays When `true` the start, end, and array of exclusions will\n * have [[Day]] instances, otherwise the UTC timestamp and dayIdentifiers\n * will be used when `false`.\n * @param returnTimes When `true` the times returned in the input will be\n * instances of [[Time]] otherwise the `timeFormat` is used to convert the\n * times to strings.\n * @param timeFormat The time format to use when returning the times as strings.\n * @param alwaysDuration If the duration values (`duration` and\n * `durationUnit`) should always be returned in the input.\n * @returns The input that describes this schedule.\n * @see [[Time.format]]\n */\n Schedule.prototype.toInput = function (returnDays, returnTimes, timeFormat, alwaysDuration) {\n if (returnDays === void 0) { returnDays = false; }\n if (returnTimes === void 0) { returnTimes = false; }\n if (timeFormat === void 0) { timeFormat = ''; }\n if (alwaysDuration === void 0) { alwaysDuration = false; }\n var defaultUnit = Constants.DURATION_DEFAULT_UNIT(this.isFullDay());\n var exclusions = this.exclude.identifiers(function (v) { return v; }).list();\n var inclusions = this.include.identifiers(function (v) { return v; }).list();\n var cancels = this.cancel.identifiers(function (v) { return v; }).list();\n var hasMeta = !this.meta.isEmpty();\n var out = {};\n var times = [];\n for (var _i = 0, _a = this.times; _i < _a.length; _i++) {\n var time = _a[_i];\n times.push(returnTimes ? time : (timeFormat ? time.format(timeFormat) : time.toString()));\n }\n if (this.start)\n out.start = returnDays ? this.start : this.start.time;\n if (this.end)\n out.end = returnDays ? this.end : this.end.time;\n if (times.length)\n out.times = times;\n if (alwaysDuration || this.duration !== Constants.DURATION_DEFAULT)\n out.duration = this.duration;\n if (alwaysDuration || this.durationUnit !== defaultUnit)\n out.durationUnit = this.durationUnit;\n if (exclusions.length)\n out.exclude = exclusions;\n if (inclusions.length)\n out.include = inclusions;\n if (cancels.length)\n out.cancel = cancels;\n if (hasMeta)\n out.meta = fn.extend({}, this.meta.map);\n if (this.dayOfWeek.input)\n out.dayOfWeek = this.dayOfWeek.input;\n if (this.dayOfMonth.input)\n out.dayOfMonth = this.dayOfMonth.input;\n if (this.lastDayOfMonth.input)\n out.lastDayOfMonth = this.lastDayOfMonth.input;\n if (this.dayOfYear.input)\n out.dayOfYear = this.dayOfYear.input;\n if (this.year.input)\n out.year = this.year.input;\n if (this.month.input)\n out.month = this.month.input;\n if (this.week.input)\n out.week = this.week.input;\n if (this.weekOfYear.input)\n out.weekOfYear = this.weekOfYear.input;\n if (this.weekspanOfYear.input)\n out.weekspanOfYear = this.weekspanOfYear.input;\n if (this.fullWeekOfYear.input)\n out.fullWeekOfYear = this.fullWeekOfYear.input;\n if (this.lastWeekspanOfYear.input)\n out.lastWeekspanOfYear = this.lastWeekspanOfYear.input;\n if (this.lastFullWeekOfYear.input)\n out.lastFullWeekOfYear = this.lastFullWeekOfYear.input;\n if (this.weekOfMonth.input)\n out.weekOfMonth = this.weekOfMonth.input;\n if (this.weekspanOfMonth.input)\n out.weekspanOfMonth = this.weekspanOfMonth.input;\n if (this.fullWeekOfMonth.input)\n out.fullWeekOfMonth = this.fullWeekOfMonth.input;\n if (this.lastWeekspanOfMonth.input)\n out.lastWeekspanOfMonth = this.lastWeekspanOfMonth.input;\n if (this.lastFullWeekOfMonth.input)\n out.lastFullWeekOfMonth = this.lastFullWeekOfMonth.input;\n return out;\n };\n /**\n * Describes the schedule in a human friendly string taking into account all\n * possible values specified in this schedule.\n *\n * @param thing A brief description of the things (events) on the schedule.\n * @param includeRange When `true` the [[Schedule.start]] and [[Schedule.end]]\n * are possibly included in the description if they have values.\n * @param includeTimes When `true` the [[Schedule.times]] are possibly included\n * in the description.\n * @param includeDuration When `true` the [[Schedule.duration]] and\n * [[Schedule.durationUnit]] are added to the description if\n * [[Schedule.duration]] is not equal to `1`.\n * @param includeExcludes When `true` the [[Schedule.exclude]] are added\n * to the description if there are any.\n * @param includeIncludes When `true` the [[Schedule.include]] are added\n * to the description if there are any.\n * @param includeCancels When `true` the [[Schedule.cancel]] are added\n * to the description if there are any.\n * @returns The descroption of the schedule.\n */\n Schedule.prototype.describe = function (thing, includeRange, includeTimes, includeDuration, includeExcludes, includeIncludes, includeCancels) {\n if (thing === void 0) { thing = 'event'; }\n if (includeRange === void 0) { includeRange = true; }\n if (includeTimes === void 0) { includeTimes = true; }\n if (includeDuration === void 0) { includeDuration = false; }\n if (includeExcludes === void 0) { includeExcludes = false; }\n if (includeIncludes === void 0) { includeIncludes = false; }\n if (includeCancels === void 0) { includeCancels = false; }\n var out = '';\n if (includeRange) {\n if (this.start) {\n out += 'Starting on ' + this.start.format('dddd Do, YYYY');\n if (this.end) {\n out += ' and ending on ' + this.end.format('dddd Do, YYYY');\n }\n }\n else if (this.end) {\n out += 'Up until ' + this.end.format('dddd Do, YYYY');\n }\n }\n if (out) {\n out += ' the ' + thing + ' will occur';\n }\n else {\n out += 'The ' + thing + ' will occur';\n }\n out += this.describeRule(this.dayOfWeek.input, 'day of the week', function (x) { return moment.weekdays()[x]; }, 1, false);\n out += this.describeRule(this.lastDayOfMonth.input, 'last day of the month', function (x) { return Suffix.CACHE[x]; });\n out += this.describeRule(this.dayOfMonth.input, 'day of the month', function (x) { return Suffix.CACHE[x]; });\n out += this.describeRule(this.dayOfYear.input, 'day of the year', function (x) { return Suffix.CACHE[x]; }, 1);\n out += this.describeRule(this.year.input, 'year', function (x) { return x; }, 0, false, ' in ');\n out += this.describeRule(this.month.input, 'month', function (x) { return moment.months()[x]; }, 0, false, ' in ');\n out += this.describeRule(this.weekOfYear.input, 'week of the year', function (x) { return Suffix.CACHE[x]; });\n out += this.describeRule(this.weekspanOfYear.input, 'weekspan of the year', function (x) { return Suffix.CACHE[x + 1]; }, 1);\n out += this.describeRule(this.fullWeekOfYear.input, 'full week of the year', function (x) { return Suffix.CACHE[x]; });\n out += this.describeRule(this.lastWeekspanOfYear.input, 'last weekspan of the year', function (x) { return Suffix.CACHE[x + 1]; }, 1);\n out += this.describeRule(this.lastFullWeekOfYear.input, 'last full week of the year', function (x) { return Suffix.CACHE[x]; });\n out += this.describeRule(this.weekOfMonth.input, 'week of the month', function (x) { return Suffix.CACHE[x]; });\n out += this.describeRule(this.fullWeekOfMonth.input, 'full week of the month', function (x) { return Suffix.CACHE[x]; });\n out += this.describeRule(this.weekspanOfMonth.input, 'weekspan of the month', function (x) { return Suffix.CACHE[x + 1]; }, 1);\n out += this.describeRule(this.lastFullWeekOfMonth.input, 'last full week of the month', function (x) { return Suffix.CACHE[x]; });\n out += this.describeRule(this.lastWeekspanOfMonth.input, 'last weekspan of the month', function (x) { return Suffix.CACHE[x + 1]; }, 1);\n if (includeTimes && this.times.length) {\n out += ' at ';\n out += this.describeArray(this.times, function (x) { return x.format('hh:mm a'); });\n }\n if (includeDuration && this.duration !== Constants.DURATION_DEFAULT) {\n out += ' lasting ' + this.duration + ' ';\n if (this.durationUnit) {\n out += this.durationUnit + ' ';\n }\n }\n if (includeExcludes) {\n var excludes = this.exclude.spans().list();\n if (excludes.length) {\n out += ' excluding ';\n out += this.describeArray(excludes, function (x) { return x.span.summary(Units.DAY); });\n }\n }\n if (includeIncludes) {\n var includes = this.include.spans().list();\n if (includes.length) {\n out += ' including ';\n out += this.describeArray(includes, function (x) { return x.span.summary(Units.DAY); });\n }\n }\n if (includeCancels) {\n var cancels = this.cancel.spans().list();\n if (cancels.length) {\n out += ' with cancellations on ';\n out += this.describeArray(cancels, function (x) { return x.span.summary(Units.DAY); });\n }\n }\n return out;\n };\n /**\n * Describes the given frequency.\n *\n * @param value The frequency to describe.\n * @param unit The unit of the frequency.\n * @param map How the values in the frequency should be described.\n * @param everyOffset A value to add to a [[FrequencyValueEvery]] offset to\n * account for zero-based values that should be shifted for human\n * friendliness.\n * @param the If the word 'the' should be used to describe the unit.\n * @param on The word which preceeds values of the given unit.\n * @param required If the description should always return a non-empty string\n * even if the frequency was not specified in the original input.\n * @returns A string description of the frequency.\n */\n Schedule.prototype.describeRule = function (value, unit, map, everyOffset, the, on, required) {\n if (everyOffset === void 0) { everyOffset = 0; }\n if (the === void 0) { the = true; }\n if (on === void 0) { on = ' on '; }\n if (required === void 0) { required = false; }\n var out = '';\n var suffix = the ? ' ' + unit : '';\n if (fn.isFrequencyValueEvery(value)) {\n var valueEvery = value;\n out += ' every ' + Suffix.CACHE[valueEvery.every] + ' ' + unit;\n if (valueEvery.offset) {\n out += ' starting at ' + map(valueEvery.offset + everyOffset) + suffix;\n }\n }\n else if (fn.isFrequencyValueOneOf(value)) {\n var valueOne = value;\n if (valueOne.length) {\n out += on + (the ? 'the ' : '');\n out += this.describeArray(valueOne, map);\n out += suffix;\n }\n }\n else if (required) {\n out += on + 'any ' + unit;\n }\n return out;\n };\n /**\n * Describes the array by adding commas where appropriate and 'and' before the\n * last value of the array (if its more than `1`).\n *\n * @param array The array of items to describe.\n * @param map The function which converts an item to a string.\n * @returns The final description of the array items.\n */\n Schedule.prototype.describeArray = function (array, map) {\n var out = '';\n var last = array.length - 1;\n out += map(array[0]);\n for (var i = 1; i < last; i++) {\n out += ', ' + map(array[i]);\n }\n if (last > 0) {\n out += ' and ' + map(array[last]);\n }\n return out;\n };\n /**\n * Generates a schedule for an event which occurs once all day for a given day\n * optionally spanning multiple days starting on the given day.\n *\n * @param input The day the event starts.\n * @param days The number of days the event lasts.\n * @returns A new schedule that starts on the given day.\n */\n Schedule.forDay = function (input, days) {\n if (days === void 0) { days = 1; }\n var day = Day.parse(input);\n if (!day) {\n return null;\n }\n return new Schedule({\n year: [day.year],\n month: [day.month],\n dayOfMonth: [day.dayOfMonth],\n duration: days,\n durationUnit: 'days'\n });\n };\n /**\n * Generates a schedule for an event which occurs once at a given time on a\n * given day optionally spanning any amount of time (default is 1 hour).\n *\n * @param input The day the event starts.\n * @param time The time the event starts.\n * @param duration The duration of the event.\n * @param durationUnit The unit for the duration of the event.\n * @returns A new schedule that starts on the given day and time.\n */\n Schedule.forTime = function (input, time, duration, durationUnit) {\n if (duration === void 0) { duration = 1; }\n if (durationUnit === void 0) { durationUnit = 'hours'; }\n var day = Day.parse(input);\n if (!day) {\n return null;\n }\n return new Schedule({\n year: [day.year],\n month: [day.month],\n dayOfMonth: [day.dayOfMonth],\n times: [time],\n duration: duration,\n durationUnit: durationUnit\n });\n };\n /**\n * Generates a schedule for an event which occurs once over a given span.\n *\n * @param span The span of the event.\n * @returns A new schedule that starts and ends at the given timestamps.\n */\n Schedule.forSpan = function (span) {\n var start = span.start;\n var minutes = span.minutes();\n var isDay = minutes % Constants.MINUTES_IN_DAY === 0;\n var isHour = minutes % Constants.MINUTES_IN_HOUR === 0;\n var duration = isDay ? minutes / Constants.MINUTES_IN_DAY : (isHour ? minutes / Constants.MINUTES_IN_HOUR : minutes);\n var durationUnit = isDay ? 'days' : (isHour ? 'hours' : 'minutes');\n return this.forTime(start, start.asTime(), duration, durationUnit);\n };\n return Schedule;\n}());\nexport { Schedule };\n//# sourceMappingURL=Schedule.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Schedule.js\n// module id = 924\n// module chunks = 2","\"use strict\";\n/**\n * A class which takes a number and determines the suffix for that number.\n *\n * ```typescript\n * Suffix.CACHE[ 2 ]; // 2nd\n * Suffix.determine( 3 ); // rd\n * Suffix.get( 4 ); // th\n * Suffix.get( 4, true ); // 4th\n * ```\n */\nvar Suffix = (function () {\n function Suffix() {\n }\n Object.defineProperty(Suffix, \"CACHE\", {\n /**\n * The cache of number & suffix pairs.\n */\n get: function () {\n if (!this._CACHE) {\n this._CACHE = [];\n for (var i = 0; i <= this._CACHE_SIZE; i++) {\n this._CACHE[i] = this.get(i, true);\n }\n }\n return this._CACHE;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Determines the suffix for a given number.\n *\n * @param value The number to find the suffix for.\n * @returns The suffix determined.\n */\n Suffix.determine = function (value) {\n return value >= 11 && value <= 13 ? 'th' : this.MAP[value % this.MAP.length];\n };\n /**\n * Gets the suffix for a number and optionally appends it before the suffix.\n *\n * @param value The number to get the suffix for.\n * @param prepend When `true` the value is prepended to the suffix.\n * @returns The suffix or value & suffix pair determined.\n */\n Suffix.get = function (value, prepend) {\n if (prepend === void 0) { prepend = false; }\n var suffix = this.determine(value);\n return prepend ? value + suffix : suffix;\n };\n /**\n * The array of suffixes used.\n */\n Suffix.MAP = [\n 'th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'\n ];\n /**\n * The number of values to store in the cache (inclusive).\n */\n Suffix._CACHE_SIZE = 366;\n return Suffix;\n}());\nexport { Suffix };\n//# sourceMappingURL=Suffix.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Suffix.js\n// module id = 925\n// module chunks = 2","\"use strict\";\nimport { Functions as fn } from './Functions';\nimport { Identifier } from './Identifier';\nimport { Iterator, IteratorAction } from './Iterator';\n/**\n * A class that can modify the events of a schedule by storing [[Identifier]]s\n * and an associated value.\n *\n * @typeparam T The type of data that modifies the schedule.\n */\nvar ScheduleModifier = (function () {\n /**\n * Creates a new schedule modifier.\n */\n function ScheduleModifier() {\n this.map = {};\n }\n /**\n * Clears the modifier of all modifications.\n */\n ScheduleModifier.prototype.clear = function () {\n this.map = {};\n return this;\n };\n /**\n * Returns `true` if this modifier lacks any modifications, otherwise `false`.\n */\n ScheduleModifier.prototype.isEmpty = function () {\n // @ts-ignore\n for (var id in this.map) {\n return !id;\n }\n return true;\n };\n /**\n * Gets the most specific value in this modifier for the given day, if none\n * exists `otherwise` is returned. A modifier can have multiple values for a\n * given day because [[Identifier]]s represent a span of time.\n *\n * @param day The day to get a value for.\n * @param otherwise What to return if no value exists for the given day.\n * @param lookAtTime If the specific time of the given day should be looked at.\n * @returns The most specific value for the given day, or `otherwise`.\n */\n ScheduleModifier.prototype.get = function (day, otherwise, lookAtTime) {\n if (lookAtTime === void 0) { lookAtTime = true; }\n var map = this.map;\n return (lookAtTime && map[day.timeIdentifier]) ||\n map[day.dayIdentifier] ||\n map[day.monthIdentifier] ||\n map[day.weekIdentifier] ||\n map[day.quarterIdentifier] ||\n otherwise;\n };\n /**\n * Gets the most specific identifier type for the span over the given day.\n * If the day does not have a modification, `null` is returned.\n *\n * @param day The day to get the type for.\n * @param lookAtTime If the specific time of the given day should be looked at.\n * @returns The most specific identifier for the given day, otherwise `null`.\n */\n ScheduleModifier.prototype.getIdentifier = function (day, lookAtTime) {\n if (lookAtTime === void 0) { lookAtTime = true; }\n var map = this.map;\n if (lookAtTime && fn.isDefined(map[day.timeIdentifier]))\n return Identifier.Time;\n if (fn.isDefined(map[day.dayIdentifier]))\n return Identifier.Day;\n if (fn.isDefined(map[day.monthIdentifier]))\n return Identifier.Month;\n if (fn.isDefined(map[day.weekIdentifier]))\n return Identifier.Week;\n if (fn.isDefined(map[day.quarterIdentifier]))\n return Identifier.Quarter;\n if (fn.isDefined(map[day.year]))\n return Identifier.Year;\n return null;\n };\n /**\n * Gets all values in this modifier for the given day. If none exist, an empty\n * array is returned. The values returned in the array are returned in most\n * specific to least specific.\n *\n * @param day The day to get the values for.\n * @returns An array of values (modifications) for the given day.\n */\n ScheduleModifier.prototype.getAll = function (day) {\n var map = this.map;\n var all = [];\n if (map[day.timeIdentifier])\n all.push(map[day.timeIdentifier]);\n if (map[day.dayIdentifier])\n all.push(map[day.dayIdentifier]);\n if (map[day.monthIdentifier])\n all.push(map[day.monthIdentifier]);\n if (map[day.weekIdentifier])\n all.push(map[day.weekIdentifier]);\n if (map[day.quarterIdentifier])\n all.push(map[day.quarterIdentifier]);\n return all;\n };\n /**\n * Moves the value/modification from one identifier to another.\n *\n * @param from The day to take the identifier from.\n * @param fromType The identifier type.\n * @param to The day to move the value to.\n * @param toType The identifier type to move the value to.\n */\n ScheduleModifier.prototype.move = function (from, fromType, to, toType) {\n var fromIdentifier = fromType.get(from);\n var toIdentifier = toType.get(to);\n this.map[toIdentifier] = this.map[fromIdentifier];\n delete this.map[fromIdentifier];\n return this;\n };\n /**\n * Moves any identifiers with the matching time `fromTime` to `toTime` and\n * returns the number of moves.\n *\n * @param fromTime The time to move from.\n * @param toTime The time to move to.\n * @returns The number of modifiers moved.\n */\n ScheduleModifier.prototype.moveTime = function (fromTime, toTime) {\n var type = Identifier.Time;\n var moveIds = [];\n this.iterate().iterate(function (_a) {\n var id = _a[0], value = _a[1];\n if (type.is(id)) {\n var start = type.start(id);\n if (start.sameTime(fromTime)) {\n moveIds.push(id);\n }\n }\n });\n var moved = 0;\n for (var _i = 0, moveIds_1 = moveIds; _i < moveIds_1.length; _i++) {\n var id = moveIds_1[_i];\n var value = this.map[id];\n var start = type.start(id);\n var newStart = start.withTime(toTime);\n var newId = type.get(newStart);\n if (!this.map[newId]) {\n this.map[newId] = value;\n delete this.map[id];\n moved++;\n }\n }\n return moved;\n };\n /**\n * Removes any identifiers and modifications that are at the given time.\n *\n * @param time The time to remove.\n * @returns The number of modifiers removed.\n */\n ScheduleModifier.prototype.removeTime = function (time) {\n var type = Identifier.Time;\n var removed = 0;\n this.iterate().iterate(function (_a, iterator) {\n var id = _a[0];\n if (type.is(id)) {\n var start = type.start(id);\n if (start.sameTime(time)) {\n iterator.remove();\n removed++;\n }\n }\n });\n return removed;\n };\n /**\n * Sets the value/modification in this map given a day, the value, and the\n * identifier type.\n *\n * @param day The day to take an identifier from.\n * @param value The value/modification to set.\n * @param type The identifier type.\n */\n ScheduleModifier.prototype.set = function (day, value, type) {\n this.map[type.get(day)] = value;\n return this;\n };\n /**\n * Removes the value/modification from this modifier based on the identifier\n * pulled from the day.\n *\n * @param day The day to take an identifier from.\n * @param type The identifier type.\n */\n ScheduleModifier.prototype.unset = function (day, type) {\n delete this.map[type.get(day)];\n return this;\n };\n /**\n * Iterates through the modifiers passing the identifier and the related value.\n *\n * @returns A new instance of an [[Iterator]].\n */\n ScheduleModifier.prototype.iterate = function () {\n var _this = this;\n return new Iterator(function (iterator) {\n var map = _this.map;\n for (var rawId in map) {\n var asNumber = parseInt(rawId);\n var validAsNumber = asNumber + '' === rawId;\n var id = validAsNumber ? asNumber : rawId;\n switch (iterator.act([id, map[rawId]])) {\n case IteratorAction.Stop:\n return;\n case IteratorAction.Remove:\n delete map[rawId];\n break;\n }\n }\n });\n };\n /**\n * Queries the modifier for all values/modifications which fall in the time\n * span that the given identifier represents. All identifiers and their value\n * are passed to the given callback.\n *\n * @param prefix The identifier\n * @returns A new instance of an [[Iterator]].\n */\n ScheduleModifier.prototype.query = function (query) {\n return this.iterate()\n .filter(function (_a) {\n var id = _a[0], value = _a[1];\n return Identifier.contains(query, id);\n });\n ;\n };\n /**\n * Returns all identifiers stored in this modifier.\n */\n ScheduleModifier.prototype.identifiers = function (filter) {\n return this.iterate()\n .filter(function (_a) {\n var id = _a[0], value = _a[1];\n return !filter || filter(value, id);\n })\n .map(function (_a) {\n var id = _a[0];\n return id;\n });\n };\n /**\n * Builds a list of spans and the associated values. The spans are calculated\n * from the identiier key via [[Identifier.span]].\n *\n * @param endInclusive If the end date in the spans should be the last\n * millisecond of the timespan or the first millisecond of the next.\n * @returns An array of spans calculated from the identifiers with the\n * associated values/modifications.\n */\n ScheduleModifier.prototype.spans = function (endInclusive) {\n if (endInclusive === void 0) { endInclusive = false; }\n return this.iterate()\n .map(function (_a) {\n var id = _a[0], value = _a[1];\n var type = Identifier.find(id);\n if (type) {\n var span = type.span(id, endInclusive);\n return { span: span, value: value };\n }\n });\n };\n /**\n * Builds a list of the descriptions of the identifiers in this modifier.\n *\n * @param short If the description should use shorter language or longer.\n * @returns The built list of descriptions.\n */\n ScheduleModifier.prototype.describe = function (short) {\n if (short === void 0) { short = false; }\n return this.iterate()\n .map(function (_a) {\n var id = _a[0];\n var type = Identifier.find(id);\n if (type) {\n return type.describe(id, short);\n }\n });\n };\n /**\n * Builds a map of the values/modifications keyed by the descripton of the\n * identifier computed via [[Identifier.describe]].\n *\n * @param short If the description should use shorter language or longer.\n * @returns The built map of description to values/modifications.\n */\n ScheduleModifier.prototype.describeMap = function (short) {\n if (short === void 0) { short = false; }\n var map = this.map;\n var out = {};\n for (var id in map) {\n var type = Identifier.find(id);\n if (type) {\n out[type.describe(id, short)] = map[id];\n }\n }\n return out;\n };\n return ScheduleModifier;\n}());\nexport { ScheduleModifier };\n//# sourceMappingURL=ScheduleModifier.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/ScheduleModifier.js\n// module id = 926\n// module chunks = 2","\"use strict\";\nimport { Functions as fn } from './Functions';\nimport { Constants } from './Constants';\nimport { Parse } from './Parse';\n/**\n * A class which holds a specific time during in any day.\n */\nvar Time = (function () {\n /**\n * Creates a new Time instance given an hour and optionally a minute, second,\n * and millisecond. If they have not been specified they default to 0.\n *\n * @param hour The hour.\n * @param minute The minute.\n * @param second The second.\n * @param millisecond The millisecond.\n */\n function Time(hour, minute, second, millisecond) {\n if (minute === void 0) { minute = Constants.MINUTE_MIN; }\n if (second === void 0) { second = Constants.SECOND_MIN; }\n if (millisecond === void 0) { millisecond = Constants.MILLIS_MIN; }\n this.hour = hour;\n this.minute = minute;\n this.second = second;\n this.millisecond = millisecond;\n }\n /**\n * Formats this time into a string. The following list describes the available\n * formatting patterns:\n *\n * ### Hour\n * - H: 0-23\n * - HH: 00-23\n * - h: 12,1-12,1-11\n * - hh: 12,01-12,01-11\n * - k: 1-24\n * - kk: 01-24\n * - a: am,pm\n * - A: AM,PM\n * ### Minute\n * - m: 0-59\n * - mm: 00-59\n * ### Second\n * - s: 0-59\n * - ss: 00-59\n * ### Millisecond\n * - S: 0-9\n * - SS: 00-99\n * - SSS: 000-999\n *\n * @param format The format to output.\n * @returns The formatted time.\n */\n Time.prototype.format = function (format) {\n var formatterEntries = Time.FORMATTERS;\n var out = '';\n for (var i = 0; i < format.length; i++) {\n var handled = false;\n for (var k = 0; k < formatterEntries.length && !handled; k++) {\n var entry = formatterEntries[k];\n var part = format.substring(i, i + entry.size);\n if (part.length === entry.size) {\n var formatter = entry.formats[part];\n if (formatter) {\n out += formatter(this);\n i += entry.size - 1;\n handled = true;\n }\n }\n }\n if (!handled) {\n out += format.charAt(i);\n }\n }\n return out;\n };\n /**\n * Determines whether this time is an exact match for the given time.\n *\n * @param time The given time to test against.\n * @returns `true` if the time matches this time, otherwise `false`.\n */\n Time.prototype.matches = function (time) {\n return this.hour === time.hour &&\n this.minute === time.minute &&\n this.second === time.second &&\n this.millisecond === time.millisecond;\n };\n /**\n * Determines whether this time has the same hour as the given time.\n *\n * @param time The given time to test against.\n * @returns `true` if the given hour matches this hour, otherwise `false`.\n */\n Time.prototype.matchesHour = function (time) {\n return this.hour === time.hour;\n };\n /**\n * Determines whether this time has the same hour and minute as the given time.\n *\n * @param time The given time to test against.\n * @returns `true` if the given hour and minute matches, otherwise `false`.\n */\n Time.prototype.matchesMinute = function (time) {\n return this.hour === time.hour &&\n this.minute === time.minute;\n };\n /**\n * Determines whether this time has the same hour, minute, and second as the\n * given time.\n *\n * @param time The given time to test against.\n * @returns `true` if the given hour, minute, and second matches, otherwise\n * `false`.\n */\n Time.prototype.matchesSecond = function (time) {\n return this.hour === time.hour &&\n this.minute === time.minute &&\n this.second === time.second;\n };\n /**\n * Sets the time of this instance to the same time of the given input.\n *\n * @param input The time to set this to.\n * @returns `true` if this time was set, otherwise `false` (invalid input).\n */\n Time.prototype.set = function (input) {\n var parsed = Time.parse(input);\n var valid = !!parsed;\n if (valid) {\n this.hour = parsed.hour;\n this.minute = parsed.minute;\n this.second = parsed.second;\n this.millisecond = parsed.millisecond;\n }\n return valid;\n };\n /**\n * @returns The number of milliseconds from the start of the day until this\n * time.\n */\n Time.prototype.toMilliseconds = function () {\n return this.hour * Constants.MILLIS_IN_HOUR +\n this.minute * Constants.MILLIS_IN_MINUTE +\n this.second * Constants.MILLIS_IN_SECOND +\n this.millisecond;\n };\n /**\n * @returns The time formatted using the smallest format that completely\n * represents this time.\n */\n Time.prototype.toString = function () {\n if (this.millisecond)\n return this.format('HH:mm:ss.SSS');\n if (this.second)\n return this.format('HH:mm:ss');\n if (this.minute)\n return this.format('HH:mm');\n return this.format('HH');\n };\n /**\n * @returns A unique identifier for this time. The number returned is in the\n * following format: SSSssmmHH\n */\n Time.prototype.toIdentifier = function () {\n return this.hour +\n this.minute * 100 +\n this.second * 10000 +\n this.millisecond * 10000000;\n };\n /**\n * @returns An object with hour, minute, second, a millisecond properties if\n * they are non-zero on this time.\n */\n Time.prototype.toObject = function () {\n var out = {\n hour: this.hour\n };\n if (this.minute)\n out.minute = this.minute;\n if (this.second)\n out.second = this.second;\n if (this.millisecond)\n out.millisecond = this.millisecond;\n return out;\n };\n /**\n * Parses a value and tries to convert it to a Time instance.\n *\n * @param input The input to parse.\n * @returns The instance parsed or `null` if it was invalid.\n * @see [[Parse.time]]\n */\n Time.parse = function (input) {\n return Parse.time(input);\n };\n /**\n * Parses a string and converts it to a Time instance. If the string is not\n * in a valid format `null` is returned.\n *\n * @param time The string to parse.\n * @returns The instance parsed or `null` if it was invalid.\n * @see [[Time.REGEX]]\n */\n Time.fromString = function (time) {\n var matches = this.REGEX.exec(time);\n if (!matches) {\n return null;\n }\n var h = parseInt(matches[1]) || 0;\n var m = parseInt(matches[2]) || 0;\n var s = parseInt(matches[3]) || 0;\n var l = parseInt(matches[4]) || 0;\n return this.build(h, m, s, l);\n };\n /**\n * Parses a number and converts it to a Time instance. The number is assumed\n * to be in the [[Time.toIdentifier]] format.\n *\n * @param time The number to parse.\n * @returns The instance parsed.\n */\n Time.fromIdentifier = function (time) {\n var h = time % 100;\n var m = Math.floor(time / 100) % 100;\n var s = Math.floor(time / 10000) % 100;\n var l = Math.floor(time / 10000000) % 1000;\n return this.build(h, m, s, l);\n };\n /**\n * Returns a new instance given an hour and optionally a minute, second,\n * and millisecond. If they have not been specified they default to 0.\n *\n * @param hour The hour.\n * @param minute The minute.\n * @param second The second.\n * @param millisecond The millisecond.\n * @returns A new instance.\n */\n Time.build = function (hour, minute, second, millisecond) {\n if (minute === void 0) { minute = Constants.MINUTE_MIN; }\n if (second === void 0) { second = Constants.SECOND_MIN; }\n if (millisecond === void 0) { millisecond = Constants.MILLIS_MIN; }\n return new Time(hour, minute, second, millisecond);\n };\n /**\n * The regular expression used to parse a time from a string.\n *\n * - ## = hour\n * - ##:## = hour & minute\n * - ##:##:## = hour, minute, & second\n * - ##:##:##.### = hour, minute, second, and milliseconds\n */\n Time.REGEX = /^(\\d\\d?):?(\\d\\d)?:?(\\d\\d)?\\.?(\\d\\d\\d)?$/;\n /**\n * A set of formatting functions keyed by their format string.\n */\n Time.FORMATTERS = [\n {\n size: 3,\n formats: {\n SSS: function (t) { return fn.padNumber(t.millisecond, 3); }\n }\n },\n {\n size: 2,\n formats: {\n HH: function (t) { return fn.padNumber(t.hour, 2); },\n hh: function (t) { return fn.padNumber((t.hour % 12) || 12, 2); },\n kk: function (t) { return fn.padNumber(t.hour + 1, 2); },\n mm: function (t) { return fn.padNumber(t.minute, 2); },\n ss: function (t) { return fn.padNumber(t.second, 2); },\n SS: function (t) { return fn.padNumber(t.millisecond, 3, 2); }\n }\n },\n {\n size: 1,\n formats: {\n A: function (t) { return t.hour < 12 ? 'AM' : 'PM'; },\n a: function (t) { return t.hour < 12 ? 'am' : 'pm'; },\n H: function (t) { return t.hour + ''; },\n h: function (t) { return ((t.hour % 12) || 12) + ''; },\n k: function (t) { return (t.hour + 1) + ''; },\n m: function (t) { return t.minute + ''; },\n s: function (t) { return t.second + ''; },\n S: function (t) { return fn.padNumber(t.millisecond, 3, 1); }\n }\n }\n ];\n return Time;\n}());\nexport { Time };\n//# sourceMappingURL=Time.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Time.js\n// module id = 927\n// module chunks = 2","\"use strict\";\n/**\n * A pairing of a user specified event object and the schedule which defines\n * when it occurs on a calendar.\n *\n * @typeparam T The type of data stored in the [[Event]] class.\n * @typeparam M The type of metadata stored in the schedule.\n */\nvar Event = (function () {\n /**\n * Creates a new event.\n *\n * @param schedule The schedule which defines when the event occurs.\n * @param data User specified object which describes this event.\n * @param id User specified ID which identifies this event.\n */\n function Event(schedule, data, id, visible) {\n if (visible === void 0) { visible = true; }\n this.schedule = schedule;\n this.data = data;\n this.id = id;\n this.visible = visible;\n }\n return Event;\n}());\nexport { Event };\n//# sourceMappingURL=Event.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Event.js\n// module id = 941\n// module chunks = 2","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Op } from './Operation';\nimport { Day } from './Day';\nimport { Iterator } from './Iterator';\n/**\n * A day in a [[Calendar]] with extra information relative to any selection on\n * the calendar, the current date, or events on the day.\n *\n * @typeparam T The type of data stored in the [[Event]] class.\n * @typeparam M The type of metadata stored in the schedule.\n */\nvar CalendarDay = (function (_super) {\n __extends(CalendarDay, _super);\n function CalendarDay() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Whether this day is the current day (ex: today).\n */\n _this.currentDay = false;\n /**\n * Whether this day is on the same week as the current day (ex: today).\n */\n _this.currentWeek = false;\n /**\n * Whether this day is on the same month as the current day (ex: today).\n */\n _this.currentMonth = false;\n /**\n * Whether this day is on the same year as the current day (ex: today).\n */\n _this.currentYear = false;\n /**\n * How many days away this day is from the current day (ex: today). If this\n * day is the current day the offset is 0. If this day is before the current\n * day it will be the negative number of days away. Otherwise this will be\n * positive meaning this day is after the current day by the given days.\n */\n _this.currentOffset = 0;\n /**\n * Whether this day is part of a selection on the calendar.\n */\n _this.selectedDay = false;\n /**\n * Whether this day is on the same week that the calendar selection is.\n */\n _this.selectedWeek = false;\n /**\n * Whether this day is on the same month that the calendar selection is.\n */\n _this.selectedMonth = false;\n /**\n * Whether this day is on the same year that the calendar selection is.\n */\n _this.selectedYear = false;\n /**\n * Whether this day is in the current calendar or not. Some days are outside\n * the calendar span and used to fill in weeks. Month calendars will fill in\n * days so the list of days in the calendar start on Sunday and end on Saturday.\n */\n _this.inCalendar = false;\n /**\n * The list of events on this day based on the settings and schedules in the\n * calendar.\n */\n _this.events = [];\n return _this;\n }\n /**\n * Creates an iterator for the events on this day.\n *\n * @returns The new iterator for the events on this day.\n */\n CalendarDay.prototype.iterateEvents = function () {\n return Iterator.forArray(this.events);\n };\n /**\n * Updates the current flags on this day given the current day (ex: today).\n *\n * @param current The current day of the calendar.\n */\n CalendarDay.prototype.updateCurrent = function (current) {\n this.currentDay = this.sameDay(current);\n this.currentWeek = this.sameWeek(current);\n this.currentMonth = this.sameMonth(current);\n this.currentYear = this.sameYear(current);\n this.currentOffset = this.daysBetween(current, Op.DOWN, false);\n return this;\n };\n /**\n * Updates the selection flags on this day given the selection range on the\n * calendar.\n *\n * @param selected The span of days selected on the calendar.\n */\n CalendarDay.prototype.updateSelected = function (selected) {\n this.selectedDay = selected.matchesDay(this);\n this.selectedWeek = selected.matchesWeek(this);\n this.selectedMonth = selected.matchesMonth(this);\n this.selectedYear = selected.matchesYear(this);\n return this;\n };\n /**\n * Clears the selection flags on this day. This is done when the selection on\n * the calendar is cleared.\n */\n CalendarDay.prototype.clearSelected = function () {\n this.selectedDay = this.selectedWeek = this.selectedMonth = this.selectedYear = false;\n return this;\n };\n return CalendarDay;\n}(Day));\nexport { CalendarDay };\n//# sourceMappingURL=CalendarDay.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/CalendarDay.js\n// module id = 942\n// module chunks = 2","\"use strict\";\nimport { Constants } from './Constants';\n/**\n * An instance of an [[Event]] on a given day of a [[Calendar]] generated by\n * the event's [[Schedule]].\n *\n * @typeparam T The type of data stored in the [[Event]] class.\n * @typeparam M The type of metadata stored in the schedule and in this class.\n */\nvar CalendarEvent = (function () {\n /**\n * Creates a new event instance given the id, the event paired with the\n * schedule, the schedule, the time span of the event, and the day on the\n * calendar the event belongs to.\n *\n * @param id The relatively unique identifier of this event.\n * @param event The event which created this instance.\n * @param time The time span of this event.\n * @param actualDay The day on the calendar this event is for.\n */\n function CalendarEvent(id, event, time, actualDay) {\n /**\n * The row this event is on in a visual calendar. An event can span multiple\n * days and it is desirable to have the occurrence on each day to line up.\n * This is only set when [[Calendar.updateRows]] is true or manually set.\n * This value makes sense for visual calendars for all day events or when the\n * visual calendar is not positioning events based on their time span.\n */\n this.row = 0;\n /**\n * The column this event is on in a visual calendar. An event can have its\n * time overlap with another event displaying one of the events in another\n * column. This is only set when [[Calendar.updateColumns]] is true or\n * manually set. This value makes sense for visual calendars that are\n * displaying event occurrences at specific times positioned accordingly.\n */\n this.col = 0;\n this.id = id;\n this.event = event;\n this.time = time;\n this.day = actualDay;\n this.fullDay = event.schedule.isFullDay();\n this.meta = event.schedule.getMeta(time.start);\n this.cancelled = event.schedule.isCancelled(time.start);\n this.starting = time.isPoint || time.start.sameDay(actualDay);\n this.ending = time.isPoint || time.end.relative(-1).sameDay(actualDay);\n }\n Object.defineProperty(CalendarEvent.prototype, \"scheduleId\", {\n /**\n * The id of the schedule uniqe within the calendar which generated this event.\n */\n get: function () {\n return Math.floor(this.id / Constants.MAX_EVENTS_PER_DAY);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalendarEvent.prototype, \"start\", {\n /**\n * The start timestamp of the event.\n */\n get: function () {\n return this.time.start;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalendarEvent.prototype, \"end\", {\n /**\n * The end timestamp of the event.\n */\n get: function () {\n return this.time.end;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalendarEvent.prototype, \"schedule\", {\n /**\n * The schedule which generated this event.\n */\n get: function () {\n return this.event.schedule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalendarEvent.prototype, \"data\", {\n /**\n * The related event data.\n */\n get: function () {\n return this.event.data;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalendarEvent.prototype, \"identifier\", {\n /**\n * An [[IdentifierInput]] for the start of this event.\n */\n get: function () {\n return this.identifierType.get(this.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalendarEvent.prototype, \"identifierType\", {\n /**\n * The [[Identifier]] for this event. Either [[Identifier.Day]] or\n * [[Identifier.Time]].\n */\n get: function () {\n return this.schedule.identifierType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalendarEvent.prototype, \"startDelta\", {\n /**\n * Returns a delta value between 0 and 1 which represents where the\n * [[CalendarEvent.start]] is relative to [[CalendarEvent.day]]. The delta\n * value would be less than 0 if the start of the event is before\n * [[CalendarEvent.day]].\n */\n get: function () {\n return this.time.startDelta(this.day);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalendarEvent.prototype, \"endDelta\", {\n /**\n * Returns a delta value between 0 and 1 which represents where the\n * [[CalendarEvent.end]] is relative to [[CalendarEvent.day]]. The delta value\n * would be greater than 1 if the end of the event is after\n * [[CalendarEvent.day]].\n */\n get: function () {\n return this.time.endDelta(this.day);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Calculates the bounds for this event if it were placed in a rectangle which\n * represents a day (24 hour period). By default the returned values are\n * between 0 and 1 and can be scaled by the proper rectangle dimensions or the\n * rectangle dimensions can be passed to this function.\n *\n * @param dayHeight The height of the rectangle of the day.\n * @param dayWidth The width of the rectangle of the day.\n * @param columnOffset The offset in the rectangle of the day to adjust this\n * event by if it intersects or is contained in a previous event. This also\n * reduces the width of the returned bounds to keep the bounds in the\n * rectangle of the day.\n * @param clip `true` if the bounds should stay in the day rectangle, `false`\n * and the bounds may go outside the rectangle of the day for multi-day\n * events.\n * @param offsetX How much to translate the left & right properties by.\n * @param offsetY How much to translate the top & bottom properties by.\n * @returns The calculated bounds for this event.\n */\n CalendarEvent.prototype.getTimeBounds = function (dayHeight, dayWidth, columnOffset, clip, offsetX, offsetY) {\n if (dayHeight === void 0) { dayHeight = 1; }\n if (dayWidth === void 0) { dayWidth = 1; }\n if (columnOffset === void 0) { columnOffset = 0.1; }\n if (clip === void 0) { clip = true; }\n if (offsetX === void 0) { offsetX = 0; }\n if (offsetY === void 0) { offsetY = 0; }\n return this.time.getBounds(this.day, dayHeight, dayWidth, this.col * columnOffset, clip, offsetX, offsetY);\n };\n /**\n * Changes the cancellation status of this event. By default this cancels\n * this event - but `false` may be passed to undo a cancellation.\n *\n * @param cancelled Whether the event should be cancelled.\n */\n CalendarEvent.prototype.cancel = function (cancelled) {\n if (cancelled === void 0) { cancelled = true; }\n this.schedule.setCancelled(this.start, cancelled);\n this.cancelled = cancelled;\n return this;\n };\n /**\n * Changes the exclusion status of this event. By default this excludes this\n * event - but `false` may be passed to undo an exclusion.\n *\n * @param excluded Whether the event should be excluded.\n */\n CalendarEvent.prototype.exclude = function (excluded) {\n if (excluded === void 0) { excluded = true; }\n this.schedule.setExcluded(this.start, excluded);\n return this;\n };\n /**\n * Moves this event to potentially another day and time. A move is\n * accomplished by excluding the current event and adding an inclusion of the\n * new day & time. Any [[CalendarEvent.meta]] on this event will be moved to\n * the new event. If the schedule represents a single event\n * ([[Schedule.isSingleEvent]]) then the schedule frequencies are updated\n * to match the timestamp provided.\n *\n * @param toTime The timestamp to move this event to.\n * @returns Whether the event was moved to the given time.\n */\n CalendarEvent.prototype.move = function (toTime) {\n return this.schedule.move(toTime, this.start);\n };\n return CalendarEvent;\n}());\nexport { CalendarEvent };\n//# sourceMappingURL=CalendarEvent.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/CalendarEvent.js\n// module id = 943\n// module chunks = 2","\"use strict\";\n/**\n * The days in a week.\n */\nvar Weekday = (function () {\n function Weekday() {\n }\n Weekday.SUNDAY = 0;\n Weekday.MONDAY = 1;\n Weekday.TUESDAY = 2;\n Weekday.WEDNESDAY = 3;\n Weekday.THURSDAY = 4;\n Weekday.FRIDAY = 5;\n Weekday.SATURDAY = 6;\n /**\n * The full list of days in a week.\n */\n Weekday.LIST = [\n Weekday.SUNDAY,\n Weekday.MONDAY,\n Weekday.TUESDAY,\n Weekday.WEDNESDAY,\n Weekday.THURSDAY,\n Weekday.FRIDAY,\n Weekday.SATURDAY\n ];\n /**\n * The list of days starting with Monday and ending on Friday.\n */\n Weekday.WEEK = [\n Weekday.MONDAY,\n Weekday.TUESDAY,\n Weekday.WEDNESDAY,\n Weekday.THURSDAY,\n Weekday.FRIDAY\n ];\n /**\n * The days on the weekend, starting with Saturday and ending with Sunday.\n */\n Weekday.ENDS = [\n Weekday.SATURDAY,\n Weekday.SUNDAY\n ];\n return Weekday;\n}());\nexport { Weekday };\n//# sourceMappingURL=Weekday.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Weekday.js\n// module id = 944\n// module chunks = 2","import { Component } from '@angular/core';\r\nimport { IonicPage, NavController, NavParams, ViewController } from 'ionic-angular';\r\n// import moment from 'moment';\r\n// import moment from 'moment-timezone'\r\n\r\n/**\r\n * Generated class for the CalendarPage page.\r\n *\r\n * See https://ionicframework.com/docs/components/#navigation for more info on\r\n * Ionic pages and navigation.\r\n */\r\n\r\n@IonicPage()\r\n@Component({\r\n selector: 'page-calendar',\r\n templateUrl: 'calendar.html',\r\n})\r\nexport class CalendarPage {\r\n\r\n constructor(public navCtrl: NavController, public navParams: NavParams, public viewCtrl: ViewController) {\r\n }\r\n\r\n ionViewDidLoad() {\r\n \r\n }\r\n\r\n dateSelected(date){\r\n // console.log('inside dateSelected');\r\n // console.log(date)\r\n // var dd = moment.tz(date, 'DD/MM/YY h:m A', 'Australia/Melbourne');\r\n // var dd = moment(date).tz('Australia/Melbourne').format('DD-MM-YYYY hh:mm A')\r\n // console.log(dd)\r\n // var d = moment(new Date(date)).format('DD-MM-YYYY');\r\n // var d = moment(new Date(date)).format('YYYY-MM-DD');\r\n // var d = moment(new Date(date)).format('YYYY-MM-DD[T]hh:mm:ss.SSS[Z]');\r\n this.viewCtrl.dismiss({date: date, dismiss:'cancel'});\r\n \r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/calendar/calendar.ts","export * from './components/date-picker.module';\n//# sourceMappingURL=index.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ionic-calendar-date-picker/dist/index.js\n// module id = 995\n// module chunks = 2","import { NgModule } from '@angular/core';\nimport { DatePickerComponent } from './date-picker-component';\nimport { IonicModule } from 'ionic-angular';\nvar DatePickerModule = (function () {\n function DatePickerModule() {\n }\n DatePickerModule.forRoot = function () {\n return {\n ngModule: DatePickerModule,\n };\n };\n DatePickerModule.decorators = [\n { type: NgModule, args: [{\n imports: [\n IonicModule\n ],\n declarations: [\n DatePickerComponent\n ],\n exports: [\n DatePickerComponent,\n ]\n },] },\n ];\n /** @nocollapse */\n DatePickerModule.ctorParameters = function () { return []; };\n return DatePickerModule;\n}());\nexport { DatePickerModule };\n//# sourceMappingURL=date-picker.module.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ionic-calendar-date-picker/dist/components/date-picker.module.js\n// module id = 996\n// module chunks = 2","var __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { Calendar, Day } from 'dayspan';\nimport * as moment from 'moment';\nvar HTML_CODE = \"\\n
\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n {{daylabel}}\\n \\n \\n \\n \\n {{isValidDay(day) ? day.dayOfMonth : '  '}}\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{monthLabel}}\\n \\n \\n \\n\\n \\n \\n \\n
\\n \\n \\n \\n \\n
\\n
\\n \\n \\n \\n
\\n \\n \\n {{year}}\\n \\n \\n
\\n
\\n\";\nvar CSS_STYLE = \"\\n .item {\\n .item-inner {\\n border-bottom: none !important;\\n }\\n }\\n\\n ion-icon {\\n font-size: 25px;\\n }\\n\\n .year-range {\\n font-size: 15px;\\n font-weight: 550;\\n &.button[disabled] {\\n opacity: 1;\\n color: gray !important;\\n }\\n }\\n\\n .calendar-button {\\n text-decoration: underline;\\n padding-right: 2px !important;\\n padding-left: 2px !important;\\n }\\n\\n .invalidMonth {\\n color: #8b8b8b;\\n }\\n\";\nvar DatePickerComponent = (function () {\n function DatePickerComponent() {\n this.monthLabels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n this.dayLabels = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n this.backgroundStyle = { 'background-color': '#ffffff' };\n this.notInCalendarStyle = { 'color': '#8b8b8b' };\n this.dayLabelsStyle = { 'font-weight': 500, 'font-size': '14px' };\n this.monthLabelsStyle = { 'font-size': '15px' };\n this.yearLabelsStyle = { 'font-size': '15px' };\n this.itemSelectedStyle = { 'background': '#488aff', 'color': '#f4f4f4 !important' };\n this.todaysItemStyle = { 'color': '#32db64' };\n this.onSelect = new EventEmitter();\n this.showView = 'calendar';\n this.yearSelected = new Date().getFullYear();\n this.monthSelected = new Date().getMonth() + 1;\n this.currentYear = new Date().getFullYear();\n this.currentMonth = new Date().getMonth() + 1;\n this.currentDay = new Date().getDate();\n }\n DatePickerComponent.prototype.ngOnInit = function () {\n this.initOptions();\n this.createCalendarWeeks();\n };\n DatePickerComponent.prototype.initOptions = function () {\n if (this.date && this.fromDate && this.date < this.fromDate) {\n throw new Error('Invalid date input. date must be same or greater than fromDate');\n }\n if (this.date && this.toDate && this.toDate < this.date) {\n throw new Error('Invalid date input. date must be same or lesser than toDate');\n }\n if (this.toDate && this.fromDate && this.fromDate > this.toDate) {\n throw new Error('Invalid date input. from date must be lesser than or equal to toDate');\n }\n this.yearSelected = this.date ? this.date.getFullYear() : this.toDate ? this.toDate.getFullYear() : new Date().getFullYear();\n this.monthSelected = this.date ? this.date.getMonth() + 1 : this.toDate ? this.toDate.getMonth() + 1 : new Date().getMonth() + 1;\n this.dayHighlighted = this.date ? Day.fromDate(this.date) : this.toDate ? Day.fromDate(this.toDate) : Day.today();\n if (this.date) {\n this.daySelected = this.dayHighlighted;\n }\n };\n DatePickerComponent.prototype.createCalendarWeeks = function () {\n this.weeks = this.generateCalendarWeeks(Day.fromMoment(moment(this.monthSelected + '-01-' + this.yearSelected, 'MM-DD-YYYY')));\n };\n DatePickerComponent.prototype.hasPrevious = function () {\n if (!this.fromDate) {\n return true;\n }\n var previousMonth;\n var previousYear;\n if (this.monthSelected === 1) {\n previousMonth = 11;\n previousYear = this.yearSelected - 1;\n }\n else {\n previousMonth = this.monthSelected;\n previousYear = this.yearSelected;\n }\n // The last day of previous month should be greatar than or equal to fromDate\n return new Date(previousYear, previousMonth, 0) >= this.fromDate;\n };\n DatePickerComponent.prototype.hasNext = function () {\n if (!this.toDate) {\n return true;\n }\n var nextMonth;\n var nextYear;\n if (this.monthSelected === 12) {\n nextMonth = 0;\n nextYear = this.yearSelected + 1;\n }\n else {\n nextMonth = this.monthSelected;\n nextYear = this.yearSelected;\n }\n // The first day of next month should be less than or equal to toDate\n return new Date(nextYear, nextMonth, 1) <= this.toDate;\n };\n DatePickerComponent.prototype.previous = function () {\n if (this.monthSelected === 1) {\n this.monthSelected = 12;\n this.yearSelected--;\n }\n else {\n this.monthSelected--;\n }\n this.createCalendarWeeks();\n };\n DatePickerComponent.prototype.next = function () {\n if (this.monthSelected === 12) {\n this.monthSelected = 1;\n this.yearSelected++;\n }\n else {\n this.monthSelected++;\n }\n this.createCalendarWeeks();\n };\n DatePickerComponent.prototype.confirmDay = function (day) {\n this.onSelect.emit(day.toDate());\n };\n DatePickerComponent.prototype.selectDay = function (day) {\n var _this = this;\n if (!this.isValidDay(day)) {\n return;\n }\n this.daySelected = day;\n setTimeout(function () {\n _this.confirmDay(day);\n }, 200);\n };\n DatePickerComponent.prototype.showMonthView = function () {\n this.showView = 'month';\n \"\";\n };\n DatePickerComponent.prototype.hasYearSelection = function () {\n if (!this.toDate || !this.fromDate) {\n return true;\n }\n return this.toDate.getFullYear() !== this.fromDate.getFullYear();\n };\n DatePickerComponent.prototype.showYearView = function () {\n this.showView = 'year';\n var startYear = this.yearSelected - 10;\n if (startYear % 10 !== 0) {\n startYear = startYear - (startYear % 10);\n }\n var endYear = startYear + 19;\n this.startYear = startYear;\n this.endYear = endYear;\n this.generateYears();\n };\n DatePickerComponent.prototype.generateYears = function () {\n if (this.fromDate && this.startYear < this.fromDate.getFullYear()) {\n this.startYear = this.fromDate.getFullYear();\n }\n if (this.toDate && this.endYear > this.toDate.getFullYear()) {\n this.endYear = this.toDate.getFullYear();\n }\n this.years = [];\n for (var i = this.startYear; i <= this.endYear; i++) {\n this.years.push(i);\n }\n };\n DatePickerComponent.prototype.showPreviousYears = function () {\n this.endYear = this.startYear - 1;\n this.startYear = this.endYear - 19;\n this.generateYears();\n };\n DatePickerComponent.prototype.showNextYears = function () {\n this.startYear = this.endYear + 1;\n this.endYear = this.startYear + 19;\n this.generateYears();\n };\n DatePickerComponent.prototype.hasPreviousYears = function () {\n if (!this.fromDate) {\n return true;\n }\n return this.startYear > this.fromDate.getFullYear();\n };\n DatePickerComponent.prototype.hasNextYears = function () {\n if (!this.toDate) {\n return true;\n }\n return this.endYear < this.toDate.getFullYear();\n };\n DatePickerComponent.prototype.selectMonth = function (month) {\n var _this = this;\n if (!this.isValidMonth(month - 1)) {\n return;\n }\n this.monthSelected = month;\n this.createCalendarWeeks();\n setTimeout(function () {\n _this.showView = 'calendar';\n }, 200);\n };\n DatePickerComponent.prototype.selectYear = function (year) {\n var _this = this;\n this.yearSelected = year;\n this.createCalendarWeeks();\n setTimeout(function () {\n _this.showView = 'calendar';\n }, 200);\n };\n DatePickerComponent.prototype.resetView = function () {\n this.showView = 'calendar';\n };\n DatePickerComponent.prototype.isToday = function (day) {\n return this.yearSelected === this.currentYear && this.monthSelected === this.currentMonth && this.currentDay === day;\n };\n DatePickerComponent.prototype.generateCalendarWeeks = function (forDay) {\n var weeks = [];\n var month = Calendar.months(1, forDay);\n var numOfWeeks = month.days.length / 7;\n var dayIndex = 0;\n for (var week = 0; week < numOfWeeks; week++) {\n var days = [];\n for (var day = 0; day < 7; day++) {\n days.push(month.days[dayIndex]);\n dayIndex++;\n }\n weeks.push(days);\n }\n return weeks;\n };\n DatePickerComponent.prototype.isValidDay = function (day) {\n if (!this.toDate && !this.fromDate) {\n return true;\n }\n if (this.toDate && this.fromDate) {\n return day.toDate() >= this.fromDate && day.toDate() <= this.toDate;\n }\n if (this.toDate) {\n return day.toDate() <= this.toDate;\n }\n if (this.fromDate) {\n return day.toDate() >= this.fromDate;\n }\n };\n DatePickerComponent.prototype.isValidMonth = function (index) {\n if (this.toDate && this.toDate.getFullYear() !== this.yearSelected && this.fromDate && this.fromDate.getFullYear() !== this.yearSelected) {\n return true;\n }\n if (!this.toDate && !this.fromDate) {\n return true;\n }\n if (this.fromDate && !this.toDate) {\n return new Date(this.yearSelected, index, 1) >= this.fromDate;\n }\n if (this.toDate && !this.fromDate) {\n return new Date(this.yearSelected, index, 1) <= this.toDate;\n }\n return new Date(this.yearSelected, index, 1) >= this.fromDate &&\n new Date(this.yearSelected, index, 1) <= this.toDate;\n };\n //Styles\n //Styles\n DatePickerComponent.prototype.getDayStyle = \n //Styles\n function (day) {\n var style = {};\n if (this.isToday(day.dayOfMonth)) {\n style = this.todaysItemStyle;\n }\n if (this.daySelected && day.dayIdentifier === this.daySelected.dayIdentifier) {\n style = __assign({}, style, this.itemSelectedStyle);\n }\n return style;\n };\n DatePickerComponent.prototype.getMonthStyle = function (index) {\n var style = {};\n style = __assign({}, style, this.monthLabelsStyle);\n if (index === this.currentMonth - 1) {\n style = __assign({}, style, this.todaysItemStyle);\n }\n if (index === this.monthSelected - 1) {\n style = __assign({}, style, this.itemSelectedStyle);\n }\n return style;\n };\n DatePickerComponent.prototype.getYearStyle = function (year) {\n var style = {};\n style = __assign({}, style, this.yearLabelsStyle);\n if (year === this.currentYear) {\n style = __assign({}, style, this.todaysItemStyle);\n }\n if (year === this.yearSelected) {\n style = __assign({}, style, this.itemSelectedStyle);\n }\n return style;\n };\n //End of styles\n DatePickerComponent.decorators = [\n { type: Component, args: [{\n selector: 'ionic-calendar-date-picker',\n template: HTML_CODE,\n styles: [CSS_STYLE]\n },] },\n ];\n /** @nocollapse */\n DatePickerComponent.ctorParameters = function () { return []; };\n DatePickerComponent.propDecorators = {\n \"monthLabels\": [{ type: Input },],\n \"dayLabels\": [{ type: Input },],\n \"date\": [{ type: Input },],\n \"fromDate\": [{ type: Input },],\n \"toDate\": [{ type: Input },],\n \"backgroundStyle\": [{ type: Input },],\n \"notInCalendarStyle\": [{ type: Input },],\n \"dayLabelsStyle\": [{ type: Input },],\n \"monthLabelsStyle\": [{ type: Input },],\n \"yearLabelsStyle\": [{ type: Input },],\n \"itemSelectedStyle\": [{ type: Input },],\n \"todaysItemStyle\": [{ type: Input },],\n \"onSelect\": [{ type: Output },],\n };\n return DatePickerComponent;\n}());\nexport { DatePickerComponent };\n//# sourceMappingURL=date-picker-component.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ionic-calendar-date-picker/dist/components/date-picker-component.js\n// module id = 997\n// module chunks = 2","\"use strict\";\nexport * from './Calendar';\nexport * from './CalendarDay';\nexport * from './CalendarEvent';\nexport * from './Event';\nexport * from './Constants';\nexport * from './Day';\nexport * from './DaySpan';\nexport * from './Functions';\nexport * from './Identifier';\nexport * from './Iterator';\nexport * from './Month';\nexport * from './Operation';\nexport * from './Parse';\nexport * from './Pattern';\nexport * from './Schedule';\nexport * from './ScheduleModifier';\nexport * from './Sort';\nexport * from './Suffix';\nexport * from './Time';\nexport * from './Units';\nexport * from './Weekday';\n//# sourceMappingURL=index.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/index.js\n// module id = 998\n// module chunks = 2","\"use strict\";\nimport { Functions as fn } from './Functions';\nimport { Day } from './Day';\nimport { DaySpan } from './DaySpan';\nimport { Op } from './Operation';\nimport { Units } from './Units';\nimport { Parse } from './Parse';\nimport { Constants } from './Constants';\nimport { CalendarDay } from './CalendarDay';\nimport { CalendarEvent } from './CalendarEvent';\nimport { Iterator, IteratorAction } from './Iterator';\n/**\n * A collection of [[CalendarDay]]s, the events on the calendar, and all\n * [[CalendarEvent]]s generated based on the events.\n *\n * @typeparam T The type of data stored in the [[Event]] class.\n * @typeparam M The type of metadata stored in the schedule.\n */\nvar Calendar = (function () {\n /**\n * Creates a new calendar given a span, type, size, moving functions, and\n * optionally some default properties for the calendar.\n *\n * @param start The first day on the calendar.\n * @param end The last day on the calendar.\n * @param type The calendar type used for describing the calendar and splitting it.\n * @param size The number of calendar types in this calendar.\n * @param moveStart The function to move the start day.\n * @param moveEnd The function to move the end by.\n * @param input The default properties for this calendar.\n * @see [[Calendar.start]]\n * @see [[Calendar.end]]\n * @see [[Calendar.type]]\n * @see [[Calendar.size]]\n * @see [[Calendar.moveStart]]\n * @see [[Calendar.moveEnd]]\n */\n function Calendar(start, end, type, size, moveStart, moveEnd, input) {\n /**\n * If the calendar should be filled in so the first day of the calendar is\n * Sunday and the last day is Saturday.\n */\n this.fill = false;\n /**\n * The minimum number of days in the calendar no matter what the type or size\n * is. This can be used to display a month with a constant number of weeks -\n * because not all months contain the same number of weeks.\n */\n this.minimumSize = 0;\n /**\n * When `true` a [[CalendarEvent]] instance exists on each [[CalendarDay]]\n * the event covers even if the event didn't start on that day.\n */\n this.repeatCovers = true;\n /**\n * When `true` an event instance will be created for each time specified on\n * the schedule. If the schedule specifies an all day event then only one\n * event is added to a day. This is typically done when displaying days or\n * weeks and events can be displayed on a timeline.\n */\n this.listTimes = false;\n /**\n * When `true` events will be added to days \"outside\" the calendar. Days\n * outside the calendar are days filled in when [[Calendar.fill]] is `true`.\n * More specifically days that are in [[Calendar.filled]] and not in\n * [[Calendar.span]].\n */\n this.eventsOutside = false;\n /**\n * When `true` [[CalendarEvent.row]] will be set so when visually displaying\n * the event with others multi-day events will align and not overlap.\n */\n this.updateRows = false;\n /**\n * When `true` [[CalendarEvent.col]] will be set so when visually displaying\n * the event based on start and end time any events that overlap with each\n * other will be \"indented\" to see the event below it.\n */\n this.updateColumns = false;\n /**\n * The function (if any) which sorts the events on a calendar day.\n */\n this.eventSorter = null;\n /**\n * A function to use when parsing meta input into the desired type.\n *\n * @param input The input to parse.\n * @returns The meta parsed from the given input, if any.\n */\n this.parseMeta = (function (x) { return x; });\n /**\n * A function to use when parsing meta input into the desired type.\n *\n * @param input The input to parse.\n * @returns The meta parsed from the given input, if any.\n */\n this.parseData = (function (x) { return x; });\n /**\n * A selection of days on the calendar. If no days are selected this is `null`.\n * This is merely used to keep the selection flags in [[CalendarDay]] updated\n * via [[Calendar.refreshSelection]].\n */\n this.selection = null;\n /**\n * The array of days in this calendar and their events.\n */\n this.days = [];\n /**\n * The array of scheduled events added to the calendar.\n */\n this.events = [];\n /**\n * The array of visible events on the calendar. This is built based on the\n * span of the schedule in the given event and also the [[Event.visible]] flag.\n */\n this.visible = [];\n this.span = new DaySpan(start, end);\n this.filled = new DaySpan(start, end);\n this.type = type;\n this.size = size;\n this.moveStart = moveStart;\n this.moveEnd = moveEnd;\n if (fn.isDefined(input)) {\n this.set(input);\n }\n else {\n this.refresh();\n }\n }\n /**\n * Changes the calendar possibly morphing it to a different type or size if\n * specified in the given input. If the type and size are not morphed then\n * the following properties may be updated:\n *\n * - [[Calendar.fill]]\n * - [[Calendar.minimumSize]]\n * - [[Calendar.repeatCovers]]\n * - [[Calendar.listTimes]]\n * - [[Calendar.eventsOutside]]\n * - [[Calendar.updateRows]]\n * - [[Calendar.updateColumns]]\n * - [[Calendar.eventSorter]]\n * - [[Calendar.events]]\n * - [[Calendar.parseData]]\n * - [[Calendar.parseMeta]]\n *\n * If [[CalendarInput.delayRefresh]] is not given with `true` then\n * [[Calendar.refresh]] will be called once the calendar properties have been\n * updated.\n *\n * @param input The new properties for this calendar to overwrite with.\n */\n Calendar.prototype.set = function (input) {\n var typeChange = fn.isDefined(input.type) && input.type !== this.type;\n var sizeChange = fn.isDefined(input.size) && input.size !== this.size;\n if (typeChange || sizeChange) {\n var focus_1 = fn.coalesce(input.otherwiseFocus, 0.4999);\n var prefer = fn.coalesce(input.preferToday, true);\n var size = fn.coalesce(input.size, this.size);\n var type = fn.coalesce(input.type, this.type);\n var around = fn.coalesce(input.around, this.days[Math.floor((this.days.length - 1) * focus_1)]);\n var today = Day.today();\n if (!around || (prefer && this.span.matchesDay(today))) {\n around = today;\n }\n var meta = Calendar.TYPES[type];\n var start = meta.getStart(Day.parse(around), size, focus_1);\n var end = meta.getEnd(start, size, focus_1);\n this.span.start = start;\n this.span.end = end;\n this.type = type;\n this.size = size;\n this.moveStart = meta.moveStart;\n this.moveEnd = meta.moveEnd;\n }\n else if (input.around) {\n var focus_2 = fn.coalesce(input.otherwiseFocus, 0.4999);\n var around = Day.parse(input.around);\n var type = this.type;\n var size = this.size;\n var meta = Calendar.TYPES[type];\n var start = meta.getStart(around, size, focus_2);\n var end = meta.getEnd(start, size, focus_2);\n this.span.start = start;\n this.span.end = end;\n }\n this.fill = fn.coalesce(input.fill, this.fill);\n this.minimumSize = fn.coalesce(input.minimumSize, this.minimumSize);\n this.repeatCovers = fn.coalesce(input.repeatCovers, this.repeatCovers);\n this.listTimes = fn.coalesce(input.listTimes, this.listTimes);\n this.eventsOutside = fn.coalesce(input.eventsOutside, this.eventsOutside);\n this.updateRows = fn.coalesce(input.updateRows, this.updateRows);\n this.updateColumns = fn.coalesce(input.updateColumns, this.updateColumns);\n this.eventSorter = fn.coalesce(input.eventSorter, this.eventSorter);\n this.parseMeta = fn.coalesce(input.parseMeta, this.parseMeta);\n this.parseData = fn.coalesce(input.parseData, this.parseData);\n if (fn.isArray(input.events)) {\n this.setEvents(input.events, true);\n }\n if (!input.delayRefresh) {\n this.refresh();\n }\n return this;\n };\n /**\n * Sets the [[Calendar.minimumSize]] value and returns `this` for method\n * chaining.\n *\n * @param minimumSize The new value.\n */\n Calendar.prototype.withMinimumSize = function (minimumSize) {\n this.minimumSize = minimumSize;\n this.refresh();\n return this;\n };\n /**\n * Sets the [[Calendar.repeatCovers]] value and returns `this` for method\n * chaining.\n *\n * @param repeatCovers The new value.\n */\n Calendar.prototype.withRepeatCovers = function (repeatCovers) {\n this.repeatCovers = repeatCovers;\n this.refreshEvents();\n return this;\n };\n /**\n * Sets the [[Calendar.listTimes]] value and returns `this` for method\n * chaining.\n *\n * @param listTimes The new value.\n */\n Calendar.prototype.withListTimes = function (listTimes) {\n this.listTimes = listTimes;\n this.refreshEvents();\n return this;\n };\n /**\n * Sets the [[Calendar.eventsOutside]] value and returns `this` for method\n * chaining.\n *\n * @param eventsOutside The new value.\n */\n Calendar.prototype.withEventsOutside = function (eventsOutside) {\n this.eventsOutside = eventsOutside;\n this.refreshEvents();\n return this;\n };\n /**\n * Sets the [[Calendar.updateRows]] value and returns `this` for method\n * chaining.\n *\n * @param updateRows The new value.\n * @param refresh If the rows should be updated now if `updateRows` is `true`.\n */\n Calendar.prototype.withUpdateRows = function (updateRows, refresh) {\n if (refresh === void 0) { refresh = true; }\n this.updateRows = updateRows;\n if (refresh && updateRows) {\n this.refreshRows();\n }\n return this;\n };\n /**\n * Sets the [[Calendar.updateColumns]] value and returns `this` for method\n * chaining.\n *\n * @param updateColumns The new value.\n * @param refresh If the columns should be updated now if `updateColumns` is\n * `true`.\n */\n Calendar.prototype.withUpdateColumns = function (updateColumns, refresh) {\n if (refresh === void 0) { refresh = true; }\n this.updateColumns = updateColumns;\n if (refresh && updateColumns) {\n this.refreshColumns();\n }\n return this;\n };\n Object.defineProperty(Calendar.prototype, \"start\", {\n /**\n * Returns the start day of the calendar. If this calendar is filled, this\n * may not represent the very first day in the calendar.\n */\n get: function () {\n return this.span.start;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Calendar.prototype, \"end\", {\n /**\n * Returns the end day of the calendar. If this calendar is filled, this\n * may not represent the very last day in the calendar.\n */\n get: function () {\n return this.span.end;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns the summary of the span of time this calendar represents.\n *\n * @param dayOfWeek [[DaySpan.summary]]\n * @param short [[DaySpan.summary]]\n * @param repeat [[DaySpan.summary]]\n * @param contextual [[DaySpan.summary]]\n * @param delimiter [[DaySpan.summary]]\n * @see [[DaySpan.summary]]\n */\n Calendar.prototype.summary = function (dayOfWeek, short, repeat, contextual, delimiter) {\n if (dayOfWeek === void 0) { dayOfWeek = true; }\n if (short === void 0) { short = false; }\n if (repeat === void 0) { repeat = false; }\n if (contextual === void 0) { contextual = true; }\n if (delimiter === void 0) { delimiter = ' - '; }\n return this.span.summary(this.type, dayOfWeek, short, repeat, contextual, delimiter);\n };\n /**\n * Splits up this calendar into an iterable collection of calendars. The\n * resulting iterator will return `size / by` number of calendars.\n *\n * @param by The new size of the resulting calendars. If the the size of the\n * current calendar is not divisible by this value the resulting calendars\n * may cover more or less than this calendar covers.\n * @returns An iterator for the calendars produced.\n */\n Calendar.prototype.split = function (by) {\n var _this = this;\n if (by === void 0) { by = 1; }\n return new Iterator(function (iterator) {\n var start = _this.start;\n var end = _this.moveEnd(_this.end, by - _this.size);\n for (var i = 0; i < _this.size; i++) {\n var calendar = new Calendar(start, end, _this.type, by, _this.moveStart, _this.moveEnd, _this);\n if (iterator.act(calendar) === IteratorAction.Stop) {\n return;\n }\n start = _this.moveStart(start, by);\n end = _this.moveEnd(end, by);\n }\n });\n };\n /**\n * Refreshes the days and events in this calendar based on the start and end\n * days, the calendar properties, and its eventss.\n *\n * @param today The current day to update the calendar days via\n * [[CalendarDay.updateCurrent]].\n */\n Calendar.prototype.refresh = function (today) {\n if (today === void 0) { today = Day.today(); }\n this.length = this.span.days(Op.UP, true);\n this.resetDays();\n this.refreshCurrent(today);\n this.refreshSelection();\n this.refreshVisible();\n this.refreshEvents();\n return this;\n };\n /**\n * Updates the [[Calendar.filled]] span based on [[Calendar.start]],\n * [[Calendar.end]], and [[Calendar.fill]] properties.\n */\n Calendar.prototype.resetFilled = function () {\n this.filled.start = this.fill ? this.start.startOfWeek() : this.start;\n this.filled.end = this.fill ? this.end.endOfWeek() : this.end;\n return this;\n };\n /**\n * Updates [[Calendar.days]] to match the span of days in the calendar.\n */\n Calendar.prototype.resetDays = function () {\n this.resetFilled();\n var days = this.days;\n var filled = this.filled;\n var current = filled.start;\n var daysBetween = filled.days(Op.UP);\n var total = Math.max(this.minimumSize, daysBetween);\n for (var i = 0; i < total; i++) {\n var day = days[i];\n if (!day || !day.sameDay(current)) {\n day = new CalendarDay(current.date);\n if (i < days.length) {\n days.splice(i, 1, day);\n }\n else {\n days.push(day);\n }\n }\n day.inCalendar = this.span.contains(day);\n current = current.next();\n }\n if (days.length > total) {\n days.splice(total, days.length - total);\n }\n return this;\n };\n /**\n * Updates the list of visible schedules.\n */\n Calendar.prototype.refreshVisible = function () {\n var start = this.filled.start;\n var end = this.filled.end;\n this.visible = this.events.filter(function (e) {\n return e.visible && e.schedule.matchesRange(start, end);\n });\n return this;\n };\n /**\n * Updates the days with the current day via [[CalendarDay.updateCurrent]].\n *\n * @param today The new current day.\n */\n Calendar.prototype.refreshCurrent = function (today) {\n if (today === void 0) { today = Day.today(); }\n this.iterateDays().iterate(function (d) {\n d.updateCurrent(today);\n });\n return this;\n };\n /**\n * Updates the selection flags in [[CalendarDay]] based on the\n * [[Calendar.selection]] property.\n */\n Calendar.prototype.refreshSelection = function () {\n var _this = this;\n this.iterateDays().iterate(function (d) {\n if (_this.selection) {\n d.updateSelected(_this.selection);\n }\n else {\n d.clearSelected();\n }\n });\n return this;\n };\n /**\n * Updates the [[CalendarDay.events]] based on the events in this calendar\n * and the following properties:\n *\n * - [[Calendar.eventsForDay]]\n * - [[Calendar.eventsOutside]]\n * - [[Calendar.listTimes]]\n * - [[Calendar.repeatCovers]]\n * - [[Calendar.updateRows]]\n * - [[Calendar.updateColumns]]\n */\n Calendar.prototype.refreshEvents = function () {\n var _this = this;\n this.iterateDays().iterate(function (d) {\n if (d.inCalendar || _this.eventsOutside) {\n d.events = _this.eventsForDay(d, _this.listTimes, _this.repeatCovers);\n }\n });\n if (this.updateRows) {\n this.refreshRows();\n }\n if (this.updateColumns) {\n this.refreshColumns();\n }\n return this;\n };\n /**\n * Refreshes the [[CalendarEvent.row]] property as described in the link.\n */\n Calendar.prototype.refreshRows = function () {\n var eventToRow = {};\n var onlyFullDay = this.listTimes;\n this.iterateDays().iterate(function (d) {\n if (d.dayOfWeek === 0) {\n eventToRow = {};\n }\n var used = {};\n for (var _i = 0, _a = d.events; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n if (onlyFullDay && !event_1.fullDay) {\n continue;\n }\n if (event_1.id in eventToRow) {\n used[event_1.row = eventToRow[event_1.id]] = true;\n }\n }\n var rowIndex = 0;\n for (var _b = 0, _c = d.events; _b < _c.length; _b++) {\n var event_2 = _c[_b];\n if ((onlyFullDay && !event_2.fullDay) || event_2.id in eventToRow) {\n continue;\n }\n while (used[rowIndex]) {\n rowIndex++;\n }\n eventToRow[event_2.id] = event_2.row = rowIndex;\n rowIndex++;\n }\n });\n return this;\n };\n /**\n * Refreshes the [[CalendarEvent.col]] property as described in the link.\n */\n Calendar.prototype.refreshColumns = function () {\n this.iterateDays().iterate(function (d) {\n var markers = [];\n for (var _i = 0, _a = d.events; _i < _a.length; _i++) {\n var event_3 = _a[_i];\n if (!event_3.fullDay) {\n markers.push({\n time: event_3.time.start.time,\n event: event_3,\n start: true,\n parent: null\n });\n markers.push({\n time: event_3.time.end.time - 1,\n event: event_3,\n start: false,\n parent: null\n });\n }\n }\n markers.sort(function (a, b) {\n return a.time - b.time;\n });\n var parent = null;\n for (var _b = 0, markers_1 = markers; _b < markers_1.length; _b++) {\n var marker = markers_1[_b];\n if (marker.start) {\n marker.parent = parent;\n parent = marker;\n }\n else if (parent) {\n parent = parent.parent;\n }\n }\n for (var _c = 0, markers_2 = markers; _c < markers_2.length; _c++) {\n var marker = markers_2[_c];\n if (marker.start) {\n marker.event.col = marker.parent ? marker.parent.event.col + 1 : 0;\n }\n }\n });\n return this;\n };\n /**\n * Gets the calendar day for the given day.\n *\n * @param input The day to get the calendar day for.\n * @returns The reference to the calendar day, or null if the given input\n * is not on this calendar.\n */\n Calendar.prototype.getDay = function (input) {\n var parsed = Day.parse(input);\n if (parsed) {\n var dayCount = parsed.start().daysBetween(this.days[0], Op.DOWN, false);\n return this.days[dayCount];\n }\n return null;\n };\n /**\n * Iterates over all days in this calendar and passes each day to `iterator`.\n *\n * @param iterator The function to pass [[CalendarDay]]s to.\n */\n Calendar.prototype.iterateDays = function () {\n var _this = this;\n return new Iterator(function (iterator) {\n var days = _this.days;\n for (var i = 0; i < days.length; i++) {\n switch (iterator.act(days[i])) {\n case IteratorAction.Stop:\n return;\n }\n }\n });\n };\n /**\n * Returns the events for the given day optionally looking at schedule times,\n * optionally looking at events which cover multiple days, and optionally\n * sorted with the given function.\n *\n * @param day The day to find events for.\n * @param getTimes When `true` an event is added to the result for each time\n * specified in the schedule.\n * @param covers When `true` events which don't start on the given day but do\n * overlap are added to the result.\n * @param sorter The function to sort the events by, if any.\n * @returns An array of events that occurred on the given day.\n */\n Calendar.prototype.eventsForDay = function (day, getTimes, covers, sorter) {\n if (getTimes === void 0) { getTimes = true; }\n if (covers === void 0) { covers = true; }\n if (sorter === void 0) { sorter = this.eventSorter; }\n var events = [];\n var entries = this.visible;\n var _loop_1 = function (entryIndex) {\n var entry = entries[entryIndex];\n var schedule = entry.schedule;\n var eventId = entryIndex * Constants.MAX_EVENTS_PER_DAY;\n var timeIndex = 0;\n schedule.iterateSpans(day, covers).iterate(function (span, iterator) {\n events.push(new CalendarEvent(eventId + timeIndex++, entry, span, day));\n if (!getTimes) {\n iterator.stop();\n }\n });\n };\n for (var entryIndex = 0; entryIndex < entries.length; entryIndex++) {\n _loop_1(entryIndex);\n }\n if (sorter) {\n events.sort(sorter);\n }\n return events;\n };\n /**\n * Finds the event given one of the ways to identify the event.\n *\n * @param input The value to use to search for an event.\n * @returns The refrence to the event or null if not found.\n */\n Calendar.prototype.findEvent = function (id) {\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\n var event_4 = _a[_i];\n if (event_4 === id || event_4.schedule === id || event_4.data === id || event_4.id === id) {\n return event_4;\n }\n }\n return null;\n };\n /**\n * Removes the list of events if they exist in the calendar.\n *\n * @param events The array of events to remove if they exist. If no\n * events are passed (via `null`) then all events will be removed\n * from the calendar.\n * @param delayRefresh When `true` the [[Calendar.refreshEvents]] will not be\n * called after the events are removed.\n * @see [[Calendar.removeEvent]]\n * @see [[Calendar.refreshEvents]]\n */\n Calendar.prototype.removeEvents = function (events, delayRefresh) {\n if (events === void 0) { events = null; }\n if (delayRefresh === void 0) { delayRefresh = false; }\n if (events) {\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_5 = events_1[_i];\n this.removeEvent(event_5, true);\n }\n }\n else {\n this.events = [];\n }\n this.refreshVisible();\n if (!delayRefresh) {\n this.refreshEvents();\n }\n return this;\n };\n /**\n * Removes the given event if it exists on the calendar.\n *\n * @param event The event to remove if it exists.\n * @param delayRefresh When `true` the [[Calendar.refreshEvents]] will not be\n * called after the event is removed.\n * @see [[Calendar.refreshEvents]]\n */\n Calendar.prototype.removeEvent = function (event, delayRefresh) {\n if (delayRefresh === void 0) { delayRefresh = false; }\n var found = this.findEvent(event);\n if (found) {\n this.events.splice(this.events.indexOf(found), 1);\n this.refreshVisible();\n if (!delayRefresh) {\n this.refreshEvents();\n }\n }\n return this;\n };\n /**\n * Adds the given event to this calendar if it doesn't exist already (or\n * `allowDuplicates` is `true`).\n *\n * @param event The event to add to the calendar.\n * @param allowDuplicates If an event can be added more than once.\n * @param delayRefresh When `true` the [[Calendar.refreshEvents]] will not be\n * called after the event is added.\n * @see [[Calendar.refreshEvents]]\n */\n Calendar.prototype.addEvent = function (event, allowDuplicates, delayRefresh) {\n if (allowDuplicates === void 0) { allowDuplicates = false; }\n if (delayRefresh === void 0) { delayRefresh = false; }\n var parsed = Parse.event(event, this.parseData, this.parseMeta);\n if (!allowDuplicates) {\n var existing = this.findEvent(parsed);\n if (existing) {\n return this;\n }\n }\n this.events.push(parsed);\n this.refreshVisible();\n if (!delayRefresh) {\n this.refreshEvents();\n }\n return this;\n };\n /**\n * Adds the given events to this calendar if they don't exist already (or\n * `allowDuplicates` is `true`).\n *\n * @param events The events to add to the calendar.\n * @param allowDuplicates If an event can be added more than once.\n * @param delayRefresh When `true` the [[Calendar.refreshEvents]] will not be\n * called after the events are added.\n * @see [[Calendar.refreshEvents]]\n */\n Calendar.prototype.addEvents = function (events, allowDuplicates, delayRefresh) {\n if (allowDuplicates === void 0) { allowDuplicates = false; }\n if (delayRefresh === void 0) { delayRefresh = false; }\n for (var _i = 0, events_2 = events; _i < events_2.length; _i++) {\n var event_6 = events_2[_i];\n this.addEvent(event_6, allowDuplicates, true);\n }\n if (!delayRefresh) {\n this.refreshEvents();\n }\n return this;\n };\n /**\n * Sets the given events to this calendar replacing the current list of\n * events.\n *\n * @param events The events to set to the calendar.\n * @param delayRefresh When `true` the [[Calendar.refreshEvents]] will not be\n * called after the events are added.\n * @see [[Calendar.refreshEvents]]\n */\n Calendar.prototype.setEvents = function (events, delayRefresh) {\n if (delayRefresh === void 0) { delayRefresh = false; }\n var parsedEvents = [];\n for (var i = 0; i < events.length; i++) {\n var parsed = Parse.event(events[i], this.parseData, this.parseMeta);\n if (parsed) {\n parsedEvents.push(parsed);\n }\n }\n this.events = parsedEvents;\n this.refreshVisible();\n if (!delayRefresh) {\n this.refreshEvents();\n }\n return this;\n };\n /**\n * Sets the selection point or range of the calendar and updates the flags\n * in the days.\n *\n * @param start The start of the selection.\n * @param end The end of the selection.\n * @see [[Calendar.refreshSelection]]\n */\n Calendar.prototype.select = function (start, end) {\n if (end === void 0) { end = start; }\n this.selection = new DaySpan(start, end);\n this.refreshSelection();\n return this;\n };\n /**\n * Sets the selection of the calendar to nothing.\n *\n * @see [[Calendar.refreshSelection]]\n */\n Calendar.prototype.unselect = function () {\n this.selection = null;\n this.refreshSelection();\n return this;\n };\n /**\n * Shifts the calendar days by the given amount.\n *\n * @param jump The amount to shift the calendar by.\n * @param delayRefresh When `true` [[Calendar.refresh]] will not be called\n * after calendar is moved.\n */\n Calendar.prototype.move = function (jump, delayRefresh) {\n if (jump === void 0) { jump = this.size; }\n if (delayRefresh === void 0) { delayRefresh = false; }\n this.span.start = this.moveStart(this.start, jump);\n this.span.end = this.moveEnd(this.end, jump);\n if (!delayRefresh) {\n this.refresh();\n }\n return this;\n };\n /**\n * Moves the calenndar to the next set of days.\n *\n * @param jump The amount to shift the calendar by.\n * @param delayRefresh When `true` [[Calendar.refresh]] will not be called\n * after calendar is moved.\n */\n Calendar.prototype.next = function (jump, delayRefresh) {\n if (jump === void 0) { jump = this.size; }\n if (delayRefresh === void 0) { delayRefresh = false; }\n return this.move(jump, delayRefresh);\n };\n /**\n * Moves the calenndar to the previous set of days.\n *\n * @param jump The amount to shift the calendar by.\n * @param delayRefresh When `true` [[Calendar.refresh]] will not be called\n * after calendar is moved.\n */\n Calendar.prototype.prev = function (jump, delayRefresh) {\n if (jump === void 0) { jump = this.size; }\n if (delayRefresh === void 0) { delayRefresh = false; }\n return this.move(-jump, delayRefresh);\n };\n /**\n * Converts this calendar to input which can be used to later recreate this\n * calendar. The only properties of the calendar which will be loss is the\n * [[Calendar.eventSorter]] property because it is a function.\n *\n * @param plain If the returned input should be plain objects as opposed\n * to [[Day]] and [[Event]] instances.\n * @param plainData A function to convert [[Event.data]] to a plain object if\n * it is not already.\n * @param plainMeta A function to convert values in [[Schedule.meta]] to plain\n * objects if they are not alreday.\n * @returns The input generated from this calendar.\n */\n Calendar.prototype.toInput = function (plain, plainData, plainMeta) {\n if (plain === void 0) { plain = false; }\n if (plainData === void 0) { plainData = function (d) { return d; }; }\n if (plainMeta === void 0) { plainMeta = function (m) { return m; }; }\n var out = {};\n out.type = this.type;\n out.size = this.size;\n out.fill = this.fill;\n out.minimumSize = this.minimumSize;\n out.repeatCovers = this.repeatCovers;\n out.listTimes = this.listTimes;\n out.eventsOutside = this.eventsOutside;\n out.updateRows = this.updateRows;\n out.updateColumns = this.updateColumns;\n out.around = plain ? this.span.start.time : this.span.start;\n out.events = [];\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\n var event_7 = _a[_i];\n if (plain) {\n var plainEvent = {};\n if (fn.isDefined(event_7.id)) {\n plainEvent.id = event_7.id;\n }\n if (fn.isDefined(event_7.data)) {\n plainEvent.data = plainData(event_7.data);\n }\n if (!event_7.visible) {\n plainEvent.visible = event_7.visible;\n }\n plainEvent.schedule = event_7.schedule.toInput();\n var meta = plainEvent.schedule.meta;\n if (meta) {\n for (var identifier in meta) {\n meta[identifier] = plainMeta(meta[identifier]);\n }\n }\n out.events.push(plainEvent);\n }\n else {\n out.events.push(event_7);\n }\n }\n return out;\n };\n /**\n * Creates a calendar based on the given input.\n *\n * @param input The input which has at least the `type` specified.\n * @returns A new calendar instance.\n */\n Calendar.fromInput = function (input) {\n var initial = Day.today();\n return new Calendar(initial, initial, null, 1, null, null, input);\n };\n /**\n * Creates a calendar based around a given unit optionally focused around a\n * given day.\n *\n * @param type The unit of the calendar.\n * @param days The number of units in the calendar.\n * @param around The day to focus the calendar on.\n * @param focus The value which describes how months are added around the given\n * day. The default value will center the calendar around the given day.\n * When the value is `0` the given day is the first day in the calendar,\n * and when the value is `1` the given day is the last day in the calendar.\n * @param input The default properties for the calendar.\n * @returns A new calendar instance.\n */\n Calendar.forType = function (type, size, around, focus, input) {\n if (size === void 0) { size = 1; }\n if (around === void 0) { around = Day.today(); }\n if (focus === void 0) { focus = 0.49999; }\n var meta = this.TYPES[type];\n var start = meta.getStart(around, size, focus);\n var end = meta.getEnd(start, size, focus);\n return new Calendar(start, end, type, size, meta.moveStart, meta.moveEnd, input || meta.defaultInput);\n };\n /**\n * Creates a calendar based around days optionally focused around a given day.\n *\n * @param days The number of days in the calendar.\n * @param around The day to focus the calendar on.\n * @param focus The value which describes how days are added around the given\n * day. The default value will center the calendar around the given day.\n * When the value is `0` the given day is the first day in the calendar,\n * and when the value is `1` the given day is the last day in the calendar.\n * @param input The default properties for the calendar.\n * @returns A new calendar instance.\n * @see [[Calendar.forType]]\n */\n Calendar.days = function (days, around, focus, input) {\n if (days === void 0) { days = 1; }\n if (around === void 0) { around = Day.today(); }\n if (focus === void 0) { focus = 0.4999; }\n return this.forType(Units.DAY, days, around, focus, input);\n };\n /**\n * Creates a calendar based around weeks optionally focused around a given day.\n *\n * @param days The number of weeks in the calendar.\n * @param around The day to focus the calendar on.\n * @param focus The value which describes how weeks are added around the given\n * day. The default value will center the calendar around the given day.\n * When the value is `0` the given day is the first day in the calendar,\n * and when the value is `1` the given day is the last day in the calendar.\n * @param input The default properties for the calendar.\n * @returns A new calendar instance.\n * @see [[Calendar.forType]]\n */\n Calendar.weeks = function (weeks, around, focus, input) {\n if (weeks === void 0) { weeks = 1; }\n if (around === void 0) { around = Day.today(); }\n if (focus === void 0) { focus = 0.4999; }\n return this.forType(Units.WEEK, weeks, around, focus, input);\n };\n /**\n * Creates a calendar based around months optionally focused around a given day.\n *\n * @param days The number of months in the calendar.\n * @param around The day to focus the calendar on.\n * @param focus The value which describes how months are added around the given\n * day. The default value will center the calendar around the given day.\n * When the value is `0` the given day is the first day in the calendar,\n * and when the value is `1` the given day is the last day in the calendar.\n * @param input The default properties for the calendar.\n * @returns A new calendar instance.\n * @see [[Calendar.forType]]\n */\n Calendar.months = function (months, around, focus, input) {\n if (months === void 0) { months = 1; }\n if (around === void 0) { around = Day.today(); }\n if (focus === void 0) { focus = 0.4999; }\n return this.forType(Units.MONTH, months, around, focus, input);\n };\n /**\n * Creates a calendar based around years optionally focused around a given day.\n *\n * @param days The number of years in the calendar.\n * @param around The day to focus the calendar on.\n * @param focus The value which describes how years are added around the given\n * day. The default value will center the calendar around the given day.\n * When the value is `0` the given day is the first day in the calendar,\n * and when the value is `1` the given day is the last day in the calendar.\n * @param input The default properties for the calendar.\n * @returns A new calendar instance.\n * @see [[Calendar.forType]]\n */\n Calendar.years = function (years, around, focus, input) {\n if (years === void 0) { years = 1; }\n if (around === void 0) { around = Day.today(); }\n if (focus === void 0) { focus = 0.4999; }\n return this.forType(Units.YEAR, years, around, focus, input);\n };\n /**\n * A map of functions and properties by [[Units]] used to create or morph\n * Calendars.\n */\n Calendar.TYPES = (_a = {},\n _a[Units.DAY] = {\n getStart: function (around, size, focus) {\n return around.start().relativeDays(-Math.floor(size * focus));\n },\n getEnd: function (start, size, focus) {\n return start.relativeDays(size - 1).end();\n },\n moveStart: function (day, amount) {\n return day.relativeDays(amount);\n },\n moveEnd: function (day, amount) {\n return day.relativeDays(amount);\n },\n defaultInput: undefined\n },\n _a[Units.WEEK] = {\n getStart: function (around, size, focus) {\n return around.start().startOfWeek().relativeWeeks(-Math.floor(size * focus));\n },\n getEnd: function (start, size, focus) {\n return start.relativeWeeks(size - 1).endOfWeek();\n },\n moveStart: function (day, amount) {\n return day.relativeWeeks(amount);\n },\n moveEnd: function (day, amount) {\n return day.relativeWeeks(amount);\n },\n defaultInput: undefined\n },\n _a[Units.MONTH] = {\n getStart: function (around, size, focus) {\n return around.start().startOfMonth().relativeMonths(-Math.floor(size * focus));\n },\n getEnd: function (start, size, focus) {\n return start.relativeMonths(size - 1).endOfMonth();\n },\n moveStart: function (day, amount) {\n return day.relativeMonths(amount);\n },\n moveEnd: function (day, amount) {\n return day.startOfMonth().relativeMonths(amount).endOfMonth();\n },\n defaultInput: { fill: true }\n },\n _a[Units.YEAR] = {\n getStart: function (around, size, focus) {\n return around.start().startOfYear().relativeYears(-Math.floor(size * focus));\n },\n getEnd: function (start, size, focus) {\n return start.relativeYears(size - 1).endOfYear();\n },\n moveStart: function (day, amount) {\n return day.relativeYears(amount);\n },\n moveEnd: function (day, amount) {\n return day.relativeYears(amount);\n },\n defaultInput: { fill: true }\n },\n _a);\n return Calendar;\n}());\nexport { Calendar };\nvar _a;\n//# sourceMappingURL=Calendar.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dayspan/lib/Calendar.js\n// module id = 999\n// module chunks = 2"],"sourceRoot":""}