diff options
89 files changed, 3464 insertions, 3946 deletions
@@ -7,7 +7,7 @@ Gogs (Go Git Service) is a painless self-hosted Git service.  -##### Current version: 0.6.3 Beta +##### Current version: 0.6.4 Beta ### NOTICES @@ -330,7 +330,7 @@ func runWeb(ctx *cli.Context) { m.Get("/template/*", dev.TemplatePreview) } - reqAdmin := middleware.RequireAdmin() + reqRepoAdmin := middleware.RequireRepoAdmin() // Organization. m.Group("/org", func() { @@ -405,7 +405,7 @@ func runWeb(ctx *cli.Context) { m.Post("/:name", repo.GitHooksEditPost) }, middleware.GitHookService()) }) - }, reqSignIn, middleware.RepoAssignment(true), reqAdmin) + }, reqSignIn, middleware.RepoAssignment(true), reqRepoAdmin) m.Group("/:username/:reponame", func() { m.Get("/action/:action", repo.Action) @@ -423,14 +423,15 @@ func runWeb(ctx *cli.Context) { m.Post("/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel) m.Post("/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel) m.Post("/delete", repo.DeleteLabel) - }) + }, reqRepoAdmin) m.Group("/milestones", func() { m.Get("/new", repo.NewMilestone) m.Post("/new", bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost) - m.Get("/:index/edit", repo.UpdateMilestone) - m.Post("/:index/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.UpdateMilestonePost) - m.Get("/:index/:action", repo.UpdateMilestone) - }) + m.Get("/:index/edit", repo.EditMilestone) + m.Post("/:index/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.EditMilestonePost) + m.Get("/:index/:action", repo.ChangeMilestonStatus) + m.Post("/delete", repo.DeleteMilestone) + }, reqRepoAdmin) m.Post("/comment/:action", repo.Comment) @@ -439,7 +440,7 @@ func runWeb(ctx *cli.Context) { m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost) m.Get("/edit/:tagname", repo.EditRelease) m.Post("/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost) - }, middleware.RepoRef()) + }, reqRepoAdmin, middleware.RepoRef()) }, reqSignIn, middleware.RepoAssignment(true)) m.Group("/:username/:reponame", func() { @@ -452,7 +453,6 @@ func runWeb(ctx *cli.Context) { m.Get("/branches", repo.Branches) m.Get("/archive/*", repo.Download) m.Get("/pulls2/", repo.PullRequest2) - m.Get("/milestone2/", repo.Milestones2) m.Head("/hooks/trigger", repo.TriggerHook) m.Group("", func() { diff --git a/conf/app.ini b/conf/app.ini index c5aeeb94..8710e3d0 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -299,5 +299,22 @@ ARGS = LANGS = en-US,zh-CN,zh-HK,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,ja-JP,es-ES,pt-BR,pl-PL,bg-BG,it-IT NAMES = English,简体中文,繁體中文,Deutsch,Français,Nederlands,Latviešu,Русский,日本语,Español,Português,Polski,български,Italiano +; Used for datetimepicker +[i18n.datelang] +en-US = en +zh-CN = zh +zh-HK = zh-TW +de-DE = de +fr-FR = fr +nl-NL = nl +lv-LV = lv +ru-RU = ru +ja-JP = ja +es-ES = es +pt-BR = pt-BR +pl-PL = pl +bg-BG = bg +it-IT = it + [other] SHOW_FOOTER_BRANDING = false
\ No newline at end of file diff --git a/conf/locale/locale_en-US.ini b/conf/locale/locale_en-US.ini index 70d27b53..63a61cf5 100644 --- a/conf/locale/locale_en-US.ini +++ b/conf/locale/locale_en-US.ini @@ -372,6 +372,7 @@ issues.close_tab = %d Closed issues.filter_label = Label issues.filter_label_no_select = No selected label issues.filter_milestone = Milestone +issues.filter_milestone_no_select = No selected milestone issues.filter_assignee = Assignee issues.filter_type = Type issues.filter_type.all_issues = All issues @@ -392,6 +393,30 @@ issues.label_deletion = Label Deletion issues.label_deletion_desc = Delete label will remove its information in all related issues. Do you want to continue? issues.label_deletion_success = Label has been deleted successfully! +milestones.new = New Milestone +milestones.open_tab = %d Open +milestones.close_tab = %d Closed +milestones.closed = Closed %s +milestones.no_due_date = No due date +milestones.open = Open +milestones.close = Close +milestones.new_subheader = Create milestones to organize your issues. +milestones.create = Create Milestone +milestones.title = Title +milestones.desc = Description +milestones.due_date = Due Date (optional) +milestones.clear = Clear +milestones.invalid_due_date_format = Due date format is invalid, must be 'mm/dd/year'. +milestones.create_success = Milestone '%s' has been created successfully! +milestones.edit = Edit Milestone +milestones.edit_subheader = Use better description for milestones so people won't be confused. +milestones.cancel = Cancel +milestones.modify = Modify Milestone +milestones.edit_success = Changes of milestone '%s' has been saved successfully! +milestones.deletion = Milestone Deletion +milestones.deletion_desc = Delete milestone will remove its information in all related issues. Do you want to continue? +milestones.deletion_success = Milestone has been deleted successfully! + settings = Settings settings.options = Options settings.collaboration = Collaboration diff --git a/config.codekit b/config.codekit index 0a461657..a9662e0e 100644 --- a/config.codekit +++ b/config.codekit @@ -95,15 +95,6 @@ "outputPathIsOutsideProject": 0, "outputPathIsSetByUser": 0 }, - "\/public\/css\/datepicker3.css": { - "fileType": 16, - "ignore": 0, - "ignoreWasSetByUser": 0, - "inputAbbreviatedPath": "\/public\/css\/datepicker3.css", - "outputAbbreviatedPath": "No Output Path", - "outputPathIsOutsideProject": 0, - "outputPathIsSetByUser": 0 - }, "\/public\/css\/font-awesome.min.css": { "fileType": 16, "ignore": 0, @@ -140,6 +131,15 @@ "outputPathIsOutsideProject": 0, "outputPathIsSetByUser": 0 }, + "\/public\/css\/jquery.datetimepicker.css": { + "fileType": 16, + "ignore": 0, + "ignoreWasSetByUser": 0, + "inputAbbreviatedPath": "\/public\/css\/jquery.datetimepicker.css", + "outputAbbreviatedPath": "No Output Path", + "outputPathIsOutsideProject": 0, + "outputPathIsSetByUser": 0 + }, "\/public\/css\/jquery.minicolors.css": { "fileType": 16, "ignore": 0, @@ -493,17 +493,6 @@ "outputPathIsOutsideProject": 0, "outputPathIsSetByUser": 0 }, - "\/public\/ng\/js\/gogs.js": { - "fileType": 64, - "ignore": 0, - "ignoreWasSetByUser": 0, - "inputAbbreviatedPath": "\/public\/ng\/js\/gogs.js", - "outputAbbreviatedPath": "\/public\/ng\/js\/min\/gogs-min.js", - "outputPathIsOutsideProject": 0, - "outputPathIsSetByUser": 0, - "outputStyle": 1, - "syntaxCheckerStyle": 1 - }, "\/public\/ng\/js\/gogs\/issue_label.js": { "fileType": 64, "ignore": 1, @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.6.3.0805 Beta" +const APP_VER = "0.6.4.0805 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/action.go b/models/action.go index 0d763be5..99cd1709 100644 --- a/models/action.go +++ b/models/action.go @@ -153,7 +153,7 @@ func updateIssuesCommit(userId, repoId int64, repoUserName, repoName string, com url := fmt.Sprintf("%s/%s/%s/commit/%s", setting.AppSubUrl, repoUserName, repoName, c.Sha1) message := fmt.Sprintf(`<a href="%s">%s</a>`, url, c.Message) - if _, err = CreateComment(userId, issue.RepoId, issue.ID, 0, 0, COMMENT_TYPE_COMMIT, message, nil); err != nil { + if _, err = CreateComment(userId, issue.RepoID, issue.ID, 0, 0, COMMENT_TYPE_COMMIT, message, nil); err != nil { return err } } @@ -183,7 +183,7 @@ func updateIssuesCommit(userId, repoId int64, repoUserName, repoName string, com return err } - if issue.RepoId == repoId { + if issue.RepoID == repoId { if issue.IsClosed { continue } @@ -242,7 +242,7 @@ func updateIssuesCommit(userId, repoId int64, repoUserName, repoName string, com return err } - if issue.RepoId == repoId { + if issue.RepoID == repoId { if !issue.IsClosed { continue } diff --git a/models/error.go b/models/error.go index 067eace2..38a3c053 100644 --- a/models/error.go +++ b/models/error.go @@ -148,3 +148,24 @@ func IsErrRepoNotExist(err error) bool { func (err ErrRepoNotExist) Error() string { return fmt.Sprintf("repository does not exist [id: %d, uid: %d, name: %s]", err.ID, err.UID, err.Name) } + +// _____ .__.__ __ +// / \ |__| | ____ _______/ |_ ____ ____ ____ +// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \ +// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/ +// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > +// \/ \/ \/ \/ \/ + +type ErrMilestoneNotExist struct { + ID int64 + Index int64 +} + +func IsErrMilestoneNotExist(err error) bool { + _, ok := err.(ErrMilestoneNotExist) + return ok +} + +func (err ErrMilestoneNotExist) Error() string { + return fmt.Sprintf("milestone does not exist [id: %d, index: %d]", err.ID, err.Index) +} diff --git a/models/issue.go b/models/issue.go index 77b38cbc..9fd53b47 100644 --- a/models/issue.go +++ b/models/issue.go @@ -14,6 +14,7 @@ import ( "time" "github.com/Unknwon/com" + "github.com/go-xorm/xorm" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" @@ -22,7 +23,6 @@ import ( var ( ErrIssueNotExist = errors.New("Issue does not exist") ErrLabelNotExist = errors.New("Label does not exist") - ErrMilestoneNotExist = errors.New("Milestone does not exist") ErrWrongIssueCounter = errors.New("Invalid number of issues for this milestone") ErrAttachmentNotExist = errors.New("Attachment does not exist") ErrAttachmentNotLinked = errors.New("Attachment does not belong to this issue") @@ -32,16 +32,17 @@ var ( // Issue represents an issue or pull request of repository. type Issue struct { ID int64 `xorm:"pk autoincr"` - RepoId int64 `xorm:"INDEX"` + RepoID int64 `xorm:"INDEX"` Index int64 // Index in one repository. Name string Repo *Repository `xorm:"-"` - PosterId int64 + PosterID int64 Poster *User `xorm:"-"` LabelIds string `xorm:"TEXT"` Labels []*Label `xorm:"-"` - MilestoneId int64 - AssigneeId int64 + MilestoneID int64 + Milestone *Milestone `xorm:"-"` + AssigneeID int64 Assignee *User `xorm:"-"` IsRead bool `xorm:"-"` IsPull bool // Indicates whether is a pull request or not. @@ -55,8 +56,24 @@ type Issue struct { Updated time.Time `xorm:"UPDATED"` } +func (i *Issue) BeforeSet(colName string, val xorm.Cell) { + var err error + switch colName { + case "milestone_id": + mid := (*val).(int64) + if mid <= 0 { + return + } + + i.Milestone, err = GetMilestoneById(mid) + if err != nil { + log.Error(3, "GetMilestoneById: %v", err) + } + } +} + func (i *Issue) GetPoster() (err error) { - i.Poster, err = GetUserById(i.PosterId) + i.Poster, err = GetUserById(i.PosterID) if IsErrUserNotExist(err) { i.Poster = &User{Name: "FakeUser"} return nil @@ -88,10 +105,11 @@ func (i *Issue) GetLabels() error { } func (i *Issue) GetAssignee() (err error) { - if i.AssigneeId == 0 { + if i.AssigneeID == 0 { return nil } - i.Assignee, err = GetUserById(i.AssigneeId) + + i.Assignee, err = GetUserById(i.AssigneeID) if IsErrUserNotExist(err) { return nil } @@ -121,7 +139,7 @@ func NewIssue(issue *Issue) (err error) { if _, err = sess.Insert(issue); err != nil { return err - } else if _, err = sess.Exec("UPDATE `repository` SET num_issues = num_issues + 1 WHERE id = ?", issue.RepoId); err != nil { + } else if _, err = sess.Exec("UPDATE `repository` SET num_issues = num_issues + 1 WHERE id = ?", issue.RepoID); err != nil { return err } @@ -129,9 +147,9 @@ func NewIssue(issue *Issue) (err error) { return err } - if issue.MilestoneId > 0 { + if issue.MilestoneID > 0 { // FIXES(280): Update milestone counter. - return ChangeMilestoneAssign(0, issue.MilestoneId, issue) + return ChangeMilestoneAssign(0, issue.MilestoneID, issue) } return @@ -162,7 +180,7 @@ func GetIssueByRef(ref string) (issue *Issue, err error) { // GetIssueByIndex returns issue by given index in repository. func GetIssueByIndex(rid, index int64) (*Issue, error) { - issue := &Issue{RepoId: rid, Index: index} + issue := &Issue{RepoID: rid, Index: index} has, err := x.Get(issue) if err != nil { return nil, err @@ -184,8 +202,8 @@ func GetIssueById(id int64) (*Issue, error) { return issue, nil } -// GetIssues returns a list of issues by given conditions. -func GetIssues(uid, assigneeID, repoID, posterID, milestoneID int64, page int, isClosed, isMention bool, labelIds, sortType string) ([]Issue, error) { +// Issues returns a list of issues by given conditions. +func Issues(uid, assigneeID, repoID, posterID, milestoneID int64, page int, isClosed, isMention bool, labelIds, sortType string) ([]*Issue, error) { sess := x.Limit(setting.IssuePagingNum, (page-1)*setting.IssuePagingNum) if repoID > 0 { @@ -237,7 +255,7 @@ func GetIssues(uid, assigneeID, repoID, posterID, milestoneID int64, page int, i sess.Join("INNER", "issue_user", queryStr) } - var issues []Issue + issues := make([]*Issue, 0, setting.IssuePagingNum) return issues, sess.Find(&issues) } @@ -626,8 +644,8 @@ func DeleteLabel(repoID, labelID int64) error { // Milestone represents a milestone of repository. type Milestone struct { - Id int64 - RepoId int64 `xorm:"INDEX"` + ID int64 `xorm:"pk autoincr"` + RepoID int64 `xorm:"INDEX"` Index int64 Name string Content string `xorm:"TEXT"` @@ -639,9 +657,24 @@ type Milestone struct { Completeness int // Percentage(1-100). Deadline time.Time DeadlineString string `xorm:"-"` + IsOverDue bool `xorm:"-"` ClosedDate time.Time } +func (m *Milestone) BeforeSet(colName string, val xorm.Cell) { + if colName == "deadline" { + t := (*val).(time.Time) + if t.Year() == 9999 { + return + } + + m.DeadlineString = t.Format("2006-01-02") + if time.Now().After(t) { + m.IsOverDue = true + } + } +} + // CalOpenIssues calculates the open issues of milestone. func (m *Milestone) CalOpenIssues() { m.NumOpenIssues = m.NumIssues - m.NumClosedIssues @@ -661,7 +694,7 @@ func NewMilestone(m *Milestone) (err error) { } rawSql := "UPDATE `repository` SET num_milestones = num_milestones + 1 WHERE id = ?" - if _, err = sess.Exec(rawSql, m.RepoId); err != nil { + if _, err = sess.Exec(rawSql, m.RepoID); err != nil { sess.Rollback() return err } @@ -670,81 +703,115 @@ func NewMilestone(m *Milestone) (err error) { // GetMilestoneById returns the milestone by given ID. func GetMilestoneById(id int64) (*Milestone, error) { - m := &Milestone{Id: id} + m := &Milestone{ID: id} has, err := x.Get(m) if err != nil { return nil, err } else if !has { - return nil, ErrMilestoneNotExist + return nil, ErrMilestoneNotExist{id, 0} } return m, nil } // GetMilestoneByIndex returns the milestone of given repository and index. func GetMilestoneByIndex(repoId, idx int64) (*Milestone, error) { - m := &Milestone{RepoId: repoId, Index: idx} + m := &Milestone{RepoID: repoId, Index: idx} has, err := x.Get(m) if err != nil { return nil, err } else if !has { - return nil, ErrMilestoneNotExist + return nil, ErrMilestoneNotExist{0, idx} } return m, nil } -// GetMilestones returns a list of milestones of given repository and status. -func GetMilestones(repoId int64, isClosed bool) ([]*Milestone, error) { +// GetAllRepoMilestones returns all milestones of given repository. +func GetAllRepoMilestones(repoID int64) ([]*Milestone, error) { miles := make([]*Milestone, 0, 10) - err := x.Where("repo_id=?", repoId).And("is_closed=?", isClosed).Find(&miles) - return miles, err + return miles, x.Where("repo_id=?", repoID).Find(&miles) +} + +// GetMilestones returns a list of milestones of given repository and status. +func GetMilestones(repoID int64, page int, isClosed bool) ([]*Milestone, error) { + miles := make([]*Milestone, 0, setting.IssuePagingNum) + sess := x.Where("repo_id=? AND is_closed=?", repoID, isClosed) + if page > 0 { + sess = sess.Limit(setting.IssuePagingNum, (page-1)*setting.IssuePagingNum) + } + return miles, sess.Find(&miles) + +} + +func updateMilestone(e Engine, m *Milestone) error { + _, err := e.Id(m.ID).AllCols().Update(m) + return err } // UpdateMilestone updates information of given milestone. func UpdateMilestone(m *Milestone) error { - _, err := x.Id(m.Id).Update(m) - return err + return updateMilestone(x, m) +} + +func countRepoMilestones(e Engine, repoID int64) int64 { + count, _ := e.Where("repo_id=?", repoID).Count(new(Milestone)) + return count +} + +// CountRepoMilestones returns number of milestones in given repository. +func CountRepoMilestones(repoID int64) int64 { + return countRepoMilestones(x, repoID) +} + +func countRepoClosedMilestones(e Engine, repoID int64) int64 { + closed, _ := e.Where("repo_id=? AND is_closed=?", repoID, true).Count(new(Milestone)) + return closed +} + +// CountRepoClosedMilestones returns number of closed milestones in given repository. +func CountRepoClosedMilestones(repoID int64) int64 { + return countRepoClosedMilestones(x, repoID) +} + +// MilestoneStats returns number of open and closed milestones of given repository. +func MilestoneStats(repoID int64) (open int64, closed int64) { + open, _ = x.Where("repo_id=? AND is_closed=?", repoID, false).Count(new(Milestone)) + return open, CountRepoClosedMilestones(repoID) } // ChangeMilestoneStatus changes the milestone open/closed status. func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) { - repo, err := GetRepositoryById(m.RepoId) + repo, err := GetRepositoryById(m.RepoID) if err != nil { return err } sess := x.NewSession() - defer sess.Close() + defer sessionRelease(sess) if err = sess.Begin(); err != nil { return err } m.IsClosed = isClosed - if _, err = sess.Id(m.Id).AllCols().Update(m); err != nil { - sess.Rollback() + if err = updateMilestone(sess, m); err != nil { return err } - if isClosed { - repo.NumClosedMilestones++ - } else { - repo.NumClosedMilestones-- - } - if _, err = sess.Id(repo.Id).Update(repo); err != nil { - sess.Rollback() + repo.NumMilestones = int(countRepoMilestones(sess, repo.Id)) + repo.NumClosedMilestones = int(countRepoClosedMilestones(sess, repo.Id)) + if _, err = sess.Id(repo.Id).AllCols().Update(repo); err != nil { return err } return sess.Commit() } -// ChangeMilestoneIssueStats updates the open/closed issues counter and progress for the -// milestone associated witht the given issue. +// ChangeMilestoneIssueStats updates the open/closed issues counter and progress +// for the milestone associated witht the given issue. func ChangeMilestoneIssueStats(issue *Issue) error { - if issue.MilestoneId == 0 { + if issue.MilestoneID == 0 { return nil } - m, err := GetMilestoneById(issue.MilestoneId) - + m, err := GetMilestoneById(issue.MilestoneID) if err != nil { return err } @@ -786,7 +853,7 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) { m.Completeness = 0 } - if _, err = sess.Id(m.Id).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil { + if _, err = sess.Id(m.ID).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil { sess.Rollback() return err } @@ -814,13 +881,13 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) { } m.Completeness = m.NumClosedIssues * 100 / m.NumIssues - if _, err = sess.Id(m.Id).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil { + if _, err = sess.Id(m.ID).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil { sess.Rollback() return err } rawSql := "UPDATE `issue_user` SET milestone_id = ? WHERE issue_id = ?" - if _, err = sess.Exec(rawSql, m.Id, issue.ID); err != nil { + if _, err = sess.Exec(rawSql, m.ID, issue.ID); err != nil { sess.Rollback() return err } @@ -829,34 +896,40 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) { return sess.Commit() } -// DeleteMilestone deletes a milestone. -func DeleteMilestone(m *Milestone) (err error) { - sess := x.NewSession() - defer sess.Close() - if err = sess.Begin(); err != nil { +// DeleteMilestoneByID deletes a milestone by given ID. +func DeleteMilestoneByID(mid int64) error { + m, err := GetMilestoneById(mid) + if err != nil { + if IsErrMilestoneNotExist(err) { + return nil + } return err } - if _, err = sess.Delete(m); err != nil { - sess.Rollback() + repo, err := GetRepositoryById(m.RepoID) + if err != nil { return err } - rawSql := "UPDATE `repository` SET num_milestones = num_milestones - 1 WHERE id = ?" - if _, err = sess.Exec(rawSql, m.RepoId); err != nil { - sess.Rollback() + sess := x.NewSession() + defer sessionRelease(sess) + if err = sess.Begin(); err != nil { return err } - rawSql = "UPDATE `issue` SET milestone_id = 0 WHERE milestone_id = ?" - if _, err = sess.Exec(rawSql, m.Id); err != nil { - sess.Rollback() + if _, err = sess.Id(m.ID).Delete(m); err != nil { return err } - rawSql = "UPDATE `issue_user` SET milestone_id = 0 WHERE milestone_id = ?" - if _, err = sess.Exec(rawSql, m.Id); err != nil { - sess.Rollback() + repo.NumMilestones = int(countRepoMilestones(sess, repo.Id)) + repo.NumClosedMilestones = int(countRepoClosedMilestones(sess, repo.Id)) + if _, err = sess.Id(repo.Id).AllCols().Update(repo); err != nil { + return err + } + + if _, err = sess.Exec("UPDATE `issue` SET milestone_id=0 WHERE milestone_id=?", m.ID); err != nil { + return err + } else if _, err = sess.Exec("UPDATE `issue_user` SET milestone_id=0 WHERE milestone_id=?", m.ID); err != nil { return err } return sess.Commit() diff --git a/models/repo.go b/models/repo.go index 117837fc..c61bef2f 100644 --- a/models/repo.go +++ b/models/repo.go @@ -867,7 +867,7 @@ func DeleteRepository(uid, repoID int64, userName string) error { return err } else if _, err = sess.Delete(&IssueUser{RepoId: repoID}); err != nil { return err - } else if _, err = sess.Delete(&Milestone{RepoId: repoID}); err != nil { + } else if _, err = sess.Delete(&Milestone{RepoID: repoID}); err != nil { return err } else if _, err = sess.Delete(&Release{RepoId: repoID}); err != nil { return err @@ -886,7 +886,7 @@ func DeleteRepository(uid, repoID int64, userName string) error { } } - if _, err = sess.Delete(&Issue{RepoId: repoID}); err != nil { + if _, err = sess.Delete(&Issue{RepoID: repoID}); err != nil { return err } diff --git a/modules/auth/repo_form.go b/modules/auth/repo_form.go index 6fb8ef91..98639021 100644 --- a/modules/auth/repo_form.go +++ b/modules/auth/repo_form.go @@ -117,9 +117,9 @@ func (f *CreateIssueForm) Validate(ctx *macaron.Context, errs binding.Errors) bi // \/ \/ \/ \/ \/ type CreateMilestoneForm struct { - Title string `form:"title" binding:"Required;MaxSize(50)"` - Content string `form:"content"` - Deadline string `form:"due_date"` + Title string `binding:"Required;MaxSize(50)"` + Content string + Deadline string } func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { diff --git a/modules/bindata/bindata.go b/modules/bindata/bindata.go index f8279a07..bc8ff1a8 100644 --- a/modules/bindata/bindata.go +++ b/modules/bindata/bindata.go @@ -112,7 +112,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x79\x4d\x93\xe3\x46\x72\xf6\x1d\xbf\xa2\x44\xbd\x7a\x35\xe3\x00\xd9\x5f\x9a\x0f\xb5\xd4\xb6\xd8\x24\xc8\xc6\x0e\xbf\x04\x90\x33\x1a\x4d\x74\xa0\xd1\x40\x91\x84\x1a\x44\x61\x50\x40\xf7\x70\xc3\x87\x55\xf8\xe0\x08\x1f\xed\x0d\xfb\xe2\x83\x7d\x70\x38\xc2\xf6\xda\xde\xf0\x65\x77\x1d\x3e\x29\x7c\x9f\xf9\x0f\x0a\xed\xfa\x5f\xf8\xc9\x2a\x80\x04\x7b\x5a\xb3\xda\xb5\x1d\x33\xd1\x04\xea\x23\xab\x32\x2b\xf3\xc9\x27\x0b\xef\xb3\x91\xf5\xd4\x72\x98\xfa\x33\x1c\x77\xed\xde\x73\x36\x3d\xb3\x5d\xd6\xb3\x07\x96\xf1\x3e\x9b\x0c\xac\xb6\x6b\xb1\x61\xfb\x89\xc5\x3a\x67\xed\x51\xdf\x72\xd9\x78\xc4\x3a\x63\xc7\xb1\xdc\xc9\x78\xd4\xb5\x47\x7d\xd6\x99\xb9\xd3\xf1\x10\x8d\xa3\x9e\xdd\xd7\x33\x8d\x4f\x58\x3b\x4d\x59\xe2\xaf\x38\xcb\x97\x7e\xce\xe4\x52\xdc\x48\x26\x12\xc6\xaf\x79\xb6\x66\xa9\xbf\x40\x47\x94\xc7\xdc\x68\x4f\x26\xde\xa8\x3d\xb4\xd8\x09\xeb\x8b\x85\x3c\xc6\x5f\xd6\x8f\x72\xe6\xf2\xec\x3a\x0a\x38\x24\x75\x96\x7e\x82\xe1\x68\x8b\xe6\x6c\x2d\x0a\x96\x15\x09\x8b\x45\xe0\xc7\xf1\xda\x70\x66\x23\x6f\xe6\x62\xf7\x27\x6c\x11\xe5\x18\x6d\x45\xf9\x92\x67\xac\x11\xf2\xeb\x86\xc9\x1a\x69\x26\xc2\x06\x13\x68\xc8\xb9\xcc\xd1\x12\xf2\xb9\x5f\xc4\x90\x25\xf5\x18\x25\x01\xaa\xd3\x06\xf0\x6e\x18\x2f\x32\x9e\x0a\x19\xe5\x22\x5b\x9f\x1b\xce\x78\x3c\x65\x27\x86\xdb\x71\xec\xc9\xd4\x9b\x3e\x9f\xd0\xb0\x4b\x5f\x2e\x31\xae\x88\xce\xb1\xde\xa8\x58\x5d\x62\x3d\x31\x87\x44\x59\x70\xa9\xf5\xf5\x33\xae\x74\xe6\x21\x8b\x12\xe8\xcd\x95\xca\x86\xed\xba\x33\xcb\x9b\xb4\xfb\xb0\x9b\x37\x9a\x0d\x21\xec\x60\x1f\xa2\x24\x94\xe5\xd9\xb9\x31\x71\xc6\xd3\x71\x67\x3c\x40\xfb\x32\xcf\x53\xa3\x3b\x1e\xb6\xed\x11\xde\x94\xba\x4b\x21\x73\xb5\x23\x6f\xe6\xd0\x90\x0f\xee\x55\xe3\xef\xcb\xe3\xbd\xbd\x0f\xee\xe9\xe1\x78\xf9\xe0\xde\xd9\x74\x3a\xf1\x26\x63\x67\x7a\x5f\xee\x19\xea\xa5\xdd\xed\xc2\x4a\xc6\xa6\x03\x02\x8e\xf6\xf7\xf7\xa1\x42\x37\x92\xfe\x65\xcc\x99\xeb\x9e\xb1\x39\xf7\xf3\x02\x9b\xbf\x59\xf2\x84\x25\x02\x9a\x5c\xfb\x51\x4c\xdd\x46\xd7\x76\xdb\xa7\x03\xcb\xa3\x61\x27\x6c\xee\xc7\x92\x1b\x78\xae\x84\x1d\x1e\xd6\x44\x75\xba\x23\x3a\xea\x84\xb4\x2f\xcf\x60\x25\x42\x6e\x8c\x7b\xbd\x81\x3d\xb2\x2a\x83\x6b\x21\x95\x60\x67\x3c\x9b\x5a\x8e\x37\x18\xf7\x37\x5d\x9f\xb0\x3e\x4f\x78\xe6\xe7\x30\x67\xce\x53\x79\x8c\x96\xff\xc7\x82\x10\xe6\xcc\x97\x7b\xb9\xd8\x5b\xc0\x67\xf6\x82\x42\xe6\x62\xb5\x47\x26\x93\x6a\x40\x4b\xb5\xb3\x80\x67\x39\x6b\x06\xfe\x49\x9e\x15\x9c\x35\xc3\x02\x82\x22\x91\x9c\x3c\x7e\xf4\x70\x7f\xb9\xbf\xda\x97\xac\x49\x36\x3d\x59\xad\xe9\xa7\xc5\x5f\xf9\xab\x34\xe6\xad\x40\xac\x8c\x4f\x20\x67\x9c\xb1\x79\x26\x56\xcc\x67\xad\x74\xfe\x8a\xcd\x23\x28\xc6\x5f\xa5\x22\xcb\x71\xac\xaa\x07\xae\xc6\x9e\x45\x49\x48\xce\x4d\x8b\x45\xf3\x28\xd0\x7b\x15\xb0\xe1\xbd\x50\x40\x0a\x19\x71\x2e\xb2\x05\xcf\x59\x2e\xca\xf9\x6a\x62\x9a\x45\xd7\x34\xf8\x8a\xaf\xef\x6b\xbd\x44\xca\x13\x29\x63\x96\x5e\x05\xf2\xe0\x90\x35\x61\x3c\x92\xaa\x56\x6f\x8a\x22\x2f\xdf\xf8\x8a\x35\x13\x81\x69\xf2\x87\xcd\xc2\xc8\x6a\x12\x75\x48\x7a\x08\xb9\x34\x3a\x96\x33\xf5\x28\x5e\x61\xee\xba\x09\xf7\xaa\x65\x8c\x27\xd6\xf3\x3b\x07\x94\x12\xb1\xfc\x2c\x4d\xe1\xfd\x31\xce\x3a\xa6\x18\xc8\x39\x2c\x48\x4a\xf9\x49\x08\x2b\xc0\xdc\x81\xb6\x1b\x9d\x17\x86\xd7\xa2\x4f\x99\x00\xad\xe4\x6a\x30\x16\x05\x3f\x35\xf3\x57\x3c\x28\x60\x60\xc3\x9d\xb6\xa7\x76\xc7\x53\xfe\x3e\x69\x4f\xe1\x73\x1a\x55\x62\x32\x31\x4e\xb1\x5c\xb4\xff\xa5\x3d\x61\xb2\x48\xc9\xac\x86\x35\x52\x8e\xa4\xda\xb6\x2e\x34\xc0\x66\xa2\x64\xa1\x51\x07\x47\x81\x23\x49\x9a\xb1\x58\x2c\x70\x8c\x05\x42\x4f\x9a\x2c\xf0\x13\x76\xc9\x59\x63\x29\x56\x5c\xc3\x05\x0e\x2a\xc6\x21\x36\x8c\x41\x5b\xc1\x1c\x45\x2d\xd9\x81\x46\x20\x62\x43\x3f\xf7\x81\x03\xfc\xbc\x06\x39\xab\xb5\x7c\x19\x2b\xd0\x81\x37\x2d\x32\x2e\xb5\x24\x34\x46\x39\x3f\x42\x47\x94\x7f\x28\x09\xc1\x32\x16\x2c\x05\x81\x5b\xf7\xb4\xc2\x14\x35\xd7\x38\x1b\xbb\x14\x4a\x07\x87\x8f\x5a\xfb\xf8\x77\x70\x7c\x74\xb4\xff\xd0\x28\xe1\x91\x5c\xda\x28\xb1\x2e\x13\x22\x37\x26\x6d\xd7\x7d\xd6\x55\x76\xe9\xd1\x42\xb5\x65\x93\x78\x6d\x32\x5e\x41\xa1\x0e\x4a\xda\x59\xc6\x5f\x16\x51\x56\xaa\x08\xc8\x89\xe6\xeb\xe6\xbc\x88\xe3\x06\x22\x79\xb0\x81\x41\x3d\xbe\x12\x5b\xed\x5f\x49\x35\xf4\x51\x30\xd2\x5f\x05\x59\x2b\xbc\x84\x39\xfc\x70\x15\x25\xe7\x0a\xc9\x82\x22\x8b\x72\x40\xa7\x3d\xc2\x09\x0e\x06\x08\xe7\xce\x93\xda\x61\xbc\xf7\x9e\x4e\x24\x3a\xcf\x4c\xc7\xec\x89\x65\x4d\xd8\xf3\xf1\xcc\x61\x4a\xb7\x6e\x7b\xda\x66\x6e\xbb\x67\xbd\xf7\x9e\xe1\x5a\x1d\xc7\x9a\x7a\xf0\x42\x08\x78\xef\xfd\xcf\x7a\x5d\xeb\x99\x83\xff\xff\xff\x0f\xee\x91\x2f\x14\xb9\xa0\x63\x84\xbf\x67\x7c\xc5\x15\x0c\x87\x3e\x82\x02\x00\x62\x8f\x3c\xc7\x1a\x5a\xc3\x53\xe0\x49\xb7\xfd\xdc\xc5\xfc\x47\x46\x67\x3c\x7e\x62\x5b\x2a\x5d\xd4\x4c\xea\xf9\x37\x5c\xd2\xa1\x96\xdd\x9b\x79\xf5\x31\x51\x12\x64\x3c\x8c\xb4\x55\x1c\x4a\x62\x92\x02\x58\xbc\x5a\x33\xbf\x80\x95\x93\xbc\xf2\xca\x25\xf7\x43\x6c\x44\xa5\x3e\x04\x04\xf9\x97\x7a\x31\x1c\x4a\xb2\x2e\xd0\xdf\x19\x7f\xf1\xdc\x6b\xcf\xa6\x67\xd6\x08\x0e\x0e\x27\x1f\x6f\x52\xd8\x17\xcd\x67\xd6\x29\x75\x35\xa9\xa1\x4c\x0c\x70\x94\x73\xa3\xdd\x99\xda\x4f\x2d\xaf\x83\x13\xf2\x06\xf4\x34\xb4\x47\x40\x4b\x52\xec\xe0\xf1\x3e\x84\xbb\x16\x85\x09\x39\xc4\xf7\x0e\x42\xb4\xaa\xdd\x70\xf8\x3d\xa0\x28\x10\xc9\x3c\xca\x56\x8c\x37\x57\x80\x78\x15\x18\x19\x5f\x44\x32\xd7\x28\x09\x99\x7d\xdb\x25\x40\xb6\x90\x55\x06\x9e\xca\xef\xce\xb0\x76\x94\x5d\x81\x74\xa7\x72\x44\x1c\x8b\x9b\x72\x32\x16\xa0\xd8\x57\x0e\xc1\x60\x34\x05\x06\x41\x20\x8a\x24\xd7\x0e\xb4\x41\x7b\x25\xde\x51\xfa\xd7\x84\xaa\x2d\xae\x00\x36\x4c\x46\x0b\x95\x3f\xb0\xd5\xeb\x88\xdf\x40\xec\x3a\x5f\x22\x8e\x5b\xd8\xd9\xe7\x33\xdb\x41\x26\xb2\xfb\x23\x9c\xf4\x53\xdb\x7a\x56\x93\xd0\xf1\x03\x40\x0b\xf2\x56\xee\x63\x2f\x92\xa5\x51\x40\x29\xad\x02\x87\x4e\xbb\x73\x66\x79\xed\xa7\xf0\x33\xa7\x36\x6b\x48\x36\x80\x32\x1a\xc2\x49\xff\x72\xfc\x68\x3c\x05\x2d\xf2\xc8\x06\xf5\xe1\x04\xf0\x21\xcf\x31\xeb\x58\xe5\x6a\xca\xc0\x60\x20\xcb\xe2\x92\xf2\x07\x85\x46\x94\x4b\x9d\x9e\x34\x31\xd8\x3b\x78\xf8\xa0\x92\xf9\x2e\x5f\xd8\x2c\xf2\x7d\x63\xc7\xdf\x67\xba\xae\x50\xa7\x01\xed\x83\x2b\x06\xf3\x47\xab\x62\x45\xe0\x0f\x4b\xfe\x18\x19\x1d\x9b\xc3\x99\x67\x00\x88\x54\x68\x40\xcc\xd7\xe9\x36\xfb\xc2\x57\xec\xe1\x6c\x48\xd1\x06\xc3\x7e\x09\x43\x9d\x59\xb5\xc8\x35\x5e\xdc\xf0\xcb\xa5\x10\x57\x84\x78\x67\xf8\x65\xb9\x2f\xaf\xd8\xcb\x82\x23\xb5\xc6\x3c\x59\x00\xdf\x3f\x9f\x59\xa0\x37\x03\x6b\xd4\x57\x18\x71\x50\xd2\x0b\x1e\x47\x08\x18\xf0\xbd\x15\xa7\x74\x84\x23\x05\x4a\x60\x0b\xd2\xe8\x5a\xe4\xa6\x8e\x37\xb5\x87\x16\x92\x3f\xe6\x3c\xa0\xc0\x56\xee\x14\x25\x0a\x4b\x78\x2d\xb1\xd2\xa9\xb8\x4f\xec\x89\x37\x1d\xb8\x1e\xe6\x11\x5d\xdd\xee\x8f\xbc\x98\x48\x94\xb6\x5b\xb7\x66\x98\xd3\x62\x3e\x57\x59\x8a\x76\x49\x51\x19\x80\x52\x26\x3c\x36\x61\x1d\x9e\x12\xb3\x84\x9b\x44\x2a\x2b\x95\x14\x33\x14\xc9\x87\x48\x9c\x09\xf6\x71\x43\x7c\x4e\x75\xb6\x00\x48\xa3\xae\x77\x3a\xeb\xf5\x88\xa6\x58\x23\x4d\xdf\xc0\x01\x29\xd8\x81\x9a\x48\x7d\x6b\xcd\xf8\x54\x44\x69\x82\xeb\xce\x4e\x7f\x64\x75\xa6\x8a\xaf\x55\x64\xf7\xbe\xac\x3c\x4e\x33\x3f\xe2\x39\x2b\xe5\x4a\x72\x95\xa7\xad\x05\x3d\x93\x1b\x1d\x3f\x78\xfc\x08\x7d\x9f\x7f\x5e\x76\xbc\x7c\xa9\x5a\x0f\xc9\x4a\x23\x91\x73\x93\xf6\xab\x12\x29\x91\x0a\x0e\x93\xea\x63\x6e\x7c\xf4\xf0\x01\xe0\xde\x1d\x4e\x27\x2e\x5a\xe2\x98\x92\x1b\xa0\x28\x6c\x21\xbe\xe8\xe4\x01\xcd\xce\x14\x56\x24\x4a\xae\xe6\x62\x21\x52\x3f\xc3\xc1\xac\x56\x10\x04\x35\x28\xb1\x3b\xbd\x0e\x7b\xf8\xd1\xfe\xc7\x2d\x66\xeb\x85\xf4\x7e\xab\x84\x2b\xb7\x82\x60\x21\xb5\x90\x1f\xdf\x00\x83\x37\xeb\x55\x29\xad\xc6\x0d\xcf\xac\xc1\x98\x48\x8b\x86\x19\xcd\x34\x89\x7f\x29\xc8\x24\xe2\x1c\x46\x74\x5c\xc0\xd4\xd6\xc6\x39\xd5\x1c\x25\xa5\xa3\x78\xc8\x76\x02\xc1\xd6\xae\xc4\x1d\x8e\xaf\x68\x9a\x5c\x03\x97\x56\xd8\x0b\xc6\x79\xb4\xa1\x12\xda\xb7\x31\xa3\x53\xa1\xd2\xb0\xce\xe3\x44\x5d\xe9\x16\x1b\x03\xbf\x48\x2d\x34\x92\x68\xac\x2c\x79\x3c\x6f\x12\x50\xc1\x5e\xb5\x89\x52\xbb\xe9\xc6\x45\x35\xae\xb1\x20\x8e\xa0\x55\x7d\x20\xe5\x73\x8f\x78\x98\xdd\xa3\xf0\xdf\x72\xe2\x3b\xb8\x99\xf6\xef\x77\x91\xb3\x72\xc4\x96\x9d\x29\x17\xd3\x1c\x36\x0c\x11\xf8\x60\x3a\x74\xa2\x0f\x8e\x0e\x0f\x5b\x6c\x4a\x4a\x94\xc4\xe7\x2b\x02\x5c\x3c\x72\xe5\xb8\x9b\xc1\xd0\x90\xf4\xbf\x68\x90\x87\x37\xd8\xa7\xaa\xfb\xb3\x1a\x4f\xfe\xc3\x0b\x32\xc3\x0a\x11\x62\xf4\x1c\x14\x81\x27\xe5\xa2\x70\x91\x4d\xe6\x53\xf9\x20\xf5\xa5\xbc\x11\x59\x58\x12\x98\x2d\x77\x31\x5e\x08\xca\xa0\x6f\x87\x6d\xd9\xd1\xd2\xa0\xfa\x76\x7f\x67\x60\x03\x34\x3d\x9b\x84\x94\xcf\x9a\x2f\xa8\x7a\x6d\x3c\x51\x69\xaf\x42\x66\x3f\x8d\x5a\x35\x74\xa6\xbd\x19\x04\xbb\x65\x25\x75\x07\x80\x2b\x62\xb1\xa7\xb6\xb0\x47\x7f\x44\x06\x10\x35\xa6\xe3\x27\xd6\xe8\x07\x4e\x0a\x02\xd8\xd0\xcb\x41\xd4\x13\x43\x15\x32\x79\xe5\x00\x51\xa8\xf9\x31\x47\x7e\xcc\xd5\xf9\xa0\xbf\x12\x07\x64\x94\x02\xd6\x0d\x89\xde\x92\x53\xcb\xd6\x42\x88\x85\xb6\xf7\x1e\x38\xc7\x57\x3c\xc8\x37\xc6\x51\x3d\xff\x43\xe3\xdc\xdc\xdc\x94\x82\x60\x26\xa9\x96\x51\x1a\x90\x95\xa2\x64\x2e\x5a\xda\x2b\x7e\xf0\x70\xec\x91\x38\xff\x5d\x06\x2e\x99\xc0\x8e\x4a\x42\x1b\xec\x50\x49\xb9\xd3\xc2\xef\x9c\x55\x1a\xb8\x34\xc8\xcb\x97\xbf\xa7\x31\x50\x9f\x79\xa4\x81\x47\x2a\x28\xcc\x65\xdf\xfe\xea\xcf\x7f\xf3\xf5\x4f\xef\xf4\x93\xcc\x4f\x97\x25\x1a\x97\xfb\x68\xed\xff\x36\x37\xb9\x73\xce\xee\xee\x6f\x78\x74\x29\x7e\x4f\x05\x40\xc2\xee\xb4\x38\x3c\x5f\x89\xad\xad\xfb\x5b\x76\x7a\xf7\x94\x1d\x77\x7e\x11\x10\xc9\xda\x29\x7e\xf8\x4a\x64\x6b\x5d\x63\x20\x15\x36\x14\x78\x50\xab\x1a\x79\xeb\xe2\xa5\x1c\x6c\xb4\xbb\xed\xc9\x54\x31\x5f\xdd\x52\x95\x1c\x65\x7f\x59\xc7\xf4\x3b\x48\xa9\x20\x96\xd7\x7e\x5c\x23\x0f\x3b\x12\x1f\xee\xa3\xde\x80\xa4\xa7\x6d\x52\xe4\xe1\x7e\x25\x48\xef\x45\x45\x5b\x7d\x2f\x10\x90\x20\x8a\x14\x5f\x17\x84\x7c\x1a\xf0\x30\x4b\x4d\x38\x06\x47\xce\x81\x56\x57\x27\x79\x90\x9a\xd4\x79\x72\xfc\xf0\xe8\xd1\xc7\x66\x85\x62\x27\x2b\x3f\xf0\x33\xa4\x9a\xf0\xf2\x64\xdf\x4c\x85\x88\x3d\xe2\x58\x27\x60\x3c\x66\x14\xc6\xdc\x2b\xb9\xce\x89\xa6\xdd\xd5\xca\xc7\xec\x62\x5b\xda\x1d\x1c\x1c\x1e\x1c\x5c\x94\xf9\x51\x51\x7d\x29\xb1\xa1\xbb\x6d\x4a\xf1\xb4\xb5\xad\x36\x6d\x59\x6d\xde\x65\x57\x70\xc5\xa7\x76\x77\xd7\xb0\x93\x4c\x5c\x47\x54\x9a\x28\xde\xbf\x40\xbe\x24\xfd\xa5\xde\x1e\x86\x1c\xab\x44\xb8\xf4\xaf\x09\xb0\xd7\xd5\xa8\x35\xa7\x4b\x35\x5a\x1e\x14\x44\xef\x70\x5b\xd0\xa3\xc4\x6c\x2d\x5a\xec\x42\x15\x83\x65\xaf\xbc\xf8\x3f\xb3\x22\x29\x7c\x8c\x7a\xac\x89\xdf\x66\x98\x11\xa9\xdc\x53\x8d\x2c\x94\x49\xb5\x61\x94\x2f\x20\x38\xd5\xce\xa8\x4e\x3e\xae\xd6\xfb\xac\xda\xa3\x97\x13\x11\xb9\xd8\x98\xc9\x2b\xef\x2e\xcb\xb2\xb6\xd2\x04\x6b\xba\xa5\xca\x01\x08\x6f\xc4\x75\x21\x57\xd6\x89\x25\x87\x88\xbc\x38\xba\xe2\x9e\xe6\xfb\x98\x61\x6b\x02\x49\x2c\xa1\xb2\x17\x7c\x56\x85\x56\xe9\xce\x75\x76\xa2\xc3\x5b\x0b\x44\x48\xcf\x1c\xab\x46\x5b\xad\x44\xf1\x25\x49\x89\x43\xad\xbf\x33\x97\xee\xb4\xaa\x1a\x81\x8a\x3f\x2d\x05\xd3\x55\xc7\x76\xeb\x88\x1e\xb2\xe3\x26\x84\x76\x84\x3c\x06\xb9\xdb\x37\xfa\x1d\xaf\x8a\x1e\x45\xc5\x21\x44\x77\x6c\xa5\xc4\xd1\x9c\x2b\x39\x77\x4c\x77\x2d\xd7\xa5\x22\x76\x60\xf7\xac\xdd\xf9\xc6\x8b\xb2\xf8\x22\xaf\x9e\x12\x4f\x8d\xfd\x80\x53\x45\x57\xb6\x2b\x83\x6f\x6f\x2a\x34\xd1\xd2\xfe\xfd\x12\x05\x4c\x71\xcb\xbf\xcb\x7e\xac\xe8\x3c\xb5\x3b\xb4\x4e\xc9\x9f\x75\x39\xe7\xcd\x26\x83\x71\xbb\xeb\xd5\xef\x28\x74\x1d\x28\xd5\x3d\x72\x94\x70\xc9\xf5\x95\x8f\x22\x3e\x01\xea\x19\x34\x34\xc2\x42\xc8\x65\x21\x1a\x46\xdf\x29\x05\xb9\xe3\x99\xa3\xe4\x03\xb5\x95\x80\x0d\x13\xad\x86\xd4\x78\x8a\x9f\xe7\x88\x6e\xb0\xe6\x9c\xd4\x7c\xb6\xe4\x4a\x99\x6d\xab\x54\xac\x96\xab\xd3\x04\x03\xef\x6a\x85\x24\x99\xe1\x82\x0e\xeb\xa2\x3c\xc6\xed\xd9\x4d\xe8\x5e\x8c\xf8\x65\x4d\xc8\xad\x89\x5a\xb9\x6d\xf7\xc5\xce\xcd\x4c\xad\x83\x2e\x32\x13\x4e\x26\x5d\x51\xcd\xaa\x6a\x75\xba\x00\x40\xed\x27\xcb\x30\x89\x56\xfe\x82\xef\x7d\x95\xf2\xc5\x1f\xeb\xc7\x34\x59\x18\xed\xc1\x60\xfc\xcc\xea\xaa\x0b\x2a\xca\x2f\x77\x0e\x22\xb6\xf7\x4a\xd7\x97\xe0\xca\x1c\x6b\x2a\x74\xd8\xdd\xeb\xd1\xe1\xf0\xd4\x18\xb6\xbf\x50\x65\x25\x5d\x3b\x1f\x96\xf3\x92\xcd\xdd\x39\x4d\x92\xaa\xe2\x28\xd2\x58\xf8\xb7\xac\x84\x22\x8b\xa6\x13\xd9\x75\xab\x2b\x73\xf2\x45\x32\xb7\x9b\xf2\x00\x64\x9a\xeb\x0b\xc5\x92\x8c\x92\xe9\xe8\x5a\x6b\xcd\x00\x1f\x29\x5d\x27\x92\x59\xf8\x2d\x1b\x82\x0a\x03\x84\x8f\x2a\x21\xc8\x2e\x65\x59\x83\xe1\x08\x14\xba\xcc\xa7\x83\x6b\x8f\x5c\xbb\x63\xb2\x59\x12\xbd\xea\xfa\x54\x73\x39\xc5\xe5\xba\x7c\xea\x75\x1e\x1f\x1e\x56\xbf\x5f\xea\x87\x07\xfb\x66\x25\x7a\xf3\xa0\xbb\x8e\x8e\x8e\x3e\xde\x3c\x8c\xfc\x44\x98\xec\x49\x94\x23\x31\xa0\x66\x71\x73\x90\xea\xf2\x67\x88\x42\x2a\xda\x3c\x07\x99\x50\x09\x4c\xbd\xd2\xac\x32\xb9\xa9\xe3\x24\xb6\x42\x2a\x53\x8c\xfa\x97\x54\x5e\xd7\xcc\x20\x39\x57\xc8\x43\xec\x43\xc4\x7e\xb2\x68\x89\x6c\xb1\x97\x5e\x2d\xf6\xc8\x7a\x7b\xef\xe3\xa9\x49\x74\x33\xf7\xc9\x4f\x7a\x63\x67\xd8\xd6\xb9\x08\x3c\x56\x7f\xfb\xd8\xde\xbc\x56\x39\xa9\xa4\xa7\xf5\xa4\x44\xd9\x94\x7e\xa9\x44\xd5\xb1\x5b\xdd\x8e\xde\x0a\xdf\x6a\x6e\x55\x0e\xa1\xd4\xf4\xe9\x20\x24\x4f\x7d\x75\xc7\xbf\xc2\xc8\x08\xa5\x85\xfa\x58\x50\x79\x67\x35\xcd\x54\x5e\xd2\x30\xca\x5b\xca\xb2\xf5\x7f\xb3\xbc\xbf\x55\xd9\xeb\xeb\x8b\x4a\xf1\x69\x06\xe8\x22\x35\xbb\xfc\xb2\x58\xd0\x83\x0d\xdb\xd3\xef\x33\x3f\x53\xfa\x5b\x59\x26\x32\x7a\xe8\x64\x11\xdd\x07\xde\xce\xce\x5a\x82\x31\xb0\x9e\x5a\xc4\x52\xd4\xab\x51\x31\x95\xca\x36\x4a\x75\x7d\x53\x46\xc7\xd0\x2a\xdb\xcf\xab\x69\x9b\x09\xca\x18\xb7\x47\x53\xe3\x76\xe8\x27\xba\xc6\xd3\xc8\x23\xe9\xa6\x52\xc0\x2d\xe0\xdd\x18\xca\x32\x91\xe3\xf9\x9e\xbc\x21\x0f\x54\x31\x28\x08\x1a\xe8\x76\xa0\xa4\x06\xf7\xdf\xce\x37\x83\x71\xdf\x73\xc6\x53\x5d\xa9\x96\x60\x45\x91\x1c\x03\x5a\x6b\xe1\x4c\x77\x0c\x38\x45\xda\xcd\x8e\x0c\x65\xd3\x7d\x1d\xcd\xf4\x1d\xc8\xad\xec\xac\x2c\xbd\x81\x12\xb9\x8c\xe6\xf9\xbb\xe4\x1c\x3e\x06\x69\xf1\x13\x08\x64\x9f\x7e\x8a\x37\x93\x1d\x3e\x78\x58\x03\x19\xcf\x3d\xb3\x7b\xea\xa3\xd4\x63\x95\xc3\x16\x84\x84\x4a\xeb\x10\x95\xcc\xfa\x6d\xbd\xba\x6d\x7b\xf0\xfc\x2d\xcd\xac\x57\x69\x94\x29\xec\x58\x4b\xda\x0e\x09\xa0\xbd\xdc\x0b\x79\xcc\xe9\x5e\x73\x4e\xd7\x9d\x2b\x6c\x9b\x46\xec\x9a\xeb\x91\xda\xcc\xe6\xee\xb9\x76\xcc\xc9\x5d\x67\x9c\xd4\x4f\xcd\xe1\x25\x41\xd5\xec\x94\xd0\x4c\x7f\x37\x2d\xed\xb1\x42\x52\x06\x02\xdf\x41\x25\x1c\x0b\x54\x66\x64\x75\xa6\x1e\xf2\xf1\xd0\xad\x7f\x48\x9b\x62\x3e\x62\x2d\xdb\xc8\x56\x17\x2f\x35\x26\x0c\x21\x31\x96\x7b\x97\xd4\x3a\x39\x29\xc3\x02\xdc\x8e\x5c\xbe\x00\x3a\xea\xd8\x2f\xc2\xf4\x96\xdf\xd3\x90\xfa\xa7\x4d\xbc\xab\x3b\xc4\x1a\xf1\x2e\x3f\x4e\x6e\x3e\x39\x28\x24\xb9\x65\x25\x6a\xac\x5b\xe9\x5d\xb7\x6e\xbb\x1b\xe8\x46\xfe\x22\xc1\x72\x51\x50\x99\xae\xbc\x17\x22\xf2\xd0\xa8\xdd\xd0\xbd\x73\xe0\xad\x2b\xbb\x92\xb8\xff\xae\xf7\x1d\xea\x74\x39\x71\xd7\xed\x67\x27\xb1\xcd\xcf\x25\xe6\xbd\x68\x1c\xd4\xaf\x59\x1a\x66\xe3\x70\xe7\xfd\x9c\xce\xc4\xa2\xbb\x53\xb7\x66\xb6\x0d\xec\xde\x36\xdd\xf6\x6b\xd5\xd6\x7c\xbb\x5f\xad\xd8\xce\x07\x24\xa3\xeb\x90\x6c\x35\xee\x14\xf3\x42\xba\x27\x7c\x85\xa4\xa2\xb7\x77\xac\xbe\x3f\x1d\xd3\x9f\xcf\x36\x5f\xa6\xd5\x5d\xf7\x1f\x01\x7a\x33\x10\xd6\x93\x22\x9f\x3f\x36\xc8\x6b\x54\x3e\x01\x37\x3e\x57\xf1\xd0\xb7\xa7\x5e\xd7\xee\xf5\x76\xa3\x9f\xee\x7c\xb3\x45\xa1\xb9\x12\x79\xbb\xca\x0c\xb0\xe2\x87\x98\xc8\x16\xc1\x87\xd5\xb2\x8d\x66\xd3\x5f\xd0\x0e\x25\x0c\xc8\xf0\x02\x44\xa3\x6c\x42\x89\x4e\xa5\x43\x91\x6c\x12\x5e\x94\x37\x65\xb0\x52\x25\x6c\x28\x02\xa9\x1a\x16\xc1\xde\x41\xeb\x51\xeb\x01\x31\xde\xb6\xd3\xa7\x0d\xa8\xab\x19\xac\xb2\xe4\x7e\x4c\x17\xe4\x74\x79\xde\x52\x3b\x6e\xcd\x65\x70\x75\xfe\x16\x37\xb3\xd4\x07\x4a\xcd\xeb\xb7\x45\xe9\x52\x14\xd9\x96\x5e\x28\x8c\xfa\xa8\x55\xaf\x49\x0f\x3f\x7a\xb7\x96\xb4\x58\x5d\xcf\x22\xc9\x88\x4e\xa9\x0a\xa0\xd9\xcc\xfd\x85\xfc\x5d\x14\x25\x69\xa5\xaa\x1b\x3d\x5f\x44\x07\x8f\x09\x66\xda\x23\xd5\xc0\x93\xe6\xcc\x35\x7f\xbc\x6c\x76\x46\xf4\xf7\xec\x89\x19\xf2\x66\xd7\x32\xe7\x59\xb3\xe7\x98\x49\xdc\x1c\x0d\xcc\xf8\xba\x39\x78\x6a\x66\x45\xd3\x99\x99\x5f\xf9\xcd\x1f\x4d\x4c\x2e\x9b\x96\x6b\xa6\x79\xf3\xd4\x31\xd3\xb8\x39\x19\x98\x97\x8b\xe6\x69\xdf\xc4\x9a\xf6\x54\x7d\xa9\x24\xd9\x16\x60\x2a\x92\x4b\xf3\xd7\xff\xfc\x93\x6f\xff\xe3\x2f\xbe\xfd\xc5\xcf\xbe\xfb\xcb\x3f\x35\x7f\xfd\xcb\xaf\xff\xeb\x1f\x7f\x5a\xbe\x74\x79\x91\xcb\x60\x69\xf6\x32\x3f\xf9\xe6\xef\xfd\x48\x9a\x23\x8e\xe2\x14\x24\x05\x95\xfd\xc0\xcf\xaf\x23\xfe\x9f\x7f\x5b\x98\xaf\xff\xe6\xcd\x9f\xbc\xf9\xfa\xcd\xd7\xaf\x7f\xf5\xfa\x17\xaf\x7f\x69\x7e\xf7\x57\x7f\xf7\xdd\x5f\xff\xd3\x6f\xfe\xe5\x67\xa6\x25\x53\xff\x9b\x9f\x8b\xd8\x9c\x80\xaf\x15\x8b\xe2\x9b\x7f\x90\x78\x8c\xe5\x55\x64\xbe\xfe\xf9\x9b\x3f\x7b\xfd\xef\xaf\xff\xed\xf5\xbf\xbe\xf9\x89\x9e\x69\xda\xb9\x1f\x47\xc4\x9c\x8c\x17\x82\xbc\xfe\xdc\x70\xcf\xc6\xcf\xbc\x1e\x18\x0e\xf2\xfd\xa9\xa3\x3f\xf1\x56\xe8\xf6\xdf\x01\x00\x00\xff\xff\xba\x9f\xc1\x1c\x16\x23\x00\x00") +var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x5a\x4b\x8f\xe3\x56\x76\xde\xf3\x57\x5c\x97\xe3\xb8\x3b\x90\x54\x2f\xf7\xc3\x65\x57\x62\x95\x44\xa9\x38\xad\x97\x49\xa9\xcb\xed\x46\x81\xc5\xa2\xae\x24\x76\x51\x24\x9b\x97\xac\x6a\x19\x59\x8c\x91\x45\x80\x2c\x93\x41\xb2\xc9\x22\x59\x04\x01\x92\x4c\x92\x41\x36\x33\x13\x64\x65\x64\xdf\xfd\x1f\x0c\xcf\xe4\x5f\xe4\x3b\xe7\x92\x12\x55\x5d\xee\xf1\x4c\x32\xb0\x51\x22\xef\xe3\xdc\x7b\xbe\x7b\x1e\xdf\xb9\xec\xf7\xc5\xc0\x7c\x6a\xda\x82\xff\xf4\x87\x6d\xab\xf3\x4c\x8c\x4f\x2d\x47\x74\xac\x9e\x69\xbc\x2f\x46\x3d\xb3\xe9\x98\xa2\xdf\x7c\x62\x8a\xd6\x69\x73\xd0\x35\x1d\x31\x1c\x88\xd6\xd0\xb6\x4d\x67\x34\x1c\xb4\xad\x41\x57\xb4\x26\xce\x78\xd8\x47\xe3\xa0\x63\x75\xf5\x4c\xe3\x13\xd1\x4c\x12\x11\x79\x4b\x29\xb2\x85\x97\x09\xb5\x88\x6f\x94\x88\x23\x21\xaf\x65\xba\x12\x89\x37\x47\x47\x90\x85\xd2\x68\x8e\x46\xee\xa0\xd9\x37\xc5\xb1\xe8\xc6\x73\x75\x84\xbf\xa2\x1b\x64\xc2\x91\xe9\x75\xe0\x4b\x48\x6a\x2d\xbc\x08\xc3\xd1\x16\xcc\xc4\x2a\xce\x45\x9a\x47\x22\x8c\x7d\x2f\x0c\x57\x86\x3d\x19\xb8\x13\x07\xbb\x3f\x16\xf3\x20\xc3\x68\x33\xc8\x16\x32\x15\x3b\x53\x79\xbd\x53\x13\x3b\x49\x1a\x4f\x77\x44\x8c\x86\x4c\xaa\x0c\x2d\x53\x39\xf3\xf2\x10\xb2\x94\x1e\xc3\x12\xa0\x3a\x6d\x00\xef\x86\xf1\x3c\x95\x49\xac\x82\x2c\x4e\x57\xe7\x86\x3d\x1c\x8e\xc5\xb1\xe1\xb4\x6c\x6b\x34\x76\xc7\xcf\x46\x34\xec\xd2\x53\x0b\x8c\xcb\x83\x73\xac\x37\xc8\x97\x97\x58\x2f\x9e\x41\xa2\xca\xa5\xd2\xfa\x7a\xa9\x64\x9d\xe5\x54\x04\x11\xf4\x96\xac\xb2\x61\x39\xce\xc4\x74\x47\xcd\x2e\x70\x73\x07\x93\x3e\x84\xed\xef\x41\x94\x82\xb2\x32\x3d\x37\x46\xf6\x70\x3c\x6c\x0d\x7b\x68\x5f\x64\x59\x62\xb4\x87\xfd\xa6\x35\xc0\x1b\xab\xbb\x88\x55\xc6\x3b\x72\x27\x36\x0d\xf9\xe0\x5e\x39\xfe\xbe\x3a\xda\xdd\xfd\xe0\x9e\x1e\x8e\x97\x0f\xee\x9d\x8e\xc7\x23\x77\x34\xb4\xc7\xf7\xd5\xae\xc1\x2f\xcd\x76\x1b\x28\x19\xeb\x0e\x08\x38\xdc\xdb\xdb\x83\x0a\xed\x40\x79\x97\xa1\x14\x8e\x73\x2a\x66\xd2\xcb\x72\x6c\xfe\x66\x21\x23\x11\xc5\xd0\xe4\xda\x0b\x42\xea\x36\xda\x96\xd3\x3c\xe9\x99\x2e\x0d\x3b\x16\x33\x2f\x54\xd2\xc0\x73\x29\xec\xe0\xa0\x22\xaa\xd5\x1e\xd0\x51\x47\xa4\x7d\x71\x06\xcb\x78\x2a\x8d\x61\xa7\xd3\xb3\x06\x66\x09\xb8\x16\x52\x0a\xb6\x87\x93\xb1\x69\xbb\xbd\x61\x77\xdd\xf5\x89\xe8\xca\x48\xa6\x5e\x06\x38\x33\x99\xa8\x23\xb4\xfc\x81\xf0\xa7\x80\x33\x5b\xec\x66\xf1\xee\x1c\x36\xb3\xeb\xe7\x2a\x8b\x97\xbb\x04\x99\xe2\x01\x0d\x6e\x17\xbe\x4c\x33\x51\xf7\xbd\xe3\x2c\xcd\xa5\xa8\x4f\x73\x08\x0a\xe2\xe8\xf8\xf1\xa3\x87\x7b\x8b\xbd\xe5\x9e\x12\x75\xc2\xf4\x78\xb9\xa2\x9f\x86\x7c\xe5\x2d\x93\x50\x36\xfc\x78\x69\x7c\x02\x39\xc3\x54\xcc\xd2\x78\x29\x3c\xd1\x48\x66\xaf\xc4\x2c\x80\x62\xf2\x55\x12\xa7\x19\x8e\x95\x7b\x60\x6a\xe2\x2c\x88\xa6\x64\xdc\xb4\x58\x30\x0b\x7c\xbd\xd7\x18\x18\xde\x9b\xc6\x90\x42\x20\xce\xe2\x74\x2e\x33\x91\xc5\xc5\x7c\x9e\x98\xa4\xc1\x35\x0d\xbe\x92\xab\xfb\x5a\xaf\x38\x91\x91\x52\xa1\x48\xae\x7c\xb5\x7f\x20\xea\x00\x8f\xa4\xf2\xea\xf5\x38\xcf\x8a\x37\xb9\x14\xf5\x28\xc6\x34\xf5\xc3\x66\x61\x64\x39\x89\x3a\x14\x3d\x4c\xa5\x32\x5a\xa6\x3d\x76\xc9\x5f\x01\x77\x15\xc2\xdd\x72\x19\xe3\x89\xf9\xec\xce\x01\x85\x44\x2c\x3f\x49\x12\x58\x7f\x88\xb3\x0e\xc9\x07\x32\x09\x04\x49\x29\x2f\x9a\x02\x05\xc0\xed\x6b\xdc\xe8\xbc\x30\xbc\xe2\x7d\x0c\x01\x5a\xc9\xd4\x00\x16\x39\x3f\x35\xcb\x57\xd2\xcf\x01\xb0\xe1\x8c\x9b\x63\xab\xe5\xb2\xbd\x8f\x9a\x63\xd8\x9c\x8e\x2a\x21\x41\x8c\x53\x2c\x16\xed\x7e\x69\x8d\x84\xca\x13\x82\xd5\x30\x07\x6c\x48\xdc\xb6\x31\xa1\x1e\x36\x13\x44\x73\x1d\x75\x70\x14\x38\x92\xa8\x1e\xc6\xf3\x39\x8e\x31\x87\xeb\xa9\x9a\xf0\xbd\x48\x5c\x4a\xb1\xb3\x88\x97\x52\x87\x0b\x1c\x54\x88\x43\xdc\x31\x7a\x4d\x0e\x73\xe4\xb5\x84\x03\x8d\x80\xc7\x4e\xbd\xcc\x43\x1c\x90\xe7\x95\x90\xb3\x5c\xa9\x97\x21\x07\x1d\x58\xd3\x3c\x95\x4a\x4b\x42\x63\x90\xc9\x43\x74\x04\xd9\x87\x8a\x22\x58\x2a\xfc\x45\x4c\xc1\xad\x7d\x52\xc6\x14\x9e\x6b\x9c\x0e\x1d\x72\xa5\xfd\x83\x47\x8d\x3d\xfc\xb7\x7f\x74\x78\xb8\xf7\xd0\x28\xc2\x23\x99\xb4\x51\xc4\xba\x34\x8e\x33\x63\xd4\x74\x9c\xb3\x36\xe3\xd2\xa1\x85\x2a\xcb\x46\xe1\xaa\x26\x64\x19\x0a\xb5\x53\xd2\xce\x52\xf9\x32\x0f\xd2\x42\x45\x84\x9c\x60\xb6\xaa\xcf\xf2\x30\xdc\x81\x27\xf7\xd6\x61\x50\x8f\x2f\xc5\x96\xfb\x67\xa9\x86\x3e\x0a\x41\xfa\xb3\x93\x35\xa6\x97\x80\xc3\x9b\x2e\x83\xe8\x9c\x23\x99\x9f\xa7\x41\x86\xd0\x69\x0d\x70\x82\xbd\x1e\xdc\xb9\xf5\xa4\x72\x18\xef\xbd\xa7\x13\x89\xce\x33\xe3\xa1\x78\x62\x9a\x23\xf1\x6c\x38\xb1\x05\xeb\xd6\x6e\x8e\x9b\xc2\x69\x76\xcc\xf7\xde\x33\x1c\xb3\x65\x9b\x63\x17\x56\x08\x01\xef\xbd\xff\x59\xa7\x6d\x9e\xd9\xf8\xff\x0f\xff\xe8\x1e\xd9\x42\x9e\xc5\x74\x8c\xb0\xf7\x54\x2e\x25\x87\xe1\xa9\x07\xa7\x40\x00\xb1\x06\xae\x6d\xf6\xcd\xfe\x09\xe2\x49\xbb\xf9\xcc\xc1\xfc\x47\x46\x6b\x38\x7c\x62\x99\x9c\x2e\x2a\x90\xba\xde\x8d\x54\x74\xa8\x45\xf7\x7a\x5e\x75\x4c\x10\xf9\xa9\x9c\x06\x1a\x15\x9b\x92\x98\x22\x07\x8e\x5f\xad\x84\x97\x03\xe5\x28\x2b\xad\x72\x21\xbd\x29\x36\xc2\xa9\x0f\x0e\x41\xf6\xc5\x2f\x86\x4d\x49\xd6\x41\xf4\xb7\x87\x5f\x3c\x73\x9b\x93\xf1\xa9\x39\x80\x81\xc3\xc8\x87\xeb\x14\xf6\x45\xfd\xcc\x3c\xa1\xae\x3a\x35\x14\x89\x01\x86\x72\x6e\x34\x5b\x63\xeb\xa9\xe9\xb6\x70\x42\x6e\x8f\x9e\xfa\xd6\x00\xd1\x92\x14\xdb\x7f\xbc\x07\xe1\x8e\x49\x6e\x42\x06\xf1\xbd\x83\xe0\xad\xbc\x1b\x09\xbb\x47\x28\xf2\xe3\x68\x16\xa4\x4b\x21\xeb\x4b\x84\x78\x76\x8c\x54\xce\x03\x95\xe9\x28\x09\x99\x5d\xcb\xa1\x80\x6c\x22\xab\xf4\x5c\xce\xef\x76\xbf\x72\x94\xed\x18\xe9\x8e\x73\x44\x18\xc6\x37\xc5\x64\x2c\x40\xbe\xcf\x06\x21\x00\x1a\x07\x03\xdf\x8f\xf3\x28\xd3\x06\xb4\x8e\xf6\x2c\xde\x66\xfd\x2b\x42\x79\x8b\x4b\x04\x1b\xa1\x82\x39\xe7\x0f\x6c\xf5\x3a\x90\x37\x10\xbb\xca\x16\xf0\xe3\x06\x76\xf6\xf9\xc4\xb2\x91\x89\xac\xee\x00\x27\xfd\xd4\x32\xcf\x2a\x12\x5a\x9e\x8f\xd0\x82\xbc\x95\x79\xd8\x8b\x12\x49\xe0\x53\x4a\x2b\x83\x43\xab\xd9\x3a\x35\xdd\xe6\x53\xd8\x99\x5d\x99\xd5\x27\x0c\xa0\x8c\x0e\xe1\xa4\x7f\x31\x7e\x30\x1c\x83\x16\xb9\x84\x41\x75\x38\x05\xf8\xa9\xcc\x30\xeb\x88\x73\x35\x65\x60\x30\x90\x45\x7e\x49\xf9\x83\x5c\x23\xc8\x94\x4e\x4f\x9a\x18\xec\xee\x3f\x7c\x50\xca\x7c\x97\x2d\xac\x17\xf9\xbe\xb1\xc3\xef\x83\xae\x1d\xf3\x69\x40\x7b\xff\x4a\x00\xfe\x60\x99\x2f\x29\xf8\x03\xc9\xaf\x90\xd1\xb1\x39\x9c\x79\x8a\x00\x91\xc4\x3a\x20\x66\xab\x64\x93\x7d\x61\x2b\x56\x7f\xd2\x27\x6f\x03\xb0\x5f\x02\xa8\x53\xb3\xe2\xb9\xc6\xf3\x1b\x79\xb9\x88\xe3\x2b\x8a\x78\xa7\xf8\x15\x99\xa7\xae\xc4\xcb\x5c\x22\xb5\x86\x32\x9a\x23\xbe\x7f\x3e\x31\x41\x6f\x7a\xe6\xa0\xcb\x31\x62\xbf\xa0\x17\x32\x0c\xe0\x30\xe0\x7b\x4b\x49\xe9\x08\x47\x8a\x28\x81\x2d\x28\xa3\x6d\x92\x99\xda\xee\xd8\xea\x9b\x48\xfe\x98\xf3\x80\x1c\x9b\xcd\x29\x88\x38\x96\xc8\x4a\x62\xa5\x53\x71\x9e\x58\x23\x77\xdc\x73\x5c\xcc\x23\xba\xba\xd9\x1f\x59\x31\x91\x28\x8d\x5b\xbb\x02\xcc\x49\x3e\x9b\x71\x96\xa2\x5d\x92\x57\xfa\xa0\x94\x91\x0c\x6b\x40\x47\x26\xc4\x2c\x61\x26\x01\x67\xa5\x82\x62\x4e\xe3\xe8\x43\x24\xce\x08\xfb\xb8\x21\x3e\xc7\x9d\x0d\x04\xa4\x41\xdb\x3d\x99\x74\x3a\x44\x53\xcc\x81\xa6\x6f\xe0\x80\xe4\xec\x88\x9a\x48\x7d\x2b\xcd\xf8\xd8\xa3\x34\xc1\x75\x26\x27\x3f\x32\x5b\x63\xe6\x6b\x25\xd9\xbd\xaf\x4a\x8b\xd3\xcc\x8f\x78\xce\x92\x4d\x49\x2d\xb3\xa4\x31\xa7\x67\x32\xa3\xa3\x07\x8f\x1f\xa1\xef\xf3\xcf\x8b\x8e\x97\x2f\xb9\xf5\x80\x50\x1a\xc4\x99\xac\xd1\x7e\x39\x91\x12\xa9\x90\x80\x54\x1f\xf3\xce\x47\x0f\x1f\x20\xdc\x3b\xfd\xf1\xc8\x41\x4b\x18\x52\x72\x43\x28\x9a\x36\xe0\x5f\x74\xf2\x08\xcd\xf6\x18\x28\x12\x25\xe7\xb9\x58\x88\xd4\x4f\x71\x30\xcb\x25\x04\x41\x0d\x4a\xec\x76\xa7\x25\x1e\x7e\xb4\xf7\x71\x43\x58\x7a\x21\xbd\xdf\x32\xe1\xaa\x8d\x20\x20\xc4\x0b\x79\xe1\x0d\x62\xf0\x7a\xbd\x32\xa5\x55\xb8\xe1\xa9\xd9\x1b\x12\x69\xd1\x61\x46\x33\x4d\xe2\x5f\x1c\x32\x89\x38\x4f\x03\x3a\x2e\xc4\xd4\xc6\xda\x38\x79\x0e\x4b\x69\x31\x0f\xd9\x4c\xa0\xb0\xb5\x2d\x71\x8b\xe3\x33\x4d\x53\x2b\xc4\xa5\x25\xf6\x82\x71\x2e\x6d\xa8\x08\xed\x1b\x9f\xd1\xa9\x90\x35\xac\xf2\xb8\xb8\xaa\x74\x43\x0c\x11\xbf\x48\x2d\x34\x92\x68\xac\xac\x64\x38\xab\x53\xa0\x02\x5e\x95\x89\x4a\x9b\xe9\xda\x44\x75\x5c\x13\x7e\x18\x40\xab\xea\x40\xca\xe7\x2e\xf1\x30\xab\x43\xee\xbf\xe1\xc4\x77\x70\x33\x6d\xdf\xef\x22\x67\xc5\x88\x0d\x3b\x63\x13\xd3\x1c\x76\x3a\x85\xe3\x83\xe9\xd0\x89\x3e\x38\x3c\x38\x68\x88\x31\x29\x51\x10\x9f\x17\x14\x70\xf1\x28\xd9\x70\xd7\x83\xa1\x21\xe9\x7f\xb1\x43\x16\xbe\x23\x3e\xe5\xee\xcf\x2a\x3c\xf9\x8f\x2f\x08\x86\x25\x3c\xc4\xe8\xd8\x28\x02\x8f\x8b\x45\x61\x22\xeb\xcc\xc7\xf9\x20\xf1\x94\xba\x89\xd3\x69\x41\x60\x36\xdc\xc5\x78\x1e\x53\x06\x7d\xdb\x6d\x8b\x8e\x86\x0e\xaa\x6f\xf7\xb7\x7a\x16\x82\xa6\x6b\x91\x90\xe2\x59\xf3\x05\xae\xd7\x86\x23\x4e\x7b\x65\x64\xf6\x92\xa0\x51\x89\xce\xb4\x37\x83\xc2\x6e\x51\x49\xdd\x11\xc0\x99\x58\xec\xf2\x16\x76\xe9\x4f\x9c\x22\x88\x1a\xe3\xe1\x13\x73\xf0\x03\x27\xf9\x3e\x30\x74\x33\x10\xf5\xc8\xe0\x42\x26\x2b\x0d\x20\x98\x6a\x7e\x2c\x91\x1f\x33\x3e\x1f\xf4\x97\xe2\x10\x19\x55\x0c\x74\xa7\x44\x6f\xc9\xa8\x55\x63\x1e\xc7\x73\x8d\xf7\x2e\x38\xc7\x0b\xe9\x67\x6b\x70\xb8\xe7\xff\x08\xce\xcd\xcd\x4d\x21\x08\x30\x29\x5e\x86\x35\x20\x94\x82\x68\x16\x37\xb4\x55\xfc\xe0\xe1\xd8\x23\x71\xfe\xbb\x00\x2e\x98\xc0\x96\x4a\xb1\x06\xec\x80\xa5\xdc\x89\xf0\x3b\x67\x15\x00\x17\x80\xbc\x7c\xf9\x3b\x82\x81\xfa\xcc\x25\x0d\x5c\x52\x81\x63\xae\xf8\xf6\x97\x7f\xf9\xeb\xaf\x7f\x72\xa7\x9d\xa4\x5e\xb2\x28\xa2\x71\xb1\x8f\xc6\xde\x6f\x32\x93\x3b\xe7\x6c\xef\xfe\x46\x06\x97\xf1\xef\xa8\x00\x48\xd8\x9d\x88\xc3\xf2\x59\x6c\x65\xdd\xdf\xb0\xd3\xbb\xa7\x6c\x99\xf3\x73\x9f\x48\xd6\x56\xf1\x23\x97\x71\xba\xd2\x35\x06\x52\xe1\x0e\x07\x0f\x6a\xe5\x91\xb7\x2e\x5e\x8a\xc1\x46\xb3\xdd\x1c\x8d\x99\xf9\xea\x96\xb2\xe4\x28\xfa\x8b\x3a\xa6\xdb\x42\x4a\x05\xb1\xbc\xf6\xc2\x0a\x79\xd8\x92\xf8\x70\x0f\xf5\x06\x24\x3d\x6d\x92\x22\x0f\xf7\x4a\x41\x7a\x2f\xec\x6d\xd5\xbd\x40\x40\x04\x2f\x62\xbe\x1e\x53\xe4\xd3\x01\x0f\xb3\x78\xc2\x11\x38\x72\x86\x68\x75\x75\x9c\xf9\x49\x8d\x3a\x8f\x8f\x1e\x1e\x3e\xfa\xb8\x56\x46\xb1\xe3\xa5\xe7\x7b\x29\x52\xcd\xf4\xf2\x78\xaf\x96\xc4\x71\xe8\x12\xc7\x3a\x06\xe3\xa9\x05\xd3\x50\xba\x05\xd7\x39\xd6\xb4\xbb\x5c\xf9\x48\x5c\x6c\x4a\xbb\xfd\xfd\x83\xfd\xfd\x8b\x22\x3f\x32\xd5\x57\x0a\x1b\xba\x1b\x53\xf2\xa7\x0d\xb6\x1a\xda\xa2\xda\xbc\x0b\x57\x70\xc5\xa7\x56\x7b\x1b\xd8\x51\x1a\x5f\x07\x54\x9a\x30\xef\x9f\x23\x5f\x92\xfe\x4a\x6f\x0f\x43\x8e\x38\x11\x2e\xbc\x6b\x0a\xd8\xab\x72\xd4\x4a\xd2\xa5\x1a\x2d\x0f\x0a\xa2\x77\xb8\x29\xe8\x51\x62\x36\xe6\x0d\x71\xc1\xc5\x60\xd1\xab\x2e\x7e\x6f\x28\x92\xc2\x47\xa8\xc7\xea\xf8\xad\x4f\x53\x22\x95\xbb\xdc\x28\xa6\x2a\x2a\x37\x8c\xf2\x05\x04\xa7\xdc\x19\xd5\xc9\x47\xe5\x7a\x9f\x95\x7b\x74\x33\x22\x22\x17\x6b\x98\xdc\xe2\xee\xb2\x28\x6b\x4b\x4d\xb0\xa6\x53\xa8\xec\x83\xf0\x06\x52\x17\x72\x45\x9d\x58\x70\x88\xc0\x0d\x83\x2b\xe9\x6a\xbe\x8f\x19\x96\x26\x90\xc4\x12\x4a\xbc\x60\xb3\xec\x5a\x85\x39\x57\xd9\x89\x76\x6f\x2d\x10\x2e\x3d\xb1\xcd\x0a\x6d\x35\x23\xe6\x4b\x8a\x12\x07\xaf\xbf\x35\x97\xee\xb4\xca\x1a\x81\x8a\x3f\x2d\x05\xd3\xb9\x63\xb3\x75\x78\x0f\xe1\xb8\x76\xa1\x2d\x21\x8f\x41\xee\xf6\x8c\x6e\xcb\x2d\xbd\x87\xa9\x38\x84\xe8\x8e\x8d\x94\x30\x98\x49\x96\x73\xc7\x74\xc7\x74\x1c\x2a\x62\x7b\x56\xc7\xdc\x9e\x6f\x3c\x2f\x8a\x2f\xb2\xea\x31\xf1\xd4\xd0\xf3\x25\x55\x74\x45\x3b\x03\xbe\xb9\xa9\xd0\x44\x4b\xdb\xf7\x4b\x14\x30\xf9\x2d\xfb\x2e\xfa\xb1\xa2\xfd\xd4\x6a\xd1\x3a\x05\x7f\xd6\xe5\x9c\x3b\x19\xf5\x86\xcd\xb6\x5b\xbd\xa3\xd0\x75\xa0\xe2\x7b\xe4\x20\x92\x4a\xea\x2b\x1f\x26\x3e\x3e\xea\x19\x34\xec\x4c\xf3\x58\x2d\xf2\x78\xc7\xe8\xda\x85\x20\x67\x38\xb1\x59\x3e\xa2\x36\x0b\x58\x33\xd1\x72\x48\x85\xa7\x78\x59\x06\xef\x06\x6b\xce\x48\xcd\xb3\x85\x64\x65\x36\xad\x8a\x59\xad\xe4\xd3\x04\x03\x6f\x6b\x85\x14\xc1\x70\x41\x87\x75\x51\x1c\xe3\xe6\xec\x46\x74\x2f\x46\xfc\xb2\x22\xe4\xd6\x44\xad\xdc\xa6\xfb\x62\xeb\x66\xa6\xd2\x41\x17\x99\x91\x24\x48\x97\x54\xb3\x72\xad\x4e\x17\x00\xa8\xfd\x54\xe1\x26\xc1\xd2\x9b\xcb\xdd\x17\x89\x9c\xff\xa9\x7e\x4c\xa2\xb9\xd1\xec\xf5\x86\x67\x66\x9b\x2f\xa8\x28\xbf\xdc\x39\x88\xd8\xde\x2b\x5d\x5f\x82\x2b\x4b\xac\xc9\xd1\x61\x7b\xaf\x87\x07\xfd\x13\xa3\xdf\xfc\x82\xcb\x4a\xba\x76\x3e\x28\xe6\x45\xeb\xbb\x73\x9a\xa4\xb8\xe2\xc8\x93\x30\xf6\x6e\xa1\x84\x22\x8b\xa6\x13\xd9\x75\xca\x2b\x73\xb2\x45\x82\xdb\x49\xa4\x0f\x32\x2d\xf5\x85\x62\x41\x46\x09\x3a\xba\xd6\x5a\x09\x84\x8f\x84\xae\x13\x09\x16\x79\x0b\x43\x50\x61\x04\xe1\xc3\x52\x08\xb2\x4b\x51\xd6\x60\x38\x1c\x85\x2e\xf3\xe9\xe0\x9a\x03\xc7\x6a\xd5\xc4\x24\x0a\x5e\xb5\x3d\xaa\xb9\xec\xfc\x72\x55\x3c\x75\x5a\x8f\x0f\x0e\xca\xdf\x2f\xf5\xc3\x83\xbd\x5a\x29\x7a\xfd\xa0\xbb\x0e\x0f\x0f\x3f\x5e\x3f\x0c\xbc\x28\xae\x89\x27\x41\x86\xc4\x80\x9a\xc5\xc9\x40\xaa\x8b\x9f\x3e\x0a\xa9\x60\xfd\xec\xa7\x31\x27\x30\x7e\xa5\x59\x45\x72\xe3\xe3\x24\xb6\x42\x2a\x93\x8f\x7a\x97\x54\x5e\x57\x60\x50\x52\x72\xe4\x21\xf6\x11\x87\x5e\x34\x6f\xc4\xe9\x7c\x37\xb9\x9a\xef\x12\x7a\xbb\xef\xe3\xa9\x4e\x74\x33\xf3\xc8\x4e\x3a\x43\xbb\xdf\xd4\xb9\x08\x3c\x56\x7f\xfb\xd8\xdc\xbc\x96\x39\xa9\xa0\xa7\xd5\xa4\x44\xd9\x94\x7e\xa9\x44\xd5\xbe\x5b\xde\x8e\xde\x72\xdf\x72\x6e\x59\x0e\xa1\xd4\xf4\xe8\x20\x94\x4c\x3c\xbe\xe3\x5f\x62\x64\x80\xd2\x82\x3f\x16\x94\xd6\x59\x4e\xab\xb1\x95\xec\x18\xc5\x2d\x65\xd1\xfa\xff\x59\xde\xdf\xaa\xec\xf5\xf5\x45\xa9\xf8\x38\x45\xe8\x22\x35\xdb\xf2\x32\x9f\xd3\x83\x05\xec\xe9\xf7\xcc\x4b\x59\x7f\x33\x4d\xe3\x94\x1e\x5a\x69\x40\xf7\x81\xb7\xb3\xb3\x96\x60\xf4\xcc\xa7\x26\xb1\x14\x7e\x35\x4a\xa6\x52\x62\xc3\xaa\xeb\x9b\x32\x3a\x86\x46\xd1\x7e\x5e\x4e\x5b\x4f\x60\x30\x6e\x8f\xa6\xc6\xcd\xd0\x4f\x74\x8d\xa7\x23\x8f\xa2\x9b\xca\x18\x66\x01\xeb\xc6\x50\x91\xc6\x19\x9e\xef\xa9\x1b\xb2\x40\xf6\xc1\x98\x42\x03\xdd\x0e\x14\xd4\xe0\xfe\xdb\xf9\xa6\x37\xec\xba\xf6\x70\xac\x2b\xd5\x22\x58\x91\x27\x87\x08\xad\x15\x77\xa6\x3b\x06\x9c\x22\xed\x66\x4b\x06\x63\xba\xa7\xbd\x99\xbe\x03\x39\x25\xce\x8c\xf4\x3a\x94\xa8\x45\x30\xcb\xde\x25\xe7\xe0\x31\x48\x8b\x17\x41\xa0\xf8\xf4\x53\xbc\xd5\xc4\xc1\x83\x87\x95\x20\xe3\x3a\xa7\x56\x87\x3f\x4a\x3d\xe6\x1c\x36\xa7\x48\xc8\x5a\x4f\x51\xc9\xac\xde\xd6\xab\xdd\xb4\x7a\xcf\xde\xd2\xcc\x7c\x95\x04\x29\xc7\x8e\x95\xa2\xed\x90\x00\xda\xcb\xbd\xa9\x0c\x25\xdd\x6b\xce\xe8\xba\x73\x89\x6d\xd3\x88\x6d\xb8\x1e\xf1\x66\xd6\x77\xcf\x95\x63\x8e\xee\x3a\xe3\xa8\x7a\x6a\xb6\x2c\x08\xaa\x66\xa7\x14\xcd\xf4\x77\xd3\x02\x8f\x25\x92\x32\x22\xf0\x1d\x54\xc2\x36\x41\x65\x06\x66\x6b\xec\x22\x1f\xf7\x9d\xea\x87\xb4\x31\xe6\xc3\xd7\xd2\xb5\x6c\xbe\x78\xa9\x30\x61\x08\x09\xb1\xdc\xbb\xa4\x56\xc9\x49\xe1\x16\xe0\x76\x64\xf2\x39\xa2\xa3\xf6\xfd\x7c\x9a\xdc\xb2\x7b\x1a\x52\xfd\xb4\x89\x77\xbe\x43\xac\x10\xef\xe2\xe3\xe4\xfa\x93\x03\x47\x92\x5b\x28\x51\x63\x15\xa5\x77\xdd\xba\x6d\x6f\xa0\x1d\x78\xf3\x08\xcb\x05\x7e\x09\x5d\x71\x2f\x44\xe4\x61\xa7\x72\x43\xf7\xce\x81\xb7\xae\xec\x0a\xe2\xfe\xdb\xde\x77\xf0\xe9\x4a\xe2\xae\x9b\xcf\x4e\xf1\x26\x3f\x17\x31\xef\xf9\xce\x7e\xf5\x9a\x65\xa7\xb6\x73\xb0\xf5\x7e\x4e\x67\x62\xd2\xdd\xa9\x53\x81\x6d\x1d\x76\x6f\x43\xb7\xf9\x5a\xb5\x81\x6f\xfb\xab\x95\xd8\xfa\x80\x64\xb4\x6d\x92\xcd\xe3\x4e\x30\x6f\x4a\xf7\x84\xaf\x90\x54\xf4\xf6\x8e\xf8\xfb\xd3\x11\xfd\xf9\x6c\xfd\x65\x9a\xef\xba\xff\x04\xa1\x37\x05\x61\x3d\xce\xb3\xd9\x63\x83\xac\x86\xf3\x09\xb8\xf1\x39\xfb\x43\xd7\x1a\xbb\x6d\xab\xd3\xd9\xf6\x7e\xba\xf3\x4d\xe7\xb9\xe6\x4a\x64\xed\x9c\x19\x80\xe2\x87\x98\x28\xe6\xfe\x87\xe5\xb2\x3b\xf5\xba\x37\xa7\x1d\x2a\x00\x28\xf0\x82\x88\x46\xd9\x84\x12\x1d\xa7\xc3\x38\x5a\x27\xbc\x20\xab\x2b\x7f\xc9\x25\xec\x34\xf6\x15\x37\xcc\xfd\xdd\xfd\xc6\xa3\xc6\x03\x62\xbc\x4d\xbb\x4b\x1b\xe0\xab\x19\xac\xb2\x90\x5e\x48\x17\xe4\x74\x79\xde\xe0\x1d\x37\x66\xca\xbf\x3a\x7f\x8b\x9b\x99\xfc\x81\x52\xf3\xfa\x4d\x51\xba\x88\xf3\x74\x43\x2f\x38\x46\x7d\xd4\xa8\xd6\xa4\x07\x1f\xbd\x5b\x4b\x5a\xac\xaa\x67\x1e\xa5\x44\xa7\xb8\x02\xa8\xd7\x33\x6f\xae\x7e\x1b\x45\x49\x5a\xa1\xea\x5a\xcf\xe7\xc1\xfe\x63\x0a\x33\xcd\x01\x37\xc8\xa8\x3e\x71\x6a\x5f\x2d\xea\xad\x01\xfd\x3d\x7d\x52\x9b\xca\x7a\xdb\xac\xcd\xd2\x7a\xc7\xae\x45\x61\x7d\xd0\xab\x85\xd7\xf5\xde\xd3\x5a\x9a\xd7\xed\x49\xed\x85\x57\xff\xd1\xa8\x26\x55\xdd\x74\x6a\x49\x56\x3f\xb1\x6b\x49\x58\x1f\xf5\x6a\x97\xf3\xfa\x49\xb7\x86\x35\xad\x31\x7f\xa9\x24\xd9\x26\xc2\x54\xa0\x16\xb5\x5f\xfd\xeb\x8f\xbf\xfd\xaf\xbf\xfa\xf6\xe7\x3f\xfd\xee\xaf\xff\xbc\xf6\xab\x5f\x7c\xfd\x3f\xff\xfc\x93\xe2\xa5\x2d\xf3\x4c\xf9\x8b\x5a\x27\xf5\xa2\x6f\xfe\xd1\x0b\x54\x6d\x20\x51\x9c\x82\xa4\xa0\xb2\xef\x79\xd9\x75\x20\xff\xfb\xef\xf3\xda\xeb\xbf\x7b\xf3\x67\x6f\xbe\x7e\xf3\xf5\xeb\x5f\xbe\xfe\xf9\xeb\x5f\xd4\xbe\xfb\x9b\x7f\xf8\xee\x6f\xff\xe5\xd7\xff\xf6\xd3\x9a\xa9\x12\xef\x9b\x9f\xc5\x61\x6d\x04\xbe\x96\xcf\xf3\x6f\xfe\x49\xe1\x31\x54\x57\x41\xed\xf5\xcf\xde\xfc\xc5\xeb\xff\x7c\xfd\x1f\xaf\xff\xfd\xcd\x8f\xf5\xcc\x9a\x95\x79\x61\x40\xcc\x49\x33\x8f\x29\xc3\x4f\x8c\x90\x78\x10\x4a\x91\x2b\xf8\x33\xc3\x43\x9e\x22\x89\x29\x9d\x1b\x8c\x0f\xe3\x64\x30\x48\x78\xfc\x6a\x61\x30\x52\xfc\x58\x1f\x9f\x19\x8c\x18\xff\xc3\x11\x83\x61\xa3\xf8\x98\x1a\x8c\x1d\x1e\xa3\xd0\x60\x00\xe9\xdf\x6f\x5c\x1b\x8c\x22\x7d\xba\xcd\x0d\x86\x12\x8f\x2f\x3c\x83\xf1\xa4\x55\x94\xc1\xa0\xe2\x91\x7f\x0d\x06\x97\xde\x42\x83\x11\xa6\x7f\x77\x32\x37\x18\x66\x22\xe3\x19\xdd\x19\x91\x03\x9f\x1b\xce\xe9\xf0\xcc\xed\x80\xac\x81\xba\x9c\xd8\xfa\x6b\x75\x19\xa8\xff\x37\x00\x00\xff\xff\x13\x55\x54\xc9\xe1\x23\x00\x00") func confAppIniBytes() ([]byte, error) { return bindataRead( @@ -127,7 +127,7 @@ func confAppIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/app.ini", size: 8982, mode: os.FileMode(420), modTime: time.Unix(1438316323, 0)} + info := bindataFileInfo{name: "conf/app.ini", size: 9185, mode: os.FileMode(420), modTime: time.Unix(1438768062, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -747,7 +747,7 @@ func confLocaleLocale_bgBgIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/locale/locale_bg-BG.ini", size: 51641, mode: os.FileMode(493), modTime: time.Unix(1438236616, 0)} + info := bindataFileInfo{name: "conf/locale/locale_bg-BG.ini", size: 51641, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -767,12 +767,12 @@ func confLocaleLocale_deDeIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/locale/locale_de-DE.ini", size: 36233, mode: os.FileMode(493), modTime: time.Unix(1438236774, 0)} + info := bindataFileInfo{name: "conf/locale/locale_de-DE.ini", size: 36233, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x7d\xdb\x72\x1c\x47\xd2\xde\x7d\x3f\x45\x4b\x0e\x9a\x52\x04\x38\x0c\x49\x61\x87\x43\x41\x52\x86\x00\xf1\xb0\x3f\x71\xf8\x09\x70\xd7\x6b\x06\xa3\xb7\x31\xdd\x98\xe9\xc5\x4c\xf7\xa8\x0f\x18\x61\xaf\xfc\x1a\x7e\x3d\x3f\x89\x33\xbf\xcc\xac\x43\x77\x0f\x28\xed\x3a\xfc\xdf\x00\x35\x55\x59\xa7\xac\xac\xac\x3c\x55\x75\xbe\xdb\x65\x45\xd9\x2d\xd3\x97\xe9\x71\xba\xcb\xab\x7a\x53\x76\x5d\xda\x95\x9b\xdb\x67\xeb\xa6\xeb\xcb\x22\x7d\x53\xf5\xf4\xbb\xbd\xaf\x96\x65\x92\xac\x9b\x6d\x49\xa0\x6f\xe9\x5f\x52\xe4\xdd\xfa\xa6\xc9\xdb\x82\x32\x4e\x2d\x9d\x94\xbf\xed\x36\x4d\xcb\x40\xbf\x48\x2a\x59\x97\x9b\x1d\xd7\xa1\x7f\x49\x57\xad\xea\xac\xaa\xe9\xe7\x15\xa5\xd2\x77\x75\xd2\x35\xcb\x2a\xdf\x64\x41\x01\x32\xac\xfc\xc7\xf4\xfb\xba\x48\xaf\xfa\x72\x97\xbe\xe8\xb6\xf9\x66\xf3\x2a\xef\x50\xa5\x2f\xd3\x7c\xb9\x6c\x86\xba\x7f\xf1\x5c\x0a\xa4\xf1\x66\xe8\xad\xf5\x8b\xa1\x97\xbc\x61\x67\x59\x1f\x77\x49\x5b\xae\x2a\x9a\x58\x4b\x59\x1f\x34\x99\xec\xcb\x9b\xae\xea\x79\xd0\x7f\x91\x54\x72\x5f\xb6\x5d\xd5\xf0\x78\xfe\x2c\xa9\x64\x97\xaf\x18\xe0\x92\xfe\x25\x7d\xb9\xdd\x6d\x72\x54\xb8\xd6\x64\xb2\xc9\xeb\xd5\x20\x30\xef\x35\x99\x24\x03\x61\xae\xce\x81\xb3\x8f\x9a\x4c\xca\x6d\x5e\x6d\x18\x3f\xcf\x38\x41\xed\x76\xdd\xbe\x01\x16\x2f\x35\x49\x63\xcc\xfa\x87\x5d\x89\x21\x3e\xbb\xa6\x54\xb2\xcc\x77\xfd\x72\x9d\x53\xce\x89\xa4\x12\x02\xda\x35\x34\xd6\xa6\x7d\x00\x9c\xfd\x48\x9a\x76\x95\xd7\xd5\x3f\xf2\x5e\xc6\x7f\x11\xfc\x4c\xb6\x55\xdb\x36\x3c\xf5\x33\x24\x92\xba\xdc\x67\xdc\x0e\xe5\x9c\x97\xfb\xb0\x15\x2e\xd9\x56\xab\x56\x66\xc9\x85\x67\xf8\xc5\xad\x70\xd9\x6d\xd3\xde\x69\xc1\x6b\x4e\x8e\xaa\xd2\x20\xb4\x34\xee\x3f\xaf\x09\x2f\x5a\x7a\x86\x1f\x11\x40\x97\xe4\xc5\xb6\xaa\xb3\x5d\x5e\x97\x8c\xa3\x63\xfe\x45\x78\xa1\x5f\x89\x2e\x77\xd6\x95\x7d\x5f\xd5\xab\x8e\x8b\x25\x2b\xbd\xd2\xac\x24\x28\x73\x79\x3c\x9e\x2e\xbb\x2d\xcb\x42\x46\xd4\xa5\xaf\x29\x9d\xec\x86\xcd\x86\xe6\xfe\xeb\x50\x76\x3d\xc3\x5f\xd2\x6f\x9a\x85\xfc\x4e\xaa\xae\xa3\x04\x65\xbf\x43\x22\xa1\x05\xa8\x97\x18\xd2\x09\x12\x49\xf2\xa9\x2b\xf3\x76\xb9\xfe\x9c\xc8\x7f\xf4\xc8\x89\xc5\x62\x71\x70\x69\x98\x1c\x94\x14\xa4\x07\xeb\x20\x59\x36\x05\xff\x38\xa1\x7f\xd4\x74\x55\x77\x3d\x91\xf4\xe7\x44\x13\x0c\x26\x29\x41\x63\x5f\xf5\x9b\xd2\x67\x62\x7f\x74\xbc\x0e\xe9\xeb\xaa\xed\xfa\x67\x7d\x45\x24\xf7\x61\xa8\x13\x9e\x1f\x91\x73\x56\xdc\xd8\x2e\x7f\xd3\x10\x76\x90\xdd\xd2\xfc\xce\x1e\xae\xfe\xfd\xfd\x51\x7a\x49\x5b\x7d\xd5\x96\x94\x4e\xa9\x0d\xfa\x47\x75\x7e\x58\x24\x54\xcb\x7a\x3a\xcd\xfb\xfc\x26\xef\x4a\x8f\x56\x2e\x14\x1a\x75\x65\xa0\x54\x66\x1b\x60\x11\x5d\x1f\xcd\x77\x8e\xce\xa9\x0d\xdd\x1d\xae\x8d\x73\xde\x22\x94\xcf\x5c\x03\x95\x2f\x37\x25\xe7\x53\x53\xe9\xbb\xf3\xf3\x8b\xd3\x9f\xd3\xb2\x5e\x55\x75\x99\xee\xab\x7e\x9d\x0e\xfd\xed\x7f\xcb\x56\x65\x5d\xb6\xc4\x44\x96\x55\x4a\x3b\xa3\x25\x22\x48\x89\x3c\x65\x72\x8b\xa4\xeb\x36\xd9\x56\xd0\x7b\x75\xf5\x3e\x3d\x63\x14\xef\xf2\x7e\x8d\x81\xf4\xeb\xa4\xfb\x75\xc3\x28\x72\x1d\x5e\xaf\xcb\xf4\xb6\xa2\x59\x03\xa8\xb9\x35\x7c\xa4\x85\x8e\x71\x91\x94\x6d\x9b\xd1\xbe\xef\x1f\x32\xad\xac\xed\x8d\x21\xa5\x09\x22\x9d\xba\xe9\xd3\x9b\x32\x45\x9d\x45\x92\xd8\x80\x0d\xbb\xc7\xbb\xdd\xa6\x5a\xca\x8e\x7d\x23\x65\x1e\xd1\xcc\xa2\x15\x4b\x21\x1c\x10\x65\x65\x01\xba\x88\xff\x3d\x34\x43\x9b\x46\x6c\x00\xf5\xd7\x25\xf1\xe5\xf5\x40\x5b\x2e\x27\x9e\xba\x69\x86\xe2\x2b\x50\xaa\x8d\xde\x13\x6a\xfa\xa1\xa1\x01\x03\x3b\x0e\xc0\x77\x71\x4c\x14\xc7\xa7\x42\x5b\x6e\x1b\xe2\x0e\x8e\xd8\x2b\x22\xa8\x7d\x45\x85\x34\xd3\x2e\xbf\xa7\xfd\xd6\x37\x69\xbf\xae\xba\xb4\x20\x62\x5b\x72\xc3\xb4\x35\x06\xe2\xc7\x42\x16\x44\xa0\x42\x1a\x96\x17\xaf\x01\xa0\xb6\x03\x51\xd3\x9a\x1a\x63\x6e\xcf\x47\x13\x35\x39\x37\x4e\x4c\x89\xda\x01\x7d\x13\xe5\x36\xc4\x5b\x99\xfb\x9d\x22\xa1\xbf\xc3\xf6\x69\x54\xf9\xed\x2d\x8d\xaa\x23\xaa\x78\x9b\x2e\x37\x0d\x91\xd4\xc7\x0f\xef\xa9\xf2\xba\xef\x77\xd9\xae\x69\x41\xc6\xd7\xd7\x97\xb4\x3d\xda\xde\xe7\x06\xb8\x66\x98\x7a\xd8\xde\xd0\xaf\xfd\xba\x22\x26\x90\x07\x0b\x04\x54\x6c\xf8\x80\xa9\xd3\xa6\x5e\x60\xad\x86\x76\x33\x5a\x46\xea\xd2\x4a\x0e\x0c\x8f\x87\xf0\x9c\xff\x5c\xf9\x51\x62\xba\x1d\x9d\xc2\x7b\x2c\x2a\x4d\xb5\xc4\x69\x42\xb4\xd5\xec\xb8\xdd\x80\xb8\x2e\x34\xc3\x53\x14\x4e\x20\x57\x2e\xe7\x10\x95\xe2\x8c\x0f\x78\xe9\x96\x26\xac\xbb\xf9\xea\x8c\xd0\x80\x2d\x8d\xdc\xdb\xb6\xd9\x52\xee\x6b\xfa\xe7\x33\xfc\xf0\xcf\xb8\x3d\xc0\xe4\x45\x41\x6c\xa6\x3b\x4a\x3f\xbc\x3e\x49\xff\xcb\x0f\xdf\x7f\xbf\x48\xdf\xf5\xbc\x21\x98\x46\xfe\xce\x6b\x4b\x49\x39\x10\x1d\x28\xed\xdc\x9e\x96\xff\x6b\x26\xf0\xaf\xd3\x17\x28\xfd\xef\xe5\x6f\x39\x9d\xb3\xe5\x62\xd9\x6c\x5f\xf1\xe6\xde\xe6\xfd\x22\xe1\x12\xa2\x1a\x25\xa7\xab\xb2\x2e\x28\xa1\xc7\xaa\x96\x05\x5c\x47\xcb\x83\x43\x56\x4e\xff\x6c\xd9\xd4\xb7\x55\xcb\x13\xfa\xa5\xce\x6f\x08\x27\x26\x17\x10\x3b\x46\x89\x9d\x5d\x84\x34\xda\xc8\xd5\xed\x83\x07\xc5\x54\xcf\x39\x53\x17\x34\x61\x59\x89\x1a\x55\x91\xc9\x61\xf9\x0a\xd9\x58\xb7\x0b\x9a\x5e\x6b\xf8\xee\x3c\xc2\x9b\xdb\xdb\x0d\x31\x36\x63\x56\xda\xc3\x85\xe4\x0a\xdf\x0a\x41\x88\x18\x77\x90\x6c\x4e\xab\x0e\x90\x27\xa7\xe7\x69\x79\x4f\xd4\x46\xe4\xb0\x6b\x9b\x62\x58\x82\xc2\x18\xf6\x28\xe5\x63\x82\xf0\x4b\x9c\x61\x29\xec\x2d\xd8\xab\x3c\x34\x66\x08\x4b\x02\xa2\x2d\x5a\x48\x7b\x99\x20\xa8\x35\x41\xc2\xba\xb9\x62\xe1\x30\x2c\x9b\xad\x30\x19\x1d\x56\xa9\x1b\xd7\xa5\xe5\xae\x37\x0f\x29\x4e\x7d\xd0\xc5\xb2\x2d\x03\xd9\xae\x5b\x24\x7a\x56\x99\x84\x98\xdd\x57\x24\x54\x04\x4b\x85\x52\x13\x17\x99\x3d\xfc\x99\x01\x58\x4c\xeb\x66\xeb\xba\x81\x5d\x70\xc7\x5c\x42\x73\xa7\xce\x79\x7c\x1d\x86\x80\x1e\x58\xdc\x23\x62\xbc\xaf\xc0\x69\x14\x59\x18\x2b\x61\x0c\x5d\x53\x57\x5d\x59\xa2\x05\xaa\xff\x9c\xda\x44\x9d\x85\x8a\x30\x2a\x8a\xd8\xb9\xfb\xd7\x66\x48\x8b\x26\xe5\x83\x00\xec\x8c\x6a\xdb\x54\x6b\x9d\xbe\xce\x39\x6d\xab\xd5\x9a\xf8\x4a\xb3\x3f\x12\xa4\xed\xd7\x4d\xc9\xb4\xf3\xee\xf4\xe5\x77\x32\x8e\x15\x33\x37\x57\x89\xd9\x62\x3e\xf4\x0d\xd3\xa9\x2e\xa1\x0c\xc1\x1d\x2f\x80\x9c\x08\x4b\x02\x34\x16\x4f\x4d\x00\x9b\x9e\xd6\xba\x4f\xc2\x32\xdd\x20\x1e\x46\x6a\x8f\x44\x5c\x95\x62\xb2\x55\x03\xc9\xcc\xa4\x16\x66\xd5\x24\x4a\x77\x7d\xb6\xaa\xfa\xec\x96\x37\x2c\xb7\xf9\x9a\xeb\xf2\xc9\x41\x25\xe9\x53\x2a\x7a\x9a\xd2\xae\x27\xc9\xb1\xf8\x31\x7d\x72\xaf\xc7\xf5\x0f\xbc\x13\xb3\xfc\x9e\x60\xb1\x18\x40\x70\x4b\x14\x2e\xd2\x82\x89\xef\x45\x43\x74\xce\x38\xef\x86\x1d\x38\xba\x9e\xd0\x47\xe9\x4e\x00\x8b\x66\x5f\x6f\x9a\xbc\x00\xcb\xa1\xdd\x55\x41\xf9\xb8\xa9\xea\x9c\x4e\x17\x6b\x05\xac\xec\x09\x51\xc3\xf9\xc5\x35\x00\x57\xcd\xcd\x50\x6d\x0a\x03\x58\xd0\x0c\xef\xf3\x4d\x55\xb0\x9c\xa5\xeb\x1e\xca\x34\x96\x55\xc9\x58\x96\x4d\xcb\xc7\x21\x66\x63\x15\x0f\x9c\xc3\x2d\x9f\x6f\xc8\xa6\xba\x0a\x8b\x7a\xee\xc8\x64\x34\xd0\xc2\x43\x00\xe5\x03\x15\x14\x53\x75\xf5\xd3\x1e\x23\x5d\x0e\xd4\x17\x2d\x3a\x67\x53\xc5\x2e\x7d\xf6\x8a\xfe\x26\x7c\x3c\x0b\xdf\x5b\x4d\x11\xcf\x85\xa9\x14\x0e\xb2\x4b\xa3\xa1\x46\xe4\xed\xa8\xcb\x88\x37\x98\x6b\x38\x5e\x23\x81\x6e\x10\x7a\x65\x4d\x6b\x43\xcb\x5a\x7e\x45\x89\xa7\xb4\x81\x57\x1b\x2c\x42\x0e\xe9\x85\xc4\xb8\x86\xf0\xc6\x04\x72\x24\xdb\xe5\x96\xa6\xc6\xbc\xb3\xcf\xef\x68\x6c\x79\x4b\x42\x58\xf2\x89\xb5\xd1\xcf\xc9\x20\x02\x50\xb3\x29\x9c\xb0\x09\x9a\x6e\xda\xb1\x8a\xe5\x81\x1c\xbd\x76\x24\x45\x2e\xd7\x99\xd3\x65\x19\x29\x7d\xf9\x1b\xce\x3c\x14\x79\xd5\x96\x89\x9d\x8b\x92\xed\x03\x96\x8b\x27\x71\xf6\xe0\x57\x8b\xc4\x1f\xda\x22\x24\xa2\xdf\x34\x8c\xb5\xfb\xd2\x41\x9d\x84\xb9\x71\x05\x6a\x8b\x04\x35\x6d\x2a\xd6\x84\xa8\x48\xd4\x35\x2d\x15\x95\x8d\x54\x91\x4f\xaa\x63\x7f\x4e\xac\x83\xa8\xc9\xe4\x13\x31\x03\xd2\x4b\x84\xbd\x64\xac\x8d\xd9\xe2\xd0\x50\x84\xe7\xb0\x62\xa6\xfc\xc0\x9f\x83\xeb\x72\xc7\x47\xe6\xb6\xc3\xaa\x6e\x08\xb2\x78\x50\xd9\xcb\xad\xef\x4f\xc2\x69\x69\xc1\x89\x3f\x7d\x65\xda\xfb\x1f\x6c\xe2\xe7\x8a\x56\x12\xf5\xe3\x93\x83\xcf\x6b\xda\x6a\x3b\x60\x9f\x36\xc9\xc3\x51\x1a\x9d\x41\xeb\xbc\x23\xee\x4b\x07\x9c\x56\x2b\x16\xa6\x1d\xf0\xaa\xe5\x4b\x21\x79\x68\xf2\x20\x52\xa9\xd9\xb4\xe3\x23\x8d\x47\x28\x0c\x4a\x7b\x71\x07\x3e\x8e\xf3\xf0\xd4\x9f\xe9\x93\x10\xb6\x2d\x59\xe6\xcb\xb6\xa2\xa1\xcb\xaf\xf4\xac\x4c\x48\x30\x59\xd1\x7e\x34\x7a\x7b\xc9\x2a\xd9\x0a\x12\xaa\x92\x1b\x03\x94\x7d\xc8\x41\x15\xc2\x72\x7e\x32\x8b\x05\x6d\xec\x3d\xf4\x55\xda\x9a\x13\xf4\xd3\x59\x43\xc5\x0b\xe3\xc8\x72\xe0\x42\x3e\xe9\x68\xb3\x7b\x24\x1e\xa7\xb4\xfa\x69\x08\xa5\x72\xa2\x9f\x16\x57\xe0\x4d\xff\xe2\xe6\xd5\x93\xee\xc5\xf3\x9b\x57\x8e\x35\x2e\xd7\xe5\xf2\x4e\x74\x89\xaa\xbe\x69\x7e\x83\xc2\x45\x0b\xcf\x38\xae\x79\x8b\x3c\x29\xd2\x35\x95\x42\x26\xa7\xad\x4c\xd5\x08\xf1\x5c\x1a\x2d\x1a\x0d\x86\x77\xfc\xc2\x6c\x3f\xee\x70\x30\x42\xa2\xda\xe8\x44\x46\x46\x6a\x3e\xf6\x0e\x67\x05\x74\x7b\xcc\xb9\x4c\xb9\x60\xf3\x9e\x74\x31\xdf\x4d\xb5\xad\xfa\x09\xe9\x30\x1f\xc9\x95\x04\x55\xcf\x37\x5c\xa2\x2d\x60\x03\x63\x21\x6e\x4c\xcd\xd0\xb9\x69\xe4\xb4\xcf\x49\xbd\xf9\x21\x25\x12\x1a\xe8\x14\xe2\x39\xd1\x30\x89\x1d\xe7\x7c\xf0\x92\x82\x90\x77\xd9\x50\x2b\x5a\xcb\xc2\x88\xe9\x6d\x85\x43\x82\xfb\x35\x92\x0f\xa0\x0c\xf3\x2a\xe7\xa6\xdf\x38\x8c\x7f\x4b\x42\xf1\xad\xab\xc6\x9c\x9b\x07\x54\xb1\x4c\x96\xcf\x2e\x1e\x71\xb6\xba\x14\xf5\x0a\x18\x60\x38\x5e\x68\x52\x0e\xfc\xea\x91\x86\x71\x47\x39\x58\x90\x9b\xa1\xef\x1b\x96\xb9\x37\x4c\x35\x52\xc7\x46\x7d\x02\x40\xa8\x11\xbe\x3d\x2c\x48\x88\x27\x59\x9b\xd2\x64\xe0\xcc\x5b\xe1\x54\x5b\x19\xcd\x4e\x8f\x3a\x07\x56\x88\xba\x9e\xd7\x0f\x46\xca\x44\x10\x3c\x0a\xee\xb0\x9f\x1f\xcb\x37\x6d\xf9\xad\x1f\x8d\xdb\x33\xa8\x61\x23\x92\xea\xc1\x7e\xfa\x80\x52\x50\x89\xdb\x75\x76\x72\xa9\x91\xc5\xd3\x47\x1b\xa3\x17\xe5\xbc\x33\x88\xc1\x92\xd8\x58\x00\xd1\x34\x0b\xd4\x5e\x8c\xfa\xf2\xea\xce\x14\x83\x7d\x3c\x64\x7f\x00\xf5\x4d\x93\x75\x6b\x51\x2d\x6d\x78\xe9\xa6\xac\x57\x91\x99\x00\x36\x58\x10\xdd\x7f\xe5\x63\x8e\x04\xf8\x7c\xf3\x39\x79\x80\x3d\xea\xaf\xc4\xe1\x6b\xd8\xeb\x9a\x84\x0a\x44\x19\x39\x43\x82\x40\x59\x33\xfa\x9c\xf0\x11\x78\x3e\x12\xeb\xf8\x88\xd0\xbc\x40\xbe\x40\xd1\x2f\x91\xb4\x66\x4b\x98\x5c\xce\x88\x80\x1f\x4a\x6f\x97\x44\xca\x4d\x91\x94\xe8\x6b\x53\x75\x48\x9f\xbe\x2b\xb5\xf1\xb7\xa4\x36\x77\x1f\xa1\xf6\x8a\x0e\xcb\x0a\xef\x65\xfe\xc0\x42\x97\x64\xeb\x0f\x14\x5c\x97\xf9\x56\x47\xc9\x49\x69\xe2\x98\x8e\x33\xcd\xe4\x24\x9d\x72\x81\x55\x23\x81\xf8\x61\x53\x10\x59\x44\x8f\x7d\x27\xfe\x97\x6a\xf4\xfc\xdb\xc4\x14\xf3\xb7\x24\xdf\xec\xd6\x39\xce\xff\x00\x0c\x56\x07\x02\xc2\xc2\xa7\x00\x01\x2d\x0c\xdb\xb2\xad\x96\x9c\xe4\x0a\xdf\x3c\xcb\xbe\x85\xc1\x89\x36\x0a\x09\x82\x71\x63\x05\x6d\x92\x7f\xaa\x41\x4e\xb3\x90\x18\xb6\xdb\x55\xff\xb0\x59\x44\xcd\x71\x3e\xf1\x1c\x82\x80\x48\xe6\xa1\x1c\x10\x0e\x46\x16\xcf\xfa\x94\xf9\x42\xcf\x22\x60\xd4\xf4\x36\xff\xed\x4b\x15\xb7\xcd\x4c\x3d\x61\x05\xbe\x92\x6d\x78\x9d\x62\xcc\x0e\x08\x9e\xed\x1b\x07\xa1\x69\xe9\x19\xa4\xbe\xa3\x53\xad\x76\x60\x1f\xe5\x77\x8a\xdf\x3f\x9a\x09\x9c\x8e\x10\x15\xa0\x53\x67\x0c\xa7\xc3\xb9\x60\xbe\x09\x41\x78\xe1\xb7\x5b\x28\x1c\x3b\x72\x66\x31\xd2\x54\x7e\xc7\x38\x48\xa2\x14\x3d\x81\x48\x6a\xe1\xed\xf6\x19\x9f\x91\x19\x0b\x9d\x75\x28\x5a\xba\xd3\xd3\xce\x17\x40\x88\xdd\x37\x9b\xd6\x1b\x6d\xb8\x83\xd5\x49\x14\x98\xa9\x7d\x31\x35\xe4\x1d\xa8\xdf\xd3\x96\x99\x69\xc0\xed\xa4\x83\x15\x65\x31\x51\x89\x66\x5e\x4c\x78\xc1\xb4\x22\x83\xb1\x69\x75\x9d\xd1\x4e\x8f\x6a\x5e\x0e\x37\xc4\x0f\x1d\x03\x60\x7a\x86\x4c\x5d\xf7\xbe\x15\xa9\x4d\x9a\x6c\xb9\x62\x43\x95\x0d\x3b\x1a\xab\x12\x20\x1d\x25\x02\x16\x92\x9f\x5f\x1f\xb7\xd4\x21\x55\x84\x2a\x80\x5b\xe1\x58\xf9\xa2\x39\xd3\x98\x28\xc9\x35\x03\x15\x4c\x87\xa1\x72\xc0\x96\xb5\x8d\x6e\x60\xc6\xce\x9a\x89\xc8\x36\xf1\x5a\xf2\xb1\x8d\xa6\x4a\x74\x71\xb8\x79\xa2\x64\x56\xd7\xbe\xd4\x3e\xc0\xfe\x60\xd3\xa1\xb2\x3e\x6d\x58\x1b\x77\x40\x87\x9a\x75\xea\x64\xf9\x5b\x05\xa3\xdf\x9b\xea\xbe\x54\x85\xd2\xe9\xd1\x28\x5b\x24\x1b\x62\x25\xac\xb8\xc8\xac\x44\x0a\x6e\xee\x59\xef\xe3\xfe\xb8\x54\xea\x89\x11\x50\x27\xc5\xeb\xac\xaa\x29\xa9\x82\xcd\xbe\x2c\x8e\x48\x40\xe0\x1a\x34\x4e\x30\x9d\x7c\xb3\xcf\x1f\x3a\x58\x58\x8c\x5f\xb1\xc1\x53\xaa\x33\x33\x22\xf1\x61\x85\x51\x85\xd6\x6d\xda\xaf\x86\x09\x25\x48\x7f\xc8\xef\xa1\x5c\x82\xd7\xa8\xcd\x86\x74\x76\x3e\x34\x71\x40\xeb\x49\xc5\x8a\x31\xab\x91\xac\x21\x48\x71\xd0\x10\x1c\x26\x7a\x6e\xcc\xd4\x3d\x62\xe1\x8a\xba\x61\x51\x87\xb8\xb9\xe0\x9a\xa4\x47\xc2\x2c\x86\x14\x58\x1a\x68\x63\x94\xcf\x44\xaa\xae\x08\x87\xac\xa5\x79\xe5\x9b\x4f\x36\x5a\x15\x33\x0b\x4b\x3e\x54\xe7\xa4\xeb\x69\x0b\x30\xa6\xcd\x55\xf7\x57\x91\xce\x54\xe1\xe6\x52\x6c\x2d\xa0\xa9\x5b\x57\xbb\xb4\x81\xa9\x31\x44\xa1\x27\xdb\x40\x40\x25\x6c\x14\x25\xa4\x76\xb6\xb9\xb6\x79\xdd\xdd\x96\x30\xbe\x6e\xd3\x5b\xf6\x23\x2d\xb4\x6b\x96\x77\xc5\x65\x77\xa0\x67\xd1\x80\xd0\x75\x78\xd6\x60\xed\x82\x85\x8a\xbb\x26\x98\x7b\xf4\xac\x63\x00\x56\x7d\x4b\x9d\x8d\x81\xc9\x6c\x82\x02\xc8\x9c\x91\x8b\xc3\x46\x73\x5f\x86\x88\xb8\xfd\x67\x67\x1e\x60\x5d\xed\xcb\x62\x94\x8f\x97\x49\x3a\x85\xad\x03\x1e\xaa\x9b\x87\x78\xf6\x5c\xd5\x51\x00\xfb\x4b\xee\x4b\xed\x85\x37\x06\xef\x95\x51\x83\xb0\x71\x78\x4d\x23\xe9\x73\x28\x8c\x37\x34\xc4\xe5\x3a\xda\x9d\xd7\x28\x49\xa5\x64\xb2\x41\x93\x4f\xdc\xf5\xe7\x84\x98\x66\xbd\x2a\xd9\x50\x46\x2d\xf1\x81\x89\xdf\x2a\xdf\x4b\x26\x0d\x78\xd5\x4a\x9a\xcd\xeb\x56\x65\x49\x1b\xb2\xd9\x3e\x5a\xb3\xaa\xcd\xdc\xd3\x25\x7f\x6f\x48\x02\x81\x9d\xf8\x4f\x94\x62\xd9\xb9\x4e\x22\xcf\xd0\xc8\x4a\x01\xe5\xa2\xea\x1f\xfc\x89\x71\xac\x39\xa4\x24\x83\x3b\xc0\xee\xf1\xda\xd2\xb4\x1e\x39\x33\x3d\xde\xda\x92\x52\x38\x31\x42\xbd\xb6\x74\xc2\x3a\xf6\x76\x81\xc3\x81\x45\x71\x98\xb6\x83\x23\xe1\xe9\x93\xee\x29\x2f\x98\x95\x2d\x02\xf8\x5d\xde\x13\x5b\xac\x45\xc1\x11\x0e\x15\x56\xd5\x62\xd7\x04\xb8\x8a\x80\x2d\xe0\x0f\x16\x54\x7c\x4e\x48\x13\x85\x03\x91\xa6\x26\xa9\x59\xe7\xa7\xb2\x98\x4e\x25\xe6\x7f\xa3\xa4\xda\x53\x52\x17\x05\xa1\x8a\x2e\x9c\x80\xe6\x32\xea\x62\x0f\x52\x97\xa8\x01\x29\xb6\x1e\x29\x79\xbf\x4c\x4f\x25\x61\x2a\xf3\x50\x61\x4e\x55\x91\x24\x3b\xe0\x3d\x0b\x46\x2b\x0b\xe1\x06\x2d\xff\x03\x0b\x76\x3b\x96\x0b\x08\x0b\xd2\x0a\x08\xd7\x1c\x0a\x90\x04\xd8\x03\x1b\xa8\x7b\x6c\x9a\x85\x1e\x58\x07\xce\x12\xd2\x96\xb9\x1e\x83\xed\xcb\x9b\x94\x8d\xa5\x44\x38\xa4\x55\xe9\x44\xb7\x39\x29\x64\xf7\x55\xee\xec\x3a\xb4\x5a\xec\xb6\xd7\x53\xf4\x35\xbb\xec\xe1\x07\x9d\x06\x70\xb0\x37\x43\x1d\x17\xef\x35\x99\x0c\xbb\x82\x2d\x62\x7e\xc2\x1f\x91\xe1\x26\x1c\x97\x07\xb6\x4a\x4c\xdd\xaa\x79\x29\x06\xe0\x45\xaa\x70\x3c\xb2\x87\x85\x6d\x9f\x99\xc8\x0f\xdd\x42\xc5\x18\x24\x74\x11\x48\x91\xaa\xbc\x06\xb0\x10\xde\x03\xf4\x8a\x57\x10\x08\xa1\xb3\x32\x5d\x37\xfb\x74\x53\xd5\x77\x9d\xe2\xd7\x59\x53\x4c\xcb\x4e\x4f\x91\x41\xc0\x62\xe7\x61\xb1\xaa\xaa\x87\xf2\xa7\xc4\x52\x62\xc6\x47\x72\x1a\xe5\x50\xca\xa9\x38\x66\x06\xea\x7d\x39\x41\x76\x7a\x8c\xec\x59\x58\xaf\x25\x6b\x15\xf8\x83\x99\xfd\xaa\x5b\xe8\xb6\x64\xf1\x1c\xec\xf0\x8d\x72\x21\xc2\x4f\xd3\x74\x6a\xb9\xf4\xec\x87\xf3\x60\xe6\x50\x28\x5d\x2d\x07\xa1\x8b\x29\x83\x31\x2f\x07\x41\xb1\x72\x49\xc2\x92\x8e\x07\x7b\x3b\xab\xb6\x12\xa9\xf3\x51\x4b\xc5\xe1\xef\xb4\x12\x14\x2f\x48\xcf\x1e\x4d\x26\xf4\x37\x9c\x13\x2e\x65\xfa\xc6\x47\xad\xf0\xc8\xc4\x05\x41\x08\x0e\xfb\x68\xb0\x63\xca\xd2\x06\xcc\x74\xfe\x05\x02\x33\xf2\x09\xdd\x30\xc2\x9b\x1d\x6b\x69\x36\x91\x50\x78\xa2\x4e\x00\x57\xce\x98\x0d\xca\xcf\xe1\x30\x1b\xdb\x2a\x22\x3d\x4b\x5b\x38\x28\x4d\x8f\xc6\x34\xd9\x3b\x56\x6f\x4f\x73\x0b\xa7\x63\x04\xbf\x10\xea\xcf\x61\x57\x16\x9f\xda\xd0\x89\x3c\xc9\x5d\xc1\x21\x27\x4d\x10\x02\xa0\xae\x74\x5e\x4b\x39\x16\x6e\xc4\xe6\x74\x89\x2f\x72\x00\x1a\x62\x14\x6b\xa3\xa5\x79\xc0\x43\xc6\xb6\x6b\x69\xd1\xe9\xe0\x1d\xd9\xb1\x26\x2c\x2d\x62\x5f\xe0\x5e\x0d\xdc\xb9\x9e\x6b\x91\xfe\xa9\x6d\x31\xff\x47\xca\x72\xbc\xed\xb3\x64\xdb\x98\x75\xaa\xcc\xda\x95\x0a\xcb\x4e\x68\x0c\xd8\x03\xa5\x33\x6e\x14\xc0\x44\x3c\x44\x80\x85\x20\x66\x47\xb5\xec\x2c\xb2\x12\xc3\xde\xfb\x1f\x66\x19\x8e\x3a\x74\x96\x61\x3f\xd4\x11\xd9\xf0\x18\x47\x27\xce\x84\x80\xa8\x00\xe7\xaf\x2e\x7d\x70\xaa\xea\xe2\xbb\xc3\x95\xbb\x11\x99\x9e\xd1\x44\x59\x38\x82\x95\x08\xc0\x61\x59\xc0\x43\xc8\x06\xc2\x7e\x44\xc0\xef\x26\x46\xcc\x98\xbf\x1e\x43\x83\x21\xac\x08\x2c\xcb\x03\x7c\xa0\x89\xf4\xa7\x1a\xd1\x96\x11\x21\x4e\x5b\x17\xc5\xf2\x20\xfe\x4a\x2f\x12\x1d\xa9\xda\xb0\xae\x56\x6b\x9a\x57\xb5\x65\x87\x25\xb8\xb6\x79\xc5\xbc\x56\xc7\xbf\x68\xe3\x35\xab\x9a\x2d\x40\xdc\x83\x28\xe3\x8e\xdb\xbe\xe8\xfa\xb6\xa9\x57\xaf\x4e\x1b\x56\xb7\xd8\x8e\xc2\x47\xc5\x4f\x2f\x9e\x6b\x3e\xb1\x0c\x5e\x43\x8e\x96\x7c\x53\xf5\x6f\x87\x9b\xa7\x5d\xba\x22\xd9\x00\x07\xc8\x8b\x3c\x5d\xb7\xe5\xed\xcb\xaf\x9f\x74\x5f\xbf\x52\x2f\xb5\xc4\x14\xed\x6b\x87\x96\x17\xcf\xf3\x57\x2c\x3d\x77\xcd\x86\x84\xda\xb8\x4a\xb3\xdd\xca\xfa\x12\xfb\xdb\x0a\x24\xc6\x0f\xc7\x76\x59\x03\x73\x65\xab\xf8\xa1\x06\x17\x8e\xd6\xfd\xfa\xe8\xb2\x25\x6c\x5f\xd0\x83\x94\x7e\xca\x71\xcf\x79\x66\x54\x90\xd3\x8b\x52\xb6\xbe\x01\x11\x31\x63\xd3\x76\x02\x13\x06\x13\xcc\x57\xb6\xe7\xa4\xc3\x60\xc7\x41\x64\x38\x66\x18\x16\x61\xa1\xe8\xaa\x65\xe3\xbd\xaa\xb5\x28\xa0\xb3\x21\x10\x61\xcf\x1b\x75\x22\xa4\x96\xe9\x09\xd2\x44\x3a\x25\xc7\x63\x4f\x4d\x63\x21\x4f\xbd\x69\x07\x29\x32\x20\x44\x6d\xd5\x85\x49\x88\x02\x5e\x42\x94\xba\xa9\xea\x42\x08\x4f\xe9\x46\xe3\x0e\x1c\xc1\xd0\x71\x54\x33\x10\x6c\x6c\x9c\xd0\xdf\x01\xe6\xae\xa2\xf6\x83\x23\x89\xf6\xfb\x50\x07\xfb\x4d\x08\x3a\xeb\x1b\xb1\x35\xe9\x24\x2f\x49\x62\x47\xcc\xd1\xb1\x34\x78\xcd\xc5\x9d\xc6\xbd\xa9\x53\xd2\xaa\xbc\xd1\x4c\xac\x16\x00\x13\x14\x75\x0e\x11\xf8\xe5\x95\x37\x6b\x45\xfd\xc5\x1a\x4d\x84\x85\x21\xe2\xb5\x1d\xb6\x16\xff\x71\x7a\x7c\xf9\x6e\x91\xb8\xfe\xac\xcd\x5f\x72\x92\x3a\x64\x04\x7b\xa7\x37\x32\x43\x19\xef\x50\xe7\xad\x90\xea\x66\xa6\x42\x4d\xd0\xa2\x9b\xd3\x64\x3e\x32\x97\xb8\x5c\x50\x5c\x76\x81\x2e\x2d\xbd\x61\x24\x63\xde\xe6\x66\xfa\x15\x21\xd6\x59\x74\x98\xa7\xee\x1e\x98\x5b\x04\x91\x22\xb9\x20\x68\x8f\xfd\x3e\x0a\x51\x21\x48\xe8\x93\x29\x4b\x88\xad\x23\x7d\x1b\xb0\x12\x7f\x98\x1b\x50\x02\xc8\x70\x67\xeb\x19\x8d\xd7\x1f\x15\xe1\xa0\x45\xcd\x8d\xa5\x96\xaf\x52\x61\x44\xe2\xff\xe4\x71\x89\x6c\xa3\x38\x0e\x95\x1b\x6a\x73\x5f\x6e\x38\x92\x4d\x07\xe4\x9d\x80\xaa\xca\x44\x2e\x40\x05\x72\xce\x3f\x8e\x1c\x74\x67\xb1\xac\x6d\x68\x5f\xb0\xc6\x08\x82\x08\x18\x5e\x3f\xd1\x41\x8c\x61\x9e\x1c\x9f\x9f\x5f\x5c\x7b\x3e\xc9\x94\x55\x17\xc4\xcd\xbf\x72\xf1\x2f\x93\x71\x59\x14\x0c\xc6\x87\x80\xa8\x08\xc2\xc7\xe1\x68\x8d\x43\x70\xe1\xc6\xb7\xd6\x29\xb9\x6a\xb0\x9b\x1b\x1e\x8b\xd4\x28\xe2\xf1\x17\x87\x44\xfc\xe4\x13\x1f\x30\x9f\x13\xb3\xd2\x5d\xf0\xff\x24\x34\x74\x06\xa6\x69\x50\xb3\xb7\x60\xfb\x70\x4f\x1a\x40\x53\x4c\x0c\x9f\x34\xb0\xa1\x1b\x72\xc8\x70\x84\xfb\x06\x7c\xf1\x36\x85\x77\xeb\x88\xed\x38\x4d\x0b\x1a\x64\xe4\x0e\x75\xf5\xeb\x80\x13\x92\x25\x38\x3a\xf1\x39\xac\xea\xa6\xda\x08\xf3\xfc\xb3\xfb\x21\xf9\x9c\x1a\xc5\x42\x06\x9d\xd3\xaf\x17\xdd\x8e\x23\xc5\x88\x37\x77\x2f\xbf\x26\x91\x9b\x34\x16\xfc\x7d\xc6\xf6\x01\x4d\xe5\x45\x35\xd0\x51\x44\x02\x18\xbb\x8d\x69\x3d\xa9\xca\x2b\xd6\xf5\xef\xcc\x84\x34\x0e\x5b\x47\x99\x45\x36\x72\x19\xc2\x1b\x91\x3b\x33\x2c\x15\x57\xc5\x06\xd0\x8b\xf1\x28\x0d\xa6\xc5\xec\x9a\xc9\xfd\xae\x0c\x51\xa7\x2e\x02\x5d\xe8\x53\xfa\xd7\x56\x08\xcf\x94\x7c\xbe\x43\x90\x06\xf7\x07\x5c\xa6\xef\xf7\x8a\x08\x60\xc9\x3a\xca\x62\x55\xf5\x24\x26\xf3\x5d\x0b\x28\xaf\xb4\x83\x88\x4b\xe2\xfa\x81\xa4\x2c\x67\xa6\xae\xc1\xa2\x62\x55\x57\x7d\xc6\x56\xfd\xad\x84\x94\x53\xb3\xf9\x46\xc4\x8a\x18\xf3\xe2\xc1\x4d\x3f\xfc\x72\x7c\x7a\xf6\xcb\x62\x5b\x58\x84\x89\xe2\x53\x43\x4b\x02\x8c\x16\xe5\x6d\x3e\x6c\xcc\x7a\x85\x09\x23\x23\xfd\x19\x19\x7a\x1b\x81\x14\x0d\xc2\xdf\xbd\x9c\x91\x72\x3f\xe1\x9d\xe5\x7c\xc3\x62\xe4\xb7\x07\x6c\x3a\x63\xb7\xca\x1f\x37\xed\x8c\x5b\x78\xdc\xc2\xc3\x3e\xf7\x8c\xed\x75\xa9\xc6\x65\x44\xde\xc8\x44\x6f\x4b\x58\x54\xbc\xbb\x2e\x21\x61\xf1\x61\xe9\x61\xe2\x36\x75\x23\x3f\x4c\xe3\x37\x9b\xa1\x1c\x11\xb9\xe0\xd1\x68\xdc\x7a\xd2\x65\x39\xd3\x4b\x1c\xc1\xba\x28\xc4\x02\xe1\xc4\x99\x49\xd6\xec\xc8\x66\xa9\x55\xb5\x29\x07\x65\xb6\x75\xc4\x87\x5a\x8c\xda\x3b\xc9\x94\xa0\x51\x44\xa8\x41\x7c\x8d\xcd\x90\xe6\x3f\xcf\xc3\x00\xf0\x44\x36\x85\xed\x34\xdd\x22\xb7\x6e\xaf\x21\x94\x98\xe3\x44\xe3\x4d\x86\xfb\x26\x01\xa6\xc2\xe8\x0e\x66\x6f\x05\xf3\xe7\xdd\x43\xc6\xc6\x10\xb0\xe4\xdd\x43\x82\x18\x08\x3a\xd0\x32\x9c\x97\x92\x09\x06\xb9\xa9\x76\x72\x5b\x89\x0a\xaa\x52\x02\x19\x91\xb8\xf8\xb7\x44\x90\xe2\x56\x08\x0b\x8d\x2b\x4c\x5c\x40\x8c\xf8\x27\xf0\xab\x9e\x25\x5e\x31\xce\xbe\xfc\x3a\xbb\xa1\x3d\x7a\xf7\x75\x20\x01\xf3\x65\x27\x16\x7b\xbf\x22\xc9\x6a\xaf\x0e\xc8\x8f\x92\x4a\xec\xf7\x5f\xf0\x6b\xe0\xc0\x38\xf1\x76\x72\x22\xd1\x5f\x6c\xe3\x4c\xf4\x8e\x0d\x33\xa3\x84\x05\x4e\x65\x1b\x24\x6c\x86\x9c\xe3\xd7\x81\x67\x29\xc2\xfb\xcb\xf4\xdf\xf9\x57\xfa\x86\x7f\xe9\x54\x78\x1b\xbb\x3d\x8a\x15\x1e\x6d\xec\x30\x52\x0c\x1c\x47\xc3\x2d\xfd\x9e\x96\xf0\x92\x00\xfb\x1a\x57\x62\x80\x1c\x93\x9c\xec\x06\xf6\xa1\xf3\xba\x5b\x6f\x97\x94\x83\x00\x6f\xce\xe4\x33\x2c\x68\xc1\x19\xc0\xa3\x36\x12\xc7\x2a\x94\x45\xf4\x6d\x09\x79\x8b\xfe\x69\x59\x46\xc0\x59\x9f\xc3\xe4\x29\x40\x44\x72\xff\x39\xbd\xa6\x1c\x85\x28\xc3\xa2\x44\x41\x51\x3e\xbe\xd5\x83\x6d\xd4\x81\xe3\x72\x82\x48\x7e\x53\x76\x3d\xa1\x08\xea\xa3\xfb\x91\xf0\x18\xab\x5e\x42\xf9\x90\x4a\x34\xd0\x54\xcc\xda\x92\x4c\x60\x34\x6c\x73\x0e\xdb\xfa\x90\xef\xe5\x27\x61\x5a\xaf\x01\xbd\x95\x94\x64\x23\x10\x59\x40\x11\xae\xec\xe0\x71\xae\x2b\x0d\x5f\x5a\x3a\xb1\x01\x2c\xa6\x03\xb1\x92\xd1\x2d\xa4\x74\x39\x2a\xbf\x15\x79\xff\x35\x4b\xfb\x96\x97\x83\x7f\xa5\x16\x56\xe1\xf2\xb7\xb4\xfd\xc5\x3e\x76\x26\x29\x57\x52\x48\xc4\xcf\x29\x5f\x78\xb3\x3c\x8b\xa9\xbc\xe0\xff\x2e\x97\x08\x46\xf7\x0f\xfd\x4f\x14\xf3\x9c\xab\x6a\x99\x5c\x7b\xf2\xd9\x99\xf0\x38\x29\xc4\x72\x4c\x0a\xb3\xdd\x26\x5f\x96\x2e\x86\x13\x40\xe0\xdb\x7c\xe5\x4a\x81\x49\xf4\x63\xc7\xf7\x0d\x95\x3f\xa1\xed\x4c\xbf\xac\x84\x36\x03\x9d\x85\xae\xe8\x84\x7f\x16\x56\x48\xb8\xe7\xa8\x40\x1b\x43\xd4\x7f\x58\x46\xe7\x07\xf3\x26\x31\x8a\x9d\xb3\x74\xcd\x69\x93\x3a\x46\x35\x1c\x35\x85\xc4\x34\x82\x21\xf6\xce\x11\xe8\x90\x0e\x35\x39\x82\xd0\xe3\x04\x87\xc8\xb4\x64\xc1\x41\xb5\x8e\xac\x8f\xe1\x8c\x02\x69\xcf\x81\x4a\x07\x1c\x85\xc4\xe1\x75\xbe\xcb\x42\xb5\x9d\xb9\x4a\xc2\x1b\x8a\xec\xe6\x41\xeb\x08\x4b\x28\xd8\xd5\x75\xa0\xca\x96\xfd\x59\xe0\x95\x5a\xe5\xcc\x65\x84\x55\x78\xa9\xd0\x30\x41\x48\x3a\x7d\xf2\xe9\xbb\xcf\x1d\xb7\xec\xcc\x09\xcf\x9f\x7c\xfa\xfe\x33\x31\x54\xfc\x63\x8e\x6a\xb5\x77\x6d\x79\x5f\x35\x03\x6e\xee\x69\xd2\x13\x0c\xe2\x77\xcf\x39\x56\x57\xb3\x64\xf1\x4c\x0e\xf7\x94\x13\x97\x2f\x9b\x4d\xe3\x29\x0b\xbf\xc6\x00\x22\xf0\x3f\xd1\x05\xef\xe2\x62\x10\x9f\x5b\x8c\x27\x70\x65\xd4\xa3\x05\x11\xc8\xb2\xa8\xb8\x9d\x5f\xe8\x5f\x5c\x30\x72\xdb\xc4\x85\x2e\xde\x4b\x06\x88\xa8\x2f\xbb\x76\x32\x6d\x45\x9d\x1f\x00\x75\x1a\xc7\x2c\x98\x97\x47\xd1\xb9\xec\x02\x88\x22\xea\xb2\x64\x96\x53\xd5\x72\xed\x86\x9b\x65\x43\x16\x4a\xc5\xa5\xa3\x8d\x1e\x76\x35\xcc\xf7\xea\x75\x4c\x19\xa4\x0f\xb5\x55\x25\x27\xd2\x20\x93\xd9\xcb\x9d\x96\xb7\x90\x6b\x4f\xf0\x83\x49\xca\x17\x05\x41\xd9\x40\xc9\x49\xf8\xdb\x83\xad\x9b\xe6\x4e\x02\xd3\x6f\x90\xf4\x25\x24\x69\x5b\x21\xdf\x7b\x7b\x1b\x97\x16\xe5\x6e\xd3\x3c\x98\xd1\xf1\x14\xbf\xd4\x9b\x67\x20\x37\x79\x57\x2d\xc3\x8b\xab\x3f\x73\xc6\xcc\x2c\x0a\x36\x86\xb7\xd9\x3f\x84\x69\x9c\xe2\x57\xfa\x3f\x99\x6d\x38\x10\xf5\x73\x5d\xd8\x5d\x85\x2b\xf6\x76\xb9\x52\xf5\x33\x04\x5d\xa9\x5b\x64\xda\x97\x9a\xec\xf9\x4c\x9e\x57\x06\x9d\xbf\xea\x50\x15\xa3\x9b\xb1\x18\xcd\x76\x0c\x67\xd7\x9f\xb8\xae\xe6\x5c\x56\x71\x64\xcd\x23\x94\xe4\x86\xe2\x9c\xf6\x2c\x1c\x68\xf2\xc2\xfc\xfe\x53\x30\xa7\x5b\x7b\x5f\x7f\x2c\x79\xb3\xe5\xa8\x16\x53\x3e\xfc\xfd\x1c\x17\xc0\x59\x71\x90\x01\x11\xbe\x5c\xf4\xf3\x41\xbe\x88\x38\x84\x21\x86\x63\x9c\xad\x5f\xdc\x81\x46\xc4\x0f\x07\x4f\x74\xa2\xb9\x68\xe4\x82\x78\xb1\x44\x27\xcf\x5d\x8c\x3c\x1b\xfa\xc6\xca\x16\xd7\x93\x13\xce\x05\xba\x8b\x1b\xcc\x86\x8a\xb2\x90\x14\x63\xa7\x2f\x70\x1f\x08\xfe\x23\x40\x43\xca\x45\xbd\x14\x93\xb2\xd6\xcf\xa3\xa0\x09\x89\xcf\x81\x36\xa4\xa6\x88\x9b\x7c\x79\xe7\x46\x44\xda\xca\xb2\x6c\x7b\x84\x2b\x4c\xd1\xce\xee\x92\x25\xd8\xe1\x8b\xdd\xab\x67\x10\xe8\xe5\x5e\x24\x66\x21\xfb\xbf\xba\x0d\x10\x02\x83\x27\x1b\x30\xef\xab\x62\x20\xf2\xe6\xc5\x58\xbc\x78\xbe\x7b\x15\xd7\x27\x8a\x80\x92\x77\xb0\x8d\xd1\xc2\xb1\x84\x59\x21\xc8\x9a\xe3\x81\x10\x98\x72\xeb\xe3\xad\x3a\xf4\x70\x70\x17\x05\x9c\x2a\x20\x75\xe3\x38\x5f\x70\xd7\x4d\x71\x62\xd6\x18\xdc\x8e\x87\x45\xc6\xc1\xb0\x85\x3f\x0b\x48\x1b\x56\x3f\xa3\xd9\x99\xa6\xc4\x9a\x38\x52\x65\x7d\xf8\x8b\x1b\x9a\x55\x68\x0f\x0f\x2f\xb6\x6e\xcd\x59\xb5\x1c\x28\x9b\xc9\x3d\x53\x15\x09\xb2\x28\x30\x9f\x93\x20\xfb\x70\x85\x91\x89\x3e\x6a\x2b\xb6\xd3\x07\x03\x94\xb3\xe8\x50\x3b\x27\xb3\x6d\xa8\x2d\x32\x68\x05\x51\x6e\x15\xe2\x99\x32\xbd\xb8\x21\x1e\xfa\x74\x1c\x50\xa4\xa5\xfb\x75\x13\x84\x0d\x63\x50\x29\x36\x6b\x38\x90\x45\x3c\xd7\xbd\x1c\x21\x8a\x17\x3d\x50\x46\x27\x8d\x6d\x3e\x3b\x6e\x10\x82\xba\x1d\x88\xb7\x6c\x2a\x5a\x74\x1c\x19\x7a\xfd\xf8\xe2\xea\x1a\x17\x3b\x89\x17\x12\xa3\x59\x31\xbd\xa6\x7f\x59\x93\xc4\xc4\x61\x5e\x7c\x0b\x98\xbd\x6f\xab\xb4\x59\x2e\xd9\xe7\x56\xd5\x7a\x71\x6a\x5f\x9a\x6d\xbb\x2e\x36\xe2\x7f\x0b\xbd\x97\xc6\x77\x45\x8b\x4d\x71\xd3\x97\x99\x40\xb7\x2b\x97\x24\x66\x2c\xd2\xf7\xa4\x49\xf0\xf5\x51\xb9\x60\x0c\x86\xf9\xa8\xd2\xeb\x66\x02\xed\x93\x85\xb5\xc5\xf4\x0c\x75\xef\x10\xd8\x41\x8a\x79\xef\x38\xc6\x47\x84\x4a\x2e\x20\x79\xa3\xdc\xdc\x4a\xbc\x16\x9b\xf7\x21\x2e\xc9\xa5\x55\x36\x31\xca\x5d\x3e\xd6\xcb\xd1\x80\x7a\x1e\xe1\x25\xc1\x15\x07\x9e\x19\x29\x52\x2c\xaf\x98\x8f\x3e\x74\xcf\x8e\xc7\x04\x69\xcc\xc6\xf5\x4e\xd8\x02\x96\x0f\x71\x5d\x72\x1f\xe5\x88\x79\xf1\x6e\x53\xba\x58\x56\xb3\xd4\xec\xe4\x0e\x0a\x9f\x74\x84\x2f\x84\x40\x1a\x88\x9c\x1f\x08\x34\xe7\x58\xc0\x41\x97\xc3\x22\x1f\x80\x50\xee\x67\x66\x44\x7a\x20\x33\x82\xc4\x2e\x3b\x81\xf0\xee\x2f\x00\x99\x0f\x6c\xcc\xc2\x14\xdc\xcb\x01\x6f\x23\x4a\xd4\x3d\x85\x16\xc3\xab\x79\x42\xbe\x8f\x6c\xa3\x80\xca\xa3\x97\x25\x30\x43\xbd\x92\xf2\x82\xef\x53\xbc\x62\xea\x7d\xf1\x1c\x49\xbb\x86\x63\x94\xc7\x17\xd9\x03\x8a\xe3\x4b\xca\x0d\xe1\x0f\x47\x5f\x5b\xae\xf2\xb6\xb0\x88\x52\xa5\x7e\x76\xf7\x80\xca\xc3\x80\x81\x7c\xd3\x35\xd6\x04\xed\x56\x02\xb9\x63\x5d\x97\x08\x85\x9f\x61\xd0\xcb\xe2\xe0\xfc\x85\x6c\x2d\xf6\xc5\x12\xc1\x0f\x3b\xde\x03\xb2\xa1\xac\x1f\x4c\xfb\x9b\x3f\x5d\x5d\x9c\x1f\xa5\xbf\x3d\xdb\xef\xf7\xcf\xb8\xfa\xb3\xa1\xdd\xb0\xd7\xb2\xe0\x88\xd5\xff\x71\xf6\xfe\x28\x2d\xfb\xe5\xb7\x0b\x12\xc0\xb1\x35\xbc\x5c\xac\xae\xa8\x5b\x76\x91\x31\x59\xb2\xc7\xe1\x9f\xdf\x32\x3b\xb9\x18\xa1\x8f\x06\x84\xd7\x24\x42\xa6\xcd\xcb\x6e\x4a\xa2\x52\x81\x28\x8b\x5e\x62\x2c\x49\x89\xc3\xc5\x28\x24\x7c\x01\xb0\x6a\xcb\xf7\x91\xd1\x21\xc2\x0d\xf2\x3b\x36\xe5\x0f\x9b\x42\xe8\xd4\x38\x1a\xcd\x4e\x51\x56\x16\x3f\x8d\x5b\x82\x05\x08\x77\xa4\x5f\xa6\x7f\xe2\x78\x5e\x46\xa9\x50\x01\x17\x19\x15\x00\x38\xa4\x25\xec\xb0\x54\x2f\x79\x95\xe3\x02\x6f\x8b\x3b\x2d\x7b\xc4\x75\xcc\xd1\x86\x8c\xdc\x8d\xcd\xaf\xa6\x6d\x54\x3a\xd7\xa8\xb1\x56\xb8\xb7\x78\x98\x22\x6a\x1e\xed\x01\x3e\x97\xf6\xe3\x7d\x30\x3e\x92\x74\x93\x79\x76\xaf\x9b\x6c\xc2\xf1\x15\xf0\x4b\xfb\x4c\x25\x88\x89\x44\x17\xf4\xa0\x92\xdd\xa4\x07\x71\x3f\x67\x3a\x4b\x0b\xb8\x84\x4b\xfa\xd4\xe5\xc5\x47\x90\x51\x0d\x18\x48\x4c\x32\x8c\x90\x6e\x43\x62\x5e\x16\xee\x70\x3e\xcc\x22\x47\xff\x15\x83\xc0\xbd\xcf\x36\x7c\xb3\x77\x4f\x82\x1b\x42\x31\x43\x5a\x35\xd7\xa3\xb8\x48\x47\x85\xe3\xc7\x3b\x46\xc5\xac\x59\xc8\xeb\x40\x27\x92\x4a\x12\xd2\x83\x6f\x17\x37\x6d\xb3\xef\xd8\xdf\x8e\x27\x0e\xd8\x02\xc8\xbf\xd3\x2b\xfc\x16\x90\x5d\xde\x0a\xcf\x94\x84\x64\x8a\xc5\x8a\x32\x25\x21\x99\xcc\x3a\x26\x57\xcc\x4f\xa9\x04\xb7\xba\xf9\xc5\x07\x0e\x34\x93\x92\x85\x54\xa1\xed\xb2\xcf\x38\x95\x75\x7d\x0e\x1b\xdd\x15\xab\x3a\xa8\x74\xc5\x39\x0a\xc6\x49\xc3\xa8\x79\x1d\xd9\x58\x60\xa1\x7f\x38\xe7\xbc\x03\x12\xdc\xd0\xe0\x08\x8c\x96\xa6\xc2\x41\xe6\x41\x42\xff\x25\x41\x98\x82\xed\x21\x14\x41\x40\xea\xcf\xef\xce\xe5\x27\x6c\x90\x1a\x08\x09\x23\xe4\x6b\xf6\x06\x99\x65\x73\x31\x67\xe1\xb4\x32\xb1\x14\x8b\xfc\x6f\x2f\x47\xe1\x97\x83\x28\xda\xfc\x16\x2e\x5b\xfe\xef\x72\xe9\xb0\xf4\xd5\x2e\xdb\xf2\xd9\xb8\x1a\x21\x47\x50\x7d\x85\x84\xcb\x57\x7b\x09\xff\x73\x79\xf9\x9a\x34\xa7\x00\x87\x4f\x0a\x8f\x11\xb3\x93\x12\x29\x3e\x21\x46\x56\xb1\x82\xa3\x1a\xdf\xa8\x43\x50\x87\xbf\x19\x08\xda\xc1\x2b\x4c\x06\xd1\xe7\x2b\xe7\xf5\xcf\x57\x62\x35\xf2\x65\x10\x9d\x2c\x18\x3b\xaa\xe3\xaf\x07\x9a\xca\xe6\xed\xe0\x54\x8e\x77\x4e\x96\xa1\x79\x9d\x32\xd9\xae\x8e\x78\xda\x6e\xbd\x18\x2f\x84\xb3\x5e\x29\xce\x52\xfc\x76\x50\x76\x12\x30\xb9\x64\xdb\x22\x38\x0c\x84\x80\xc2\x6d\x7b\x96\xb7\x77\xfc\xf0\x01\xec\x69\xd6\xc0\xbe\xd5\x00\x5a\xfe\x1f\xae\x98\x3e\xb8\x71\x29\xa9\x49\x87\xb1\x51\x16\xb5\x21\x93\x9a\x18\xe4\x2a\xf0\xe9\x25\xc1\xda\xef\x25\x25\x2f\x65\x8d\x29\x63\x1a\xfe\x42\x65\xcf\xc6\xeb\x16\xc0\x3b\x44\xff\xa5\xfc\x3f\xff\xeb\x7f\x13\xb3\xdf\x91\x92\xda\x23\xb4\x49\x6f\xd5\xf8\x75\x37\xa7\x9e\x7f\x1e\xe5\x19\xf4\xef\x60\x20\x82\xfe\x54\xa3\xa1\x29\x35\xa1\x51\x7e\x3b\xc1\xe8\xfb\x8a\x6d\x00\x31\x91\x43\x9a\xf4\x64\xce\x36\xbe\x49\x1b\x46\x54\x99\xea\xff\x2e\xaa\xdf\x16\x17\x8b\x26\xb1\xb2\x4a\x74\x62\x22\x50\x73\x01\xc0\x25\xec\x9c\x74\x96\xcf\xfe\xe6\x98\x5b\x88\xe8\xd6\x18\x44\x48\x0f\x63\x08\x7b\xc3\xe4\x37\x7d\x28\x4a\x44\x72\xb9\xa6\xca\xac\xc5\xf9\xf2\xe5\x2e\x86\x44\xea\xb9\x46\xc2\x8e\x9e\x76\x16\xae\xa7\x37\x98\x11\x10\x37\x13\x33\x19\xc6\x01\x92\x44\xae\x0e\x28\xb9\x63\xa2\x3e\xa7\xe8\xdd\x38\xb8\xa5\x4c\xbf\xb6\x63\xb6\x48\x76\x65\xb3\x93\xc8\x75\x24\xf8\x1a\x10\xbf\xc6\xc5\xe4\x27\x16\xb4\x77\xc8\xa0\x7d\x8d\x0c\x5c\x90\x83\x33\x88\xff\x27\xb8\x58\xa0\x4a\x20\xe7\x6a\x4a\xf3\x47\x97\x17\xda\xe8\x99\x07\xef\x30\xc3\xa5\xa6\xe8\x5d\x05\x6e\x1c\x88\x9a\xf1\xf2\x4f\xae\xba\x61\x65\x90\xfb\x18\x74\x14\x76\xf0\x74\x03\xab\x88\x46\xc6\x72\x5b\xc4\xe5\xd4\xe6\xae\x24\x83\x8b\x56\x7c\x9f\xb9\xe6\x17\x4a\x0c\xcb\xae\x9b\x60\xcb\xe0\xb6\x52\x17\x54\xe3\xf5\x22\xad\x76\xe8\x7f\x12\x78\x76\x48\x55\x5d\x17\x58\x89\x51\xc7\x67\xa7\x1b\x12\xc0\x36\x91\xb0\x88\x86\xd8\x3a\xf6\xd3\x01\xcf\xfd\xf4\x4a\xe3\x1f\xf7\xdd\x4f\xdb\x78\xdc\x7b\xff\xcf\x5a\x8f\xe7\x2f\x1c\xb8\xe2\xe9\xcd\x03\x57\x34\x77\x05\xe1\x5f\x30\xd4\x12\x49\xe9\x30\x26\x7b\xfb\xa0\xa5\x56\xeb\x38\x43\xdf\xe1\xab\xa4\x7f\xdc\x5e\x1b\x5d\xc1\xfb\x1d\x16\xdb\x78\xc6\x81\x18\x1c\x8d\xca\x21\x84\x0d\x02\x71\x60\xd9\x21\xe9\xd8\x4b\xc5\x11\xcf\x18\xcb\xd0\x93\x38\x32\xcc\xf4\xd1\x2a\x71\x54\x59\x38\x4c\xa7\xfe\xfb\x38\x2c\xd3\x92\x25\x9e\x4c\xcc\x25\x5f\x0e\x2a\x3b\x60\x7f\x7b\x2c\xba\x6c\x3c\x4a\xe6\x35\xee\xb1\xb7\x70\x90\x8f\xd6\x08\x8f\xd9\xd8\xc6\xfd\xaf\x44\x9c\xcd\xdb\xb8\x58\x71\xd8\x9b\xaa\x8b\x43\xd9\xf0\xe7\x15\x36\x0e\xae\x37\x7c\x89\x73\xc9\x33\x5c\x8f\xb9\x01\x6f\xb8\xf5\xe3\x41\x73\x3c\xaa\x70\xef\x85\xde\x47\xb2\xdb\x4c\xa3\x7c\xcf\xfa\x10\x4c\xbd\x93\xf0\x30\x0f\x24\xbf\x21\xee\xcc\x96\x8c\xeb\xc7\x7d\xc4\x71\x76\x96\xeb\xcc\x8c\x67\x48\xb8\x7c\xc2\xda\xb2\x44\xd8\xd3\x89\xa4\x5c\x89\xba\xdd\xf4\x5a\xad\x1f\x84\x5c\x99\x7c\x09\x4b\x93\xcf\xd5\x53\x4f\x71\xcd\x91\x23\xb4\x28\x0f\x3b\x5e\xc2\xdc\xdd\x21\xe2\x65\x12\x40\x15\x37\x75\x54\x90\x90\x7f\x1c\xb7\x25\x8f\xcf\xe8\xe9\x79\xde\xec\x13\x39\x3a\x17\x7c\xcb\x2f\x95\x2b\x7e\x9a\x13\x0f\x49\xf2\x58\x46\xd1\xc0\x60\xcc\x81\xc4\x74\x89\x03\x9e\x96\x8f\x42\xa1\x70\x72\xb8\x20\x28\xbb\xb1\xcb\x02\x28\xa4\x06\x44\xaf\xb0\x5c\x1f\x12\xc7\x42\x5b\x85\x00\xeb\xbb\x15\x49\x34\xea\x37\x84\xf8\x3d\x1d\xf3\x38\x27\xdd\x1d\x99\xfd\x00\x17\x38\x38\xc2\x45\xf8\xe1\xd6\xc6\x21\xef\x63\xb9\x71\xb8\xc7\xd7\xfc\x38\x42\x88\xdf\x33\x0e\xee\xe5\x39\xbf\x57\x8b\x45\x7c\x6c\x3c\xa4\x1c\xea\x7d\x94\xd0\x3a\xdd\x8d\x87\xe8\x63\x89\xae\x83\xf3\x1a\x1e\x9e\x62\x24\x7f\xb0\xf9\x68\x7a\x70\x4a\x89\x38\x1a\x66\x44\x04\x71\xc4\xcd\x06\x55\x7f\x79\x8b\xf3\x4a\xa3\xa6\x03\x0d\x5c\x6c\x1e\x6c\xee\x14\xd2\x71\x79\x91\x0e\x32\xd6\x99\xca\x75\x52\xf8\xe5\x83\x57\xe0\x2c\x1c\x5a\xe4\xbb\xf0\xc8\x80\x80\x67\x2b\x59\xc8\xf3\x05\x6e\x8f\x33\xab\x0b\x7a\x9d\x36\xe6\x58\x35\xa0\x1c\x8b\x9e\xc2\x19\xef\x0c\xa5\xb3\xc0\x98\xc5\x4c\xf9\xc8\x64\x56\xf1\x66\x19\xd4\x36\x7f\x88\x1c\x6c\x1c\x06\xce\x1a\x59\xb4\x6b\x0e\x9f\xd8\xd3\xa1\xf8\xb3\x5a\xde\x04\x70\x04\x73\xd0\x5d\xbf\x08\xb7\xfa\x94\x40\x3c\xd9\xad\xda\x9c\x6d\x8d\xb6\xd6\xcc\x2c\x02\x52\x40\x83\x3f\xba\x59\xba\xd7\x19\x3d\x37\x80\x07\x83\x1a\x7a\xfa\x18\x53\xf8\x03\x03\x00\xdb\x78\x7c\x04\x60\x0b\xf2\xb2\x01\x0d\x23\x60\x01\x8f\x0d\x44\x9f\x55\xfc\xfd\x03\x01\xdf\xf8\x9d\x03\x39\xb2\x51\xe8\x7d\xda\xa2\x98\xdd\xff\x8f\x8d\x6f\xa4\xee\x80\x38\xa3\x0b\xdb\x23\x82\x8f\x9e\xb8\x76\x44\x1f\xf8\x9a\xad\x59\x38\x18\xd4\xf7\xad\xc7\x99\x6f\xaa\xa6\x25\x84\x2a\x5b\xf7\xa1\x7f\x3c\x8e\xf3\x64\x8f\x6d\xdf\x3e\xa8\x48\xc2\x93\x8b\xc3\x4c\xfd\xbd\x34\x51\xc2\xe0\x2b\x92\x4b\xfc\x9f\x80\xf6\xcf\x07\xde\xaa\x97\x27\x3f\xc5\xfd\xd7\x45\xef\xa6\x4f\xef\x53\x3f\x7a\x97\x3d\xbe\xc3\x3f\x7e\xcc\xa1\x93\x9b\x03\x2b\x93\xe5\xec\x55\xc5\xc4\x3b\xc7\xaf\x1e\x08\x07\x5b\x3c\x24\xbb\xe4\x6b\x8c\x4d\x5d\x89\x5f\xf5\x4c\x52\x7c\x93\x95\x4d\x31\x6a\x87\xe1\x0b\x2d\x3e\xc6\xc9\xcf\x0e\xc6\x45\xb6\x31\xa9\x20\x20\xe9\xa0\x3c\xb8\x5b\xcd\xaa\x8e\xfd\x08\x5b\xc0\x48\x60\xc2\x1c\x82\x91\xe9\x38\xd0\xe8\xd0\xcd\xf5\x98\xb1\x23\x24\x55\x37\x90\x7b\x00\x9b\x99\x04\x5f\x20\x2c\xf8\x02\xa1\xbc\xb1\x7a\x14\x64\x44\x38\x0f\x0b\x76\xee\x15\x99\x28\x3b\x3e\xf8\x7c\x3e\x62\x6a\xe3\x2c\x0e\xa4\x8d\x32\xf2\xe5\xa4\x17\xd9\x54\x71\x3d\x89\x55\x0a\x73\xd8\x98\xc8\x0e\x91\xa8\xf5\xf8\xfe\x55\x58\x24\xcf\x12\x44\x59\xfa\x8e\x63\x3c\x13\xb1\xa9\x86\x79\x9b\x66\xc5\x4f\x2a\xc0\x08\x19\x4f\x4f\x65\xe7\xb8\x4d\x0b\x4f\x8d\x9a\x40\x58\x5a\x98\x03\xbf\x41\x9f\x77\x71\x6d\x6c\xc1\x30\x43\xef\xe3\x4c\x00\x49\xa7\xce\x97\x6b\xcc\x7f\x31\x47\x48\xa6\x1a\x3b\x62\xd2\x17\xdc\x67\x20\xe5\xad\xcd\xd4\x5e\xd6\x9c\x85\xe1\x27\xbc\xf1\x90\x69\x50\xba\x24\x4c\xd5\x99\x5e\x51\x6b\x34\x00\xff\x84\x33\xed\x3a\x5a\x7a\x81\x1d\xd7\x3d\x5a\x29\x38\xc5\x38\x4e\x52\xaf\xc0\x69\x4d\x91\x38\x1e\x39\xce\x7c\xcb\x7a\x30\xaa\x67\x38\xf7\xba\x5a\xe7\xe5\x04\x96\x6e\xcc\x75\xec\x88\xe4\x77\xb5\x31\x1a\xa5\x87\x70\xcd\xfc\xf1\xa1\xc2\x7a\xc6\x51\xc1\xb0\xc8\x45\x83\x8c\xd8\x9a\x81\x7c\xa1\x85\xd1\x10\x67\x9b\xf8\x03\x83\xe4\xc7\x7f\x57\x4b\xf7\x58\xea\x29\xdf\x94\x6d\x6f\x38\xfe\x98\xcf\xb0\x52\x1e\xb1\x6e\xea\xd8\x02\x37\x5f\xfd\xb1\x91\x61\x40\xac\x73\xcf\x35\x7f\x68\x6c\x6d\xd9\x3d\xd4\xcb\x0c\x2f\xd7\x76\x6b\x0d\xf1\xfb\x50\x8a\xad\xfc\xe9\x82\xf2\x9e\xe7\x7a\x09\xa4\xc4\xe5\xd3\xee\xa9\x3c\x25\xf0\xcd\x92\xf2\xf1\x72\x2e\x1d\x71\xcf\xc0\x13\x51\xdb\x04\x38\x12\xcf\xfa\x6f\x1f\xed\x68\x34\x97\x80\x21\x06\xb8\x6d\x31\x94\xbe\xfc\x5d\x33\x08\x9c\x90\xe1\x34\x98\x0c\x74\xf7\x83\x57\x84\x6f\xe6\x30\xe2\xbe\xe1\x7b\x2f\x7c\xf7\x99\x1f\x24\xd4\x70\x0a\x3d\xd0\xec\x65\x62\x35\x1e\x1d\x98\x50\xd8\xef\x23\x2b\xf4\x34\x1a\xc5\x97\xe7\x18\x1e\x42\xf2\xe6\xfa\xb0\xc3\x87\x2f\xdc\x63\xeb\x1f\xf1\x3b\x64\x0a\xf2\x8c\x41\xb6\x6a\xda\x86\x96\x07\x26\x62\x7b\xda\xe0\x8d\xe5\x75\x33\x15\x60\x02\x7f\xc8\x06\x0d\x8b\xb7\x3a\x67\xc8\x26\xf9\x81\x63\xe4\x7d\xad\xbe\xe9\xf3\x8d\xd5\x61\x0b\xe4\x52\xed\xd6\xd7\x5c\x60\xb5\x8e\xad\x20\xa8\xa9\x75\x9a\x1b\x8e\xa7\x43\x15\x05\xbe\xd0\x9c\x00\x16\x6e\x0e\x0e\x4c\x27\x74\x0d\xbb\x8c\xa7\x8a\x68\x68\xc9\x4e\xdf\x23\x3b\xbd\xe6\xec\x69\x0f\x36\x2a\x57\x6d\x34\xa8\x43\xf5\x6e\xdb\x72\x52\xe7\x35\xdf\xd1\x18\xc3\x1b\xe6\xd6\x65\xbe\x9b\xe0\xed\x2d\x65\x4e\xb0\x06\xc8\x29\x02\x00\x7b\x18\x0b\x61\xad\xaa\x80\x62\x15\xd6\x78\x47\x59\x87\xa0\xf1\xb2\xd3\x18\x1e\x9f\xa4\x38\x50\x43\xcf\xec\xf1\xa8\xd4\x67\x33\x19\x55\x73\xf3\x77\x7c\xc0\x41\xa1\x2f\xe4\x67\x00\x75\xd3\x34\x3d\xbf\x93\xbb\x63\x71\x6b\x79\xe7\xd0\xf4\xb3\xe5\xb3\xb8\xb5\xbc\x9b\x60\x4a\xa0\xa7\xa8\x12\xe8\xc3\xb8\xda\xf2\x05\x31\xea\xab\x1d\x96\xfd\x40\x1b\xd4\x75\x78\x76\xc5\x97\xcd\xae\x5c\xc1\xa4\xc7\x49\xcd\x90\x42\xc7\x95\xe7\x7a\x5e\x92\x10\x51\xce\x76\x7d\xc2\x25\x8f\xf6\x3d\xa9\x1b\x76\x3e\xa9\x3e\xb7\x53\xf0\x72\x0f\x1b\x9d\x6f\x86\xe5\x5d\xd9\x73\x4c\xee\x3a\x83\x87\x39\x6c\xeb\xd2\xc0\xd2\x9f\x01\x96\xbe\x25\xb0\xf4\x5a\xbe\xc2\x30\x6d\x95\x0e\x9d\x6d\xd9\xe7\x88\x14\x08\x5a\x79\x73\x42\x2b\xc0\xd9\x45\x3e\x57\x0b\xd6\x99\x4c\xa5\x6c\xdd\x85\x2c\xf8\x04\x2d\xe8\xf7\x21\x44\xf0\x3e\x76\x20\x73\xad\xb1\x1a\x20\xa7\xdf\xf2\x61\x29\xcf\xd2\xb0\x62\x40\x63\xf8\x20\x39\x01\x2c\x9e\x32\x20\x58\xe3\x91\x70\x8a\xe3\x4d\x03\x02\xbf\x8e\x19\xa5\x70\x30\x0f\x2c\x8c\x8b\xe0\x2e\xf3\xa1\x9b\x05\xdc\xe5\xb2\x99\x0e\x42\x5a\xf7\x06\x68\x3d\x8f\xe1\xb4\xd3\x4e\x50\x29\x6c\x45\x34\x35\x89\xdd\xd4\x77\x07\xec\x0b\x51\x08\xdd\xb4\x57\x07\xf0\x9d\x28\x81\xfd\xe2\xb3\xe7\x0a\x26\xd2\x2b\x64\x56\xc9\x31\x79\x0b\x8f\xf2\x59\xda\xca\x60\x89\x52\x9b\x9e\xe6\x45\x6f\xb0\x6b\x9e\x5e\x9a\x71\x1d\x5b\xfd\xf0\xda\x87\xb6\x08\xc1\xd4\x42\x56\xe2\xe7\x6d\x35\x72\x45\x00\xe5\xa2\xa5\x78\x92\x36\x61\x65\x28\x0d\xee\x03\x41\x51\x03\xef\xa1\x4f\x04\x73\x3b\xf8\xc0\x95\xdd\x4c\xff\x9d\x6f\x5c\xf9\xd9\x04\x38\x86\xa3\x3b\xc6\x6e\xd5\x65\x21\x3a\xc7\x17\xdb\xf3\x11\x7a\x19\x5c\x31\x1c\x81\xc2\xf3\x1d\x3e\xe8\x1e\xb8\x1f\x0d\xe5\x70\xf4\xe1\x43\x12\x1a\x28\x35\x69\x21\xa8\x13\x7c\x7d\x83\xc3\x4d\xe5\xba\xc7\x1c\x8a\xbc\x75\xd0\x30\xe4\xde\x0a\x03\xf4\xa3\xae\xa5\x18\x17\xf3\x4f\x18\xfe\x7f\x79\xc5\x31\x1c\x80\x7f\xcb\xf1\x40\xff\xff\x4f\xde\x72\x1c\x5b\x66\xdd\x63\x8e\x78\xac\x6e\x81\xe0\xeb\x78\x1f\x47\x8e\xab\x68\x3f\xa3\x46\xb8\x4f\x91\x11\xbb\xf2\x91\xe5\xcd\xbe\x66\xf1\x15\xab\x0d\xb6\xe8\xb8\xbf\x20\x5e\x3e\xea\x4d\x6a\x4c\x1f\x4c\x88\x87\x20\x39\x53\x6f\x91\xe4\xab\x35\x22\xd5\x3b\xbe\xa5\x5a\x8f\x16\x30\x49\xa8\x8b\xc6\xf2\x26\x1f\x9a\xe3\x4d\xad\x5b\x7b\x34\xe4\x78\x73\x47\xa3\x96\x4a\x72\xbb\xd2\x42\xf1\x67\x99\x89\x02\x06\x53\x91\x9c\xf0\x96\xa1\xe4\xc8\xe3\x65\x78\x0b\x58\x52\x9a\x3f\x8d\xc2\x08\x46\xac\xcd\xc4\x5d\x07\x8d\x02\x68\x96\x57\x05\x63\x19\xc7\xff\x49\x6e\xf8\x5d\x39\xc9\xd1\x4f\x74\xe1\xeb\x5c\x92\x73\x83\xf8\x21\x44\xb9\xb1\xf1\xe9\xf4\xdc\xba\xed\xfb\xb6\xba\x19\xfa\xf9\x67\xf9\x5c\xe9\x04\xda\xdc\xfe\x4c\xbb\xe9\x17\x60\xbb\xc1\x1a\xbe\x1a\xbe\xd4\xee\xe8\xc1\xf5\x11\x9c\xdc\xa5\x4c\xdd\x55\xde\xd7\xf8\xad\x85\x5b\xe6\x91\x59\xc7\x5f\x82\x3c\x23\x16\x53\xa4\x57\xc7\x5a\x82\x0f\x71\xa9\x75\x04\xdf\xeb\x3a\xb8\x0a\x0c\x39\xf9\xb0\x97\x2f\x52\xbc\xa2\x28\x40\xae\x3e\xef\xd7\xcb\xcb\x6b\xf2\xb4\xdd\xf5\xfb\x2b\x4a\x2e\xdb\x07\x71\x18\xe9\xba\xb0\xc7\x40\x3f\x7f\x65\xef\x1d\x1f\x9f\xb9\x0f\x8c\x05\x2b\xad\x4d\xf2\xc7\x8b\xb2\xe0\xbb\x9c\xda\x38\x8d\xbf\xd1\x4f\x73\xa8\xc1\x54\x69\x95\x1f\x87\x25\x5a\xa5\x7f\xd6\x8e\x3f\x57\xc7\x64\xaf\xcf\x00\xea\x0a\x4c\x0e\xa3\xd8\x72\x8b\x83\xc6\x1d\x4a\x21\xbd\x87\x67\x65\xd4\xc1\xef\x7c\xb4\x2f\x6c\x2b\x38\x54\x1e\x19\xeb\xec\x5d\xae\xf8\xc5\x89\x10\x30\x93\xfd\x67\x2f\xcd\x44\x0d\x3b\x27\xd3\xb4\x42\xf4\xe4\x4c\x54\x69\x3e\x0c\xe0\xb1\xc7\x66\xc4\x28\x60\xca\xb8\xb3\x79\xab\x32\x1e\x9b\xbe\x15\xf6\xb1\x6f\x1b\x06\x20\xf7\xe2\x5a\x0b\x20\xec\xab\xac\x01\xd0\xfc\xb7\xf5\x14\x60\xcc\x53\x34\x7b\xf4\xc9\xb5\xe8\x5b\x6b\x56\xd3\x3e\x1d\xd3\x0c\xa2\x6d\xe3\xd3\x4e\x7a\x87\xe3\x03\x32\x59\xd0\x32\xf0\xb9\xef\x1b\x06\x45\xda\x11\x17\x85\x9d\xe0\x84\xe2\x8f\x3d\x3d\xfa\x2d\x46\x43\x30\x9b\xdc\x97\x99\x3c\x37\x10\xd4\x81\xc1\x7f\x89\x30\xde\x69\x25\x1a\xf7\xb4\x06\x8d\xfb\x00\xb8\x38\x81\x8d\x9f\x5f\xe1\x97\xb0\x10\x37\x62\x0e\x2d\x53\x2a\xb2\x09\x4b\xde\xf8\x2d\xeb\x10\x07\xc5\x8d\x27\x0c\xf7\x7d\xac\x59\xd2\xf0\xdf\x17\x0d\xbb\xe5\x2f\x83\x06\x07\x81\xcf\x0d\x8f\x34\x9f\x1b\x7e\x80\xd4\xe7\xce\x7d\x11\x74\x5a\xea\x3d\xf3\xdf\x70\x6c\xca\xd7\x3b\xf9\x48\x6a\xf7\x35\x3e\x03\xf7\x6d\x50\x23\xfc\x9a\x68\x9c\x3b\x6e\x43\x3f\x5e\x36\x6a\xc2\x98\x65\xb4\x65\xaa\xe5\x01\xc4\xb8\x6f\x18\x45\xaf\x3b\x02\xfd\xf2\x2d\x3c\x3d\x56\xa2\x8f\x17\x8e\x89\xd9\x33\x5b\x47\xca\x21\xa3\xb5\x81\x71\x48\x7b\xf4\x55\x3f\xfd\x92\x8c\xc6\xb6\xbb\xef\x26\xfd\x8c\x6c\x3f\xc2\xd9\x4f\xf6\x8d\xbf\xd5\xc7\x41\xe7\x56\x25\xfe\xb8\xe2\xf4\xab\x8a\x0a\x66\x4f\xcc\xc2\x22\x30\x79\x8d\x16\xa6\x00\x7d\x8c\xd6\x18\x83\x5c\x21\xe1\xf8\xee\x6c\xa3\xe6\x6f\xb9\x66\x82\x28\xef\xf4\x3d\xec\xdd\x6e\xdc\xd1\x07\x5e\xa2\x4a\xf2\x5d\x19\xf7\x11\x89\x69\x65\xbb\x0d\xe5\x16\xd1\x6e\x77\xcc\x2e\xe2\xaf\x43\x39\x50\xe3\xf2\xe5\x17\x7e\xb5\x85\x7e\xa6\xef\xf1\xd3\xad\x95\x5c\xdb\x80\x36\x2c\x5f\xb5\xd6\x8b\x1c\x50\x8a\x29\xc7\xad\xd2\x5d\xb5\xe3\x63\x59\xdf\xae\xe7\xc5\xa1\x1c\x9c\xcd\x7f\x46\x4e\x88\xe4\x90\x33\x9f\xe1\xf7\xfc\x00\x15\x76\x2a\x05\xc6\xe5\x46\x50\x44\xe7\x4d\x40\x4c\x6f\x7f\x79\x7f\x31\x82\x9c\xd9\xa0\x5a\x32\xb3\xa1\xe3\x2f\x7b\x86\xdb\x57\x5c\x39\x6e\x0a\x70\xdf\xcc\xcf\x40\x20\x0f\x4e\x40\x68\xc8\x7b\x66\x41\x3c\xb3\x0d\x29\xb5\x15\xf9\x4e\x76\x8c\xd2\x99\xfc\x8e\x81\x82\xa7\xac\x04\xca\x5e\xb2\x9a\xf4\x5a\x87\x7d\xd6\xe2\x86\xf0\xfc\x40\x42\x04\x02\x7e\x20\xa1\xb6\xb3\xc3\x33\x68\x52\x59\xef\xab\x42\x05\x47\x81\xbf\xd4\x2c\x03\x35\x10\xdf\xb2\x41\x68\xd3\x6e\x98\x44\xb8\x95\x93\xde\x4e\xf0\x2b\x5a\x3a\xdd\x88\xbc\x5f\x04\xd6\x6f\x43\x7e\xdb\x56\x6a\x18\xf0\x6a\xe9\x10\x63\x06\xa5\x37\x27\xfe\x91\x2f\xd8\x9e\x46\x93\xd9\x54\xb7\xa5\xb3\x54\xe9\x6c\xde\x53\x5e\x04\xcc\x9f\xe4\xed\xec\xc2\x99\x7c\x5d\x88\x3f\xea\x39\x9a\x44\xd8\x94\xce\x64\xd2\xd2\xae\x82\xf5\x30\xc0\x8b\x64\xcc\x63\xdc\xa0\x95\x6f\x07\xe0\xca\xb8\xc7\xec\xd6\xde\xd7\x0f\x76\x88\x7f\xec\xda\x9f\xcf\xae\x77\x3e\x97\x67\x7b\x66\x28\x3d\xb9\x18\x06\x27\x97\x45\x0b\x2c\x96\xad\x3c\x6f\xc1\xff\xae\xd9\x8f\xeb\x4a\xc2\xbd\x67\x79\x1d\xd1\x5e\x31\xc8\x65\x1b\x4d\x7a\x78\x1f\x5d\x20\x68\xb2\x82\x99\x57\x57\x62\x80\xf2\xb7\x72\x39\x04\x6e\x85\x5f\xe4\xb7\xda\xf1\x7c\x33\x8d\x05\x07\x0e\x35\xde\x85\xb9\x94\x9c\x00\x66\x26\x1e\xde\x0d\x1d\x21\x8e\x16\xea\x78\xb0\x7f\xd7\x3d\xd4\x1f\x86\xb2\x88\x0b\x8b\x72\x90\x9f\xd9\x46\xee\x5e\x8c\x82\x30\x0c\x36\x94\x42\xc2\xbc\xec\xbb\x48\x4e\x73\x65\x33\x03\xb7\xa2\x06\xdf\x9d\xdd\x2d\x02\x58\x88\xe2\xc1\xbb\xab\x32\x06\x29\xff\x52\x88\x55\xf2\x49\x62\x1a\x3e\x8f\x5e\xe2\x33\xf3\x63\x10\x46\x13\xdd\xff\x79\x22\x2f\xe9\xc8\x25\x29\xab\xc4\x11\x44\xf2\x12\x50\x00\xfb\xbc\x6b\x97\xcf\x9f\x84\xef\xef\xb0\x45\xc8\x03\xf0\x7b\x3d\x5c\xf8\x83\x3e\xce\xa3\xe3\xb0\x6f\xdb\xff\x4d\xdf\xf5\x91\xdf\x61\xbb\x62\xf6\x90\xa6\xbb\xff\xe4\x5a\xff\x5b\xa2\xc1\x16\xbe\x09\xcd\xc0\xab\xbb\x7f\xa4\x21\xf7\x46\x82\xce\xcf\x7e\x8f\xf0\x82\x2b\xa9\x8c\x10\xb9\x9b\x3a\x7e\xfd\x58\x51\x85\x9b\xad\x7c\x13\xc7\xe3\x89\x7e\x3c\x8e\xa8\xa8\xa9\x09\xa2\x9a\x2d\xdf\x41\xcc\xbe\xcf\xfc\x93\x5e\xb8\x84\x27\x05\x55\xc7\xdf\x80\x91\x2f\x61\x93\x80\xfc\xbd\x7b\xce\x2b\xf9\xd4\x37\xcd\xe6\x73\x92\xaf\x78\x4e\xf4\x37\xc1\x7b\x79\x12\xaf\x8b\x98\x34\x4a\x26\xf2\x93\x53\xdf\x71\xc3\xdf\x91\x96\x4a\x0c\xa4\xe0\xcf\xdc\x7c\xb7\x45\x86\x7c\xda\x10\x19\x6b\x64\xf0\x43\x8b\xf8\x59\xe0\x67\x91\x3f\xe0\xd7\x1e\xbf\xf6\x65\x79\x27\x95\xc1\x61\xa8\x3a\x69\x7d\x6b\xe4\x3c\xe0\xf7\x43\x99\xa3\xb6\xf4\xa3\xaf\x1f\xd9\x8f\x27\xfc\xb0\x9a\x7c\x49\x11\xf9\xf6\x83\xf2\xe5\x95\xf0\x97\xfe\xc1\xf0\x27\xec\x1f\x7b\xd0\x2c\xa4\x28\x87\xbb\xd7\x2c\x49\x3e\x01\x9b\x20\x5d\x56\x1b\x94\x34\xe5\xf2\x38\x34\x53\x92\x94\xd7\xe6\xfb\xcc\x8f\x4b\x53\xc8\xf5\xa3\xd2\x54\xf2\x7f\x03\x00\x00\xff\xff\x90\xf4\xac\x33\x0f\x85\x00\x00") +var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x7d\xdb\x72\x1c\x47\xd2\xde\x7d\x3f\x45\x4b\x0e\x9a\x52\x04\x38\x0c\x49\x61\x87\x43\x41\x52\x86\x00\xf1\xb0\x3f\x41\xf0\x27\xc0\x5d\xaf\x19\x8c\xde\x9e\xe9\xc6\x4c\x2f\x66\xba\x47\x7d\xc0\x08\x7b\xe5\xd7\xf0\xeb\xf9\x49\x9c\xf9\x65\x66\x1d\xba\x7b\x40\x69\xff\x0d\xfb\x06\xa8\xa9\xca\x3a\x65\x65\x65\xe5\xa9\xaa\xf3\xfd\x3e\x2b\xca\x6e\x95\x3e\x4f\x4f\xd3\x7d\x5e\xd5\xdb\xb2\xeb\xd2\xae\xdc\xde\x3c\xd9\x34\x5d\x5f\x16\xe9\xab\xaa\xa7\xdf\xed\x5d\xb5\x2a\x93\x64\xd3\xec\x4a\x02\x7d\x4d\xff\x92\x22\xef\x36\xcb\x26\x6f\x0b\xca\x38\xb7\x74\x52\xfe\xb6\xdf\x36\x2d\x03\xfd\x22\xa9\x64\x53\x6e\xf7\x5c\x87\xfe\x25\x5d\xb5\xae\xb3\xaa\xa6\x9f\x57\x94\x4a\xdf\xd4\x49\xd7\xac\xaa\x7c\x9b\x05\x05\xc8\xb0\xf2\x1f\xd3\xef\xeb\x22\xbd\xea\xcb\x7d\xfa\xac\xdb\xe5\xdb\xed\x8b\xbc\x43\x95\xbe\x4c\xf3\xd5\xaa\x19\xea\xfe\xd9\x53\x29\x90\xc6\x9b\xa1\xb7\xd6\x2f\x87\x5e\xf2\x86\xbd\x65\x7d\xdc\x27\x6d\xb9\xae\x68\x62\x2d\x65\x7d\xd0\x64\x72\x28\x97\x5d\xd5\xf3\xa0\xff\x22\xa9\xe4\xae\x6c\xbb\xaa\xe1\xf1\xfc\x59\x52\xc9\x3e\x5f\x33\xc0\x7b\xfa\x97\xf4\xe5\x6e\xbf\xcd\x51\xe1\x5a\x93\xc9\x36\xaf\xd7\x83\xc0\xbc\xd5\x64\x92\x0c\x84\xb9\x3a\x07\xce\x3e\x6a\x32\x29\x77\x79\xb5\x65\xfc\x3c\xe1\x04\xb5\xdb\x75\x87\x06\x58\x7c\xaf\x49\x1a\x63\xd6\xdf\xef\x4b\x0c\xf1\xc9\x35\xa5\x92\x55\xbe\xef\x57\x9b\x9c\x72\xce\x24\x95\x10\xd0\xbe\xa1\xb1\x36\xed\x3d\xe0\xec\x47\xd2\xb4\xeb\xbc\xae\xfe\x91\xf7\x32\xfe\xcb\xe0\x67\xb2\xab\xda\xb6\xe1\xa9\x5f\x20\x91\xd4\xe5\x21\xe3\x76\x28\xe7\x5d\x79\x08\x5b\xe1\x92\x5d\xb5\x6e\x65\x96\x5c\x78\x81\x5f\xdc\x0a\x97\xdd\x34\xed\xad\x16\xbc\xe4\xe4\xa8\x2a\x0d\x42\x4b\xe3\xfe\xf3\x9a\xf0\xa2\xa5\x17\xf8\x11\x01\x74\x49\x5e\xec\xaa\x3a\xdb\xe7\x75\xc9\x38\x3a\xe5\x5f\x84\x17\xfa\x95\xe8\x72\x67\x5d\xd9\xf7\x55\xbd\xee\xb8\x58\xb2\xd2\x2b\xcd\x4a\x82\x32\x97\xc7\xe3\xe9\xb2\x9b\xb2\x2c\x64\x44\x5d\xfa\x92\xd2\xc9\x7e\xd8\x6e\x69\xee\xbf\x0e\x65\xd7\x33\xfc\x7b\xfa\x4d\xb3\x90\xdf\x49\xd5\x75\x94\xa0\xec\x37\x48\x24\xb4\x00\xf5\x0a\x43\x3a\x43\x22\x49\x3e\x75\x65\xde\xae\x36\x9f\x13\xf9\x8f\x1e\x39\xb1\x58\x2c\x8e\x2e\x0d\x93\x83\x92\x82\xf4\x60\x1d\x24\xab\xa6\xe0\x1f\x67\xf4\x8f\x9a\xae\xea\xae\x27\x92\xfe\x9c\x68\x82\xc1\x24\x25\x68\xec\xab\x7e\x5b\xfa\x4c\xec\x8f\x8e\xd7\x21\x7d\x59\xb5\x5d\xff\xa4\xaf\x88\xe4\x3e\x0c\x75\xc2\xf3\x23\x72\xce\x8a\xa5\xed\xf2\x57\x0d\x61\x07\xd9\x2d\xcd\xef\xe2\xfe\xea\xdf\xdf\x9e\xa4\xef\x69\xab\xaf\xdb\x92\xd2\x29\xb5\x41\xff\xa8\xce\x0f\x8b\x84\x6a\x59\x4f\xe7\x79\x9f\x2f\xf3\xae\xf4\x68\xe5\x42\xa1\x51\x57\x06\x4a\x65\xb6\x01\x16\xd1\xf5\xd1\x7c\xe7\xe8\x9c\xda\xd0\xdd\xe1\xda\x78\xc7\x5b\x84\xf2\x99\x6b\xa0\xf2\xfb\x6d\xc9\xf9\xd4\x54\xfa\xe6\xdd\xbb\xcb\xf3\x9f\xd3\xb2\x5e\x57\x75\x99\x1e\xaa\x7e\x93\x0e\xfd\xcd\x7f\xcb\xd6\x65\x5d\xb6\xc4\x44\x56\x55\x4a\x3b\xa3\x25\x22\x48\x89\x3c\x65\x72\x8b\xa4\xeb\xb6\xd9\x4e\xd0\x7b\x75\xf5\x36\xbd\x60\x14\xef\xf3\x7e\x83\x81\xf4\x9b\xa4\xfb\x75\xcb\x28\x72\x1d\x5e\x6f\xca\xf4\xa6\xa2\x59\x03\xa8\xb9\x31\x7c\xa4\x85\x8e\x71\x91\x94\x6d\x9b\xd1\xbe\xef\xef\x33\xad\xac\xed\x8d\x21\xa5\x09\x22\x9d\xba\xe9\xd3\x65\x99\xa2\xce\x22\x49\x6c\xc0\x86\xdd\xd3\xfd\x7e\x5b\xad\x64\xc7\xbe\x92\x32\x8f\x68\x66\xd1\x8a\xa5\x10\x0e\x88\xb2\xb2\x00\x5d\xc4\xff\xee\x9b\xa1\x4d\x23\x36\x80\xfa\x9b\x92\xf8\xf2\x66\xa0\x2d\x97\x13\x4f\xdd\x36\x43\xf1\x15\x28\xd5\x46\xef\x09\x35\xfd\xd0\xd0\x80\x81\x1d\x07\xe0\xbb\x38\x25\x8a\xe3\x53\xa1\x2d\x77\x0d\x71\x07\x47\xec\x15\x11\xd4\xa1\xa2\x42\x9a\x69\x97\xdf\xd1\x7e\xeb\x9b\xb4\xdf\x54\x5d\x5a\x10\xb1\xad\xb8\x61\xda\x1a\x03\xf1\x63\x21\x0b\x22\x50\x21\x0d\xcb\x8b\xd7\x00\x50\xbb\x81\xa8\x69\x43\x8d\x31\xb7\xe7\xa3\x89\x9a\x9c\x1b\x27\xa6\x44\xed\x80\xbe\x89\x72\x1b\xe2\xad\xcc\xfd\xce\x91\xd0\xdf\x61\xfb\x34\xaa\xfc\xe6\x86\x46\xd5\x11\x55\xbc\x4e\x57\xdb\x86\x48\xea\xe3\x87\xb7\x54\x79\xd3\xf7\xfb\x6c\xdf\xb4\x20\xe3\xeb\xeb\xf7\xb4\x3d\xda\xde\xe7\x06\xb8\x66\x98\x7a\xd8\x2d\xe9\xd7\x61\x53\x11\x13\xc8\x83\x05\x02\x2a\xb6\x7c\xc0\xd4\x69\x53\x2f\xb0\x56\x43\xbb\x1d\x2d\x23\x75\x69\x25\x47\x86\xc7\x43\x78\xca\x7f\xae\xfc\x28\x31\xdd\x8e\x4e\xe1\x03\x16\x95\xa6\x5a\xe2\x34\x21\xda\x6a\xf6\xdc\x6e\x40\x5c\x97\x9a\xe1\x29\x0a\x27\x90\x2b\x97\x73\x88\x4a\x71\xc6\x07\xbc\x74\x47\x13\xd6\xdd\x7c\x75\x41\x68\xc0\x96\x46\xee\x4d\xdb\xec\x28\xf7\x25\xfd\xf3\x19\x7e\xf8\x17\xdc\x1e\x60\xf2\xa2\x20\x36\xd3\x9d\xa4\x1f\x5e\x9e\xa5\xff\xe5\x87\xef\xbf\x5f\xa4\x6f\x7a\xde\x10\x4c\x23\x7f\xe7\xb5\xa5\xa4\x1c\x88\x0e\x94\x76\x6e\x4f\xcb\xff\x35\x13\xf8\xd7\xe9\x33\x94\xfe\xf7\xf2\xb7\x9c\xce\xd9\x72\xb1\x6a\x76\x2f\x78\x73\xef\xf2\x7e\x91\x70\x09\x51\x8d\x92\xd3\x55\x59\x17\x94\xd0\x63\x55\xcb\x02\xae\xa3\xe5\xc1\x21\x2b\xa7\x7f\xb6\x6a\xea\x9b\xaa\xe5\x09\xfd\x52\xe7\x4b\xc2\x89\xc9\x05\xc4\x8e\x51\x62\x67\x17\x21\x8d\x36\x72\x75\x73\xef\x41\x31\xd5\x77\x9c\xa9\x0b\x9a\xb0\xac\x44\x8d\xaa\xc8\xe4\xb0\x7c\x85\x6c\xac\xdb\x25\x4d\xaf\x35\x7c\x77\x1e\xe1\xcd\xcd\xcd\x96\x18\x9b\x31\x2b\xed\xe1\x52\x72\x85\x6f\x85\x20\x44\x8c\x7b\x48\x36\xe7\x55\x07\xc8\xb3\xf3\x77\x69\x79\x47\xd4\x46\xe4\xb0\x6f\x9b\x62\x58\x81\xc2\x18\xf6\x24\xe5\x63\x82\xf0\x4b\x9c\x61\x25\xec\x2d\xd8\xab\x3c\x34\x66\x08\x2b\x02\xa2\x2d\x5a\x48\x7b\x99\x20\xa8\x35\x41\xc2\xba\xb9\x62\xe1\x30\x2c\x9b\xad\x30\x19\x1d\x56\xa9\x1b\xd7\xa5\xe5\xae\xb7\xf7\x29\x4e\x7d\xd0\xc5\xaa\x2d\x03\xd9\xae\x5b\x24\x7a\x56\x99\x84\x98\xdd\x55\x24\x54\x04\x4b\x85\x52\x13\x17\x99\x3d\xfc\x99\x01\x58\x4c\xeb\x66\xeb\xba\x81\x5d\x72\xc7\x5c\x42\x73\xa7\xce\x79\x7c\x1d\x86\x80\x1e\x58\xdc\x23\x62\xbc\xab\xc0\x69\x14\x59\x18\x2b\x61\x0c\x5d\x53\x57\x5d\x59\xa2\x05\xaa\xff\x94\xda\x44\x9d\x85\x8a\x30\x2a\x8a\xd8\xb9\xfb\xd7\x66\x48\x8b\x26\xe5\x83\x00\xec\x8c\x6a\xdb\x54\x6b\x9d\xbe\xce\x39\x6d\xab\xf5\x86\xf8\x4a\x73\x38\x11\xa4\x1d\x36\x4d\xc9\xb4\xf3\xe6\xfc\xf9\x77\x32\x8e\x35\x33\x37\x57\x89\xd9\x62\x3e\xf4\x0d\xd3\xa9\x2e\xa1\x0c\xc1\x1d\x2f\x80\x9c\x08\x4b\x02\x34\x16\x4f\x4d\x00\x9b\x9e\xd6\xba\x4f\xc2\x32\xdd\x20\x1e\x46\x6a\x8f\x44\x5c\x95\x62\xb2\x75\x03\xc9\xcc\xa4\x16\x66\xd5\x24\x4a\x77\x7d\xb6\xae\xfa\xec\x86\x37\x2c\xb7\xf9\x92\xeb\xf2\xc9\x41\x25\xe9\x63\x2a\x7a\x9c\xd2\xae\x27\xc9\xb1\xf8\x31\x7d\x74\xa7\xc7\xf5\x0f\xbc\x13\xb3\xfc\x8e\x60\xb1\x18\x40\x70\x4b\x14\x2e\xd2\x82\x89\xef\x45\x43\x74\xce\x38\xef\x86\x3d\x38\xba\x9e\xd0\x27\xe9\x5e\x00\x8b\xe6\x50\x6f\x9b\xbc\x00\xcb\xa1\xdd\x55\x41\xf9\x58\x56\x75\x4e\xa7\x8b\xb5\x02\x56\xf6\x88\xa8\xe1\xdd\xe5\x35\x00\xd7\xcd\x72\xa8\xb6\x85\x01\x2c\x68\x86\x77\xf9\xb6\x2a\x58\xce\xd2\x75\x0f\x65\x1a\xcb\xaa\x64\x2c\xab\xa6\xe5\xe3\x10\xb3\xb1\x8a\x47\xce\xe1\x96\xcf\x37\x64\x53\x5d\x85\x45\x3d\x77\x64\x32\x1a\x68\xe1\x21\x80\xf2\x81\x0a\x8a\xa9\xba\xfa\x71\x8f\x91\xae\x06\xea\x8b\x16\x9d\xb3\xa9\x62\x97\x3e\x79\x41\x7f\x13\x3e\x9e\x85\xef\xad\xa7\x88\xe7\xc2\x54\x0a\x07\xd9\xa5\xd1\x50\x23\xf2\x76\xd4\x65\xc4\x1b\xcc\x35\x1c\xaf\x91\x40\x37\x08\xbd\xb2\xa6\xb5\xa5\x65\x2d\xbf\xa2\xc4\x63\xda\xc0\xeb\x2d\x16\x21\x87\xf4\x42\x62\x5c\x43\x78\x63\x02\x39\x91\xed\x72\x43\x53\x63\xde\xd9\xe7\xb7\x34\xb6\xbc\x25\x21\x2c\xf9\xc4\xda\xe8\xe7\x64\x10\x01\xa8\xd9\x16\x4e\xd8\x04\x4d\x37\xed\x58\xc5\xf2\x40\x8e\x5e\x3b\x92\x22\x57\x9b\xcc\xe9\xb2\x8c\x94\xbe\xfc\x0d\x67\x1e\x8a\xbc\x6a\xcb\xc4\xce\x45\xc9\xee\x1e\xcb\xc5\x93\xb8\xb8\xf7\xab\x45\xe2\x0f\x6d\x11\x12\xd1\x97\x0d\x63\xed\xae\x74\x50\x67\x61\x6e\x5c\x81\xda\x22\x41\x4d\x9b\x8a\x35\x21\x2a\x12\x75\x4d\x4b\x45\x65\x23\x55\xe4\x93\xea\xd8\x9f\x13\xeb\x20\x6a\x32\xf9\x44\xcc\x80\xf4\x12\x61\x2f\x19\x6b\x63\xb6\x38\x34\x14\xe1\x39\xac\x98\x29\x3f\xf0\xe7\xe0\xa6\xdc\xf3\x91\xb9\xeb\xb0\xaa\x5b\x82\x2c\xee\x55\xf6\x72\xeb\xfb\x93\x70\x5a\x5a\x70\xe2\x4f\x5f\x99\xf6\xfe\x07\x9b\xf8\xb9\xa2\x95\x44\xfd\xf8\xe4\xe0\xf3\x9a\xb6\xda\x1e\xd8\xa7\x4d\x72\x7f\x92\x46\x67\xd0\x26\xef\x88\xfb\xd2\x01\xa7\xd5\x8a\x85\x69\x07\xbc\x6a\xf9\x4a\x48\x1e\x9a\x3c\x88\x54\x6a\x36\xed\xf8\x48\xe3\x11\x0a\x83\xd2\x5e\xdc\x81\x8f\xe3\x3c\x3c\xf5\x67\xfa\x24\x84\xed\x4a\x96\xf9\xb2\x9d\x68\xe8\xf2\x2b\xbd\x28\x13\x12\x4c\xd6\xb4\x1f\x8d\xde\x9e\xb3\x4a\xb6\x86\x84\xaa\xe4\xc6\x00\x65\x1f\x72\x50\x85\xb0\x9c\x9f\xcc\x62\x41\x1b\xfb\x00\x7d\x95\xb6\xe6\x04\xfd\x74\xd6\x50\xf1\xc2\x38\xb2\x1c\xb8\x90\x4f\x3a\xda\xec\x1e\x89\xa7\x29\xad\x7e\x1a\x42\xa9\x9c\xe8\xa7\xc5\x15\x78\xd3\x3f\x5b\xbe\x78\xd4\x3d\x7b\xba\x7c\xe1\x58\xe3\x6a\x53\xae\x6e\x45\x97\xa8\xea\x65\xf3\x1b\x14\x2e\x5a\x78\xc6\x71\xcd\x5b\xe4\x51\x91\x6e\xa8\x14\x32\x39\x6d\x65\xaa\x46\x88\xe7\xd2\x68\xd1\x68\x30\xbc\xe3\x17\x66\xfb\x71\x87\x83\x11\x12\xd5\x46\x27\x32\x32\x52\xf3\xb1\x77\x38\x2b\xa0\xdb\x53\xce\x65\xca\x05\x9b\xf7\xa4\x8b\xf9\x6e\xab\x5d\xd5\x4f\x48\x87\xf9\x48\xae\x24\xa8\x7a\xbe\xe1\x12\x6d\x01\x1b\x18\x0b\x71\x63\x6a\x86\xce\x4d\x23\xa7\x43\x4e\xea\xcd\x0f\x29\x91\xd0\x40\xa7\x10\xcf\x89\x86\x49\xec\x38\xe7\x83\x97\x14\x84\xbc\xcb\x86\x5a\xd1\x5a\x16\x46\x4c\xaf\x2b\x1c\x12\xdc\xaf\x91\x7c\x00\x65\x98\x57\x39\x37\xfd\xc6\x61\xfc\x5b\x12\x8a\x6f\x5c\x35\xe6\xdc\x3c\xa0\x8a\x65\xb2\x7c\x76\xf1\x88\xb3\xd5\xa5\xa8\x57\xc0\x00\xc3\xf1\x42\x93\x72\xe0\x57\x8f\x34\x8c\x5b\xca\xc1\x82\x2c\x87\xbe\x6f\x58\xe6\xde\x32\xd5\x48\x1d\x1b\xf5\x19\x00\xa1\x46\xf8\xf6\xb0\x20\x21\x9e\x64\x6d\x4a\x93\x81\x33\x6f\x85\x53\x6d\x65\x34\x3b\x3d\xea\x1c\x58\x21\xea\x7a\x5e\xdf\x1b\x29\x13\x41\xf0\x28\xb8\xc3\x7e\x7e\x2c\xdf\xb4\xe5\xb7\x7e\x34\x6e\xcf\xa0\x86\x8d\x48\xaa\x07\xfb\xe9\x03\x4a\x41\x25\x6e\xd7\xd9\xc9\xa5\x46\x16\x4f\x1f\x6d\x8c\x5e\x94\xf3\xce\x20\x06\x4b\x62\x63\x01\x44\xd3\x2c\x50\x7b\x31\xea\xcb\xab\x3b\x53\x0c\xf6\xf1\x90\xfd\x01\xd4\x37\x4d\xd6\x6d\x44\xb5\xb4\xe1\xa5\xdb\xb2\x5e\x47\x66\x02\xd8\x60\x41\x74\xff\x95\x8f\x39\x12\xe0\xf3\xed\xe7\xe4\x1e\xf6\xa8\xbf\x12\x87\xaf\x61\xaf\x6b\x12\x2a\x10\x65\xe4\x02\x09\x02\x65\xcd\xe8\x73\xc2\x47\xe0\xbb\x91\x58\xc7\x47\x84\xe6\x05\xf2\x05\x8a\x7e\x89\xa4\x35\x5b\xc2\xe4\xfd\x8c\x08\xf8\xa1\xf4\x76\x49\xa4\xdc\x14\x49\x89\xbe\x36\x55\x87\xf4\xe9\xdb\x52\x1b\x7f\x4d\x6a\x73\xf7\x11\x6a\xaf\xe8\xb0\xac\xf0\xbe\xcf\xef\x59\xe8\x92\x6c\xfd\x81\x82\xeb\x32\xdf\xe9\x28\x39\x29\x4d\x9c\xd2\x71\xa6\x99\x9c\xa4\x53\x2e\xb0\x6a\x24\x10\x3f\x6c\x0a\x22\x8b\xe8\xb1\xef\xc4\xff\x52\x8d\x9e\x7f\x9b\x98\x62\xfe\x96\xe4\xdb\xfd\x26\xc7\xf9\x1f\x80\xc1\xea\x40\x40\x58\xf8\x14\x20\xa0\x85\x61\x57\xb6\xd5\x8a\x93\x5c\xe1\x9b\x27\xd9\xb7\x30\x38\xd1\x46\x21\x41\x30\x6e\xac\xa0\x4d\xf2\x4f\x35\xc8\x69\x16\x12\xc3\x76\xbb\xea\x1f\x36\x8b\xa8\x39\xce\x27\x9e\x43\x10\x10\xc9\x3c\x94\x03\xc2\xc1\xc8\xe2\x59\x9f\x32\x5f\xe8\x59\x04\x8c\x9a\xde\xe5\xbf\x7d\xa9\xe2\xae\x99\xa9\x27\xac\xc0\x57\xb2\x0d\xaf\x53\x8c\xd9\x01\xc1\xb3\x7d\xe3\x28\x34\x2d\x3d\x83\xd4\xb7\x74\xaa\xd5\x0e\xec\xa3\xfc\x4e\xf1\xfb\x47\x33\x81\xd3\x11\xa2\x02\x74\xea\x8c\xe1\x74\x38\x17\xcc\x37\x21\x08\x2f\xfc\x76\x0b\x85\x63\x47\xce\x2c\x46\x9a\xca\xef\x18\x07\x49\x94\xa2\x27\x10\x49\x2d\xbc\xdd\x3e\xe3\x33\x32\x63\xa1\xb3\x0e\x45\x4b\x77\x7a\xda\xf9\x02\x08\xb1\xfb\x66\xd3\x7a\xa3\x0d\x77\xb4\x3a\x89\x02\x33\xb5\x2f\xa7\x86\xbc\x23\xf5\x7b\xda\x32\x33\x0d\xb8\x9d\x74\xb4\xa2\x2c\x26\x2a\xd1\xcc\x8b\x09\x2f\x98\x56\x64\x30\x36\xad\x6e\x32\xda\xe9\x51\xcd\xf7\xc3\x92\xf8\xa1\x63\x00\x4c\xcf\x90\xa9\xeb\xde\xb7\x22\xb5\x49\x93\x2d\xd7\x6c\xa8\xb2\x61\x47\x63\x55\x02\xa4\xa3\x44\xc0\x42\xf2\xf3\xeb\xe3\x96\x3a\xa4\x8a\x50\x05\x70\x2b\x1c\x2b\x5f\x34\x67\x1a\x13\x25\xb9\x66\xa0\x82\xe9\x30\x54\x0e\xd8\xb1\xb6\xd1\x0d\xcc\xd8\x59\x33\x11\xd9\x26\x5e\x4b\x3e\xb6\xd1\x54\x89\x2e\x8e\x37\x4f\x94\xcc\xea\xda\x97\xda\x07\xd8\x1f\x6c\x3a\x54\xd6\xa7\x0d\x6b\xe3\x0e\xe8\x58\xb3\x4e\x9d\x2c\x7f\xab\x60\xf4\x7b\x55\xdd\x95\xaa\x50\x3a\x3d\x1a\x65\x8b\x64\x4b\xac\x84\x15\x17\x99\x95\x48\xc1\xcd\x1d\xeb\x7d\xdc\x1f\x97\x4a\x3d\x31\x02\xea\xa4\x78\x9d\x55\x35\x25\x55\xb0\x39\x94\xc5\x09\x09\x08\x5c\x83\xc6\x09\xa6\x93\x6f\x0f\xf9\x7d\x07\x0b\x8b\xf1\x2b\x36\x78\x4a\x75\x66\x46\x24\x3e\xac\x31\xaa\xd0\xba\x4d\xfb\xd5\x30\xa1\x04\xe9\x0f\xf9\x03\x94\x4b\xf0\x1a\xb5\xd9\x90\xce\xce\x87\x26\x0e\x68\x3d\xa9\x58\x31\x66\x35\x92\x35\x04\x29\x0e\x1a\x82\xc3\x44\xcf\x8d\x99\xba\x27\x2c\x5c\x51\x37\x2c\xea\x10\x37\x17\x5c\x93\xf4\x48\x98\xc5\x90\x02\x4b\x03\x6d\x8c\xf2\x89\x48\xd5\x15\xe1\x90\xb5\x34\xaf\x7c\xf3\xc9\x46\xab\x62\x66\x61\xc9\x87\xea\x9c\x74\x3d\x6d\x01\xc6\xb4\xb9\xea\xfe\x2a\xd2\x99\x2a\xdc\x5c\x8a\xad\x05\x34\x75\x9b\x6a\x9f\x36\x30\x35\x86\x28\xf4\x64\x1b\x08\xa8\x84\x8d\xa2\x84\xd4\xce\x36\xd7\x36\xaf\xbb\x9b\x12\xc6\xd7\x5d\x7a\xc3\x7e\xa4\x85\x76\xcd\xf2\xae\xb8\xec\x8e\xf4\x2c\x1a\x10\xba\x0e\xcf\x1a\xac\x5d\xb0\x50\x71\xd7\x04\x73\x87\x9e\x75\x0c\xc0\xaa\x6f\xa9\xb3\x31\x30\x99\x4d\x50\x00\x99\x33\x72\x71\xd8\x68\xee\xca\x10\x11\x37\xff\xec\xcc\x03\xac\xab\x7d\x59\x8c\xf2\xf1\x32\x49\xa7\xb0\x75\xc0\x43\xb5\xbc\x8f\x67\xcf\x55\x1d\x05\xb0\xbf\xe4\xae\xd4\x5e\x78\x63\xf0\x5e\x19\x35\x08\x1b\x87\xd7\x34\x92\x3e\x87\xc2\xb8\xa4\x21\xae\x36\xd1\xee\xbc\x46\x49\x2a\x25\x93\x0d\x9a\x7c\xe2\xae\x3f\x27\xc4\x34\xeb\x75\xc9\x86\x32\x6a\x89\x0f\x4c\xfc\x56\xf9\x5e\x32\x69\xc0\xeb\x56\xd2\x6c\x5e\xb7\x2a\x2b\xda\x90\xcd\xee\xc1\x9a\x55\x6d\xe6\x9e\x2e\xf9\x7b\x43\x12\x08\xec\xc4\x7f\xa2\x14\xcb\xce\x75\x12\x79\x86\x46\x56\x0a\x28\x17\x55\x7f\xef\x4f\x8c\x53\xcd\x21\x25\x19\xdc\x01\x76\x8f\x97\x96\xa6\xf5\xc8\x99\xe9\xf1\xd6\x96\x94\xc2\x89\x11\xea\xa5\xa5\x13\xd6\xb1\x77\x0b\x1c\x0e\x2c\x8a\xc3\xb4\x1d\x1c\x09\x8f\x1f\x75\x8f\x79\xc1\xac\x6c\x11\xc0\xef\xf3\x9e\xd8\x62\x2d\x0a\x8e\x70\xa8\xb0\xaa\x16\xbb\x26\xc0\x55\x04\x6c\x01\x7f\xb0\xa0\xe2\x73\x42\x9a\x28\x1c\x88\x34\x35\x49\xcd\x3a\x3f\x95\xc5\x74\x2a\x31\xff\x1b\x25\xd5\x9e\x92\xba\x28\x08\x55\x74\xe1\x04\x34\x97\x51\x17\x7b\x90\xba\x44\x0d\x48\xb1\xf5\x48\xc9\xfb\x79\x7a\x2e\x09\x53\x99\x87\x0a\x73\xaa\x8a\x24\xd9\x03\xef\x59\x30\x5a\x59\x08\x37\x68\xf9\x1f\x58\xb0\xdb\xb1\x5c\x40\x58\x90\x56\x40\xb8\xe6\x50\x80\x24\xc0\x1e\xd8\x40\xdd\x63\xd3\x2c\xf4\xc0\x3a\x70\x96\x90\xb6\xcc\xf5\x18\xec\x50\x2e\x53\x36\x96\x12\xe1\x90\x56\xa5\x13\xdd\xe5\xa4\x90\xdd\x55\xb9\xb3\xeb\xd0\x6a\xb1\xdb\x5e\x4f\xd1\x97\xec\xb2\x87\x1f\x74\x1a\xc0\xc1\xde\x0c\x75\x5c\xbc\xd5\x64\x32\xec\x0b\xb6\x88\xf9\x09\x7f\x44\x86\x9b\x70\x5c\x1e\xd8\x2a\x31\x75\xab\xe6\xa5\x18\x80\x17\xa9\xc2\xf1\xc8\xee\x17\xb6\x7d\x66\x22\x3f\x74\x0b\x15\x63\x90\xd0\x45\x20\x45\xaa\xf2\x1a\xc0\x42\x78\x0f\xd0\x2b\x5e\x41\x20\x84\xce\xca\x74\xd3\x1c\xd2\x6d\x55\xdf\x76\x8a\x5f\x67\x4d\x31\x2d\x3b\x3d\x47\x06\x01\x8b\x9d\x87\xc5\xaa\xaa\x1e\xca\x9f\x12\x4b\x89\x19\x1f\xc9\x69\x94\x43\x29\xa7\xe2\x98\x19\xa8\xf7\xe5\x0c\xd9\xe9\x29\xb2\x67\x61\xbd\x96\xac\x55\xe0\x0f\x66\xf6\xab\x6e\xa1\x9b\x92\xc5\x73\xb0\xc3\x57\xca\x85\x08\x3f\x4d\xd3\xa9\xe5\xd2\xb3\x1f\xce\x83\x99\x43\xa1\x74\xb5\x1c\x84\x2e\xa6\x0c\xc6\xbc\x1c\x04\xc5\xca\x25\x09\x4b\x3a\x1e\xec\xed\xac\xda\x49\xa4\xce\x47\x2d\x15\x87\xbf\xd3\x4a\x50\xbc\x20\x3d\x7b\x34\x99\xd0\xdf\xf0\x8e\x70\x29\xd3\x37\x3e\x6a\x85\x27\x26\x2e\x08\x42\x70\xd8\x47\x83\x1d\x53\x96\x36\x60\xa6\xf3\x2f\x10\x98\x91\x4f\xe8\x86\x11\xde\xec\x58\x4b\xb3\x8d\x84\xc2\x33\x75\x02\xb8\x72\xc6\x6c\x50\xfe\x0e\x0e\xb3\xb1\xad\x22\xd2\xb3\xb4\x85\xa3\xd2\xf4\x68\x4c\x93\xbd\x63\xf5\x0e\x34\xb7\x70\x3a\x46\xf0\x0b\xa1\xfe\x1c\x76\x65\xf1\xa9\x0d\x9d\xc8\x93\xdc\x15\x1c\x72\xd2\x04\x21\x00\xea\x4a\xe7\xb5\x94\x53\xe1\x46\x6c\x4e\x97\xf8\x22\x07\xa0\x21\x46\xb1\x36\x5a\x9a\x07\x3c\x64\x6c\xfb\x96\x16\x9d\x0e\xde\x91\x1d\x6b\xc2\xd2\x22\xf6\x05\xee\xd5\xc0\x9d\xeb\xb9\x16\xe9\x9f\xda\x16\xf3\x7f\xa4\x2c\xc7\xdb\x3e\x4b\xb6\x8d\x59\xa7\xca\xac\x5d\xa9\xb0\xec\x84\xc6\x80\x3d\x50\x3a\xe3\x46\x01\x4c\xc4\x43\x04\x58\x08\x62\x76\x54\xcb\xce\x22\x2b\x31\xec\xbd\xff\xdf\x2c\xc3\x51\x87\xce\x32\xec\x87\x3a\x22\x1b\x1e\xe3\xe8\xc4\x99\x10\x10\x15\xe0\xfc\xd5\xa5\x0f\x4e\x55\x5d\x7c\x77\xb8\x72\x37\x22\xd3\x33\x9a\x28\x0b\x47\xb0\x12\x01\x38\x2c\x0b\x78\x08\xd9\x40\xd8\x8f\x08\xf8\xdd\xc4\x88\x19\xf3\xd7\x53\x68\x30\x84\x15\x81\x65\x79\x80\x0f\x34\x91\xfe\x54\x23\xda\x31\x22\xc4\x69\xeb\xa2\x58\xee\xc5\x5f\xe9\x45\xa2\x13\x55\x1b\x36\xd5\x7a\x43\xf3\xaa\x76\xec\xb0\x04\xd7\x36\xaf\x98\xd7\xea\xf8\x17\x6d\xbc\x66\x5d\xb3\x05\x88\x7b\x10\x65\xdc\x71\xdb\x67\x5d\xdf\x36\xf5\xfa\xc5\x79\xc3\xea\x16\xdb\x51\xf8\xa8\xf8\xe9\xd9\x53\xcd\x27\x96\xc1\x6b\xc8\xd1\x92\xaf\xaa\xfe\xf5\xb0\x7c\xdc\xa5\x6b\x92\x0d\x70\x80\x3c\xcb\xd3\x4d\x5b\xde\x3c\xff\xfa\x51\xf7\xf5\x0b\xf5\x52\x4b\x4c\xd1\xa1\x76\x68\x79\xf6\x34\x7f\xc1\xd2\x73\xd7\x6c\x49\xa8\x8d\xab\x34\xbb\x9d\xac\x2f\xb1\xbf\x9d\x40\x62\xfc\x70\x6c\x97\x35\x30\x57\xb6\x8a\x1f\x6a\x70\xe1\x68\xdd\xaf\x8f\x2e\x5b\xc2\xf6\x05\x3d\x48\xe9\xa7\x1c\xf7\x9c\x67\x46\x05\x39\xbd\x28\x65\xeb\x1b\x10\x11\x33\x36\x6d\x27\x30\x61\x30\xc1\x7c\x65\x7b\x4e\x3a\x0c\x76\x1c\x44\x86\x53\x86\x61\x11\x16\x8a\xae\x5a\x36\xde\xaa\x5a\x8b\x02\x3a\x1b\x02\x11\xf6\x5d\xa3\x4e\x84\xd4\x32\x3d\x41\x9a\x48\xa7\xe4\x78\xea\xa9\x69\x2c\xe4\xa9\x37\xed\x28\x45\x06\x84\xa8\xad\xba\x30\x09\x51\xc0\x4b\x88\x52\xcb\xaa\x2e\x84\xf0\x94\x6e\x34\xee\xc0\x11\x0c\x1d\x47\x35\x03\xc1\xc6\xc6\x09\xfd\x1d\x60\xee\x2a\x6a\x3f\x38\x92\x68\xbf\x0f\x75\xb0\xdf\x84\xa0\xb3\xbe\x11\x5b\x93\x4e\xf2\x3d\x49\xec\x88\x39\x3a\x95\x06\xaf\xb9\xb8\xd3\xb8\x37\x75\x4a\x5a\x95\x57\x9a\x89\xd5\x02\x60\x82\xa2\xce\x21\x02\xbf\xbc\xf2\x66\xad\xa8\xbf\x58\xa3\x89\xb0\x30\x44\xbc\xb6\xc3\x36\xe2\x3f\x4e\x4f\xdf\xbf\x59\x24\xae\x3f\x6b\xf3\x97\x9c\xa4\x0e\x19\xc1\xc1\xe9\x8d\xcc\x50\xc6\x3b\xd4\x79\x2b\xa4\xba\x99\xa9\x50\x13\xb4\xe8\xe6\x34\x99\x8f\xcc\x25\x2e\x17\x14\x97\x5d\xa0\x4b\x4b\x6f\x18\xc9\x98\xb7\xb9\x99\x7e\x45\x88\x75\x16\x1d\xe6\xa9\xfb\x7b\xe6\x16\x41\xa4\x48\x2e\x08\x3a\x60\xbf\x8f\x42\x54\x08\x12\xfa\x64\xca\x12\x62\xeb\x48\xdf\x06\xac\xc4\x1f\xe6\x06\x94\x00\x32\xdc\xdb\x7a\x46\xe3\xf5\x47\x45\x38\x68\x51\x73\x63\xa9\xe5\xab\x54\x18\x91\xf8\x3f\x79\x5c\x22\xdb\x28\x8e\x43\xe5\x86\xda\x3c\x94\x5b\x8e\x64\xd3\x01\x79\x27\xa0\xaa\x32\x91\x0b\x50\x81\x9c\xf3\x8f\x23\x07\xdd\x59\x2c\x6b\x1b\xda\x17\xac\x31\x82\x20\x02\x86\xd7\x4f\x74\x10\x63\x98\x67\xa7\xef\xde\x5d\x5e\x7b\x3e\xc9\x94\x55\x17\xc4\xcd\xbf\x72\xf1\x2f\x93\x71\x59\x14\x0c\xc6\x87\x80\xa8\x08\xc2\xc7\xe1\x68\x8d\x63\x70\xe1\xc6\xb7\xd6\x29\xb9\x6e\xb0\x9b\x1b\x1e\x8b\xd4\x28\xe2\xf1\x17\xc7\x44\xfc\xe4\x13\x1f\x30\x9f\x13\xb3\xd2\x5d\xf2\xff\x24\x34\x74\x06\xa6\x69\x50\xb3\xb7\x60\xfb\x70\x4f\x1a\x40\x53\x4c\x0c\x9f\x34\xb0\xa1\x1b\x72\xc8\x70\x84\xfb\x06\x7c\xf1\x26\x85\x77\xeb\x84\xed\x38\x4d\x0b\x1a\x64\xe4\x0e\x75\xf5\xeb\x80\x13\x92\x25\x38\x3a\xf1\x39\xac\x6a\x59\x6d\x85\x79\xfe\xd9\xfd\x90\x7c\x4e\x8d\x62\x21\x83\xce\xe9\xd7\xb3\x6e\xcf\x91\x62\xc4\x9b\xbb\xe7\x5f\x93\xc8\x4d\x1a\x0b\xfe\x3e\x61\xfb\x80\xa6\xf2\xa2\x1a\xe8\x28\x22\x01\x8c\xdd\xc6\xb4\x9e\x54\xe5\x05\xeb\xfa\xb7\x66\x42\x1a\x87\xad\xa3\xcc\x22\x1b\xb9\x0c\xe1\x8d\xc8\x9d\x19\x96\x8a\xab\x62\x03\xe8\xc5\x78\x94\x06\xd3\x62\x76\xcd\xe4\x7e\x5b\x86\xa8\x53\x17\x81\x2e\xf4\x39\xfd\x6b\x2b\x84\x67\x4a\x3e\xdf\x21\x48\x83\xfb\x03\x2e\xd3\xf7\x7b\x45\x04\xb0\x62\x1d\x65\xb1\xae\x7a\x12\x93\xf9\xae\x05\x94\x57\xda\x41\xc4\x25\x71\xfd\x40\x52\x96\x33\x53\xd7\x60\x51\xb1\xaa\xab\x3e\x63\xab\xfe\x4e\x42\xca\xa9\xd9\x7c\x2b\x62\x45\x8c\x79\xf1\xe0\xa6\x1f\x7e\x39\x3d\xbf\xf8\x65\xb1\x2b\x2c\xc2\x44\xf1\xa9\xa1\x25\x01\x46\x8b\xf2\x26\x1f\xb6\x66\xbd\xc2\x84\x91\x91\xfe\x8c\x0c\xbd\x8d\x40\x8a\x06\xe1\xef\x4e\xce\x48\xb9\x9f\xf0\xc6\x72\xbe\x61\x31\xf2\xdb\x23\x36\x9d\xb1\x5b\xe5\x8f\x9b\x76\xc6\x2d\x3c\x6c\xe1\x61\x9f\x7b\xc6\xf6\xba\x54\xe3\x32\x22\x6f\x64\xa2\xb7\x25\x2c\x2a\xde\x5d\x97\x90\xb0\xf8\xb0\xf4\x38\x71\x9b\xba\x91\x1f\xa7\xf1\xe5\x76\x28\x47\x44\x2e\x78\x34\x1a\xb7\x9e\x74\x59\x2e\xf4\x12\x47\xb0\x2e\x0a\xb1\x40\x38\x71\x66\x92\x35\x3b\xb2\x59\x6a\x55\x6d\xca\x41\x99\x6d\x1d\xf1\xa1\x16\xa3\xf6\x46\x32\x25\x68\x14\x11\x6a\x10\x5f\x63\x33\xa4\xf9\xcf\xf3\x30\x00\x3c\x91\x4d\x61\x3b\x4d\xb7\xc8\x8d\xdb\x6b\x08\x25\xe6\x38\xd1\x78\x93\xe1\xbe\x49\x80\xa9\x30\xba\x83\xd9\x5b\xc1\xfc\x79\x7f\x9f\xb1\x31\x04\x2c\x79\x7f\x9f\x20\x06\x82\x0e\xb4\x0c\xe7\xa5\x64\x82\x41\x6e\xab\xbd\xdc\x56\xa2\x82\xaa\x94\x40\x46\x24\x2e\xff\x2d\x11\xa4\xb8\x15\xc2\x42\xe3\x0a\x13\x17\x10\x23\xfe\x09\xfc\xaa\x67\x89\x57\x8c\xb3\xcf\xbf\xce\x96\xb4\x47\x6f\xbf\x0e\x24\x60\xbe\xec\xc4\x62\xef\x57\x24\x59\x1d\xd4\x01\xf9\x51\x52\x89\xfd\xfe\x0b\x7e\x0d\x1c\x18\x27\xde\x4e\x4e\x24\xfa\x8b\x6d\x9c\x89\xde\xb1\x61\x66\x94\xb0\xc0\xa9\x6c\x83\x84\xcd\x90\x73\xfc\x3a\xf0\x2c\x45\x78\x7f\x9e\xfe\x3b\xff\x4a\x5f\xf1\x2f\x9d\x0a\x6f\x63\xb7\x47\xb1\xc2\xa3\x8d\x1d\x46\x8a\x81\xe3\x68\xb8\xa5\xdf\xd3\x12\x5e\x12\x60\x5f\xe3\x4a\x0c\x90\x63\x92\x93\xfd\xc0\x3e\x74\x5e\x77\xeb\xed\x3d\xe5\x20\xc0\x9b\x33\xf9\x0c\x0b\x5a\x70\x06\xf0\xa8\x8d\xc4\xb1\x0a\x65\x11\x7d\x5b\x42\xde\xa2\x7f\x5a\x96\x11\x70\xd6\xe7\x30\x79\x0a\x10\x91\xdc\x7f\x4e\xaf\x29\x47\x21\xca\xb0\x28\x51\x50\x94\x8f\x6f\xf5\x60\x1b\x75\xe0\xb8\x9c\x20\x92\xdf\x96\x5d\x4f\x28\x82\xfa\xe8\x7e\x24\x3c\xc6\xaa\x97\x50\x3e\xa4\x12\x0d\x34\x15\xb3\xb6\x24\x13\x18\x0d\xdb\x9c\xc3\xb6\x3e\xe4\x07\xf9\x49\x98\xd6\x6b\x40\xaf\x25\x25\xd9\x08\x44\x16\x50\x84\x2b\x3b\x78\x9c\xeb\x4a\xc3\xef\x2d\x9d\xd8\x00\x16\xd3\x81\x58\xc9\xe8\x16\x52\xba\x1a\x95\xdf\x88\xbc\xff\x92\xa5\x7d\xcb\xcb\xc1\xbf\x52\x0b\xab\x70\xf9\x3b\xda\xfe\x62\x1f\xbb\x90\x94\x2b\x29\x24\xe2\xe7\x9c\x2f\xbc\x59\x9e\xc5\x54\x5e\xf2\x7f\x97\x4b\x04\xa3\xfb\x87\xfe\x27\x8a\x79\xce\x55\xb5\x4c\xae\x3d\xf9\xec\x4c\x78\x9c\x14\x62\x39\x26\x85\xd9\x7e\x9b\xaf\x4a\x17\xc3\x09\x20\xf0\x6d\xbe\x72\xa5\xc0\x24\xfa\xb1\xe3\x7b\x49\xe5\x8f\x68\x3b\xd3\x2f\x2b\xa1\xcd\x40\x67\xa1\x2b\x3a\xe3\x9f\x85\x15\x12\xee\x39\x2a\xd0\xc6\x10\xf5\x1f\x96\xd1\xf9\xc1\xbc\x49\x8c\x62\xef\x58\xba\xe6\xb4\x49\x1d\xa3\x1a\x8e\x9a\x42\x62\x3a\x06\x73\xb4\xe5\xdd\x91\x9a\x74\x30\x70\xec\x3a\xe4\x4a\x4d\x8e\x20\xf4\x20\xc2\xf1\x33\x2d\x59\x70\x38\xae\xdb\x10\xa7\x70\x63\x61\x53\xcc\x81\x4a\x07\x1c\xbf\xc4\x81\x79\xbe\xcb\x42\xf5\xa4\xb9\x4a\xc2\x55\x8a\x6c\x79\xaf\x75\x84\x99\x14\xec\x24\x3b\x52\x65\xc7\x9e\x30\x70\x59\xad\x72\xe1\x32\xc2\x2a\xbc\xc8\x68\x98\x20\x24\x9d\x3e\xfa\xf4\xdd\xe7\x8e\x5b\x76\x86\x88\xa7\x8f\x3e\x7d\xff\x99\x58\x31\xfe\x31\x2f\xb6\xda\xfb\xb6\xbc\xab\x9a\x01\x77\xfe\x34\xe9\x49\x0d\x91\xbf\xef\x38\xca\x57\xb3\x64\xd9\x4d\x82\xf7\x34\x17\x97\xaf\x9a\x6d\xe3\x69\x12\xbf\xc6\x00\xa2\x2a\x3c\x52\x52\xe9\xe2\x62\x90\xad\x5b\x8c\x47\x70\x82\xd4\xa3\x05\x11\xc8\xb2\xa8\xb8\x9d\x5f\xe8\x5f\x5c\x30\x72\xf8\xc4\x85\x2e\x52\x4c\x06\x88\x78\x31\xbb\xb0\x32\x6d\x45\xdd\x26\x00\x75\xba\xca\x2c\x98\x97\x64\xd1\xb9\xec\x1f\x08\x31\xea\xec\x64\x66\x55\xd5\x72\x61\x87\x9b\x65\x13\x18\x4a\xc5\x19\xa4\x8d\x1e\x77\x52\xcc\xf7\xea\xb5\x53\x19\xa4\x0f\xd2\x55\xf5\x28\xd2\x3d\x93\x80\xaf\x07\x1c\xc8\x6f\xc9\xa0\x78\x86\x7f\x04\xa5\xf3\x3c\x64\x0c\x50\xc8\x41\xcb\x89\x47\x5d\xd4\x37\x1d\xe1\x43\x99\x29\x13\xa5\x4d\x4e\xbf\x52\xfc\x1a\x0f\x81\xd9\xe9\x5c\xdf\xd6\xf2\x68\x46\x84\x90\xe5\x86\x44\x21\x09\x47\x94\x33\x3b\x38\xcb\x08\xa3\xea\x2a\x57\x2d\x58\xb1\x1a\x35\x2f\xb5\x5c\xf5\x59\xec\xd8\x36\x40\xa4\x5f\x58\x30\xa3\xd0\x84\xa5\x7e\xd2\xe7\x34\x63\x3e\x3d\xd2\x6f\xec\x9e\xda\xb7\xf1\x24\x4b\xf1\xf6\xf0\xff\xb0\xc0\x5d\xb0\xd0\xa6\x32\x21\x29\x6d\x11\x8d\x6b\x8e\xbf\x78\x70\xe2\xe2\xe4\x1e\xef\x76\x4f\x8b\xe2\xe9\x3d\x35\xfa\x78\x66\xd6\x01\x3d\xb9\x69\x8b\x0e\xe0\x08\x4b\x99\xd9\x88\xb0\x82\x96\x82\x7d\x39\x8f\x3b\x06\x88\xd6\xe9\x23\xc7\x0b\x94\xac\x70\xa4\x85\xc7\x1b\x9c\x0c\xc1\xda\x75\x0d\xe9\xfa\xcd\x9e\xd0\xee\x4c\x3b\x6c\x87\x90\x08\xaa\x70\x26\x23\xcf\x5d\x50\x34\x0a\x13\x7d\x70\x78\x86\x07\xf1\x28\x75\xac\xc6\xee\x8e\xa0\x44\xae\x78\x1e\x45\x48\xc0\x49\x3c\x52\x1d\x37\x99\x01\x1c\xf1\x12\xdf\xed\xbf\x92\x9f\xcc\xf5\x3b\xb7\xfa\x5f\xe2\x28\x73\x17\xcd\x2d\x6f\x21\xa4\x0d\x9f\xbc\xa4\x7c\x51\x70\x41\x04\xa8\x39\x0b\x7f\x7b\xb0\x4d\xd3\xdc\xca\x25\x99\x25\x92\xbe\x84\xb4\x7e\x2b\xe4\x3b\xb8\xaf\xe3\xd2\xa2\xdc\x6f\x9b\x7b\x73\x80\x9c\xe3\x97\x46\x16\x18\xc8\x32\xef\xaa\x55\x78\x89\xfe\x67\xce\x98\x99\x45\xc1\x14\xd0\x66\xff\x10\x01\xe6\x1c\xbf\xd2\xff\xc9\x64\xe3\x40\xd4\xe7\x7e\x69\xf7\xa6\xae\xd8\xf3\xee\x4a\xd5\xe7\x19\x74\xa5\x2e\xda\x69\x5f\xea\x3e\x64\xfd\x60\xde\x30\xe5\x7c\xe7\xc7\xaa\x18\xf5\x8c\x55\x7a\xb6\xa9\x3a\x1f\xe3\xc4\x8d\x3e\xe7\x3e\x8f\xa3\xfc\x1e\xa0\x25\x37\x14\x17\x40\xc4\x8a\x8a\x26\x2f\x2d\x06\x69\x0a\xe6\xec\x7c\x3e\xee\x28\xb6\x02\xb0\x15\xbb\x16\xb7\x22\x62\x8f\x38\x46\x89\xb3\xe2\x80\x27\x22\x7d\xb9\x74\xec\x2f\x1c\x20\xfa\x19\x46\x61\xbe\x6f\x61\xfd\xe2\x3d\x06\x44\x1f\x72\x20\x57\x27\x56\x14\x8d\xa2\x12\x8f\xba\xd8\x07\x73\x77\x5f\x87\x9d\x0e\x63\xc3\x0f\xd7\x13\x69\xdb\x5d\xba\x11\x97\xbc\x0d\x15\x65\x21\x29\xc6\x01\x28\xc0\x7d\x60\x84\x18\x01\x1a\x52\x2e\x89\x7b\x89\xd3\x42\xaa\xe5\x51\x00\x97\xc4\x0a\xc2\x32\xa3\x66\xd1\x65\xbe\xba\x75\x23\x62\xe6\x58\xb6\x3d\x42\xa7\xa6\x68\x67\xd7\xed\x0a\x02\xd6\xb3\xfd\x8b\x27\x30\x2e\xc8\x1d\x6d\xcc\x42\x78\x40\x75\x13\x20\x04\xce\x17\x76\xa6\xdc\x55\xc5\x40\xe4\xcd\x8b\xb1\x78\xf6\x74\xff\x22\xae\x4f\x14\x01\x83\xd3\xd1\x36\x46\x0b\xc7\xda\x6e\x85\x0b\x1f\x1c\x9b\x88\x20\xb9\x1b\x1f\xfb\xd9\xa1\x87\xa3\xbb\x28\xe0\x56\x01\xa9\x1b\xc7\xf9\x42\xe8\xc0\x14\x27\x66\x19\xc6\x4b\x1d\xb0\x0e\x3b\x18\xf6\x36\x66\x01\x69\xc3\x03\x61\x34\x3b\xd3\x94\x78\x36\x46\x66\x35\x1f\x8a\xe7\x86\x66\x15\xda\xe3\xc3\x8b\x2d\xed\xe9\x8c\x85\xdd\x81\xb2\xcb\xce\x33\x55\xd1\x66\x8b\x02\xf3\x39\x0b\xb2\x8f\x57\x18\xb9\x0b\xa3\xb6\x62\x9f\x61\x30\x40\x39\x8d\x8e\xb5\x73\x36\xdb\x86\xfa\x45\x82\x56\x10\x71\x5b\x21\xb6\x32\xd3\x4b\x64\x12\x2d\x94\x8e\x83\x1b\xb5\xf4\xb0\x69\x82\x2b\x0c\x18\x54\x8a\xcd\x1a\x0e\x64\x11\xcf\xf5\x20\x47\x88\xe2\x45\x0f\x94\xd1\x49\x63\x9b\xcf\x8e\x1b\x84\xc3\xef\x06\xe2\x2d\xdb\x8a\x16\x1d\x47\x86\x3e\x85\x70\x79\x75\x8d\x4b\xe6\xc4\x0b\x89\xd1\xac\x99\x5e\xd3\xbf\x6c\x48\x07\xe3\x90\x53\x7e\x91\x80\x23\x01\xd6\x69\xb3\x5a\xb1\xff\xbf\xaa\xf5\x12\xe7\xa1\x34\x3f\x5b\x5d\x6c\x25\x16\x20\x8c\xa4\x30\xbe\x2b\x16\xb5\x14\xaf\x0e\x30\x13\xe8\xf6\xe5\x8a\x44\x96\x45\xfa\x96\x44\x37\xbe\xca\x2e\x8f\x1d\x80\x61\x3e\x68\x80\x73\x33\x81\x25\x8c\xd5\xbf\xc5\xf4\x0c\x75\x6f\xa2\xd8\x41\x8a\x79\xef\x39\xde\x50\xd4\x54\x2e\x20\x89\xa3\xdc\xde\x48\xec\x28\xbb\x1a\x21\xe8\xc9\x05\x7a\x76\x77\xc8\xbd\x62\xb6\x11\xa2\x01\x8d\x82\x80\xc7\x16\xd7\xad\x78\x66\xfb\xb2\x65\x89\xc5\xe2\x85\xc2\x50\x91\xf1\x98\xa0\xdf\xd9\xb8\xde\x08\x5b\xc0\xf2\x41\xac\x95\xbb\x71\x27\xcc\x8b\x59\x22\x34\x17\xb8\x59\x8d\xf7\x72\x1f\x8e\x4f\x3a\xc2\x17\xc2\xb1\x0d\x44\xce\x0f\x5c\x7a\xe1\xb8\xe4\x41\x97\xc3\xa2\xb0\x80\x50\xee\x67\x66\x44\x7a\x20\x33\x82\xc4\x47\x34\x81\xf0\xae\x78\x00\x99\x3f\x7e\xcc\xc2\x14\xdc\xcb\x01\xaf\x23\x4a\xd4\x3d\x85\x16\xc3\x6b\xc2\x42\xbe\x0f\x6c\xa3\x80\xca\xa3\x57\x6e\x30\x43\xbd\x1e\xf7\x8c\xef\x76\xbd\x60\xea\x7d\xf6\x14\x49\xbb\x12\x68\x94\xc7\x8f\x6a\x04\x14\xc7\x0f\x26\x34\x84\x3f\x1c\x7d\x6d\xb9\xce\xdb\xc2\xa2\xdb\x95\xfa\xd9\xf5\x0c\x2a\x0f\x83\x97\xf2\x2d\xc9\xeb\xda\x04\xed\x56\x02\xb9\x65\xbb\x1b\x11\x0a\x3f\x09\x63\x2a\x0a\x73\xfe\x42\xb6\x16\xc7\x85\x10\xc1\x0f\x7b\xde\x03\xb2\xa1\xac\x1f\x4c\xfb\x9b\x3f\x5d\x5d\xbe\x3b\x49\x7f\x7b\x72\x38\x1c\x9e\x70\xf5\x27\x43\xbb\xe5\x08\x8a\x82\xa3\xe7\xff\xc7\xc5\xdb\x93\xb4\xec\x57\xdf\x2e\x48\xb6\xc7\xd6\xf0\x92\xb1\xba\xc5\x6f\xd8\x5d\xcf\x64\xc9\x7a\xdf\x3f\xbf\x65\xf6\x72\x49\x4b\x1f\x30\x09\xaf\x6c\x85\x4c\x9b\x97\xdd\xcc\x4e\x4a\x05\x62\x7e\xf2\x12\x63\x49\x9a\x14\x2e\x69\x22\xe1\x0b\x80\x55\x5b\xbe\x8f\x8c\x0e\x11\x6e\x90\xdf\xb1\x5b\x71\xd8\x16\x42\xa7\xc6\xd1\x68\x76\x8a\xb2\xb2\xf8\x69\xdc\x12\xac\xd1\x78\xaf\xe1\x79\xfa\x27\x56\x03\x19\xa5\x42\x05\x5c\x64\x54\x00\xe0\x90\x96\xb0\xc3\x52\xbd\x70\x5a\x8e\x0b\xbc\x5f\xe0\xbc\xec\x11\x63\x36\x47\x1b\x32\x72\x37\x36\xbf\x9a\xb6\x51\xe9\x5c\xa3\xc6\x5a\xe1\xde\xe2\xed\x8e\xa8\x79\xb4\x07\xf8\x5c\x3a\x8c\xf7\xc1\xf8\x48\xd2\x4d\xe6\xd9\xbd\x6e\xb2\x09\xc7\x57\xc0\x2f\xed\x33\x95\x20\x26\x12\x5d\xd0\x83\x4a\x76\x93\x1e\x24\x14\x26\xd3\x59\x5a\xf0\x37\xc2\x63\xce\x5d\x5e\x7c\x04\x19\xd5\x80\x81\xc4\x24\xc3\x08\xe9\xb6\x24\xe6\x65\xe1\x0e\xe7\xc3\x2c\x0a\x3a\xba\x62\x10\x84\x1a\xb1\x3f\xd1\x7c\x6f\x93\x40\xab\x50\xcc\x90\x56\x2d\x0c\x42\xc2\x35\x46\x85\xe3\x87\x84\x46\xc5\xac\x59\xc8\x4b\x65\x67\x92\x4a\x12\x52\xb1\x6f\x16\xcb\xb6\x39\x74\x1c\xfb\x83\xe7\x56\xd8\x1b\xc1\xbf\xd3\x2b\xfc\x16\x90\x7d\xde\x0a\xcf\x94\x84\x64\x8a\xf5\x9c\x32\x25\x21\x99\xcc\x3a\x26\xcf\x5d\x9c\x53\x09\x5e\x98\xe0\xd7\x67\x38\xe8\x55\x4a\x16\x52\x85\xb6\xcb\x21\xe3\x54\xd6\xf5\x39\xfc\x05\x57\xac\xea\xa0\xd2\x15\xe7\x28\x18\x27\x0d\xa3\x16\x01\xc1\x96\x2d\x0b\x43\xc6\x39\xe7\x83\x21\xc0\x0d\x0d\x8e\xc0\x68\x69\x2a\x1c\x64\x1e\x24\x8c\xa5\x20\x08\x53\xb2\x3d\x84\x22\x08\x48\xfd\xf9\xcd\x3b\xf9\x09\x7f\x88\x06\x65\xc3\x21\xf2\x92\x3d\xd3\xe6\x65\x59\xcc\x79\x5b\xac\x4c\xbc\x56\x22\xff\xdb\x2b\x76\xf8\xe5\x20\x8a\x36\xbf\x81\xa5\x88\xff\xbb\x5c\x3a\x2c\x7d\xb5\xf7\x6d\xf9\x64\x5c\x8d\x90\x23\xa8\xbe\x42\xc2\xe5\xab\xa5\x87\xff\xb9\xbc\x9c\xad\x3a\x01\x0e\x1f\x15\x1e\x23\xe6\xb3\x21\x52\x7c\x44\x8c\xac\x62\x05\x47\x35\xbe\x51\x87\xa0\x0e\x7f\x4b\x19\xb4\x83\x17\xe1\x0c\xa2\xcf\xd7\x2e\x02\x29\x5f\x8b\x1d\xda\x97\x41\x74\xb2\x8b\x21\x51\x1d\x7f\x55\xd9\x54\x36\xef\x93\xa3\x72\xbc\xb9\xb4\x0a\x5d\x7d\x94\xc9\x3e\x3e\xc4\xf6\x77\x9b\xc5\x78\x21\x9c\x3d\x5c\x71\x96\xe2\xb7\x83\xb2\x93\x80\xc9\x25\xdb\x15\xc1\x61\x20\x04\x14\x6e\xdb\x8b\xbc\xbd\xe5\x47\x58\x60\xa1\xb7\x06\x0e\xad\x06\xf3\xf3\xff\x70\xc5\xf4\xf1\x9f\xf7\x92\x9a\x74\x18\x3b\x88\x50\x1b\x32\xa9\x89\x41\xae\x02\x9f\x5e\x72\x71\xe4\xad\xa4\xe4\xd5\xbe\x31\x65\x4c\x43\xf1\xa8\xec\xc9\x78\xdd\x02\x78\x87\xe8\xbf\x94\xff\xe7\x7f\xfd\x6f\x62\xf6\x7b\x52\x52\x7b\x84\x59\xea\x0d\x3f\xbf\xee\x16\x60\xe0\x9f\x6a\x7a\x02\xfd\x3b\x18\x88\xa0\x3f\xd5\x9b\x19\x94\x9a\xd0\x28\xbf\xe3\x62\xf4\x7d\xc5\x36\x80\x98\xc8\x21\x4d\x7a\x32\x87\x75\x72\xdc\x86\x11\x55\xa6\xfa\xbf\xbb\x61\x64\x8b\x8b\x45\x93\xb8\x7d\x25\x3a\x31\x11\xa8\xb9\x00\xe0\x72\x05\x86\x74\x96\xcf\xfe\x16\xab\x5b\x88\xe8\x06\x2b\x44\x48\x0f\x63\x08\x7b\xc5\xe4\x37\x7d\xb4\x4e\x44\x72\xb9\x32\xcf\xac\xc5\xc5\x15\xc9\xbd\x30\x89\x1a\x76\x8d\x84\x1d\x3d\xee\x2c\x74\x58\x5f\x53\x40\x70\xee\x4c\xfc\x76\x18\x93\x4c\x12\xb9\x9a\x84\xe5\xbe\x9b\x1a\xc3\xa3\x37\x2c\xe1\x22\x37\xfd\xda\x8e\xd9\x22\x51\x2b\x2d\xbb\x6d\x39\xc1\x57\x12\xf9\x65\x40\x26\x3f\xb1\xa0\xbd\x41\x06\xed\x6b\x64\xe0\xb2\x2e\x1c\xd3\xfc\x3f\xc1\x25\x27\x55\x02\x39\x57\x53\x9a\x3f\xba\x48\xd5\x46\x4f\xce\x78\xe7\x3d\x2e\x58\x46\x6f\xbc\x70\xe3\x40\xd4\x8c\x81\x7e\x72\xed\x16\x2b\x83\xdc\x87\xa0\xa3\x10\xa8\xc7\x5b\x58\x45\x34\x4a\x9f\xdb\x22\x2e\xa7\x5e\x3c\x25\x19\x5c\xfa\xe4\xb7\x15\x6a\x7e\x2d\xc9\xb0\xec\xba\x09\xb6\xcc\x46\xac\xf7\xbe\x1a\xaf\x17\x69\xb5\x43\xff\x93\xc0\xb3\x73\xbc\xea\xba\xc0\x56\x8c\x3a\x3e\x3b\xdd\x92\x00\xb6\x8d\x84\x45\x34\xc4\xd6\xb1\x9f\x8e\x44\x11\x4d\xaf\x57\xff\xf1\x38\xa2\x69\x1b\x0f\x47\x12\xfd\xb3\xd6\xe3\xf9\xcb\x4f\xae\x78\x7a\x0b\xca\x15\xcd\x5d\x87\xfa\x0f\x18\x6a\x89\xa4\x74\x18\x93\xbd\x7d\xd4\x52\xab\x75\x9c\xa1\xef\xf8\xb5\xf6\x3f\x6e\xaf\x8d\xae\x03\xff\x0e\x8b\x6d\x3c\xe3\x40\x0c\x8e\x46\xe5\x10\xc2\x06\x81\x38\xc8\xf5\x98\x74\xec\xa5\xe2\x88\x67\x8c\x65\xe8\x49\x4c\x2b\x66\xfa\x60\x95\x38\xc2\x35\x1c\xa6\x53\xff\x7d\x4c\xa8\x69\xc9\x12\xdb\x2a\xe6\x92\x2f\x07\xb8\x1e\xb1\xbf\x3d\x14\xe9\x3a\x1e\x25\xf3\x1a\xf7\xf0\x64\x38\xc8\x07\x6b\x84\xc7\x6c\x6c\xe3\xfe\x8f\x44\xbf\xce\xdb\xb8\x58\x71\x38\x98\xaa\x8b\x43\xd9\xf0\xe7\x15\x36\xf6\xc1\x19\xbe\xc4\xbd\xe4\x19\xae\xc7\xdc\x80\xf7\x24\xfb\xf1\xa0\x39\x36\x5e\xb8\xf7\x42\xef\x46\xda\xcd\xca\x51\xbe\x67\x7d\xb8\xd8\xb1\x97\x50\x55\x0f\x24\xbf\x21\xee\xcc\x96\x8c\xeb\xc7\x7d\xc4\x31\xbf\x96\xeb\xcc\x8c\x17\x48\xb8\x7c\xc2\xda\xaa\x44\x08\xe6\x99\xa4\x5c\x89\x3a\xde\xf4\x8a\xbf\x1f\x84\x5c\xdf\x7e\x0e\x4b\x93\xcf\xd5\x53\x4f\x71\xcd\x51\x6c\xb4\x28\xf7\x7b\x5e\xc2\xdc\xdd\x67\xe4\x65\x12\x40\x15\x37\x75\x54\x90\x90\x7f\x1c\xb7\x25\x0f\x61\xe9\xe9\xf9\xae\x39\x24\x72\x74\x2e\xf8\xc6\x71\x2a\xd7\x8d\x35\x27\x1e\x92\xe4\xb1\x8c\xa2\x97\x14\x30\x07\x12\xd3\xe5\x4e\xc2\xb4\x7c\x14\x96\x89\x93\xc3\x05\x64\xda\xeb\x01\x2c\x80\x42\x6a\x40\x24\x1d\xcb\xf5\x21\x71\x2c\xb4\x55\x08\xb0\xbe\x5b\x91\x44\xa3\x7e\x43\x88\xdf\xd3\x31\x8f\x73\xd2\xdd\x89\xd9\x0f\x70\x99\x8c\xa3\xed\x84\x1f\xee\x6c\x1c\xf2\x56\x9f\x1b\x87\x7b\x08\xd2\x8f\x23\x84\xf8\x3d\xe3\xe0\x5e\x9e\xf2\xdb\xd9\x58\xc4\x87\xc6\x43\xca\xa1\xde\x8d\x0b\xad\xd3\xdd\x78\x88\x3e\xae\xf1\x3a\x38\xaf\xe1\xe1\x29\x46\xf2\x07\x9b\x8f\xa6\x07\xa7\x94\x88\xa3\x61\x46\x44\x10\x47\xdc\xec\x05\x8f\x2f\x6f\x71\x5e\x69\xd4\x74\xa0\x81\x8b\xcd\x83\xcd\x9d\x42\x3a\x2e\x2f\xd2\x41\xc6\xba\x50\xb9\x4e\x0a\xbf\x7c\xf0\x0a\x9c\x5d\xcd\x10\xf9\x2e\x3c\x32\x20\xe0\xd9\x4a\x16\xf2\x94\x8a\xdb\xe3\xcc\xea\x82\x5e\xa7\x8d\x39\x56\x0d\x28\xc7\xa2\xa7\x70\xc6\x3b\x43\xe9\x2c\x30\x66\x31\x53\x3e\x31\x99\x55\xbc\x59\x06\xb5\xcb\xef\x23\x07\x1b\x5f\x49\x61\x8d\x2c\xda\x35\xc7\x4f\xec\xe9\x50\xfc\x59\x2d\xef\x93\x38\x82\x39\xea\xae\x5f\x84\x5b\x7d\x4a\x20\x9e\xec\xd6\x6d\xce\xb6\x46\x5b\x6b\x66\x16\x01\x29\xa0\xc1\x1f\xdd\x2c\xdd\x4b\xb1\x9e\x1b\xc0\x83\x41\x0d\x3d\x7e\x88\x29\xfc\x81\x01\x80\x6d\x3c\x3c\x02\xb0\x05\x79\x65\x85\x86\x11\xb0\x80\x87\x06\xa2\x4f\xbc\xfe\xfe\x81\x80\x6f\xfc\xce\x81\x9c\xd8\x28\xf4\x6e\x7f\x51\xcc\xee\xff\x87\xc6\x37\x52\x77\x40\x9c\xd1\xe3\x11\x23\x82\x8f\x9e\xdb\x77\x44\x1f\xf8\x9a\xad\x59\x38\x18\xd4\xf7\xad\xc7\x99\x6f\xaa\xa6\x25\x84\x2a\x5b\xf7\xa1\x7f\x3c\x8e\x39\x67\x8f\x6d\xdf\xde\xab\x48\xc2\x93\x8b\x43\xde\xfd\x1d\x59\x51\xc2\xe0\x2b\x92\x07\x45\x3e\x01\xed\x9f\x8f\x7c\x37\x43\x9e\x1f\x16\xf7\x5f\x17\x7d\xc3\x61\xfa\xb6\xc3\x83\xef\x6a\xc4\xef\x89\x8c\x1f\x96\xe9\xe4\x16\xd3\xda\x64\x39\x7b\xe1\x35\xf1\xce\xf1\xab\x7b\xc2\xc1\x0e\x8f\x5a\xaf\xf8\x4a\x75\x53\x57\xe2\x57\xbd\x90\x14\xdf\xaa\x67\x53\x8c\xda\x61\xf8\x72\x9d\x8f\x9a\xf4\xb3\x83\x71\x91\x6d\x4c\x2a\x08\x48\x3a\x28\x0f\xde\x79\x40\xb4\x5b\x6b\x2f\x57\xf8\x16\x30\x12\x98\x30\x87\x60\x64\x3a\x0e\x34\x3a\x74\x73\x3d\x66\xec\x08\x49\xd5\x0d\xe4\x1e\xe3\x67\x26\xc1\x97\x99\x0b\xbe\xcc\x2c\xef\x3d\x9f\x04\x19\x11\xce\xc3\x82\xbd\x7b\xd1\x2a\xca\x8e\x0f\x3e\x9f\x8f\xf8\xfe\x38\x8b\x83\xfa\xa3\x8c\x7c\x35\xe9\x45\x36\x55\x5c\x4f\xc2\x99\xc2\x1c\x36\x26\xb2\x43\x24\x6a\x3d\xbe\x0b\x1a\x16\xc9\x13\x29\x51\x96\xbe\x29\x1b\xcf\x44\x6c\xaa\x61\xde\xb6\x59\xf3\xf3\x2e\x30\x42\xc6\xd3\x53\xd9\x39\x6e\xd3\xa2\xaa\xa2\x26\x10\xe8\x1a\xe6\xc0\x6f\xd0\xe7\x5d\x5c\x1b\x5b\x30\xcc\xd0\xbb\x81\x13\x40\xd2\xa9\xf3\xd5\x06\xf3\x5f\xcc\x11\x92\xa9\xc6\x8e\x98\xf4\x6b\x12\x33\x90\xf2\xee\x6f\x6a\xaf\xfc\xce\xc2\xf0\xe7\x04\xf0\xa8\x72\x50\xca\x01\x8a\x75\xa6\xd7\x65\x1b\xbd\x0c\xc4\xd1\x8a\xee\x6a\x6c\x7a\x89\x1d\xd7\x3d\x58\x29\x38\xc5\x38\xf2\x5a\xaf\xe3\x6a\x4d\x91\x38\x1e\x38\xce\x7c\xcb\x7a\x30\xaa\x67\x38\xf7\xba\x5a\xe7\xe5\x04\x96\x6e\xcc\x75\xec\x88\xe4\x77\xb5\x31\x1a\xa5\x87\x70\xcd\xfc\xf1\xa1\xc2\x7a\xc6\x37\x14\x60\x91\x8b\x06\x19\xb1\x35\x03\xf9\x42\x0b\xa3\x21\xce\x36\xf1\x07\x06\xc9\x0f\x91\xaf\x57\xee\xe1\xe6\x73\xbe\xb5\xdf\x2e\xf9\x2e\x04\x9f\x61\xa5\x3c\xa8\xdf\xd4\xb1\x05\x6e\xbe\xfa\x43\x23\xc3\x80\x58\xe7\x9e\x6b\xfe\xd8\xd8\xda\xb2\xbb\xaf\x57\x19\x5e\xd1\xee\x36\x1a\xe2\xf7\xa1\x14\x5b\xf9\xe3\x05\xe5\x3d\xcd\xf5\x42\x5a\x89\x8b\xf0\xdd\x63\x79\xd6\xe4\x9b\x15\xe5\xe3\x15\x6f\x3a\xe2\x9e\x80\x27\xa2\xb6\x09\x70\x24\x9e\xf5\xdf\x3e\xd8\xd1\x68\x2e\x01\x43\x0c\x70\xdb\x62\x28\x7d\xf9\xbb\x66\x10\x38\x21\xc3\x69\x30\x19\xe8\xee\x07\xaf\x08\xdf\xef\x62\xc4\x7d\xc3\x77\xf0\xf8\x1d\x06\x7e\x1c\x55\xc3\x29\xf4\x40\xb3\x57\xd2\xd5\x78\x74\x64\x42\x61\xbf\x0f\xac\xd0\xe3\x68\x14\x5f\x9e\x63\x78\x08\xc9\xf7\x1f\x86\x3d\x3e\xc2\xe3\x3e\xfc\xf0\x11\xbf\x43\xa6\x20\x4f\xaa\x64\xeb\xa6\x6d\x68\x79\x60\x22\xb6\x67\x56\x5e\x59\x5e\x37\x53\x01\x26\xf0\xfb\x6c\xd0\x2b\x3a\x56\xe7\x02\xd9\x24\x3f\xf0\x7d\x1d\x5f\xab\x6f\xfa\x7c\x6b\x75\xd8\x02\xb9\x52\xbb\xf5\x35\x17\x58\xad\x53\x2b\x08\x6a\x6a\x9d\x66\xc9\xf1\x74\xa8\xa2\xc0\x97\x9a\x13\xc0\xc2\xcd\xc1\x97\x64\x08\x5d\xc3\x3e\xe3\xa9\xe2\x7e\x85\x64\xa7\x6f\x91\x9d\x5e\x73\xf6\xb4\x07\x1b\x95\xab\x36\x1a\xd4\xb1\x7a\x37\x6d\x39\xa9\xf3\x92\xef\x8b\x8d\xe1\x0d\x73\x9b\x32\xdf\x4f\xf0\xf6\x9a\x32\x27\x58\x03\xe4\x14\x01\x80\x3d\x8e\x85\xb0\x56\x55\x40\xb1\x0a\x6b\xbc\xa1\xac\x63\xd0\x78\x65\x6e\x0c\x8f\xcf\xe3\x1c\xa9\xa1\x67\xf6\x78\x54\xea\xb3\x99\x8c\xaa\x59\xfe\x1d\x1f\x93\x51\xe8\x4b\xf9\x19\x40\x2d\x9b\xa6\xe7\x37\xbb\xf7\x2c\x6e\xad\x6e\x1d\x9a\x7e\xb6\x7c\x16\xb7\x56\xb7\x13\x4c\x09\xf4\x14\x55\x02\x7d\x1c\x57\x3b\xbe\xac\x4a\x7d\xb5\xc3\xaa\x1f\x68\x83\xba\x0e\x2f\xae\xf8\xe2\xeb\x95\x2b\x98\xf4\x38\xa9\x19\x52\xe8\xb8\xf2\x5c\xcf\x2b\x12\x22\xca\xd9\xae\xcf\xb8\xe4\xc1\xbe\x27\x75\xc3\xce\x27\xd5\xe7\x76\x0a\x5e\x11\x63\xa3\xf3\x72\x58\xdd\x96\x3d\xc7\xe4\x6e\x32\x78\x98\xc3\xb6\xde\x1b\x58\xfa\x33\xc0\xd2\xd7\x04\x96\x5e\xcb\x17\x61\xa6\xad\xd2\xa1\xb3\x2b\xfb\x1c\x91\x02\x41\x2b\xaf\xce\x68\x05\x38\xbb\xc8\xe7\x6a\xc1\x3a\x93\xa9\x94\xad\xbb\x90\x05\x9f\xa0\x05\xfd\x56\x8d\x08\xde\xa7\x0e\x64\xae\x35\x56\x03\xe4\xf4\x5b\xdd\xaf\xe4\x89\x2c\x56\x0c\x68\x0c\x1f\x24\x27\x80\xc5\xb3\x2a\x04\x6b\x3c\x12\x4e\x71\xbc\xaf\x42\xe0\xd7\x31\xa3\x14\x0e\xe6\x81\x85\x71\x11\xdc\xfb\x7c\xe8\x66\x01\xf7\xb9\x6c\xa6\xa3\x90\xd6\xbd\x01\x5a\xcf\x63\x38\xed\xb4\x13\x54\x0a\x5b\x11\x4d\x4d\x62\x37\xf5\x0d\x14\xfb\x5a\x1d\x42\x37\xed\x05\x14\x7c\xb3\x4e\x60\xbf\xf8\x09\x06\x05\x13\xe9\x15\x32\xab\xe4\x98\xbc\x85\x07\x42\x2d\x6d\x65\xb0\x44\xa9\x4d\x4f\xf3\xa2\xef\x41\x68\x9e\xdd\x5c\x71\xf7\xef\x34\x3f\xbc\x48\xa6\x2d\x42\x30\xb5\x90\x95\xf8\xa9\x6d\x8d\x5c\x11\x40\xb9\xf4\x2d\x9e\xa4\x6d\x58\x19\x4a\x83\xfb\x58\x59\xd4\xc0\x5b\xe8\x13\xc1\xdc\x8e\x3e\xb6\x67\xaf\x64\xfc\xce\xf7\xf6\xfc\x6c\x02\x1c\xc3\xd1\x1d\x63\xb7\xea\xb2\x10\x9d\xe3\x47\x36\xf2\x11\x7a\x19\x5c\x31\x1c\x81\xc2\xf3\x1d\x7e\x5c\x22\x70\x3f\x1a\xca\xe1\xe8\xc3\x47\x6d\x34\x50\x6a\xd2\x42\x50\x27\xf8\x12\x10\x87\x9b\xca\x75\x8f\x39\x14\x79\xeb\xa0\x61\xc8\xbd\x5b\x08\xe8\x07\x5d\x4b\x31\x2e\xe6\x9f\x53\xfd\x7f\xf2\xa2\x6c\x38\x00\xff\xae\xec\x91\xfe\xff\x25\xef\xca\x8e\x2d\xb3\xee\x61\x59\x3c\x9c\xb9\x40\xf0\x75\xbc\x8f\x23\xc7\x55\xb4\x9f\x51\x23\xdc\xa7\xc8\x88\x5d\xf9\xc8\xf2\x66\x5f\xb3\xf8\x8a\xd5\x06\x5b\x74\xdc\x5f\x10\x2f\x1f\xf5\x26\x35\xa6\x8f\xb7\xc4\x43\x90\x9c\xa9\xb7\x48\xf2\xd5\x1a\x91\xea\x7b\x03\xa5\x5a\x8f\x16\x30\x49\xa8\x8b\xc6\xf2\x26\x1f\xbd\xe4\x4d\xad\x5b\x7b\x34\xe4\x78\x73\x47\xa3\x96\x4a\x72\xcf\xd2\x42\xf1\x67\x99\x89\x02\x06\x53\x91\x9c\xf0\xde\xb2\xe4\xc8\x43\x8a\x78\x97\x5c\x52\x9a\x3f\x8d\xc2\x08\x46\xac\xcd\xc4\x5d\x07\x8d\x02\x68\x96\x57\x05\x63\x19\xc7\xff\x49\x6e\xf8\x8d\x4b\xc9\xd1\xcf\x05\xe2\x4b\x81\x92\xb3\x44\xfc\x10\xa2\xdc\xd8\xf8\x74\xfe\xce\xba\xed\xfb\xb6\x5a\x0e\xfd\xfc\x13\xa1\xae\x74\x02\x6d\x6e\x7f\xa6\xdd\xf4\x0b\xb0\xdd\x60\x0d\x5f\x0d\x5f\x6a\x77\xf4\xf1\x87\x11\x9c\xdc\xce\x4e\xdd\xb3\x02\x2f\xf1\x5b\x0b\x77\xcc\x23\xb3\x8e\xbf\x4a\x7b\x41\x2c\xa6\x48\xaf\x4e\xb5\x04\x1f\x05\x54\xeb\x08\xbe\x1d\x78\x74\x15\x18\x72\xf2\x91\x41\x5f\xa4\x78\x45\x51\x80\x5c\x7d\x6a\xb4\x97\x57\x20\xe5\x99\xcd\xeb\xb7\x57\x94\x5c\xb5\xf7\xe2\x30\xd2\x75\x61\x8f\x81\x7e\x8a\xcf\xde\x5e\x3f\xbd\x70\x1f\x3b\x0c\x56\x5a\x9b\xe4\x0f\xa9\x65\xc1\x37\x82\xb5\x71\x1a\x7f\xa3\x9f\x09\x52\x83\xa9\xd2\x2a\x3f\x54\xcd\x17\x62\xf7\x9d\xb5\x13\x5c\x04\x1d\x91\xbd\x3e\x49\xaa\x2b\x30\x39\x8c\x62\xcb\x2d\x0e\x1a\x77\x28\x85\xf4\x1e\x9e\x95\x51\x07\xbf\xf3\x01\xd1\xb0\xad\xe0\x50\x79\x60\xac\xb3\x77\xb9\xe2\xd7\x6f\x42\xc0\x4c\xf6\x9f\xbd\x7a\x15\x35\xec\x9c\x4c\xd3\x0a\xd1\xf3\x57\x51\xa5\xf9\x30\x80\x87\x1e\xbe\x12\xa3\x80\x29\xe3\xce\xe6\xad\xca\x78\x6c\xfa\x56\xd8\x87\xbe\xb3\x1a\x80\xdc\x89\x6b\x2d\x80\xb0\x2f\x44\x07\x40\xf3\xdf\xf9\x54\x80\x31\x4f\xd1\xec\xd1\xe7\x1f\xa3\xef\x3e\x5a\x4d\xfb\x8c\x55\x33\x88\xb6\x8d\xcf\xcc\xe9\x1d\x8e\x0f\xc8\x64\x41\xcb\xc0\xe7\xbe\xb5\x1a\x14\x69\x47\x5c\x14\x76\x82\x13\x8a\x3f\x3c\xf7\xe0\x77\x61\x0d\xc1\x6c\x72\x5f\x65\xf2\xf4\x49\x50\x07\x06\xff\x15\xc2\x78\xa7\x95\x68\xdc\xd3\x1a\x34\xee\x23\xe0\xe2\x04\x36\x7e\x7e\x85\x5f\xc2\x42\xdc\x88\x39\xb4\x4c\xa9\xc8\x26\x2c\x79\xe3\x77\xf5\x43\x1c\x14\x4b\x4f\x18\xee\x5b\x7d\xb3\xa4\xe1\xbf\x75\x1c\x76\xcb\x5f\x29\x0e\x0e\x02\x9f\x1b\x1e\x69\x3e\x37\xfc\x18\xb2\xcf\x9d\xfb\x3a\xf1\xb4\xd4\x7b\xe6\xbf\xe1\xd8\x94\xaf\xf7\xf2\xc1\xe6\xee\x6b\x7c\x92\xf2\xdb\xa0\x46\xf8\x65\xe3\x38\x77\xdc\x86\x7e\x48\x71\xd4\x84\x31\xcb\x68\xcb\x54\xab\x23\x88\x71\xdf\x53\x8b\x5e\x9a\x05\xfa\xe5\xbb\x9c\x7a\xac\x44\x1f\x52\x1d\x13\xb3\x67\xb6\x8e\x94\x43\x46\x6b\x03\xe3\x90\xf6\xe8\x0b\xa3\xfa\x55\x2b\x8d\x6d\x77\xdf\x70\xfb\x19\xd9\x7e\x84\xb3\x9f\x0f\x1d\x7f\x37\x94\x83\xce\xad\x4a\xfc\xa1\xd7\xe9\x17\x5e\x15\xcc\x9e\xbb\x86\x45\x60\xf2\x32\x36\x4c\x01\xfa\x30\xb6\x31\x06\xb9\x42\xc2\xf1\xdd\xd9\x56\xcd\xdf\x72\xcd\x04\x51\xde\xe9\x5b\xd8\xbb\xdd\xb8\xa3\x8f\x4d\x45\x95\xe4\x1b\x57\xee\x83\x36\xd3\xca\x76\x1b\xca\x2d\xa2\xdd\xee\x98\x5d\xc4\x5f\x87\x72\xa0\xc6\xe5\x2b\x54\xfc\x82\x14\xfd\x4c\xdf\xe2\xa7\x5b\x2b\xb9\xb6\x01\x6d\x58\xbe\xb0\xaf\x17\x39\xa0\x14\x53\x8e\x5b\xa5\xdb\x6a\xcf\xc7\xb2\x7e\x47\x83\x17\x87\x72\x70\x36\xff\x19\x39\x21\x92\x43\xce\x7c\x81\xdf\xf3\x03\x54\xd8\xa9\x14\x18\x97\x1b\x41\x11\x9d\x37\x01\x31\xbd\xfe\xe5\xed\xe5\x08\x72\x66\x83\x6a\xc9\xcc\x86\x8e\xbf\x32\x1c\x6e\x5f\x71\xe5\xb8\x29\xc0\x7d\x33\x3f\x03\x81\x3c\x3a\x01\xa1\x21\xef\x99\x05\xf1\xcc\x36\xa4\xd4\x56\xe4\x7b\xd9\x31\x4a\x67\xf2\x3b\x06\x0a\x9e\xd5\x13\x28\x7b\x55\x6f\xd2\x6b\x1d\xf6\x59\x8b\x1b\xc2\xf3\x03\x09\x11\x08\xf8\x81\x84\xda\xce\x0e\xcf\xa0\x49\x65\xbd\xab\x0a\x15\x1c\x05\xfe\xbd\x66\x19\xa8\x81\xf8\x96\x0d\x42\x9b\x76\xc3\x24\xc2\xad\x9c\xf4\x76\x86\x5f\xd1\xd2\xe9\x46\xe4\xfd\x22\xb0\x7e\x1b\xf2\x3b\xdb\x52\xc3\x80\xd7\x2b\x87\x18\x33\x28\xbd\x3a\xf3\x0f\x0e\xc2\xf6\x34\x9a\xcc\xb6\xba\x29\x9d\xa5\x4a\x67\xf3\x96\xf2\x22\x60\xfe\x3c\x78\x67\x17\xce\xe4\x4b\x67\xfc\x81\xe1\xd1\x24\xc2\xa6\x74\x26\x93\x96\xf6\x15\xac\x87\x01\x5e\x24\x63\x1e\xe3\x06\xad\x7c\x3b\x00\x57\xc6\x3d\x66\xb7\xf6\xad\x8f\x60\x87\xf8\x87\xf7\xfd\xf9\xec\x7a\xe7\x73\x79\xb6\x67\x86\xd2\x93\x8b\x61\x70\x72\x59\xb4\xc0\x62\xd5\xca\xf3\x16\xfc\xef\x9a\xfd\xb8\xae\x24\xdc\x7b\x96\xd7\x11\xed\x15\x83\x5c\xb6\xd1\xa4\x87\xf7\xd1\x05\x82\x26\x2b\x98\x79\xc7\x29\x06\x28\x7f\x2b\x57\x43\xe0\x56\xf8\x45\x7e\xab\x1d\xcf\x37\xd3\x58\x70\xe0\x50\xe3\xa5\xa9\xf7\x92\x13\xc0\xcc\x3d\x6f\x63\x43\x47\x88\xa3\x85\x3a\x1e\xed\xdf\x75\x0f\xf5\x87\xa1\x2c\xe2\xc2\xa2\x1c\xe4\x67\xb6\x95\xbb\x17\xa3\x20\x0c\x83\x0d\xa5\x90\x30\x2f\xfb\x2e\x92\xd3\x5c\xd9\xcc\xc0\xad\xa8\xc1\x37\xb0\xf7\x8b\x00\x16\xa2\x78\xf0\x06\xb4\x8c\x41\xca\xbf\x14\x62\x95\x7c\x92\x98\x86\xcf\xa3\x57\x41\xcd\xfc\x18\x84\xd1\x44\xf7\x7f\x1e\xc9\xdb\x5c\x72\x49\xca\x2a\x71\x04\x91\xbc\x2d\x16\xc0\x3e\xed\xda\xd5\xd3\x47\xe1\x8b\x5e\x6c\x11\xf2\x00\xfc\x02\x18\x17\xfe\xa0\xcf\x7d\xe9\x38\x60\xd4\xa0\x36\xff\xa6\x2f\x85\xc9\xef\xb0\x5d\x31\x7b\x48\xd3\xdd\x7f\x72\xad\xff\x2d\xd1\x60\x0b\xdf\x84\x66\xe0\x05\xf0\x3f\xd2\x90\x7b\x23\x41\xe7\x67\xbf\x47\x78\xc1\x95\x54\x46\x88\xdc\x4d\x1d\xbf\xc4\xae\xa8\xc2\xcd\x56\xbe\x89\xe3\xf1\x44\x3f\x1e\x46\x54\xd4\xd4\x04\x51\xcd\x8e\xef\x20\x66\xdf\x67\xfe\x79\x41\x5c\xc2\x93\x82\xaa\xd3\x57\x89\xe4\x99\xfb\xef\xdd\xd3\x82\xc9\xa7\xbe\x69\xb6\x9f\x93\x7c\xcd\x73\xa2\xbf\x09\xde\xee\x94\x78\x5d\xc4\xa4\x51\x32\x91\x9f\x9c\xfa\x8e\x1b\xfe\x8e\xb4\x54\x62\x20\x78\x1a\xeb\xbb\x1d\x32\xe4\x33\xab\xc8\xd8\x20\x83\x1f\x7d\xc5\xcf\x02\x3f\x8b\xfc\x1e\xbf\x0e\xf8\x75\x28\xcb\x5b\xa9\x0c\x0e\x43\xd5\x49\xeb\xdb\x20\xe7\x1e\xbf\xf9\x95\x27\x7c\xe3\x1a\xfd\xe8\x7b\x6a\xf6\x03\x0f\x72\xc9\x57\x5d\x91\x6f\x3f\x28\x5f\xbe\x58\xf0\xdc\x7f\xbc\xe0\x11\xfb\xc7\xee\x35\x0b\x29\xca\xe1\xee\x35\x4b\x92\x8f\xc0\x26\x48\x97\xd5\x06\x25\x4d\xb9\x3c\x0e\xcd\x94\x24\xe5\xb5\xf9\x21\xf3\xe3\xd2\x14\x72\xfd\xa8\x34\x95\xfc\xdf\x00\x00\x00\xff\xff\x63\x51\x91\xf6\x9b\x89\x00\x00") func confLocaleLocale_enUsIniBytes() ([]byte, error) { return bindataRead( @@ -787,7 +787,7 @@ func confLocaleLocale_enUsIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 34063, mode: os.FileMode(420), modTime: time.Unix(1438257711, 0)} + info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 35227, mode: os.FileMode(420), modTime: time.Unix(1438776441, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -847,7 +847,7 @@ func confLocaleLocale_itItIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/locale/locale_it-IT.ini", size: 36360, mode: os.FileMode(493), modTime: time.Unix(1438380590, 0)} + info := bindataFileInfo{name: "conf/locale/locale_it-IT.ini", size: 36360, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -907,7 +907,7 @@ func confLocaleLocale_nlNlIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/locale/locale_nl-NL.ini", size: 35388, mode: os.FileMode(493), modTime: time.Unix(1438236744, 0)} + info := bindataFileInfo{name: "conf/locale/locale_nl-NL.ini", size: 35388, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1007,7 +1007,7 @@ func confLocaleLocale_zhHkIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/locale/locale_zh-HK.ini", size: 33652, mode: os.FileMode(493), modTime: time.Unix(1438236704, 0)} + info := bindataFileInfo{name: "conf/locale/locale_zh-HK.ini", size: 33652, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go index c14df275..12164632 100644 --- a/modules/middleware/repo.go +++ b/modules/middleware/repo.go @@ -362,7 +362,7 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { } } -func RequireAdmin() macaron.Handler { +func RequireRepoAdmin() macaron.Handler { return func(ctx *Context) { if ctx.Repo.AccessMode < models.ACCESS_MODE_ADMIN { if !ctx.IsSigned { diff --git a/modules/setting/setting.go b/modules/setting/setting.go index c39fab43..7f9d9908 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -134,6 +134,7 @@ var ( // I18n settings. Langs, Names []string + dateLangs map[string]string // Other settings. ShowFooterBranding bool @@ -148,6 +149,14 @@ var ( HasRobotsTxt bool ) +func DateLang(lang string) string { + name, ok := dateLangs[lang] + if ok { + return name + } + return "en" +} + func init() { IsWindows = runtime.GOOS == "windows" log.NewLogger(0, "console", `{"level": 0}`) @@ -353,6 +362,7 @@ func NewConfigContext() { Langs = Cfg.Section("i18n").Key("LANGS").Strings(",") Names = Cfg.Section("i18n").Key("NAMES").Strings(",") + dateLangs = Cfg.Section("i18n.datelang").KeysHash() ShowFooterBranding = Cfg.Section("other").Key("SHOW_FOOTER_BRANDING").MustBool() diff --git a/public/css/datepicker3.css b/public/css/datepicker3.css deleted file mode 100644 index aa78b1d4..00000000 --- a/public/css/datepicker3.css +++ /dev/null @@ -1,790 +0,0 @@ -/*! - * Datepicker for Bootstrap - * - * Copyright 2012 Stefan Petre - * Improvements by Andrew Rowls - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - */ -.datepicker { - padding: 4px; - border-radius: 4px; - direction: ltr; - /*.dow { - border-top: 1px solid #ddd !important; - }*/ -} -.datepicker-inline { - width: 220px; -} -.datepicker.datepicker-rtl { - direction: rtl; -} -.datepicker.datepicker-rtl table tr td span { - float: right; -} -.datepicker-dropdown { - top: 0; - left: 0; -} -.datepicker-dropdown:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-top: 0; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; -} -.datepicker-dropdown:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #fff; - border-top: 0; - position: absolute; -} -.datepicker-dropdown.datepicker-orient-left:before { - left: 6px; -} -.datepicker-dropdown.datepicker-orient-left:after { - left: 7px; -} -.datepicker-dropdown.datepicker-orient-right:before { - right: 6px; -} -.datepicker-dropdown.datepicker-orient-right:after { - right: 7px; -} -.datepicker-dropdown.datepicker-orient-top:before { - top: -7px; -} -.datepicker-dropdown.datepicker-orient-top:after { - top: -6px; -} -.datepicker-dropdown.datepicker-orient-bottom:before { - bottom: -7px; - border-bottom: 0; - border-top: 7px solid #999; -} -.datepicker-dropdown.datepicker-orient-bottom:after { - bottom: -6px; - border-bottom: 0; - border-top: 6px solid #fff; -} -.datepicker > div { - display: none; -} -.datepicker.days div.datepicker-days { - display: block; -} -.datepicker.months div.datepicker-months { - display: block; -} -.datepicker.years div.datepicker-years { - display: block; -} -.datepicker table { - margin: 0; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.datepicker table tr td, -.datepicker table tr th { - text-align: center; - width: 30px; - height: 30px; - border-radius: 4px; - border: none; -} -.table-striped .datepicker table tr td, -.table-striped .datepicker table tr th { - background-color: transparent; -} -.datepicker table tr td.day:hover, -.datepicker table tr td.day.focused { - background: #eeeeee; - cursor: pointer; -} -.datepicker table tr td.old, -.datepicker table tr td.new { - color: #999999; -} -.datepicker table tr td.disabled, -.datepicker table tr td.disabled:hover { - background: none; - color: #999999; - cursor: default; -} -.datepicker table tr td.today, -.datepicker table tr td.today:hover, -.datepicker table tr td.today.disabled, -.datepicker table tr td.today.disabled:hover { - color: #000000; - background-color: #ffdb99; - border-color: #ffb733; -} -.datepicker table tr td.today:hover, -.datepicker table tr td.today:hover:hover, -.datepicker table tr td.today.disabled:hover, -.datepicker table tr td.today.disabled:hover:hover, -.datepicker table tr td.today:focus, -.datepicker table tr td.today:hover:focus, -.datepicker table tr td.today.disabled:focus, -.datepicker table tr td.today.disabled:hover:focus, -.datepicker table tr td.today:active, -.datepicker table tr td.today:hover:active, -.datepicker table tr td.today.disabled:active, -.datepicker table tr td.today.disabled:hover:active, -.datepicker table tr td.today.active, -.datepicker table tr td.today:hover.active, -.datepicker table tr td.today.disabled.active, -.datepicker table tr td.today.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.today, -.open .dropdown-toggle.datepicker table tr td.today:hover, -.open .dropdown-toggle.datepicker table tr td.today.disabled, -.open .dropdown-toggle.datepicker table tr td.today.disabled:hover { - color: #000000; - background-color: #ffcd70; - border-color: #f59e00; -} -.datepicker table tr td.today:active, -.datepicker table tr td.today:hover:active, -.datepicker table tr td.today.disabled:active, -.datepicker table tr td.today.disabled:hover:active, -.datepicker table tr td.today.active, -.datepicker table tr td.today:hover.active, -.datepicker table tr td.today.disabled.active, -.datepicker table tr td.today.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.today, -.open .dropdown-toggle.datepicker table tr td.today:hover, -.open .dropdown-toggle.datepicker table tr td.today.disabled, -.open .dropdown-toggle.datepicker table tr td.today.disabled:hover { - background-image: none; -} -.datepicker table tr td.today.disabled, -.datepicker table tr td.today:hover.disabled, -.datepicker table tr td.today.disabled.disabled, -.datepicker table tr td.today.disabled:hover.disabled, -.datepicker table tr td.today[disabled], -.datepicker table tr td.today:hover[disabled], -.datepicker table tr td.today.disabled[disabled], -.datepicker table tr td.today.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td.today, -fieldset[disabled] .datepicker table tr td.today:hover, -fieldset[disabled] .datepicker table tr td.today.disabled, -fieldset[disabled] .datepicker table tr td.today.disabled:hover, -.datepicker table tr td.today.disabled:hover, -.datepicker table tr td.today:hover.disabled:hover, -.datepicker table tr td.today.disabled.disabled:hover, -.datepicker table tr td.today.disabled:hover.disabled:hover, -.datepicker table tr td.today[disabled]:hover, -.datepicker table tr td.today:hover[disabled]:hover, -.datepicker table tr td.today.disabled[disabled]:hover, -.datepicker table tr td.today.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td.today:hover, -fieldset[disabled] .datepicker table tr td.today:hover:hover, -fieldset[disabled] .datepicker table tr td.today.disabled:hover, -fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover, -.datepicker table tr td.today.disabled:focus, -.datepicker table tr td.today:hover.disabled:focus, -.datepicker table tr td.today.disabled.disabled:focus, -.datepicker table tr td.today.disabled:hover.disabled:focus, -.datepicker table tr td.today[disabled]:focus, -.datepicker table tr td.today:hover[disabled]:focus, -.datepicker table tr td.today.disabled[disabled]:focus, -.datepicker table tr td.today.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td.today:focus, -fieldset[disabled] .datepicker table tr td.today:hover:focus, -fieldset[disabled] .datepicker table tr td.today.disabled:focus, -fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus, -.datepicker table tr td.today.disabled:active, -.datepicker table tr td.today:hover.disabled:active, -.datepicker table tr td.today.disabled.disabled:active, -.datepicker table tr td.today.disabled:hover.disabled:active, -.datepicker table tr td.today[disabled]:active, -.datepicker table tr td.today:hover[disabled]:active, -.datepicker table tr td.today.disabled[disabled]:active, -.datepicker table tr td.today.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td.today:active, -fieldset[disabled] .datepicker table tr td.today:hover:active, -fieldset[disabled] .datepicker table tr td.today.disabled:active, -fieldset[disabled] .datepicker table tr td.today.disabled:hover:active, -.datepicker table tr td.today.disabled.active, -.datepicker table tr td.today:hover.disabled.active, -.datepicker table tr td.today.disabled.disabled.active, -.datepicker table tr td.today.disabled:hover.disabled.active, -.datepicker table tr td.today[disabled].active, -.datepicker table tr td.today:hover[disabled].active, -.datepicker table tr td.today.disabled[disabled].active, -.datepicker table tr td.today.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td.today.active, -fieldset[disabled] .datepicker table tr td.today:hover.active, -fieldset[disabled] .datepicker table tr td.today.disabled.active, -fieldset[disabled] .datepicker table tr td.today.disabled:hover.active { - background-color: #ffdb99; - border-color: #ffb733; -} -.datepicker table tr td.today:hover:hover { - color: #000; -} -.datepicker table tr td.today.active:hover { - color: #fff; -} -.datepicker table tr td.range, -.datepicker table tr td.range:hover, -.datepicker table tr td.range.disabled, -.datepicker table tr td.range.disabled:hover { - background: #eeeeee; - border-radius: 0; -} -.datepicker table tr td.range.today, -.datepicker table tr td.range.today:hover, -.datepicker table tr td.range.today.disabled, -.datepicker table tr td.range.today.disabled:hover { - color: #000000; - background-color: #f7ca77; - border-color: #f1a417; - border-radius: 0; -} -.datepicker table tr td.range.today:hover, -.datepicker table tr td.range.today:hover:hover, -.datepicker table tr td.range.today.disabled:hover, -.datepicker table tr td.range.today.disabled:hover:hover, -.datepicker table tr td.range.today:focus, -.datepicker table tr td.range.today:hover:focus, -.datepicker table tr td.range.today.disabled:focus, -.datepicker table tr td.range.today.disabled:hover:focus, -.datepicker table tr td.range.today:active, -.datepicker table tr td.range.today:hover:active, -.datepicker table tr td.range.today.disabled:active, -.datepicker table tr td.range.today.disabled:hover:active, -.datepicker table tr td.range.today.active, -.datepicker table tr td.range.today:hover.active, -.datepicker table tr td.range.today.disabled.active, -.datepicker table tr td.range.today.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.range.today, -.open .dropdown-toggle.datepicker table tr td.range.today:hover, -.open .dropdown-toggle.datepicker table tr td.range.today.disabled, -.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover { - color: #000000; - background-color: #f4bb51; - border-color: #bf800c; -} -.datepicker table tr td.range.today:active, -.datepicker table tr td.range.today:hover:active, -.datepicker table tr td.range.today.disabled:active, -.datepicker table tr td.range.today.disabled:hover:active, -.datepicker table tr td.range.today.active, -.datepicker table tr td.range.today:hover.active, -.datepicker table tr td.range.today.disabled.active, -.datepicker table tr td.range.today.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.range.today, -.open .dropdown-toggle.datepicker table tr td.range.today:hover, -.open .dropdown-toggle.datepicker table tr td.range.today.disabled, -.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover { - background-image: none; -} -.datepicker table tr td.range.today.disabled, -.datepicker table tr td.range.today:hover.disabled, -.datepicker table tr td.range.today.disabled.disabled, -.datepicker table tr td.range.today.disabled:hover.disabled, -.datepicker table tr td.range.today[disabled], -.datepicker table tr td.range.today:hover[disabled], -.datepicker table tr td.range.today.disabled[disabled], -.datepicker table tr td.range.today.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td.range.today, -fieldset[disabled] .datepicker table tr td.range.today:hover, -fieldset[disabled] .datepicker table tr td.range.today.disabled, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover, -.datepicker table tr td.range.today.disabled:hover, -.datepicker table tr td.range.today:hover.disabled:hover, -.datepicker table tr td.range.today.disabled.disabled:hover, -.datepicker table tr td.range.today.disabled:hover.disabled:hover, -.datepicker table tr td.range.today[disabled]:hover, -.datepicker table tr td.range.today:hover[disabled]:hover, -.datepicker table tr td.range.today.disabled[disabled]:hover, -.datepicker table tr td.range.today.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td.range.today:hover, -fieldset[disabled] .datepicker table tr td.range.today:hover:hover, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover, -.datepicker table tr td.range.today.disabled:focus, -.datepicker table tr td.range.today:hover.disabled:focus, -.datepicker table tr td.range.today.disabled.disabled:focus, -.datepicker table tr td.range.today.disabled:hover.disabled:focus, -.datepicker table tr td.range.today[disabled]:focus, -.datepicker table tr td.range.today:hover[disabled]:focus, -.datepicker table tr td.range.today.disabled[disabled]:focus, -.datepicker table tr td.range.today.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td.range.today:focus, -fieldset[disabled] .datepicker table tr td.range.today:hover:focus, -fieldset[disabled] .datepicker table tr td.range.today.disabled:focus, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus, -.datepicker table tr td.range.today.disabled:active, -.datepicker table tr td.range.today:hover.disabled:active, -.datepicker table tr td.range.today.disabled.disabled:active, -.datepicker table tr td.range.today.disabled:hover.disabled:active, -.datepicker table tr td.range.today[disabled]:active, -.datepicker table tr td.range.today:hover[disabled]:active, -.datepicker table tr td.range.today.disabled[disabled]:active, -.datepicker table tr td.range.today.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td.range.today:active, -fieldset[disabled] .datepicker table tr td.range.today:hover:active, -fieldset[disabled] .datepicker table tr td.range.today.disabled:active, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active, -.datepicker table tr td.range.today.disabled.active, -.datepicker table tr td.range.today:hover.disabled.active, -.datepicker table tr td.range.today.disabled.disabled.active, -.datepicker table tr td.range.today.disabled:hover.disabled.active, -.datepicker table tr td.range.today[disabled].active, -.datepicker table tr td.range.today:hover[disabled].active, -.datepicker table tr td.range.today.disabled[disabled].active, -.datepicker table tr td.range.today.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td.range.today.active, -fieldset[disabled] .datepicker table tr td.range.today:hover.active, -fieldset[disabled] .datepicker table tr td.range.today.disabled.active, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active { - background-color: #f7ca77; - border-color: #f1a417; -} -.datepicker table tr td.selected, -.datepicker table tr td.selected:hover, -.datepicker table tr td.selected.disabled, -.datepicker table tr td.selected.disabled:hover { - color: #ffffff; - background-color: #999999; - border-color: #555555; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td.selected:hover, -.datepicker table tr td.selected:hover:hover, -.datepicker table tr td.selected.disabled:hover, -.datepicker table tr td.selected.disabled:hover:hover, -.datepicker table tr td.selected:focus, -.datepicker table tr td.selected:hover:focus, -.datepicker table tr td.selected.disabled:focus, -.datepicker table tr td.selected.disabled:hover:focus, -.datepicker table tr td.selected:active, -.datepicker table tr td.selected:hover:active, -.datepicker table tr td.selected.disabled:active, -.datepicker table tr td.selected.disabled:hover:active, -.datepicker table tr td.selected.active, -.datepicker table tr td.selected:hover.active, -.datepicker table tr td.selected.disabled.active, -.datepicker table tr td.selected.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.selected, -.open .dropdown-toggle.datepicker table tr td.selected:hover, -.open .dropdown-toggle.datepicker table tr td.selected.disabled, -.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover { - color: #ffffff; - background-color: #858585; - border-color: #373737; -} -.datepicker table tr td.selected:active, -.datepicker table tr td.selected:hover:active, -.datepicker table tr td.selected.disabled:active, -.datepicker table tr td.selected.disabled:hover:active, -.datepicker table tr td.selected.active, -.datepicker table tr td.selected:hover.active, -.datepicker table tr td.selected.disabled.active, -.datepicker table tr td.selected.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.selected, -.open .dropdown-toggle.datepicker table tr td.selected:hover, -.open .dropdown-toggle.datepicker table tr td.selected.disabled, -.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover { - background-image: none; -} -.datepicker table tr td.selected.disabled, -.datepicker table tr td.selected:hover.disabled, -.datepicker table tr td.selected.disabled.disabled, -.datepicker table tr td.selected.disabled:hover.disabled, -.datepicker table tr td.selected[disabled], -.datepicker table tr td.selected:hover[disabled], -.datepicker table tr td.selected.disabled[disabled], -.datepicker table tr td.selected.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td.selected, -fieldset[disabled] .datepicker table tr td.selected:hover, -fieldset[disabled] .datepicker table tr td.selected.disabled, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover, -.datepicker table tr td.selected.disabled:hover, -.datepicker table tr td.selected:hover.disabled:hover, -.datepicker table tr td.selected.disabled.disabled:hover, -.datepicker table tr td.selected.disabled:hover.disabled:hover, -.datepicker table tr td.selected[disabled]:hover, -.datepicker table tr td.selected:hover[disabled]:hover, -.datepicker table tr td.selected.disabled[disabled]:hover, -.datepicker table tr td.selected.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td.selected:hover, -fieldset[disabled] .datepicker table tr td.selected:hover:hover, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover, -.datepicker table tr td.selected.disabled:focus, -.datepicker table tr td.selected:hover.disabled:focus, -.datepicker table tr td.selected.disabled.disabled:focus, -.datepicker table tr td.selected.disabled:hover.disabled:focus, -.datepicker table tr td.selected[disabled]:focus, -.datepicker table tr td.selected:hover[disabled]:focus, -.datepicker table tr td.selected.disabled[disabled]:focus, -.datepicker table tr td.selected.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td.selected:focus, -fieldset[disabled] .datepicker table tr td.selected:hover:focus, -fieldset[disabled] .datepicker table tr td.selected.disabled:focus, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus, -.datepicker table tr td.selected.disabled:active, -.datepicker table tr td.selected:hover.disabled:active, -.datepicker table tr td.selected.disabled.disabled:active, -.datepicker table tr td.selected.disabled:hover.disabled:active, -.datepicker table tr td.selected[disabled]:active, -.datepicker table tr td.selected:hover[disabled]:active, -.datepicker table tr td.selected.disabled[disabled]:active, -.datepicker table tr td.selected.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td.selected:active, -fieldset[disabled] .datepicker table tr td.selected:hover:active, -fieldset[disabled] .datepicker table tr td.selected.disabled:active, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active, -.datepicker table tr td.selected.disabled.active, -.datepicker table tr td.selected:hover.disabled.active, -.datepicker table tr td.selected.disabled.disabled.active, -.datepicker table tr td.selected.disabled:hover.disabled.active, -.datepicker table tr td.selected[disabled].active, -.datepicker table tr td.selected:hover[disabled].active, -.datepicker table tr td.selected.disabled[disabled].active, -.datepicker table tr td.selected.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td.selected.active, -fieldset[disabled] .datepicker table tr td.selected:hover.active, -fieldset[disabled] .datepicker table tr td.selected.disabled.active, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active { - background-color: #999999; - border-color: #555555; -} -.datepicker table tr td.active, -.datepicker table tr td.active:hover, -.datepicker table tr td.active.disabled, -.datepicker table tr td.active.disabled:hover { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td.active:hover, -.datepicker table tr td.active:hover:hover, -.datepicker table tr td.active.disabled:hover, -.datepicker table tr td.active.disabled:hover:hover, -.datepicker table tr td.active:focus, -.datepicker table tr td.active:hover:focus, -.datepicker table tr td.active.disabled:focus, -.datepicker table tr td.active.disabled:hover:focus, -.datepicker table tr td.active:active, -.datepicker table tr td.active:hover:active, -.datepicker table tr td.active.disabled:active, -.datepicker table tr td.active.disabled:hover:active, -.datepicker table tr td.active.active, -.datepicker table tr td.active:hover.active, -.datepicker table tr td.active.disabled.active, -.datepicker table tr td.active.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.active, -.open .dropdown-toggle.datepicker table tr td.active:hover, -.open .dropdown-toggle.datepicker table tr td.active.disabled, -.open .dropdown-toggle.datepicker table tr td.active.disabled:hover { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; -} -.datepicker table tr td.active:active, -.datepicker table tr td.active:hover:active, -.datepicker table tr td.active.disabled:active, -.datepicker table tr td.active.disabled:hover:active, -.datepicker table tr td.active.active, -.datepicker table tr td.active:hover.active, -.datepicker table tr td.active.disabled.active, -.datepicker table tr td.active.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.active, -.open .dropdown-toggle.datepicker table tr td.active:hover, -.open .dropdown-toggle.datepicker table tr td.active.disabled, -.open .dropdown-toggle.datepicker table tr td.active.disabled:hover { - background-image: none; -} -.datepicker table tr td.active.disabled, -.datepicker table tr td.active:hover.disabled, -.datepicker table tr td.active.disabled.disabled, -.datepicker table tr td.active.disabled:hover.disabled, -.datepicker table tr td.active[disabled], -.datepicker table tr td.active:hover[disabled], -.datepicker table tr td.active.disabled[disabled], -.datepicker table tr td.active.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td.active, -fieldset[disabled] .datepicker table tr td.active:hover, -fieldset[disabled] .datepicker table tr td.active.disabled, -fieldset[disabled] .datepicker table tr td.active.disabled:hover, -.datepicker table tr td.active.disabled:hover, -.datepicker table tr td.active:hover.disabled:hover, -.datepicker table tr td.active.disabled.disabled:hover, -.datepicker table tr td.active.disabled:hover.disabled:hover, -.datepicker table tr td.active[disabled]:hover, -.datepicker table tr td.active:hover[disabled]:hover, -.datepicker table tr td.active.disabled[disabled]:hover, -.datepicker table tr td.active.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td.active:hover, -fieldset[disabled] .datepicker table tr td.active:hover:hover, -fieldset[disabled] .datepicker table tr td.active.disabled:hover, -fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover, -.datepicker table tr td.active.disabled:focus, -.datepicker table tr td.active:hover.disabled:focus, -.datepicker table tr td.active.disabled.disabled:focus, -.datepicker table tr td.active.disabled:hover.disabled:focus, -.datepicker table tr td.active[disabled]:focus, -.datepicker table tr td.active:hover[disabled]:focus, -.datepicker table tr td.active.disabled[disabled]:focus, -.datepicker table tr td.active.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td.active:focus, -fieldset[disabled] .datepicker table tr td.active:hover:focus, -fieldset[disabled] .datepicker table tr td.active.disabled:focus, -fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus, -.datepicker table tr td.active.disabled:active, -.datepicker table tr td.active:hover.disabled:active, -.datepicker table tr td.active.disabled.disabled:active, -.datepicker table tr td.active.disabled:hover.disabled:active, -.datepicker table tr td.active[disabled]:active, -.datepicker table tr td.active:hover[disabled]:active, -.datepicker table tr td.active.disabled[disabled]:active, -.datepicker table tr td.active.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td.active:active, -fieldset[disabled] .datepicker table tr td.active:hover:active, -fieldset[disabled] .datepicker table tr td.active.disabled:active, -fieldset[disabled] .datepicker table tr td.active.disabled:hover:active, -.datepicker table tr td.active.disabled.active, -.datepicker table tr td.active:hover.disabled.active, -.datepicker table tr td.active.disabled.disabled.active, -.datepicker table tr td.active.disabled:hover.disabled.active, -.datepicker table tr td.active[disabled].active, -.datepicker table tr td.active:hover[disabled].active, -.datepicker table tr td.active.disabled[disabled].active, -.datepicker table tr td.active.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td.active.active, -fieldset[disabled] .datepicker table tr td.active:hover.active, -fieldset[disabled] .datepicker table tr td.active.disabled.active, -fieldset[disabled] .datepicker table tr td.active.disabled:hover.active { - background-color: #428bca; - border-color: #357ebd; -} -.datepicker table tr td span { - display: block; - width: 23%; - height: 54px; - line-height: 54px; - float: left; - margin: 1%; - cursor: pointer; - border-radius: 4px; -} -.datepicker table tr td span:hover { - background: #eeeeee; -} -.datepicker table tr td span.disabled, -.datepicker table tr td span.disabled:hover { - background: none; - color: #999999; - cursor: default; -} -.datepicker table tr td span.active, -.datepicker table tr td span.active:hover, -.datepicker table tr td span.active.disabled, -.datepicker table tr td span.active.disabled:hover { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td span.active:hover, -.datepicker table tr td span.active:hover:hover, -.datepicker table tr td span.active.disabled:hover, -.datepicker table tr td span.active.disabled:hover:hover, -.datepicker table tr td span.active:focus, -.datepicker table tr td span.active:hover:focus, -.datepicker table tr td span.active.disabled:focus, -.datepicker table tr td span.active.disabled:hover:focus, -.datepicker table tr td span.active:active, -.datepicker table tr td span.active:hover:active, -.datepicker table tr td span.active.disabled:active, -.datepicker table tr td span.active.disabled:hover:active, -.datepicker table tr td span.active.active, -.datepicker table tr td span.active:hover.active, -.datepicker table tr td span.active.disabled.active, -.datepicker table tr td span.active.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td span.active, -.open .dropdown-toggle.datepicker table tr td span.active:hover, -.open .dropdown-toggle.datepicker table tr td span.active.disabled, -.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; -} -.datepicker table tr td span.active:active, -.datepicker table tr td span.active:hover:active, -.datepicker table tr td span.active.disabled:active, -.datepicker table tr td span.active.disabled:hover:active, -.datepicker table tr td span.active.active, -.datepicker table tr td span.active:hover.active, -.datepicker table tr td span.active.disabled.active, -.datepicker table tr td span.active.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td span.active, -.open .dropdown-toggle.datepicker table tr td span.active:hover, -.open .dropdown-toggle.datepicker table tr td span.active.disabled, -.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover { - background-image: none; -} -.datepicker table tr td span.active.disabled, -.datepicker table tr td span.active:hover.disabled, -.datepicker table tr td span.active.disabled.disabled, -.datepicker table tr td span.active.disabled:hover.disabled, -.datepicker table tr td span.active[disabled], -.datepicker table tr td span.active:hover[disabled], -.datepicker table tr td span.active.disabled[disabled], -.datepicker table tr td span.active.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td span.active, -fieldset[disabled] .datepicker table tr td span.active:hover, -fieldset[disabled] .datepicker table tr td span.active.disabled, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover, -.datepicker table tr td span.active.disabled:hover, -.datepicker table tr td span.active:hover.disabled:hover, -.datepicker table tr td span.active.disabled.disabled:hover, -.datepicker table tr td span.active.disabled:hover.disabled:hover, -.datepicker table tr td span.active[disabled]:hover, -.datepicker table tr td span.active:hover[disabled]:hover, -.datepicker table tr td span.active.disabled[disabled]:hover, -.datepicker table tr td span.active.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td span.active:hover, -fieldset[disabled] .datepicker table tr td span.active:hover:hover, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover, -.datepicker table tr td span.active.disabled:focus, -.datepicker table tr td span.active:hover.disabled:focus, -.datepicker table tr td span.active.disabled.disabled:focus, -.datepicker table tr td span.active.disabled:hover.disabled:focus, -.datepicker table tr td span.active[disabled]:focus, -.datepicker table tr td span.active:hover[disabled]:focus, -.datepicker table tr td span.active.disabled[disabled]:focus, -.datepicker table tr td span.active.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td span.active:focus, -fieldset[disabled] .datepicker table tr td span.active:hover:focus, -fieldset[disabled] .datepicker table tr td span.active.disabled:focus, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus, -.datepicker table tr td span.active.disabled:active, -.datepicker table tr td span.active:hover.disabled:active, -.datepicker table tr td span.active.disabled.disabled:active, -.datepicker table tr td span.active.disabled:hover.disabled:active, -.datepicker table tr td span.active[disabled]:active, -.datepicker table tr td span.active:hover[disabled]:active, -.datepicker table tr td span.active.disabled[disabled]:active, -.datepicker table tr td span.active.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td span.active:active, -fieldset[disabled] .datepicker table tr td span.active:hover:active, -fieldset[disabled] .datepicker table tr td span.active.disabled:active, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active, -.datepicker table tr td span.active.disabled.active, -.datepicker table tr td span.active:hover.disabled.active, -.datepicker table tr td span.active.disabled.disabled.active, -.datepicker table tr td span.active.disabled:hover.disabled.active, -.datepicker table tr td span.active[disabled].active, -.datepicker table tr td span.active:hover[disabled].active, -.datepicker table tr td span.active.disabled[disabled].active, -.datepicker table tr td span.active.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td span.active.active, -fieldset[disabled] .datepicker table tr td span.active:hover.active, -fieldset[disabled] .datepicker table tr td span.active.disabled.active, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active { - background-color: #428bca; - border-color: #357ebd; -} -.datepicker table tr td span.old, -.datepicker table tr td span.new { - color: #999999; -} -.datepicker th.datepicker-switch { - width: 145px; -} -.datepicker thead tr:first-child th, -.datepicker tfoot tr th { - cursor: pointer; -} -.datepicker thead tr:first-child th:hover, -.datepicker tfoot tr th:hover { - background: #eeeeee; -} -.datepicker .cw { - font-size: 10px; - width: 12px; - padding: 0 2px 0 5px; - vertical-align: middle; -} -.datepicker thead tr:first-child th.cw { - cursor: default; - background-color: transparent; -} -.input-group.date .input-group-addon i { - cursor: pointer; - width: 16px; - height: 16px; -} -.input-daterange input { - text-align: center; -} -.input-daterange input:first-child { - border-radius: 3px 0 0 3px; -} -.input-daterange input:last-child { - border-radius: 0 3px 3px 0; -} -.input-daterange .input-group-addon { - width: auto; - min-width: 16px; - padding: 4px 5px; - font-weight: normal; - line-height: 1.428571429; - text-align: center; - text-shadow: 0 1px 0 #fff; - vertical-align: middle; - background-color: #eeeeee; - border: solid #cccccc; - border-width: 1px 0; - margin-left: -5px; - margin-right: -5px; -} -.datepicker.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - float: left; - display: none; - min-width: 160px; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 5px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - *border-right-width: 2px; - *border-bottom-width: 2px; - color: #333333; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 1.428571429; -} -.datepicker.dropdown-menu th, -.datepicker.dropdown-menu td { - padding: 4px 5px; -} diff --git a/public/css/gogs.min.css b/public/css/gogs.min.css index 5549d093..eab009f7 100644 --- a/public/css/gogs.min.css +++ b/public/css/gogs.min.css @@ -1 +1 @@ -@font-face{font-family:octicons;src:url(../fonts/octicons.eot?#iefix&v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('embedded-opentype'),url(../fonts/octicons.woff?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('woff'),url(../fonts/octicons.ttf?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('truetype'),url(../fonts/octicons.svg?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6#octicons)format('svg');font-weight:400;font-style:normal}.mega-octicon,.octicon{font:normal normal normal 16px/1 octicons;display:inline-block;text-decoration:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mega-octicon{font-size:32px}.octicon-alert:before{content:'\f02d'}.octicon-alignment-align:before{content:'\f08a'}.octicon-alignment-aligned-to:before{content:'\f08e'}.octicon-alignment-unalign:before{content:'\f08b'}.octicon-arrow-down:before{content:'\f03f'}.octicon-arrow-left:before{content:'\f040'}.octicon-arrow-right:before{content:'\f03e'}.octicon-arrow-small-down:before{content:'\f0a0'}.octicon-arrow-small-left:before{content:'\f0a1'}.octicon-arrow-small-right:before{content:'\f071'}.octicon-arrow-small-up:before{content:'\f09f'}.octicon-arrow-up:before{content:'\f03d'}.octicon-beer:before{content:'\f069'}.octicon-book:before{content:'\f007'}.octicon-bookmark:before{content:'\f07b'}.octicon-briefcase:before{content:'\f0d3'}.octicon-broadcast:before{content:'\f048'}.octicon-browser:before{content:'\f0c5'}.octicon-bug:before{content:'\f091'}.octicon-calendar:before{content:'\f068'}.octicon-check:before{content:'\f03a'}.octicon-checklist:before{content:'\f076'}.octicon-chevron-down:before{content:'\f0a3'}.octicon-chevron-left:before{content:'\f0a4'}.octicon-chevron-right:before{content:'\f078'}.octicon-chevron-up:before{content:'\f0a2'}.octicon-circle-slash:before{content:'\f084'}.octicon-circuit-board:before{content:'\f0d6'}.octicon-clippy:before{content:'\f035'}.octicon-clock:before{content:'\f046'}.octicon-cloud-download:before{content:'\f00b'}.octicon-cloud-upload:before{content:'\f00c'}.octicon-code:before{content:'\f05f'}.octicon-color-mode:before{content:'\f065'}.octicon-comment-add:before,.octicon-comment:before{content:'\f02b'}.octicon-comment-discussion:before{content:'\f04f'}.octicon-credit-card:before{content:'\f045'}.octicon-dash:before{content:'\f0ca'}.octicon-dashboard:before{content:'\f07d'}.octicon-database:before{content:'\f096'}.octicon-device-camera:before{content:'\f056'}.octicon-device-camera-video:before{content:'\f057'}.octicon-device-desktop:before{content:'\f27c'}.octicon-device-mobile:before{content:'\f038'}.octicon-diff:before{content:'\f04d'}.octicon-diff-added:before{content:'\f06b'}.octicon-diff-ignored:before{content:'\f099'}.octicon-diff-modified:before{content:'\f06d'}.octicon-diff-removed:before{content:'\f06c'}.octicon-diff-renamed:before{content:'\f06e'}.octicon-ellipsis:before{content:'\f09a'}.octicon-eye-unwatch:before,.octicon-eye-watch:before,.octicon-eye:before{content:'\f04e'}.octicon-file-binary:before{content:'\f094'}.octicon-file-code:before{content:'\f010'}.octicon-file-directory:before{content:'\f016'}.octicon-file-media:before{content:'\f012'}.octicon-file-pdf:before{content:'\f014'}.octicon-file-submodule:before{content:'\f017'}.octicon-file-symlink-directory:before{content:'\f0b1'}.octicon-file-symlink-file:before{content:'\f0b0'}.octicon-file-text:before{content:'\f011'}.octicon-file-zip:before{content:'\f013'}.octicon-flame:before{content:'\f0d2'}.octicon-fold:before{content:'\f0cc'}.octicon-gear:before{content:'\f02f'}.octicon-gift:before{content:'\f042'}.octicon-gist:before{content:'\f00e'}.octicon-gist-secret:before{content:'\f08c'}.octicon-git-branch-create:before,.octicon-git-branch-delete:before,.octicon-git-branch:before{content:'\f020'}.octicon-git-commit:before{content:'\f01f'}.octicon-git-compare:before{content:'\f0ac'}.octicon-git-merge:before{content:'\f023'}.octicon-git-pull-request-abandoned:before,.octicon-git-pull-request:before{content:'\f009'}.octicon-globe:before{content:'\f0b6'}.octicon-graph:before{content:'\f043'}.octicon-heart:before{content:'\2665'}.octicon-history:before{content:'\f07e'}.octicon-home:before{content:'\f08d'}.octicon-horizontal-rule:before{content:'\f070'}.octicon-hourglass:before{content:'\f09e'}.octicon-hubot:before{content:'\f09d'}.octicon-inbox:before{content:'\f0cf'}.octicon-info:before{content:'\f059'}.octicon-issue-closed:before{content:'\f028'}.octicon-issue-opened:before{content:'\f026'}.octicon-issue-reopened:before{content:'\f027'}.octicon-jersey:before{content:'\f019'}.octicon-jump-down:before{content:'\f072'}.octicon-jump-left:before{content:'\f0a5'}.octicon-jump-right:before{content:'\f0a6'}.octicon-jump-up:before{content:'\f073'}.octicon-key:before{content:'\f049'}.octicon-keyboard:before{content:'\f00d'}.octicon-law:before{content:'\f0d8'}.octicon-light-bulb:before{content:'\f000'}.octicon-link:before{content:'\f05c'}.octicon-link-external:before{content:'\f07f'}.octicon-list-ordered:before{content:'\f062'}.octicon-list-unordered:before{content:'\f061'}.octicon-location:before{content:'\f060'}.octicon-gist-private:before,.octicon-git-fork-private:before,.octicon-lock:before,.octicon-mirror-private:before{content:'\f06a'}.octicon-logo-github:before{content:'\f092'}.octicon-mail:before{content:'\f03b'}.octicon-mail-read:before{content:'\f03c'}.octicon-mail-reply:before{content:'\f051'}.octicon-mark-github:before{content:'\f00a'}.octicon-markdown:before{content:'\f0c9'}.octicon-megaphone:before{content:'\f077'}.octicon-mention:before{content:'\f0be'}.octicon-microscope:before{content:'\f089'}.octicon-milestone:before{content:'\f075'}.octicon-mirror-public:before,.octicon-mirror:before{content:'\f024'}.octicon-mortar-board:before{content:'\f0d7'}.octicon-move-down:before{content:'\f0a8'}.octicon-move-left:before{content:'\f074'}.octicon-move-right:before{content:'\f0a9'}.octicon-move-up:before{content:'\f0a7'}.octicon-mute:before{content:'\f080'}.octicon-no-newline:before{content:'\f09c'}.octicon-octoface:before{content:'\f008'}.octicon-organization:before{content:'\f037'}.octicon-package:before{content:'\f0c4'}.octicon-paintcan:before{content:'\f0d1'}.octicon-pencil:before{content:'\f058'}.octicon-person-add:before,.octicon-person-follow:before,.octicon-person:before{content:'\f018'}.octicon-pin:before{content:'\f041'}.octicon-playback-fast-forward:before{content:'\f0bd'}.octicon-playback-pause:before{content:'\f0bb'}.octicon-playback-play:before{content:'\f0bf'}.octicon-playback-rewind:before{content:'\f0bc'}.octicon-plug:before{content:'\f0d4'}.octicon-file-add:before,.octicon-file-directory-create:before,.octicon-gist-new:before,.octicon-plus:before,.octicon-repo-create:before{content:'\f05d'}.octicon-podium:before{content:'\f0af'}.octicon-primitive-dot:before{content:'\f052'}.octicon-primitive-square:before{content:'\f053'}.octicon-pulse:before{content:'\f085'}.octicon-puzzle:before{content:'\f0c0'}.octicon-question:before{content:'\f02c'}.octicon-quote:before{content:'\f063'}.octicon-radio-tower:before{content:'\f030'}.octicon-repo-delete:before,.octicon-repo:before{content:'\f001'}.octicon-repo-clone:before{content:'\f04c'}.octicon-repo-force-push:before{content:'\f04a'}.octicon-gist-fork:before,.octicon-repo-forked:before{content:'\f002'}.octicon-repo-pull:before{content:'\f006'}.octicon-repo-push:before{content:'\f005'}.octicon-rocket:before{content:'\f033'}.octicon-rss:before{content:'\f034'}.octicon-ruby:before{content:'\f047'}.octicon-screen-full:before{content:'\f066'}.octicon-screen-normal:before{content:'\f067'}.octicon-search-save:before,.octicon-search:before{content:'\f02e'}.octicon-server:before{content:'\f097'}.octicon-settings:before{content:'\f07c'}.octicon-log-in:before,.octicon-sign-in:before{content:'\f036'}.octicon-log-out:before,.octicon-sign-out:before{content:'\f032'}.octicon-split:before{content:'\f0c6'}.octicon-squirrel:before{content:'\f0b2'}.octicon-star-add:before,.octicon-star-delete:before,.octicon-star:before{content:'\f02a'}.octicon-steps:before{content:'\f0c7'}.octicon-stop:before{content:'\f08f'}.octicon-repo-sync:before,.octicon-sync:before{content:'\f087'}.octicon-tag-add:before,.octicon-tag-remove:before,.octicon-tag:before{content:'\f015'}.octicon-telescope:before{content:'\f088'}.octicon-terminal:before{content:'\f0c8'}.octicon-three-bars:before{content:'\f05e'}.octicon-thumbsdown:before{content:'\f0db'}.octicon-thumbsup:before{content:'\f0da'}.octicon-tools:before{content:'\f031'}.octicon-trashcan:before{content:'\f0d0'}.octicon-triangle-down:before{content:'\f05b'}.octicon-triangle-left:before{content:'\f044'}.octicon-triangle-right:before{content:'\f05a'}.octicon-triangle-up:before{content:'\f0aa'}.octicon-unfold:before{content:'\f039'}.octicon-unmute:before{content:'\f0ba'}.octicon-versions:before{content:'\f064'}.octicon-remove-close:before,.octicon-x:before{content:'\f081'}.octicon-zap:before{content:'\26A1'}body{font-family:'Helvetica Neue',Arial,Helvetica,sans-serif,'微软雅黑';background-color:#FAFAFA}img{border-radius:3px}.full.height{padding:0;margin:0 0 -87px 0;min-height:100%}.following.bar{z-index:900;left:0;width:100%;padding:.7em 0}.following.bar.light{background-color:#fff;border-bottom:1px solid #DDD;box-shadow:0 2px 3px rgba(0,0,0,.04)}.following.bar .ui.secondary.menu{height:30px}.following.bar .column .menu{margin-top:0}.following.bar .brand{float:left;margin-right:5px}.following.bar .head.link.item{padding-right:0!important}.following.bar .head.link.item .dropdown.icon,.following.bar .head.link.item .menu .octicon{margin-right:5px}.following.bar .user.avatar{padding:0;margin-top:1px}.following.bar .searchbox{background-color:#f4f4f4!important}.following.bar .searchbox:focus{background-color:#e9e9e9!important}.following.bar .octicon{width:16px;opacity:1!important;text-align:center}.ui.left{float:left}.ui.right{float:right}footer{margin-top:40px!important;background-color:#fff;border-top:1px solid #d6d6d6;clear:both;width:100%;color:#888}footer .fa{width:16px;text-align:center;color:#428bca}footer .links>*{border-left:1px solid #d6d6d6;padding-left:8px;margin-left:5px}footer .links>:first-child{border-left:none}.hide{display:none}.center{text-align:center}.text-error{color:#d95c5c!important}.img-1{width:2px;height:2px}.img-2{width:4px;height:4px}.img-3{width:6px;height:6px}.img-4{width:8px;height:8px}.img-5{width:10px;height:10px}.img-6{width:12px;height:12px}.img-7{width:14px;height:14px}.img-8{width:16px;height:16px}.img-9{width:18px;height:18px}.img-10{width:20px;height:20px}.img-11{width:22px;height:22px}.img-12{width:24px;height:24px}.img-13{width:26px;height:26px}.img-14{width:28px;height:28px}.img-15{width:30px;height:30px}.img-16{width:32px;height:32px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.home{padding-bottom:120px}.home .logo{max-width:250px}.home .hero h1,.home .hero h2{font-family:'PT Sans Narrow',sans-serif}.home .hero h1{font-size:7em}.home .hero h2{font-size:4em}.home .hero .octicon{color:#d9453d;font-size:60px;margin-right:10px}.home .hero.header{font-size:24px}.home p.large{font-size:20px}.home .stackable{padding-top:30px}.home a{color:#d9453d}.install{padding-top:45px;padding-bottom:120px}.install .attached.header{background:#f0f0f0}.install form label{text-align:right;width:40%!important}.install form input{width:35%!important}.install form .field{text-align:left}.install form .field .help{margin-left:41%}.install form .field.optional .title{margin-left:38%}.install .ui .checkbox{margin-left:40%!important}.install .ui .checkbox label{width:auto!important}.form .help{color:#999;padding-top:.6em;padding-bottom:.6em;display:inline-block}.repository{padding-top:15px;padding-bottom:120px}.repository .head{height:75px;padding-top:20px;background-color:#FCFCFC}.repository .head .mega-octicon{width:30px}.repository .head .fork-flag,.repository .head a{font-weight:300}.repository .head .ui.label{margin-top:5px;vertical-align:top}.repository .head .fork-flag{margin-left:38px;display:block;font-size:11px;line-height:10px;white-space:nowrap}.repository .head .button{margin-left:10px}.repository .head .button i{margin-right:5px}.repository .head .num{font-weight:700}.repository .head .octicon{height:5px}.repository .navbar{height:60px;padding-top:20px}.repository .navbar .ui.secondary.menu .item{margin-left:-10px;margin-top:-7px}.repository .navbar .ui.secondary.menu .item>.input .color-picker,.repository .navbar .ui.secondary.menu .item>.input .new-label-input{background-color:#fff;border:1px solid rgba(0,0,0,.15)}.repository .navbar .ui.secondary.menu .item .new-label-input{width:150px}.repository .navbar .ui.secondary.menu .item .color-picker{height:35px;width:auto;padding-left:30px}.repository .navbar .ui.secondary.menu .item .minicolors-swatch.minicolors-sprite{top:10px;left:10px;width:15px;height:15px}.repository .navbar .ui.secondary.menu .item.precolors{padding-left:0;padding-right:0;margin-right:10px;width:120px}.repository .navbar .ui.secondary.menu .item.precolors .color{float:left;width:15px;height:15px}.repository .filter.menu .label.color{margin-left:17px;padding:0 8px}.repository .filter.menu .octicon{float:left;margin-left:-5px;margin-right:-7px}.repository .filter.menu .menu{max-height:300px;overflow-x:auto}.repository .type.item .menu{right:0!important;left:auto!important}.repository .issue.list{clear:both;list-style:none;font-size:13px;padding-top:15px}.repository .issue.list>.item{padding-top:15px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .issue.list>.item .title{color:#444;font-size:15px;font-weight:700;margin:0 6px}.repository .issue.list>.item .title:hover{color:#000}.repository .issue.list>.item .comment{padding-right:10px;color:#666}.repository .issue.list>.item .desc{padding-top:5px;color:#999}.repository .issue.list .page.buttons{padding-top:15px}.repository .label.list{clear:both;padding-top:15px}.repository .label.list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .label.list .item a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .label.list .item a:hover{color:#000}.repository .label.list .item a.open-issues{margin-right:30px}.edit-label.modal .color-picker{margin-top:-8px!important;height:35px;width:auto!important;padding-left:30px!important}.edit-label.modal .minicolors-swatch.minicolors-sprite{top:1px;left:10px;width:15px;height:15px}.edit-label.modal .precolors{margin-bottom:-11px!important;padding-left:0!important;padding-right:0!important;margin-right:10px!important;width:120px!important}.edit-label.modal .precolors .color{float:left;margin:0!important;width:15px;height:15px}
\ No newline at end of file +@font-face{font-family:octicons;src:url(../fonts/octicons.eot?#iefix&v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('embedded-opentype'),url(../fonts/octicons.woff?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('woff'),url(../fonts/octicons.ttf?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('truetype'),url(../fonts/octicons.svg?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6#octicons)format('svg');font-weight:400;font-style:normal}.mega-octicon,.octicon{font:normal normal normal 16px/1 octicons;display:inline-block;text-decoration:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mega-octicon{font-size:32px}.octicon-alert:before{content:'\f02d'}.octicon-alignment-align:before{content:'\f08a'}.octicon-alignment-aligned-to:before{content:'\f08e'}.octicon-alignment-unalign:before{content:'\f08b'}.octicon-arrow-down:before{content:'\f03f'}.octicon-arrow-left:before{content:'\f040'}.octicon-arrow-right:before{content:'\f03e'}.octicon-arrow-small-down:before{content:'\f0a0'}.octicon-arrow-small-left:before{content:'\f0a1'}.octicon-arrow-small-right:before{content:'\f071'}.octicon-arrow-small-up:before{content:'\f09f'}.octicon-arrow-up:before{content:'\f03d'}.octicon-beer:before{content:'\f069'}.octicon-book:before{content:'\f007'}.octicon-bookmark:before{content:'\f07b'}.octicon-briefcase:before{content:'\f0d3'}.octicon-broadcast:before{content:'\f048'}.octicon-browser:before{content:'\f0c5'}.octicon-bug:before{content:'\f091'}.octicon-calendar:before{content:'\f068'}.octicon-check:before{content:'\f03a'}.octicon-checklist:before{content:'\f076'}.octicon-chevron-down:before{content:'\f0a3'}.octicon-chevron-left:before{content:'\f0a4'}.octicon-chevron-right:before{content:'\f078'}.octicon-chevron-up:before{content:'\f0a2'}.octicon-circle-slash:before{content:'\f084'}.octicon-circuit-board:before{content:'\f0d6'}.octicon-clippy:before{content:'\f035'}.octicon-clock:before{content:'\f046'}.octicon-cloud-download:before{content:'\f00b'}.octicon-cloud-upload:before{content:'\f00c'}.octicon-code:before{content:'\f05f'}.octicon-color-mode:before{content:'\f065'}.octicon-comment-add:before,.octicon-comment:before{content:'\f02b'}.octicon-comment-discussion:before{content:'\f04f'}.octicon-credit-card:before{content:'\f045'}.octicon-dash:before{content:'\f0ca'}.octicon-dashboard:before{content:'\f07d'}.octicon-database:before{content:'\f096'}.octicon-device-camera:before{content:'\f056'}.octicon-device-camera-video:before{content:'\f057'}.octicon-device-desktop:before{content:'\f27c'}.octicon-device-mobile:before{content:'\f038'}.octicon-diff:before{content:'\f04d'}.octicon-diff-added:before{content:'\f06b'}.octicon-diff-ignored:before{content:'\f099'}.octicon-diff-modified:before{content:'\f06d'}.octicon-diff-removed:before{content:'\f06c'}.octicon-diff-renamed:before{content:'\f06e'}.octicon-ellipsis:before{content:'\f09a'}.octicon-eye-unwatch:before,.octicon-eye-watch:before,.octicon-eye:before{content:'\f04e'}.octicon-file-binary:before{content:'\f094'}.octicon-file-code:before{content:'\f010'}.octicon-file-directory:before{content:'\f016'}.octicon-file-media:before{content:'\f012'}.octicon-file-pdf:before{content:'\f014'}.octicon-file-submodule:before{content:'\f017'}.octicon-file-symlink-directory:before{content:'\f0b1'}.octicon-file-symlink-file:before{content:'\f0b0'}.octicon-file-text:before{content:'\f011'}.octicon-file-zip:before{content:'\f013'}.octicon-flame:before{content:'\f0d2'}.octicon-fold:before{content:'\f0cc'}.octicon-gear:before{content:'\f02f'}.octicon-gift:before{content:'\f042'}.octicon-gist:before{content:'\f00e'}.octicon-gist-secret:before{content:'\f08c'}.octicon-git-branch-create:before,.octicon-git-branch-delete:before,.octicon-git-branch:before{content:'\f020'}.octicon-git-commit:before{content:'\f01f'}.octicon-git-compare:before{content:'\f0ac'}.octicon-git-merge:before{content:'\f023'}.octicon-git-pull-request-abandoned:before,.octicon-git-pull-request:before{content:'\f009'}.octicon-globe:before{content:'\f0b6'}.octicon-graph:before{content:'\f043'}.octicon-heart:before{content:'\2665'}.octicon-history:before{content:'\f07e'}.octicon-home:before{content:'\f08d'}.octicon-horizontal-rule:before{content:'\f070'}.octicon-hourglass:before{content:'\f09e'}.octicon-hubot:before{content:'\f09d'}.octicon-inbox:before{content:'\f0cf'}.octicon-info:before{content:'\f059'}.octicon-issue-closed:before{content:'\f028'}.octicon-issue-opened:before{content:'\f026'}.octicon-issue-reopened:before{content:'\f027'}.octicon-jersey:before{content:'\f019'}.octicon-jump-down:before{content:'\f072'}.octicon-jump-left:before{content:'\f0a5'}.octicon-jump-right:before{content:'\f0a6'}.octicon-jump-up:before{content:'\f073'}.octicon-key:before{content:'\f049'}.octicon-keyboard:before{content:'\f00d'}.octicon-law:before{content:'\f0d8'}.octicon-light-bulb:before{content:'\f000'}.octicon-link:before{content:'\f05c'}.octicon-link-external:before{content:'\f07f'}.octicon-list-ordered:before{content:'\f062'}.octicon-list-unordered:before{content:'\f061'}.octicon-location:before{content:'\f060'}.octicon-gist-private:before,.octicon-git-fork-private:before,.octicon-lock:before,.octicon-mirror-private:before{content:'\f06a'}.octicon-logo-github:before{content:'\f092'}.octicon-mail:before{content:'\f03b'}.octicon-mail-read:before{content:'\f03c'}.octicon-mail-reply:before{content:'\f051'}.octicon-mark-github:before{content:'\f00a'}.octicon-markdown:before{content:'\f0c9'}.octicon-megaphone:before{content:'\f077'}.octicon-mention:before{content:'\f0be'}.octicon-microscope:before{content:'\f089'}.octicon-milestone:before{content:'\f075'}.octicon-mirror-public:before,.octicon-mirror:before{content:'\f024'}.octicon-mortar-board:before{content:'\f0d7'}.octicon-move-down:before{content:'\f0a8'}.octicon-move-left:before{content:'\f074'}.octicon-move-right:before{content:'\f0a9'}.octicon-move-up:before{content:'\f0a7'}.octicon-mute:before{content:'\f080'}.octicon-no-newline:before{content:'\f09c'}.octicon-octoface:before{content:'\f008'}.octicon-organization:before{content:'\f037'}.octicon-package:before{content:'\f0c4'}.octicon-paintcan:before{content:'\f0d1'}.octicon-pencil:before{content:'\f058'}.octicon-person-add:before,.octicon-person-follow:before,.octicon-person:before{content:'\f018'}.octicon-pin:before{content:'\f041'}.octicon-playback-fast-forward:before{content:'\f0bd'}.octicon-playback-pause:before{content:'\f0bb'}.octicon-playback-play:before{content:'\f0bf'}.octicon-playback-rewind:before{content:'\f0bc'}.octicon-plug:before{content:'\f0d4'}.octicon-file-add:before,.octicon-file-directory-create:before,.octicon-gist-new:before,.octicon-plus:before,.octicon-repo-create:before{content:'\f05d'}.octicon-podium:before{content:'\f0af'}.octicon-primitive-dot:before{content:'\f052'}.octicon-primitive-square:before{content:'\f053'}.octicon-pulse:before{content:'\f085'}.octicon-puzzle:before{content:'\f0c0'}.octicon-question:before{content:'\f02c'}.octicon-quote:before{content:'\f063'}.octicon-radio-tower:before{content:'\f030'}.octicon-repo-delete:before,.octicon-repo:before{content:'\f001'}.octicon-repo-clone:before{content:'\f04c'}.octicon-repo-force-push:before{content:'\f04a'}.octicon-gist-fork:before,.octicon-repo-forked:before{content:'\f002'}.octicon-repo-pull:before{content:'\f006'}.octicon-repo-push:before{content:'\f005'}.octicon-rocket:before{content:'\f033'}.octicon-rss:before{content:'\f034'}.octicon-ruby:before{content:'\f047'}.octicon-screen-full:before{content:'\f066'}.octicon-screen-normal:before{content:'\f067'}.octicon-search-save:before,.octicon-search:before{content:'\f02e'}.octicon-server:before{content:'\f097'}.octicon-settings:before{content:'\f07c'}.octicon-log-in:before,.octicon-sign-in:before{content:'\f036'}.octicon-log-out:before,.octicon-sign-out:before{content:'\f032'}.octicon-split:before{content:'\f0c6'}.octicon-squirrel:before{content:'\f0b2'}.octicon-star-add:before,.octicon-star-delete:before,.octicon-star:before{content:'\f02a'}.octicon-steps:before{content:'\f0c7'}.octicon-stop:before{content:'\f08f'}.octicon-repo-sync:before,.octicon-sync:before{content:'\f087'}.octicon-tag-add:before,.octicon-tag-remove:before,.octicon-tag:before{content:'\f015'}.octicon-telescope:before{content:'\f088'}.octicon-terminal:before{content:'\f0c8'}.octicon-three-bars:before{content:'\f05e'}.octicon-thumbsdown:before{content:'\f0db'}.octicon-thumbsup:before{content:'\f0da'}.octicon-tools:before{content:'\f031'}.octicon-trashcan:before{content:'\f0d0'}.octicon-triangle-down:before{content:'\f05b'}.octicon-triangle-left:before{content:'\f044'}.octicon-triangle-right:before{content:'\f05a'}.octicon-triangle-up:before{content:'\f0aa'}.octicon-unfold:before{content:'\f039'}.octicon-unmute:before{content:'\f0ba'}.octicon-versions:before{content:'\f064'}.octicon-remove-close:before,.octicon-x:before{content:'\f081'}.octicon-zap:before{content:'\26A1'}body{font-family:'Helvetica Neue',Arial,Helvetica,sans-serif,'微软雅黑';background-color:#FAFAFA}img{border-radius:3px}.full.height{padding:0;margin:0 0 -87px 0;min-height:100%}.following.bar{z-index:900;left:0;width:100%;padding:.7em 0}.following.bar.light{background-color:#fff;border-bottom:1px solid #DDD;box-shadow:0 2px 3px rgba(0,0,0,.04)}.following.bar .ui.secondary.menu{height:30px}.following.bar .column .menu{margin-top:0}.following.bar .brand{float:left;margin-right:5px}.following.bar .head.link.item{padding-right:0!important}.following.bar .head.link.item .dropdown.icon,.following.bar .head.link.item .menu .octicon{margin-right:5px}.following.bar .user.avatar{padding:0;margin-top:1px}.following.bar .searchbox{background-color:#f4f4f4!important}.following.bar .searchbox:focus{background-color:#e9e9e9!important}.following.bar .octicon{width:16px;opacity:1!important;text-align:center}.ui.left{float:left}.ui.right{float:right}footer{margin-top:40px!important;background-color:#fff;border-top:1px solid #d6d6d6;clear:both;width:100%;color:#888}footer .fa{width:16px;text-align:center;color:#428bca}footer .ui.language.dropdown{z-index:10000}footer .links>*{border-left:1px solid #d6d6d6;padding-left:8px;margin-left:5px}footer .links>:first-child{border-left:none}.hide{display:none}.center{text-align:center}.text-error{color:#d95c5c!important}.img-1{width:2px;height:2px}.img-2{width:4px;height:4px}.img-3{width:6px;height:6px}.img-4{width:8px;height:8px}.img-5{width:10px;height:10px}.img-6{width:12px;height:12px}.img-7{width:14px;height:14px}.img-8{width:16px;height:16px}.img-9{width:18px;height:18px}.img-10{width:20px;height:20px}.img-11{width:22px;height:22px}.img-12{width:24px;height:24px}.img-13{width:26px;height:26px}.img-14{width:28px;height:28px}.img-15{width:30px;height:30px}.img-16{width:32px;height:32px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.home{padding-bottom:120px}.home .logo{max-width:250px}.home .hero h1,.home .hero h2{font-family:'PT Sans Narrow',sans-serif}.home .hero h1{font-size:7em}.home .hero h2{font-size:4em}.home .hero .octicon{color:#d9453d;font-size:60px;margin-right:10px}.home .hero.header{font-size:24px}.home p.large{font-size:20px}.home .stackable{padding-top:30px}.home a{color:#d9453d}.install{padding-top:45px;padding-bottom:120px}.install .attached.header{background:#f0f0f0}.install form label{text-align:right;width:40%!important}.install form input{width:35%!important}.install form .field{text-align:left}.install form .field .help{margin-left:41%}.install form .field.optional .title{margin-left:38%}.install .ui .checkbox{margin-left:40%!important}.install .ui .checkbox label{width:auto!important}.form .help{color:#999;padding-top:.6em;padding-bottom:.6em;display:inline-block}.repository{padding-top:15px;padding-bottom:120px}.repository .head{height:75px;padding-top:20px;background-color:#FCFCFC}.repository .head .mega-octicon{width:30px}.repository .head .fork-flag,.repository .head a{font-weight:300}.repository .head .ui.label{margin-top:5px;vertical-align:top}.repository .head .fork-flag{margin-left:38px;display:block;font-size:11px;line-height:10px;white-space:nowrap}.repository .head .button{margin-left:10px}.repository .head .button i{margin-right:5px}.repository .head .num{font-weight:700}.repository .head .octicon{height:5px}.repository .navbar{height:60px;padding-top:20px}.repository .navbar .ui.secondary.menu .item{margin-left:-10px;margin-top:-7px}.repository .navbar .ui.secondary.menu .item>.input .color-picker,.repository .navbar .ui.secondary.menu .item>.input .new-label-input{background-color:#fff;border:1px solid rgba(0,0,0,.15)}.repository .navbar .ui.secondary.menu .item.input{margin-right:-7px}.repository .navbar .ui.secondary.menu .item .new-label-input{width:150px}.repository .navbar .ui.secondary.menu .item .color-picker{height:35px;width:auto;padding-left:30px}.repository .navbar .ui.secondary.menu .item .minicolors-swatch.minicolors-sprite{top:10px;left:10px;width:15px;height:15px}.repository .navbar .ui.secondary.menu .item.precolors{padding-left:0;padding-right:0;margin-right:10px;width:120px}.repository .navbar .ui.secondary.menu .item.precolors .color{float:left;width:15px;height:15px}.repository .filter.menu .label.color{margin-left:17px;padding:0 8px}.repository .filter.menu .octicon{float:left;margin-left:-5px;margin-right:-7px}.repository .filter.menu .menu{max-height:300px;overflow-x:auto;right:0!important;left:auto!important}.repository .filter.menu .menu .clickable .name{padding-left:15px!important}.repository .page.buttons{padding-top:15px}.repository .issue.list{clear:both;list-style:none}.repository .issue.list>.item{padding-top:15px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .issue.list>.item .title{color:#444;font-size:15px;font-weight:700;margin:0 6px}.repository .issue.list>.item .title:hover{color:#000}.repository .issue.list>.item .comment{padding-right:10px;color:#666}.repository .issue.list>.item .desc{padding-top:5px;color:#999}.repository .issue.list>.item .desc a.milestone{padding-left:5px;color:#999!important}.repository .issue.list>.item .desc a.milestone:hover{color:#000!important}.repository .label.list{clear:both;list-style:none}.repository .label.list .item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .label.list .item a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .label.list .item a:hover{color:#000}.repository .label.list .item a.open-issues{margin-right:30px}.repository .milestone.list{clear:both;list-style:none}.repository .milestone.list>.item{padding-top:10px;padding-bottom:10px;border-bottom:1px dashed #AAA}.repository .milestone.list>.item>a{padding-top:5px;padding-right:10px;color:#000}.repository .milestone.list>.item>a:hover{color:#4078c0}.repository .milestone.list>.item .ui.progress{width:40%;padding:0;border:0;margin:0}.repository .milestone.list>.item .ui.progress .bar{height:20px}.repository .milestone.list>.item .meta{color:#999;padding-top:5px}.repository .milestone.list>.item .meta .issue-stats .octicon{padding-left:5px}.repository .milestone.list>.item .meta .overdue{color:red}.repository .milestone.list>.item .operate{margin-top:-15px}.repository .milestone.list>.item .operate>a{font-size:15px;padding-top:5px;padding-right:10px;color:#666}.repository .milestone.list>.item .operate>a:hover{color:#000}.repository .milestone.list>.item .content{padding-top:10px}.repository.new.milestone textarea{height:200px}.edit-label.modal .color-picker{margin-top:-8px!important;height:35px;width:auto!important;padding-left:30px!important}.edit-label.modal .minicolors-swatch.minicolors-sprite{top:1px;left:10px;width:15px;height:15px}.edit-label.modal .precolors{margin-bottom:-11px!important;padding-left:0!important;padding-right:0!important;margin-right:10px!important;width:120px!important}.edit-label.modal .precolors .color{float:left;margin:0!important;width:15px;height:15px}
\ No newline at end of file diff --git a/public/css/jquery.datetimepicker.css b/public/css/jquery.datetimepicker.css new file mode 100644 index 00000000..a26fccec --- /dev/null +++ b/public/css/jquery.datetimepicker.css @@ -0,0 +1,545 @@ +.xdsoft_datetimepicker { + box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.506); + background: #fff; + border-bottom: 1px solid #bbb; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-top: 1px solid #ccc; + color: #333; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 8px; + padding-left: 0; + padding-top: 2px; + position: absolute; + z-index: 9999; + -moz-box-sizing: border-box; + box-sizing: border-box; + display: none; +} + +.xdsoft_datetimepicker iframe { + position: absolute; + left: 0; + top: 0; + width: 75px; + height: 210px; + background: transparent; + border: none; +} + +/*For IE8 or lower*/ +.xdsoft_datetimepicker button { + border: none !important; +} + +.xdsoft_noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.xdsoft_noselect::selection { background: transparent } +.xdsoft_noselect::-moz-selection { background: transparent } + +.xdsoft_datetimepicker.xdsoft_inline { + display: inline-block; + position: static; + box-shadow: none; +} + +.xdsoft_datetimepicker * { + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + margin: 0; +} + +.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker { + display: none; +} + +.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active { + display: block; +} + +.xdsoft_datetimepicker .xdsoft_datepicker { + width: 224px; + float: left; + margin-left: 8px; +} + +.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker { + width: 256px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker { + width: 58px; + float: left; + text-align: center; + margin-left: 8px; + margin-top: 0; +} + +.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker { + margin-top: 8px; + margin-bottom: 3px +} + +.xdsoft_datetimepicker .xdsoft_mounthpicker { + position: relative; + text-align: center; +} + +.xdsoft_datetimepicker .xdsoft_label i, +.xdsoft_datetimepicker .xdsoft_prev, +.xdsoft_datetimepicker .xdsoft_next, +.xdsoft_datetimepicker .xdsoft_today_button { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC); +} + +.xdsoft_datetimepicker .xdsoft_label i { + opacity: 0.5; + background-position: -92px -19px; + display: inline-block; + width: 9px; + height: 20px; + vertical-align: middle; +} + +.xdsoft_datetimepicker .xdsoft_prev { + float: left; + background-position: -20px 0; +} +.xdsoft_datetimepicker .xdsoft_today_button { + float: left; + background-position: -70px 0; + margin-left: 5px; +} + +.xdsoft_datetimepicker .xdsoft_next { + float: right; + background-position: 0 0; +} + +.xdsoft_datetimepicker .xdsoft_next, +.xdsoft_datetimepicker .xdsoft_prev , +.xdsoft_datetimepicker .xdsoft_today_button { + background-color: transparent; + background-repeat: no-repeat; + border: 0 none; + cursor: pointer; + display: block; + height: 30px; + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + outline: medium none; + overflow: hidden; + padding: 0; + position: relative; + text-indent: 100%; + white-space: nowrap; + width: 20px; + min-width: 0; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next { + float: none; + background-position: -40px -15px; + height: 15px; + width: 30px; + display: block; + margin-left: 14px; + margin-top: 7px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev { + background-position: -40px 0; + margin-bottom: 7px; + margin-top: 0; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box { + height: 151px; + overflow: hidden; + border-bottom: 1px solid #ddd; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div { + background: #f5f5f5; + border-top: 1px solid #ddd; + color: #666; + font-size: 12px; + text-align: center; + border-collapse: collapse; + cursor: pointer; + border-bottom-width: 0; + height: 25px; + line-height: 25px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child { + border-top-width: 0; +} + +.xdsoft_datetimepicker .xdsoft_today_button:hover, +.xdsoft_datetimepicker .xdsoft_next:hover, +.xdsoft_datetimepicker .xdsoft_prev:hover { + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} + +.xdsoft_datetimepicker .xdsoft_label { + display: inline; + position: relative; + z-index: 9999; + margin: 0; + padding: 5px 3px; + font-size: 14px; + line-height: 20px; + font-weight: bold; + background-color: #fff; + float: left; + width: 182px; + text-align: center; + cursor: pointer; +} + +.xdsoft_datetimepicker .xdsoft_label:hover>span { + text-decoration: underline; +} + +.xdsoft_datetimepicker .xdsoft_label:hover i { + opacity: 1.0; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select { + border: 1px solid #ccc; + position: absolute; + right: 0; + top: 30px; + z-index: 101; + display: none; + background: #fff; + max-height: 160px; + overflow-y: hidden; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{ right: -7px } +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{ right: 2px } +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover { + color: #fff; + background: #ff8000; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option { + padding: 2px 10px 2px 5px; + text-decoration: none !important; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current { + background: #33aaff; + box-shadow: #178fe5 0 1px 3px 0 inset; + color: #fff; + font-weight: 700; +} + +.xdsoft_datetimepicker .xdsoft_month { + width: 100px; + text-align: right; +} + +.xdsoft_datetimepicker .xdsoft_calendar { + clear: both; +} + +.xdsoft_datetimepicker .xdsoft_year{ + width: 48px; + margin-left: 5px; +} + +.xdsoft_datetimepicker .xdsoft_calendar table { + border-collapse: collapse; + width: 100%; + +} + +.xdsoft_datetimepicker .xdsoft_calendar td > div { + padding-right: 5px; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + height: 25px; +} + +.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th { + width: 14.2857142%; + background: #f5f5f5; + border: 1px solid #ddd; + color: #666; + font-size: 12px; + text-align: right; + vertical-align: middle; + padding: 0; + border-collapse: collapse; + cursor: pointer; + height: 25px; +} +.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th { + width: 12.5%; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + background: #f1f1f1; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today { + color: #33aaff; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_default { + background: #ffe9d2; + box-shadow: #ffb871 0 1px 4px 0 inset; + color: #000; +} +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_mint { + background: #c1ffc9; + box-shadow: #00dd1c 0 1px 4px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default, +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current { + background: #33aaff; + box-shadow: #178fe5 0 1px 3px 0 inset; + color: #fff; + font-weight: 700; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month, +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled, +.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + cursor: default; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled { + opacity: 0.2; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; +} + +.xdsoft_datetimepicker .xdsoft_calendar td:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover { + color: #fff !important; + background: #ff8000 !important; + box-shadow: none !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover { + background: #33aaff !important; + box-shadow: #178fe5 0 1px 3px 0 inset !important; + color: #fff !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover { + color: inherit !important; + background: inherit !important; + box-shadow: inherit !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + font-weight: 700; + text-align: center; + color: #999; + cursor: default; +} + +.xdsoft_datetimepicker .xdsoft_copyright { + color: #ccc !important; + font-size: 10px; + clear: both; + float: none; + margin-left: 8px; +} + +.xdsoft_datetimepicker .xdsoft_copyright a { color: #eee !important } +.xdsoft_datetimepicker .xdsoft_copyright a:hover { color: #aaa !important } + +.xdsoft_time_box { + position: relative; + border: 1px solid #ccc; +} +.xdsoft_scrollbar >.xdsoft_scroller { + background: #ccc !important; + height: 20px; + border-radius: 3px; +} +.xdsoft_scrollbar { + position: absolute; + width: 7px; + right: 0; + top: 0; + bottom: 0; + cursor: pointer; +} +.xdsoft_scroller_box { + position: relative; +} + +.xdsoft_datetimepicker.xdsoft_dark { + box-shadow: 0 5px 15px -5px rgba(255, 255, 255, 0.506); + background: #000; + border-bottom: 1px solid #444; + border-left: 1px solid #333; + border-right: 1px solid #333; + border-top: 1px solid #333; + color: #ccc; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box { + border-bottom: 1px solid #222; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div { + background: #0a0a0a; + border-top: 1px solid #222; + color: #999; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label { + background-color: #000; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select { + border: 1px solid #333; + background: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover { + color: #000; + background: #007fff; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current { + background: #cc5500; + box-shadow: #b03e00 0 1px 3px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==); +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + background: #0a0a0a; + border: 1px solid #222; + color: #999; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + background: #0e0e0e; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today { + color: #cc5500; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_default { + background: #ffe9d2; + box-shadow: #ffb871 0 1px 4px 0 inset; + color:#000; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_mint { + background: #c1ffc9; + box-shadow: #00dd1c 0 1px 4px 0 inset; + color:#000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current { + background: #cc5500; + box-shadow: #b03e00 0 1px 3px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover { + color: #000 !important; + background: #007fff !important; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + color: #666; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright { color: #333 !important } +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a { color: #111 !important } +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover { color: #555 !important } + +.xdsoft_dark .xdsoft_time_box { + border: 1px solid #333; +} + +.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller { + background: #333 !important; +} +.xdsoft_datetimepicker .xdsoft_save_selected { + display: block; + border: 1px solid #dddddd !important; + margin-top: 5px; + width: 100%; + color: #454551; + font-size: 13px; +} +.xdsoft_datetimepicker .blue-gradient-button { + font-family: "museo-sans", "Book Antiqua", sans-serif; + font-size: 12px; + font-weight: 300; + color: #82878c; + height: 28px; + position: relative; + padding: 4px 17px 4px 33px; + border: 1px solid #d7d8da; + background: -moz-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(73%, #f4f8fa)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* IE10+ */ + background: linear-gradient(to bottom, #fff 0%, #f4f8fa 73%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#f4f8fa',GradientType=0 ); +/* IE6-9 */ +} +.xdsoft_datetimepicker .blue-gradient-button:hover, .xdsoft_datetimepicker .blue-gradient-button:focus, .xdsoft_datetimepicker .blue-gradient-button:hover span, .xdsoft_datetimepicker .blue-gradient-button:focus span { + color: #454551; + background: -moz-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4f8fa), color-stop(73%, #FFF)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* IE10+ */ + background: linear-gradient(to bottom, #f4f8fa 0%, #FFF 73%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f8fa', endColorstr='#FFF',GradientType=0 ); + /* IE6-9 */ +} diff --git a/public/js/bootstrap-datepicker.js b/public/js/bootstrap-datepicker.js deleted file mode 100644 index f17de6d1..00000000 --- a/public/js/bootstrap-datepicker.js +++ /dev/null @@ -1,1671 +0,0 @@ -/* ========================================================= - * bootstrap-datepicker.js - * Repo: https://github.com/eternicode/bootstrap-datepicker/ - * Demo: http://eternicode.github.io/bootstrap-datepicker/ - * Docs: http://bootstrap-datepicker.readthedocs.org/ - * Forked from http://www.eyecon.ro/bootstrap-datepicker - * ========================================================= - * Started by Stefan Petre; improvements by Andrew Rowls + contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================= */ - -(function($, undefined){ - - var $window = $(window); - - function UTCDate(){ - return new Date(Date.UTC.apply(Date, arguments)); - } - function UTCToday(){ - var today = new Date(); - return UTCDate(today.getFullYear(), today.getMonth(), today.getDate()); - } - function alias(method){ - return function(){ - return this[method].apply(this, arguments); - }; - } - - var DateArray = (function(){ - var extras = { - get: function(i){ - return this.slice(i)[0]; - }, - contains: function(d){ - // Array.indexOf is not cross-browser; - // $.inArray doesn't work with Dates - var val = d && d.valueOf(); - for (var i=0, l=this.length; i < l; i++) - if (this[i].valueOf() === val) - return i; - return -1; - }, - remove: function(i){ - this.splice(i,1); - }, - replace: function(new_array){ - if (!new_array) - return; - if (!$.isArray(new_array)) - new_array = [new_array]; - this.clear(); - this.push.apply(this, new_array); - }, - clear: function(){ - this.splice(0); - }, - copy: function(){ - var a = new DateArray(); - a.replace(this); - return a; - } - }; - - return function(){ - var a = []; - a.push.apply(a, arguments); - $.extend(a, extras); - return a; - }; - })(); - - - // Picker object - - var Datepicker = function(element, options){ - this.dates = new DateArray(); - this.viewDate = UTCToday(); - this.focusDate = null; - - this._process_options(options); - - this.element = $(element); - this.isInline = false; - this.isInput = this.element.is('input'); - this.component = this.element.is('.date') ? this.element.find('.add-on, .input-group-addon, .btn') : false; - this.hasInput = this.component && this.element.find('input').length; - if (this.component && this.component.length === 0) - this.component = false; - - this.picker = $(DPGlobal.template); - this._buildEvents(); - this._attachEvents(); - - if (this.isInline){ - this.picker.addClass('datepicker-inline').appendTo(this.element); - } - else { - this.picker.addClass('datepicker-dropdown dropdown-menu'); - } - - if (this.o.rtl){ - this.picker.addClass('datepicker-rtl'); - } - - this.viewMode = this.o.startView; - - if (this.o.calendarWeeks) - this.picker.find('tfoot th.today') - .attr('colspan', function(i, val){ - return parseInt(val) + 1; - }); - - this._allow_update = false; - - this.setStartDate(this._o.startDate); - this.setEndDate(this._o.endDate); - this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled); - - this.fillDow(); - this.fillMonths(); - - this._allow_update = true; - - this.update(); - this.showMode(); - - if (this.isInline){ - this.show(); - } - }; - - Datepicker.prototype = { - constructor: Datepicker, - - _process_options: function(opts){ - // Store raw options for reference - this._o = $.extend({}, this._o, opts); - // Processed options - var o = this.o = $.extend({}, this._o); - - // Check if "de-DE" style date is available, if not language should - // fallback to 2 letter code eg "de" - var lang = o.language; - if (!dates[lang]){ - lang = lang.split('-')[0]; - if (!dates[lang]) - lang = defaults.language; - } - o.language = lang; - - switch (o.startView){ - case 2: - case 'decade': - o.startView = 2; - break; - case 1: - case 'year': - o.startView = 1; - break; - default: - o.startView = 0; - } - - switch (o.minViewMode){ - case 1: - case 'months': - o.minViewMode = 1; - break; - case 2: - case 'years': - o.minViewMode = 2; - break; - default: - o.minViewMode = 0; - } - - o.startView = Math.max(o.startView, o.minViewMode); - - // true, false, or Number > 0 - if (o.multidate !== true){ - o.multidate = Number(o.multidate) || false; - if (o.multidate !== false) - o.multidate = Math.max(0, o.multidate); - else - o.multidate = 1; - } - o.multidateSeparator = String(o.multidateSeparator); - - o.weekStart %= 7; - o.weekEnd = ((o.weekStart + 6) % 7); - - var format = DPGlobal.parseFormat(o.format); - if (o.startDate !== -Infinity){ - if (!!o.startDate){ - if (o.startDate instanceof Date) - o.startDate = this._local_to_utc(this._zero_time(o.startDate)); - else - o.startDate = DPGlobal.parseDate(o.startDate, format, o.language); - } - else { - o.startDate = -Infinity; - } - } - if (o.endDate !== Infinity){ - if (!!o.endDate){ - if (o.endDate instanceof Date) - o.endDate = this._local_to_utc(this._zero_time(o.endDate)); - else - o.endDate = DPGlobal.parseDate(o.endDate, format, o.language); - } - else { - o.endDate = Infinity; - } - } - - o.daysOfWeekDisabled = o.daysOfWeekDisabled||[]; - if (!$.isArray(o.daysOfWeekDisabled)) - o.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\s]*/); - o.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d){ - return parseInt(d, 10); - }); - - var plc = String(o.orientation).toLowerCase().split(/\s+/g), - _plc = o.orientation.toLowerCase(); - plc = $.grep(plc, function(word){ - return (/^auto|left|right|top|bottom$/).test(word); - }); - o.orientation = {x: 'auto', y: 'auto'}; - if (!_plc || _plc === 'auto') - ; // no action - else if (plc.length === 1){ - switch (plc[0]){ - case 'top': - case 'bottom': - o.orientation.y = plc[0]; - break; - case 'left': - case 'right': - o.orientation.x = plc[0]; - break; - } - } - else { - _plc = $.grep(plc, function(word){ - return (/^left|right$/).test(word); - }); - o.orientation.x = _plc[0] || 'auto'; - - _plc = $.grep(plc, function(word){ - return (/^top|bottom$/).test(word); - }); - o.orientation.y = _plc[0] || 'auto'; - } - }, - _events: [], - _secondaryEvents: [], - _applyEvents: function(evs){ - for (var i=0, el, ch, ev; i < evs.length; i++){ - el = evs[i][0]; - if (evs[i].length === 2){ - ch = undefined; - ev = evs[i][1]; - } - else if (evs[i].length === 3){ - ch = evs[i][1]; - ev = evs[i][2]; - } - el.on(ev, ch); - } - }, - _unapplyEvents: function(evs){ - for (var i=0, el, ev, ch; i < evs.length; i++){ - el = evs[i][0]; - if (evs[i].length === 2){ - ch = undefined; - ev = evs[i][1]; - } - else if (evs[i].length === 3){ - ch = evs[i][1]; - ev = evs[i][2]; - } - el.off(ev, ch); - } - }, - _buildEvents: function(){ - if (this.isInput){ // single input - this._events = [ - [this.element, { - focus: $.proxy(this.show, this), - keyup: $.proxy(function(e){ - if ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1) - this.update(); - }, this), - keydown: $.proxy(this.keydown, this) - }] - ]; - } - else if (this.component && this.hasInput){ // component: input + button - this._events = [ - // For components that are not readonly, allow keyboard nav - [this.element.find('input'), { - focus: $.proxy(this.show, this), - keyup: $.proxy(function(e){ - if ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1) - this.update(); - }, this), - keydown: $.proxy(this.keydown, this) - }], - [this.component, { - click: $.proxy(this.show, this) - }] - ]; - } - else if (this.element.is('div')){ // inline datepicker - this.isInline = true; - } - else { - this._events = [ - [this.element, { - click: $.proxy(this.show, this) - }] - ]; - } - this._events.push( - // Component: listen for blur on element descendants - [this.element, '*', { - blur: $.proxy(function(e){ - this._focused_from = e.target; - }, this) - }], - // Input: listen for blur on element - [this.element, { - blur: $.proxy(function(e){ - this._focused_from = e.target; - }, this) - }] - ); - - this._secondaryEvents = [ - [this.picker, { - click: $.proxy(this.click, this) - }], - [$(window), { - resize: $.proxy(this.place, this) - }], - [$(document), { - 'mousedown touchstart': $.proxy(function(e){ - // Clicked outside the datepicker, hide it - if (!( - this.element.is(e.target) || - this.element.find(e.target).length || - this.picker.is(e.target) || - this.picker.find(e.target).length - )){ - this.hide(); - } - }, this) - }] - ]; - }, - _attachEvents: function(){ - this._detachEvents(); - this._applyEvents(this._events); - }, - _detachEvents: function(){ - this._unapplyEvents(this._events); - }, - _attachSecondaryEvents: function(){ - this._detachSecondaryEvents(); - this._applyEvents(this._secondaryEvents); - }, - _detachSecondaryEvents: function(){ - this._unapplyEvents(this._secondaryEvents); - }, - _trigger: function(event, altdate){ - var date = altdate || this.dates.get(-1), - local_date = this._utc_to_local(date); - - this.element.trigger({ - type: event, - date: local_date, - dates: $.map(this.dates, this._utc_to_local), - format: $.proxy(function(ix, format){ - if (arguments.length === 0){ - ix = this.dates.length - 1; - format = this.o.format; - } - else if (typeof ix === 'string'){ - format = ix; - ix = this.dates.length - 1; - } - format = format || this.o.format; - var date = this.dates.get(ix); - return DPGlobal.formatDate(date, format, this.o.language); - }, this) - }); - }, - - show: function(){ - if (!this.isInline) - this.picker.appendTo('body'); - this.picker.show(); - this.place(); - this._attachSecondaryEvents(); - this._trigger('show'); - }, - - hide: function(){ - if (this.isInline) - return; - if (!this.picker.is(':visible')) - return; - this.focusDate = null; - this.picker.hide().detach(); - this._detachSecondaryEvents(); - this.viewMode = this.o.startView; - this.showMode(); - - if ( - this.o.forceParse && - ( - this.isInput && this.element.val() || - this.hasInput && this.element.find('input').val() - ) - ) - this.setValue(); - this._trigger('hide'); - }, - - remove: function(){ - this.hide(); - this._detachEvents(); - this._detachSecondaryEvents(); - this.picker.remove(); - delete this.element.data().datepicker; - if (!this.isInput){ - delete this.element.data().date; - } - }, - - _utc_to_local: function(utc){ - return utc && new Date(utc.getTime() + (utc.getTimezoneOffset()*60000)); - }, - _local_to_utc: function(local){ - return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000)); - }, - _zero_time: function(local){ - return local && new Date(local.getFullYear(), local.getMonth(), local.getDate()); - }, - _zero_utc_time: function(utc){ - return utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate())); - }, - - getDates: function(){ - return $.map(this.dates, this._utc_to_local); - }, - - getUTCDates: function(){ - return $.map(this.dates, function(d){ - return new Date(d); - }); - }, - - getDate: function(){ - return this._utc_to_local(this.getUTCDate()); - }, - - getUTCDate: function(){ - return new Date(this.dates.get(-1)); - }, - - setDates: function(){ - var args = $.isArray(arguments[0]) ? arguments[0] : arguments; - this.update.apply(this, args); - this._trigger('changeDate'); - this.setValue(); - }, - - setUTCDates: function(){ - var args = $.isArray(arguments[0]) ? arguments[0] : arguments; - this.update.apply(this, $.map(args, this._utc_to_local)); - this._trigger('changeDate'); - this.setValue(); - }, - - setDate: alias('setDates'), - setUTCDate: alias('setUTCDates'), - - setValue: function(){ - var formatted = this.getFormattedDate(); - if (!this.isInput){ - if (this.component){ - this.element.find('input').val(formatted).change(); - } - } - else { - this.element.val(formatted).change(); - } - }, - - getFormattedDate: function(format){ - if (format === undefined) - format = this.o.format; - - var lang = this.o.language; - return $.map(this.dates, function(d){ - return DPGlobal.formatDate(d, format, lang); - }).join(this.o.multidateSeparator); - }, - - setStartDate: function(startDate){ - this._process_options({startDate: startDate}); - this.update(); - this.updateNavArrows(); - }, - - setEndDate: function(endDate){ - this._process_options({endDate: endDate}); - this.update(); - this.updateNavArrows(); - }, - - setDaysOfWeekDisabled: function(daysOfWeekDisabled){ - this._process_options({daysOfWeekDisabled: daysOfWeekDisabled}); - this.update(); - this.updateNavArrows(); - }, - - place: function(){ - if (this.isInline) - return; - var calendarWidth = this.picker.outerWidth(), - calendarHeight = this.picker.outerHeight(), - visualPadding = 10, - windowWidth = $window.width(), - windowHeight = $window.height(), - scrollTop = $window.scrollTop(); - - var zIndex = parseInt(this.element.parents().filter(function(){ - return $(this).css('z-index') !== 'auto'; - }).first().css('z-index'))+10; - var offset = this.component ? this.component.parent().offset() : this.element.offset(); - var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false); - var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false); - var left = offset.left, - top = offset.top; - - this.picker.removeClass( - 'datepicker-orient-top datepicker-orient-bottom '+ - 'datepicker-orient-right datepicker-orient-left' - ); - - if (this.o.orientation.x !== 'auto'){ - this.picker.addClass('datepicker-orient-' + this.o.orientation.x); - if (this.o.orientation.x === 'right') - left -= calendarWidth - width; - } - // auto x orientation is best-placement: if it crosses a window - // edge, fudge it sideways - else { - // Default to left - this.picker.addClass('datepicker-orient-left'); - if (offset.left < 0) - left -= offset.left - visualPadding; - else if (offset.left + calendarWidth > windowWidth) - left = windowWidth - calendarWidth - visualPadding; - } - - // auto y orientation is best-situation: top or bottom, no fudging, - // decision based on which shows more of the calendar - var yorient = this.o.orientation.y, - top_overflow, bottom_overflow; - if (yorient === 'auto'){ - top_overflow = -scrollTop + offset.top - calendarHeight; - bottom_overflow = scrollTop + windowHeight - (offset.top + height + calendarHeight); - if (Math.max(top_overflow, bottom_overflow) === bottom_overflow) - yorient = 'top'; - else - yorient = 'bottom'; - } - this.picker.addClass('datepicker-orient-' + yorient); - if (yorient === 'top') - top += height; - else - top -= calendarHeight + parseInt(this.picker.css('padding-top')); - - this.picker.css({ - top: top, - left: left, - zIndex: zIndex - }); - }, - - _allow_update: true, - update: function(){ - if (!this._allow_update) - return; - - var oldDates = this.dates.copy(), - dates = [], - fromArgs = false; - if (arguments.length){ - $.each(arguments, $.proxy(function(i, date){ - if (date instanceof Date) - date = this._local_to_utc(date); - dates.push(date); - }, this)); - fromArgs = true; - } - else { - dates = this.isInput - ? this.element.val() - : this.element.data('date') || this.element.find('input').val(); - if (dates && this.o.multidate) - dates = dates.split(this.o.multidateSeparator); - else - dates = [dates]; - delete this.element.data().date; - } - - dates = $.map(dates, $.proxy(function(date){ - return DPGlobal.parseDate(date, this.o.format, this.o.language); - }, this)); - dates = $.grep(dates, $.proxy(function(date){ - return ( - date < this.o.startDate || - date > this.o.endDate || - !date - ); - }, this), true); - this.dates.replace(dates); - - if (this.dates.length) - this.viewDate = new Date(this.dates.get(-1)); - else if (this.viewDate < this.o.startDate) - this.viewDate = new Date(this.o.startDate); - else if (this.viewDate > this.o.endDate) - this.viewDate = new Date(this.o.endDate); - - if (fromArgs){ - // setting date by clicking - this.setValue(); - } - else if (dates.length){ - // setting date by typing - if (String(oldDates) !== String(this.dates)) - this._trigger('changeDate'); - } - if (!this.dates.length && oldDates.length) - this._trigger('clearDate'); - - this.fill(); - }, - - fillDow: function(){ - var dowCnt = this.o.weekStart, - html = '<tr>'; - if (this.o.calendarWeeks){ - var cell = '<th class="cw"> </th>'; - html += cell; - this.picker.find('.datepicker-days thead tr:first-child').prepend(cell); - } - while (dowCnt < this.o.weekStart + 7){ - html += '<th class="dow">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>'; - } - html += '</tr>'; - this.picker.find('.datepicker-days thead').append(html); - }, - - fillMonths: function(){ - var html = '', - i = 0; - while (i < 12){ - html += '<span class="month">'+dates[this.o.language].monthsShort[i++]+'</span>'; - } - this.picker.find('.datepicker-months td').html(html); - }, - - setRange: function(range){ - if (!range || !range.length) - delete this.range; - else - this.range = $.map(range, function(d){ - return d.valueOf(); - }); - this.fill(); - }, - - getClassNames: function(date){ - var cls = [], - year = this.viewDate.getUTCFullYear(), - month = this.viewDate.getUTCMonth(), - today = new Date(); - if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){ - cls.push('old'); - } - else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){ - cls.push('new'); - } - if (this.focusDate && date.valueOf() === this.focusDate.valueOf()) - cls.push('focused'); - // Compare internal UTC date with local today, not UTC today - if (this.o.todayHighlight && - date.getUTCFullYear() === today.getFullYear() && - date.getUTCMonth() === today.getMonth() && - date.getUTCDate() === today.getDate()){ - cls.push('today'); - } - if (this.dates.contains(date) !== -1) - cls.push('active'); - if (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate || - $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1){ - cls.push('disabled'); - } - if (this.range){ - if (date > this.range[0] && date < this.range[this.range.length-1]){ - cls.push('range'); - } - if ($.inArray(date.valueOf(), this.range) !== -1){ - cls.push('selected'); - } - } - return cls; - }, - - fill: function(){ - var d = new Date(this.viewDate), - year = d.getUTCFullYear(), - month = d.getUTCMonth(), - startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity, - startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity, - endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity, - endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity, - todaytxt = dates[this.o.language].today || dates['en'].today || '', - cleartxt = dates[this.o.language].clear || dates['en'].clear || '', - tooltip; - this.picker.find('.datepicker-days thead th.datepicker-switch') - .text(dates[this.o.language].months[month]+' '+year); - this.picker.find('tfoot th.today') - .text(todaytxt) - .toggle(this.o.todayBtn !== false); - this.picker.find('tfoot th.clear') - .text(cleartxt) - .toggle(this.o.clearBtn !== false); - this.updateNavArrows(); - this.fillMonths(); - var prevMonth = UTCDate(year, month-1, 28), - day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth()); - prevMonth.setUTCDate(day); - prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7); - var nextMonth = new Date(prevMonth); - nextMonth.setUTCDate(nextMonth.getUTCDate() + 42); - nextMonth = nextMonth.valueOf(); - var html = []; - var clsName; - while (prevMonth.valueOf() < nextMonth){ - if (prevMonth.getUTCDay() === this.o.weekStart){ - html.push('<tr>'); - if (this.o.calendarWeeks){ - // ISO 8601: First week contains first thursday. - // ISO also states week starts on Monday, but we can be more abstract here. - var - // Start of current week: based on weekstart/current date - ws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5), - // Thursday of this week - th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5), - // First Thursday of year, year from thursday - yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5), - // Calendar week: ms between thursdays, div ms per day, div 7 days - calWeek = (th - yth) / 864e5 / 7 + 1; - html.push('<td class="cw">'+ calWeek +'</td>'); - - } - } - clsName = this.getClassNames(prevMonth); - clsName.push('day'); - - if (this.o.beforeShowDay !== $.noop){ - var before = this.o.beforeShowDay(this._utc_to_local(prevMonth)); - if (before === undefined) - before = {}; - else if (typeof(before) === 'boolean') - before = {enabled: before}; - else if (typeof(before) === 'string') - before = {classes: before}; - if (before.enabled === false) - clsName.push('disabled'); - if (before.classes) - clsName = clsName.concat(before.classes.split(/\s+/)); - if (before.tooltip) - tooltip = before.tooltip; - } - - clsName = $.unique(clsName); - html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + '>'+prevMonth.getUTCDate() + '</td>'); - if (prevMonth.getUTCDay() === this.o.weekEnd){ - html.push('</tr>'); - } - prevMonth.setUTCDate(prevMonth.getUTCDate()+1); - } - this.picker.find('.datepicker-days tbody').empty().append(html.join('')); - - var months = this.picker.find('.datepicker-months') - .find('th:eq(1)') - .text(year) - .end() - .find('span').removeClass('active'); - - $.each(this.dates, function(i, d){ - if (d.getUTCFullYear() === year) - months.eq(d.getUTCMonth()).addClass('active'); - }); - - if (year < startYear || year > endYear){ - months.addClass('disabled'); - } - if (year === startYear){ - months.slice(0, startMonth).addClass('disabled'); - } - if (year === endYear){ - months.slice(endMonth+1).addClass('disabled'); - } - - html = ''; - year = parseInt(year/10, 10) * 10; - var yearCont = this.picker.find('.datepicker-years') - .find('th:eq(1)') - .text(year + '-' + (year + 9)) - .end() - .find('td'); - year -= 1; - var years = $.map(this.dates, function(d){ - return d.getUTCFullYear(); - }), - classes; - for (var i = -1; i < 11; i++){ - classes = ['year']; - if (i === -1) - classes.push('old'); - else if (i === 10) - classes.push('new'); - if ($.inArray(year, years) !== -1) - classes.push('active'); - if (year < startYear || year > endYear) - classes.push('disabled'); - html += '<span class="' + classes.join(' ') + '">'+year+'</span>'; - year += 1; - } - yearCont.html(html); - }, - - updateNavArrows: function(){ - if (!this._allow_update) - return; - - var d = new Date(this.viewDate), - year = d.getUTCFullYear(), - month = d.getUTCMonth(); - switch (this.viewMode){ - case 0: - if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){ - this.picker.find('.prev').css({visibility: 'hidden'}); - } - else { - this.picker.find('.prev').css({visibility: 'visible'}); - } - if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){ - this.picker.find('.next').css({visibility: 'hidden'}); - } - else { - this.picker.find('.next').css({visibility: 'visible'}); - } - break; - case 1: - case 2: - if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()){ - this.picker.find('.prev').css({visibility: 'hidden'}); - } - else { - this.picker.find('.prev').css({visibility: 'visible'}); - } - if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()){ - this.picker.find('.next').css({visibility: 'hidden'}); - } - else { - this.picker.find('.next').css({visibility: 'visible'}); - } - break; - } - }, - - click: function(e){ - e.preventDefault(); - var target = $(e.target).closest('span, td, th'), - year, month, day; - if (target.length === 1){ - switch (target[0].nodeName.toLowerCase()){ - case 'th': - switch (target[0].className){ - case 'datepicker-switch': - this.showMode(1); - break; - case 'prev': - case 'next': - var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1); - switch (this.viewMode){ - case 0: - this.viewDate = this.moveMonth(this.viewDate, dir); - this._trigger('changeMonth', this.viewDate); - break; - case 1: - case 2: - this.viewDate = this.moveYear(this.viewDate, dir); - if (this.viewMode === 1) - this._trigger('changeYear', this.viewDate); - break; - } - this.fill(); - break; - case 'today': - var date = new Date(); - date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); - - this.showMode(-2); - var which = this.o.todayBtn === 'linked' ? null : 'view'; - this._setDate(date, which); - break; - case 'clear': - var element; - if (this.isInput) - element = this.element; - else if (this.component) - element = this.element.find('input'); - if (element) - element.val("").change(); - this.update(); - this._trigger('changeDate'); - if (this.o.autoclose) - this.hide(); - break; - } - break; - case 'span': - if (!target.is('.disabled')){ - this.viewDate.setUTCDate(1); - if (target.is('.month')){ - day = 1; - month = target.parent().find('span').index(target); - year = this.viewDate.getUTCFullYear(); - this.viewDate.setUTCMonth(month); - this._trigger('changeMonth', this.viewDate); - if (this.o.minViewMode === 1){ - this._setDate(UTCDate(year, month, day)); - } - } - else { - day = 1; - month = 0; - year = parseInt(target.text(), 10)||0; - this.viewDate.setUTCFullYear(year); - this._trigger('changeYear', this.viewDate); - if (this.o.minViewMode === 2){ - this._setDate(UTCDate(year, month, day)); - } - } - this.showMode(-1); - this.fill(); - } - break; - case 'td': - if (target.is('.day') && !target.is('.disabled')){ - day = parseInt(target.text(), 10)||1; - year = this.viewDate.getUTCFullYear(); - month = this.viewDate.getUTCMonth(); - if (target.is('.old')){ - if (month === 0){ - month = 11; - year -= 1; - } - else { - month -= 1; - } - } - else if (target.is('.new')){ - if (month === 11){ - month = 0; - year += 1; - } - else { - month += 1; - } - } - this._setDate(UTCDate(year, month, day)); - } - break; - } - } - if (this.picker.is(':visible') && this._focused_from){ - $(this._focused_from).focus(); - } - delete this._focused_from; - }, - - _toggle_multidate: function(date){ - var ix = this.dates.contains(date); - if (!date){ - this.dates.clear(); - } - else if (ix !== -1){ - this.dates.remove(ix); - } - else { - this.dates.push(date); - } - if (typeof this.o.multidate === 'number') - while (this.dates.length > this.o.multidate) - this.dates.remove(0); - }, - - _setDate: function(date, which){ - if (!which || which === 'date') - this._toggle_multidate(date && new Date(date)); - if (!which || which === 'view') - this.viewDate = date && new Date(date); - - this.fill(); - this.setValue(); - this._trigger('changeDate'); - var element; - if (this.isInput){ - element = this.element; - } - else if (this.component){ - element = this.element.find('input'); - } - if (element){ - element.change(); - } - if (this.o.autoclose && (!which || which === 'date')){ - this.hide(); - } - }, - - moveMonth: function(date, dir){ - if (!date) - return undefined; - if (!dir) - return date; - var new_date = new Date(date.valueOf()), - day = new_date.getUTCDate(), - month = new_date.getUTCMonth(), - mag = Math.abs(dir), - new_month, test; - dir = dir > 0 ? 1 : -1; - if (mag === 1){ - test = dir === -1 - // If going back one month, make sure month is not current month - // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02) - ? function(){ - return new_date.getUTCMonth() === month; - } - // If going forward one month, make sure month is as expected - // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02) - : function(){ - return new_date.getUTCMonth() !== new_month; - }; - new_month = month + dir; - new_date.setUTCMonth(new_month); - // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11 - if (new_month < 0 || new_month > 11) - new_month = (new_month + 12) % 12; - } - else { - // For magnitudes >1, move one month at a time... - for (var i=0; i < mag; i++) - // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)... - new_date = this.moveMonth(new_date, dir); - // ...then reset the day, keeping it in the new month - new_month = new_date.getUTCMonth(); - new_date.setUTCDate(day); - test = function(){ - return new_month !== new_date.getUTCMonth(); - }; - } - // Common date-resetting loop -- if date is beyond end of month, make it - // end of month - while (test()){ - new_date.setUTCDate(--day); - new_date.setUTCMonth(new_month); - } - return new_date; - }, - - moveYear: function(date, dir){ - return this.moveMonth(date, dir*12); - }, - - dateWithinRange: function(date){ - return date >= this.o.startDate && date <= this.o.endDate; - }, - - keydown: function(e){ - if (this.picker.is(':not(:visible)')){ - if (e.keyCode === 27) // allow escape to hide and re-show picker - this.show(); - return; - } - var dateChanged = false, - dir, newDate, newViewDate, - focusDate = this.focusDate || this.viewDate; - switch (e.keyCode){ - case 27: // escape - if (this.focusDate){ - this.focusDate = null; - this.viewDate = this.dates.get(-1) || this.viewDate; - this.fill(); - } - else - this.hide(); - e.preventDefault(); - break; - case 37: // left - case 39: // right - if (!this.o.keyboardNavigation) - break; - dir = e.keyCode === 37 ? -1 : 1; - if (e.ctrlKey){ - newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir); - newViewDate = this.moveYear(focusDate, dir); - this._trigger('changeYear', this.viewDate); - } - else if (e.shiftKey){ - newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir); - newViewDate = this.moveMonth(focusDate, dir); - this._trigger('changeMonth', this.viewDate); - } - else { - newDate = new Date(this.dates.get(-1) || UTCToday()); - newDate.setUTCDate(newDate.getUTCDate() + dir); - newViewDate = new Date(focusDate); - newViewDate.setUTCDate(focusDate.getUTCDate() + dir); - } - if (this.dateWithinRange(newDate)){ - this.focusDate = this.viewDate = newViewDate; - this.setValue(); - this.fill(); - e.preventDefault(); - } - break; - case 38: // up - case 40: // down - if (!this.o.keyboardNavigation) - break; - dir = e.keyCode === 38 ? -1 : 1; - if (e.ctrlKey){ - newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir); - newViewDate = this.moveYear(focusDate, dir); - this._trigger('changeYear', this.viewDate); - } - else if (e.shiftKey){ - newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir); - newViewDate = this.moveMonth(focusDate, dir); - this._trigger('changeMonth', this.viewDate); - } - else { - newDate = new Date(this.dates.get(-1) || UTCToday()); - newDate.setUTCDate(newDate.getUTCDate() + dir * 7); - newViewDate = new Date(focusDate); - newViewDate.setUTCDate(focusDate.getUTCDate() + dir * 7); - } - if (this.dateWithinRange(newDate)){ - this.focusDate = this.viewDate = newViewDate; - this.setValue(); - this.fill(); - e.preventDefault(); - } - break; - case 32: // spacebar - // Spacebar is used in manually typing dates in some formats. - // As such, its behavior should not be hijacked. - break; - case 13: // enter - focusDate = this.focusDate || this.dates.get(-1) || this.viewDate; - this._toggle_multidate(focusDate); - dateChanged = true; - this.focusDate = null; - this.viewDate = this.dates.get(-1) || this.viewDate; - this.setValue(); - this.fill(); - if (this.picker.is(':visible')){ - e.preventDefault(); - if (this.o.autoclose) - this.hide(); - } - break; - case 9: // tab - this.focusDate = null; - this.viewDate = this.dates.get(-1) || this.viewDate; - this.fill(); - this.hide(); - break; - } - if (dateChanged){ - if (this.dates.length) - this._trigger('changeDate'); - else - this._trigger('clearDate'); - var element; - if (this.isInput){ - element = this.element; - } - else if (this.component){ - element = this.element.find('input'); - } - if (element){ - element.change(); - } - } - }, - - showMode: function(dir){ - if (dir){ - this.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir)); - } - this.picker - .find('>div') - .hide() - .filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName) - .css('display', 'block'); - this.updateNavArrows(); - } - }; - - var DateRangePicker = function(element, options){ - this.element = $(element); - this.inputs = $.map(options.inputs, function(i){ - return i.jquery ? i[0] : i; - }); - delete options.inputs; - - $(this.inputs) - .datepicker(options) - .bind('changeDate', $.proxy(this.dateUpdated, this)); - - this.pickers = $.map(this.inputs, function(i){ - return $(i).data('datepicker'); - }); - this.updateDates(); - }; - DateRangePicker.prototype = { - updateDates: function(){ - this.dates = $.map(this.pickers, function(i){ - return i.getUTCDate(); - }); - this.updateRanges(); - }, - updateRanges: function(){ - var range = $.map(this.dates, function(d){ - return d.valueOf(); - }); - $.each(this.pickers, function(i, p){ - p.setRange(range); - }); - }, - dateUpdated: function(e){ - // `this.updating` is a workaround for preventing infinite recursion - // between `changeDate` triggering and `setUTCDate` calling. Until - // there is a better mechanism. - if (this.updating) - return; - this.updating = true; - - var dp = $(e.target).data('datepicker'), - new_date = dp.getUTCDate(), - i = $.inArray(e.target, this.inputs), - l = this.inputs.length; - if (i === -1) - return; - - $.each(this.pickers, function(i, p){ - if (!p.getUTCDate()) - p.setUTCDate(new_date); - }); - - if (new_date < this.dates[i]){ - // Date being moved earlier/left - while (i >= 0 && new_date < this.dates[i]){ - this.pickers[i--].setUTCDate(new_date); - } - } - else if (new_date > this.dates[i]){ - // Date being moved later/right - while (i < l && new_date > this.dates[i]){ - this.pickers[i++].setUTCDate(new_date); - } - } - this.updateDates(); - - delete this.updating; - }, - remove: function(){ - $.map(this.pickers, function(p){ p.remove(); }); - delete this.element.data().datepicker; - } - }; - - function opts_from_el(el, prefix){ - // Derive options from element data-attrs - var data = $(el).data(), - out = {}, inkey, - replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])'); - prefix = new RegExp('^' + prefix.toLowerCase()); - function re_lower(_,a){ - return a.toLowerCase(); - } - for (var key in data) - if (prefix.test(key)){ - inkey = key.replace(replace, re_lower); - out[inkey] = data[key]; - } - return out; - } - - function opts_from_locale(lang){ - // Derive options from locale plugins - var out = {}; - // Check if "de-DE" style date is available, if not language should - // fallback to 2 letter code eg "de" - if (!dates[lang]){ - lang = lang.split('-')[0]; - if (!dates[lang]) - return; - } - var d = dates[lang]; - $.each(locale_opts, function(i,k){ - if (k in d) - out[k] = d[k]; - }); - return out; - } - - var old = $.fn.datepicker; - $.fn.datepicker = function(option){ - var args = Array.apply(null, arguments); - args.shift(); - var internal_return; - this.each(function(){ - var $this = $(this), - data = $this.data('datepicker'), - options = typeof option === 'object' && option; - if (!data){ - var elopts = opts_from_el(this, 'date'), - // Preliminary otions - xopts = $.extend({}, defaults, elopts, options), - locopts = opts_from_locale(xopts.language), - // Options priority: js args, data-attrs, locales, defaults - opts = $.extend({}, defaults, locopts, elopts, options); - if ($this.is('.input-daterange') || opts.inputs){ - var ropts = { - inputs: opts.inputs || $this.find('input').toArray() - }; - $this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts)))); - } - else { - $this.data('datepicker', (data = new Datepicker(this, opts))); - } - } - if (typeof option === 'string' && typeof data[option] === 'function'){ - internal_return = data[option].apply(data, args); - if (internal_return !== undefined) - return false; - } - }); - if (internal_return !== undefined) - return internal_return; - else - return this; - }; - - var defaults = $.fn.datepicker.defaults = { - autoclose: false, - beforeShowDay: $.noop, - calendarWeeks: false, - clearBtn: false, - daysOfWeekDisabled: [], - endDate: Infinity, - forceParse: true, - format: 'mm/dd/yyyy', - keyboardNavigation: true, - language: 'en', - minViewMode: 0, - multidate: false, - multidateSeparator: ',', - orientation: "auto", - rtl: false, - startDate: -Infinity, - startView: 0, - todayBtn: false, - todayHighlight: false, - weekStart: 0 - }; - var locale_opts = $.fn.datepicker.locale_opts = [ - 'format', - 'rtl', - 'weekStart' - ]; - $.fn.datepicker.Constructor = Datepicker; - var dates = $.fn.datepicker.dates = { - en: { - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], - daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], - daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - today: "Today", - clear: "Clear" - } - }; - - var DPGlobal = { - modes: [ - { - clsName: 'days', - navFnc: 'Month', - navStep: 1 - }, - { - clsName: 'months', - navFnc: 'FullYear', - navStep: 1 - }, - { - clsName: 'years', - navFnc: 'FullYear', - navStep: 10 - }], - isLeapYear: function(year){ - return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)); - }, - getDaysInMonth: function(year, month){ - return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; - }, - validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g, - nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g, - parseFormat: function(format){ - // IE treats \0 as a string end in inputs (truncating the value), - // so it's a bad format delimiter, anyway - var separators = format.replace(this.validParts, '\0').split('\0'), - parts = format.match(this.validParts); - if (!separators || !separators.length || !parts || parts.length === 0){ - throw new Error("Invalid date format."); - } - return {separators: separators, parts: parts}; - }, - parseDate: function(date, format, language){ - if (!date) - return undefined; - if (date instanceof Date) - return date; - if (typeof format === 'string') - format = DPGlobal.parseFormat(format); - var part_re = /([\-+]\d+)([dmwy])/, - parts = date.match(/([\-+]\d+)([dmwy])/g), - part, dir, i; - if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)){ - date = new Date(); - for (i=0; i < parts.length; i++){ - part = part_re.exec(parts[i]); - dir = parseInt(part[1]); - switch (part[2]){ - case 'd': - date.setUTCDate(date.getUTCDate() + dir); - break; - case 'm': - date = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir); - break; - case 'w': - date.setUTCDate(date.getUTCDate() + dir * 7); - break; - case 'y': - date = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir); - break; - } - } - return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0); - } - parts = date && date.match(this.nonpunctuation) || []; - date = new Date(); - var parsed = {}, - setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'], - setters_map = { - yyyy: function(d,v){ - return d.setUTCFullYear(v); - }, - yy: function(d,v){ - return d.setUTCFullYear(2000+v); - }, - m: function(d,v){ - if (isNaN(d)) - return d; - v -= 1; - while (v < 0) v += 12; - v %= 12; - d.setUTCMonth(v); - while (d.getUTCMonth() !== v) - d.setUTCDate(d.getUTCDate()-1); - return d; - }, - d: function(d,v){ - return d.setUTCDate(v); - } - }, - val, filtered; - setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m']; - setters_map['dd'] = setters_map['d']; - date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); - var fparts = format.parts.slice(); - // Remove noop parts - if (parts.length !== fparts.length){ - fparts = $(fparts).filter(function(i,p){ - return $.inArray(p, setters_order) !== -1; - }).toArray(); - } - // Process remainder - function match_part(){ - var m = this.slice(0, parts[i].length), - p = parts[i].slice(0, m.length); - return m === p; - } - if (parts.length === fparts.length){ - var cnt; - for (i=0, cnt = fparts.length; i < cnt; i++){ - val = parseInt(parts[i], 10); - part = fparts[i]; - if (isNaN(val)){ - switch (part){ - case 'MM': - filtered = $(dates[language].months).filter(match_part); - val = $.inArray(filtered[0], dates[language].months) + 1; - break; - case 'M': - filtered = $(dates[language].monthsShort).filter(match_part); - val = $.inArray(filtered[0], dates[language].monthsShort) + 1; - break; - } - } - parsed[part] = val; - } - var _date, s; - for (i=0; i < setters_order.length; i++){ - s = setters_order[i]; - if (s in parsed && !isNaN(parsed[s])){ - _date = new Date(date); - setters_map[s](_date, parsed[s]); - if (!isNaN(_date)) - date = _date; - } - } - } - return date; - }, - formatDate: function(date, format, language){ - if (!date) - return ''; - if (typeof format === 'string') - format = DPGlobal.parseFormat(format); - var val = { - d: date.getUTCDate(), - D: dates[language].daysShort[date.getUTCDay()], - DD: dates[language].days[date.getUTCDay()], - m: date.getUTCMonth() + 1, - M: dates[language].monthsShort[date.getUTCMonth()], - MM: dates[language].months[date.getUTCMonth()], - yy: date.getUTCFullYear().toString().substring(2), - yyyy: date.getUTCFullYear() - }; - val.dd = (val.d < 10 ? '0' : '') + val.d; - val.mm = (val.m < 10 ? '0' : '') + val.m; - date = []; - var seps = $.extend([], format.separators); - for (var i=0, cnt = format.parts.length; i <= cnt; i++){ - if (seps.length) - date.push(seps.shift()); - date.push(val[format.parts[i]]); - } - return date.join(''); - }, - headTemplate: '<thead>'+ - '<tr>'+ - '<th class="prev">«</th>'+ - '<th colspan="5" class="datepicker-switch"></th>'+ - '<th class="next">»</th>'+ - '</tr>'+ - '</thead>', - contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>', - footTemplate: '<tfoot>'+ - '<tr>'+ - '<th colspan="7" class="today"></th>'+ - '</tr>'+ - '<tr>'+ - '<th colspan="7" class="clear"></th>'+ - '</tr>'+ - '</tfoot>' - }; - DPGlobal.template = '<div class="datepicker">'+ - '<div class="datepicker-days">'+ - '<table class=" table-condensed">'+ - DPGlobal.headTemplate+ - '<tbody></tbody>'+ - DPGlobal.footTemplate+ - '</table>'+ - '</div>'+ - '<div class="datepicker-months">'+ - '<table class="table-condensed">'+ - DPGlobal.headTemplate+ - DPGlobal.contTemplate+ - DPGlobal.footTemplate+ - '</table>'+ - '</div>'+ - '<div class="datepicker-years">'+ - '<table class="table-condensed">'+ - DPGlobal.headTemplate+ - DPGlobal.contTemplate+ - DPGlobal.footTemplate+ - '</table>'+ - '</div>'+ - '</div>'; - - $.fn.datepicker.DPGlobal = DPGlobal; - - - /* DATEPICKER NO CONFLICT - * =================== */ - - $.fn.datepicker.noConflict = function(){ - $.fn.datepicker = old; - return this; - }; - - - /* DATEPICKER DATA-API - * ================== */ - - $(document).on( - 'focus.datepicker.data-api click.datepicker.data-api', - '[data-provide="datepicker"]', - function(e){ - var $this = $(this); - if ($this.data('datepicker')) - return; - e.preventDefault(); - // component click requires us to explicitly show it - $this.datepicker('show'); - } - ); - $(function(){ - $('[data-provide="datepicker-inline"]').datepicker(); - }); - -}(window.jQuery)); diff --git a/public/js/gogs.js b/public/js/gogs.js index a7a842db..8802ea64 100644 --- a/public/js/gogs.js +++ b/public/js/gogs.js @@ -1,3 +1,5 @@ +'use strict'; + var csrf; function initInstall() { @@ -40,44 +42,50 @@ function initRepository() { } // Labels - if ($('.repository.labels').length == 0) { - return; + if ($('.repository.labels').length > 0) { + $('.color-picker').each(function () { + $(this).minicolors(); + }); + $('.precolors .color').click(function () { + var color_hex = $(this).data('color-hex') + $('.color-picker').val(color_hex); + $('.minicolors-swatch-color').css("background-color", color_hex); + }); + $('.edit-label-button').click(function () { + $('#label-modal-id').val($(this).data('id')); + $('#label-modal-title').val($(this).data('title')); + $('#label-modal-color').val($(this).data('color')) + $('.minicolors-swatch-color').css("background-color", $(this).data('color')); + $('.edit-label.modal').modal({ + onApprove: function () { + $('.edit-label.form').submit(); + } + }).modal('show'); + return false; + }); } - $('.color-picker').each(function () { - $(this).minicolors(); - }); - $('.precolors .color').click(function () { - var color_hex = $(this).data('color-hex') - $('.color-picker').val(color_hex); - $('.minicolors-swatch-color').css("background-color", color_hex); - }); - $('.delete-label-button').click(function () { - var $this = $(this); - $('.delete-label.modal').modal({ - closable: false, - onApprove: function () { - $.post($this.data('url'), { - "_csrf": csrf, - "id": $this.data("id") - }).done(function (data) { - window.location.href = data.redirect; - }); - } - }).modal('show'); - return false; - }); - $('.edit-label-button').click(function () { - $('#label-modal-id').val($(this).data('id')); - $('#label-modal-title').val($(this).data('title')); - $('#label-modal-color').val($(this).data('color')) - $('.minicolors-swatch-color').css("background-color", $(this).data('color')); - $('.edit-label.modal').modal({ - onApprove: function () { - $('.edit-label.form').submit(); + + // Milestones + if ($('.repository.milestones').length > 0) { + + } + if ($('.repository.new.milestone').length > 0) { + var $datepicker = $('.milestone.datepicker') + $datepicker.datetimepicker({ + lang: $datepicker.data('lang'), + inline: true, + timepicker: false, + startDate: $datepicker.data('start-date'), + formatDate: 'Y-m-d', + onSelectDate: function (ct) { + $('#deadline').val(ct.dateFormat('Y-m-d')); } - }).modal('show'); - return false; - }); + }); + $('#clear-date').click(function () { + $('#deadline').val(''); + return false; + }); + } }; $(document).ready(function () { @@ -93,8 +101,28 @@ $(document).ready(function () { }); $('.ui.accordion').accordion(); $('.ui.checkbox').checkbox(); + $('.ui.progress').progress({ + showActivity: false + }); $('.poping.up').popup(); + // Helpers. + $('.delete-button').click(function () { + var $this = $(this); + $('.delete.modal').modal({ + closable: false, + onApprove: function () { + $.post($this.data('url'), { + "_csrf": csrf, + "id": $this.data("id") + }).done(function (data) { + window.location.href = data.redirect; + }); + } + }).modal('show'); + return false; + }); + initInstall(); initRepository(); });
\ No newline at end of file diff --git a/public/js/jquery.validate.min.js b/public/js/jquery.validate.min.js deleted file mode 100644 index cbaf5109..00000000 --- a/public/js/jquery.validate.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery Validation Plugin - v1.11.1 - 3/22/2013\n* https://github.com/jzaefferer/jquery-validation -* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT */(function(t){t.extend(t.fn,{validate:function(e){if(!this.length)return e&&e.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."),void 0;var i=t.data(this[0],"validator");return i?i:(this.attr("novalidate","novalidate"),i=new t.validator(e,this[0]),t.data(this[0],"validator",i),i.settings.onsubmit&&(this.validateDelegate(":submit","click",function(e){i.settings.submitHandler&&(i.submitButton=e.target),t(e.target).hasClass("cancel")&&(i.cancelSubmit=!0),void 0!==t(e.target).attr("formnovalidate")&&(i.cancelSubmit=!0)}),this.submit(function(e){function s(){var s;return i.settings.submitHandler?(i.submitButton&&(s=t("<input type='hidden'/>").attr("name",i.submitButton.name).val(t(i.submitButton).val()).appendTo(i.currentForm)),i.settings.submitHandler.call(i,i.currentForm,e),i.submitButton&&s.remove(),!1):!0}return i.settings.debug&&e.preventDefault(),i.cancelSubmit?(i.cancelSubmit=!1,s()):i.form()?i.pendingRequest?(i.formSubmitted=!0,!1):s():(i.focusInvalid(),!1)})),i)},valid:function(){if(t(this[0]).is("form"))return this.validate().form();var e=!0,i=t(this[0].form).validate();return this.each(function(){e=e&&i.element(this)}),e},removeAttrs:function(e){var i={},s=this;return t.each(e.split(/\s/),function(t,e){i[e]=s.attr(e),s.removeAttr(e)}),i},rules:function(e,i){var s=this[0];if(e){var r=t.data(s.form,"validator").settings,n=r.rules,a=t.validator.staticRules(s);switch(e){case"add":t.extend(a,t.validator.normalizeRule(i)),delete a.messages,n[s.name]=a,i.messages&&(r.messages[s.name]=t.extend(r.messages[s.name],i.messages));break;case"remove":if(!i)return delete n[s.name],a;var u={};return t.each(i.split(/\s/),function(t,e){u[e]=a[e],delete a[e]}),u}}var o=t.validator.normalizeRules(t.extend({},t.validator.classRules(s),t.validator.attributeRules(s),t.validator.dataRules(s),t.validator.staticRules(s)),s);if(o.required){var l=o.required;delete o.required,o=t.extend({required:l},o)}return o}}),t.extend(t.expr[":"],{blank:function(e){return!t.trim(""+t(e).val())},filled:function(e){return!!t.trim(""+t(e).val())},unchecked:function(e){return!t(e).prop("checked")}}),t.validator=function(e,i){this.settings=t.extend(!0,{},t.validator.defaults,e),this.currentForm=i,this.init()},t.validator.format=function(e,i){return 1===arguments.length?function(){var i=t.makeArray(arguments);return i.unshift(e),t.validator.format.apply(this,i)}:(arguments.length>2&&i.constructor!==Array&&(i=t.makeArray(arguments).slice(1)),i.constructor!==Array&&(i=[i]),t.each(i,function(t,i){e=e.replace(RegExp("\\{"+t+"\\}","g"),function(){return i})}),e)},t.extend(t.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:t([]),errorLabelContainer:t([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(t){this.lastActive=t,this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,t,this.settings.errorClass,this.settings.validClass),this.addWrapper(this.errorsFor(t)).hide())},onfocusout:function(t){this.checkable(t)||!(t.name in this.submitted)&&this.optional(t)||this.element(t)},onkeyup:function(t,e){(9!==e.which||""!==this.elementValue(t))&&(t.name in this.submitted||t===this.lastElement)&&this.element(t)},onclick:function(t){t.name in this.submitted?this.element(t):t.parentNode.name in this.submitted&&this.element(t.parentNode)},highlight:function(e,i,s){"radio"===e.type?this.findByName(e.name).addClass(i).removeClass(s):t(e).addClass(i).removeClass(s)},unhighlight:function(e,i,s){"radio"===e.type?this.findByName(e.name).removeClass(i).addClass(s):t(e).removeClass(i).addClass(s)}},setDefaults:function(e){t.extend(t.validator.defaults,e)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:t.validator.format("Please enter no more than {0} characters."),minlength:t.validator.format("Please enter at least {0} characters."),rangelength:t.validator.format("Please enter a value between {0} and {1} characters long."),range:t.validator.format("Please enter a value between {0} and {1}."),max:t.validator.format("Please enter a value less than or equal to {0}."),min:t.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function e(e){var i=t.data(this[0].form,"validator"),s="on"+e.type.replace(/^validate/,"");i.settings[s]&&i.settings[s].call(i,this[0],e)}this.labelContainer=t(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||t(this.currentForm),this.containers=t(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var i=this.groups={};t.each(this.settings.groups,function(e,s){"string"==typeof s&&(s=s.split(/\s/)),t.each(s,function(t,s){i[s]=e})});var s=this.settings.rules;t.each(s,function(e,i){s[e]=t.validator.normalizeRule(i)}),t(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",e).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",e),this.settings.invalidHandler&&t(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),t.extend(this.submitted,this.errorMap),this.invalid=t.extend({},this.errorMap),this.valid()||t(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var t=0,e=this.currentElements=this.elements();e[t];t++)this.check(e[t]);return this.valid()},element:function(e){e=this.validationTargetFor(this.clean(e)),this.lastElement=e,this.prepareElement(e),this.currentElements=t(e);var i=this.check(e)!==!1;return i?delete this.invalid[e.name]:this.invalid[e.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),i},showErrors:function(e){if(e){t.extend(this.errorMap,e),this.errorList=[];for(var i in e)this.errorList.push({message:e[i],element:this.findByName(i)[0]});this.successList=t.grep(this.successList,function(t){return!(t.name in e)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){t.fn.resetForm&&t(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(t){var e=0;for(var i in t)e++;return e},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{t(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(e){}},findLastActive:function(){var e=this.lastActive;return e&&1===t.grep(this.errorList,function(t){return t.element.name===e.name}).length&&e},elements:function(){var e=this,i={};return t(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&&e.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in i||!e.objectLength(t(this).rules())?!1:(i[this.name]=!0,!0)})},clean:function(e){return t(e)[0]},errors:function(){var e=this.settings.errorClass.replace(" ",".");return t(this.settings.errorElement+"."+e,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=t([]),this.toHide=t([]),this.currentElements=t([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(t){this.reset(),this.toHide=this.errorsFor(t)},elementValue:function(e){var i=t(e).attr("type"),s=t(e).val();return"radio"===i||"checkbox"===i?t("input[name='"+t(e).attr("name")+"']:checked").val():"string"==typeof s?s.replace(/\r/g,""):s},check:function(e){e=this.validationTargetFor(this.clean(e));var i,s=t(e).rules(),r=!1,n=this.elementValue(e);for(var a in s){var u={method:a,parameters:s[a]};try{if(i=t.validator.methods[a].call(this,n,e,u.parameters),"dependency-mismatch"===i){r=!0;continue}if(r=!1,"pending"===i)return this.toHide=this.toHide.not(this.errorsFor(e)),void 0;if(!i)return this.formatAndAdd(e,u),!1}catch(o){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+e.id+", check the '"+u.method+"' method.",o),o}}return r?void 0:(this.objectLength(s)&&this.successList.push(e),!0)},customDataMessage:function(e,i){return t(e).data("msg-"+i.toLowerCase())||e.attributes&&t(e).attr("data-msg-"+i.toLowerCase())},customMessage:function(t,e){var i=this.settings.messages[t];return i&&(i.constructor===String?i:i[e])},findDefined:function(){for(var t=0;arguments.length>t;t++)if(void 0!==arguments[t])return arguments[t];return void 0},defaultMessage:function(e,i){return this.findDefined(this.customMessage(e.name,i),this.customDataMessage(e,i),!this.settings.ignoreTitle&&e.title||void 0,t.validator.messages[i],"<strong>Warning: No message defined for "+e.name+"</strong>")},formatAndAdd:function(e,i){var s=this.defaultMessage(e,i.method),r=/\$?\{(\d+)\}/g;"function"==typeof s?s=s.call(this,i.parameters,e):r.test(s)&&(s=t.validator.format(s.replace(r,"{$1}"),i.parameters)),this.errorList.push({message:s,element:e}),this.errorMap[e.name]=s,this.submitted[e.name]=s},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e;for(t=0;this.errorList[t];t++){var i=this.errorList[t];this.settings.highlight&&this.settings.highlight.call(this,i.element,this.settings.errorClass,this.settings.validClass),this.showLabel(i.element,i.message)}if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return t(this.errorList).map(function(){return this.element})},showLabel:function(e,i){var s=this.errorsFor(e);s.length?(s.removeClass(this.settings.validClass).addClass(this.settings.errorClass),s.html(i)):(s=t("<"+this.settings.errorElement+">").attr("for",this.idOrName(e)).addClass(this.settings.errorClass).html(i||""),this.settings.wrapper&&(s=s.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.append(s).length||(this.settings.errorPlacement?this.settings.errorPlacement(s,t(e)):s.insertAfter(e))),!i&&this.settings.success&&(s.text(""),"string"==typeof this.settings.success?s.addClass(this.settings.success):this.settings.success(s,e)),this.toShow=this.toShow.add(s)},errorsFor:function(e){var i=this.idOrName(e);return this.errors().filter(function(){return t(this).attr("for")===i})},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(t){return this.checkable(t)&&(t=this.findByName(t.name).not(this.settings.ignore)[0]),t},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(e){return t(this.currentForm).find("[name='"+e+"']")},getLength:function(e,i){switch(i.nodeName.toLowerCase()){case"select":return t("option:selected",i).length;case"input":if(this.checkable(i))return this.findByName(i.name).filter(":checked").length}return e.length},depend:function(t,e){return this.dependTypes[typeof t]?this.dependTypes[typeof t](t,e):!0},dependTypes:{"boolean":function(t){return t},string:function(e,i){return!!t(e,i.form).length},"function":function(t,e){return t(e)}},optional:function(e){var i=this.elementValue(e);return!t.validator.methods.required.call(this,i,e)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,this.pending[t.name]=!0)},stopRequest:function(e,i){this.pendingRequest--,0>this.pendingRequest&&(this.pendingRequest=0),delete this.pending[e.name],i&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(t(this.currentForm).submit(),this.formSubmitted=!1):!i&&0===this.pendingRequest&&this.formSubmitted&&(t(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e){return t.data(e,"previousValue")||t.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,i){e.constructor===String?this.classRuleSettings[e]=i:t.extend(this.classRuleSettings,e)},classRules:function(e){var i={},s=t(e).attr("class");return s&&t.each(s.split(" "),function(){this in t.validator.classRuleSettings&&t.extend(i,t.validator.classRuleSettings[this])}),i},attributeRules:function(e){var i={},s=t(e),r=s[0].getAttribute("type");for(var n in t.validator.methods){var a;"required"===n?(a=s.get(0).getAttribute(n),""===a&&(a=!0),a=!!a):a=s.attr(n),/min|max/.test(n)&&(null===r||/number|range|text/.test(r))&&(a=Number(a)),a?i[n]=a:r===n&&"range"!==r&&(i[n]=!0)}return i.maxlength&&/-1|2147483647|524288/.test(i.maxlength)&&delete i.maxlength,i},dataRules:function(e){var i,s,r={},n=t(e);for(i in t.validator.methods)s=n.data("rule-"+i.toLowerCase()),void 0!==s&&(r[i]=s);return r},staticRules:function(e){var i={},s=t.data(e.form,"validator");return s.settings.rules&&(i=t.validator.normalizeRule(s.settings.rules[e.name])||{}),i},normalizeRules:function(e,i){return t.each(e,function(s,r){if(r===!1)return delete e[s],void 0;if(r.param||r.depends){var n=!0;switch(typeof r.depends){case"string":n=!!t(r.depends,i.form).length;break;case"function":n=r.depends.call(i,i)}n?e[s]=void 0!==r.param?r.param:!0:delete e[s]}}),t.each(e,function(s,r){e[s]=t.isFunction(r)?r(i):r}),t.each(["minlength","maxlength"],function(){e[this]&&(e[this]=Number(e[this]))}),t.each(["rangelength","range"],function(){var i;e[this]&&(t.isArray(e[this])?e[this]=[Number(e[this][0]),Number(e[this][1])]:"string"==typeof e[this]&&(i=e[this].split(/[\s,]+/),e[this]=[Number(i[0]),Number(i[1])]))}),t.validator.autoCreateRanges&&(e.min&&e.max&&(e.range=[e.min,e.max],delete e.min,delete e.max),e.minlength&&e.maxlength&&(e.rangelength=[e.minlength,e.maxlength],delete e.minlength,delete e.maxlength)),e},normalizeRule:function(e){if("string"==typeof e){var i={};t.each(e.split(/\s/),function(){i[this]=!0}),e=i}return e},addMethod:function(e,i,s){t.validator.methods[e]=i,t.validator.messages[e]=void 0!==s?s:t.validator.messages[e],3>i.length&&t.validator.addClassRules(e,t.validator.normalizeRule(e))},methods:{required:function(e,i,s){if(!this.depend(s,i))return"dependency-mismatch";if("select"===i.nodeName.toLowerCase()){var r=t(i).val();return r&&r.length>0}return this.checkable(i)?this.getLength(e,i)>0:t.trim(e).length>0},email:function(t,e){return this.optional(e)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(t)},url:function(t,e){return this.optional(e)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(t)},date:function(t,e){return this.optional(e)||!/Invalid|NaN/.test(""+new Date(t))},dateISO:function(t,e){return this.optional(e)||/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(t)},number:function(t,e){return this.optional(e)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)},digits:function(t,e){return this.optional(e)||/^\d+$/.test(t)},creditcard:function(t,e){if(this.optional(e))return"dependency-mismatch";if(/[^0-9 \-]+/.test(t))return!1;var i=0,s=0,r=!1;t=t.replace(/\D/g,"");for(var n=t.length-1;n>=0;n--){var a=t.charAt(n);s=parseInt(a,10),r&&(s*=2)>9&&(s-=9),i+=s,r=!r}return 0===i%10},minlength:function(e,i,s){var r=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||r>=s},maxlength:function(e,i,s){var r=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||s>=r},rangelength:function(e,i,s){var r=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||r>=s[0]&&s[1]>=r},min:function(t,e,i){return this.optional(e)||t>=i},max:function(t,e,i){return this.optional(e)||i>=t},range:function(t,e,i){return this.optional(e)||t>=i[0]&&i[1]>=t},equalTo:function(e,i,s){var r=t(s);return this.settings.onfocusout&&r.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){t(i).valid()}),e===r.val()},remote:function(e,i,s){if(this.optional(i))return"dependency-mismatch";var r=this.previousValue(i);if(this.settings.messages[i.name]||(this.settings.messages[i.name]={}),r.originalMessage=this.settings.messages[i.name].remote,this.settings.messages[i.name].remote=r.message,s="string"==typeof s&&{url:s}||s,r.old===e)return r.valid;r.old=e;var n=this;this.startRequest(i);var a={};return a[i.name]=e,t.ajax(t.extend(!0,{url:s,mode:"abort",port:"validate"+i.name,dataType:"json",data:a,success:function(s){n.settings.messages[i.name].remote=r.originalMessage;var a=s===!0||"true"===s;if(a){var u=n.formSubmitted;n.prepareElement(i),n.formSubmitted=u,n.successList.push(i),delete n.invalid[i.name],n.showErrors()}else{var o={},l=s||n.defaultMessage(i,"remote");o[i.name]=r.message=t.isFunction(l)?l(e):l,n.invalid[i.name]=!0,n.showErrors(o)}r.valid=a,n.stopRequest(i,a)}},s)),"pending"}}}),t.format=t.validator.format})(jQuery),function(t){var e={};if(t.ajaxPrefilter)t.ajaxPrefilter(function(t,i,s){var r=t.port;"abort"===t.mode&&(e[r]&&e[r].abort(),e[r]=s)});else{var i=t.ajax;t.ajax=function(s){var r=("mode"in s?s:t.ajaxSettings).mode,n=("port"in s?s:t.ajaxSettings).port;return"abort"===r?(e[n]&&e[n].abort(),e[n]=i.apply(this,arguments),e[n]):i.apply(this,arguments)}}}(jQuery),function(t){t.extend(t.fn,{validateDelegate:function(e,i,s){return this.bind(i,function(i){var r=t(i.target);return r.is(e)?s.apply(r,arguments):void 0})}})}(jQuery);
\ No newline at end of file diff --git a/public/js/libs/jquery.datetimepicker.js b/public/js/libs/jquery.datetimepicker.js new file mode 100644 index 00000000..9c00413c --- /dev/null +++ b/public/js/libs/jquery.datetimepicker.js @@ -0,0 +1,2073 @@ +/** + * @preserve jQuery DateTimePicker plugin v2.4.5 + * @homepage http://xdsoft.net/jqplugins/datetimepicker/ + * (c) 2014, Chupurnov Valeriy. + */ +/*global document,window,jQuery,setTimeout,clearTimeout,HighlightedDate,getCurrentValue*/ +(function ($) { + 'use strict'; + var default_options = { + i18n: { + ar: { // Arabic + months: [ + "كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول" + ], + dayOfWeek: [ + "ن", "ث", "ع", "خ", "ج", "س", "ح" + ] + }, + ro: { // Romanian + months: [ + "ianuarie", "februarie", "martie", "aprilie", "mai", "iunie", "iulie", "august", "septembrie", "octombrie", "noiembrie", "decembrie" + ], + dayOfWeek: [ + "l", "ma", "mi", "j", "v", "s", "d" + ] + }, + id: { // Indonesian + months: [ + "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" + ], + dayOfWeek: [ + "Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab" + ] + }, + is: { // Icelandic + months: [ + "Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember" + ], + dayOfWeek: [ + "Sun", "Mán", "Þrið", "Mið", "Fim", "Fös", "Lau" + ] + }, + bg: { // Bulgarian + months: [ + "Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември" + ], + dayOfWeek: [ + "Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" + ] + }, + fa: { // Persian/Farsi + months: [ + 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند' + ], + dayOfWeek: [ + 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه' + ] + }, + ru: { // Russian + months: [ + 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь' + ], + dayOfWeek: [ + "Вск", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" + ] + }, + uk: { // Ukrainian + months: [ + 'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень' + ], + dayOfWeek: [ + "Ндл", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Сбт" + ] + }, + en: { // English + months: [ + "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" + ], + dayOfWeek: [ + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + ] + }, + el: { // Ελληνικά + months: [ + "Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος" + ], + dayOfWeek: [ + "Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ" + ] + }, + de: { // German + months: [ + 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' + ], + dayOfWeek: [ + "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" + ] + }, + nl: { // Dutch + months: [ + "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december" + ], + dayOfWeek: [ + "zo", "ma", "di", "wo", "do", "vr", "za" + ] + }, + tr: { // Turkish + months: [ + "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" + ], + dayOfWeek: [ + "Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts" + ] + }, + fr: { //French + months: [ + "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" + ], + dayOfWeek: [ + "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam" + ] + }, + es: { // Spanish + months: [ + "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" + ], + dayOfWeek: [ + "Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb" + ] + }, + th: { // Thai + months: [ + 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม' + ], + dayOfWeek: [ + 'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.' + ] + }, + pl: { // Polish + months: [ + "styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień" + ], + dayOfWeek: [ + "nd", "pn", "wt", "śr", "cz", "pt", "sb" + ] + }, + pt: { // Portuguese + months: [ + "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" + ], + dayOfWeek: [ + "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab" + ] + }, + ch: { // Simplified Chinese + months: [ + "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" + ], + dayOfWeek: [ + "日", "一", "二", "三", "四", "五", "六" + ] + }, + se: { // Swedish + months: [ + "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör" + ] + }, + kr: { // Korean + months: [ + "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" + ], + dayOfWeek: [ + "일", "월", "화", "수", "목", "금", "토" + ] + }, + it: { // Italian + months: [ + "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" + ], + dayOfWeek: [ + "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab" + ] + }, + da: { // Dansk + months: [ + "January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør" + ] + }, + no: { // Norwegian + months: [ + "Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember" + ], + dayOfWeek: [ + "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør" + ] + }, + ja: { // Japanese + months: [ + "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" + ], + dayOfWeek: [ + "日", "月", "火", "水", "木", "金", "土" + ] + }, + vi: { // Vietnamese + months: [ + "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12" + ], + dayOfWeek: [ + "CN", "T2", "T3", "T4", "T5", "T6", "T7" + ] + }, + sl: { // Slovenščina + months: [ + "Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob" + ] + }, + cs: { // Čeština + months: [ + "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec" + ], + dayOfWeek: [ + "Ne", "Po", "Út", "St", "Čt", "Pá", "So" + ] + }, + hu: { // Hungarian + months: [ + "Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December" + ], + dayOfWeek: [ + "Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo" + ] + }, + az: { //Azerbaijanian (Azeri) + months: [ + "Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr" + ], + dayOfWeek: [ + "B", "Be", "Ça", "Ç", "Ca", "C", "Ş" + ] + }, + bs: { //Bosanski + months: [ + "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar" + ], + dayOfWeek: [ + "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub" + ] + }, + ca: { //Català + months: [ + "Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre" + ], + dayOfWeek: [ + "Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds" + ] + }, + 'en-GB': { //English (British) + months: [ + "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" + ], + dayOfWeek: [ + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + ] + }, + et: { //"Eesti" + months: [ + "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember" + ], + dayOfWeek: [ + "P", "E", "T", "K", "N", "R", "L" + ] + }, + eu: { //Euskara + months: [ + "Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua" + ], + dayOfWeek: [ + "Ig.", "Al.", "Ar.", "Az.", "Og.", "Or.", "La." + ] + }, + fi: { //Finnish (Suomi) + months: [ + "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu" + ], + dayOfWeek: [ + "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" + ] + }, + gl: { //Galego + months: [ + "Xan", "Feb", "Maz", "Abr", "Mai", "Xun", "Xul", "Ago", "Set", "Out", "Nov", "Dec" + ], + dayOfWeek: [ + "Dom", "Lun", "Mar", "Mer", "Xov", "Ven", "Sab" + ] + }, + hr: { //Hrvatski + months: [ + "Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac" + ], + dayOfWeek: [ + "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub" + ] + }, + ko: { //Korean (한국어) + months: [ + "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" + ], + dayOfWeek: [ + "일", "월", "화", "수", "목", "금", "토" + ] + }, + lt: { //Lithuanian (lietuvių) + months: [ + "Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio" + ], + dayOfWeek: [ + "Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš" + ] + }, + lv: { //Latvian (Latviešu) + months: [ + "Janvāris", "Februāris", "Marts", "Aprīlis ", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris" + ], + dayOfWeek: [ + "Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "St" + ] + }, + mk: { //Macedonian (Македонски) + months: [ + "јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември" + ], + dayOfWeek: [ + "нед", "пон", "вто", "сре", "чет", "пет", "саб" + ] + }, + mn: { //Mongolian (Монгол) + months: [ + "1-р сар", "2-р сар", "3-р сар", "4-р сар", "5-р сар", "6-р сар", "7-р сар", "8-р сар", "9-р сар", "10-р сар", "11-р сар", "12-р сар" + ], + dayOfWeek: [ + "Дав", "Мяг", "Лха", "Пүр", "Бсн", "Бям", "Ням" + ] + }, + 'pt-BR': { //Português(Brasil) + months: [ + "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" + ], + dayOfWeek: [ + "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" + ] + }, + sk: { //Slovenčina + months: [ + "Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December" + ], + dayOfWeek: [ + "Ne", "Po", "Ut", "St", "Št", "Pi", "So" + ] + }, + sq: { //Albanian (Shqip) + months: [ + "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" + ], + dayOfWeek: [ + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + ] + }, + 'sr-YU': { //Serbian (Srpski) + months: [ + "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar" + ], + dayOfWeek: [ + "Ned", "Pon", "Uto", "Sre", "čet", "Pet", "Sub" + ] + }, + sr: { //Serbian Cyrillic (Српски) + months: [ + "јануар", "фебруар", "март", "април", "мај", "јун", "јул", "август", "септембар", "октобар", "новембар", "децембар" + ], + dayOfWeek: [ + "нед", "пон", "уто", "сре", "чет", "пет", "суб" + ] + }, + sv: { //Svenska + months: [ + "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör" + ] + }, + 'zh-TW': { //Traditional Chinese (繁體中文) + months: [ + "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" + ], + dayOfWeek: [ + "日", "一", "二", "三", "四", "五", "六" + ] + }, + zh: { //Simplified Chinese (简体中文) + months: [ + "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" + ], + dayOfWeek: [ + "日", "一", "二", "三", "四", "五", "六" + ] + }, + he: { //Hebrew (עברית) + months: [ + 'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר' + ], + dayOfWeek: [ + 'א\'', 'ב\'', 'ג\'', 'ד\'', 'ה\'', 'ו\'', 'שבת' + ] + }, + hy: { // Armenian + months: [ + "Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր" + ], + dayOfWeek: [ + "Կի", "Երկ", "Երք", "Չոր", "Հնգ", "Ուրբ", "Շբթ" + ] + }, + kg: { // Kyrgyz + months: [ + 'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы' + ], + dayOfWeek: [ + "Жек", "Дүй", "Шей", "Шар", "Бей", "Жум", "Ише" + ] + } + }, + value: '', + lang: 'en', + + format: 'Y/m/d H:i', + formatTime: 'H:i', + formatDate: 'Y/m/d', + + startDate: false, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05', + step: 60, + monthChangeSpinner: true, + + closeOnDateSelect: false, + closeOnTimeSelect: true, + closeOnWithoutClick: true, + closeOnInputClick: true, + + timepicker: true, + datepicker: true, + weeks: false, + + defaultTime: false, // use formatTime format (ex. '10:00' for formatTime: 'H:i') + defaultDate: false, // use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05') + + minDate: false, + maxDate: false, + minTime: false, + maxTime: false, + disabledMinTime: false, + disabledMaxTime: false, + + allowTimes: [], + opened: false, + initTime: true, + inline: false, + theme: '', + + onSelectDate: function () {}, + onSelectTime: function () {}, + onChangeMonth: function () {}, + onChangeYear: function () {}, + onChangeDateTime: function () {}, + onShow: function () {}, + onClose: function () {}, + onGenerate: function () {}, + + withoutCopyright: true, + inverseButton: false, + hours12: false, + next: 'xdsoft_next', + prev : 'xdsoft_prev', + dayOfWeekStart: 0, + parentID: 'body', + timeHeightInTimePicker: 25, + timepickerScrollbar: true, + todayButton: true, + prevButton: true, + nextButton: true, + defaultSelect: true, + + scrollMonth: true, + scrollTime: true, + scrollInput: true, + + lazyInit: false, + mask: false, + validateOnBlur: true, + allowBlank: true, + yearStart: 1950, + yearEnd: 2050, + monthStart: 0, + monthEnd: 11, + style: '', + id: '', + fixed: false, + roundTime: 'round', // ceil, floor + className: '', + weekends: [], + highlightedDates: [], + highlightedPeriods: [], + disabledDates : [], + disabledWeekDays: [], + yearOffset: 0, + beforeShowDay: null, + + enterLikeTab: true, + showApplyButton: false + }; + // fix for ie8 + if (!window.getComputedStyle) { + window.getComputedStyle = function (el, pseudo) { + this.el = el; + this.getPropertyValue = function (prop) { + var re = /(\-([a-z]){1})/g; + if (prop === 'float') { + prop = 'styleFloat'; + } + if (re.test(prop)) { + prop = prop.replace(re, function (a, b, c) { + return c.toUpperCase(); + }); + } + return el.currentStyle[prop] || null; + }; + return this; + }; + } + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (obj, start) { + var i, j; + for (i = (start || 0), j = this.length; i < j; i += 1) { + if (this[i] === obj) { return i; } + } + return -1; + }; + } + Date.prototype.countDaysInMonth = function () { + return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate(); + }; + $.fn.xdsoftScroller = function (percent) { + return this.each(function () { + var timeboxparent = $(this), + pointerEventToXY = function (e) { + var out = {x: 0, y: 0}, + touch; + if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') { + touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; + out.x = touch.clientX; + out.y = touch.clientY; + } else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') { + out.x = e.clientX; + out.y = e.clientY; + } + return out; + }, + move = 0, + timebox, + parentHeight, + height, + scrollbar, + scroller, + maximumOffset = 100, + start = false, + startY = 0, + startTop = 0, + h1 = 0, + touchStart = false, + startTopScroll = 0, + calcOffset = function () {}; + if (percent === 'hide') { + timeboxparent.find('.xdsoft_scrollbar').hide(); + return; + } + if (!$(this).hasClass('xdsoft_scroller_box')) { + timebox = timeboxparent.children().eq(0); + parentHeight = timeboxparent[0].clientHeight; + height = timebox[0].offsetHeight; + scrollbar = $('<div class="xdsoft_scrollbar"></div>'); + scroller = $('<div class="xdsoft_scroller"></div>'); + scrollbar.append(scroller); + + timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar); + calcOffset = function calcOffset(event) { + var offset = pointerEventToXY(event).y - startY + startTopScroll; + if (offset < 0) { + offset = 0; + } + if (offset + scroller[0].offsetHeight > h1) { + offset = h1 - scroller[0].offsetHeight; + } + timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]); + }; + + scroller + .on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) { + if (!parentHeight) { + timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]); + } + + startY = pointerEventToXY(event).y; + startTopScroll = parseInt(scroller.css('margin-top'), 10); + h1 = scrollbar[0].offsetHeight; + + if (event.type === 'mousedown') { + if (document) { + $(document.body).addClass('xdsoft_noselect'); + } + $([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() { + $([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee) + .off('mousemove.xdsoft_scroller', calcOffset) + .removeClass('xdsoft_noselect'); + }); + $(document.body).on('mousemove.xdsoft_scroller', calcOffset); + } else { + touchStart = true; + event.stopPropagation(); + event.preventDefault(); + } + }) + .on('touchmove', function (event) { + if (touchStart) { + event.preventDefault(); + calcOffset(event); + } + }) + .on('touchend touchcancel', function (event) { + touchStart = false; + startTopScroll = 0; + }); + + timeboxparent + .on('scroll_element.xdsoft_scroller', function (event, percentage) { + if (!parentHeight) { + timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]); + } + percentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage; + + scroller.css('margin-top', maximumOffset * percentage); + + setTimeout(function () { + timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10)); + }, 10); + }) + .on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) { + var percent, sh; + parentHeight = timeboxparent[0].clientHeight; + height = timebox[0].offsetHeight; + percent = parentHeight / height; + sh = percent * scrollbar[0].offsetHeight; + if (percent > 1) { + scroller.hide(); + } else { + scroller.show(); + scroller.css('height', parseInt(sh > 10 ? sh : 10, 10)); + maximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight; + if (noTriggerScroll !== true) { + timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]); + } + } + }); + + timeboxparent.on('mousewheel', function (event) { + var top = Math.abs(parseInt(timebox.css('marginTop'), 10)); + + top = top - (event.deltaY * 20); + if (top < 0) { + top = 0; + } + + timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]); + event.stopPropagation(); + return false; + }); + + timeboxparent.on('touchstart', function (event) { + start = pointerEventToXY(event); + startTop = Math.abs(parseInt(timebox.css('marginTop'), 10)); + }); + + timeboxparent.on('touchmove', function (event) { + if (start) { + event.preventDefault(); + var coord = pointerEventToXY(event); + timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]); + } + }); + + timeboxparent.on('touchend touchcancel', function (event) { + start = false; + startTop = 0; + }); + } + timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]); + }); + }; + + $.fn.datetimepicker = function (opt) { + var KEY0 = 48, + KEY9 = 57, + _KEY0 = 96, + _KEY9 = 105, + CTRLKEY = 17, + DEL = 46, + ENTER = 13, + ESC = 27, + BACKSPACE = 8, + ARROWLEFT = 37, + ARROWUP = 38, + ARROWRIGHT = 39, + ARROWDOWN = 40, + TAB = 9, + F5 = 116, + AKEY = 65, + CKEY = 67, + VKEY = 86, + ZKEY = 90, + YKEY = 89, + ctrlDown = false, + options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options), + + lazyInitTimer = 0, + createDateTimePicker, + destroyDateTimePicker, + + lazyInit = function (input) { + input + .on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) { + if (input.is(':disabled') || input.data('xdsoft_datetimepicker')) { + return; + } + clearTimeout(lazyInitTimer); + lazyInitTimer = setTimeout(function () { + + if (!input.data('xdsoft_datetimepicker')) { + createDateTimePicker(input); + } + input + .off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback) + .trigger('open.xdsoft'); + }, 100); + }); + }; + + createDateTimePicker = function (input) { + var datetimepicker = $('<div class="xdsoft_datetimepicker xdsoft_noselect"></div>'), + xdsoft_copyright = $('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'), + datepicker = $('<div class="xdsoft_datepicker active"></div>'), + mounth_picker = $('<div class="xdsoft_mounthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' + + '<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' + + '<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' + + '<button type="button" class="xdsoft_next"></button></div>'), + calendar = $('<div class="xdsoft_calendar"></div>'), + timepicker = $('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'), + timeboxparent = timepicker.find('.xdsoft_time_box').eq(0), + timebox = $('<div class="xdsoft_time_variant"></div>'), + applyButton = $('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'), + /*scrollbar = $('<div class="xdsoft_scrollbar"></div>'), + scroller = $('<div class="xdsoft_scroller"></div>'),*/ + monthselect = $('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'), + yearselect = $('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'), + triggerAfterOpen = false, + XDSoft_datetime, + //scroll_element, + xchangeTimer, + timerclick, + current_time_index, + setPos, + timer = 0, + timer1 = 0, + _xdsoft_datetime; + + if (options.id) { + datetimepicker.attr('id', options.id); + } + if (options.style) { + datetimepicker.attr('style', options.style); + } + if (options.weeks) { + datetimepicker.addClass('xdsoft_showweeks'); + } + + datetimepicker.addClass('xdsoft_' + options.theme); + datetimepicker.addClass(options.className); + + mounth_picker + .find('.xdsoft_month span') + .after(monthselect); + mounth_picker + .find('.xdsoft_year span') + .after(yearselect); + + mounth_picker + .find('.xdsoft_month,.xdsoft_year') + .on('mousedown.xdsoft', function (event) { + var select = $(this).find('.xdsoft_select').eq(0), + val = 0, + top = 0, + visible = select.is(':visible'), + items, + i; + + mounth_picker + .find('.xdsoft_select') + .hide(); + if (_xdsoft_datetime.currentTime) { + val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear'](); + } + + select[visible ? 'hide' : 'show'](); + for (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) { + if (items.eq(i).data('value') === val) { + break; + } else { + top += items[0].offsetHeight; + } + } + + select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight))); + event.stopPropagation(); + return false; + }); + + mounth_picker + .find('.xdsoft_select') + .xdsoftScroller() + .on('mousedown.xdsoft', function (event) { + event.stopPropagation(); + event.preventDefault(); + }) + .on('mousedown.xdsoft', '.xdsoft_option', function (event) { + + if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) { + _xdsoft_datetime.currentTime = _xdsoft_datetime.now(); + } + + var year = _xdsoft_datetime.currentTime.getFullYear(); + if (_xdsoft_datetime && _xdsoft_datetime.currentTime) { + _xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value')); + } + + $(this).parent().parent().hide(); + + datetimepicker.trigger('xchange.xdsoft'); + if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) { + options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + + if (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) { + options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + }); + + datetimepicker.setOptions = function (_options) { + var highlightedDates = {}, + getCaretPos = function (input) { + try { + if (document.selection && document.selection.createRange) { + var range = document.selection.createRange(); + return range.getBookmark().charCodeAt(2) - 2; + } + if (input.setSelectionRange) { + return input.selectionStart; + } + } catch (e) { + return 0; + } + }, + setCaretPos = function (node, pos) { + node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node; + if (!node) { + return false; + } + if (node.createTextRange) { + var textRange = node.createTextRange(); + textRange.collapse(true); + textRange.moveEnd('character', pos); + textRange.moveStart('character', pos); + textRange.select(); + return true; + } + if (node.setSelectionRange) { + node.setSelectionRange(pos, pos); + return true; + } + return false; + }, + isValidValue = function (mask, value) { + var reg = mask + .replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1') + .replace(/_/g, '{digit+}') + .replace(/([0-9]{1})/g, '{digit$1}') + .replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}') + .replace(/\{digit[\+]\}/g, '[0-9_]{1}'); + return (new RegExp(reg)).test(value); + }; + options = $.extend(true, {}, options, _options); + + if (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) { + options.allowTimes = $.extend(true, [], _options.allowTimes); + } + + if (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) { + options.weekends = $.extend(true, [], _options.weekends); + } + + if (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) { + $.each(_options.highlightedDates, function (index, value) { + var splitData = $.map(value.split(','), $.trim), + exDesc, + hDate = new HighlightedDate(Date.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style + keyDate = hDate.date.dateFormat(options.formatDate); + if (highlightedDates[keyDate] !== undefined) { + exDesc = highlightedDates[keyDate].desc; + if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) { + highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc; + } + } else { + highlightedDates[keyDate] = hDate; + } + }); + + options.highlightedDates = $.extend(true, [], highlightedDates); + } + + if (_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) { + highlightedDates = $.extend(true, [], options.highlightedDates); + $.each(_options.highlightedPeriods, function (index, value) { + var splitData = $.map(value.split(','), $.trim), + dateTest = Date.parseDate(splitData[0], options.formatDate), // start date + dateEnd = Date.parseDate(splitData[1], options.formatDate), + desc = splitData[2], + hDate, + keyDate, + exDesc, + style = splitData[3]; + + while (dateTest <= dateEnd) { + hDate = new HighlightedDate(dateTest, desc, style); + keyDate = dateTest.dateFormat(options.formatDate); + dateTest.setDate(dateTest.getDate() + 1); + if (highlightedDates[keyDate] !== undefined) { + exDesc = highlightedDates[keyDate].desc; + if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) { + highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc; + } + } else { + highlightedDates[keyDate] = hDate; + } + } + }); + + options.highlightedDates = $.extend(true, [], highlightedDates); + } + + if (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) { + options.disabledDates = $.extend(true, [], _options.disabledDates); + } + + if (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) { + options.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays); + } + + if ((options.open || options.opened) && (!options.inline)) { + input.trigger('open.xdsoft'); + } + + if (options.inline) { + triggerAfterOpen = true; + datetimepicker.addClass('xdsoft_inline'); + input.after(datetimepicker).hide(); + } + + if (options.inverseButton) { + options.next = 'xdsoft_prev'; + options.prev = 'xdsoft_next'; + } + + if (options.datepicker) { + datepicker.addClass('active'); + } else { + datepicker.removeClass('active'); + } + + if (options.timepicker) { + timepicker.addClass('active'); + } else { + timepicker.removeClass('active'); + } + + if (options.value) { + _xdsoft_datetime.setCurrentTime(options.value); + if (input && input.val) { + input.val(_xdsoft_datetime.str); + } + } + + if (isNaN(options.dayOfWeekStart)) { + options.dayOfWeekStart = 0; + } else { + options.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7; + } + + if (!options.timepickerScrollbar) { + timeboxparent.xdsoftScroller('hide'); + } + + if (options.minDate && /^-(.*)$/.test(options.minDate)) { + options.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate); + } + + if (options.maxDate && /^\+(.*)$/.test(options.maxDate)) { + options.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate); + } + + applyButton.toggle(options.showApplyButton); + + mounth_picker + .find('.xdsoft_today_button') + .css('visibility', !options.todayButton ? 'hidden' : 'visible'); + + mounth_picker + .find('.' + options.prev) + .css('visibility', !options.prevButton ? 'hidden' : 'visible'); + + mounth_picker + .find('.' + options.next) + .css('visibility', !options.nextButton ? 'hidden' : 'visible'); + + if (options.mask) { + input.off('keydown.xdsoft'); + + if (options.mask === true) { + options.mask = options.format + .replace(/Y/g, '9999') + .replace(/F/g, '9999') + .replace(/m/g, '19') + .replace(/d/g, '39') + .replace(/H/g, '29') + .replace(/i/g, '59') + .replace(/s/g, '59'); + } + + if ($.type(options.mask) === 'string') { + if (!isValidValue(options.mask, input.val())) { + input.val(options.mask.replace(/[0-9]/g, '_')); + } + + input.on('keydown.xdsoft', function (event) { + var val = this.value, + key = event.which, + pos, + digit; + + if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) { + pos = getCaretPos(this); + digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_'; + + if ((key === BACKSPACE || key === DEL) && pos) { + pos -= 1; + digit = '_'; + } + + while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) { + pos += (key === BACKSPACE || key === DEL) ? -1 : 1; + } + + val = val.substr(0, pos) + digit + val.substr(pos + 1); + if ($.trim(val) === '') { + val = options.mask.replace(/[0-9]/g, '_'); + } else { + if (pos === options.mask.length) { + event.preventDefault(); + return false; + } + } + + pos += (key === BACKSPACE || key === DEL) ? 0 : 1; + while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) { + pos += (key === BACKSPACE || key === DEL) ? -1 : 1; + } + + if (isValidValue(options.mask, val)) { + this.value = val; + setCaretPos(this, pos); + } else if ($.trim(val) === '') { + this.value = options.mask.replace(/[0-9]/g, '_'); + } else { + input.trigger('error_input.xdsoft'); + } + } else { + if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) { + return true; + } + } + + event.preventDefault(); + return false; + }); + } + } + if (options.validateOnBlur) { + input + .off('blur.xdsoft') + .on('blur.xdsoft', function () { + if (options.allowBlank && !$.trim($(this).val()).length) { + $(this).val(null); + datetimepicker.data('xdsoft_datetime').empty(); + } else if (!Date.parseDate($(this).val(), options.format)) { + var splittedHours = +([$(this).val()[0], $(this).val()[1]].join('')), + splittedMinutes = +([$(this).val()[2], $(this).val()[3]].join('')); + + // parse the numbers as 0312 => 03:12 + if (!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) { + $(this).val([splittedHours, splittedMinutes].map(function (item) { + return item > 9 ? item : '0' + item; + }).join(':')); + } else { + $(this).val((_xdsoft_datetime.now()).dateFormat(options.format)); + } + + datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val()); + } else { + datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val()); + } + + datetimepicker.trigger('changedatetime.xdsoft'); + }); + } + options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1; + + datetimepicker + .trigger('xchange.xdsoft') + .trigger('afterOpen.xdsoft'); + }; + + datetimepicker + .data('options', options) + .on('mousedown.xdsoft', function (event) { + event.stopPropagation(); + event.preventDefault(); + yearselect.hide(); + monthselect.hide(); + return false; + }); + + //scroll_element = timepicker.find('.xdsoft_time_box'); + timeboxparent.append(timebox); + timeboxparent.xdsoftScroller(); + + datetimepicker.on('afterOpen.xdsoft', function () { + timeboxparent.xdsoftScroller(); + }); + + datetimepicker + .append(datepicker) + .append(timepicker); + + if (options.withoutCopyright !== true) { + datetimepicker + .append(xdsoft_copyright); + } + + datepicker + .append(mounth_picker) + .append(calendar) + .append(applyButton); + + $(options.parentID) + .append(datetimepicker); + + XDSoft_datetime = function () { + var _this = this; + _this.now = function (norecursion) { + var d = new Date(), + date, + time; + + if (!norecursion && options.defaultDate) { + date = _this.strToDateTime(options.defaultDate); + d.setFullYear(date.getFullYear()); + d.setMonth(date.getMonth()); + d.setDate(date.getDate()); + } + + if (options.yearOffset) { + d.setFullYear(d.getFullYear() + options.yearOffset); + } + + if (!norecursion && options.defaultTime) { + time = _this.strtotime(options.defaultTime); + d.setHours(time.getHours()); + d.setMinutes(time.getMinutes()); + } + return d; + }; + + _this.isValidDate = function (d) { + if (Object.prototype.toString.call(d) !== "[object Date]") { + return false; + } + return !isNaN(d.getTime()); + }; + + _this.setCurrentTime = function (dTime) { + _this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now(); + datetimepicker.trigger('xchange.xdsoft'); + }; + + _this.empty = function () { + _this.currentTime = null; + }; + + _this.getCurrentTime = function (dTime) { + return _this.currentTime; + }; + + _this.nextMonth = function () { + + if (_this.currentTime === undefined || _this.currentTime === null) { + _this.currentTime = _this.now(); + } + + var month = _this.currentTime.getMonth() + 1, + year; + if (month === 12) { + _this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1); + month = 0; + } + + year = _this.currentTime.getFullYear(); + + _this.currentTime.setDate( + Math.min( + new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(), + _this.currentTime.getDate() + ) + ); + _this.currentTime.setMonth(month); + + if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) { + options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + + if (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) { + options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + + datetimepicker.trigger('xchange.xdsoft'); + return month; + }; + + _this.prevMonth = function () { + + if (_this.currentTime === undefined || _this.currentTime === null) { + _this.currentTime = _this.now(); + } + + var month = _this.currentTime.getMonth() - 1; + if (month === -1) { + _this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1); + month = 11; + } + _this.currentTime.setDate( + Math.min( + new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(), + _this.currentTime.getDate() + ) + ); + _this.currentTime.setMonth(month); + if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) { + options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + datetimepicker.trigger('xchange.xdsoft'); + return month; + }; + + _this.getWeekOfYear = function (datetime) { + var onejan = new Date(datetime.getFullYear(), 0, 1); + return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7); + }; + + _this.strToDateTime = function (sDateTime) { + var tmpDate = [], timeOffset, currentTime; + + if (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) { + return sDateTime; + } + + tmpDate = /^(\+|\-)(.*)$/.exec(sDateTime); + if (tmpDate) { + tmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate); + } + if (tmpDate && tmpDate[2]) { + timeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000; + currentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset); + } else { + currentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now(); + } + + if (!_this.isValidDate(currentTime)) { + currentTime = _this.now(); + } + + return currentTime; + }; + + _this.strToDate = function (sDate) { + if (sDate && sDate instanceof Date && _this.isValidDate(sDate)) { + return sDate; + } + + var currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true); + if (!_this.isValidDate(currentTime)) { + currentTime = _this.now(true); + } + return currentTime; + }; + + _this.strtotime = function (sTime) { + if (sTime && sTime instanceof Date && _this.isValidDate(sTime)) { + return sTime; + } + var currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true); + if (!_this.isValidDate(currentTime)) { + currentTime = _this.now(true); + } + return currentTime; + }; + + _this.str = function () { + return _this.currentTime.dateFormat(options.format); + }; + _this.currentTime = this.now(); + }; + + _xdsoft_datetime = new XDSoft_datetime(); + + applyButton.on('click', function (e) {//pathbrite + e.preventDefault(); + datetimepicker.data('changed', true); + _xdsoft_datetime.setCurrentTime(getCurrentValue()); + input.val(_xdsoft_datetime.str()); + datetimepicker.trigger('close.xdsoft'); + }); + mounth_picker + .find('.xdsoft_today_button') + .on('mousedown.xdsoft', function () { + datetimepicker.data('changed', true); + _xdsoft_datetime.setCurrentTime(0); + datetimepicker.trigger('afterOpen.xdsoft'); + }).on('dblclick.xdsoft', function () { + var currentDate = _xdsoft_datetime.getCurrentTime(), minDate, maxDate; + currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()); + minDate = _xdsoft_datetime.strToDate(options.minDate); + minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()); + if (currentDate < minDate) { + return; + } + maxDate = _xdsoft_datetime.strToDate(options.maxDate); + maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()); + if (currentDate > maxDate) { + return; + } + input.val(_xdsoft_datetime.str()); + datetimepicker.trigger('close.xdsoft'); + }); + mounth_picker + .find('.xdsoft_prev,.xdsoft_next') + .on('mousedown.xdsoft', function () { + var $this = $(this), + timer = 0, + stop = false; + + (function arguments_callee1(v) { + if ($this.hasClass(options.next)) { + _xdsoft_datetime.nextMonth(); + } else if ($this.hasClass(options.prev)) { + _xdsoft_datetime.prevMonth(); + } + if (options.monthChangeSpinner) { + if (!stop) { + timer = setTimeout(arguments_callee1, v || 100); + } + } + }(500)); + + $([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() { + clearTimeout(timer); + stop = true; + $([document.body, window]).off('mouseup.xdsoft', arguments_callee2); + }); + }); + + timepicker + .find('.xdsoft_prev,.xdsoft_next') + .on('mousedown.xdsoft', function () { + var $this = $(this), + timer = 0, + stop = false, + period = 110; + (function arguments_callee4(v) { + var pheight = timeboxparent[0].clientHeight, + height = timebox[0].offsetHeight, + top = Math.abs(parseInt(timebox.css('marginTop'), 10)); + if ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) { + timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px'); + } else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) { + timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px'); + } + timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]); + period = (period > 10) ? 10 : period - 10; + if (!stop) { + timer = setTimeout(arguments_callee4, v || period); + } + }(500)); + $([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() { + clearTimeout(timer); + stop = true; + $([document.body, window]) + .off('mouseup.xdsoft', arguments_callee5); + }); + }); + + xchangeTimer = 0; + // base handler - generating a calendar and timepicker + datetimepicker + .on('xchange.xdsoft', function (event) { + clearTimeout(xchangeTimer); + xchangeTimer = setTimeout(function () { + + if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) { + _xdsoft_datetime.currentTime = _xdsoft_datetime.now(); + } + + var table = '', + start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0), + i = 0, + j, + today = _xdsoft_datetime.now(), + maxDate = false, + minDate = false, + hDate, + day, + d, + y, + m, + w, + classes = [], + customDateSettings, + newRow = true, + time = '', + h = '', + line_time, + description; + + while (start.getDay() !== options.dayOfWeekStart) { + start.setDate(start.getDate() - 1); + } + + table += '<table><thead><tr>'; + + if (options.weeks) { + table += '<th></th>'; + } + + for (j = 0; j < 7; j += 1) { + table += '<th>' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) % 7] + '</th>'; + } + + table += '</tr></thead>'; + table += '<tbody>'; + + if (options.maxDate !== false) { + maxDate = _xdsoft_datetime.strToDate(options.maxDate); + maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999); + } + + if (options.minDate !== false) { + minDate = _xdsoft_datetime.strToDate(options.minDate); + minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()); + } + + while (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) { + classes = []; + i += 1; + + day = start.getDay(); + d = start.getDate(); + y = start.getFullYear(); + m = start.getMonth(); + w = _xdsoft_datetime.getWeekOfYear(start); + description = ''; + + classes.push('xdsoft_date'); + + if (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) { + customDateSettings = options.beforeShowDay.call(datetimepicker, start); + } else { + customDateSettings = null; + } + + if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) { + classes.push('xdsoft_disabled'); + } else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) { + classes.push('xdsoft_disabled'); + } else if (options.disabledWeekDays.indexOf(day) !== -1) { + classes.push('xdsoft_disabled'); + } + + if (customDateSettings && customDateSettings[1] !== "") { + classes.push(customDateSettings[1]); + } + + if (_xdsoft_datetime.currentTime.getMonth() !== m) { + classes.push('xdsoft_other_month'); + } + + if ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) { + classes.push('xdsoft_current'); + } + + if (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) { + classes.push('xdsoft_today'); + } + + if (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(start.dateFormat(options.formatDate)) !== -1) { + classes.push('xdsoft_weekend'); + } + + if (options.highlightedDates[start.dateFormat(options.formatDate)] !== undefined) { + hDate = options.highlightedDates[start.dateFormat(options.formatDate)]; + classes.push(hDate.style === undefined ? 'xdsoft_highlighted_default' : hDate.style); + description = hDate.desc === undefined ? '' : hDate.desc; + } + + if (options.beforeShowDay && $.isFunction(options.beforeShowDay)) { + classes.push(options.beforeShowDay(start)); + } + + if (newRow) { + table += '<tr>'; + newRow = false; + if (options.weeks) { + table += '<th>' + w + '</th>'; + } + } + + table += '<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '" title="' + description + '">' + + '<div>' + d + '</div>' + + '</td>'; + + if (start.getDay() === options.dayOfWeekStartPrev) { + table += '</tr>'; + newRow = true; + } + + start.setDate(d + 1); + } + table += '</tbody></table>'; + + calendar.html(table); + + mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]); + mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear()); + + // generate timebox + time = ''; + h = ''; + m = ''; + line_time = function line_time(h, m) { + var now = _xdsoft_datetime.now(), optionDateTime, current_time; + now.setHours(h); + h = parseInt(now.getHours(), 10); + now.setMinutes(m); + m = parseInt(now.getMinutes(), 10); + optionDateTime = new Date(_xdsoft_datetime.currentTime); + optionDateTime.setHours(h); + optionDateTime.setMinutes(m); + classes = []; + if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) { + classes.push('xdsoft_disabled'); + } + if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || ((options.disabledMinTime !== false && now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime()) && (options.disabledMaxTime !== false && now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))) { + classes.push('xdsoft_disabled'); + } + + current_time = new Date(_xdsoft_datetime.currentTime); + current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10)); + current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step); + + if ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && (options.step > 59 || current_time.getMinutes() === parseInt(m, 10))) { + if (options.defaultSelect || datetimepicker.data('changed')) { + classes.push('xdsoft_current'); + } else if (options.initTime) { + classes.push('xdsoft_init_time'); + } + } + if (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) { + classes.push('xdsoft_today'); + } + time += '<div class="xdsoft_time ' + classes.join(' ') + '" data-hour="' + h + '" data-minute="' + m + '">' + now.dateFormat(options.formatTime) + '</div>'; + }; + + if (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) { + for (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) { + for (j = 0; j < 60; j += options.step) { + h = (i < 10 ? '0' : '') + i; + m = (j < 10 ? '0' : '') + j; + line_time(h, m); + } + } + } else { + for (i = 0; i < options.allowTimes.length; i += 1) { + h = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours(); + m = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes(); + line_time(h, m); + } + } + + timebox.html(time); + + opt = ''; + i = 0; + + for (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) { + opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + i + '</div>'; + } + yearselect.children().eq(0) + .html(opt); + + for (i = parseInt(options.monthStart, 10), opt = ''; i <= parseInt(options.monthEnd, 10); i += 1) { + opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + options.i18n[options.lang].months[i] + '</div>'; + } + monthselect.children().eq(0).html(opt); + $(datetimepicker) + .trigger('generate.xdsoft'); + }, 10); + event.stopPropagation(); + }) + .on('afterOpen.xdsoft', function () { + if (options.timepicker) { + var classType, pheight, height, top; + if (timebox.find('.xdsoft_current').length) { + classType = '.xdsoft_current'; + } else if (timebox.find('.xdsoft_init_time').length) { + classType = '.xdsoft_init_time'; + } + if (classType) { + pheight = timeboxparent[0].clientHeight; + height = timebox[0].offsetHeight; + top = timebox.find(classType).index() * options.timeHeightInTimePicker + 1; + if ((height - pheight) < top) { + top = height - pheight; + } + timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]); + } else { + timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]); + } + } + }); + + timerclick = 0; + calendar + .on('click.xdsoft', 'td', function (xdevent) { + xdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap + timerclick += 1; + var $this = $(this), + currentTime = _xdsoft_datetime.currentTime; + + if (currentTime === undefined || currentTime === null) { + _xdsoft_datetime.currentTime = _xdsoft_datetime.now(); + currentTime = _xdsoft_datetime.currentTime; + } + + if ($this.hasClass('xdsoft_disabled')) { + return false; + } + + currentTime.setDate(1); + currentTime.setFullYear($this.data('year')); + currentTime.setMonth($this.data('month')); + currentTime.setDate($this.data('date')); + + datetimepicker.trigger('select.xdsoft', [currentTime]); + + input.val(_xdsoft_datetime.str()); + if ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) { + datetimepicker.trigger('close.xdsoft'); + } + + if (options.onSelectDate && $.isFunction(options.onSelectDate)) { + options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent); + } + + datetimepicker.data('changed', true); + datetimepicker.trigger('xchange.xdsoft'); + datetimepicker.trigger('changedatetime.xdsoft'); + setTimeout(function () { + timerclick = 0; + }, 200); + }); + + timebox + .on('click.xdsoft', 'div', function (xdevent) { + xdevent.stopPropagation(); + var $this = $(this), + currentTime = _xdsoft_datetime.currentTime; + + if (currentTime === undefined || currentTime === null) { + _xdsoft_datetime.currentTime = _xdsoft_datetime.now(); + currentTime = _xdsoft_datetime.currentTime; + } + + if ($this.hasClass('xdsoft_disabled')) { + return false; + } + currentTime.setHours($this.data('hour')); + currentTime.setMinutes($this.data('minute')); + datetimepicker.trigger('select.xdsoft', [currentTime]); + + datetimepicker.data('input').val(_xdsoft_datetime.str()); + + if (options.inline !== true && options.closeOnTimeSelect === true) { + datetimepicker.trigger('close.xdsoft'); + } + + if (options.onSelectTime && $.isFunction(options.onSelectTime)) { + options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent); + } + datetimepicker.data('changed', true); + datetimepicker.trigger('xchange.xdsoft'); + datetimepicker.trigger('changedatetime.xdsoft'); + }); + + + datepicker + .on('mousewheel.xdsoft', function (event) { + if (!options.scrollMonth) { + return true; + } + if (event.deltaY < 0) { + _xdsoft_datetime.nextMonth(); + } else { + _xdsoft_datetime.prevMonth(); + } + return false; + }); + + input + .on('mousewheel.xdsoft', function (event) { + if (!options.scrollInput) { + return true; + } + if (!options.datepicker && options.timepicker) { + current_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0; + if (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) { + current_time_index += event.deltaY; + } + if (timebox.children().eq(current_time_index).length) { + timebox.children().eq(current_time_index).trigger('mousedown'); + } + return false; + } + if (options.datepicker && !options.timepicker) { + datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]); + if (input.val) { + input.val(_xdsoft_datetime.str()); + } + datetimepicker.trigger('changedatetime.xdsoft'); + return false; + } + }); + + datetimepicker + .on('changedatetime.xdsoft', function (event) { + if (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) { + var $input = datetimepicker.data('input'); + options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event); + delete options.value; + $input.trigger('change'); + } + }) + .on('generate.xdsoft', function () { + if (options.onGenerate && $.isFunction(options.onGenerate)) { + options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + if (triggerAfterOpen) { + datetimepicker.trigger('afterOpen.xdsoft'); + triggerAfterOpen = false; + } + }) + .on('click.xdsoft', function (xdevent) { + xdevent.stopPropagation(); + }); + + current_time_index = 0; + + setPos = function () { + var offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = "absolute", node; + if (options.fixed) { + top -= $(window).scrollTop(); + left -= $(window).scrollLeft(); + position = "fixed"; + } else { + if (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) { + top = offset.top - datetimepicker[0].offsetHeight + 1; + } + if (top < 0) { + top = 0; + } + if (left + datetimepicker[0].offsetWidth > $(window).width()) { + left = $(window).width() - datetimepicker[0].offsetWidth; + } + } + + node = datetimepicker[0]; + do { + node = node.parentNode; + if (window.getComputedStyle(node).getPropertyValue('position') === 'relative' && $(window).width() >= node.offsetWidth) { + left = left - (($(window).width() - node.offsetWidth) / 2); + break; + } + } while (node.nodeName !== 'HTML'); + datetimepicker.css({ + left: left, + top: top, + position: position + }); + }; + datetimepicker + .on('open.xdsoft', function (event) { + var onShow = true; + if (options.onShow && $.isFunction(options.onShow)) { + onShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event); + } + if (onShow !== false) { + datetimepicker.show(); + setPos(); + $(window) + .off('resize.xdsoft', setPos) + .on('resize.xdsoft', setPos); + + if (options.closeOnWithoutClick) { + $([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() { + datetimepicker.trigger('close.xdsoft'); + $([document.body, window]).off('mousedown.xdsoft', arguments_callee6); + }); + } + } + }) + .on('close.xdsoft', function (event) { + var onClose = true; + mounth_picker + .find('.xdsoft_month,.xdsoft_year') + .find('.xdsoft_select') + .hide(); + if (options.onClose && $.isFunction(options.onClose)) { + onClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event); + } + if (onClose !== false && !options.opened && !options.inline) { + datetimepicker.hide(); + } + event.stopPropagation(); + }) + .on('toggle.xdsoft', function (event) { + if (datetimepicker.is(':visible')) { + datetimepicker.trigger('close.xdsoft'); + } else { + datetimepicker.trigger('open.xdsoft'); + } + }) + .data('input', input); + + timer = 0; + timer1 = 0; + + datetimepicker.data('xdsoft_datetime', _xdsoft_datetime); + datetimepicker.setOptions(options); + + function getCurrentValue() { + var ct = false, time; + + if (options.startDate) { + ct = _xdsoft_datetime.strToDate(options.startDate); + } else { + ct = options.value || ((input && input.val && input.val()) ? input.val() : ''); + if (ct) { + ct = _xdsoft_datetime.strToDateTime(ct); + } else if (options.defaultDate) { + ct = _xdsoft_datetime.strToDateTime(options.defaultDate); + if (options.defaultTime) { + time = _xdsoft_datetime.strtotime(options.defaultTime); + ct.setHours(time.getHours()); + ct.setMinutes(time.getMinutes()); + } + } + } + + if (ct && _xdsoft_datetime.isValidDate(ct)) { + datetimepicker.data('changed', true); + } else { + ct = ''; + } + + return ct || 0; + } + + _xdsoft_datetime.setCurrentTime(getCurrentValue()); + + input + .data('xdsoft_datetimepicker', datetimepicker) + .on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) { + if (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) { + return; + } + clearTimeout(timer); + timer = setTimeout(function () { + if (input.is(':disabled')) { + return; + } + + triggerAfterOpen = true; + _xdsoft_datetime.setCurrentTime(getCurrentValue()); + + datetimepicker.trigger('open.xdsoft'); + }, 100); + }) + .on('keydown.xdsoft', function (event) { + var val = this.value, elementSelector, + key = event.which; + if ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) { + elementSelector = $("input:visible,textarea:visible"); + datetimepicker.trigger('close.xdsoft'); + elementSelector.eq(elementSelector.index(this) + 1).focus(); + return false; + } + if ([TAB].indexOf(key) !== -1) { + datetimepicker.trigger('close.xdsoft'); + return true; + } + }); + }; + destroyDateTimePicker = function (input) { + var datetimepicker = input.data('xdsoft_datetimepicker'); + if (datetimepicker) { + datetimepicker.data('xdsoft_datetime', null); + datetimepicker.remove(); + input + .data('xdsoft_datetimepicker', null) + .off('.xdsoft'); + $(window).off('resize.xdsoft'); + $([window, document.body]).off('mousedown.xdsoft'); + if (input.unmousewheel) { + input.unmousewheel(); + } + } + }; + $(document) + .off('keydown.xdsoftctrl keyup.xdsoftctrl') + .on('keydown.xdsoftctrl', function (e) { + if (e.keyCode === CTRLKEY) { + ctrlDown = true; + } + }) + .on('keyup.xdsoftctrl', function (e) { + if (e.keyCode === CTRLKEY) { + ctrlDown = false; + } + }); + return this.each(function () { + var datetimepicker = $(this).data('xdsoft_datetimepicker'), $input; + if (datetimepicker) { + if ($.type(opt) === 'string') { + switch (opt) { + case 'show': + $(this).select().focus(); + datetimepicker.trigger('open.xdsoft'); + break; + case 'hide': + datetimepicker.trigger('close.xdsoft'); + break; + case 'toggle': + datetimepicker.trigger('toggle.xdsoft'); + break; + case 'destroy': + destroyDateTimePicker($(this)); + break; + case 'reset': + this.value = this.defaultValue; + if (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) { + datetimepicker.data('changed', false); + } + datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value); + break; + case 'validate': + $input = datetimepicker.data('input'); + $input.trigger('blur.xdsoft'); + break; + } + } else { + datetimepicker + .setOptions(opt); + } + return 0; + } + if ($.type(opt) !== 'string') { + if (!options.lazyInit || options.open || options.inline) { + createDateTimePicker($(this)); + } else { + lazyInit($(this)); + } + } + }); + }; + $.fn.datetimepicker.defaults = default_options; +}(jQuery)); + +function HighlightedDate(date, desc, style) { + "use strict"; + this.date = date; + this.desc = desc; + this.style = style; +} + +(function () { + +/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) + * Licensed under the MIT License (LICENSE.txt). + * + * Version: 3.1.12 + * + * Requires: jQuery 1.2.2+ + */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}); + +// Parse and Format Library +//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/ +/* + * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, version 2.1. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + */ +Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b=="unixtime"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName="format"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var codePrefix="Date.prototype."+funcName+" = function() {return ";var code="";var special=false;var ch="";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}else{if(special){special=false;code+="'"+String.escape(ch)+"' + ";}else{code+=Date.getFormatCode(ch);}}}if(code.length==0){code="\"\"";}else{code=code.substring(0,code.length-3);}eval(codePrefix+code+";}");};Date.getFormatCode=function(a){switch(a){case"d":return"String.leftPad(this.getDate(), 2, '0') + ";case"D":return"Date.dayNames[this.getDay()].substring(0, 3) + ";case"j":return"this.getDate() + ";case"l":return"Date.dayNames[this.getDay()] + ";case"S":return"this.getSuffix() + ";case"w":return"this.getDay() + ";case"z":return"this.getDayOfYear() + ";case"W":return"this.getWeekOfYear() + ";case"F":return"Date.monthNames[this.getMonth()] + ";case"m":return"String.leftPad(this.getMonth() + 1, 2, '0') + ";case"M":return"Date.monthNames[this.getMonth()].substring(0, 3) + ";case"n":return"(this.getMonth() + 1) + ";case"t":return"this.getDaysInMonth() + ";case"L":return"(this.isLeapYear() ? 1 : 0) + ";case"Y":return"this.getFullYear() + ";case"y":return"('' + this.getFullYear()).substring(2, 4) + ";case"a":return"(this.getHours() < 12 ? 'am' : 'pm') + ";case"A":return"(this.getHours() < 12 ? 'AM' : 'PM') + ";case"g":return"((this.getHours() %12) ? this.getHours() % 12 : 12) + ";case"G":return"this.getHours() + ";case"h":return"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";case"H":return"String.leftPad(this.getHours(), 2, '0') + ";case"i":return"String.leftPad(this.getMinutes(), 2, '0') + ";case"s":return"String.leftPad(this.getSeconds(), 2, '0') + ";case"O":return"this.getGMTOffset() + ";case"T":return"this.getTimezone() + ";case"Z":return"(this.getTimezoneOffset() * -60) + ";default:return"'"+String.escape(a)+"' + ";}};Date.parseDate=function(a,c){if(c=="unixtime"){return new Date(!isNaN(parseInt(a))?parseInt(a)*1000:0);}if(Date.parseFunctions[c]==null){Date.createParser(c);}var b=Date.parseFunctions[c];return Date[b](a);};Date.createParser=function(format){var funcName="parse"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code="Date."+funcName+" = function(input) {\nvar y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, z = -1;\nvar d = new Date();\ny = d.getFullYear();\nm = d.getMonth();\nd = d.getDate();\nvar results = input.match(Date.parseRegexes["+regexNum+"]);\nif (results && results.length > 0) {";var regex="";var special=false;var ch="";for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}else{if(special){special=false;regex+=String.escape(ch);}else{obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}}code+="if (y > 0 && z > 0){\nvar doyDate = new Date(y,0);\ndoyDate.setDate(z);\nm = doyDate.getMonth();\nd = doyDate.getDate();\n}";code+="if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n{return new Date(y, m, d, h, i, s);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n{return new Date(y, m, d, h, i);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\n{return new Date(y, m, d, h);}\nelse if (y > 0 && m >= 0 && d > 0)\n{return new Date(y, m, d);}\nelse if (y > 0 && m >= 0)\n{return new Date(y, m);}\nelse if (y > 0)\n{return new Date(y);}\n}return null;}";Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$",'i');eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case"D":return{g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case"j":case"d":return{g:1,c:"d = parseInt(results["+a+"], 10);\n",s:"(\\d{1,2})"};case"l":return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case"S":return{g:0,c:null,s:"(?:st|nd|rd|th)"};case"w":return{g:0,c:null,s:"\\d"};case"z":return{g:1,c:"z = parseInt(results["+a+"], 10);\n",s:"(\\d{1,3})"};case"W":return{g:0,c:null,s:"(?:\\d{2})"};case"F":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+a+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case"M":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+a+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case"n":case"m":return{g:1,c:"m = parseInt(results["+a+"], 10) - 1;\n",s:"(\\d{1,2})"};case"t":return{g:0,c:null,s:"\\d{1,2}"};case"L":return{g:0,c:null,s:"(?:1|0)"};case"Y":return{g:1,c:"y = parseInt(results["+a+"], 10);\n",s:"(\\d{4})"};case"y":return{g:1,c:"var ty = parseInt(results["+a+"], 10);\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case"a":return{g:1,c:"if (results["+a+"] == 'am') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case"A":return{g:1,c:"if (results["+a+"] == 'AM') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case"g":case"G":case"h":case"H":return{g:1,c:"h = parseInt(results["+a+"], 10);\n",s:"(\\d{1,2})"};case"i":return{g:1,c:"i = parseInt(results["+a+"], 10);\n",s:"(\\d{2})"};case"s":return{g:1,c:"s = parseInt(results["+a+"], 10);\n",s:"(\\d{2})"};case"O":return{g:0,c:null,s:"[+-]\\d{4}"};case"T":return{g:0,c:null,s:"[A-Z]{3}"};case"Z":return{g:0,c:null,s:"[+-]\\d{1,5}"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,"0");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b<this.getMonth();++b){a+=Date.daysInMonth[b];}return a+this.getDate();};Date.prototype.getWeekOfYear=function(){var b=this.getDayOfYear()+(4-this.getDay());var a=new Date(this.getFullYear(),0,1);var c=(7-a.getDay()+4);return String.leftPad(Math.ceil((b-c)/7)+1,2,"0");};Date.prototype.isLeapYear=function(){var a=this.getFullYear();return((a&3)==0&&(a%100||(a%400==0&&a)));};Date.prototype.getFirstDayOfMonth=function(){var a=(this.getDay()-(this.getDate()-1))%7;return(a<0)?(a+7):a;};Date.prototype.getLastDayOfMonth=function(){var a=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(a<0)?(a+7):a;};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};String.escape=function(a){return a.replace(/('|\\)/g,"\\$1");};String.leftPad=function(d,b,c){var a=new String(d);if(c==null){c=" ";}while(a.length<b){a=c+a;}return a;};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];Date.dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.patterns={ISO8601LongPattern:"Y-m-d H:i:s",ISO8601ShortPattern:"Y-m-d",ShortDatePattern:"n/j/Y",LongDatePattern:"l, F d, Y",FullDateTimePattern:"l, F d, Y g:i:s A",MonthDayPattern:"F d",ShortTimePattern:"g:i A",LongTimePattern:"g:i:s A",SortableDateTimePattern:"Y-m-d\\TH:i:s",UniversalSortableDateTimePattern:"Y-m-d H:i:sO",YearMonthPattern:"F, Y"}; +}()); diff --git a/public/js/locales/bootstrap-datepicker.ar.js b/public/js/locales/bootstrap-datepicker.ar.js deleted file mode 100644 index 12ae1821..00000000 --- a/public/js/locales/bootstrap-datepicker.ar.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Arabic translation for bootstrap-datepicker - * Mohammed Alshehri <alshehri866@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['ar'] = { - days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"], - daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"], - daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"], - months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], - monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], - today: "هذا اليوم", - rtl: true - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.az.js b/public/js/locales/bootstrap-datepicker.az.js deleted file mode 100644 index 0285341c..00000000 --- a/public/js/locales/bootstrap-datepicker.az.js +++ /dev/null @@ -1,12 +0,0 @@ -// Azerbaijani -;(function($){ - $.fn.datepicker.dates['az'] = { - days: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə", "Bazar"], - daysShort: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş.", "B."], - daysMin: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş.", "B."], - months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"], - monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"], - today: "Bu gün", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.bg.js b/public/js/locales/bootstrap-datepicker.bg.js deleted file mode 100644 index 6837afd9..00000000 --- a/public/js/locales/bootstrap-datepicker.bg.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Bulgarian translation for bootstrap-datepicker - * Apostol Apostolov <apostol.s.apostolov@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['bg'] = { - days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"], - daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"], - daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"], - months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], - monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], - today: "днес" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.ca.js b/public/js/locales/bootstrap-datepicker.ca.js deleted file mode 100644 index 3fc4d844..00000000 --- a/public/js/locales/bootstrap-datepicker.ca.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Catalan translation for bootstrap-datepicker - * J. Garcia <jogaco.en@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['ca'] = { - days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"], - daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"], - daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"], - months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], - monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], - today: "Avui" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.cs.js b/public/js/locales/bootstrap-datepicker.cs.js deleted file mode 100644 index f76a2c08..00000000 --- a/public/js/locales/bootstrap-datepicker.cs.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Czech translation for bootstrap-datepicker - * Matěj Koubík <matej@koubik.name> - * Fixes by Michal Remiš <michal.remis@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['cs'] = { - days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"], - daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"], - daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"], - months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], - monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], - today: "Dnes" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.cy.js b/public/js/locales/bootstrap-datepicker.cy.js deleted file mode 100644 index 7e1136ab..00000000 --- a/public/js/locales/bootstrap-datepicker.cy.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Welsh translation for bootstrap-datepicker - * S. Morris <s.morris@bangor.ac.uk> - */ -;(function($){ - $.fn.datepicker.dates['cy'] = { - days: ["Sul", "Llun", "Mawrth", "Mercher", "Iau", "Gwener", "Sadwrn", "Sul"], - daysShort: ["Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad", "Sul"], - daysMin: ["Su", "Ll", "Ma", "Me", "Ia", "Gwe", "Sa", "Su"], - months: ["Ionawr", "Chewfror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorfennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"], - monthsShort: ["Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", "Gor", "Aws", "Med", "Hyd", "Tach", "Rha"], - today: "Heddiw" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.da.js b/public/js/locales/bootstrap-datepicker.da.js deleted file mode 100644 index c3d702d4..00000000 --- a/public/js/locales/bootstrap-datepicker.da.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Danish translation for bootstrap-datepicker - * Christian Pedersen <http://github.com/chripede> - */ -;(function($){ - $.fn.datepicker.dates['da'] = { - days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], - daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], - daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], - months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - today: "I Dag", - clear: "Nulstil" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.de.js b/public/js/locales/bootstrap-datepicker.de.js deleted file mode 100644 index a27ba578..00000000 --- a/public/js/locales/bootstrap-datepicker.de.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * German translation for bootstrap-datepicker - * Sam Zurcher <sam@orelias.ch> - */ -;(function($){ - $.fn.datepicker.dates['de'] = { - days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], - daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"], - daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], - months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], - monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], - today: "Heute", - clear: "Löschen", - weekStart: 1, - format: "dd.mm.yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.el.js b/public/js/locales/bootstrap-datepicker.el.js deleted file mode 100644 index 3b630f38..00000000 --- a/public/js/locales/bootstrap-datepicker.el.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Greek translation for bootstrap-datepicker - */ -;(function($){ - $.fn.datepicker.dates['el'] = { - days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"], - daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"], - daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"], - months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], - monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], - today: "Σήμερα" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.es.js b/public/js/locales/bootstrap-datepicker.es.js deleted file mode 100644 index 72176902..00000000 --- a/public/js/locales/bootstrap-datepicker.es.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Spanish translation for bootstrap-datepicker - * Bruno Bonamin <bruno.bonamin@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['es'] = { - days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"], - daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"], - daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"], - months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], - monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], - today: "Hoy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.et.js b/public/js/locales/bootstrap-datepicker.et.js deleted file mode 100644 index 87c812ed..00000000 --- a/public/js/locales/bootstrap-datepicker.et.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Estonian translation for bootstrap-datepicker - * Ando Roots <https://github.com/anroots> - * Fixes by Illimar Tambek <<https://github.com/ragulka> - */ -;(function($){ - $.fn.datepicker.dates['et'] = { - days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev", "Pühapäev"], - daysShort: ["Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup", "Pühap"], - daysMin: ["P", "E", "T", "K", "N", "R", "L", "P"], - months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"], - monthsShort: ["Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"], - today: "Täna", - clear: "Tühjenda", - weekStart: 1, - format: "dd.mm.yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.fa.js b/public/js/locales/bootstrap-datepicker.fa.js deleted file mode 100644 index 6503c85d..00000000 --- a/public/js/locales/bootstrap-datepicker.fa.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Persian translation for bootstrap-datepicker - * Mostafa Rokooie <mostafa.rokooie@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['fa'] = { - days: ["یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه", "یکشنبه"], - daysShort: ["یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه", "یک"], - daysMin: ["ی", "د", "س", "چ", "پ", "ج", "ش", "ی"], - months: ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"], - monthsShort: ["ژان", "فور", "مار", "آور", "مه", "ژون", "ژوی", "اوت", "سپت", "اکت", "نوا", "دسا"], - today: "امروز", - clear: "پاک کن", - weekStart: 1, - format: "yyyy/mm/dd" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.fi.js b/public/js/locales/bootstrap-datepicker.fi.js deleted file mode 100644 index 01f40dc2..00000000 --- a/public/js/locales/bootstrap-datepicker.fi.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Finnish translation for bootstrap-datepicker - * Jaakko Salonen <https://github.com/jsalonen> - */ -;(function($){ - $.fn.datepicker.dates['fi'] = { - days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"], - daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"], - daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"], - months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], - monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], - today: "tänään", - weekStart: 1, - format: "d.m.yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.fr.js b/public/js/locales/bootstrap-datepicker.fr.js deleted file mode 100644 index eff07aa6..00000000 --- a/public/js/locales/bootstrap-datepicker.fr.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * French translation for bootstrap-datepicker - * Nico Mollet <nico.mollet@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['fr'] = { - days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], - daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], - daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], - months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], - monthsShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Déc"], - today: "Aujourd'hui", - clear: "Effacer", - weekStart: 1, - format: "dd/mm/yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.gl.js b/public/js/locales/bootstrap-datepicker.gl.js deleted file mode 100644 index 538fd5e3..00000000 --- a/public/js/locales/bootstrap-datepicker.gl.js +++ /dev/null @@ -1,11 +0,0 @@ -;(function($){ - $.fn.datepicker.dates['gl'] = { - days: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado", "Domingo"], - daysShort: ["Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb", "Dom"], - daysMin: ["Do", "Lu", "Ma", "Me", "Xo", "Ve", "Sa", "Do"], - months: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"], - monthsShort: ["Xan", "Feb", "Mar", "Abr", "Mai", "Xun", "Xul", "Ago", "Sep", "Out", "Nov", "Dec"], - today: "Hoxe", - clear: "Limpar" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.he.js b/public/js/locales/bootstrap-datepicker.he.js deleted file mode 100644 index 2e17393b..00000000 --- a/public/js/locales/bootstrap-datepicker.he.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Hebrew translation for bootstrap-datepicker - * Sagie Maoz <sagie@maoz.info> - */ -;(function($){ - $.fn.datepicker.dates['he'] = { - days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], - daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], - daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], - months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], - monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], - today: "היום", - rtl: true - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.hr.js b/public/js/locales/bootstrap-datepicker.hr.js deleted file mode 100644 index 655ea54b..00000000 --- a/public/js/locales/bootstrap-datepicker.hr.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Croatian localisation - */ -;(function($){ - $.fn.datepicker.dates['hr'] = { - days: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota", "Nedjelja"], - daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub", "Ned"], - daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"], - months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], - monthsShort: ["Sij", "Velj", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"], - today: "Danas" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.hu.js b/public/js/locales/bootstrap-datepicker.hu.js deleted file mode 100644 index bf5308a1..00000000 --- a/public/js/locales/bootstrap-datepicker.hu.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Hungarian translation for bootstrap-datepicker - * Sotus László <lacisan@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['hu'] = { - days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"], - daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"], - daysMin: ["Va", "Hé", "Ke", "Sz", "Cs", "Pé", "Sz", "Va"], - months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], - monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"], - today: "Ma", - weekStart: 1, - format: "yyyy.mm.dd" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.id.js b/public/js/locales/bootstrap-datepicker.id.js deleted file mode 100644 index aae6e896..00000000 --- a/public/js/locales/bootstrap-datepicker.id.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Bahasa translation for bootstrap-datepicker - * Azwar Akbar <azwar.akbar@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['id'] = { - days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], - daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"], - daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"], - months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], - today: "Hari Ini", - clear: "Kosongkan" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.is.js b/public/js/locales/bootstrap-datepicker.is.js deleted file mode 100644 index 0e57a916..00000000 --- a/public/js/locales/bootstrap-datepicker.is.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Icelandic translation for bootstrap-datepicker - * Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['is'] = { - days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"], - daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"], - daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"], - months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], - today: "Í Dag" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.it.js b/public/js/locales/bootstrap-datepicker.it.js deleted file mode 100644 index 9f476fa2..00000000 --- a/public/js/locales/bootstrap-datepicker.it.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Italian translation for bootstrap-datepicker - * Enrico Rubboli <rubboli@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['it'] = { - days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"], - daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], - daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], - months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], - monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], - today: "Oggi", - clear: "Cancella", - weekStart: 1, - format: "dd/mm/yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.ja.js b/public/js/locales/bootstrap-datepicker.ja.js deleted file mode 100644 index ed0bc0f9..00000000 --- a/public/js/locales/bootstrap-datepicker.ja.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Japanese translation for bootstrap-datepicker - * Norio Suzuki <https://github.com/suzuki/> - */ -;(function($){ - $.fn.datepicker.dates['ja'] = { - days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"], - daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"], - daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"], - months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], - monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], - today: "今日", - format: "yyyy/mm/dd" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.ka.js b/public/js/locales/bootstrap-datepicker.ka.js deleted file mode 100644 index 54344549..00000000 --- a/public/js/locales/bootstrap-datepicker.ka.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Georgian translation for bootstrap-datepicker - * Levan Melikishvili <levani0101@yahoo.com> - */ -;(function($){ - $.fn.datepicker.dates['ka'] = { - days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი", "კვირა"], - daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ", "კვი"], - daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა", "კვ"], - months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომები", "ნოემბერი", "დეკემბერი"], - monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"], - today: "დღეს", - clear: "გასუფთავება", - weekStart: 1, - format: "dd.mm.yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.kk.js b/public/js/locales/bootstrap-datepicker.kk.js deleted file mode 100644 index 94dd6b8f..00000000 --- a/public/js/locales/bootstrap-datepicker.kk.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Kazakh translation for bootstrap-datepicker - * Yerzhan Tolekov <era.tolekov@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['kk'] = { - days: ["Жексенбі", "Дүйсенбі", "Сейсенбі", "Сәрсенбі", "Бейсенбі", "Жұма", "Сенбі", "Жексенбі"], - daysShort: ["Жек", "Дүй", "Сей", "Сәр", "Бей", "Жұм", "Сен", "Жек"], - daysMin: ["Жк", "Дс", "Сс", "Ср", "Бс", "Жм", "Сн", "Жк"], - months: ["Қаңтар", "Ақпан", "Наурыз", "Сәуір", "Мамыр", "Маусым", "Шілде", "Тамыз", "Қыркүйек", "Қазан", "Қараша", "Желтоқсан"], - monthsShort: ["Қаң", "Ақп", "Нау", "Сәу", "Мамыр", "Мау", "Шлд", "Тмз", "Қыр", "Қзн", "Қар", "Жел"], - today: "Бүгін", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.kr.js b/public/js/locales/bootstrap-datepicker.kr.js deleted file mode 100644 index 183a88d1..00000000 --- a/public/js/locales/bootstrap-datepicker.kr.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Korean translation for bootstrap-datepicker - * Gu Youn <http://github.com/guyoun> - */ -;(function($){ - $.fn.datepicker.dates['kr'] = { - days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], - daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], - daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], - months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], - monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.lt.js b/public/js/locales/bootstrap-datepicker.lt.js deleted file mode 100644 index 11c1b3ad..00000000 --- a/public/js/locales/bootstrap-datepicker.lt.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Lithuanian translation for bootstrap-datepicker - * Šarūnas Gliebus <ssharunas@yahoo.co.uk> - */ - -;(function($){ - $.fn.datepicker.dates['lt'] = { - days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"], - daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"], - daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"], - months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], - monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], - today: "Šiandien", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.lv.js b/public/js/locales/bootstrap-datepicker.lv.js deleted file mode 100644 index 76d0f3a6..00000000 --- a/public/js/locales/bootstrap-datepicker.lv.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Latvian translation for bootstrap-datepicker - * Artis Avotins <artis@apit.lv> - */ - -;(function($){ - $.fn.datepicker.dates['lv'] = { - days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"], - daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"], - daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se", "Sv"], - months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec"], - today: "Šodien", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.mk.js b/public/js/locales/bootstrap-datepicker.mk.js deleted file mode 100644 index 0ab8cf68..00000000 --- a/public/js/locales/bootstrap-datepicker.mk.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Macedonian translation for bootstrap-datepicker - * Marko Aleksic <psybaron@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['mk'] = { - days: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота", "Недела"], - daysShort: ["Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб", "Нед"], - daysMin: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са", "Не"], - months: ["Јануари", "Февруари", "Март", "Април", "Мај", "Јуни", "Јули", "Август", "Септември", "Октомври", "Ноември", "Декември"], - monthsShort: ["Јан", "Фев", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Ное", "Дек"], - today: "Денес", - format: "dd.mm.yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.ms.js b/public/js/locales/bootstrap-datepicker.ms.js deleted file mode 100644 index fa3a21a5..00000000 --- a/public/js/locales/bootstrap-datepicker.ms.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Malay translation for bootstrap-datepicker - * Ateman Faiz <noorulfaiz@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['ms'] = { - days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"], - daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"], - daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"], - months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], - today: "Hari Ini" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.nb.js b/public/js/locales/bootstrap-datepicker.nb.js deleted file mode 100644 index 7b28e84f..00000000 --- a/public/js/locales/bootstrap-datepicker.nb.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Norwegian (bokmål) translation for bootstrap-datepicker - * Fredrik Sundmyhr <http://github.com/fsundmyhr> - */ -;(function($){ - $.fn.datepicker.dates['nb'] = { - days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], - daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], - daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], - months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], - today: "I Dag" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.nl-BE.js b/public/js/locales/bootstrap-datepicker.nl-BE.js deleted file mode 100644 index ee4201a6..00000000 --- a/public/js/locales/bootstrap-datepicker.nl-BE.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Belgium-Dutch translation for bootstrap-datepicker - * Julien Poulin <poulin_julien@hotmail.com> - */ -;(function($){ - $.fn.datepicker.dates['nl-BE'] = { - days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], - daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], - daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], - months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], - monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - today: "Vandaag", - clear: "Leegmaken", - weekStart: 1, - format: "dd/mm/yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.nl.js b/public/js/locales/bootstrap-datepicker.nl.js deleted file mode 100644 index 13a2f1a3..00000000 --- a/public/js/locales/bootstrap-datepicker.nl.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Dutch translation for bootstrap-datepicker - * Reinier Goltstein <mrgoltstein@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['nl'] = { - days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], - daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], - daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], - months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], - monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - today: "Vandaag" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.no.js b/public/js/locales/bootstrap-datepicker.no.js deleted file mode 100644 index c29ec83b..00000000 --- a/public/js/locales/bootstrap-datepicker.no.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Norwegian translation for bootstrap-datepicker - **/ -;(function($){ - $.fn.datepicker.dates['no'] = { - days: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], - daysShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], - daysMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - months: ['Januar','Februar','Mars','April','Mai','Juni','Juli','August','September','Oktober','November','Desember'], - monthsShort: ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Des'], - today: 'I dag', - clear: 'Nullstill', - weekStart: 1, - format: 'dd.mm.yyyy' - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.pl.js b/public/js/locales/bootstrap-datepicker.pl.js deleted file mode 100644 index f3fff8c8..00000000 --- a/public/js/locales/bootstrap-datepicker.pl.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Polish translation for bootstrap-datepicker - * Robert <rtpm@gazeta.pl> - */ -;(function($){ - $.fn.datepicker.dates['pl'] = { - days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], - daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], - daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], - months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], - monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], - today: "Dzisiaj", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.pt-BR.js b/public/js/locales/bootstrap-datepicker.pt-BR.js deleted file mode 100644 index eb642b7c..00000000 --- a/public/js/locales/bootstrap-datepicker.pt-BR.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Brazilian translation for bootstrap-datepicker - * Cauan Cabral <cauan@radig.com.br> - */ -;(function($){ - $.fn.datepicker.dates['pt-BR'] = { - days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], - daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], - daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], - months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], - monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], - today: "Hoje", - clear: "Limpar" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.pt.js b/public/js/locales/bootstrap-datepicker.pt.js deleted file mode 100644 index e54981d3..00000000 --- a/public/js/locales/bootstrap-datepicker.pt.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Portuguese translation for bootstrap-datepicker - * Original code: Cauan Cabral <cauan@radig.com.br> - * Tiago Melo <tiago.blackcode@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['pt'] = { - days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], - daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], - daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], - months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], - monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], - today: "Hoje", - clear: "Limpar" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.ro.js b/public/js/locales/bootstrap-datepicker.ro.js deleted file mode 100644 index e1e65df2..00000000 --- a/public/js/locales/bootstrap-datepicker.ro.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Romanian translation for bootstrap-datepicker - * Cristian Vasile <cristi.mie@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['ro'] = { - days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"], - daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"], - daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"], - months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], - monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], - today: "Astăzi", - clear: "Șterge", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.rs-latin.js b/public/js/locales/bootstrap-datepicker.rs-latin.js deleted file mode 100644 index d9424852..00000000 --- a/public/js/locales/bootstrap-datepicker.rs-latin.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Serbian latin translation for bootstrap-datepicker - * Bojan Milosavlević <milboj@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['rs-latin'] = { - days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"], - daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"], - daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"], - months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], - today: "Danas" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.rs.js b/public/js/locales/bootstrap-datepicker.rs.js deleted file mode 100644 index 6b657473..00000000 --- a/public/js/locales/bootstrap-datepicker.rs.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Serbian cyrillic translation for bootstrap-datepicker - * Bojan Milosavlević <milboj@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['rs'] = { - days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"], - daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"], - daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"], - months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], - monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], - today: "Данас" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.ru.js b/public/js/locales/bootstrap-datepicker.ru.js deleted file mode 100644 index e230aa92..00000000 --- a/public/js/locales/bootstrap-datepicker.ru.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Russian translation for bootstrap-datepicker - * Victor Taranenko <darwin@snowdale.com> - */ -;(function($){ - $.fn.datepicker.dates['ru'] = { - days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], - daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"], - daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], - months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], - monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], - today: "Сегодня", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.sk.js b/public/js/locales/bootstrap-datepicker.sk.js deleted file mode 100644 index c48032a5..00000000 --- a/public/js/locales/bootstrap-datepicker.sk.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Slovak translation for bootstrap-datepicker - * Marek Lichtner <marek@licht.sk> - * Fixes by Michal Remiš <michal.remis@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates["sk"] = { - days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"], - daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"], - daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"], - months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], - today: "Dnes" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.sl.js b/public/js/locales/bootstrap-datepicker.sl.js deleted file mode 100644 index 41b0e060..00000000 --- a/public/js/locales/bootstrap-datepicker.sl.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Slovene translation for bootstrap-datepicker - * Gregor Rudolf <gregor.rudolf@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['sl'] = { - days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"], - daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"], - daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"], - months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], - today: "Danes" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.sq.js b/public/js/locales/bootstrap-datepicker.sq.js deleted file mode 100644 index a045a9d9..00000000 --- a/public/js/locales/bootstrap-datepicker.sq.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Albanian translation for bootstrap-datepicker - * Tomor Pupovci <http://www.github.com/ttomor> - */ -;(function($){ - $.fn.datepicker.dates['sq'] = { - days: ["E Diel", "E Hënë", "E martē", "E mërkurë", "E Enjte", "E Premte", "E Shtunë", "E Diel"], - daysShort: ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu", "Die"], - daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht", "Di"], - months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"], - monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"], - today: "Sot" - }; -}(jQuery)); - diff --git a/public/js/locales/bootstrap-datepicker.sv.js b/public/js/locales/bootstrap-datepicker.sv.js deleted file mode 100644 index 029cea00..00000000 --- a/public/js/locales/bootstrap-datepicker.sv.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Swedish translation for bootstrap-datepicker - * Patrik Ragnarsson <patrik@starkast.net> - */ -;(function($){ - $.fn.datepicker.dates['sv'] = { - days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"], - daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"], - daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"], - months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], - monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - today: "Idag", - format: "yyyy-mm-dd", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.sw.js b/public/js/locales/bootstrap-datepicker.sw.js deleted file mode 100644 index 622e0ef0..00000000 --- a/public/js/locales/bootstrap-datepicker.sw.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Swahili translation for bootstrap-datepicker - * Edwin Mugendi <https://github.com/edwinmugendi> - * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku - */ -;(function($){ - $.fn.datepicker.dates['sw'] = { - days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"], - daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"], - daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"], - months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], - monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], - today: "Leo" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.th.js b/public/js/locales/bootstrap-datepicker.th.js deleted file mode 100644 index 562b063c..00000000 --- a/public/js/locales/bootstrap-datepicker.th.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Thai translation for bootstrap-datepicker - * Suchau Jiraprapot <seroz24@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['th'] = { - days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], - daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], - daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], - months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], - monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], - today: "วันนี้" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.tr.js b/public/js/locales/bootstrap-datepicker.tr.js deleted file mode 100644 index 2be8b6d8..00000000 --- a/public/js/locales/bootstrap-datepicker.tr.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Turkish translation for bootstrap-datepicker - * Serkan Algur <kaisercrazy_2@hotmail.com> - */ -;(function($){ - $.fn.datepicker.dates['tr'] = { - days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"], - daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"], - daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"], - months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], - monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], - today: "Bugün", - format: "dd.mm.yyyy" - }; -}(jQuery)); - diff --git a/public/js/locales/bootstrap-datepicker.ua.js b/public/js/locales/bootstrap-datepicker.ua.js deleted file mode 100644 index d4bb0f02..00000000 --- a/public/js/locales/bootstrap-datepicker.ua.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Ukrainian translation for bootstrap-datepicker - * Igor Polynets - */ -;(function($){ - $.fn.datepicker.dates['ua'] = { - days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятница", "Субота", "Неділя"], - daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], - daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], - months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], - monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], - today: "Сьогодні", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.vi.js b/public/js/locales/bootstrap-datepicker.vi.js deleted file mode 100644 index a8cc52ee..00000000 --- a/public/js/locales/bootstrap-datepicker.vi.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Vietnamese translation for bootstrap-datepicker - * An Vo <https://github.com/anvoz/> - */ -;(function($){ - $.fn.datepicker.dates['vi'] = { - days: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy", "Chủ nhật"], - daysShort: ["CN", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7", "CN"], - daysMin: ["CN", "T2", "T3", "T4", "T5", "T6", "T7", "CN"], - months: ["Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"], - monthsShort: ["Th1", "Th2", "Th3", "Th4", "Th5", "Th6", "Th7", "Th8", "Th9", "Th10", "Th11", "Th12"], - today: "Hôm nay", - clear: "Xóa", - format: "dd/mm/yyyy" - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.zh-CN.js b/public/js/locales/bootstrap-datepicker.zh-CN.js deleted file mode 100644 index d6625ec6..00000000 --- a/public/js/locales/bootstrap-datepicker.zh-CN.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Simplified Chinese translation for bootstrap-datepicker - * Yuan Cheung <advanimal@gmail.com> - */ -;(function($){ - $.fn.datepicker.dates['zh-CN'] = { - days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], - daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], - daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], - months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], - monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], - today: "今日", - format: "yyyy年mm月dd日", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/js/locales/bootstrap-datepicker.zh-TW.js b/public/js/locales/bootstrap-datepicker.zh-TW.js deleted file mode 100644 index 53337ae0..00000000 --- a/public/js/locales/bootstrap-datepicker.zh-TW.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Traditional Chinese translation for bootstrap-datepicker - * Rung-Sheng Jang <daniel@i-trend.co.cc> - * FrankWu <frankwu100@gmail.com> Fix more appropriate use of Traditional Chinese habit - */ -;(function($){ - $.fn.datepicker.dates['zh-TW'] = { - days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], - daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六", "週日"], - daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], - months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], - monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], - today: "今天", - format: "yyyy年mm月dd日", - weekStart: 1 - }; -}(jQuery)); diff --git a/public/less/_base.less b/public/less/_base.less index da031f9b..35328069 100644 --- a/public/less/_base.less +++ b/public/less/_base.less @@ -75,6 +75,9 @@ footer { text-align: center; color: #428bca; } + .ui.language.dropdown { + z-index: 10000; + } .links >* { border-left: 1px solid #d6d6d6; padding-left: 8px; diff --git a/public/less/_repository.less b/public/less/_repository.less index 3dd90189..db245e93 100644 --- a/public/less/_repository.less +++ b/public/less/_repository.less @@ -51,6 +51,9 @@ border: 1px solid rgba(0,0,0,.15); } } + &.input { + margin-right: -7px; + } .new-label-input { width: 150px; } @@ -91,17 +94,20 @@ .menu { max-height: 300px; overflow-x: auto; - } - } - .type.item .menu { right: 0!important; left: auto!important; + .clickable .name { + padding-left: 15px!important; + } + } + } + + .page.buttons { + padding-top: 15px; } .issue.list { clear: both; list-style: none; - font-size: 13px; - padding-top: 15px; >.item { padding-top: 15px; padding-bottom: 10px; @@ -122,15 +128,20 @@ .desc { padding-top: 5px; color: #999; + a.milestone { + padding-left: 5px; + color: #999!important; + &:hover { + color: #000!important; + } + } } } - .page.buttons { - padding-top: 15px; - } } + .label.list { clear: both; - padding-top: 15px; + list-style: none; .item { padding-top: 10px; padding-bottom: 10px; @@ -149,6 +160,63 @@ } } } + + .milestone.list { + clear: both; + list-style: none; + > .item { + padding-top: 10px; + padding-bottom: 10px; + border-bottom: 1px dashed #AAA; + > a { + padding-top: 5px; + padding-right: 10px; + color: #000; + &:hover { + color: #4078c0; + } + } + .ui.progress { + width: 40%; + padding: 0; + border: 0; + margin: 0; + .bar { + height: 20px; + } + } + .meta { + color: #999; + padding-top: 5px; + .issue-stats .octicon{ + padding-left: 5px; + } + .overdue { + color: red; + } + } + .operate { + margin-top: -15px; + > a { + font-size: 15px; + padding-top: 5px; + padding-right: 10px; + color: #666; + &:hover { + color: #000; + } + } + } + .content { + padding-top: 10px; + } + } + } + &.new.milestone { + textarea { + height: 200px; + } + } } .edit-label.modal { diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 3e5f4320..d94c21ad 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -33,7 +33,7 @@ const ( LABELS base.TplName = "repo/issue/labels" - MILESTONE base.TplName = "repo/issue/milestone" + MILESTONE base.TplName = "repo/issue/milestones" MILESTONE_NEW base.TplName = "repo/issue/milestone_new" MILESTONE_EDIT base.TplName = "repo/issue/milestone_edit" ) @@ -66,8 +66,6 @@ func Issues(ctx *middleware.Context) { viewType = "all" } - isShowClosed := ctx.Query("state") == "closed" - // Must sign in to see issues about you. if viewType != "all" && !ctx.IsSigned { ctx.SetCookie("redirect_to", "/"+url.QueryEscape(setting.AppSubUrl+ctx.Req.RequestURI), 0, setting.AppSubUrl) @@ -96,6 +94,7 @@ func Issues(ctx *middleware.Context) { repo := ctx.Repo.Repository selectLabels := ctx.Query("labels") milestoneID := ctx.QueryInt64("milestone") + isShowClosed := ctx.Query("state") == "closed" issueStats := models.GetIssueStats(repo.Id, uid, com.StrTo(selectLabels).MustInt64(), isShowClosed, filterMode) page := ctx.QueryInt("page") @@ -112,7 +111,7 @@ func Issues(ctx *middleware.Context) { ctx.Data["Page"] = paginater.New(total, setting.IssuePagingNum, page, 5) // Get issues. - issues, err := models.GetIssues(uid, assigneeID, repo.Id, posterID, milestoneID, + issues, err := models.Issues(uid, assigneeID, repo.Id, posterID, milestoneID, page, isShowClosed, filterMode == models.FM_MENTION, selectLabels, ctx.Query("sortType")) if err != nil { ctx.Handle(500, "GetIssues: %v", err) @@ -151,18 +150,25 @@ func Issues(ctx *middleware.Context) { issues[i].IsRead = true } } + ctx.Data["Issues"] = issues + + // Get milestones. + miles, err := models.GetAllRepoMilestones(repo.Id) + if err != nil { + ctx.Handle(500, "GetAllRepoMilestones: %v", err) + return + } + ctx.Data["Milestones"] = miles ctx.Data["IssueStats"] = issueStats ctx.Data["SelectLabels"] = com.StrTo(selectLabels).MustInt64() ctx.Data["ViewType"] = viewType - ctx.Data["Issues"] = issues + ctx.Data["MilestoneID"] = milestoneID ctx.Data["IsShowClosed"] = isShowClosed if isShowClosed { ctx.Data["State"] = "closed" - ctx.Data["ShowCount"] = issueStats.ClosedCount } else { ctx.Data["State"] = "open" - ctx.Data["ShowCount"] = issueStats.OpenCount } ctx.HTML(200, ISSUES) @@ -174,22 +180,25 @@ func CreateIssue(ctx *middleware.Context) { ctx.Data["IsRepoToolbarIssuesList"] = false ctx.Data["AttachmentsEnabled"] = setting.AttachmentEnabled - var err error + var ( + repo = ctx.Repo.Repository + err error + ) // Get all milestones. - ctx.Data["OpenMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, false) + ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.Id, -1, false) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetMilestones.1): %v", err) + ctx.Handle(500, "GetMilestones.1: %v", err) return } - ctx.Data["ClosedMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, true) + ctx.Data["ClosedMilestones"], err = models.GetMilestones(repo.Id, -1, true) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetMilestones.2): %v", err) + ctx.Handle(500, "GetMilestones.2: %v", err) return } - us, err := ctx.Repo.Repository.GetCollaborators() + us, err := repo.GetCollaborators() if err != nil { - ctx.Handle(500, "issue.CreateIssue(GetCollaborators)", err) + ctx.Handle(500, "GetCollaborators", err) return } @@ -220,12 +229,12 @@ func CreateIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) { var err error // Get all milestones. - _, err = models.GetMilestones(ctx.Repo.Repository.Id, false) + _, err = models.GetMilestones(ctx.Repo.Repository.Id, -1, false) if err != nil { send(500, nil, err) return } - _, err = models.GetMilestones(ctx.Repo.Repository.Id, true) + _, err = models.GetMilestones(ctx.Repo.Repository.Id, -1, true) if err != nil { send(500, nil, err) return @@ -247,12 +256,12 @@ func CreateIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) { form.AssigneeId = 0 } issue := &models.Issue{ - RepoId: ctx.Repo.Repository.Id, + RepoID: ctx.Repo.Repository.Id, Index: int64(ctx.Repo.Repository.NumIssues) + 1, Name: form.IssueName, - PosterId: ctx.User.Id, - MilestoneId: form.MilestoneId, - AssigneeId: form.AssigneeId, + PosterID: ctx.User.Id, + MilestoneID: form.MilestoneId, + AssigneeID: form.AssigneeId, LabelIds: form.Labels, Content: form.Content, } @@ -351,72 +360,72 @@ func ViewIssue(ctx *middleware.Context) { issue, err := models.GetIssueByIndex(ctx.Repo.Repository.Id, idx) if err != nil { if err == models.ErrIssueNotExist { - ctx.Handle(404, "issue.ViewIssue(GetIssueByIndex)", err) + ctx.Handle(404, "GetIssueByIndex", err) } else { - ctx.Handle(500, "issue.ViewIssue(GetIssueByIndex)", err) + ctx.Handle(500, "GetIssueByIndex", err) } return } // Get labels. if err = issue.GetLabels(); err != nil { - ctx.Handle(500, "issue.ViewIssue(GetLabels)", err) + ctx.Handle(500, "GetLabels", err) return } labels, err := models.GetLabels(ctx.Repo.Repository.Id) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetLabels.2)", err) + ctx.Handle(500, "GetLabels.2", err) return } checkLabels(issue.Labels, labels) ctx.Data["Labels"] = labels // Get assigned milestone. - if issue.MilestoneId > 0 { - ctx.Data["Milestone"], err = models.GetMilestoneById(issue.MilestoneId) + if issue.MilestoneID > 0 { + ctx.Data["Milestone"], err = models.GetMilestoneById(issue.MilestoneID) if err != nil { - if err == models.ErrMilestoneNotExist { - log.Warn("issue.ViewIssue(GetMilestoneById): %v", err) + if models.IsErrMilestoneNotExist(err) { + log.Warn("GetMilestoneById: %v", err) } else { - ctx.Handle(500, "issue.ViewIssue(GetMilestoneById)", err) + ctx.Handle(500, "GetMilestoneById", err) return } } } // Get all milestones. - ctx.Data["OpenMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, false) + ctx.Data["OpenMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, -1, false) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetMilestones.1): %v", err) + ctx.Handle(500, "GetMilestones.1: %v", err) return } - ctx.Data["ClosedMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, true) + ctx.Data["ClosedMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, -1, true) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetMilestones.2): %v", err) + ctx.Handle(500, "GetMilestones.2: %v", err) return } // Get all collaborators. ctx.Data["Collaborators"], err = ctx.Repo.Repository.GetCollaborators() if err != nil { - ctx.Handle(500, "issue.CreateIssue(GetCollaborators)", err) + ctx.Handle(500, "GetCollaborators", err) return } if ctx.IsSigned { // Update issue-user. if err = models.UpdateIssueUserPairByRead(ctx.User.Id, issue.ID); err != nil { - ctx.Handle(500, "issue.ViewIssue(UpdateIssueUserPairByRead): %v", err) + ctx.Handle(500, "UpdateIssueUserPairByRead: %v", err) return } } // Get poster and Assignee. if err = issue.GetPoster(); err != nil { - ctx.Handle(500, "issue.ViewIssue(GetPoster): %v", err) + ctx.Handle(500, "GetPoster: %v", err) return } else if err = issue.GetAssignee(); err != nil { - ctx.Handle(500, "issue.ViewIssue(GetAssignee): %v", err) + ctx.Handle(500, "GetAssignee: %v", err) return } issue.RenderedContent = string(base.RenderMarkdown([]byte(issue.Content), ctx.Repo.RepoLink)) @@ -424,7 +433,7 @@ func ViewIssue(ctx *middleware.Context) { // Get comments. comments, err := models.GetIssueComments(issue.ID) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetIssueComments): %v", err) + ctx.Handle(500, "GetIssueComments: %v", err) return } @@ -432,7 +441,7 @@ func ViewIssue(ctx *middleware.Context) { for i := range comments { u, err := models.GetUserById(comments[i].PosterId) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetUserById.2): %v", err) + ctx.Handle(500, "GetUserById.2: %v", err) return } comments[i].Poster = u @@ -447,7 +456,7 @@ func ViewIssue(ctx *middleware.Context) { ctx.Data["Title"] = issue.Name ctx.Data["Issue"] = issue ctx.Data["Comments"] = comments - ctx.Data["IsIssueOwner"] = ctx.Repo.IsOwner() || (ctx.IsSigned && issue.PosterId == ctx.User.Id) + ctx.Data["IsIssueOwner"] = ctx.Repo.IsOwner() || (ctx.IsSigned && issue.PosterID == ctx.User.Id) ctx.Data["IsRepoToolbarIssues"] = true ctx.Data["IsRepoToolbarIssuesList"] = false ctx.HTML(200, ISSUE_VIEW) @@ -470,7 +479,7 @@ func UpdateIssue(ctx *middleware.Context, form auth.CreateIssueForm) { return } - if ctx.User.Id != issue.PosterId && !ctx.Repo.IsOwner() { + if ctx.User.Id != issue.PosterID && !ctx.Repo.IsOwner() { ctx.Error(403) return } @@ -595,7 +604,7 @@ func UpdateIssueMilestone(ctx *middleware.Context) { return } - oldMid := issue.MilestoneId + oldMid := issue.MilestoneID mid := com.StrTo(ctx.Query("milestoneid")).MustInt64() if oldMid == mid { ctx.JSON(200, map[string]interface{}{ @@ -605,7 +614,7 @@ func UpdateIssueMilestone(ctx *middleware.Context) { } // Not check for invalid milestone id and give responsibility to owners. - issue.MilestoneId = mid + issue.MilestoneID = mid if err = models.ChangeMilestoneAssign(oldMid, mid, issue); err != nil { ctx.Handle(500, "issue.UpdateIssueMilestone(ChangeMilestoneAssign)", err) return @@ -643,7 +652,7 @@ func UpdateAssignee(ctx *middleware.Context) { aid := com.StrTo(ctx.Query("assigneeid")).MustInt64() // Not check for invalid assignee id and give responsibility to owners. - issue.AssigneeId = aid + issue.AssigneeID = aid if err = models.UpdateIssueUserPairByAssignee(aid, issue.ID); err != nil { ctx.Handle(500, "UpdateIssueUserPairByAssignee: %v", err) return @@ -766,7 +775,7 @@ func Comment(ctx *middleware.Context) { // Check if issue owner changes the status of issue. var newStatus string - if ctx.Repo.IsOwner() || issue.PosterId == ctx.User.Id { + if ctx.Repo.IsOwner() || issue.PosterID == ctx.User.Id { newStatus = ctx.Query("change_status") } if len(newStatus) > 0 { @@ -800,7 +809,7 @@ func Comment(ctx *middleware.Context) { } // Change open/closed issue counter for the associated milestone - if issue.MilestoneId > 0 { + if issue.MilestoneID > 0 { if err = models.ChangeMilestoneIssueStats(issue); err != nil { send(500, nil, err) } @@ -951,13 +960,10 @@ func UpdateLabel(ctx *middleware.Context, form auth.CreateLabelForm) { } func DeleteLabel(ctx *middleware.Context) { - id := ctx.QueryInt64("id") - if id > 0 { - if err := models.DeleteLabel(ctx.Repo.Repository.Id, id); err != nil { - ctx.Flash.Error("DeleteLabel: " + err.Error()) - } else { - ctx.Flash.Success(ctx.Tr("repo.issues.label_deletion_success")) - } + if err := models.DeleteLabel(ctx.Repo.Repository.Id, ctx.QueryInt64("id")); err != nil { + ctx.Flash.Error("DeleteLabel: " + err.Error()) + } else { + ctx.Flash.Success(ctx.Tr("repo.issues.label_deletion_success")) } ctx.JSON(200, map[string]interface{}{ @@ -967,13 +973,28 @@ func DeleteLabel(ctx *middleware.Context) { } func Milestones(ctx *middleware.Context) { - ctx.Data["Title"] = "Milestones" - ctx.Data["IsRepoToolbarIssues"] = true - ctx.Data["IsRepoToolbarIssuesList"] = true + ctx.Data["Title"] = ctx.Tr("repo.milestones") + ctx.Data["PageIsMilestones"] = true isShowClosed := ctx.Query("state") == "closed" + openCount, closedCount := models.MilestoneStats(ctx.Repo.Repository.Id) + ctx.Data["OpenCount"] = openCount + ctx.Data["ClosedCount"] = closedCount + + page := ctx.QueryInt("page") + if page <= 1 { + page = 1 + } - miles, err := models.GetMilestones(ctx.Repo.Repository.Id, isShowClosed) + var total int + if !isShowClosed { + total = int(openCount) + } else { + total = int(closedCount) + } + ctx.Data["Page"] = paginater.New(total, setting.IssuePagingNum, page, 5) + + miles, err := models.GetMilestones(ctx.Repo.Repository.Id, page, isShowClosed) if err != nil { ctx.Handle(500, "GetMilestones", err) return @@ -989,155 +1010,162 @@ func Milestones(ctx *middleware.Context) { } else { ctx.Data["State"] = "open" } + + ctx.Data["IsShowClosed"] = isShowClosed ctx.HTML(200, MILESTONE) } func NewMilestone(ctx *middleware.Context) { - ctx.Data["Title"] = "New Milestone" - ctx.Data["IsRepoToolbarIssues"] = true - ctx.Data["IsRepoToolbarIssuesList"] = true + ctx.Data["Title"] = ctx.Tr("repo.milestones.new") + ctx.Data["PageIsMilestones"] = true + ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) ctx.HTML(200, MILESTONE_NEW) } func NewMilestonePost(ctx *middleware.Context, form auth.CreateMilestoneForm) { - ctx.Data["Title"] = "New Milestone" - ctx.Data["IsRepoToolbarIssues"] = true - ctx.Data["IsRepoToolbarIssuesList"] = true + ctx.Data["Title"] = ctx.Tr("repo.milestones.new") + ctx.Data["PageIsMilestones"] = true + ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) if ctx.HasError() { ctx.HTML(200, MILESTONE_NEW) return } - var deadline time.Time - var err error if len(form.Deadline) == 0 { form.Deadline = "12/31/9999" } - deadline, err = time.Parse("01/02/2006", form.Deadline) + deadline, err := time.Parse("01/02/2006", form.Deadline) if err != nil { - ctx.Handle(500, "time.Parse", err) + ctx.Data["Err_Deadline"] = true + ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), MILESTONE_NEW, &form) return } - mile := &models.Milestone{ - RepoId: ctx.Repo.Repository.Id, + if err = models.NewMilestone(&models.Milestone{ + RepoID: ctx.Repo.Repository.Id, Index: int64(ctx.Repo.Repository.NumMilestones) + 1, Name: form.Title, Content: form.Content, Deadline: deadline, - } - if err = models.NewMilestone(mile); err != nil { + }); err != nil { ctx.Handle(500, "NewMilestone", err) return } + ctx.Flash.Success(ctx.Tr("repo.milestones.create_success", form.Title)) ctx.Redirect(ctx.Repo.RepoLink + "/milestones") } -func UpdateMilestone(ctx *middleware.Context) { - ctx.Data["Title"] = "Update Milestone" - ctx.Data["IsRepoToolbarIssues"] = true - ctx.Data["IsRepoToolbarIssuesList"] = true +func EditMilestone(ctx *middleware.Context) { + ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") + ctx.Data["PageIsMilestones"] = true + ctx.Data["PageIsEditMilestone"] = true + ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) - idx := ctx.ParamsInt64(":index") - if idx == 0 { - ctx.Handle(404, "issue.UpdateMilestone", nil) - return - } - - mile, err := models.GetMilestoneByIndex(ctx.Repo.Repository.Id, idx) + m, err := models.GetMilestoneByIndex(ctx.Repo.Repository.Id, ctx.ParamsInt64(":index")) if err != nil { - if err == models.ErrMilestoneNotExist { - ctx.Handle(404, "GetMilestoneByIndex", err) + if models.IsErrMilestoneNotExist(err) { + ctx.Handle(404, "GetMilestoneByIndex", nil) } else { ctx.Handle(500, "GetMilestoneByIndex", err) } return } + ctx.Data["title"] = m.Name + ctx.Data["content"] = m.Content + if len(m.DeadlineString) > 0 { + ctx.Data["deadline"] = m.DeadlineString + } + ctx.HTML(200, MILESTONE_NEW) +} - action := ctx.Params(":action") - if len(action) > 0 { - switch action { - case "open": - if mile.IsClosed { - if err = models.ChangeMilestoneStatus(mile, false); err != nil { - ctx.Handle(500, "ChangeMilestoneStatus", err) - return - } - } - case "close": - if !mile.IsClosed { - mile.ClosedDate = time.Now() - if err = models.ChangeMilestoneStatus(mile, true); err != nil { - ctx.Handle(500, "ChangeMilestoneStatus", err) - return - } - } - case "delete": - if err = models.DeleteMilestone(mile); err != nil { - ctx.Handle(500, "DeleteMilestone", err) - return - } - } - ctx.Redirect(ctx.Repo.RepoLink + "/milestones") +func EditMilestonePost(ctx *middleware.Context, form auth.CreateMilestoneForm) { + ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") + ctx.Data["PageIsMilestones"] = true + ctx.Data["PageIsEditMilestone"] = true + ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) + + if ctx.HasError() { + ctx.HTML(200, MILESTONE_NEW) return } - mile.DeadlineString = mile.Deadline.UTC().Format("01/02/2006") - if mile.DeadlineString == "12/31/9999" { - mile.DeadlineString = "" + if len(form.Deadline) == 0 { + form.Deadline = "9999-12-31" } - ctx.Data["Milestone"] = mile - - ctx.HTML(200, MILESTONE_EDIT) -} - -func UpdateMilestonePost(ctx *middleware.Context, form auth.CreateMilestoneForm) { - ctx.Data["Title"] = "Update Milestone" - ctx.Data["IsRepoToolbarIssues"] = true - ctx.Data["IsRepoToolbarIssuesList"] = true - - idx := ctx.ParamsInt64(":index") - if idx == 0 { - ctx.Handle(404, "issue.UpdateMilestonePost", nil) + deadline, err := time.Parse("2006-01-02", form.Deadline) + if err != nil { + ctx.Data["Err_Deadline"] = true + ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), MILESTONE_NEW, &form) return } - mile, err := models.GetMilestoneByIndex(ctx.Repo.Repository.Id, idx) + m, err := models.GetMilestoneByIndex(ctx.Repo.Repository.Id, ctx.ParamsInt64(":index")) if err != nil { - if err == models.ErrMilestoneNotExist { - ctx.Handle(404, "GetMilestoneByIndex", err) + if models.IsErrMilestoneNotExist(err) { + ctx.Handle(404, "GetMilestoneByIndex", nil) } else { ctx.Handle(500, "GetMilestoneByIndex", err) } return } - - if ctx.HasError() { - ctx.HTML(200, MILESTONE_EDIT) + m.Name = form.Title + m.Content = form.Content + m.Deadline = deadline + if err = models.UpdateMilestone(m); err != nil { + ctx.Handle(500, "UpdateMilestone", err) return } - var deadline time.Time - if len(form.Deadline) == 0 { - form.Deadline = "12/31/9999" - } - deadline, err = time.Parse("01/02/2006", form.Deadline) + ctx.Flash.Success(ctx.Tr("repo.milestones.edit_success", m.Name)) + ctx.Redirect(ctx.Repo.RepoLink + "/milestones") +} + +func ChangeMilestonStatus(ctx *middleware.Context) { + m, err := models.GetMilestoneByIndex(ctx.Repo.Repository.Id, ctx.ParamsInt64(":index")) if err != nil { - ctx.Handle(500, "time.Parse", err) + if models.IsErrMilestoneNotExist(err) { + ctx.Handle(404, "GetMilestoneByIndex", err) + } else { + ctx.Handle(500, "GetMilestoneByIndex", err) + } return } - mile.Name = form.Title - mile.Content = form.Content - mile.Deadline = deadline - if err = models.UpdateMilestone(mile); err != nil { - ctx.Handle(500, "UpdateMilestone", err) - return + switch ctx.Params(":action") { + case "open": + if m.IsClosed { + if err = models.ChangeMilestoneStatus(m, false); err != nil { + ctx.Handle(500, "ChangeMilestoneStatus", err) + return + } + } + ctx.Redirect(ctx.Repo.RepoLink + "/milestones?state=open") + case "close": + if !m.IsClosed { + m.ClosedDate = time.Now() + if err = models.ChangeMilestoneStatus(m, true); err != nil { + ctx.Handle(500, "ChangeMilestoneStatus", err) + return + } + } + ctx.Redirect(ctx.Repo.RepoLink + "/milestones?state=closed") + default: + ctx.Redirect(ctx.Repo.RepoLink + "/milestones") } +} - ctx.Redirect(ctx.Repo.RepoLink + "/milestones") +func DeleteMilestone(ctx *middleware.Context) { + if err := models.DeleteMilestoneByID(ctx.QueryInt64("id")); err != nil { + ctx.Flash.Error("DeleteMilestone: " + err.Error()) + } else { + ctx.Flash.Success(ctx.Tr("repo.milestones.deletion_success")) + } + + ctx.JSON(200, map[string]interface{}{ + "redirect": ctx.Repo.RepoLink + "/milestones", + }) } func IssueGetAttachment(ctx *middleware.Context) { @@ -1162,7 +1190,3 @@ func IssueGetAttachment(ctx *middleware.Context) { func PullRequest2(ctx *middleware.Context) { ctx.HTML(200, "repo/pr2/list") } - -func Milestones2(ctx *middleware.Context) { - ctx.HTML(200, "repo/milestone2/list") -} diff --git a/routers/user/home.go b/routers/user/home.go index 5e77b837..c38dba52 100644 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -350,13 +350,13 @@ func Issues(ctx *middleware.Context) { } } - issues[i].Repo, err = models.GetRepositoryById(issues[i].RepoId) + issues[i].Repo, err = models.GetRepositoryById(issues[i].RepoID) if err != nil { if models.IsErrRepoNotExist(err) { - log.Warn("user.Issues(GetRepositoryById #%d): repository not exist", issues[i].RepoId) + log.Warn("GetRepositoryById[%d]: repository not exist", issues[i].RepoID) continue } else { - ctx.Handle(500, fmt.Sprintf("user.Issues(GetRepositoryById #%d)", issues[i].RepoId), err) + ctx.Handle(500, fmt.Sprintf("GetRepositoryById[%d]", issues[i].RepoID), err) return } } diff --git a/templates/.VERSION b/templates/.VERSION index 2d7fe898..b7559a24 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.6.3.0805 Beta
\ No newline at end of file +0.6.4.0805 Beta
\ No newline at end of file diff --git a/templates/base/head.tmpl b/templates/base/head.tmpl index 9c05b02a..c5813f73 100644 --- a/templates/base/head.tmpl +++ b/templates/base/head.tmpl @@ -34,6 +34,9 @@ {{if .PageIsLabels}} <link rel="stylesheet" href="{{AppSubUrl}}/css/jquery.minicolors.css?v={{AppVer}}"> <script src="{{AppSubUrl}}/js/libs/jquery.minicolors.min.js?v={{AppVer}}"></script> + {{else if .PageIsMilestones}} + <link rel="stylesheet" href="{{AppSubUrl}}/css/jquery.datetimepicker.css?v={{AppVer}}"> + <script src="{{AppSubUrl}}/js/libs/jquery.datetimepicker.js?v={{AppVer}}"></script> {{end}} <title>{{if .Title}}{{.Title}} - {{end}}{{AppName}}</title> diff --git a/templates/repo/issue/create.tmpl b/templates/repo/issue/create.tmpl index de0c47ac..307be6aa 100644 --- a/templates/repo/issue/create.tmpl +++ b/templates/repo/issue/create.tmpl @@ -54,7 +54,7 @@ {{else}} <ul class="list-unstyled"> {{range .OpenMilestones}} - <li class="milestone-item" data-id="{{.Id}}"> + <li class="milestone-item" data-id="{{.ID}}"> <p><strong>{{.Name}}</strong></p> <!-- <p>due to 3 days later</p> --> </li> @@ -69,7 +69,7 @@ {{else}} <ul class="list-unstyled"> {{range .ClosedMilestones}} - <li class="milestone-item" data-id="{{.Id}}"> + <li class="milestone-item" data-id="{{.ID}}"> <p><strong>{{.Name}}</strong></p> <p>Closed {{TimeSince .ClosedDate $.Lang}}</p> </li> diff --git a/templates/repo/issue/labels.tmpl b/templates/repo/issue/labels.tmpl index b69988cd..4fcaec07 100644 --- a/templates/repo/issue/labels.tmpl +++ b/templates/repo/issue/labels.tmpl @@ -8,7 +8,7 @@ <form class="ui right form" action="{{$.RepoLink}}/labels/new" method="post"> {{.CsrfTokenHtml}} <div class="ui right floated secondary menu"> - <div class="item"> + <div class="input item"> <div class="ui large input"> <input class="new-label-input" name="title" placeholder="{{.i18n.Tr "repo.issues.new_label_placeholder"}}" required> </div> @@ -32,23 +32,25 @@ <div class="ui black label">{{.i18n.Tr "repo.issues.label_count" .NumLabels}}</div> </div> - <div class="label list"> - {{range .Labels}} - <li class="item"> - <div class="ui label" style="background-color: {{.Color}}"><i class="octicon octicon-tag"></i> {{.Name}}</div> - {{if $.IsRepositoryAdmin}} - <a class="ui right delete-label-button" href="#" data-url="{{$.RepoLink}}/labels/delete" data-id="{{.ID}}"><i class="octicon octicon-x"></i> {{$.i18n.Tr "repo.issues.label_delete"}}</a> - <a class="ui right edit-label-button" href="#" data-id={{.ID}} data-title={{.Name}} data-color={{.Color}}><i class="octicon octicon-pencil"></i> {{$.i18n.Tr "repo.issues.label_edit"}}</a> + <div class="sixteen wide column"> + <div class="label list"> + {{range .Labels}} + <li class="item"> + <div class="ui label" style="background-color: {{.Color}}"><i class="octicon octicon-tag"></i> {{.Name}}</div> + {{if $.IsRepositoryAdmin}} + <a class="ui right delete-button" href="#" data-url="{{$.RepoLink}}/labels/delete" data-id="{{.ID}}"><i class="octicon octicon-trashcan"></i> {{$.i18n.Tr "repo.issues.label_delete"}}</a> + <a class="ui right edit-label-button" href="#" data-id={{.ID}} data-title={{.Name}} data-color={{.Color}}><i class="octicon octicon-pencil"></i> {{$.i18n.Tr "repo.issues.label_edit"}}</a> + {{end}} + <a class="ui right open-issues" href="{{$.RepoLink}}/issues?labels={{.ID}}"><i class="octicon octicon-issue-opened"></i> {{$.i18n.Tr "repo.issues.label_open_issues" .NumOpenIssues}}</a> + </li> {{end}} - <a class="ui right open-issues" href="{{$.RepoLink}}/issues?labels={{.ID}}"><i class="octicon octicon-issue-opened"></i> {{$.i18n.Tr "repo.issues.label_open_issues" .NumOpenIssues}}</a> - </li> - {{end}} + </div> </div> </div> </div> {{if .IsRepositoryAdmin}} -<div class="ui basic delete-label modal"> +<div class="ui basic delete modal"> <div class="header"> {{.i18n.Tr "repo.issues.label_deletion"}} </div> diff --git a/templates/repo/issue/list.tmpl b/templates/repo/issue/list.tmpl index 21da0f54..128b3c0b 100644 --- a/templates/repo/issue/list.tmpl +++ b/templates/repo/issue/list.tmpl @@ -11,11 +11,11 @@ <div class="ui divider"></div> <div class="ui left"> <div class="ui tiny buttons"> - <a class="ui green basic button {{if not .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/issues?type={{$.ViewType}}&state=open&labels={{.SelectLabels}}"> + <a class="ui green basic button {{if not .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/issues?type={{$.ViewType}}&state=open&labels={{.SelectLabels}}&milestone={{.MilestoneID}}"> <i class="octicon octicon-issue-opened"></i> {{.i18n.Tr "repo.issues.open_tab" .IssueStats.OpenCount}} </a> - <a class="ui red basic button {{if .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/issues?type={{.ViewType}}&state=closed&labels={{.SelectLabels}}"> + <a class="ui red basic button {{if .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/issues?type={{.ViewType}}&state=closed&labels={{.SelectLabels}}&milestone={{.MilestoneID}}"> <i class="octicon octicon-issue-closed"></i> {{.i18n.Tr "repo.issues.close_tab" .IssueStats.ClosedCount}} </a> @@ -28,23 +28,24 @@ <i class="dropdown icon"></i> </span> <div class="menu"> - <a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}">{{.i18n.Tr "repo.issues.filter_label_no_select"}}</a> + <a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_label_no_select"}}</a> {{range .Labels}} - <a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}"><span class="octicon {{if eq $.SelectLabels .ID}}octicon-check{{end}}"></span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name}}</a> + <a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}"><span class="octicon {{if eq $.SelectLabels .ID}}octicon-check{{end}}"></span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name}}</a> {{end}} </div> </div> - <!-- <div class="ui {{if not .Milestones}}disabled{{end}} pointing dropdown jump item"> + <div class="ui {{if not .Milestones}}disabled{{end}} pointing dropdown jump item"> <span class="text"> {{.i18n.Tr "repo.issues.filter_milestone"}} <i class="dropdown icon"></i> </span> <div class="menu"> + <a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.SelectLabels}}">{{.i18n.Tr "repo.issues.filter_milestone_no_select"}}</a> {{range .Milestones}} - <a class="item" href="{{$.RepoLink}}/issues">{{.Name}}</a> + <a class="clickable item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.ID}}"><span class="octicon {{if eq $.MilestoneID .ID}}octicon-check{{end}}"></span> <span class="name">{{.Name}}</span></a> {{end}} </div> - </div> --> + </div> <!-- <div class="ui {{if not .Assignees}}disabled{{end}} pointing dropdown jump item"> <span class="text"> {{.i18n.Tr "repo.issues.filter_assignee"}} @@ -62,51 +63,65 @@ <i class="dropdown icon"></i> </span> <div class="menu"> - <a class="{{if eq .ViewType "all"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=all&state={{$.State}}&labels={{.SelectLabels}}">{{.i18n.Tr "repo.issues.filter_type.all_issues"}}</a> - <a class="{{if eq .ViewType "assigned"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=assigned&state={{$.State}}&labels={{.SelectLabels}}">{{.i18n.Tr "repo.issues.filter_type.assigned_to_you"}}</a> - <a class="{{if eq .ViewType "created_by"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=created_by&state={{$.State}}&labels={{.SelectLabels}}">{{.i18n.Tr "repo.issues.filter_type.created_by_you"}}</a> - <a class="{{if eq .ViewType "mentioned"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=mentioned&state={{$.State}}&labels={{.SelectLabels}}">{{.i18n.Tr "repo.issues.filter_type.mentioning_you"}}</a> + <a class="{{if eq .ViewType "all"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=all&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_type.all_issues"}}</a> + <a class="{{if eq .ViewType "assigned"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=assigned&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_type.assigned_to_you"}}</a> + <a class="{{if eq .ViewType "created_by"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=created_by&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_type.created_by_you"}}</a> + <a class="{{if eq .ViewType "mentioned"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=mentioned&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_type.mentioning_you"}}</a> </div> </div> </div> - <div class="issue list"> - {{range .Issues}} - {{ $timeStr:= TimeSince .Created $.Lang }} - <li class="item"> - <div class="ui {{if .IsRead}}black{{else}}green{{end}} label">#{{.Index}}</div> - <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Name}}</a> + <div class="sixteen wide column"> + <div class="issue list"> + {{range .Issues}} + {{ $timeStr:= TimeSince .Created $.Lang }} + <li class="item"> + <div class="ui {{if .IsRead}}black{{else}}green{{end}} label">#{{.Index}}</div> + <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Name}}</a> + + {{range .Labels}} + <a class="ui label" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}" style="background-color: {{.Color}}">{{.Name}}</a> + {{end}} - {{range .Labels}} - <a class="ui label" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}" style="background-color: {{.Color}}">{{.Name}}</a> - {{end}} + {{if .NumComments}} + <span class="comment ui right"><i class="octicon octicon-comment"></i> {{.NumComments}}</span> + {{end}} - {{if .NumComments}}<span class="comment ui right"><i class="octicon octicon-comment"></i> {{.NumComments}}</span>{{end}} - <p class="desc">{{$.i18n.Tr "repo.issues.opened_by" $timeStr .Poster.Name|Str2html}}</p> - </li> - {{end}} - - {{with .Page}} - {{if gt .Total 1}} - <div class="center page buttons"> - <div class="ui borderless pagination menu"> - <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Previous}}"{{end}}> - <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} - </a> - {{range .Pages}} - {{if eq .Num -1}} - <a class="disabled item">...</a> - {{else}} - <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Num}}"{{end}}>{{.Num}}</a> - {{end}} - {{end}} - <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Next}}"{{end}}> - {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> - </a> + <p class="desc"> + {{$.i18n.Tr "repo.issues.opened_by" $timeStr .Poster.Name|Str2html}} + {{if .Milestone}} + {{with .Milestone}} + <a class="milestone" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.ID}}"> + <span class="octicon octicon-milestone"></span> {{.Name}} + </a> + {{end}} + {{end}} + </p> + </li> + {{end}} + + {{with .Page}} + {{if gt .TotalPages 1}} + <div class="center page buttons"> + <div class="ui borderless pagination menu"> + <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&page={{.Previous}}"{{end}}> + <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} + </a> + {{range .Pages}} + {{if eq .Num -1}} + <a class="disabled item">...</a> + {{else}} + <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&page={{.Num}}"{{end}}>{{.Num}}</a> + {{end}} + {{end}} + <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&page={{.Next}}"{{end}}> + {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> + </a> + </div> </div> + {{end}} + {{end}} </div> - {{end}} - {{end}} </div> </div> </div> diff --git a/templates/repo/issue/list_old.tmpl b/templates/repo/issue/list_old.tmpl deleted file mode 100644 index 8c267382..00000000 --- a/templates/repo/issue/list_old.tmpl +++ /dev/null @@ -1,120 +0,0 @@ -{{template "base/head_old" .}} -{{template "base/navbar" .}} -{{template "repo/nav" .}} -{{template "repo/toolbar" .}} -<div id="body" class="container"> - <div id="issue"> - <div class="col-md-3 filters"> - <div class="filter-list"> - <ul class="list-unstyled"> - <li><a href="{{.RepoLink}}/issues?state={{.State}}"{{if eq .ViewType "all"}} class="active"{{end}}>All Issues <strong class="pull-right">{{.IssueStats.AllCount}}</strong></a></li> - <li><a href="{{.RepoLink}}/issues?type=assigned&state={{.State}}"{{if eq .ViewType "assigned"}} class="active"{{end}}>Assigned to you <strong class="pull-right">{{.IssueStats.AssignCount}}</strong></a></li> - <li><a href="{{.RepoLink}}/issues?type=created_by&state={{.State}}"{{if eq .ViewType "created_by"}} class="active"{{end}}>Created by you <strong class="pull-right">{{.IssueStats.CreateCount}}</strong></a></li> - <li><a href="{{.RepoLink}}/issues?type=mentioned&state={{.State}}"{{if eq .ViewType "mentioned"}} class="active"{{end}}>Mentioning you <strong class="pull-right">{{.IssueStats.MentionCount}}</strong></a></li> - </ul> - </div> - <div class="label-filter"> - <h4>Label</h4> - <ul class="list-unstyled" id="label-list" data-ajax="{{$.RepoLink}}/issues/labels/delete"> - {{range .Labels}} - <li class="label-item{{if eq $.SelectLabels .Id}} label-selected{{end}}" id="label-{{.Id}}" data-id="{{.Id}}"> - <a href="?type={{$.ViewType}}&state={{$.State}}{{if not (eq $.SelectLabels .Id)}}&labels={{.Id}}{{end}}"> - <span class="pull-right count">{{if $.IsShowClosed}}{{.NumClosedIssues}}{{else}}{{.NumOpenIssues}}{{end}}</span> - <span class="color" style="background-color: {{.Color}}" data-color="{{.Color}}"></span> - <span class="name">{{.Name}}</span> - </a> - <a class="del pull-right" href="#" data-id="{{.Id}}"><i class="fa fa-times-circle-o"></i></a> - </li> - {{end}} - {{if or .IsRepositoryOwner .IsAdmin}} - <li class="label-change-li" style="display: none"> - <form id="label-change-form" action="{{$.RepoLink}}/issues/labels/edit" method="post"> - {{.CsrfTokenHtml}} - <div class="input-group label-change-color-picker form-group" style="margin-bottom: 2px"> - <input type="text" class="form-control" name="title" required="required" id="label-name-change-ipt"/> - <input type="hidden" name="color" id="label-color-change-ipt" value="#444444"/> - <span class="input-group-addon"><i></i></span> - <input type="hidden" name="id" id="label-change-id-ipt" value="0"/> - </div> - <div class="form-group text-right"> - <input class="form-control input-sm" type="text" id="label-color-change-ipt2" value="#444444"/> - <button class="btn btn-default btn-sm">Save</button> - </div> - </form> - </li> - {{end}} - </ul> - {{if or .IsRepositoryOwner .IsAdmin}} - <button class="btn btn-default btn-block label-button" id="label-manage-btn">Manage Labels</button> - <hr/> - <form id="label-add-form" action="{{$.RepoLink}}/issues/labels/new" method="post"> - {{.CsrfTokenHtml}} - <h5><strong>New Label</strong></h5> - <div class="input-group label-color-picker form-group"> - <input type="text" class="form-control" name="title" required="required" id="label-name-ipt"/> - <input type="hidden" name="color" id="label-color-ipt" value="#444444"/> - <span class="input-group-addon"><i></i></span> - </div> - <div class="form-group text-right"> - <input class="form-control input-sm" type="text" id="label-color-ipt2" value="#444444"/> - <button class="btn btn-default btn-sm">Create</button> - </div> - </form> - {{end}} - </div> - </div> - <div class="col-md-9"> - {{template "base/alert" .}} - <div class="filter-option"> - <div class="btn-group"> - <a class="btn btn-default issue-open{{if not .IsShowClosed}} active{{end}}" href="{{.RepoLink}}/issues?type={{.ViewType}}">{{.IssueStats.OpenCount}} Open</a> - <a class="btn btn-default issue-close{{if .IsShowClosed}} active{{end}}" href="{{.RepoLink}}/issues?type={{.ViewType}}&state=closed">{{.IssueStats.ClosedCount}} Closed</a> - </div> - </div> - <div class="issues list-group"> - {{range .Issues}}{{if .Poster}} - <div class="list-group-item issue-item{{if not .IsRead}} unread{{end}}" id="issue-{{.Id}}"> - <span class="number pull-right">#{{.Index}}</span> - <h5 class="title"> - <a href="{{$.RepoLink}}/issues/{{.Index}}">{{.Name}}</a> - <span class="labels"> - {{range .Labels}} - <span class="label" style="background-color: {{.Color}}">{{.Name}}</span> - {{end}} - </span> - </h5> - <p class="info"> - <span class="author"><img class="avatar" src="{{.Poster.AvatarLink}}" alt="" width="20"/> - <a href="{{AppSubUrl}}/{{.Poster.Name}}">{{.Poster.Name}}</a></span> - <span class="time">{{TimeSince .Created $.Lang}}</span> - <span class="comment"><i class="fa fa-comments"></i> {{.NumComments}}</span> - </p> - </div> - {{end}}{{end}} - </div> - </div> - </div> - </div> -</div> -<script src="{{AppSubUrl}}/js/bootstrap-colorpicker.min.js"></script> -<script> - $(function(){ - $('.label-color-picker').colorpicker({ - input: $('#label-color-ipt') - }).on('changeColor', function (ev) { - var $ipt = $('#label-color-ipt2'); - if ($ipt.val().length != 4) { - $ipt.val(ev.color.toHex()); - } - }); - $('.label-change-color-picker').colorpicker({ - input:$('#label-color-change-ipt') - }).on('changeColor', function (ev) { - var $ipt = $('#label-color-change-ipt2'); - if ($ipt.val().length != 4) { - $ipt.val(ev.color.toHex()); - } - }); - }); -</script> -{{template "base/footer_old" .}} diff --git a/templates/repo/issue/milestone.tmpl b/templates/repo/issue/milestone.tmpl deleted file mode 100644 index 6a9e5f37..00000000 --- a/templates/repo/issue/milestone.tmpl +++ /dev/null @@ -1,43 +0,0 @@ -{{template "base/head_old" .}} -{{template "base/navbar" .}} -{{template "repo/nav" .}} -{{template "repo/toolbar" .}} -<div id="body" class="container"> - <div id="issue"> - <div class="col-md-3 filter-list"> - <ul class="list-unstyled"> - <li><a href="{{.RepoLink}}/milestones"{{if eq .State "open"}} class="active"{{end}}>Open Milestones <strong class="pull-right">{{.Repository.NumOpenMilestones}}</strong></a></li> - <li><a href="{{.RepoLink}}/milestones?state=closed"{{if eq .State "closed"}} class="active"{{end}}>Close Milestones <strong class="pull-right">{{.Repository.NumClosedMilestones}}</strong></a></li> - </ul> - <hr/> - <a href="{{.RepoLink}}/milestones/new" class="text-center"> - <button class="btn btn-default btn-block">Create new milestone</button> - </a> - </div> - <div class="col-md-9"> - <div class="milestones list-group"> - {{range .Milestones}} - <div class="list-group-item milestone-item"> - <h4 class="title pull-left"><a href="{{$.RepoLink}}/issues?milestone={{.Index}}{{if .IsClosed}}&state=closed{{end}}">{{.Name}}</a></h4> - <span class="issue-open label label-success">{{.NumOpenIssues}}</span> - <span class="issue-close label label-warning">{{.NumClosedIssues}}</span> - <p class="actions pull-right"> - <a href="{{$.RepoLink}}/milestones/{{.Index}}/edit">Edit</a> - {{if .IsClosed}} - <a href="{{$.RepoLink}}/milestones/{{.Index}}/open">Open</a> - {{else}} - <a href="{{$.RepoLink}}/milestones/{{.Index}}/close">Close</a> - {{end}} - <a class="text-danger" href="{{$.RepoLink}}/milestones/{{.Index}}/delete">Delete</a> - <a href="{{$.RepoLink}}/issues?milestone={{.Index}}{{if .IsClosed}}&state=closed{{end}}">Issues</a> - </p> - <hr/> - <p class="description">{{.RenderedContent | Str2html}}</p> - </div> - {{end}} - </div> - </div> - </div> -</div> -</div> -{{template "base/footer_old" .}} diff --git a/templates/repo/issue/milestone_edit.tmpl b/templates/repo/issue/milestone_edit.tmpl deleted file mode 100644 index dee36152..00000000 --- a/templates/repo/issue/milestone_edit.tmpl +++ /dev/null @@ -1,61 +0,0 @@ -{{template "base/head_old" .}} -{{template "base/navbar" .}} -{{template "repo/nav" .}} -{{template "repo/toolbar" .}} -<div id="body" class="container"> - <div id="issue"> - <form class="form" action="{{.RepoLink}}/milestones/{{.Milestone.Index}}/edit" method="post" id="issue-create-form"> - {{.CsrfTokenHtml}} - {{template "base/alert" .}} - <div class="col-md-1"> - <img class="avatar" src="{{.SignedUser.AvatarLink}}" alt=""/> - </div> - <div class="col-md-8 panel panel-default"> - <div class="form-group panel-body"> - <input class="form-control input-lg" type="text" name="title" required="required" placeholder="Title" value="{{.Milestone.Name}}" /> - </div> - <div class="form-group panel-body"> - <div class="md-help pull-right"><!-- todo help link --> - Content with <a href="https://help.github.com/articles/markdown-basics">Markdown</a> - </div> - <ul class="nav nav-tabs" data-init="tabs"> - <li class="active issue-write"><a href="#issue-textarea" data-toggle="tab">Write</a></li> - <li class="issue-preview"><a href="#issue-preview" data-toggle="tab" data-ajax="/api/v1/markdown" data-ajax-name="issue-preview" data-ajax-context="{{.RepoLink}}" data-ajax-method="post" data-preview="#issue-preview">Preview</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane" id="issue-textarea"> - <div class="form-group"> - <textarea class="form-control" name="content" id="issue-content" rows="10" placeholder="Write some content" data-ajax-rel="issue-preview" data-ajax-val="val" data-ajax-field="text">{{.Milestone.Content}}</textarea> - </div> - </div> - <div class="tab-pane issue-preview-content" id="issue-preview">loading...</div> - </div> - </div> - <div class="text-right panel-body"> - <div class="form-group"> - <input type="hidden" value="id" name="repo-id"/> - <button class="btn-success btn">Update milestone</button> - </div> - </div> - </div> - <div class="col-md-3"> - <h4>Milestone Due Date</h4> - <div class="form-group"> - <input name="due_date" type="text" class="form-control" id="milestone-due-date" value="{{.Milestone.DeadlineString}}"> - </div> - </div> - </form> - </div> -</div> -<script src="/js/bootstrap-datepicker.js"></script> -<script> - $(function(){ - $('#milestone-due-date').datepicker({ - weekStart: 1, - todayBtn: "linked", - calendarWeeks: true, - todayHighlight: true - }); - }); -</script> -{{template "base/footer_old" .}} diff --git a/templates/repo/issue/milestone_new.tmpl b/templates/repo/issue/milestone_new.tmpl index f90772f6..8fd4d1bb 100644 --- a/templates/repo/issue/milestone_new.tmpl +++ b/templates/repo/issue/milestone_new.tmpl @@ -1,62 +1,70 @@ -{{template "base/head_old" .}} -{{template "base/navbar" .}} -{{template "repo/nav" .}} -{{template "repo/toolbar" .}} -<div id="body" class="container"> - <div id="issue"> - <form class="form" action="{{.RepoLink}}/milestones/new" method="post" id="issue-create-form"> - {{.CsrfTokenHtml}} - {{template "base/alert" .}} - <div class="col-md-1"> - <img class="avatar" src="{{.SignedUser.AvatarLink}}" alt=""/> - </div> - <div class="col-md-8 panel panel-default"> - <div class="form-group panel-body"> - <input class="form-control input-lg" type="text" name="title" required="required" placeholder="Title" value="{{.title}}" /> - </div> - <div class="form-group panel-body"> - <div class="md-help pull-right"><!-- todo help link --> - Content with <a href="https://help.github.com/articles/markdown-basics">Markdown</a> - </div> - <ul class="nav nav-tabs" data-init="tabs"> - <li class="active issue-write"><a href="#issue-textarea" data-toggle="tab">Write</a></li> - <li class="issue-preview"><a href="#issue-preview" data-toggle="tab" data-ajax="/api/v1/markdown" data-ajax-name="issue-preview" data-ajax-context="{{.RepoLink}}" data-ajax-method="post" data-preview="#issue-preview">Preview</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane" id="issue-textarea"> - <div class="form-group"> - <textarea class="form-control" name="content" id="issue-content" rows="10" placeholder="Write some content" data-ajax-rel="issue-preview" data-ajax-val="val" data-ajax-field="text">{{.content}}</textarea> - </div> - </div> - <div class="tab-pane issue-preview-content" id="issue-preview">loading...</div> - </div> - </div> - <div class="text-right panel-body"> - <div class="form-group"> - <input type="hidden" value="id" name="repo-id"/> - <button class="btn-success btn">Create new milestone</button> - </div> - </div> - </div> - <div class="col-md-3"> - <h4>Milestone Due Date</h4> - - <div class="form-group"> - <input name="due_date" type="text" class="form-control" id="milestone-due-date"> - </div> - </div> - </form> - </div> +{{template "base/head" .}} +<div class="repository new milestone"> + {{template "repo/header" .}} + <div class="ui middle page grid body"> + <div class="navbar"> + {{template "repo/issue/navbar" .}} + {{if and .IsRepositoryAdmin .PageIsEditMilestone}} + <div class="ui right floated secondary menu"> + <a class="ui green button" href="{{$.RepoLink}}/milestones/new">{{.i18n.Tr "repo.milestones.new"}}</a> + </div> + {{end}} + </div> + <div class="ui divider"></div> + <div class="sixteen wide column page grid"> + <h2 class="ui dividing header"> + {{if .PageIsEditMilestone}} + {{.i18n.Tr "repo.milestones.edit"}} + <div class="sub header">{{.i18n.Tr "repo.milestones.edit_subheader"}}</div> + {{else}} + {{.i18n.Tr "repo.milestones.new"}} + <div class="sub header">{{.i18n.Tr "repo.milestones.new_subheader"}}</div> + {{end}} + </h2> + <form class="ui form grid" action="{{.Link}}" method="post"> + {{.CsrfTokenHtml}} + {{if .Flash}} + <div class="sixteen wide column"> + {{template "base/alert" .}} + </div> + {{end}} + <div class="eleven wide column"> + <div class="field {{if .Err_Title}}error{{end}}"> + <label>{{.i18n.Tr "repo.milestones.title"}}</label> + <input name="title" placeholder="{{.i18n.Tr "repo.milestones.title"}}" value="{{.title}}" autofocus required> + </div> + <div class="field"> + <label>{{.i18n.Tr "repo.milestones.desc"}}</label> + <textarea name="content">{{.content}}</textarea> + </div> + </div> + <div class="three wide column"> + <div class="field {{if .Err_Deadline}}error{{end}}"> + <label> + {{.i18n.Tr "repo.milestones.due_date"}} + <a id="clear-date" href="#">{{.i18n.Tr "repo.milestones.clear"}}</a> + </label> + <input id="deadline" name="deadline" value="{{.deadline}}"> + </div> + <div class="field"> + <input class="milestone datepicker" data-lang="{{.DateLang}}" data-start-date="{{.deadline}}"> + </div> + </div> + <div class="ui divider"></div> + {{if .PageIsEditMilestone}} + <button class="ui right green button"> + {{.i18n.Tr "repo.milestones.modify"}} + </button> + <a class="ui right blue basic button" href="{{.RepoLink}}/milestones"> + {{.i18n.Tr "repo.milestones.cancel"}} + </a> + {{else}} + <button class="ui right green button"> + {{.i18n.Tr "repo.milestones.create"}} + </button> + {{end}} + </form> + </div> + </div> </div> -<script src="/js/bootstrap-datepicker.js"></script> -<script> - $(function(){ - $('#milestone-due-date').datepicker({ - weekStart: 1, - todayBtn: "linked", - calendarWeeks: true, - todayHighlight: true - }); - }); -</script> -{{template "base/footer_old" .}} +{{template "base/footer" .}}
\ No newline at end of file diff --git a/templates/repo/issue/milestones.tmpl b/templates/repo/issue/milestones.tmpl new file mode 100644 index 00000000..46ba29d8 --- /dev/null +++ b/templates/repo/issue/milestones.tmpl @@ -0,0 +1,127 @@ +{{template "base/head" .}} +<div class="repository milestones"> + {{template "repo/header" .}} + <div class="ui middle page grid body"> + <div class="navbar"> + {{template "repo/issue/navbar" .}} + {{if .IsRepositoryAdmin}} + <div class="ui right floated secondary menu"> + <a class="ui green button" href="{{$.Link}}/new">{{.i18n.Tr "repo.milestones.new"}}</a> + </div> + {{end}} + </div> + <div class="ui divider"></div> + {{template "repo/issue/alert" .}} + <div class="ui left"> + <div class="ui tiny buttons"> + <a class="ui green basic button {{if not .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/milestones?state=open"> + <i class="octicon octicon-milestone"></i> + {{.i18n.Tr "repo.milestones.open_tab" .OpenCount}} + </a> + <a class="ui red basic button {{if .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/milestones?state=closed"> + <i class="octicon octicon-milestone"></i> + {{.i18n.Tr "repo.milestones.close_tab" .ClosedCount}} + </a> + </div> + </div> + + <div class="sixteen wide column"> + <div class="milestone list"> + {{range .Milestones}} + <li class="item"> + <i class="octicon octicon-milestone"></i> <a href="{{$.RepoLink}}/issues?state={{$.State}}&milestone={{.ID}}">{{.Name}}</a> + <div class="ui right blue progress" data-percent="{{.Completeness}}"> + <div class="bar" {{if not .Completeness}}style="background-color: transparent"{{end}}> + <div class="progress"></div> + </div> + </div> + <div class="meta"> + {{ $closedDate:= TimeSince .ClosedDate $.Lang }} + {{if .IsClosed}} + <span class="octicon octicon-clock"></span> {{$.i18n.Tr "repo.milestones.closed" $closedDate|Str2html}} + {{else}} + <span class="octicon octicon-calendar"></span> + {{if .DeadlineString}} + <span {{if .IsOverDue}}class="overdue"{{end}}>{{.DeadlineString}}</span> + {{else}} + {{$.i18n.Tr "repo.milestones.no_due_date"}} + {{end}} + {{end}} + <span class="issue-stats"> + <i class="octicon octicon-issue-opened"></i> {{$.i18n.Tr "repo.issues.open_tab" .NumOpenIssues}} + <i class="octicon octicon-issue-closed"></i> {{$.i18n.Tr "repo.issues.close_tab" .NumClosedIssues}} + </span> + </div> + {{if $.IsRepositoryAdmin}} + <div class="ui right operate"> + <a href="{{$.Link}}/{{.Index}}/edit" data-id={{.ID}} data-title={{.Name}}><i class="octicon octicon-pencil"></i> {{$.i18n.Tr "repo.issues.label_edit"}}</a> + {{if .IsClosed}} + <a href="{{$.Link}}/{{.Index}}/open" data-id={{.ID}} data-title={{.Name}}><i class="octicon octicon-check"></i> {{$.i18n.Tr "repo.milestones.open"}}</a> + {{else}} + <a href="{{$.Link}}/{{.Index}}/close" data-id={{.ID}} data-title={{.Name}}><i class="octicon octicon-x"></i> {{$.i18n.Tr "repo.milestones.close"}}</a> + {{end}} + <a class="delete-button" href="#" data-url="{{$.RepoLink}}/milestones/delete" data-id="{{.ID}}"><i class="octicon octicon-trashcan"></i> {{$.i18n.Tr "repo.issues.label_delete"}}</a> + </div> + {{if .Content}} + <div class="content"> + {{.RenderedContent|Str2html}} + </div> + {{end}} + {{end}} + </li> + {{end}} + + {{with .Page}} + {{if gt .TotalPages 1}} + <div class="center page buttons"> + <div class="ui borderless pagination menu"> + <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?state={{$.State}}&page={{.Previous}}"{{end}}> + <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} + </a> + {{range .Pages}} + {{if eq .Num -1}} + <a class="disabled item">...</a> + {{else}} + <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?state={{$.State}}&page={{.Num}}"{{end}}>{{.Num}}</a> + {{end}} + {{end}} + <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?state={{$.State}}&page={{.Next}}"{{end}}> + {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> + </a> + </div> + </div> + {{end}} + {{end}} + </div> + </div> + </div> +</div> + +{{if .IsRepositoryAdmin}} +<div class="ui basic delete modal"> + <div class="header"> + {{.i18n.Tr "repo.milestones.deletion"}} + </div> + <div class="content"> + <div class="image"> + <i class="trash icon"></i> + </div> + <div class="description"> + <p>{{.i18n.Tr "repo.milestones.deletion_desc"}}</p> + </div> + </div> + <div class="actions"> + <div class="two fluid ui inverted buttons"> + <div class="ui red basic inverted button"> + <i class="remove icon"></i> + {{.i18n.Tr "modal.no"}} + </div> + <div class="ui green basic inverted positive button"> + <i class="checkmark icon"></i> + {{.i18n.Tr "modal.yes"}} + </div> + </div> + </div> +</div> +{{end}} +{{template "base/footer" .}}
\ No newline at end of file diff --git a/templates/repo/issue/navbar.tmpl b/templates/repo/issue/navbar.tmpl index beff907d..509ee5f6 100644 --- a/templates/repo/issue/navbar.tmpl +++ b/templates/repo/issue/navbar.tmpl @@ -2,6 +2,6 @@ <div class="ui compact menu"> <a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues">{{.i18n.Tr "repo.issues"}}</a> <a class="{{if .PageIsLabels}}active{{end}} item" href="{{.RepoLink}}/labels">{{.i18n.Tr "repo.labels"}}</a> - <a class="item" href="{{.RepoLink}}/milestones">{{.i18n.Tr "repo.milestones"}}</a> + <a class="{{if .PageIsMilestones}}active{{end}} item" href="{{.RepoLink}}/milestones">{{.i18n.Tr "repo.milestones"}}</a> </div> </div>
\ No newline at end of file diff --git a/templates/repo/issue/view.tmpl b/templates/repo/issue/view.tmpl index fa505df7..61adfe61 100644 --- a/templates/repo/issue/view.tmpl +++ b/templates/repo/issue/view.tmpl @@ -197,7 +197,7 @@ <p>None yet</p> {{end}} </div> - <div class="milestone" data-milestone="{{.Milestone.Id}}" data-ajax="{{.Issue.Index}}/milestone"> + <div class="milestone" data-milestone="{{.Milestone.ID}}" data-ajax="{{.Issue.Index}}/milestone"> <div class="pull-right action"> {{if .IsRepositoryOwner}} <button class="btn btn-default btn-sm" data-toggle="dropdown"> @@ -219,7 +219,7 @@ {{else}} <ul class="list-unstyled"> {{range .OpenMilestones}} - <li class="milestone-item" data-id="{{.Id}}"> + <li class="milestone-item" data-id="{{.ID}}"> <p><strong>{{.Name}}</strong></p> <!-- <p>due to 3 days later</p> --> </li> @@ -234,7 +234,7 @@ {{else}} <ul class="list-unstyled"> {{range .ClosedMilestones}} - <li class="milestone-item" data-id="{{.Id}}"> + <li class="milestone-item" data-id="{{.ID}}"> <p><strong>{{.Name}}</strong></p> <p>Closed {{TimeSince .ClosedDate $.Lang}}</p> </li> diff --git a/templates/repo/milestone2/list.tmpl b/templates/repo/milestone2/list.tmpl deleted file mode 100644 index 68644424..00000000 --- a/templates/repo/milestone2/list.tmpl +++ /dev/null @@ -1,58 +0,0 @@ -{{template "ng/base/head" .}} -{{template "ng/base/header" .}} -<div id="repo-wrapper"> - {{template "repo/header_old" .}} - <div class="issue-main container repo-wide-wrapper"> - <ul id="issue-list-nav" class="menu menu-line"> - <li><a href="#">Issue</a></li> - <li><a href="#">Pull Request</a></li> - <li><a href="#">Labels</a></li> - <li class="current"><a href="#">Milestones</a></li> - <li class="right" id="milestone-new"><a href="#"><button id="issue-new-btn" class="btn btn-green text-bold">New Milestone</button></a></li> - </ul> - <div id="issue-list-container"> - <div id="issue-list-menu"> - <div class="left"> - <span class="mark open hover"><a href="#"> - <i class="octicon octicon-milestone"></i> 88 Open - </a></span> - <span class="mark close"><a href=""> - <i class="octicon octicon-issue-closed"></i> 12 Close - </a></span> - </div> - <div class="clear"></div> - </div> - <ul id="milestone-list" class="list-no-style"> - <li class="item" id="milestone-id"> - <!--<a class="comment" href="#"> - <i class="octicon octicon-comment"></i> 7 - </a>--> - <p class="title text-bold"> - <i class="octicon octicon-milestone"></i> - <a href="#" class="title-text">Delete account text</a> - </p> - <p class="desc"> - <i class="octicon octicon-clock"></i> Updated 3 days ago - <i class="octicon octicon-calendar"></i> Due to Dec 31,2014 - </p> - <div class="content"> - In this version of release, users are able to register and log in/out on Gogs, setting up SSH keys and do most of Git operations through SSH with public repositories. And Web UI only for view of Git data, no extra features are supported. - </div> - <div class="action"> - <p class="status-bar"> - <span class="closed">closed 12</span> - <span class="inline-block bar"><span class="inline-block opening"></span></span> - <span class="open">12 open</span> - </p> - <div class="action-bar text-right"> - <a href="#">Edit</a> - <a href="#">Delete</a> - <a href="#" class="text-red">Close</a> - </div> - </div> - </li> - </ul> - </div> - </div> -</div> -{{template "ng/base/footer" .}}
\ No newline at end of file |